From 81b5da86c30c87a70dd9031821abfcf855da50b1 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 10 Nov 2023 11:24:30 +0000 Subject: [PATCH] Built from commit 'b0e3466' --- .nojekyll | 0 404.html | 16 + assets/css/styles.9610a963.css | 1 + ...cling-8cbf643933baa1262460838cc4b483ae.png | Bin 0 -> 44134 bytes ...pling-1618c246583304921e59eced813219f2.png | Bin 0 -> 237031 bytes ..._line-98e32f3b0d5332a371ec4bb2dbc66da8.png | Bin 0 -> 43526 bytes ...speed-91a2c845dc627195fee373c1c63d952d.PNG | Bin 0 -> 47269 bytes ...oking-e0ac6b7a8379c76a8f29199d7aa9086c.png | Bin 0 -> 45513 bytes ...ssure-c971bb4cd1ee2f4d1cd9827d6231364c.png | Bin 0 -> 157773 bytes ...rview-26f2e87a69f9a685f123b818e6bed313.png | Bin 0 -> 38869 bytes ...ation-9c9342f8d3a926d760096a17ccb76556.svg | 4330 ++ ...chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png | Bin 0 -> 43536 bytes ..._plot-d4eee4126032e046bf374ef66ceb9946.png | Bin 0 -> 16617 bytes ..._plot-527cac79a8c53527147492b170308459.png | Bin 0 -> 14318 bytes ...essor-3493b127c832898d93b5231594efa8d3.png | Bin 0 -> 69926 bytes ...chart-28c5f110972461aba840e82b0962c3d2.png | Bin 0 -> 66545 bytes ...reams-415751902a6078520845f70740eaa1af.png | Bin 0 -> 59154 bytes ...t_eff-136e9a9dd1af0700084ddf17be0d4453.PNG | Bin 0 -> 12910 bytes ..._head-ec0fc7f624752c8c95bd7c3f828090a3.PNG | Bin 0 -> 14284 bytes ...arity-3e43516a1e0246a2e125d4980006b137.png | Bin 0 -> 19396 bytes ...y_pfd-ad59578d69ea3d3267f646b9d8141822.jpg | Bin 0 -> 1261426 bytes ...oking-dc5aedeb280843ea22445ce83731b8dc.png | Bin 0 -> 46036 bytes ...ample-5b8c9832693a18b6500cf408c0b4873b.png | Bin 0 -> 150701 bytes assets/js/00440000.e6ea2287.js | 1 + assets/js/00bdc23f.963702a5.js | 1 + assets/js/0425b884.a3565346.js | 1 + assets/js/06adec10.c15c0771.js | 1 + assets/js/06dd1efa.1e4f2ec1.js | 1 + assets/js/071a0eb8.b215d19c.js | 1 + assets/js/0745e7f0.bbd54cb0.js | 1 + assets/js/074935d7.9df0074a.js | 1 + assets/js/07b341f3.f53a0fdc.js | 1 + assets/js/084f7ebf.d236a910.js | 1 + assets/js/0aeda122.4e36fb5a.js | 1 + assets/js/0f7b5825.f8427b6c.js | 1 + assets/js/0fd76486.63b58892.js | 1 + assets/js/10c684b0.148b0114.js | 1 + assets/js/11516e85.b4fac2cd.js | 1 + assets/js/1287dd43.3adbfe17.js | 1 + assets/js/1300feb7.78be5d30.js | 1 + assets/js/1341.f7fb1046.js | 1 + assets/js/14eb3368.277da0ae.js | 1 + assets/js/1573.c871fc28.js | 1 + assets/js/15962da1.a352d3e6.js | 1 + assets/js/163041ea.9c2da84e.js | 1 + assets/js/17896441.998554a7.js | 1 + assets/js/1826.4f989084.js | 1 + assets/js/185.d87a260a.js | 12455 +++++ assets/js/1a4e3797.46d13a77.js | 1 + assets/js/1be78505.276fbb10.js | 1 + assets/js/1c663d3d.d1f01d12.js | 1 + assets/js/1df93b7f.a089593f.js | 1 + assets/js/1e7de7fe.c4a8e353.js | 1 + assets/js/1f60d0d4.297d6f23.js | 1 + assets/js/211.c8c05584.js | 1 + assets/js/216.5ae6451c.js | 12696 +++++ assets/js/22f0e129.44175121.js | 1 + assets/js/234.9ea03c85.js | 558 + assets/js/2494.4009d11f.js | 1 + assets/js/2566.3eb3255f.js | 1 + assets/js/2781f0ad.eabf1c22.js | 1 + assets/js/2855.9a4f1aa2.js | 1 + assets/js/2899.8d82b451.js | 1 + assets/js/29367e59.d8e53898.js | 1 + assets/js/295f424e.04a4238d.js | 1 + assets/js/29d00dd8.9fda4441.js | 1 + assets/js/2b15d891.d448c52e.js | 1 + assets/js/2b2be347.116a0d06.js | 1 + assets/js/2c19a041.a0ac934f.js | 1 + assets/js/2c73e373.147b2ba8.js | 1 + assets/js/2ce3b5da.5391bc8e.js | 1 + assets/js/2cedaf2f.b313f202.js | 1 + assets/js/2df92a48.bac285c1.js | 1 + assets/js/2f04f592.57768e9a.js | 1 + assets/js/314.17af5036.js | 1707 + assets/js/3261da49.5c3db358.js | 1 + assets/js/33498b04.ea986983.js | 1 + assets/js/3409ab5c.0e11f307.js | 1 + assets/js/3657.99306207.js | 1 + assets/js/3720c009.d1cf4422.js | 1 + assets/js/3810e8e5.cb27da81.js | 1 + assets/js/382d59b5.1a240746.js | 1 + assets/js/38d592cf.eca6abdd.js | 1 + assets/js/3aeef25a.7f601772.js | 1 + assets/js/3b0e82f8.8f1f64c8.js | 1 + assets/js/3e38e310.8e47d177.js | 1 + assets/js/3fbb770c.5a0ea03b.js | 1 + assets/js/40d6382c.eade4c9d.js | 1 + assets/js/4147f87e.df19a38f.js | 1 + assets/js/41d1792a.c60b77fa.js | 1 + assets/js/4216.1a7bbbbb.js | 1 + assets/js/428320b6.a9e82ac0.js | 1 + assets/js/43a1031a.7f53b24f.js | 1 + assets/js/43a26e71.2c8343da.js | 1 + assets/js/45c974ba.ef9a1068.js | 1 + assets/js/4706.4bbb5beb.js | 1 + assets/js/478.049cc5ce.js | 17300 ++++++ assets/js/47daf389.761a5874.js | 1 + assets/js/492.5969b5d6.js | 1306 + assets/js/492.bf72a5fb.js | 1 + assets/js/496ed8d5.7aa20f44.js | 1 + assets/js/4972.cd867224.js | 1 + assets/js/498bfcff.7ac403d3.js | 1 + assets/js/4aa4fc36.d83f6b61.js | 1 + assets/js/4b5a01f9.c57a62d7.js | 1 + assets/js/4b80f681.d8321757.js | 1 + assets/js/4c3c1dc2.2c55e369.js | 1 + assets/js/4da8ac19.a539a450.js | 1 + assets/js/4ee97ba8.139e1f70.js | 1 + assets/js/5001.d122ea9e.js | 1 + assets/js/502e1773.4736a14c.js | 1 + assets/js/5185.5a77c7f3.js | 1 + assets/js/51ad0f66.406eee01.js | 1 + assets/js/5314.5e7a5198.js | 1 + assets/js/532.b721fe9b.js | 11907 +++++ assets/js/54094f37.591bc31b.js | 1 + assets/js/5525.97a2f6fd.js | 1 + assets/js/55960ee5.832a6662.js | 1 + assets/js/573.0273bd3e.js | 1330 + assets/js/577efb1d.09dcfef1.js | 1 + assets/js/5989d566.4526e43e.js | 1 + assets/js/5a5e553d.338de790.js | 1 + assets/js/5c08a402.d1babd15.js | 1 + assets/js/5c8ec56d.c57bea75.js | 1 + assets/js/5e10e9e1.d7eb56cd.js | 1 + assets/js/5e3ed04b.d13c1a1e.js | 1 + assets/js/60746895.ac74eb35.js | 1 + assets/js/61639be2.a1fccc26.js | 1 + assets/js/619.980ffb36.js | 16545 ++++++ assets/js/619.ebfad195.js | 1 + assets/js/6234.e4aec976.js | 1 + assets/js/66286265.e578dde5.js | 1 + assets/js/66a649c0.edeeba0a.js | 1 + assets/js/6730.679bdfde.js | 1 + assets/js/6733.8da6ac76.js | 1 + assets/js/676abc7a.63b3d25f.js | 1 + assets/js/6941.2a27ca14.js | 1 + assets/js/6964.f8908a4e.js | 1 + assets/js/69fd9be6.21ecae7b.js | 1 + assets/js/6adcc868.2773af0b.js | 1 + assets/js/6bd3279d.aeef8223.js | 1 + assets/js/706.2fd91774.js | 2052 + assets/js/70f31d65.743b8ce0.js | 1 + assets/js/72083b41.50503fab.js | 1 + assets/js/721cfe60.f07302aa.js | 1 + assets/js/730.3bcc591c.js | 795 + assets/js/733.0245fcf3.js | 2557 + assets/js/7514af75.cff1fdc2.js | 1 + assets/js/7557b935.49ef7280.js | 1 + assets/js/7926.b155ab83.js | 2 + assets/js/7926.b155ab83.js.LICENSE.txt | 9 + assets/js/7b02141e.deb77cdd.js | 1 + assets/js/7c623a68.ff82d42e.js | 1 + assets/js/7cebed78.a7d61ce4.js | 1 + assets/js/7d3b81bb.34d1dcbc.js | 1 + assets/js/7db788f5.77dcba9d.js | 1 + assets/js/7e6991bb.d7e0dc19.js | 1 + assets/js/8099.23d0e642.js | 1 + assets/js/826.ccdb5ff3.js | 19003 +++++++ assets/js/83665776.355a054f.js | 1 + assets/js/841adc37.bd9ecd54.js | 1 + assets/js/8443.b56128a0.js | 2 + assets/js/8443.b56128a0.js.LICENSE.txt | 1 + assets/js/855.89c4e752.js | 12342 +++++ assets/js/86262f09.c7931357.js | 1 + assets/js/880bbd08.30ac2c51.js | 1 + assets/js/8961bfac.129eb342.js | 1 + assets/js/899.26888d9b.js | 3171 ++ assets/js/90184672.63024330.js | 1 + assets/js/926.c73d999d.js | 43457 ++++++++++++++++ assets/js/935f2afb.7432cd38.js | 1 + assets/js/941.1bbe0034.js | 11693 +++++ assets/js/9478.7e43e328.js | 1 + assets/js/964.6f61a7fe.js | 16707 ++++++ assets/js/97732f4b.455cc213.js | 1 + assets/js/977fea76.eec18e09.js | 1 + assets/js/9863.ac97c275.js | 1 + assets/js/9a118db7.8d5609b7.js | 1 + assets/js/9e136365.a92e9543.js | 1 + assets/js/9e4a10de.50a40090.js | 1 + assets/js/9e7755e6.b2ff83c7.js | 1 + assets/js/9e91bf8d.d07b3cc0.js | 1 + assets/js/a2e97e20.774d964a.js | 1 + assets/js/a5dcc804.f087fd6d.js | 1 + assets/js/ad129716.61a8f70c.js | 1 + assets/js/af105519.fcdf0f36.js | 1 + assets/js/b0a5d2c7.0057ab0a.js | 1 + assets/js/b15ba3bd.4093f573.js | 1 + assets/js/b2773e31.cf7436d1.js | 1 + assets/js/b2781c74.5c448432.js | 1 + assets/js/b2b17913.22f973b5.js | 1 + assets/js/b677d687.9fe87b82.js | 1 + assets/js/b8c59810.5a911fd5.js | 1 + assets/js/bb45b332.a011fd75.js | 1 + assets/js/bdf25f4c.8a60e1cf.js | 1 + assets/js/bfdf430b.7da059bb.js | 1 + assets/js/c21bc46a.9005f607.js | 1 + assets/js/c3d1f0cd.15f28b48.js | 1 + assets/js/c5daebe9.74d79f5d.js | 1 + assets/js/c8caddd1.a7d8bbbe.js | 1 + assets/js/c90bf1e8.ecbb565d.js | 1 + assets/js/c93dcb87.ce524b6d.js | 1 + assets/js/c9b29382.541e041a.js | 1 + assets/js/cb266b33.ed377a67.js | 1 + assets/js/cbe196b2.0efb19dc.js | 1 + assets/js/cc88a418.bba1d58a.js | 1 + assets/js/ccf7588a.011a0759.js | 1 + assets/js/cda37ba5.192ff86a.js | 1 + assets/js/common.ccbc84e3.js | 2 + assets/js/common.ccbc84e3.js.LICENSE.txt | 9 + assets/js/d17664a7.a25f122e.js | 1 + assets/js/d185ab52.49042892.js | 1 + assets/js/d19423a2.564ae984.js | 1 + assets/js/d2b7592b.28903a59.js | 1 + assets/js/d2eeb42a.589753c5.js | 1 + assets/js/d547c67b.c5136bf3.js | 1 + assets/js/d5b0ea4b.09b9be2c.js | 1 + assets/js/d5cd246e.6cb6f44d.js | 1 + assets/js/d77448ee.561ca51b.js | 1 + assets/js/df203c0f.3e6cf8f9.js | 1 + assets/js/df3c944d.674ff425.js | 1 + assets/js/dfbab2f3.7d4851a2.js | 1 + assets/js/e023757a.976848c0.js | 1 + assets/js/e0edce1a.d96eec42.js | 1 + assets/js/e1df8231.c1c0acd5.js | 1 + assets/js/e2712b99.1031a418.js | 1 + assets/js/e4be5833.caa19896.js | 1 + assets/js/e7fdd821.35d1a93a.js | 1 + assets/js/e862d0e9.7bf559c4.js | 1 + assets/js/e8ebc025.1ee80170.js | 1 + assets/js/e9e63826.2f53c2d9.js | 1 + assets/js/ec96df16.84e566e8.js | 1 + assets/js/edb3a98b.7e3d3e0f.js | 1 + assets/js/eee46244.ee9a05ef.js | 1 + assets/js/f054b415.17eef43b.js | 1 + assets/js/f4fe2bc2.dd244289.js | 1 + assets/js/f52ed7e3.cfa80e63.js | 1 + assets/js/f54e894e.3f0d3784.js | 1 + assets/js/f571fee5.f5131347.js | 1 + assets/js/f577f5c2.394fb809.js | 1 + assets/js/f59fd0ba.5362a74e.js | 1 + assets/js/f5b92c38.c5ebe54e.js | 1 + assets/js/f85d2ba9.7e35db59.js | 1 + assets/js/fa0b6059.d020b31a.js | 1 + assets/js/fa17a3e5.40428d1d.js | 1 + assets/js/fa3d98bd.ce842ab5.js | 1 + assets/js/fb7e7841.e0a3bf3d.js | 1 + assets/js/fba8a418.6a88519a.js | 1 + assets/js/fe44757f.31470284.js | 1 + assets/js/main.6e0d906c.js | 2 + assets/js/main.6e0d906c.js.LICENSE.txt | 125 + assets/js/runtime~main.6c4e50e5.js | 1 + docs/about/getting_started/cli/faq/index.html | 20 + docs/about/getting_started/cli/index.html | 17 + docs/about/getting_started/index.html | 16 + docs/about/getting_started/library/index.html | 17 + docs/about/getting_started/yaml/index.html | 17 + docs/about/index.html | 17 + docs/about/migration_guides/index.html | 16 + .../migration_guides/v7_to_v8/index.html | 40 + .../migration_guides/v8-1_to_v8-2/index.html | 25 + .../migration_guides/v8-2_to_v8-3/index.html | 16 + .../migration_guides/v8-3_to_v8-4/index.html | 16 + .../migration_guides/v8_to_v81/index.html | 31 + docs/about/miscellaneous/index.html | 23 + .../modelling/examples/advanced/index.html | 89 + .../modelling/examples/drogon/index.html | 43 + docs/about/modelling/examples/index.html | 16 + .../modelling/examples/simple/index.html | 72 + docs/about/modelling/index.html | 16 + .../generator_modelling/index.html | 19 + .../setup/facility_inputs/index.html | 23 + .../facility_inputs/pump_modelling/index.html | 18 + .../pump_modelling/pump_charts/index.html | 33 + .../sampled_compressor_model/index.html | 24 + .../setup/facility_inputs/tabular/index.html | 20 + .../expressions/index.html | 37 + .../setup/file_format_and_syntax/index.html | 32 + .../modelling/setup/fuel_types/index.html | 21 + docs/about/modelling/setup/index.html | 16 + .../compressor/index.html | 19 + .../compressor_system/index.html | 17 + .../index.html | 17 + .../index.html | 20 + .../installations/direct_consumers/index.html | 19 + .../generator_sets_in_calculations/index.html | 31 + .../modelling/setup/installations/index.html | 27 + .../pump_models_in_calculations/index.html | 22 + .../tabular_models_in_calculations/index.html | 19 + .../compressor_charts/index.html | 41 + .../compressor_models_types/index.html | 17 + .../index.html | 26 + .../index.html | 21 + .../index.html | 19 + .../index.html | 31 + .../fixed_speed_pressure_control/index.html | 57 + .../models/compressor_modelling/index.html | 28 + .../setup/models/fluid_model/index.html | 26 + docs/about/modelling/setup/models/index.html | 16 + .../setup/models/turbine_modeling/index.html | 21 + .../modelling/setup/time_series/index.html | 27 + .../modelling/setup/variables/index.html | 16 + .../theory/compressor_modelling/index.html | 39 + docs/about/modelling/theory/index.html | 16 + .../theory/pump_modelling/index.html | 16 + .../workflow/generic_workflow/index.html | 197 + docs/about/modelling/workflow/index.html | 16 + docs/about/references/api/index.html | 16 + docs/about/references/api/libecalc.html | 239 + .../references/api/libecalc/application.html | 233 + .../about/references/api/libecalc/common.html | 267 + .../api/libecalc/common/component_info.html | 238 + .../component_info/component_level.html | 431 + .../common/component_info/compressor.html | 363 + .../api/libecalc/common/datetime.html | 237 + .../api/libecalc/common/datetime/utils.html | 461 + .../api/libecalc/common/decorators.html | 238 + .../libecalc/common/decorators/capturer.html | 602 + .../common/decorators/feature_flags.html | 607 + .../api/libecalc/common/errors.html | 237 + .../libecalc/common/errors/exceptions.html | 804 + .../references/api/libecalc/common/graph.html | 644 + .../references/api/libecalc/common/list.html | 238 + .../api/libecalc/common/list/adjustment.html | 292 + .../api/libecalc/common/list/list_utils.html | 626 + .../api/libecalc/common/logger.html | 258 + .../references/api/libecalc/common/math.html | 238 + .../api/libecalc/common/math/math_utils.html | 409 + .../api/libecalc/common/math/numbers.html | 480 + .../api/libecalc/common/priorities.html | 248 + .../libecalc/common/priority_optimizer.html | 622 + .../api/libecalc/common/run_info.html | 319 + .../libecalc/common/stream_conditions.html | 807 + .../api/libecalc/common/string.html | 237 + .../libecalc/common/string/string_utils.html | 382 + .../libecalc/common/tabular_time_series.html | 612 + .../api/libecalc/common/temporal_model.html | 559 + .../api/libecalc/common/time_utils.html | 1306 + .../references/api/libecalc/common/units.html | 1405 + .../api/libecalc/common/version.html | 476 + .../about/references/api/libecalc/domain.html | 233 + docs/about/references/api/libecalc/dto.html | 313 + .../references/api/libecalc/dto/base.html | 1565 + .../api/libecalc/dto/component_graph.html | 550 + .../api/libecalc/dto/components.html | 2675 + .../api/libecalc/dto/core_specs.html | 240 + .../api/libecalc/dto/core_specs/base.html | 237 + .../core_specs/base/operational_settings.html | 332 + .../libecalc/dto/core_specs/compressor.html | 237 + .../compressor/operational_settings.html | 391 + .../api/libecalc/dto/core_specs/pump.html | 237 + .../core_specs/pump/operational_settings.html | 391 + .../api/libecalc/dto/core_specs/system.html | 233 + .../api/libecalc/dto/ecalc_model.html | 304 + .../references/api/libecalc/dto/emission.html | 350 + .../references/api/libecalc/dto/models.html | 320 + .../api/libecalc/dto/models/base.html | 433 + .../api/libecalc/dto/models/chart.html | 870 + .../api/libecalc/dto/models/compressor.html | 283 + .../libecalc/dto/models/compressor/base.html | 449 + .../libecalc/dto/models/compressor/chart.html | 262 + .../libecalc/dto/models/compressor/fluid.html | 614 + .../dto/models/compressor/sampled.html | 446 + .../libecalc/dto/models/compressor/stage.html | 438 + .../libecalc/dto/models/compressor/train.html | 952 + .../libecalc/dto/models/consumer_system.html | 834 + .../api/libecalc/dto/models/direct.html | 361 + .../libecalc/dto/models/generator_set.html | 402 + .../api/libecalc/dto/models/pump.html | 404 + .../api/libecalc/dto/models/sampled.html | 309 + .../api/libecalc/dto/models/tabulated.html | 478 + .../api/libecalc/dto/models/turbine.html | 372 + .../api/libecalc/dto/node_info.html | 302 + .../references/api/libecalc/dto/result.html | 263 + .../api/libecalc/dto/result/base.html | 366 + .../api/libecalc/dto/result/emission.html | 720 + .../api/libecalc/dto/result/results.html | 2067 + .../api/libecalc/dto/result/simple.html | 1901 + .../dto/result/tabular_time_series.html | 589 + .../api/libecalc/dto/result/types.html | 455 + .../api/libecalc/dto/result_options.html | 306 + .../references/api/libecalc/dto/types.html | 2922 ++ .../references/api/libecalc/dto/utils.html | 238 + .../api/libecalc/dto/utils/aggregators.html | 537 + .../api/libecalc/dto/utils/validators.html | 401 + .../api/libecalc/dto/variables.html | 527 + .../references/api/libecalc/examples.html | 244 + .../api/libecalc/examples/advanced.html | 304 + .../api/libecalc/examples/simple.html | 306 + .../references/api/libecalc/expression.html | 243 + .../api/libecalc/expression/expression.html | 697 + .../expression/expression_evaluator.html | 1584 + .../api/libecalc/infrastructure.html | 238 + .../api/libecalc/infrastructure/file_io.html | 2356 + .../libecalc/infrastructure/file_utils.html | 757 + .../references/api/libecalc/version.html | 285 + .../about/references/cli_reference/index.html | 19 + docs/about/references/index.html | 16 + .../references/keywords/ADJUSTMENT/index.html | 25 + .../references/keywords/CATEGORY/index.html | 20 + .../keywords/COMPRESSOR_MODEL/index.html | 16 + .../keywords/COMPRESSOR_SYSTEM/index.html | 21 + .../COMPRESSOR_TRAIN_MODEL/index.html | 21 + .../references/keywords/CONDITION/index.html | 24 + .../references/keywords/CONDITIONS/index.html | 19 + .../references/keywords/CONSTANT/index.html | 19 + .../references/keywords/CONSUMERS/index.html | 20 + .../keywords/CONSUMPTION_RATE_TYPE/index.html | 30 + .../keywords/CONTROL_MARGIN/index.html | 20 + .../keywords/CONTROL_MARGIN_UNIT/index.html | 18 + .../references/keywords/CROSSOVER/index.html | 20 + .../references/keywords/CURVE/index.html | 17 + .../references/keywords/CURVES/index.html | 17 + .../keywords/DIRECT_EMITTERS/index.html | 20 + .../keywords/DISCHARGE_PRESSURE/index.html | 21 + .../DOWNSTREAM_PRESSURE_CONTROL/index.html | 20 + .../references/keywords/EFFICIENCY/index.html | 17 + .../keywords/ELECTRICITY2FUEL/index.html | 23 + .../references/keywords/EMISSIONS/index.html | 21 + .../keywords/EMISSION_NAME/index.html | 17 + .../keywords/EMISSION_RATE/index.html | 20 + .../keywords/EMITTER_MODEL/index.html | 22 + docs/about/references/keywords/END/index.html | 18 + .../keywords/ENERGYFUNCTION/index.html | 20 + .../keywords/ENERGY_USAGE_MODEL/index.html | 22 + .../references/keywords/EXPRESSION/index.html | 17 + .../keywords/EXTRAPOLATION/index.html | 19 + .../keywords/FACILITY_INPUTS/index.html | 21 + .../references/keywords/FACTOR/index.html | 22 + .../about/references/keywords/FILE/index.html | 17 + .../keywords/FLUID_DENSITY/index.html | 20 + .../keywords/FLUID_MODEL/index.html | 16 + .../about/references/keywords/FUEL/index.html | 19 + .../keywords/FUELCONSUMERS/index.html | 22 + .../references/keywords/FUELRATE/index.html | 21 + .../references/keywords/FUEL_TYPES/index.html | 21 + .../keywords/GENERATORSETS/index.html | 22 + .../references/keywords/HCEXPORT/index.html | 22 + .../about/references/keywords/HEAD/index.html | 17 + .../keywords/HEAD_MARGIN/index.html | 23 + .../keywords/INFLUENCE_TIME_VECTOR/index.html | 18 + .../keywords/INLET_TEMPERATURE/index.html | 16 + .../keywords/INSTALLATIONS/index.html | 17 + .../keywords/INTERPOLATION_TYPE/index.html | 27 + .../INTERSTAGE_CONTROL_PRESSURE/index.html | 21 + .../about/references/keywords/LOAD/index.html | 20 + .../keywords/LOWER_HEATING_VALUE/index.html | 17 + .../MAXIMUM_DISCHARGE_PRESSURE/index.html | 18 + .../references/keywords/MODELS/index.html | 19 + .../about/references/keywords/NAME/index.html | 18 + .../keywords/OPERATIONAL_SETTINGS/index.html | 51 + .../keywords/POWERLOSSFACTOR/index.html | 21 + .../POWER_ADJUSTMENT_CONSTANT/index.html | 17 + .../keywords/PRESSURE_CONTROL/index.html | 16 + .../references/keywords/PRICE/index.html | 19 + .../references/keywords/PUMPS/index.html | 19 + .../references/keywords/QUOTA/index.html | 18 + .../about/references/keywords/RATE/index.html | 20 + .../keywords/RATE_FRACTIONS/index.html | 16 + .../keywords/RATE_PER_STREAM/index.html | 20 + .../references/keywords/REGULARITY/index.html | 29 + .../references/keywords/STAGES/index.html | 23 + .../references/keywords/START/index.html | 23 + .../references/keywords/STREAM/index.html | 18 + .../references/keywords/STREAMS/index.html | 18 + .../keywords/SUCTION_PRESSURE/index.html | 22 + docs/about/references/keywords/TAX/index.html | 20 + .../keywords/TIME_SERIES/index.html | 23 + .../keywords/TOTAL_SYSTEM_RATE/index.html | 19 + .../keywords/TURBINE_EFFICIENCIES/index.html | 16 + .../keywords/TURBINE_LOAD/index.html | 16 + .../keywords/TURBINE_MODEL/index.html | 16 + .../about/references/keywords/TYPE/index.html | 18 + .../references/keywords/UNITS/index.html | 16 + .../UPSTREAM_PRESSURE_CONTROL/index.html | 20 + .../references/keywords/VARIABLES/index.html | 17 + .../references/keywords/include/index.html | 17 + docs/about/references/keywords/index.html | 18 + docs/category/documentation/index.html | 16 + docs/category/guides/index.html | 16 + docs/changelog/index.html | 16 + docs/changelog/latest/index.html | 16 + docs/changelog/separator/index.html | 16 + docs/changelog/v7-0-release/index.html | 16 + docs/changelog/v7-1-release/index.html | 27 + docs/changelog/v7-2-release/index.html | 28 + docs/changelog/v7-3-release/index.html | 19 + docs/changelog/v7-4-release/index.html | 16 + docs/changelog/v7-5-release/index.html | 19 + docs/changelog/v7-6-release/index.html | 17 + docs/changelog/v8.0-release/index.html | 17 + docs/changelog/v8.1-release/index.html | 16 + docs/changelog/v8.2-release/index.html | 17 + docs/changelog/v8.3-release/index.html | 17 + docs/changelog/v8.4-release/index.html | 16 + docs/changelog/v8.5-release/index.html | 16 + .../documentation/index.html | 19 + .../documentation-guide/markdown/index.html | 17 + docs/contribute/get-started/index.html | 25 + .../guides/conventional-commits/index.html | 17 + docs/contribute/guides/git/index.html | 22 + docs/tags/e-calc/index.html | 16 + docs/tags/index.html | 16 + docs/tags/release/index.html | 16 + img/docs/asgb/asgb_lpp3_pd.png | Bin 0 -> 8296 bytes ...sgb_lpp3_predef_fuel_result_comparison.png | Bin 0 -> 150658 bytes img/docs/asgb/asgb_lpp3_predef_stage1.png | Bin 0 -> 19860 bytes .../asgb/asgb_lpp3_predef_stage1_2031.png | Bin 0 -> 19734 bytes img/docs/asgb/asgb_lpp3_predef_stage2.png | Bin 0 -> 18719 bytes .../asgb/asgb_lpp3_predef_stage2_2031.png | Bin 0 -> 16372 bytes img/docs/asgb/asgb_lpp3_ps.png | Bin 0 -> 9080 bytes img/docs/asgb/asgb_lpp3_sketch.png | Bin 0 -> 62437 bytes .../asgb_lpp3_sys26_capacity_and_rate.png | Bin 0 -> 11469 bytes .../asgb_lpp3_sys26_maxcapacity_at_pd200.png | Bin 0 -> 7903 bytes .../asgb_lpp3_sys26_maxcapacity_at_pd250.png | Bin 0 -> 6555 bytes ...gb_lpp3_sys26_maxcapacity_at_pdsurface.png | Bin 0 -> 25407 bytes .../asgb_lpp3_sys26_stage1_at_ps31pd250.png | Bin 0 -> 40153 bytes .../asgb_lpp3_sys26_stage2_at_ps31pd250.png | Bin 0 -> 50587 bytes .../asgb_lpp3_sys27_capacity_and_rate.png | Bin 0 -> 13313 bytes .../asgb_lpp3_sys27_crossover_and_mode.png | Bin 0 -> 12063 bytes img/docs/asgb/asgb_lpp3_sys27_gasrate.png | Bin 0 -> 12245 bytes .../asgb/asgb_lpp3_sys27_rate_and_mode.png | Bin 0 -> 16959 bytes img/docs/asgb/asgb_lpp3_timeline.png | Bin 0 -> 12064 bytes img/docs/asgb/asgb_lpp3_unisim_stage1.png | Bin 0 -> 40526 bytes .../asgb/asgb_lpp3_unisim_stage1_filtered.png | Bin 0 -> 28371 bytes img/docs/asgb/asgb_lpp3_unisim_stage2.png | Bin 0 -> 46287 bytes .../asgb/asgb_lpp3_unisim_stage2_filtered.png | Bin 0 -> 40488 bytes img/docs/asgb/asgb_sys27a_unisim_model.png | Bin 0 -> 11965 bytes .../asgb_sys27a_unisim_model_filtered.png | Bin 0 -> 7718 bytes .../asgb/ecalc_generic_chart_normalized.png | Bin 0 -> 21903 bytes .../asgb/ecalc_generic_chart_original.png | Bin 0 -> 26035 bytes img/docs/changed_rate_resampling.png | Bin 0 -> 237031 bytes img/docs/interpolation_plot.png | Bin 0 -> 16617 bytes img/docusaurus.png | Bin 0 -> 5142 bytes img/favicon.svg | 3 + img/logo.svg | 16 + img/undraw_docusaurus_mountain.svg | 171 + img/undraw_docusaurus_react.svg | 170 + img/undraw_docusaurus_tree.svg | 40 + index.html | 16 + katex/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 28076 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 6912 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 6908 bytes katex/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 11348 bytes katex/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 11316 bytes katex/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 25324 bytes katex/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 16780 bytes katex/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 16988 bytes katex/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 26272 bytes katex/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 16400 bytes katex/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 16440 bytes katex/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 12216 bytes katex/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 12028 bytes katex/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 10344 bytes katex/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 9644 bytes katex/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5468 bytes katex/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5208 bytes katex/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3624 bytes katex/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 4928 bytes katex/fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 13568 bytes katex/katex.min.css | 1 + search-index.json | 1 + search/index.html | 16 + sitemap.xml | 1 + versions/index.html | 16 + 565 files changed, 246667 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 assets/css/styles.9610a963.css create mode 100644 assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png create mode 100644 assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png create mode 100644 assets/images/compressor_chart_surge_control_margin_line-98e32f3b0d5332a371ec4bb2dbc66da8.png create mode 100644 assets/images/control_mech_variable_speed-91a2c845dc627195fee373c1c63d952d.PNG create mode 100644 assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png create mode 100644 assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png create mode 100644 assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png create mode 100644 assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg create mode 100644 assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png create mode 100644 assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png create mode 100644 assets/images/make_recirculation_pressure_control_plot-527cac79a8c53527147492b170308459.png create mode 100644 assets/images/process_compressor-3493b127c832898d93b5231594efa8d3.png create mode 100644 assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png create mode 100644 assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png create mode 100644 assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG create mode 100644 assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG create mode 100644 assets/images/regularity-3e43516a1e0246a2e125d4980006b137.png create mode 100644 assets/images/simple_facility_pfd-ad59578d69ea3d3267f646b9d8141822.jpg create mode 100644 assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png create mode 100644 assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png create mode 100644 assets/js/00440000.e6ea2287.js create mode 100644 assets/js/00bdc23f.963702a5.js create mode 100644 assets/js/0425b884.a3565346.js create mode 100644 assets/js/06adec10.c15c0771.js create mode 100644 assets/js/06dd1efa.1e4f2ec1.js create mode 100644 assets/js/071a0eb8.b215d19c.js create mode 100644 assets/js/0745e7f0.bbd54cb0.js create mode 100644 assets/js/074935d7.9df0074a.js create mode 100644 assets/js/07b341f3.f53a0fdc.js create mode 100644 assets/js/084f7ebf.d236a910.js create mode 100644 assets/js/0aeda122.4e36fb5a.js create mode 100644 assets/js/0f7b5825.f8427b6c.js create mode 100644 assets/js/0fd76486.63b58892.js create mode 100644 assets/js/10c684b0.148b0114.js create mode 100644 assets/js/11516e85.b4fac2cd.js create mode 100644 assets/js/1287dd43.3adbfe17.js create mode 100644 assets/js/1300feb7.78be5d30.js create mode 100644 assets/js/1341.f7fb1046.js create mode 100644 assets/js/14eb3368.277da0ae.js create mode 100644 assets/js/1573.c871fc28.js create mode 100644 assets/js/15962da1.a352d3e6.js create mode 100644 assets/js/163041ea.9c2da84e.js create mode 100644 assets/js/17896441.998554a7.js create mode 100644 assets/js/1826.4f989084.js create mode 100644 assets/js/185.d87a260a.js create mode 100644 assets/js/1a4e3797.46d13a77.js create mode 100644 assets/js/1be78505.276fbb10.js create mode 100644 assets/js/1c663d3d.d1f01d12.js create mode 100644 assets/js/1df93b7f.a089593f.js create mode 100644 assets/js/1e7de7fe.c4a8e353.js create mode 100644 assets/js/1f60d0d4.297d6f23.js create mode 100644 assets/js/211.c8c05584.js create mode 100644 assets/js/216.5ae6451c.js create mode 100644 assets/js/22f0e129.44175121.js create mode 100644 assets/js/234.9ea03c85.js create mode 100644 assets/js/2494.4009d11f.js create mode 100644 assets/js/2566.3eb3255f.js create mode 100644 assets/js/2781f0ad.eabf1c22.js create mode 100644 assets/js/2855.9a4f1aa2.js create mode 100644 assets/js/2899.8d82b451.js create mode 100644 assets/js/29367e59.d8e53898.js create mode 100644 assets/js/295f424e.04a4238d.js create mode 100644 assets/js/29d00dd8.9fda4441.js create mode 100644 assets/js/2b15d891.d448c52e.js create mode 100644 assets/js/2b2be347.116a0d06.js create mode 100644 assets/js/2c19a041.a0ac934f.js create mode 100644 assets/js/2c73e373.147b2ba8.js create mode 100644 assets/js/2ce3b5da.5391bc8e.js create mode 100644 assets/js/2cedaf2f.b313f202.js create mode 100644 assets/js/2df92a48.bac285c1.js create mode 100644 assets/js/2f04f592.57768e9a.js create mode 100644 assets/js/314.17af5036.js create mode 100644 assets/js/3261da49.5c3db358.js create mode 100644 assets/js/33498b04.ea986983.js create mode 100644 assets/js/3409ab5c.0e11f307.js create mode 100644 assets/js/3657.99306207.js create mode 100644 assets/js/3720c009.d1cf4422.js create mode 100644 assets/js/3810e8e5.cb27da81.js create mode 100644 assets/js/382d59b5.1a240746.js create mode 100644 assets/js/38d592cf.eca6abdd.js create mode 100644 assets/js/3aeef25a.7f601772.js create mode 100644 assets/js/3b0e82f8.8f1f64c8.js create mode 100644 assets/js/3e38e310.8e47d177.js create mode 100644 assets/js/3fbb770c.5a0ea03b.js create mode 100644 assets/js/40d6382c.eade4c9d.js create mode 100644 assets/js/4147f87e.df19a38f.js create mode 100644 assets/js/41d1792a.c60b77fa.js create mode 100644 assets/js/4216.1a7bbbbb.js create mode 100644 assets/js/428320b6.a9e82ac0.js create mode 100644 assets/js/43a1031a.7f53b24f.js create mode 100644 assets/js/43a26e71.2c8343da.js create mode 100644 assets/js/45c974ba.ef9a1068.js create mode 100644 assets/js/4706.4bbb5beb.js create mode 100644 assets/js/478.049cc5ce.js create mode 100644 assets/js/47daf389.761a5874.js create mode 100644 assets/js/492.5969b5d6.js create mode 100644 assets/js/492.bf72a5fb.js create mode 100644 assets/js/496ed8d5.7aa20f44.js create mode 100644 assets/js/4972.cd867224.js create mode 100644 assets/js/498bfcff.7ac403d3.js create mode 100644 assets/js/4aa4fc36.d83f6b61.js create mode 100644 assets/js/4b5a01f9.c57a62d7.js create mode 100644 assets/js/4b80f681.d8321757.js create mode 100644 assets/js/4c3c1dc2.2c55e369.js create mode 100644 assets/js/4da8ac19.a539a450.js create mode 100644 assets/js/4ee97ba8.139e1f70.js create mode 100644 assets/js/5001.d122ea9e.js create mode 100644 assets/js/502e1773.4736a14c.js create mode 100644 assets/js/5185.5a77c7f3.js create mode 100644 assets/js/51ad0f66.406eee01.js create mode 100644 assets/js/5314.5e7a5198.js create mode 100644 assets/js/532.b721fe9b.js create mode 100644 assets/js/54094f37.591bc31b.js create mode 100644 assets/js/5525.97a2f6fd.js create mode 100644 assets/js/55960ee5.832a6662.js create mode 100644 assets/js/573.0273bd3e.js create mode 100644 assets/js/577efb1d.09dcfef1.js create mode 100644 assets/js/5989d566.4526e43e.js create mode 100644 assets/js/5a5e553d.338de790.js create mode 100644 assets/js/5c08a402.d1babd15.js create mode 100644 assets/js/5c8ec56d.c57bea75.js create mode 100644 assets/js/5e10e9e1.d7eb56cd.js create mode 100644 assets/js/5e3ed04b.d13c1a1e.js create mode 100644 assets/js/60746895.ac74eb35.js create mode 100644 assets/js/61639be2.a1fccc26.js create mode 100644 assets/js/619.980ffb36.js create mode 100644 assets/js/619.ebfad195.js create mode 100644 assets/js/6234.e4aec976.js create mode 100644 assets/js/66286265.e578dde5.js create mode 100644 assets/js/66a649c0.edeeba0a.js create mode 100644 assets/js/6730.679bdfde.js create mode 100644 assets/js/6733.8da6ac76.js create mode 100644 assets/js/676abc7a.63b3d25f.js create mode 100644 assets/js/6941.2a27ca14.js create mode 100644 assets/js/6964.f8908a4e.js create mode 100644 assets/js/69fd9be6.21ecae7b.js create mode 100644 assets/js/6adcc868.2773af0b.js create mode 100644 assets/js/6bd3279d.aeef8223.js create mode 100644 assets/js/706.2fd91774.js create mode 100644 assets/js/70f31d65.743b8ce0.js create mode 100644 assets/js/72083b41.50503fab.js create mode 100644 assets/js/721cfe60.f07302aa.js create mode 100644 assets/js/730.3bcc591c.js create mode 100644 assets/js/733.0245fcf3.js create mode 100644 assets/js/7514af75.cff1fdc2.js create mode 100644 assets/js/7557b935.49ef7280.js create mode 100644 assets/js/7926.b155ab83.js create mode 100644 assets/js/7926.b155ab83.js.LICENSE.txt create mode 100644 assets/js/7b02141e.deb77cdd.js create mode 100644 assets/js/7c623a68.ff82d42e.js create mode 100644 assets/js/7cebed78.a7d61ce4.js create mode 100644 assets/js/7d3b81bb.34d1dcbc.js create mode 100644 assets/js/7db788f5.77dcba9d.js create mode 100644 assets/js/7e6991bb.d7e0dc19.js create mode 100644 assets/js/8099.23d0e642.js create mode 100644 assets/js/826.ccdb5ff3.js create mode 100644 assets/js/83665776.355a054f.js create mode 100644 assets/js/841adc37.bd9ecd54.js create mode 100644 assets/js/8443.b56128a0.js create mode 100644 assets/js/8443.b56128a0.js.LICENSE.txt create mode 100644 assets/js/855.89c4e752.js create mode 100644 assets/js/86262f09.c7931357.js create mode 100644 assets/js/880bbd08.30ac2c51.js create mode 100644 assets/js/8961bfac.129eb342.js create mode 100644 assets/js/899.26888d9b.js create mode 100644 assets/js/90184672.63024330.js create mode 100644 assets/js/926.c73d999d.js create mode 100644 assets/js/935f2afb.7432cd38.js create mode 100644 assets/js/941.1bbe0034.js create mode 100644 assets/js/9478.7e43e328.js create mode 100644 assets/js/964.6f61a7fe.js create mode 100644 assets/js/97732f4b.455cc213.js create mode 100644 assets/js/977fea76.eec18e09.js create mode 100644 assets/js/9863.ac97c275.js create mode 100644 assets/js/9a118db7.8d5609b7.js create mode 100644 assets/js/9e136365.a92e9543.js create mode 100644 assets/js/9e4a10de.50a40090.js create mode 100644 assets/js/9e7755e6.b2ff83c7.js create mode 100644 assets/js/9e91bf8d.d07b3cc0.js create mode 100644 assets/js/a2e97e20.774d964a.js create mode 100644 assets/js/a5dcc804.f087fd6d.js create mode 100644 assets/js/ad129716.61a8f70c.js create mode 100644 assets/js/af105519.fcdf0f36.js create mode 100644 assets/js/b0a5d2c7.0057ab0a.js create mode 100644 assets/js/b15ba3bd.4093f573.js create mode 100644 assets/js/b2773e31.cf7436d1.js create mode 100644 assets/js/b2781c74.5c448432.js create mode 100644 assets/js/b2b17913.22f973b5.js create mode 100644 assets/js/b677d687.9fe87b82.js create mode 100644 assets/js/b8c59810.5a911fd5.js create mode 100644 assets/js/bb45b332.a011fd75.js create mode 100644 assets/js/bdf25f4c.8a60e1cf.js create mode 100644 assets/js/bfdf430b.7da059bb.js create mode 100644 assets/js/c21bc46a.9005f607.js create mode 100644 assets/js/c3d1f0cd.15f28b48.js create mode 100644 assets/js/c5daebe9.74d79f5d.js create mode 100644 assets/js/c8caddd1.a7d8bbbe.js create mode 100644 assets/js/c90bf1e8.ecbb565d.js create mode 100644 assets/js/c93dcb87.ce524b6d.js create mode 100644 assets/js/c9b29382.541e041a.js create mode 100644 assets/js/cb266b33.ed377a67.js create mode 100644 assets/js/cbe196b2.0efb19dc.js create mode 100644 assets/js/cc88a418.bba1d58a.js create mode 100644 assets/js/ccf7588a.011a0759.js create mode 100644 assets/js/cda37ba5.192ff86a.js create mode 100644 assets/js/common.ccbc84e3.js create mode 100644 assets/js/common.ccbc84e3.js.LICENSE.txt create mode 100644 assets/js/d17664a7.a25f122e.js create mode 100644 assets/js/d185ab52.49042892.js create mode 100644 assets/js/d19423a2.564ae984.js create mode 100644 assets/js/d2b7592b.28903a59.js create mode 100644 assets/js/d2eeb42a.589753c5.js create mode 100644 assets/js/d547c67b.c5136bf3.js create mode 100644 assets/js/d5b0ea4b.09b9be2c.js create mode 100644 assets/js/d5cd246e.6cb6f44d.js create mode 100644 assets/js/d77448ee.561ca51b.js create mode 100644 assets/js/df203c0f.3e6cf8f9.js create mode 100644 assets/js/df3c944d.674ff425.js create mode 100644 assets/js/dfbab2f3.7d4851a2.js create mode 100644 assets/js/e023757a.976848c0.js create mode 100644 assets/js/e0edce1a.d96eec42.js create mode 100644 assets/js/e1df8231.c1c0acd5.js create mode 100644 assets/js/e2712b99.1031a418.js create mode 100644 assets/js/e4be5833.caa19896.js create mode 100644 assets/js/e7fdd821.35d1a93a.js create mode 100644 assets/js/e862d0e9.7bf559c4.js create mode 100644 assets/js/e8ebc025.1ee80170.js create mode 100644 assets/js/e9e63826.2f53c2d9.js create mode 100644 assets/js/ec96df16.84e566e8.js create mode 100644 assets/js/edb3a98b.7e3d3e0f.js create mode 100644 assets/js/eee46244.ee9a05ef.js create mode 100644 assets/js/f054b415.17eef43b.js create mode 100644 assets/js/f4fe2bc2.dd244289.js create mode 100644 assets/js/f52ed7e3.cfa80e63.js create mode 100644 assets/js/f54e894e.3f0d3784.js create mode 100644 assets/js/f571fee5.f5131347.js create mode 100644 assets/js/f577f5c2.394fb809.js create mode 100644 assets/js/f59fd0ba.5362a74e.js create mode 100644 assets/js/f5b92c38.c5ebe54e.js create mode 100644 assets/js/f85d2ba9.7e35db59.js create mode 100644 assets/js/fa0b6059.d020b31a.js create mode 100644 assets/js/fa17a3e5.40428d1d.js create mode 100644 assets/js/fa3d98bd.ce842ab5.js create mode 100644 assets/js/fb7e7841.e0a3bf3d.js create mode 100644 assets/js/fba8a418.6a88519a.js create mode 100644 assets/js/fe44757f.31470284.js create mode 100644 assets/js/main.6e0d906c.js create mode 100644 assets/js/main.6e0d906c.js.LICENSE.txt create mode 100644 assets/js/runtime~main.6c4e50e5.js create mode 100644 docs/about/getting_started/cli/faq/index.html create mode 100644 docs/about/getting_started/cli/index.html create mode 100644 docs/about/getting_started/index.html create mode 100644 docs/about/getting_started/library/index.html create mode 100644 docs/about/getting_started/yaml/index.html create mode 100644 docs/about/index.html create mode 100644 docs/about/migration_guides/index.html create mode 100644 docs/about/migration_guides/v7_to_v8/index.html create mode 100644 docs/about/migration_guides/v8-1_to_v8-2/index.html create mode 100644 docs/about/migration_guides/v8-2_to_v8-3/index.html create mode 100644 docs/about/migration_guides/v8-3_to_v8-4/index.html create mode 100644 docs/about/migration_guides/v8_to_v81/index.html create mode 100644 docs/about/miscellaneous/index.html create mode 100644 docs/about/modelling/examples/advanced/index.html create mode 100644 docs/about/modelling/examples/drogon/index.html create mode 100644 docs/about/modelling/examples/index.html create mode 100644 docs/about/modelling/examples/simple/index.html create mode 100644 docs/about/modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/generator_modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/pump_modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/tabular/index.html create mode 100644 docs/about/modelling/setup/file_format_and_syntax/expressions/index.html create mode 100644 docs/about/modelling/setup/file_format_and_syntax/index.html create mode 100644 docs/about/modelling/setup/fuel_types/index.html create mode 100644 docs/about/modelling/setup/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html create mode 100644 docs/about/modelling/setup/installations/direct_consumers/index.html create mode 100644 docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/index.html create mode 100644 docs/about/modelling/setup/installations/pump_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/index.html create mode 100644 docs/about/modelling/setup/models/fluid_model/index.html create mode 100644 docs/about/modelling/setup/models/index.html create mode 100644 docs/about/modelling/setup/models/turbine_modeling/index.html create mode 100644 docs/about/modelling/setup/time_series/index.html create mode 100644 docs/about/modelling/setup/variables/index.html create mode 100644 docs/about/modelling/theory/compressor_modelling/index.html create mode 100644 docs/about/modelling/theory/index.html create mode 100644 docs/about/modelling/theory/pump_modelling/index.html create mode 100644 docs/about/modelling/workflow/generic_workflow/index.html create mode 100644 docs/about/modelling/workflow/index.html create mode 100644 docs/about/references/api/index.html create mode 100644 docs/about/references/api/libecalc.html create mode 100644 docs/about/references/api/libecalc/application.html create mode 100644 docs/about/references/api/libecalc/common.html create mode 100644 docs/about/references/api/libecalc/common/component_info.html create mode 100644 docs/about/references/api/libecalc/common/component_info/component_level.html create mode 100644 docs/about/references/api/libecalc/common/component_info/compressor.html create mode 100644 docs/about/references/api/libecalc/common/datetime.html create mode 100644 docs/about/references/api/libecalc/common/datetime/utils.html create mode 100644 docs/about/references/api/libecalc/common/decorators.html create mode 100644 docs/about/references/api/libecalc/common/decorators/capturer.html create mode 100644 docs/about/references/api/libecalc/common/decorators/feature_flags.html create mode 100644 docs/about/references/api/libecalc/common/errors.html create mode 100644 docs/about/references/api/libecalc/common/errors/exceptions.html create mode 100644 docs/about/references/api/libecalc/common/graph.html create mode 100644 docs/about/references/api/libecalc/common/list.html create mode 100644 docs/about/references/api/libecalc/common/list/adjustment.html create mode 100644 docs/about/references/api/libecalc/common/list/list_utils.html create mode 100644 docs/about/references/api/libecalc/common/logger.html create mode 100644 docs/about/references/api/libecalc/common/math.html create mode 100644 docs/about/references/api/libecalc/common/math/math_utils.html create mode 100644 docs/about/references/api/libecalc/common/math/numbers.html create mode 100644 docs/about/references/api/libecalc/common/priorities.html create mode 100644 docs/about/references/api/libecalc/common/priority_optimizer.html create mode 100644 docs/about/references/api/libecalc/common/run_info.html create mode 100644 docs/about/references/api/libecalc/common/stream_conditions.html create mode 100644 docs/about/references/api/libecalc/common/string.html create mode 100644 docs/about/references/api/libecalc/common/string/string_utils.html create mode 100644 docs/about/references/api/libecalc/common/tabular_time_series.html create mode 100644 docs/about/references/api/libecalc/common/temporal_model.html create mode 100644 docs/about/references/api/libecalc/common/time_utils.html create mode 100644 docs/about/references/api/libecalc/common/units.html create mode 100644 docs/about/references/api/libecalc/common/version.html create mode 100644 docs/about/references/api/libecalc/domain.html create mode 100644 docs/about/references/api/libecalc/dto.html create mode 100644 docs/about/references/api/libecalc/dto/base.html create mode 100644 docs/about/references/api/libecalc/dto/component_graph.html create mode 100644 docs/about/references/api/libecalc/dto/components.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/base.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/compressor.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/pump.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/system.html create mode 100644 docs/about/references/api/libecalc/dto/ecalc_model.html create mode 100644 docs/about/references/api/libecalc/dto/emission.html create mode 100644 docs/about/references/api/libecalc/dto/models.html create mode 100644 docs/about/references/api/libecalc/dto/models/base.html create mode 100644 docs/about/references/api/libecalc/dto/models/chart.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/base.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/chart.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/fluid.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/sampled.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/stage.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/train.html create mode 100644 docs/about/references/api/libecalc/dto/models/consumer_system.html create mode 100644 docs/about/references/api/libecalc/dto/models/direct.html create mode 100644 docs/about/references/api/libecalc/dto/models/generator_set.html create mode 100644 docs/about/references/api/libecalc/dto/models/pump.html create mode 100644 docs/about/references/api/libecalc/dto/models/sampled.html create mode 100644 docs/about/references/api/libecalc/dto/models/tabulated.html create mode 100644 docs/about/references/api/libecalc/dto/models/turbine.html create mode 100644 docs/about/references/api/libecalc/dto/node_info.html create mode 100644 docs/about/references/api/libecalc/dto/result.html create mode 100644 docs/about/references/api/libecalc/dto/result/base.html create mode 100644 docs/about/references/api/libecalc/dto/result/emission.html create mode 100644 docs/about/references/api/libecalc/dto/result/results.html create mode 100644 docs/about/references/api/libecalc/dto/result/simple.html create mode 100644 docs/about/references/api/libecalc/dto/result/tabular_time_series.html create mode 100644 docs/about/references/api/libecalc/dto/result/types.html create mode 100644 docs/about/references/api/libecalc/dto/result_options.html create mode 100644 docs/about/references/api/libecalc/dto/types.html create mode 100644 docs/about/references/api/libecalc/dto/utils.html create mode 100644 docs/about/references/api/libecalc/dto/utils/aggregators.html create mode 100644 docs/about/references/api/libecalc/dto/utils/validators.html create mode 100644 docs/about/references/api/libecalc/dto/variables.html create mode 100644 docs/about/references/api/libecalc/examples.html create mode 100644 docs/about/references/api/libecalc/examples/advanced.html create mode 100644 docs/about/references/api/libecalc/examples/simple.html create mode 100644 docs/about/references/api/libecalc/expression.html create mode 100644 docs/about/references/api/libecalc/expression/expression.html create mode 100644 docs/about/references/api/libecalc/expression/expression_evaluator.html create mode 100644 docs/about/references/api/libecalc/infrastructure.html create mode 100644 docs/about/references/api/libecalc/infrastructure/file_io.html create mode 100644 docs/about/references/api/libecalc/infrastructure/file_utils.html create mode 100644 docs/about/references/api/libecalc/version.html create mode 100644 docs/about/references/cli_reference/index.html create mode 100644 docs/about/references/index.html create mode 100644 docs/about/references/keywords/ADJUSTMENT/index.html create mode 100644 docs/about/references/keywords/CATEGORY/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_MODEL/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html create mode 100644 docs/about/references/keywords/CONDITION/index.html create mode 100644 docs/about/references/keywords/CONDITIONS/index.html create mode 100644 docs/about/references/keywords/CONSTANT/index.html create mode 100644 docs/about/references/keywords/CONSUMERS/index.html create mode 100644 docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html create mode 100644 docs/about/references/keywords/CONTROL_MARGIN/index.html create mode 100644 docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html create mode 100644 docs/about/references/keywords/CROSSOVER/index.html create mode 100644 docs/about/references/keywords/CURVE/index.html create mode 100644 docs/about/references/keywords/CURVES/index.html create mode 100644 docs/about/references/keywords/DIRECT_EMITTERS/index.html create mode 100644 docs/about/references/keywords/DISCHARGE_PRESSURE/index.html create mode 100644 docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/EFFICIENCY/index.html create mode 100644 docs/about/references/keywords/ELECTRICITY2FUEL/index.html create mode 100644 docs/about/references/keywords/EMISSIONS/index.html create mode 100644 docs/about/references/keywords/EMISSION_NAME/index.html create mode 100644 docs/about/references/keywords/EMISSION_RATE/index.html create mode 100644 docs/about/references/keywords/EMITTER_MODEL/index.html create mode 100644 docs/about/references/keywords/END/index.html create mode 100644 docs/about/references/keywords/ENERGYFUNCTION/index.html create mode 100644 docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html create mode 100644 docs/about/references/keywords/EXPRESSION/index.html create mode 100644 docs/about/references/keywords/EXTRAPOLATION/index.html create mode 100644 docs/about/references/keywords/FACILITY_INPUTS/index.html create mode 100644 docs/about/references/keywords/FACTOR/index.html create mode 100644 docs/about/references/keywords/FILE/index.html create mode 100644 docs/about/references/keywords/FLUID_DENSITY/index.html create mode 100644 docs/about/references/keywords/FLUID_MODEL/index.html create mode 100644 docs/about/references/keywords/FUEL/index.html create mode 100644 docs/about/references/keywords/FUELCONSUMERS/index.html create mode 100644 docs/about/references/keywords/FUELRATE/index.html create mode 100644 docs/about/references/keywords/FUEL_TYPES/index.html create mode 100644 docs/about/references/keywords/GENERATORSETS/index.html create mode 100644 docs/about/references/keywords/HCEXPORT/index.html create mode 100644 docs/about/references/keywords/HEAD/index.html create mode 100644 docs/about/references/keywords/HEAD_MARGIN/index.html create mode 100644 docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html create mode 100644 docs/about/references/keywords/INLET_TEMPERATURE/index.html create mode 100644 docs/about/references/keywords/INSTALLATIONS/index.html create mode 100644 docs/about/references/keywords/INTERPOLATION_TYPE/index.html create mode 100644 docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html create mode 100644 docs/about/references/keywords/LOAD/index.html create mode 100644 docs/about/references/keywords/LOWER_HEATING_VALUE/index.html create mode 100644 docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html create mode 100644 docs/about/references/keywords/MODELS/index.html create mode 100644 docs/about/references/keywords/NAME/index.html create mode 100644 docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html create mode 100644 docs/about/references/keywords/POWERLOSSFACTOR/index.html create mode 100644 docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html create mode 100644 docs/about/references/keywords/PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/PRICE/index.html create mode 100644 docs/about/references/keywords/PUMPS/index.html create mode 100644 docs/about/references/keywords/QUOTA/index.html create mode 100644 docs/about/references/keywords/RATE/index.html create mode 100644 docs/about/references/keywords/RATE_FRACTIONS/index.html create mode 100644 docs/about/references/keywords/RATE_PER_STREAM/index.html create mode 100644 docs/about/references/keywords/REGULARITY/index.html create mode 100644 docs/about/references/keywords/STAGES/index.html create mode 100644 docs/about/references/keywords/START/index.html create mode 100644 docs/about/references/keywords/STREAM/index.html create mode 100644 docs/about/references/keywords/STREAMS/index.html create mode 100644 docs/about/references/keywords/SUCTION_PRESSURE/index.html create mode 100644 docs/about/references/keywords/TAX/index.html create mode 100644 docs/about/references/keywords/TIME_SERIES/index.html create mode 100644 docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html create mode 100644 docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html create mode 100644 docs/about/references/keywords/TURBINE_LOAD/index.html create mode 100644 docs/about/references/keywords/TURBINE_MODEL/index.html create mode 100644 docs/about/references/keywords/TYPE/index.html create mode 100644 docs/about/references/keywords/UNITS/index.html create mode 100644 docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/VARIABLES/index.html create mode 100644 docs/about/references/keywords/include/index.html create mode 100644 docs/about/references/keywords/index.html create mode 100644 docs/category/documentation/index.html create mode 100644 docs/category/guides/index.html create mode 100644 docs/changelog/index.html create mode 100644 docs/changelog/latest/index.html create mode 100644 docs/changelog/separator/index.html create mode 100644 docs/changelog/v7-0-release/index.html create mode 100644 docs/changelog/v7-1-release/index.html create mode 100644 docs/changelog/v7-2-release/index.html create mode 100644 docs/changelog/v7-3-release/index.html create mode 100644 docs/changelog/v7-4-release/index.html create mode 100644 docs/changelog/v7-5-release/index.html create mode 100644 docs/changelog/v7-6-release/index.html create mode 100644 docs/changelog/v8.0-release/index.html create mode 100644 docs/changelog/v8.1-release/index.html create mode 100644 docs/changelog/v8.2-release/index.html create mode 100644 docs/changelog/v8.3-release/index.html create mode 100644 docs/changelog/v8.4-release/index.html create mode 100644 docs/changelog/v8.5-release/index.html create mode 100644 docs/contribute/documentation-guide/documentation/index.html create mode 100644 docs/contribute/documentation-guide/markdown/index.html create mode 100644 docs/contribute/get-started/index.html create mode 100644 docs/contribute/guides/conventional-commits/index.html create mode 100644 docs/contribute/guides/git/index.html create mode 100644 docs/tags/e-calc/index.html create mode 100644 docs/tags/index.html create mode 100644 docs/tags/release/index.html create mode 100644 img/docs/asgb/asgb_lpp3_pd.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage1.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage1_2031.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage2.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage2_2031.png create mode 100644 img/docs/asgb/asgb_lpp3_ps.png create mode 100644 img/docs/asgb/asgb_lpp3_sketch.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pdsurface.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_stage2_at_ps31pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_capacity_and_rate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_gasrate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png create mode 100644 img/docs/asgb/asgb_lpp3_timeline.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage1.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage2.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png create mode 100644 img/docs/asgb/asgb_sys27a_unisim_model.png create mode 100644 img/docs/asgb/asgb_sys27a_unisim_model_filtered.png create mode 100644 img/docs/asgb/ecalc_generic_chart_normalized.png create mode 100644 img/docs/asgb/ecalc_generic_chart_original.png create mode 100644 img/docs/changed_rate_resampling.png create mode 100644 img/docs/interpolation_plot.png create mode 100644 img/docusaurus.png create mode 100644 img/favicon.svg create mode 100644 img/logo.svg create mode 100644 img/undraw_docusaurus_mountain.svg create mode 100644 img/undraw_docusaurus_react.svg create mode 100644 img/undraw_docusaurus_tree.svg create mode 100644 index.html create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 katex/katex.min.css create mode 100644 search-index.json create mode 100644 search/index.html create mode 100644 sitemap.xml create mode 100644 versions/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/404.html b/404.html new file mode 100644 index 0000000000..01ab8163b1 --- /dev/null +++ b/404.html @@ -0,0 +1,16 @@ + + + + + +Page Not Found | eCalc™ Docs + + + + +
+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + + + \ No newline at end of file diff --git a/assets/css/styles.9610a963.css b/assets/css/styles.9610a963.css new file mode 100644 index 0000000000..696dfd9039 --- /dev/null +++ b/assets/css/styles.9610a963.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.loadingRing_RJI3 div{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2e8555;--ifm-color-primary-dark:#29784c;--ifm-color-primary-darker:#277148;--ifm-color-primary-darkest:#205d3b;--ifm-color-primary-light:#33925d;--ifm-color-primary-lighter:#359962;--ifm-color-primary-lightest:#3cad6e;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after,.searchBarContainer_NW3z.searchIndexLoading_EJ1f .searchBarLoadingRing_YnHq{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.content_knG7 a,.hitFooter_E9YW a,.suggestion_fB_2.cursor_eG29 mark{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q>:last-child,.footer__items,.searchResultItem_U687>h2{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#29d5b0;--ifm-color-primary-lighter:#32d8b4;--ifm-color-primary-lightest:#4fddbf;--docusaurus-highlighted-code-line-bg:#0000004d}.code-block-old-line{background-color:#ff000020;border-left:3px solid #ff000080}.code-block-new-line,.code-block-old-line{display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.code-block-new-line{background-color:#0d8a0940;border-left:3px solid #0ec929e0}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_b6E3,.hideAction_vcyE>svg,.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA,html:not([data-theme]) .themedComponent--light_NU7w{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,#f5f6f7);border-radius:6px;box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64);left:auto!important;margin-top:8px;padding:var(--search-local-spacing,12px);position:relative;right:0!important;width:var(--search-local-modal-width,560px)}html[data-theme=dark] .searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,var(--ifm-background-color));box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309)}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2{align-items:center;background:var(--search-local-hit-background,#fff);border-radius:4px;box-shadow:var(--search-local-hit-shadow,0 1px 3px 0 #d4d9e1);color:var(--search-local-hit-color,#444950);cursor:pointer;display:flex;flex-direction:row;height:var(--search-local-hit-height,56px);padding:0 var(--search-local-spacing,12px);width:100%}.hitTree_kk6K,.noResults_l6Q3{align-items:center;display:flex}html[data-theme=dark] .dropdownMenu_qbY6 .suggestion_fB_2{background:var(--search-local-hit-background,var(--ifm-color-emphasis-100));box-shadow:var(--search-local-hit-shadow,none);color:var(--search-local-hit-color,var(--ifm-font-color-base))}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2:not(:last-child){margin-bottom:4px}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2.cursor_eG29{background-color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitFooter_E9YW a,.hitIcon_a7Zy,.hitPath_ieM4,.hitTree_kk6K,.noResultsIcon_EBY5{color:var(--search-local-muted-color,#969faf)}html[data-theme=dark] .hitIcon_a7Zy,html[data-theme=dark] .hitPath_ieM4,html[data-theme=dark] .hitTree_kk6K,html[data-theme=dark] .noResultsIcon_EBY5{color:var(--search-local-muted-color,var(--ifm-color-secondary-darkest))}.hitTree_kk6K>svg{height:var(--search-local-hit-height,56px);opacity:.5;width:24px}.hitIcon_a7Zy,.hitTree_kk6K>svg{stroke-width:var(--search-local-icon-stroke-width,1.4)}.hitAction_NqkB,.hitIcon_a7Zy{height:20px;width:20px}.hitWrapper_sAK8{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;margin:0 8px;overflow-x:hidden;width:80%}.hitWrapper_sAK8 mark{background:none;color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitTitle_vyVt{font-size:.9em}.hitPath_ieM4{font-size:.75em}.hitPath_ieM4,.hitTitle_vyVt{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.noResults_l6Q3{flex-direction:column;justify-content:center;padding:var(--search-local-spacing,12px) 0}.noResultsIcon_EBY5{margin-bottom:var(--search-local-spacing,12px)}.hitFooter_E9YW{font-size:.85em;margin-top:var(--search-local-spacing,12px);text-align:center}.cursor_eG29 .hideAction_vcyE>svg,.tocCollapsibleContent_vkbj a{display:block}.suggestion_fB_2.cursor_eG29,.suggestion_fB_2.cursor_eG29 .hitIcon_a7Zy,.suggestion_fB_2.cursor_eG29 .hitPath_ieM4,.suggestion_fB_2.cursor_eG29 .hitTree_kk6K,.suggestion_fB_2.cursor_eG29 mark{color:var(--search-local-hit-active-color,var(--ifm-color-white))!important}.searchBarContainer_NW3z{margin-left:16px}.searchBarContainer_NW3z .searchBarLoadingRing_YnHq{display:none;left:10px;position:absolute;top:6px}.searchBarContainer_NW3z .searchClearButton_qk4g{background:none;border:none;line-height:1rem;padding:0;position:absolute;right:.8rem;top:50%;transform:translateY(-50%)}.navbar__search{position:relative}.searchIndexLoading_EJ1f .navbar__search-input{background-image:none}.searchHintContainer_Pkmr{align-items:center;display:flex;gap:4px;height:100%;justify-content:center;pointer-events:none;position:absolute;right:10px;top:0}.searchHint_iIMx{background-color:var(--ifm-navbar-search-input-background-color);border:1px solid var(--ifm-color-emphasis-500);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-500);color:var(--ifm-navbar-search-input-placeholder-color)}.loadingRing_RJI3{display:inline-block;height:20px;opacity:var(--search-local-loading-icon-opacity,.5);position:relative;width:20px}.loadingRing_RJI3 div{animation:1.2s cubic-bezier(.5,0,.5,1) infinite a;border:2px solid var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color));border-color:var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color)) #0000 #0000 #0000;border-radius:50%;display:block;height:16px;margin:2px;position:absolute;width:16px}.loadingRing_RJI3 div:first-child{animation-delay:-.45s}.loadingRing_RJI3 div:nth-child(2){animation-delay:-.3s}.loadingRing_RJI3 div:nth-child(3){animation-delay:-.15s}@keyframes a{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.searchContextInput_mXoe,.searchQueryInput_CFBF{background:var(--ifm-background-color);border:var(--ifm-global-border-width) solid var(--ifm-color-content-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-font-color-base);font-size:var(--ifm-font-size-base);margin-bottom:1rem;padding:.5rem;width:100%}.searchResultItem_U687{border-bottom:1px solid #dfe3e8;padding:1rem 0}.searchResultItemPath_uIbk{color:var(--ifm-color-content-secondary);font-size:.8rem;margin:.5rem 0 0}.searchResultItemSummary_oZHr{font-style:italic;margin:.5rem 0 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media not (max-width:996px){.searchBar_RVTs.searchBarLeft_MXDe .dropdownMenu_qbY6{left:0!important;right:auto!important}}@media only screen and (max-width:996px){.searchQueryColumn_q7nx{max-width:60%!important}.searchContextColumn_oWAF{max-width:40%!important}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.navbar__search-input:not(:focus){width:2rem}.searchBar_RVTs .dropdownMenu_qbY6{max-width:calc(100vw - var(--ifm-navbar-padding-horizontal)*2);width:var(--search-local-modal-width-sm,340px)}.searchBarContainer_NW3z:not(.focused_OWtg) .searchClearButton_qk4g,.searchHintContainer_Pkmr{display:none}}@media screen and (max-width:576px){.searchQueryColumn_q7nx{max-width:100%!important}.searchContextColumn_oWAF{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png b/assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png new file mode 100644 index 0000000000000000000000000000000000000000..07d2ee8c95711c1350623ada5abc2f3e6308626f GIT binary patch literal 44134 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 literal 0 HcmV?d00001 diff --git a/assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png b/assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png new file mode 100644 index 0000000000000000000000000000000000000000..001279ea62cb0b290286ecc16b38ce1b3dbe6390 GIT binary patch literal 237031 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≷?Gu@&hmiW*naLh2w>J!Zn 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%0Dr@ickf=UK0 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 I>bv0n3!y2J8~^|S literal 0 HcmV?d00001 diff --git a/assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png b/assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png new file mode 100644 index 0000000000000000000000000000000000000000..72c154ae4f13cce0b2b6e964b423c90db0b6a9d5 GIT binary patch literal 45513 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png b/assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png new file mode 100644 index 0000000000000000000000000000000000000000..081590629fdec32ef2618b23c2ac8b2b9b847043 GIT binary patch literal 157773 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

>3-JXP1^3y0$N-5uTzF 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png b/assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png new file mode 100644 index 0000000000000000000000000000000000000000..aa408a4e5bbe1828b0b13d557a07d7b340f08d1a GIT binary patch literal 38869 zcmZ^L1z42ZyRV9<8wnK# z=Usz)pZ_`M-n*Y?KYJs5YgWAPuhxg5>ZFYY93waHlr4n|G$-DFIb9$4b)#l=;Dgrhn`;{zOrmg}W|dnV*5*6ap1&8u zjZd#>cii6m+ES5hWN0`sI;vQ!u0>ia)ZAdY@8?2 zws?+yb^PkSJ{I7=>w0Q-vi3!dWrWh*#pTO0N6+!6J!4~ItLIzRbFpF>$7>(7@;Q*~ zUn(mr%gV~CsuC&doVH&xn1VUn!_I-|n20naNWy(>1mk_dTOq~Wem_C_UYfBd-nqEr zs|WR{%;$>ZPl*eerN{i9yRpQcaKa z_KV>0!~GY}qO=r!Y}Aj4#CDNZJ?VpsA1w#J8xID=Yl>6JDYj>(mlK{ z+mp?Z5tuRbmH$ZzOwZiS&CSoR_Ar8Ku{-Un^Slyb>CX80c&HVeC!z&9mgr-~PeI`I zbNtSC`QAW%=MnZMc(dG>Y^8*R1e1ecc^#PD_r3`hqYuybvz^>Hj@IO6v&prs^d*!n zvT1C8_3I$eOO`9qgu3FXI1(9;6rF`)P!SX?JsM6N!po?rnj$^qO$$fI&C{db;M9b7 z<)~CLSdti&q<&}4U*UYmz$twc@isg=tM4OcUIb6k_dhc-Sncf#H2B$+(5yq)Cp)I+ zZP7+&qNK;zpm*d-VA?;Q;k*AA3(dR>Ve4(5ean@s&X`E?Wc1uY`d^HtBE+#tv3wHV zd#vRKB`~7Kp`oFP3BxvZg6jvTr#?p|2}z`n1NZ+96nO-BoW}QwLE~*#S68Fx-)VDW z!abv-qcT=^o5}mHb08zyn01lSx3X^ck0mgRdy~?amX+;(myx8f`(AR=fHa_Nww)(G z3yXp-uq;0-{`RXZxjZ_*GW}ewF zOy}(JB$4F3p>ucB=6KQ5+1cAUciV?BA>)2~CR$pg&E^ViX+=f+bBMW00O(34+9DWI zebalqHs?K;b|;TSyHv8yk!D}mPxT30c{UBzy?7467@Zvz$k&G`dXXbPhn8w=GqAJI3DR|X40eQM>73Hq;o z)DsaZD}f%lQpr9fP>k0N=E!Txw(fV1uMhROt#hvcLxpNDJ$!C<&@uV8y)DOiy`4cP zZ_ex+Pcz@uKb_(F2396M;KhHe?l4isBPl5vBza%<`avucV}$c5-u-@K1l1K1;$bH+~IlvYD=~Zf`FR zuCq3i9xUd=pfw^aiRtEgIJZ^Z5~phjRphmKb0P03hpkY*s(VAv&`bp*0bR)Kqj5RmzbOg zo@Uoeu!UIj8`$;q_39T91nns7ZwkcFQx%vHjjip_s#t|@) z{;>BLETO3c|F`-X72Wiw3fl*G9d1^;NT8OQme$04(?X>iV2uH$Cw8rpqR7o|;Nd*$ z2Z~RJ0Ij3Fnl*`9G;1rSpgL49j~S;3mSODKJ{k}b4q$2q0SWJ1 z`54r!x@fx#>Y;i|If082dyv$Z2ZE~1j<_UeFM39-gRsnZrko|xqIm%D=R7%78mt&brIMaWxYgX3NRwzAWFV{ug~sE zy2uj4>bF6)PO~tCKr=ZnHI^{d3Sk-I-q`I@RxQ@VKLON+WzX64Q<>wQz%O6E9MevE zIU1dkHP{UomkLhV1{)b0*KXR&@3IcOmr(Ne4H-? z8i%SC(6Uwtmguedy=-h0FPiSGD_er1>64>fJ?ql!)aT<7*6h^KbZqRu5N-S{ICTY$ zMi*7e|Ma|=&56rx(&!nGf%q!bR0NGXl)xPA?ZI9eRXa0cYcUCmg?jk{42waVbrDre zhMfl5;0<DY_y=T^2fzelH&E?;|+Ck!pqh z*^e42`n>h}9~W1m;>r`_}MnrF4PXlKtruq^18GMTh| zv~2HitX-e7-Q8OqUR+qv)%$}+tj&M8w??0}UE*lYT%+%E6XVHf$ixz2eZ+Qmz9XSJ zJ4Miu30qJ75!esMFQc$eu@n75f&TjSYgJWMS=pQvp}9&C00M#S8;c{Q=B6j5pb9^I zde6|=d#UWC3NRJb6_f>-;Sv)`rtp;!K%+Q! zZe3Q^Z$0E*(DDp4rkq+oqV^9Mc6X~{A8dHG;d`_*AI{o-;my=$t-V=af9%@jP6do z2)s>(Z5OH=&Ylhqk<|x%eVW;sL{(mUwwf~!AHlS62(xwT^%Uu{s8INkJG|a;IXB`o z?EB_#o?H+ta}-=tN=E$CM62Sib8~ERPb`0XOkD__wum1Elc&VScxv4|Qj<8+M_UC@ z#mO&2Qx!d9qPiu}J0#6j-cwt$&Y#%X*^hToH%&kfm@s~1*h5)L=#`fyl*XC&dx_Zo zO)Ggu_+I3Nw;pnMc-ZrPg)i$QIj?G>H?Kpi$*XS0=Vh|?LI$rEJm1jb=_gTTL)#PP zpS;FFG(jMo%J;O51=bUx*cnFYA~i~n57@I@Po4zPa0Da|6rHbT@fA-Uz=N8ztu-pS zy$|f+X0bmsX$rhr^KYOpxXzJuW64k!XIpdbF}>r&EMAEO3L%-5d@;rk!O++_{hd8l z4V-z1{t=09e0Lq;c;Da>peGJ4E)f7uymyq9l@qv4RPX7u#bMxchw!bwTFsg{-tO6F zI{HVZ!g#T8ywbx`ipN)%UoiGZvIhKV3km`@NLQ<7CRyo{HecmXs73)>k9wdNtVolH zo@^x^5#@P`B;SiwBRtX|!b#orvNoA-$&Vr4vo0xI!Dz5SYTNVeZl!RU1lv#A^7VQ8 z`JMOWDq}f9iT6~KPoZgt3RC}uiiS&!d!*cVYxs?rv^Ku71nQxxKA`ip2{k3bm{6HC zjVrJ48Z~TMVt@QW|A>H@=b6H;gZImo6q~DV(j03r9cVUa7NBfx44aJ9Q?fa>Aa&ZB zdzl^(+HFW{8B>wZV1ve-dOBU4j|6T3bnbmmzV%rO;_xm(eSVHz2r}nWTT4kpg&jXu zkTI*KR{5P>Hk97mL&hU*%J#k|Sjy;@{8E6MDey4Yjd z;J&Y8%8?IbvT1DW=H-*DGJLN|7$iYs8?Cs#jCkk_s25RF6rWP#y0tQ(&g1ceO8{NZ z9G7>OCj(4WBY5(z{c9~A_FvkuMqAfXO{yZD7ci%!`=h#rSj2ToZ;4lwqMra|-qf@|>-wSw%iE0<% zA)NjW=CNc*mGG@OJ;{13c==O`MKF&x0e5~cJ3BiEhi(mcbE3wN&eOx~S>mL4TG2I9 zx0IBW+l=RebbBET_DavNx@*=XVk08VQg&!u0D1%|IFKPrND8rEu;p8UT&i+FY<$Yd zS2nKv?YB(OtR?ujHs%BTi5%K5pGF!*44o{5bWik@68L@`<#a1pMmT zOv=ZsfT(v$?^ATYmU)Ia!ud=0VKO|SCviiTQ0aperSD-74d zy226W3?B}ezArrzrk0j4rDUog-XoydtlPin0iDxc2l#BJsBca^YU*W6X)GP>3GGF{ z|9dq>-x?*$6^*mm$_Rr9!063DXs)c-VzD*LR3RxPg>vxX1p?k2eXDtT+2xa!2~|l^ z(R8Mhj84qloj46BRpGnCjSU9_7`wbhtahM~RP8@dh6M_g#d$bg!yVg1%px#FB*L0) zbG)x|UDRvvqfI~Xo*5Iyg(3!+3OpXo^3Ji!&o}6`2{m*w!;ZGc7Ybn}wLTDnbwDVc z3cw#NfE|pamGoQaOu9?Rk>w$+q$jYB>da!K|4TziE66JBeh&Q{y>INl{qJRAAqO=m zsK@;njagJ|q3KFB_A)5I9H1jiSAJd$|7|`Rqb6}byk;JyKCU5ClQWc9Isi)(Q4(gO ztyO~AqxW(oEmAA~D!>401L}XFRtO75VymmG3X9mR1E7JZsHoyb$g{>F+p_Z$K|=bY zAL+h8Mu^>wPe{01JJv*Jpv|PnL~qQX;|Kga^z1pGPN`nf`~Am|f5d^cbaUoR2;pdp z*tv$vszwhlFK_H3i#ET^wEwBvg|zoJYum3t3d^~$iwEJN{-^oYLNW2!+-hw6pzik^Znmy+$ObfFJnW)LT&*SCZ=RS1<)}P)=<;q?cW+AJLog}Ps5*SmXokcRTmfSuM@H$VvtUOq3ahqU)z zm(@ic$)@{&lTsW@+<*Cdp(~ug^1+vx?FJ(u|MS!B*_NI(QIFZ?2!`QAG3-eM-)w%a zhZKF*Qb*Ahlm1m;r|yKuQY>>k-SelGO*6OH0rK$|Ktht+@H4+jQy`bf$jCNpR*U1} z;wBYOB_H*RU`M%mCOBv7I{ym(7mPP*DAI+WVp&X5vgfyiB4z(0zwHFS>Gn8wTwmL_ z`xDF;?8o==y&rl#bX{6^qdueymsgufI>v5#hN&(Ri_jyla3-bpdp+zpxVg=NwcGot z@7%%H7-`R+%={C0iei(x^qdGAW&pe=)we5WNe&7_M}RtWcjPy4ERm6-M^f&v553=P zmy#*Cf&Lu89Jtfe_v6A|@t*Hi1|{L8-f6Vm^>q~eTv4IBmdh@!1Nihu__eoDU z5C0!0olc7nL-oxt6T2K>5API92aGP|+&DuxmFG9<0<+ERuycijSsxSNEhF#Je-X6j_u3urILtiq46G`N zFNV2{k#QOJj;|(5t}g65Ma=~h5;E_%|FF%XDA+Sk4QUBMvb>JE-x5X9sxdvK#B#@A zf-3AEVV3`^8c_k44r_T&tLyEFCjq*>4Rb;L?e}@h9!>eTZz>RnH&; z0aXbLzTeF9y5_g<3p3J|r+s+iDSoIC_yxr%3ZG=}> z3tz}w@7KWtl-C@Re$(Nsoacz=qjiyii%p?lM_)3Zg}R)<8%xJS{Zm&0{S~!@A8O+j zg|N-FwagTa9zZV+ljE!EZFHv9)Sb3-EWsb{dW5NPR4RV0n$>sD3MxaXV;wUM9u5WNfOY2-; zd64alDxaqvNJb)9%+WnJbsk5amY0`fnbt>%W#>?Kw7D3zIdxg~K1fjX5rKh$wsb58 z$~5;Rl8F`WG`+lf zA8MVM+S@g6!LOoraA|N*hp7)N+J^pe(S)s72MM1uDI@PEU@L@40?Me*PQROZY!b9& zx$6`giZG~*|EPO3k$f^5T>|Uh-rKJMu=nbLy#W@c>~ja9$?`iu3WEzO;Oi~F3%Yf7 zcVnR{HxXo1Z`C5tiRsuNMew?^GKPYk5fCR~(?Z>r_zTL$y8!!3O6b$>_F`uwdO4&0 z_N4;762J#XblZ2+e^v zdTJ962XW-AhSx$T{GRq`h;ifzg|XR`_j2<-0HfWtZj zt%J3zc}09rV4E8oJI}>EHc~H8t%-_1#Ns6q8DJ4p#vU_`p<4N>N8o2|fm#xNCWO*IAUl#(7lactt7dM-$ljKw6-pd;eT`{fdgV<`P1U0H*c{}abKhI-Af|cu zEB*TkV2nt|sc+clfeQ#91N&;;rw>b^;-K&3o85P;`LPAXT5$kvpma_b1Dbb1jO+Xf z{;(fDUblQB&Z2C}IM_?V_qgn*v6afzcns6cj$6E4Rc9#<>e5(1PLlx}g3Z~gn-eAe z`^eIs5RlvER}Ode^nBf>)S~IIjtQ`Mmt;9{{#cNO9-G^OOUKR1VTcyN|M*rs_Q1h} z+S}WKQ$yInAt3Ml&!eqzSp9*O#i_!x;Avil|30br(HN}fu>w7sc=vxS1%b6j;K`Yp z8DJPc_mK1AaUdTP#^1F}b~+K9{MA5vzV#)2j|2PUF*sRaeORJR^ZHL$oaei~2a`b5 zCV=`wg4A*D8Q5J2c6Y6t`4+$(><4f!^q&c0tHR;G4~>naYq014Un2tWSot3Vfl~iK z*VCpnEkX`i8%Fyc-<9>7U zesip9p6y^e&hi*|b+G3m)t`H{A8ymhX9GUQ7NGWXVc%oE1};O;X>CwT+m~RquWuB_ ztHh{&hF>n|Ip%F@!c3>@3@C^<_j7DIjl%@;KqUN_5ODpzW@?fF_RKON-mGJZ2BmO^ z2Snn#z2|C9dHrIu5J{bWuSIYJ-k-i-HV3j+e)X)2jkUFjBY1{Vq#$Q7PencSVrIt7 z`J0U-$owX>I+mJ$^!f}Nc^EypcyK-_d6I0;ydHSqS5~W&4H)X+V#>-XtmntjP(^al zkiY->50g5dBWI_silR@+cL_wIYP|MVd?mkDZBpsh+5hJ3dD4aCKvK4x_q-(fMwtKW ze6(T`Mnok{^TFPJwSx4RyMDF!>xRL}Y{?ASz>9Ib4&Ita6T>d)g34c5i$^O+;}_S? z4(hJaav)Q1zdT*2!mq+T=&4v2n8cBfl(&64ZeU-2{uSJ$b~t_u(Nh0n&%PG7#|@?b z_=&_9T!GFc+mD-VN*qljDm;Y=h9A^joWU#3HYSu!j*`t=BE>HT&OkDJ){bxcVSTLJ zF8WJ#^-+IMN)P9gXFciSCly3K57Kx=MNg*H#3!Ei-A~zggUscn-vcQ-XN-GbQ@-0Y zS?s3OGB>Wb-Dk9wau4u5%bYgju&0-sd^(rbBlU`O*av0w^l7-Cw5sK9B$TN3x6E=X z)ct{YZf?94pPKFI8x)ltnTMfA-9aST(~UJu#w#YZxwp^?oKY2(1Pj*ymdLPk|8(b* zogJuz(gDAtkCj6bJa^M#z&;5|%ID?yQ)1U8e@KL_2A+FHCG32?z&$WGf;6^ep<;h} z+%#}ecXKrI<&>T16VXwW_1Iv2{iEIR2>~_8PQS1PM^D0AbcJaPEvYy!ua-~CZH{DV zbIfe|Rs&1$Tf|x6q8?g+xZeUY`8Qs6w#m^LBdkY7LOiULsC;{aJ%j0H#(g!#_1vD* z%_u*7@3zodvgFr3?Ysp;RfXnlM7UBV=I3F9Y!ql7Ey?&EM)}1|zwW{WDxbli!Q?WD z1alqZ-&cJdHr?FDFK1ugyZ<2gKBL7Qdma1p{0za8`*Akw?fKt0yxn5QDpqp*oImYe z+jlM;`xwcXq1&Fng&$KgrmdM#OksT7J}jGdOj6h_FxgS{z-QTJuSJOc?3@@)Z~MhQ zGwp>oA1Cu<&|q;`2Py)io10BO7>7h-0;~(>R2CD(-c$Q)^U*&&teJ&t*Vq}DGcl)s zOJe3{to{PmD5Z!f!Km1cCuxMFlAE(OX!z8e3I(%PqIrzsF^{u^*bI7%eD>mZV@`f} z_$hdMk9$#(BJJlMeuRNboq5k5W9QakRL$3~%27%QdbK_h8g(?zx&u9>7(F)=x3vrZKJjwLM92jJOoPB`0y$FgPIQRCu; zp@$eRp6OtA_WW~LHEU%x_TVEjh1e)M@Db;k`_#TL5t#yOHpuF85jL-D^LwI%zO4O% zEW}^b+CS-)%Zamnm{L&nDtbExExq>X_O-J)V{yB~Un{*vB~g zVs@f+T3-S;!!PTLCS{0_F&pN#3iOGm8rY&FmpX8g(Vc^U@n6b5$iMY-K; z)coS+J5uha8ko<0?K^HQr3T!}QATVss>h05rCwvuoyHKQf@i517fD{c4}PcQ2TN4qGL^pXCcnxgIZDDznsA207+nPaP1J;>?OMOr0x3-}$i?edKw{+CXY|E#19r>NKV>MQDZ}=9cKM>LVqP|D6pJ(@;R(PQK$?^*w-lG8( z@k4|4@SVef4^&?9D^ci*h|e(*Vez?VvUPvUud|K4%!7~JTMt8HR$|p6k3+of=<+`s z6}{X8&CM{?C~~J3H`>yyHjmiRHXLf1gj|Pr{nu$ zq4IL$szW<)8h`CFdzTl|0NZ!p3G;zraE3H66&35{k3+&L(lXPu|J(OjiNOf&|BS#S z3r6TwWdo1URS1F3^Fj!*c~QJ@BBHt%HBeDeK4yD1tbs`@jSQ>cj9mTOTY2w zX#;sVwQ4u*-Pmy%^BN8$a}Y8+|Az?M*iZ!;e7u$eHL1O~HFi#oFSU31^uc7uDuzKp zw-LJV0>1S3v6J;m~pjp?oa-m9Pmns=8sbQQbEV5PINO={1bGR z>VwHi^G}ZR8wRGgbvKTf!lUd1yNs@``*0WZ=&sg9hHb#zz&evI_vxjzHlNV}^QO;@ zo+w>#F%2;=t+Si^P`C9tfl=;h2UffI9T!q+V65MQw@v13pLUd*w;c63mz0kC7Ez+t zfPEpGI>Ag86b$}n#&GP6ui$?UhRGp~mKubL7S2yhGzyJgt*j;3aT*%dwT3y!%9WgL z>)908*F6rQt1a~#9+|EkiZE_oXHSe6eojp)J|Ay9i&|o>WW3z7E3+@0w9CqspR$A$ zvW()eKkSZ9t_XvEcjRBn^0P~t+^|c_h#0nF-!(C~Yae<)&;%<;3bFeKor}fJheoi| zfhZ!Z!rcbfmAAO`VCB=i_cPpP0Zp|A1Iyr(F}}`byU&Bi+`RV}IE8Te$1Cc=303%D zkEMzgLMqTYX)3j+_Aap2_creXSt+(gmnQp@Mfe7+z^IoU70=)lK05k@i)|-vVscW)8DEG^ zL}tT2d(g?`kyGS_0BNB`WKM~_gM+hNrj3ltu|c58Jqm>%FTP0tVbvFAtz5=(`Zn4A zsp;hj(OG3;t7!Yjn){pv#^9)7`lzenDN*Sg6F*D$ zY0*U=d1B=+60AlA4K*%}Er=F*Y7LCo81`DBm;KNy-cAwDEJEas5Ia$fyY^jUY2EZ!3PI;MUU?2K}L8JROjyxtE4_|v(eUusmN^aW%T3Mg$$676wU4_cVuww zl8`HQ`bFaMTB)y03Whq8VcRdhF@dE*%}u8?4MFX4pqsJS;Ax955?ukOA%=h9N3$m{ zibUC`&-_g-qgi0q$NrqnQ~jIqN-x*!Zg`;Pm;JRwNN@A^USCN`+?vJ2-@;3NUDyAHGOPZ7k2?Pm zwikq+xvzT2dC(ijI5hL`8&g*p5OFBRAhRiN{T#HW52sLYFk%1Mkx0}ky-R;KFK$vNVZTbJzTm~w6U_cZ-Tg@Al0Qc!-&>{<3pW;W?YjtZAveHRABI)-Eg&e8Q zoN#|}b8~}tC4bpv8LV#LeaKGxq}K#f{_k@|0mJds)TRf(uH{qCyxSZ|yI|>fVFyqq zkCDH}0>fRjU4KjCgZg%_Dj^u?V0c?XeVTh!lU%Wg%3aYI8AnQb{}F_s=rvWGl_Q6F z)ccvySC0X+STxsv%e|}uuLvxh>ESn~XxV@Z|IZ_c7)@DjJ-T^ZHD zL@rZ^5qBq`lSzX0e;ZAONDN3sqU%3(7U{#CPYeQ$gE(%auCLq2IvH@8&+14`(^jz5o!%q23cndYO>u9ou+%PkzvXGGdn*Timv z>G^=ZBU-oP6P7!(lu~C)%)*Z?-18+n184(zdo69AK5cem)~@XdR3tv*jnVTJl*n_} z4g4&Je<28*b?G3VSAV8`<cFC3{u;advir&2HY0gIK?N7?bqh-<&Syw_8m+wR5hR z6YAx6;_1VNZ;1z=_kTxO(*z^WdQHo2YsX`jZ-3aco138`HM%*$?_h=?r?_zdkXGho z>>*TyE5`wnHa^_G`+1??F-W}tcaM+h5FJB zNFmTdYlCFhw$rQ~`H%O?BZ~-UqPqS-ou;f1$%w(?h&es473!fb-+OX)+la8@JWL8~ zLGfLB-Z0gg4bNTH?}G$K-q9AWMmdWj3@+=Lv(fM9yT`_oX?hquzjrLsaZZNLI}x@= zT@zc5<_8r!^8Q)_Z;ty_Bkfd4tMGwe3>Zd+(p28(2p`Jj+Zv2(ajx`=Z&cDw=5GZ5 z!4vmG8ht5%CpJdM3#Es)NpPimE||WV_*}=Z4PZvA+zE(&>ijUUOsZ{8TFMp@=VI&5 zP-!)UqHJukl2wdCsP-53CDdh#U=Aj$BP)NOkGv>9SEjd`dJ7VY7rriQrP5!OdLV3Y zQUZqNFdkVsz22qA^uHO#>h|}!3z6;T@F;gi=_v#_Be!lj- zqpx_|(&z^4v0_F;q(19=ANgvEc~nGaYLR*+4u3pez_bUF~+1#>{Z}kxu(NQ^dEyeSFupxQ+bouS2#z&s5SKB_{v3ih}qhc7s z7K--a^)X5kDYyH(N=RPr;1Q12D&FDwQFl2Xr3anMO*gGRkD?vlw(q};KgB=!T+$RO zrxqIjSCTRlbBs!5*~s|#37GT*7O?q~{CMACGocQ6pw&yKuFrd2r7bYa?%vX$;#GI# z3p@dJI=4amTH@y@4-tYwmDGFc2#K+UX~Iq)H-j7_@)eYNZhZ0PY}Q^U1;6p}>aq z5SEanfD7-NKI;s;f`OD-KEGJp6`crWK+PQ0-e+!RWtAsPil$8{tY{(qpkjE7aj;K2 z5t=kb)-AQWYB%rwq>lSZf-VA)!Ow#GW&8L=;JGq;HmBS>nKwmlk>UbSm!NiYIb=v_ zy#^*2;dxJ(O@ypt2@{jP`o6Q=4KBZZN<#^zeD=#Ar-td)B;0NdEwYC4ddBq_oSF=O zu0Eu;03git35B@bt1L-|YG3YDhW|lfLy6z_Q{N_AV9%XkOvkHRyI|K=}D_EJ!7?G zfbO@xn+pE_ps0v|?n}DJFp1dCm{twU*(W#+56^JhZo#J^F8d!En4-*QoL|O4TNvMm z8sG_0wJj;4iSnNb7-tmq`rF8r<%Yau`BdKhPp$puTxza#ENLJv&t-_K==DGFQYQXT zW*nK_f`5r3!B|4niB~d^#|}XjdCy92D|_A zatSR^uUHi}Hm}acSFzp^lf7L3MQvXvu|m=eQuJ#faJ!a>*&|53@^Y@rw}P)Jn-@C% zsiVjUQp0d$cKEcnl4R%-AWN?AP_O5IdUnD^L%4WY}@Y3e4O;ri}Fg72b;?fWXm7 zyxQdKuv_MjlCplOV{3Xh>v_5?r~ndB*6%M*EFe<;n3GigBbkZwJ7$yPlG(O=--kn} zmviQxQqH%IC_?9C6-P%%{dkarT(@p7;|D2s3%CZQf>%MhGjh69JKnXbncQkYG%BS% zn>Sa4MV^{1SsI#e4w|kmy^#j=BJZ4%ZPDjt(;zeeBLKf96U*VBa##$2nYnNH2}IW=l!%&OI)jHOoC_!e`hUk&gF``qQW-CEok)T)jn$04*sq+bXTj?f8+V2posb}Nr0@`Ph)P3p2_oAB^QK*#DlfiA<+Hsdh z_kYsOF?K~#Ud8?6U!SvElQq+a;{UkA5v)SfxqWNXx6E$(eH4y+(;+4Q_0r<_?Gqk@ z^=qlT=D9xIS|ao?wI^JFFo*9gvN8u56jyq1#&jOu==0;cG)Ry(`v);bLS<8~4fofS zezwevH)1*Ga!JlJl($<4ron2;jfeRDVetCkt5gfAGix;L+7TcogR!Y$1iY()c|`L&u!pE4kTBXu4-vL1KFUS{UXr zzxDSAp@T26t9D+$7IyttzZ*gXO>XZdVfaXhEidc-3`^nn;XrkqVfKttp><}t-vG?H z=&K*=yH8)y`D^2LTx-5m+vPF-0LS=UF8aeYhH4fcQslSd?aXHqKpmGG3pgK!Riy$C zKf|u1^&g{psotOzXU_dL4a zF<8lo4!6BDTamAsdwV;0_sDMZPua?}iG>1$yVtQ~s@UVEurOvjmP>(e#lsL0e{J2_ z;w&7zoXkSJA$+e-X8l%Hic-nf~=t_2v~;jLDpWgVJl5sl~PAxaVcxUycM8Nm+J3 zT+;vXmlQ(iHScqgu$byTFwd2#2}<x_c-6h10Z`Ow)k*rAht%&WSl@s`_j6*Ma+5+#Zh;;p?yUTYFYf7RTZJ94O z`&@#gTkuq`AR2$HRQc7{FE+YP&;24X6na;J*kLC&#~tnih%m+dvGbh(&L19y_-pUB z>dlbz+C^X`r%ZJE>h3<*XwWI4CT(O$2{Q_DL|pS|SP?^t_j zLfM9InzuN~YIFC-+!rzehDmx>;vbl?Yny(4&y1*S<6tHO~~=B|i(scltK%*J#n{T29rV_pZ%YRCO$%PeBm z_SKJ!kV-)!GI{A?qrS%aUpiZ|ts_th@kxFbwR?S)p^iby3p*XVNc?4P^(|_`k2$<* z*>AG5`Gpul18%E)lWz5)llpwn*WN%~BFbi<4TcD`wMA0`O4+&{=khTN^?L=na%L zNCDFFR`Gt+|^}4&uL& zPoU8d5vS1>YkQ@>3`|^05b~6TN&FqMq3sYE#ZuLLK?sq=5Jmg5_^5%f;4JqMxbq8O8b3BHRzY+6cmaA1AHxX%t?#o73SbmoDkyw+Z3lhV_ zHqfa{Z8$%ggxP8&U~Vb@>Q0!D49Z=1``v9eL+3ikBka{c7uMMxFI+m?CH?2x<;>bY zi0RBBE=sn$#*j3PU`$87v`1gQ(EHTZ>x3<249K50)RlVnSii!juI)-8;RFIS=I_-! zt*Z=6dPneTOS$}q&RVOMFFi0OWbESi} zVPK&ER0}-@^nr<>e&0a>Zi=#blE}Sb$ zhQlMrW4EksZHG|bD&}*!W@tX4Tk5?P9IE&r>VNe?q-mTT{__QVb8_}(DL5&((YOzR zr0KqYK+jjYqOR{_K|?YjX;`<}76jKtNT`~owsJH5X7~thl(sP6ABL1*G>`5q(nc0< zKUQC|5A|}`8Qa{VksX-wfq`L>3Xu>=0T75fC-eg(b}w^Td*dbRT0jRFJcx?j`bhIp z3}bUxkgVM8jgntaXR`7%9uNqZq03~Zag1tAgrIMpmKYsZ*x*xyC|o;YL!yJBKH9F| zZC;uw&iwKbf;cC-wH)PByXOv5@RjW(h9DL4*g5|4NIj8AzwDquaO0DI5}It_^+Jb` zAUY4iS?)7@kB4U7nEt2Kqy`2PDC81~Xblb5G0{oDDc0*BMPO~$?)yd|!WwC?Fn|zX zS($V+u5wOB>UP*P;@QHAZ8`Q@fQ5Qm{h19MnPx7Zz$#O7M1Vst-Hmh9cH-;m{8COruv*a5^@T;%jkvyiuvUO;F=40_y>C z)UXpU88kE-O<7P1wx3Lw=@-u~|1HSld@V@|857DL5WD>^!4>HfS!9XKxNq}Y}x`atK4uz1}ffl>p8x5KJOX?%nJ@jEz zUbki9nkROVX*{=-iF2+{8#ml1q*{|qHCu-Up{#$+3A+S6E7tz4O;9zKYlqQsL9=Dv z<_-l~|5_LPB%5}2#`A*_kXzV;S+z5yNccX#)YsfU+{`P3O8H;CG{n=Q`xWc@?F^)> zxpjZ*?8AN+r~pNBs{ex(!~L=fFO9}FvExmZ$b8H|W>$wri)q3!Vb000RHHs76}8k1 zk^ur@(n+djDlD7aq!%BiOR{T08eKPkj4w#xF9)w*zV>|o+`2F7+B&rR=a(wHZb?;9 z8qPUu>*mmFBjh1Of&b*|Lo_3~s3j>6x{dBzj>P}C*0B*FruzQNq+U`BwaW`P;wSGT zbBv;Kj&aI6jgPQ`4+hnJsf55drHk0Bt1g_>uD zV*3#M9v{MnTwG3abBT;-!4hc@(S13YcZ8A68POQroaBUVgU6tr0^v3NbLM@fH}m9r0xsCj^BCSbym6dMdF|46vV%!1zp~c1$EvD z`uEbv66-e~ySzA)2ymA*y!IK9ql+93e9W9wF}+Ev8`_y_s%?&&pL33~yP77z5}ad( zl;LWb|J5?RGn&ht#lWMh?fr;U>@Kt-8Rkfl#Ef~4tt1a0aBmNq?aH4>H(&az>&`)8 z84$qnv>$>i(@d~rx_bJb>$1C`(_6l^>ktElGSVETKInGGJP?^p#Q2-R8K8weEP?T| zHbhH|M2@_5$AH8Tg^(K2{wp#1fyi$IvAmcs76$(fo|}br@ylw&?(paevDM&%4(5!< zSbz)bvspDsckt$axcx$X;B6oy9iRF6NwAI?sHO^Gj!@RcJk?`EJ8#Lpz31jUpa40= zD^yFlLn^g59W}8TZB*xSJq3EA&vJw zS{dftzGYL62EQ0oXXi8A&WychUO#XxDZd#{^+DbY0tv5sqdUT`S4?7P9(+Qvo^y!O z9l7cM+c#kJnhLB}uDlE^2xM5+uj+g|k9>gt<$@K)Q?aa(XFAB;%i1#g)oQUiH0D4X;Bx_Hs9au)TF+j@{3-!FjHb1p6D{+9JB*(V!Av% zNy^CRLDxh?MC42C*(hcS{NDIENh<`^(=#FBkkpK7hvrTAolv(8RwS9Ax1OT)hS!ZP zpJH=)S7O&3WcE{n18@wCm%dE=5eG6HOU3u~z04E*XqVB=8$~Veu&b41tBK+9`JA?C zQ9%kq?>}ocoTnfKYc|gWiMjx4YeF==G>uB*pad`&J&;!+I~o}36W@2w$K0L8nO^vc ze>znVXB%%Lul+Q+VNo#%($8^6*rc6}BZ#7yfag-Pl+CSkwGlU)IR<}E4)<`j>= zAuGw=&U+sXJe+VIyQ?4@UWU8PSi0gZ}H zl@T}WSG4`+{Mux-+wdLmlw#-y`l4j?NEB2-6z1Q`TORi0nbs4YzgjQ?1_k*6YEtFG zzLY3h=T-du2$#@w9P}_iB&)6u>j|%H9%(3=9dlLc-Eh6N9^tB4(tkSBd}(v2e6Yz1 zPn4y@=<=S8L|Y)m{*nbvaO31z^>bhLU%$@XT@XcYQP)lXvYgRTy=juF z5w}t<-Zo?Nn(_bB4LRU%D0b;afRT45zq7Djq1z1CZOd722D#~z{VKIT8k{TPil2Sl zu&qKkVMU#$KMdX#r*xb1;IzSt+I^9BZT)dteEqnlrsTR-??kI;ie)aDoh1J9R;%W2 zw{10cLdk7#TgEyWLllh~bm*<3Q#Nva7V@7xr|F==Uux!-Eq0ISphhE6wrVbaprRSd zTKQNhHal?hOq7(Ab2{rrdDdTh!t(R;zre>Kn{-35_~9{=lMIHlYtcRqX2Ij3+1TKf zE08ITt!yafRe-w|-%rpNSykaIrdQZ(n+5d`R2*K;&Hx?7<1T1!FxUI}ZTu#s4ctGT z(Eoe??6gqwbEoNz-nlP6eQR-svsN>O#!C&o&(NL+$GzMJ^#v0*aweg;0SZ_f#O=o( zB9{S*>fJjZZtTrhvIr{1)iZRt?ntK`3&9Agb4g*qyOMv7*6y|0l4Ct!2L67DbtQYQ zYOTNVQdRWr$^SkqxPPk+-N%IOCeecW`d+eGiBeWn<&jE~@^r*Is(Z&E1E z#Q9Y48`O5s-yI-ygYM0OR?5VcYr3%=xKOCkJG{|yh6ODxdl(bLkZb5c(cX0?{D}%y zH|l^IjdlJ_dJxOjX~U~uq4Yve_pWBqmxq^hS}j|X+14*uCXbgxnlLN5U8lRJCkp!_ z`Nua*_8EP1Me74NizaR%?^cb4(jFjt;-$pg%K`?}t}ZUuy*q+d+btZ$5kym4C*S$< ztn%NGli?5lG?%{!MBqa$rMa|&ZncwEEnSku_35cyGru(pq| zDn9)>!^3mbUzEg9n#Bf}+S`LdYU}oS$V3j(KiHhiF{`xB;!+K%b0jN1(n$(d*kYt@uYZ^i+%8Y>+sEE+j$=J-H9U=4%>R{SAiq z3`8hvlu_gqnGB`jBOMcgMrhA1%6qZ#ZMA~viOCs8q_~Rg#8ab>?wj=1z#Tkl~G^OU{_}PBCeP8jYMVXJpJM_c8zY;EictXfKB>hc0d@h z7Jr9eUSYkxc||e@hxg3+C~R=^$kelh_=irA^J)}t(lJH!vcYDhn(F#NMURv`2X*8M zgenr_LcW;u)m!38wy3fAnG4|{1RXE(%vWrt03^~#T^!M)3PE0 zS!yCeJgs;;pHfy66fp9!KTpe?WrEVpbW$TwMxCM^o75iH&}Qek*^mk%pEU=e;(K}& zNqXafROrT$N~#SCF(aXyH}+qv(_5G7yv@hM0!0cdiE0x%thCIbIq{AHp*aHn`LyGP zvydOVGhpPwJUpHt5Al zK8i&WyV8m>Ba5BQ{ZF9kZ(QD(_RpxcFgXu8W|kk*TI^eUk}rIr?L~K=lwq&^i2wJt zhGUk*iYaitQPxq*4Mk0p3sn`dRHjn<6yN{2)jcQenu9Ty2iTj%4E-|FB8AY$!}HQ@ z^=3~x)znONc%!p#CBbL;2q?htQxsD(J7>Xua_s(9`evZ37k!PfVX@@Uqtt(8ME5|Q!_r@4lT2nT*Cf-A%-z2Ky6}m7gcfxCe zs3dah&oRj}T~oKce1xy|oKY*y>tpGqt=^wOv$!5Nd%}YRLQ<}@V2<97@ zI6^&I!Sohq##4;*3mFW1x$j7=PK^2S1!T5?K58gwQ0p*oHFo?doryOR&Fjq${bN?l zX~cUe>OCQM=Hu~O^hHuN+)gy#SRm^;aQT;Ph7TX#6+VscpBaCC9E&c-B!g4aP%;7w zDj4%7XM=uBrZqjh-NI{B6kR}7UvKvCoevdZz-d%{{^BiF7V?7*Ue(F1aQLXrit8=C zD^PFyC~d3osZ*?X#pUCa{6+3hlc7S*=I}?R)3+6N_sAsBx>9Suv}3K0AgsO4VckBg z6l~1vHX7FX%;?LJ#tT%hkM0Y=-02NA?g{5kuxnTADCT~W)jQ{w_%vaPXe;Lg;lFu3 z#j0pX9_Uo9n7m}+xieVHFY{AX8Q<|Xn$g??5>5UlFt90fY|P})y86Xdt+f_S+e;Fg z3KsQ85kwDfUAaeK8cf^eL6s^Z7a^UL`wXBEHNU3aq1`2d(3ifFpT2v8YGE8`k|=!1 zd&72vh{kvlFAu>2D6=~q7DQ7tetehstcuAm*-Y*vy?*xf+0u1Tt9_TmS#^{!Xb#-K z%)wDU2imbRpR70^J7-NU68RxNT}~Pr@z9`x#7_;Bcir2o+-FxSl%GA?cP(ObqejpA zrbNKU<_xQ@^z^CyMJ_rr^AdF@l%FFbe3TO6cRF=cUKk1pQOUh`y87_;=+C!9LpVFu z`yTNV>s!Slypu<+@7s8YNoQ*P&|oH{3Q{is-DC8Ibj^`zUErbN`jk7J%j{?D_aAo8 zIyt5m#_CyA-wNoC@OOD0KjX`FdG~2Su$-8cE96G)6P@a+45Ajicb5?Lcwc`o?Xfnb zR%vR)>r)`Ye^`vv*8Hc9b-;EUY`Hc@mVTk>(2QnY`QC^c~{490D39+k-DalEd z-6YPB-oZFb-1NCw_JyVYsz9~I&h>5~yyfQ~La8IxZKJ8yF<;e5?!s$!3!!xWIvc#` zehsEw9-b6PWZbr@ohYLbjlIn)%~a`cLP{@AFuC-Ma{P9x+RIx>rqs1ZG7u>Q%x*h;6`Wx zZ=}8SdT955mC3{T>s^XzWHL=C)v*U#%^ODo=u3W7Pi?zo?*|5YLRPH>`+lI-QO2!9 zj}qW}Thpl#ge}S}xw&CfZp2IS8q8v1p;nXjBf*D`8h<#7VXDrP)ow5*dLdzo$#`mS zaIIV<2NRodE6G~%gWA4Na^PMQ5`9fYe3v@KhjN%+##BV0yK|D3INY~sT84_A2}FOI zvyRgvGbJ|-4nc;hBxaN=G17ivzR;i~7iM)sKkWRYde1>Nh>2un}&>m|{UlCi>TQj0tLayu^Fq+wbh$%Hegd{BGpuk{Ah$1UcbM@c(R zx<=iOZ?j4q7!X^lzEaFT8+qWQmh>y-(jNvJ9=6p>++w2A=#9`b7vqJvl9|>aM1KS6 zWG+yyzWi26PEp@!->&EdD~*66kRt5L0G*sNLlSvXb)Z(yD@*zRWdfZukd3ZloTLZJ zIii95sj2d*u<`!c!eK@P$}}IrIT?w<-ei?!6cb#7;$3xuH=pye-O5EoH5i(%>`I9u z;+L`)LJusIG z{r>4eX=>IA#ny|_Ua`fk+|RB7WBbR36;oc-EMh(~okI#DC4eQe1Kgqfi>;wlxlmAk zjAjur*cXOZYL@aJ)C$yD*5htdK`{KD#9?{D3>GW_+_2QjixXVFoo-(%1kF;pN%}#t zpnm$!LOtp(#RBJLBqWbF6`csFwSP8clOBogRj5^~z_=cQtJT~!*$0nc(hu?Ls5JLJ zXQ1th88Mh*skzp#K0xK6{@6UCL*$3T&Wesp618AOe1tnQBi8 zPEyj)tlgL55>@P6M;f;8Gk$W3nE$Yorc?e;J>&AFgl24WYnKou&SGNacO8 z(Gyk|r(N~_(<3gR=GMX9|0Lrr#Eb*?C!egkmS`{~>TEYvteEhVoXMl_mO-NlDh1;O zuBFH5w_av)Q@K-%CrFM9M%IkbJz9Ta*UKiDZV(Z6sEAt-X_rnww|E6Hn=@I`KIb;$ z4ABV_kWhmX|D`DK3)I`?z=mYbx-8q}0%z@Cw<~#Pn^j@t=zvAX63dDMbDI=dp! zlo^8jy3gaan*`u}+1ko+kJ)3<-6u-!%zPvyTsbj+SO_X|J+DAy{eK-S%2WCLcy<0u z8jY!Soc0dR-1P`&bCw#`rYg~2y|3Y2!mvV2kc$Lu8_nx`(oMBFdhTObgXD;^jRVIb zM{Y%Quwsz%&NE>wlEo;cRbTM3CQHIME1dp{O%ym$sYO};kGd=2V%2ffmwkkrEgl&C zcEpe-D8@$IAVx?+2$L4|o;`>SIskMbl7u%D`b(r`>L?^p>)x5)dFx4T7L+IZ3!R7x}i9Z38E)Nv}iv_4=P6Sk~Oqz zD{xS~9_ERx$csGCF(Qx-!WA44e{_)SVW^^~61+DbZNn@ma3bXPdbjwvTD%!K;f;ge z#nuULWQZ_ViTw772MSc7)xza-%+{>agVApX!DSktbUK5#O9sjQ91Xg!{FIQaI@}a3 z$m9nmk(e5p$TM#q-Aj+7>T9;OJD`SFt>ATsP?qmTA})A1*XK;eiJ{nLvtd(>Q>|~PiYIW{S?r%?ypVuTvrg?bYKckxW!u^8c5GEJIQ+8i}qArSfs`gV`r3M z1p1@GI;(~^UVmLDSRuqa_F();$;t$y(X|#guQ&8kmWn+j_$OLTU0FV!0ZJ#Mrk?J; zs##rMAc%N-b1=Q$NYF3K|2M#ikG_G0-%)!qbNmBfVK$PFORHOk8!6C?&}B=!I4b8h z&({9;%Mx>Q>jbyhc^Pst)ADw7enKr!d=PoouX~Ck_OZG<1Q-U}nFgbON=cywJLmJ@ z4#Ahp{t0M;3H3X63^Cti%U`jQf4|x}Nv>6b#p6P0UtEC(jLKQ?7E%AK9k^*9$;~oo z0`pg-%_+7k`STD1dIJSHlPDm+^96ZehX3^4jMj1{&-HzGvBjfhNO*TFK@^`qiMa8n zaVRW~w~dR;cbziO`2>+aE&Bd$85z|F|G8)Sz@Wzh@I+$N(SIZt1OxUT2>C$&{NrP0 zWz6uZ37_GBitzK84T^(a)y#5mQ9Z)jg7(&zT%a3j-gB)KLK> z{nmixgmqndy0vw7+5S1JH)4^yw`J?c-)6f4bzv(C~ zD~xZA^boz18qp761wK&wdQ$Ia+o2=krM9cWd`!uQg``<+&7w&kv3B?{TOK$nU(%O?Z-M}@bCRVKy)dfyYkL} zb?Knna4@v;eAL_gG|{5>@=h8)tT+QbFgrc8UP9x+RU=;qAYfjF56%ihURdV>1_6zZ zgD%k2hVN2^ZUn>O;)MoC6qO8ov9!uHmestg$s6mUgOA&Sd7^tKWVV>ppuAru*tiIK zk=}Oq95_r3Xb#qg@nr??^4y`Vv)USRJ0(P=BBuE7=x4h0mP3sH~?u5SCF!AkPh&{j6f8Ad)$i34|L8`ocD81E8x|5 zuI%VDG%72%OhnT*#l@;=+VL#em&w15s`>y#=X;*hfKcxEuLF0)2m*dMU|&S8m3j$7T0>Ca z#j}!mZ%@bgoB^r)P<`D|7g1JMV;Js`4JcyI%gYm@FS`8C zJCt+Rn_XzU2UuQQ?dFIOo9@eeVs4p_F>mhq2who!XwEjZ-{#e9$$OqGc)P#essL@Y z1gPP}Wa9ae#dP^f`P$W>^%oM{?Q2g{hD4g&S`L=nfN2K*e!9s<=6{4{&DIeo8Y2SV z>0Q4bK~irhqkof7?X*Z`&7uDu zk|J+$jcnBrfPBqW-E<-^{`)BKncqmyjD9IXS&H~`(zO4A^%0f)a>%9F$6pr3bTsM< zhIV_>y4LX_w6rsZ3@Fk5A>GGxqq}%T!NI``$_cBLs}g(VAU{};_u;88=1 z?f`sDON;XQ8xDIDQ`7k_oXVl4AhV?HQCq=YKfgl?k44>LF?W_~Cv)`WWYlqQWHQ7b zI?ypWoFR^x8D=2HBLu+^gvbYFet>X=KmPC4uM`B{P1RcFJbDrf2U0IZo_zn%F!GE5 z^Gnq=`<#IN0+XYI2hMv{wX-utotc;HoENB&%UvK$6893@=Dd|fNW%_UOu$?^OCkV` z^#Fbc7<^0gFLCeN0nF@=)F3KrByV9Ie2SAJCywP-&s5V^K^n$i7i7K_dMYB`nQl7Z z3x@SsVPW-;ay-z|t3yyiPGCcLIlh79G9tYGh%pD1mz|v&x2uy=Oe8SuX9=t=(!Hd;7$zC4bp4UzT1EX2G}_^8)__bk@93RAC;}Lr^cvopOv$jnrO=jS{pVM-W-# zq^k4t*~jL9S2F!0Y91OsM(C)Cg|}n_Dpeat!IFfgEtQb`+9>jpMwXWf<-b?QQ%6)*|HM~ z3%&Bh1@Co-H@X3cmgy+Wp#bUkOX}GidH7X(w&18EtAghI@u)A*9$T-UK&8G06)~HZ z_1P+E#wQ!)!f38Wy057FM*=9tQ~dN2C6K;-In+<1XW|3o?-pKmciUX*HoFcK>KT^<0f zvWoxEcKIW3Bgc)wwza7Yb8emR6?LF|%0GV#ReT=)nb{=c;(A(%o#us`fmbTOeSa&i@jlR? zVw|!yad@E{pV$V=D$#20)m&v%n~RNIJWJ7P#Tr9#Wx)Ws#^FB?PaIyQV?u2A^y4J7 z0gYpf?Uuw3$>_)yo~1>)0Bi$u;6iO0IpD$?^+o8<+PvPES1wc$$4i0!3+U} zt-JZ|_J)SlB{z31kuVxjp{hd_?5V}3ffbo5C0!&efg zv+4Qo6ft@{<8jHCL)z5`j+_$taMhZW2KnP`X*ajX>3t3 zTG^z0#~;veLtd$hoz0fW>$}wTeRg&maIb#AYg$8f&QEirV_b4UK`&c!blR3sZvS+A zf9f@Cso&DPmm4>Lcm{KTf824s8MW$dxzEs`b0VWn%D}7+`1lE|`c(p~f}zVk?9Q zN!i#p8+$m^^p>f%15KwjI@#Vo@piaE6yL^>f_a8@85QnRwC-=p&ZB8;Yi&*MiGi^a zxb2RxqqK@H9)#n$OszNEoEVj#g#ysq$3Gm=j}DT=q<6G1tC(N0&+t&I?o2hizF<6> zqaBhp28d=9wARC?TxywMYN`k z0fd?0hqmnZ@t7w(d`j)$M#Yu;MDqJ?0vD> zoDtNih2Y^Ue+ft$f@rzdNyKOR(7p!2%ogKsR#q+@x}RXzH?hA1Sk93U!*0jFRVY!xgJaPJ$kyqo#RsIRj~x!_4taU zz;rQ3_O#EKImr1Tvr!gv^q5<W2H*VQ&+7Z=+Vn6fr2w?-RWMuq?t>Y3^tlhZd%rV(&IxeUPJn;- zw?Yq)1mSdwi@i0AEvC>v;UnmnB*# zU1G(gaN@$rO+Z7jBYZGij(erGUz>Ceu*0S8L8K^=6M3mUeIR z_yHmEz@*rB$Z=_6I_u0pnVj2ij+*C5eUT7+A~N=ZIQn#*LA4sA>jvH2H}H{Sl~!ce zxl>QZ-%fuLRW!9n=vnwm=mYL=;buNc3^q#Ao~?&sJ?p+Abm-OF#ArjcvFBT_^(SMc z#K;irC!ZRdFi4RZR-cRFRtS;@fqNFL^!Se-KO%3_?Ac%~05iC|Nlg=D<3sVs(kx>* zXOA_$-5;N$JAQ0j@q>D`q%sPzKoW#(eYYlsN5~qlnlKJ60_k zods|+q8_*aBq{_VSkIO~^@K$~xYBd_X{z=D^;%HAM`puFlR{6ha|n*^*B->LcjS zR8LzI%#Rj(9t?( z88%EVi&nmutbz?DfE>F1l#lg2N948Vi2l4S`NqJ7_zEf-T=jm+X+bRv3-+d6{Y79) zr3Vp3LxFF2f|;&GUM$@^%9Py95GnQCRsw!RXXvD9!<~^oJ=B0l1Jrrhnie+#YIIC*CpmlsKf(*tXOM%b2UxJJOCp@9BrQAofo!e zD?b`wG-t({Ryn;_dqQcC1e$w!0o7%piA=w>& zG_jmC!x_x8$asgD?SWwnD{E`6lgmDif0U+K)a^!S8Fnckd4Nf8ITE3H=nSh+43+z= zflkch>n!B1Bi&U*oeA@A(@^WZq&XsF`;;U5FWJ`cMzP4{T$+`Uje0*NTB^OjXLv`; zzq&0&JO!CWv&S>XyQoM*6pnb%oey;=x&ayy!6JXv{L@I;dBOJb;S1ef1Ym8AK*^)^7Xsc_Z< z&t0H-Je5D28*cCPK1nJ`WsBzcIy0ohqTmflW#)ZHEv@SPkN5>O`i0hnUZk_2gH40{ z$v zx<@TSbD~*dRX$;iopIo{4or=ia@KT|0z)JIjL6mH)QNo*s$;&QM@r@gV@|CJV0BCOS4-fzXo?8M>5_m3<9c@-*Kz6qKosLNK zu{ceXxL+{w;ioeXKO3#mqgY*$4RT_UQkV+r4{H4DlGL5pwdvym$Yn|*E#(xdAamPP zmGhG(35lI8W>?inmmMxNOa`2&q?+!?P7Uk2$v^!l3T5*0&dB9Xq^)FtAc*4A?HLcI z@X>34hMWhRi-%?D2thtd@~b%wN>Hch-8FTsR6_X|{GJKj=P5{B7hE>#7I?JAogNaZ zQVBIpPfx?(MTS$S{00tK=w3cgM1S?Xy+$h6sfa`abu1z9a$=>IK~A@-YSiOee|m2= zX0qfHA5hY3PmoU(dQb>ub-}KaX8wX(FceW2!~aJI7&vxOB?|MKDjC4^KR;hcU$lVT*(5yjp}Ky({^q+ zdi@g{2D2mY6Us_LaWXRwsRR+~E&yJs1E>S#07>!5j+Bg+2OzH!x5T*)8Wlw*D12{Y zwiPr=59_M&iSaFUPt9kMQuoYa6+B|*EP2rLN}Qe?G3q*U=z&$n;`i2hys zXz2sKGR7}T3@fw_I6?xO-6x2xIZQt6sdAzuX(${611mtaXSd;0uRgEUX zuW5m(c>dgO`a|x|zXIyUuW!Wv72%Cmsd`gz6QXL=qOKn}!@t*XyAu8~khx5fKq@Iq z8S|2=TSw+ZZOiq4%tO8V1ig9v&`W&}Nc-2ngrd6>C|Eq& z;bgA!r>j+qrz zzAHPtl_JPZvCTRXEFzPAKEk2S3~F2pjXl7DZI%eOHPQ=k<;66m^R5@L=3g zLrX$-(FZ*g+_n6d0VY6&2R(_i(p-XB7uH>Gfy{rq zU2*%tcF8j1qcC-Iqx7Q)x6`v8|m+y ze0BKHX(YxwGU#4y4~NAS1|JG$U-dfG9x0QJPo07aT82L-`(eKwf$UKL_=*F>kbAa9 z!_?Apn;;({f8@J_14fSZ!wVTRh>vB1IP%C0xO@dqpCYes z=gt*VR{KVZIea~Caf+!Sfe}U>z$}E?B5FMCYs+Tq4~W2IIv$=Vt?K$o%hDa|#;;$q z^fb>B_b0r2ek3`fV=PLF=uDRzMzVP74IyU}<*AG@m?)O@L*GvqQULJnyFnkGIJE4P z!U_7UI`y-xycU8g&qsQZUOwEE}_@|9#++o&~01tvQKWbk-i*a?_SBRi z3thC)qYoC*=U7mpl4hYd_&ObIY=|cyy5Or|G4?XrCP8{43$%!jkqw0yZ$}wR`>TfU zXJFu(BC7&Ejpwcxt%KL?CzfsnU$i_ECPJA!R8*Qi03Q^|>6AWslkW?s8aECyMC zNk_-Fy~TGcRBBQFMlZVSK9c`ia!(4e-Zf4RI?#` z2bcAq*o>)kSPthX~$g_Jvms&c23<8$o+q2k} zZy6dI8XJ#)sR_=uv8$slW$R9lO6_-wca$h__3%iRyR~qW+_3rcU;7A$;X$4I)tXm_ z_;Cq6Vn4o??reNi70;N(+Ip_r;yhpF4V>MXDH%DVVQbx(>{{xb0D{=L198aX*FPt`rP zS-$bw@3H4{o_+-kT6ez-85-JMxrZOZk~oh~gh0Zr3;PM?d#?0y`8 zRl_79#Y#CtbVK!?e{Ta~6!L<&PZN)~zTvif(Mn6slPk-%JLA4po;%-P&Fy^17K?FD zgYWsvdC9*4DUj=T#TP~A+^)$|yHc8MehCrZu;tXhHy^D3?Y_C85`YZ;j+87*&TPai zPV880Dhdy;TiRCJrfe+DiLRD0Rjt){;<2X?IN@q?VrJ z|B7tG#h1a{vaw*8VELCTFWcJMN~}JYRy^DyFJVjHSGm%Hy-?{sB0A@yy5IyO#f=@e zf0a#`_4W5(meSwEsG7b{DebVSvfufH-I>NR>X&nwOan*$;vd90$iYfT;rc>ClIPq% z>JAPFKk^zq>otEi3Ohv31DUHxZ*K$H^bu7ih+;C#9a@tyCAaQ8H($=L(H?6SfVI zmsD*ea*Dw{;ij=WtYxQb<8t@%LMHcMW|N-d+%cYo)`8xVwx?e9FdR8$XDTIf^ENsj zrri9>+gbZRc)qzV&a*n9zaE7yp)}bXoAbI5)zv)frMJ1Qq*67z#CDdX1!3Ygv0%H^ zh}}}KSA@ypdokRW@aDEQ+{gw~)$(0k`o5v9Zhn#ZK-?;u-uesS(4Bfq{ng<33Zgy% zlwgvP5t-GE*2cNloKe>odKU)1cx{%2d2Nk0+~lfNLhR8*^_}JEs~>b_+pZ3EWAig> z#=D2NIKM4(dJ-cjA}K@_B9$15pYv--yojN=bEV>(dsl#57S*@uIb7(<6YXyw1@E{b z*Hi1ZQgGt4$~`AO+FxK`$#S@5Xh6rbJtbhbCSPJnc}?}P$a))YtF55|zWelF-+hsv zKftwVvaC^;S<#3&NQ--;bZGIC`%&X5t4Q^t{`$1ziPF=9Z96Q4;iyxGk2Y~|=L$O9 zlXn)3cJJ_L%f85ZowiOb0{cY1@olZQcAyFAXR0L@WMwb5SK{dYy$X5#XbOr&;P}gKUaVMVgJR%C1&Ez z(;5hDzVgdJ8$WJ^Q|^`MOrLm-f8~b-9zpS~_c*up!K$?8 zHcy*bW!vqK4p?C+Zeq!p7r`M0-;B=^$9rwm;MUvw<*o+8!9F})5O^X-dLA>*98eLR zmJ!4fppgELTW->Rg)fVC=5mKk#Hi(B(9W;sV*=)0FRF0LQ}S5vF`TBMjm>ul{WVS5 z>JTF-n{=_~3JOHHaeaML`an+WgrUxHCjmK@T+F)$Dh~ZRSt2zF!L<6A2C{~wb82*p zfmV|yF-m9Yc~tC+24?hdihALf@Pp2NGk)%yw>VuFN!bb~r{Js8jg%A{GOMEEQG)Kp z+a;=4?2tp7=#K4$S|!pwIwE~}Z~hDA@RmQ?b+J2XHdNSVwdydx$&Aw?ab5SxXMgx z;|l)HYVgMC3pfa2243@7Y&KrQ4nqZ;*XmubN1u2Mm3saXW6>~0Z)-(vD6zwO^poe# z(z{tXuLnc{W2R!OD2Bcvrz!qUhQot7BdR-AqEQG++SRPmEepoN=L4c`DHRYsv~NRm z-P|)9Os;%?Il6*%UskP}pRJ0kU&$&>^6DOJ3&#!6y6~?Aq^x;u4>5`RR9_#lyf(KI z-9dHR5m$f^CeVWi9HPeW^8^|zPxam#Zab8ZdRJhhG#d!**w z+u!fnUFf+nGrSXwvM#0Fj!<=9ppV$9Zp%NPOfTp)Cu%k$Un}crg%li%zbk$qrTtXBSxG*IKfd!_Q9_~)#44f_v!?^8Xrn{}= zUFLtifdNl z)uqM)RL4Ku_ZZb}t<$qgl0Z6SZpD?hRQ2B5=t`*s)%;1&Q0cFLF5-wz6K9f3O;6SK zL{z_x_(suzhy*0=hXV<9PA@Xhb>}_PwVf|{UOuV~_2S_jZ2g_Dh>eyiF-i4aEu6Uh z0bBDa9*ncNt*MmJJJ(4edJz!0xH7n zE?()5TdRYr`$}Po^7kaJtgbz7JpR73v$N)IB?Em=?dx;a9at+Jc9W>|8rHyY(T65G zt5Us=N6wRrpSdJxA5E`_Sa9k3ZsM_x zQotVZvk)LWpq>{{`4tQ(OlLJ{o9g*&TRwS?e8k>sa~oP5oby~=7;mZzqZNnof8TSt z{$wNfAw0gkKUx&QwSBKqiI*Zv#d#g4H_H)6H$)qRRslHSwYq=6eply;d=O zwLzJ$)-eLGF~&MWZy-n8j zhob>l+z5&IJZ@t#KLF)vuw1Iv*&j31tB3$xM3`TT>CKT=VJlfbJ6rYRyW8-lp8X;$ zs0qcRlTc=CRAgkgTgG>Ee2K!r zH6{U2Vs=QW{l-rqoxWMGt$a+xHQ|nbA~%%97XzATgN5`}e~AZC)7_kZm(O)a#vuaj zG_Lw|$5{s&S!>UwNEMwGRrU*dZd0@37l0L8jBnf8=&5=P%!}rdf>GFLL@c~&w)l3P zt>=tl%dnp3v(Bygk0c&0ioykXVpM;;oGsxXAM%ATZJKs0Yl95#|=i4%X5Hf5&fp^Gc-`u=AxLk*u;X!nC zH(O7&V5JVy`^88fjxwSbCwzbd9x7l{=A-h7wO&4^b3*?7+l6xQ9w-mP3r z9`na98vUrf zW#~sqvG;1^#8!sT_Y=RB%x7Q2HIaz#%R@%$5UUGt#~c^07`l)WsYYkyc;*^`9r2niU_|endKKF;qG+{ ziAAeD!%Iy<(!__-MdBkntOStNY7FArPgBsY358sx*R{2K;i89DD<6Gg#a}c&?1Nws z$1RFiEj(Y{Y2n8`JvZRxR+Gy{;_=T!cFOW;+;~8Wg!;Ns73_0bi@Saoe&psNi*K2$f(P2fEqd@V3D{me` zZM7fp({WAS^IA(%tOv)*eimEH>hT|A(0{k8=(X?xf)3`|b zQr-E=%s&G&o@gTX>4vaK|5ntM^&-_*EEne%7yihhEx#BwT;l5lyTaOvt zHjnQPSg)xyX=< z+p1nxFc00*a%R^&=YeI>6!?fw$m>~aTelw}*rtafw#7F38;uiq-{eO%2}J7F^u6FV zJn*+MJwDFqwI1L#G3d3uJTp}L%wrsjoAg^;65TE@$=++?qfY%f=c9c)9~ z!a{b%g>nSwKLv_As_e%JDK=<#Mrb3!%{5d4vzyYe_HEV9OqJN$XWy!OD=~=q32Wp) zc8_?d|4uWoLq1#;UYSI34#EeLcRx_K36$*jsA7!Gt75)KAE#l9>Gxb6os*Li-}+IF zKf(4eVF;Ir)$V^c&TS9P;YpKrb8WL~V_AIp(imuz6yen-tY?Fw-U8f4pO=Oin#&L$ z2IH}*TmodjEj@P&&rwy}=RAGfY1@w_celC|!CPp>%Rw-Mpr*KV*UZL;72=-b&mI5I zFzk!Qbutal#aOTEzLu)B6omI={=Loj{Q)Xs6Ww*(2}oR?S&=cU4eMuYcmK+GrJ?6LDD>lM`Dwd2k87kfV_GiCy2{r z!5z0bj2i$+6Xv;u!Mgz&*_;(~{5xBDDY!hCxW;RHO?>kec70qw+|?6b!VN@3pIWuE zjP+W5HLP4I0FND2jSm{0!QaAGwfI&w+>G_q6y8jfpFZ0GR{s+?yE zCEJkuu8osju)ZsBzW{#Qh}*Jde>M2Rlx+|yTIkpI9BN=8Mx;PNe>{{vEDGz$O# literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg b/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg new file mode 100644 index 0000000000..9a1d6fc639 --- /dev/null +++ b/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg @@ -0,0 +1,4330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Energy and Emission calculations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Injection + + + + + + + + Drilling + + + + + + + + + + + + + + + + + + + + + + Processing + + + + + + + + + + Export + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lift + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Power generation + + + + + + + + + + + + + + + + + + + + + + + + + Power from shore + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Emissions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png b/assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png new file mode 100644 index 0000000000000000000000000000000000000000..1539208055f52808dbf41c157105db23b214f01c GIT binary patch literal 43536 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 b^`E(9`39BPkSyTL0|RhVfS=1cr-UW|D53y@ literal 0 HcmV?d00001 diff --git a/assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png b/assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png new file mode 100644 index 0000000000000000000000000000000000000000..a73169a2d68a331d534865d391085d6c158cf199 GIT binary patch literal 16617 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�T+RaHT_$QDCP}4Z_^s?z1jCyA| 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 YOBFS4pG|IECNG(CSo2WkfzucMAI9d?W&i*H literal 0 HcmV?d00001 diff --git a/assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png b/assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9815bb08e949f71a8ae32b772e600f24473a32 GIT binary patch literal 66545 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

  • 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

    9Cc{z(n$lD^%LlNnJBeGJI2? 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

    Hq13(;Pb8auH{F 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png b/assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6d07508979697db9b52569d032fc3c94088287 GIT binary patch literal 46036 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%0A%{;l2R-P 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 Q%WY&&op7`z9`jE67tAbFCjbBd literal 0 HcmV?d00001 diff --git a/assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png b/assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png new file mode 100644 index 0000000000000000000000000000000000000000..d6810cbb41cb61e786a264d250b2b2e9802b8a76 GIT binary patch literal 150701 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.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>N,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));n(5657);const o={},s="CONDITION",i={unversionedId:"about/references/keywords/CONDITION",id:"about/references/keywords/CONDITION",title:"CONDITION",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONDITION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONDITION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"},next:{title:"CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS"}},l={},p=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:p},c="wrapper";function N(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"condition"},"CONDITION"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONDITION"},"CONDITION")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Required"),(0,r.kt)("th",{parentName:"tr",align:null},"Child of"),(0,r.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"ENERGY_USAGE_MODEL")),(0,r.kt)("td",{parentName:"tr",align:null},"None")))),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"All energy usage models may have a keyword ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONDITION"},"CONDITION"),"\nwhich specifies conditions for the consumer to be used. At points in the time series where the condition\nevaluates to ",(0,r.kt)("inlineCode",{parentName:"p"},"0")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"False"),"), the energy consumption will be ",(0,r.kt)("inlineCode",{parentName:"p"},"0"),".\nThis is practical for some otherwise\nconstant consumers.\nFor example, if you use the category ",(0,r.kt)("inlineCode",{parentName:"p"},"FIXED-PRODUCTION-LOAD")," and you want it to depend on whether or not there is production, the ",(0,r.kt)("inlineCode",{parentName:"p"},"CONDITION")," keyword can be specified."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"CONDITION")," supports the functionality described in ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EXPRESSION"},"Expressions"),", but is ",(0,r.kt)("strong",{parentName:"p"},"required")," to evaluate to ",(0,r.kt)("inlineCode",{parentName:"p"},"True/False")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"1/0"),"."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"CONDITION: \n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("p",null,"A simple example is shown below where the load is only present whenever the oil production is positive:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- NAME: production_load\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n LOAD: 5\n CONDITION: SIM1;OIL_PROD:PLA > 0\n")),(0,r.kt)("p",null,"This condition is an expression. See ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EXPRESSION"},"Expressions"),"."))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/00bdc23f.963702a5.js b/assets/js/00bdc23f.963702a5.js new file mode 100644 index 0000000000..41927b1492 --- /dev/null +++ b/assets/js/00bdc23f.963702a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8088],{7131:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>r,toc:()=>u});var a=n(7462),i=(n(7294),n(3905));n(5657);const l={},p="Pump chart",r={unversionedId:"about/modelling/setup/facility_inputs/pump_modelling/pump_charts",id:"about/modelling/setup/facility_inputs/pump_modelling/pump_charts",title:"Pump chart",description:"Energy usage for pumps is not based on pre-sampled data between rates,",source:"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",sourceDirName:"about/modelling/setup/facility_inputs/pump_modelling",slug:"/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"},next:{title:"Sampled compressor model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"}},s={},u=[{value:"PUMP_CHART_SINGLE_SPEED",id:"pump_chart_single_speed",level:2},{value:"Header Requirements",id:"header-requirements",level:3},{value:"Required",id:"required",level:4},{value:"Optional",id:"optional",level:4},{value:"Format",id:"format",level:3},{value:"PUMP_CHART_VARIABLE_SPEED",id:"pump_chart_variable_speed",level:2},{value:"Description",id:"description",level:3},{value:"Header Requirements",id:"header-requirements-1",level:3},{value:"Format",id:"format-1",level:3},{value:"Examples",id:"examples",level:2}],o={toc:u},d="wrapper";function m(e){let{components:t,...n}=e;return(0,i.kt)(d,(0,a.Z)({},o,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"pump-chart"},"Pump chart"),(0,i.kt)("p",null,"Energy usage for pumps is not based on pre-sampled data between rates,\npressures and energy usage, but on ",(0,i.kt)("strong",{parentName:"p"},"equations and the pump chart")," defining the pumps."),(0,i.kt)("p",null,"There are two types of pump models supported:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Variable speed pumps"),(0,i.kt)("li",{parentName:"ul"},"Single speed pumps")),(0,i.kt)("p",null,"The pump chart defines the pump's operational area. When rates below minimum flow\n(a point with the lowest rate for a single speed pump and a line defined by the lowest rate vs.\nhead for each speed for variable speed) are requested, the rate is projected up and\nevaluated at minimum flow to mimic the ",(0,i.kt)("inlineCode",{parentName:"p"},"ASV")," (anti-surge valve)."),(0,i.kt)("p",null,"For heads below minimum head/minimum speed, i.e., when the requested pressure\ndifference between the outlet and the inlet is smaller than the minimum pressure difference,\nthe head will be lifted up to minimum head to mimic that the pump will then be run on\nits minimum speed and the pressure will be choked back downstream of the pump.\nFor single speed pumps, the minimum speed/minimum head curve is the same as\nthe head vs. rate curve."),(0,i.kt)("admonition",{title:"Tip",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"When calibrating pump charts to historical data, the head values for maximum speed could be\nput in the cloud of data to be unbiased. However, eCalc will treat all head values above the\nmaximum defined in the chart as infeasible (outside pump capacity). "),(0,i.kt)("p",{parentName:"admonition"},"To mitigate this when\nrunning through historical data for power calibration, the keyword ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"},"HEAD_MARGIN")," may be used to move points outside capacity (but inside the margin) to the capacity limit.")),(0,i.kt)("h2",{id:"pump_chart_single_speed"},"PUMP_CHART_SINGLE_SPEED"),(0,i.kt)("p",null,"Pump chart data for single speed pump. The required fields are ",(0,i.kt)("inlineCode",{parentName:"p"},"RATE")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"HEAD"),". Optionally (and most likely) ",(0,i.kt)("inlineCode",{parentName:"p"},"EFFICIENCY")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"UNITS")," should be supplied as well.\n(if not given, efficiency is set to 100%)."),(0,i.kt)("h3",{id:"header-requirements"},"Header Requirements"),(0,i.kt)("h4",{id:"required"},"Required"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"RATE")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"HEAD"))),(0,i.kt)("h4",{id:"optional"},"Optional"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"EFFICIENCY"),", if not set the efficiency is assumed to be 100%."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SPEED"),", if set all values must be equal.")),(0,i.kt)("p",null,"Note that speed is not used in any way for single speed pumps and is only included here to allow the speed column to be\npresent in the input file without the run failing. There is still a check that all speeds are equal if speed is present\nto avoid usage of the wrong pump model, i.e. avoid using the single speed model for variable speed pump chart data."),(0,i.kt)("h3",{id:"format"},"Format"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n")),(0,i.kt)("h2",{id:"pump_chart_variable_speed"},"PUMP_CHART_VARIABLE_SPEED"),(0,i.kt)("h3",{id:"description"},"Description"),(0,i.kt)("p",null,"Pump chart data for variable speed (VSD) pump. The required fields are ",(0,i.kt)("inlineCode",{parentName:"p"},"SPEED"),",\n",(0,i.kt)("inlineCode",{parentName:"p"},"RATE")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"HEAD"),". Optionally (and most likely) ",(0,i.kt)("inlineCode",{parentName:"p"},"EFFICIENCY")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"UNITS")," should be supplied as well.\n(if not given, efficiency is set to 100%)."),(0,i.kt)("h3",{id:"header-requirements-1"},"Header Requirements"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"RATE"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"HEAD")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"SPEED")," required."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"EFFICIENCY"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"UNITS")," optional.")),(0,i.kt)("h3",{id:"format-1"},"Format"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n")),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: a_single_speed_pump\n FILE: inputs/single_speed_pumpchart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n \n - NAME: a_variable_speed_pump\n FILE: inputs/variable_speed_pumpchart.csv\n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n\n - NAME: a_single_speed_pump_with_head_margin_applied\n FILE: inputs/single_speed_pumpchart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n HEAD_MARGIN: 10\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0425b884.a3565346.js b/assets/js/0425b884.a3565346.js new file mode 100644 index 0000000000..57d04eb7db --- /dev/null +++ b/assets/js/0425b884.a3565346.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9336],{9687:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var r=a(7462),i=(a(7294),a(3905));a(5657);const n={title:"Python Library",sidebar_position:3,description:"Getting started with eCalc Python Library"},o="Python Library",s={unversionedId:"about/getting_started/library/index",id:"about/getting_started/library/index",title:"Python Library",description:"Getting started with eCalc Python Library",source:"@site/docs/about/getting_started/library/index.md",sourceDirName:"about/getting_started/library",slug:"/about/getting_started/library/",permalink:"/ecalc/docs/about/getting_started/library/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/library/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Python Library",sidebar_position:3,description:"Getting started with eCalc Python Library"},sidebar:"about",previous:{title:"FAQ / Troubleshooting",permalink:"/ecalc/docs/about/getting_started/cli/faq"},next:{title:"YAML",permalink:"/ecalc/docs/about/getting_started/yaml/"}},c={},d=[],l={toc:d},b="wrapper";function u(t){let{components:e,...a}=t;return(0,i.kt)(b,(0,r.Z)({},l,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"python-library"},"Python Library"),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"It is currently ",(0,i.kt)("strong",{parentName:"p"},"not recommended")," to use the Python library due to upcoming breaking changes.")),(0,i.kt)("p",null,"If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in\ndynamically changing the eCalc models."),(0,i.kt)("p",null,"See all commands and options in the ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/api/"},"API reference")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/06adec10.c15c0771.js b/assets/js/06adec10.c15c0771.js new file mode 100644 index 0000000000..b012dae7e6 --- /dev/null +++ b/assets/js/06adec10.c15c0771.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2153],{8764:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>N,contentTitle:()=>r,default:()=>k,frontMatter:()=>n,metadata:()=>p,toc:()=>l});var m=t(7462),s=(t(7294),t(3905));t(5657);const n={},r="POWERLOSSFACTOR",p={unversionedId:"about/references/keywords/POWERLOSSFACTOR",id:"about/references/keywords/POWERLOSSFACTOR",title:"POWERLOSSFACTOR",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/POWERLOSSFACTOR.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/POWERLOSSFACTOR.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},next:{title:"POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT"}},N={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],o={toc:l},i="wrapper";function k(a){let{components:e,...t}=a;return(0,s.kt)(i,(0,m.Z)({},o,t,{components:e,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"powerlossfactor"},"POWERLOSSFACTOR"),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"},"POWERLOSSFACTOR")),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,"A factor that may be added to account for power line losses. E.g. if you have a subsea installation with a power line to\nanother installation, there may be line losses. For a power line loss of 5%, ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"},"POWERLOSSFACTOR"),"\nis set to 0.05 and the power required from the power source (generator set) will be"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"p"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"r"),(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("mi",{parentName:"mrow"},"q"),(0,s.kt)("mi",{parentName:"mrow"},"u"),(0,s.kt)("mi",{parentName:"mrow"},"i"),(0,s.kt)("mi",{parentName:"mrow"},"r"),(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("mi",{parentName:"mrow"},"d"))),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mfrac",{parentName:"mrow"},(0,s.kt)("mrow",{parentName:"mfrac"},(0,s.kt)("mi",{parentName:"mrow"},"p"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"r"),(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mi",{parentName:"mrow"},"u"),(0,s.kt)("mi",{parentName:"mrow"},"b"),(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("mi",{parentName:"mrow"},"a")))),(0,s.kt)("mrow",{parentName:"mfrac"},(0,s.kt)("mn",{parentName:"mrow"},"1"),(0,s.kt)("mo",{parentName:"mrow"},"\u2212"),(0,s.kt)("mi",{parentName:"mrow"},"P"),(0,s.kt)("mi",{parentName:"mrow"},"O"),(0,s.kt)("mi",{parentName:"mrow"},"W"),(0,s.kt)("mi",{parentName:"mrow"},"E"),(0,s.kt)("mi",{parentName:"mrow"},"R"),(0,s.kt)("mi",{parentName:"mrow"},"L"),(0,s.kt)("mi",{parentName:"mrow"},"O"),(0,s.kt)("mi",{parentName:"mrow"},"S"),(0,s.kt)("mi",{parentName:"mrow"},"S"),(0,s.kt)("mi",{parentName:"mrow"},"F"),(0,s.kt)("mi",{parentName:"mrow"},"A"),(0,s.kt)("mi",{parentName:"mrow"},"C"),(0,s.kt)("mi",{parentName:"mrow"},"T"),(0,s.kt)("mi",{parentName:"mrow"},"O"),(0,s.kt)("mi",{parentName:"mrow"},"R")))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"power_{required} = \\frac{power_{subsea}}{1-POWERLOSSFACTOR}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7167em",verticalAlign:"-0.2861em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"o"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"re"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"q"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"i"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"re"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,s.kt)("span",{parentName:"span"})))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1.8769em",verticalAlign:"-0.7693em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,s.kt)("span",{parentName:"span",className:"mfrac"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.1076em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord"},"1"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"PO"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"ER"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"L"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"OSSF"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"CTOR"))),(0,s.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,s.kt)("span",{parentName:"span",style:{top:"-3.677em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"o"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"b"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"se"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,s.kt)("span",{parentName:"span"}))))))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.7693em"}},(0,s.kt)("span",{parentName:"span"}))))),(0,s.kt)("span",{parentName:"span",className:"mclose nulldelimiter"}))))))),(0,s.kt)("p",null,"where ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"p"),(0,s.kt)("mi",{parentName:"mrow"},"o"),(0,s.kt)("mi",{parentName:"mrow"},"w"),(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"r"),(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mi",{parentName:"mrow"},"u"),(0,s.kt)("mi",{parentName:"mrow"},"b"),(0,s.kt)("mi",{parentName:"mrow"},"s"),(0,s.kt)("mi",{parentName:"mrow"},"e"),(0,s.kt)("mi",{parentName:"mrow"},"a")))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"power_{subsea}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"o"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"b"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"se"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,s.kt)("span",{parentName:"span"}))))))))))," is the power calculated from the energy function (before power loss is taken into account)."),(0,s.kt)("h2",{id:"format"},"Format"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"POWERLOSSFACTOR: \n")),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"POWERLOSSFACTOR: 0.05\n")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"POWERLOSSFACTOR: SIM1;POWERLOSS {+} 0.05\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/06dd1efa.1e4f2ec1.js b/assets/js/06dd1efa.1e4f2ec1.js new file mode 100644 index 0000000000..1304241bce --- /dev/null +++ b/assets/js/06dd1efa.1e4f2ec1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6039],{6865:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var n=a(7462),o=(a(7294),a(3905));a(5657);const r={},l="END",i={unversionedId:"about/references/keywords/END",id:"about/references/keywords/END",title:"END",description:"END",source:"@site/docs/about/references/keywords/END.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/END",permalink:"/ecalc/docs/about/references/keywords/END",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/END.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"},next:{title:"ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION"}},s={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:d},u="wrapper";function p(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"end"},"END"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/END"},"END")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Required"),(0,o.kt)("th",{parentName:"tr",align:null},"Child of"),(0,o.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"No"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"None")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"None"))))),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"Global end date for eCalc to stop energy and emission calculations. It is recommended that you have control of which date you want data to be calculated and exported for."),(0,o.kt)("p",null,'If you specify the end date as 2080-01-01, the last period to be calculated is 2079 is included in the output. The hours, minutes and seconds of the day are implicitly set to "00:00:00", so the counting ends at midnight on January 1st 2080 (2079-12-31 23:59:59).'),(0,o.kt)("p",null,"You can provide a date that is after the global time vector, but it is recommended to set it to the end of your timeseries data. Normally the timeseries do not provide this information directly. The last timestep provided in a timeseries is e.g. 2079-01-01, which would often mean that the data changed at that point,\nand will e.g. be valid 1 year from then (if we work with YEARLY output frequency). To make sure that eCalc stops at the correct place, you should therefore specify the exclusive date of the data."),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/START"},"START")," keyword have similar behaviour."),(0,o.kt)("p",null,"If END is not specified, eCalc will make an educated (but possibly incorrect) ",(0,o.kt)("em",{parentName:"p"},"guess")," on when the output data should end."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"END: \n")),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("p",null,"Given an input dataset from ",(0,o.kt)("strong",{parentName:"p"},"01-01-2000 - 01-01-2040"),", ignoring the last 20 years of data\ncan be achieved as follows:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"END: 2020-01-01\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/071a0eb8.b215d19c.js b/assets/js/071a0eb8.b215d19c.js new file mode 100644 index 0000000000..788ed47386 --- /dev/null +++ b/assets/js/071a0eb8.b215d19c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5165],{196:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var n=t(7462),r=(t(7294),t(3905));t(5657);const o={},s="TAX",l={unversionedId:"about/references/keywords/TAX",id:"about/references/keywords/TAX",title:"TAX",description:"FUELTYPES /",source:"@site/docs/about/references/keywords/TAX.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TAX",permalink:"/ecalc/docs/about/references/keywords/TAX",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TAX.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"},next:{title:"TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES"}},c={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Fixed tax",id:"fixed-tax",level:3},{value:"Variable tax",id:"variable-tax",level:3}],d={toc:i},p="wrapper";function u(e){let{components:a,...t}=e;return(0,r.kt)(p,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"tax"},"TAX"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSIONS"},"EMISSIONS")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TAX"},"TAX")),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"Tax is payable in NOK/Sm",(0,r.kt)("sup",null,"3")," for the emission. ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TAX"},"TAX")," can either be a fixed number or an\n",(0,r.kt)("inlineCode",{parentName:"p"},"expression "),"."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSIONS:\n - NAME: \n FACTOR: \n TAX: \n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("h3",{id:"fixed-tax"},"Fixed tax"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n TAX: 1.5 # [NOK/Sm3]\n")),(0,r.kt)("h3",{id:"variable-tax"},"Variable tax"),(0,r.kt)("p",null,"By making use of ",(0,r.kt)("inlineCode",{parentName:"p"},"Expressions"),", you can model a varying tax price through time:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n TAX: TAX_FILENAME;TAX\n QUOTA: 240 # [NOK/ton]\n")),(0,r.kt)("p",null,"where the file ",(0,r.kt)("inlineCode",{parentName:"p"},"TAX_FILENAME.csv")," could have the following content:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"DATE, TAX\n01.01.2017, 1.5\n01.01.2018, 1.6\n01.01.2019, 1.7\n01.01.2020, 1.8\n01.01.2021, 1.9\n01.01.2022, 2.0\n01.01.2023, 2.1\n")),(0,r.kt)("p",null,"Make sure the file ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"EMISSION_TAX_PER_FUEL_VOLUME")," to have a default ",(0,r.kt)("inlineCode",{parentName:"p"},"RIGHT"),"\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0745e7f0.bbd54cb0.js b/assets/js/0745e7f0.bbd54cb0.js new file mode 100644 index 0000000000..d496f79f42 --- /dev/null +++ b/assets/js/0745e7f0.bbd54cb0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4069],{5559:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=t(7462),l=(t(7294),t(3905));t(5657);const i={slug:"v8.5-release",title:"v8.5 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:0},r="eCalc",s={unversionedId:"changelog/v8-5",id:"changelog/v8-5",title:"v8.5 (Latest)",description:"New Features",source:"@site/docs/changelog/v8-5.md",sourceDirName:"changelog",slug:"/changelog/v8.5-release",permalink:"/ecalc/docs/changelog/v8.5-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-5.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:0,frontMatter:{slug:"v8.5-release",title:"v8.5 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:0},sidebar:"changelog",next:{title:"Next",permalink:"/ecalc/docs/changelog/latest"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}],d={toc:c},m="wrapper";function u(e){let{components:a,...t}=e;return(0,l.kt)(m,(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"ecalc"},"eCalc"),(0,l.kt)("h2",{id:"new-features"},"New Features"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Added chart area flag NO_FLOW_RATE to the possible statuses for an operational point in a variable speed compressor chart. The chart area flags can currently only be found in the json result file, but we will also try to find a way of displaying this information in the WebApp as well."),(0,l.kt)("li",{parentName:"ul"},"Whenever there is a variable speed compressor only recirculation fluid (can happen in a multiple streams and pressures compressor train) a warning will be logged."),(0,l.kt)("li",{parentName:"ul"},"Add rate type to more equipment in results")),(0,l.kt)("h2",{id:"fixes"},"Fixes"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"nmvoc")," emissions were incorrectly reported for the ltp categories ",(0,l.kt)("inlineCode",{parentName:"li"},"HEATER")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"BOILER"),": The emission query filters included ",(0,l.kt)("inlineCode",{parentName:"li"},"nox"),", and are now corrected to ",(0,l.kt)("inlineCode",{parentName:"li"},"nmvoc"),"."),(0,l.kt)("li",{parentName:"ul"},"Instead of applying the surge control margin to the average of the minimum flow rate for all speed curves in the compressor chart, a more robust calculation is implemented for variable speed compressors: The updated minimum flow is calculated individually for each speed, using the control margin as the increase in minimum flow, in percentage or fraction of the rate difference between minimum- and maximum flow, for the given speed. This solves the problem of eCalc failing when the new calculated minimum rate was outside the compressor chart for a given speed."),(0,l.kt)("li",{parentName:"ul"},"Improved error messages"),(0,l.kt)("li",{parentName:"ul"},"Other fixes")),(0,l.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,l.kt)("p",null,"None"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/074935d7.9df0074a.js b/assets/js/074935d7.9df0074a.js new file mode 100644 index 0000000000..8678670a26 --- /dev/null +++ b/assets/js/074935d7.9df0074a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1042],{8771:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>n,metadata:()=>E,toc:()=>R});var a=r(7462),o=(r(7294),r(3905));r(5657);const n={},s="RATE_PER_STREAM",E={unversionedId:"about/references/keywords/RATE_PER_STREAM",id:"about/references/keywords/RATE_PER_STREAM",title:"RATE_PER_STREAM",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/RATE_PER_STREAM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE_PER_STREAM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS"},next:{title:"REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY"}},c={},R=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:R},i="wrapper";function l(e){let{components:t,...r}=e;return(0,o.kt)(i,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"rate_per_stream"},"RATE_PER_STREAM"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM"},"RATE_PER_STREAM")),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"Used to define the rate for each stream for the VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," types using a list of ",(0,o.kt)("inlineCode",{parentName:"p"},"expression")),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"RATE_PER_STREAM:\n - \n - \n")),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"RATE_PER_STREAM:\n - SIM1:GAS_PROD\n - SIM1:GAS_SALES\n")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/07b341f3.f53a0fdc.js b/assets/js/07b341f3.f53a0fdc.js new file mode 100644 index 0000000000..4af1f024aa --- /dev/null +++ b/assets/js/07b341f3.f53a0fdc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8267],{9971:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var n=r(7462),o=(r(7294),r(3905));r(5657);const s={},a="VARIABLES",c={unversionedId:"about/references/keywords/VARIABLES",id:"about/references/keywords/VARIABLES",title:"VARIABLES",description:"VARIABLES",source:"@site/docs/about/references/keywords/VARIABLES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/VARIABLES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"},next:{title:"!include",permalink:"/ecalc/docs/about/references/keywords/include"}},i={},d=[{value:"Description",id:"description",level:2}],u={toc:d},l="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(l,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"variables"},"VARIABLES"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES")),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"This keyword is used to define variables which can be used throughout the YAML file via the use of expressions.\nThese variables can be based on time or can be independent. "),(0,o.kt)("p",null,"Information about defining and using variables can be seen ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/variables"},"here"),"."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/084f7ebf.d236a910.js b/assets/js/084f7ebf.d236a910.js new file mode 100644 index 0000000000..c88bc91e5e --- /dev/null +++ b/assets/js/084f7ebf.d236a910.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3847],{830:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>n,contentTitle:()=>R,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>S});var E=t(7462),s=(t(7294),t(3905));t(5657);const o={},R="DOWNSTREAM_PRESSURE_CONTROL",a={unversionedId:"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",id:"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",title:"DOWNSTREAM_PRESSURE_CONTROL",description:"MODELS /",source:"@site/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"},next:{title:"EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY"}},n={},S=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],_={toc:S},c="wrapper";function d(e){let{components:r,...t}=e;return(0,s.kt)(c,(0,E.Z)({},_,t,{components:r,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"downstream_pressure_control"},"DOWNSTREAM_PRESSURE_CONTROL"),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n","[...]"," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},"INTERSTAGE_CONTROL_PRESSURE"),"\n/ ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"},"DOWNSTREAM_PRESSURE_CONTROL")),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,"This keyword is used only for ",(0,s.kt)("inlineCode",{parentName:"p"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")," type. It is used within the ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},"INTERSTAGE_CONTROL_PRESSURE")," keyword."),(0,s.kt)("p",null,"The pressure control method downstream (after) the interstage pressure is specified in this keyword.\nFor more explanation see ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"Variable speed compressor train model with multiple streams and pressures"),"."),(0,s.kt)("h2",{id:"format"},"Format"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n DOWNSTREAM_PRESSURE_CONTROL: \n ...\n")),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0aeda122.4e36fb5a.js b/assets/js/0aeda122.4e36fb5a.js new file mode 100644 index 0000000000..0b7360d16c --- /dev/null +++ b/assets/js/0aeda122.4e36fb5a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7832],{2702:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));n(5657);const o={},s="HEAD",i={unversionedId:"about/references/keywords/HEAD",id:"about/references/keywords/HEAD",title:"HEAD",description:"Description",source:"@site/docs/about/references/keywords/HEAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HEAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT"},next:{title:"HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"}},l={},p=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"COMPRESSORS",id:"compressors",level:3},{value:"PUMPS",id:"pumps",level:3},{value:"Example",id:"example",level:2},{value:"COMPRESSORS",id:"compressors-1",level:3}],d={toc:p},c="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"head"},"HEAD"),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"HEAD")," is a keyword that is used defining ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},"PUMP")," and ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"COMPRESSOR CHARTS"),".\nHead can either be given as a M, KJ_PER_KG, JOULE_PER_KG."),(0,r.kt)("p",null,"For compressors, it is used in two separate ways under the ",(0,r.kt)("inlineCode",{parentName:"p"},"MODELS")," or section:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Defining the ",(0,r.kt)("inlineCode",{parentName:"li"},"UNITS")," of ",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD")),(0,r.kt)("li",{parentName:"ul"},"Defining the set of values for ",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD")," under ",(0,r.kt)("inlineCode",{parentName:"li"},"CURVES")," section. Here, this ",(0,r.kt)("strong",{parentName:"li"},"must")," be given as a set of values whose length (number of variables) match the correlating ",(0,r.kt)("inlineCode",{parentName:"li"},"EFFICIENCY")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"RATE")," values.")),(0,r.kt)("p",null,"For pumps, it is defined under the ",(0,r.kt)("inlineCode",{parentName:"p"},"FACILITY_INPUTS")," section."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("h3",{id:"compressors"},"COMPRESSORS"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: \n ...\n UNITS:\n HEAD: \n ...\n ....\n")),(0,r.kt)("h3",{id:"pumps"},"PUMPS"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: \n ...\n UNITS:\n HEAD: \n ...\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("h3",{id:"compressors-1"},"COMPRESSORS"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0f7b5825.f8427b6c.js b/assets/js/0f7b5825.f8427b6c.js new file mode 100644 index 0000000000..8b32f953e7 --- /dev/null +++ b/assets/js/0f7b5825.f8427b6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7238],{498:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>E,frontMatter:()=>l,metadata:()=>c,toc:()=>s});var r=a(7462),n=(a(7294),a(3905));a(5657);const l={},o="ELECTRICITY2FUEL",c={unversionedId:"about/references/keywords/ELECTRICITY2FUEL",id:"about/references/keywords/ELECTRICITY2FUEL",title:"ELECTRICITY2FUEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ELECTRICITY2FUEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ELECTRICITY2FUEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY"},next:{title:"EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS"}},i={},s=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Example 1",id:"example-1",level:3},{value:"Example 2",id:"example-2",level:3}],d={toc:s},p="wrapper";function E(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"electricity2fuel"},"ELECTRICITY2FUEL"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Yes"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"GENERATORSETS")),(0,n.kt)("td",{parentName:"tr",align:null},"None")))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")," specifies the correlation between the electric power\ndelivered and the fuel consumed by a generator set."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Note that this describes the relation for a ",(0,n.kt)("em",{parentName:"p"},"set"),' of generators and if there is more than one\ngenerator, the power vs. fuel usually makes a "jump" when the capacity of the generator(s) is\nexceeded and an additional generator is started.')),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")," may be modelled with a constant function through time or\nwith different power vs. fuel relations for different time intervals."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"ELECTRICITY2FUEL: \n")),(0,n.kt)("p",null,"or"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"ELECTRICITY2FUEL:\n : \n : \n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("h3",{id:"example-1"},"Example 1"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"ELECTRICITY2FUEL: generatorset_electricity_to_fuel_reference\n")),(0,n.kt)("h3",{id:"example-2"},"Example 2"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"ELECTRICITY2FUEL:\n 2001-01-01: generatorset_electricity_to_fuel_reference1\n 2005-01-01: generatorset_electricity_to_fuel_reference2\n")),(0,n.kt)("p",null,"Where ",(0,n.kt)("inlineCode",{parentName:"p"},"generatorset_electricity_to_fuel_reference")," is a ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),"\nof ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," ",(0,n.kt)("inlineCode",{parentName:"p"},"ELECTRICITY2FUEL"),"."))}E.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0fd76486.63b58892.js b/assets/js/0fd76486.63b58892.js new file mode 100644 index 0000000000..c41b34cbdf --- /dev/null +++ b/assets/js/0fd76486.63b58892.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8746],{6263:(e,l,a)=>{a.r(l),a.d(l,{assets:()=>m,contentTitle:()=>n,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var o=a(7462),t=(a(7294),a(3905));a(5657);const i={sidebar_position:7,description:"Examples of eCalc usage"},n="Examples",s={unversionedId:"about/modelling/examples/index",id:"about/modelling/examples/index",title:"Examples",description:"Examples of eCalc usage",source:"@site/docs/about/modelling/examples/index.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/",permalink:"/ecalc/docs/about/modelling/examples/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/index.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"Examples of eCalc usage"},sidebar:"about",previous:{title:"Generic Workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow"},next:{title:"Simple model",permalink:"/ecalc/docs/about/modelling/examples/simple"}},m={},d=[],p={toc:d},r="wrapper";function c(e){let{components:l,...a}=e;return(0,t.kt)(r,(0,o.Z)({},p,a,{components:l,mdxType:"MDXLayout"}),(0,t.kt)("h1",{id:"examples"},"Examples"),(0,t.kt)("p",null,"Here you find some examples."),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/examples/simple"},"Simple example")),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/examples/advanced"},"Advanced example")),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/examples/drogon"},"Drogon example"))),(0,t.kt)("p",null,"The models are also available in the Python library under the libecalc.examples module."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/10c684b0.148b0114.js b/assets/js/10c684b0.148b0114.js new file mode 100644 index 0000000000..faaddeff3f --- /dev/null +++ b/assets/js/10c684b0.148b0114.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5870],{6328:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>n,metadata:()=>i,toc:()=>d});var o=a(7462),r=(a(7294),a(3905));a(5657);const n={},s="START",i={unversionedId:"about/references/keywords/START",id:"about/references/keywords/START",title:"START",description:"START",source:"@site/docs/about/references/keywords/START.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/START",permalink:"/ecalc/docs/about/references/keywords/START",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/START.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES"},next:{title:"STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],l={toc:d},u="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,o.Z)({},l,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"start"},"START"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/START"},"START")),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"The global start date for eCalc to begin energy and emission calculations. It is recommended that you have control\nof which date you want data to be calculated and exported for, in particular when using LTP and FDE workflows."),(0,r.kt)("p",null,'The is , meaning that if you specify 2020-01-01, the whole year of 2020 is included in the output. The hours, minutes and seconds\nof the day are implicitly set to "00:00:00", so the counting starts from midnight on January 1st 2020.'),(0,r.kt)("p",null,"You can provide a date that is before the global time vector, but it is recommended to set it to the start of your timeseries data. Normally the\ntimeseries data provides this information directly, when specifying the first time step e.g. 2020-01-01, meaning that the data is valid from January 1st 2020,\nbut data by default has (",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE"),"), which means that it backfills data, and then we will know how far back\nto backfill data (ie defines this for the first period)."),(0,r.kt)("p",null,"The cousin of is ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/END"},"END")," and have similar behaviour, but check the reference for details, to make sure you have the correct understanding."),(0,r.kt)("p",null,"If is not specified, eCalc will make and educated ",(0,r.kt)("em",{parentName:"p"},"GUESS")," on when the output data should start, but that may be incorrect, therefore it is recommended that you\nstay in control of that to make sure you get correct output."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"START: \n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("p",null,"Given an input dataset from ",(0,r.kt)("strong",{parentName:"p"},"01-01-2000 - 01-01-2040"),", ignoring the first 20 years of data\ncan be achieved as follows:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"START: 2020-01-01\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/11516e85.b4fac2cd.js b/assets/js/11516e85.b4fac2cd.js new file mode 100644 index 0000000000..149a8c4ca8 --- /dev/null +++ b/assets/js/11516e85.b4fac2cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3054],{6369:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>n,contentTitle:()=>R,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>S});var s=t(7462),E=(t(7294),t(3905));t(5657);const o={},R="UPSTREAM_PRESSURE_CONTROL",a={unversionedId:"about/references/keywords/UPSTREAM_PRESSURE_CONTROL",id:"about/references/keywords/UPSTREAM_PRESSURE_CONTROL",title:"UPSTREAM_PRESSURE_CONTROL",description:"MODELS /",source:"@site/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS"},next:{title:"VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES"}},n={},S=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],_={toc:S},c="wrapper";function l(e){let{components:r,...t}=e;return(0,E.kt)(c,(0,s.Z)({},_,t,{components:r,mdxType:"MDXLayout"}),(0,E.kt)("h1",{id:"upstream_pressure_control"},"UPSTREAM_PRESSURE_CONTROL"),(0,E.kt)("p",null,(0,E.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n","[...]"," /\n",(0,E.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},"INTERSTAGE_CONTROL_PRESSURE"),"\n/ ",(0,E.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"},"UPSTREAM_PRESSURE_CONTROL")),(0,E.kt)("h2",{id:"description"},"Description"),(0,E.kt)("p",null,"This keyword is used only for ",(0,E.kt)("inlineCode",{parentName:"p"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")," type. It is used within the ",(0,E.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},"INTERSTAGE_CONTROL_PRESSURE")," keyword."),(0,E.kt)("p",null,"The pressure control method upstream (before) the interstage pressure is specified in this keyword.\nFor more explanation see ",(0,E.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"Variable speed compressor train model with multiple streams and pressures"),"."),(0,E.kt)("h2",{id:"format"},"Format"),(0,E.kt)("pre",null,(0,E.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: \n ...\n")),(0,E.kt)("h2",{id:"example"},"Example"),(0,E.kt)("pre",null,(0,E.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE\n")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1287dd43.3adbfe17.js b/assets/js/1287dd43.3adbfe17.js new file mode 100644 index 0000000000..d8594a5033 --- /dev/null +++ b/assets/js/1287dd43.3adbfe17.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3700],{5300:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var n=a(7462),i=(a(7294),a(3905));a(5657);const o={},l="Git",r={unversionedId:"contribute/guides/git",id:"contribute/guides/git",title:"Git",description:"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base.",source:"@site/docs/contribute/guides/01-git.md",sourceDirName:"contribute/guides",slug:"/contribute/guides/git",permalink:"/ecalc/docs/contribute/guides/git",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/guides/01-git.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",previous:{title:"Guides",permalink:"/ecalc/docs/category/guides"},next:{title:"Conventional Commits",permalink:"/ecalc/docs/contribute/guides/conventional-commits"}},s={},c=[{value:"Setting up Git",id:"setting-up-git",level:2},{value:"Using Git",id:"using-git",level:2},{value:"Cloning a git repository",id:"cloning-a-git-repository",level:3},{value:"Tell Git who you are",id:"tell-git-who-you-are",level:3},{value:"Create your own branch",id:"create-your-own-branch",level:3},{value:"Switch between existing branches",id:"switch-between-existing-branches",level:3},{value:"Fetch changes from GitHub",id:"fetch-changes-from-github",level:3},{value:"Send your changes to GitHub",id:"send-your-changes-to-github",level:3},{value:"Check status of changes",id:"check-status-of-changes",level:3},{value:"Add files",id:"add-files",level:3},{value:"Commit changes",id:"commit-changes",level:3},{value:"Send changes to GitHub",id:"send-changes-to-github",level:3},{value:"Workflow examples",id:"workflow-examples",level:2},{value:"Pull Requests",id:"pull-requests",level:3},{value:"Fork the repository",id:"fork-the-repository",level:3}],u={toc:c},p="wrapper";function h(e){let{components:t,...a}=e;return(0,i.kt)(p,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"git"},"Git"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://git-scm.com/"},"Git")," is the version control system (VCS) that is responsible for tracking all changes done to the code base.\nGit is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development\nof source code and documentation. We use Git as a service through GitHub. See ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/get-started"},"GitHub Docs"),"\nfor more information about GitHub and how to get started."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=the%20browser%2C%20including%3A-,Creating%20a%20repository,-Forking%20a%20repository"},"Creating a repository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=Creating%20a%20repository-,Forking%20a%20repository,-Managing%20files"},"Forking a repository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=Forking%20a%20repository-,Managing%20files,-Being%20social"},"Managing files")))),(0,i.kt)("h2",{id:"setting-up-git"},"Setting up Git"),(0,i.kt)("p",null,"Go to ",(0,i.kt)("a",{parentName:"p",href:"https://git-scm.com/downloads"},"git-scm.com")," to download the appropriate git client unless it is already installed on your system."),(0,i.kt)("p",null,"To verify that git is installed, you can run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git --version\n")),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/get-started/quickstart/set-up-git"},"GitHub Docs - Set up Git")," for detailed instructions."),(0,i.kt)("h2",{id:"using-git"},"Using Git"),(0,i.kt)("p",null,"Git is a powerful tool that can be used in many ways. We recommend the following resources:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Introduction to git - ",(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/get-started/using-git/about-git"},"GitHub - About git")),(0,i.kt)("li",{parentName:"ol"},"How to get out of git trouble ",(0,i.kt)("a",{parentName:"li",href:"https://ohshitgit.com/"},"Oh shit, Git!?!"))),(0,i.kt)("p",null,"Below we will describe the most commonly used commands and scenarios when working with git."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"In the following sections we use the syntax ","<","some text> where you should fill in your own values, such as:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"<","change type>"),": ",(0,i.kt)("a",{parentName:"li",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits")," change types such as feat, fix, docs, test, chore, refactor, etc."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"<","issue number>"),": the GitHub ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc"},"Issue Number")," that you are solving. This may be omitted if you are fixing something tiny."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"<","description>"),": a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string."))),(0,i.kt)("h3",{id:"cloning-a-git-repository"},"Cloning a git repository"),(0,i.kt)("p",null,"Navigate to the location where you want to store the code, and clone the repository:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git clone git@github.com:equinor/ecalc.git\n")),(0,i.kt)("p",null,"This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the\nsame name as the repository, ecalc/."),(0,i.kt)("h3",{id:"tell-git-who-you-are"},"Tell Git who you are"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},'git config --global user.name "My name"\ngit config --global user.email example@email.com\n')),(0,i.kt)("p",null,"This is what will show in the git log when you make changes."),(0,i.kt)("h3",{id:"create-your-own-branch"},"Create your own branch"),(0,i.kt)("p",null,"In order to create a new local branch and switch to it:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git checkout -b /-\n")),(0,i.kt)("p",null,"for new versions of git you may also use the more intuitive."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git switch -c /-\n")),(0,i.kt)("h3",{id:"switch-between-existing-branches"},"Switch between existing branches"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git checkout \n")),(0,i.kt)("h3",{id:"fetch-changes-from-github"},"Fetch changes from GitHub"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git pull\n")),(0,i.kt)("p",null,"This will update the local branch you are currently in, with changes done in GitHub."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git push --set-upstream origin /-\n")),(0,i.kt)("h3",{id:"send-your-changes-to-github"},"Send your changes to GitHub"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git push\n")),(0,i.kt)("p",null,"This will update the remove repository on GitHub. If it is the first time for a new branch you will also\nhave to tell git that you are creating a new remote branch by using the command:"),(0,i.kt)("h3",{id:"check-status-of-changes"},"Check status of changes"),(0,i.kt)("p",null,"List the files you have changed and those you still need to add or commit:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git status\n")),(0,i.kt)("h3",{id:"add-files"},"Add files"),(0,i.kt)("p",null,"Add new or changed files"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git add \n")),(0,i.kt)("p",null,"or adding everything in and below your working directory"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git add .\n")),(0,i.kt)("h3",{id:"commit-changes"},"Commit changes"),(0,i.kt)("p",null,"Commit any files you've added with git add, and also commit any files you've changed since then:\t"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-shell"},'git commit -m ": : /-\n"))),(0,i.kt)("li",{parentName:"ol"},"Add the changed files ",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git add \n"))),(0,i.kt)("li",{parentName:"ol"},"Commit your changes using the ",(0,i.kt)("a",{parentName:"li",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits")," formatting for the commit messages. ",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},'git commit -m ": "\n'))),(0,i.kt)("li",{parentName:"ol"},"If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code.",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git fetch\ngit rebase origin/main\n"))),(0,i.kt)("li",{parentName:"ol"},"Push changes to GitHub",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git push --set-upstream origin /-\n"))),(0,i.kt)("li",{parentName:"ol"},"You can now ",(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request"},"Create a Pull Request")," ")),(0,i.kt)("h3",{id:"fork-the-repository"},"Fork the repository"),(0,i.kt)("p",null,"For external developers, you will ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/get-started/quickstart/contributing-to-projects"},"contribute to the project through forking"),". "),(0,i.kt)("p",null,"Here's a quick guide:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Create your own fork of the repository"),(0,i.kt)("li",{parentName:"ol"},"Clone the project to your machine",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git clone git@github.com:equinor/ecalc.git\n"))),(0,i.kt)("li",{parentName:"ol"},"To keep track of the original repository add another remote named upstream",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git remote add upstream git@github.com:equinor/template-fastapi-react.git\n"))),(0,i.kt)("li",{parentName:"ol"},"Create a branch locally with a succinct but descriptive name and prefixed with change type. ",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git checkout -b /-\n"))),(0,i.kt)("li",{parentName:"ol"},"Make the changes in the created branch. "),(0,i.kt)("li",{parentName:"ol"},"Add and run tests for your changes if needed (we only take pull requests with passing tests)."),(0,i.kt)("li",{parentName:"ol"},"Add the changed files ",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git add \n"))),(0,i.kt)("li",{parentName:"ol"},"Commit your changes using the ",(0,i.kt)("a",{parentName:"li",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits")," formatting for the commit messages. ",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},'git commit -m ": "\n'))),(0,i.kt)("li",{parentName:"ol"},"Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code.",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git fetch upstream\ngit rebase upstream/main\n"))),(0,i.kt)("li",{parentName:"ol"},"Push to your fork.",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-shell"},"git push origin feature/my-new-feature\n"))),(0,i.kt)("li",{parentName:"ol"},"Submit a ",(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork"},"Pull Request from a fork"),". Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us. ")),(0,i.kt)("p",null,"That's it... thank you for your contribution!"),(0,i.kt)("p",null,"After your pull request is merged, you can safely delete your branch."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1300feb7.78be5d30.js b/assets/js/1300feb7.78be5d30.js new file mode 100644 index 0000000000..90fbd77e58 --- /dev/null +++ b/assets/js/1300feb7.78be5d30.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8269],{3810:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));a(5657);const o={},s="RATE",l={unversionedId:"about/references/keywords/RATE",id:"about/references/keywords/RATE",title:"RATE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE",permalink:"/ecalc/docs/about/references/keywords/RATE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"QUOTA",permalink:"/ecalc/docs/about/references/keywords/QUOTA"},next:{title:"RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS"}},c={},p=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:p},i="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(i,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"rate"},"RATE"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/RATE"},"RATE")),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"This can be used in two ways:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Used to define the rate for some ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"\ntypes using an ",(0,n.kt)("inlineCode",{parentName:"li"},"Expression")),(0,n.kt)("li",{parentName:"ul"},"Used defining the units of a ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},"PUMP")," and ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"COMPRESSOR CHARTS"),".")),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"RATE: \n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: \n TYPE: \n ...\n UNITS:\n RATE: \n ...\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"RATE: SIM1:GAS_PROD\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: pump\n TYPE: PUMP_CHART_VARIABLE_SPEED\n ...\n UNITS:\n RATE: \n ...\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1341.f7fb1046.js b/assets/js/1341.f7fb1046.js new file mode 100644 index 0000000000..f3cab667a1 --- /dev/null +++ b/assets/js/1341.f7fb1046.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1341],{1341:(t,e,i)=>{i.d(e,{D:()=>c,S:()=>u,a:()=>d,b:()=>p,c:()=>h,d:()=>G,e:()=>l,p:()=>a,s:()=>Y});var s=i(44),n=i(1188),r=i(3047),o=function(){var t=function(t,e,i,s){for(i=i||{},s=t.length;s--;i[t[s]]=e);return i},e=[1,2],i=[1,3],s=[1,5],n=[1,7],r=[2,5],o=[1,15],a=[1,17],c=[1,21],l=[1,22],h=[1,23],u=[1,24],d=[1,37],p=[1,25],y=[1,26],f=[1,27],g=[1,28],m=[1,29],_=[1,32],S=[1,33],k=[1,34],T=[1,35],b=[1,36],E=[1,39],v=[1,40],x=[1,41],D=[1,42],C=[1,38],$=[1,45],A=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],L=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],I=[1,4,5,7,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],O=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],N={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,classDefStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"--\x3e":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,class:42,CLASSENTITY_IDS:43,STYLECLASS:44,openDirective:45,typeDirective:46,closeDirective:47,":":48,argDirective:49,direction_tb:50,direction_bt:51,direction_rl:52,direction_lr:53,eol:54,";":55,EDGE_STATE:56,STYLE_SEPARATOR:57,left_of:58,right_of:59,open_directive:60,type_directive:61,arg_directive:62,close_directive:63,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",14:"DESCR",15:"--\x3e",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"class",43:"CLASSENTITY_IDS",44:"STYLECLASS",48:":",50:"direction_tb",51:"direction_bt",52:"direction_rl",53:"direction_lr",55:";",56:"EDGE_STATE",57:"STYLE_SEPARATOR",58:"left_of",59:"right_of",60:"open_directive",61:"type_directive",62:"arg_directive",63:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[11,3],[11,3],[12,3],[6,3],[6,5],[32,1],[32,1],[32,1],[32,1],[54,1],[54,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1],[45,1],[46,1],[49,1],[47,1]],performAction:function(t,e,i,s,n,r,o){var a=r.length-1;switch(n){case 4:return s.setRootDoc(r[a]),r[a];case 5:this.$=[];break;case 6:"nl"!=r[a]&&(r[a-1].push(r[a]),this.$=r[a-1]);break;case 7:case 8:case 12:this.$=r[a];break;case 9:this.$="nl";break;case 13:const t=r[a-1];t.description=s.trimColon(r[a]),this.$=t;break;case 14:this.$={stmt:"relation",state1:r[a-2],state2:r[a]};break;case 15:const e=s.trimColon(r[a]);this.$={stmt:"relation",state1:r[a-3],state2:r[a-1],description:e};break;case 19:this.$={stmt:"state",id:r[a-3],type:"default",description:"",doc:r[a-1]};break;case 20:var c=r[a],l=r[a-2].trim();if(r[a].match(":")){var h=r[a].split(":");c=h[0],l=[l,h[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 21:this.$={stmt:"state",id:r[a-3],type:"default",description:r[a-5],doc:r[a-1]};break;case 22:this.$={stmt:"state",id:r[a],type:"fork"};break;case 23:this.$={stmt:"state",id:r[a],type:"join"};break;case 24:this.$={stmt:"state",id:r[a],type:"choice"};break;case 25:this.$={stmt:"state",id:s.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:r[a-1].trim(),note:{position:r[a-2].trim(),text:r[a].trim()}};break;case 30:this.$=r[a].trim(),s.setAccTitle(this.$);break;case 31:case 32:this.$=r[a].trim(),s.setAccDescription(this.$);break;case 33:case 34:this.$={stmt:"classDef",id:r[a-1].trim(),classes:r[a].trim()};break;case 35:this.$={stmt:"applyClass",id:r[a-1].trim(),styleClass:r[a].trim()};break;case 38:s.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:s.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:s.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:s.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:r[a].trim(),type:"default",description:""};break;case 46:case 47:this.$={stmt:"state",id:r[a-2].trim(),classes:[r[a].trim()],type:"default",description:""};break;case 50:s.parseDirective("%%{","open_directive");break;case 51:s.parseDirective(r[a],"type_directive");break;case 52:r[a]=r[a].trim().replace(/'/g,'"'),s.parseDirective(r[a],"arg_directive");break;case 53:s.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:i,6:4,7:s,45:6,60:n},{1:[3]},{3:8,4:e,5:i,6:4,7:s,45:6,60:n},{3:9,4:e,5:i,6:4,7:s,45:6,60:n},{3:10,4:e,5:i,6:4,7:s,45:6,60:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],r,{8:11}),{46:12,61:[1,13]},{61:[2,50]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:a,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:l,19:h,22:u,24:d,25:p,26:y,27:f,28:g,29:m,32:31,33:_,35:S,37:k,38:T,42:b,45:6,50:E,51:v,52:x,53:D,56:C,60:n},{47:43,48:[1,44],63:$},t([48,63],[2,51]),t(A,[2,6]),{6:30,10:46,11:18,12:19,13:20,16:c,17:l,19:h,22:u,24:d,25:p,26:y,27:f,28:g,29:m,32:31,33:_,35:S,37:k,38:T,42:b,45:6,50:E,51:v,52:x,53:D,56:C,60:n},t(A,[2,8]),t(A,[2,9]),t(A,[2,10]),t(A,[2,11]),t(A,[2,12],{14:[1,47],15:[1,48]}),t(A,[2,16]),{18:[1,49]},t(A,[2,18],{20:[1,50]}),{23:[1,51]},t(A,[2,22]),t(A,[2,23]),t(A,[2,24]),t(A,[2,25]),{30:52,31:[1,53],58:[1,54],59:[1,55]},t(A,[2,28]),t(A,[2,29]),{34:[1,56]},{36:[1,57]},t(A,[2,32]),{39:[1,58],41:[1,59]},{43:[1,60]},t(L,[2,44],{57:[1,61]}),t(L,[2,45],{57:[1,62]}),t(A,[2,38]),t(A,[2,39]),t(A,[2,40]),t(A,[2,41]),t(I,[2,36]),{49:63,62:[1,64]},t(I,[2,53]),t(A,[2,7]),t(A,[2,13]),{13:65,24:d,56:C},t(A,[2,17]),t(O,r,{8:66}),{24:[1,67]},{24:[1,68]},{23:[1,69]},{24:[2,48]},{24:[2,49]},t(A,[2,30]),t(A,[2,31]),{40:[1,70]},{40:[1,71]},{44:[1,72]},{24:[1,73]},{24:[1,74]},{47:75,63:$},{63:[2,52]},t(A,[2,14],{14:[1,76]}),{4:o,5:a,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:l,19:h,21:[1,77],22:u,24:d,25:p,26:y,27:f,28:g,29:m,32:31,33:_,35:S,37:k,38:T,42:b,45:6,50:E,51:v,52:x,53:D,56:C,60:n},t(A,[2,20],{20:[1,78]}),{31:[1,79]},{24:[1,80]},t(A,[2,33]),t(A,[2,34]),t(A,[2,35]),t(L,[2,46]),t(L,[2,47]),t(I,[2,37]),t(A,[2,15]),t(A,[2,19]),t(O,r,{8:81}),t(A,[2,26]),t(A,[2,27]),{4:o,5:a,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:l,19:h,21:[1,82],22:u,24:d,25:p,26:y,27:f,28:g,29:m,32:31,33:_,35:S,37:k,38:T,42:b,45:6,50:E,51:v,52:x,53:D,56:C,60:n},t(A,[2,21])],defaultActions:{7:[2,50],8:[2,1],9:[2,2],10:[2,3],54:[2,48],55:[2,49],64:[2,52]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],s=[],n=[null],r=[],o=this.table,a="",c=0,l=0,h=1,u=r.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(p.yy[y]=this.yy[y]);d.setInput(t,p.yy),p.yy.lexer=d,p.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var f=d.yylloc;r.push(f);var g=d.options&&d.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,_,S,k,T,b,E,v,x,D={};;){if(_=i[i.length-1],this.defaultActions[_]?S=this.defaultActions[_]:(null==m&&(x=void 0,"number"!=typeof(x=s.pop()||d.lex()||h)&&(x instanceof Array&&(x=(s=x).pop()),x=e.symbols_[x]||x),m=x),S=o[_]&&o[_][m]),void 0===S||!S.length||!S[0]){var C="";for(T in v=[],o[_])this.terminals_[T]&&T>2&&v.push("'"+this.terminals_[T]+"'");C=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(m==h?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(C,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:f,expected:v})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+m);switch(S[0]){case 1:i.push(m),n.push(d.yytext),r.push(d.yylloc),i.push(S[1]),m=null,l=d.yyleng,a=d.yytext,c=d.yylineno,f=d.yylloc;break;case 2:if(b=this.productions_[S[1]][1],D.$=n[n.length-b],D._$={first_line:r[r.length-(b||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(b||1)].first_column,last_column:r[r.length-1].last_column},g&&(D._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(D,[a,l,c,p.yy,S[1],n,r].concat(u))))return k;b&&(i=i.slice(0,-1*b*2),n=n.slice(0,-1*b),r=r.slice(0,-1*b)),i.push(this.productions_[S[1]][0]),n.push(D.$),r.push(D._$),E=o[i[i.length-2]][i[i.length-1]],i.push(E);break;case 3:return!0}}return!0}},R={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===s.length?this.yylloc.first_column:0)+s[s.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,s,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;re[0].length)){if(e=i,s=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,n[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,s){switch(i){case 0:return 41;case 1:case 44:return 50;case 2:case 45:return 51;case 3:case 46:return 52;case 4:case 47:return 53;case 5:return this.begin("open_directive"),60;case 6:return this.begin("type_directive"),61;case 7:return this.popState(),this.begin("arg_directive"),48;case 8:return this.popState(),this.popState(),63;case 9:return 62;case 10:case 11:case 13:case 14:case 15:case 16:case 56:case 58:case 64:break;case 12:case 79:return 5;case 17:case 34:return this.pushState("SCALE"),17;case 18:case 35:return 18;case 19:case 25:case 36:case 51:case 54:this.popState();break;case 20:return this.begin("acc_title"),33;case 21:return this.popState(),"acc_title_value";case 22:return this.begin("acc_descr"),35;case 23:return this.popState(),"acc_descr_value";case 24:this.begin("acc_descr_multiline");break;case 26:return"acc_descr_multiline_value";case 27:return this.pushState("CLASSDEF"),38;case 28:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 29:return this.popState(),this.pushState("CLASSDEFID"),39;case 30:return this.popState(),40;case 31:return this.pushState("CLASS"),42;case 32:return this.popState(),this.pushState("CLASS_STYLE"),43;case 33:return this.popState(),44;case 37:this.pushState("STATE");break;case 38:case 41:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 39:case 42:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),26;case 40:case 43:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),27;case 48:this.pushState("STATE_STRING");break;case 49:return this.pushState("STATE_ID"),"AS";case 50:case 66:return this.popState(),"ID";case 52:return"STATE_DESCR";case 53:return 19;case 55:return this.popState(),this.pushState("struct"),20;case 57:return this.popState(),21;case 59:return this.begin("NOTE"),29;case 60:return this.popState(),this.pushState("NOTE_ID"),58;case 61:return this.popState(),this.pushState("NOTE_ID"),59;case 62:this.popState(),this.pushState("FLOATING_NOTE");break;case 63:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 65:return"NOTE_TEXT";case 67:return this.popState(),this.pushState("NOTE_TEXT"),24;case 68:return this.popState(),e.yytext=e.yytext.substr(2).trim(),31;case 69:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),31;case 70:case 71:return 7;case 72:return 16;case 73:return 56;case 74:return 24;case 75:return e.yytext=e.yytext.trim(),14;case 76:return 15;case 77:return 28;case 78:return 57;case 80:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[14,15],inclusive:!1},close_directive:{rules:[14,15],inclusive:!1},arg_directive:{rules:[8,9,14,15],inclusive:!1},type_directive:{rules:[7,8,14,15],inclusive:!1},open_directive:{rules:[6,14,15],inclusive:!1},struct:{rules:[14,15,27,31,37,44,45,46,47,56,57,58,59,73,74,75,76,77],inclusive:!1},FLOATING_NOTE_ID:{rules:[66],inclusive:!1},FLOATING_NOTE:{rules:[63,64,65],inclusive:!1},NOTE_TEXT:{rules:[68,69],inclusive:!1},NOTE_ID:{rules:[67],inclusive:!1},NOTE:{rules:[60,61,62],inclusive:!1},CLASS_STYLE:{rules:[33],inclusive:!1},CLASS:{rules:[32],inclusive:!1},CLASSDEFID:{rules:[30],inclusive:!1},CLASSDEF:{rules:[28,29],inclusive:!1},acc_descr_multiline:{rules:[25,26],inclusive:!1},acc_descr:{rules:[23],inclusive:!1},acc_title:{rules:[21],inclusive:!1},SCALE:{rules:[18,19,35,36],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[50],inclusive:!1},STATE_STRING:{rules:[51,52],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[14,15,38,39,40,41,42,43,48,49,53,54,55],inclusive:!1},ID:{rules:[14,15],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,10,11,12,13,15,16,17,20,22,24,27,31,34,37,55,59,70,71,72,73,74,75,76,78,79,80],inclusive:!0}}};function w(){this.yy={}}return N.lexer=R,w.prototype=N,N.Parser=w,new w}();o.parser=o;const a=o,c="LR",l="TB",h="state",u="relation",d="default",p="divider",y="[*]",f="start",g=y,m="color",_="fill";let S=c,k=[],T={};let b={root:{relations:[],states:{},documents:{}}},E=b.root,v=0,x=0;const D=t=>JSON.parse(JSON.stringify(t)),C=(t,e,i)=>{if(e.stmt===u)C(t,e.state1,!0),C(t,e.state2,!1);else if(e.stmt===h&&("[*]"===e.id?(e.id=i?t.id+"_start":t.id+"_end",e.start=i):e.id=e.id.trim()),e.doc){const t=[];let i,s=[];for(i=0;i0&&s.length>0){const i={stmt:h,id:(0,n.y)(),type:"divider",doc:D(s)};t.push(D(i)),e.doc=t}e.doc.forEach((t=>C(e,t,!0)))}},$=function(t,e=d,i=null,n=null,r=null,o=null,a=null,c=null){const l=null==t?void 0:t.trim();if(void 0===E.states[l]?(s.l.info("Adding state ",l,n),E.states[l]={id:l,descriptions:[],type:e,doc:i,note:r,classes:[],styles:[],textStyles:[]}):(E.states[l].doc||(E.states[l].doc=i),E.states[l].type||(E.states[l].type=e)),n&&(s.l.info("Setting state description",l,n),"string"==typeof n&&R(l,n.trim()),"object"==typeof n&&n.forEach((t=>R(l,t.trim())))),r&&(E.states[l].note=r,E.states[l].note.text=s.e.sanitizeText(E.states[l].note.text,(0,s.g)())),o){s.l.info("Setting state classes",l,o);("string"==typeof o?[o]:o).forEach((t=>B(l,t.trim())))}if(a){s.l.info("Setting state styles",l,a);("string"==typeof a?[a]:a).forEach((t=>P(l,t.trim())))}if(c){s.l.info("Setting state styles",l,a);("string"==typeof c?[c]:c).forEach((t=>F(l,t.trim())))}},A=function(t){b={root:{relations:[],states:{},documents:{}}},E=b.root,v=0,T={},t||(0,s.y)()},L=function(t){return E.states[t]};function I(t=""){let e=t;return t===y&&(v++,e=`${f}${v}`),e}function O(t="",e=d){return t===y?f:e}const N=function(t,e,i){if("object"==typeof t)!function(t,e,i){let n=I(t.id.trim()),r=O(t.id.trim(),t.type),o=I(e.id.trim()),a=O(e.id.trim(),e.type);$(n,r,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),$(o,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),E.relations.push({id1:n,id2:o,relationTitle:s.e.sanitizeText(i,(0,s.g)())})}(t,e,i);else{const n=I(t.trim()),r=O(t),o=function(t=""){let e=t;return t===g&&(v++,e=`end${v}`),e}(e.trim()),a=function(t="",e=d){return t===g?"end":e}(e);$(n,r),$(o,a),E.relations.push({id1:n,id2:o,title:s.e.sanitizeText(i,(0,s.g)())})}},R=function(t,e){const i=E.states[t],n=e.startsWith(":")?e.replace(":","").trim():e;i.descriptions.push(s.e.sanitizeText(n,(0,s.g)()))},w=function(t,e=""){void 0===T[t]&&(T[t]={id:t,styles:[],textStyles:[]});const i=T[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(m)){const t=e.replace(_,"bgFill").replace(m,_);i.textStyles.push(t)}i.styles.push(e)}))},B=function(t,e){t.split(",").forEach((function(t){let i=L(t);if(void 0===i){const e=t.trim();$(e),i=L(e)}i.classes.push(e)}))},P=function(t,e){const i=L(t);void 0!==i&&i.textStyles.push(e)},F=function(t,e){const i=L(t);void 0!==i&&i.textStyles.push(e)},G={parseDirective:function(t,e,i){r.m.parseDirective(this,t,e,i)},getConfig:()=>(0,s.g)().state,addState:$,clear:A,getState:L,getStates:function(){return E.states},getRelations:function(){return E.relations},getClasses:function(){return T},getDirection:()=>S,addRelation:N,getDividerId:()=>(x++,"divider-id-"+x),setDirection:t=>{S=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){s.l.info("Documents = ",b)},getRootDoc:()=>k,setRootDoc:t=>{s.l.info("Setting root doc",t),k=t},getRootDocV2:()=>(C({id:"root"},{id:"root",doc:k},!0),{id:"root",doc:k}),extract:t=>{let e;e=t.doc?t.doc:t,s.l.info(e),A(!0),s.l.info("Extract",e),e.forEach((t=>{switch(t.stmt){case h:$(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case u:N(t.state1,t.state2,t.description);break;case"classDef":w(t.id.trim(),t.classes);break;case"applyClass":B(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:s.p,setAccTitle:s.o,getAccDescription:s.q,setAccDescription:s.v,addStyleClass:w,setCssClass:B,addDescription:R,setDiagramTitle:s.w,getDiagramTitle:s.x},Y=t=>`\ndefs #statediagram-barbEnd {\n fill: ${t.transitionColor};\n stroke: ${t.transitionColor};\n }\ng.stateGroup text {\n fill: ${t.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${t.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${t.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${t.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${t.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n\n text {\n fill: ${t.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${t.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${t.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${t.innerEndBackground};\n stroke: ${t.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${t.compositeBackground||t.background};\n // stroke: ${t.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${t.stateBkg||t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${t.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${t.compositeTitleBackground};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${t.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${t.stateBorder||t.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${t.compositeBackground||t.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${t.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${t.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${t.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${t.lineColor};\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.277da0ae.js b/assets/js/14eb3368.277da0ae.js new file mode 100644 index 0000000000..ac26fb073b --- /dev/null +++ b/assets/js/14eb3368.277da0ae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9817],{1310:(e,t,a)=>{a.d(t,{Z:()=>E});var n=a(7462),r=a(7294),i=a(6010),l=a(5281),c=a(2802),s=a(8596),o=a(9960),m=a(5999),d=a(4996);function u(e){return r.createElement("svg",(0,n.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const h={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function b(){const e=(0,d.Z)("/");return r.createElement("li",{className:"breadcrumbs__item"},r.createElement(o.Z,{"aria-label":(0,m.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},r.createElement(u,{className:h.breadcrumbHomeIcon})))}const v={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function g(e){let{children:t,href:a,isLast:n}=e;const i="breadcrumbs__link";return n?r.createElement("span",{className:i,itemProp:"name"},t):a?r.createElement(o.Z,{className:i,href:a,itemProp:"item"},r.createElement("span",{itemProp:"name"},t)):r.createElement("span",{className:i},t)}function p(e){let{children:t,active:a,index:l,addMicrodata:c}=e;return r.createElement("li",(0,n.Z)({},c&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,i.Z)("breadcrumbs__item",{"breadcrumbs__item--active":a})}),t,r.createElement("meta",{itemProp:"position",content:String(l+1)}))}function E(){const e=(0,c.s1)(),t=(0,s.Ns)();return e?r.createElement("nav",{className:(0,i.Z)(l.k.docs.docBreadcrumbs,v.breadcrumbsContainer),"aria-label":(0,m.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},r.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&r.createElement(b,null),e.map(((t,a)=>{const n=a===e.length-1;return r.createElement(p,{key:a,active:n,index:a,addMicrodata:!!t.href},r.createElement(g,{href:t.href,isLast:n},t.label))})))):null}},4228:(e,t,a)=>{a.r(t),a.d(t,{default:()=>y});var n=a(7294),r=a(1944),i=a(2802),l=a(4996),c=a(6010),s=a(9960),o=a(3919),m=a(5999);const d={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function u(e){let{href:t,children:a}=e;return n.createElement(s.Z,{href:t,className:(0,c.Z)("card padding--lg",d.cardContainer)},a)}function h(e){let{href:t,icon:a,title:r,description:i}=e;return n.createElement(u,{href:t},n.createElement("h2",{className:(0,c.Z)("text--truncate",d.cardTitle),title:r},a," ",r),i&&n.createElement("p",{className:(0,c.Z)("text--truncate",d.cardDescription),title:i},i))}function b(e){let{item:t}=e;const a=(0,i.Wl)(t);return a?n.createElement(h,{href:a,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,m.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function v(e){let{item:t}=e;const a=(0,o.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",r=(0,i.xz)(t.docId??void 0);return n.createElement(h,{href:t.href,icon:a,title:t.label,description:t.description??r?.description})}function g(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(v,{item:t});case"category":return n.createElement(b,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function p(e){let{className:t}=e;const a=(0,i.jA)();return n.createElement(E,{items:a.items,className:t})}function E(e){const{items:t,className:a}=e;if(!t)return n.createElement(p,e);const r=(0,i.MN)(t);return n.createElement("section",{className:(0,c.Z)("row",a)},r.map(((e,t)=>n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(g,{item:e})))))}var f=a(4966),N=a(3120),Z=a(4364),k=a(1310),L=a(2503);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function T(e){let{categoryGeneratedIndex:t}=e;return n.createElement(r.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,l.Z)(t.image)})}function x(e){let{categoryGeneratedIndex:t}=e;const a=(0,i.jA)();return n.createElement("div",{className:_.generatedIndexPage},n.createElement(N.Z,null),n.createElement(k.Z,null),n.createElement(Z.Z,null),n.createElement("header",null,n.createElement(L.Z,{as:"h1",className:_.title},t.title),t.description&&n.createElement("p",null,t.description)),n.createElement("article",{className:"margin-top--lg"},n.createElement(E,{items:a.items,className:_.list})),n.createElement("footer",{className:"margin-top--lg"},n.createElement(f.Z,{previous:t.navigation.previous,next:t.navigation.next})))}function y(e){return n.createElement(n.Fragment,null,n.createElement(T,e),n.createElement(x,e))}},4966:(e,t,a)=>{a.d(t,{Z:()=>o});var n=a(7462),r=a(7294),i=a(5999),l=a(6010),c=a(9960);function s(e){const{permalink:t,title:a,subLabel:n,isNext:i}=e;return r.createElement(c.Z,{className:(0,l.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},n&&r.createElement("div",{className:"pagination-nav__sublabel"},n),r.createElement("div",{className:"pagination-nav__label"},a))}function o(e){const{previous:t,next:a}=e;return r.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,i.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&r.createElement(s,(0,n.Z)({},t,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),a&&r.createElement(s,(0,n.Z)({},a,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},4364:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),r=a(6010),i=a(5999),l=a(5281),c=a(4477);function s(e){let{className:t}=e;const a=(0,c.E)();return a.badge?n.createElement("span",{className:(0,r.Z)(t,l.k.docs.docVersionBadge,"badge badge--secondary")},n.createElement(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:a.label}},"Version: {versionLabel}")):null}},3120:(e,t,a)=>{a.d(t,{Z:()=>g});var n=a(7294),r=a(6010),i=a(2263),l=a(9960),c=a(5999),s=a(143),o=a(5281),m=a(373),d=a(4477);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:a}=e;return n.createElement(c.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:a}=e;return n.createElement(c.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function h(e){const t=u[e.versionMetadata.banner];return n.createElement(t,e)}function b(e){let{versionLabel:t,to:a,onClick:r}=e;return n.createElement(c.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:n.createElement("b",null,n.createElement(l.Z,{to:a,onClick:r},n.createElement(c.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function v(e){let{className:t,versionMetadata:a}=e;const{siteConfig:{title:l}}=(0,i.Z)(),{pluginId:c}=(0,s.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,m.J)(c),{latestDocSuggestion:u,latestVersionSuggestion:v}=(0,s.Jo)(c),g=u??(p=v).docs.find((e=>e.id===p.mainDocId));var p;return n.createElement("div",{className:(0,r.Z)(t,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},n.createElement("div",null,n.createElement(h,{siteTitle:l,versionMetadata:a})),n.createElement("div",{className:"margin-top--md"},n.createElement(b,{versionLabel:v.label,to:g.path,onClick:()=>d(v.name)})))}function g(e){let{className:t}=e;const a=(0,d.E)();return a.banner?n.createElement(v,{className:t,versionMetadata:a}):null}},2503:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(7462),r=a(7294),i=a(6010),l=a(5999),c=a(6668),s=a(9960);const o={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function m(e){let{as:t,id:a,...m}=e;const{navbar:{hideOnScroll:d}}=(0,c.L)();if("h1"===t||!a)return r.createElement(t,(0,n.Z)({},m,{id:void 0}));const u=(0,l.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof m.children?m.children:a});return r.createElement(t,(0,n.Z)({},m,{className:(0,i.Z)("anchor",d?o.anchorWithHideOnScrollNavbar:o.anchorWithStickyNavbar,m.className),id:a}),m.children,r.createElement(s.Z,{className:"hash-link",to:`#${a}`,"aria-label":u,title:u},"\u200b"))}}}]); \ No newline at end of file diff --git a/assets/js/1573.c871fc28.js b/assets/js/1573.c871fc28.js new file mode 100644 index 0000000000..c3a938a529 --- /dev/null +++ b/assets/js/1573.c871fc28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1573],{1619:(t,e,n)=>{n.d(e,{Z:()=>o});var i=n(1691),s=n(1610);const r=t=>{const{r:e,g:n,b:r}=s.Z.parse(t),a=.2126*i.Z.channel.toLinear(e)+.7152*i.Z.channel.toLinear(n)+.0722*i.Z.channel.toLinear(r);return i.Z.lang.round(a)},a=t=>r(t)>=.5,o=t=>!a(t)},1573:(t,e,n)=>{n.d(e,{diagram:()=>H});var i=n(1188),s=n(44),r=n(9373),a=n(1619),o=n(2281),c=n(7201),l=(n(7967),n(7856),n(7484),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,2],n=[1,5],i=[6,9,11,17,18,20,22,23,26,27,28],s=[1,15],r=[1,16],a=[1,17],o=[1,18],c=[1,19],l=[1,23],h=[1,24],d=[1,27],u=[4,6,9,11,17,18,20,22,23,26,27,28],p={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,period_statement:24,event_statement:25,period:26,event:27,open_directive:28,type_directive:29,arg_directive:30,close_directive:31,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",26:"period",27:"event",28:"open_directive",29:"type_directive",30:"arg_directive",31:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[24,1],[25,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 11:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 12:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 15:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 19:i.addTask(r[o],0,""),this.$=r[o];break;case 20:i.addEvent(r[o].substr(2)),this.$=r[o];break;case 21:i.parseDirective("%%{","open_directive");break;case 22:i.parseDirective(r[o],"type_directive");break;case 23:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 24:i.parseDirective("}%%","close_directive","timeline")}},table:[{3:1,4:e,7:3,12:4,28:n},{1:[3]},t(i,[2,3],{5:6}),{3:7,4:e,7:3,12:4,28:n},{13:8,29:[1,9]},{29:[2,21]},{6:[1,10],7:22,8:11,9:[1,12],10:13,11:[1,14],12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},{1:[2,2]},{14:25,15:[1,26],31:d},t([15,31],[2,22]),t(i,[2,8],{1:[2,1]}),t(i,[2,4]),{7:22,10:28,12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,11]),{19:[1,29]},{21:[1,30]},t(i,[2,14]),t(i,[2,15]),t(i,[2,16]),t(i,[2,17]),t(i,[2,18]),t(i,[2,19]),t(i,[2,20]),{11:[1,31]},{16:32,30:[1,33]},{11:[2,24]},t(i,[2,5]),t(i,[2,12]),t(i,[2,13]),t(u,[2,9]),{14:34,31:d},{31:[2,23]},{11:[1,35]},t(u,[2,10])],defaultActions:{5:[2,21],7:[2,2],27:[2,24],33:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,h=1,d=r.slice.call(arguments,1),u=Object.create(this.lexer),p={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(p.yy[y]=this.yy[y]);u.setInput(t,p.yy),p.yy.lexer=u,p.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var g=u.yylloc;r.push(g);var f=u.options&&u.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,_,b,v,x,k,S,w,$,E={};;){if(_=n[n.length-1],this.defaultActions[_]?b=this.defaultActions[_]:(null==m&&($=void 0,"number"!=typeof($=i.pop()||u.lex()||h)&&($ instanceof Array&&($=(i=$).pop()),$=e.symbols_[$]||$),m=$),b=a[_]&&a[_][m]),void 0===b||!b.length||!b[0]){var I="";for(x in w=[],a[_])this.terminals_[x]&&x>2&&w.push("'"+this.terminals_[x]+"'");I=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(m==h?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(I,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:g,expected:w})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+m);switch(b[0]){case 1:n.push(m),s.push(u.yytext),r.push(u.yylloc),n.push(b[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,g=u.yylloc;break;case 2:if(k=this.productions_[b[1]][1],E.$=s[s.length-k],E._$={first_line:r[r.length-(k||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(k||1)].first_column,last_column:r[r.length-1].last_column},f&&(E._$.range=[r[r.length-(k||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(E,[o,l,c,p.yy,b[1],s,r].concat(d))))return v;k&&(n=n.slice(0,-1*k*2),s=s.slice(0,-1*k),r=r.slice(0,-1*k)),n.push(this.productions_[b[1]][0]),s.push(E.$),r.push(E._$),S=a[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),28;case 1:return this.begin("type_directive"),29;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),31;case 4:return 30;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 27;case 21:return 26;case 22:return 6;case 23:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23],inclusive:!0}}};function g(){this.yy={}}return p.lexer=y,g.prototype=p,p.Parser=g,new g}());l.parser=l;const h=l;let d="",u=0;const p=[],y=[],g=[],f=()=>s.c,m=(t,e,n)=>{(0,i.p)(globalThis,t,e,n)},_=function(){p.length=0,y.length=0,d="",g.length=0,(0,s.y)()},b=function(t){d=t,p.push(t)},v=function(){return p},x=function(){let t=$();let e=0;for(;!t&&e<100;)t=$(),e++;return y.push(...g),y},k=function(t,e,n){const i={id:u++,section:d,type:d,task:t,score:e||0,events:n?[n]:[]};g.push(i)},S=function(t){g.find((t=>t.id===u-1)).events.push(t)},w=function(t){const e={section:d,type:d,description:t,task:t,classes:[]};y.push(e)},$=function(){let t=!0;for(const[e,n]of g.entries())g[e].processed,t=t&&n.processed;return t},E={clear:_,getCommonDb:f,addSection:b,getSections:v,getTasks:x,addTask:k,addTaskOrg:w,addEvent:S,parseDirective:m},I=Object.freeze(Object.defineProperty({__proto__:null,addEvent:S,addSection:b,addTask:k,addTaskOrg:w,clear:_,default:E,getCommonDb:f,getSections:v,getTasks:x,parseDirective:m},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:d}=c,u=t.split(//gi);for(let p=0;p)/).reverse(),s=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),c=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let r=0;re||"
    "===t)&&(s.pop(),c.text(s.join(" ").trim()),s="
    "===t?[""]:[t],c=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const D=function(t,e,n){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${10-e.height} q0,-5 5,-5 h${e.width-10} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},L=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},C=function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),c=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(T,e.width).node().getBBox(),l=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=c.height+1.1*l*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),D(a,e,s),e},A=function(t,e,n){const i=t.append("g"),s=i.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(T,e.width).node().getBBox(),r=n.fontSize&&n.fontSize.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},M=function(t,e,n,i,r,a,o,c,l,h,d){var u;for(const p of e){const e={descr:p.task,section:n,number:n,width:150,padding:20,maxHeight:a};s.l.debug("taskNode",e);const c=t.append("g").attr("class","taskWrapper"),y=C(c,e,n,o).height;if(s.l.debug("taskHeight after draw",y),c.attr("transform",`translate(${i}, ${r})`),a=Math.max(a,y),p.events){const e=t.append("g").attr("class","lineWrapper");let s=a;r+=100,s+=O(t,p.events,n,i,r,o),r-=100,e.append("line").attr("x1",i+95).attr("y1",r+a).attr("x2",i+95).attr("y2",r+a+(d?a:h)+l+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}i+=200,d&&!(null==(u=o.timeline)?void 0:u.disableMulticolor)&&n++}r-=10},O=function(t,e,n,i,r,a){let o=0;const c=r;r+=100;for(const l of e){const e={descr:l,section:n,number:n,width:150,padding:20,maxHeight:50};s.l.debug("eventNode",e);const c=t.append("g").attr("class","eventWrapper"),h=C(c,e,n,a).height;o+=h,c.attr("transform",`translate(${i}, ${r})`),r=r+10+h}return r=c,o},H={db:I,renderer:{setConf:()=>{},draw:function(t,e,n,a){var o,c,l,h;const d=(0,s.g)(),u=d.leftMargin??50;null==(c=(o=a.db).clear)||c.call(o),a.parser.parse(t+"\n"),s.l.debug("timeline",a.db);const p=d.securityLevel;let y;"sandbox"===p&&(y=(0,r.Ys)("#i"+e));const g=("sandbox"===p?(0,r.Ys)(y.nodes()[0].contentDocument.body):(0,r.Ys)("body")).select("#"+e);g.append("g");const f=a.db.getTasks(),m=a.db.getCommonDb().getDiagramTitle();s.l.debug("task",f),L(g);const _=a.db.getSections();s.l.debug("sections",_);let b=0,v=0,x=0,k=0,S=50+u,w=50;k=50;let $=0,E=!0;_.forEach((function(t){const e=A(g,{number:$,descr:t,section:$,width:150,padding:20,maxHeight:b},d);s.l.debug("sectionHeight before draw",e),b=Math.max(b,e+20)}));let I=0,T=0;s.l.debug("tasks.length",f.length);for(const[i,r]of f.entries()){const t={number:i,descr:r,section:r.section,width:150,padding:20,maxHeight:v},e=A(g,t,d);s.l.debug("taskHeight before draw",e),v=Math.max(v,e+20),I=Math.max(I,r.events.length);let n=0;for(let i=0;i0?_.forEach((t=>{const e=f.filter((e=>e.section===t)),n={number:$,descr:t,section:$,width:200*Math.max(e.length,1)-50,padding:20,maxHeight:b};s.l.debug("sectionNode",n);const i=g.append("g"),r=C(i,n,$,d);s.l.debug("sectionNode output",r),i.attr("transform",`translate(${S}, 50)`),w+=b+50,e.length>0&&M(g,e,$,S,w,v,d,I,T,b,!1),S+=200*Math.max(e.length,1),w=50,$++})):(E=!1,M(g,f,$,S,w,v,d,I,T,b,!0));const D=g.node().getBBox();s.l.debug("bounds",D),m&&g.append("text").text(m).attr("x",D.width/2-u).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),x=E?b+v+150:v+100;g.append("g").attr("class","lineWrapper").append("line").attr("x1",u).attr("y1",x).attr("x2",D.width+3*u).attr("y2",x).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.s)(void 0,g,(null==(l=d.timeline)?void 0:l.padding)??50,(null==(h=d.timeline)?void 0:h.useMaxWidth)??!1)}},parser:h,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n{t.r(r),t.d(r,{assets:()=>E,contentTitle:()=>n,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=t(7462),o=(t(7294),t(3905));t(5657);const s={},n="GENERATORSETS",c={unversionedId:"about/references/keywords/GENERATORSETS",id:"about/references/keywords/GENERATORSETS",title:"GENERATORSETS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/GENERATORSETS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/GENERATORSETS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},next:{title:"HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT"}},E={},d=[{value:"Description",id:"description",level:2}],i={toc:d},l="wrapper";function u(e){let{components:r,...t}=e;return(0,o.kt)(l,(0,a.Z)({},i,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"generatorsets"},"GENERATORSETS"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS")),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"Under ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS")," one or\nseveral ",(0,o.kt)("inlineCode",{parentName:"p"},"generator sets")," (a 'set' of an engine of some sort and a generator) are specified in a list.\nEach generator set requires three sub-keywords, ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")," and\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMERS"},"CONSUMERS")," and ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY"),"."),(0,o.kt)("p",null,"This keyword is optional. However, the only requirement is that each\ninstallation must have at least one of ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS"),"\nand ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS"),"."),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations"},"GENERATOR SETS")," for more details about usage."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/163041ea.9c2da84e.js b/assets/js/163041ea.9c2da84e.js new file mode 100644 index 0000000000..9ea9d8e149 --- /dev/null +++ b/assets/js/163041ea.9c2da84e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9480],{809:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>a,contentTitle:()=>l,default:()=>c,frontMatter:()=>n,metadata:()=>i,toc:()=>m});var r=o(7462),t=(o(7294),o(3905));o(5657);const n={title:"Single speed compressor train",sidebar_position:1},l=void 0,i={unversionedId:"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",title:"Single speed compressor train",description:"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Single speed compressor train",sidebar_position:1},sidebar:"about",previous:{title:"Compressor train types",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},next:{title:"Simplified variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"}},a={},m=[{value:"Format",id:"format",level:2}],d={toc:m},p="wrapper";function c(e){let{components:s,...o}=e;return(0,t.kt)(p,(0,r.Z)({},d,o,{components:s,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.\nBeing single speed compressors on a common shaft means that all compressors will run at the exact same fixed speed, and\nthis shaft speed can not be varied. Since the shaft speed can not vary, the problem is overdefined given the rate,\nsuction pressure and discharge pressure. A method for controlling the pressure also needs to be defined, to be able\nto calculate the energy usage for given rates, suction pressures and discharge pressures."),(0,t.kt)("p",null,"This means that a single speed compressor model needs the following to be defined:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"A polytropic compressor chart for every compressor stage in the compressor train. For single speed trains, eCalc\nonly supports user defined single speed compressor charts."),(0,t.kt)("li",{parentName:"ul"},"A ",(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/fluid_model"},"FLUID MODEL"),"."),(0,t.kt)("li",{parentName:"ul"},"A ",(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/"},"PRESSURE_CONTROL"),".")),(0,t.kt)("p",null,"The model is defined under the main keyword ",(0,t.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," in the format"),(0,t.kt)("h2",{id:"format"},"Format"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: \n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n PRESSURE_CONTROL: \n MAXIMUM_DISCHARGE_PRESSURE: \n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: \n MAXIMUM_POWER: \n CALCULATE_MAX_RATE: \n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/17896441.998554a7.js b/assets/js/17896441.998554a7.js new file mode 100644 index 0000000000..ba536df95d --- /dev/null +++ b/assets/js/17896441.998554a7.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7918],{1310:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var a=n(7462),o=n(7294),l=n(6010),r=n(5281),c=n(2802),s=n(8596),i=n(9960),d=n(5999),m=n(4996);function u(e){return o.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const p={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,m.Z)("/");return o.createElement("li",{className:"breadcrumbs__item"},o.createElement(i.Z,{"aria-label":(0,d.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},o.createElement(u,{className:p.breadcrumbHomeIcon})))}const f={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function g(e){let{children:t,href:n,isLast:a}=e;const l="breadcrumbs__link";return a?o.createElement("span",{className:l,itemProp:"name"},t):n?o.createElement(i.Z,{className:l,href:n,itemProp:"item"},o.createElement("span",{itemProp:"name"},t)):o.createElement("span",{className:l},t)}function b(e){let{children:t,active:n,index:r,addMicrodata:c}=e;return o.createElement("li",(0,a.Z)({},c&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,l.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,o.createElement("meta",{itemProp:"position",content:String(r+1)}))}function v(){const e=(0,c.s1)(),t=(0,s.Ns)();return e?o.createElement("nav",{className:(0,l.Z)(r.k.docs.docBreadcrumbs,f.breadcrumbsContainer),"aria-label":(0,d.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},o.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&o.createElement(h,null),e.map(((t,n)=>{const a=n===e.length-1;return o.createElement(b,{key:n,active:a,index:n,addMicrodata:!!t.href},o.createElement(g,{href:t.href,isLast:a},t.label))})))):null}},2587:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>mt});var a=n(7294),o=n(1944),l=n(902);const r=a.createContext(null);function c(e){let{children:t,content:n}=e;const o=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(r.Provider,{value:o},t)}function s(){const e=(0,a.useContext)(r);if(null===e)throw new l.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=s();return a.createElement(o.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(6010),m=n(7524),u=n(4966);function p(){const{metadata:e}=s();return a.createElement(u.Z,{previous:e.previous,next:e.next})}var h=n(3120),f=n(4364),g=n(5281),b=n(5999);function v(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(b.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function E(e){let{lastUpdatedBy:t}=e;return a.createElement(b.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function y(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:o}=e;return a.createElement("span",{className:g.k.common.lastUpdated},a.createElement(b.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(v,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:o?a.createElement(E,{lastUpdatedBy:o}):""}},"Last updated{atDate}{byUser}"),!1)}var k=n(7462);const N={iconEdit:"iconEdit_Z9Sw"};function C(e){let{className:t,...n}=e;return a.createElement("svg",(0,k.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,d.Z)(N.iconEdit,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function L(e){let{editUrl:t}=e;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:g.k.common.editThisPage},a.createElement(C,null),a.createElement(b.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}var Z=n(3008);const _={tags:"tags_jXut",tag:"tag_QGVx"};function T(e){let{tags:t}=e;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(b.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,d.Z)(_.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return a.createElement("li",{key:n,className:_.tag},a.createElement(Z.Z,{label:t,permalink:n}))}))))}const B={lastUpdated:"lastUpdated_vwxv"};function w(e){return a.createElement("div",{className:(0,d.Z)(g.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(T,e)))}function x(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:o,formattedLastUpdatedAt:l}=e;return a.createElement("div",{className:(0,d.Z)(g.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(L,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",B.lastUpdated)},(n||o)&&a.createElement(y,{lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:o})))}function H(){const{metadata:e}=s(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:o,lastUpdatedBy:l,tags:r}=e,c=r.length>0,i=!!(t||n||l);return c||i?a.createElement("footer",{className:(0,d.Z)(g.k.docs.docFooter,"docusaurus-mt-lg")},c&&a.createElement(w,{tags:r}),i&&a.createElement(x,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:o})):null}var A=n(6043),I=n(6668);function M(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...o}=e;n>=0?t[n].children.push(o):a.push(o)})),a}function S(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=S({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function j(e){const t=e.getBoundingClientRect();return t.top===t.bottom?j(e.parentNode):t}function U(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>j(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function z(e){const t=(0,a.useRef)(void 0),n=O();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:o,minHeadingLevel:l,maxHeadingLevel:r}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),c=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let o=t;o<=n;o+=1)a.push(`h${o}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:l,maxHeadingLevel:r}),s=U(c,{anchorTopOffset:n.current}),i=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(o),e.classList.add(o),t.current=e):e.classList.remove(o)}(e,e===i)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,n])}function V(e){let{toc:t,className:n,linkClassName:o,isChild:l}=e;return t.length?a.createElement("ul",{className:l?void 0:n},t.map((e=>a.createElement("li",{key:e.id},a.createElement("a",{href:`#${e.id}`,className:o??void 0,dangerouslySetInnerHTML:{__html:e.value}}),a.createElement(V,{isChild:!0,toc:e.children,className:n,linkClassName:o}))))):null}const P=a.memo(V);function R(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:o="table-of-contents__link",linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:c,...s}=e;const i=(0,I.L)(),d=r??i.tableOfContents.minHeadingLevel,m=c??i.tableOfContents.maxHeadingLevel,u=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:o}=e;return(0,a.useMemo)((()=>S({toc:M(t),minHeadingLevel:n,maxHeadingLevel:o})),[t,n,o])}({toc:t,minHeadingLevel:d,maxHeadingLevel:m});return z((0,a.useMemo)((()=>{if(o&&l)return{linkClassName:o,linkActiveClassName:l,minHeadingLevel:d,maxHeadingLevel:m}}),[o,l,d,m])),a.createElement(P,(0,k.Z)({toc:u,className:n,linkClassName:o},s))}const D={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function W(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,k.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",D.tocCollapsibleButton,!t&&D.tocCollapsibleButtonExpanded,n.className)}),a.createElement(b.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const $={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function F(e){let{toc:t,className:n,minHeadingLevel:o,maxHeadingLevel:l}=e;const{collapsed:r,toggleCollapsed:c}=(0,A.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)($.tocCollapsible,!r&&$.tocCollapsibleExpanded,n)},a.createElement(W,{collapsed:r,onClick:c}),a.createElement(A.z,{lazy:!0,className:$.tocCollapsibleContent,collapsed:r},a.createElement(R,{toc:t,minHeadingLevel:o,maxHeadingLevel:l})))}const q={tocMobile:"tocMobile_ITEo"};function G(){const{toc:e,frontMatter:t}=s();return a.createElement(F,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(g.k.docs.docTocMobile,q.tocMobile)})}const Y={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},J="table-of-contents__link toc-highlight",Q="table-of-contents__link--active";function X(e){let{className:t,...n}=e;return a.createElement("div",{className:(0,d.Z)(Y.tableOfContents,"thin-scrollbar",t)},a.createElement(R,(0,k.Z)({},n,{linkClassName:J,linkActiveClassName:Q})))}function K(){const{toc:e,frontMatter:t}=s();return a.createElement(X,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:g.k.docs.docTocDesktop})}var ee=n(2503),te=n(3905),ne=n(5742);var ae=n(2389),oe=n(2949);function le(){const{prism:e}=(0,I.L)(),{colorMode:t}=(0,oe.I)(),n=e.theme,a=e.darkTheme||n;return"dark"===t?a:n}var re=n(7594),ce=n.n(re);const se=/title=(?["'])(?.*?)\1/,ie=/\{(?<range>[\d,-]+)\}/,de={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function me(e,t){const n=e.map((e=>{const{start:n,end:a}=de[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${a})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function ue(e,t){let n=e.replace(/\n$/,"");const{language:a,magicComments:o,metastring:l}=t;if(l&&ie.test(l)){const e=l.match(ie).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${l}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,a=ce()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(a),code:n}}if(void 0===a)return{lineClassNames:{},code:n};const r=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return me(["js","jsBlock"],t);case"jsx":case"tsx":return me(["js","jsBlock","jsx"],t);case"html":return me(["js","jsBlock","html"],t);case"python":case"py":case"bash":return me(["bash"],t);case"markdown":case"md":return me(["html","jsx","bash"],t);default:return me(Object.keys(de),t)}}(a,o),c=n.split("\n"),s=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),i=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),m=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let p=0;p<c.length;){const e=c[p].match(r);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));i[t]?s[i[t]].range+=`${p},`:d[t]?s[d[t]].start=p:m[t]&&(s[m[t]].range+=`${s[m[t]].start}-${p-1},`),c.splice(p,1)}n=c.join("\n");const u={};return Object.entries(s).forEach((e=>{let[t,{range:n}]=e;ce()(n).forEach((e=>{u[e]??=[],u[e].push(t)}))})),{lineClassNames:u,code:n}}const pe={codeBlockContainer:"codeBlockContainer_Ckt0"};function he(e){let{as:t,...n}=e;const o=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[a,o]=e;const l=t[a];l&&"string"==typeof o&&(n[l]=o)})),n}(le());return a.createElement(t,(0,k.Z)({},n,{style:o,className:(0,d.Z)(n.className,pe.codeBlockContainer,g.k.common.codeBlock)}))}const fe={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function ge(e){let{children:t,className:n}=e;return a.createElement(he,{as:"pre",tabIndex:0,className:(0,d.Z)(fe.codeBlockStandalone,"thin-scrollbar",n)},a.createElement("code",{className:fe.codeBlockLines},t))}const be={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ve(e,t){const[n,o]=(0,a.useState)(),r=(0,a.useCallback)((()=>{o(e.current?.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,a.useEffect)((()=>{r()}),[r]),function(e,t,n){void 0===n&&(n=be);const o=(0,l.zX)(t),r=(0,l.Ql)(n);(0,a.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,r),()=>t.disconnect()}),[e,o,r])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),r())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const Ee={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var ye={Prism:n(7410).Z,theme:Ee};function ke(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(){return Ne=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Ne.apply(this,arguments)}var Ce=/\r\n|\r|\n/,Le=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},Ze=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)};function _e(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}var Te=function(e){function t(){for(var t=this,n=[],a=arguments.length;a--;)n[a]=arguments[a];e.apply(this,n),ke(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?function(e,t){var n=e.plain,a=Object.create(null),o=e.styles.reduce((function(e,n){var a=n.languages,o=n.style;return a&&!a.includes(t)||n.types.forEach((function(t){var n=Ne({},e[t],o);e[t]=n})),e}),a);return o.root=n,o.plain=Ne({},n,{backgroundColor:null}),o}(e.theme,e.language):void 0;return t.themeDict=n})),ke(this,"getLineProps",(function(e){var n=e.key,a=e.className,o=e.style,l=Ne({},_e(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),r=t.getThemeDict(t.props);return void 0!==r&&(l.style=r.plain),void 0!==o&&(l.style=void 0!==l.style?Ne({},l.style,o):o),void 0!==n&&(l.key=n),a&&(l.className+=" "+a),l})),ke(this,"getStyleForToken",(function(e){var n=e.types,a=e.empty,o=n.length,l=t.getThemeDict(t.props);if(void 0!==l){if(1===o&&"plain"===n[0])return a?{display:"inline-block"}:void 0;if(1===o&&!a)return l[n[0]];var r=a?{display:"inline-block"}:{},c=n.map((function(e){return l[e]}));return Object.assign.apply(Object,[r].concat(c))}})),ke(this,"getTokenProps",(function(e){var n=e.key,a=e.className,o=e.style,l=e.token,r=Ne({},_e(e,["key","className","style","token"]),{className:"token "+l.types.join(" "),children:l.content,style:t.getStyleForToken(l),key:void 0});return void 0!==o&&(r.style=void 0!==r.style?Ne({},r.style,o):o),void 0!==n&&(r.key=n),a&&(r.className+=" "+a),r})),ke(this,"tokenize",(function(e,t,n,a){var o={code:t,grammar:n,language:a,tokens:[]};e.hooks.run("before-tokenize",o);var l=o.tokens=e.tokenize(o.code,o.grammar,o.language);return e.hooks.run("after-tokenize",o),l}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,a=e.code,o=e.children,l=this.getThemeDict(this.props),r=t.languages[n];return o({tokens:function(e){for(var t=[[]],n=[e],a=[0],o=[e.length],l=0,r=0,c=[],s=[c];r>-1;){for(;(l=a[r]++)<o[r];){var i=void 0,d=t[r],m=n[r][l];if("string"==typeof m?(d=r>0?d:["plain"],i=m):(d=Ze(d,m.type),m.alias&&(d=Ze(d,m.alias)),i=m.content),"string"==typeof i){var u=i.split(Ce),p=u.length;c.push({types:d,content:u[0]});for(var h=1;h<p;h++)Le(c),s.push(c=[]),c.push({types:d,content:u[h]})}else r++,t.push(d),n.push(i),a.push(0),o.push(i.length)}r--,t.pop(),n.pop(),a.pop(),o.pop()}return Le(c),s}(void 0!==r?this.tokenize(t,a,r,n):[a]),className:"prism-code language-"+n,style:void 0!==l?l.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(a.Component);const Be=Te,we={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function xe(e){let{line:t,classNames:n,showLineNumbers:o,getLineProps:l,getTokenProps:r}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=l({line:t,className:(0,d.Z)(n,o&&we.codeLine)}),s=t.map(((e,t)=>a.createElement("span",(0,k.Z)({key:t},r({token:e,key:t})))));return a.createElement("span",c,o?a.createElement(a.Fragment,null,a.createElement("span",{className:we.codeLineNumber}),a.createElement("span",{className:we.codeLineContent},s)):s,a.createElement("br",null))}function He(e){return a.createElement("svg",(0,k.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function Ae(e){return a.createElement("svg",(0,k.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const Ie={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function Me(e){let{code:t,className:n}=e;const[o,l]=(0,a.useState)(!1),r=(0,a.useRef)(void 0),c=(0,a.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const a=document.createElement("textarea"),o=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";const l=document.getSelection(),r=l.rangeCount>0&&l.getRangeAt(0);n.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;let c=!1;try{c=document.execCommand("copy")}catch{}a.remove(),r&&(l.removeAllRanges(),l.addRange(r)),o&&o.focus()}(t),l(!0),r.current=window.setTimeout((()=>{l(!1)}),1e3)}),[t]);return(0,a.useEffect)((()=>()=>window.clearTimeout(r.current)),[]),a.createElement("button",{type:"button","aria-label":o?(0,b.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,b.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,b.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,d.Z)("clean-btn",n,Ie.copyButton,o&&Ie.copyButtonCopied),onClick:c},a.createElement("span",{className:Ie.copyButtonIcons,"aria-hidden":"true"},a.createElement(He,{className:Ie.copyButtonIcon}),a.createElement(Ae,{className:Ie.copyButtonSuccessIcon})))}function Se(e){return a.createElement("svg",(0,k.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const je={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function Ue(e){let{className:t,onClick:n,isEnabled:o}=e;const l=(0,b.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return a.createElement("button",{type:"button",onClick:n,className:(0,d.Z)("clean-btn",t,o&&je.wordWrapButtonEnabled),"aria-label":l,title:l},a.createElement(Se,{className:je.wordWrapButtonIcon,"aria-hidden":"true"}))}function Oe(e){let{children:t,className:n="",metastring:o,title:l,showLineNumbers:r,language:c}=e;const{prism:{defaultLanguage:s,magicComments:i}}=(0,I.L)(),m=c??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??s,u=le(),p=function(){const[e,t]=(0,a.useState)(!1),[n,o]=(0,a.useState)(!1),l=(0,a.useRef)(null),r=(0,a.useCallback)((()=>{const n=l.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[l,e]),c=(0,a.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=l.current,n=e>t||l.current.querySelector("code").hasAttribute("style");o(n)}),[l]);return ve(l,c),(0,a.useEffect)((()=>{c()}),[e,c]),(0,a.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:l,isEnabled:e,isCodeScrollable:n,toggle:r}}(),h=function(e){return e?.match(se)?.groups.title??""}(o)||l,{lineClassNames:f,code:g}=ue(t,{metastring:o,language:m,magicComments:i}),b=r??function(e){return Boolean(e?.includes("showLineNumbers"))}(o);return a.createElement(he,{as:"div",className:(0,d.Z)(n,m&&!n.includes(`language-${m}`)&&`language-${m}`)},h&&a.createElement("div",{className:fe.codeBlockTitle},h),a.createElement("div",{className:fe.codeBlockContent},a.createElement(Be,(0,k.Z)({},ye,{theme:u,code:g,language:m??"text"}),(e=>{let{className:t,tokens:n,getLineProps:o,getTokenProps:l}=e;return a.createElement("pre",{tabIndex:0,ref:p.codeBlockRef,className:(0,d.Z)(t,fe.codeBlock,"thin-scrollbar")},a.createElement("code",{className:(0,d.Z)(fe.codeBlockLines,b&&fe.codeBlockLinesWithNumbering)},n.map(((e,t)=>a.createElement(xe,{key:t,line:e,getLineProps:o,getTokenProps:l,classNames:f[t],showLineNumbers:b})))))})),a.createElement("div",{className:fe.buttonGroup},(p.isEnabled||p.isCodeScrollable)&&a.createElement(Ue,{className:fe.codeButton,onClick:()=>p.toggle(),isEnabled:p.isEnabled}),a.createElement(Me,{className:fe.codeButton,code:g}))))}function ze(e){let{children:t,...n}=e;const o=(0,ae.Z)(),l=function(e){return a.Children.toArray(e).some((e=>(0,a.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),r="string"==typeof l?Oe:ge;return a.createElement(r,(0,k.Z)({key:String(o)},n),l)}var Ve=n(9960);const Pe={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function Re(e){return!!e&&("SUMMARY"===e.tagName||Re(e.parentElement))}function De(e,t){return!!e&&(e===t||De(e.parentElement,t))}function We(e){let{summary:t,children:n,...o}=e;const l=(0,ae.Z)(),r=(0,a.useRef)(null),{collapsed:c,setCollapsed:s}=(0,A.u)({initialState:!o.open}),[i,m]=(0,a.useState)(o.open),u=a.isValidElement(t)?t:a.createElement("summary",null,t??"Details");return a.createElement("details",(0,k.Z)({},o,{ref:r,open:i,"data-collapsed":c,className:(0,d.Z)(Pe.details,l&&Pe.isBrowser,o.className),onMouseDown:e=>{Re(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;Re(t)&&De(t,r.current)&&(e.preventDefault(),c?(s(!1),m(!0)):s(!0))}}),u,a.createElement(A.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{s(e),m(!e)}},a.createElement("div",{className:Pe.collapsibleContent},n)))}const $e={details:"details_b_Ee"},Fe="alert alert--info";function qe(e){let{...t}=e;return a.createElement(We,(0,k.Z)({},t,{className:(0,d.Z)(Fe,$e.details,t.className)}))}function Ge(e){return a.createElement(ee.Z,e)}const Ye={containsTaskList:"containsTaskList_mC6p"};function Je(e){if(void 0!==e)return(0,d.Z)(e,e?.includes("contains-task-list")&&Ye.containsTaskList)}const Qe={img:"img_ev3q"};const Xe="admonition_LlT9",Ke="admonitionHeading_tbUL",et="admonitionIcon_kALy",tt="admonitionContent_S0QG";const nt={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(b.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(b.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(b.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(b.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(b.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},at={secondary:"note",important:"info",success:"tip",warning:"danger"};function ot(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=a.Children.toArray(e),n=t.find((e=>a.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),o=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:o}}(e.children);return{...e,title:e.title??t,children:n}}const lt={head:function(e){const t=a.Children.map(e.children,(e=>a.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...o}=e.props;return a.createElement(e.props.originalType,o)}return e}(e):e));return a.createElement(ne.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return a.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,a.isValidElement)(e)&&t.includes(e.props?.mdxType)))?a.createElement("code",e):a.createElement(ze,e)},a:function(e){return a.createElement(Ve.Z,e)},pre:function(e){return a.createElement(ze,(0,a.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=a.Children.toArray(e.children),n=t.find((e=>a.isValidElement(e)&&"summary"===e.props?.mdxType)),o=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return a.createElement(qe,(0,k.Z)({},e,{summary:n}),o)},ul:function(e){return a.createElement("ul",(0,k.Z)({},e,{className:Je(e.className)}))},img:function(e){return a.createElement("img",(0,k.Z)({loading:"lazy"},e,{className:(t=e.className,(0,d.Z)(t,Qe.img))}));var t},h1:e=>a.createElement(Ge,(0,k.Z)({as:"h1"},e)),h2:e=>a.createElement(Ge,(0,k.Z)({as:"h2"},e)),h3:e=>a.createElement(Ge,(0,k.Z)({as:"h3"},e)),h4:e=>a.createElement(Ge,(0,k.Z)({as:"h4"},e)),h5:e=>a.createElement(Ge,(0,k.Z)({as:"h5"},e)),h6:e=>a.createElement(Ge,(0,k.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:o,icon:l}=ot(e),r=function(e){const t=at[e]??e,n=nt[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),nt.info)}(n),c=o??r.label,{iconComponent:s}=r,i=l??a.createElement(s,null);return a.createElement("div",{className:(0,d.Z)(g.k.common.admonition,g.k.common.admonitionType(e.type),"alert",`alert--${r.infimaClassName}`,Xe)},a.createElement("div",{className:Ke},a.createElement("span",{className:et},i),c),a.createElement("div",{className:tt},t))},mermaid:()=>null};function rt(e){let{children:t}=e;return a.createElement(te.Zo,{components:lt},t)}function ct(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=s();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(g.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(ee.Z,{as:"h1"},n)),a.createElement(rt,null,t))}var st=n(1310);const it={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function dt(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=s(),n=(0,m.i)(),o=e.hide_table_of_contents,l=!o&&t.length>0;return{hidden:o,mobile:l?a.createElement(G,null):void 0,desktop:!l||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(K,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&it.docItemCol)},a.createElement(h.Z,null),a.createElement("div",{className:it.docItemContainer},a.createElement("article",null,a.createElement(st.Z,null),a.createElement(f.Z,null),n.mobile,a.createElement(ct,null,t),a.createElement(H,null)),a.createElement(p,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function mt(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(c,{content:e.content},a.createElement(o.FG,{className:t},a.createElement(i,null),a.createElement(dt,null,a.createElement(n,null))))}},4966:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var a=n(7462),o=n(7294),l=n(5999),r=n(6010),c=n(9960);function s(e){const{permalink:t,title:n,subLabel:a,isNext:l}=e;return o.createElement(c.Z,{className:(0,r.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},a&&o.createElement("div",{className:"pagination-nav__sublabel"},a),o.createElement("div",{className:"pagination-nav__label"},n))}function i(e){const{previous:t,next:n}=e;return o.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,l.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&o.createElement(s,(0,a.Z)({},t,{subLabel:o.createElement(l.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&o.createElement(s,(0,a.Z)({},n,{subLabel:o.createElement(l.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},4364:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var a=n(7294),o=n(6010),l=n(5999),r=n(5281),c=n(4477);function s(e){let{className:t}=e;const n=(0,c.E)();return n.badge?a.createElement("span",{className:(0,o.Z)(t,r.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(l.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},3120:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var a=n(7294),o=n(6010),l=n(2263),r=n(9960),c=n(5999),s=n(143),i=n(5281),d=n(373),m=n(4477);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(c.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(c.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function p(e){const t=u[e.versionMetadata.banner];return a.createElement(t,e)}function h(e){let{versionLabel:t,to:n,onClick:o}=e;return a.createElement(c.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(r.Z,{to:n,onClick:o},a.createElement(c.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function f(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:r}}=(0,l.Z)(),{pluginId:c}=(0,s.gA)({failfast:!0}),{savePreferredVersionName:m}=(0,d.J)(c),{latestDocSuggestion:u,latestVersionSuggestion:f}=(0,s.Jo)(c),g=u??(b=f).docs.find((e=>e.id===b.mainDocId));var b;return a.createElement("div",{className:(0,o.Z)(t,i.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(p,{siteTitle:r,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(h,{versionLabel:f.label,to:g.path,onClick:()=>m(f.name)})))}function g(e){let{className:t}=e;const n=(0,m.E)();return n.banner?a.createElement(f,{className:t,versionMetadata:n}):null}},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var a=n(7462),o=n(7294),l=n(6010),r=n(5999),c=n(6668),s=n(9960);const i={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function d(e){let{as:t,id:n,...d}=e;const{navbar:{hideOnScroll:m}}=(0,c.L)();if("h1"===t||!n)return o.createElement(t,(0,a.Z)({},d,{id:void 0}));const u=(0,r.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof d.children?d.children:n});return o.createElement(t,(0,a.Z)({},d,{className:(0,l.Z)("anchor",m?i.anchorWithHideOnScrollNavbar:i.anchorWithStickyNavbar,d.className),id:n}),d.children,o.createElement(s.Z,{className:"hash-link",to:`#${n}`,"aria-label":u,title:u},"\u200b"))}},3008:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var a=n(7294),o=n(6010),l=n(9960);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function c(e){let{permalink:t,label:n,count:c}=e;return a.createElement(l.Z,{href:t,className:(0,o.Z)(r.tag,c?r.tagWithCount:r.tagRegular)},n,c&&a.createElement("span",null,c))}},7594:(e,t)=>{function n(e){let t,n=[];for(let a of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(a))n.push(parseInt(a,10));else if(t=a.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,a,o,l]=t;if(a&&l){a=parseInt(a),l=parseInt(l);const e=a<l?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(l+=e);for(let t=a;t!==l;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/assets/js/1826.4f989084.js b/assets/js/1826.4f989084.js new file mode 100644 index 0000000000..3adc47e4e8 --- /dev/null +++ b/assets/js/1826.4f989084.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1826],{3349:(e,t,n)=>{n.d(t,{a:()=>l});var r=n(6225);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.bg(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},6225:(e,t,n)=>{n.d(t,{$p:()=>d,O1:()=>a,WR:()=>p,bF:()=>o,bg:()=>c});var r=n(7514),l=n(3234);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,n){t&&e.attr("class",t).attr("class",n+" "+e.attr("class"))}function p(e,t){var n=t.graph();if(r.Z(n)){var o=n.transition;if(l.Z(o))return o(e)}return e}},1826:(e,t,n)=>{n.d(t,{diagram:()=>i});var r=n(9863),l=(n(5625),n(9373));n(44),n(7452),n(3688),n(870),n(2494),n(6225);n(3349);n(6749),n(4379);n(1666);l.c_6;n(1188);var o=n(755);n(7856),n(7484),n(7967),n(9354),n(3502);const a={},s=function(e){const t=Object.keys(e);for(const n of t)a[n]=e[n]},i={parser:r.p,db:r.f,renderer:o.f,styles:o.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,s(e.flowchart),r.f.clear(),r.f.setGen("gen-1")}}},755:(e,t,n)=>{n.d(t,{a:()=>w,f:()=>f});var r=n(5625),l=n(9373),o=n(9863),a=n(44),s=n(1188),i=n(2566),c=n(3349);const d={},p=function(e,t,n,r,l,o){const i=r.select(`[id="${n}"]`);Object.keys(e).forEach((function(n){const r=e[n];let d="default";r.classes.length>0&&(d=r.classes.join(" ")),d+=" flowchart-label";const p=(0,s.n)(r.styles);let b,f=void 0!==r.text?r.text:r.id;if(a.l.info("vertex",r,r.labelType),"markdown"===r.labelType)a.l.info("vertex",r,r.labelType);else if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const e={label:f.replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`))};b=(0,c.a)(i,e).node(),b.parentNode.removeChild(b)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",p.labelStyle.replace("color:","fill:"));const t=f.split(a.e.lineBreakRegex);for(const n of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=n,e.appendChild(t)}b=e}let w=0,u="";switch(r.type){case"round":w=5,u="rect";break;case"square":case"group":default:u="rect";break;case"diamond":u="question";break;case"hexagon":u="hexagon";break;case"odd":case"odd_right":u="rect_left_inv_arrow";break;case"lean_right":u="lean_right";break;case"lean_left":u="lean_left";break;case"trapezoid":u="trapezoid";break;case"inv_trapezoid":u="inv_trapezoid";break;case"circle":u="circle";break;case"ellipse":u="ellipse";break;case"stadium":u="stadium";break;case"subroutine":u="subroutine";break;case"cylinder":u="cylinder";break;case"doublecircle":u="doublecircle"}t.setNode(r.id,{labelStyle:p.labelStyle,shape:u,labelText:f,labelType:r.labelType,rx:w,ry:w,class:d,style:p.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:o.db.getTooltip(r.id)||"",domId:o.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:(0,a.g)().flowchart.padding}),a.l.info("setNode",{labelStyle:p.labelStyle,labelType:r.labelType,shape:u,labelText:f,rx:w,ry:w,class:d,style:p.style,id:r.id,domId:o.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:(0,a.g)().flowchart.padding})}))},b=function(e,t,n){a.l.info("abc78 edges = ",e);let r,o,i=0,c={};if(void 0!==e.defaultStyle){const t=(0,s.n)(e.defaultStyle);r=t.style,o=t.labelStyle}e.forEach((function(n){i++;var p="L-"+n.start+"-"+n.end;void 0===c[p]?(c[p]=0,a.l.info("abc78 new entry",p,c[p])):(c[p]++,a.l.info("abc78 new entry",p,c[p]));let b=p+"-"+c[p];a.l.info("abc78 new link id to be used is",p,b,c[p]);var f="LS-"+n.start,w="LE-"+n.end;const u={style:"",labelStyle:""};switch(u.minlen=n.length||1,"arrow_open"===n.type?u.arrowhead="none":u.arrowhead="normal",u.arrowTypeStart="arrow_open",u.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":u.arrowTypeStart="arrow_cross";case"arrow_cross":u.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":u.arrowTypeStart="arrow_point";case"arrow_point":u.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":u.arrowTypeStart="arrow_circle";case"arrow_circle":u.arrowTypeEnd="arrow_circle"}let h="",g="";switch(n.stroke){case"normal":h="fill:none;",void 0!==r&&(h=r),void 0!==o&&(g=o),u.thickness="normal",u.pattern="solid";break;case"dotted":u.thickness="normal",u.pattern="dotted",u.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":u.thickness="thick",u.pattern="solid",u.style="stroke-width: 3.5px;fill:none;";break;case"invisible":u.thickness="invisible",u.pattern="solid",u.style="stroke-width: 0;fill:none;"}if(void 0!==n.style){const e=(0,s.n)(n.style);h=e.style,g=e.labelStyle}u.style=u.style+=h,u.labelStyle=u.labelStyle+=g,void 0!==n.interpolate?u.curve=(0,s.o)(n.interpolate,l.c_6):void 0!==e.defaultInterpolate?u.curve=(0,s.o)(e.defaultInterpolate,l.c_6):u.curve=(0,s.o)(d.curve,l.c_6),void 0===n.text?void 0!==n.style&&(u.arrowheadStyle="fill: #333"):(u.arrowheadStyle="fill: #333",u.labelpos="c"),u.labelType=n.labelType,u.label=n.text.replace(a.e.lineBreakRegex,"\n"),void 0===n.style&&(u.style=u.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),u.labelStyle=u.labelStyle.replace("color:","fill:"),u.id=b,u.classes="flowchart-link "+f+" "+w,t.setEdge(n.start,n.end,u,i)}))},f={setConf:function(e){const t=Object.keys(e);for(const n of t)d[n]=e[n]},addVertices:p,addEdges:b,getClasses:function(e,t){a.l.info("Extracting classes"),t.db.clear();try{return t.parse(e),t.db.getClasses()}catch(n){return}},draw:function(e,t,n,c){a.l.info("Drawing flowchart"),c.db.clear(),o.f.setGen("gen-2"),c.parser.parse(e);let d=c.db.getDirection();void 0===d&&(d="TD");const{securityLevel:f,flowchart:w}=(0,a.g)(),u=w.nodeSpacing||50,h=w.rankSpacing||50;let g;"sandbox"===f&&(g=(0,l.Ys)("#i"+t));const y="sandbox"===f?(0,l.Ys)(g.nodes()[0].contentDocument.body):(0,l.Ys)("body"),k="sandbox"===f?g.nodes()[0].contentDocument:document,x=new r.k({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:u,ranksep:h,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let v;const m=c.db.getSubGraphs();a.l.info("Subgraphs - ",m);for(let r=m.length-1;r>=0;r--)v=m[r],a.l.info("Subgraph - ",v),c.db.addVertex(v.id,{text:v.title,type:v.labelType},"group",void 0,v.classes,v.dir);const S=c.db.getVertices(),T=c.db.getEdges();a.l.info("Edges",T);let _=0;for(_=m.length-1;_>=0;_--){v=m[_],(0,l.td_)("cluster").append("text");for(let e=0;e<v.nodes.length;e++)a.l.info("Setting up subgraphs",v.nodes[e],v.id),x.setParent(v.nodes[e],v.id)}p(S,x,t,y,k,c),b(T,x);const C=y.select(`[id="${t}"]`),$=y.select("#"+t+" g");if((0,i.r)($,x,["point","circle","cross"],"flowchart",t),s.u.insertTitle(C,"flowchartTitleText",w.titleTopMargin,c.db.getDiagramTitle()),(0,s.s)(x,C,w.diagramPadding,w.useMaxWidth),c.db.indexNodes("subGraph"+_),!w.htmlLabels){const e=k.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=k.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",e.width),n.setAttribute("height",e.height),t.insertBefore(n,t.firstChild)}}Object.keys(S).forEach((function(e){const n=S[e];if(n.link){const r=(0,l.Ys)("#"+t+' [id="'+e+'"]');if(r){const e=k.createElementNS("http://www.w3.org/2000/svg","a");e.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),e.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),e.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===f?e.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&e.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const t=r.insert((function(){return e}),":first-child"),l=r.select(".label-container");l&&t.append((function(){return l.node()}));const o=r.select(".label");o&&t.append((function(){return o.node()}))}}}))}},w=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/assets/js/185.d87a260a.js b/assets/js/185.d87a260a.js new file mode 100644 index 0000000000..fe2bfac44b --- /dev/null +++ b/assets/js/185.d87a260a.js @@ -0,0 +1,12455 @@ +"use strict"; +exports.id = 185; +exports.ids = [185]; +exports.modules = { + +/***/ 42494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "bK": () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js + + + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue/* default */.Z)(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js +var isPlainObject = __webpack_require__(37514); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = (0,isArray/* default */.Z)(srcValue), + isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue), + isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if ((0,isArray/* default */.Z)(objValue)) { + newValue = objValue; + } + else if ((0,isArrayLikeObject/* default */.Z)(objValue)) { + newValue = (0,_copyArray/* default */.Z)(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true); + } + else { + newValue = []; + } + } + else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) { + newValue = objValue; + if ((0,isArguments/* default */.Z)(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) { + newValue = (0,_initCloneObject/* default */.Z)(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + (0,_baseFor/* default */.Z)(source, function(srcValue, key) { + stack || (stack = new _Stack/* default */.Z); + if ((0,isObject/* default */.Z)(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, keysIn/* default */.Z); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return (0,_baseRest/* default */.Z)(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default.Date.now */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "k": () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 31667: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _Stack) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules +var _ListCache = __webpack_require__(67308); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache/* default */.Z; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js +var _Map = __webpack_require__(86183); +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache/* default */.Z) { + var pairs = data.__data__; + if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache/* default */.Z(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache/* default */.Z(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + + +/***/ }), + +/***/ 84073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Built-in value references. */ +var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 87668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _arrayLikeKeys) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = (0,isArray/* default */.Z)(value), + isArg = !isArr && (0,isArguments/* default */.Z)(value), + isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value), + isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + (0,_isIndex/* default */.Z)(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 72954: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value); + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue); + + +/***/ }), + +/***/ 74752: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904); + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) { + (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 61395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFor) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 69581: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203); +/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211); +/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227); + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + ''); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 41884: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073); + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer)); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer); + + +/***/ }), + +/***/ 91050: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer); + + +/***/ }), + +/***/ 12701: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884); + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray); + + +/***/ }), + +/***/ 87215: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray); + + +/***/ }), + +/***/ 31899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752); + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue); + } else { + (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject); + + +/***/ }), + +/***/ 77904: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508); + + +var defineProperty = (function() { + try { + var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 12513: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851); + + +/** Built-in value references. */ +var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 73658: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _initCloneObject) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!(0,isObject/* default */.Z)(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object)) + ? _baseCreate((0,_getPrototype/* default */.Z)(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + + +/***/ }), + +/***/ 56009: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex); + + +/***/ }), + +/***/ 50439: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226); + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length)) + : (type == 'string' && index in object) + ) { + return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value); + } + return false; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 81211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _overRest) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 27227: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _setToString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js +var _defineProperty = __webpack_require__(77904); +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) { + return (0,_defineProperty/* default */.Z)(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': (0,constant/* default */.Z)(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 62002: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 69203: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity); + + +/***/ }), + +/***/ 836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject); + + +/***/ }), + +/***/ 37514: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) { + return false; + } + var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 32957: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_keysIn) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules +var _arrayLikeKeys = __webpack_require__(87668); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!(0,isObject/* default */.Z)(object)) { + return _nativeKeysIn(object); + } + var isProto = (0,_isPrototype/* default */.Z)(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 5185: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1341); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(81188); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17967); + + + + + + + + + + + + + + +const idCache = {}; +const set = (key, val) => { + idCache[key] = val; +}; +const get = (k) => idCache[k]; +const keys = () => Object.keys(idCache); +const size = () => keys().length; +const idCache$1 = { + get, + set, + keys, + size +}; +const drawStartState = (g) => g.append("circle").attr("class", "start-state").attr("r", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit).attr("cx", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit).attr("cy", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit); +const drawDivider = (g) => g.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight).attr("class", "divider").attr("x2", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight * 2).attr("y1", 0).attr("y2", 0); +const drawSimpleState = (g, stateDef) => { + const state = g.append("text").attr("x", 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("y", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("font-size", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.fontSize).attr("class", "state-title").text(stateDef.id); + const classBox = state.node().getBBox(); + g.insert("rect", ":first-child").attr("x", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("y", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("width", classBox.width + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("height", classBox.height + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("rx", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.radius); + return state; +}; +const drawDescrState = (g, stateDef) => { + const addTspan = function(textEl, txt, isFirst2) { + const tSpan = textEl.append("tspan").attr("x", 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).text(txt); + if (!isFirst2) { + tSpan.attr("dy", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight); + } + }; + const title = g.append("text").attr("x", 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("y", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight + 1.3 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("font-size", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.fontSize).attr("class", "state-title").text(stateDef.descriptions[0]); + const titleBox = title.node().getBBox(); + const titleHeight = titleBox.height; + const description = g.append("text").attr("x", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr( + "y", + titleHeight + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding * 0.4 + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.dividerMargin + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight + ).attr("class", "state-description"); + let isFirst = true; + let isSecond = true; + stateDef.descriptions.forEach(function(descr) { + if (!isFirst) { + addTspan(description, descr, isSecond); + isSecond = false; + } + isFirst = false; + }); + const descrLine = g.append("line").attr("x1", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("y1", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + titleHeight + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.dividerMargin / 2).attr("y2", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + titleHeight + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.dividerMargin / 2).attr("class", "descr-divider"); + const descrBox = description.node().getBBox(); + const width = Math.max(descrBox.width, titleBox.width); + descrLine.attr("x2", width + 3 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding); + g.insert("rect", ":first-child").attr("x", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("y", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("width", width + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("height", descrBox.height + titleHeight + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("rx", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.radius); + return g; +}; +const addTitleAndBox = (g, stateDef, altBkg) => { + const pad = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding; + const dblPad = 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding; + const orgBox = g.node().getBBox(); + const orgWidth = orgBox.width; + const orgX = orgBox.x; + const title = g.append("text").attr("x", 0).attr("y", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.titleShift).attr("font-size", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.fontSize).attr("class", "state-title").text(stateDef.id); + const titleBox = title.node().getBBox(); + const titleWidth = titleBox.width + dblPad; + let width = Math.max(titleWidth, orgWidth); + if (width === orgWidth) { + width = width + dblPad; + } + let startX; + const graphBox = g.node().getBBox(); + if (stateDef.doc) + ; + startX = orgX - pad; + if (titleWidth > orgWidth) { + startX = (orgWidth - width) / 2 + pad; + } + if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) { + startX = orgX - (titleWidth - orgWidth) / 2; + } + const lineY = 1 - (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight; + g.insert("rect", ":first-child").attr("x", startX).attr("y", lineY).attr("class", altBkg ? "alt-composit" : "composit").attr("width", width).attr( + "height", + graphBox.height + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.titleShift + 1 + ).attr("rx", "0"); + title.attr("x", startX + pad); + if (titleWidth <= orgWidth) { + title.attr("x", orgX + (width - dblPad) / 2 - titleWidth / 2 + pad); + } + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.titleShift - (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight - (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + ).attr("width", width).attr("height", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight * 3).attr("rx", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.radius); + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.titleShift - (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight - (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + ).attr("width", width).attr("height", graphBox.height + 3 + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.textHeight).attr("rx", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.radius); + return g; +}; +const drawEndState = (g) => { + g.append("circle").attr("class", "end-state-outer").attr("r", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.miniPadding).attr( + "cx", + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.miniPadding + ).attr( + "cy", + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.miniPadding + ); + return g.append("circle").attr("class", "end-state-inner").attr("r", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit).attr("cx", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit + 2).attr("cy", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.sizeUnit + 2); +}; +const drawForkJoinState = (g, stateDef) => { + let width = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.forkWidth; + let height = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.forkHeight; + if (stateDef.parentId) { + let tmp = width; + width = height; + height = tmp; + } + return g.append("rect").style("stroke", "black").style("fill", "black").attr("width", width).attr("height", height).attr("x", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("y", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding); +}; +const _drawLongText = (_text, x, y, g) => { + let textHeight = 0; + const textElem = g.append("text"); + textElem.style("text-anchor", "start"); + textElem.attr("class", "noteText"); + let text = _text.replace(/\r\n/g, "<br/>"); + text = text.replace(/\n/g, "<br/>"); + const lines = text.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.e.lineBreakRegex); + let tHeight = 1.25 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.noteMargin; + for (const line2 of lines) { + const txt = line2.trim(); + if (txt.length > 0) { + const span = textElem.append("tspan"); + span.text(txt); + if (tHeight === 0) { + const textBounds = span.node().getBBox(); + tHeight += textBounds.height; + } + textHeight += tHeight; + span.attr("x", x + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.noteMargin); + span.attr("y", y + textHeight + 1.25 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.noteMargin); + } + } + return { textWidth: textElem.node().getBBox().width, textHeight }; +}; +const drawNote = (text, g) => { + g.attr("class", "state-note"); + const note = g.append("rect").attr("x", 0).attr("y", (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding); + const rectElem = g.append("g"); + const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem); + note.attr("height", textHeight + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.noteMargin); + note.attr("width", textWidth + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.noteMargin * 2); + return note; +}; +const drawState = function(elem, stateDef) { + const id = stateDef.id; + const stateInfo = { + id, + label: stateDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "stateGroup"); + if (stateDef.type === "start") { + drawStartState(g); + } + if (stateDef.type === "end") { + drawEndState(g); + } + if (stateDef.type === "fork" || stateDef.type === "join") { + drawForkJoinState(g, stateDef); + } + if (stateDef.type === "note") { + drawNote(stateDef.note.text, g); + } + if (stateDef.type === "divider") { + drawDivider(g); + } + if (stateDef.type === "default" && stateDef.descriptions.length === 0) { + drawSimpleState(g, stateDef); + } + if (stateDef.type === "default" && stateDef.descriptions.length > 0) { + drawDescrState(g, stateDef); + } + const stateBox = g.node().getBBox(); + stateInfo.width = stateBox.width + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding; + stateInfo.height = stateBox.height + 2 * (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding; + idCache$1.set(id, stateInfo); + return stateInfo; +}; +let edgeCount = 0; +const drawEdge = function(elem, path, relation) { + const getRelationType = function(type) { + switch (type) { + case _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.AGGREGATION: + return "aggregation"; + case _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.EXTENSION: + return "extension"; + case _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.COMPOSITION: + return "composition"; + case _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY: + return "dependency"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition"); + let url = ""; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(_styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY) + "End)" + ); + if (relation.title !== void 0) { + const label = elem.append("g").attr("class", "stateLabel"); + const { x, y } = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_8__.u.calcLabelPosition(path.points); + const rows = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title); + let titleHeight = 0; + const titleRows = []; + let maxWidth = 0; + let minX = 0; + for (let i = 0; i <= rows.length; i++) { + const title = label.append("text").attr("text-anchor", "middle").text(rows[i]).attr("x", x).attr("y", y + titleHeight); + const boundstmp = title.node().getBBox(); + maxWidth = Math.max(maxWidth, boundstmp.width); + minX = Math.min(minX, boundstmp.x); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.info(boundstmp.x, x, y + titleHeight); + if (titleHeight === 0) { + const titleBox = title.node().getBBox(); + titleHeight = titleBox.height; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Title height", titleHeight, y); + } + titleRows.push(title); + } + let boxHeight = titleHeight * rows.length; + if (rows.length > 1) { + const heightAdj = (rows.length - 1) * titleHeight * 0.5; + titleRows.forEach((title, i) => title.attr("y", y + i * titleHeight - heightAdj)); + boxHeight = titleHeight * rows.length; + } + const bounds = label.node().getBBox(); + label.insert("rect", ":first-child").attr("class", "box").attr("x", x - maxWidth / 2 - (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding / 2).attr("y", y - boxHeight / 2 - (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding / 2 - 3.5).attr("width", maxWidth + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding).attr("height", boxHeight + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.info(bounds); + } + edgeCount++; +}; +let conf; +const transformationLog = {}; +const setConf = function() { +}; +const insertMarkers = function(elem) { + elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const draw = function(text, id, _version, diagObj) { + conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().state; + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering diagram " + text); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const graph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true, + // acyclicer: 'greedy', + rankdir: "RL" + // ranksep: '20' + }); + graph.setDefaultEdgeLabel(function() { + return {}; + }); + const rootDoc = diagObj.db.getRootDoc(); + renderDoc(rootDoc, diagram2, void 0, false, root, doc, diagObj); + const padding = conf.padding; + const bounds = diagram2.node().getBBox(); + const width = bounds.width + padding * 2; + const height = bounds.height + padding * 2; + const svgWidth = width * 1.75; + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_8__.k)(diagram2, height, svgWidth, conf.useMaxWidth); + diagram2.attr( + "viewBox", + `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + " " + height + ); +}; +const getLabelWidth = (text) => { + return text ? text.length * conf.fontSizeFactor : 1; +}; +const renderDoc = (doc, diagram2, parentId, altBkg, root, domDocument, diagObj) => { + const graph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + compound: true, + multigraph: true + }); + let i; + let edgeFreeDoc = true; + for (i = 0; i < doc.length; i++) { + if (doc[i].stmt === "relation") { + edgeFreeDoc = false; + break; + } + } + if (parentId) { + graph.setGraph({ + rankdir: "LR", + multigraph: true, + compound: true, + // acyclicer: 'greedy', + ranker: "tight-tree", + ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, + nodeSep: edgeFreeDoc ? 1 : 50, + isMultiGraph: true + // ranksep: 5, + // nodesep: 1 + }); + } else { + graph.setGraph({ + rankdir: "TB", + multigraph: true, + compound: true, + // isCompound: true, + // acyclicer: 'greedy', + // ranker: 'longest-path' + ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, + nodeSep: edgeFreeDoc ? 1 : 50, + ranker: "tight-tree", + // ranker: 'network-simplex' + isMultiGraph: true + }); + } + graph.setDefaultEdgeLabel(function() { + return {}; + }); + diagObj.db.extract(doc); + const states = diagObj.db.getStates(); + const relations = diagObj.db.getRelations(); + const keys2 = Object.keys(states); + for (const key of keys2) { + const stateDef = states[key]; + if (parentId) { + stateDef.parentId = parentId; + } + let node; + if (stateDef.doc) { + let sub = diagram2.append("g").attr("id", stateDef.id).attr("class", "stateGroup"); + node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj); + { + sub = addTitleAndBox(sub, stateDef, altBkg); + let boxBounds = sub.node().getBBox(); + node.width = boxBounds.width; + node.height = boxBounds.height + conf.padding / 2; + transformationLog[stateDef.id] = { y: conf.compositTitleSize }; + } + } else { + node = drawState(diagram2, stateDef); + } + if (stateDef.note) { + const noteDef = { + descriptions: [], + id: stateDef.id + "-note", + note: stateDef.note, + type: "note" + }; + const note = drawState(diagram2, noteDef); + if (stateDef.note.position === "left of") { + graph.setNode(node.id + "-note", note); + graph.setNode(node.id, node); + } else { + graph.setNode(node.id, node); + graph.setNode(node.id + "-note", note); + } + graph.setParent(node.id, node.id + "-group"); + graph.setParent(node.id + "-note", node.id + "-group"); + } else { + graph.setNode(node.id, node); + } + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Count=", graph.nodeCount(), graph); + let cnt = 0; + relations.forEach(function(relation) { + cnt++; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Setting edge", relation); + graph.setEdge( + relation.id1, + relation.id2, + { + relation, + width: getLabelWidth(relation.title), + height: conf.labelHeight * _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title).length, + labelpos: "c" + }, + "id" + cnt + ); + }); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Graph after layout", graph.nodes()); + const svgElem = diagram2.node(); + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.warn("Node " + v + ": " + JSON.stringify(graph.node(v))); + root.select("#" + svgElem.id + " #" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + " )" + ); + root.select("#" + svgElem.id + " #" + v).attr("data-x-shift", graph.node(v).x - graph.node(v).width / 2); + const dividers = domDocument.querySelectorAll("#" + svgElem.id + " #" + v + " .divider"); + dividers.forEach((divider) => { + const parent = divider.parentElement; + let pWidth = 0; + let pShift = 0; + if (parent) { + if (parent.parentElement) { + pWidth = parent.parentElement.getBBox().width; + } + pShift = parseInt(parent.getAttribute("data-x-shift"), 10); + if (Number.isNaN(pShift)) { + pShift = 0; + } + } + divider.setAttribute("x1", 0 - pShift + 8); + divider.setAttribute("x2", pWidth - pShift - 8); + }); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("No Node " + v + ": " + JSON.stringify(graph.node(v))); + } + }); + let stateBox = svgElem.getBBox(); + graph.edges().forEach(function(e) { + if (e !== void 0 && graph.edge(e) !== void 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + drawEdge(diagram2, graph.edge(e), graph.edge(e).relation); + } + }); + stateBox = svgElem.getBBox(); + const stateInfo = { + id: parentId ? parentId : "root", + label: parentId ? parentId : "root", + width: 0, + height: 0 + }; + stateInfo.width = stateBox.width + 2 * conf.padding; + stateInfo.height = stateBox.height + 2 * conf.padding; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Doc rendered", stateInfo, graph); + return stateInfo; +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + +//# sourceMappingURL=stateDiagram-d53d2428.js.map + + +/***/ }), + +/***/ 1341: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "D": () => (/* binding */ DEFAULT_DIAGRAM_DIRECTION), +/* harmony export */ "S": () => (/* binding */ STMT_RELATION), +/* harmony export */ "a": () => (/* binding */ DEFAULT_STATE_TYPE), +/* harmony export */ "b": () => (/* binding */ DIVIDER_TYPE), +/* harmony export */ "c": () => (/* binding */ STMT_STATE), +/* harmony export */ "d": () => (/* binding */ db), +/* harmony export */ "e": () => (/* binding */ DEFAULT_NESTED_DOC_DIR), +/* harmony export */ "p": () => (/* binding */ parser$1), +/* harmony export */ "s": () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(81188); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43047); + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 37], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 32], $Vi = [1, 33], $Vj = [1, 34], $Vk = [1, 35], $Vl = [1, 36], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 38], $Vr = [1, 45], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vu = [1, 4, 5, 7, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vv = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "directive": 6, "SD": 7, "document": 8, "line": 9, "statement": 10, "classDefStatement": 11, "cssClassStatement": 12, "idStatement": 13, "DESCR": 14, "-->": 15, "HIDE_EMPTY": 16, "scale": 17, "WIDTH": 18, "COMPOSIT_STATE": 19, "STRUCT_START": 20, "STRUCT_STOP": 21, "STATE_DESCR": 22, "AS": 23, "ID": 24, "FORK": 25, "JOIN": 26, "CHOICE": 27, "CONCURRENT": 28, "note": 29, "notePosition": 30, "NOTE_TEXT": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "classDef": 38, "CLASSDEF_ID": 39, "CLASSDEF_STYLEOPTS": 40, "DEFAULT": 41, "class": 42, "CLASSENTITY_IDS": 43, "STYLECLASS": 44, "openDirective": 45, "typeDirective": 46, "closeDirective": 47, ":": 48, "argDirective": 49, "direction_tb": 50, "direction_bt": 51, "direction_rl": 52, "direction_lr": 53, "eol": 54, ";": 55, "EDGE_STATE": 56, "STYLE_SEPARATOR": 57, "left_of": 58, "right_of": 59, "open_directive": 60, "type_directive": 61, "arg_directive": 62, "close_directive": 63, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NL", 7: "SD", 14: "DESCR", 15: "-->", 16: "HIDE_EMPTY", 17: "scale", 18: "WIDTH", 19: "COMPOSIT_STATE", 20: "STRUCT_START", 21: "STRUCT_STOP", 22: "STATE_DESCR", 23: "AS", 24: "ID", 25: "FORK", 26: "JOIN", 27: "CHOICE", 28: "CONCURRENT", 29: "note", 31: "NOTE_TEXT", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 38: "classDef", 39: "CLASSDEF_ID", 40: "CLASSDEF_STYLEOPTS", 41: "DEFAULT", 42: "class", 43: "CLASSENTITY_IDS", 44: "STYLECLASS", 48: ":", 50: "direction_tb", 51: "direction_bt", 52: "direction_rl", 53: "direction_lr", 55: ";", 56: "EDGE_STATE", 57: "STYLE_SEPARATOR", 58: "left_of", 59: "right_of", 60: "open_directive", 61: "type_directive", 62: "arg_directive", 63: "close_directive" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 3], [10, 4], [10, 1], [10, 2], [10, 1], [10, 4], [10, 3], [10, 6], [10, 1], [10, 1], [10, 1], [10, 1], [10, 4], [10, 4], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [11, 3], [11, 3], [12, 3], [6, 3], [6, 5], [32, 1], [32, 1], [32, 1], [32, 1], [54, 1], [54, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1], [45, 1], [46, 1], [49, 1], [47, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setRootDoc($$[$0]); + return $$[$0]; + case 5: + this.$ = []; + break; + case 6: + if ($$[$0] != "nl") { + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + } + break; + case 7: + case 8: + this.$ = $$[$0]; + break; + case 9: + this.$ = "nl"; + break; + case 12: + this.$ = $$[$0]; + break; + case 13: + const stateStmt = $$[$0 - 1]; + stateStmt.description = yy.trimColon($$[$0]); + this.$ = stateStmt; + break; + case 14: + this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; + break; + case 15: + const relDescription = yy.trimColon($$[$0]); + this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; + break; + case 19: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; + break; + case 20: + var id = $$[$0]; + var description = $$[$0 - 2].trim(); + if ($$[$0].match(":")) { + var parts = $$[$0].split(":"); + id = parts[0]; + description = [description, parts[1]]; + } + this.$ = { stmt: "state", id, type: "default", description }; + break; + case 21: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; + break; + case 22: + this.$ = { stmt: "state", id: $$[$0], type: "fork" }; + break; + case 23: + this.$ = { stmt: "state", id: $$[$0], type: "join" }; + break; + case 24: + this.$ = { stmt: "state", id: $$[$0], type: "choice" }; + break; + case 25: + this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; + break; + case 26: + this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; + break; + case 30: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 31: + case 32: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 33: + case 34: + this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; + break; + case 35: + this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 38: + yy.setDirection("TB"); + this.$ = { stmt: "dir", value: "TB" }; + break; + case 39: + yy.setDirection("BT"); + this.$ = { stmt: "dir", value: "BT" }; + break; + case 40: + yy.setDirection("RL"); + this.$ = { stmt: "dir", value: "RL" }; + break; + case 41: + yy.setDirection("LR"); + this.$ = { stmt: "dir", value: "LR" }; + break; + case 44: + case 45: + this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; + break; + case 46: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 47: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 50: + yy.parseDirective("%%{", "open_directive"); + break; + case 51: + yy.parseDirective($$[$0], "type_directive"); + break; + case 52: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 53: + yy.parseDirective("}%%", "close_directive", "state"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, o([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $V4, { 8: 11 }), { 46: 12, 61: [1, 13] }, { 61: [2, 50] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, { 47: 43, 48: [1, 44], 63: $Vr }, o([48, 63], [2, 51]), o($Vs, [2, 6]), { 6: 30, 10: 46, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 8]), o($Vs, [2, 9]), o($Vs, [2, 10]), o($Vs, [2, 11]), o($Vs, [2, 12], { 14: [1, 47], 15: [1, 48] }), o($Vs, [2, 16]), { 18: [1, 49] }, o($Vs, [2, 18], { 20: [1, 50] }), { 23: [1, 51] }, o($Vs, [2, 22]), o($Vs, [2, 23]), o($Vs, [2, 24]), o($Vs, [2, 25]), { 30: 52, 31: [1, 53], 58: [1, 54], 59: [1, 55] }, o($Vs, [2, 28]), o($Vs, [2, 29]), { 34: [1, 56] }, { 36: [1, 57] }, o($Vs, [2, 32]), { 39: [1, 58], 41: [1, 59] }, { 43: [1, 60] }, o($Vt, [2, 44], { 57: [1, 61] }), o($Vt, [2, 45], { 57: [1, 62] }), o($Vs, [2, 38]), o($Vs, [2, 39]), o($Vs, [2, 40]), o($Vs, [2, 41]), o($Vu, [2, 36]), { 49: 63, 62: [1, 64] }, o($Vu, [2, 53]), o($Vs, [2, 7]), o($Vs, [2, 13]), { 13: 65, 24: $Vb, 56: $Vq }, o($Vs, [2, 17]), o($Vv, $V4, { 8: 66 }), { 24: [1, 67] }, { 24: [1, 68] }, { 23: [1, 69] }, { 24: [2, 48] }, { 24: [2, 49] }, o($Vs, [2, 30]), o($Vs, [2, 31]), { 40: [1, 70] }, { 40: [1, 71] }, { 44: [1, 72] }, { 24: [1, 73] }, { 24: [1, 74] }, { 47: 75, 63: $Vr }, { 63: [2, 52] }, o($Vs, [2, 14], { 14: [1, 76] }), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 77], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 20], { 20: [1, 78] }), { 31: [1, 79] }, { 24: [1, 80] }, o($Vs, [2, 33]), o($Vs, [2, 34]), o($Vs, [2, 35]), o($Vt, [2, 46]), o($Vt, [2, 47]), o($Vu, [2, 37]), o($Vs, [2, 15]), o($Vs, [2, 19]), o($Vv, $V4, { 8: 81 }), o($Vs, [2, 26]), o($Vs, [2, 27]), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 82], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 21])], + defaultActions: { 7: [2, 50], 8: [2, 1], 9: [2, 2], 10: [2, 3], 54: [2, 48], 55: [2, 49], 64: [2, 52] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 41; + case 1: + return 50; + case 2: + return 51; + case 3: + return 52; + case 4: + return 53; + case 5: + this.begin("open_directive"); + return 60; + case 6: + this.begin("type_directive"); + return 61; + case 7: + this.popState(); + this.begin("arg_directive"); + return 48; + case 8: + this.popState(); + this.popState(); + return 63; + case 9: + return 62; + case 10: + break; + case 11: + break; + case 12: + return 5; + case 13: + break; + case 14: + break; + case 15: + break; + case 16: + break; + case 17: + this.pushState("SCALE"); + return 17; + case 18: + return 18; + case 19: + this.popState(); + break; + case 20: + this.begin("acc_title"); + return 33; + case 21: + this.popState(); + return "acc_title_value"; + case 22: + this.begin("acc_descr"); + return 35; + case 23: + this.popState(); + return "acc_descr_value"; + case 24: + this.begin("acc_descr_multiline"); + break; + case 25: + this.popState(); + break; + case 26: + return "acc_descr_multiline_value"; + case 27: + this.pushState("CLASSDEF"); + return 38; + case 28: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 29: + this.popState(); + this.pushState("CLASSDEFID"); + return 39; + case 30: + this.popState(); + return 40; + case 31: + this.pushState("CLASS"); + return 42; + case 32: + this.popState(); + this.pushState("CLASS_STYLE"); + return 43; + case 33: + this.popState(); + return 44; + case 34: + this.pushState("SCALE"); + return 17; + case 35: + return 18; + case 36: + this.popState(); + break; + case 37: + this.pushState("STATE"); + break; + case 38: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 39: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 26; + case 40: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 27; + case 41: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 42: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 26; + case 43: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 27; + case 44: + return 50; + case 45: + return 51; + case 46: + return 52; + case 47: + return 53; + case 48: + this.pushState("STATE_STRING"); + break; + case 49: + this.pushState("STATE_ID"); + return "AS"; + case 50: + this.popState(); + return "ID"; + case 51: + this.popState(); + break; + case 52: + return "STATE_DESCR"; + case 53: + return 19; + case 54: + this.popState(); + break; + case 55: + this.popState(); + this.pushState("struct"); + return 20; + case 56: + break; + case 57: + this.popState(); + return 21; + case 58: + break; + case 59: + this.begin("NOTE"); + return 29; + case 60: + this.popState(); + this.pushState("NOTE_ID"); + return 58; + case 61: + this.popState(); + this.pushState("NOTE_ID"); + return 59; + case 62: + this.popState(); + this.pushState("FLOATING_NOTE"); + break; + case 63: + this.popState(); + this.pushState("FLOATING_NOTE_ID"); + return "AS"; + case 64: + break; + case 65: + return "NOTE_TEXT"; + case 66: + this.popState(); + return "ID"; + case 67: + this.popState(); + this.pushState("NOTE_TEXT"); + return 24; + case 68: + this.popState(); + yy_.yytext = yy_.yytext.substr(2).trim(); + return 31; + case 69: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 31; + case 70: + return 7; + case 71: + return 7; + case 72: + return 16; + case 73: + return 56; + case 74: + return 24; + case 75: + yy_.yytext = yy_.yytext.trim(); + return 14; + case 76: + return 15; + case 77: + return 28; + case 78: + return 57; + case 79: + return 5; + case 80: + return "INVALID"; + } + }, + rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "LINE": { "rules": [14, 15], "inclusive": false }, "close_directive": { "rules": [14, 15], "inclusive": false }, "arg_directive": { "rules": [8, 9, 14, 15], "inclusive": false }, "type_directive": { "rules": [7, 8, 14, 15], "inclusive": false }, "open_directive": { "rules": [6, 14, 15], "inclusive": false }, "struct": { "rules": [14, 15, 27, 31, 37, 44, 45, 46, 47, 56, 57, 58, 59, 73, 74, 75, 76, 77], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [66], "inclusive": false }, "FLOATING_NOTE": { "rules": [63, 64, 65], "inclusive": false }, "NOTE_TEXT": { "rules": [68, 69], "inclusive": false }, "NOTE_ID": { "rules": [67], "inclusive": false }, "NOTE": { "rules": [60, 61, 62], "inclusive": false }, "CLASS_STYLE": { "rules": [33], "inclusive": false }, "CLASS": { "rules": [32], "inclusive": false }, "CLASSDEFID": { "rules": [30], "inclusive": false }, "CLASSDEF": { "rules": [28, 29], "inclusive": false }, "acc_descr_multiline": { "rules": [25, 26], "inclusive": false }, "acc_descr": { "rules": [23], "inclusive": false }, "acc_title": { "rules": [21], "inclusive": false }, "SCALE": { "rules": [18, 19, 35, 36], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [50], "inclusive": false }, "STATE_STRING": { "rules": [51, 52], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [14, 15, 38, 39, 40, 41, 42, 43, 48, 49, 53, 54, 55], "inclusive": false }, "ID": { "rules": [14, 15], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 15, 16, 17, 20, 22, 24, 27, 31, 34, 37, 55, 59, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_DIAGRAM_DIRECTION = "LR"; +const DEFAULT_NESTED_DOC_DIR = "TB"; +const STMT_STATE = "state"; +const STMT_RELATION = "relation"; +const STMT_CLASSDEF = "classDef"; +const STMT_APPLYCLASS = "applyClass"; +const DEFAULT_STATE_TYPE = "default"; +const DIVIDER_TYPE = "divider"; +const START_NODE = "[*]"; +const START_TYPE = "start"; +const END_NODE = START_NODE; +const END_TYPE = "end"; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +function newClassesList() { + return {}; +} +let direction = DEFAULT_DIAGRAM_DIRECTION; +let rootDoc = []; +let classes = newClassesList(); +const newDoc = () => { + return { + relations: [], + states: {}, + documents: {} + }; +}; +let documents = { + root: newDoc() +}; +let currentDocument = documents.root; +let startEndCount = 0; +let dividerCnt = 0; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3 +}; +const clone = (o) => JSON.parse(JSON.stringify(o)); +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_0__.m.parseDirective(this, statement, context, type); +}; +const setRootDoc = (o) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting root doc", o); + rootDoc = o; +}; +const getRootDoc = () => rootDoc; +const docTranslator = (parent, node, first) => { + if (node.stmt === STMT_RELATION) { + docTranslator(parent, node.state1, true); + docTranslator(parent, node.state2, false); + } else { + if (node.stmt === STMT_STATE) { + if (node.id === "[*]") { + node.id = first ? parent.id + "_start" : parent.id + "_end"; + node.start = first; + } else { + node.id = node.id.trim(); + } + } + if (node.doc) { + const doc = []; + let currentDoc = []; + let i; + for (i = 0; i < node.doc.length; i++) { + if (node.doc[i].type === DIVIDER_TYPE) { + const newNode = clone(node.doc[i]); + newNode.doc = clone(currentDoc); + doc.push(newNode); + currentDoc = []; + } else { + currentDoc.push(node.doc[i]); + } + } + if (doc.length > 0 && currentDoc.length > 0) { + const newNode = { + stmt: STMT_STATE, + id: (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.y)(), + type: "divider", + doc: clone(currentDoc) + }; + doc.push(clone(newNode)); + node.doc = doc; + } + node.doc.forEach((docNode) => docTranslator(node, docNode, true)); + } + } +}; +const getRootDocV2 = () => { + docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); + return { id: "root", doc: rootDoc }; +}; +const extract = (_doc) => { + let doc; + if (_doc.doc) { + doc = _doc.doc; + } else { + doc = _doc; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info(doc); + clear(true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Extract", doc); + doc.forEach((item) => { + switch (item.stmt) { + case STMT_STATE: + addState( + item.id.trim(), + item.type, + item.doc, + item.description, + item.note, + item.classes, + item.styles, + item.textStyles + ); + break; + case STMT_RELATION: + addRelation(item.state1, item.state2, item.description); + break; + case STMT_CLASSDEF: + addStyleClass(item.id.trim(), item.classes); + break; + case STMT_APPLYCLASS: + setCssClass(item.id.trim(), item.styleClass); + break; + } + }); +}; +const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { + const trimmedId = id == null ? void 0 : id.trim(); + if (currentDocument.states[trimmedId] === void 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding state ", trimmedId, descr); + currentDocument.states[trimmedId] = { + id: trimmedId, + descriptions: [], + type, + doc, + note, + classes: [], + styles: [], + textStyles: [] + }; + } else { + if (!currentDocument.states[trimmedId].doc) { + currentDocument.states[trimmedId].doc = doc; + } + if (!currentDocument.states[trimmedId].type) { + currentDocument.states[trimmedId].type = type; + } + } + if (descr) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting state description", trimmedId, descr); + if (typeof descr === "string") { + addDescription(trimmedId, descr.trim()); + } + if (typeof descr === "object") { + descr.forEach((des) => addDescription(trimmedId, des.trim())); + } + } + if (note) { + currentDocument.states[trimmedId].note = note; + currentDocument.states[trimmedId].note.text = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)() + ); + } + if (classes2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + } + if (styles2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting state styles", trimmedId, styles2); + const stylesList = typeof styles2 === "string" ? [styles2] : styles2; + stylesList.forEach((style) => setStyle(trimmedId, style.trim())); + } + if (textStyles) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting state styles", trimmedId, styles2); + const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; + textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); + } +}; +const clear = function(saveCommon) { + documents = { + root: newDoc() + }; + currentDocument = documents.root; + startEndCount = 0; + classes = newClassesList(); + if (!saveCommon) { + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.y)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Documents = ", documents); +}; +const getRelations = function() { + return currentDocument.relations; +}; +function startIdIfNeeded(id = "") { + let fixedId = id; + if (id === START_NODE) { + startEndCount++; + fixedId = `${START_TYPE}${startEndCount}`; + } + return fixedId; +} +function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === START_NODE ? START_TYPE : type; +} +function endIdIfNeeded(id = "") { + let fixedId = id; + if (id === END_NODE) { + startEndCount++; + fixedId = `${END_TYPE}${startEndCount}`; + } + return fixedId; +} +function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === END_NODE ? END_TYPE : type; +} +function addRelationObjs(item1, item2, relationTitle) { + let id1 = startIdIfNeeded(item1.id.trim()); + let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); + let id2 = startIdIfNeeded(item2.id.trim()); + let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); + addState( + id1, + type1, + item1.doc, + item1.description, + item1.note, + item1.classes, + item1.styles, + item1.textStyles + ); + addState( + id2, + type2, + item2.doc, + item2.description, + item2.note, + item2.classes, + item2.styles, + item2.textStyles + ); + currentDocument.relations.push({ + id1, + id2, + relationTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relationTitle, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()) + }); +} +const addRelation = function(item1, item2, title) { + if (typeof item1 === "object") { + addRelationObjs(item1, item2, title); + } else { + const id1 = startIdIfNeeded(item1.trim()); + const type1 = startTypeIfNeeded(item1); + const id2 = endIdIfNeeded(item2.trim()); + const type2 = endTypeIfNeeded(item2); + addState(id1, type1); + addState(id2, type2); + currentDocument.relations.push({ + id1, + id2, + title: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(title, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()) + }); + } +}; +const addDescription = function(id, descr) { + const theState = currentDocument.states[id]; + const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; + theState.descriptions.push(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_descr, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)())); +}; +const cleanupLabel = function(label) { + if (label.substring(0, 1) === ":") { + return label.substr(2).trim(); + } else { + return label.trim(); + } +}; +const getDividerId = () => { + dividerCnt++; + return "divider-id-" + dividerCnt; +}; +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const getClasses = function() { + return classes; +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundState = getState(id); + if (foundState === void 0) { + const trimmedId = id.trim(); + addState(trimmedId); + foundState = getState(trimmedId); + } + foundState.classes.push(cssClassName); + }); +}; +const setStyle = function(itemId, styleText) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(styleText); + } +}; +const setTextStyle = function(itemId, cssClassName) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(cssClassName); + } +}; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); +const db = { + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().state, + addState, + clear, + getState, + getStates, + getRelations, + getClasses, + getDirection, + addRelation, + getDividerId, + setDirection, + cleanupLabel, + lineType, + relationType, + logDocuments, + getRootDoc, + setRootDoc, + getRootDocV2, + extract, + trimColon, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.p, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.o, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.v, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.x +}; +const getStyles = (options) => ` +defs #statediagram-barbEnd { + fill: ${options.transitionColor}; + stroke: ${options.transitionColor}; + } +g.stateGroup text { + fill: ${options.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${options.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${options.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.stateGroup line { + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${options.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${options.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + + text { + fill: ${options.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${options.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel .label text { + fill: ${options.transitionLabelColor || options.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${options.transitionLabelColor || options.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${options.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node .fork-join { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node circle.state-end { + fill: ${options.innerEndBackground}; + stroke: ${options.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${options.compositeBackground || options.background}; + // stroke: ${options.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${options.stateBkg || options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${options.lineColor}; +} + +.statediagram-cluster rect { + fill: ${options.compositeTitleBackground}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${options.stateLabelColor}; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${options.stateBorder || options.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${options.compositeBackground || options.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${options.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${options.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${options.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${options.lineColor}; + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + +//# sourceMappingURL=styles-47a825a5.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/1a4e3797.46d13a77.js b/assets/js/1a4e3797.46d13a77.js new file mode 100644 index 0000000000..bd82b5fadd --- /dev/null +++ b/assets/js/1a4e3797.46d13a77.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7920],{8824:(e,t,a)=>{a.d(t,{c:()=>u});var r=a(7294),n=a(2263);const l=["zero","one","two","few","many","other"];function s(e){return l.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,n.Z)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function u(){const e=o();return{selectMessage:(t,a)=>function(e,t,a){const r=e.split("|");if(1===r.length)return r[0];r.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const n=a.select(t),l=a.pluralForms.indexOf(n);return r[Math.min(l,r.length-1)]}(a,t,e)}}},1473:(e,t,a)=>{a.r(t),a.d(t,{default:()=>R});var r=a(7294),n=a(2263),l=a(179),s=a(5742),c=a(9960),o=a(5999),u=a(8824),m=a(6010),h=a(6550),i=a(412);const p=function(){const e=(0,h.k6)(),t=(0,h.TH)(),{siteConfig:{baseUrl:a}}=(0,n.Z)(),r=i.Z.canUseDOM?new URLSearchParams(t.search):null,l=r?.get("q")||"",s=r?.get("ctx")||"",c=r?.get("version")||"",o=e=>{const a=new URLSearchParams(t.search);return e?a.set("q",e):a.delete("q"),a};return{searchValue:l,searchContext:s,searchVersion:c,updateSearchPath:t=>{const a=o(t);e.replace({search:a.toString()})},updateSearchContext:a=>{const r=new URLSearchParams(t.search);r.set("ctx",a),e.replace({search:r.toString()})},generateSearchPageLink:e=>{const t=o(e);return`${a}search?${t.toString()}`}}};var g=a(22),d=a(8202),f=a(2539),y=a(726),E=a(1073),S=a(311),C=a(3926),I=a(1029);const x={searchContextInput:"searchContextInput_mXoe",searchQueryInput:"searchQueryInput_CFBF",searchResultItem:"searchResultItem_U687",searchResultItemPath:"searchResultItemPath_uIbk",searchResultItemSummary:"searchResultItemSummary_oZHr",searchQueryColumn:"searchQueryColumn_q7nx",searchContextColumn:"searchContextColumn_oWAF"};function v(){const{siteConfig:{baseUrl:e}}=(0,n.Z)(),{selectMessage:t}=(0,u.c)(),{searchValue:a,searchContext:l,searchVersion:c,updateSearchPath:h,updateSearchContext:i}=p(),[f,y]=(0,r.useState)(a),[E,C]=(0,r.useState)(),[v,R]=(0,r.useState)(),P=`${e}${c}`,b=(0,r.useMemo)((()=>f?(0,o.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:f}):(0,o.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})),[f]);(0,r.useEffect)((()=>{h(f),E&&(f?E(f,(e=>{R(e)})):R(void 0))}),[f,E]);const F=(0,r.useCallback)((e=>{y(e.target.value)}),[]);return(0,r.useEffect)((()=>{a&&a!==f&&y(a)}),[a]),(0,r.useEffect)((()=>{!async function(){const{wrappedIndexes:e,zhDictionary:t}=await(0,g.w)(P,l);C((()=>(0,d.v)(e,t,100)))}()}),[l,P]),r.createElement(r.Fragment,null,r.createElement(s.Z,null,r.createElement("meta",{property:"robots",content:"noindex, follow"}),r.createElement("title",null,b)),r.createElement("div",{className:"container margin-vert--lg"},r.createElement("h1",null,b),r.createElement("div",{className:"row"},r.createElement("div",{className:(0,m.Z)("col",{[x.searchQueryColumn]:Array.isArray(I.Kc),"col--9":Array.isArray(I.Kc),"col--12":!Array.isArray(I.Kc)})},r.createElement("input",{type:"search",name:"q",className:x.searchQueryInput,"aria-label":"Search",onChange:F,value:f,autoComplete:"off",autoFocus:!0})),Array.isArray(I.Kc)?r.createElement("div",{className:(0,m.Z)("col","col--3","padding-left--none",x.searchContextColumn)},r.createElement("select",{name:"search-context",className:x.searchContextInput,id:"context-selector",value:l,onChange:e=>i(e.target.value)},r.createElement("option",{value:""},I.pQ?(0,o.I)({id:"theme.SearchPage.searchContext.everywhere",message:"everywhere"}):""),I.Kc.map((e=>r.createElement("option",{key:e,value:e},e))))):null),!E&&f&&r.createElement("div",null,r.createElement(S.Z,null)),v&&(v.length>0?r.createElement("p",null,t(v.length,(0,o.I)({id:"theme.SearchPage.documentsFound.plurals",message:"1 document found|{count} documents found",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)'},{count:v.length}))):r.createElement("p",null,(0,o.I)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"}))),r.createElement("section",null,v&&v.map((e=>r.createElement(w,{key:e.document.i,searchResult:e}))))))}function w(e){let{searchResult:{document:t,type:a,page:n,tokens:l,metadata:s}}=e;const o=0===a,u=2===a,m=(o?t.b:n.b).slice(),h=u?t.s:t.t;o||m.push(n.t);let i="";if(I.vc&&l.length>0){const e=new URLSearchParams;for(const t of l)e.append("_highlight",t);i=`?${e.toString()}`}return r.createElement("article",{className:x.searchResultItem},r.createElement("h2",null,r.createElement(c.Z,{to:t.u+i+(t.h||""),dangerouslySetInnerHTML:{__html:u?(0,f.C)(h,l):(0,y.o)(h,(0,E.m)(s,"t"),l,100)}})),m.length>0&&r.createElement("p",{className:x.searchResultItemPath},(0,C.e)(m)),u&&r.createElement("p",{className:x.searchResultItemSummary,dangerouslySetInnerHTML:{__html:(0,y.o)(t.t,(0,E.m)(s,"t"),l,100)}}))}const R=function(){return r.createElement(l.Z,null,r.createElement(v,null))}}}]); \ No newline at end of file diff --git a/assets/js/1be78505.276fbb10.js b/assets/js/1be78505.276fbb10.js new file mode 100644 index 0000000000..3789bd053c --- /dev/null +++ b/assets/js/1be78505.276fbb10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9514,4972],{9963:(e,t,n)=>{n.r(t),n.d(t,{default:()=>fe});var a=n(7294),o=n(6010),l=n(1944),r=n(5281),c=n(3320),i=n(2802),s=n(4477),d=n(1116),m=n(179),u=n(5999),b=n(2466),p=n(5936);const h={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};function E(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),l=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(l.current?l.current=!1:a>=r?(c(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,p.S)((e=>{e.location.hash&&(l.current=!0,o(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",r.k.common.backToTopButton,h.backToTopButton,e&&h.backToTopButtonShow),type:"button",onClick:t})}var g=n(1442),f=n(6550),k=n(7524),v=n(6668),_=n(1327),C=n(7462);function S(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const I={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function N(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",I.collapseSidebarButton),onClick:t},a.createElement(S,{className:I.collapseSidebarButtonIcon}))}var T=n(9689),Z=n(902);const x=Symbol("EmptyContext"),B=a.createContext(x);function y(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),l=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return a.createElement(B.Provider,{value:l},t)}var w=n(6043),L=n(8596),A=n(9960),M=n(2389);function F(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:l,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,v.L)(),g=function(e){const t=(0,M.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),f=(0,i._F)(t,l),k=(0,L.Mg)(h,l),{collapsed:_,setCollapsed:S}=(0,w.u)({initialState:()=>!!b&&(!f&&t.collapsed)}),{expandedItem:I,setExpandedItem:N}=function(){const e=(0,a.useContext)(B);if(e===x)throw new Z.i6("DocSidebarItemsExpandedStateProvider");return e}(),T=function(e){void 0===e&&(e=!_),N(e?null:s),S(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const l=(0,Z.D9)(t);(0,a.useEffect)((()=>{t&&!l&&n&&o(!1)}),[t,l,n,o])}({isActive:f,collapsed:_,updateCollapsed:T}),(0,a.useEffect)((()=>{b&&null!=I&&I!==s&&E&&S(!0)}),[b,I,s,S,E]),a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":k})},a.createElement(A.Z,(0,C.Z)({className:(0,o.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":f}),onClick:b?e=>{n?.(t),h?T(!1):(e.preventDefault(),T())}:()=>{n?.(t)},"aria-current":k?"page":void 0,"aria-expanded":b?!_:void 0,href:b?g??"#":g},d),u),h&&b&&a.createElement(F,{categoryLabel:u,onClick:e=>{e.preventDefault(),T()}})),a.createElement(w.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(j,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:l,level:c+1})))}var P=n(3919),W=n(9471);const D={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:l,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,l),E=(0,P.Z)(m);return a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(A.Z,(0,C.Z)({className:(0,o.Z)("menu__link",!E&&D.menuExternalLink,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(W.Z,null)))}const V={menuHtmlItem:"menuHtmlItem_M9Kj"};function U(e){let{item:t,level:n,index:l}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[V.menuHtmlItem,"menu__list-item"],s),key:l,dangerouslySetInnerHTML:{__html:c}})}function z(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(U,(0,C.Z)({item:t},n));default:return a.createElement(R,(0,C.Z)({item:t},n))}}function K(e){let{items:t,...n}=e;return a.createElement(y,null,t.map(((e,t)=>a.createElement(z,(0,C.Z)({key:t,item:e,index:t},n)))))}const j=(0,a.memo)(K),G={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function Y(e){let{path:t,sidebar:n,className:l}=e;const c=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",G.menu,c&&G.menuWithAnnouncementBar,l)},a.createElement("ul",{className:(0,o.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:n,activePath:t,level:1})))}const q="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",X="sidebarHidden_VK0M",J="sidebarLogo_isFc";function Q(e){let{path:t,sidebar:n,onCollapse:l,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,v.L)();return a.createElement("div",{className:(0,o.Z)(q,c&&O,r&&X)},c&&a.createElement(_.Z,{tabIndex:-1,className:J}),a.createElement(Y,{path:t,sidebar:n}),i&&a.createElement(N,{onClick:l}))}const $=a.memo(Q);var ee=n(3102),te=n(2961);const ne=e=>{let{sidebar:t,path:n}=e;const l=(0,te.e)();return a.createElement("ul",{className:(0,o.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&l.toggle(),"link"===e.type&&l.toggle()},level:1}))};function ae(e){return a.createElement(ee.Zo,{component:ne,props:e})}const oe=a.memo(ae);function le(e){const t=(0,k.i)(),n="desktop"===t||"ssr"===t,o="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement($,e),o&&a.createElement(oe,e))}const re={expandButton:"expandButton_m80_",expandButtonIcon:"expandButtonIcon_BlDH"};function ce(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:re.expandButton,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(S,{className:re.expandButtonIcon}))}const ie={docSidebarContainer:"docSidebarContainer_b6E3",docSidebarContainerHidden:"docSidebarContainerHidden_b3ry",sidebarViewport:"sidebarViewport_Xe31"};function se(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function de(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:l}=e;const{pathname:c}=(0,f.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),!i&&(0,g.n)()&&s(!0),l((e=>!e))}),[l,i]);return a.createElement("aside",{className:(0,o.Z)(r.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&s(!0)}},a.createElement(se,null,a.createElement("div",{className:(0,o.Z)(ie.sidebarViewport,i&&ie.sidebarViewportHidden)},a.createElement(le,{sidebar:t,path:c,onCollapse:d,isHidden:i}),i&&a.createElement(ce,{toggleSidebar:d}))))}const me={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function ue(e){let{hiddenSidebarContainer:t,children:n}=e;const l=(0,d.V)();return a.createElement("main",{className:(0,o.Z)(me.docMainContainer,(t||!l)&&me.docMainContainerEnhanced)},a.createElement("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",me.docItemWrapper,t&&me.docItemWrapperEnhanced)},n))}const be={docPage:"docPage__5DB",docsWrapper:"docsWrapper_BCFX","themedComponent--light":"themedComponent--light_NU7w"};function pe(e){let{children:t}=e;const n=(0,d.V)(),[o,l]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:be.docsWrapper},a.createElement(E,null),a.createElement("div",{className:be.docPage},n&&a.createElement(de,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:l}),a.createElement(ue,{hiddenSidebarContainer:o},t)))}var he=n(4972),Ee=n(197);function ge(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(Ee.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(l.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function fe(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(he.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(ge,e),a.createElement(l.FG,{className:(0,o.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(pe,null,c)))))}},4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),o=n(5999),l=n(1944),r=n(179);function c(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/1c663d3d.d1f01d12.js b/assets/js/1c663d3d.d1f01d12.js new file mode 100644 index 0000000000..efb4dc7d4d --- /dev/null +++ b/assets/js/1c663d3d.d1f01d12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8392],{2556:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var o=a(7462),n=(a(7294),a(3905));a(5657);const i={title:"Getting started",sidebar_position:2,description:"Getting started with eCalc"},r="API Reference",l={unversionedId:"about/getting_started/index",id:"about/getting_started/index",title:"Getting started",description:"Getting started with eCalc",source:"@site/docs/about/getting_started/index.md",sourceDirName:"about/getting_started",slug:"/about/getting_started/",permalink:"/ecalc/docs/about/getting_started/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Getting started",sidebar_position:2,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"Introduction",permalink:"/ecalc/docs/about/"},next:{title:"CLI",permalink:"/ecalc/docs/about/getting_started/cli/"}},d={},c=[{value:"What method should I choose?",id:"what-method-should-i-choose",level:2},{value:"eCalc CLI",id:"ecalc-cli",level:3},{value:"Python Library",id:"python-library",level:3}],s={toc:c},u="wrapper";function p(t){let{components:e,...a}=t;return(0,n.kt)(u,(0,o.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"api-reference"},"API Reference"),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"Currently the ",(0,n.kt)("em",{parentName:"p"},"only")," officially supported method is the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/getting_started/cli/"},"eCalc CLI")," using eCalc YAML models.")),(0,n.kt)("p",null,"There are three options to run eCalc models:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/getting_started/cli/"},"eCalc CLI")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/getting_started/library/"},"eCalc Python library"))),(0,n.kt)("h2",{id:"what-method-should-i-choose"},"What method should I choose?"),(0,n.kt)("h3",{id:"ecalc-cli"},"eCalc CLI"),(0,n.kt)("p",null,"Choose the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/getting_started/cli/"},"eCalc CLI")," option if you:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Don't know much about programming"),(0,n.kt)("li",{parentName:"ul"},"Have simple requirements"),(0,n.kt)("li",{parentName:"ul"},"Can define the eCalc models statically")),(0,n.kt)("h3",{id:"python-library"},"Python Library"),(0,n.kt)("p",null,"Choose the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/getting_started/library/"},"Python Library")," option if you:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Are a developer or advanced user, and want to build eCalc models and get results programmatically"),(0,n.kt)("li",{parentName:"ul"},"Use Python, and you need to use (parts of) eCalc as a dependency"),(0,n.kt)("li",{parentName:"ul"},'Need access to "inner core functionality" of eCalc')),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.a089593f.js b/assets/js/1df93b7f.a089593f.js new file mode 100644 index 0000000000..38b970d6c7 --- /dev/null +++ b/assets/js/1df93b7f.a089593f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3237],{9754:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var u=n(7294),a=n(6550);function c(){return u.createElement(a.l_,{to:"docs/about/"})}}}]); \ No newline at end of file diff --git a/assets/js/1e7de7fe.c4a8e353.js b/assets/js/1e7de7fe.c4a8e353.js new file mode 100644 index 0000000000..cbb7acd147 --- /dev/null +++ b/assets/js/1e7de7fe.c4a8e353.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6124],{43:e=>{e.exports=JSON.parse('{"title":"Guides","description":"This section of the documentation lists reference documentations.","slug":"/category/guides","permalink":"/ecalc/docs/category/guides","navigation":{"previous":{"title":"Markdown","permalink":"/ecalc/docs/contribute/documentation-guide/markdown"},"next":{"title":"Git","permalink":"/ecalc/docs/contribute/guides/git"}}}')}}]); \ No newline at end of file diff --git a/assets/js/1f60d0d4.297d6f23.js b/assets/js/1f60d0d4.297d6f23.js new file mode 100644 index 0000000000..2d36f603c4 --- /dev/null +++ b/assets/js/1f60d0d4.297d6f23.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6539],{760:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var i=o(7462),n=(o(7294),o(3905));o(5657);const a={title:"Introduction",sidebar_position:1,description:"Introduction to eCalc documentation"},s="Introduction to eCalc\u2122",r={unversionedId:"about/index",id:"about/index",title:"Introduction",description:"Introduction to eCalc documentation",source:"@site/docs/about/index.md",sourceDirName:"about",slug:"/about/",permalink:"/ecalc/docs/about/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1,description:"Introduction to eCalc documentation"},sidebar:"about",next:{title:"Getting started",permalink:"/ecalc/docs/about/getting_started/"}},c={},l=[{value:"What is eCalc\u2122?",id:"what-is-ecalc",level:2},{value:"Why should I use eCalc\u2122?",id:"why-should-i-use-ecalc",level:3},{value:"How to use eCalc\u2122?",id:"how-to-use-ecalc",level:3}],d={toc:l},u="wrapper";function h(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,i.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"introduction-to-ecalc"},"Introduction to eCalc\u2122"),(0,n.kt)("p",null,"The eCalc\u2122 technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area."),(0,n.kt)("h2",{id:"what-is-ecalc"},"What is eCalc\u2122?"),(0,n.kt)("p",null,"eCalc\u2122 is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support."),(0,n.kt)("p",null,"eCalc\u2122 performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered."),(0,n.kt)("p",null,"eCalc\u2122 uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation."),(0,n.kt)("p",null,(0,n.kt)("img",{src:o(3676).Z,width:"4535",height:"2551"})),(0,n.kt)("h3",{id:"why-should-i-use-ecalc"},"Why should I use eCalc\u2122?"),(0,n.kt)("p",null,"By using eCalc\u2122 you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures."),(0,n.kt)("h3",{id:"how-to-use-ecalc"},"How to use eCalc\u2122?"),(0,n.kt)("p",null,"To use eCalc\u2122 you need to create a model setup of your asset.\nThis is described in the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/"},"Modelling")," section."),(0,n.kt)("p",null,"Once the model is ready, you can run the eCalc\u2122 calculator. Different user interfaces for the calculator are offered. These are described in detail in the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/getting_started/"},"Getting started")," section."))}h.isMDXComponent=!0},3676:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg"}}]); \ No newline at end of file diff --git a/assets/js/211.c8c05584.js b/assets/js/211.c8c05584.js new file mode 100644 index 0000000000..6b739de98e --- /dev/null +++ b/assets/js/211.c8c05584.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[211],{3502:(t,n,e)=>{e.d(n,{Z:()=>rt});var r,o,u,a,i,l,c,p,f=/\r\n?/g,s=/\t/g,h=/\f/g,d=function(t){return t.replace(f,"\n").replace(h,"").replace(s," ")},g=function(t,n){var e=t||{};if(null!=n)for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r]);return e},y=function(t,n){var e,r=Object.keys(t).filter((function(n){var e=t[n];if(null==e||null==e.match)return!1;var r=e.order;return"number"==typeof r&&isFinite(r)||"undefined"==typeof console||console.warn("simple-markdown: Invalid order for rule `"+n+"`: "+String(r)),!0}));r.sort((function(n,e){var r=t[n],o=t[e],u=r.order,a=o.order;if(u!==a)return u-a;var i=r.quality?0:1,l=o.quality?0:1;return i!==l?i-l:n<e?-1:n>e?1:0}));var o=function n(o,u){var a=[];for(e=u=u||e;o;){var i=null,l=null,c=null,p=NaN,f=0,s=r[0],h=t[s];do{var d=h.order,g=null==u.prevCapture?"":u.prevCapture[0],y=h.match(o,u,g);if(y){var m=h.quality?h.quality(y,u,g):0;m<=p||(i=s,l=h,c=y,p=m)}f++,s=r[f],h=t[s]}while(h&&(!c||h.order===d&&h.quality));if(null==l||null==c)throw new Error("Could not find a matching rule for the below content. The rule with highest `order` should always match content provided to it. Check the definition of `match` for '"+r[r.length-1]+"'. It seems to not match the following source:\n"+o);if(c.index)throw new Error("`match` must return a capture starting at index 0 (the current parse index). Did you forget a ^ at the start of the RegExp?");var v=l.parse(c,n,u);if(Array.isArray(v))Array.prototype.push.apply(a,v);else{if(null==v||"object"!=typeof v)throw new Error("parse() function returned invalid parse result: '".concat(v,"'"));null==v.type&&(v.type=i),a.push(v)}u.prevCapture=c,o=o.substring(u.prevCapture[0].length)}return a};return function(t,r){return(e=g(r,n)).inline||e.disableAutoBlockNewlines||(t+="\n\n"),e.prevCapture=null,o(d(t),e)}},m=function(t){var n=function(n,e,r){return e.inline?t.exec(n):null};return n.regex=t,n},v=function(t){var n=function(n,e){return e.inline?null:t.exec(n)};return n.regex=t,n},w=function(t){var n=function(n,e){return t.exec(n)};return n.regex=t,n},S="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,x=function(t,n,e){return{$$typeof:S,type:t,key:null==n?void 0:n,ref:null,props:e,_owner:null}},b=function(t,n,e,r){e=e||{},r=void 0===r||r;var o="";for(var u in e){var a=e[u];Object.prototype.hasOwnProperty.call(e,u)&&a&&(o+=" "+$(u)+'="'+$(a)+'"')}var i="<"+t+o+">";return r?i+n+"</"+t+">":i},k={},E=function(t){if(null==t)return null;try{var n=new URL(t,"https://localhost").protocol;if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}catch(e){return null}return t},_=/[<>&"']/g,R={"<":"<",">":">","&":"&",'"':""","'":"'","/":"/","`":"`"},$=function(t){return String(t).replace(_,(function(t){return R[t]}))},A=/\\([^0-9A-Za-z\s])/g,T=function(t){return t.replace(A,"$1")},j=function(t,n,e){var r=e.inline||!1;e.inline=!0;var o=t(n,e);return e.inline=r,o},O=function(t,n,e){return{content:j(n,t[1],e)}},C=function(){return{}},B="(?:[*+-]|\\d+\\.)",P="( *)("+B+") +",N=new RegExp("^"+P),q=new RegExp(P+"[^\\n]*(?:\\n(?!\\1"+B+" )[^\\n]*)*(\n|$)","gm"),L=/\n{2,}$/,F=/^ (?= *`)|(` *) $/g,I=L,Z=/ *\n+$/,z=new RegExp("^( *)("+B+") [\\s\\S]+?(?:\n{2,}(?! )(?!\\1"+B+" )\\n*|\\s*\n*$)"),G=/(?:^|\n)( *)$/,X=(r=/^ *\| *| *\| *$/g,o=/ *$/,u=/^ *-+: *$/,a=/^ *:-+: *$/,i=/^ *:-+ *$/,l=function(t){return u.test(t)?"right":a.test(t)?"center":i.test(t)?"left":null},c=function(t,n,e,r){var u=e.inTable;e.inTable=!0;var a=n(t.trim(),e);e.inTable=u;var i=[[]];return a.forEach((function(t,n){"tableSeparator"===t.type?(!r||0!==n&&n!==a.length-1)&&i.push([]):("text"!==t.type||null!=a[n+1]&&"tableSeparator"!==a[n+1].type||(t.content=t.content.replace(o,"")),i[i.length-1].push(t))})),i},{parseTable:(p=function(t){return function(n,e,o){o.inline=!0;var u=c(n[1],e,o,t),a=function(t,n,e,o){return o&&(t=t.replace(r,"")),t.trim().split("|").map(l)}(n[2],0,0,t),i=function(t,n,e,r){return t.trim().split("\n").map((function(t){return c(t,n,e,r)}))}(n[3],e,o,t);return o.inline=!1,{type:"table",header:u,align:a,cells:i}}})(!0),parseNpTable:p(!1),TABLE_REGEX:/^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/,NPTABLE_REGEX:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/}),H="(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*",U="\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*",D=/mailto:/i,M=function(t,n,e){var r=(t[2]||t[1]).replace(/\s+/g," ").toLowerCase();if(n._defs&&n._defs[r]){var o=n._defs[r];e.target=o.target,e.title=o.title}return n._refs=n._refs||{},n._refs[r]=n._refs[r]||[],n._refs[r].push(e),e},Q=0,J={Array:{react:function(t,n,e){for(var r=e.key,o=[],u=0,a=0;u<t.length;u++,a++){e.key=""+u;var i=t[u];if("text"===i.type)for(i={type:"text",content:i.content};u+1<t.length&&"text"===t[u+1].type;u++)i.content+=t[u+1].content;o.push(n(i,e))}return e.key=r,o},html:function(t,n,e){for(var r="",o=0;o<t.length;o++){var u=t[o];if("text"===u.type)for(u={type:"text",content:u.content};o+1<t.length&&"text"===t[o+1].type;o++)u.content+=t[o+1].content;r+=n(u,e)}return r}},heading:{order:Q++,match:v(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{level:t[1].length,content:j(n,t[2].trim(),e)}})),react:function(t,n,e){return x("h"+t.level,e.key,{children:n(t.content,e)})},html:function(t,n,e){return b("h"+t.level,n(t.content,e))}},nptable:{order:Q++,match:v(X.NPTABLE_REGEX),parse:X.parseNpTable,react:null,html:null},lheading:{order:Q++,match:v(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{type:"heading",level:"="===t[2]?1:2,content:j(n,t[1],e)}})),react:null,html:null},hr:{order:Q++,match:v(/^( *[-*_]){3,} *(?:\n *)+\n/),parse:C,react:function(t,n,e){return x("hr",e.key,k)},html:function(t,n,e){return"<hr>"}},codeBlock:{order:Q++,match:v(/^(?: [^\n]+\n*)+(?:\n *)+\n/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{lang:void 0,content:t[0].replace(/^ /gm,"").replace(/\n+$/,"")}})),react:function(t,n,e){var r=t.lang?"markdown-code-"+t.lang:void 0;return x("pre",e.key,{children:x("code",null,{className:r,children:t.content})})},html:function(t,n,e){var r=t.lang?"markdown-code-"+t.lang:void 0,o=b("code",$(t.content),{class:r});return b("pre",o)}},fence:{order:Q++,match:v(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{type:"codeBlock",lang:t[2]||void 0,content:t[3]}})),react:null,html:null},blockQuote:{order:Q++,match:v(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{content:n(t[0].replace(/^ *> ?/gm,""),e)}})),react:function(t,n,e){return x("blockquote",e.key,{children:n(t.content,e)})},html:function(t,n,e){return b("blockquote",n(t.content,e))}},list:{order:Q++,match:function(t,n){var e=null==n.prevCapture?"":n.prevCapture[0],r=G.exec(e),o=n._list||!n.inline;return r&&o?(t=r[1]+t,z.exec(t)):null},parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){var r=t[2],o=r.length>1,u=o?+r:void 0,a=t[0].replace(I,"\n").match(q),i=!1;return{ordered:o,start:u,items:a.map((function(t,r){var o=N.exec(t),u=o?o[0].length:0,l=new RegExp("^ {1,"+u+"}","gm"),c=t.replace(l,"").replace(N,""),p=r===a.length-1,f=-1!==c.indexOf("\n\n")||p&&i;i=f;var s,h=e.inline,d=e._list;e._list=!0,f?(e.inline=!1,s=c.replace(Z,"\n\n")):(e.inline=!0,s=c.replace(Z,""));var g=n(s,e);return e.inline=h,e._list=d,g}))}})),react:function(t,n,e){var r=t.ordered?"ol":"ul";return x(r,e.key,{start:t.start,children:t.items.map((function(t,r){return x("li",""+r,{children:n(t,e)})}))})},html:function(t,n,e){var r=t.items.map((function(t){return b("li",n(t,e))})).join(""),o=t.ordered?"ol":"ul",u={start:t.start};return b(o,r,u)}},def:{order:Q++,match:v(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){var r=t[1].replace(/\s+/g," ").toLowerCase(),o=t[2],u=t[3];return e._refs&&e._refs[r]&&e._refs[r].forEach((function(t){t.target=o,t.title=u})),e._defs=e._defs||{},e._defs[r]={target:o,title:u},{def:r,target:o,title:u}})),react:function(){return null},html:function(){return""}},table:{order:Q++,match:v(X.TABLE_REGEX),parse:X.parseTable,react:function(t,n,e){var r=function(n){return null==t.align[n]?{}:{textAlign:t.align[n]}},o=t.header.map((function(t,o){return x("th",""+o,{style:r(o),scope:"col",children:n(t,e)})})),u=t.cells.map((function(t,o){return x("tr",""+o,{children:t.map((function(t,o){return x("td",""+o,{style:r(o),children:n(t,e)})}))})}));return x("table",e.key,{children:[x("thead","thead",{children:x("tr",null,{children:o})}),x("tbody","tbody",{children:u})]})},html:function(t,n,e){var r=function(n){return null==t.align[n]?"":"text-align:"+t.align[n]+";"},o=t.header.map((function(t,o){return b("th",n(t,e),{style:r(o),scope:"col"})})).join(""),u=t.cells.map((function(t){var o=t.map((function(t,o){return b("td",n(t,e),{style:r(o)})})).join("");return b("tr",o)})).join(""),a=b("thead",b("tr",o)),i=b("tbody",u);return b("table",a+i)}},newline:{order:Q++,match:v(/^(?:\n *)*\n/),parse:C,react:function(t,n,e){return"\n"},html:function(t,n,e){return"\n"}},paragraph:{order:Q++,match:v(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/),parse:O,react:function(t,n,e){return x("div",e.key,{className:"paragraph",children:n(t.content,e)})},html:function(t,n,e){return b("div",n(t.content,e),{class:"paragraph"})}},escape:{order:Q++,match:m(/^\\([^0-9A-Za-z\s])/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{type:"text",content:t[1]}})),react:null,html:null},tableSeparator:{order:Q++,match:function(t,n){return n.inTable?/^ *\| */.exec(t):null},parse:function(){return{type:"tableSeparator"}},react:function(){return" | "},html:function(){return" | "}},autolink:{order:Q++,match:m(/^<([^: >]+:\/[^ >]+)>/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{type:"link",content:[{type:"text",content:t[1]}],target:t[1]}})),react:null,html:null},mailto:{order:Q++,match:m(/^<([^ >]+@[^ >]+)>/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){var r=t[1],o=t[1];return D.test(o)||(o="mailto:"+o),{type:"link",content:[{type:"text",content:r}],target:o}})),react:null,html:null},url:{order:Q++,match:m(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{type:"link",content:[{type:"text",content:t[1]}],target:t[1],title:void 0}})),react:null,html:null},link:{order:Q++,match:m(new RegExp("^\\[("+H+")\\]\\("+U+"\\)")),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{content:n(t[1],e),target:T(t[2]),title:t[3]}})),react:function(t,n,e){return x("a",e.key,{href:E(t.target),title:t.title,children:n(t.content,e)})},html:function(t,n,e){var r={href:E(t.target),title:t.title};return b("a",n(t.content,e),r)}},image:{order:Q++,match:m(new RegExp("^!\\[("+H+")\\]\\("+U+"\\)")),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{alt:t[1],target:T(t[2]),title:t[3]}})),react:function(t,n,e){return x("img",e.key,{src:E(t.target),alt:t.alt,title:t.title})},html:function(t,n,e){var r={src:E(t.target),alt:t.alt,title:t.title};return b("img","",r,!1)}},reflink:{order:Q++,match:m(new RegExp("^\\[("+H+")\\]\\s*\\[([^\\]]*)\\]")),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return M(t,e,{type:"link",content:n(t[1],e)})})),react:null,html:null},refimage:{order:Q++,match:m(new RegExp("^!\\[("+H+")\\]\\s*\\[([^\\]]*)\\]")),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return M(t,e,{type:"image",alt:t[1]})})),react:null,html:null},em:{order:Q,match:m(new RegExp("^\\b_((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_\\b|^\\*(?=\\S)((?:\\*\\*|\\\\[\\s\\S]|\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|[^\\s\\*\\\\])+?)\\*(?!\\*)")),quality:function(t){return t[0].length+.2},parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{content:n(t[2]||t[1],e)}})),react:function(t,n,e){return x("em",e.key,{children:n(t.content,e)})},html:function(t,n,e){return b("em",n(t.content,e))}},strong:{order:Q,match:m(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/),quality:function(t){return t[0].length+.1},parse:O,react:function(t,n,e){return x("strong",e.key,{children:n(t.content,e)})},html:function(t,n,e){return b("strong",n(t.content,e))}},u:{order:Q++,match:m(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/),quality:function(t){return t[0].length},parse:O,react:function(t,n,e){return x("u",e.key,{children:n(t.content,e)})},html:function(t,n,e){return b("u",n(t.content,e))}},del:{order:Q++,match:m(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/),parse:O,react:function(t,n,e){return x("del",e.key,{children:n(t.content,e)})},html:function(t,n,e){return b("del",n(t.content,e))}},inlineCode:{order:Q++,match:m(/^(`+)([\s\S]*?[^`])\1(?!`)/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{content:t[2].replace(F,"$1")}})),react:function(t,n,e){return x("code",e.key,{children:t.content})},html:function(t,n,e){return b("code",$(t.content))}},br:{order:Q++,match:w(/^ {2,}\n/),parse:C,react:function(t,n,e){return x("br",e.key,k)},html:function(t,n,e){return"<br>"}},text:{order:Q++,match:w(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/),parse:function(t){function n(n,e,r){return t.apply(this,arguments)}return n.toString=function(){return t.toString()},n}((function(t,n,e){return{content:t[0]}})),react:function(t,n,e){return t.content},html:function(t,n,e){return $(t.content)}}},K=function(t,n){var e,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n)throw new Error("simple-markdown: outputFor: `property` must be defined. if you just upgraded, you probably need to replace `outputFor` with `reactFor`");var o=(t.Array||J.Array)[n];if(!o)throw new Error("simple-markdown: outputFor: to join nodes of type `"+n+"` you must provide an `Array:` joiner rule with that type, Please see the docs for details on specifying an Array rule.");var u=o,a=function r(o,a){return e=a=a||e,Array.isArray(o)?u(o,r,a):t[o.type][n](o,r,a)};return function(t,n){return e=g(n,r),a(t,e)}},V=y(J),W=function(t,n){return(n=n||{}).inline=!1,V(t,n)},Y=function(t,n){var e=L.test(t);return(n=n||{}).inline=!e,V(t,n)},tt=K(J,"react"),nt=K(J,"html"),et=function(t,n){return tt(W(t,n),n)},rt={defaultRules:J,parserFor:y,outputFor:K,inlineRegex:m,blockRegex:v,anyScopeRegex:w,parseInline:j,parseBlock:function(t,n,e){var r=e.inline||!1;e.inline=!1;var o=t(n+"\n\n",e);return e.inline=r,o},markdownToReact:et,markdownToHtml:function(t,n){return nt(W(t,n),n)},ReactMarkdown:function(t){var n={};for(var e in t)"source"!==e&&Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n.children=et(t.source),x("div",null,n)},defaultBlockParse:W,defaultInlineParse:function(t,n){return(n=n||{}).inline=!0,V(t,n)},defaultImplicitParse:Y,defaultReactOutput:tt,defaultHtmlOutput:nt,preprocess:d,sanitizeText:$,sanitizeUrl:E,unescapeUrl:T,htmlTag:b,reactElement:x,defaultRawParse:V,ruleOutput:function(t,n){n||"undefined"==typeof console||console.warn("simple-markdown ruleOutput should take 'react' or 'html' as the second argument.");return function(e,r,o){return t[e.type][n](e,r,o)}},reactFor:function(t){return function n(e,r){if(r=r||{},Array.isArray(e)){for(var o=r.key,u=[],a=null,i=0;i<e.length;i++){r.key=""+i;var l=n(e[i],r);"string"==typeof l&&"string"==typeof a?(a+=l,u[u.length-1]=a):(u.push(l),a=l)}return r.key=o,u}return t(e,n,r)}},htmlFor:function(t){return function n(e,r){return r=r||{},Array.isArray(e)?e.map((function(t){return n(t,r)})).join(""):t(e,n,r)}},defaultParse:function(){return"undefined"!=typeof console&&console.warn("defaultParse is deprecated, please use `defaultImplicitParse`"),Y.apply(null,arguments)},defaultOutput:function(){return"undefined"!=typeof console&&console.warn("defaultOutput is deprecated, please use `defaultReactOutput`"),tt.apply(null,arguments)}}},211:(t,n,e)=>{e.d(n,{c:()=>c});e(9373);var r=e(44),o=e(3047),u=e(3502);function a(t){const n=function(t){return t.replace(/\n{2,}/g,"\n").replace(/^\s+/gm,"")}(t),e=(0,u.Z.defaultBlockParse)(n);let r=[[]],o=0;function a(t,n){if("text"===t.type){t.content.split("\n").forEach(((t,e)=>{0!==e&&(o++,r.push([])),t.split(" ").forEach((t=>{t&&r[o].push({content:t,type:n||"normal"})}))}))}else"strong"!==t.type&&"em"!==t.type||t.content.forEach((n=>{a(n,t.type)}))}return e.forEach((t=>{"paragraph"===t.type&&t.content.forEach((t=>{a(t)}))})),r}function i(t,n,e){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",n*e-.1+"em").attr("dy",e+"em")}function l(t,n){t.text(""),n.forEach(((n,e)=>{const r=t.append("tspan").attr("font-style","em"===n.type?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight","strong"===n.type?"bold":"normal");0===e?r.text(n.content):r.text(" "+n.content)}))}const c=(t,n="",{style:e="",isTitle:c=!1,classes:p="",useHtmlLabels:f=!0,isNode:s=!0,width:h,addSvgBackground:d=!1}={})=>{if(r.l.info("createText",n,e,c,p,f,s,d),f){const r=(g=n,(0,u.Z.defaultBlockParse)(g).map((function t(n){return"text"===n.type?n.content.replace(/\n/g,"<br/>"):"strong"===n.type?`<strong>${n.content.map(t).join("")}</strong>`:"em"===n.type?`<em>${n.content.map(t).join("")}</em>`:"paragraph"===n.type?`<p>${n.content.map(t).join("")}</p>`:""})).join(""));let a=function(t,n,e,r){const o=t.append("foreignObject"),u=o.append("xhtml:div"),a=n.label,i=n.isNode?"nodeLabel":"edgeLabel";var l,c;u.html(`<span class="${i} ${r}" `+(n.labelStyle?'style="'+n.labelStyle+'"':"")+">"+a+"</span>"),l=u,(c=n.labelStyle)&&l.attr("style",c),u.style("display","table-cell"),u.style("white-space","nowrap"),u.style("max-width",e+"px"),u.attr("xmlns","http://www.w3.org/1999/xhtml");let p=u.node().getBoundingClientRect();return p.width===e&&(u.style("display","table"),u.style("white-space","break-spaces"),u.style("width",e+"px"),p=u.node().getBoundingClientRect()),o.style("width",p.width),o.style("height",p.height),o.node()}(t,{isNode:s,label:(0,o.d)(r).replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`)),labelStyle:e.replace("fill:","color:")},h,p);return a}{const e=a(n),r=['"',"'",".",",",":",";","!","?","(",")","[","]","{","}"];let o;e.forEach((t=>{t.forEach((t=>{r.includes(t.content)&&o&&(o.content+=t.content,t.content=""),o=t}))}));const u=function(t,n,e,r=!1){const o=n.append("g");let u=o.insert("rect").attr("class","background");const a=o.append("text").attr("y","-10.1");let c=-1;if(e.forEach((n=>{c++;let e,r=i(a,c,1.1),o=[...n].reverse(),u=[];for(;o.length;)e=o.pop(),u.push(e),l(r,u),r.node().getComputedTextLength()>t&&(u.pop(),o.push(e),l(r,u),u=[],c++,r=i(a,c,1.1))})),r){const t=a.node().getBBox(),n=2;return u.attr("x",-n).attr("y",-n).attr("width",t.width+2*n).attr("height",t.height+2*n),o.node()}return a.node()}(h,t,e,d);return u}var g}}}]); \ No newline at end of file diff --git a/assets/js/216.5ae6451c.js b/assets/js/216.5ae6451c.js new file mode 100644 index 0000000000..2e49a94980 --- /dev/null +++ b/assets/js/216.5ae6451c.js @@ -0,0 +1,12696 @@ +exports.id = 216; +exports.ids = [216]; +exports.modules = { + +/***/ 17295: +/***/ ((module) => { + +(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/******************************************************************************* + * Copyright (c) 2017 Kiel University and others. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = function () { + function ELK() { + var _this = this; + + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, + defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, + _ref$algorithms = _ref.algorithms, + algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms, + workerFactory = _ref.workerFactory, + workerUrl = _ref.workerUrl; + + _classCallCheck(this, ELK); + + this.defaultLayoutOptions = defaultLayoutOptions; + this.initialized = false; + + // check valid worker construction possible + if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { + throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); + } + var factory = workerFactory; + if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { + // use default Web Worker + factory = function factory(url) { + return new Worker(url); + }; + } + + // create the worker + var worker = factory(workerUrl); + if (typeof worker.postMessage !== 'function') { + throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); + } + + // wrap the worker to return promises + this.worker = new PromisedWorker(worker); + + // initially register algorithms + this.worker.postMessage({ + cmd: 'register', + algorithms: algorithms + }).then(function (r) { + return _this.initialized = true; + }).catch(console.err); + } + + _createClass(ELK, [{ + key: 'layout', + value: function layout(graph) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref2$layoutOptions = _ref2.layoutOptions, + layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions, + _ref2$logging = _ref2.logging, + logging = _ref2$logging === undefined ? false : _ref2$logging, + _ref2$measureExecutio = _ref2.measureExecutionTime, + measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio; + + if (!graph) { + return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); + } + return this.worker.postMessage({ + cmd: 'layout', + graph: graph, + layoutOptions: layoutOptions, + options: { + logging: logging, + measureExecutionTime: measureExecutionTime + } + }); + } + }, { + key: 'knownLayoutAlgorithms', + value: function knownLayoutAlgorithms() { + return this.worker.postMessage({ cmd: 'algorithms' }); + } + }, { + key: 'knownLayoutOptions', + value: function knownLayoutOptions() { + return this.worker.postMessage({ cmd: 'options' }); + } + }, { + key: 'knownLayoutCategories', + value: function knownLayoutCategories() { + return this.worker.postMessage({ cmd: 'categories' }); + } + }, { + key: 'terminateWorker', + value: function terminateWorker() { + this.worker.terminate(); + } + }]); + + return ELK; +}(); + +exports.default = ELK; + +var PromisedWorker = function () { + function PromisedWorker(worker) { + var _this2 = this; + + _classCallCheck(this, PromisedWorker); + + if (worker === undefined) { + throw new Error("Missing mandatory parameter 'worker'."); + } + this.resolvers = {}; + this.worker = worker; + this.worker.onmessage = function (answer) { + // why is this necessary? + setTimeout(function () { + _this2.receive(_this2, answer); + }, 0); + }; + } + + _createClass(PromisedWorker, [{ + key: 'postMessage', + value: function postMessage(msg) { + var id = this.id || 0; + this.id = id + 1; + msg.id = id; + var self = this; + return new Promise(function (resolve, reject) { + // prepare the resolver + self.resolvers[id] = function (err, res) { + if (err) { + self.convertGwtStyleError(err); + reject(err); + } else { + resolve(res); + } + }; + // post the message + self.worker.postMessage(msg); + }); + } + }, { + key: 'receive', + value: function receive(self, answer) { + var json = answer.data; + var resolver = self.resolvers[json.id]; + if (resolver) { + delete self.resolvers[json.id]; + if (json.error) { + resolver(json.error); + } else { + resolver(null, json.data); + } + } + } + }, { + key: 'terminate', + value: function terminate() { + if (this.worker.terminate) { + this.worker.terminate(); + } + } + }, { + key: 'convertGwtStyleError', + value: function convertGwtStyleError(err) { + if (!err) { + return; + } + // Somewhat flatten the way GWT stores nested exception(s) + var javaException = err['__java$exception']; + if (javaException) { + // Note that the property name of the nested exception is different + // in the non-minified ('cause') and the minified (not deterministic) version. + // Hence, the version below only works for the non-minified version. + // However, as the minified stack trace is not of much use anyway, one + // should switch the used version for debugging in such a case. + if (javaException.cause && javaException.cause.backingJsObject) { + err.cause = javaException.cause.backingJsObject; + this.convertGwtStyleError(err.cause); + } + delete err['__java$exception']; + } + } + }]); + + return PromisedWorker; +}(); +},{}],2:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; + +// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- +var $wnd; +if (typeof window !== 'undefined') + $wnd = window +else if (typeof global !== 'undefined') + $wnd = global // nodejs +else if (typeof self !== 'undefined') + $wnd = self // web worker + +var $moduleName, + $moduleBase; + +// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- +var g, i, o; + +// -------------- GENERATED CODE -------------- +function nb(){} +function xb(){} +function Fd(){} +function $g(){} +function _p(){} +function yq(){} +function Sq(){} +function Es(){} +function Jw(){} +function Vw(){} +function VA(){} +function dA(){} +function MA(){} +function PA(){} +function PB(){} +function bx(){} +function cx(){} +function vy(){} +function Nz(){} +function Yz(){} +function Ylb(){} +function Ymb(){} +function xmb(){} +function Fmb(){} +function Qmb(){} +function gcb(){} +function ccb(){} +function jcb(){} +function jtb(){} +function otb(){} +function qtb(){} +function _fb(){} +function bpb(){} +function kpb(){} +function ppb(){} +function Gpb(){} +function drb(){} +function dzb(){} +function fzb(){} +function fxb(){} +function Vxb(){} +function Ovb(){} +function byb(){} +function zyb(){} +function Zyb(){} +function _yb(){} +function hzb(){} +function jzb(){} +function lzb(){} +function nzb(){} +function rzb(){} +function zzb(){} +function Czb(){} +function Ezb(){} +function Gzb(){} +function Izb(){} +function Mzb(){} +function bBb(){} +function NBb(){} +function PBb(){} +function RBb(){} +function iCb(){} +function OCb(){} +function SCb(){} +function GDb(){} +function JDb(){} +function fEb(){} +function xEb(){} +function CEb(){} +function GEb(){} +function yFb(){} +function KGb(){} +function tIb(){} +function vIb(){} +function xIb(){} +function zIb(){} +function OIb(){} +function SIb(){} +function TJb(){} +function VJb(){} +function XJb(){} +function XKb(){} +function fKb(){} +function VKb(){} +function VLb(){} +function jLb(){} +function nLb(){} +function GLb(){} +function KLb(){} +function MLb(){} +function OLb(){} +function RLb(){} +function YLb(){} +function bMb(){} +function gMb(){} +function lMb(){} +function pMb(){} +function wMb(){} +function zMb(){} +function CMb(){} +function FMb(){} +function LMb(){} +function zNb(){} +function PNb(){} +function kOb(){} +function pOb(){} +function tOb(){} +function yOb(){} +function FOb(){} +function GPb(){} +function aQb(){} +function cQb(){} +function eQb(){} +function gQb(){} +function iQb(){} +function CQb(){} +function MQb(){} +function OQb(){} +function ASb(){} +function fTb(){} +function kTb(){} +function STb(){} +function fUb(){} +function DUb(){} +function VUb(){} +function YUb(){} +function _Ub(){} +function _Wb(){} +function QWb(){} +function XWb(){} +function jVb(){} +function DVb(){} +function VVb(){} +function $Vb(){} +function dXb(){} +function hXb(){} +function lXb(){} +function gYb(){} +function HYb(){} +function SYb(){} +function VYb(){} +function dZb(){} +function P$b(){} +function T$b(){} +function h1b(){} +function m1b(){} +function q1b(){} +function u1b(){} +function y1b(){} +function C1b(){} +function e2b(){} +function g2b(){} +function m2b(){} +function q2b(){} +function u2b(){} +function S2b(){} +function U2b(){} +function W2b(){} +function _2b(){} +function e3b(){} +function h3b(){} +function p3b(){} +function t3b(){} +function w3b(){} +function y3b(){} +function A3b(){} +function M3b(){} +function Q3b(){} +function U3b(){} +function Y3b(){} +function l4b(){} +function q4b(){} +function s4b(){} +function u4b(){} +function w4b(){} +function y4b(){} +function L4b(){} +function N4b(){} +function P4b(){} +function R4b(){} +function T4b(){} +function X4b(){} +function I5b(){} +function Q5b(){} +function T5b(){} +function Z5b(){} +function l6b(){} +function o6b(){} +function t6b(){} +function z6b(){} +function L6b(){} +function M6b(){} +function P6b(){} +function X6b(){} +function $6b(){} +function a7b(){} +function c7b(){} +function g7b(){} +function j7b(){} +function m7b(){} +function r7b(){} +function x7b(){} +function D7b(){} +function D9b(){} +function b9b(){} +function h9b(){} +function j9b(){} +function l9b(){} +function w9b(){} +function F9b(){} +function hac(){} +function jac(){} +function pac(){} +function uac(){} +function Iac(){} +function Kac(){} +function Sac(){} +function obc(){} +function rbc(){} +function vbc(){} +function Fbc(){} +function Jbc(){} +function Xbc(){} +function ccc(){} +function fcc(){} +function lcc(){} +function occ(){} +function tcc(){} +function ycc(){} +function Acc(){} +function Ccc(){} +function Ecc(){} +function Gcc(){} +function Zcc(){} +function _cc(){} +function bdc(){} +function fdc(){} +function jdc(){} +function pdc(){} +function sdc(){} +function ydc(){} +function Adc(){} +function Cdc(){} +function Edc(){} +function Idc(){} +function Ndc(){} +function Qdc(){} +function Sdc(){} +function Udc(){} +function Wdc(){} +function Ydc(){} +function aec(){} +function hec(){} +function jec(){} +function lec(){} +function nec(){} +function uec(){} +function wec(){} +function yec(){} +function Aec(){} +function Fec(){} +function Jec(){} +function Lec(){} +function Nec(){} +function Rec(){} +function Uec(){} +function Zec(){} +function Zfc(){} +function lfc(){} +function tfc(){} +function xfc(){} +function zfc(){} +function Ffc(){} +function Jfc(){} +function Nfc(){} +function Pfc(){} +function Vfc(){} +function _fc(){} +function fgc(){} +function jgc(){} +function lgc(){} +function Bgc(){} +function ehc(){} +function ghc(){} +function ihc(){} +function khc(){} +function mhc(){} +function ohc(){} +function qhc(){} +function yhc(){} +function Ahc(){} +function Ghc(){} +function Ihc(){} +function Khc(){} +function Mhc(){} +function Shc(){} +function Uhc(){} +function Whc(){} +function dic(){} +function dlc(){} +function blc(){} +function flc(){} +function hlc(){} +function jlc(){} +function Glc(){} +function Ilc(){} +function Klc(){} +function Mlc(){} +function Mjc(){} +function Qjc(){} +function Qlc(){} +function Ulc(){} +function Ylc(){} +function Lkc(){} +function Nkc(){} +function Pkc(){} +function Rkc(){} +function Xkc(){} +function _kc(){} +function gmc(){} +function kmc(){} +function zmc(){} +function Fmc(){} +function Wmc(){} +function $mc(){} +function anc(){} +function mnc(){} +function wnc(){} +function Hnc(){} +function Jnc(){} +function Lnc(){} +function Nnc(){} +function Pnc(){} +function Ync(){} +function eoc(){} +function Aoc(){} +function Coc(){} +function Eoc(){} +function Joc(){} +function Loc(){} +function Zoc(){} +function _oc(){} +function bpc(){} +function hpc(){} +function kpc(){} +function ppc(){} +function pFc(){} +function Ryc(){} +function QCc(){} +function PDc(){} +function xGc(){} +function HGc(){} +function JGc(){} +function NGc(){} +function GIc(){} +function iKc(){} +function mKc(){} +function wKc(){} +function yKc(){} +function AKc(){} +function EKc(){} +function KKc(){} +function OKc(){} +function QKc(){} +function SKc(){} +function UKc(){} +function YKc(){} +function aLc(){} +function fLc(){} +function hLc(){} +function nLc(){} +function pLc(){} +function tLc(){} +function vLc(){} +function zLc(){} +function BLc(){} +function DLc(){} +function FLc(){} +function sMc(){} +function JMc(){} +function hNc(){} +function RNc(){} +function ZNc(){} +function _Nc(){} +function bOc(){} +function dOc(){} +function fOc(){} +function hOc(){} +function hRc(){} +function jRc(){} +function KRc(){} +function NRc(){} +function NQc(){} +function LQc(){} +function _Qc(){} +function cPc(){} +function iPc(){} +function kPc(){} +function mPc(){} +function xPc(){} +function zPc(){} +function zSc(){} +function BSc(){} +function GSc(){} +function ISc(){} +function NSc(){} +function TSc(){} +function NTc(){} +function NVc(){} +function oVc(){} +function SVc(){} +function VVc(){} +function XVc(){} +function ZVc(){} +function bWc(){} +function bXc(){} +function CXc(){} +function FXc(){} +function IXc(){} +function MXc(){} +function UXc(){} +function bYc(){} +function fYc(){} +function oYc(){} +function qYc(){} +function uYc(){} +function pZc(){} +function G$c(){} +function h0c(){} +function N0c(){} +function k1c(){} +function I1c(){} +function Q1c(){} +function f2c(){} +function i2c(){} +function k2c(){} +function w2c(){} +function O2c(){} +function S2c(){} +function Z2c(){} +function v3c(){} +function x3c(){} +function R3c(){} +function U3c(){} +function e4c(){} +function w4c(){} +function x4c(){} +function z4c(){} +function B4c(){} +function D4c(){} +function F4c(){} +function H4c(){} +function J4c(){} +function L4c(){} +function N4c(){} +function P4c(){} +function R4c(){} +function T4c(){} +function V4c(){} +function X4c(){} +function Z4c(){} +function _4c(){} +function _7c(){} +function b5c(){} +function d5c(){} +function f5c(){} +function h5c(){} +function H5c(){} +function Hfd(){} +function Zfd(){} +function Zed(){} +function ged(){} +function Jed(){} +function Ned(){} +function Red(){} +function Ved(){} +function bbd(){} +function mdd(){} +function _fd(){} +function fgd(){} +function kgd(){} +function Mgd(){} +function Ahd(){} +function Ald(){} +function Tld(){} +function xkd(){} +function rmd(){} +function knd(){} +function Jod(){} +function JCd(){} +function Bpd(){} +function BFd(){} +function oFd(){} +function bqd(){} +function bvd(){} +function jvd(){} +function yud(){} +function Hxd(){} +function EBd(){} +function aDd(){} +function MGd(){} +function vHd(){} +function RHd(){} +function wNd(){} +function zNd(){} +function CNd(){} +function KNd(){} +function XNd(){} +function $Nd(){} +function HPd(){} +function lUd(){} +function XUd(){} +function DWd(){} +function GWd(){} +function JWd(){} +function MWd(){} +function PWd(){} +function SWd(){} +function VWd(){} +function YWd(){} +function _Wd(){} +function xYd(){} +function BYd(){} +function mZd(){} +function EZd(){} +function GZd(){} +function JZd(){} +function MZd(){} +function PZd(){} +function SZd(){} +function VZd(){} +function YZd(){} +function _Zd(){} +function c$d(){} +function f$d(){} +function i$d(){} +function l$d(){} +function o$d(){} +function r$d(){} +function u$d(){} +function x$d(){} +function A$d(){} +function D$d(){} +function G$d(){} +function J$d(){} +function M$d(){} +function P$d(){} +function S$d(){} +function V$d(){} +function Y$d(){} +function _$d(){} +function c_d(){} +function f_d(){} +function i_d(){} +function l_d(){} +function o_d(){} +function r_d(){} +function u_d(){} +function x_d(){} +function A_d(){} +function D_d(){} +function G_d(){} +function J_d(){} +function M_d(){} +function P_d(){} +function S_d(){} +function V_d(){} +function Y_d(){} +function h5d(){} +function U6d(){} +function U9d(){} +function _8d(){} +function fae(){} +function hae(){} +function kae(){} +function nae(){} +function qae(){} +function tae(){} +function wae(){} +function zae(){} +function Cae(){} +function Fae(){} +function Iae(){} +function Lae(){} +function Oae(){} +function Rae(){} +function Uae(){} +function Xae(){} +function $ae(){} +function bbe(){} +function ebe(){} +function hbe(){} +function kbe(){} +function nbe(){} +function qbe(){} +function tbe(){} +function wbe(){} +function zbe(){} +function Cbe(){} +function Fbe(){} +function Ibe(){} +function Lbe(){} +function Obe(){} +function Rbe(){} +function Ube(){} +function Xbe(){} +function $be(){} +function bce(){} +function ece(){} +function hce(){} +function kce(){} +function nce(){} +function qce(){} +function tce(){} +function wce(){} +function zce(){} +function Cce(){} +function Fce(){} +function Ice(){} +function Lce(){} +function Oce(){} +function Rce(){} +function Uce(){} +function Xce(){} +function ude(){} +function Vge(){} +function dhe(){} +function s_b(a){} +function jSd(a){} +function ol(){wb()} +function oPb(){nPb()} +function EPb(){CPb()} +function gFb(){fFb()} +function TRb(){SRb()} +function ySb(){wSb()} +function PSb(){OSb()} +function dTb(){bTb()} +function i4b(){b4b()} +function D2b(){x2b()} +function J6b(){D6b()} +function u9b(){q9b()} +function $9b(){I9b()} +function Umc(){Imc()} +function abc(){Vac()} +function ZCc(){VCc()} +function kCc(){hCc()} +function rCc(){oCc()} +function Tcc(){Occ()} +function xkc(){gkc()} +function xDc(){rDc()} +function iDc(){cDc()} +function kwc(){jwc()} +function tJc(){jJc()} +function dJc(){aJc()} +function Pyc(){Nyc()} +function VBc(){SBc()} +function CFc(){yFc()} +function CUc(){wUc()} +function lUc(){fUc()} +function sUc(){pUc()} +function IUc(){GUc()} +function IWc(){HWc()} +function _Wc(){ZWc()} +function fHc(){dHc()} +function f0c(){d0c()} +function B0c(){A0c()} +function L0c(){J0c()} +function LTc(){JTc()} +function sTc(){rTc()} +function KLc(){ILc()} +function wNc(){tNc()} +function PYc(){OYc()} +function nZc(){lZc()} +function q3c(){p3c()} +function Z7c(){X7c()} +function Z9c(){Y9c()} +function _ad(){Zad()} +function kdd(){idd()} +function $md(){Smd()} +function HGd(){tGd()} +function hLd(){NKd()} +function J6d(){Uge()} +function Mvb(a){uCb(a)} +function Yb(a){this.a=a} +function cc(a){this.a=a} +function cj(a){this.a=a} +function ij(a){this.a=a} +function Dj(a){this.a=a} +function df(a){this.a=a} +function kf(a){this.a=a} +function ah(a){this.a=a} +function lh(a){this.a=a} +function th(a){this.a=a} +function Ph(a){this.a=a} +function vi(a){this.a=a} +function Ci(a){this.a=a} +function Fk(a){this.a=a} +function Ln(a){this.a=a} +function ap(a){this.a=a} +function zp(a){this.a=a} +function Yp(a){this.a=a} +function qq(a){this.a=a} +function Dq(a){this.a=a} +function wr(a){this.a=a} +function Ir(a){this.b=a} +function sj(a){this.c=a} +function sw(a){this.a=a} +function fw(a){this.a=a} +function xw(a){this.a=a} +function Cw(a){this.a=a} +function Qw(a){this.a=a} +function Rw(a){this.a=a} +function Xw(a){this.a=a} +function Xv(a){this.a=a} +function Sv(a){this.a=a} +function eu(a){this.a=a} +function Zx(a){this.a=a} +function _x(a){this.a=a} +function xy(a){this.a=a} +function xB(a){this.a=a} +function HB(a){this.a=a} +function TB(a){this.a=a} +function fC(a){this.a=a} +function wB(){this.a=[]} +function MBb(a,b){a.a=b} +function w_b(a,b){a.a=b} +function x_b(a,b){a.b=b} +function YOb(a,b){a.b=b} +function $Ob(a,b){a.b=b} +function ZGb(a,b){a.j=b} +function qNb(a,b){a.g=b} +function rNb(a,b){a.i=b} +function dRb(a,b){a.c=b} +function eRb(a,b){a.d=b} +function z_b(a,b){a.d=b} +function y_b(a,b){a.c=b} +function __b(a,b){a.k=b} +function E0b(a,b){a.c=b} +function njc(a,b){a.c=b} +function mjc(a,b){a.a=b} +function dFc(a,b){a.a=b} +function eFc(a,b){a.f=b} +function nOc(a,b){a.a=b} +function oOc(a,b){a.b=b} +function pOc(a,b){a.d=b} +function qOc(a,b){a.i=b} +function rOc(a,b){a.o=b} +function sOc(a,b){a.r=b} +function $Pc(a,b){a.a=b} +function _Pc(a,b){a.b=b} +function DVc(a,b){a.e=b} +function EVc(a,b){a.f=b} +function FVc(a,b){a.g=b} +function SZc(a,b){a.e=b} +function TZc(a,b){a.f=b} +function c$c(a,b){a.f=b} +function bJd(a,b){a.n=b} +function A1d(a,b){a.a=b} +function J1d(a,b){a.a=b} +function B1d(a,b){a.c=b} +function K1d(a,b){a.c=b} +function L1d(a,b){a.d=b} +function M1d(a,b){a.e=b} +function N1d(a,b){a.g=b} +function d2d(a,b){a.a=b} +function e2d(a,b){a.c=b} +function f2d(a,b){a.d=b} +function g2d(a,b){a.e=b} +function h2d(a,b){a.f=b} +function i2d(a,b){a.j=b} +function Z8d(a,b){a.a=b} +function $8d(a,b){a.b=b} +function g9d(a,b){a.a=b} +function Cic(a){a.b=a.a} +function Dg(a){a.c=a.d.d} +function vib(a){this.d=a} +function eib(a){this.a=a} +function Pib(a){this.a=a} +function Vib(a){this.a=a} +function $ib(a){this.a=a} +function mcb(a){this.a=a} +function Mcb(a){this.a=a} +function Xcb(a){this.a=a} +function Ndb(a){this.a=a} +function _db(a){this.a=a} +function teb(a){this.a=a} +function Qeb(a){this.a=a} +function djb(a){this.a=a} +function Gjb(a){this.a=a} +function Njb(a){this.a=a} +function Bjb(a){this.b=a} +function lnb(a){this.b=a} +function Dnb(a){this.b=a} +function anb(a){this.a=a} +function Mob(a){this.a=a} +function Rob(a){this.a=a} +function iob(a){this.c=a} +function olb(a){this.c=a} +function qub(a){this.c=a} +function Tub(a){this.a=a} +function Vub(a){this.a=a} +function Xub(a){this.a=a} +function Zub(a){this.a=a} +function tpb(a){this.a=a} +function _pb(a){this.a=a} +function Wqb(a){this.a=a} +function nsb(a){this.a=a} +function Rxb(a){this.a=a} +function Txb(a){this.a=a} +function Xxb(a){this.a=a} +function bzb(a){this.a=a} +function tzb(a){this.a=a} +function vzb(a){this.a=a} +function xzb(a){this.a=a} +function Kzb(a){this.a=a} +function Ozb(a){this.a=a} +function iAb(a){this.a=a} +function kAb(a){this.a=a} +function mAb(a){this.a=a} +function BAb(a){this.a=a} +function hBb(a){this.a=a} +function jBb(a){this.a=a} +function nBb(a){this.a=a} +function TBb(a){this.a=a} +function XBb(a){this.a=a} +function QCb(a){this.a=a} +function WCb(a){this.a=a} +function _Cb(a){this.a=a} +function dEb(a){this.a=a} +function QGb(a){this.a=a} +function YGb(a){this.a=a} +function tKb(a){this.a=a} +function CLb(a){this.a=a} +function JMb(a){this.a=a} +function RNb(a){this.a=a} +function kQb(a){this.a=a} +function mQb(a){this.a=a} +function FQb(a){this.a=a} +function ETb(a){this.a=a} +function UTb(a){this.a=a} +function dUb(a){this.a=a} +function hUb(a){this.a=a} +function EZb(a){this.a=a} +function j$b(a){this.a=a} +function v$b(a){this.e=a} +function J0b(a){this.a=a} +function M0b(a){this.a=a} +function R0b(a){this.a=a} +function U0b(a){this.a=a} +function i2b(a){this.a=a} +function k2b(a){this.a=a} +function o2b(a){this.a=a} +function s2b(a){this.a=a} +function G2b(a){this.a=a} +function I2b(a){this.a=a} +function K2b(a){this.a=a} +function M2b(a){this.a=a} +function W3b(a){this.a=a} +function $3b(a){this.a=a} +function V4b(a){this.a=a} +function u5b(a){this.a=a} +function A7b(a){this.a=a} +function G7b(a){this.a=a} +function J7b(a){this.a=a} +function M7b(a){this.a=a} +function Mbc(a){this.a=a} +function Pbc(a){this.a=a} +function lac(a){this.a=a} +function nac(a){this.a=a} +function qcc(a){this.a=a} +function Gdc(a){this.a=a} +function $dc(a){this.a=a} +function cec(a){this.a=a} +function _ec(a){this.a=a} +function pfc(a){this.a=a} +function Bfc(a){this.a=a} +function Lfc(a){this.a=a} +function ygc(a){this.a=a} +function Dgc(a){this.a=a} +function shc(a){this.a=a} +function uhc(a){this.a=a} +function whc(a){this.a=a} +function Chc(a){this.a=a} +function Ehc(a){this.a=a} +function Ohc(a){this.a=a} +function Yhc(a){this.a=a} +function Tkc(a){this.a=a} +function Vkc(a){this.a=a} +function Olc(a){this.a=a} +function pnc(a){this.a=a} +function rnc(a){this.a=a} +function dpc(a){this.a=a} +function fpc(a){this.a=a} +function GCc(a){this.a=a} +function KCc(a){this.a=a} +function mDc(a){this.a=a} +function jEc(a){this.a=a} +function HEc(a){this.a=a} +function FEc(a){this.c=a} +function qoc(a){this.b=a} +function bFc(a){this.a=a} +function GFc(a){this.a=a} +function iGc(a){this.a=a} +function kGc(a){this.a=a} +function mGc(a){this.a=a} +function $Gc(a){this.a=a} +function hIc(a){this.a=a} +function lIc(a){this.a=a} +function pIc(a){this.a=a} +function tIc(a){this.a=a} +function xIc(a){this.a=a} +function zIc(a){this.a=a} +function CIc(a){this.a=a} +function LIc(a){this.a=a} +function CKc(a){this.a=a} +function IKc(a){this.a=a} +function MKc(a){this.a=a} +function $Kc(a){this.a=a} +function cLc(a){this.a=a} +function jLc(a){this.a=a} +function rLc(a){this.a=a} +function xLc(a){this.a=a} +function OMc(a){this.a=a} +function ZOc(a){this.a=a} +function ZRc(a){this.a=a} +function aSc(a){this.a=a} +function I$c(a){this.a=a} +function K$c(a){this.a=a} +function M$c(a){this.a=a} +function O$c(a){this.a=a} +function U$c(a){this.a=a} +function n1c(a){this.a=a} +function z1c(a){this.a=a} +function B1c(a){this.a=a} +function Q2c(a){this.a=a} +function U2c(a){this.a=a} +function z3c(a){this.a=a} +function med(a){this.a=a} +function Xed(a){this.a=a} +function _ed(a){this.a=a} +function Qfd(a){this.a=a} +function Bgd(a){this.a=a} +function $gd(a){this.a=a} +function lrd(a){this.a=a} +function urd(a){this.a=a} +function vrd(a){this.a=a} +function wrd(a){this.a=a} +function xrd(a){this.a=a} +function yrd(a){this.a=a} +function zrd(a){this.a=a} +function Ard(a){this.a=a} +function Brd(a){this.a=a} +function Crd(a){this.a=a} +function Ird(a){this.a=a} +function Krd(a){this.a=a} +function Lrd(a){this.a=a} +function Mrd(a){this.a=a} +function Nrd(a){this.a=a} +function Prd(a){this.a=a} +function Srd(a){this.a=a} +function Yrd(a){this.a=a} +function Zrd(a){this.a=a} +function _rd(a){this.a=a} +function asd(a){this.a=a} +function bsd(a){this.a=a} +function csd(a){this.a=a} +function dsd(a){this.a=a} +function msd(a){this.a=a} +function osd(a){this.a=a} +function qsd(a){this.a=a} +function ssd(a){this.a=a} +function Wsd(a){this.a=a} +function Lsd(a){this.b=a} +function thd(a){this.f=a} +function qtd(a){this.a=a} +function yBd(a){this.a=a} +function GBd(a){this.a=a} +function MBd(a){this.a=a} +function SBd(a){this.a=a} +function iCd(a){this.a=a} +function YMd(a){this.a=a} +function GNd(a){this.a=a} +function EPd(a){this.a=a} +function EQd(a){this.a=a} +function NTd(a){this.a=a} +function qOd(a){this.b=a} +function lVd(a){this.c=a} +function VVd(a){this.e=a} +function iYd(a){this.a=a} +function RYd(a){this.a=a} +function ZYd(a){this.a=a} +function z0d(a){this.a=a} +function O0d(a){this.a=a} +function s0d(a){this.d=a} +function W5d(a){this.a=a} +function cge(a){this.a=a} +function xfe(a){this.e=a} +function Tfd(){this.a=0} +function jkb(){Vjb(this)} +function Rkb(){Ckb(this)} +function Lqb(){Uhb(this)} +function lEb(){kEb(this)} +function A_b(){s_b(this)} +function UQd(){this.c=FQd} +function v6d(a,b){b.Wb(a)} +function moc(a,b){a.b+=b} +function yXb(a){a.b=new Ji} +function vbb(a){return a.e} +function DB(a){return a.a} +function LB(a){return a.a} +function ZB(a){return a.a} +function lC(a){return a.a} +function EC(a){return a.a} +function wC(){return null} +function SB(){return null} +function hcb(){mvd();ovd()} +function zJb(a){a.b.tf(a.e)} +function j5b(a,b){a.b=b-a.b} +function g5b(a,b){a.a=b-a.a} +function PXc(a,b){b.ad(a.a)} +function plc(a,b){G0b(b,a)} +function hp(a,b,c){a.Od(c,b)} +function As(a,b){a.e=b;b.b=a} +function Zl(a){Ql();this.a=a} +function jq(a){Ql();this.a=a} +function sq(a){Ql();this.a=a} +function Fq(a){im();this.a=a} +function Sz(a){Rz();Qz.be(a)} +function gz(){Xy.call(this)} +function xcb(){Xy.call(this)} +function pcb(){gz.call(this)} +function tcb(){gz.call(this)} +function Bdb(){gz.call(this)} +function Vdb(){gz.call(this)} +function Ydb(){gz.call(this)} +function Geb(){gz.call(this)} +function bgb(){gz.call(this)} +function Apb(){gz.call(this)} +function Jpb(){gz.call(this)} +function utb(){gz.call(this)} +function x2c(){gz.call(this)} +function rQd(){this.a=this} +function MPd(){this.Bb|=256} +function tTb(){this.b=new mt} +function fA(){fA=ccb;new Lqb} +function rcb(){pcb.call(this)} +function dCb(a,b){a.length=b} +function Tvb(a,b){Ekb(a.a,b)} +function sKb(a,b){UHb(a.c,b)} +function SMc(a,b){Qqb(a.b,b)} +function vBd(a,b){uAd(a.a,b)} +function wBd(a,b){vAd(a.a,b)} +function GLd(a,b){Uhd(a.e,b)} +function d7d(a){D2d(a.c,a.b)} +function mj(a,b){a.kc().Nb(b)} +function Odb(a){this.a=Tdb(a)} +function Tqb(){this.a=new Lqb} +function gyb(){this.a=new Lqb} +function Wvb(){this.a=new Rkb} +function KFb(){this.a=new Rkb} +function PFb(){this.a=new Rkb} +function FFb(){this.a=new yFb} +function pGb(){this.a=new MFb} +function ZQb(){this.a=new MQb} +function Gxb(){this.a=new Pwb} +function jUb(){this.a=new PTb} +function sDb(){this.a=new oDb} +function zDb(){this.a=new tDb} +function CWb(){this.a=new Rkb} +function HXb(){this.a=new Rkb} +function nYb(){this.a=new Rkb} +function BYb(){this.a=new Rkb} +function fLb(){this.d=new Rkb} +function vYb(){this.a=new Tqb} +function a2b(){this.a=new Lqb} +function wZb(){this.b=new Lqb} +function TCc(){this.b=new Rkb} +function zJc(){this.e=new Rkb} +function uMc(){this.d=new Rkb} +function wdc(){this.a=new xkc} +function vKc(){Rkb.call(this)} +function twb(){Wvb.call(this)} +function oHb(){$Gb.call(this)} +function LXb(){HXb.call(this)} +function L_b(){H_b.call(this)} +function H_b(){A_b.call(this)} +function p0b(){A_b.call(this)} +function s0b(){p0b.call(this)} +function WMc(){VMc.call(this)} +function bNc(){VMc.call(this)} +function EPc(){CPc.call(this)} +function JPc(){CPc.call(this)} +function OPc(){CPc.call(this)} +function w1c(){s1c.call(this)} +function s7c(){Psb.call(this)} +function apd(){Ald.call(this)} +function ppd(){Ald.call(this)} +function lDd(){YCd.call(this)} +function NDd(){YCd.call(this)} +function mFd(){Lqb.call(this)} +function vFd(){Lqb.call(this)} +function GFd(){Lqb.call(this)} +function KPd(){Tqb.call(this)} +function OJd(){hJd.call(this)} +function aQd(){MPd.call(this)} +function SSd(){FId.call(this)} +function rUd(){FId.call(this)} +function oUd(){Lqb.call(this)} +function NYd(){Lqb.call(this)} +function cZd(){Lqb.call(this)} +function R8d(){MGd.call(this)} +function o9d(){MGd.call(this)} +function i9d(){R8d.call(this)} +function hee(){ude.call(this)} +function Dd(a){yd.call(this,a)} +function Hd(a){yd.call(this,a)} +function ph(a){lh.call(this,a)} +function Sh(a){Wc.call(this,a)} +function oi(a){Sh.call(this,a)} +function Ii(a){Wc.call(this,a)} +function Zdd(){this.a=new Psb} +function CPc(){this.a=new Tqb} +function s1c(){this.a=new Lqb} +function QSc(){this.a=new Rkb} +function D2c(){this.j=new Rkb} +function QXc(){this.a=new UXc} +function e_c(){this.a=new d_c} +function YCd(){this.a=new aDd} +function _k(){_k=ccb;$k=new al} +function Lk(){Lk=ccb;Kk=new Mk} +function wb(){wb=ccb;vb=new xb} +function hs(){hs=ccb;gs=new is} +function rs(a){Sh.call(this,a)} +function Gp(a){Sh.call(this,a)} +function xp(a){Lo.call(this,a)} +function Ep(a){Lo.call(this,a)} +function Tp(a){Wn.call(this,a)} +function wx(a){un.call(this,a)} +function ov(a){dv.call(this,a)} +function Mv(a){Br.call(this,a)} +function Ov(a){Br.call(this,a)} +function Lw(a){Br.call(this,a)} +function hz(a){Yy.call(this,a)} +function MB(a){hz.call(this,a)} +function eC(){fC.call(this,{})} +function Ftb(a){Atb();this.a=a} +function zwb(a){a.b=null;a.c=0} +function Vy(a,b){a.e=b;Sy(a,b)} +function LVb(a,b){a.a=b;NVb(a)} +function lIb(a,b,c){a.a[b.g]=c} +function vfd(a,b,c){Dfd(c,a,b)} +function Odc(a,b){rjc(b.i,a.n)} +function Wyc(a,b){Xyc(a).td(b)} +function ERb(a,b){return a*a/b} +function Xr(a,b){return a.g-b.g} +function tC(a){return new TB(a)} +function vC(a){return new yC(a)} +function ocb(a){hz.call(this,a)} +function qcb(a){hz.call(this,a)} +function ucb(a){hz.call(this,a)} +function vcb(a){Yy.call(this,a)} +function fGc(a){LFc();this.a=a} +function c0d(a){kzd();this.a=a} +function bhd(a){Rgd();this.f=a} +function dhd(a){Rgd();this.f=a} +function Cdb(a){hz.call(this,a)} +function Wdb(a){hz.call(this,a)} +function Zdb(a){hz.call(this,a)} +function Feb(a){hz.call(this,a)} +function Heb(a){hz.call(this,a)} +function Ccb(a){return uCb(a),a} +function Edb(a){return uCb(a),a} +function Gdb(a){return uCb(a),a} +function jfb(a){return uCb(a),a} +function tfb(a){return uCb(a),a} +function akb(a){return a.b==a.c} +function Hwb(a){return !!a&&a.b} +function pIb(a){return !!a&&a.k} +function qIb(a){return !!a&&a.j} +function amb(a){uCb(a);this.a=a} +function wVb(a){qVb(a);return a} +function Blb(a){Glb(a,a.length)} +function cgb(a){hz.call(this,a)} +function cqd(a){hz.call(this,a)} +function n8d(a){hz.call(this,a)} +function y2c(a){hz.call(this,a)} +function z2c(a){hz.call(this,a)} +function mde(a){hz.call(this,a)} +function pc(a){qc.call(this,a,0)} +function Ji(){Ki.call(this,12,3)} +function Kz(){Kz=ccb;Jz=new Nz} +function jz(){jz=ccb;iz=new nb} +function KA(){KA=ccb;JA=new MA} +function OB(){OB=ccb;NB=new PB} +function jc(){throw vbb(new bgb)} +function zh(){throw vbb(new bgb)} +function Pi(){throw vbb(new bgb)} +function Pj(){throw vbb(new bgb)} +function Qj(){throw vbb(new bgb)} +function Ym(){throw vbb(new bgb)} +function Gb(){this.a=GD(Qb(She))} +function oy(a){Ql();this.a=Qb(a)} +function Bs(a,b){a.Td(b);b.Sd(a)} +function iw(a,b){a.a.ec().Mc(b)} +function CYb(a,b,c){a.c.lf(b,c)} +function scb(a){qcb.call(this,a)} +function Oeb(a){Wdb.call(this,a)} +function Hfb(){mcb.call(this,'')} +function Ifb(){mcb.call(this,'')} +function Ufb(){mcb.call(this,'')} +function Vfb(){mcb.call(this,'')} +function Xfb(a){qcb.call(this,a)} +function zob(a){lnb.call(this,a)} +function Yob(a){Inb.call(this,a)} +function Gob(a){zob.call(this,a)} +function Mk(){Fk.call(this,null)} +function al(){Fk.call(this,null)} +function Az(){Az=ccb;!!(Rz(),Qz)} +function wrb(){wrb=ccb;vrb=yrb()} +function Mtb(a){return a.a?a.b:0} +function Vtb(a){return a.a?a.b:0} +function Lcb(a,b){return a.a-b.a} +function Wcb(a,b){return a.a-b.a} +function Peb(a,b){return a.a-b.a} +function eCb(a,b){return PC(a,b)} +function GC(a,b){return rdb(a,b)} +function _B(b,a){return a in b.a} +function _Db(a,b){a.f=b;return a} +function ZDb(a,b){a.b=b;return a} +function $Db(a,b){a.c=b;return a} +function aEb(a,b){a.g=b;return a} +function HGb(a,b){a.a=b;return a} +function IGb(a,b){a.f=b;return a} +function JGb(a,b){a.k=b;return a} +function dLb(a,b){a.a=b;return a} +function eLb(a,b){a.e=b;return a} +function zVb(a,b){a.e=b;return a} +function AVb(a,b){a.f=b;return a} +function KOb(a,b){a.b=true;a.d=b} +function DHb(a,b){a.b=new g7c(b)} +function uvb(a,b,c){b.td(a.a[c])} +function zvb(a,b,c){b.we(a.a[c])} +function wJc(a,b){return a.b-b.b} +function kOc(a,b){return a.g-b.g} +function WQc(a,b){return a.s-b.s} +function Lic(a,b){return a?0:b-1} +function SFc(a,b){return a?0:b-1} +function RFc(a,b){return a?b-1:0} +function M2c(a,b){return b.Yf(a)} +function M3c(a,b){a.b=b;return a} +function L3c(a,b){a.a=b;return a} +function N3c(a,b){a.c=b;return a} +function O3c(a,b){a.d=b;return a} +function P3c(a,b){a.e=b;return a} +function Q3c(a,b){a.f=b;return a} +function b4c(a,b){a.a=b;return a} +function c4c(a,b){a.b=b;return a} +function d4c(a,b){a.c=b;return a} +function z5c(a,b){a.c=b;return a} +function y5c(a,b){a.b=b;return a} +function A5c(a,b){a.d=b;return a} +function B5c(a,b){a.e=b;return a} +function C5c(a,b){a.f=b;return a} +function D5c(a,b){a.g=b;return a} +function E5c(a,b){a.a=b;return a} +function F5c(a,b){a.i=b;return a} +function G5c(a,b){a.j=b;return a} +function Vdd(a,b){a.k=b;return a} +function Wdd(a,b){a.j=b;return a} +function ykc(a,b){gkc();F0b(b,a)} +function T$c(a,b,c){R$c(a.a,b,c)} +function RGc(a){cEc.call(this,a)} +function iHc(a){cEc.call(this,a)} +function t7c(a){Qsb.call(this,a)} +function aPb(a){_Ob.call(this,a)} +function Ixd(a){zud.call(this,a)} +function dCd(a){ZBd.call(this,a)} +function fCd(a){ZBd.call(this,a)} +function p_b(){q_b.call(this,'')} +function d7c(){this.a=0;this.b=0} +function aPc(){this.b=0;this.a=0} +function NJd(a,b){a.b=0;DId(a,b)} +function X1d(a,b){a.c=b;a.b=true} +function Oc(a,b){return a.c._b(b)} +function gdb(a){return a.e&&a.e()} +function Vd(a){return !a?null:a.d} +function sn(a,b){return Gv(a.b,b)} +function Fv(a){return !a?null:a.g} +function Kv(a){return !a?null:a.i} +function hdb(a){fdb(a);return a.o} +function Fhd(){Fhd=ccb;Ehd=ond()} +function Hhd(){Hhd=ccb;Ghd=Cod()} +function LFd(){LFd=ccb;KFd=qZd()} +function p8d(){p8d=ccb;o8d=Y9d()} +function r8d(){r8d=ccb;q8d=dae()} +function mvd(){mvd=ccb;lvd=n4c()} +function Srb(){throw vbb(new bgb)} +function enb(){throw vbb(new bgb)} +function fnb(){throw vbb(new bgb)} +function gnb(){throw vbb(new bgb)} +function jnb(){throw vbb(new bgb)} +function Cnb(){throw vbb(new bgb)} +function Uqb(a){this.a=new Mqb(a)} +function tgb(a){lgb();ngb(this,a)} +function Hxb(a){this.a=new Qwb(a)} +function _ub(a,b){while(a.ye(b));} +function Sub(a,b){while(a.sd(b));} +function Bfb(a,b){a.a+=b;return a} +function Cfb(a,b){a.a+=b;return a} +function Ffb(a,b){a.a+=b;return a} +function Lfb(a,b){a.a+=b;return a} +function WAb(a){Tzb(a);return a.a} +function Wsb(a){return a.b!=a.d.c} +function pD(a){return a.l|a.m<<22} +function aIc(a,b){return a.d[b.p]} +function h2c(a,b){return c2c(a,b)} +function cCb(a,b,c){a.splice(b,c)} +function WHb(a){a.c?VHb(a):XHb(a)} +function jVc(a){this.a=0;this.b=a} +function ZUc(){this.a=new L2c(K$)} +function tRc(){this.b=new L2c(h$)} +function Q$c(){this.b=new L2c(J_)} +function d_c(){this.b=new L2c(J_)} +function OCd(){throw vbb(new bgb)} +function PCd(){throw vbb(new bgb)} +function QCd(){throw vbb(new bgb)} +function RCd(){throw vbb(new bgb)} +function SCd(){throw vbb(new bgb)} +function TCd(){throw vbb(new bgb)} +function UCd(){throw vbb(new bgb)} +function VCd(){throw vbb(new bgb)} +function WCd(){throw vbb(new bgb)} +function XCd(){throw vbb(new bgb)} +function ahe(){throw vbb(new utb)} +function bhe(){throw vbb(new utb)} +function Rge(a){this.a=new ege(a)} +function ege(a){dge(this,a,Vee())} +function Fhe(a){return !a||Ehe(a)} +function dde(a){return $ce[a]!=-1} +function Iz(){xz!=0&&(xz=0);zz=-1} +function Ybb(){Wbb==null&&(Wbb=[])} +function ONd(a,b){Rxd(ZKd(a.a),b)} +function TNd(a,b){Rxd(ZKd(a.a),b)} +function Yf(a,b){zf.call(this,a,b)} +function $f(a,b){Yf.call(this,a,b)} +function Hf(a,b){this.b=a;this.c=b} +function rk(a,b){this.b=a;this.a=b} +function ek(a,b){this.a=a;this.b=b} +function gk(a,b){this.a=a;this.b=b} +function pk(a,b){this.a=a;this.b=b} +function yk(a,b){this.a=a;this.b=b} +function Ak(a,b){this.a=a;this.b=b} +function Fj(a,b){this.a=a;this.b=b} +function _j(a,b){this.a=a;this.b=b} +function dr(a,b){this.a=a;this.b=b} +function zr(a,b){this.b=a;this.a=b} +function So(a,b){this.b=a;this.a=b} +function qp(a,b){this.b=a;this.a=b} +function $q(a,b){this.b=a;this.a=b} +function $r(a,b){this.f=a;this.g=b} +function ne(a,b){this.e=a;this.d=b} +function Wo(a,b){this.g=a;this.i=b} +function bu(a,b){this.a=a;this.b=b} +function qu(a,b){this.a=a;this.f=b} +function qv(a,b){this.b=a;this.c=b} +function ox(a,b){this.a=a;this.b=b} +function Px(a,b){this.a=a;this.b=b} +function mC(a,b){this.a=a;this.b=b} +function Wc(a){Lb(a.dc());this.c=a} +function rf(a){this.b=BD(Qb(a),83)} +function Zv(a){this.a=BD(Qb(a),83)} +function dv(a){this.a=BD(Qb(a),15)} +function $u(a){this.a=BD(Qb(a),15)} +function Br(a){this.b=BD(Qb(a),47)} +function eB(){this.q=new $wnd.Date} +function Zfb(){Zfb=ccb;Yfb=new jcb} +function Emb(){Emb=ccb;Dmb=new Fmb} +function Vhb(a){return a.f.c+a.g.c} +function hnb(a,b){return a.b.Hc(b)} +function inb(a,b){return a.b.Ic(b)} +function knb(a,b){return a.b.Qc(b)} +function Dob(a,b){return a.b.Hc(b)} +function dob(a,b){return a.c.uc(b)} +function Rqb(a,b){return a.a._b(b)} +function fob(a,b){return pb(a.c,b)} +function jt(a,b){return Mhb(a.b,b)} +function Lp(a,b){return a>b&&b<Iie} +function Ryb(a,b){return a.Gc(b),a} +function Syb(a,b){return ye(a,b),a} +function sC(a){return GB(),a?FB:EB} +function Mqb(a){Whb.call(this,a,0)} +function Pwb(){Qwb.call(this,null)} +function yAb(){Vzb.call(this,null)} +function Gqb(a){this.c=a;Dqb(this)} +function Psb(){Csb(this);Osb(this)} +function MAb(a,b){Tzb(a);a.a.Nb(b)} +function Myb(a,b){a.Gc(b);return a} +function qDb(a,b){a.a.f=b;return a} +function wDb(a,b){a.a.d=b;return a} +function xDb(a,b){a.a.g=b;return a} +function yDb(a,b){a.a.j=b;return a} +function BFb(a,b){a.a.a=b;return a} +function CFb(a,b){a.a.d=b;return a} +function DFb(a,b){a.a.e=b;return a} +function EFb(a,b){a.a.g=b;return a} +function oGb(a,b){a.a.f=b;return a} +function TGb(a){a.b=false;return a} +function Ltb(){Ltb=ccb;Ktb=new Otb} +function Utb(){Utb=ccb;Ttb=new Wtb} +function $xb(){$xb=ccb;Zxb=new byb} +function $Yb(){$Yb=ccb;ZYb=new dZb} +function cPb(){cPb=ccb;bPb=new dPb} +function EAb(){EAb=ccb;DAb=new PBb} +function a$b(){a$b=ccb;_Zb=new P$b} +function FDb(){FDb=ccb;EDb=new GDb} +function xUb(){xUb=ccb;wUb=new DUb} +function x2b(){x2b=ccb;w2b=new d7c} +function iVb(){iVb=ccb;hVb=new jVb} +function nVb(){nVb=ccb;mVb=new OVb} +function LWb(){LWb=ccb;KWb=new QWb} +function b4b(){b4b=ccb;a4b=new l4b} +function q9b(){q9b=ccb;p9b=new w9b} +function qgc(){qgc=ccb;pgc=new dic} +function Imc(){Imc=ccb;Hmc=new Wmc} +function GUc(){GUc=ccb;FUc=new j3c} +function i_c(){i_c=ccb;h_c=new k_c} +function s_c(){s_c=ccb;r_c=new t_c} +function R0c(){R0c=ccb;Q0c=new T0c} +function Vyc(){Vyc=ccb;Uyc=new Ved} +function DCc(){vCc();this.c=new Ji} +function k_c(){$r.call(this,Une,0)} +function r4c(a,b){Xrb(a.c.b,b.c,b)} +function s4c(a,b){Xrb(a.c.c,b.b,b)} +function B3c(a,b,c){Shb(a.d,b.f,c)} +function kKb(a,b,c,d){jKb(a,d,b,c)} +function E3b(a,b,c,d){J3b(d,a,b,c)} +function e9b(a,b,c,d){f9b(d,a,b,c)} +function g3c(a,b){a.a=b.g;return a} +function DQd(a,b){return qA(a.a,b)} +function nQd(a){return a.b?a.b:a.a} +function $Oc(a){return (a.c+a.a)/2} +function Pgd(){Pgd=ccb;Ogd=new Ahd} +function AFd(){AFd=ccb;zFd=new BFd} +function tFd(){tFd=ccb;sFd=new vFd} +function EFd(){EFd=ccb;DFd=new GFd} +function yFd(){yFd=ccb;xFd=new oUd} +function JFd(){JFd=ccb;IFd=new cZd} +function nRd(){nRd=ccb;mRd=new u4d} +function LRd(){LRd=ccb;KRd=new y4d} +function g5d(){g5d=ccb;f5d=new h5d} +function Q6d(){Q6d=ccb;P6d=new U6d} +function pEd(){pEd=ccb;oEd=new Lqb} +function tZd(){tZd=ccb;rZd=new Rkb} +function Xge(){Xge=ccb;Wge=new dhe} +function Hz(a){$wnd.clearTimeout(a)} +function jw(a){this.a=BD(Qb(a),224)} +function Lv(a){return BD(a,42).cd()} +function sib(a){return a.b<a.d.gc()} +function Lpb(a,b){return tqb(a.a,b)} +function Dbb(a,b){return ybb(a,b)>0} +function Gbb(a,b){return ybb(a,b)<0} +function Crb(a,b){return a.a.get(b)} +function icb(b,a){return a.split(b)} +function Vrb(a,b){return Mhb(a.e,b)} +function Nvb(a){return uCb(a),false} +function Rub(a){Kub.call(this,a,21)} +function wcb(a,b){Zy.call(this,a,b)} +function mxb(a,b){$r.call(this,a,b)} +function Gyb(a,b){$r.call(this,a,b)} +function zx(a){yx();Wn.call(this,a)} +function zlb(a,b){Dlb(a,a.length,b)} +function Alb(a,b){Flb(a,a.length,b)} +function ABb(a,b,c){b.ud(a.a.Ge(c))} +function uBb(a,b,c){b.we(a.a.Fe(c))} +function GBb(a,b,c){b.td(a.a.Kb(c))} +function Zq(a,b,c){a.Mb(c)&&b.td(c)} +function aCb(a,b,c){a.splice(b,0,c)} +function lDb(a,b){return uqb(a.e,b)} +function pjb(a,b){this.d=a;this.e=b} +function kqb(a,b){this.b=a;this.a=b} +function VBb(a,b){this.b=a;this.a=b} +function BEb(a,b){this.b=a;this.a=b} +function sBb(a,b){this.a=a;this.b=b} +function yBb(a,b){this.a=a;this.b=b} +function EBb(a,b){this.a=a;this.b=b} +function KBb(a,b){this.a=a;this.b=b} +function aDb(a,b){this.a=a;this.b=b} +function tMb(a,b){this.b=a;this.a=b} +function oOb(a,b){this.b=a;this.a=b} +function SOb(a,b){$r.call(this,a,b)} +function SMb(a,b){$r.call(this,a,b)} +function NEb(a,b){$r.call(this,a,b)} +function VEb(a,b){$r.call(this,a,b)} +function sFb(a,b){$r.call(this,a,b)} +function hHb(a,b){$r.call(this,a,b)} +function OHb(a,b){$r.call(this,a,b)} +function FIb(a,b){$r.call(this,a,b)} +function wLb(a,b){$r.call(this,a,b)} +function YRb(a,b){$r.call(this,a,b)} +function zTb(a,b){$r.call(this,a,b)} +function rUb(a,b){$r.call(this,a,b)} +function oWb(a,b){$r.call(this,a,b)} +function SXb(a,b){$r.call(this,a,b)} +function k0b(a,b){$r.call(this,a,b)} +function z5b(a,b){$r.call(this,a,b)} +function T8b(a,b){$r.call(this,a,b)} +function ibc(a,b){$r.call(this,a,b)} +function Cec(a,b){this.a=a;this.b=b} +function rfc(a,b){this.a=a;this.b=b} +function Rfc(a,b){this.a=a;this.b=b} +function Tfc(a,b){this.a=a;this.b=b} +function bgc(a,b){this.a=a;this.b=b} +function ngc(a,b){this.a=a;this.b=b} +function Qhc(a,b){this.a=a;this.b=b} +function $hc(a,b){this.a=a;this.b=b} +function Z0b(a,b){this.a=a;this.b=b} +function ZVb(a,b){this.b=a;this.a=b} +function Dfc(a,b){this.b=a;this.a=b} +function dgc(a,b){this.b=a;this.a=b} +function Bmc(a,b){this.b=a;this.a=b} +function cWb(a,b){this.c=a;this.d=b} +function I$b(a,b){this.e=a;this.d=b} +function Unc(a,b){this.a=a;this.b=b} +function Oic(a,b){this.b=b;this.c=a} +function Bjc(a,b){$r.call(this,a,b)} +function Yjc(a,b){$r.call(this,a,b)} +function Gkc(a,b){$r.call(this,a,b)} +function Bpc(a,b){$r.call(this,a,b)} +function Jpc(a,b){$r.call(this,a,b)} +function Tpc(a,b){$r.call(this,a,b)} +function cqc(a,b){$r.call(this,a,b)} +function oqc(a,b){$r.call(this,a,b)} +function yqc(a,b){$r.call(this,a,b)} +function Hqc(a,b){$r.call(this,a,b)} +function Uqc(a,b){$r.call(this,a,b)} +function arc(a,b){$r.call(this,a,b)} +function mrc(a,b){$r.call(this,a,b)} +function zrc(a,b){$r.call(this,a,b)} +function Prc(a,b){$r.call(this,a,b)} +function Yrc(a,b){$r.call(this,a,b)} +function fsc(a,b){$r.call(this,a,b)} +function nsc(a,b){$r.call(this,a,b)} +function nzc(a,b){$r.call(this,a,b)} +function zzc(a,b){$r.call(this,a,b)} +function Kzc(a,b){$r.call(this,a,b)} +function Xzc(a,b){$r.call(this,a,b)} +function Dtc(a,b){$r.call(this,a,b)} +function lAc(a,b){$r.call(this,a,b)} +function uAc(a,b){$r.call(this,a,b)} +function CAc(a,b){$r.call(this,a,b)} +function LAc(a,b){$r.call(this,a,b)} +function UAc(a,b){$r.call(this,a,b)} +function aBc(a,b){$r.call(this,a,b)} +function uBc(a,b){$r.call(this,a,b)} +function DBc(a,b){$r.call(this,a,b)} +function MBc(a,b){$r.call(this,a,b)} +function sGc(a,b){$r.call(this,a,b)} +function VIc(a,b){$r.call(this,a,b)} +function EIc(a,b){this.b=a;this.a=b} +function qKc(a,b){this.a=a;this.b=b} +function GKc(a,b){this.a=a;this.b=b} +function lLc(a,b){this.a=a;this.b=b} +function mMc(a,b){this.a=a;this.b=b} +function fMc(a,b){$r.call(this,a,b)} +function ZLc(a,b){$r.call(this,a,b)} +function ZMc(a,b){this.b=a;this.d=b} +function IOc(a,b){$r.call(this,a,b)} +function GQc(a,b){$r.call(this,a,b)} +function PQc(a,b){this.a=a;this.b=b} +function RQc(a,b){this.a=a;this.b=b} +function ARc(a,b){$r.call(this,a,b)} +function rSc(a,b){$r.call(this,a,b)} +function TTc(a,b){$r.call(this,a,b)} +function _Tc(a,b){$r.call(this,a,b)} +function RUc(a,b){$r.call(this,a,b)} +function uVc(a,b){$r.call(this,a,b)} +function hWc(a,b){$r.call(this,a,b)} +function rWc(a,b){$r.call(this,a,b)} +function kXc(a,b){$r.call(this,a,b)} +function uXc(a,b){$r.call(this,a,b)} +function AYc(a,b){$r.call(this,a,b)} +function l$c(a,b){$r.call(this,a,b)} +function Z$c(a,b){$r.call(this,a,b)} +function D_c(a,b){$r.call(this,a,b)} +function O_c(a,b){$r.call(this,a,b)} +function c1c(a,b){$r.call(this,a,b)} +function cVb(a,b){return uqb(a.c,b)} +function nnc(a,b){return uqb(b.b,a)} +function x1c(a,b){return -a.b.Je(b)} +function D3c(a,b){return uqb(a.g,b)} +function O5c(a,b){$r.call(this,a,b)} +function a6c(a,b){$r.call(this,a,b)} +function m2c(a,b){this.a=a;this.b=b} +function W2c(a,b){this.a=a;this.b=b} +function f7c(a,b){this.a=a;this.b=b} +function G7c(a,b){$r.call(this,a,b)} +function j8c(a,b){$r.call(this,a,b)} +function iad(a,b){$r.call(this,a,b)} +function rad(a,b){$r.call(this,a,b)} +function Bad(a,b){$r.call(this,a,b)} +function Nad(a,b){$r.call(this,a,b)} +function ibd(a,b){$r.call(this,a,b)} +function tbd(a,b){$r.call(this,a,b)} +function Ibd(a,b){$r.call(this,a,b)} +function Ubd(a,b){$r.call(this,a,b)} +function gcd(a,b){$r.call(this,a,b)} +function scd(a,b){$r.call(this,a,b)} +function Ycd(a,b){$r.call(this,a,b)} +function udd(a,b){$r.call(this,a,b)} +function Jdd(a,b){$r.call(this,a,b)} +function Eed(a,b){$r.call(this,a,b)} +function bfd(a,b){this.a=a;this.b=b} +function dfd(a,b){this.a=a;this.b=b} +function ffd(a,b){this.a=a;this.b=b} +function Kfd(a,b){this.a=a;this.b=b} +function Mfd(a,b){this.a=a;this.b=b} +function Ofd(a,b){this.a=a;this.b=b} +function vgd(a,b){this.a=a;this.b=b} +function qgd(a,b){$r.call(this,a,b)} +function jrd(a,b){this.a=a;this.b=b} +function krd(a,b){this.a=a;this.b=b} +function mrd(a,b){this.a=a;this.b=b} +function nrd(a,b){this.a=a;this.b=b} +function qrd(a,b){this.a=a;this.b=b} +function rrd(a,b){this.a=a;this.b=b} +function srd(a,b){this.b=a;this.a=b} +function trd(a,b){this.b=a;this.a=b} +function Drd(a,b){this.b=a;this.a=b} +function Frd(a,b){this.b=a;this.a=b} +function Hrd(a,b){this.a=a;this.b=b} +function Jrd(a,b){this.a=a;this.b=b} +function Ord(a,b){Xqd(a.a,BD(b,56))} +function BIc(a,b){gIc(a.a,BD(b,11))} +function fIc(a,b){FHc();return b!=a} +function Arb(){wrb();return new vrb} +function CMc(){wMc();this.b=new Tqb} +function NNc(){FNc();this.a=new Tqb} +function eCc(){ZBc();aCc.call(this)} +function Dsd(a,b){$r.call(this,a,b)} +function Urd(a,b){this.a=a;this.b=b} +function Wrd(a,b){this.a=a;this.b=b} +function kGd(a,b){this.a=a;this.b=b} +function nGd(a,b){this.a=a;this.b=b} +function bUd(a,b){this.a=a;this.b=b} +function zVd(a,b){this.a=a;this.b=b} +function C1d(a,b){this.d=a;this.b=b} +function MLd(a,b){this.d=a;this.e=b} +function Wud(a,b){this.f=a;this.c=b} +function f7d(a,b){this.b=a;this.c=b} +function _zd(a,b){this.i=a;this.g=b} +function Y1d(a,b){this.e=a;this.a=b} +function c8d(a,b){this.a=a;this.b=b} +function $Id(a,b){a.i=null;_Id(a,b)} +function ivd(a,b){!!a&&Rhb(cvd,a,b)} +function hCd(a,b){return qAd(a.a,b)} +function e7d(a){return R2d(a.c,a.b)} +function Wd(a){return !a?null:a.dd()} +function PD(a){return a==null?null:a} +function KD(a){return typeof a===Khe} +function LD(a){return typeof a===Lhe} +function ND(a){return typeof a===Mhe} +function Em(a,b){return a.Hd().Xb(b)} +function Kq(a,b){return hr(a.Kc(),b)} +function Bbb(a,b){return ybb(a,b)==0} +function Ebb(a,b){return ybb(a,b)>=0} +function Kbb(a,b){return ybb(a,b)!=0} +function Jdb(a){return ''+(uCb(a),a)} +function pfb(a,b){return a.substr(b)} +function cg(a){ag(a);return a.d.gc()} +function oVb(a){pVb(a,a.c);return a} +function RD(a){CCb(a==null);return a} +function Dfb(a,b){a.a+=''+b;return a} +function Efb(a,b){a.a+=''+b;return a} +function Nfb(a,b){a.a+=''+b;return a} +function Pfb(a,b){a.a+=''+b;return a} +function Qfb(a,b){a.a+=''+b;return a} +function Mfb(a,b){return a.a+=''+b,a} +function Esb(a,b){Gsb(a,b,a.a,a.a.a)} +function Fsb(a,b){Gsb(a,b,a.c.b,a.c)} +function Mqd(a,b,c){Rpd(b,kqd(a,c))} +function Nqd(a,b,c){Rpd(b,kqd(a,c))} +function Dhe(a,b){Hhe(new Fyd(a),b)} +function cB(a,b){a.q.setTime(Sbb(b))} +function fvb(a,b){bvb.call(this,a,b)} +function jvb(a,b){bvb.call(this,a,b)} +function nvb(a,b){bvb.call(this,a,b)} +function Nqb(a){Uhb(this);Ld(this,a)} +function wmb(a){tCb(a,0);return null} +function X6c(a){a.a=0;a.b=0;return a} +function f3c(a,b){a.a=b.g+1;return a} +function PJc(a,b){return a.j[b.p]==2} +function _Pb(a){return VPb(BD(a,79))} +function yJb(){yJb=ccb;xJb=as(wJb())} +function Y8b(){Y8b=ccb;X8b=as(W8b())} +function mt(){this.b=new Mqb(Cv(12))} +function Otb(){this.b=0;this.a=false} +function Wtb(){this.b=0;this.a=false} +function sl(a){this.a=a;ol.call(this)} +function vl(a){this.a=a;ol.call(this)} +function Nsd(a,b){Msd.call(this,a,b)} +function $zd(a,b){Cyd.call(this,a,b)} +function nNd(a,b){_zd.call(this,a,b)} +function s4d(a,b){p4d.call(this,a,b)} +function w4d(a,b){qRd.call(this,a,b)} +function rEd(a,b){pEd();Rhb(oEd,a,b)} +function lcb(a,b){return qfb(a.a,0,b)} +function ww(a,b){return a.a.a.a.cc(b)} +function mb(a,b){return PD(a)===PD(b)} +function Mdb(a,b){return Kdb(a.a,b.a)} +function $db(a,b){return beb(a.a,b.a)} +function seb(a,b){return ueb(a.a,b.a)} +function hfb(a,b){return a.indexOf(b)} +function Ny(a,b){return a==b?0:a?1:-1} +function kB(a){return a<10?'0'+a:''+a} +function Mq(a){return Qb(a),new sl(a)} +function SC(a){return TC(a.l,a.m,a.h)} +function Hdb(a){return QD((uCb(a),a))} +function Idb(a){return QD((uCb(a),a))} +function NIb(a,b){return beb(a.g,b.g)} +function Fbb(a){return typeof a===Lhe} +function mWb(a){return a==hWb||a==kWb} +function nWb(a){return a==hWb||a==iWb} +function G1b(a){return Jkb(a.b.b,a,0)} +function lrb(a){this.a=Arb();this.b=a} +function Frb(a){this.a=Arb();this.b=a} +function swb(a,b){Ekb(a.a,b);return b} +function Z1c(a,b){Ekb(a.c,b);return a} +function E2c(a,b){d3c(a.a,b);return a} +function _gc(a,b){Hgc();return b.a+=a} +function bhc(a,b){Hgc();return b.a+=a} +function ahc(a,b){Hgc();return b.c+=a} +function Nlb(a,b){Klb(a,0,a.length,b)} +function zsb(){Wqb.call(this,new $rb)} +function I_b(){B_b.call(this,0,0,0,0)} +function I6c(){J6c.call(this,0,0,0,0)} +function g7c(a){this.a=a.a;this.b=a.b} +function fad(a){return a==aad||a==bad} +function gad(a){return a==dad||a==_9c} +function Jzc(a){return a==Fzc||a==Ezc} +function fcd(a){return a!=bcd&&a!=ccd} +function oid(a){return a.Lg()&&a.Mg()} +function Gfd(a){return Kkd(BD(a,118))} +function k3c(a){return d3c(new j3c,a)} +function y2d(a,b){return new p4d(b,a)} +function z2d(a,b){return new p4d(b,a)} +function ukd(a,b,c){vkd(a,b);wkd(a,c)} +function _kd(a,b,c){cld(a,b);ald(a,c)} +function bld(a,b,c){dld(a,b);eld(a,c)} +function gmd(a,b,c){hmd(a,b);imd(a,c)} +function nmd(a,b,c){omd(a,b);pmd(a,c)} +function iKd(a,b){$Jd(a,b);_Jd(a,a.D)} +function _ud(a){Wud.call(this,a,true)} +function Xg(a,b,c){Vg.call(this,a,b,c)} +function Ygb(a){Hgb();Zgb.call(this,a)} +function rxb(){mxb.call(this,'Head',1)} +function wxb(){mxb.call(this,'Tail',3)} +function Ckb(a){a.c=KC(SI,Uhe,1,0,5,1)} +function Vjb(a){a.a=KC(SI,Uhe,1,8,5,1)} +function MGb(a){Hkb(a.xf(),new QGb(a))} +function xtb(a){return a!=null?tb(a):0} +function b2b(a,b){return ntd(b,mpd(a))} +function c2b(a,b){return ntd(b,mpd(a))} +function dAb(a,b){return a[a.length]=b} +function gAb(a,b){return a[a.length]=b} +function Vq(a){return lr(a.b.Kc(),a.a)} +function dqd(a,b){return _o(qo(a.d),b)} +function eqd(a,b){return _o(qo(a.g),b)} +function fqd(a,b){return _o(qo(a.j),b)} +function Osd(a,b){Msd.call(this,a.b,b)} +function q0b(a){B_b.call(this,a,a,a,a)} +function HOb(a){a.b&&LOb(a);return a.a} +function IOb(a){a.b&&LOb(a);return a.c} +function uyb(a,b){if(lyb){return}a.b=b} +function lzd(a,b,c){NC(a,b,c);return c} +function mBc(a,b,c){NC(a.c[b.g],b.g,c)} +function _Hd(a,b,c){BD(a.c,69).Xh(b,c)} +function wfd(a,b,c){bld(c,c.i+a,c.j+b)} +function UOd(a,b){wtd(VKd(a.a),XOd(b))} +function bTd(a,b){wtd(QSd(a.a),eTd(b))} +function Lge(a){wfe();xfe.call(this,a)} +function CAd(a){return a==null?0:tb(a)} +function fNc(){fNc=ccb;eNc=new Rpb(v1)} +function h0d(){h0d=ccb;new i0d;new Rkb} +function i0d(){new Lqb;new Lqb;new Lqb} +function GA(){GA=ccb;fA();FA=new Lqb} +function Iy(){Iy=ccb;$wnd.Math.log(2)} +function UVd(){UVd=ccb;TVd=(AFd(),zFd)} +function _ge(){throw vbb(new cgb(Cxe))} +function ohe(){throw vbb(new cgb(Cxe))} +function che(){throw vbb(new cgb(Dxe))} +function rhe(){throw vbb(new cgb(Dxe))} +function Mg(a){this.a=a;Gg.call(this,a)} +function up(a){this.a=a;rf.call(this,a)} +function Bp(a){this.a=a;rf.call(this,a)} +function Okb(a,b){Mlb(a.c,a.c.length,b)} +function llb(a){return a.a<a.c.c.length} +function Eqb(a){return a.a<a.c.a.length} +function Ntb(a,b){return a.a?a.b:b.De()} +function beb(a,b){return a<b?-1:a>b?1:0} +function Deb(a,b){return ybb(a,b)>0?a:b} +function TC(a,b,c){return {l:a,m:b,h:c}} +function Ctb(a,b){a.a!=null&&BIc(b,a.a)} +function Csb(a){a.a=new jtb;a.c=new jtb} +function hDb(a){this.b=a;this.a=new Rkb} +function dOb(a){this.b=new pOb;this.a=a} +function q_b(a){n_b.call(this);this.a=a} +function txb(){mxb.call(this,'Range',2)} +function bUb(){ZTb();this.a=new L2c(zP)} +function Bh(a,b){Qb(b);Ah(a).Jc(new Vw)} +function fKc(a,b){FJc();return b.n.b+=a} +function Tgc(a,b,c){return Rhb(a.g,c,b)} +function LJc(a,b,c){return Rhb(a.k,c,b)} +function r1c(a,b){return Rhb(a.a,b.a,b)} +function jBc(a,b,c){return hBc(b,c,a.c)} +function E6c(a){return new f7c(a.c,a.d)} +function F6c(a){return new f7c(a.c,a.d)} +function R6c(a){return new f7c(a.a,a.b)} +function CQd(a,b){return hA(a.a,b,null)} +function fec(a){QZb(a,null);RZb(a,null)} +function AOc(a){BOc(a,null);COc(a,null)} +function u4d(){qRd.call(this,null,null)} +function y4d(){RRd.call(this,null,null)} +function a7d(a){this.a=a;Lqb.call(this)} +function Pp(a){this.b=(mmb(),new iob(a))} +function Py(a){a.j=KC(VI,nie,310,0,0,1)} +function oAd(a,b,c){a.c.Vc(b,BD(c,133))} +function GAd(a,b,c){a.c.ji(b,BD(c,133))} +function JLd(a,b){Uxd(a);a.Gc(BD(b,15))} +function b7d(a,b){return t2d(a.c,a.b,b)} +function Bv(a,b){return new Qv(a.Kc(),b)} +function Lq(a,b){return rr(a.Kc(),b)!=-1} +function Sqb(a,b){return a.a.Bc(b)!=null} +function pr(a){return a.Ob()?a.Pb():null} +function yfb(a){return zfb(a,0,a.length)} +function JD(a,b){return a!=null&&AD(a,b)} +function $A(a,b){a.q.setHours(b);YA(a,b)} +function Yrb(a,b){if(a.c){jsb(b);isb(b)}} +function nk(a,b,c){BD(a.Kb(c),164).Nb(b)} +function RJc(a,b,c){SJc(a,b,c);return c} +function Eub(a,b,c){a.a=b^1502;a.b=c^kke} +function xHb(a,b,c){return a.a[b.g][c.g]} +function REc(a,b){return a.a[b.c.p][b.p]} +function aEc(a,b){return a.e[b.c.p][b.p]} +function tEc(a,b){return a.c[b.c.p][b.p]} +function OJc(a,b){return a.j[b.p]=aKc(b)} +function k5c(a,b){return cfb(a.f,b.tg())} +function Isd(a,b){return cfb(a.b,b.tg())} +function Sfd(a,b){return a.a<Kcb(b)?-1:1} +function ZDc(a,b,c){return c?b!=0:b!=a-1} +function _6c(a,b,c){a.a=b;a.b=c;return a} +function Y6c(a,b){a.a*=b;a.b*=b;return a} +function mud(a,b,c){NC(a.g,b,c);return c} +function CHb(a,b,c,d){NC(a.a[b.g],c.g,d)} +function EQb(a,b){O6c(b,a.a.a.a,a.a.a.b)} +function Ozd(a){a.a=BD(Ajd(a.b.a,4),126)} +function Wzd(a){a.a=BD(Ajd(a.b.a,4),126)} +function otd(a){ytb(a,hue);Rld(a,gtd(a))} +function Atb(){Atb=ccb;ztb=new Ftb(null)} +function Ivb(){Ivb=ccb;Ivb();Hvb=new Ovb} +function FId(){this.Bb|=256;this.Bb|=512} +function Fyd(a){this.i=a;this.f=this.i.j} +function xMd(a,b,c){pMd.call(this,a,b,c)} +function BMd(a,b,c){xMd.call(this,a,b,c)} +function K4d(a,b,c){xMd.call(this,a,b,c)} +function N4d(a,b,c){BMd.call(this,a,b,c)} +function X4d(a,b,c){pMd.call(this,a,b,c)} +function _4d(a,b,c){pMd.call(this,a,b,c)} +function C4d(a,b,c){k2d.call(this,a,b,c)} +function G4d(a,b,c){k2d.call(this,a,b,c)} +function I4d(a,b,c){C4d.call(this,a,b,c)} +function c5d(a,b,c){X4d.call(this,a,b,c)} +function zf(a,b){this.a=a;rf.call(this,b)} +function aj(a,b){this.a=a;pc.call(this,b)} +function kj(a,b){this.a=a;pc.call(this,b)} +function Jj(a,b){this.a=a;pc.call(this,b)} +function Rj(a){this.a=a;sj.call(this,a.d)} +function she(a){this.c=a;this.a=this.c.a} +function xl(a,b){this.a=b;pc.call(this,a)} +function Qo(a,b){this.a=b;Lo.call(this,a)} +function op(a,b){this.a=a;Lo.call(this,b)} +function rj(a,b){return Rl(Xm(a.c)).Xb(b)} +function Eb(a,b){return Db(a,new Ufb,b).a} +function ur(a,b){Qb(b);return new Gr(a,b)} +function Gr(a,b){this.a=b;Br.call(this,a)} +function Hs(a){this.b=a;this.a=this.b.a.e} +function Eg(a){a.b.Qb();--a.d.f.d;bg(a.d)} +function Uk(a){Fk.call(this,BD(Qb(a),35))} +function il(a){Fk.call(this,BD(Qb(a),35))} +function is(){$r.call(this,'INSTANCE',0)} +function Lb(a){if(!a){throw vbb(new Vdb)}} +function Ub(a){if(!a){throw vbb(new Ydb)}} +function ot(a){if(!a){throw vbb(new utb)}} +function I6d(){I6d=ccb;g5d();H6d=new J6d} +function Bcb(){Bcb=ccb;zcb=false;Acb=true} +function Jfb(a){mcb.call(this,(uCb(a),a))} +function Wfb(a){mcb.call(this,(uCb(a),a))} +function Inb(a){lnb.call(this,a);this.a=a} +function Xnb(a){Dnb.call(this,a);this.a=a} +function Zob(a){zob.call(this,a);this.a=a} +function Xy(){Py(this);Ry(this);this._d()} +function Qv(a,b){this.a=b;Br.call(this,a)} +function au(a,b){return new xu(a.a,a.b,b)} +function kfb(a,b){return a.lastIndexOf(b)} +function ifb(a,b,c){return a.indexOf(b,c)} +function xfb(a){return a==null?Xhe:fcb(a)} +function nz(a){return a==null?null:a.name} +function Etb(a){return a.a!=null?a.a:null} +function or(a){return Wsb(a.a)?nr(a):null} +function Fxb(a,b){return Jwb(a.a,b)!=null} +function uqb(a,b){return !!b&&a.b[b.g]==b} +function FCb(a){return a.$H||(a.$H=++ECb)} +function aD(a){return a.l+a.m*Hje+a.h*Ije} +function pDb(a,b){Ekb(b.a,a.a);return a.a} +function vDb(a,b){Ekb(b.b,a.a);return a.a} +function nGb(a,b){Ekb(b.a,a.a);return a.a} +function Btb(a){sCb(a.a!=null);return a.a} +function Asb(a){Wqb.call(this,new _rb(a))} +function GUb(a,b){HUb.call(this,a,b,null)} +function cxb(a){this.a=a;Bjb.call(this,a)} +function CKb(){CKb=ccb;BKb=new Msd(tle,0)} +function NFb(a,b){++a.b;return Ekb(a.a,b)} +function OFb(a,b){++a.b;return Lkb(a.a,b)} +function n6b(a,b){return Kdb(a.n.a,b.n.a)} +function WKb(a,b){return Kdb(a.c.d,b.c.d)} +function gLb(a,b){return Kdb(a.c.c,b.c.c)} +function zXb(a,b){return BD(Qc(a.b,b),15)} +function s7b(a,b){return a.n.b=(uCb(b),b)} +function t7b(a,b){return a.n.b=(uCb(b),b)} +function a1b(a){return llb(a.a)||llb(a.b)} +function fBc(a,b,c){return gBc(a,b,c,a.b)} +function iBc(a,b,c){return gBc(a,b,c,a.c)} +function i3c(a,b,c){BD(B2c(a,b),21).Fc(c)} +function xBd(a,b,c){vAd(a.a,c);uAd(a.a,b)} +function qRd(a,b){nRd();this.a=a;this.b=b} +function RRd(a,b){LRd();this.b=a;this.c=b} +function hhd(a,b){Rgd();this.f=b;this.d=a} +function qc(a,b){Sb(b,a);this.d=a;this.c=b} +function n5b(a){var b;b=a.a;a.a=a.b;a.b=b} +function chc(a){Hgc();return !!a&&!a.dc()} +function Afe(a){++vfe;return new lge(3,a)} +function jm(a,b){return new Vp(a,a.gc(),b)} +function ns(a){hs();return es((qs(),ps),a)} +function Oyd(a){this.d=a;Fyd.call(this,a)} +function $yd(a){this.c=a;Fyd.call(this,a)} +function bzd(a){this.c=a;Oyd.call(this,a)} +function sgc(){qgc();this.b=new ygc(this)} +function Pu(a){Xj(a,Jie);return new Skb(a)} +function Vz(a){Rz();return parseInt(a)||-1} +function qfb(a,b,c){return a.substr(b,c-b)} +function gfb(a,b,c){return ifb(a,wfb(b),c)} +function Pkb(a){return ZBb(a.c,a.c.length)} +function Yr(a){return a.f!=null?a.f:''+a.g} +function Zr(a){return a.f!=null?a.f:''+a.g} +function Hsb(a){sCb(a.b!=0);return a.a.a.c} +function Isb(a){sCb(a.b!=0);return a.c.b.c} +function Cmd(a){JD(a,150)&&BD(a,150).Gh()} +function Wwb(a){return a.b=BD(tib(a.a),42)} +function Ptb(a){Ltb();this.b=a;this.a=true} +function Xtb(a){Utb();this.b=a;this.a=true} +function Trb(a){a.d=new ksb(a);a.e=new Lqb} +function mkb(a){if(!a){throw vbb(new Apb)}} +function lCb(a){if(!a){throw vbb(new Vdb)}} +function yCb(a){if(!a){throw vbb(new Ydb)}} +function qCb(a){if(!a){throw vbb(new tcb)}} +function sCb(a){if(!a){throw vbb(new utb)}} +function ksb(a){lsb.call(this,a,null,null)} +function dPb(){$r.call(this,'POLYOMINO',0)} +function Cg(a,b,c,d){qg.call(this,a,b,c,d)} +function zkc(a,b){gkc();return Rc(a,b.e,b)} +function azc(a,b,c){Vyc();return c.qg(a,b)} +function wNb(a,b){return !!a.q&&Mhb(a.q,b)} +function JRb(a,b){return a>0?b*b/a:b*b*100} +function CRb(a,b){return a>0?b/(a*a):b*100} +function G2c(a,b,c){return Ekb(b,I2c(a,c))} +function t3c(a,b,c){p3c();a.Xe(b)&&c.td(a)} +function St(a,b,c){var d;d=a.Zc(b);d.Rb(c)} +function O6c(a,b,c){a.a+=b;a.b+=c;return a} +function Z6c(a,b,c){a.a*=b;a.b*=c;return a} +function b7c(a,b,c){a.a-=b;a.b-=c;return a} +function a7c(a,b){a.a=b.a;a.b=b.b;return a} +function V6c(a){a.a=-a.a;a.b=-a.b;return a} +function Dic(a){this.c=a;this.a=1;this.b=1} +function xed(a){this.c=a;dld(a,0);eld(a,0)} +function u7c(a){Psb.call(this);n7c(this,a)} +function AXb(a){xXb();yXb(this);this.mf(a)} +function GRd(a,b){nRd();qRd.call(this,a,b)} +function dSd(a,b){LRd();RRd.call(this,a,b)} +function hSd(a,b){LRd();RRd.call(this,a,b)} +function fSd(a,b){LRd();dSd.call(this,a,b)} +function sId(a,b,c){dId.call(this,a,b,c,2)} +function zXd(a,b){UVd();nXd.call(this,a,b)} +function BXd(a,b){UVd();zXd.call(this,a,b)} +function DXd(a,b){UVd();zXd.call(this,a,b)} +function FXd(a,b){UVd();DXd.call(this,a,b)} +function PXd(a,b){UVd();nXd.call(this,a,b)} +function RXd(a,b){UVd();PXd.call(this,a,b)} +function XXd(a,b){UVd();nXd.call(this,a,b)} +function pAd(a,b){return a.c.Fc(BD(b,133))} +function w1d(a,b,c){return V1d(p1d(a,b),c)} +function N2d(a,b,c){return b.Qk(a.e,a.c,c)} +function P2d(a,b,c){return b.Rk(a.e,a.c,c)} +function a3d(a,b){return xid(a.e,BD(b,49))} +function aTd(a,b,c){vtd(QSd(a.a),b,eTd(c))} +function TOd(a,b,c){vtd(VKd(a.a),b,XOd(c))} +function ypb(a,b){b.$modCount=a.$modCount} +function MUc(){MUc=ccb;LUc=new Lsd('root')} +function LCd(){LCd=ccb;KCd=new lDd;new NDd} +function KVc(){this.a=new Hp;this.b=new Hp} +function FUd(){hJd.call(this);this.Bb|=Tje} +function t_c(){$r.call(this,'GROW_TREE',0)} +function C9d(a){return a==null?null:cde(a)} +function G9d(a){return a==null?null:jde(a)} +function J9d(a){return a==null?null:fcb(a)} +function K9d(a){return a==null?null:fcb(a)} +function fdb(a){if(a.o!=null){return}vdb(a)} +function DD(a){CCb(a==null||KD(a));return a} +function ED(a){CCb(a==null||LD(a));return a} +function GD(a){CCb(a==null||ND(a));return a} +function gB(a){this.q=new $wnd.Date(Sbb(a))} +function Mf(a,b){this.c=a;ne.call(this,a,b)} +function Sf(a,b){this.a=a;Mf.call(this,a,b)} +function Hg(a,b){this.d=a;Dg(this);this.b=b} +function bAb(a,b){Vzb.call(this,a);this.a=b} +function vAb(a,b){Vzb.call(this,a);this.a=b} +function sNb(a){pNb.call(this,0,0);this.f=a} +function Vg(a,b,c){dg.call(this,a,b,c,null)} +function Yg(a,b,c){dg.call(this,a,b,c,null)} +function Pxb(a,b,c){return a.ue(b,c)<=0?c:b} +function Qxb(a,b,c){return a.ue(b,c)<=0?b:c} +function g4c(a,b){return BD(Wrb(a.b,b),149)} +function i4c(a,b){return BD(Wrb(a.c,b),229)} +function wic(a){return BD(Ikb(a.a,a.b),287)} +function B6c(a){return new f7c(a.c,a.d+a.a)} +function eLc(a){return FJc(),Jzc(BD(a,197))} +function $Jb(){$Jb=ccb;ZJb=pqb((tdd(),sdd))} +function fOb(a,b){b.a?gOb(a,b):Fxb(a.a,b.b)} +function qyb(a,b){if(lyb){return}Ekb(a.a,b)} +function F2b(a,b){x2b();return f_b(b.d.i,a)} +function _9b(a,b){I9b();return new gac(b,a)} +function _Hb(a,b){ytb(b,lle);a.f=b;return a} +function Kld(a,b,c){c=_hd(a,b,3,c);return c} +function bmd(a,b,c){c=_hd(a,b,6,c);return c} +function kpd(a,b,c){c=_hd(a,b,9,c);return c} +function Cvd(a,b,c){++a.j;a.Ki();Atd(a,b,c)} +function Avd(a,b,c){++a.j;a.Hi(b,a.oi(b,c))} +function bRd(a,b,c){var d;d=a.Zc(b);d.Rb(c)} +function c7d(a,b,c){return C2d(a.c,a.b,b,c)} +function DAd(a,b){return (b&Ohe)%a.d.length} +function Msd(a,b){Lsd.call(this,a);this.a=b} +function uVd(a,b){lVd.call(this,a);this.a=b} +function sYd(a,b){lVd.call(this,a);this.a=b} +function zyd(a,b){this.c=a;zud.call(this,b)} +function YOd(a,b){this.a=a;qOd.call(this,b)} +function fTd(a,b){this.a=a;qOd.call(this,b)} +function Xp(a){this.a=(Xj(a,Jie),new Skb(a))} +function cq(a){this.a=(Xj(a,Jie),new Skb(a))} +function LA(a){!a.a&&(a.a=new VA);return a.a} +function XMb(a){if(a>8){return 0}return a+1} +function Ecb(a,b){Bcb();return a==b?0:a?1:-1} +function Opb(a,b,c){return Npb(a,BD(b,22),c)} +function Bz(a,b,c){return a.apply(b,c);var d} +function Sfb(a,b,c){a.a+=zfb(b,0,c);return a} +function ijb(a,b){var c;c=a.e;a.e=b;return c} +function trb(a,b){var c;c=a[hke];c.call(a,b)} +function urb(a,b){var c;c=a[hke];c.call(a,b)} +function Aib(a,b){a.a.Vc(a.b,b);++a.b;a.c=-1} +function Urb(a){Uhb(a.e);a.d.b=a.d;a.d.a=a.d} +function _f(a){a.b?_f(a.b):a.f.c.zc(a.e,a.d)} +function _Ab(a,b,c){EAb();MBb(a,b.Ce(a.a,c))} +function Bxb(a,b){return Vd(Cwb(a.a,b,true))} +function Cxb(a,b){return Vd(Dwb(a.a,b,true))} +function _Bb(a,b){return eCb(new Array(b),a)} +function HD(a){return String.fromCharCode(a)} +function mz(a){return a==null?null:a.message} +function gRb(){this.a=new Rkb;this.b=new Rkb} +function iTb(){this.a=new MQb;this.b=new tTb} +function tDb(){this.b=new d7c;this.c=new Rkb} +function _Qb(){this.d=new d7c;this.e=new d7c} +function n_b(){this.n=new d7c;this.o=new d7c} +function $Gb(){this.n=new p0b;this.i=new I6c} +function sec(){this.a=new Umc;this.b=new mnc} +function NIc(){this.a=new Rkb;this.d=new Rkb} +function LDc(){this.b=new Tqb;this.a=new Tqb} +function hSc(){this.b=new Lqb;this.a=new Lqb} +function HRc(){this.b=new tRc;this.a=new hRc} +function aHb(){$Gb.call(this);this.a=new d7c} +function Ywb(a){Zwb.call(this,a,(lxb(),hxb))} +function J_b(a,b,c,d){B_b.call(this,a,b,c,d)} +function sqd(a,b,c){c!=null&&kmd(b,Wqd(a,c))} +function tqd(a,b,c){c!=null&&lmd(b,Wqd(a,c))} +function Tod(a,b,c){c=_hd(a,b,11,c);return c} +function P6c(a,b){a.a+=b.a;a.b+=b.b;return a} +function c7c(a,b){a.a-=b.a;a.b-=b.b;return a} +function u7b(a,b){return a.n.a=(uCb(b),b)+10} +function v7b(a,b){return a.n.a=(uCb(b),b)+10} +function dLd(a,b){return b==a||pud(UKd(b),a)} +function PYd(a,b){return Rhb(a.a,b,'')==null} +function E2b(a,b){x2b();return !f_b(b.d.i,a)} +function rjc(a,b){fad(a.f)?sjc(a,b):tjc(a,b)} +function h1d(a,b){var c;c=b.Hh(a.a);return c} +function Cyd(a,b){qcb.call(this,gve+a+mue+b)} +function gUd(a,b,c,d){cUd.call(this,a,b,c,d)} +function Q4d(a,b,c,d){cUd.call(this,a,b,c,d)} +function U4d(a,b,c,d){Q4d.call(this,a,b,c,d)} +function n5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function p5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function v5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function t5d(a,b,c,d){p5d.call(this,a,b,c,d)} +function A5d(a,b,c,d){p5d.call(this,a,b,c,d)} +function y5d(a,b,c,d){v5d.call(this,a,b,c,d)} +function D5d(a,b,c,d){A5d.call(this,a,b,c,d)} +function d6d(a,b,c,d){Y5d.call(this,a,b,c,d)} +function Vp(a,b,c){this.a=a;qc.call(this,b,c)} +function tk(a,b,c){this.c=b;this.b=c;this.a=a} +function ik(a,b,c){return a.d=BD(b.Kb(c),164)} +function j6d(a,b){return a.Aj().Nh().Kh(a,b)} +function h6d(a,b){return a.Aj().Nh().Ih(a,b)} +function Fdb(a,b){return uCb(a),PD(a)===PD(b)} +function dfb(a,b){return uCb(a),PD(a)===PD(b)} +function Dxb(a,b){return Vd(Cwb(a.a,b,false))} +function Exb(a,b){return Vd(Dwb(a.a,b,false))} +function vBb(a,b){return a.b.sd(new yBb(a,b))} +function BBb(a,b){return a.b.sd(new EBb(a,b))} +function HBb(a,b){return a.b.sd(new KBb(a,b))} +function lfb(a,b,c){return a.lastIndexOf(b,c)} +function uTb(a,b,c){return Kdb(a[b.b],a[c.b])} +function RTb(a,b){return yNb(b,(Nyc(),Cwc),a)} +function fmc(a,b){return beb(b.a.d.p,a.a.d.p)} +function emc(a,b){return beb(a.a.d.p,b.a.d.p)} +function _Oc(a,b){return Kdb(a.c-a.s,b.c-b.s)} +function S_b(a){return !a.c?-1:Jkb(a.c.a,a,0)} +function Vxd(a){return a<100?null:new Ixd(a)} +function ecd(a){return a==Zbd||a==_bd||a==$bd} +function zAd(a,b){return JD(b,15)&&Btd(a.c,b)} +function vyb(a,b){if(lyb){return}!!b&&(a.d=b)} +function ujb(a,b){var c;c=b;return !!Awb(a,c)} +function czd(a,b){this.c=a;Pyd.call(this,a,b)} +function fBb(a){this.c=a;nvb.call(this,rie,0)} +function Avb(a,b){Bvb.call(this,a,a.length,b)} +function aId(a,b,c){return BD(a.c,69).lk(b,c)} +function bId(a,b,c){return BD(a.c,69).mk(b,c)} +function O2d(a,b,c){return N2d(a,BD(b,332),c)} +function Q2d(a,b,c){return P2d(a,BD(b,332),c)} +function i3d(a,b,c){return h3d(a,BD(b,332),c)} +function k3d(a,b,c){return j3d(a,BD(b,332),c)} +function tn(a,b){return b==null?null:Hv(a.b,b)} +function Kcb(a){return LD(a)?(uCb(a),a):a.ke()} +function Ldb(a){return !isNaN(a)&&!isFinite(a)} +function Wn(a){Ql();this.a=(mmb(),new zob(a))} +function dIc(a){FHc();this.d=a;this.a=new jkb} +function xqb(a,b,c){this.a=a;this.b=b;this.c=c} +function Nrb(a,b,c){this.a=a;this.b=b;this.c=c} +function $sb(a,b,c){this.d=a;this.b=c;this.a=b} +function Qsb(a){Csb(this);Osb(this);ye(this,a)} +function Tkb(a){Ckb(this);bCb(this.c,0,a.Pc())} +function Xwb(a){uib(a.a);Kwb(a.c,a.b);a.b=null} +function iyb(a){this.a=a;Zfb();Cbb(Date.now())} +function JCb(){JCb=ccb;GCb=new nb;ICb=new nb} +function ntb(){ntb=ccb;ltb=new otb;mtb=new qtb} +function kzd(){kzd=ccb;jzd=KC(SI,Uhe,1,0,5,1)} +function tGd(){tGd=ccb;sGd=KC(SI,Uhe,1,0,5,1)} +function $Gd(){$Gd=ccb;ZGd=KC(SI,Uhe,1,0,5,1)} +function Ql(){Ql=ccb;new Zl((mmb(),mmb(),jmb))} +function pxb(a){lxb();return es((zxb(),yxb),a)} +function Hyb(a){Fyb();return es((Kyb(),Jyb),a)} +function OEb(a){MEb();return es((REb(),QEb),a)} +function WEb(a){UEb();return es((ZEb(),YEb),a)} +function tFb(a){rFb();return es((wFb(),vFb),a)} +function iHb(a){gHb();return es((lHb(),kHb),a)} +function PHb(a){NHb();return es((SHb(),RHb),a)} +function GIb(a){EIb();return es((JIb(),IIb),a)} +function vJb(a){qJb();return es((yJb(),xJb),a)} +function xLb(a){vLb();return es((ALb(),zLb),a)} +function TMb(a){RMb();return es((WMb(),VMb),a)} +function TOb(a){ROb();return es((WOb(),VOb),a)} +function ePb(a){cPb();return es((hPb(),gPb),a)} +function ZRb(a){XRb();return es((aSb(),_Rb),a)} +function ATb(a){yTb();return es((DTb(),CTb),a)} +function sUb(a){qUb();return es((vUb(),uUb),a)} +function rWb(a){lWb();return es((uWb(),tWb),a)} +function TXb(a){RXb();return es((WXb(),VXb),a)} +function Mb(a,b){if(!a){throw vbb(new Wdb(b))}} +function l0b(a){j0b();return es((o0b(),n0b),a)} +function r0b(a){B_b.call(this,a.d,a.c,a.a,a.b)} +function K_b(a){B_b.call(this,a.d,a.c,a.a,a.b)} +function mKb(a,b,c){this.b=a;this.c=b;this.a=c} +function BZb(a,b,c){this.b=a;this.a=b;this.c=c} +function TNb(a,b,c){this.a=a;this.b=b;this.c=c} +function uOb(a,b,c){this.a=a;this.b=b;this.c=c} +function S3b(a,b,c){this.a=a;this.b=b;this.c=c} +function Z6b(a,b,c){this.a=a;this.b=b;this.c=c} +function n9b(a,b,c){this.b=a;this.a=b;this.c=c} +function x$b(a,b,c){this.e=b;this.b=a;this.d=c} +function $Ab(a,b,c){EAb();a.a.Od(b,c);return b} +function LGb(a){var b;b=new KGb;b.e=a;return b} +function iLb(a){var b;b=new fLb;b.b=a;return b} +function D6b(){D6b=ccb;B6b=new M6b;C6b=new P6b} +function Hgc(){Hgc=ccb;Fgc=new ghc;Ggc=new ihc} +function jbc(a){gbc();return es((mbc(),lbc),a)} +function Cjc(a){Ajc();return es((Fjc(),Ejc),a)} +function Clc(a){Alc();return es((Flc(),Elc),a)} +function Cpc(a){Apc();return es((Fpc(),Epc),a)} +function Kpc(a){Ipc();return es((Npc(),Mpc),a)} +function Wpc(a){Rpc();return es((Zpc(),Ypc),a)} +function $jc(a){Xjc();return es((bkc(),akc),a)} +function Hkc(a){Fkc();return es((Kkc(),Jkc),a)} +function dqc(a){bqc();return es((gqc(),fqc),a)} +function rqc(a){mqc();return es((uqc(),tqc),a)} +function zqc(a){xqc();return es((Cqc(),Bqc),a)} +function Iqc(a){Gqc();return es((Lqc(),Kqc),a)} +function Vqc(a){Sqc();return es((Yqc(),Xqc),a)} +function brc(a){_qc();return es((erc(),drc),a)} +function nrc(a){lrc();return es((qrc(),prc),a)} +function Arc(a){yrc();return es((Drc(),Crc),a)} +function Qrc(a){Orc();return es((Trc(),Src),a)} +function Zrc(a){Xrc();return es((asc(),_rc),a)} +function gsc(a){esc();return es((jsc(),isc),a)} +function osc(a){msc();return es((rsc(),qsc),a)} +function Etc(a){Ctc();return es((Htc(),Gtc),a)} +function qzc(a){lzc();return es((tzc(),szc),a)} +function Azc(a){xzc();return es((Dzc(),Czc),a)} +function Mzc(a){Izc();return es((Pzc(),Ozc),a)} +function MAc(a){KAc();return es((PAc(),OAc),a)} +function mAc(a){kAc();return es((pAc(),oAc),a)} +function vAc(a){tAc();return es((yAc(),xAc),a)} +function DAc(a){BAc();return es((GAc(),FAc),a)} +function VAc(a){TAc();return es((YAc(),XAc),a)} +function $zc(a){Vzc();return es((bAc(),aAc),a)} +function bBc(a){_Ac();return es((eBc(),dBc),a)} +function vBc(a){tBc();return es((yBc(),xBc),a)} +function EBc(a){CBc();return es((HBc(),GBc),a)} +function NBc(a){LBc();return es((QBc(),PBc),a)} +function tGc(a){rGc();return es((wGc(),vGc),a)} +function WIc(a){UIc();return es((ZIc(),YIc),a)} +function $Lc(a){YLc();return es((bMc(),aMc),a)} +function gMc(a){eMc();return es((jMc(),iMc),a)} +function JOc(a){HOc();return es((MOc(),LOc),a)} +function HQc(a){FQc();return es((KQc(),JQc),a)} +function DRc(a){yRc();return es((GRc(),FRc),a)} +function tSc(a){qSc();return es((wSc(),vSc),a)} +function UTc(a){STc();return es((XTc(),WTc),a)} +function UUc(a){PUc();return es((XUc(),WUc),a)} +function aUc(a){$Tc();return es((dUc(),cUc),a)} +function wVc(a){tVc();return es((zVc(),yVc),a)} +function iWc(a){fWc();return es((lWc(),kWc),a)} +function sWc(a){pWc();return es((vWc(),uWc),a)} +function lXc(a){iXc();return es((oXc(),nXc),a)} +function vXc(a){sXc();return es((yXc(),xXc),a)} +function BYc(a){zYc();return es((EYc(),DYc),a)} +function m$c(a){k$c();return es((p$c(),o$c),a)} +function $$c(a){Y$c();return es((b_c(),a_c),a)} +function n_c(a){i_c();return es((q_c(),p_c),a)} +function w_c(a){s_c();return es((z_c(),y_c),a)} +function E_c(a){C_c();return es((H_c(),G_c),a)} +function P_c(a){N_c();return es((S_c(),R_c),a)} +function W0c(a){R0c();return es((Z0c(),Y0c),a)} +function f1c(a){a1c();return es((i1c(),h1c),a)} +function P5c(a){N5c();return es((S5c(),R5c),a)} +function b6c(a){_5c();return es((e6c(),d6c),a)} +function H7c(a){F7c();return es((K7c(),J7c),a)} +function k8c(a){i8c();return es((n8c(),m8c),a)} +function V8b(a){S8b();return es((Y8b(),X8b),a)} +function A5b(a){y5b();return es((D5b(),C5b),a)} +function jad(a){ead();return es((mad(),lad),a)} +function sad(a){qad();return es((vad(),uad),a)} +function Cad(a){Aad();return es((Fad(),Ead),a)} +function Oad(a){Mad();return es((Rad(),Qad),a)} +function jbd(a){hbd();return es((mbd(),lbd),a)} +function ubd(a){rbd();return es((xbd(),wbd),a)} +function Kbd(a){Hbd();return es((Nbd(),Mbd),a)} +function Vbd(a){Tbd();return es((Ybd(),Xbd),a)} +function hcd(a){dcd();return es((kcd(),jcd),a)} +function vcd(a){rcd();return es((ycd(),xcd),a)} +function vdd(a){tdd();return es((ydd(),xdd),a)} +function Kdd(a){Idd();return es((Ndd(),Mdd),a)} +function $cd(a){Ucd();return es((cdd(),bdd),a)} +function Fed(a){Ded();return es((Ied(),Hed),a)} +function rgd(a){pgd();return es((ugd(),tgd),a)} +function Esd(a){Csd();return es((Hsd(),Gsd),a)} +function Yoc(a,b){return (uCb(a),a)+(uCb(b),b)} +function NNd(a,b){Zfb();return wtd(ZKd(a.a),b)} +function SNd(a,b){Zfb();return wtd(ZKd(a.a),b)} +function bPc(a,b){this.c=a;this.a=b;this.b=b-a} +function nYc(a,b,c){this.a=a;this.b=b;this.c=c} +function L1c(a,b,c){this.a=a;this.b=b;this.c=c} +function T1c(a,b,c){this.a=a;this.b=b;this.c=c} +function Rrd(a,b,c){this.a=a;this.b=b;this.c=c} +function zCd(a,b,c){this.a=a;this.b=b;this.c=c} +function IVd(a,b,c){this.e=a;this.a=b;this.c=c} +function kWd(a,b,c){UVd();cWd.call(this,a,b,c)} +function HXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function TXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function ZXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function JXd(a,b,c){UVd();HXd.call(this,a,b,c)} +function LXd(a,b,c){UVd();HXd.call(this,a,b,c)} +function NXd(a,b,c){UVd();LXd.call(this,a,b,c)} +function VXd(a,b,c){UVd();TXd.call(this,a,b,c)} +function _Xd(a,b,c){UVd();ZXd.call(this,a,b,c)} +function $j(a,b){Qb(a);Qb(b);return new _j(a,b)} +function Nq(a,b){Qb(a);Qb(b);return new Wq(a,b)} +function Rq(a,b){Qb(a);Qb(b);return new ar(a,b)} +function lr(a,b){Qb(a);Qb(b);return new zr(a,b)} +function BD(a,b){CCb(a==null||AD(a,b));return a} +function Nu(a){var b;b=new Rkb;fr(b,a);return b} +function Ex(a){var b;b=new Tqb;fr(b,a);return b} +function Hx(a){var b;b=new Gxb;Jq(b,a);return b} +function Ru(a){var b;b=new Psb;Jq(b,a);return b} +function YEc(a){!a.e&&(a.e=new Rkb);return a.e} +function SMd(a){!a.c&&(a.c=new xYd);return a.c} +function Ekb(a,b){a.c[a.c.length]=b;return true} +function WA(a,b){this.c=a;this.b=b;this.a=false} +function Gg(a){this.d=a;Dg(this);this.b=ed(a.d)} +function pzb(){this.a=';,;';this.b='';this.c=''} +function Bvb(a,b,c){qvb.call(this,b,c);this.a=a} +function fAb(a,b,c){this.b=a;fvb.call(this,b,c)} +function lsb(a,b,c){this.c=a;pjb.call(this,b,c)} +function bCb(a,b,c){$Bb(c,0,a,b,c.length,false)} +function HVb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e} +function eBb(a,b){if(b){a.b=b;a.a=(Tzb(b),b.a)}} +function v_b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e} +function h5b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b} +function k5b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c} +function Lbb(a){return zbb(iD(Fbb(a)?Rbb(a):a))} +function rlc(a,b){return beb(D0b(a.d),D0b(b.d))} +function uic(a,b){return b==(Ucd(),Tcd)?a.c:a.d} +function FHc(){FHc=ccb;DHc=(Ucd(),Tcd);EHc=zcd} +function DRb(){this.b=Edb(ED(Ksd((wSb(),vSb))))} +function aBb(a){return EAb(),KC(SI,Uhe,1,a,5,1)} +function C6c(a){return new f7c(a.c+a.b,a.d+a.a)} +function Vmc(a,b){Imc();return beb(a.d.p,b.d.p)} +function Lsb(a){sCb(a.b!=0);return Nsb(a,a.a.a)} +function Msb(a){sCb(a.b!=0);return Nsb(a,a.c.b)} +function rCb(a,b){if(!a){throw vbb(new ucb(b))}} +function mCb(a,b){if(!a){throw vbb(new Wdb(b))}} +function dWb(a,b,c){cWb.call(this,a,b);this.b=c} +function pMd(a,b,c){MLd.call(this,a,b);this.c=c} +function Dnc(a,b,c){Cnc.call(this,b,c);this.d=a} +function _Gd(a){$Gd();MGd.call(this);this.th(a)} +function PNd(a,b,c){this.a=a;nNd.call(this,b,c)} +function UNd(a,b,c){this.a=a;nNd.call(this,b,c)} +function k2d(a,b,c){MLd.call(this,a,b);this.c=c} +function y1d(){T0d();z1d.call(this,(yFd(),xFd))} +function gFd(a){return a!=null&&!OEd(a,CEd,DEd)} +function dFd(a,b){return (jFd(a)<<4|jFd(b))&aje} +function ln(a,b){return Vm(),Wj(a,b),new iy(a,b)} +function Sdd(a,b){var c;if(a.n){c=b;Ekb(a.f,c)}} +function Upd(a,b,c){var d;d=new yC(c);cC(a,b,d)} +function WUd(a,b){var c;c=a.c;VUd(a,b);return c} +function Ydd(a,b){b<0?(a.g=-1):(a.g=b);return a} +function $6c(a,b){W6c(a);a.a*=b;a.b*=b;return a} +function G6c(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e} +function Dsb(a,b){Gsb(a,b,a.c.b,a.c);return true} +function jsb(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null} +function Aq(a){this.b=a;this.a=Wm(this.b.a).Ed()} +function Wq(a,b){this.b=a;this.a=b;ol.call(this)} +function ar(a,b){this.a=a;this.b=b;ol.call(this)} +function vvb(a,b){qvb.call(this,b,1040);this.a=a} +function Eeb(a){return a==0||isNaN(a)?a:a<0?-1:1} +function WPb(a){QPb();return jtd(a)==Xod(ltd(a))} +function XPb(a){QPb();return ltd(a)==Xod(jtd(a))} +function iYb(a,b){return hYb(a,new cWb(b.a,b.b))} +function NZb(a){return !OZb(a)&&a.c.i.c==a.d.i.c} +function _Gb(a){var b;b=a.n;return a.a.b+b.d+b.a} +function YHb(a){var b;b=a.n;return a.e.b+b.d+b.a} +function ZHb(a){var b;b=a.n;return a.e.a+b.b+b.c} +function zfe(a){wfe();++vfe;return new ige(0,a)} +function o_b(a){if(a.a){return a.a}return JZb(a)} +function CCb(a){if(!a){throw vbb(new Cdb(null))}} +function X6d(){X6d=ccb;W6d=(mmb(),new anb(Fwe))} +function ex(){ex=ccb;new gx((_k(),$k),(Lk(),Kk))} +function oeb(){oeb=ccb;neb=KC(JI,nie,19,256,0,1)} +function d$c(a,b,c,d){e$c.call(this,a,b,c,d,0,0)} +function sQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} +function tQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} +function xfd(a,b){return Ekb(a,new f7c(b.a,b.b))} +function Bic(a,b){return a.c<b.c?-1:a.c==b.c?0:1} +function B0b(a){return a.e.c.length+a.g.c.length} +function D0b(a){return a.e.c.length-a.g.c.length} +function Ojc(a){return a.b.c.length-a.e.c.length} +function dKc(a){FJc();return (Ucd(),Ecd).Hc(a.j)} +function lHd(a){$Gd();_Gd.call(this,a);this.a=-1} +function R7d(a,b){f7d.call(this,a,b);this.a=this} +function odb(a,b){var c;c=ldb(a,b);c.i=2;return c} +function Evd(a,b){var c;++a.j;c=a.Ti(b);return c} +function e3c(a,b,c){a.a=-1;i3c(a,b.g,c);return a} +function Qrd(a,b,c){Kqd(a.a,a.b,a.c,BD(b,202),c)} +function OHd(a,b){PHd(a,b==null?null:(uCb(b),b))} +function SUd(a,b){UUd(a,b==null?null:(uCb(b),b))} +function TUd(a,b){UUd(a,b==null?null:(uCb(b),b))} +function Zj(a,b,c){return new tk(oAb(a).Ie(),c,b)} +function IC(a,b,c,d,e,f){return JC(a,b,c,d,e,0,f)} +function Ucb(){Ucb=ccb;Tcb=KC(xI,nie,217,256,0,1)} +function Ceb(){Ceb=ccb;Beb=KC(MI,nie,162,256,0,1)} +function Yeb(){Yeb=ccb;Xeb=KC(UI,nie,184,256,0,1)} +function ddb(){ddb=ccb;cdb=KC(yI,nie,172,128,0,1)} +function IVb(){HVb(this,false,false,false,false)} +function my(a){im();this.a=(mmb(),new anb(Qb(a)))} +function ir(a){Qb(a);while(a.Ob()){a.Pb();a.Qb()}} +function Tw(a){a.a.cd();BD(a.a.dd(),14).gc();zh()} +function mf(a){this.c=a;this.b=this.c.d.vc().Kc()} +function fqb(a){this.c=a;this.a=new Gqb(this.c.a)} +function Vqb(a){this.a=new Mqb(a.gc());ye(this,a)} +function Bsb(a){Wqb.call(this,new $rb);ye(this,a)} +function Rfb(a,b){a.a+=zfb(b,0,b.length);return a} +function Ikb(a,b){tCb(b,a.c.length);return a.c[b]} +function $lb(a,b){tCb(b,a.a.length);return a.a[b]} +function YAb(a,b){EAb();Vzb.call(this,a);this.a=b} +function Qyb(a,b){return Aeb(wbb(Aeb(a.a).a,b.a))} +function jpb(a,b){return uCb(a),Fcb(a,(uCb(b),b))} +function opb(a,b){return uCb(b),Fcb(b,(uCb(a),a))} +function Oyb(a,b){return NC(b,0,Bzb(b[0],Aeb(1)))} +function Bzb(a,b){return Qyb(BD(a,162),BD(b,162))} +function vic(a){return a.c-BD(Ikb(a.a,a.b),287).b} +function uNb(a){return !a.q?(mmb(),mmb(),kmb):a.q} +function Xi(a){return a.e.Hd().gc()*a.c.Hd().gc()} +function onc(a,b,c){return beb(b.d[a.g],c.d[a.g])} +function YHc(a,b,c){return beb(a.d[b.p],a.d[c.p])} +function ZHc(a,b,c){return beb(a.d[b.p],a.d[c.p])} +function $Hc(a,b,c){return beb(a.d[b.p],a.d[c.p])} +function _Hc(a,b,c){return beb(a.d[b.p],a.d[c.p])} +function q$c(a,b,c){return $wnd.Math.min(c/a,1/b)} +function sEc(a,b){return a?0:$wnd.Math.max(0,b-1)} +function Elb(a,b){var c;for(c=0;c<b;++c){a[c]=-1}} +function bVc(a){var b;b=hVc(a);return !b?a:bVc(b)} +function Voc(a,b){a.a==null&&Toc(a);return a.a[b]} +function qed(a){if(a.c){return a.c.f}return a.e.b} +function red(a){if(a.c){return a.c.g}return a.e.a} +function pFd(a){zud.call(this,a.gc());ytd(this,a)} +function nXd(a,b){UVd();VVd.call(this,b);this.a=a} +function KYd(a,b,c){this.a=a;xMd.call(this,b,c,2)} +function B_b(a,b,c,d){s_b(this);v_b(this,a,b,c,d)} +function ige(a,b){wfe();xfe.call(this,a);this.a=b} +function jgd(a){this.b=new Psb;this.a=a;this.c=-1} +function MOb(){this.d=new f7c(0,0);this.e=new Tqb} +function Nr(a){qc.call(this,0,0);this.a=a;this.b=0} +function ejc(a){this.a=a;this.c=new Lqb;$ic(this)} +function ju(a){if(a.e.c!=a.b){throw vbb(new Apb)}} +function bt(a){if(a.c.e!=a.a){throw vbb(new Apb)}} +function Tbb(a){if(Fbb(a)){return a|0}return pD(a)} +function Bfe(a,b){wfe();++vfe;return new rge(a,b)} +function SEd(a,b){return a==null?b==null:dfb(a,b)} +function TEd(a,b){return a==null?b==null:efb(a,b)} +function Npb(a,b,c){rqb(a.a,b);return Qpb(a,b.g,c)} +function Mlb(a,b,c){oCb(0,b,a.length);Klb(a,0,b,c)} +function Dkb(a,b,c){wCb(b,a.c.length);aCb(a.c,b,c)} +function Dlb(a,b,c){var d;for(d=0;d<b;++d){a[d]=c}} +function qqb(a,b){var c;c=pqb(a);nmb(c,b);return c} +function Oz(a,b){!a&&(a=[]);a[a.length]=b;return a} +function Brb(a,b){return !(a.a.get(b)===undefined)} +function Wyb(a,b){return Nyb(new rzb,new bzb(a),b)} +function Itb(a){return a==null?ztb:new Ftb(uCb(a))} +function tqb(a,b){return JD(b,22)&&uqb(a,BD(b,22))} +function vqb(a,b){return JD(b,22)&&wqb(a,BD(b,22))} +function Aub(a){return Cub(a,26)*ike+Cub(a,27)*jke} +function MC(a){return Array.isArray(a)&&a.im===gcb} +function bg(a){a.b?bg(a.b):a.d.dc()&&a.f.c.Bc(a.e)} +function $Nb(a,b){P6c(a.c,b);a.b.c+=b.a;a.b.d+=b.b} +function ZNb(a,b){$Nb(a,c7c(new f7c(b.a,b.b),a.c))} +function BLb(a,b){this.b=new Psb;this.a=a;this.c=b} +function OVb(){this.b=new $Vb;this.c=new SVb(this)} +function oEb(){this.d=new CEb;this.e=new uEb(this)} +function aCc(){ZBc();this.f=new Psb;this.e=new Psb} +function $Jc(){FJc();this.k=new Lqb;this.d=new Tqb} +function Rgd(){Rgd=ccb;Qgd=new Osd((Y9c(),s9c),0)} +function Mr(){Mr=ccb;Lr=new Nr(KC(SI,Uhe,1,0,5,1))} +function gfc(a,b,c){bfc(c,a,1);Ekb(b,new Tfc(c,a))} +function hfc(a,b,c){cfc(c,a,1);Ekb(b,new dgc(c,a))} +function R$c(a,b,c){return Qqb(a,new aDb(b.a,c.a))} +function ACc(a,b,c){return -beb(a.f[b.p],a.f[c.p])} +function mHb(a,b,c){var d;if(a){d=a.i;d.c=b;d.b=c}} +function nHb(a,b,c){var d;if(a){d=a.i;d.d=b;d.a=c}} +function c3c(a,b,c){a.a=-1;i3c(a,b.g+1,c);return a} +function Dod(a,b,c){c=_hd(a,BD(b,49),7,c);return c} +function JHd(a,b,c){c=_hd(a,BD(b,49),3,c);return c} +function JMd(a,b,c){this.a=a;BMd.call(this,b,c,22)} +function UTd(a,b,c){this.a=a;BMd.call(this,b,c,14)} +function eXd(a,b,c,d){UVd();nWd.call(this,a,b,c,d)} +function lXd(a,b,c,d){UVd();nWd.call(this,a,b,c,d)} +function FNd(a,b){(b.Bb&ote)!=0&&!a.a.o&&(a.a.o=b)} +function MD(a){return a!=null&&OD(a)&&!(a.im===gcb)} +function ID(a){return !Array.isArray(a)&&a.im===gcb} +function ed(a){return JD(a,15)?BD(a,15).Yc():a.Kc()} +function De(a){return a.Qc(KC(SI,Uhe,1,a.gc(),5,1))} +function u1d(a,b){return W1d(p1d(a,b))?b.Qh():null} +function uvd(a){a?Ty(a,(Zfb(),Yfb),''):(Zfb(),Yfb)} +function Sr(a){this.a=(Mr(),Lr);this.d=BD(Qb(a),47)} +function qg(a,b,c,d){this.a=a;dg.call(this,a,b,c,d)} +function Yge(a){Xge();this.a=0;this.b=a-1;this.c=1} +function Yy(a){Py(this);this.g=a;Ry(this);this._d()} +function Wm(a){if(a.c){return a.c}return a.c=a.Id()} +function Xm(a){if(a.d){return a.d}return a.d=a.Jd()} +function Rl(a){var b;b=a.c;return !b?(a.c=a.Dd()):b} +function fe(a){var b;b=a.f;return !b?(a.f=a.Dc()):b} +function Ec(a){var b;b=a.i;return !b?(a.i=a.bc()):b} +function Ffe(a){wfe();++vfe;return new Hge(10,a,0)} +function Ubb(a){if(Fbb(a)){return ''+a}return qD(a)} +function a4d(a){if(a.e.j!=a.d){throw vbb(new Apb)}} +function Nbb(a,b){return zbb(kD(Fbb(a)?Rbb(a):a,b))} +function Obb(a,b){return zbb(lD(Fbb(a)?Rbb(a):a,b))} +function Pbb(a,b){return zbb(mD(Fbb(a)?Rbb(a):a,b))} +function Dcb(a,b){return Ecb((uCb(a),a),(uCb(b),b))} +function Ddb(a,b){return Kdb((uCb(a),a),(uCb(b),b))} +function fx(a,b){return Qb(b),a.a.Ad(b)&&!a.b.Ad(b)} +function dD(a,b){return TC(a.l&b.l,a.m&b.m,a.h&b.h)} +function jD(a,b){return TC(a.l|b.l,a.m|b.m,a.h|b.h)} +function rD(a,b){return TC(a.l^b.l,a.m^b.m,a.h^b.h)} +function QAb(a,b){return TAb(a,(uCb(b),new Rxb(b)))} +function RAb(a,b){return TAb(a,(uCb(b),new Txb(b)))} +function g1b(a){return z0b(),BD(a,11).e.c.length!=0} +function l1b(a){return z0b(),BD(a,11).g.c.length!=0} +function bac(a,b){I9b();return Kdb(b.a.o.a,a.a.o.a)} +function Rnc(a,b,c){return Snc(a,BD(b,11),BD(c,11))} +function koc(a){if(a.e){return poc(a.e)}return null} +function Iub(a){if(!a.d){a.d=a.b.Kc();a.c=a.b.gc()}} +function pBb(a,b,c){if(a.a.Mb(c)){a.b=true;b.td(c)}} +function _vb(a,b){if(a<0||a>=b){throw vbb(new rcb)}} +function Pyb(a,b,c){NC(b,0,Bzb(b[0],c[0]));return b} +function _yc(a,b,c){b.Ye(c,Edb(ED(Ohb(a.b,c)))*a.a)} +function n6c(a,b,c){i6c();return m6c(a,b)&&m6c(a,c)} +function tcd(a){rcd();return !a.Hc(ncd)&&!a.Hc(pcd)} +function D6c(a){return new f7c(a.c+a.b/2,a.d+a.a/2)} +function oOd(a,b){return b.kh()?xid(a.b,BD(b,49)):b} +function bvb(a,b){this.e=a;this.d=(b&64)!=0?b|oie:b} +function qvb(a,b){this.c=0;this.d=a;this.b=b|64|oie} +function gub(a){this.b=new Skb(11);this.a=(ipb(),a)} +function Qwb(a){this.b=null;this.a=(ipb(),!a?fpb:a)} +function nHc(a){this.a=lHc(a.a);this.b=new Tkb(a.b)} +function Pzd(a){this.b=a;Oyd.call(this,a);Ozd(this)} +function Xzd(a){this.b=a;bzd.call(this,a);Wzd(this)} +function jUd(a,b,c){this.a=a;gUd.call(this,b,c,5,6)} +function Y5d(a,b,c,d){this.b=a;xMd.call(this,b,c,d)} +function nSd(a,b,c,d,e){oSd.call(this,a,b,c,d,e,-1)} +function DSd(a,b,c,d,e){ESd.call(this,a,b,c,d,e,-1)} +function cUd(a,b,c,d){xMd.call(this,a,b,c);this.b=d} +function i5d(a,b,c,d){pMd.call(this,a,b,c);this.b=d} +function x0d(a){Wud.call(this,a,false);this.a=false} +function Lj(a,b){this.b=a;sj.call(this,a.b);this.a=b} +function px(a,b){im();ox.call(this,a,Dm(new amb(b)))} +function Cfe(a,b){wfe();++vfe;return new Dge(a,b,0)} +function Efe(a,b){wfe();++vfe;return new Dge(6,a,b)} +function nfb(a,b){return dfb(a.substr(0,b.length),b)} +function Mhb(a,b){return ND(b)?Qhb(a,b):!!irb(a.f,b)} +function Rrb(a,b){uCb(b);while(a.Ob()){b.td(a.Pb())}} +function Vgb(a,b,c){Hgb();this.e=a;this.d=b;this.a=c} +function amc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d} +function xJc(a){var b;b=a;while(b.f){b=b.f}return b} +function fkb(a){var b;b=bkb(a);sCb(b!=null);return b} +function gkb(a){var b;b=ckb(a);sCb(b!=null);return b} +function cv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b} +function Glb(a,b){var c;for(c=0;c<b;++c){a[c]=false}} +function Clb(a,b,c,d){var e;for(e=b;e<c;++e){a[e]=d}} +function ylb(a,b,c,d){oCb(b,c,a.length);Clb(a,b,c,d)} +function Vvb(a,b,c){_vb(c,a.a.c.length);Nkb(a.a,c,b)} +function Lyb(a,b,c){this.c=a;this.a=b;mmb();this.b=c} +function Qpb(a,b,c){var d;d=a.b[b];a.b[b]=c;return d} +function Qqb(a,b){var c;c=a.a.zc(b,a);return c==null} +function zjb(a){if(!a){throw vbb(new utb)}return a.d} +function vCb(a,b){if(a==null){throw vbb(new Heb(b))}} +function Goc(a,b){if(!b){return false}return ye(a,b)} +function K2c(a,b,c){C2c(a,b.g,c);rqb(a.c,b);return a} +function vVb(a){tVb(a,(ead(),aad));a.d=true;return a} +function c2d(a){!a.j&&i2d(a,d1d(a.g,a.b));return a.j} +function nlb(a){yCb(a.b!=-1);Kkb(a.c,a.a=a.b);a.b=-1} +function Uhb(a){a.f=new lrb(a);a.g=new Frb(a);zpb(a)} +function Plb(a){return new YAb(null,Olb(a,a.length))} +function ul(a){return new Sr(new xl(a.a.length,a.a))} +function iD(a){return TC(~a.l&Eje,~a.m&Eje,~a.h&Fje)} +function OD(a){return typeof a===Jhe||typeof a===Nhe} +function D9d(a){return a==Pje?Nwe:a==Qje?'-INF':''+a} +function F9d(a){return a==Pje?Nwe:a==Qje?'-INF':''+a} +function yRb(a,b){return a>0?$wnd.Math.log(a/b):-100} +function ueb(a,b){return ybb(a,b)<0?-1:ybb(a,b)>0?1:0} +function HMb(a,b,c){return IMb(a,BD(b,46),BD(c,167))} +function iq(a,b){return BD(Rl(Wm(a.a)).Xb(b),42).cd()} +function Olb(a,b){return avb(b,a.length),new vvb(a,b)} +function Pyd(a,b){this.d=a;Fyd.call(this,a);this.e=b} +function Lub(a){this.d=(uCb(a),a);this.a=0;this.c=rie} +function rge(a,b){xfe.call(this,1);this.a=a;this.b=b} +function Rzb(a,b){!a.c?Ekb(a.b,b):Rzb(a.c,b);return a} +function uB(a,b,c){var d;d=tB(a,b);vB(a,b,c);return d} +function ZBb(a,b){var c;c=a.slice(0,b);return PC(c,a)} +function Flb(a,b,c){var d;for(d=0;d<b;++d){NC(a,d,c)}} +function ffb(a,b,c,d,e){while(b<c){d[e++]=bfb(a,b++)}} +function hLb(a,b){return Kdb(a.c.c+a.c.b,b.c.c+b.c.b)} +function Axb(a,b){return Iwb(a.a,b,(Bcb(),zcb))==null} +function Vsb(a,b){Gsb(a.d,b,a.b.b,a.b);++a.a;a.c=null} +function d3d(a,b){JLd(a,JD(b,153)?b:BD(b,1937).gl())} +function hkc(a,b){MAb(NAb(a.Oc(),new Rkc),new Tkc(b))} +function kkc(a,b,c,d,e){jkc(a,BD(Qc(b.k,c),15),c,d,e)} +function lOc(a){a.s=NaN;a.c=NaN;mOc(a,a.e);mOc(a,a.j)} +function it(a){a.a=null;a.e=null;Uhb(a.b);a.d=0;++a.c} +function gKc(a){return $wnd.Math.abs(a.d.e-a.e.e)-a.a} +function MAd(a,b,c){return BD(a.c._c(b,BD(c,133)),42)} +function os(){hs();return OC(GC(yG,1),Kie,538,0,[gs])} +function VPb(a){QPb();return Xod(jtd(a))==Xod(ltd(a))} +function aRb(a){_Qb.call(this);this.a=a;Ekb(a.a,this)} +function tPc(a,b){this.d=DPc(a);this.c=b;this.a=0.5*b} +function A6d(){$rb.call(this);this.a=true;this.b=true} +function aLd(a){return (a.i==null&&TKd(a),a.i).length} +function oRd(a){return JD(a,99)&&(BD(a,18).Bb&ote)!=0} +function w2d(a,b){++a.j;t3d(a,a.i,b);v2d(a,BD(b,332))} +function vId(a,b){b=a.nk(null,b);return uId(a,null,b)} +function ytd(a,b){a.hi()&&(b=Dtd(a,b));return a.Wh(b)} +function mdb(a,b,c){var d;d=ldb(a,b);zdb(c,d);return d} +function ldb(a,b){var c;c=new jdb;c.j=a;c.d=b;return c} +function Qb(a){if(a==null){throw vbb(new Geb)}return a} +function Fc(a){var b;b=a.j;return !b?(a.j=new Cw(a)):b} +function Vi(a){var b;b=a.f;return !b?(a.f=new Rj(a)):b} +function ci(a){var b;return b=a.k,!b?(a.k=new th(a)):b} +function Uc(a){var b;return b=a.k,!b?(a.k=new th(a)):b} +function Pc(a){var b;return b=a.g,!b?(a.g=new lh(a)):b} +function Yi(a){var b;return b=a.i,!b?(a.i=new Ci(a)):b} +function qo(a){var b;b=a.d;return !b?(a.d=new ap(a)):b} +function Fb(a){Qb(a);return JD(a,475)?BD(a,475):fcb(a)} +function Ix(a){if(JD(a,607)){return a}return new by(a)} +function qj(a,b){Pb(b,a.c.b.c.gc());return new Fj(a,b)} +function Dfe(a,b,c){wfe();++vfe;return new zge(a,b,c)} +function NC(a,b,c){qCb(c==null||FC(a,c));return a[b]=c} +function bv(a,b){var c;c=a.a.gc();Pb(b,c);return c-1-b} +function Afb(a,b){a.a+=String.fromCharCode(b);return a} +function Kfb(a,b){a.a+=String.fromCharCode(b);return a} +function ovb(a,b){uCb(b);while(a.c<a.d){a.ze(b,a.c++)}} +function Ohb(a,b){return ND(b)?Phb(a,b):Wd(irb(a.f,b))} +function ZPb(a,b){QPb();return a==jtd(b)?ltd(b):jtd(b)} +function isd(a,b){Qpd(a,new yC(b.f!=null?b.f:''+b.g))} +function ksd(a,b){Qpd(a,new yC(b.f!=null?b.f:''+b.g))} +function dVb(a){this.b=new Rkb;this.a=new Rkb;this.c=a} +function H1b(a){this.c=new d7c;this.a=new Rkb;this.b=a} +function pRb(a){_Qb.call(this);this.a=new d7c;this.c=a} +function yC(a){if(a==null){throw vbb(new Geb)}this.a=a} +function HA(a){fA();this.b=new Rkb;this.a=a;sA(this,a)} +function v4c(a){this.c=a;this.a=new Psb;this.b=new Psb} +function GB(){GB=ccb;EB=new HB(false);FB=new HB(true)} +function im(){im=ccb;Ql();hm=new ux((mmb(),mmb(),jmb))} +function yx(){yx=ccb;Ql();xx=new zx((mmb(),mmb(),lmb))} +function NFd(){NFd=ccb;MFd=BZd();!!(jGd(),PFd)&&DZd()} +function aac(a,b){I9b();return BD(Mpb(a,b.d),15).Fc(b)} +function pTb(a,b,c,d){return c==0||(c-d)/c<a.e||b>=a.g} +function NHc(a,b,c){var d;d=THc(a,b,c);return MHc(a,d)} +function Qpd(a,b){var c;c=a.a.length;tB(a,c);vB(a,c,b)} +function gCb(a,b){var c;c=console[a];c.call(console,b)} +function Bvd(a,b){var c;++a.j;c=a.Vi();a.Ii(a.oi(c,b))} +function E1c(a,b,c){BD(b.b,65);Hkb(b.a,new L1c(a,c,b))} +function oXd(a,b,c){VVd.call(this,b);this.a=a;this.b=c} +function Dge(a,b,c){xfe.call(this,a);this.a=b;this.b=c} +function dYd(a,b,c){this.a=a;lVd.call(this,b);this.b=c} +function f0d(a,b,c){this.a=a;mxd.call(this,8,b,null,c)} +function z1d(a){this.a=(uCb(Rve),Rve);this.b=a;new oUd} +function ct(a){this.c=a;this.b=this.c.a;this.a=this.c.e} +function usb(a){this.c=a;this.b=a.a.d.a;ypb(a.a.e,this)} +function uib(a){yCb(a.c!=-1);a.d.$c(a.c);a.b=a.c;a.c=-1} +function U6c(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} +function Uvb(a,b){return _vb(b,a.a.c.length),Ikb(a.a,b)} +function Hb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} +function oAb(a){if(0>=a){return new yAb}return pAb(a-1)} +function Nfe(a){if(!bfe)return false;return Qhb(bfe,a)} +function Ehe(a){if(a)return a.dc();return !a.Kc().Ob()} +function Q_b(a){if(!a.a&&!!a.c){return a.c.b}return a.a} +function LHd(a){!a.a&&(a.a=new xMd(m5,a,4));return a.a} +function LQd(a){!a.d&&(a.d=new xMd(j5,a,1));return a.d} +function uCb(a){if(a==null){throw vbb(new Geb)}return a} +function Qzb(a){if(!a.c){a.d=true;Szb(a)}else{a.c.He()}} +function Tzb(a){if(!a.c){Uzb(a);a.d=true}else{Tzb(a.c)}} +function Kpb(a){Ae(a.a);a.b=KC(SI,Uhe,1,a.b.length,5,1)} +function qlc(a,b){return beb(b.j.c.length,a.j.c.length)} +function igd(a,b){a.c<0||a.b.b<a.c?Fsb(a.b,b):a.a._e(b)} +function Did(a,b){var c;c=a.Yg(b);c>=0?a.Bh(c):vid(a,b)} +function WHc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c} +function Wwd(a){if(a.p!=4)throw vbb(new Ydb);return a.e} +function Vwd(a){if(a.p!=3)throw vbb(new Ydb);return a.e} +function Ywd(a){if(a.p!=6)throw vbb(new Ydb);return a.f} +function fxd(a){if(a.p!=6)throw vbb(new Ydb);return a.k} +function cxd(a){if(a.p!=3)throw vbb(new Ydb);return a.j} +function dxd(a){if(a.p!=4)throw vbb(new Ydb);return a.j} +function AYd(a){!a.b&&(a.b=new RYd(new NYd));return a.b} +function $1d(a){a.c==-2&&e2d(a,X0d(a.g,a.b));return a.c} +function pdb(a,b){var c;c=ldb('',a);c.n=b;c.i=1;return c} +function MNb(a,b){$Nb(BD(b.b,65),a);Hkb(b.a,new RNb(a))} +function Cnd(a,b){wtd((!a.a&&(a.a=new fTd(a,a)),a.a),b)} +function Qzd(a,b){this.b=a;Pyd.call(this,a,b);Ozd(this)} +function Yzd(a,b){this.b=a;czd.call(this,a,b);Wzd(this)} +function Ms(a,b,c,d){Wo.call(this,a,b);this.d=c;this.a=d} +function $o(a,b,c,d){Wo.call(this,a,c);this.a=b;this.f=d} +function iy(a,b){Pp.call(this,umb(Qb(a),Qb(b)));this.a=b} +function cae(){fod.call(this,Ewe,(p8d(),o8d));$9d(this)} +function AZd(){fod.call(this,_ve,(LFd(),KFd));uZd(this)} +function T0c(){$r.call(this,'DELAUNAY_TRIANGULATION',0)} +function vfb(a){return String.fromCharCode.apply(null,a)} +function Rhb(a,b,c){return ND(b)?Shb(a,b,c):jrb(a.f,b,c)} +function tmb(a){mmb();return !a?(ipb(),ipb(),hpb):a.ve()} +function d2c(a,b,c){Y1c();return c.pg(a,BD(b.cd(),146))} +function ix(a,b){ex();return new gx(new il(a),new Uk(b))} +function Iu(a){Xj(a,Mie);return Oy(wbb(wbb(5,a),a/10|0))} +function Vm(){Vm=ccb;Um=new wx(OC(GC(CK,1),zie,42,0,[]))} +function hob(a){!a.d&&(a.d=new lnb(a.c.Cc()));return a.d} +function eob(a){!a.a&&(a.a=new Gob(a.c.vc()));return a.a} +function gob(a){!a.b&&(a.b=new zob(a.c.ec()));return a.b} +function keb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} +function wtb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} +function Gbc(a,b){return Bcb(),BD(b.b,19).a<a?true:false} +function Hbc(a,b){return Bcb(),BD(b.a,19).a<a?true:false} +function Mpb(a,b){return tqb(a.a,b)?a.b[BD(b,22).g]:null} +function kcb(a,b,c,d){a.a=qfb(a.a,0,b)+(''+d)+pfb(a.a,c)} +function OJb(a,b){a.u.Hc((rcd(),ncd))&&MJb(a,b);QJb(a,b)} +function bfb(a,b){BCb(b,a.length);return a.charCodeAt(b)} +function vtb(){hz.call(this,'There is no more element.')} +function xkb(a){this.d=a;this.a=this.d.b;this.b=this.d.c} +function kEb(a){a.b=false;a.c=false;a.d=false;a.a=false} +function Znd(a,b,c,d){Ynd(a,b,c,false);LPd(a,d);return a} +function h3c(a){a.j.c=KC(SI,Uhe,1,0,5,1);a.a=-1;return a} +function Old(a){!a.c&&(a.c=new y5d(z2,a,5,8));return a.c} +function Nld(a){!a.b&&(a.b=new y5d(z2,a,4,7));return a.b} +function Kkd(a){!a.n&&(a.n=new cUd(D2,a,1,7));return a.n} +function Yod(a){!a.c&&(a.c=new cUd(F2,a,9,9));return a.c} +function a2d(a){a.e==Gwe&&g2d(a,a1d(a.g,a.b));return a.e} +function b2d(a){a.f==Gwe&&h2d(a,b1d(a.g,a.b));return a.f} +function Ah(a){var b;b=a.b;!b&&(a.b=b=new Ph(a));return b} +function Ae(a){var b;for(b=a.Kc();b.Ob();){b.Pb();b.Qb()}} +function Fg(a){ag(a.d);if(a.d.d!=a.c){throw vbb(new Apb)}} +function Xx(a,b){this.b=a;this.c=b;this.a=new Gqb(this.b)} +function Zeb(a,b,c){this.a=Zie;this.d=a;this.b=b;this.c=c} +function Mub(a,b){this.d=(uCb(a),a);this.a=16449;this.c=b} +function nqd(a,b){ctd(a,Edb(Xpd(b,'x')),Edb(Xpd(b,'y')))} +function Aqd(a,b){ctd(a,Edb(Xpd(b,'x')),Edb(Xpd(b,'y')))} +function JAb(a,b){Uzb(a);return new YAb(a,new qBb(b,a.a))} +function NAb(a,b){Uzb(a);return new YAb(a,new IBb(b,a.a))} +function OAb(a,b){Uzb(a);return new bAb(a,new wBb(b,a.a))} +function PAb(a,b){Uzb(a);return new vAb(a,new CBb(b,a.a))} +function Cy(a,b){return new Ay(BD(Qb(a),62),BD(Qb(b),62))} +function PWb(a,b){LWb();return Kdb((uCb(a),a),(uCb(b),b))} +function fPb(){cPb();return OC(GC(GO,1),Kie,481,0,[bPb])} +function o_c(){i_c();return OC(GC(N_,1),Kie,482,0,[h_c])} +function x_c(){s_c();return OC(GC(O_,1),Kie,551,0,[r_c])} +function X0c(){R0c();return OC(GC(W_,1),Kie,530,0,[Q0c])} +function cEc(a){this.a=new Rkb;this.e=KC(WD,nie,48,a,0,2)} +function l$b(a,b,c,d){this.a=a;this.e=b;this.d=c;this.c=d} +function QIc(a,b,c,d){this.a=a;this.c=b;this.b=c;this.d=d} +function rKc(a,b,c,d){this.c=a;this.b=b;this.a=c;this.d=d} +function WKc(a,b,c,d){this.c=a;this.b=b;this.d=c;this.a=d} +function J6c(a,b,c,d){this.c=a;this.d=b;this.b=c;this.a=d} +function gPc(a,b,c,d){this.a=a;this.d=b;this.c=c;this.b=d} +function Blc(a,b,c,d){$r.call(this,a,b);this.a=c;this.b=d} +function Ggd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function pec(a,b,c){Pmc(a.a,c);dmc(c);enc(a.b,c);xmc(b,c)} +function Pid(a,b,c){var d,e;d=QEd(a);e=b.Kh(c,d);return e} +function KPb(a,b){var c,d;c=a/b;d=QD(c);c>d&&++d;return d} +function Nnd(a){var b,c;c=(b=new UQd,b);NQd(c,a);return c} +function Ond(a){var b,c;c=(b=new UQd,b);RQd(c,a);return c} +function hqd(a,b){var c;c=Ohb(a.f,b);Yqd(b,c);return null} +function JZb(a){var b;b=P2b(a);if(b){return b}return null} +function Wod(a){!a.b&&(a.b=new cUd(B2,a,12,3));return a.b} +function YEd(a){return a!=null&&hnb(GEd,a.toLowerCase())} +function ied(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} +function jed(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} +function wEb(a,b){return Kdb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)} +function UVb(a,b){return Kdb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)} +function pQb(a,b,c){c.a?eld(a,b.b-a.f/2):dld(a,b.a-a.g/2)} +function prd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function ord(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function JVd(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} +function ZVd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function cXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} +function jXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} +function Ng(a,b){this.a=a;Hg.call(this,a,BD(a.d,15).Zc(b))} +function ZBd(a){this.f=a;this.c=this.f.e;a.f>0&&YBd(this)} +function lBb(a,b,c,d){this.b=a;this.c=d;nvb.call(this,b,c)} +function tib(a){sCb(a.b<a.d.gc());return a.d.Xb(a.c=a.b++)} +function Osb(a){a.a.a=a.c;a.c.b=a.a;a.a.b=a.c.a=null;a.b=0} +function u_b(a,b){a.b=b.b;a.c=b.c;a.d=b.d;a.a=b.a;return a} +function Ry(a){if(a.n){a.e!==Sie&&a._d();a.j=null}return a} +function FD(a){CCb(a==null||OD(a)&&!(a.im===gcb));return a} +function p4b(a){this.b=new Rkb;Gkb(this.b,this.b);this.a=a} +function QPb(){QPb=ccb;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb} +function mmb(){mmb=ccb;jmb=new xmb;kmb=new Qmb;lmb=new Ymb} +function ipb(){ipb=ccb;fpb=new kpb;gpb=new kpb;hpb=new ppb} +function ODb(){ODb=ccb;LDb=new JDb;NDb=new oEb;MDb=new fEb} +function MCb(){if(HCb==256){GCb=ICb;ICb=new nb;HCb=0}++HCb} +function nd(a){var b;return b=a.f,!b?(a.f=new ne(a,a.c)):b} +function d2b(a){return Qld(a)&&Ccb(DD(hkd(a,(Nyc(),gxc))))} +function mcc(a,b){return Rc(a,BD(vNb(b,(Nyc(),Nxc)),19),b)} +function POc(a,b){return vPc(a.j,b.s,b.c)+vPc(b.e,a.s,a.c)} +function ooc(a,b){if(!!a.e&&!a.e.a){moc(a.e,b);ooc(a.e,b)}} +function noc(a,b){if(!!a.d&&!a.d.a){moc(a.d,b);noc(a.d,b)}} +function hed(a,b){return -Kdb(red(a)*qed(a),red(b)*qed(b))} +function cgd(a){return BD(a.cd(),146).tg()+':'+fcb(a.dd())} +function Zgc(a){Hgc();var b;b=BD(a.g,10);b.n.a=a.d.c+b.d.b} +function wgc(a,b,c){qgc();return iEb(BD(Ohb(a.e,b),522),c)} +function Y2c(a,b){rb(a);rb(b);return Xr(BD(a,22),BD(b,22))} +function oic(a,b,c){a.i=0;a.e=0;if(b==c){return}kic(a,b,c)} +function pic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c)} +function Spd(a,b,c){var d,e;d=Kcb(c);e=new TB(d);cC(a,b,e)} +function FSd(a,b,c,d,e,f){ESd.call(this,a,b,c,d,e,f?-2:-1)} +function U5d(a,b,c,d){MLd.call(this,b,c);this.b=a;this.a=d} +function QRc(a,b){new Psb;this.a=new s7c;this.b=a;this.c=b} +function Hec(a,b){BD(vNb(a,(wtc(),Qsc)),15).Fc(b);return b} +function Rb(a,b){if(a==null){throw vbb(new Heb(b))}return a} +function WKd(a){!a.q&&(a.q=new cUd(n5,a,11,10));return a.q} +function ZKd(a){!a.s&&(a.s=new cUd(t5,a,21,17));return a.s} +function Vod(a){!a.a&&(a.a=new cUd(E2,a,10,11));return a.a} +function Dx(a){return JD(a,14)?new Vqb(BD(a,14)):Ex(a.Kc())} +function Ni(a){return new aj(a,a.e.Hd().gc()*a.c.Hd().gc())} +function Zi(a){return new kj(a,a.e.Hd().gc()*a.c.Hd().gc())} +function rz(a){return !!a&&!!a.hashCode?a.hashCode():FCb(a)} +function Qhb(a,b){return b==null?!!irb(a.f,null):Brb(a.g,b)} +function Oq(a){Qb(a);return mr(new Sr(ur(a.a.Kc(),new Sq)))} +function vmb(a){mmb();return JD(a,54)?new Yob(a):new Inb(a)} +function VDb(a,b,c){if(a.f){return a.f.Ne(b,c)}return false} +function Gfb(a,b){a.a=qfb(a.a,0,b)+''+pfb(a.a,b+1);return a} +function fVb(a,b){var c;c=Sqb(a.a,b);c&&(b.d=null);return c} +function zpb(a){var b,c;c=a;b=c.$modCount|0;c.$modCount=b+1} +function pu(a){this.b=a;this.c=a;a.e=null;a.c=null;this.a=1} +function hOb(a){this.b=a;this.a=new Hxb(BD(Qb(new kOb),62))} +function uEb(a){this.c=a;this.b=new Hxb(BD(Qb(new xEb),62))} +function SVb(a){this.c=a;this.b=new Hxb(BD(Qb(new VVb),62))} +function FYb(){this.a=new HXb;this.b=new LXb;this.d=new SYb} +function UZb(){this.a=new s7c;this.b=(Xj(3,Jie),new Skb(3))} +function VMc(){this.b=new Tqb;this.d=new Psb;this.e=new twb} +function K6c(a){this.c=a.c;this.d=a.d;this.b=a.b;this.a=a.a} +function Ay(a,b){oi.call(this,new Qwb(a));this.a=a;this.b=b} +function eod(){bod(this,new $md);this.wb=(NFd(),MFd);LFd()} +function eHc(a){Odd(a,'No crossing minimization',1);Qdd(a)} +function Gz(a){Az();$wnd.setTimeout(function(){throw a},0)} +function _Kd(a){if(!a.u){$Kd(a);a.u=new YOd(a,a)}return a.u} +function wjd(a){var b;b=BD(Ajd(a,16),26);return !b?a.zh():b} +function Jsd(a,b){return JD(b,146)&&dfb(a.b,BD(b,146).tg())} +function t0d(a,b){return a.a?b.Wg().Kc():BD(b.Wg(),69).Zh()} +function u3b(a){return a.k==(j0b(),h0b)&&wNb(a,(wtc(),Csc))} +function ux(a){this.a=(mmb(),JD(a,54)?new Yob(a):new Inb(a))} +function Rz(){Rz=ccb;var a,b;b=!Xz();a=new dA;Qz=b?new Yz:a} +function Wy(a,b){var c;c=hdb(a.gm);return b==null?c:c+': '+b} +function Eob(a,b){var c;c=a.b.Qc(b);Fob(c,a.b.gc());return c} +function ytb(a,b){if(a==null){throw vbb(new Heb(b))}return a} +function irb(a,b){return grb(a,b,hrb(a,b==null?0:a.b.se(b)))} +function ofb(a,b,c){return c>=0&&dfb(a.substr(c,b.length),b)} +function H2d(a,b,c,d,e,f,g){return new O7d(a.e,b,c,d,e,f,g)} +function Cxd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} +function vyd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} +function $Ec(a,b){this.g=a;this.d=OC(GC(OQ,1),kne,10,0,[b])} +function KVd(a,b){this.e=a;this.a=SI;this.b=R5d(b);this.c=b} +function cIb(a,b){$Gb.call(this);THb(this);this.a=a;this.c=b} +function kBc(a,b,c,d){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d)} +function nBc(a,b,c,d){NC(a.c[b.g],b.g,c);NC(a.b[b.g],b.g,d)} +function cBc(){_Ac();return OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])} +function crc(){_qc();return OC(GC(MW,1),Kie,479,0,[$qc,Zqc])} +function Aqc(){xqc();return OC(GC(JW,1),Kie,419,0,[vqc,wqc])} +function Lpc(){Ipc();return OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])} +function psc(){msc();return OC(GC(SW,1),Kie,420,0,[ksc,lsc])} +function EAc(){BAc();return OC(GC(cX,1),Kie,421,0,[zAc,AAc])} +function XIc(){UIc();return OC(GC(mY,1),Kie,523,0,[TIc,SIc])} +function KOc(){HOc();return OC(GC(DZ,1),Kie,520,0,[GOc,FOc])} +function _Lc(){YLc();return OC(GC(fZ,1),Kie,516,0,[XLc,WLc])} +function hMc(){eMc();return OC(GC(gZ,1),Kie,515,0,[cMc,dMc])} +function IQc(){FQc();return OC(GC(YZ,1),Kie,455,0,[DQc,EQc])} +function bUc(){$Tc();return OC(GC(F$,1),Kie,425,0,[ZTc,YTc])} +function VTc(){STc();return OC(GC(E$,1),Kie,480,0,[QTc,RTc])} +function VUc(){PUc();return OC(GC(K$,1),Kie,495,0,[NUc,OUc])} +function jWc(){fWc();return OC(GC(X$,1),Kie,426,0,[dWc,eWc])} +function g1c(){a1c();return OC(GC(X_,1),Kie,429,0,[_0c,$0c])} +function F_c(){C_c();return OC(GC(P_,1),Kie,430,0,[B_c,A_c])} +function PEb(){MEb();return OC(GC(aN,1),Kie,428,0,[LEb,KEb])} +function XEb(){UEb();return OC(GC(bN,1),Kie,427,0,[SEb,TEb])} +function $Rb(){XRb();return OC(GC(gP,1),Kie,424,0,[VRb,WRb])} +function B5b(){y5b();return OC(GC(ZR,1),Kie,511,0,[x5b,w5b])} +function lid(a,b,c,d){return c>=0?a.jh(b,c,d):a.Sg(null,c,d)} +function hgd(a){if(a.b.b==0){return a.a.$e()}return Lsb(a.b)} +function Xwd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.f)} +function exd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.k)} +function pNd(a){PD(a.a)===PD((NKd(),MKd))&&qNd(a);return a.a} +function by(a){this.a=BD(Qb(a),271);this.b=(mmb(),new Zob(a))} +function bQc(a,b){$Pc(this,new f7c(a.a,a.b));_Pc(this,Ru(b))} +function FQc(){FQc=ccb;DQc=new GQc(jle,0);EQc=new GQc(kle,1)} +function YLc(){YLc=ccb;XLc=new ZLc(kle,0);WLc=new ZLc(jle,1)} +function Hp(){Gp.call(this,new Mqb(Cv(12)));Lb(true);this.a=2} +function Hge(a,b,c){wfe();xfe.call(this,a);this.b=b;this.a=c} +function cWd(a,b,c){UVd();VVd.call(this,b);this.a=a;this.b=c} +function aIb(a){$Gb.call(this);THb(this);this.a=a;this.c=true} +function isb(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a} +function $Cb(a){var b;NGb(a.a);MGb(a.a);b=new YGb(a.a);UGb(b)} +function iKb(a,b){hKb(a,true);Hkb(a.e.wf(),new mKb(a,true,b))} +function tlb(a,b){pCb(b);return vlb(a,KC(WD,oje,25,b,15,1),b)} +function YPb(a,b){QPb();return a==Xod(jtd(b))||a==Xod(ltd(b))} +function Phb(a,b){return b==null?Wd(irb(a.f,null)):Crb(a.g,b)} +function Ksb(a){return a.b==0?null:(sCb(a.b!=0),Nsb(a,a.a.a))} +function QD(a){return Math.max(Math.min(a,Ohe),-2147483648)|0} +function uz(a,b){var c=tz[a.charCodeAt(0)];return c==null?a:c} +function Cx(a,b){Rb(a,'set1');Rb(b,'set2');return new Px(a,b)} +function QUb(a,b){var c;c=zUb(a.f,b);return P6c(V6c(c),a.f.d)} +function Jwb(a,b){var c,d;c=b;d=new fxb;Lwb(a,c,d);return d.d} +function NJb(a,b,c,d){var e;e=new aHb;b.a[c.g]=e;Npb(a.b,d,e)} +function zid(a,b,c){var d;d=a.Yg(b);d>=0?a.sh(d,c):uid(a,b,c)} +function hvd(a,b,c){evd();!!a&&Rhb(dvd,a,b);!!a&&Rhb(cvd,a,c)} +function g_c(a,b,c){this.i=new Rkb;this.b=a;this.g=b;this.a=c} +function VZc(a,b,c){this.c=new Rkb;this.e=a;this.f=b;this.b=c} +function b$c(a,b,c){this.a=new Rkb;this.e=a;this.f=b;this.c=c} +function Zy(a,b){Py(this);this.f=b;this.g=a;Ry(this);this._d()} +function ZA(a,b){var c;c=a.q.getHours();a.q.setDate(b);YA(a,c)} +function no(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Od(c.g,c.i)}} +function Fx(a){var b;b=new Uqb(Cv(a.length));nmb(b,a);return b} +function ecb(a){function b(){} +;b.prototype=a||{};return new b} +function dkb(a,b){if(Zjb(a,b)){wkb(a);return true}return false} +function aC(a,b){if(b==null){throw vbb(new Geb)}return bC(a,b)} +function tdb(a){if(a.qe()){return null}var b=a.n;return _bb[b]} +function Mld(a){if(a.Db>>16!=3)return null;return BD(a.Cb,33)} +function mpd(a){if(a.Db>>16!=9)return null;return BD(a.Cb,33)} +function fmd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,79)} +function Ind(a){if(a.Db>>16!=7)return null;return BD(a.Cb,235)} +function Fod(a){if(a.Db>>16!=7)return null;return BD(a.Cb,160)} +function Xod(a){if(a.Db>>16!=11)return null;return BD(a.Cb,33)} +function nid(a,b){var c;c=a.Yg(b);return c>=0?a.lh(c):tid(a,b)} +function Dtd(a,b){var c;c=new Bsb(b);Ve(c,a);return new Tkb(c)} +function Uud(a){var b;b=a.d;b=a.si(a.f);wtd(a,b);return b.Ob()} +function t_b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} +function A4b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b} +function Zod(a){return !a.a&&(a.a=new cUd(E2,a,10,11)),a.a.i>0} +function oDb(){this.a=new zsb;this.e=new Tqb;this.g=0;this.i=0} +function BGc(a){this.a=a;this.b=KC(SX,nie,1944,a.e.length,0,2)} +function RHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length)} +function eMc(){eMc=ccb;cMc=new fMc(vle,0);dMc=new fMc('UP',1)} +function STc(){STc=ccb;QTc=new TTc(Yqe,0);RTc=new TTc('FAN',1)} +function evd(){evd=ccb;dvd=new Lqb;cvd=new Lqb;ivd(hK,new jvd)} +function Swd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.f,0)} +function _wd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.k,0)} +function MHd(a){if(a.Db>>16!=3)return null;return BD(a.Cb,147)} +function ZJd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,235)} +function WId(a){if(a.Db>>16!=17)return null;return BD(a.Cb,26)} +function rdb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.le(b))} +function hrb(a,b){var c;c=a.a.get(b);return c==null?new Array:c} +function aB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);YA(a,c)} +function Shb(a,b,c){return b==null?jrb(a.f,null,c):Drb(a.g,b,c)} +function FLd(a,b,c,d,e,f){return new pSd(a.e,b,a.aj(),c,d,e,f)} +function Tfb(a,b,c){a.a=qfb(a.a,0,b)+(''+c)+pfb(a.a,b);return a} +function bq(a,b,c){Ekb(a.a,(Vm(),Wj(b,c),new Wo(b,c)));return a} +function uu(a){ot(a.c);a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} +function vu(a){ot(a.e);a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} +function RZb(a,b){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Ekb(a.d.e,a)} +function QZb(a,b){!!a.c&&Lkb(a.c.g,a);a.c=b;!!a.c&&Ekb(a.c.g,a)} +function $_b(a,b){!!a.c&&Lkb(a.c.a,a);a.c=b;!!a.c&&Ekb(a.c.a,a)} +function F0b(a,b){!!a.i&&Lkb(a.i.j,a);a.i=b;!!a.i&&Ekb(a.i.j,a)} +function jDb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} +function qXb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} +function aOb(a,b){this.a=a;this.c=R6c(this.a);this.b=new K6c(b)} +function IAb(a){var b;Uzb(a);b=new Tqb;return JAb(a,new jBb(b))} +function wCb(a,b){if(a<0||a>b){throw vbb(new qcb(Ake+a+Bke+b))}} +function Ppb(a,b){return vqb(a.a,b)?Qpb(a,BD(b,22).g,null):null} +function WUb(a){LUb();return Bcb(),BD(a.a,81).d.e!=0?true:false} +function qs(){qs=ccb;ps=as((hs(),OC(GC(yG,1),Kie,538,0,[gs])))} +function SBc(){SBc=ccb;RBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function ZBc(){ZBc=ccb;YBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function oCc(){oCc=ccb;nCc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function aJc(){aJc=ccb;_Ic=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function FJc(){FJc=ccb;EJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function ILc(){ILc=ccb;HLc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function wMc(){wMc=ccb;vMc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function fUc(){fUc=ccb;eUc=c3c(new j3c,(yRc(),xRc),(qSc(),kSc))} +function DOc(a,b,c,d){this.c=a;this.d=d;BOc(this,b);COc(this,c)} +function W3c(a){this.c=new Psb;this.b=a.b;this.d=a.c;this.a=a.a} +function e7c(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} +function BOc(a,b){!!a.a&&Lkb(a.a.k,a);a.a=b;!!a.a&&Ekb(a.a.k,a)} +function COc(a,b){!!a.b&&Lkb(a.b.f,a);a.b=b;!!a.b&&Ekb(a.b.f,a)} +function D1c(a,b){E1c(a,a.b,a.c);BD(a.b.b,65);!!b&&BD(b.b,65).b} +function BUd(a,b){CUd(a,b);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2)} +function cJd(a,b){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,b)} +function lKd(a,b){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,b)} +function T2d(a,b){return Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)} +function jsd(a,b){var c,d;c=b.c;d=c!=null;d&&Qpd(a,new yC(b.c))} +function XOd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} +function eTd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} +function yCc(a,b){var c;c=new H1b(a);b.c[b.c.length]=c;return c} +function Aw(a,b){var c;c=BD(Hv(nd(a.a),b),14);return !c?0:c.gc()} +function UAb(a){var b;Uzb(a);b=(ipb(),ipb(),gpb);return VAb(a,b)} +function nr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}} +function Ki(a,b){Ii.call(this,new Mqb(Cv(a)));Xj(b,mie);this.a=b} +function Jib(a,b,c){xCb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b} +function Mkb(a,b,c){var d;xCb(b,c,a.c.length);d=c-b;cCb(a.c,b,d)} +function Fub(a,b){Eub(a,Tbb(xbb(Obb(b,24),nke)),Tbb(xbb(b,nke)))} +function tCb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ake+a+Bke+b))}} +function BCb(a,b){if(a<0||a>=b){throw vbb(new Xfb(Ake+a+Bke+b))}} +function Kub(a,b){this.b=(uCb(a),a);this.a=(b&Rje)==0?b|64|oie:b} +function kkb(a){Vjb(this);dCb(this.a,geb($wnd.Math.max(8,a))<<1)} +function A0b(a){return l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a]))} +function Iyb(){Fyb();return OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])} +function jHb(){gHb();return OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])} +function QHb(){NHb();return OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])} +function HIb(){EIb();return OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])} +function UXb(){RXb();return OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])} +function BTb(){yTb();return OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])} +function Bzc(){xzc();return OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])} +function Xpc(){Rpc();return OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])} +function eqc(){bqc();return OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])} +function Jqc(){Gqc();return OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])} +function Ikc(){Fkc();return OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])} +function hsc(){esc();return OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])} +function $rc(){Xrc();return OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])} +function NAc(){KAc();return OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])} +function wAc(){tAc();return OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])} +function WAc(){TAc();return OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])} +function OBc(){LBc();return OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])} +function wBc(){tBc();return OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])} +function FBc(){CBc();return OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])} +function uGc(){rGc();return OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])} +function xVc(){tVc();return OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])} +function tWc(){pWc();return OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])} +function CYc(){zYc();return OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])} +function wXc(){sXc();return OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])} +function _$c(){Y$c();return OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])} +function kbd(){hbd();return OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])} +function tad(){qad();return OC(GC(u1,1),Kie,272,0,[nad,oad,pad])} +function o3d(a,b){return p3d(a,b,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function LZc(a,b,c){var d;d=MZc(a,b,false);return d.b<=b&&d.a<=c} +function tMc(a,b,c){var d;d=new sMc;d.b=b;d.a=c;++b.b;Ekb(a.d,d)} +function fs(a,b){var c;c=(uCb(a),a).g;lCb(!!c);uCb(b);return c(b)} +function av(a,b){var c,d;d=cv(a,b);c=a.a.Zc(d);return new qv(a,c)} +function cKd(a){if(a.Db>>16!=6)return null;return BD(aid(a),235)} +function Uwd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.f)&aje} +function bxd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.k)&aje} +function Z1d(a){a.a==(T0d(),S0d)&&d2d(a,U0d(a.g,a.b));return a.a} +function _1d(a){a.d==(T0d(),S0d)&&f2d(a,Y0d(a.g,a.b));return a.d} +function mlb(a){sCb(a.a<a.c.c.length);a.b=a.a++;return a.c.c[a.b]} +function hEb(a,b){a.b=a.b|b.b;a.c=a.c|b.c;a.d=a.d|b.d;a.a=a.a|b.a} +function xbb(a,b){return zbb(dD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function Mbb(a,b){return zbb(jD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function Vbb(a,b){return zbb(rD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function Dub(a){return wbb(Nbb(Cbb(Cub(a,32)),32),Cbb(Cub(a,32)))} +function Mu(a){Qb(a);return JD(a,14)?new Tkb(BD(a,14)):Nu(a.Kc())} +function EWb(a,b){AWb();return a.c==b.c?Kdb(b.d,a.d):Kdb(a.c,b.c)} +function FWb(a,b){AWb();return a.c==b.c?Kdb(a.d,b.d):Kdb(a.c,b.c)} +function HWb(a,b){AWb();return a.c==b.c?Kdb(a.d,b.d):Kdb(b.c,a.c)} +function GWb(a,b){AWb();return a.c==b.c?Kdb(b.d,a.d):Kdb(b.c,a.c)} +function WGb(a,b){var c;c=Edb(ED(a.a.We((Y9c(),Q9c))));XGb(a,b,c)} +function Rgc(a,b){var c;c=BD(Ohb(a.g,b),57);Hkb(b.d,new Qhc(a,c))} +function GYb(a,b){var c,d;c=d_b(a);d=d_b(b);return c<d?-1:c>d?1:0} +function bjc(a,b){var c,d;c=ajc(b);d=c;return BD(Ohb(a.c,d),19).a} +function iSc(a,b){var c;c=a+'';while(c.length<b){c='0'+c}return c} +function WRc(a){return a.c==null||a.c.length==0?'n_'+a.g:'n_'+a.c} +function oRb(a){return a.c==null||a.c.length==0?'n_'+a.b:'n_'+a.c} +function qz(a,b){return !!a&&!!a.equals?a.equals(b):PD(a)===PD(b)} +function dkd(a,b){if(b==0){return !!a.o&&a.o.f!=0}return mid(a,b)} +function Tdd(a,b,c){var d;if(a.n&&!!b&&!!c){d=new kgd;Ekb(a.e,d)}} +function cIc(a,b,c){var d;d=a.d[b.p];a.d[b.p]=a.d[c.p];a.d[c.p]=d} +function kxd(a,b,c){this.d=a;this.j=b;this.e=c;this.o=-1;this.p=3} +function lxd(a,b,c){this.d=a;this.k=b;this.f=c;this.o=-1;this.p=5} +function zge(a,b,c){xfe.call(this,25);this.b=a;this.a=b;this.c=c} +function $fe(a){wfe();xfe.call(this,a);this.c=false;this.a=false} +function sSd(a,b,c,d,e,f){rSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function uSd(a,b,c,d,e,f){tSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function wSd(a,b,c,d,e,f){vSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function ySd(a,b,c,d,e,f){xSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function ASd(a,b,c,d,e,f){zSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function CSd(a,b,c,d,e,f){BSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function HSd(a,b,c,d,e,f){GSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function JSd(a,b,c,d,e,f){ISd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function nWd(a,b,c,d){VVd.call(this,c);this.b=a;this.c=b;this.d=d} +function x$c(a,b){this.a=new Rkb;this.d=new Rkb;this.f=a;this.c=b} +function PTb(){this.c=new bUb;this.a=new FYb;this.b=new wZb;$Yb()} +function b2c(){Y1c();this.b=new Lqb;this.a=new Lqb;this.c=new Rkb} +function j2d(a,b){this.g=a;this.d=(T0d(),S0d);this.a=S0d;this.b=b} +function O1d(a,b){this.f=a;this.a=(T0d(),R0d);this.c=R0d;this.b=b} +function h9d(a,b){!a.c&&(a.c=new u3d(a,0));f3d(a.c,(Q8d(),I8d),b)} +function $Tc(){$Tc=ccb;ZTc=new _Tc('DFS',0);YTc=new _Tc('BFS',1)} +function Cc(a,b,c){var d;d=BD(a.Zb().xc(b),14);return !!d&&d.Hc(c)} +function Gc(a,b,c){var d;d=BD(a.Zb().xc(b),14);return !!d&&d.Mc(c)} +function Ofb(a,b,c,d){a.a+=''+qfb(b==null?Xhe:fcb(b),c,d);return a} +function Xnd(a,b,c,d,e,f){Ynd(a,b,c,f);eLd(a,d);fLd(a,e);return a} +function Ysb(a){sCb(a.b.b!=a.d.a);a.c=a.b=a.b.b;--a.a;return a.c.c} +function Jgb(a){while(a.d>0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} +function wwb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)} +function RSd(a){return !!a.a&&QSd(a.a.a).i!=0&&!(!!a.b&&QTd(a.b))} +function cLd(a){return !!a.u&&VKd(a.u.a).i!=0&&!(!!a.n&&FMd(a.n))} +function $i(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),16,new ij(a))} +function XA(a,b){return ueb(Cbb(a.q.getTime()),Cbb(b.q.getTime()))} +function k_b(a){return BD(Qkb(a,KC(AQ,jne,17,a.c.length,0,1)),474)} +function l_b(a){return BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193)} +function cKc(a){FJc();return !OZb(a)&&!(!OZb(a)&&a.c.i.c==a.d.i.c)} +function kDb(a,b,c){var d;d=(Qb(a),new Tkb(a));iDb(new jDb(d,b,c))} +function rXb(a,b,c){var d;d=(Qb(a),new Tkb(a));pXb(new qXb(d,b,c))} +function Nwb(a,b){var c;c=1-b;a.a[c]=Owb(a.a[c],c);return Owb(a,b)} +function YXc(a,b){var c;a.e=new QXc;c=gVc(b);Okb(c,a.c);ZXc(a,c,0)} +function o4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.a,e)} +function p4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.b,e)} +function i6d(a){var b,c,d;b=new A6d;c=s6d(b,a);z6d(b);d=c;return d} +function vZd(){var a,b,c;b=(c=(a=new UQd,a),c);Ekb(rZd,b);return b} +function H2c(a){a.j.c=KC(SI,Uhe,1,0,5,1);Ae(a.c);h3c(a.a);return a} +function tgc(a){qgc();if(JD(a.g,10)){return BD(a.g,10)}return null} +function Zw(a){if(Ah(a).dc()){return false}Bh(a,new bx);return true} +function _y(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} +function Pb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ib(a,b)))}return a} +function Tb(a,b,c){if(a<0||b<a||b>c){throw vbb(new qcb(Kb(a,b,c)))}} +function eVb(a,b){Qqb(a.a,b);if(b.d){throw vbb(new hz(Hke))}b.d=a} +function xpb(a,b){if(b.$modCount!=a.$modCount){throw vbb(new Apb)}} +function $pb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function dib(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function msb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function qAb(a,b){if(a.a<=a.b){b.ud(a.a++);return true}return false} +function Sbb(a){var b;if(Fbb(a)){b=a;return b==-0.?0:b}return oD(a)} +function tAb(a){var b;Tzb(a);b=new drb;_ub(a.a,new BAb(b));return b} +function Yzb(a){var b;Tzb(a);b=new Gpb;_ub(a.a,new mAb(b));return b} +function Bib(a,b){this.a=a;vib.call(this,a);wCb(b,a.gc());this.b=b} +function orb(a){this.e=a;this.b=this.e.a.entries();this.a=new Array} +function Oi(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),273,new cj(a))} +function Qu(a){return new Skb((Xj(a,Mie),Oy(wbb(wbb(5,a),a/10|0))))} +function m_b(a){return BD(Qkb(a,KC(aR,lne,11,a.c.length,0,1)),1943)} +function sMb(a,b,c){return c.f.c.length>0?HMb(a.a,b,c):HMb(a.b,b,c)} +function SZb(a,b,c){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Dkb(a.d.e,c,a)} +function a5b(a,b){i5b(b,a);k5b(a.d);k5b(BD(vNb(a,(Nyc(),wxc)),207))} +function _4b(a,b){f5b(b,a);h5b(a.d);h5b(BD(vNb(a,(Nyc(),wxc)),207))} +function Ypd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.fe());return d} +function Zpd(a,b){var c,d;c=tB(a,b);d=null;!!c&&(d=c.ie());return d} +function $pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.ie());return d} +function _pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=aqd(c));return d} +function Tqd(a,b,c){var d;d=Wpd(c);ro(a.g,d,b);ro(a.i,b,c);return b} +function Ez(a,b,c){var d;d=Cz();try{return Bz(a,b,c)}finally{Fz(d)}} +function C6d(a){var b;b=a.Wg();this.a=JD(b,69)?BD(b,69).Zh():b.Kc()} +function j3c(){D2c.call(this);this.j.c=KC(SI,Uhe,1,0,5,1);this.a=-1} +function mxd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} +function jk(a,b,c,d){this.e=d;this.d=null;this.c=a;this.a=b;this.b=c} +function uEc(a,b,c){this.d=new HEc(this);this.e=a;this.i=b;this.f=c} +function msc(){msc=ccb;ksc=new nsc(gle,0);lsc=new nsc('TOP_LEFT',1)} +function cDc(){cDc=ccb;bDc=ix(meb(1),meb(4));aDc=ix(meb(1),meb(2))} +function z_c(){z_c=ccb;y_c=as((s_c(),OC(GC(O_,1),Kie,551,0,[r_c])))} +function q_c(){q_c=ccb;p_c=as((i_c(),OC(GC(N_,1),Kie,482,0,[h_c])))} +function Z0c(){Z0c=ccb;Y0c=as((R0c(),OC(GC(W_,1),Kie,530,0,[Q0c])))} +function hPb(){hPb=ccb;gPb=as((cPb(),OC(GC(GO,1),Kie,481,0,[bPb])))} +function yLb(){vLb();return OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])} +function qxb(){lxb();return OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])} +function UOb(){ROb();return OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])} +function UMb(){RMb();return OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])} +function sWb(){lWb();return OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])} +function kbc(){gbc();return OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])} +function Vc(a,b,c,d){return JD(c,54)?new Cg(a,b,c,d):new qg(a,b,c,d)} +function Djc(){Ajc();return OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])} +function okc(a){var b;return a.j==(Ucd(),Rcd)&&(b=pkc(a),uqb(b,zcd))} +function Mdc(a,b){var c;c=b.a;QZb(c,b.c.d);RZb(c,b.d.d);q7c(c.a,a.n)} +function Smc(a,b){return BD(Btb(QAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} +function Tmc(a,b){return BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} +function _w(a){return new Kub(rmb(BD(a.a.dd(),14).gc(),a.a.cd()),16)} +function Qq(a){if(JD(a,14)){return BD(a,14).dc()}return !a.Kc().Ob()} +function ugc(a){qgc();if(JD(a.g,145)){return BD(a.g,145)}return null} +function Ko(a){if(a.e.g!=a.b){throw vbb(new Apb)}return !!a.c&&a.d>0} +function Xsb(a){sCb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} +function Xjb(a,b){uCb(b);NC(a.a,a.c,b);a.c=a.c+1&a.a.length-1;_jb(a)} +function Wjb(a,b){uCb(b);a.b=a.b-1&a.a.length-1;NC(a.a,a.b,b);_jb(a)} +function A2c(a,b){var c;for(c=a.j.c.length;c<b;c++){Ekb(a.j,a.rg())}} +function gBc(a,b,c,d){var e;e=d[b.g][c.g];return Edb(ED(vNb(a.a,e)))} +function goc(a,b,c,d,e){this.i=a;this.a=b;this.e=c;this.j=d;this.f=e} +function DZc(a,b,c,d,e){this.a=a;this.e=b;this.f=c;this.b=d;this.g=e} +function Fz(a){a&&Mz((Kz(),Jz));--xz;if(a){if(zz!=-1){Hz(zz);zz=-1}}} +function Nzc(){Izc();return OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])} +function ERc(){yRc();return OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])} +function mXc(){iXc();return OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])} +function wdd(){tdd();return OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])} +function vbd(){rbd();return OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])} +function Dad(){Aad();return OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])} +function Ged(){Ded();return OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])} +function sgd(){pgd();return OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])} +function gvd(a){evd();return Mhb(dvd,a)?BD(Ohb(dvd,a),331).ug():null} +function cid(a,b,c){return b<0?tid(a,c):BD(c,66).Nj().Sj(a,a.yh(),b)} +function Sqd(a,b,c){var d;d=Wpd(c);ro(a.d,d,b);Rhb(a.e,b,c);return b} +function Uqd(a,b,c){var d;d=Wpd(c);ro(a.j,d,b);Rhb(a.k,b,c);return b} +function dtd(a){var b,c;b=(Fhd(),c=new Tld,c);!!a&&Rld(b,a);return b} +function wud(a){var b;b=a.ri(a.i);a.i>0&&$fb(a.g,0,b,0,a.i);return b} +function qEd(a,b){pEd();var c;c=BD(Ohb(oEd,a),55);return !c||c.wj(b)} +function Twd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.f)<<24>>24} +function axd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.k)<<24>>24} +function gxd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.k)<<16>>16} +function Zwd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.f)<<16>>16} +function sr(a){var b;b=0;while(a.Ob()){a.Pb();b=wbb(b,1)}return Oy(b)} +function nx(a,b){var c;c=new Vfb;a.xd(c);c.a+='..';b.yd(c);return c.a} +function Sgc(a,b,c){var d;d=BD(Ohb(a.g,c),57);Ekb(a.a.c,new vgd(b,d))} +function VCb(a,b,c){return Ddb(ED(Wd(irb(a.f,b))),ED(Wd(irb(a.f,c))))} +function E2d(a,b,c){return F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function L2d(a,b,c){return M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function q3d(a,b,c){return r3d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function JJc(a,b){return a==(j0b(),h0b)&&b==h0b?4:a==h0b||b==h0b?8:32} +function Nd(a,b){return PD(b)===PD(a)?'(this Map)':b==null?Xhe:fcb(b)} +function kFd(a,b){return BD(b==null?Wd(irb(a.f,null)):Crb(a.g,b),281)} +function Rqd(a,b,c){var d;d=Wpd(c);Rhb(a.b,d,b);Rhb(a.c,b,c);return b} +function Bfd(a,b){var c;c=b;while(c){O6c(a,c.i,c.j);c=Xod(c)}return a} +function kt(a,b){var c;c=vmb(Nu(new wu(a,b)));ir(new wu(a,b));return c} +function R6d(a,b){Q6d();var c;c=BD(a,66).Mj();kVd(c,b);return c.Ok(b)} +function TOc(a,b,c,d,e){var f;f=OOc(e,c,d);Ekb(b,tOc(e,f));XOc(a,e,b)} +function mic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c);kic(a,b,c)} +function dB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+nje);YA(a,c)} +function dC(d,a,b){if(b){var c=b.ee();d.a[a]=c(b)}else{delete d.a[a]}} +function vB(d,a,b){if(b){var c=b.ee();b=c(b)}else{b=undefined}d.a[a]=b} +function pCb(a){if(a<0){throw vbb(new Feb('Negative array size: '+a))}} +function VKd(a){if(!a.n){$Kd(a);a.n=new JMd(a,j5,a);_Kd(a)}return a.n} +function Fqb(a){sCb(a.a<a.c.a.length);a.b=a.a;Dqb(a);return a.c.b[a.b]} +function Yjb(a){if(a.b==a.c){return}a.a=KC(SI,Uhe,1,8,5,1);a.b=0;a.c=0} +function AQb(a){this.b=new Lqb;this.c=new Lqb;this.d=new Lqb;this.a=a} +function lge(a,b){wfe();xfe.call(this,a);this.a=b;this.c=-1;this.b=-1} +function lSd(a,b,c,d){kxd.call(this,1,c,d);jSd(this);this.c=a;this.b=b} +function mSd(a,b,c,d){lxd.call(this,1,c,d);jSd(this);this.c=a;this.b=b} +function O7d(a,b,c,d,e,f,g){nxd.call(this,b,d,e,f,g);this.c=a;this.a=c} +function LVd(a,b,c){this.e=a;this.a=SI;this.b=R5d(b);this.c=b;this.d=c} +function Lo(a){this.e=a;this.c=this.e.a;this.b=this.e.g;this.d=this.e.i} +function nYd(a){this.c=a;this.a=BD(wId(a),148);this.b=this.a.Aj().Nh()} +function Irb(a){this.d=a;this.b=this.d.a.entries();this.a=this.b.next()} +function $rb(){Lqb.call(this);Trb(this);this.d.b=this.d;this.d.a=this.d} +function mRb(a,b){_Qb.call(this);this.a=a;this.b=b;Ekb(this.a.b,this)} +function uFd(a,b){var c;return c=b!=null?Phb(a,b):Wd(irb(a.f,b)),RD(c)} +function FFd(a,b){var c;return c=b!=null?Phb(a,b):Wd(irb(a.f,b)),RD(c)} +function Fob(a,b){var c;for(c=0;c<b;++c){NC(a,c,new Rob(BD(a[c],42)))}} +function Lgb(a,b){var c;for(c=a.d-1;c>=0&&a.a[c]===b[c];c--);return c<0} +function Ucc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0} +function Dtb(a,b){uCb(b);if(a.a!=null){return Itb(b.Kb(a.a))}return ztb} +function Gx(a){var b;if(a){return new Bsb(a)}b=new zsb;Jq(b,a);return b} +function GAb(a,b){var c;return b.b.Kb(SAb(a,b.c.Ee(),(c=new TBb(b),c)))} +function Hub(a){zub();Eub(this,Tbb(xbb(Obb(a,24),nke)),Tbb(xbb(a,nke)))} +function REb(){REb=ccb;QEb=as((MEb(),OC(GC(aN,1),Kie,428,0,[LEb,KEb])))} +function ZEb(){ZEb=ccb;YEb=as((UEb(),OC(GC(bN,1),Kie,427,0,[SEb,TEb])))} +function aSb(){aSb=ccb;_Rb=as((XRb(),OC(GC(gP,1),Kie,424,0,[VRb,WRb])))} +function D5b(){D5b=ccb;C5b=as((y5b(),OC(GC(ZR,1),Kie,511,0,[x5b,w5b])))} +function Cqc(){Cqc=ccb;Bqc=as((xqc(),OC(GC(JW,1),Kie,419,0,[vqc,wqc])))} +function erc(){erc=ccb;drc=as((_qc(),OC(GC(MW,1),Kie,479,0,[$qc,Zqc])))} +function eBc(){eBc=ccb;dBc=as((_Ac(),OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])))} +function GAc(){GAc=ccb;FAc=as((BAc(),OC(GC(cX,1),Kie,421,0,[zAc,AAc])))} +function Npc(){Npc=ccb;Mpc=as((Ipc(),OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])))} +function rsc(){rsc=ccb;qsc=as((msc(),OC(GC(SW,1),Kie,420,0,[ksc,lsc])))} +function MOc(){MOc=ccb;LOc=as((HOc(),OC(GC(DZ,1),Kie,520,0,[GOc,FOc])))} +function ZIc(){ZIc=ccb;YIc=as((UIc(),OC(GC(mY,1),Kie,523,0,[TIc,SIc])))} +function bMc(){bMc=ccb;aMc=as((YLc(),OC(GC(fZ,1),Kie,516,0,[XLc,WLc])))} +function jMc(){jMc=ccb;iMc=as((eMc(),OC(GC(gZ,1),Kie,515,0,[cMc,dMc])))} +function KQc(){KQc=ccb;JQc=as((FQc(),OC(GC(YZ,1),Kie,455,0,[DQc,EQc])))} +function dUc(){dUc=ccb;cUc=as(($Tc(),OC(GC(F$,1),Kie,425,0,[ZTc,YTc])))} +function XUc(){XUc=ccb;WUc=as((PUc(),OC(GC(K$,1),Kie,495,0,[NUc,OUc])))} +function XTc(){XTc=ccb;WTc=as((STc(),OC(GC(E$,1),Kie,480,0,[QTc,RTc])))} +function lWc(){lWc=ccb;kWc=as((fWc(),OC(GC(X$,1),Kie,426,0,[dWc,eWc])))} +function i1c(){i1c=ccb;h1c=as((a1c(),OC(GC(X_,1),Kie,429,0,[_0c,$0c])))} +function H_c(){H_c=ccb;G_c=as((C_c(),OC(GC(P_,1),Kie,430,0,[B_c,A_c])))} +function UIc(){UIc=ccb;TIc=new VIc('UPPER',0);SIc=new VIc('LOWER',1)} +function Lqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} +function Oqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} +function Jic(a,b){var c,d;d=false;do{c=Mic(a,b);d=d|c}while(c);return d} +function zHc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d} +function Cfd(a,b){var c;c=b;while(c){O6c(a,-c.i,-c.j);c=Xod(c)}return a} +function reb(a,b){var c,d;uCb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.td(c)}} +function me(a,b){var c;c=b.cd();return new Wo(c,a.e.pc(c,BD(b.dd(),14)))} +function Gsb(a,b,c,d){var e;e=new jtb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b} +function Nkb(a,b,c){var d;d=(tCb(b,a.c.length),a.c[b]);a.c[b]=c;return d} +function lFd(a,b,c){return BD(b==null?jrb(a.f,null,c):Drb(a.g,b,c),281)} +function fRb(a){return !!a.c&&!!a.d?oRb(a.c)+'->'+oRb(a.d):'e_'+FCb(a)} +function FAb(a,b){return (Uzb(a),WAb(new YAb(a,new qBb(b,a.a)))).sd(DAb)} +function tUb(){qUb();return OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])} +function _cd(){Ucd();return OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])} +function Dz(b){Az();return function(){return Ez(b,this,arguments);var a}} +function sz(){if(Date.now){return Date.now()}return (new Date).getTime()} +function OZb(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i} +function pv(a){if(!a.c.Sb()){throw vbb(new utb)}a.a=true;return a.c.Ub()} +function ko(a){a.i=0;Alb(a.b,null);Alb(a.c,null);a.a=null;a.e=null;++a.g} +function ycb(a){wcb.call(this,a==null?Xhe:fcb(a),JD(a,78)?BD(a,78):null)} +function PYb(a){MYb();yXb(this);this.a=new Psb;NYb(this,a);Dsb(this.a,a)} +function jYb(){Ckb(this);this.b=new f7c(Pje,Pje);this.a=new f7c(Qje,Qje)} +function rAb(a,b){this.c=0;this.b=b;jvb.call(this,a,17493);this.a=this.c} +function wyb(a){oyb();if(lyb){return}this.c=a;this.e=true;this.a=new Rkb} +function oyb(){oyb=ccb;lyb=true;jyb=false;kyb=false;nyb=false;myb=false} +function C3c(a,b){if(JD(b,149)){return dfb(a.c,BD(b,149).c)}return false} +function zUc(a,b){var c;c=0;!!a&&(c+=a.f.a/2);!!b&&(c+=b.f.a/2);return c} +function j4c(a,b){var c;c=BD(Wrb(a.d,b),23);return c?c:BD(Wrb(a.e,b),23)} +function Lzd(a){this.b=a;Fyd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} +function Uzd(a){this.b=a;$yd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} +function $Kd(a){if(!a.t){a.t=new YMd(a);vtd(new c0d(a),0,a.t)}return a.t} +function kad(){ead();return OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])} +function Wbd(){Tbd();return OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])} +function Q5c(){N5c();return OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])} +function Q_c(){N_c();return OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])} +function _zc(){Vzc();return OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])} +function sqc(){mqc();return OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])} +function n$c(){k$c();return OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])} +function _jc(){Xjc();return OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])} +function Ftc(){Ctc();return OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])} +function T0d(){T0d=ccb;var a,b;R0d=(LFd(),b=new MPd,b);S0d=(a=new OJd,a)} +function yUd(a){var b;if(!a.c){b=a.r;JD(b,88)&&(a.c=BD(b,26))}return a.c} +function zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false} +function RC(a){var b,c,d;b=a&Eje;c=a>>22&Eje;d=a<0?Fje:0;return TC(b,c,d)} +function uy(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qzb(b)}} +function Tc(a,b){var c,d;c=BD(Iv(a.c,b),14);if(c){d=c.gc();c.$b();a.d-=d}} +function tjb(a,b){var c,d;c=b.cd();d=Awb(a,c);return !!d&&wtb(d.e,b.dd())} +function Qgb(a,b){if(b==0||a.e==0){return a}return b>0?ihb(a,b):lhb(a,-b)} +function Rgb(a,b){if(b==0||a.e==0){return a}return b>0?lhb(a,b):ihb(a,-b)} +function Rr(a){if(Qr(a)){a.c=a.a;return a.a.Pb()}else{throw vbb(new utb)}} +function Yac(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(j0b(),e0b)&&c.k==e0b} +function kZb(a){var b;b=new UZb;tNb(b,a);yNb(b,(Nyc(),jxc),null);return b} +function hid(a,b,c){var d;return d=a.Yg(b),d>=0?a._g(d,c,true):sid(a,b,c)} +function uHb(a,b,c,d){var e;for(e=0;e<rHb;e++){nHb(a.a[b.g][e],c,d[b.g])}} +function vHb(a,b,c,d){var e;for(e=0;e<sHb;e++){mHb(a.a[e][b.g],c,d[b.g])}} +function vSd(a,b,c,d,e){kxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} +function zSd(a,b,c,d,e){lxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} +function ISd(a,b,c,d,e){oxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} +function qSd(a,b,c,d,e){oxd.call(this,b,d,e);jSd(this);this.c=a;this.b=c} +function mWd(a,b,c){VVd.call(this,c);this.b=a;this.c=b;this.d=(CWd(),AWd)} +function oxd(a,b,c){this.d=a;this.k=b?1:0;this.f=c?1:0;this.o=-1;this.p=0} +function _6d(a,b,c){var d;d=new a7d(a.a);Ld(d,a.a.a);jrb(d.f,b,c);a.a.a=d} +function lud(a,b){a.qi(a.i+1);mud(a,a.i,a.oi(a.i,b));a.bi(a.i++,b);a.ci()} +function oud(a){var b,c;++a.j;b=a.g;c=a.i;a.g=null;a.i=0;a.di(c,b);a.ci()} +function Ou(a){var b,c;Qb(a);b=Iu(a.length);c=new Skb(b);nmb(c,a);return c} +function km(a){var b;b=(Qb(a),a?new Tkb(a):Nu(a.Kc()));smb(b);return Dm(b)} +function Kkb(a,b){var c;c=(tCb(b,a.c.length),a.c[b]);cCb(a.c,b,1);return c} +function Qc(a,b){var c;c=BD(a.c.xc(b),14);!c&&(c=a.ic(b));return a.pc(b,c)} +function cfb(a,b){var c,d;c=(uCb(a),a);d=(uCb(b),b);return c==d?0:c<d?-1:1} +function Fpb(a){var b;b=a.e+a.f;if(isNaN(b)&&Ldb(a.d)){return a.d}return b} +function uwb(a,b){!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Nfb(a.a,b);return a} +function Sb(a,b){if(a<0||a>b){throw vbb(new qcb(Jb(a,b,'index')))}return a} +function zhb(a,b,c,d){var e;e=KC(WD,oje,25,b,15,1);Ahb(e,a,b,c,d);return e} +function _A(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);YA(a,c)} +function A$c(a,b){return $wnd.Math.min(S6c(b.a,a.d.d.c),S6c(b.b,a.d.d.c))} +function Thb(a,b){return ND(b)?b==null?krb(a.f,null):Erb(a.g,b):krb(a.f,b)} +function b1b(a){this.c=a;this.a=new olb(this.c.a);this.b=new olb(this.c.b)} +function kRb(){this.e=new Rkb;this.c=new Rkb;this.d=new Rkb;this.b=new Rkb} +function MFb(){this.g=new PFb;this.b=new PFb;this.a=new Rkb;this.k=new Rkb} +function Gjc(a,b,c){this.a=a;this.c=b;this.d=c;Ekb(b.e,this);Ekb(c.b,this)} +function wBb(a,b){fvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function CBb(a,b){jvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function IBb(a,b){nvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function BQc(a,b,c){this.a=a;this.b=b;this.c=c;Ekb(a.t,this);Ekb(b.i,this)} +function SRc(){this.b=new Psb;this.a=new Psb;this.b=new Psb;this.a=new Psb} +function g6c(){g6c=ccb;f6c=new Lsd('org.eclipse.elk.labels.labelManager')} +function Vac(){Vac=ccb;Uac=new Msd('separateLayerConnections',(gbc(),fbc))} +function HOc(){HOc=ccb;GOc=new IOc('REGULAR',0);FOc=new IOc('CRITICAL',1)} +function _Ac(){_Ac=ccb;$Ac=new aBc('STACKED',0);ZAc=new aBc('SEQUENCED',1)} +function C_c(){C_c=ccb;B_c=new D_c('FIXED',0);A_c=new D_c('CENTER_NODE',1)} +function PHc(a,b){var c;c=VHc(a,b);a.b=new BHc(c.c.length);return OHc(a,c)} +function KAd(a,b,c){var d;++a.e;--a.f;d=BD(a.d[b].$c(c),133);return d.dd()} +function JJd(a){var b;if(!a.a){b=a.r;JD(b,148)&&(a.a=BD(b,148))}return a.a} +function poc(a){if(a.a){if(a.e){return poc(a.e)}}else{return a}return null} +function ODc(a,b){if(a.p<b.p){return 1}else if(a.p>b.p){return -1}return 0} +function pvb(a,b){uCb(b);if(a.c<a.d){a.ze(b,a.c++);return true}return false} +function QYd(a,b){if(Mhb(a.a,b)){Thb(a.a,b);return true}else{return false}} +function fd(a){var b,c;b=a.cd();c=BD(a.dd(),14);return $j(c.Nc(),new ah(b))} +function sqb(a){var b;b=BD(ZBb(a.b,a.b.length),9);return new xqb(a.a,b,a.c)} +function _zb(a){var b;Uzb(a);b=new fAb(a,a.a.e,a.a.d|4);return new bAb(a,b)} +function HAb(a){var b;Tzb(a);b=0;while(a.a.sd(new RBb)){b=wbb(b,1)}return b} +function UDc(a,b,c){var d,e;d=0;for(e=0;e<b.length;e++){d+=a.$f(b[e],d,c)}} +function QJb(a,b){var c;if(a.C){c=BD(Mpb(a.b,b),124).n;c.d=a.C.d;c.a=a.C.a}} +function Mi(a,b,c){Pb(b,a.e.Hd().gc());Pb(c,a.c.Hd().gc());return a.a[b][c]} +function Ugb(a,b){Hgb();this.e=a;this.d=1;this.a=OC(GC(WD,1),oje,25,15,[b])} +function dg(a,b,c,d){this.f=a;this.e=b;this.d=c;this.b=d;this.c=!d?null:d.d} +function o5b(a){var b,c,d,e;e=a.d;b=a.a;c=a.b;d=a.c;a.d=c;a.a=d;a.b=e;a.c=b} +function Y2d(a,b,c,d){X2d(a,b,c,M2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0))} +function tac(a,b){Odd(b,'Label management',1);RD(vNb(a,(g6c(),f6c)));Qdd(b)} +function Skb(a){Ckb(this);mCb(a>=0,'Initial capacity must not be negative')} +function lHb(){lHb=ccb;kHb=as((gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])))} +function SHb(){SHb=ccb;RHb=as((NHb(),OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])))} +function JIb(){JIb=ccb;IIb=as((EIb(),OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])))} +function Kyb(){Kyb=ccb;Jyb=as((Fyb(),OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])))} +function DTb(){DTb=ccb;CTb=as((yTb(),OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])))} +function WXb(){WXb=ccb;VXb=as((RXb(),OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])))} +function Zpc(){Zpc=ccb;Ypc=as((Rpc(),OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])))} +function gqc(){gqc=ccb;fqc=as((bqc(),OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])))} +function Lqc(){Lqc=ccb;Kqc=as((Gqc(),OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])))} +function Kkc(){Kkc=ccb;Jkc=as((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])))} +function jsc(){jsc=ccb;isc=as((esc(),OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])))} +function asc(){asc=ccb;_rc=as((Xrc(),OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])))} +function Dzc(){Dzc=ccb;Czc=as((xzc(),OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])))} +function YAc(){YAc=ccb;XAc=as((TAc(),OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])))} +function yAc(){yAc=ccb;xAc=as((tAc(),OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])))} +function PAc(){PAc=ccb;OAc=as((KAc(),OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])))} +function QBc(){QBc=ccb;PBc=as((LBc(),OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])))} +function yBc(){yBc=ccb;xBc=as((tBc(),OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])))} +function HBc(){HBc=ccb;GBc=as((CBc(),OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])))} +function wGc(){wGc=ccb;vGc=as((rGc(),OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])))} +function zVc(){zVc=ccb;yVc=as((tVc(),OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])))} +function vWc(){vWc=ccb;uWc=as((pWc(),OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])))} +function EYc(){EYc=ccb;DYc=as((zYc(),OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])))} +function yXc(){yXc=ccb;xXc=as((sXc(),OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])))} +function b_c(){b_c=ccb;a_c=as((Y$c(),OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])))} +function mbd(){mbd=ccb;lbd=as((hbd(),OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])))} +function vad(){vad=ccb;uad=as((qad(),OC(GC(u1,1),Kie,272,0,[nad,oad,pad])))} +function icd(){dcd();return OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])} +function ikd(a,b){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),qAd(a.o,b)} +function NAd(a){!a.g&&(a.g=new JCd);!a.g.d&&(a.g.d=new MBd(a));return a.g.d} +function yAd(a){!a.g&&(a.g=new JCd);!a.g.a&&(a.g.a=new SBd(a));return a.g.a} +function EAd(a){!a.g&&(a.g=new JCd);!a.g.b&&(a.g.b=new GBd(a));return a.g.b} +function FAd(a){!a.g&&(a.g=new JCd);!a.g.c&&(a.g.c=new iCd(a));return a.g.c} +function A2d(a,b,c){var d,e;e=new p4d(b,a);for(d=0;d<c;++d){d4d(e)}return e} +function Atd(a,b,c){var d,e;if(c!=null){for(d=0;d<b;++d){e=c[d];a.fi(d,e)}}} +function uhb(a,b,c,d){var e;e=KC(WD,oje,25,b+1,15,1);vhb(e,a,b,c,d);return e} +function KC(a,b,c,d,e,f){var g;g=LC(e,d);e!=10&&OC(GC(a,f),b,c,e,g);return g} +function bYd(a,b,c,d){!!c&&(d=c.gh(b,bLd(c.Tg(),a.c.Lj()),null,d));return d} +function cYd(a,b,c,d){!!c&&(d=c.ih(b,bLd(c.Tg(),a.c.Lj()),null,d));return d} +function KNb(a,b,c){BD(a.b,65);BD(a.b,65);BD(a.b,65);Hkb(a.a,new TNb(c,b,a))} +function ACb(a,b,c){if(a<0||b>c||b<a){throw vbb(new Xfb(xke+a+zke+b+oke+c))}} +function zCb(a){if(!a){throw vbb(new Zdb('Unable to add element to queue'))}} +function Vzb(a){if(!a){this.c=null;this.b=new Rkb}else{this.c=a;this.b=null}} +function exb(a,b){pjb.call(this,a,b);this.a=KC(dL,zie,436,2,0,1);this.b=true} +function _rb(a){Whb.call(this,a,0);Trb(this);this.d.b=this.d;this.d.a=this.d} +function VRc(a){var b;b=a.b;if(b.b==0){return null}return BD(Ut(b,0),188).b} +function Kwb(a,b){var c;c=new fxb;c.c=true;c.d=b.dd();return Lwb(a,b.cd(),c)} +function bB(a,b){var c;c=a.q.getHours()+(b/3600|0);a.q.setSeconds(b);YA(a,c)} +function zGc(a,b,c){var d;d=a.b[c.c.p][c.p];d.b+=b.b;d.c+=b.c;d.a+=b.a;++d.a} +function S6c(a,b){var c,d;c=a.a-b.a;d=a.b-b.b;return $wnd.Math.sqrt(c*c+d*d)} +function Ipc(){Ipc=ccb;Gpc=new Jpc('QUADRATIC',0);Hpc=new Jpc('SCANLINE',1)} +function hCc(){hCc=ccb;gCc=c3c(e3c(new j3c,(qUb(),lUb),(S8b(),n8b)),pUb,J8b)} +function l8c(){i8c();return OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])} +function I7c(){F7c();return OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])} +function Dpc(){Apc();return OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])} +function Brc(){yrc();return OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])} +function orc(){lrc();return OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])} +function rzc(){lzc();return OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])} +function Wqc(){Sqc();return OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])} +function uSc(){qSc();return OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])} +function wcd(){rcd();return OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])} +function Pad(){Mad();return OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])} +function m0b(){j0b();return OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])} +function mib(a){yCb(!!a.c);xpb(a.e,a);a.c.Qb();a.c=null;a.b=kib(a);ypb(a.e,a)} +function tsb(a){xpb(a.c.a.e,a);sCb(a.b!=a.c.a.d);a.a=a.b;a.b=a.b.a;return a.a} +function kSd(a){var b;if(!a.a&&a.b!=-1){b=a.c.Tg();a.a=XKd(b,a.b)}return a.a} +function wtd(a,b){if(a.hi()&&a.Hc(b)){return false}else{a.Yh(b);return true}} +function $Hb(a,b){ytb(b,'Horizontal alignment cannot be null');a.b=b;return a} +function Lfe(a,b,c){wfe();var d;d=Kfe(a,b);c&&!!d&&Nfe(a)&&(d=null);return d} +function vXb(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);uXb(d,b,c)}} +function tXb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=BD(d.Pb(),37);sXb(a,c,0,0)}} +function ojc(a,b,c){var d;a.d[b.g]=c;d=a.g.c;d[b.g]=$wnd.Math.max(d[b.g],c+1)} +function KZc(a,b){var c,d,e;e=a.r;d=a.d;c=MZc(a,b,true);return c.b!=e||c.a!=d} +function Jjc(a,b){Vrb(a.e,b)||Xrb(a.e,b,new Pjc(b));return BD(Wrb(a.e,b),113)} +function Byb(a,b,c,d){uCb(a);uCb(b);uCb(c);uCb(d);return new Lyb(a,b,new Vxb)} +function dId(a,b,c,d){this.rj();this.a=b;this.b=a;this.c=new Y5d(this,b,c,d)} +function oSd(a,b,c,d,e,f){mxd.call(this,b,d,e,f);jSd(this);this.c=a;this.b=c} +function ESd(a,b,c,d,e,f){mxd.call(this,b,d,e,f);jSd(this);this.c=a;this.a=c} +function Bqd(a,b,c){var d,e,f;d=aC(a,c);e=null;!!d&&(e=aqd(d));f=e;Vqd(b,c,f)} +function Cqd(a,b,c){var d,e,f;d=aC(a,c);e=null;!!d&&(e=aqd(d));f=e;Vqd(b,c,f)} +function v1d(a,b,c){var d,e;e=(d=nUd(a.b,b),d);return !e?null:V1d(p1d(a,e),c)} +function gid(a,b){var c;return c=a.Yg(b),c>=0?a._g(c,true,true):sid(a,b,true)} +function s6b(a,b){return Kdb(Edb(ED(vNb(a,(wtc(),htc)))),Edb(ED(vNb(b,htc))))} +function pUc(){pUc=ccb;oUc=b3c(b3c(g3c(new j3c,(yRc(),vRc)),(qSc(),pSc)),lSc)} +function IHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length);return KHc(a,d)} +function qhe(a){if(a.b<=0)throw vbb(new utb);--a.b;a.a-=a.c.c;return meb(a.a)} +function ptd(a){var b;if(!a.a){throw vbb(new vtb)}b=a.a;a.a=Xod(a.a);return b} +function dBb(a){while(!a.a){if(!HBb(a.c,new hBb(a))){return false}}return true} +function vr(a){var b;Qb(a);if(JD(a,198)){b=BD(a,198);return b}return new wr(a)} +function r3c(a){p3c();BD(a.We((Y9c(),x9c)),174).Fc((rcd(),ocd));a.Ye(w9c,null)} +function p3c(){p3c=ccb;m3c=new v3c;o3c=new x3c;n3c=mn((Y9c(),w9c),m3c,b9c,o3c)} +function fWc(){fWc=ccb;dWc=new hWc('LEAF_NUMBER',0);eWc=new hWc('NODE_SIZE',1)} +function UMc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Osb(a.d);a.e.a.c=KC(SI,Uhe,1,0,5,1)} +function yHc(a){a.a=KC(WD,oje,25,a.b+1,15,1);a.c=KC(WD,oje,25,a.b,15,1);a.d=0} +function MWb(a,b){if(a.a.ue(b.d,a.b)>0){Ekb(a.c,new dWb(b.c,b.d,a.d));a.b=b.d}} +function nud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.g[b]} +function pOd(a,b,c){Itd(a,c);if(c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} +function KLd(a){var b;if(a.Ek()){for(b=a.i-1;b>=0;--b){qud(a,b)}}return wud(a)} +function Bwb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} +function ulb(a,b){var c,d;pCb(b);return c=(d=a.slice(0,b),PC(d,a)),c.length=b,c} +function Klb(a,b,c,d){var e;d=(ipb(),!d?fpb:d);e=a.slice(b,c);Llb(e,a,b,c,-b,d)} +function bid(a,b,c,d,e){return b<0?sid(a,c,d):BD(c,66).Nj().Pj(a,a.yh(),b,d,e)} +function hZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} +function iZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} +function nDb(a,b){if(b.a){throw vbb(new hz(Hke))}Qqb(a.a,b);b.a=a;!a.j&&(a.j=b)} +function qBb(a,b){nvb.call(this,b.rd(),b.qd()&-16449);uCb(a);this.a=a;this.c=b} +function Ti(a,b){var c,d;d=b/a.c.Hd().gc()|0;c=b%a.c.Hd().gc();return Mi(a,d,c)} +function NHb(){NHb=ccb;LHb=new OHb(jle,0);KHb=new OHb(gle,1);MHb=new OHb(kle,2)} +function lxb(){lxb=ccb;hxb=new mxb('All',0);ixb=new rxb;jxb=new txb;kxb=new wxb} +function zxb(){zxb=ccb;yxb=as((lxb(),OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])))} +function uWb(){uWb=ccb;tWb=as((lWb(),OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])))} +function ALb(){ALb=ccb;zLb=as((vLb(),OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])))} +function WMb(){WMb=ccb;VMb=as((RMb(),OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])))} +function WOb(){WOb=ccb;VOb=as((ROb(),OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])))} +function GRc(){GRc=ccb;FRc=as((yRc(),OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])))} +function mbc(){mbc=ccb;lbc=as((gbc(),OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])))} +function oXc(){oXc=ccb;nXc=as((iXc(),OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])))} +function Fjc(){Fjc=ccb;Ejc=as((Ajc(),OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])))} +function Pzc(){Pzc=ccb;Ozc=as((Izc(),OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])))} +function ugd(){ugd=ccb;tgd=as((pgd(),OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])))} +function xbd(){xbd=ccb;wbd=as((rbd(),OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])))} +function Fad(){Fad=ccb;Ead=as((Aad(),OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])))} +function Ied(){Ied=ccb;Hed=as((Ded(),OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])))} +function ydd(){ydd=ccb;xdd=as((tdd(),OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])))} +function A9d(){A9d=ccb;Smd();x9d=Pje;w9d=Qje;z9d=new Ndb(Pje);y9d=new Ndb(Qje)} +function _qc(){_qc=ccb;$qc=new arc(ane,0);Zqc=new arc('IMPROVE_STRAIGHTNESS',1)} +function eIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} +function gIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} +function PC(a,b){HC(b)!=10&&OC(rb(b),b.hm,b.__elementTypeId$,HC(b),a);return a} +function Lkb(a,b){var c;c=Jkb(a,b,0);if(c==-1){return false}Kkb(a,c);return true} +function Zrb(a,b){var c;c=BD(Thb(a.e,b),387);if(c){jsb(c);return c.e}return null} +function Jbb(a){var b;if(Fbb(a)){b=0-a;if(!isNaN(b)){return b}}return zbb(hD(a))} +function Jkb(a,b,c){for(;c<a.c.length;++c){if(wtb(b,a.c[c])){return c}}return -1} +function SAb(a,b,c){var d;Tzb(a);d=new NBb;d.a=b;a.a.Nb(new VBb(d,c));return d.a} +function aAb(a){var b;Tzb(a);b=KC(UD,Vje,25,0,15,1);_ub(a.a,new kAb(b));return b} +function ajc(a){var b,c;c=BD(Ikb(a.j,0),11);b=BD(vNb(c,(wtc(),$sc)),11);return b} +function yc(a){var b;if(!xc(a)){throw vbb(new utb)}a.e=1;b=a.d;a.d=null;return b} +function wu(a,b){var c;this.f=a;this.b=b;c=BD(Ohb(a.b,b),283);this.c=!c?null:c.b} +function Ygc(){Hgc();this.b=new Lqb;this.f=new Lqb;this.g=new Lqb;this.e=new Lqb} +function Tnc(a,b){this.a=KC(OQ,kne,10,a.a.c.length,0,1);Qkb(a.a,this.a);this.b=b} +function zoc(a){var b;for(b=a.p+1;b<a.c.a.c.length;++b){--BD(Ikb(a.c.a,b),10).p}} +function Rwd(a){var b;b=a.Ai();b!=null&&a.d!=-1&&BD(b,92).Ng(a);!!a.i&&a.i.Fi()} +function rFd(a){Py(this);this.g=!a?null:Wy(a,a.$d());this.f=a;Ry(this);this._d()} +function pSd(a,b,c,d,e,f,g){nxd.call(this,b,d,e,f,g);jSd(this);this.c=a;this.b=c} +function Ayb(a,b,c,d,e){uCb(a);uCb(b);uCb(c);uCb(d);uCb(e);return new Lyb(a,b,d)} +function B2c(a,b){if(b<0){throw vbb(new qcb(ese+b))}A2c(a,b+1);return Ikb(a.j,b)} +function Ob(a,b,c,d){if(!a){throw vbb(new Wdb(hc(b,OC(GC(SI,1),Uhe,1,5,[c,d]))))}} +function dDb(a,b){return wtb(b,Ikb(a.f,0))||wtb(b,Ikb(a.f,1))||wtb(b,Ikb(a.f,2))} +function ghd(a,b){ecd(BD(BD(a.f,33).We((Y9c(),t9c)),98))&&NCd(Yod(BD(a.f,33)),b)} +function p1d(a,b){var c,d;c=BD(b,675);d=c.Oh();!d&&c.Rh(d=new Y1d(a,b));return d} +function q1d(a,b){var c,d;c=BD(b,677);d=c.pk();!d&&c.tk(d=new j2d(a,b));return d} +function QSd(a){if(!a.b){a.b=new UTd(a,j5,a);!a.a&&(a.a=new fTd(a,a))}return a.b} +function yTb(){yTb=ccb;wTb=new zTb('XY',0);vTb=new zTb('X',1);xTb=new zTb('Y',2)} +function EIb(){EIb=ccb;DIb=new FIb('TOP',0);CIb=new FIb(gle,1);BIb=new FIb(mle,2)} +function esc(){esc=ccb;csc=new fsc(ane,0);dsc=new fsc('TOP',1);bsc=new fsc(mle,2)} +function BAc(){BAc=ccb;zAc=new CAc('INPUT_ORDER',0);AAc=new CAc('PORT_DEGREE',1)} +function wD(){wD=ccb;sD=TC(Eje,Eje,524287);tD=TC(0,0,Gje);uD=RC(1);RC(2);vD=RC(0)} +function WDc(a,b,c){a.a.c=KC(SI,Uhe,1,0,5,1);$Dc(a,b,c);a.a.c.length==0||TDc(a,b)} +function rfb(a){var b,c;c=a.length;b=KC(TD,$ie,25,c,15,1);ffb(a,0,c,b,0);return b} +function Aid(a){var b;if(!a.dh()){b=aLd(a.Tg())-a.Ah();a.ph().bk(b)}return a.Pg()} +function xjd(a){var b;b=CD(Ajd(a,32));if(b==null){yjd(a);b=CD(Ajd(a,32))}return b} +function iid(a,b){var c;c=bLd(a.d,b);return c>=0?fid(a,c,true,true):sid(a,b,true)} +function vgc(a,b){qgc();var c,d;c=ugc(a);d=ugc(b);return !!c&&!!d&&!omb(c.k,d.k)} +function Gqd(a,b){dld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Hqd(a,b){eld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Iqd(a,b){cld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Jqd(a,b){ald(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function agd(a){(!this.q?(mmb(),mmb(),kmb):this.q).Ac(!a.q?(mmb(),mmb(),kmb):a.q)} +function S2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} +function U2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} +function INb(a,b){HNb=new tOb;FNb=b;GNb=a;BD(GNb.b,65);KNb(GNb,HNb,null);JNb(GNb)} +function uud(a,b,c){var d;d=a.g[b];mud(a,b,a.oi(b,c));a.gi(b,c,d);a.ci();return d} +function Ftd(a,b){var c;c=a.Xc(b);if(c>=0){a.$c(c);return true}else{return false}} +function YId(a){var b;if(a.d!=a.r){b=wId(a);a.e=!!b&&b.Cj()==Bve;a.d=b}return a.e} +function fr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c} +function Wrb(a,b){var c;c=BD(Ohb(a.e,b),387);if(c){Yrb(a,c);return c.e}return null} +function UA(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} +function LAb(a,b){var c,d;Uzb(a);d=new IBb(b,a.a);c=new fBb(d);return new YAb(a,c)} +function tB(d,a){var b=d.a[a];var c=(rC(),qC)[typeof b];return c?c(b):xC(typeof b)} +function yzc(a){switch(a.g){case 0:return Ohe;case 1:return -1;default:return 0;}} +function oD(a){if(eD(a,(wD(),vD))<0){return -aD(hD(a))}return a.l+a.m*Hje+a.h*Ije} +function HC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} +function dub(a){var b;b=a.b.c.length==0?null:Ikb(a.b,0);b!=null&&fub(a,0);return b} +function uA(a,b){while(b[0]<a.length&&hfb(' \t\r\n',wfb(bfb(a,b[0])))>=0){++b[0]}} +function sgb(a,b){this.e=b;this.a=vgb(a);this.a<54?(this.f=Sbb(a)):(this.c=ghb(a))} +function vge(a,b,c,d){wfe();xfe.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d} +function EA(a,b,c){var d,e;d=10;for(e=0;e<c-1;e++){b<d&&(a.a+='0',a);d*=10}a.a+=b} +function Hhe(a,b){var c;c=0;while(a.e!=a.i.gc()){Qrd(b,Dyd(a),meb(c));c!=Ohe&&++c}} +function xHc(a,b){var c;++a.d;++a.c[b];c=b+1;while(c<a.a.length){++a.a[c];c+=c&-c}} +function Qgc(a,b){var c,d,e;e=b.c.i;c=BD(Ohb(a.f,e),57);d=c.d.c-c.e.c;p7c(b.a,d,0)} +function Scb(a){var b,c;b=a+128;c=(Ucb(),Tcb)[b];!c&&(c=Tcb[b]=new Mcb(a));return c} +function es(a,b){var c;uCb(b);c=a[':'+b];nCb(!!c,OC(GC(SI,1),Uhe,1,5,[b]));return c} +function Mz(a){var b,c;if(a.b){c=null;do{b=a.b;a.b=null;c=Pz(b,c)}while(a.b);a.b=c}} +function Lz(a){var b,c;if(a.a){c=null;do{b=a.a;a.a=null;c=Pz(b,c)}while(a.a);a.a=c}} +function Dqb(a){var b;++a.a;for(b=a.c.a.length;a.a<b;++a.a){if(a.c.b[a.a]){return}}} +function S9b(a,b){var c,d;d=b.c;for(c=d+1;c<=b.f;c++){a.a[c]>a.a[d]&&(d=c)}return d} +function fic(a,b){var c;c=Jy(a.e.c,b.e.c);if(c==0){return Kdb(a.e.d,b.e.d)}return c} +function Ogb(a,b){if(b.e==0){return Ggb}if(a.e==0){return Ggb}return Dhb(),Ehb(a,b)} +function nCb(a,b){if(!a){throw vbb(new Wdb(DCb('Enum constant undefined: %s',b)))}} +function AWb(){AWb=ccb;xWb=new XWb;yWb=new _Wb;vWb=new dXb;wWb=new hXb;zWb=new lXb} +function UEb(){UEb=ccb;SEb=new VEb('BY_SIZE',0);TEb=new VEb('BY_SIZE_AND_SHAPE',1)} +function XRb(){XRb=ccb;VRb=new YRb('EADES',0);WRb=new YRb('FRUCHTERMAN_REINGOLD',1)} +function xqc(){xqc=ccb;vqc=new yqc('READING_DIRECTION',0);wqc=new yqc('ROTATION',1)} +function uqc(){uqc=ccb;tqc=as((mqc(),OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])))} +function bAc(){bAc=ccb;aAc=as((Vzc(),OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])))} +function bkc(){bkc=ccb;akc=as((Xjc(),OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])))} +function Htc(){Htc=ccb;Gtc=as((Ctc(),OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])))} +function S_c(){S_c=ccb;R_c=as((N_c(),OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])))} +function S5c(){S5c=ccb;R5c=as((N5c(),OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])))} +function p$c(){p$c=ccb;o$c=as((k$c(),OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])))} +function vUb(){vUb=ccb;uUb=as((qUb(),OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])))} +function mad(){mad=ccb;lad=as((ead(),OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])))} +function Ybd(){Ybd=ccb;Xbd=as((Tbd(),OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])))} +function cdd(){cdd=ccb;bdd=as((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])))} +function _1c(a,b){var c;c=BD(Ohb(a.a,b),134);if(!c){c=new zNb;Rhb(a.a,b,c)}return c} +function hoc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.a==a}return false} +function ioc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.i==a}return false} +function Jub(a,b){uCb(b);Iub(a);if(a.d.Ob()){b.td(a.d.Pb());return true}return false} +function Oy(a){if(ybb(a,Ohe)>0){return Ohe}if(ybb(a,Rie)<0){return Rie}return Tbb(a)} +function Cv(a){if(a<3){Xj(a,Hie);return a+1}if(a<Iie){return QD(a/0.75+1)}return Ohe} +function XKd(a,b){var c;c=(a.i==null&&TKd(a),a.i);return b>=0&&b<c.length?c[b]:null} +function cC(a,b,c){var d;if(b==null){throw vbb(new Geb)}d=aC(a,b);dC(a,b,c);return d} +function Emc(a){a.a>=-0.01&&a.a<=ple&&(a.a=0);a.b>=-0.01&&a.b<=ple&&(a.b=0);return a} +function sfb(a,b){return b==(ntb(),ntb(),mtb)?a.toLocaleLowerCase():a.toLowerCase()} +function idb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(fdb(a),a.o)} +function Pnd(a){var b,c;c=(b=new SSd,b);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),c)} +function Pdd(a,b){var c;c=b>0?b-1:b;return Vdd(Wdd(Xdd(Ydd(new Zdd,c),a.n),a.j),a.k)} +function u2d(a,b,c,d){var e;a.j=-1;Qxd(a,I2d(a,b,c),(Q6d(),e=BD(b,66).Mj(),e.Ok(d)))} +function VWb(a){this.g=a;this.f=new Rkb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)} +function mDb(a){this.b=new Rkb;this.a=new Rkb;this.c=new Rkb;this.d=new Rkb;this.e=a} +function Cnc(a,b){this.a=new Lqb;this.e=new Lqb;this.b=(xzc(),wzc);this.c=a;this.b=b} +function bIb(a,b,c){$Gb.call(this);THb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e} +function yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(hs(),gs)} +function zud(a){if(a<0){throw vbb(new Wdb('Illegal Capacity: '+a))}this.g=this.ri(a)} +function avb(a,b){if(0>a||a>b){throw vbb(new scb('fromIndex: 0, toIndex: '+a+oke+b))}} +function Gs(a){var b;if(a.a==a.b.a){throw vbb(new utb)}b=a.a;a.c=b;a.a=a.a.e;return b} +function Zsb(a){var b;yCb(!!a.c);b=a.c.a;Nsb(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null} +function VAb(a,b){var c;Uzb(a);c=new lBb(a,a.a.rd(),a.a.qd()|4,b);return new YAb(a,c)} +function ke(a,b){var c,d;c=BD(Hv(a.d,b),14);if(!c){return null}d=b;return a.e.pc(d,c)} +function xac(a,b){var c,d;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),70);yNb(c,(wtc(),Ssc),b)}} +function t9b(a){var b;b=Edb(ED(vNb(a,(Nyc(),Zwc))));if(b<0){b=0;yNb(a,Zwc,b)}return b} +function ifc(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);cfc(c,d,1);Ekb(b,new rfc(c,d))} +function NMc(a,b,c){var d;d=a.a.e[BD(b.a,10).p]-a.a.e[BD(c.a,10).p];return QD(Eeb(d))} +function iZb(a,b,c,d,e,f){var g;g=kZb(d);QZb(g,e);RZb(g,f);Rc(a.a,d,new BZb(g,b,c.f))} +function Bid(a,b){var c;c=YKd(a.Tg(),b);if(!c){throw vbb(new Wdb(ite+b+lte))}return c} +function ntd(a,b){var c;c=a;while(Xod(c)){c=Xod(c);if(c==b){return true}}return false} +function Uw(a,b){var c,d,e;d=b.a.cd();c=BD(b.a.dd(),14).gc();for(e=0;e<c;e++){a.td(d)}} +function Hkb(a,b){var c,d,e,f;uCb(b);for(d=a.c,e=0,f=d.length;e<f;++e){c=d[e];b.td(c)}} +function Nsb(a,b){var c;c=b.c;b.a.b=b.b;b.b.a=b.a;b.a=b.b=null;b.c=null;--a.b;return c} +function wqb(a,b){if(!!b&&a.b[b.g]==b){NC(a.b,b.g,null);--a.c;return true}return false} +function lo(a,b){return !!vo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15))))} +function w$b(a,b){ecd(BD(vNb(BD(a.e,10),(Nyc(),Vxc)),98))&&(mmb(),Okb(BD(a.e,10).j,b))} +function THb(a){a.b=(NHb(),KHb);a.f=(EIb(),CIb);a.d=(Xj(2,Jie),new Skb(2));a.e=new d7c} +function gHb(){gHb=ccb;dHb=new hHb('BEGIN',0);eHb=new hHb(gle,1);fHb=new hHb('END',2)} +function qad(){qad=ccb;nad=new rad(gle,0);oad=new rad('HEAD',1);pad=new rad('TAIL',2)} +function Fsd(){Csd();return OC(GC(O3,1),Kie,237,0,[Bsd,ysd,zsd,xsd,Asd,vsd,usd,wsd])} +function c6c(){_5c();return OC(GC(f1,1),Kie,277,0,[$5c,T5c,X5c,Z5c,U5c,V5c,W5c,Y5c])} +function Dlc(){Alc();return OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc])} +function nAc(){kAc();return OC(GC(aX,1),Kie,260,0,[iAc,dAc,gAc,eAc,fAc,cAc,hAc,jAc])} +function kcd(){kcd=ccb;jcd=as((dcd(),OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])))} +function tHb(){tHb=ccb;sHb=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])).length;rHb=sHb} +function wed(a){this.b=(Qb(a),new Tkb(a));this.a=new Rkb;this.d=new Rkb;this.e=new d7c} +function W6c(a){var b;b=$wnd.Math.sqrt(a.a*a.a+a.b*a.b);if(b>0){a.a/=b;a.b/=b}return a} +function bKd(a){var b;if(a.w){return a.w}else{b=cKd(a);!!b&&!b.kh()&&(a.w=b);return b}} +function gZd(a){var b;if(a==null){return null}else{b=BD(a,190);return Umd(b,b.length)}} +function qud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.li(b,a.g[b])} +function Mmc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){rqb(a.b,b);b=Xcd(b)}rqb(a.b,b)} +function Jmc(a){var b;for(b=0;b<a.c.length;b++){(tCb(b,a.c.length),BD(a.c[b],11)).p=b}} +function bEc(a,b,c){var d,e,f;e=b[c];for(d=0;d<e.length;d++){f=e[d];a.e[f.c.p][f.p]=d}} +function ZEc(a,b){var c,d,e,f;for(d=a.d,e=0,f=d.length;e<f;++e){c=d[e];REc(a.g,c).a=b}} +function q7c(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);P6c(c,b)}return a} +function zUb(a,b){var c;c=c7c(R6c(BD(Ohb(a.g,b),8)),E6c(BD(Ohb(a.f,b),460).b));return c} +function lib(a){var b;xpb(a.e,a);sCb(a.b);a.c=a.a;b=BD(a.a.Pb(),42);a.b=kib(a);return b} +function CD(a){var b;CCb(a==null||Array.isArray(a)&&(b=HC(a),!(b>=14&&b<=16)));return a} +function dcb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d} +function TLc(a,b,c){var d,e;d=b;do{e=Edb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)} +function NQd(a,b){var c,d;d=a.a;c=OQd(a,b,null);d!=b&&!a.e&&(c=QQd(a,b,c));!!c&&c.Fi()} +function ADb(a,b){return Iy(),My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} +function Ky(a,b){Iy();My(Qie);return $wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} +function Akc(a,b){gkc();return beb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)} +function oo(a,b){return Kv(uo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} +function o0b(){o0b=ccb;n0b=as((j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])))} +function n8c(){n8c=ccb;m8c=as((i8c(),OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])))} +function K7c(){K7c=ccb;J7c=as((F7c(),OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])))} +function Fpc(){Fpc=ccb;Epc=as((Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])))} +function Drc(){Drc=ccb;Crc=as((yrc(),OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])))} +function qrc(){qrc=ccb;prc=as((lrc(),OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])))} +function tzc(){tzc=ccb;szc=as((lzc(),OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])))} +function Yqc(){Yqc=ccb;Xqc=as((Sqc(),OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])))} +function wSc(){wSc=ccb;vSc=as((qSc(),OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])))} +function ycd(){ycd=ccb;xcd=as((rcd(),OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])))} +function Rad(){Rad=ccb;Qad=as((Mad(),OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])))} +function Lbd(){Hbd();return OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])} +function vkd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,0,c,a.a))} +function wkd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.b))} +function hmd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.b))} +function ald(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.f))} +function cld(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.g))} +function dld(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,5,c,a.i))} +function eld(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,6,c,a.j))} +function omd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.j))} +function imd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.c))} +function pmd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,2,c,a.k))} +function qQd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,2,c,a.d))} +function AId(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,4,c,a.s))} +function DId(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,5,c,a.t))} +function _Jd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,c,b))} +function izd(a,b){var c;c=BD(Ohb((pEd(),oEd),a),55);return c?c.xj(b):KC(SI,Uhe,1,b,5,1)} +function Xpd(a,b){var c,d;c=b in a.a;if(c){d=aC(a,b).he();if(d){return d.a}}return null} +function ftd(a,b){var c,d,e;c=(d=(Fhd(),e=new Jod,e),!!b&&God(d,b),d);Hod(c,a);return c} +function LLd(a,b,c){Itd(a,c);if(!a.Bk()&&c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} +function Xdd(a,b){a.n=b;if(a.n){a.f=new Rkb;a.e=new Rkb}else{a.f=null;a.e=null}return a} +function ndb(a,b,c,d,e,f){var g;g=ldb(a,b);zdb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g} +function rSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} +function tSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} +function BSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} +function GSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} +function xSd(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} +function rDb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];nDb(a.a,c)}return a} +function pl(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qb(b)}return new vl(a)} +function Uz(a){var b=/function(?:\s+([\w$]+))?\s*\(/;var c=b.exec(a);return c&&c[1]||Xie} +function zdb(a,b){var c;if(!a){return}b.n=a;var d=tdb(b);if(!d){_bb[a]=[b];return}d.gm=b} +function vlb(a,b,c){var d,e;e=a.length;d=$wnd.Math.min(c,e);$Bb(a,0,b,0,d,true);return b} +function RPb(a,b,c){var d,e;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),79);Qqb(a,BD(c.Kb(d),33))}} +function Xbb(){Ybb();var a=Wbb;for(var b=0;b<arguments.length;b++){a.push(arguments[b])}} +function n7c(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Gsb(a,c,a.c.b,a.c)}} +function s$c(a,b){a.b=$wnd.Math.max(a.b,b.d);a.e+=b.r+(a.a.c.length==0?0:a.c);Ekb(a.a,b)} +function wkb(a){yCb(a.c>=0);if(ekb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} +function pgb(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=fhb(a.f)),a.c).e} +function My(a){if(!(a>=0)){throw vbb(new Wdb('tolerance ('+a+') must be >= 0'))}return a} +function n4c(){if(!f4c){f4c=new m4c;l4c(f4c,OC(GC(C0,1),Uhe,130,0,[new Z9c]))}return f4c} +function KAc(){KAc=ccb;JAc=new LAc(ole,0);HAc=new LAc('INPUT',1);IAc=new LAc('OUTPUT',2)} +function bqc(){bqc=ccb;$pc=new cqc('ARD',0);aqc=new cqc('MSD',1);_pc=new cqc('MANUAL',2)} +function rGc(){rGc=ccb;oGc=new sGc('BARYCENTER',0);pGc=new sGc(Bne,1);qGc=new sGc(Cne,2)} +function ztd(a,b){var c;c=a.gc();if(b<0||b>c)throw vbb(new Cyd(b,c));return new czd(a,b)} +function JAd(a,b){var c;if(JD(b,42)){return a.c.Mc(b)}else{c=qAd(a,b);LAd(a,b);return c}} +function $nd(a,b,c){yId(a,b);pnd(a,c);AId(a,0);DId(a,1);CId(a,true);BId(a,true);return a} +function Xj(a,b){if(a<0){throw vbb(new Wdb(b+' cannot be negative but was: '+a))}return a} +function Bt(a,b){var c,d;for(c=0,d=a.gc();c<d;++c){if(wtb(b,a.Xb(c))){return c}}return -1} +function Nc(a){var b,c;for(c=a.c.Cc().Kc();c.Ob();){b=BD(c.Pb(),14);b.$b()}a.c.$b();a.d=0} +function Ri(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Flb(b,b.length,null)}} +function ieb(a){var b,c;if(a==0){return 32}else{c=0;for(b=1;(b&a)==0;b<<=1){++c}return c}} +function NGb(a){var b,c;for(c=new olb(ahd(a));c.a<c.c.c.length;){b=BD(mlb(c),680);b.Gf()}} +function CUb(a){xUb();this.g=new Lqb;this.f=new Lqb;this.b=new Lqb;this.c=new Hp;this.i=a} +function XZb(){this.f=new d7c;this.d=new s0b;this.c=new d7c;this.a=new Rkb;this.b=new Rkb} +function c6d(a,b,c,d){this.rj();this.a=b;this.b=a;this.c=null;this.c=new d6d(this,b,c,d)} +function nxd(a,b,c,d,e){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1;e||(this.o=-2-d-1)} +function hJd(){FId.call(this);this.n=-1;this.g=null;this.i=null;this.j=null;this.Bb|=zte} +function Ldd(){Idd();return OC(GC(J1,1),Kie,259,0,[Bdd,Ddd,Add,Edd,Fdd,Hdd,Gdd,Cdd,zdd])} +function uFb(){rFb();return OC(GC(dN,1),Kie,250,0,[qFb,lFb,mFb,kFb,oFb,pFb,nFb,jFb,iFb])} +function qeb(){qeb=ccb;peb=OC(GC(WD,1),oje,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])} +function vCc(){vCc=ccb;uCc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} +function VCc(){VCc=ccb;UCc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} +function rDc(){rDc=ccb;qDc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} +function yFc(){yFc=ccb;xFc=c3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb,y8b)} +function Rpc(){Rpc=ccb;Ppc=new Tpc('LAYER_SWEEP',0);Opc=new Tpc(Tne,1);Qpc=new Tpc(ane,2)} +function RLc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d>0){return BD(Ikb(c.a,d-1),10)}return null} +function Lkd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.k))} +function kmd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.f))} +function lmd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,c,a.i))} +function Hod(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.a))} +function zpd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} +function UUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} +function VUd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} +function Apd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} +function pQd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,c,a.c))} +function PHd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.d))} +function jKd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.D))} +function Rdd(a,b){if(a.r>0&&a.c<a.r){a.c+=b;!!a.i&&a.i.d>0&&a.g!=0&&Rdd(a.i,b/a.r*a.i.d)}} +function dge(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new hee:new ude;a.c=ode(d,a.b,a.a)} +function g3d(a,b){return T6d(a.e,b)?(Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)):new c8d(b,a)} +function _o(a,b){return Fv(vo(a.a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} +function Nyb(a,b,c){return Ayb(a,new Kzb(b),new Mzb,new Ozb(c),OC(GC(xL,1),Kie,132,0,[]))} +function pAb(a){var b,c;if(0>a){return new yAb}b=a+1;c=new rAb(b,a);return new vAb(null,c)} +function umb(a,b){mmb();var c;c=new Mqb(1);ND(a)?Shb(c,a,b):jrb(c.f,a,b);return new iob(c)} +function aMb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(c<d){return -1}if(c==d){return 0}return 1} +function P2b(a){var b;b=vNb(a,(wtc(),$sc));if(JD(b,160)){return O2b(BD(b,160))}return null} +function Kp(a){var b;a=$wnd.Math.max(a,2);b=geb(a);if(a>b){b<<=1;return b>0?b:Iie}return b} +function xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)} +function T6c(a,b){var c;if(JD(b,8)){c=BD(b,8);return a.a==c.a&&a.b==c.b}else{return false}} +function _Mb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=xbb(Pbb(a.n[c][f],Tbb(Nbb(e,1))),3);return d} +function IAd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);HAd(a,c.cd(),c.dd())}} +function N1c(a,b){var c;c=new tOb;BD(b.b,65);BD(b.b,65);BD(b.b,65);Hkb(b.a,new T1c(a,c,b))} +function DUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,21,c,a.b))} +function jmd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,c,a.d))} +function _Id(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,13,c,a.j))} +function $jb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d<c;e=e+1&f,++d){NC(b,d,a.a[e])}} +function rqb(a,b){var c;uCb(b);c=b.g;if(!a.b[c]){NC(a.b,c,b);++a.c;return true}return false} +function eub(a,b){var c;c=b==null?-1:Jkb(a.b,b,0);if(c<0){return false}fub(a,c);return true} +function fub(a,b){var c;c=Kkb(a.b,a.b.c.length-1);if(b<a.b.c.length){Nkb(a.b,b,c);bub(a,b)}} +function eyb(a,b){((oyb(),lyb)?null:b.c).length==0&&qyb(b,new zyb);Shb(a.a,lyb?null:b.c,b)} +function M5b(a,b){Odd(b,'Hierarchical port constraint processing',1);N5b(a);P5b(a);Qdd(b)} +function GOb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=BD(d.Pb(),266);a.b=true;Qqb(a.e,c);c.b=a}} +function Owb(a,b){var c,d;c=1-b;d=a.a[c];a.a[c]=d.a[b];d.a[b]=a;a.b=true;d.b=false;return d} +function Gec(a,b){var c,d;c=BD(vNb(a,(Nyc(),ayc)),8);d=BD(vNb(b,ayc),8);return Kdb(c.b,d.b)} +function jfc(a){oEb.call(this);this.b=Edb(ED(vNb(a,(Nyc(),lyc))));this.a=BD(vNb(a,Swc),218)} +function XGc(a,b,c){uEc.call(this,a,b,c);this.a=new Lqb;this.b=new Lqb;this.d=new $Gc(this)} +function ku(a){this.e=a;this.d=new Uqb(Cv(Ec(this.e).gc()));this.c=this.e.a;this.b=this.e.c} +function BHc(a){this.b=a;this.a=KC(WD,oje,25,a+1,15,1);this.c=KC(WD,oje,25,a,15,1);this.d=0} +function THc(a,b,c){var d;d=new Rkb;UHc(a,b,d,c,true,true);a.b=new BHc(d.c.length);return d} +function nMc(a,b){var c;c=BD(Ohb(a.c,b),458);if(!c){c=new uMc;c.c=b;Rhb(a.c,c.c,c)}return c} +function $B(e,a){var b=e.a;var c=0;for(var d in b){b.hasOwnProperty(d)&&(a[c++]=d)}return a} +function pRd(a){var b;if(a.b==null){return LRd(),LRd(),KRd}b=a.Lk()?a.Kk():a.Jk();return b} +function r$c(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),33);dld(b,0);eld(b,0)}} +function HSb(){HSb=ccb;FSb=new Lsd(Ime);GSb=new Lsd(Jme);ESb=new Lsd(Kme);DSb=new Lsd(Lme)} +function y5b(){y5b=ccb;x5b=new z5b('TO_INTERNAL_LTR',0);w5b=new z5b('TO_INPUT_DIRECTION',1)} +function PUc(){PUc=ccb;NUc=new RUc('P1_NODE_PLACEMENT',0);OUc=new RUc('P2_EDGE_ROUTING',1)} +function Fkc(){Fkc=ccb;Ekc=new Gkc('START',0);Dkc=new Gkc('MIDDLE',1);Ckc=new Gkc('END',2)} +function I9b(){I9b=ccb;H9b=new Msd('edgelabelcenterednessanalysis.includelabel',(Bcb(),zcb))} +function Zyc(a,b){MAb(JAb(new YAb(null,new Kub(new Pib(a.b),1)),new bfd(a,b)),new ffd(a,b))} +function $Xc(){this.c=new jVc(0);this.b=new jVc(Tqe);this.d=new jVc(Sqe);this.a=new jVc(cme)} +function $Fc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=BD(c.Pb(),214);eFc(b,new oHc(b.e))}} +function ZFc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=BD(c.Pb(),214);dFc(b,new nHc(b.f))}} +function pnd(a,b){var c;c=a.zb;a.zb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.zb))} +function cod(a,b){var c;c=a.xb;a.xb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,c,a.xb))} +function dod(a,b){var c;c=a.yb;a.yb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.yb))} +function Knd(a,b){var c,d;c=(d=new OJd,d);c.n=b;wtd((!a.s&&(a.s=new cUd(t5,a,21,17)),a.s),c)} +function Qnd(a,b){var c,d;d=(c=new FUd,c);d.n=b;wtd((!a.s&&(a.s=new cUd(t5,a,21,17)),a.s),d)} +function ktb(a,b){var c,d;c=a.Pc();Klb(c,0,c.length,b);for(d=0;d<c.length;d++){a._c(d,c[d])}} +function ye(a,b){var c,d,e;uCb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();c=c|a.Fc(d)}return c} +function Bx(a){var b,c,d;b=0;for(d=a.Kc();d.Ob();){c=d.Pb();b+=c!=null?tb(c):0;b=~~b}return b} +function SA(a){var b;if(a==0){return 'UTC'}if(a<0){a=-a;b='UTC+'}else{b='UTC-'}return b+UA(a)} +function Jq(a,b){var c;if(JD(b,14)){c=BD(b,14);return a.Gc(c)}return fr(a,BD(Qb(b),20).Kc())} +function Bnc(a,b,c){Cnc.call(this,b,c);this.d=KC(OQ,kne,10,a.a.c.length,0,1);Qkb(a.a,this.d)} +function IMc(a){a.a=null;a.e=null;a.b.c=KC(SI,Uhe,1,0,5,1);a.f.c=KC(SI,Uhe,1,0,5,1);a.c=null} +function gKd(a,b){if(b){if(a.B==null){a.B=a.D;a.D=null}}else if(a.B!=null){a.D=a.B;a.B=null}} +function Poc(a,b){return Edb(ED(Btb(TAb(NAb(new YAb(null,new Kub(a.c.b,16)),new fpc(a)),b))))} +function Soc(a,b){return Edb(ED(Btb(TAb(NAb(new YAb(null,new Kub(a.c.b,16)),new dpc(a)),b))))} +function Q2b(a,b){Odd(b,zne,1);MAb(LAb(new YAb(null,new Kub(a.b,16)),new U2b),new W2b);Qdd(b)} +function SXc(a,b){var c,d;c=BD(hkd(a,(ZWc(),SWc)),19);d=BD(hkd(b,SWc),19);return beb(c.a,d.a)} +function p7c(a,b,c){var d,e;for(e=Jsb(a,0);e.b!=e.d.c;){d=BD(Xsb(e),8);d.a+=b;d.b+=c}return a} +function uo(a,b,c){var d;for(d=a.b[c&a.f];d;d=d.b){if(c==d.a&&Hb(b,d.g)){return d}}return null} +function vo(a,b,c){var d;for(d=a.c[c&a.f];d;d=d.d){if(c==d.f&&Hb(b,d.i)){return d}}return null} +function khb(a,b,c){var d,e,f;d=0;for(e=0;e<c;e++){f=b[e];a[e]=f<<1|d;d=f>>>31}d!=0&&(a[c]=d)} +function rmb(a,b){mmb();var c,d;d=new Rkb;for(c=0;c<a;++c){d.c[d.c.length]=b}return new Yob(d)} +function Zzb(a){var b;b=Yzb(a);if(Bbb(b.a,0)){return Ltb(),Ltb(),Ktb}return Ltb(),new Ptb(b.b)} +function $zb(a){var b;b=Yzb(a);if(Bbb(b.a,0)){return Ltb(),Ltb(),Ktb}return Ltb(),new Ptb(b.c)} +function uAb(a){var b;b=tAb(a);if(Bbb(b.a,0)){return Utb(),Utb(),Ttb}return Utb(),new Xtb(b.b)} +function zZb(a){if(a.b.c.i.k==(j0b(),e0b)){return BD(vNb(a.b.c.i,(wtc(),$sc)),11)}return a.b.c} +function AZb(a){if(a.b.d.i.k==(j0b(),e0b)){return BD(vNb(a.b.d.i,(wtc(),$sc)),11)}return a.b.d} +function Vnd(a,b,c,d,e,f,g,h,i,j,k,l,m){aod(a,b,c,d,e,f,g,h,i,j,k,l,m);MJd(a,false);return a} +function tJb(a,b,c,d,e,f,g){$r.call(this,a,b);this.d=c;this.e=d;this.c=e;this.b=f;this.a=Ou(g)} +function $bb(a,b){typeof window===Jhe&&typeof window['$gwt']===Jhe&&(window['$gwt'][a]=b)} +function pWb(a,b){lWb();return a==hWb&&b==kWb||a==kWb&&b==hWb||a==jWb&&b==iWb||a==iWb&&b==jWb} +function qWb(a,b){lWb();return a==hWb&&b==iWb||a==hWb&&b==jWb||a==kWb&&b==jWb||a==kWb&&b==iWb} +function IJb(a,b){return Iy(),My(ple),$wnd.Math.abs(0-b)<=ple||0==b||isNaN(0)&&isNaN(b)?0:a/b} +function Rrc(){Orc();return OC(GC(PW,1),Kie,256,0,[Frc,Hrc,Irc,Jrc,Krc,Lrc,Nrc,Erc,Grc,Mrc])} +function NKd(){NKd=ccb;KKd=new KPd;MKd=OC(GC(t5,1),Mve,170,0,[]);LKd=OC(GC(n5,1),Nve,59,0,[])} +function CBc(){CBc=ccb;BBc=new DBc('NO',0);zBc=new DBc('GREEDY',1);ABc=new DBc('LOOK_BACK',2)} +function z0b(){z0b=ccb;w0b=new m1b;u0b=new h1b;v0b=new q1b;t0b=new u1b;x0b=new y1b;y0b=new C1b} +function J9b(a){var b,c,d;d=0;for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);b.p=d;++d}} +function nfd(a,b){var c;c=sfd(a);return mfd(new f7c(c.c,c.d),new f7c(c.b,c.a),a.rf(),b,a.Hf())} +function Udd(a,b){var c;if(a.b){return null}else{c=Pdd(a,a.g);Dsb(a.a,c);c.i=a;a.d=b;return c}} +function kUc(a,b,c){Odd(c,'DFS Treeifying phase',1);jUc(a,b);hUc(a,b);a.a=null;a.b=null;Qdd(c)} +function zic(a,b,c){this.g=a;this.d=b;this.e=c;this.a=new Rkb;xic(this);mmb();Okb(this.a,null)} +function Aud(a){this.i=a.gc();if(this.i>0){this.g=this.ri(this.i+(this.i/8|0)+1);a.Qc(this.g)}} +function u3d(a,b){k2d.call(this,D9,a,b);this.b=this;this.a=S6d(a.Tg(),XKd(this.e.Tg(),this.c))} +function Ld(a,b){var c,d;uCb(b);for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);a.zc(c.cd(),c.dd())}} +function G2d(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!E2d(a,b,d.Pb())){return false}}return true} +function sVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.gh(b,-1-(f==-1?d:f),null,e)}return e} +function tVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.ih(b,-1-(f==-1?d:f),null,e)}return e} +function Mgb(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} +function Z4b(a){switch(a.g){case 2:return Ucd(),Tcd;case 4:return Ucd(),zcd;default:return a;}} +function $4b(a){switch(a.g){case 1:return Ucd(),Rcd;case 3:return Ucd(),Acd;default:return a;}} +function nkc(a){var b,c,d;return a.j==(Ucd(),Acd)&&(b=pkc(a),c=uqb(b,zcd),d=uqb(b,Tcd),d||d&&c)} +function oqb(a){var b,c;b=BD(a.e&&a.e(),9);c=BD(ZBb(b,b.length),9);return new xqb(b,c,b.length)} +function l7b(a,b){Odd(b,zne,1);UGb(TGb(new YGb((a$b(),new l$b(a,false,false,new T$b)))));Qdd(b)} +function Fcb(a,b){Bcb();return ND(a)?cfb(a,GD(b)):LD(a)?Ddb(a,ED(b)):KD(a)?Dcb(a,DD(b)):a.wd(b)} +function WZc(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Ekb(a.a,b)} +function m6c(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.a<c&&b.b>f&&b.b<d} +function Ynd(a,b,c,d){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,c);!!b&&hKd(a,b);d&&a.xk(true)} +function Yqd(a,b){var c;c=BD(b,183);Spd(c,'x',a.i);Spd(c,'y',a.j);Spd(c,Gte,a.g);Spd(c,Fte,a.f)} +function LFc(){LFc=ccb;KFc=b3c(f3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb),y8b)} +function dHc(){dHc=ccb;cHc=b3c(f3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb),y8b)} +function sXc(){sXc=ccb;qXc=new uXc(ane,0);rXc=new uXc('POLAR_COORDINATE',1);pXc=new uXc('ID',2)} +function TAc(){TAc=ccb;QAc=new UAc('EQUALLY',0);RAc=new UAc(xle,1);SAc=new UAc('NORTH_SOUTH',2)} +function pAc(){pAc=ccb;oAc=as((kAc(),OC(GC(aX,1),Kie,260,0,[iAc,dAc,gAc,eAc,fAc,cAc,hAc,jAc])))} +function Flc(){Flc=ccb;Elc=as((Alc(),OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc])))} +function e6c(){e6c=ccb;d6c=as((_5c(),OC(GC(f1,1),Kie,277,0,[$5c,T5c,X5c,Z5c,U5c,V5c,W5c,Y5c])))} +function Hsd(){Hsd=ccb;Gsd=as((Csd(),OC(GC(O3,1),Kie,237,0,[Bsd,ysd,zsd,xsd,Asd,vsd,usd,wsd])))} +function XNb(){XNb=ccb;VNb=new Msd('debugSVG',(Bcb(),false));WNb=new Msd('overlapsExisted',true)} +function Xyb(a,b){return Ayb(new tzb(a),new vzb(b),new xzb(b),new zzb,OC(GC(xL,1),Kie,132,0,[]))} +function hyb(){var a;if(!dyb){dyb=new gyb;a=new wyb('');uyb(a,($xb(),Zxb));eyb(dyb,a)}return dyb} +function hr(a,b){var c;Qb(b);while(a.Ob()){c=a.Pb();if(!QNc(BD(c,10))){return false}}return true} +function T3c(a,b){var c;c=h4c(n4c(),a);if(c){jkd(b,(Y9c(),F9c),c);return true}else{return false}} +function d3c(a,b){var c;for(c=0;c<b.j.c.length;c++){BD(B2c(a,c),21).Gc(BD(B2c(b,c),14))}return a} +function M9b(a,b){var c,d;for(d=new olb(b.b);d.a<d.c.c.length;){c=BD(mlb(d),29);a.a[c.p]=_$b(c)}} +function stb(a,b){var c,d;uCb(b);for(d=a.vc().Kc();d.Ob();){c=BD(d.Pb(),42);b.Od(c.cd(),c.dd())}} +function cId(a,b){var c;if(JD(b,83)){BD(a.c,76).Xj();c=BD(b,83);IAd(a,c)}else{BD(a.c,76).Wb(b)}} +function Su(a){return JD(a,152)?km(BD(a,152)):JD(a,131)?BD(a,131).a:JD(a,54)?new ov(a):new dv(a)} +function fac(a,b){return b<a.b.gc()?BD(a.b.Xb(b),10):b==a.b.gc()?a.a:BD(Ikb(a.e,b-a.b.gc()-1),10)} +function crb(a,b){a.a=wbb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d=wbb(a.d,b)} +function n3b(a,b){var c;Odd(b,'Edge and layer constraint edge reversal',1);c=m3b(a);l3b(c);Qdd(b)} +function tAd(a){var b;if(a.d==null){++a.e;a.f=0;sAd(null)}else{++a.e;b=a.d;a.d=null;a.f=0;sAd(b)}} +function zbb(a){var b;b=a.h;if(b==0){return a.l+a.m*Hje}if(b==Fje){return a.l+a.m*Hje-Ije}return a} +function aKb(a){$Jb();if(a.A.Hc((tdd(),pdd))){if(!a.B.Hc((Idd(),Ddd))){return _Jb(a)}}return null} +function Zgb(a){uCb(a);if(a.length==0){throw vbb(new Oeb('Zero length BigInteger'))}dhb(this,a)} +function Vb(a){if(!a){throw vbb(new Zdb('no calls to next() since the last call to remove()'))}} +function Cbb(a){if(Kje<a&&a<Ije){return a<0?$wnd.Math.ceil(a):$wnd.Math.floor(a)}return zbb(fD(a))} +function Yyb(a,b){var c,d,e;c=a.c.Ee();for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Od(c,d)}return a.b.Kb(c)} +function Uhd(a,b){var c,d,e;c=a.Jg();if(c!=null&&a.Mg()){for(d=0,e=c.length;d<e;++d){c[d].ui(b)}}} +function f_b(a,b){var c,d;c=a;d=Q_b(c).e;while(d){c=d;if(c==b){return true}d=Q_b(c).e}return false} +function lDc(a,b,c){var d,e;d=a.a.f[b.p];e=a.a.f[c.p];if(d<e){return -1}if(d==e){return 0}return 1} +function Si(a,b,c){var d,e;e=BD(tn(a.d,b),19);d=BD(tn(a.b,c),19);return !e||!d?null:Mi(a,e.a,d.a)} +function cYc(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),33);bld(c,c.i+b.b,c.j+b.d)}} +function qjc(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),70);Ekb(a.d,c);ujc(a,c)}} +function pQc(a,b){var c,d;d=new Rkb;c=b;do{d.c[d.c.length]=c;c=BD(Ohb(a.k,c),17)}while(c);return d} +function Ajd(a,b){var c;if((a.Db&b)!=0){c=zjd(a,b);return c==-1?a.Eb:CD(a.Eb)[c]}else{return null}} +function Lnd(a,b){var c,d;c=(d=new hLd,d);c.G=b;!a.rb&&(a.rb=new jUd(a,d5,a));wtd(a.rb,c);return c} +function Mnd(a,b){var c,d;c=(d=new MPd,d);c.G=b;!a.rb&&(a.rb=new jUd(a,d5,a));wtd(a.rb,c);return c} +function Hkd(a,b){switch(b){case 1:return !!a.n&&a.n.i!=0;case 2:return a.k!=null;}return dkd(a,b)} +function gNc(a){switch(a.a.g){case 1:return new NNc;case 3:return new vQc;default:return new wNc;}} +function MRd(a){var b;if(a.g>1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw vbb(new utb)}} +function kNc(a){fNc();var b;if(!Lpb(eNc,a)){b=new hNc;b.a=a;Opb(eNc,a,b)}return BD(Mpb(eNc,a),635)} +function Rbb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=Ije;d=Fje}c=QD(e/Hje);b=QD(e-c*Hje);return TC(b,c,d)} +function Ox(a){var b,c,d;d=0;for(c=new Gqb(a.a);c.a<c.c.a.length;){b=Fqb(c);a.b.Hc(b)&&++d}return d} +function Ku(a){var b,c,d;b=1;for(d=a.Kc();d.Ob();){c=d.Pb();b=31*b+(c==null?0:tb(c));b=~~b}return b} +function Zwb(a,b){var c;this.c=a;c=new Rkb;Ewb(a,c,b,a.b,null,false,null,false);this.a=new Bib(c,0)} +function p4d(a,b){this.b=a;this.e=b;this.d=b.j;this.f=(Q6d(),BD(a,66).Oj());this.k=S6d(b.e.Tg(),a)} +function xwb(a,b,c){this.b=(uCb(a),a);this.d=(uCb(b),b);this.e=(uCb(c),c);this.c=this.d+(''+this.e)} +function xRb(){this.a=BD(Ksd((wSb(),eSb)),19).a;this.c=Edb(ED(Ksd(uSb)));this.b=Edb(ED(Ksd(qSb)))} +function Nbd(){Nbd=ccb;Mbd=as((Hbd(),OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])))} +function wFb(){wFb=ccb;vFb=as((rFb(),OC(GC(dN,1),Kie,250,0,[qFb,lFb,mFb,kFb,oFb,pFb,nFb,jFb,iFb])))} +function vLb(){vLb=ccb;uLb=new wLb('UP',0);rLb=new wLb(vle,1);sLb=new wLb(jle,2);tLb=new wLb(kle,3)} +function rTc(){rTc=ccb;qTc=(STc(),QTc);pTc=new Nsd(Zqe,qTc);oTc=($Tc(),ZTc);nTc=new Nsd($qe,oTc)} +function Xrc(){Xrc=ccb;Vrc=new Yrc('ONE_SIDED',0);Wrc=new Yrc('TWO_SIDED',1);Urc=new Yrc('OFF',2)} +function TQc(a){a.r=new Tqb;a.w=new Tqb;a.t=new Rkb;a.i=new Rkb;a.d=new Tqb;a.a=new I6c;a.c=new Lqb} +function uOc(a){this.n=new Rkb;this.e=new Psb;this.j=new Psb;this.k=new Rkb;this.f=new Rkb;this.p=a} +function PEc(a,b){if(a.c){QEc(a,b,true);MAb(new YAb(null,new Kub(b,16)),new bFc(a))}QEc(a,b,false)} +function wFc(a,b,c){return a==(rGc(),qGc)?new pFc:Cub(b,1)!=0?new iHc(c.length):new RGc(c.length)} +function tNb(a,b){var c;if(!b){return a}c=b.Ve();c.dc()||(!a.q?(a.q=new Nqb(c)):Ld(a.q,c));return a} +function Erb(a,b){var c;c=a.a.get(b);if(c===undefined){++a.d}else{urb(a.a,b);--a.c;zpb(a.b)}return c} +function UYb(a,b){var c,d,e;c=b.p-a.p;if(c==0){d=a.f.a*a.f.b;e=b.f.a*b.f.b;return Kdb(d,e)}return c} +function XLb(a,b){var c,d;c=a.f.c.length;d=b.f.c.length;if(c<d){return -1}if(c==d){return 0}return 1} +function KZb(a){if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}return JZb(a)} +function Pq(a){var b;if(a){b=a;if(b.dc()){throw vbb(new utb)}return b.Xb(b.gc()-1)}return nr(a.Kc())} +function vgb(a){var b;ybb(a,0)<0&&(a=Lbb(a));return b=Tbb(Obb(a,32)),64-(b!=0?heb(b):heb(Tbb(a))+32)} +function QNc(a){var b;b=BD(vNb(a,(wtc(),Hsc)),61);return a.k==(j0b(),e0b)&&(b==(Ucd(),Tcd)||b==zcd)} +function bZb(a,b,c){var d,e;e=BD(vNb(a,(Nyc(),jxc)),74);if(e){d=new s7c;o7c(d,0,e);q7c(d,c);ye(b,d)}} +function M_b(a,b,c){var d,e,f,g;g=Q_b(a);d=g.d;e=g.c;f=a.n;b&&(f.a=f.a-d.b-e.a);c&&(f.b=f.b-d.d-e.b)} +function dcc(a,b){var c,d;c=a.j;d=b.j;return c!=d?c.g-d.g:a.p==b.p?0:c==(Ucd(),Acd)?a.p-b.p:b.p-a.p} +function dmc(a){var b,c;bmc(a);for(c=new olb(a.d);c.a<c.c.c.length;){b=BD(mlb(c),101);!!b.i&&cmc(b)}} +function lBc(a,b,c,d,e){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d);NC(a.b[b.g],c.g,e);NC(a.b[c.g],b.g,e)} +function G1c(a,b,c,d){BD(c.b,65);BD(c.b,65);BD(d.b,65);BD(d.b,65);BD(d.b,65);Hkb(d.a,new L1c(a,b,d))} +function WDb(a,b){a.d==(ead(),aad)||a.d==dad?BD(b.a,57).c.Fc(BD(b.b,57)):BD(b.b,57).c.Fc(BD(b.a,57))} +function Gkd(a,b,c,d){if(c==1){return !a.n&&(a.n=new cUd(D2,a,1,7)),Txd(a.n,b,d)}return ckd(a,b,c,d)} +function Gnd(a,b){var c,d;d=(c=new BYd,c);pnd(d,b);wtd((!a.A&&(a.A=new K4d(u5,a,7)),a.A),d);return d} +function Zqd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,Jte);d=new jrd(a,c);f=(lqd(d.a,d.b,e),e);return f} +function KJd(a){var b;if(!a.a||(a.Bb&1)==0&&a.a.kh()){b=wId(a);JD(b,148)&&(a.a=BD(b,148))}return a.a} +function Be(a,b){var c,d;uCb(b);for(d=b.Kc();d.Ob();){c=d.Pb();if(!a.Hc(c)){return false}}return true} +function cD(a,b){var c,d,e;c=a.l+b.l;d=a.m+b.m+(c>>22);e=a.h+b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} +function nD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} +function bdb(a){var b;if(a<128){b=(ddb(),cdb)[a];!b&&(b=cdb[a]=new Xcb(a));return b}return new Xcb(a)} +function ubb(a){var b;if(JD(a,78)){return a}b=a&&a.__java$exception;if(!b){b=new lz(a);Sz(b)}return b} +function btd(a){if(JD(a,186)){return BD(a,118)}else if(!a){throw vbb(new Heb(gue))}else{return null}} +function Zjb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,vkb(a))){return true}}return false} +function kib(a){if(a.a.Ob()){return true}if(a.a!=a.d){return false}a.a=new orb(a.e.f);return a.a.Ob()} +function Gkb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}bCb(a.c,a.c.length,c);return true} +function Vyb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=BD(e.Pb(),42);a.yc(d.cd(),d.dd(),c)}return a} +function yac(a,b){var c,d;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),70);yNb(c,(wtc(),Ssc),b)}} +function FZc(a,b,c){var d,e;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),33);bld(d,d.i+b,d.j+c)}} +function Nb(a,b){if(!a){throw vbb(new Wdb(hc('value already present: %s',OC(GC(SI,1),Uhe,1,5,[b]))))}} +function mEb(a,b){if(!a||!b||a==b){return false}return CDb(a.d.c,b.d.c+b.d.b)&&CDb(b.d.c,a.d.c+a.d.b)} +function xyb(){oyb();if(lyb){return new wyb(null)}return fyb(hyb(),'com.google.common.base.Strings')} +function J2c(a,b){var c;c=Pu(b.a.gc());MAb(VAb(new YAb(null,new Kub(b,1)),a.i),new W2c(a,c));return c} +function Hnd(a){var b,c;c=(b=new BYd,b);pnd(c,'T');wtd((!a.d&&(a.d=new K4d(u5,a,11)),a.d),c);return c} +function Etd(a){var b,c,d,e;b=1;for(c=0,e=a.gc();c<e;++c){d=a.ki(c);b=31*b+(d==null?0:tb(d))}return b} +function Wi(a,b,c,d){var e;Pb(b,a.e.Hd().gc());Pb(c,a.c.Hd().gc());e=a.a[b][c];NC(a.a[b],c,d);return e} +function OC(a,b,c,d,e){e.gm=a;e.hm=b;e.im=gcb;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} +function p6c(a,b,c,d,e){i6c();return $wnd.Math.min(A6c(a,b,c,d,e),A6c(c,d,a,b,V6c(new f7c(e.a,e.b))))} +function gbc(){gbc=ccb;fbc=new ibc(ane,0);dbc=new ibc(Gne,1);ebc=new ibc(Hne,2);cbc=new ibc('BOTH',3)} +function Ajc(){Ajc=ccb;wjc=new Bjc(gle,0);xjc=new Bjc(jle,1);yjc=new Bjc(kle,2);zjc=new Bjc('TOP',3)} +function lWb(){lWb=ccb;hWb=new oWb('Q1',0);kWb=new oWb('Q4',1);iWb=new oWb('Q2',2);jWb=new oWb('Q3',3)} +function LBc(){LBc=ccb;JBc=new MBc('OFF',0);KBc=new MBc('SINGLE_EDGE',1);IBc=new MBc('MULTI_EDGE',2)} +function a1c(){a1c=ccb;_0c=new c1c('MINIMUM_SPANNING_TREE',0);$0c=new c1c('MAXIMUM_SPANNING_TREE',1)} +function Y1c(){Y1c=ccb;new Lsd('org.eclipse.elk.addLayoutConfig');W1c=new k2c;V1c=new f2c;X1c=new i2c} +function URc(a){var b,c,d;b=new Psb;for(d=Jsb(a.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);Dsb(b,c.c)}return b} +function dVc(a){var b,c,d,e;e=new Rkb;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),33);b=gVc(c);Gkb(e,b)}return e} +function xcc(a){var b;PZb(a,true);b=_ie;wNb(a,(Nyc(),cyc))&&(b+=BD(vNb(a,cyc),19).a);yNb(a,cyc,meb(b))} +function q1c(a,b,c){var d;Uhb(a.a);Hkb(c.i,new B1c(a));d=new hDb(BD(Ohb(a.a,b.b),65));p1c(a,d,b);c.f=d} +function QLc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d<c.a.c.length-1){return BD(Ikb(c.a,d+1),10)}return null} +function rr(a,b){var c,d;Rb(b,'predicate');for(d=0;a.Ob();d++){c=a.Pb();if(b.Lb(c)){return d}}return -1} +function ZEd(a,b){var c,d;d=0;if(a<64&&a<=b){b=b<64?b:63;for(c=a;c<=b;c++){d=Mbb(d,Nbb(1,c))}}return d} +function pmb(a){mmb();var b,c,d;d=0;for(c=a.Kc();c.Ob();){b=c.Pb();d=d+(b!=null?tb(b):0);d=d|0}return d} +function etd(a){var b,c;c=(Fhd(),b=new rmd,b);!!a&&wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c);return c} +function TA(a){var b;b=new PA;b.a=a;b.b=RA(a);b.c=KC(ZI,nie,2,2,6,1);b.c[0]=SA(a);b.c[1]=SA(a);return b} +function fkd(a,b){switch(b){case 0:!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0));a.o.c.$b();return;}Cid(a,b)} +function jEb(a,b,c){switch(c.g){case 2:a.b=b;break;case 1:a.c=b;break;case 4:a.d=b;break;case 3:a.a=b;}} +function sbd(a){switch(a.g){case 1:return obd;case 2:return nbd;case 3:return pbd;default:return qbd;}} +function Zac(a){switch(BD(vNb(a,(Nyc(),mxc)),163).g){case 2:case 4:return true;default:return false;}} +function Trc(){Trc=ccb;Src=as((Orc(),OC(GC(PW,1),Kie,256,0,[Frc,Hrc,Irc,Jrc,Krc,Lrc,Nrc,Erc,Grc,Mrc])))} +function Ndd(){Ndd=ccb;Mdd=as((Idd(),OC(GC(J1,1),Kie,259,0,[Bdd,Ddd,Add,Edd,Fdd,Hdd,Gdd,Cdd,zdd])))} +function wUc(){wUc=ccb;vUc=e3c(b3c(b3c(g3c(e3c(new j3c,(yRc(),vRc),(qSc(),pSc)),wRc),mSc),nSc),xRc,oSc)} +function Gqc(){Gqc=ccb;Eqc=new Hqc(ane,0);Dqc=new Hqc('INCOMING_ONLY',1);Fqc=new Hqc('OUTGOING_ONLY',2)} +function rC(){rC=ccb;qC={'boolean':sC,'number':tC,'string':vC,'object':uC,'function':uC,'undefined':wC}} +function Whb(a,b){mCb(a>=0,'Negative initial capacity');mCb(b>=0,'Non-positive load factor');Uhb(this)} +function _Ed(a,b,c){if(a>=128)return false;return a<64?Kbb(xbb(Nbb(1,a),c),0):Kbb(xbb(Nbb(1,a-64),b),0)} +function bOb(a,b){if(!a||!b||a==b){return false}return Jy(a.b.c,b.b.c+b.b.b)<0&&Jy(b.b.c,a.b.c+a.b.b)<0} +function I4b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new J6c(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))} +function $ic(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];djc(a,b,(Ucd(),Rcd));djc(a,b,Acd)}} +function Uy(a){var b,c,d,e;for(b=(a.j==null&&(a.j=(Rz(),e=Qz.ce(a),Tz(e))),a.j),c=0,d=b.length;c<d;++c);} +function hD(a){var b,c,d;b=~a.l+1&Eje;c=~a.m+(b==0?1:0)&Eje;d=~a.h+(b==0&&c==0?1:0)&Fje;return TC(b,c,d)} +function C$c(a,b){var c,d;c=BD(BD(Ohb(a.g,b.a),46).a,65);d=BD(BD(Ohb(a.g,b.b),46).a,65);return _Nb(c,d)} +function xtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));a.hi()&&(c=Dtd(a,c));return a.Vh(b,c)} +function xNb(a,b,c){return c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a} +function yNb(a,b,c){c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c));return a} +function TQb(a){var b,c;c=new kRb;tNb(c,a);yNb(c,(HSb(),FSb),a);b=new Lqb;VQb(a,c,b);UQb(a,c,b);return c} +function j6c(a){i6c();var b,c,d;c=KC(m1,nie,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=r6c(d,a)}return c} +function Mic(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f<d-1;f++){e=f+1;c=c|Nic(a,b,f,e)}return c} +function nNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){YMb(a,f,g)||aNb(a,f,g,true,false)}}} +function rNd(a,b){this.b=a;nNd.call(this,(BD(qud(ZKd((NFd(),MFd).o),10),18),b.i),b.g);this.a=(NKd(),MKd)} +function hj(a,b){this.c=a;this.d=b;this.b=this.d/this.c.c.Hd().gc()|0;this.a=this.d%this.c.c.Hd().gc()} +function jdb(){++edb;this.o=null;this.k=null;this.j=null;this.d=null;this.b=null;this.n=null;this.a=null} +function fB(a,b,c){this.q=new $wnd.Date;this.q.setFullYear(a+nje,b,c);this.q.setHours(0,0,0,0);YA(this,0)} +function tAc(){tAc=ccb;rAc=new uAc(ane,0);qAc=new uAc('NODES_AND_EDGES',1);sAc=new uAc('PREFER_EDGES',2)} +function RA(a){var b;if(a==0){return 'Etc/GMT'}if(a<0){a=-a;b='Etc/GMT-'}else{b='Etc/GMT+'}return b+UA(a)} +function geb(a){var b;if(a<0){return Rie}else if(a==0){return 0}else{for(b=Iie;(b&a)==0;b>>=1);return b}} +function $C(a){var b,c;c=heb(a.h);if(c==32){b=heb(a.m);return b==32?heb(a.l)+32:b+20-10}else{return c-12}} +function bkb(a){var b;b=a.a[a.b];if(b==null){return null}NC(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b} +function EDc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c} +function Iwb(a,b,c){var d,e;d=new exb(b,c);e=new fxb;a.b=Gwb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} +function djc(a,b,c){var d,e,f,g;g=CHc(b,c);f=0;for(e=g.Kc();e.Ob();){d=BD(e.Pb(),11);Rhb(a.c,d,meb(f++))}} +function xVb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.g.c=-b.g.c-b.g.b}sVb(a)} +function XDb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.d.c=-b.d.c-b.d.b}RDb(a)} +function AUd(a){var b;if(!a.c||(a.Bb&1)==0&&(a.c.Db&64)!=0){b=wId(a);JD(b,88)&&(a.c=BD(b,26))}return a.c} +function ZC(a){var b,c,d;b=~a.l+1&Eje;c=~a.m+(b==0?1:0)&Eje;d=~a.h+(b==0&&c==0?1:0)&Fje;a.l=b;a.m=c;a.h=d} +function l7c(a){var b,c,d,e,f;b=new d7c;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b.a+=c.a;b.b+=c.b}return b} +function nmb(a,b){mmb();var c,d,e,f,g;g=false;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=g|a.Fc(c)}return g} +function w6c(a){i6c();var b,c;c=-1.7976931348623157E308;for(b=0;b<a.length;b++){a[b]>c&&(c=a[b])}return c} +function SHc(a,b,c){var d;d=new Rkb;UHc(a,b,d,(Ucd(),zcd),true,false);UHc(a,c,d,Tcd,false,false);return d} +function crd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,'labels');d=new Hrd(a,c);f=(Dqd(d.a,d.b,e),e);return f} +function j1d(a,b,c,d){var e;e=r1d(a,b,c,d);if(!e){e=i1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} +function m1d(a,b,c,d){var e;e=s1d(a,b,c,d);if(!e){e=l1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} +function Xb(a,b){var c;for(c=0;c<a.a.a.length;c++){if(!BD($lb(a.a,c),169).Lb(b)){return false}}return true} +function Cb(a,b,c){Qb(b);if(c.Ob()){Mfb(b,Fb(c.Pb()));while(c.Ob()){Mfb(b,a.a);Mfb(b,Fb(c.Pb()))}}return b} +function qmb(a){mmb();var b,c,d;d=1;for(c=a.Kc();c.Ob();){b=c.Pb();d=31*d+(b!=null?tb(b):0);d=d|0}return d} +function WC(a,b,c,d,e){var f;f=lD(a,b);c&&ZC(f);if(e){a=YC(a,b);d?(QC=hD(a)):(QC=TC(a.l,a.m,a.h))}return f} +function Xzb(b,c){var d;try{c.Vd()}catch(a){a=ubb(a);if(JD(a,78)){d=a;b.c[b.c.length]=d}else throw vbb(a)}} +function jRb(a,b,c){var d,e;if(JD(b,144)&&!!c){d=BD(b,144);e=c;return a.a[d.b][e.b]+a.a[e.b][d.b]}return 0} +function xld(a,b){switch(b){case 7:return !!a.e&&a.e.i!=0;case 8:return !!a.d&&a.d.i!=0;}return Ykd(a,b)} +function YQb(a,b){switch(b.g){case 0:JD(a.b,631)||(a.b=new xRb);break;case 1:JD(a.b,632)||(a.b=new DRb);}} +function Ghe(a,b){while(a.g==null&&!a.c?Uud(a):a.g==null||a.i!=0&&BD(a.g[a.i-1],47).Ob()){Ord(b,Vud(a))}} +function kic(a,b,c){a.g=qic(a,b,(Ucd(),zcd),a.b);a.d=qic(a,c,zcd,a.b);if(a.g.c==0||a.d.c==0){return}nic(a)} +function lic(a,b,c){a.g=qic(a,b,(Ucd(),Tcd),a.j);a.d=qic(a,c,Tcd,a.j);if(a.g.c==0||a.d.c==0){return}nic(a)} +function $yc(a,b,c){return !WAb(JAb(new YAb(null,new Kub(a.c,16)),new Xxb(new dfd(b,c)))).sd((EAb(),DAb))} +function KAb(a){var b;Tzb(a);b=new NBb;if(a.a.sd(b)){return Atb(),new Ftb(uCb(b.a))}return Atb(),Atb(),ztb} +function nA(a){var b;if(a.b<=0){return false}b=hfb('MLydhHmsSDkK',wfb(bfb(a.c,0)));return b>1||b>=0&&a.b<3} +function w7c(a){var b,c,d;b=new s7c;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);St(b,0,new g7c(c))}return b} +function qVb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.f.$b()}LVb(a.b,a);rVb(a)} +function tb(a){return ND(a)?LCb(a):LD(a)?Hdb(a):KD(a)?(uCb(a),a)?1231:1237:ID(a)?a.Hb():MC(a)?FCb(a):rz(a)} +function rb(a){return ND(a)?ZI:LD(a)?BI:KD(a)?wI:ID(a)?a.gm:MC(a)?a.gm:a.gm||Array.isArray(a)&&GC(PH,1)||PH} +function j_c(a){switch(a.g){case 0:return new Q1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} +function S0c(a){switch(a.g){case 0:return new k1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} +function ekd(a,b,c){switch(b){case 0:!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0));cId(a.o,c);return;}yid(a,b,c)} +function XRc(a,b,c){this.g=a;this.e=new d7c;this.f=new d7c;this.d=new Psb;this.b=new Psb;this.a=b;this.c=c} +function PZc(a,b,c,d){this.b=new Rkb;this.n=new Rkb;this.i=d;this.j=c;this.s=a;this.t=b;this.r=0;this.d=0} +function nib(a){this.e=a;this.d=new Irb(this.e.g);this.a=this.d;this.b=kib(this);this.$modCount=a.$modCount} +function Pr(a){while(!a.d||!a.d.Ob()){if(!!a.b&&!akb(a.b)){a.d=BD(fkb(a.b),47)}else{return null}}return a.d} +function Xyc(a){Ekb(a.c,(Y1c(),W1c));if(Ky(a.a,Edb(ED(Ksd((dzc(),bzc)))))){return new Zed}return new _ed(a)} +function bRc(a){switch(a.g){case 1:return Sqe;default:case 2:return 0;case 3:return cme;case 4:return Tqe;}} +function Ife(){wfe();var a;if(dfe)return dfe;a=Afe(Kfe('M',true));a=Bfe(Kfe('M',false),a);dfe=a;return dfe} +function Awb(a,b){var c,d,e;e=a.b;while(e){c=a.a.ue(b,e.d);if(c==0){return e}d=c<0?0:1;e=e.a[d]}return null} +function Tyb(a,b,c){var d,e;d=(Bcb(),_Pb(c)?true:false);e=BD(b.xc(d),15);if(!e){e=new Rkb;b.zc(d,e)}e.Fc(c)} +function dYc(a,b){var c,d;c=BD(hkd(a,(lZc(),UYc)),19).a;d=BD(hkd(b,UYc),19).a;return c==d?-1:c<d?-1:c>d?1:0} +function NYb(a,b){if(OYb(a,b)){Rc(a.b,BD(vNb(b,(wtc(),Esc)),21),b);Dsb(a.a,b);return true}else{return false}} +function d3b(a){var b,c;b=BD(vNb(a,(wtc(),gtc)),10);if(b){c=b.c;Lkb(c.a,b);c.a.c.length==0&&Lkb(Q_b(b).b,c)}} +function syb(a){if(lyb){return KC(qL,tke,572,0,0,1)}return BD(Qkb(a.a,KC(qL,tke,572,a.a.c.length,0,1)),842)} +function mn(a,b,c,d){Vm();return new wx(OC(GC(CK,1),zie,42,0,[(Wj(a,b),new Wo(a,b)),(Wj(c,d),new Wo(c,d))]))} +function Dnd(a,b,c){var d,e;e=(d=new SSd,d);$nd(e,b,c);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),e);return e} +function Zmd(a){var b,c,d,e;e=icb(Rmd,a);c=e.length;d=KC(ZI,nie,2,c,6,1);for(b=0;b<c;++b){d[b]=e[b]}return d} +function l4c(a,b){var c,d,e,f,g;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=new v4c(a);c.Qe(g);q4c(g)}Uhb(a.f)} +function hw(a,b){var c;if(b===a){return true}if(JD(b,224)){c=BD(b,224);return pb(a.Zb(),c.Zb())}return false} +function aub(a,b){var c;if(b*2+1>=a.b.c.length){return}aub(a,2*b+1);c=2*b+2;c<a.b.c.length&&aub(a,c);bub(a,b)} +function Ss(a,b,c){var d,e;this.g=a;this.c=b;this.a=this;this.d=this;e=Kp(c);d=KC(BG,Gie,330,e,0,1);this.b=d} +function whb(a,b,c){var d;for(d=c-1;d>=0&&a[d]===b[d];d--);return d<0?0:Gbb(xbb(a[d],Yje),xbb(b[d],Yje))?-1:1} +function UFc(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),214);if(c.e.length>0){b.td(c);c.i&&_Fc(c)}}} +function nzd(a,b){var c,d;d=BD(Ajd(a.a,4),126);c=KC($3,hve,415,b,0,1);d!=null&&$fb(d,0,c,0,d.length);return c} +function JEd(a,b){var c;c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} +function Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=BD(d.Pb(),14);if(c.Hc(b)){return true}}return false} +function oNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(YMb(a,f,g)){return true}}}return false} +function Tt(a,b,c){var d,e,f,g;uCb(c);g=false;f=a.Zc(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g} +function Dv(a,b){var c;if(a===b){return true}else if(JD(b,83)){c=BD(b,83);return Ax(Wm(a),c.vc())}return false} +function Nhb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=BD(e.Pb(),42);if(a.re(b,d.dd())){return true}}return false} +function Hic(a,b,c){if(!a.d[b.p][c.p]){Gic(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]} +function Itd(a,b){if(!a.ai()&&b==null){throw vbb(new Wdb("The 'no null' constraint is violated"))}return b} +function $Jd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}jKd(a,b==null?null:(uCb(b),b));!!a.C&&a.yk(null)} +function XHc(a,b){var c;if(!a||a==b||!wNb(b,(wtc(),Psc))){return false}c=BD(vNb(b,(wtc(),Psc)),10);return c!=a} +function b4d(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.pl()}}} +function c4d(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a.ql()}}} +function Xdb(a){Zy.call(this,'The given string does not match the expected format for individual spacings.',a)} +function pgd(){pgd=ccb;mgd=new qgd('ELK',0);ngd=new qgd('JSON',1);lgd=new qgd('DOT',2);ogd=new qgd('SVG',3)} +function pWc(){pWc=ccb;mWc=new rWc(ane,0);nWc=new rWc('RADIAL_COMPACTION',1);oWc=new rWc('WEDGE_COMPACTION',2)} +function Fyb(){Fyb=ccb;Cyb=new Gyb('CONCURRENT',0);Dyb=new Gyb('IDENTITY_FINISH',1);Eyb=new Gyb('UNORDERED',2)} +function nPb(){nPb=ccb;kPb=(cPb(),bPb);jPb=new Nsd(Tle,kPb);iPb=new Lsd(Ule);lPb=new Lsd(Vle);mPb=new Lsd(Wle)} +function Occ(){Occ=ccb;Mcc=new Zcc;Ncc=new _cc;Lcc=new bdc;Kcc=new fdc;Jcc=new jdc;Icc=(uCb(Jcc),new bpb)} +function tBc(){tBc=ccb;qBc=new uBc('CONSERVATIVE',0);rBc=new uBc('CONSERVATIVE_SOFT',1);sBc=new uBc('SLOPPY',2)} +function Zad(){Zad=ccb;Xad=new q0b(15);Wad=new Osd((Y9c(),f9c),Xad);Yad=C9c;Sad=s8c;Tad=Y8c;Vad=_8c;Uad=$8c} +function o7c(a,b,c){var d,e,f;d=new Psb;for(f=Jsb(c,0);f.b!=f.d.c;){e=BD(Xsb(f),8);Dsb(d,new g7c(e))}Tt(a,b,d)} +function r7c(a){var b,c,d;b=0;d=KC(m1,nie,8,a.b,0,1);c=Jsb(a,0);while(c.b!=c.d.c){d[b++]=BD(Xsb(c),8)}return d} +function $Pd(a){var b;b=(!a.a&&(a.a=new cUd(g5,a,9,5)),a.a);if(b.i!=0){return nQd(BD(qud(b,0),678))}return null} +function Ly(a,b){var c;c=wbb(a,b);if(Gbb(Vbb(a,b),0)|Ebb(Vbb(a,c),0)){return c}return wbb(rie,Vbb(Pbb(c,63),1))} +function Yyc(a,b){var c;c=Ksd((dzc(),bzc))!=null&&b.wg()!=null?Edb(ED(b.wg()))/Edb(ED(Ksd(bzc))):1;Rhb(a.b,b,c)} +function le(a,b){var c,d;c=BD(a.d.Bc(b),14);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d} +function AHc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c<a.a.length){a.a[c]-=d;c+=c&-c}} +function rwb(a){var b;b=a.a.c.length;if(b>0){return _vb(b-1,a.a.c.length),Kkb(a.a,b-1)}else{throw vbb(new Jpb)}} +function C2c(a,b,c){if(b<0){throw vbb(new qcb(ese+b))}if(b<a.j.c.length){Nkb(a.j,b,c)}else{A2c(a,b);Ekb(a.j,c)}} +function oCb(a,b,c){if(a>b){throw vbb(new Wdb(xke+a+yke+b))}if(a<0||b>c){throw vbb(new scb(xke+a+zke+b+oke+c))}} +function j5c(a){if(!a.a||(a.a.i&8)==0){throw vbb(new Zdb('Enumeration class expected for layout option '+a.f))}} +function vud(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.i<a.g.length){b=a.g;a.g=a.ri(a.i);$fb(b,0,a.g,0,a.i)}} +function hkb(a,b){var c,d;c=a.a.length-1;a.c=a.c-1&c;while(b!=a.c){d=b+1&c;NC(a.a,b,a.a[d]);b=d}NC(a.a,a.c,null)} +function ikb(a,b){var c,d;c=a.a.length-1;while(b!=a.b){d=b-1&c;NC(a.a,b,a.a[d]);b=d}NC(a.a,a.b,null);a.b=a.b+1&c} +function Fkb(a,b,c){var d,e;wCb(b,a.c.length);d=c.Pc();e=d.length;if(e==0){return false}bCb(a.c,b,d);return true} +function VEd(a){var b,c;if(a==null)return null;for(b=0,c=a.length;b<c;b++){if(!gFd(a[b]))return a[b]}return null} +function grb(a,b,c){var d,e,f,g;for(e=c,f=0,g=e.length;f<g;++f){d=e[f];if(a.b.re(b,d.cd())){return d}}return null} +function Hlb(a){var b,c,d,e,f;f=1;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=31*f+(b!=null?tb(b):0);f=f|0}return f} +function as(a){var b,c,d,e,f;b={};for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b[':'+(c.f!=null?c.f:''+c.g)]=c}return b} +function gr(a){var b;Qb(a);Mb(true,'numberToAdvance must be nonnegative');for(b=0;b<0&&Qr(a);b++){Rr(a)}return b} +function eDc(a){var b,c,d;d=0;for(c=new Sr(ur(a.a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);b.c.i==b.d.i||++d}return d} +function HZb(a,b){var c,d,e;c=a;e=0;do{if(c==b){return e}d=c.e;if(!d){throw vbb(new Vdb)}c=Q_b(d);++e}while(true)} +function w$c(a,b){var c,d,e;e=b-a.f;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),443);_Zc(c,c.e,c.f+e)}a.f=b} +function aRc(a,b,c){if($wnd.Math.abs(b-a)<Rqe||$wnd.Math.abs(c-a)<Rqe){return true}return b-a>Rqe?a-c>Rqe:c-a>Rqe} +function pHb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(JD(a,124)){if(BD(a,124).a.b==0){return 0}}return a.Re()} +function qHb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(JD(a,124)){if(BD(a,124).a.a==0){return 0}}return a.Se()} +function fhb(a){Hgb();if(a<0){if(a!=-1){return new Tgb(-1,-a)}return Bgb}else return a<=10?Dgb[QD(a)]:new Tgb(1,a)} +function xC(a){rC();throw vbb(new MB("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} +function lz(a){jz();Py(this);Ry(this);this.e=a;Sy(this,a);this.g=a==null?Xhe:fcb(a);this.a='';this.b=a;this.a=''} +function F$c(){this.a=new G$c;this.f=new I$c(this);this.b=new K$c(this);this.i=new M$c(this);this.e=new O$c(this)} +function ss(){rs.call(this,new _rb(Cv(16)));Xj(2,mie);this.b=2;this.a=new Ms(null,null,0,null);As(this.a,this.a)} +function xzc(){xzc=ccb;uzc=new zzc('DUMMY_NODE_OVER',0);vzc=new zzc('DUMMY_NODE_UNDER',1);wzc=new zzc('EQUAL',2)} +function LUb(){LUb=ccb;JUb=Fx(OC(GC(t1,1),Kie,103,0,[(ead(),aad),bad]));KUb=Fx(OC(GC(t1,1),Kie,103,0,[dad,_9c]))} +function VQc(a){return (Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b} +function DOb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=BD(c.Pb(),561);e=new MPb(b,a.e,a.f);Ekb(a.g,e)}} +function yId(a,b){var c,d,e;d=a.nk(b,null);e=null;if(b){e=(LFd(),c=new UQd,c);NQd(e,a.r)}d=xId(a,e,d);!!d&&d.Fi()} +function VFc(a,b){var c,d;d=Cub(a.d,1)!=0;c=true;while(c){c=false;c=b.c.Tf(b.e,d);c=c|dGc(a,b,d,false);d=!d}$Fc(a)} +function wZc(a,b){var c,d,e;d=false;c=b.q.d;if(b.d<a.b){e=ZZc(b.q,a.b);if(b.q.d>e){$Zc(b.q,e);d=c!=b.q.d}}return d} +function PVc(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c} +function Rnd(a,b){var c,d;d=jid(a);if(!d){!And&&(And=new lUd);c=(IEd(),PEd(b));d=new s0d(c);wtd(d.Vk(),a)}return d} +function Sc(a,b){var c,d;c=BD(a.c.Bc(b),14);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)} +function j7c(a,b){var c;for(c=0;c<b.length;c++){if(a==(BCb(c,b.length),b.charCodeAt(c))){return true}}return false} +function E_b(a,b){var c;for(c=0;c<b.length;c++){if(a==(BCb(c,b.length),b.charCodeAt(c))){return true}}return false} +function hFd(a){var b,c;if(a==null)return false;for(b=0,c=a.length;b<c;b++){if(!gFd(a[b]))return false}return true} +function Ngb(a){var b;if(a.c!=0){return a.c}for(b=0;b<a.a.length;b++){a.c=a.c*33+(a.a[b]&-1)}a.c=a.c*a.e;return a.c} +function vkb(a){var b;sCb(a.a!=a.b);b=a.d.a[a.a];mkb(a.b==a.d.c&&b!=null);a.c=a.a;a.a=a.a+1&a.d.a.length-1;return b} +function phe(a){var b;if(!(a.c.c<0?a.a>=a.c.b:a.a<=a.c.b)){throw vbb(new utb)}b=a.a;a.a+=a.c.c;++a.b;return meb(b)} +function BWb(a){var b;b=new VWb(a);rXb(a.a,zWb,new amb(OC(GC(bQ,1),Uhe,369,0,[b])));!!b.d&&Ekb(b.f,b.d);return b.f} +function Z1b(a){var b;b=new q_b(a.a);tNb(b,a);yNb(b,(wtc(),$sc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b} +function A9b(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=BD(f.Pb(),70);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}} +function UDb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);if(VDb(a,d,c)){return true}}return false} +function JDc(a){var b,c;for(c=new olb(a.r);c.a<c.c.c.length;){b=BD(mlb(c),10);if(a.n[b.p]<=0){return b}}return null} +function cVc(a){var b,c,d,e;e=new Tqb;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),33);b=fVc(c);ye(e,b)}return e} +function zFc(a){var b;b=k3c(xFc);BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Krc))&&e3c(b,(qUb(),nUb),(S8b(),H8b));return b} +function qKb(a,b,c){var d;d=new AJb(a,b);Rc(a.r,b.Hf(),d);if(c&&!tcd(a.u)){d.c=new aIb(a.d);Hkb(b.wf(),new tKb(d))}} +function ybb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(!isNaN(c)){return c}}return eD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b)} +function bFd(a,b){return b<a.length&&(BCb(b,a.length),a.charCodeAt(b)!=63)&&(BCb(b,a.length),a.charCodeAt(b)!=35)} +function Kic(a,b,c,d){var e,f;a.a=b;f=d?0:1;a.f=(e=new Iic(a.c,a.a,c,f),new jjc(c,a.a,e,a.e,a.b,a.c==(rGc(),pGc)))} +function Tmd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,1,e,b);!c?(c=d):c.Ei(d)}return c} +function GQd(a,b,c){var d,e;e=a.b;a.b=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,3,e,b);!c?(c=d):c.Ei(d)}return c} +function IQd(a,b,c){var d,e;e=a.f;a.f=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,0,e,b);!c?(c=d):c.Ei(d)}return c} +function xid(a,b){var c,d,e,f;f=(e=a?jid(a):null,q6d((d=b,e?e.Xk():null,d)));if(f==b){c=jid(a);!!c&&c.Xk()}return f} +function x6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function y6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function sAd(a){var b,c,d,e;if(a!=null){for(c=0;c<a.length;++c){b=a[c];if(b){BD(b.g,367);e=b.i;for(d=0;d<e;++d);}}}} +function YZc(a){var b,c,d;d=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);d=$wnd.Math.max(d,b.g)}return d} +function eGc(a){var b,c,d;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),214);b=c.c.Rf()?c.f:c.a;!!b&&mHc(b,c.j)}} +function hbd(){hbd=ccb;fbd=new ibd('INHERIT',0);ebd=new ibd('INCLUDE_CHILDREN',1);gbd=new ibd('SEPARATE_CHILDREN',2)} +function Jkd(a,b){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);return;case 2:Lkd(a,null);return;}fkd(a,b)} +function Dm(a){var b;switch(a.gc()){case 0:return hm;case 1:return new my(Qb(a.Xb(0)));default:b=a;return new ux(b);}} +function Vn(a){Ql();switch(a.gc()){case 0:return yx(),xx;case 1:return new oy(a.Kc().Pb());default:return new zx(a);}} +function Up(a){Ql();switch(a.c){case 0:return yx(),xx;case 1:return new oy(qr(new Gqb(a)));default:return new Tp(a);}} +function Hv(b,c){Qb(b);try{return b.xc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return null}else throw vbb(a)}} +function Iv(b,c){Qb(b);try{return b.Bc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return null}else throw vbb(a)}} +function Ck(b,c){Qb(b);try{return b.Hc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} +function Dk(b,c){Qb(b);try{return b.Mc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} +function Gv(b,c){Qb(b);try{return b._b(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} +function KXb(a,b){var c;if(a.a.c.length>0){c=BD(Ikb(a.a,a.a.c.length-1),570);if(NYb(c,b)){return}}Ekb(a.a,new PYb(b))} +function $gc(a){Hgc();var b,c;b=a.d.c-a.e.c;c=BD(a.g,145);Hkb(c.b,new shc(b));Hkb(c.c,new uhc(b));reb(c.i,new whc(b))} +function gic(a){var b;b=new Ufb;b.a+='VerticalSegment ';Pfb(b,a.e);b.a+=' ';Qfb(b,Eb(new Gb,new olb(a.k)));return b.a} +function u4c(a){var b;b=BD(Wrb(a.c.c,''),229);if(!b){b=new W3c(d4c(c4c(new e4c,''),'Other'));Xrb(a.c.c,'',b)}return b} +function qnd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (name: ';Efb(b,a.zb);b.a+=')';return b.a} +function Jnd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}return c} +function _ic(a,b){var c,d,e;c=0;for(e=V_b(a,b).Kc();e.Ob();){d=BD(e.Pb(),11);c+=vNb(d,(wtc(),gtc))!=null?1:0}return c} +function vPc(a,b,c){var d,e,f;d=0;for(f=Jsb(a,0);f.b!=f.d.c;){e=Edb(ED(Xsb(f)));if(e>c){break}else e>=b&&++d}return d} +function RTd(a,b,c){var d,e;d=new pSd(a.e,3,13,null,(e=b.c,e?e:(jGd(),YFd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function STd(a,b,c){var d,e;d=new pSd(a.e,4,13,(e=b.c,e?e:(jGd(),YFd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function zId(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,8,e,a.r);!c?(c=d):c.Ei(d)}return c} +function o1d(a,b){var c,d;c=BD(b,676);d=c.vk();!d&&c.wk(d=JD(b,88)?new C1d(a,BD(b,26)):new O1d(a,BD(b,148)));return d} +function kud(a,b,c){var d;a.qi(a.i+1);d=a.oi(b,c);b!=a.i&&$fb(a.g,b,a.g,b+1,a.i-b);NC(a.g,b,d);++a.i;a.bi(b,c);a.ci()} +function vwb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Ofb(a.a,b.a,b.d.length,c)}return a} +function __d(a,b){var c,d,e,f;b.vi(a.a);f=BD(Ajd(a.a,8),1936);if(f!=null){for(c=f,d=0,e=c.length;d<e;++d){null.jm()}}} +function TAb(a,b){var c;c=new NBb;if(!a.a.sd(c)){Tzb(a);return Atb(),Atb(),ztb}return Atb(),new Ftb(uCb(SAb(a,c.a,b)))} +function CHc(a,b){switch(b.g){case 2:case 1:return V_b(a,b);case 3:case 4:return Su(V_b(a,b));}return mmb(),mmb(),jmb} +function pb(a,b){return ND(a)?dfb(a,b):LD(a)?Fdb(a,b):KD(a)?(uCb(a),PD(a)===PD(b)):ID(a)?a.Fb(b):MC(a)?mb(a,b):qz(a,b)} +function r6d(a){return !a?null:(a.i&1)!=0?a==sbb?wI:a==WD?JI:a==VD?FI:a==UD?BI:a==XD?MI:a==rbb?UI:a==SD?xI:yI:a} +function Fhb(a,b,c,d,e){if(b==0||d==0){return}b==1?(e[d]=Hhb(e,c,d,a[0])):d==1?(e[b]=Hhb(e,a,b,c[0])):Ghb(a,c,e,b,d)} +function c6b(a,b){var c;if(a.c.length==0){return}c=BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193);Nlb(c,new o6b);_5b(c,b)} +function i6b(a,b){var c;if(a.c.length==0){return}c=BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193);Nlb(c,new t6b);_5b(c,b)} +function Ekd(a,b,c,d){switch(b){case 1:return !a.n&&(a.n=new cUd(D2,a,1,7)),a.n;case 2:return a.k;}return bkd(a,b,c,d)} +function ead(){ead=ccb;cad=new iad(ole,0);bad=new iad(kle,1);aad=new iad(jle,2);_9c=new iad(vle,3);dad=new iad('UP',4)} +function RXb(){RXb=ccb;QXb=new SXb(ane,0);PXb=new SXb('INSIDE_PORT_SIDE_GROUPS',1);OXb=new SXb('FORCE_MODEL_ORDER',2)} +function xCb(a,b,c){if(a<0||b>c){throw vbb(new qcb(xke+a+zke+b+', size: '+c))}if(a>b){throw vbb(new Wdb(xke+a+yke+b))}} +function eid(a,b,c){if(b<0){vid(a,c)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Vj(a,a.yh(),b)}} +function Jlb(a,b,c,d,e,f,g,h){var i;i=c;while(f<g){i>=d||b<c&&h.ue(a[b],a[i])<=0?NC(e,f++,a[b++]):NC(e,f++,a[i++])}} +function yZb(a,b,c,d,e,f){this.e=new Rkb;this.f=(KAc(),JAc);Ekb(this.e,a);this.d=b;this.a=c;this.b=d;this.f=e;this.c=f} +function VOd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),26);if(PD(b)===PD(c)){return true}}return false} +function uJb(a){qJb();var b,c,d,e;for(c=wJb(),d=0,e=c.length;d<e;++d){b=c[d];if(Jkb(b.a,a,0)!=-1){return b}}return pJb} +function jFd(a){if(a>=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} +function QHd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (source: ';Efb(b,a.d);b.a+=')';return b.a} +function OQd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,5,e,a.a);!c?(c=d):Qwd(c,d)}return c} +function BId(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,2,c,b))} +function eLd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} +function LPd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} +function CId(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,3,c,b))} +function fLd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,9,c,b))} +function N7d(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.Gj();a.b=!c?bLd(a.c.Tg(),a.a):a.c.Xg(a.a.aj(),c)}return a.c.Og(a.b,b)} +function meb(a){var b,c;if(a>-129&&a<128){b=a+128;c=(oeb(),neb)[b];!c&&(c=neb[b]=new _db(a));return c}return new _db(a)} +function Web(a){var b,c;if(a>-129&&a<128){b=a+128;c=(Yeb(),Xeb)[b];!c&&(c=Xeb[b]=new Qeb(a));return c}return new Qeb(a)} +function L5b(a){var b,c;b=a.k;if(b==(j0b(),e0b)){c=BD(vNb(a,(wtc(),Hsc)),61);return c==(Ucd(),Acd)||c==Rcd}return false} +function i1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return r1d(a,d,b,c)}}return null} +function l1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return s1d(a,d,b,c)}}return null} +function cTd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),138);if(PD(b)===PD(c)){return true}}return false} +function vtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));if(a.hi()&&a.Hc(c)){throw vbb(new Wdb(kue))}a.Xh(b,c)} +function iqd(a,b){var c;c=oo(a.i,b);if(c==null){throw vbb(new cqd('Node did not exist in input.'))}Yqd(b,c);return null} +function $hd(a,b){var c;c=YKd(a,b);if(JD(c,322)){return BD(c,34)}throw vbb(new Wdb(ite+b+"' is not a valid attribute"))} +function V2d(a,b,c){var d,e;e=JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a);for(d=0;d<c;++d){d4d(e)}return e} +function ede(a){var b,c,d;d=0;c=a.length;for(b=0;b<c;b++){a[b]==32||a[b]==13||a[b]==10||a[b]==9||(a[d++]=a[b])}return d} +function lYb(a){var b,c,d;b=new Rkb;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),594);Gkb(b,BD(c.jf(),14))}return b} +function SSc(a){var b,c,d;b=BD(vNb(a,(mTc(),gTc)),15);for(d=b.Kc();d.Ob();){c=BD(d.Pb(),188);Dsb(c.b.d,c);Dsb(c.c.b,c)}} +function b5b(a){switch(BD(vNb(a,(wtc(),Osc)),303).g){case 1:yNb(a,Osc,(esc(),bsc));break;case 2:yNb(a,Osc,(esc(),dsc));}} +function _Fc(a){var b;if(a.g){b=a.c.Rf()?a.f:a.a;bGc(b.a,a.o,true);bGc(b.a,a.o,false);yNb(a.o,(Nyc(),Vxc),(dcd(),Zbd))}} +function loc(a){var b;if(!a.a){throw vbb(new Zdb('Cannot offset an unassigned cut.'))}b=a.c-a.b;a.b+=b;noc(a,b);ooc(a,b)} +function ckb(a){var b;b=a.a[a.c-1&a.a.length-1];if(b==null){return null}a.c=a.c-1&a.a.length-1;NC(a.a,a.c,null);return b} +function zGb(a){var b,c;for(c=a.p.a.ec().Kc();c.Ob();){b=BD(c.Pb(),213);if(b.f&&a.b[b.c]<-1.0E-10){return b}}return null} +function bLb(a,b){switch(a.b.g){case 0:case 1:return b;case 2:case 3:return new J6c(b.d,0,b.a,b.b);default:return null;}} +function had(a){switch(a.g){case 2:return bad;case 1:return aad;case 4:return _9c;case 3:return dad;default:return cad;}} +function Vcd(a){switch(a.g){case 1:return Tcd;case 2:return Acd;case 3:return zcd;case 4:return Rcd;default:return Scd;}} +function Wcd(a){switch(a.g){case 1:return Rcd;case 2:return Tcd;case 3:return Acd;case 4:return zcd;default:return Scd;}} +function Xcd(a){switch(a.g){case 1:return zcd;case 2:return Rcd;case 3:return Tcd;case 4:return Acd;default:return Scd;}} +function DPc(a){switch(a){case 0:return new OPc;case 1:return new EPc;case 2:return new JPc;default:throw vbb(new Vdb);}} +function Kdb(a,b){if(a<b){return -1}if(a>b){return 1}if(a==b){return a==0?Kdb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1} +function f4b(a,b){Odd(b,'Sort end labels',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new q4b),new s4b),new u4b);Qdd(b)} +function Wxd(a,b,c){var d,e;if(a.ej()){e=a.fj();d=sud(a,b,c);a.$i(a.Zi(7,meb(c),d,b,e));return d}else{return sud(a,b,c)}} +function vAd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.cd();c=b.Sh();d=(c&Ohe)%a.d.length;KAd(a,d,xAd(a,d,c,e))}} +function ZId(a,b){var c;c=(a.Bb&zte)!=0;b?(a.Bb|=zte):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,10,c,b))} +function dJd(a,b){var c;c=(a.Bb&Rje)!=0;b?(a.Bb|=Rje):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,12,c,b))} +function eJd(a,b){var c;c=(a.Bb&Cve)!=0;b?(a.Bb|=Cve):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,15,c,b))} +function fJd(a,b){var c;c=(a.Bb&Dve)!=0;b?(a.Bb|=Dve):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,11,c,b))} +function jOb(a,b){var c;c=Kdb(a.b.c,b.b.c);if(c!=0){return c}c=Kdb(a.a.a,b.a.a);if(c!=0){return c}return Kdb(a.a.b,b.a.b)} +function jqd(a,b){var c;c=Ohb(a.k,b);if(c==null){throw vbb(new cqd('Port did not exist in input.'))}Yqd(b,c);return null} +function k6d(a){var b,c;for(c=l6d(bKd(a)).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b)){return uFd((tFd(),sFd),b)}}return null} +function n3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=0;c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];g.rl(d.ak())&&++f}return f} +function Vsd(a,b,c){var d,e;d=BD(b.We(a.a),35);e=BD(c.We(a.a),35);return d!=null&&e!=null?Fcb(d,e):d!=null?-1:e!=null?1:0} +function ved(a,b,c){var d,e;if(a.c){Efd(a.c,b,c)}else{for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),157);ved(d,b,c)}}} +function RUb(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),46);Lkb(a.b.b,c.b);fVb(BD(c.a,189),BD(c.b,81))}} +function tr(a){var b,c;c=Kfb(new Ufb,91);b=true;while(a.Ob()){b||(c.a+=She,c);b=false;Pfb(c,a.Pb())}return (c.a+=']',c).a} +function aJd(a,b){var c;c=(a.Bb&oie)!=0;b?(a.Bb|=oie):(a.Bb&=-16385);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,16,c,b))} +function MJd(a,b){var c;c=(a.Bb&ote)!=0;b?(a.Bb|=ote):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,18,c,b))} +function CUd(a,b){var c;c=(a.Bb&ote)!=0;b?(a.Bb|=ote):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,18,c,b))} +function EUd(a,b){var c;c=(a.Bb&Tje)!=0;b?(a.Bb|=Tje):(a.Bb&=-65537);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,20,c,b))} +function Tee(a){var b;b=KC(TD,$ie,25,2,15,1);a-=Tje;b[0]=(a>>10)+Uje&aje;b[1]=(a&1023)+56320&aje;return zfb(b,0,b.length)} +function a_b(a){var b,c;c=BD(vNb(a,(Nyc(),Lwc)),103);if(c==(ead(),cad)){b=Edb(ED(vNb(a,owc)));return b>=1?bad:_9c}return c} +function rec(a){switch(BD(vNb(a,(Nyc(),Swc)),218).g){case 1:return new Fmc;case 3:return new wnc;default:return new zmc;}} +function Uzb(a){if(a.c){Uzb(a.c)}else if(a.d){throw vbb(new Zdb("Stream already terminated, can't be modified or used"))}} +function Mkd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (identifier: ';Efb(b,a.k);b.a+=')';return b.a} +function ctd(a,b,c){var d,e;d=(Fhd(),e=new xkd,e);vkd(d,b);wkd(d,c);!!a&&wtd((!a.a&&(a.a=new xMd(y2,a,5)),a.a),d);return d} +function ttb(a,b,c,d){var e,f;uCb(d);uCb(c);e=a.xc(b);f=e==null?c:Myb(BD(e,15),BD(c,14));f==null?a.Bc(b):a.zc(b,f);return f} +function pqb(a){var b,c,d,e;c=(b=BD(gdb((d=a.gm,e=d.f,e==CI?d:e)),9),new xqb(b,BD(_Bb(b,b.length),9),0));rqb(c,a);return c} +function hDc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),10);if(Be(c,BD(Ikb(b,d.p),14))){return d}}return null} +function Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=ubb(a);if(JD(a,597)){e=a;throw vbb(new ycb(e))}else throw vbb(a)}return c} +function Qbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(Kje<c&&c<Ije){return c}}return zbb(nD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function wbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a+b;if(Kje<c&&c<Ije){return c}}return zbb(cD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function Ibb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a*b;if(Kje<c&&c<Ije){return c}}return zbb(gD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function V_b(a,b){var c;a.i||N_b(a);c=BD(Mpb(a.g,b),46);return !c?(mmb(),mmb(),jmb):new Jib(a.j,BD(c.a,19).a,BD(c.b,19).a)} +function Drb(a,b,c){var d;d=a.a.get(b);a.a.set(b,c===undefined?null:c);if(d===undefined){++a.c;zpb(a.b)}else{++a.d}return d} +function kNb(a,b,c){a.n=IC(XD,[nie,Sje],[364,25],14,[c,QD($wnd.Math.ceil(b/32))],2);a.o=b;a.p=c;a.j=b-1>>1;a.k=c-1>>1} +function Gub(){zub();var a,b,c;c=yub+++Date.now();a=QD($wnd.Math.floor(c*lke))&nke;b=QD(c-a*mke);this.a=a^1502;this.b=b^kke} +function O_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.b)}return Qb(b),new sl(b)} +function R_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.e)}return Qb(b),new sl(b)} +function U_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.g)}return Qb(b),new sl(b)} +function n6d(a){var b,c;for(c=o6d(bKd(WId(a))).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b))return FFd((EFd(),DFd),b)}return null} +function wm(a){var b,c,d;for(c=0,d=a.length;c<d;c++){if(a[c]==null){throw vbb(new Heb('at index '+c))}}b=a;return new amb(b)} +function wid(a,b){var c;c=YKd(a.Tg(),b);if(JD(c,99)){return BD(c,18)}throw vbb(new Wdb(ite+b+"' is not a valid reference"))} +function Tdb(a){var b;b=Hcb(a);if(b>3.4028234663852886E38){return Pje}else if(b<-3.4028234663852886E38){return Qje}return b} +function aeb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} +function Ev(a){var b,c,d,e;b=new cq(a.Hd().gc());e=0;for(d=vr(a.Hd().Kc());d.Ob();){c=d.Pb();bq(b,c,meb(e++))}return fn(b.a)} +function Uyb(a,b){var c,d,e;e=new Lqb;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);Rhb(e,c.cd(),Yyb(a,BD(c.dd(),15)))}return e} +function EZc(a,b){a.n.c.length==0&&Ekb(a.n,new VZc(a.s,a.t,a.i));Ekb(a.b,b);QZc(BD(Ikb(a.n,a.n.c.length-1),211),b);GZc(a,b)} +function LFb(a){if(a.c!=a.b.b||a.i!=a.g.b){a.a.c=KC(SI,Uhe,1,0,5,1);Gkb(a.a,a.b);Gkb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a} +function Ycc(a,b){var c,d,e;e=0;for(d=BD(b.Kb(a),20).Kc();d.Ob();){c=BD(d.Pb(),17);Ccb(DD(vNb(c,(wtc(),ltc))))||++e}return e} +function efc(a,b){var c,d,e;d=tgc(b);e=Edb(ED(pBc(d,(Nyc(),lyc))));c=$wnd.Math.max(0,e/2-0.5);cfc(b,c,1);Ekb(a,new Dfc(b,c))} +function Ctc(){Ctc=ccb;Btc=new Dtc(ane,0);xtc=new Dtc('FIRST',1);ytc=new Dtc(Gne,2);ztc=new Dtc('LAST',3);Atc=new Dtc(Hne,4)} +function Aad(){Aad=ccb;zad=new Bad(ole,0);xad=new Bad('POLYLINE',1);wad=new Bad('ORTHOGONAL',2);yad=new Bad('SPLINES',3)} +function zYc(){zYc=ccb;xYc=new AYc('ASPECT_RATIO_DRIVEN',0);yYc=new AYc('MAX_SCALE_DRIVEN',1);wYc=new AYc('AREA_DRIVEN',2)} +function Y$c(){Y$c=ccb;V$c=new Z$c('P1_STRUCTURE',0);W$c=new Z$c('P2_PROCESSING_ORDER',1);X$c=new Z$c('P3_EXECUTION',2)} +function tVc(){tVc=ccb;sVc=new uVc('OVERLAP_REMOVAL',0);qVc=new uVc('COMPACTION',1);rVc=new uVc('GRAPH_SIZE_CALCULATION',2)} +function Jy(a,b){Iy();return My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b))} +function yOc(a,b){var c,d;c=Jsb(a,0);while(c.b!=c.d.c){d=Gdb(ED(Xsb(c)));if(d==b){return}else if(d>b){Ysb(c);break}}Vsb(c,b)} +function t4c(a,b){var c,d,e,f,g;c=b.f;Xrb(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;f<g;++f){d=e[f];Xrb(a.c.e,d,b)}}} +function Ilb(a,b,c,d){var e,f,g;for(e=b+1;e<c;++e){for(f=e;f>b&&d.ue(a[f-1],a[f])>0;--f){g=a[f];NC(a,f,a[f-1]);NC(a,f-1,g)}}} +function did(a,b,c,d){if(b<0){uid(a,c,d)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Tj(a,a.yh(),b,d)}} +function xFb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw vbb(new Wdb('Node '+b+' not part of edge '+a))}} +function iEb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function GVb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function Xkd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return Ekd(a,b,c,d)} +function Ljc(a){if(a.k!=(j0b(),h0b)){return false}return FAb(new YAb(null,new Lub(new Sr(ur(U_b(a).a.Kc(),new Sq)))),new Mjc)} +function MEd(a){if(a.e==null){return a}else !a.c&&(a.c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c} +function VC(a,b){if(a.h==Gje&&a.m==0&&a.l==0){b&&(QC=TC(0,0,0));return SC((wD(),uD))}b&&(QC=TC(a.l,a.m,a.h));return TC(0,0,0)} +function fcb(a){var b;if(Array.isArray(a)&&a.im===gcb){return hdb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()} +function Rpb(a){var b;this.a=(b=BD(a.e&&a.e(),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.b=KC(SI,Uhe,1,this.a.a.length,5,1)} +function _Ob(a){var b,c,d;this.a=new zsb;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),14);b=new MOb;GOb(b,c);Qqb(this.a,b)}} +function cKb(a){$Jb();var b,c,d,e;b=a.o.b;for(d=BD(BD(Qc(a.r,(Ucd(),Rcd)),21),84).Kc();d.Ob();){c=BD(d.Pb(),111);e=c.e;e.b+=b}} +function ag(a){var b;if(a.b){ag(a.b);if(a.b.d!=a.c){throw vbb(new Apb)}}else if(a.d.dc()){b=BD(a.f.c.xc(a.e),14);!!b&&(a.d=b)}} +function fFd(a){var b;if(a==null)return true;b=a.length;return b>0&&(BCb(b-1,a.length),a.charCodeAt(b-1)==58)&&!OEd(a,CEd,DEd)} +function OEd(a,b,c){var d,e;for(d=0,e=a.length;d<e;d++){if(_Ed((BCb(d,a.length),a.charCodeAt(d)),b,c))return true}return false} +function JOb(a,b){var c,d;for(d=a.e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),266);if(t6c(b,c.d)||o6c(b,c.d)){return true}}return false} +function Q9b(a,b){var c,d,e;d=N9b(a,b);e=d[d.length-1]/2;for(c=0;c<d.length;c++){if(d[c]>=e){return b.c+c}}return b.c+b.b.gc()} +function NCd(a,b){LCd();var c,d,e,f;d=KLd(a);e=b;Klb(d,0,d.length,e);for(c=0;c<d.length;c++){f=MCd(a,d[c],c);c!=f&&Wxd(a,c,f)}} +function EHb(a,b){var c,d,e,f,g,h;d=0;c=0;for(f=b,g=0,h=f.length;g<h;++g){e=f[g];if(e>0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} +function Htd(a){var b,c,d;d=new Hfb;d.a+='[';for(b=0,c=a.gc();b<c;){Efb(d,xfb(a.ki(b)));++b<c&&(d.a+=She,d)}d.a+=']';return d.a} +function fsd(a){var b,c,d,e,f;f=hsd(a);c=Fhe(a.c);d=!c;if(d){e=new wB;cC(f,'knownLayouters',e);b=new qsd(e);reb(a.c,b)}return f} +function Ce(a,b){var c,d,e;uCb(b);c=false;for(d=new olb(a);d.a<d.c.c.length;){e=mlb(d);if(ze(b,e,false)){nlb(d);c=true}}return c} +function UGb(a){var b,c,d;d=Edb(ED(a.a.We((Y9c(),Q9c))));for(c=new olb(a.a.xf());c.a<c.c.c.length;){b=BD(mlb(c),680);XGb(a,b,d)}} +function MUb(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),46);Ekb(a.b.b,BD(c.b,81));eVb(BD(c.a,189),BD(c.b,81))}} +function XCc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Dkb(e,0,new H1b(a.a))}$_b(b,BD(Ikb(e,e.c.length-c),29));a.b[b.p]=c} +function JTb(a,b,c){var d;d=c;!d&&(d=Ydd(new Zdd,0));Odd(d,Vme,2);qZb(a.b,b,Udd(d,1));LTb(a,b,Udd(d,1));_Yb(b,Udd(d,1));Qdd(d)} +function eKc(a,b,c,d,e){FJc();AFb(DFb(CFb(BFb(EFb(new FFb,0),e.d.e-a),b),e.d));AFb(DFb(CFb(BFb(EFb(new FFb,0),c-e.a.e),e.a),d))} +function e$c(a,b,c,d,e,f){this.a=a;this.c=b;this.b=c;this.f=d;this.d=e;this.e=f;this.c>0&&this.b>0&&q$c(this.c,this.b,this.a)} +function ezc(a){dzc();this.c=Ou(OC(GC(h0,1),Uhe,831,0,[Uyc]));this.b=new Lqb;this.a=a;Rhb(this.b,bzc,1);Hkb(czc,new Xed(this))} +function I2c(a,b){var c;if(a.d){if(Mhb(a.b,b)){return BD(Ohb(a.b,b),51)}else{c=b.Kf();Rhb(a.b,b,c);return c}}else{return b.Kf()}} +function Kgb(a,b){var c;if(PD(a)===PD(b)){return true}if(JD(b,91)){c=BD(b,91);return a.e==c.e&&a.d==c.d&&Lgb(a,c.a)}return false} +function Zcd(a){Ucd();switch(a.g){case 4:return Acd;case 1:return zcd;case 3:return Rcd;case 2:return Tcd;default:return Scd;}} +function Ykd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return Hkd(a,b)} +function gWc(a){switch(a.g){case 0:return new FXc;case 1:return new IXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function QUc(a){switch(a.g){case 0:return new CXc;case 1:return new MXc;default:throw vbb(new Wdb(Dne+(a.f!=null?a.f:''+a.g)));}} +function b1c(a){switch(a.g){case 0:return new s1c;case 1:return new w1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} +function qWc(a){switch(a.g){case 1:return new SVc;case 2:return new KVc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function ryb(a){var b,c;if(a.b){return a.b}c=lyb?null:a.d;while(c){b=lyb?null:c.b;if(b){return b}c=lyb?null:c.d}return $xb(),Zxb} +function hhb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Mgb(a);if(d==a.d-1){--c;c=c|0}}b-=heb(c);return b} +function bhb(a){var b,c,d;if(a<Fgb.length){return Fgb[a]}c=a>>5;b=a&31;d=KC(WD,oje,25,c+1,15,1);d[c]=1<<b;return new Vgb(1,c+1,d)} +function O2b(a){var b,c,d;c=a.zg();if(c){b=a.Ug();if(JD(b,160)){d=O2b(BD(b,160));if(d!=null){return d+'.'+c}}return c}return null} +function ze(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=e.Pb();if(PD(b)===PD(d)||b!=null&&pb(b,d)){c&&e.Qb();return true}}return false} +function zvd(a,b,c){var d,e;++a.j;if(c.dc()){return false}else{for(e=c.Kc();e.Ob();){d=e.Pb();a.Hi(b,a.oi(b,d));++b}return true}} +function yA(a,b,c,d){var e,f;f=c-b;if(f<3){while(f<3){a*=10;++f}}else{e=1;while(f>3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} +function XUb(a){LUb();return Bcb(),GVb(BD(a.a,81).j,BD(a.b,103))||BD(a.a,81).d.e!=0&&GVb(BD(a.a,81).j,BD(a.b,103))?true:false} +function s3c(a){p3c();if(BD(a.We((Y9c(),b9c)),174).Hc((Idd(),Gdd))){BD(a.We(x9c),174).Fc((rcd(),qcd));BD(a.We(b9c),174).Mc(Gdd)}} +function Gxd(a,b){var c,d;if(!b){return false}else{for(c=0;c<a.i;++c){d=BD(a.g[c],366);if(d.Di(b)){return false}}return wtd(a,b)}} +function pvd(a){var b,c,d,e;b=new wB;for(e=new Dnb(a.b.Kc());e.b.Ob();){d=BD(e.b.Pb(),686);c=lsd(d);uB(b,b.a.length,c)}return b.a} +function cLb(a){var b;!a.c&&(a.c=new VKb);Okb(a.d,new jLb);_Kb(a);b=UKb(a);MAb(new YAb(null,new Kub(a.d,16)),new CLb(a));return b} +function mKd(a){var b;if((a.Db&64)!=0)return qnd(a);b=new Jfb(qnd(a));b.a+=' (instanceClassName: ';Efb(b,a.D);b.a+=')';return b.a} +function Pqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new bsd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new csd(a);imd(d.a,(uCb(f),f))}} +function Eqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new Yrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new _rd(a);pmd(d.a,(uCb(f),f))}} +function bLd(a,b){var c,d,e;c=(a.i==null&&TKd(a),a.i);d=b.aj();if(d!=-1){for(e=c.length;d<e;++d){if(c[d]==b){return d}}}return -1} +function tNd(a){var b,c,d,e,f;c=BD(a.g,674);for(d=a.i-1;d>=0;--d){b=c[d];for(e=0;e<d;++e){f=c[e];if(uNd(a,b,f)){tud(a,d);break}}}} +function jCb(b){var c=b.e;function d(a){if(!a||a.length==0){return ''}return '\t'+a.join('\n\t')} +return c&&(c.stack||d(b[Yie]))} +function nm(a){im();var b;b=a.Pc();switch(b.length){case 0:return hm;case 1:return new my(Qb(b[0]));default:return new ux(wm(b));}} +function W_b(a,b){switch(b.g){case 1:return Nq(a.j,(z0b(),u0b));case 2:return Nq(a.j,(z0b(),w0b));default:return mmb(),mmb(),jmb;}} +function $kd(a,b){switch(b){case 3:ald(a,0);return;case 4:cld(a,0);return;case 5:dld(a,0);return;case 6:eld(a,0);return;}Jkd(a,b)} +function dzc(){dzc=ccb;Vyc();bzc=(Nyc(),vyc);czc=Ou(OC(GC(Q3,1),zqe,146,0,[kyc,lyc,nyc,oyc,ryc,syc,tyc,uyc,xyc,zyc,myc,pyc,wyc]))} +function Y9b(a){var b,c;b=a.d==(Apc(),vpc);c=U9b(a);b&&!c||!b&&c?yNb(a.a,(Nyc(),mwc),(F7c(),D7c)):yNb(a.a,(Nyc(),mwc),(F7c(),C7c))} +function XAb(a,b){var c;c=BD(GAb(a,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);return c.Qc(aBb(c.gc()))} +function Ded(){Ded=ccb;Ced=new Eed('SIMPLE',0);zed=new Eed('GROUP_DEC',1);Bed=new Eed('GROUP_MIXED',2);Aed=new Eed('GROUP_INC',3)} +function CWd(){CWd=ccb;AWd=new DWd;tWd=new GWd;uWd=new JWd;vWd=new MWd;wWd=new PWd;xWd=new SWd;yWd=new VWd;zWd=new YWd;BWd=new _Wd} +function FHb(a,b,c){tHb();oHb.call(this);this.a=IC(oN,[nie,ile],[595,212],0,[sHb,rHb],2);this.c=new I6c;this.g=a;this.f=b;this.d=c} +function pNb(a,b){this.n=IC(XD,[nie,Sje],[364,25],14,[b,QD($wnd.Math.ceil(a/32))],2);this.o=a;this.p=b;this.j=a-1>>1;this.k=b-1>>1} +function r3b(a,b){Odd(b,'End label post-processing',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new w3b),new y3b),new A3b);Qdd(b)} +function NLc(a,b,c){var d,e;d=Edb(a.p[b.i.p])+Edb(a.d[b.i.p])+b.n.b+b.a.b;e=Edb(a.p[c.i.p])+Edb(a.d[c.i.p])+c.n.b+c.a.b;return e-d} +function xhb(a,b,c){var d,e;d=xbb(c,Yje);for(e=0;ybb(d,0)!=0&&e<b;e++){d=wbb(d,xbb(a[e],Yje));a[e]=Tbb(d);d=Obb(d,32)}return Tbb(d)} +function $Ed(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BCb(c,a.length),a.charCodeAt(c));b<64&&(e=Mbb(e,Nbb(1,b)))}return e} +function S9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} +function T9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} +function xud(a,b){var c;if(a.i>0){if(b.length<a.i){c=izd(rb(b).c,a.i);b=c}$fb(a.g,0,b,0,a.i)}b.length>a.i&&NC(b,a.i,null);return b} +function Sxd(a,b,c){var d,e,f;if(a.ej()){d=a.i;f=a.fj();kud(a,d,b);e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{kud(a,a.i,b)}return c} +function HMd(a,b,c){var d,e;d=new pSd(a.e,4,10,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function GMd(a,b,c){var d,e;d=new pSd(a.e,3,10,null,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function _Jb(a){$Jb();var b;b=new g7c(BD(a.e.We((Y9c(),_8c)),8));if(a.B.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b} +function Lzc(a){Izc();var b;(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Cxc))?(b=BD(vNb(a,Cxc),197)):(b=BD(vNb(Q_b(a),Dxc),197));return b} +function pBc(a,b){var c,d;d=null;if(wNb(a,(Nyc(),qyc))){c=BD(vNb(a,qyc),94);c.Xe(b)&&(d=c.We(b))}d==null&&(d=vNb(Q_b(a),b));return d} +function Ze(a,b){var c,d,e;if(JD(b,42)){c=BD(b,42);d=c.cd();e=Hv(a.Rc(),d);return Hb(e,c.dd())&&(e!=null||a.Rc()._b(d))}return false} +function qAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=xAd(a,e,d,b);return c!=-1}else{return false}} +function AAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){return c.dd()}}return null} +function R2d(a,b){var c,d,e,f;f=S6d(a.e.Tg(),b);c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];if(f.rl(d.ak())){return false}}return true} +function B6d(a){if(a.b==null){while(a.a.Ob()){a.b=a.a.Pb();if(!BD(a.b,49).Zg()){return true}}a.b=null;return false}else{return true}} +function Myd(b,c){b.mj();try{b.d.Vc(b.e++,c);b.f=b.d.j;b.g=-1}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} +function IA(a,b){GA();var c,d;c=LA((KA(),KA(),JA));d=null;b==c&&(d=BD(Phb(FA,a),615));if(!d){d=new HA(a);b==c&&Shb(FA,a,d)}return d} +function Epb(a,b){var c,d;a.a=wbb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d+=b;c=b-a.f;d=a.e+c;a.f=d-a.e-c;a.e=d} +function ogb(a,b){var c;a.c=b;a.a=hhb(b);a.a<54&&(a.f=(c=b.d>1?Mbb(Nbb(b.a[1],32),xbb(b.a[0],Yje)):xbb(b.a[0],Yje),Sbb(Ibb(b.e,c))))} +function Hbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a%b;if(Kje<c&&c<Ije){return c}}return zbb((UC(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b,true),QC))} +function p5b(a,b){var c;m5b(b);c=BD(vNb(a,(Nyc(),Rwc)),276);!!c&&yNb(a,Rwc,Tqc(c));n5b(a.c);n5b(a.f);o5b(a.d);o5b(BD(vNb(a,wxc),207))} +function rHc(a){this.e=KC(WD,oje,25,a.length,15,1);this.c=KC(sbb,dle,25,a.length,16,1);this.b=KC(sbb,dle,25,a.length,16,1);this.f=0} +function BDc(a){var b,c;a.j=KC(UD,Vje,25,a.p.c.length,15,1);for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);a.j[b.p]=b.o.b/a.i}} +function yic(a){var b;if(a.c==0){return}b=BD(Ikb(a.a,a.b),287);b.b==1?(++a.b,a.b<a.a.c.length&&Cic(BD(Ikb(a.a,a.b),287))):--b.b;--a.c} +function eac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(U_b(b).a.Kc(),new Sq))),17).d.i;b.k==(j0b(),g0b)&&Ekb(a.e,b)}while(b.k==(j0b(),g0b))} +function idd(){idd=ccb;fdd=new q0b(15);edd=new Osd((Y9c(),f9c),fdd);hdd=new Osd(T9c,15);gdd=new Osd(E9c,meb(0));ddd=new Osd(r8c,tme)} +function tdd(){tdd=ccb;rdd=new udd('PORTS',0);sdd=new udd('PORT_LABELS',1);qdd=new udd('NODE_LABELS',2);pdd=new udd('MINIMUM_SIZE',3)} +function Ree(a,b){var c,d;d=b.length;for(c=0;c<d;c+=2)Ufe(a,(BCb(c,b.length),b.charCodeAt(c)),(BCb(c+1,b.length),b.charCodeAt(c+1)))} +function _Zc(a,b,c){var d,e,f,g;f=b-a.e;g=c-a.f;for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),187);OZc(d,d.s+f,d.t+g)}a.e=b;a.f=c} +function jUc(a,b){var c,d,e,f;f=b.b.b;a.a=new Psb;a.b=KC(WD,oje,25,f,15,1);c=0;for(e=Jsb(b.b,0);e.b!=e.d.c;){d=BD(Xsb(e),86);d.g=c++}} +function ihb(a,b){var c,d,e,f;c=b>>5;b&=31;e=a.d+c+(b==0?0:1);d=KC(WD,oje,25,e,15,1);jhb(d,a.a,c,b);f=new Vgb(a.e,e,d);Jgb(f);return f} +function Ofe(a,b,c){var d,e;d=BD(Phb(Zee,b),117);e=BD(Phb($ee,b),117);if(c){Shb(Zee,a,d);Shb($ee,a,e)}else{Shb($ee,a,d);Shb(Zee,a,e)}} +function Cwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} +function Dwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} +function Nic(a,b,c,d){var e,f,g;e=false;if(fjc(a.f,c,d)){ijc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} +function QHc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=BD(fkb(b),10);h=BD(V_b(f,d).Xb(0),11);a.d[h.p]=g++;c.c[c.c.length]=h}return g} +function hBc(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=ED(pBc(a,d));f=ED(pBc(b,d));return $wnd.Math.max((uCb(e),e),(uCb(f),f))} +function zZc(a,b,c){var d,e,f,g;d=c/a.c.length;e=0;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),200);w$c(f,f.f+d*e);t$c(f,b,d);++e}} +function hnc(a,b,c){var d,e,f,g;e=BD(Ohb(a.b,c),177);d=0;for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),113);e[f.d.p]&&++d}return d} +function mzd(a){var b,c;b=BD(Ajd(a.a,4),126);if(b!=null){c=KC($3,hve,415,b.length,0,1);$fb(b,0,c,0,b.length);return c}else{return jzd}} +function Cz(){var a;if(xz!=0){a=sz();if(a-yz>2000){yz=a;zz=$wnd.setTimeout(Iz,10)}}if(xz++==0){Lz((Kz(),Jz));return true}return false} +function wCc(a,b){var c,d,e;for(d=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=c.d.i;if(e.c==b){return false}}return true} +function Ek(b,c){var d,e;if(JD(c,245)){e=BD(c,245);try{d=b.vd(e);return d==0}catch(a){a=ubb(a);if(!JD(a,205))throw vbb(a)}}return false} +function Xz(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function BDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))>0} +function DDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))<0} +function CDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))<=0} +function ydb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;c<b.length;c++){if(!b[c]||b[c]==''){continue}d+=a+b[c]}return d} +function zfb(a,b,c){var d,e,f,g;f=b+c;ACb(b,f,a.length);g='';for(e=b;e<f;){d=$wnd.Math.min(e+10000,f);g+=vfb(a.slice(e,d));e=d}return g} +function N9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} +function Q9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} +function R9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} +function ted(a,b){var c,d,e;if(a.c){cld(a.c,b)}else{c=b-red(a);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),157);ted(d,red(d)+c)}}} +function sed(a,b){var c,d,e;if(a.c){ald(a.c,b)}else{c=b-qed(a);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),157);sed(d,qed(d)+c)}}} +function t6d(a,b){var c,d,e,f;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=d.Pb();f=s6d(a,BD(c,56));!!f&&(e.c[e.c.length]=f,true)}return e} +function LAd(a,b){var c,d,e;a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){JAd(a,c);return c.dd()}else{return null}} +function rde(a){var b,c;c=sde(a);b=null;while(a.c==2){nde(a);if(!b){b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,c);c=b}c.$l(sde(a))}return c} +function Wpd(a){var b,c,d;d=null;b=Vte in a.a;c=!b;if(c){throw vbb(new cqd('Every element must have an id.'))}d=Vpd(aC(a,Vte));return d} +function jid(a){var b,c,d;d=a.Zg();if(!d){b=0;for(c=a.eh();c;c=c.eh()){if(++b>Wje){return c.fh()}d=c.Zg();if(!!d||c==a){break}}}return d} +function fvd(a){evd();if(JD(a,156)){return BD(Ohb(cvd,hK),288).vg(a)}if(Mhb(cvd,rb(a))){return BD(Ohb(cvd,rb(a)),288).vg(a)}return null} +function fZd(a){if(efb(kse,a)){return Bcb(),Acb}else if(efb(lse,a)){return Bcb(),zcb}else{throw vbb(new Wdb('Expecting true or false'))}} +function uDc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw vbb(new Wdb('Input edge is not connected to the input port.'))} +function Igb(a,b){if(a.e>b.e){return 1}if(a.e<b.e){return -1}if(a.d>b.d){return a.e}if(a.d<b.d){return -b.e}return a.e*whb(a.a,b.a,a.d)} +function Zcb(a){if(a>=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function Ue(a,b){var c;if(PD(b)===PD(a)){return true}if(!JD(b,21)){return false}c=BD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)} +function ekb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;mkb(c<e);if(c>=f){hkb(a,b);return -1}else{ikb(a,b);return 1}} +function lA(a,b){var c,d;c=(BCb(b,a.length),a.charCodeAt(b));d=b+1;while(d<a.length&&(BCb(d,a.length),a.charCodeAt(d)==c)){++d}return d-b} +function sJb(a){switch(a.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return true;default:return false;}} +function bC(f,a){var b=f.a;var c;a=String(a);b.hasOwnProperty(a)&&(c=b[a]);var d=(rC(),qC)[typeof c];var e=d?d(c):xC(typeof c);return e} +function b3c(a,b){if(a.a<0){throw vbb(new Zdb('Did not call before(...) or after(...) before calling add(...).'))}i3c(a,a.a,b);return a} +function VOc(a,b,c,d){var e,f;if(b.c.length==0){return}e=ROc(c,d);f=QOc(b);MAb(VAb(new YAb(null,new Kub(f,1)),new cPc),new gPc(a,c,e,d))} +function Cjd(a,b,c){var d;if((a.Db&b)!=0){if(c==null){Bjd(a,b)}else{d=zjd(a,b);d==-1?(a.Eb=c):NC(CD(a.Eb),d,c)}}else c!=null&&vjd(a,b,c)} +function yjd(a){var b,c;if((a.Db&32)==0){c=(b=BD(Ajd(a,16),26),aLd(!b?a.zh():b)-aLd(a.zh()));c!=0&&Cjd(a,32,KC(SI,Uhe,1,c,5,1))}return a} +function W1d(a){var b;a.b||X1d(a,(b=h1d(a.e,a.a),!b||!dfb(lse,AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'qualified'))));return a.c} +function dTd(a,b,c){var d,e,f;d=BD(qud(QSd(a.a),b),87);f=(e=d.c,e?e:(jGd(),YFd));(f.kh()?xid(a.b,BD(f,49)):f)==c?KQd(d):NQd(d,c);return f} +function fCb(a,b){(!b&&console.groupCollapsed!=null?console.groupCollapsed:console.group!=null?console.group:console.log).call(console,a)} +function NNb(a,b,c,d){d==a?(BD(c.b,65),BD(c.b,65),BD(d.b,65),BD(d.b,65).c.b):(BD(c.b,65),BD(c.b,65),BD(d.b,65),BD(d.b,65).c.b);KNb(d,b,a)} +function EOb(a){var b,c,d;b=0;for(c=new olb(a.g);c.a<c.c.c.length;){BD(mlb(c),562);++b}d=new ENb(a.g,Edb(a.a),a.c);ELb(d);a.g=d.b;a.d=d.a} +function ymc(a,b,c){b.b=$wnd.Math.max(b.b,-c.a);b.c=$wnd.Math.max(b.c,c.a-a.a);b.d=$wnd.Math.max(b.d,-c.b);b.a=$wnd.Math.max(b.a,c.b-a.b)} +function MIc(a,b){if(a.e<b.e){return -1}else if(a.e>b.e){return 1}else if(a.f<b.f){return -1}else if(a.f>b.f){return 1}return tb(a)-tb(b)} +function efb(a,b){uCb(a);if(b==null){return false}if(dfb(a,b)){return true}return a.length==b.length&&dfb(a.toLowerCase(),b.toLowerCase())} +function x6d(a,b){var c,d,e,f;for(d=0,e=b.gc();d<e;++d){c=b.il(d);if(JD(c,99)&&(BD(c,18).Bb&ote)!=0){f=b.jl(d);f!=null&&s6d(a,BD(f,56))}}} +function p1c(a,b,c){var d,e,f;for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),221);d=new hDb(BD(Ohb(a.a,e.b),65));Ekb(b.a,d);p1c(a,d,e)}} +function Aeb(a){var b,c;if(ybb(a,-129)>0&&ybb(a,128)<0){b=Tbb(a)+128;c=(Ceb(),Beb)[b];!c&&(c=Beb[b]=new teb(a));return c}return new teb(a)} +function _0d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} +function a1d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} +function FMc(a,b){wMc();var c,d;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.d.i==b||c.c.i==b){return c}}return null} +function HUb(a,b,c){this.c=a;this.f=new Rkb;this.e=new d7c;this.j=new IVb;this.n=new IVb;this.b=b;this.g=new J6c(b.c,b.d,b.b,b.a);this.a=c} +function gVb(a){var b,c,d,e;this.a=new zsb;this.d=new Tqb;this.e=0;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!this.f&&(this.f=b);eVb(this,b)}} +function Xgb(a){Hgb();if(a.length==0){this.e=0;this.d=1;this.a=OC(GC(WD,1),oje,25,15,[0])}else{this.e=1;this.d=a.length;this.a=a;Jgb(this)}} +function mIb(a,b,c){oHb.call(this);this.a=KC(oN,ile,212,(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])).length,0,1);this.b=a;this.d=b;this.c=c} +function Kjc(a){this.d=new Rkb;this.e=new $rb;this.c=KC(WD,oje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=a} +function Vbc(a){var b,c,d,e,f,g;g=BD(vNb(a,(wtc(),$sc)),11);yNb(g,qtc,a.i.n.b);b=k_b(a.e);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];RZb(c,g)}} +function Wbc(a){var b,c,d,e,f,g;c=BD(vNb(a,(wtc(),$sc)),11);yNb(c,qtc,a.i.n.b);b=k_b(a.g);for(e=b,f=0,g=e.length;f<g;++f){d=e[f];QZb(d,c)}} +function vcc(a){var b,c;if(wNb(a.d.i,(Nyc(),Nxc))){b=BD(vNb(a.c.i,Nxc),19);c=BD(vNb(a.d.i,Nxc),19);return beb(b.a,c.a)>0}else{return false}} +function q2c(a){var b;if(PD(hkd(a,(Y9c(),J8c)))===PD((hbd(),fbd))){if(!Xod(a)){jkd(a,J8c,gbd)}else{b=BD(hkd(Xod(a),J8c),334);jkd(a,J8c,b)}}} +function ijc(a,b,c){var d,e;bIc(a.e,b,c,(Ucd(),Tcd));bIc(a.i,b,c,zcd);if(a.a){e=BD(vNb(b,(wtc(),$sc)),11);d=BD(vNb(c,$sc),11);cIc(a.g,e,d)}} +function OEc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new $Ec(a,b);if(c){a.a[d][f]=new FEc(b);e=BD(vNb(b,(wtc(),Psc)),10);!!e&&Rc(a.d,e,b)}} +function TPb(a,b){var c,d,e;Ekb(PPb,a);b.Fc(a);c=BD(Ohb(OPb,a),21);if(c){for(e=c.Kc();e.Ob();){d=BD(e.Pb(),33);Jkb(PPb,d,0)!=-1||TPb(d,b)}}} +function tyb(a,b,c){var d;(jyb?(ryb(a),true):kyb?($xb(),true):nyb?($xb(),true):myb&&($xb(),false))&&(d=new iyb(b),d.b=c,pyb(a,d),undefined)} +function xKb(a,b){var c;c=!a.A.Hc((tdd(),sdd))||a.q==(dcd(),$bd);a.u.Hc((rcd(),ncd))?c?vKb(a,b):zKb(a,b):a.u.Hc(pcd)&&(c?wKb(a,b):AKb(a,b))} +function b0d(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,JD(d,97)?BD(d,97).Jg():null);if(xlb(b,c)){Cjd(a.a,4,c);return}}Cjd(a.a,4,BD(b,126))} +function dYb(a,b,c){return new J6c($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} +function k4b(a,b){var c,d;c=beb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=beb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return beb(b.a.d.p,a.a.d.p)} +function _Dc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Kdb(d,e)}} +function HFb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new olb(LFb(b));e.a<e.c.c.length;){d=BD(mlb(e),213);f=xFb(d,b);HFb(a,f,c)}} +function umc(a,b,c){var d;d=c[a.g][b];switch(a.g){case 1:case 3:return new f7c(0,d);case 2:case 4:return new f7c(d,0);default:return null;}} +function r2c(b,c,d){var e,f;f=BD(hgd(c.f),209);try{f.Ze(b,d);igd(c.f,f)}catch(a){a=ubb(a);if(JD(a,102)){e=a;throw vbb(e)}else throw vbb(a)}} +function Vqd(a,b,c){var d,e,f,g,h,i;d=null;h=k4c(n4c(),b);f=null;if(h){e=null;i=o5c(h,c);g=null;i!=null&&(g=a.Ye(h,i));e=g;f=e}d=f;return d} +function TTd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,13,(g=b.c,g?g:(jGd(),YFd)),(f=c.c,f?f:(jGd(),YFd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d} +function UEd(a,b,c,d){var e;e=a.length;if(b>=e)return e;for(b=b>0?b:0;b<e;b++){if(_Ed((BCb(b,a.length),a.charCodeAt(b)),c,d))break}return b} +function Qkb(a,b){var c,d;d=a.c.length;b.length<d&&(b=eCb(new Array(d),b));for(c=0;c<d;++c){NC(b,c,a.c[c])}b.length>d&&NC(b,d,null);return b} +function _lb(a,b){var c,d;d=a.a.length;b.length<d&&(b=eCb(new Array(d),b));for(c=0;c<d;++c){NC(b,c,a.a[c])}b.length>d&&NC(b,d,null);return b} +function Xrb(a,b,c){var d,e,f;e=BD(Ohb(a.e,b),387);if(!e){d=new lsb(a,b,c);Rhb(a.e,b,d);isb(d);return null}else{f=ijb(e,c);Yrb(a,e);return f}} +function P9d(a){var b;if(a==null)return null;b=ide(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid hexBinary value: '"+a+"'"))}return b} +function ghb(a){Hgb();if(ybb(a,0)<0){if(ybb(a,-1)!=0){return new Wgb(-1,Jbb(a))}return Bgb}else return ybb(a,10)<=0?Dgb[Tbb(a)]:new Wgb(1,a)} +function wJb(){qJb();return OC(GC(DN,1),Kie,159,0,[nJb,mJb,oJb,eJb,dJb,fJb,iJb,hJb,gJb,lJb,kJb,jJb,bJb,aJb,cJb,$Ib,ZIb,_Ib,XIb,WIb,YIb,pJb])} +function vjc(a){var b;this.d=new Rkb;this.j=new d7c;this.g=new d7c;b=a.g.b;this.f=BD(vNb(Q_b(b),(Nyc(),Lwc)),103);this.e=Edb(ED(c_b(b,ryc)))} +function Pjc(a){this.b=new Rkb;this.e=new Rkb;this.d=a;this.a=!WAb(JAb(new YAb(null,new Lub(new b1b(a.b))),new Xxb(new Qjc))).sd((EAb(),DAb))} +function N5c(){N5c=ccb;L5c=new O5c('PARENTS',0);K5c=new O5c('NODES',1);I5c=new O5c('EDGES',2);M5c=new O5c('PORTS',3);J5c=new O5c('LABELS',4)} +function Tbd(){Tbd=ccb;Qbd=new Ubd('DISTRIBUTED',0);Sbd=new Ubd('JUSTIFIED',1);Obd=new Ubd('BEGIN',2);Pbd=new Ubd(gle,3);Rbd=new Ubd('END',4)} +function UMd(a){var b;b=a.yi(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} +function cYb(a){switch(a.g){case 1:return ead(),dad;case 4:return ead(),aad;case 2:return ead(),bad;case 3:return ead(),_9c;}return ead(),cad} +function kA(a,b,c){var d;d=c.q.getFullYear()-nje+nje;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:EA(a,d%100,2);break;default:EA(a,d,b);}} +function Jsb(a,b){var c,d;wCb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c<b;++c){d=d.a}}return new $sb(a,b,d)} +function MEb(){MEb=ccb;LEb=new NEb('NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST',0);KEb=new NEb('CORNER_CASES_THAN_SINGLE_SIDE_LAST',1)} +function h4b(a){var b,c,d,e;d=c4b(a);Okb(d,a4b);e=a.d;e.c=KC(SI,Uhe,1,0,5,1);for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),456);Gkb(e,b.b)}} +function gkd(a){var b,c,d;d=(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o);for(c=d.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),42);b.dd()}return FAd(d)} +function N5b(a){var b;if(!ecd(BD(vNb(a,(Nyc(),Vxc)),98))){return}b=a.b;O5b((tCb(0,b.c.length),BD(b.c[0],29)));O5b(BD(Ikb(b,b.c.length-1),29))} +function Roc(a,b){var c,d,e,f;c=0;for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=d.o.a+d.d.c+d.d.b+a.j;c=$wnd.Math.max(c,f)}return c} +function XEd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BCb(c,a.length),a.charCodeAt(c));b>=64&&b<128&&(e=Mbb(e,Nbb(1,b-64)))}return e} +function c_b(a,b){var c,d;d=null;if(wNb(a,(Y9c(),O9c))){c=BD(vNb(a,O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!Q_b(a)&&(d=vNb(Q_b(a),b));return d} +function oQc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(j0b(),h0b)||d==d0b){return}c=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(c)&&Rhb(a.k,b,BD(Rr(c),17))} +function mid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();return c<0?(e=a.Yg(d),e>=0?a.lh(e):tid(a,d)):c<0?tid(a,d):BD(d,66).Nj().Sj(a,a.yh(),c)} +function Ksd(a){var b;if(JD(a.a,4)){b=fvd(a.a);if(b==null){throw vbb(new Zdb(mse+a.b+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return b}else{return a.a}} +function L9d(a){var b;if(a==null)return null;b=bde(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid base64Binary value: '"+a+"'"))}return b} +function Dyd(b){var c;try{c=b.i.Xb(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} +function Zyd(b){var c;try{c=b.c.ki(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} +function CPb(){CPb=ccb;BPb=(Y9c(),K9c);vPb=G8c;qPb=r8c;wPb=f9c;zPb=(fFb(),bFb);yPb=_Eb;APb=dFb;xPb=$Eb;sPb=(nPb(),jPb);rPb=iPb;tPb=lPb;uPb=mPb} +function NWb(a){LWb();this.c=new Rkb;this.d=a;switch(a.g){case 0:case 2:this.a=tmb(KWb);this.b=Pje;break;case 3:case 1:this.a=KWb;this.b=Qje;}} +function ued(a,b,c){var d,e;if(a.c){dld(a.c,a.c.i+b);eld(a.c,a.c.j+c)}else{for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),157);ued(d,b,c)}}} +function KEd(a,b){var c,d;if(a.j.length!=b.j.length)return false;for(c=0,d=a.j.length;c<d;c++){if(!dfb(a.j[c],b.j[c]))return false}return true} +function gA(a,b,c){var d;if(b.a.length>0){Ekb(a.b,new WA(b.a,c));d=b.a.length;0<d?(b.a=b.a.substr(0,0)):0>d&&(b.a+=yfb(KC(TD,$ie,25,-d,15,1)))}} +function JKb(a,b){var c,d,e;c=a.o;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.a=DKb(d,c.a);d.e.b=c.b*Edb(ED(d.b.We(BKb)))}} +function S5b(a,b){var c,d,e,f;e=a.k;c=Edb(ED(vNb(a,(wtc(),htc))));f=b.k;d=Edb(ED(vNb(b,htc)));return f!=(j0b(),e0b)?-1:e!=e0b?1:c==d?0:c<d?-1:1} +function B$c(a,b){var c,d;c=BD(BD(Ohb(a.g,b.a),46).a,65);d=BD(BD(Ohb(a.g,b.b),46).a,65);return S6c(b.a,b.b)-S6c(b.a,E6c(c.b))-S6c(b.b,E6c(d.b))} +function aZb(a,b){var c;c=BD(vNb(a,(Nyc(),jxc)),74);if(Lq(b,ZYb)){if(!c){c=new s7c;yNb(a,jxc,c)}else{Osb(c)}}else !!c&&yNb(a,jxc,null);return c} +function a0b(a){var b;b=new Ufb;b.a+='n';a.k!=(j0b(),h0b)&&Qfb(Qfb((b.a+='(',b),Zr(a.k).toLowerCase()),')');Qfb((b.a+='_',b),P_b(a));return b.a} +function Kdc(a,b){Odd(b,'Self-Loop post-processing',1);MAb(JAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new Qdc),new Sdc),new Udc),new Wdc);Qdd(b)} +function kid(a,b,c,d){var e;if(c>=0){return a.hh(b,c,d)}else{!!a.eh()&&(d=(e=a.Vg(),e>=0?a.Qg(d):a.eh().ih(a,-1-e,null,d)));return a.Sg(b,c,d)}} +function zld(a,b){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);return;}$kd(a,b)} +function Ut(b,c){var d;d=b.Zc(c);try{return d.Pb()}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't get element "+c))}else throw vbb(a)}} +function Tgb(a,b){this.e=a;if(b<Zje){this.d=1;this.a=OC(GC(WD,1),oje,25,15,[b|0])}else{this.d=2;this.a=OC(GC(WD,1),oje,25,15,[b%Zje|0,b/Zje|0])}} +function omb(a,b){mmb();var c,d,e,f;c=a;f=b;if(JD(a,21)&&!JD(b,21)){c=b;f=a}for(e=c.Kc();e.Ob();){d=e.Pb();if(f.Hc(d)){return false}}return true} +function Txd(a,b,c){var d,e,f,g;d=a.Xc(b);if(d!=-1){if(a.ej()){f=a.fj();g=tud(a,d);e=a.Zi(4,g,null,d,f);!c?(c=e):c.Ei(e)}else{tud(a,d)}}return c} +function uwd(a,b,c){var d,e,f,g;d=a.Xc(b);if(d!=-1){if(a.ej()){f=a.fj();g=Evd(a,d);e=a.Zi(4,g,null,d,f);!c?(c=e):c.Ei(e)}else{Evd(a,d)}}return c} +function PJb(a,b){var c;c=BD(Mpb(a.b,b),124).n;switch(b.g){case 1:a.t>=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}} +function RMb(){RMb=ccb;OMb=new SMb(xle,0);NMb=new SMb(yle,1);PMb=new SMb(zle,2);QMb=new SMb(Ale,3);OMb.a=false;NMb.a=true;PMb.a=false;QMb.a=true} +function ROb(){ROb=ccb;OOb=new SOb(xle,0);NOb=new SOb(yle,1);POb=new SOb(zle,2);QOb=new SOb(Ale,3);OOb.a=false;NOb.a=true;POb.a=false;QOb.a=true} +function dac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i;b.k==(j0b(),g0b)&&a.b.Fc(b)}while(b.k==(j0b(),g0b));a.b=Su(a.b)} +function CDc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new Tkb(d));for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),10);b.p=GDc(b).a}mmb();Okb(a.p,new PDc)} +function eVc(a){var b,c,d,e;d=0;e=gVc(a);if(e.c.length==0){return 1}else{for(c=new olb(e);c.a<c.c.c.length;){b=BD(mlb(c),33);d+=eVc(b)}}return d} +function JJb(a,b){var c,d,e;e=0;d=BD(BD(Qc(a.r,b),21),84).Kc();while(d.Ob()){c=BD(d.Pb(),111);e+=c.d.b+c.b.rf().a+c.d.c;d.Ob()&&(e+=a.w)}return e} +function RKb(a,b){var c,d,e;e=0;d=BD(BD(Qc(a.r,b),21),84).Kc();while(d.Ob()){c=BD(d.Pb(),111);e+=c.d.d+c.b.rf().b+c.d.a;d.Ob()&&(e+=a.w)}return e} +function SOc(a,b,c,d){if(b.a<d.a){return true}else if(b.a==d.a){if(b.b<d.b){return true}else if(b.b==d.b){if(a.b>c.b){return true}}}return false} +function AD(a,b){if(ND(a)){return !!zD[b]}else if(a.hm){return !!a.hm[b]}else if(LD(a)){return !!yD[b]}else if(KD(a)){return !!xD[b]}return false} +function jkd(a,b,c){c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c));return a} +function jKb(a,b,c,d){var e,f;f=b.Xe((Y9c(),W8c))?BD(b.We(W8c),21):a.j;e=uJb(f);if(e==(qJb(),pJb)){return}if(c&&!sJb(e)){return}UHb(lKb(a,e,d),b)} +function fid(a,b,c,d){var e,f,g;f=XKd(a.Tg(),b);e=b-a.Ah();return e<0?(g=a.Yg(f),g>=0?a._g(g,c,true):sid(a,f,c)):BD(f,66).Nj().Pj(a,a.yh(),e,c,d)} +function u6d(a,b,c,d){var e,f,g;if(c.mh(b)){Q6d();if(YId(b)){e=BD(c.ah(b),153);x6d(a,e)}else{f=(g=b,!g?null:BD(d,49).xh(g));!!f&&v6d(c.ah(b),f)}}} +function H3b(a){switch(a.g){case 1:return vLb(),uLb;case 3:return vLb(),rLb;case 2:return vLb(),tLb;case 4:return vLb(),sLb;default:return null;}} +function kCb(a){switch(typeof(a)){case Mhe:return LCb(a);case Lhe:return QD(a);case Khe:return Bcb(),a?1231:1237;default:return a==null?0:FCb(a);}} +function Gic(a,b,c){if(a.e){switch(a.b){case 1:oic(a.c,b,c);break;case 0:pic(a.c,b,c);}}else{mic(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e} +function lHc(a){var b,c;if(a==null){return null}c=KC(OQ,nie,193,a.length,0,2);for(b=0;b<c.length;b++){c[b]=BD(ulb(a[b],a[b].length),193)}return c} +function d4d(a){var b;if(b4d(a)){a4d(a);if(a.Lk()){b=b3d(a.e,a.b,a.c,a.a,a.j);a.j=b}a.g=a.a;++a.a;++a.c;a.i=0;return a.j}else{throw vbb(new utb)}} +function fMb(a,b){var c,d,e,f;f=a.o;c=a.p;f<c?(f*=f):(c*=c);d=f+c;f=b.o;c=b.p;f<c?(f*=f):(c*=c);e=f+c;if(d<e){return -1}if(d==e){return 0}return 1} +function HLd(a,b){var c,d,e;e=rud(a,b);if(e>=0)return e;if(a.Fk()){for(d=0;d<a.i;++d){c=a.Gk(BD(a.g[d],56));if(PD(c)===PD(b)){return d}}}return -1} +function Gtd(a,b,c){var d,e;e=a.gc();if(b>=e)throw vbb(new Cyd(b,e));if(a.hi()){d=a.Xc(c);if(d>=0&&d!=b){throw vbb(new Wdb(kue))}}return a.mi(b,c)} +function gx(a,b){this.a=BD(Qb(a),245);this.b=BD(Qb(b),245);if(a.vd(b)>0||a==(Lk(),Kk)||b==(_k(),$k)){throw vbb(new Wdb('Invalid range: '+nx(a,b)))}} +function mYb(a){var b,c;this.b=new Rkb;this.c=a;this.a=false;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),10);this.a=this.a|b.k==(j0b(),h0b)}} +function GFb(a,b){var c,d,e;c=nGb(new pGb,a);for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),121);AFb(DFb(CFb(EFb(BFb(new FFb,0),0),c),d))}return c} +function Nac(a,b,c){var d,e,f;for(e=new Sr(ur((b?R_b(a):U_b(a)).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);f=b?d.c.i:d.d.i;f.k==(j0b(),f0b)&&$_b(f,c)}} +function Izc(){Izc=ccb;Gzc=new Kzc(ane,0);Hzc=new Kzc('PORT_POSITION',1);Fzc=new Kzc('NODE_SIZE_WHERE_SPACE_PERMITS',2);Ezc=new Kzc('NODE_SIZE',3)} +function F7c(){F7c=ccb;z7c=new G7c('AUTOMATIC',0);C7c=new G7c(jle,1);D7c=new G7c(kle,2);E7c=new G7c('TOP',3);A7c=new G7c(mle,4);B7c=new G7c(gle,5)} +function Hhb(a,b,c,d){Dhb();var e,f;e=0;for(f=0;f<c;f++){e=wbb(Ibb(xbb(b[f],Yje),xbb(d,Yje)),xbb(Tbb(e),Yje));a[f]=Tbb(e);e=Pbb(e,32)}return Tbb(e)} +function zHb(a,b,c){var d,e;e=0;for(d=0;d<rHb;d++){e=$wnd.Math.max(e,pHb(a.a[b.g][d],c))}b==(gHb(),eHb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.b));return e} +function Bub(a,b){var c,d;lCb(b>0);if((b&-b)==b){return QD(b*Cub(a,31)*4.6566128730773926E-10)}do{c=Cub(a,31);d=c%b}while(c-d+(b-1)<0);return QD(d)} +function LCb(a){JCb();var b,c,d;c=':'+a;d=ICb[c];if(d!=null){return QD((uCb(d),d))}d=GCb[c];b=d==null?KCb(a):QD((uCb(d),d));MCb();ICb[c]=b;return b} +function qZb(a,b,c){Odd(c,'Compound graph preprocessor',1);a.a=new Hp;vZb(a,b,null);pZb(a,b);uZb(a);yNb(b,(wtc(),zsc),a.a);a.a=null;Uhb(a.b);Qdd(c)} +function X$b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} +function tkc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Vjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} +function ukc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Wjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} +function tXc(a){switch(a.g){case 0:return null;case 1:return new $Xc;case 2:return new QXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function OZc(a,b,c){var d,e;FZc(a,b-a.s,c-a.t);for(e=new olb(a.n);e.a<e.c.c.length;){d=BD(mlb(e),211);SZc(d,d.e+b-a.s);TZc(d,d.f+c-a.t)}a.s=b;a.t=c} +function JFb(a){var b,c,d,e,f;c=0;for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),121);d.d=c++}b=IFb(a);f=null;b.c.length>1&&(f=GFb(a,b));return f} +function dmd(a){var b;if(!!a.f&&a.f.kh()){b=BD(a.f,49);a.f=BD(xid(a,b),82);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.f))}return a.f} +function emd(a){var b;if(!!a.i&&a.i.kh()){b=BD(a.i,49);a.i=BD(xid(a,b),82);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,7,b,a.i))}return a.i} +function zUd(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=BD(xid(a,b),18);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,21,b,a.b))}return a.b} +function uAd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Sh();BAd(a,a.f+1);e=(d&Ohe)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.uj());c.Fc(b);++a.f}} +function m3d(a,b,c){var d;if(b.Kj()){return false}else if(b.Zj()!=-2){d=b.zj();return d==null?c==null:pb(d,c)}else return b.Hj()==a.e.Tg()&&c==null} +function wo(){var a;Xj(16,Hie);a=Kp(16);this.b=KC(GF,Gie,317,a,0,1);this.c=KC(GF,Gie,317,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0} +function b0b(a){n_b.call(this);this.k=(j0b(),h0b);this.j=(Xj(6,Jie),new Skb(6));this.b=(Xj(2,Jie),new Skb(2));this.d=new L_b;this.f=new s0b;this.a=a} +function Scc(a){var b,c;if(a.c.length<=1){return}b=Pcc(a,(Ucd(),Rcd));Rcc(a,BD(b.a,19).a,BD(b.b,19).a);c=Pcc(a,Tcd);Rcc(a,BD(c.a,19).a,BD(c.b,19).a)} +function Vzc(){Vzc=ccb;Uzc=new Xzc('SIMPLE',0);Rzc=new Xzc(Tne,1);Szc=new Xzc('LINEAR_SEGMENTS',2);Qzc=new Xzc('BRANDES_KOEPF',3);Tzc=new Xzc(Aqe,4)} +function XDc(a,b,c){if(!ecd(BD(vNb(b,(Nyc(),Vxc)),98))){WDc(a,b,Y_b(b,c));WDc(a,b,Y_b(b,(Ucd(),Rcd)));WDc(a,b,Y_b(b,Acd));mmb();Okb(b.j,new jEc(a))}} +function HVc(a,b,c,d){var e,f,g;e=d?BD(Qc(a.a,b),21):BD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=BD(g.Pb(),33);if(BVc(a,c,f)){return true}}return false} +function FMd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} +function QTd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} +function FDc(a){var b,c,d;b=0;for(d=new olb(a.c.a);d.a<d.c.c.length;){c=BD(mlb(d),10);b+=sr(new Sr(ur(U_b(c).a.Kc(),new Sq)))}return b/a.c.a.c.length} +function UPc(a){var b,c;a.c||XPc(a);c=new s7c;b=new olb(a.a);mlb(b);while(b.a<b.c.c.length){Dsb(c,BD(mlb(b),407).a)}sCb(c.b!=0);Nsb(c,c.c.b);return c} +function J0c(){J0c=ccb;I0c=(A0c(),z0c);G0c=new q0b(8);new Osd((Y9c(),f9c),G0c);new Osd(T9c,8);H0c=x0c;E0c=n0c;F0c=o0c;D0c=new Osd(y8c,(Bcb(),false))} +function uld(a,b,c,d){switch(b){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),a.e;case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),a.d;}return Xkd(a,b,c,d)} +function JQd(a){var b;if(!!a.a&&a.a.kh()){b=BD(a.a,49);a.a=BD(xid(a,b),138);a.a!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,5,b,a.a))}return a.a} +function yde(a){if(a<48)return -1;if(a>102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} +function Wj(a,b){if(a==null){throw vbb(new Heb('null key in entry: null='+b))}else if(b==null){throw vbb(new Heb('null value in entry: '+a+'=null'))}} +function kr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(PD(c)===PD(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()} +function jIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[pHb(a.a[0],b),pHb(a.a[1],b),pHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function kIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[qHb(a.a[0],b),qHb(a.a[1],b),qHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function mqc(){mqc=ccb;iqc=new oqc('GREEDY',0);hqc=new oqc(Une,1);kqc=new oqc(Tne,2);lqc=new oqc('MODEL_ORDER',3);jqc=new oqc('GREEDY_MODEL_ORDER',4)} +function iUc(a,b){var c,d,e;a.b[b.g]=1;for(d=Jsb(b.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);e=c.c;a.b[e.g]==1?Dsb(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):iUc(a,e)}} +function V9b(a,b){var c,d,e;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);c.c==c.f?K9b(a,c,c.c):L9b(a,c)||(e.c[e.c.length]=c,true)}return e} +function IZc(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new olb(a.n);g.a<g.c.c.length;){f=BD(mlb(g),211);RZc(f,h,d,e);++e}} +function tEb(a){var b,c,d;zwb(a.b.a);a.a=KC(PM,Uhe,57,a.c.c.a.b.c.length,0,1);b=0;for(d=new olb(a.c.c.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);c.f=b++}} +function RVb(a){var b,c,d;zwb(a.b.a);a.a=KC(IP,Uhe,81,a.c.a.a.b.c.length,0,1);b=0;for(d=new olb(a.c.a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);c.i=b++}} +function P1c(a,b,c){var d;Odd(c,'Shrinking tree compaction',1);if(Ccb(DD(vNb(b,(XNb(),VNb))))){N1c(a,b.f);INb(b.f,(d=b.c,d))}else{INb(b.f,b.c)}Qdd(c)} +function mr(a){var b;b=gr(a);if(!Qr(a)){throw vbb(new qcb('position (0) must be less than the number of elements that remained ('+b+')'))}return Rr(a)} +function hNb(b,c,d){var e;try{return YMb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function iNb(b,c,d){var e;try{return ZMb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function jNb(b,c,d){var e;try{return $Mb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function s5b(a){switch(a.g){case 1:return Ucd(),Tcd;case 4:return Ucd(),Acd;case 3:return Ucd(),zcd;case 2:return Ucd(),Rcd;default:return Ucd(),Scd;}} +function cjc(a,b,c){if(b.k==(j0b(),h0b)&&c.k==g0b){a.d=_ic(b,(Ucd(),Rcd));a.b=_ic(b,Acd)}if(c.k==h0b&&b.k==g0b){a.d=_ic(c,(Ucd(),Acd));a.b=_ic(c,Rcd)}} +function gjc(a,b){var c,d,e;e=V_b(a,b);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),11);if(vNb(c,(wtc(),gtc))!=null||a1b(new b1b(c.b))){return true}}return false} +function QZc(a,b){dld(b,a.e+a.d+(a.c.c.length==0?0:a.b));eld(b,a.f);a.a=$wnd.Math.max(a.a,b.f);a.d+=b.g+(a.c.c.length==0?0:a.b);Ekb(a.c,b);return true} +function XZc(a,b,c){var d,e,f,g;g=0;d=c/a.a.c.length;for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),187);OZc(e,e.s,e.t+g*d);IZc(e,a.d-e.r+b,d);++g}} +function H4b(a){var b,c,d,e,f;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);b=0;for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);e.p=b++}}} +function r6c(a,b){var c,d,e,f,g,h;e=b.length-1;g=0;h=0;for(d=0;d<=e;d++){f=b[d];c=k6c(e,d)*x6c(1-a,e-d)*x6c(a,d);g+=f.a*c;h+=f.b*c}return new f7c(g,h)} +function jud(a,b){var c,d,e,f,g;c=b.gc();a.qi(a.i+c);f=b.Kc();g=a.i;a.i+=c;for(d=g;d<a.i;++d){e=f.Pb();mud(a,d,a.oi(d,e));a.bi(d,e);a.ci()}return c!=0} +function twd(a,b,c){var d,e,f;if(a.ej()){d=a.Vi();f=a.fj();++a.j;a.Hi(d,a.oi(d,b));e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{Avd(a,a.Vi(),b)}return c} +function WOd(a,b,c){var d,e,f;d=BD(qud(VKd(a.a),b),87);f=(e=d.c,JD(e,88)?BD(e,26):(jGd(),_Fd));((f.Db&64)!=0?xid(a.b,f):f)==c?KQd(d):NQd(d,c);return f} +function Ewb(a,b,c,d,e,f,g,h){var i,j;if(!d){return}i=d.a[0];!!i&&Ewb(a,b,c,i,e,f,g,h);Fwb(a,c,d.d,e,f,g,h)&&b.Fc(d);j=d.a[1];!!j&&Ewb(a,b,c,j,e,f,g,h)} +function eAb(a,b){var c;if(!a.a){c=KC(UD,Vje,25,0,15,1);_ub(a.b.a,new iAb(c));c.sort(dcb(Ylb.prototype.te,Ylb,[]));a.a=new Avb(c,a.d)}return pvb(a.a,b)} +function YMb(b,c,d){try{return Bbb(_Mb(b,c,d),1)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function ZMb(b,c,d){try{return Bbb(_Mb(b,c,d),0)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function $Mb(b,c,d){try{return Bbb(_Mb(b,c,d),2)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function Nyd(b,c){if(b.g==-1){throw vbb(new Ydb)}b.mj();try{b.d._c(b.g,c);b.f=b.d.j}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} +function rJc(a,b,c){Odd(c,'Linear segments node placement',1);a.b=BD(vNb(b,(wtc(),otc)),304);sJc(a,b);nJc(a,b);kJc(a,b);qJc(a);a.a=null;a.b=null;Qdd(c)} +function Ee(a,b){var c,d,e,f;f=a.gc();b.length<f&&(b=eCb(new Array(f),b));e=b;d=a.Kc();for(c=0;c<f;++c){NC(e,c,d.Pb())}b.length>f&&NC(b,f,null);return b} +function Lu(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c<d;c++){if(a.Xb(c)==null){return c}}}else{for(c=0;c<d;c++){if(pb(b,a.Xb(c))){return c}}}return -1} +function Jd(a,b){var c,d,e;c=b.cd();e=b.dd();d=a.xc(c);if(!(PD(e)===PD(d)||e!=null&&pb(e,d))){return false}if(d==null&&!a._b(c)){return false}return true} +function YC(a,b){var c,d,e;if(b<=22){c=a.l&(1<<b)-1;d=e=0}else if(b<=44){c=a.l;d=a.m&(1<<b-22)-1;e=0}else{c=a.l;d=a.m;e=a.h&(1<<b-44)-1}return TC(c,d,e)} +function yKb(a,b){switch(b.g){case 1:return a.f.n.d+a.t;case 3:return a.f.n.a+a.t;case 2:return a.f.n.c+a.s;case 4:return a.f.n.b+a.s;default:return 0;}} +function aLb(a,b){var c,d;d=b.c;c=b.a;switch(a.b.g){case 0:c.d=a.e-d.a-d.d;break;case 1:c.d+=a.e;break;case 2:c.c=a.e-d.a-d.d;break;case 3:c.c=a.e+d.d;}} +function ZOb(a,b,c,d){var e,f;this.a=b;this.c=d;e=a.a;YOb(this,new f7c(-e.c,-e.d));P6c(this.b,c);f=d/2;b.a?b7c(this.b,0,f):b7c(this.b,f,0);Ekb(a.c,this)} +function iXc(){iXc=ccb;hXc=new kXc(ane,0);fXc=new kXc(Vne,1);gXc=new kXc('EDGE_LENGTH_BY_POSITION',2);eXc=new kXc('CROSSING_MINIMIZATION_BY_POSITION',3)} +function Wqd(a,b){var c,d;c=BD(oo(a.g,b),33);if(c){return c}d=BD(oo(a.j,b),118);if(d){return d}throw vbb(new cqd('Referenced shape does not exist: '+b))} +function rTb(a,b){if(a.c==b){return a.d}else if(a.d==b){return a.c}else{throw vbb(new Wdb("Node 'one' must be either source or target of edge 'edge'."))}} +function TMc(a,b){if(a.c.i==b){return a.d.i}else if(a.d.i==b){return a.c.i}else{throw vbb(new Wdb('Node '+b+' is neither source nor target of edge '+a))}} +function _lc(a,b){var c;switch(b.g){case 2:case 4:c=a.a;a.c.d.n.b<c.d.n.b&&(c=a.c);amc(a,b,(Ajc(),zjc),c);break;case 1:case 3:amc(a,b,(Ajc(),wjc),null);}} +function smc(a,b,c,d,e,f){var g,h,i,j,k;g=qmc(b,c,f);h=c==(Ucd(),Acd)||c==Tcd?-1:1;j=a[c.g];for(k=0;k<j.length;k++){i=j[k];i>0&&(i+=e);j[k]=g;g+=h*(i+d)}} +function Uoc(a){var b,c,d;d=a.f;a.n=KC(UD,Vje,25,d,15,1);a.d=KC(UD,Vje,25,d,15,1);for(b=0;b<d;b++){c=BD(Ikb(a.c.b,b),29);a.n[b]=Roc(a,c);a.d[b]=Qoc(a,c)}} +function zjd(a,b){var c,d,e;e=0;for(d=2;d<b;d<<=1){(a.Db&d)!=0&&++e}if(e==0){for(c=b<<=1;c<=128;c<<=1){if((a.Db&c)!=0){return 0}}return -1}else{return e}} +function s3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=null;c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];if(g.rl(d.ak())){!f&&(f=new yud);wtd(f,d)}}!!f&&Yxd(a,f)} +function H9d(a){var b,c,d;if(!a)return null;if(a.dc())return '';d=new Hfb;for(c=a.Kc();c.Ob();){b=c.Pb();Efb(d,GD(b));d.a+=' '}return lcb(d,d.a.length-1)} +function Ty(a,b,c){var d,e,f,g,h;Uy(a);for(e=(a.k==null&&(a.k=KC(_I,nie,78,0,0,1)),a.k),f=0,g=e.length;f<g;++f){d=e[f];Ty(d,b,'\t'+c)}h=a.f;!!h&&Ty(h,b,c)} +function LC(a,b){var c=new Array(b);var d;switch(a){case 14:case 15:d=0;break;case 16:d=false;break;default:return c;}for(var e=0;e<b;++e){c[e]=d}return c} +function PDb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b()}fad(a.d)?(d=a.a.c):(d=a.a.d);Hkb(d,new dEb(a));a.c.Me(a);QDb(a)} +function sRb(a){var b,c,d,e;for(c=new olb(a.e.c);c.a<c.c.c.length;){b=BD(mlb(c),282);for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),447);lRb(d)}cRb(b)}} +function a$c(a){var b,c,d,e,f;d=0;f=0;e=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);f=$wnd.Math.max(f,b.r);d+=b.d+(e>0?a.c:0);++e}a.b=d;a.d=f} +function BZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),200);d=$wnd.Math.max(d,f.e);e+=f.b+(c>0?a.g:0);++c}a.c=e;a.d=d} +function AHb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[zHb(a,(gHb(),dHb),b),zHb(a,eHb,b),zHb(a,fHb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function lNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,false,true)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function mNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,true,false)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function d5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),zbd))){b.Mc(zbd);b.Fc(Bbd)}else if(b.Hc(Bbd)){b.Mc(Bbd);b.Fc(zbd)}} +function e5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),Gbd))){b.Mc(Gbd);b.Fc(Ebd)}else if(b.Hc(Ebd)){b.Mc(Ebd);b.Fc(Gbd)}} +function udc(a,b,c){Odd(c,'Self-Loop ordering',1);MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new ydc),new Adc),new Cdc),new Edc),new Gdc(a));Qdd(c)} +function ikc(a,b,c,d){var e,f;for(e=b;e<a.c.length;e++){f=(tCb(e,a.c.length),BD(a.c[e],11));if(c.Mb(f)){d.c[d.c.length]=f}else{return e}}return a.c.length} +function Kmc(a,b,c,d){var e,f,g,h;a.a==null&&Nmc(a,b);g=b.b.j.c.length;f=c.d.p;h=d.d.p;e=h-1;e<0&&(e=g-1);return f<=e?a.a[e]-a.a[f]:a.a[g-1]-a.a[f]+a.a[e]} +function ehd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,33).Ag().i);for(c=new Fyd(BD(a.f,33).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b} +function fhd(a){var b,c;if(!a.e){a.e=Qu(Yod(BD(a.f,33)).i);for(c=new Fyd(Yod(BD(a.f,33)));c.e!=c.i.gc();){b=BD(Dyd(c),118);Ekb(a.e,new thd(b))}}return a.e} +function ahd(a){var b,c;if(!a.a){a.a=Qu(Vod(BD(a.f,33)).i);for(c=new Fyd(Vod(BD(a.f,33)));c.e!=c.i.gc();){b=BD(Dyd(c),33);Ekb(a.a,new hhd(a,b))}}return a.a} +function dKd(b){var c;if(!b.C&&(b.D!=null||b.B!=null)){c=eKd(b);if(c){b.yk(c)}else{try{b.yk(null)}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}}return b.C} +function GJb(a){switch(a.q.g){case 5:DJb(a,(Ucd(),Acd));DJb(a,Rcd);break;case 4:EJb(a,(Ucd(),Acd));EJb(a,Rcd);break;default:FJb(a,(Ucd(),Acd));FJb(a,Rcd);}} +function PKb(a){switch(a.q.g){case 5:MKb(a,(Ucd(),zcd));MKb(a,Tcd);break;case 4:NKb(a,(Ucd(),zcd));NKb(a,Tcd);break;default:OKb(a,(Ucd(),zcd));OKb(a,Tcd);}} +function EXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,e.a,0);e.a+=c.f.a+b;e.b=$wnd.Math.max(e.b,c.f.b)}e.b>0&&(e.b+=b);return e} +function GXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e} +function d_b(a){var b,c,d;d=Ohe;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),10);wNb(b,(wtc(),Zsc))&&(d=$wnd.Math.min(d,BD(vNb(b,Zsc),19).a))}return d} +function pHc(a,b){var c,d;if(b.length==0){return 0}c=NHc(a.a,b[0],(Ucd(),Tcd));c+=NHc(a.a,b[b.length-1],zcd);for(d=0;d<b.length;d++){c+=qHc(a,d,b)}return c} +function vQc(){hQc();this.c=new Rkb;this.i=new Rkb;this.e=new zsb;this.f=new zsb;this.g=new zsb;this.j=new Rkb;this.a=new Rkb;this.b=new Lqb;this.k=new Lqb} +function aKd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.ih(a,5,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Wz(a){Rz();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\n')}return []} +function jeb(a){var b;b=(qeb(),peb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} +function _jb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=geb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=_Bb(a.a,c);$jb(a,b,d);a.a=b;a.b=0}else{dCb(a.a,c)}a.c=d} +function DKb(a,b){var c;c=a.b;return c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Tcd)?-c.rf().a-Edb(ED(c.We(s9c))):b+Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Tcd)?-c.rf().a:b} +function P_b(a){var b;if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.c?-1:Jkb(a.c.a,a,0))} +function C0b(a){var b;if(a.f.c.length!=0&&!!BD(Ikb(a.f,0),70).a){return BD(Ikb(a.f,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.i?-1:Jkb(a.i.j,a,0))} +function Ogc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c<a.gc();++c){d=BD(a.Xb(c),128);if(c==a.gc()-1||!d.o){return new vgd(meb(c),d)}}return null} +function uoc(a,b,c){var d,e,f,g,h;f=a.c;h=c?b:a;d=c?a:b;for(e=h.p+1;e<d.p;++e){g=BD(Ikb(f.a,e),10);if(!(g.k==(j0b(),d0b)||voc(g))){return false}}return true} +function u$c(a){var b,c,d,e,f;f=0;e=Qje;d=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);f+=b.r+(d>0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e} +function shd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,118).Ag().i);for(c=new Fyd(BD(a.f,118).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b} +function Ctd(a,b){var c,d,e;if(b.dc()){return LCd(),LCd(),KCd}else{c=new zyd(a,b.gc());for(e=new Fyd(a);e.e!=e.i.gc();){d=Dyd(e);b.Hc(d)&&wtd(c,d)}return c}} +function bkd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),FAd(a.o))}return fid(a,b,c,d)} +function Tnd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b<c;++b){Cmd(qud(a.rb,b))}}if(a.vb){for(b=0,c=a.vb.i;b<c;++b){Cmd(qud(a.vb,b))}}u1d((O6d(),M6d),a);a.Bb|=1} +function _nd(a,b,c,d,e,f,g,h,i,j,k,l,m,n){aod(a,b,d,null,e,f,g,h,i,j,m,true,n);CUd(a,k);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2);!!c&&DUd(a,c);EUd(a,l);return a} +function jZd(b){var c,d;if(b==null){return null}d=0;try{d=Icb(b,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){c=rfb(b);d=c[0]}else throw vbb(a)}return bdb(d)} +function kZd(b){var c,d;if(b==null){return null}d=0;try{d=Icb(b,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){c=rfb(b);d=c[0]}else throw vbb(a)}return bdb(d)} +function bD(a,b){var c,d,e;e=a.h-b.h;if(e<0){return false}c=a.l-b.l;d=a.m-b.m+(c>>22);e+=d>>22;if(e<0){return false}a.l=c&Eje;a.m=d&Eje;a.h=e&Fje;return true} +function Fwb(a,b,c,d,e,f,g){var h,i;if(b.Ae()&&(i=a.a.ue(c,d),i<0||!e&&i==0)){return false}if(b.Be()&&(h=a.a.ue(c,f),h>0||!g&&h==0)){return false}return true} +function Vcc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Ycc(b,Ncc)-Ycc(a,Ncc);case 4:return Ycc(a,Mcc)-Ycc(b,Mcc);}return 0} +function Tqc(a){switch(a.g){case 0:return Mqc;case 1:return Nqc;case 2:return Oqc;case 3:return Pqc;case 4:return Qqc;case 5:return Rqc;default:return null;}} +function End(a,b,c){var d,e;d=(e=new rUd,yId(e,b),pnd(e,c),wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),e),e);AId(d,0);DId(d,1);CId(d,true);BId(d,true);return d} +function tud(a,b){var c,d;if(b>=a.i)throw vbb(new $zd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&$fb(a.g,b+1,a.g,b,d);NC(a.g,--a.i,null);a.fi(b,c);a.ci();return c} +function UId(a,b){var c,d;if(a.Db>>16==17){return a.Cb.ih(a,21,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function iDb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.a<e.c.c.length;){d=mlb(e);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),679);b.Ke(d)}}} +function pXb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.a<e.c.c.length;){d=mlb(e);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),369);b.Ke(d)}}} +function AGb(a){var b,c,d,e,f;e=Ohe;f=null;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),213);if(c.d.j^c.e.j){b=c.e.e-c.d.e-c.a;if(b<e){e=b;f=c}}}return f} +function OSb(){OSb=ccb;MSb=new Nsd(Mme,(Bcb(),false));ISb=new Nsd(Nme,100);KSb=(yTb(),wTb);JSb=new Nsd(Ome,KSb);LSb=new Nsd(Pme,qme);NSb=new Nsd(Qme,meb(Ohe))} +function ric(a,b,c){var d,e,f,g,h,i,j,k;j=0;for(e=a.a[b],f=0,g=e.length;f<g;++f){d=e[f];k=CHc(d,c);for(i=k.Kc();i.Ob();){h=BD(i.Pb(),11);Rhb(a.f,h,meb(j++))}}} +function uqd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new Yge(e);for(g=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);g.Ob();){f=BD(g.Pb(),19);Rc(a,b,Vpd(tB(c,f.a)))}}} +function vqd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new Yge(e);for(g=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);g.Ob();){f=BD(g.Pb(),19);Rc(a,b,Vpd(tB(c,f.a)))}}} +function Bkc(a){gkc();var b;b=BD(Ee(Ec(a.k),KC(F1,bne,61,2,0,1)),122);Klb(b,0,b.length,null);if(b[0]==(Ucd(),Acd)&&b[1]==Tcd){NC(b,0,Tcd);NC(b,1,Acd)}return b} +function JHc(a,b,c){var d,e,f;e=HHc(a,b,c);f=KHc(a,e);yHc(a.b);cIc(a,b,c);mmb();Okb(e,new hIc(a));d=KHc(a,e);yHc(a.b);cIc(a,c,b);return new vgd(meb(f),meb(d))} +function jJc(){jJc=ccb;gJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b));hJc=new Msd('linearSegments.inputPrio',meb(0));iJc=new Msd('linearSegments.outputPrio',meb(0))} +function yRc(){yRc=ccb;uRc=new ARc('P1_TREEIFICATION',0);vRc=new ARc('P2_NODE_ORDERING',1);wRc=new ARc('P3_NODE_PLACEMENT',2);xRc=new ARc('P4_EDGE_ROUTING',3)} +function ZWc(){ZWc=ccb;UWc=(Y9c(),C9c);XWc=T9c;NWc=Y8c;OWc=_8c;PWc=b9c;MWc=W8c;QWc=e9c;TWc=x9c;KWc=(HWc(),wWc);LWc=xWc;RWc=zWc;SWc=BWc;VWc=CWc;WWc=DWc;YWc=FWc} +function rbd(){rbd=ccb;qbd=new tbd('UNKNOWN',0);nbd=new tbd('ABOVE',1);obd=new tbd('BELOW',2);pbd=new tbd('INLINE',3);new Msd('org.eclipse.elk.labelSide',qbd)} +function rud(a,b){var c;if(a.ni()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return c}}}else{for(c=0;c<a.i;++c){if(PD(a.g[c])===PD(b)){return c}}}return -1} +function DZb(a,b,c){var d,e;if(b.c==(KAc(),IAc)&&c.c==HAc){return -1}else if(b.c==HAc&&c.c==IAc){return 1}d=HZb(b.a,a.a);e=HZb(c.a,a.a);return b.c==IAc?e-d:d-e} +function Z_b(a,b,c){if(!!c&&(b<0||b>c.a.c.length)){throw vbb(new Wdb('index must be >= 0 and <= layer node count'))}!!a.c&&Lkb(a.c.a,a);a.c=c;!!c&&Dkb(c.a,b,a)} +function p7b(a,b){var c,d,e;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=BD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb} +function rMc(a,b){this.c=new Lqb;this.a=a;this.b=b;this.d=BD(vNb(a,(wtc(),otc)),304);PD(vNb(a,(Nyc(),yxc)))===PD((_qc(),Zqc))?(this.e=new bNc):(this.e=new WMc)} +function $dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),33);f+=$wnd.Math.pow(c.g*c.f-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} +function bgd(a,b){var c,d;d=null;if(a.Xe((Y9c(),O9c))){c=BD(a.We(O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!a.yf()&&(d=a.yf().We(b));d==null&&(d=Ksd(b));return d} +function Vt(b,c){var d,e;d=b.Zc(c);try{e=d.Pb();d.Qb();return e}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't remove element "+c))}else throw vbb(a)}} +function qA(a,b){var c,d,e;d=new eB;e=new fB(d.q.getFullYear()-nje,d.q.getMonth(),d.q.getDate());c=pA(a,b,e);if(c==0||c<b.length){throw vbb(new Wdb(b))}return e} +function _tb(a,b){var c,d,e;uCb(b);lCb(b!=a);e=a.b.c.length;for(d=b.Kc();d.Ob();){c=d.Pb();Ekb(a.b,uCb(c))}if(e!=a.b.c.length){aub(a,0);return true}return false} +function bTb(){bTb=ccb;VSb=(Y9c(),O8c);new Osd(B8c,(Bcb(),true));YSb=Y8c;ZSb=_8c;$Sb=b9c;XSb=W8c;_Sb=e9c;aTb=x9c;USb=(OSb(),MSb);SSb=JSb;TSb=LSb;WSb=NSb;RSb=ISb} +function MZb(a,b){if(b==a.c){return a.d}else if(b==a.d){return a.c}else{throw vbb(new Wdb("'port' must be either the source port or target port of the edge."))}} +function C3b(a,b,c){var d,e;e=a.o;d=a.d;switch(b.g){case 1:return -d.d-c;case 3:return e.b+d.a+c;case 2:return e.a+d.c+c;case 4:return -d.b-c;default:return 0;}} +function H6b(a,b,c,d){var e,f,g,h;$_b(b,BD(d.Xb(0),29));h=d.bd(1,d.gc());for(f=BD(c.Kb(b),20).Kc();f.Ob();){e=BD(f.Pb(),17);g=e.c.i==b?e.d.i:e.c.i;H6b(a,g,c,h)}} +function Xec(a){var b;b=new Lqb;if(wNb(a,(wtc(),ttc))){return BD(vNb(a,ttc),83)}MAb(JAb(new YAb(null,new Kub(a.j,16)),new Zec),new _ec(b));yNb(a,ttc,b);return b} +function cmd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.ih(a,6,B2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Lhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Eod(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,1,C2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Nhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function lpd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.ih(a,9,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Phd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function mQd(a,b){var c,d;if(a.Db>>16==5){return a.Cb.ih(a,9,h5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),VFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function KHd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,0,k5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),OFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Snd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,6,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),cGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function ird(){this.a=new bqd;this.g=new wo;this.j=new wo;this.b=new Lqb;this.d=new wo;this.i=new wo;this.k=new Lqb;this.c=new Lqb;this.e=new Lqb;this.f=new Lqb} +function MCd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;e<f;e++){d=qud(a,e);if(b==null){if(d==null){return e}}else if(PD(b)===PD(d)||pb(b,d)){return e}}return -1} +function b1d(a,b){var c,d;c=b.Hh(a.a);if(!c){return null}else{d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Awe));return dfb(Bwe,d)?u1d(a,bKd(b.Hj())):d}} +function p6d(a,b){var c,d;if(b){if(b==a){return true}c=0;for(d=BD(b,49).eh();!!d&&d!=b;d=d.eh()){if(++c>Wje){return p6d(a,d)}if(d==a){return true}}}return false} +function HKb(a){CKb();switch(a.q.g){case 5:EKb(a,(Ucd(),Acd));EKb(a,Rcd);break;case 4:FKb(a,(Ucd(),Acd));FKb(a,Rcd);break;default:GKb(a,(Ucd(),Acd));GKb(a,Rcd);}} +function LKb(a){CKb();switch(a.q.g){case 5:IKb(a,(Ucd(),zcd));IKb(a,Tcd);break;case 4:JKb(a,(Ucd(),zcd));JKb(a,Tcd);break;default:KKb(a,(Ucd(),zcd));KKb(a,Tcd);}} +function XQb(a){var b,c;b=BD(vNb(a,(wSb(),pSb)),19);if(b){c=b.a;c==0?yNb(a,(HSb(),GSb),new Gub):yNb(a,(HSb(),GSb),new Hub(c))}else{yNb(a,(HSb(),GSb),new Hub(1))}} +function V$b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0} +function hbc(a,b){switch(a.g){case 0:return b==(Ctc(),ytc)?dbc:ebc;case 1:return b==(Ctc(),ytc)?dbc:cbc;case 2:return b==(Ctc(),ytc)?cbc:ebc;default:return cbc;}} +function v$c(a,b){var c,d,e;Lkb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=ere;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);e=$wnd.Math.max(e,c.d)}a.b=e} +function Lld(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,12,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Khd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Uod(a,b){var c,d;if(a.Db>>16==11){return a.Cb.ih(a,10,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Ohd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function PSd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,11,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),aGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function qUd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,12,n5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),dGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function wId(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.kh()){b=BD(a.r,49);a.r=BD(xid(a,b),138);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.r))}return a.r} +function yHb(a,b,c){var d;d=OC(GC(UD,1),Vje,25,15,[BHb(a,(gHb(),dHb),b,c),BHb(a,eHb,b,c),BHb(a,fHb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} +function O9b(a,b){var c,d,e;e=V9b(a,b);if(e.c.length==0){return}Okb(e,new pac);c=e.c.length;for(d=0;d<c;d++){K9b(a,(tCb(d,e.c.length),BD(e.c[d],286)),R9b(a,e,d))}} +function qkc(a){var b,c,d,e;for(e=BD(Qc(a.a,(Xjc(),Sjc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);for(c=Ec(d.k).Kc();c.Ob();){b=BD(c.Pb(),61);kkc(a,d,b,(Fkc(),Dkc),1)}}} +function voc(a){var b,c;if(a.k==(j0b(),g0b)){for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!OZb(b)&&a.c==LZb(b,a).c){return true}}}return false} +function JNc(a){var b,c;if(a.k==(j0b(),g0b)){for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!OZb(b)&&b.c.i.c==b.d.i.c){return true}}}return false} +function HUc(a,b){var c,d,e,f;Odd(b,'Dull edge routing',1);for(f=Jsb(a.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);for(d=Jsb(e.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);Osb(c.a)}}} +function xqd(a,b){var c,d,e,f,g;if(b){e=b.a.length;c=new Yge(e);for(g=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);g.Ob();){f=BD(g.Pb(),19);d=Zpd(b,f.a);!!d&&ard(a,d)}}} +function DZd(){tZd();var a,b;xZd((NFd(),MFd));wZd(MFd);Tnd(MFd);FQd=(jGd(),YFd);for(b=new olb(rZd);b.a<b.c.c.length;){a=BD(mlb(b),241);QQd(a,YFd,null)}return true} +function eD(a,b){var c,d,e,f,g,h,i,j;i=a.h>>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} +function fFb(){fFb=ccb;eFb=(rFb(),oFb);dFb=new Nsd(Yke,eFb);cFb=(UEb(),TEb);bFb=new Nsd(Zke,cFb);aFb=(MEb(),LEb);_Eb=new Nsd($ke,aFb);$Eb=new Nsd(_ke,(Bcb(),true))} +function cfc(a,b,c){var d,e;d=b*c;if(JD(a.g,145)){e=ugc(a);if(e.f.d){e.f.a||(a.d.a+=d+ple)}else{a.d.d-=d+ple;a.d.a+=d+ple}}else if(JD(a.g,10)){a.d.d-=d;a.d.a+=2*d}} +function vmc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new olb(b.d);h.a<h.c.c.length;){g=BD(mlb(h),101);f=g.i;if(!!f&&f.i==c){d=g.d[c.g];e[d]=$wnd.Math.max(e[d],f.j.b)}}} +function AZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b.d);g.a<g.c.c.length;){f=BD(mlb(g),443);a$c(f);d=$wnd.Math.max(d,f.b);e+=f.d+(c>0?a.g:0);++c}b.b=d;b.e=e} +function to(a){var b,c,d;d=a.b;if(Lp(a.i,d.length)){c=d.length*2;a.b=KC(GF,Gie,317,c,0,1);a.c=KC(GF,Gie,317,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){po(a,b,b)}++a.g}} +function cNb(a,b,c,d){var e,f,g,h;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;YMb(b,e,g)?jNb(a,f,h)||lNb(a,f,h):$Mb(b,e,g)&&(hNb(a,f,h)||mNb(a,f,h))}}} +function Ooc(a,b,c){var d;d=b.c.i;if(d.k==(j0b(),g0b)){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11))}else{yNb(a,(wtc(),Vsc),b.c);yNb(a,Wsc,c.d)}} +function l6c(a,b,c){i6c();var d,e,f,g,h,i;g=b/2;f=c/2;d=$wnd.Math.abs(a.a);e=$wnd.Math.abs(a.b);h=1;i=1;d>g&&(h=g/d);e>f&&(i=f/e);Y6c(a,$wnd.Math.min(h,i));return a} +function ond(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),yte),2014);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new knd} +function Y9d(){A9d();var b,c;try{c=BD(mUd((yFd(),xFd),Ewe),2024);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new U9d} +function qZd(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),_ve),1941);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new mZd} +function HQd(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}e!=b&&(b?(c=QQd(a,MQd(a,b),c)):(c=QQd(a,a.a,c)));return c} +function nB(){eB.call(this);this.e=-1;this.a=false;this.p=Rie;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=Rie} +function qEb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function eOb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function PVb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function ZTb(){ZTb=ccb;WTb=c3c(e3c(e3c(e3c(new j3c,(qUb(),oUb),(S8b(),m8b)),oUb,q8b),pUb,x8b),pUb,a8b);YTb=e3c(e3c(new j3c,oUb,S7b),oUb,b8b);XTb=c3c(new j3c,pUb,d8b)} +function s3b(a){var b,c,d,e,f;b=BD(vNb(a,(wtc(),Csc)),83);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=BD(d.Pb(),306);e=c.i;e.c+=f.a;e.d+=f.b;c.c?VHb(c):XHb(c)}yNb(a,Csc,null)} +function qmc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}} +function BXc(a){var b,c,d,e,f;d=0;e=dme;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;zXc(a,a.d,0,0,dre,c);f=a.b.ig(a.d);if(f<e){d=c;e=f}}}zXc(a,a.d,0,0,dre,d)} +function E$c(a,b){var c,d,e,f;f=new Lqb;b.e=null;b.f=null;for(d=new olb(b.i);d.a<d.c.c.length;){c=BD(mlb(d),65);e=BD(Ohb(a.g,c.a),46);c.a=D6c(c.b);Rhb(f,c.a,e)}a.g=f} +function t$c(a,b,c){var d,e,f,g,h,i;e=b-a.e;f=e/a.d.c.length;g=0;for(i=new olb(a.d);i.a<i.c.c.length;){h=BD(mlb(i),443);d=a.b-h.b+c;_Zc(h,h.e+g*f,h.f);XZc(h,f,d);++g}} +function YBd(a){var b;a.f.qj();if(a.b!=-1){++a.b;b=a.f.d[a.a];if(a.b<b.i){return}++a.a}for(;a.a<a.f.d.length;++a.a){b=a.f.d[a.a];if(!!b&&b.i!=0){a.b=0;return}}a.b=-1} +function j0d(a,b){var c,d,e;e=b.c.length;c=l0d(a,e==0?'':(tCb(0,b.c.length),GD(b.c[0])));for(d=1;d<e&&!!c;++d){c=BD(c,49).oh((tCb(d,b.c.length),GD(b.c[d])))}return c} +function rEc(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),10);a.c[c.c.p][c.p].a=Aub(a.i);a.c[c.c.p][c.p].d=Edb(a.c[c.c.p][c.p].a);a.c[c.c.p][c.p].b=1}} +function _dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),157);f+=$wnd.Math.pow(red(c)*qed(c)-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} +function LHc(a,b,c,d){var e,f,g;f=GHc(a,b,c,d);g=MHc(a,f);bIc(a,b,c,d);yHc(a.b);mmb();Okb(f,new lIc(a));e=MHc(a,f);bIc(a,c,b,d);yHc(a.b);return new vgd(meb(g),meb(e))} +function cJc(a,b,c){var d,e;Odd(c,'Interactive node placement',1);a.a=BD(vNb(b,(wtc(),otc)),304);for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),29);bJc(a,d)}Qdd(c)} +function MVc(a,b){var c;Odd(b,'General Compactor',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));c=qWc(BD(hkd(a,(ZWc(),LWc)),380));c.hg(a);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))} +function Dfd(a,b,c){var d,e;nmd(a,a.j+b,a.k+c);for(e=new Fyd((!a.a&&(a.a=new xMd(y2,a,5)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),469);ukd(d,d.a+b,d.b+c)}gmd(a,a.b+b,a.c+c)} +function vld(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),Sxd(a.e,b,d);case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),Sxd(a.d,b,d);}return Fkd(a,b,c,d)} +function wld(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),Txd(a.e,b,d);case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),Txd(a.d,b,d);}return Gkd(a,b,c,d)} +function lqd(a,b,c){var d,e,f,g,h;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&drd(a,e,b)}}} +function HAd(a,b,c){var d,e,f,g,h;a.qj();f=b==null?0:tb(b);if(a.f>0){g=(f&Ohe)%a.d.length;e=wAd(a,g,f,b);if(e){h=e.ed(c);return h}}d=a.tj(f,b,c);a.c.Fc(d);return null} +function t1d(a,b){var c,d,e,f;switch(o1d(a,b)._k()){case 3:case 2:{c=OKd(b);for(e=0,f=c.i;e<f;++e){d=BD(qud(c,e),34);if($1d(q1d(a,d))==5){return d}}break}}return null} +function Qs(a){var b,c,d,e,f;if(Lp(a.f,a.b.length)){d=KC(BG,Gie,330,a.b.length*2,0,1);a.b=d;e=d.length-1;for(c=a.a;c!=a;c=c.Rd()){f=BD(c,330);b=f.d&e;f.a=d[b];d[b]=f}}} +function DJb(a,b){var c,d,e,f;f=0;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);f=$wnd.Math.max(f,d.e.a+d.b.rf().a)}c=BD(Mpb(a.b,b),124);c.n.b=0;c.a.a=f} +function MKb(a,b){var c,d,e,f;c=0;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);c=$wnd.Math.max(c,e.e.b+e.b.rf().b)}d=BD(Mpb(a.b,b),124);d.n.d=0;d.a.b=c} +function INc(a){var b,c;c=BD(vNb(a,(wtc(),Ksc)),21);b=k3c(zNc);c.Hc((Orc(),Lrc))&&d3c(b,CNc);c.Hc(Nrc)&&d3c(b,ENc);c.Hc(Erc)&&d3c(b,ANc);c.Hc(Grc)&&d3c(b,BNc);return b} +function j1c(a,b){var c;Odd(b,'Delaunay triangulation',1);c=new Rkb;Hkb(a.i,new n1c(c));Ccb(DD(vNb(a,(XNb(),VNb))))&&'null10bw';!a.e?(a.e=NCb(c)):ye(a.e,NCb(c));Qdd(b)} +function q6c(a){if(a<0){throw vbb(new Wdb('The input must be positive'))}else return a<h6c.length?Sbb(h6c[a]):$wnd.Math.sqrt(dre*a)*(y6c(a,a)/x6c(2.718281828459045,a))} +function pud(a,b){var c;if(a.ni()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return true}}}else{for(c=0;c<a.i;++c){if(PD(a.g[c])===PD(b)){return true}}}return false} +function jr(a,b){if(b==null){while(a.a.Ob()){if(BD(a.a.Pb(),42).dd()==null){return true}}}else{while(a.a.Ob()){if(pb(b,BD(a.a.Pb(),42).dd())){return true}}}return false} +function zy(a,b){var c,d,e;if(b===a){return true}else if(JD(b,664)){e=BD(b,1947);return Ue((d=a.g,!d?(a.g=new vi(a)):d),(c=e.g,!c?(e.g=new vi(e)):c))}else{return false}} +function Tz(a){var b,c,d,e;b='Sz';c='ez';e=$wnd.Math.min(a.length,5);for(d=e-1;d>=0;d--){if(dfb(a[d].d,b)||dfb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} +function Abb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a/b;if(Kje<c&&c<Ije){return c<0?$wnd.Math.ceil(c):$wnd.Math.floor(c)}}return zbb(UC(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b,false))} +function LZb(a,b){if(b==a.c.i){return a.d.i}else if(b==a.d.i){return a.c.i}else{throw vbb(new Wdb("'node' must either be the source node or target node of the edge."))}} +function C2b(a){var b,c,d,e;e=BD(vNb(a,(wtc(),xsc)),37);if(e){d=new d7c;b=Q_b(a.c.i);while(b!=e){c=b.e;b=Q_b(c);O6c(P6c(P6c(d,c.n),b.c),b.d.b,b.d.d)}return d}return w2b} +function Ldc(a){var b;b=BD(vNb(a,(wtc(),ntc)),403);MAb(LAb(new YAb(null,new Kub(b.d,16)),new Ydc),new $dc(a));MAb(JAb(new YAb(null,new Kub(b.d,16)),new aec),new cec(a))} +function woc(a,b){var c,d,e,f;e=b?U_b(a):R_b(a);for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);f=LZb(c,a);if(f.k==(j0b(),g0b)&&f.c!=a.c){return f}}return null} +function HDc(a){var b,c,d;for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);if(b.k!=(j0b(),h0b)){continue}d=b.o.b;a.i=$wnd.Math.min(a.i,d);a.g=$wnd.Math.max(a.g,d)}} +function oEc(a,b,c){var d,e,f;for(f=new olb(b);f.a<f.c.c.length;){d=BD(mlb(f),10);a.c[d.c.p][d.p].e=false}for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),10);nEc(a,d,c)}} +function WOc(a,b,c){var d,e;d=vPc(b.j,c.s,c.c)+vPc(c.e,b.s,b.c);e=vPc(c.j,b.s,b.c)+vPc(b.e,c.s,c.c);if(d==e){if(d>0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}} +function Rpd(a,b){var c,d;d=false;if(ND(b)){d=true;Qpd(a,new yC(GD(b)))}if(!d){if(JD(b,236)){d=true;Qpd(a,(c=Kcb(BD(b,236)),new TB(c)))}}if(!d){throw vbb(new vcb(Ute))}} +function IMd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,10,(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd)),(f=c.c,JD(f,88)?BD(f,26):(jGd(),_Fd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d} +function T_b(a){var b,c;switch(BD(vNb(Q_b(a),(Nyc(),ixc)),420).g){case 0:b=a.n;c=a.o;return new f7c(b.a+c.a/2,b.b+c.b/2);case 1:return new g7c(a.n);default:return null;}} +function lrc(){lrc=ccb;irc=new mrc(ane,0);hrc=new mrc('LEFTUP',1);krc=new mrc('RIGHTUP',2);grc=new mrc('LEFTDOWN',3);jrc=new mrc('RIGHTDOWN',4);frc=new mrc('BALANCED',5)} +function FFc(a,b,c){var d,e,f;d=Kdb(a.a[b.p],a.a[c.p]);if(d==0){e=BD(vNb(b,(wtc(),Qsc)),15);f=BD(vNb(c,Qsc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d} +function jXc(a){switch(a.g){case 1:return new XVc;case 2:return new ZVc;case 3:return new VVc;case 0:return null;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function Ikd(a,b,c){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);!a.n&&(a.n=new cUd(D2,a,1,7));ytd(a.n,BD(c,14));return;case 2:Lkd(a,GD(c));return;}ekd(a,b,c)} +function Zkd(a,b,c){switch(b){case 3:ald(a,Edb(ED(c)));return;case 4:cld(a,Edb(ED(c)));return;case 5:dld(a,Edb(ED(c)));return;case 6:eld(a,Edb(ED(c)));return;}Ikd(a,b,c)} +function Fnd(a,b,c){var d,e,f;f=(d=new rUd,d);e=xId(f,b,null);!!e&&e.Fi();pnd(f,c);wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),f);AId(f,0);DId(f,1);CId(f,true);BId(f,true)} +function mUd(a,b){var c,d,e;c=Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e.Nh()}else if(JD(c,498)){d=BD(c,1938);e=d.b;return e}else{return null}} +function Ui(a,b,c,d){var e,f;Qb(b);Qb(c);f=BD(tn(a.d,b),19);Ob(!!f,'Row %s not in %s',b,a.e);e=BD(tn(a.b,c),19);Ob(!!e,'Column %s not in %s',c,a.c);return Wi(a,f.a,e.a,d)} +function JC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=LC(h,k);d!=10&&OC(GC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i<k;++i){l[i]=JC(a,b,c,d,e,f,g)}}return l} +function Eyd(b){if(b.g==-1){throw vbb(new Ydb)}b.mj();try{b.i.$c(b.g);b.f=b.i.j;b.g<b.e&&--b.e;b.g=-1}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} +function hYb(a,b){a.b.a=$wnd.Math.min(a.b.a,b.c);a.b.b=$wnd.Math.min(a.b.b,b.d);a.a.a=$wnd.Math.max(a.a.a,b.c);a.a.b=$wnd.Math.max(a.a.b,b.d);return a.c[a.c.length]=b,true} +function nZb(a){var b,c,d,e;e=-1;d=0;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),243);if(b.c==(KAc(),HAc)){e=d==0?0:d-1;break}else d==a.c.length-1&&(e=d);d+=1}return e} +function UZc(a){var b,c,d,e;e=0;b=0;for(d=new olb(a.c);d.a<d.c.c.length;){c=BD(mlb(d),33);dld(c,a.e+e);eld(c,a.f);e+=c.g+a.b;b=$wnd.Math.max(b,c.f+a.b)}a.d=e-a.b;a.a=b-a.b} +function bEb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);d=b.d.c;b.d.c=b.d.d;b.d.d=d;d=b.d.b;b.d.b=b.d.a;b.d.a=d;d=b.b.a;b.b.a=b.b.b;b.b.b=d}RDb(a)} +function BVb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=b.g.c;b.g.c=b.g.d;b.g.d=d;d=b.g.b;b.g.b=b.g.a;b.g.a=d;d=b.e.a;b.e.a=b.e.b;b.e.b=d}sVb(a)} +function Lmc(a){var b,c,d,e,f;f=Ec(a.k);for(c=(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])),d=0,e=c.length;d<e;++d){b=c[d];if(b!=Scd&&!f.Hc(b)){return b}}return null} +function znc(a,b){var c,d;d=BD(Etb(KAb(JAb(new YAb(null,new Kub(b.j,16)),new Pnc))),11);if(d){c=BD(Ikb(d.e,0),17);if(c){return BD(vNb(c,(wtc(),Zsc)),19).a}}return yzc(a.b)} +function CCc(a,b){var c,d,e,f;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);Blb(a.d);for(d=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);zCc(a,e,c.d.i)}}} +function NZc(a,b){var c,d;Lkb(a.b,b);for(d=new olb(a.n);d.a<d.c.c.length;){c=BD(mlb(d),211);if(Jkb(c.c,b,0)!=-1){Lkb(c.c,b);UZc(c);c.c.c.length==0&&Lkb(a.n,c);break}}HZc(a)} +function $Zc(a,b){var c,d,e,f,g;g=a.f;e=0;f=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);OZc(c,a.e,g);KZc(c,b);f=$wnd.Math.max(f,c.r);g+=c.d+a.c;e=g}a.d=f;a.b=e} +function hVc(a){var b,c;c=$sd(a);if(Qq(c)){return null}else{b=(Qb(c),BD(mr(new Sr(ur(c.a.Kc(),new Sq))),79));return atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82))}} +function XId(a){var b;if(!a.o){b=a.Lj();b?(a.o=new dYd(a,a,null)):a.rk()?(a.o=new uVd(a,null)):$1d(q1d((O6d(),M6d),a))==1?(a.o=new nYd(a)):(a.o=new sYd(a,null))}return a.o} +function w6d(a,b,c,d){var e,f,g,h,i;if(c.mh(b)){e=(g=b,!g?null:BD(d,49).xh(g));if(e){i=c.ah(b);h=b.t;if(h>1||h==-1){f=BD(i,15);e.Wb(t6d(a,f))}else{e.Wb(s6d(a,BD(i,56)))}}}} +function Zbb(b,c,d,e){Ybb();var f=Wbb;$moduleName=c;$moduleBase=d;tbb=e;function g(){for(var a=0;a<f.length;a++){f[a]()}} +if(b){try{Ihe(g)()}catch(a){b(c,a)}}else{Ihe(g)()}} +function Kgc(a){var b,c,d,e,f;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);b=BD(c.cd(),10);f=BD(BD(c.dd(),46).a,10);e=BD(BD(c.dd(),46).b,8);P6c(X6c(b.n),P6c(R6c(f.n),e))}} +function llc(a){switch(BD(vNb(a.b,(Nyc(),Vwc)),375).g){case 1:MAb(NAb(LAb(new YAb(null,new Kub(a.d,16)),new Glc),new Ilc),new Klc);break;case 2:nlc(a);break;case 0:mlc(a);}} +function KXc(a,b,c){var d;Odd(c,'Straight Line Edge Routing',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));d=BD(hkd(b,(MUc(),LUc)),33);LXc(a,d);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} +function i8c(){i8c=ccb;h8c=new j8c('V_TOP',0);g8c=new j8c('V_CENTER',1);f8c=new j8c('V_BOTTOM',2);d8c=new j8c('H_LEFT',3);c8c=new j8c('H_CENTER',4);e8c=new j8c('H_RIGHT',5)} +function gLd(a){var b;if((a.Db&64)!=0)return mKd(a);b=new Jfb(mKd(a));b.a+=' (abstract: ';Ffb(b,(a.Bb&256)!=0);b.a+=', interface: ';Ffb(b,(a.Bb&512)!=0);b.a+=')';return b.a} +function l3d(a,b,c,d){var e,f,g,h;if(oid(a.e)){e=b.ak();h=b.dd();f=c.dd();g=H2d(a,1,e,h,f,e.$j()?M2d(a,e,f,JD(e,99)&&(BD(e,18).Bb&Tje)!=0):-1,true);d?d.Ei(g):(d=g)}return d} +function kz(a){var b;if(a.c==null){b=PD(a.b)===PD(iz)?null:a.b;a.d=b==null?Xhe:MD(b)?nz(FD(b)):ND(b)?Vie:hdb(rb(b));a.a=a.a+': '+(MD(b)?mz(FD(b)):b+'');a.c='('+a.d+') '+a.a}} +function Wgb(a,b){this.e=a;if(Bbb(xbb(b,-4294967296),0)){this.d=1;this.a=OC(GC(WD,1),oje,25,15,[Tbb(b)])}else{this.d=2;this.a=OC(GC(WD,1),oje,25,15,[Tbb(b),Tbb(Obb(b,32))])}} +function yrb(){function b(){try{return (new Map).entries().next().done}catch(a){return false}} +if(typeof Map===Nhe&&Map.prototype.entries&&b()){return Map}else{return zrb()}} +function VPc(a,b){var c,d,e,f;f=new Bib(a.e,0);c=0;while(f.b<f.d.gc()){d=Edb((sCb(f.b<f.d.gc()),ED(f.d.Xb(f.c=f.b++))));e=d-b;if(e>Oqe){return c}else e>-1.0E-6&&++c}return c} +function PQd(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=lid(a.b,a,-4,c));!!b&&(c=kid(b,a,-4,c));c=GQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function SQd(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=lid(a.f,a,-1,c));!!b&&(c=kid(b,a,-1,c));c=IQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,b,b))} +function E9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} +function I9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} +function qEc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Ddb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0} +function zqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new Crd(a);Aqd(d.a,e)}}} +function Qqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new lrd(a);nqd(d.a,e)}}} +function eFd(b){var c;if(b!=null&&b.length>0&&bfb(b,b.length-1)==33){try{c=PEd(qfb(b,0,b.length-1));return c.e==null}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}return false} +function h3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,3,d,null,f,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,1,d,d.zj(),f,-1,true);c?c.Ei(e):(c=e);return c} +function Vee(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=Uee((BCb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw vbb(new mde('Unknown Option: '+'X'.substr(a)));b|=c}return b} +function mZb(a,b,c){var d,e,f;d=Q_b(b);e=a_b(d);f=new H0b;F0b(f,b);switch(c.g){case 1:G0b(f,Wcd(Zcd(e)));break;case 2:G0b(f,Zcd(e));}yNb(f,(Nyc(),Uxc),ED(vNb(a,Uxc)));return f} +function U9b(a){var b,c;b=BD(Rr(new Sr(ur(R_b(a.a).a.Kc(),new Sq))),17);c=BD(Rr(new Sr(ur(U_b(a.a).a.Kc(),new Sq))),17);return Ccb(DD(vNb(b,(wtc(),ltc))))||Ccb(DD(vNb(c,ltc)))} +function Xjc(){Xjc=ccb;Tjc=new Yjc('ONE_SIDE',0);Vjc=new Yjc('TWO_SIDES_CORNER',1);Wjc=new Yjc('TWO_SIDES_OPPOSING',2);Ujc=new Yjc('THREE_SIDES',3);Sjc=new Yjc('FOUR_SIDES',4)} +function jkc(a,b,c,d,e){var f,g;f=BD(GAb(JAb(b.Oc(),new _kc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);g=BD(Si(a.b,c,d),15);e==0?g.Wc(0,f):g.Gc(f)} +function KDc(a,b){var c,d,e,f,g;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);for(d=new Sr(ur(R_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=c.c.i.p;a.n[g]=a.n[g]-1}}} +function cnc(a,b){var c,d,e,f,g;for(f=new olb(b.d);f.a<f.c.c.length;){e=BD(mlb(f),101);g=BD(Ohb(a.c,e),112).o;for(d=new Gqb(e.b);d.a<d.c.a.length;){c=BD(Fqb(d),61);ojc(e,c,g)}}} +function HJc(a){var b,c;for(c=new olb(a.e.b);c.a<c.c.c.length;){b=BD(mlb(c),29);YJc(a,b)}MAb(JAb(LAb(LAb(new YAb(null,new Kub(a.e.b,16)),new YKc),new tLc),new vLc),new xLc(a))} +function Qwd(a,b){if(!b){return false}else{if(a.Di(b)){return false}if(!a.i){if(JD(b,143)){a.i=BD(b,143);return true}else{a.i=new Hxd;return a.i.Ei(b)}}else{return a.i.Ei(b)}}} +function B9d(a){a=Qge(a,true);if(dfb(kse,a)||dfb('1',a)){return Bcb(),Acb}else if(dfb(lse,a)||dfb('0',a)){return Bcb(),zcb}throw vbb(new n8d("Invalid boolean value: '"+a+"'"))} +function Kd(a,b,c){var d,e,f;for(e=a.vc().Kc();e.Ob();){d=BD(e.Pb(),42);f=d.cd();if(PD(b)===PD(f)||b!=null&&pb(b,f)){if(c){d=new pjb(d.cd(),d.dd());e.Qb()}return d}}return null} +function dKb(a){$Jb();var b,c,d;if(!a.B.Hc((Idd(),Add))){return}d=a.f.i;b=new K6c(a.a.c);c=new p0b;c.b=b.c-d.c;c.d=b.d-d.d;c.c=d.c+d.b-(b.c+b.b);c.a=d.d+d.a-(b.d+b.a);a.e.Ff(c)} +function LNb(a,b,c,d){var e,f,g;g=$wnd.Math.min(c,ONb(BD(a.b,65),b,c,d));for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),221);e!=b&&(g=$wnd.Math.min(g,LNb(e,b,g,d)))}return g} +function WZb(a){var b,c,d,e;e=KC(OQ,nie,193,a.b.c.length,0,2);d=new Bib(a.b,0);while(d.b<d.d.gc()){b=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),29));c=d.b-1;e[c]=l_b(b.a)}return e} +function K3b(a,b,c,d,e){var f,g,h,i;g=eLb(dLb(iLb(H3b(c)),d),C3b(a,c,e));for(i=Y_b(a,c).Kc();i.Ob();){h=BD(i.Pb(),11);if(b[h.p]){f=b[h.p].i;Ekb(g.d,new BLb(f,bLb(g,f)))}}cLb(g)} +function sic(a,b){this.f=new Lqb;this.b=new Lqb;this.j=new Lqb;this.a=a;this.c=b;this.c>0&&ric(this,this.c-1,(Ucd(),zcd));this.c<this.a.length-1&&ric(this,this.c+1,(Ucd(),Tcd))} +function SEc(a){a.length>0&&a[0].length>0&&(this.c=Ccb(DD(vNb(Q_b(a[0][0]),(wtc(),Rsc)))));this.a=KC(CX,nie,2018,a.length,0,2);this.b=KC(FX,nie,2019,a.length,0,2);this.d=new ss} +function tKc(a){if(a.c.length==0){return false}if((tCb(0,a.c.length),BD(a.c[0],17)).c.i.k==(j0b(),g0b)){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new wKc),new yKc)} +function rRc(a,b,c){Odd(c,'Tree layout',1);H2c(a.b);K2c(a.b,(yRc(),uRc),uRc);K2c(a.b,vRc,vRc);K2c(a.b,wRc,wRc);K2c(a.b,xRc,xRc);a.a=F2c(a.b,b);sRc(a,b,Udd(c,1));Qdd(c);return b} +function HXc(a,b){var c,d,e,f,g,h,i;h=gVc(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new olb(h);d.a<d.c.c.length;){c=BD(mlb(d),33);e+=HXc(a,c)}return $wnd.Math.max(e,g)} +function dcd(){dcd=ccb;ccd=new gcd(ole,0);bcd=new gcd('FREE',1);acd=new gcd('FIXED_SIDE',2);Zbd=new gcd('FIXED_ORDER',3);_bd=new gcd('FIXED_RATIO',4);$bd=new gcd('FIXED_POS',5)} +function c1d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Cwe));for(d=1;d<(O6d(),N6d).length;++d){if(dfb(N6d[d],e)){return d}}}return 0} +function Qlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Wlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Md(a){var b,c,d;d=new xwb(She,'{','}');for(c=a.vc().Kc();c.Ob();){b=BD(c.Pb(),42);uwb(d,Nd(a,b.cd())+'='+Nd(a,b.dd()))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function EGb(a){var b,c,d,e;while(!akb(a.o)){c=BD(fkb(a.o),46);d=BD(c.a,121);b=BD(c.b,213);e=xFb(b,d);if(b.e==d){NFb(e.g,b);d.e=e.e+b.a}else{NFb(e.b,b);d.e=e.e-b.a}Ekb(a.e.a,d)}} +function F6b(a,b){var c,d,e;c=null;for(e=BD(b.Kb(a),20).Kc();e.Ob();){d=BD(e.Pb(),17);if(!c){c=d.c.i==a?d.d.i:d.c.i}else{if((d.c.i==a?d.d.i:d.c.i)!=c){return false}}}return true} +function uPc(a,b){var c,d,e,f,g;c=WNc(a,false,b);for(e=new olb(c);e.a<e.c.c.length;){d=BD(mlb(e),129);d.d==0?(BOc(d,null),COc(d,null)):(f=d.a,g=d.b,BOc(d,g),COc(d,f),undefined)}} +function qQc(a){var b,c;b=new j3c;d3c(b,cQc);c=BD(vNb(a,(wtc(),Ksc)),21);c.Hc((Orc(),Nrc))&&d3c(b,gQc);c.Hc(Erc)&&d3c(b,dQc);c.Hc(Lrc)&&d3c(b,fQc);c.Hc(Grc)&&d3c(b,eQc);return b} +function Xac(a){var b,c,d,e;Wac(a);for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);d=b.c.i==a;e=d?b.d:b.c;d?RZb(b,null):QZb(b,null);yNb(b,(wtc(),ctc),e);_ac(a,e.i)}} +function wmc(a,b,c,d){var e,f;f=b.i;e=c[f.g][a.d[f.g]];switch(f.g){case 1:e-=d+b.j.b;b.g.b=e;break;case 3:e+=d;b.g.b=e;break;case 4:e-=d+b.j.a;b.g.a=e;break;case 2:e+=d;b.g.a=e;}} +function aVc(a){var b,c,d;for(c=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),33);d=$sd(b);if(!Qr(new Sr(ur(d.a.Kc(),new Sq)))){return b}}return null} +function Cod(){var a;if(yod)return BD(nUd((yFd(),xFd),yte),2016);a=BD(JD(Phb((yFd(),xFd),yte),555)?Phb(xFd,yte):new Bod,555);yod=true;zod(a);Aod(a);Tnd(a);Shb(xFd,yte,a);return a} +function t3d(a,b,c){var d,e;if(a.j==0)return c;e=BD(LLd(a,b,c),72);d=c.ak();if(!d.Ij()||!a.a.rl(d)){throw vbb(new hz("Invalid entry feature '"+d.Hj().zb+'.'+d.ne()+"'"))}return e} +function Qi(a,b){var c,d,e,f,g,h,i,j;for(h=a.a,i=0,j=h.length;i<j;++i){g=h[i];for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(PD(b)===PD(c)||b!=null&&pb(b,c)){return true}}}return false} +function qhb(a){var b,c,d;if(ybb(a,0)>=0){c=Abb(a,Jje);d=Hbb(a,Jje)}else{b=Pbb(a,1);c=Abb(b,500000000);d=Hbb(b,500000000);d=wbb(Nbb(d,1),xbb(a,1))}return Mbb(Nbb(d,32),xbb(c,Yje))} +function oQb(a,b,c){var d,e;d=(sCb(b.b!=0),BD(Nsb(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Jsb(b,0);Vsb(e,d);return b} +function pmc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=umc(g,i.d[g.g],c);e=P6c(R6c(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Gsb(d,h,d.c.b,d.c)} +function yJc(a,b,c){var d,e,f,g;g=Jkb(a.e,b,0);f=new zJc;f.b=c;d=new Bib(a.e,g);while(d.b<d.d.gc()){e=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),10));e.p=c;Ekb(f.e,e);uib(d)}return f} +function sYc(a,b,c,d){var e,f,g,h,i;e=null;f=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);i=g.i+g.g;if(a<g.j+g.f+d){!e?(e=g):c.i-i<c.i-f&&(e=g);f=e.i+e.g}}return !e?0:f+d} +function tYc(a,b,c,d){var e,f,g,h,i;f=null;e=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);i=g.j+g.f;if(a<g.i+g.g+d){!f?(f=g):c.j-i<c.j-e&&(f=g);e=f.j+f.f}}return !f?0:e+d} +function mA(a){var b,c,d;b=false;d=a.b.c.length;for(c=0;c<d;c++){if(nA(BD(Ikb(a.b,c),434))){if(!b&&c+1<d&&nA(BD(Ikb(a.b,c+1),434))){b=true;BD(Ikb(a.b,c),434).a=true}}else{b=false}}} +function Ahb(a,b,c,d,e){var f,g;f=0;for(g=0;g<e;g++){f=wbb(f,Qbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<c;g++){f=wbb(f,xbb(b[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}} +function Jhb(a,b){Dhb();var c,d;d=(Hgb(),Cgb);c=a;for(;b>1;b>>=1){(b&1)!=0&&(d=Ogb(d,c));c.d==1?(c=Ogb(c,c)):(c=new Xgb(Lhb(c.a,c.d,KC(WD,oje,25,c.d<<1,15,1))))}d=Ogb(d,c);return d} +function zub(){zub=ccb;var a,b,c,d;wub=KC(UD,Vje,25,25,15,1);xub=KC(UD,Vje,25,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){xub[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){wub[a]=c;c*=0.5}} +function S1b(a){var b,c;if(Ccb(DD(hkd(a,(Nyc(),fxc))))){for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);if(Qld(b)){if(Ccb(DD(hkd(b,gxc)))){return true}}}}return false} +function kjc(a,b){var c,d,e;if(Qqb(a.f,b)){b.b=a;d=b.c;Jkb(a.j,d,0)!=-1||Ekb(a.j,d);e=b.d;Jkb(a.j,e,0)!=-1||Ekb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new vjc(a));qjc(a.i,c)}}} +function rmc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p<e.p?0:1}else if(Xcd(d)==f){return 0}else if(Vcd(d)==f){return 1}else{b=a.b;return uqb(b.b,Xcd(d))?0:1}} +function lzc(){lzc=ccb;jzc=new nzc(Aqe,0);hzc=new nzc('LONGEST_PATH',1);fzc=new nzc('COFFMAN_GRAHAM',2);gzc=new nzc(Tne,3);kzc=new nzc('STRETCH_WIDTH',4);izc=new nzc('MIN_WIDTH',5)} +function E3c(a){var b;this.d=new Lqb;this.c=a.c;this.e=a.d;this.b=a.b;this.f=new jgd(a.e);this.a=a.a;!a.f?(this.g=(b=BD(gdb(O3),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.g=a.f)} +function grd(a,b){var c,d,e,f,g,h;e=a;g=$pd(e,'layoutOptions');!g&&(g=$pd(e,Dte));if(g){h=g;d=null;!!h&&(d=(f=$B(h,KC(ZI,nie,2,0,6,1)),new mC(h,f)));if(d){c=new Drd(h,b);reb(d,c)}}} +function atd(a){if(JD(a,239)){return BD(a,33)}else if(JD(a,186)){return mpd(BD(a,118))}else if(!a){throw vbb(new Heb(gue))}else{throw vbb(new cgb('Only support nodes and ports.'))}} +function CA(a,b,c,d){if(b>=0&&dfb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return tA(a,c,d)}if(b>=0&&dfb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return tA(a,c,d)}return tA(a,c,d)} +function tjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.n;e.a=f;a.i==(Ucd(),Acd)?(e.b=g+a.j.b-c.o.b):(e.b=g);P6c(e,b);f+=c.o.a+a.e}} +function Odd(a,b,c){if(a.b){throw vbb(new Zdb('The task is already done.'))}else if(a.p!=null){return false}else{a.p=b;a.r=c;a.k&&(a.o=(Zfb(),Ibb(Cbb(Date.now()),_ie)));return true}} +function hsd(a){var b,c,d,e,f,g,h;h=new eC;c=a.tg();e=c!=null;e&&Upd(h,Vte,a.tg());d=a.ne();f=d!=null;f&&Upd(h,fue,a.ne());b=a.sg();g=b!=null;g&&Upd(h,'description',a.sg());return h} +function uId(a,b,c){var d,e,f;f=a.q;a.q=b;if((a.Db&4)!=0&&(a.Db&1)==0){e=new nSd(a,1,9,f,b);!c?(c=e):c.Ei(e)}if(!b){!!a.r&&(c=a.nk(null,c))}else{d=b.c;d!=a.r&&(c=a.nk(d,c))}return c} +function IYd(a,b,c){var d,e,f,g,h;c=(h=b,kid(h,a.e,-1-a.c,c));g=AYd(a.a);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,a.a),c)}return c} +function JYd(a,b,c){var d,e,f,g,h;c=(h=b,lid(h,a.e,-1-a.c,c));g=AYd(a.a);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,a.a),c)}return c} +function jhb(a,b,c,d){var e,f,g;if(d==0){$fb(b,0,a,c,a.length-c)}else{g=32-d;a[a.length-1]=0;for(f=a.length-1;f>c;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<<d}}for(e=0;e<c;e++){a[e]=0}} +function LJb(a){var b,c,d,e,f;b=0;c=0;for(f=a.Kc();f.Ob();){d=BD(f.Pb(),111);b=$wnd.Math.max(b,d.d.b);c=$wnd.Math.max(c,d.d.c)}for(e=a.Kc();e.Ob();){d=BD(e.Pb(),111);d.d.b=b;d.d.c=c}} +function TKb(a){var b,c,d,e,f;c=0;b=0;for(f=a.Kc();f.Ob();){d=BD(f.Pb(),111);c=$wnd.Math.max(c,d.d.d);b=$wnd.Math.max(b,d.d.a)}for(e=a.Kc();e.Ob();){d=BD(e.Pb(),111);d.d.d=c;d.d.a=b}} +function rpc(a,b){var c,d,e,f;f=new Rkb;e=0;d=b.Kc();while(d.Ob()){c=meb(BD(d.Pb(),19).a+e);while(c.a<a.f&&!Voc(a,c.a)){c=meb(c.a+1);++e}if(c.a>=a.f){break}f.c[f.c.length]=c}return f} +function sfd(a){var b,c,d,e;b=null;for(e=new olb(a.wf());e.a<e.c.c.length;){d=BD(mlb(e),181);c=new J6c(d.qf().a,d.qf().b,d.rf().a,d.rf().b);!b?(b=c):H6c(b,c)}!b&&(b=new I6c);return b} +function Fkd(a,b,c,d){var e,f;if(c==1){return !a.n&&(a.n=new cUd(D2,a,1,7)),Sxd(a.n,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Qj(a,yjd(a),c-aLd(a.zh()),b,d)} +function iud(a,b,c){var d,e,f,g,h;d=c.gc();a.qi(a.i+d);h=a.i-b;h>0&&$fb(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;e<d;++e){f=g.Pb();mud(a,b,a.oi(b,f));a.bi(b,f);a.ci();++b}return d!=0} +function xId(a,b,c){var d;if(b!=a.q){!!a.q&&(c=lid(a.q,a,-10,c));!!b&&(c=kid(b,a,-10,c));c=uId(a,b,c)}else if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,9,b,b);!c?(c=d):c.Ei(d)}return c} +function Yj(a,b,c,d){Mb((c&oie)==0,'flatMap does not support SUBSIZED characteristic');Mb((c&4)==0,'flatMap does not support SORTED characteristic');Qb(a);Qb(b);return new jk(a,c,d,b)} +function Qy(a,b){vCb(b,'Cannot suppress a null exception.');mCb(b!=a,'Exception can not suppress itself.');if(a.i){return}a.k==null?(a.k=OC(GC(_I,1),nie,78,0,[b])):(a.k[a.k.length]=b)} +function oA(a,b,c,d){var e,f,g,h,i,j;g=c.length;f=0;e=-1;j=sfb(a.substr(b),(ntb(),ltb));for(h=0;h<g;++h){i=c[h].length;if(i>f&&nfb(j,sfb(c[h],ltb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} +function MIb(a,b){var c;c=NIb(a.b.Hf(),b.b.Hf());if(c!=0){return c}switch(a.b.Hf().g){case 1:case 2:return beb(a.b.sf(),b.b.sf());case 3:case 4:return beb(b.b.sf(),a.b.sf());}return 0} +function iRb(a){var b,c,d;d=a.e.c.length;a.a=IC(WD,[nie,oje],[48,25],15,[d,d],2);for(c=new olb(a.c);c.a<c.c.c.length;){b=BD(mlb(c),282);a.a[b.c.b][b.d.b]+=BD(vNb(b,(wSb(),oSb)),19).a}} +function H1c(a,b,c){Odd(c,'Grow Tree',1);a.b=b.f;if(Ccb(DD(vNb(b,(XNb(),VNb))))){a.c=new tOb;D1c(a,null)}else{a.c=new tOb}a.a=false;F1c(a,b.f);yNb(b,WNb,(Bcb(),a.a?true:false));Qdd(c)} +function Umd(a,b){var c,d,e,f,g;if(a==null){return null}else{g=KC(TD,$ie,25,2*b,15,1);for(d=0,e=0;d<b;++d){c=a[d]>>4&15;f=a[d]&15;g[e++]=Qmd[c];g[e++]=Qmd[f]}return zfb(g,0,g.length)}} +function j3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,4,d,f,null,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,d.Kj()?2:1,d,f,d.zj(),-1,true);c?c.Ei(e):(c=e);return c} +function wfb(a){var b,c;if(a>=Tje){b=Uje+(a-Tje>>10&1023)&aje;c=56320+(a-Tje&1023)&aje;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&aje)}} +function bKb(a,b){$Jb();var c,d,e,f;e=BD(BD(Qc(a.r,b),21),84);if(e.gc()>=2){d=BD(e.Kc().Pb(),111);c=a.u.Hc((rcd(),mcd));f=a.u.Hc(qcd);return !d.a&&!c&&(e.gc()==2||f)}else{return false}} +function IVc(a,b,c,d,e){var f,g,h;f=JVc(a,b,c,d,e);h=false;while(!f){AVc(a,e,true);h=true;f=JVc(a,b,c,d,e)}h&&AVc(a,e,false);g=dVc(e);if(g.c.length!=0){!!a.d&&a.d.lg(g);IVc(a,e,c,d,g)}} +function Mad(){Mad=ccb;Kad=new Nad(ane,0);Iad=new Nad('DIRECTED',1);Lad=new Nad('UNDIRECTED',2);Gad=new Nad('ASSOCIATION',3);Jad=new Nad('GENERALIZATION',4);Had=new Nad('DEPENDENCY',5)} +function kfd(a,b){var c;if(!mpd(a)){throw vbb(new Zdb(Sse))}c=mpd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0} +function cub(a,b){var c,d;uCb(b);d=a.b.c.length;Ekb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.ue(Ikb(a.b,d),b)<=0){Nkb(a.b,c,b);return true}Nkb(a.b,c,Ikb(a.b,d))}Nkb(a.b,d,b);return true} +function BHb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f<sHb;f++){e=$wnd.Math.max(e,qHb(a.a[f][b.g],d))}}else{e=qHb(a.a[c.g][b.g],d)}b==(gHb(),eHb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.a));return e} +function knc(a,b){var c,d,e,f,g,h;e=a.i;f=b.i;if(!e||!f){return false}if(e.i!=f.i||e.i==(Ucd(),zcd)||e.i==(Ucd(),Tcd)){return false}g=e.g.a;c=g+e.j.a;h=f.g.a;d=h+f.j.a;return g<=d&&c>=h} +function Tpd(a,b,c,d){var e;e=false;if(ND(d)){e=true;Upd(b,c,GD(d))}if(!e){if(KD(d)){e=true;Tpd(a,b,c,d)}}if(!e){if(JD(d,236)){e=true;Spd(b,c,BD(d,236))}}if(!e){throw vbb(new vcb(Ute))}} +function W0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),K6d).length;++d){if(dfb(K6d[d],e)){return d}}}}return 0} +function X0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),L6d).length;++d){if(dfb(L6d[d],e)){return d}}}}return 0} +function Ve(a,b){var c,d,e,f;uCb(b);f=a.a.gc();if(f<b.gc()){for(c=a.a.ec().Kc();c.Ob();){d=c.Pb();b.Hc(d)&&c.Qb()}}else{for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Bc(d)!=null}}return f!=a.a.gc()} +function bYb(a){var b,c;c=R6c(l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])));b=a.i.d;switch(a.j.g){case 1:c.b-=b.d;break;case 2:c.a+=b.c;break;case 3:c.b+=b.a;break;case 4:c.a-=b.b;}return c} +function P9b(a){var b;b=(I9b(),BD(Rr(new Sr(ur(R_b(a).a.Kc(),new Sq))),17).c.i);while(b.k==(j0b(),g0b)){yNb(b,(wtc(),Tsc),(Bcb(),true));b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i}} +function bIc(a,b,c,d){var e,f,g,h;h=CHc(b,d);for(g=h.Kc();g.Ob();){e=BD(g.Pb(),11);a.d[e.p]=a.d[e.p]+a.c[c.p]}h=CHc(c,d);for(f=h.Kc();f.Ob();){e=BD(f.Pb(),11);a.d[e.p]=a.d[e.p]-a.c[b.p]}} +function Efd(a,b,c){var d,e;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);bld(d,d.i+b,d.j+c)}reb((!a.b&&(a.b=new cUd(B2,a,12,3)),a.b),new Kfd(b,c))} +function Mwb(a,b,c,d){var e,f;f=b;e=f.d==null||a.a.ue(c.d,f.d)>0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.ue(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} +function ucd(a){rcd();var b,c;b=qqb(ncd,OC(GC(E1,1),Kie,273,0,[pcd]));if(Ox(Cx(b,a))>1){return false}c=qqb(mcd,OC(GC(E1,1),Kie,273,0,[lcd,qcd]));if(Ox(Cx(c,a))>1){return false}return true} +function fod(a,b){var c;c=Phb((yFd(),xFd),a);JD(c,498)?Shb(xFd,a,new bUd(this,b)):Shb(xFd,a,this);bod(this,b);if(b==(LFd(),KFd)){this.wb=BD(this,1939);BD(b,1941)}else{this.wb=(NFd(),MFd)}} +function lZd(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d<Pmd.length;++d){try{return DQd(Pmd[d],b)}catch(a){a=ubb(a);if(JD(a,32)){e=a;c=e}else throw vbb(a)}}throw vbb(new rFd(c))} +function Dpb(){Dpb=ccb;Bpb=OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']);Cpb=OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])} +function yyb(a){var b,c,d;b=dfb(typeof(b),uke)?null:new iCb;if(!b){return}$xb();c=(d=900,d>=_ie?'error':d>=900?'warn':d>=800?'info':'log');gCb(c,a.a);!!a.b&&hCb(b,c,a.b,'Exception: ',true)} +function vNb(a,b){var c,d;d=(!a.q&&(a.q=new Lqb),Ohb(a.q,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a);return c} +function qUb(){qUb=ccb;lUb=new rUb('P1_CYCLE_BREAKING',0);mUb=new rUb('P2_LAYERING',1);nUb=new rUb('P3_NODE_ORDERING',2);oUb=new rUb('P4_NODE_PLACEMENT',3);pUb=new rUb('P5_EDGE_ROUTING',4)} +function SUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Lkb(a.b.b,f.b);Lkb(a.b.a,BD(f.b,81).d)}}} +function IWb(a,b){AWb();var c;if(a.c==b.c){if(a.b==b.b||pWb(a.b,b.b)){c=mWb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return beb(a.b.g,b.b.g)}else{return Kdb(a.c,b.c)}} +function y6b(a,b){var c;Odd(b,'Hierarchical port position processing',1);c=a.b;c.c.length>0&&x6b((tCb(0,c.c.length),BD(c.c[0],29)),a);c.c.length>1&&x6b(BD(Ikb(c,c.c.length-1),29),a);Qdd(b)} +function RVc(a,b){var c,d,e;if(CVc(a,b)){return true}for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),33);e=hVc(c);if(BVc(a,c,e)){return true}if(PVc(a,c)-a.g<=a.a){return true}}return false} +function d0c(){d0c=ccb;c0c=(A0c(),z0c);__c=v0c;$_c=t0c;Y_c=p0c;Z_c=r0c;X_c=new q0b(8);W_c=new Osd((Y9c(),f9c),X_c);a0c=new Osd(T9c,8);b0c=x0c;T_c=k0c;U_c=m0c;V_c=new Osd(y8c,(Bcb(),false))} +function X7c(){X7c=ccb;U7c=new q0b(15);T7c=new Osd((Y9c(),f9c),U7c);W7c=new Osd(T9c,15);V7c=new Osd(D9c,meb(0));O7c=I8c;Q7c=Y8c;S7c=b9c;L7c=new Osd(r8c,pse);P7c=O8c;R7c=_8c;M7c=t8c;N7c=w8c} +function jtd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))} +function ktd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))} +function mtd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))} +function ltd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))} +function Dvd(a,b,c){var d,e,f;++a.j;e=a.Vi();if(b>=e||b<0)throw vbb(new qcb(lue+b+mue+e));if(c>=e||c<0)throw vbb(new qcb(nue+c+mue+e));b!=c?(d=(f=a.Ti(c),a.Hi(b,f),f)):(d=a.Oi(c));return d} +function m6d(a){var b,c,d;d=a;if(a){b=0;for(c=a.Ug();c;c=c.Ug()){if(++b>Wje){return m6d(c)}d=c;if(c==a){throw vbb(new Zdb('There is a cycle in the containment hierarchy of '+a))}}}return d} +function Fe(a){var b,c,d;d=new xwb(She,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();uwb(d,PD(b)===PD(a)?'(this Collection)':b==null?Xhe:fcb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function CVc(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;c<b.gc();c++){c<b.gc()-1?(d=d|BVc(a,BD(b.Xb(c),33),BD(b.Xb(c+1),33))):(d=d|BVc(a,BD(b.Xb(c),33),BD(b.Xb(0),33)))}return d} +function Ymd(a,b){var c;if(b!=a.a){c=null;!!a.a&&(c=BD(a.a,49).ih(a,4,o5,c));!!b&&(c=BD(b,49).gh(a,4,o5,c));c=Tmd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,b,b))} +function RQd(a,b){var c;if(b!=a.e){!!a.e&&QYd(AYd(a.e),a);!!b&&(!b.b&&(b.b=new RYd(new NYd)),PYd(b.b,a));c=HQd(a,b,null);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))} +function ufb(a){var b,c,d;c=a.length;d=0;while(d<c&&(BCb(d,a.length),a.charCodeAt(d)<=32)){++d}b=c;while(b>d&&(BCb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b<c?a.substr(d,b-d):a} +function ujc(a,b){var c;c=b.o;if(fad(a.f)){a.j.a=$wnd.Math.max(a.j.a,c.a);a.j.b+=c.b;a.d.c.length>1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}} +function gkc(){gkc=ccb;dkc=OC(GC(F1,1),bne,61,0,[(Ucd(),Acd),zcd,Rcd]);ckc=OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd]);ekc=OC(GC(F1,1),bne,61,0,[Rcd,Tcd,Acd]);fkc=OC(GC(F1,1),bne,61,0,[Tcd,Acd,zcd])} +function omc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?Xcd(e):Vcd(e);f=umc(e,k.d[e.g],c);j=umc(i,k.d[i.g],c);Dsb(d,P6c(f,j));e=i}} +function oFc(a,b,c,d){var e,f,g,h,i;g=JHc(a.a,b,c);h=BD(g.a,19).a;f=BD(g.b,19).a;if(d){i=BD(vNb(b,(wtc(),gtc)),10);e=BD(vNb(c,gtc),10);if(!!i&&!!e){mic(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} +function oHc(a){var b,c,d,e,f,g,h,i,j;this.a=lHc(a);this.b=new Rkb;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=new Rkb;Ekb(this.b,f);for(h=b,i=0,j=h.length;i<j;++i){g=h[i];Ekb(f,new Tkb(g.j))}}} +function qHc(a,b,c){var d,e,f;f=0;d=c[b];if(b<c.length-1){e=c[b+1];if(a.b[b]){f=KIc(a.d,d,e);f+=NHc(a.a,d,(Ucd(),zcd));f+=NHc(a.a,e,Tcd)}else{f=IHc(a.a,d,e)}}a.c[b]&&(f+=PHc(a.a,d));return f} +function jZb(a,b,c,d,e){var f,g,h,i;i=null;for(h=new olb(d);h.a<h.c.c.length;){g=BD(mlb(h),441);if(g!=c&&Jkb(g.e,e,0)!=-1){i=g;break}}f=kZb(e);QZb(f,c.b);RZb(f,i.b);Rc(a.a,e,new BZb(f,b,c.f))} +function nic(a){while(a.g.c!=0&&a.d.c!=0){if(wic(a.g).c>wic(a.d).c){a.i+=a.g.c;yic(a.d)}else if(wic(a.d).c>wic(a.g).c){a.e+=a.d.c;yic(a.g)}else{a.i+=vic(a.g);a.e+=vic(a.d);yic(a.g);yic(a.d)}}} +function XOc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new DOc((HOc(),FOc),b,f,1);new DOc(FOc,f,g,1);for(e=new olb(c);e.a<e.c.c.length;){d=BD(mlb(e),112);if(d!=f&&d!=b&&d!=g){pPc(a.a,d,b);pPc(a.a,d,g)}}} +function XQc(a,b,c,d){a.a.d=$wnd.Math.min(b,c);a.a.a=$wnd.Math.max(b,d)-a.a.d;if(b<c){a.b=0.5*(b+c);a.g=Qqe*a.b+0.9*b;a.f=Qqe*a.b+0.9*c}else{a.b=0.5*(b+d);a.g=Qqe*a.b+0.9*d;a.f=Qqe*a.b+0.9*b}} +function acb(){_bb={};!Array.isArray&&(Array.isArray=function(a){return Object.prototype.toString.call(a)==='[object Array]'});function b(){return (new Date).getTime()} +!Date.now&&(Date.now=b)} +function $Tb(a,b){var c,d;d=BD(vNb(b,(Nyc(),Vxc)),98);yNb(b,(wtc(),dtc),d);c=b.e;!!c&&(MAb(new YAb(null,new Kub(c.a,16)),new dUb(a)),MAb(LAb(new YAb(null,new Kub(c.b,16)),new fUb),new hUb(a)))} +function _$b(a){var b,c,d,e;if(gad(BD(vNb(a.b,(Nyc(),Lwc)),103))){return 0}b=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(c.k==(j0b(),h0b)){e=c.o.a;b=$wnd.Math.max(b,e)}}return b} +function c5b(a){switch(BD(vNb(a,(Nyc(),mxc)),163).g){case 1:yNb(a,mxc,(Ctc(),ztc));break;case 2:yNb(a,mxc,(Ctc(),Atc));break;case 3:yNb(a,mxc,(Ctc(),xtc));break;case 4:yNb(a,mxc,(Ctc(),ytc));}} +function yrc(){yrc=ccb;wrc=new zrc(ane,0);trc=new zrc(jle,1);xrc=new zrc(kle,2);vrc=new zrc('LEFT_RIGHT_CONSTRAINT_LOCKING',3);urc=new zrc('LEFT_RIGHT_CONNECTION_LOCKING',4);rrc=new zrc(Vne,5)} +function qRc(a,b,c){var d,e,f,g,h,i,j;h=c.a/2;f=c.b/2;d=$wnd.Math.abs(b.a-a.a);e=$wnd.Math.abs(b.b-a.b);i=1;j=1;d>h&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} +function sZc(a,b,c,d,e){var f,g;g=false;f=BD(Ikb(c.b,0),33);while(yZc(a,b,f,d,e)){g=true;NZc(c,f);if(c.b.c.length==0){break}f=BD(Ikb(c.b,0),33)}c.b.c.length==0&&v$c(c.j,c);g&&a$c(b.q);return g} +function t6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(s6c(a,d,e)){return true}d=e}if(s6c(a,d,c)){return true}return false} +function ckd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),bId(a.o,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Rj(a,yjd(a),c-aLd(a.zh()),b,d)} +function bod(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=BD(a.sb,49).ih(a,1,i5,c));!!b&&(c=BD(b,49).gh(a,1,i5,c));c=Jnd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))} +function yqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new zrd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new Ard(a);imd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need an end point.'))}} +function wqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new wrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new xrd(a);pmd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need a start point.'))}} +function pyb(a,b){var c,d,e,f,g,h,i;for(d=syb(a),f=0,h=d.length;f<h;++f){yyb(b)}i=!lyb&&a.e?lyb?null:a.d:null;while(i){for(c=syb(i),e=0,g=c.length;e<g;++e){yyb(b)}i=!lyb&&i.e?lyb?null:i.d:null}} +function j0b(){j0b=ccb;h0b=new k0b('NORMAL',0);g0b=new k0b('LONG_EDGE',1);e0b=new k0b('EXTERNAL_PORT',2);i0b=new k0b('NORTH_SOUTH_PORT',3);f0b=new k0b('LABEL',4);d0b=new k0b('BREAKING_POINT',5)} +function g4b(a){var b,c,d,e;b=false;if(wNb(a,(wtc(),Csc))){c=BD(vNb(a,Csc),83);for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);if(e4b(d)){if(!b){d4b(Q_b(a));b=true}h4b(BD(c.xc(d),306))}}}} +function qec(a,b,c){var d;Odd(c,'Self-Loop routing',1);d=rec(b);RD(vNb(b,(g6c(),f6c)));MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new uec),new wec),new yec),new Aec),new Cec(a,d));Qdd(c)} +function gsd(a){var b,c,d,e,f,g,h,i,j;j=hsd(a);c=a.e;f=c!=null;f&&Upd(j,eue,a.e);h=a.k;g=!!h;g&&Upd(j,'type',Zr(a.k));d=Fhe(a.j);e=!d;if(e){i=new wB;cC(j,Mte,i);b=new ssd(i);reb(a.j,b)}return j} +function Jv(a){var b,c,d,e;e=Kfb((Xj(a.gc(),'size'),new Vfb),123);d=true;for(c=Wm(a).Kc();c.Ob();){b=BD(c.Pb(),42);d||(e.a+=She,e);d=false;Pfb(Kfb(Pfb(e,b.cd()),61),b.dd())}return (e.a+='}',e).a} +function kD(a,b){var c,d,e;b&=63;if(b<22){c=a.l<<b;d=a.m<<b|a.l>>22-b;e=a.h<<b|a.m>>22-b}else if(b<44){c=0;d=a.l<<b-22;e=a.m<<b-22|a.l>>44-b}else{c=0;d=0;e=a.l<<b-44}return TC(c&Eje,d&Eje,e&Fje)} +function Hcb(a){Gcb==null&&(Gcb=new RegExp('^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$'));if(!Gcb.test(a)){throw vbb(new Oeb(Oje+a+'"'))}return parseFloat(a)} +function IFb(a){var b,c,d,e;b=new Rkb;c=KC(sbb,dle,25,a.a.c.length,16,1);Glb(c,c.length);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),121);if(!c[d.d]){b.c[b.c.length]=d;HFb(a,d,c)}}return b} +function Nmc(a,b){var c,d,e,f;f=b.b.j;a.a=KC(WD,oje,25,f.c.length,15,1);e=0;for(d=0;d<f.c.length;d++){c=(tCb(d,f.c.length),BD(f.c[d],11));c.e.c.length==0&&c.g.c.length==0?(e+=1):(e+=3);a.a[d]=e}} +function Sqc(){Sqc=ccb;Nqc=new Uqc('ALWAYS_UP',0);Mqc=new Uqc('ALWAYS_DOWN',1);Pqc=new Uqc('DIRECTION_UP',2);Oqc=new Uqc('DIRECTION_DOWN',3);Rqc=new Uqc('SMART_UP',4);Qqc=new Uqc('SMART_DOWN',5)} +function k6c(a,b){if(a<0||b<0){throw vbb(new Wdb('k and n must be positive'))}else if(b>a){throw vbb(new Wdb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:q6c(a)/(q6c(b)*q6c(a-b))} +function jfd(a,b){var c,d,e,f;c=new _ud(a);while(c.g==null&&!c.c?Uud(c):c.g==null||c.i!=0&&BD(c.g[c.i-1],47).Ob()){f=BD(Vud(c),56);if(JD(f,160)){d=BD(f,160);for(e=0;e<b.length;e++){b[e].og(d)}}}} +function fld(a){var b;if((a.Db&64)!=0)return Mkd(a);b=new Jfb(Mkd(a));b.a+=' (height: ';Bfb(b,a.f);b.a+=', width: ';Bfb(b,a.g);b.a+=', x: ';Bfb(b,a.i);b.a+=', y: ';Bfb(b,a.j);b.a+=')';return b.a} +function un(a){var b,c,d,e,f,g,h;b=new $rb;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];g=Qb(c.cd());h=Xrb(b,g,Qb(c.dd()));if(h!=null){throw vbb(new Wdb('duplicate key: '+g))}}this.b=(mmb(),new iob(b))} +function Rlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,String.fromCharCode(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function SRb(){SRb=ccb;MRb=(XRb(),WRb);LRb=new Nsd(mme,MRb);meb(1);KRb=new Nsd(nme,meb(300));meb(0);PRb=new Nsd(ome,meb(0));new Tfd;QRb=new Nsd(pme,qme);new Tfd;NRb=new Nsd(rme,5);RRb=WRb;ORb=VRb} +function NUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Ekb(a.b.b,BD(f.b,81));Ekb(a.b.a,BD(f.b,81).d)}}} +function kVd(a,b){var c;if(b!=null&&!a.c.Yj().wj(b)){c=JD(b,56)?BD(b,56).Tg().zb:hdb(rb(b));throw vbb(new Cdb(ite+a.c.ne()+"'s type '"+a.c.Yj().ne()+"' does not permit a value of type '"+c+"'"))}} +function cZb(a,b,c){var d,e;e=new Bib(a.b,0);while(e.b<e.d.gc()){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),70));if(PD(vNb(d,(wtc(),btc)))!==PD(b)){continue}Y$b(d.n,Q_b(a.c.i),c);uib(e);Ekb(b.b,d)}} +function vdc(a,b){if(b.a){switch(BD(vNb(b.b,(wtc(),dtc)),98).g){case 0:case 1:llc(b);case 2:MAb(new YAb(null,new Kub(b.d,16)),new Idc);wkc(a.a,b);}}else{MAb(new YAb(null,new Kub(b.d,16)),new Idc)}} +function Znc(a){var b,c;c=$wnd.Math.sqrt((a.k==null&&(a.k=Soc(a,new bpc)),Edb(a.k)/(a.b*(a.g==null&&(a.g=Poc(a,new _oc)),Edb(a.g)))));b=Tbb(Cbb($wnd.Math.round(c)));b=$wnd.Math.min(b,a.f);return b} +function H0b(){z0b();n_b.call(this);this.j=(Ucd(),Scd);this.a=new d7c;new L_b;this.f=(Xj(2,Jie),new Skb(2));this.e=(Xj(4,Jie),new Skb(4));this.g=(Xj(4,Jie),new Skb(4));this.b=new Z0b(this.e,this.g)} +function j3b(a,b){var c,d;if(Ccb(DD(vNb(b,(wtc(),ltc))))){return false}d=b.c.i;if(a==(Ctc(),xtc)){if(d.k==(j0b(),f0b)){return false}}c=BD(vNb(d,(Nyc(),mxc)),163);if(c==ytc){return false}return true} +function k3b(a,b){var c,d;if(Ccb(DD(vNb(b,(wtc(),ltc))))){return false}d=b.d.i;if(a==(Ctc(),ztc)){if(d.k==(j0b(),f0b)){return false}}c=BD(vNb(d,(Nyc(),mxc)),163);if(c==Atc){return false}return true} +function L3b(a,b){var c,d,e,f,g,h,i;g=a.d;i=a.o;h=new J6c(-g.b,-g.d,g.b+i.a+g.c,g.d+i.b+g.a);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];!!c&&H6c(h,c.i)}g.b=-h.c;g.d=-h.d;g.c=h.b-g.b-i.a;g.a=h.a-g.d-i.b} +function N_c(){N_c=ccb;I_c=new O_c('CENTER_DISTANCE',0);J_c=new O_c('CIRCLE_UNDERLAP',1);M_c=new O_c('RECTANGLE_UNDERLAP',2);K_c=new O_c('INVERTED_OVERLAP',3);L_c=new O_c('MINIMUM_ROOT_DISTANCE',4)} +function jde(a){hde();var b,c,d,e,f;if(a==null)return null;d=a.length;e=d*2;b=KC(TD,$ie,25,e,15,1);for(c=0;c<d;c++){f=a[c];f<0&&(f+=256);b[c*2]=gde[f>>4];b[c*2+1]=gde[f&15]}return zfb(b,0,b.length)} +function fn(a){Vm();var b,c,d;d=a.c.length;switch(d){case 0:return Um;case 1:b=BD(qr(new olb(a)),42);return ln(b.cd(),b.dd());default:c=BD(Qkb(a,KC(CK,zie,42,a.c.length,0,1)),165);return new wx(c);}} +function ITb(a){var b,c,d,e,f,g;b=new jkb;c=new jkb;Wjb(b,a);Wjb(c,a);while(c.b!=c.c){e=BD(fkb(c),37);for(g=new olb(e.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.e){d=f.e;Wjb(b,d);Wjb(c,d)}}}return b} +function Y_b(a,b){switch(b.g){case 1:return Nq(a.j,(z0b(),v0b));case 2:return Nq(a.j,(z0b(),t0b));case 3:return Nq(a.j,(z0b(),x0b));case 4:return Nq(a.j,(z0b(),y0b));default:return mmb(),mmb(),jmb;}} +function tic(a,b){var c,d,e;c=uic(b,a.e);d=BD(Ohb(a.g.f,c),19).a;e=a.a.c.length-1;if(a.a.c.length!=0&&BD(Ikb(a.a,e),287).c==d){++BD(Ikb(a.a,e),287).a;++BD(Ikb(a.a,e),287).b}else{Ekb(a.a,new Dic(d))}} +function VGc(a,b,c){var d,e;d=UGc(a,b,c);if(d!=0){return d}if(wNb(b,(wtc(),Zsc))&&wNb(c,Zsc)){e=beb(BD(vNb(b,Zsc),19).a,BD(vNb(c,Zsc),19).a);e<0?WGc(a,b,c):e>0&&WGc(a,c,b);return e}return TGc(a,b,c)} +function MSc(a,b,c){var d,e,f,g;if(b.b!=0){d=new Psb;for(g=Jsb(b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);ye(d,URc(f));e=f.e;e.a=BD(vNb(f,(mTc(),kTc)),19).a;e.b=BD(vNb(f,lTc),19).a}MSc(a,d,Udd(c,d.b/a.a|0))}} +function JZc(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(LZc(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+1<f){c=MZc(a,e,false);if(c.b<=e&&c.a<=b){g=e;f=e}else{d=e}e=(f-d)/2+d}return g} +function t2c(a,b,c){var d;d=o2c(a,b,true);Odd(c,'Recursive Graph Layout',d);jfd(b,OC(GC(g2,1),Uhe,527,0,[new q3c]));ikd(b,(Y9c(),F9c))||jfd(b,OC(GC(g2,1),Uhe,527,0,[new U3c]));u2c(a,b,null,c);Qdd(c)} +function Qdd(a){var b;if(a.p==null){throw vbb(new Zdb('The task has not begun yet.'))}if(!a.b){if(a.k){b=(Zfb(),Ibb(Cbb(Date.now()),_ie));a.q=Sbb(Qbb(b,a.o))*1.0E-9}a.c<a.r&&Rdd(a,a.r-a.c);a.b=true}} +function ofd(a){var b,c,d;d=new s7c;Dsb(d,new f7c(a.j,a.k));for(c=new Fyd((!a.a&&(a.a=new xMd(y2,a,5)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),469);Dsb(d,new f7c(b.a,b.b))}Dsb(d,new f7c(a.b,a.c));return d} +function qqd(a,b,c,d,e){var f,g,h,i,j,k;if(e){i=e.a.length;f=new Yge(i);for(k=(f.b-f.a)*f.c<0?(Xge(),Wge):new she(f);k.Ob();){j=BD(k.Pb(),19);h=Zpd(e,j.a);g=new prd(a,b,c,d);rqd(g.a,g.b,g.c,g.d,h)}}} +function Ax(b,c){var d;if(PD(b)===PD(c)){return true}if(JD(c,21)){d=BD(c,21);try{return b.gc()==d.gc()&&b.Ic(d)}catch(a){a=ubb(a);if(JD(a,173)||JD(a,205)){return false}else throw vbb(a)}}return false} +function UHb(a,b){var c;Ekb(a.d,b);c=b.rf();if(a.c){a.e.a=$wnd.Math.max(a.e.a,c.a);a.e.b+=c.b;a.d.c.length>1&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} +function cmc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}} +function Q6c(a,b,c,d,e){if(d<b||e<c){throw vbb(new Wdb('The highx must be bigger then lowx and the highy must be bigger then lowy'))}a.a<b?(a.a=b):a.a>d&&(a.a=d);a.b<c?(a.b=c):a.b>e&&(a.b=e);return a} +function lsd(a){if(JD(a,149)){return esd(BD(a,149))}else if(JD(a,229)){return fsd(BD(a,229))}else if(JD(a,23)){return gsd(BD(a,23))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[a])))))}} +function mhb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g<d;g++){f=f&c[g]==0}if(e==0){$fb(c,d,a,0,b);g=b}else{h=32-e;f=f&c[g]<<h==0;for(g=0;g<b-1;g++){a[g]=c[g+d]>>>e|c[g+d+1]<<h}a[g]=c[g+d]>>>e;++g}return f} +function zMc(a,b,c,d){var e,f,g;if(b.k==(j0b(),g0b)){for(f=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);g=e.c.i.k;if(g==g0b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false} +function mD(a,b){var c,d,e,f;b&=63;c=a.h&Fje;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return TC(d&Eje,e&Eje,f&Fje)} +function Iic(a,b,c,d){var e;this.b=d;this.e=a==(rGc(),pGc);e=b[c];this.d=IC(sbb,[nie,dle],[177,25],16,[e.length,e.length],2);this.a=IC(WD,[nie,oje],[48,25],15,[e.length,e.length],2);this.c=new sic(b,c)} +function ljc(a){var b,c,d;a.k=new Ki((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,a.j.c.length);for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),113);b=c.d.j;Rc(a.k,b,c)}a.e=Zjc(Ec(a.k))} +function UQc(a,b){var c,d,e;Qqb(a.d,b);c=new _Qc;Rhb(a.c,b,c);c.f=VQc(b.c);c.a=VQc(b.d);c.d=(hQc(),e=b.c.i.k,e==(j0b(),h0b)||e==d0b);c.e=(d=b.d.i.k,d==h0b||d==d0b);c.b=b.c.j==(Ucd(),Tcd);c.c=b.d.j==zcd} +function BGb(a){var b,c,d,e,f;f=Ohe;e=Ohe;for(d=new olb(LFb(a));d.a<d.c.c.length;){c=BD(mlb(d),213);b=c.e.e-c.d.e;c.e==a&&b<e?(e=b):b<f&&(f=b)}e==Ohe&&(e=-1);f==Ohe&&(f=-1);return new vgd(meb(e),meb(f))} +function zQb(a,b){var c,d,e;e=dme;d=(ROb(),OOb);e=$wnd.Math.abs(a.b);c=$wnd.Math.abs(b.f-a.b);if(c<e){e=c;d=POb}c=$wnd.Math.abs(a.a);if(c<e){e=c;d=QOb}c=$wnd.Math.abs(b.g-a.a);if(c<e){e=c;d=NOb}return d} +function L9b(a,b){var c,d,e,f;c=b.a.o.a;f=new Jib(Q_b(b.a).b,b.c,b.f+1);for(e=new vib(f);e.b<e.d.gc();){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),29));if(d.c.a>=c){K9b(a,b,d.p);return true}}return false} +function Iod(a){var b;if((a.Db&64)!=0)return fld(a);b=new Wfb(dte);!a.a||Qfb(Qfb((b.a+=' "',b),a.a),'"');Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function Z2d(a,b,c){var d,e,f,g,h;h=S6d(a.e.Tg(),b);e=BD(a.g,119);d=0;for(g=0;g<a.i;++g){f=e[g];if(h.rl(f.ak())){if(d==c){Xxd(a,g);return Q6d(),BD(b,66).Oj()?f:f.dd()}++d}}throw vbb(new qcb(gve+c+mue+d))} +function sde(a){var b,c,d;b=a.c;if(b==2||b==7||b==1){return wfe(),wfe(),ffe}else{d=qde(a);c=null;while((b=a.c)!=2&&b!=7&&b!=1){if(!c){c=(wfe(),wfe(),++vfe,new Lge(1));Kge(c,d);d=c}Kge(c,qde(a))}return d}} +function Kb(a,b,c){if(a<0||a>c){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',OC(GC(SI,1),Uhe,1,5,[meb(b),meb(a)]))} +function Pz(b,c){var d,e,f,g;for(e=0,f=b.length;e<f;e++){g=b[e];try{g[1]?g[0].jm()&&(c=Oz(c,g)):g[0].jm()}catch(a){a=ubb(a);if(JD(a,78)){d=a;Az();Gz(JD(d,477)?BD(d,477).ae():d)}else throw vbb(a)}}return c} +function K9b(a,b,c){var d,e,f;c!=b.c+b.b.gc()&&Z9b(b.a,fac(b,c-b.c));f=b.a.c.p;a.a[f]=$wnd.Math.max(a.a[f],b.a.o.a);for(e=BD(vNb(b.a,(wtc(),ktc)),15).Kc();e.Ob();){d=BD(e.Pb(),70);yNb(d,H9b,(Bcb(),true))}} +function Wec(a,b){var c,d,e;e=Vec(b);yNb(b,(wtc(),Xsc),e);if(e){d=Ohe;!!irb(a.f,e)&&(d=BD(Wd(irb(a.f,e)),19).a);c=BD(Ikb(b.g,0),17);Ccb(DD(vNb(c,ltc)))||Rhb(a,e,meb($wnd.Math.min(BD(vNb(c,Zsc),19).a,d)))}} +function iCc(a,b,c){var d,e,f,g,h;b.p=-1;for(h=W_b(b,(KAc(),IAc)).Kc();h.Ob();){g=BD(h.Pb(),11);for(e=new olb(g.g);e.a<e.c.c.length;){d=BD(mlb(e),17);f=d.d.i;b!=f&&(f.p<0?c.Fc(d):f.p>0&&iCc(a,f,c))}}b.p=0} +function p5c(a){var b;this.c=new Psb;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=BD(gdb(e1),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.j=a.i);this.g=a.f} +function Wb(a){var b,c,d,e;b=Kfb(Qfb(new Wfb('Predicates.'),'and'),40);c=true;for(e=new vib(a);e.b<e.d.gc();){d=(sCb(e.b<e.d.gc()),e.d.Xb(e.c=e.b++));c||(b.a+=',',b);b.a+=''+d;c=false}return (b.a+=')',b).a} +function Rcc(a,b,c){var d,e,f;if(c<=b+2){return}e=(c-b)/2|0;for(d=0;d<e;++d){f=(tCb(b+d,a.c.length),BD(a.c[b+d],11));Nkb(a,b+d,(tCb(c-d-1,a.c.length),BD(a.c[c-d-1],11)));tCb(c-d-1,a.c.length);a.c[c-d-1]=f}} +function hjc(a,b,c){var d,e,f,g,h,i,j,k;f=a.d.p;h=f.e;i=f.r;a.g=new dIc(i);g=a.d.o.c.p;d=g>0?h[g-1]:KC(OQ,kne,10,0,0,1);e=h[g];j=g<h.length-1?h[g+1]:KC(OQ,kne,10,0,0,1);k=b==c-1;k?RHc(a.g,e,j):RHc(a.g,d,e)} +function pjc(a){var b;this.j=new Rkb;this.f=new Tqb;this.b=(b=BD(gdb(F1),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.d=KC(WD,oje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.g=a} +function QVc(a,b){var c,d,e;if(b.c.length!=0){c=RVc(a,b);e=false;while(!c){AVc(a,b,true);e=true;c=RVc(a,b)}e&&AVc(a,b,false);d=dVc(b);!!a.b&&a.b.lg(d);a.a=PVc(a,(tCb(0,b.c.length),BD(b.c[0],33)));QVc(a,d)}} +function Cid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();if(c<0){if(!d){throw vbb(new Wdb(mte+b+nte))}else if(d.Ij()){e=a.Yg(d);e>=0?a.Bh(e):vid(a,d)}else{throw vbb(new Wdb(ite+d.ne()+jte))}}else{eid(a,c,d)}} +function aqd(a){var b,c;c=null;b=false;if(JD(a,204)){b=true;c=BD(a,204).a}if(!b){if(JD(a,258)){b=true;c=''+BD(a,258).a}}if(!b){if(JD(a,483)){b=true;c=''+BD(a,483).a}}if(!b){throw vbb(new vcb(Ute))}return c} +function ORd(a,b){var c,d;if(a.f){while(b.Ob()){c=BD(b.Pb(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Ub();return true}}return false}else{return b.Ob()}} +function QRd(a,b){var c,d;if(a.f){while(b.Sb()){c=BD(b.Ub(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Pb();return true}}return false}else{return b.Sb()}} +function I2d(a,b,c){var d,e,f,g,h,i;i=S6d(a.e.Tg(),b);d=0;h=a.i;e=BD(a.g,119);for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){if(c==d){return g}++d;h=g+1}}if(c==d){return h}else{throw vbb(new qcb(gve+c+mue+d))}} +function d9b(a,b){var c,d,e,f;if(a.f.c.length==0){return null}else{f=new I6c;for(d=new olb(a.f);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.o;f.b=$wnd.Math.max(f.b,e.a);f.a+=e.b}f.a+=(a.f.c.length-1)*b;return f}} +function QJc(a,b,c){var d,e,f;for(e=new Sr(ur(O_b(c).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(!(!OZb(d)&&!(!OZb(d)&&d.c.i.c==d.d.i.c))){continue}f=IJc(a,d,c,new vKc);f.c.length>1&&(b.c[b.c.length]=f,true)}} +function TJc(a){var b,c,d,e;c=new Psb;ye(c,a.o);d=new twb;while(c.b!=0){b=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),508);e=KJc(a,b,true);e&&Ekb(d.a,b)}while(d.a.c.length!=0){b=BD(rwb(d),508);KJc(a,b,false)}} +function _5c(){_5c=ccb;$5c=new a6c(ole,0);T5c=new a6c('BOOLEAN',1);X5c=new a6c('INT',2);Z5c=new a6c('STRING',3);U5c=new a6c('DOUBLE',4);V5c=new a6c('ENUM',5);W5c=new a6c('ENUMSET',6);Y5c=new a6c('OBJECT',7)} +function H6c(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e<d){c=d;d=e;e=c}if(g<f){c=f;f=g;g=c}G6c(a,d,f,e-d,g-f)} +function O6d(){O6d=ccb;L6d=OC(GC(ZI,1),nie,2,6,[swe,twe,uwe,vwe,wwe,xwe,eue]);K6d=OC(GC(ZI,1),nie,2,6,[swe,'empty',twe,Qve,'elementOnly']);N6d=OC(GC(ZI,1),nie,2,6,[swe,'preserve','replace',ywe]);M6d=new y1d} +function Y$b(a,b,c){var d,e,f;if(b==c){return}d=b;do{P6c(a,d.c);e=d.e;if(e){f=d.d;O6c(a,f.b,f.d);P6c(a,e.n);d=Q_b(e)}}while(e);d=c;do{c7c(a,d.c);e=d.e;if(e){f=d.d;b7c(a,f.b,f.d);c7c(a,e.n);d=Q_b(e)}}while(e)} +function qic(a,b,c,d){var e,f,g,h,i;if(d.f.c+d.g.c==0){for(g=a.a[a.c],h=0,i=g.length;h<i;++h){f=g[h];Rhb(d,f,new zic(a,f,c))}}e=BD(Wd(irb(d.f,b)),663);e.b=0;e.c=e.f;e.c==0||Cic(BD(Ikb(e.a,e.b),287));return e} +function Apc(){Apc=ccb;wpc=new Bpc('MEDIAN_LAYER',0);ypc=new Bpc('TAIL_LAYER',1);vpc=new Bpc('HEAD_LAYER',2);xpc=new Bpc('SPACE_EFFICIENT_LAYER',3);zpc=new Bpc('WIDEST_LAYER',4);upc=new Bpc('CENTER_LAYER',5)} +function rJb(a){switch(a.g){case 0:case 1:case 2:return Ucd(),Acd;case 3:case 4:case 5:return Ucd(),Rcd;case 6:case 7:case 8:return Ucd(),Tcd;case 9:case 10:case 11:return Ucd(),zcd;default:return Ucd(),Scd;}} +function sKc(a,b){var c;if(a.c.length==0){return false}c=Lzc((tCb(0,a.c.length),BD(a.c[0],17)).c.i);FJc();if(c==(Izc(),Fzc)||c==Ezc){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new AKc),new CKc(b))} +function cRc(a,b,c){var d,e,f;if(!a.b[b.g]){a.b[b.g]=true;d=c;!d&&(d=new SRc);Dsb(d.b,b);for(f=a.a[b.g].Kc();f.Ob();){e=BD(f.Pb(),188);e.b!=b&&cRc(a,e.b,d);e.c!=b&&cRc(a,e.c,d);Dsb(d.a,e)}return d}return null} +function qSc(){qSc=ccb;pSc=new rSc('ROOT_PROC',0);lSc=new rSc('FAN_PROC',1);nSc=new rSc('NEIGHBORS_PROC',2);mSc=new rSc('LEVEL_HEIGHT',3);oSc=new rSc('NODE_POSITION_PROC',4);kSc=new rSc('DETREEIFYING_PROC',5)} +function kqd(a,b){if(JD(b,239)){return eqd(a,BD(b,33))}else if(JD(b,186)){return fqd(a,BD(b,118))}else if(JD(b,439)){return dqd(a,BD(b,202))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}} +function xu(a,b,c){var d,e;this.f=a;d=BD(Ohb(a.b,b),283);e=!d?0:d.a;Sb(c,e);if(c>=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++<e){vu(this)}}else{this.c=!d?null:d.b;while(c-->0){uu(this)}}this.b=b;this.a=null} +function rEb(a,b){var c,d;b.a?sEb(a,b):(c=BD(Exb(a.b,b.b),57),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=BD(Dxb(a.b,b.b),57),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),Fxb(a.b,b.b),undefined)} +function FJb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((tdd(),sdd))&&KJb(a,b);d=JJb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.a=d} +function OKb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((tdd(),sdd))&&SKb(a,b);d=RKb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.b=d} +function cOb(a,b){var c,d,e,f;f=new Rkb;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),65);Ekb(f,new oOb(c,true));Ekb(f,new oOb(c,false))}e=new hOb(a);zwb(e.a.a);kDb(f,a.b,new amb(OC(GC(JM,1),Uhe,679,0,[e])))} +function rQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=a.a;n=a.b;j=b.a;o=b.b;k=c.a;p=c.b;l=d.a;q=d.b;f=i*o-n*j;g=k*q-p*l;e=(i-j)*(p-q)-(n-o)*(k-l);h=(f*(k-l)-g*(i-j))/e;m=(f*(p-q)-g*(n-o))/e;return new f7c(h,m)} +function TBc(a,b){var c,d,e;if(a.d[b.p]){return}a.d[b.p]=true;a.a[b.p]=true;for(d=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)){continue}e=c.d.i;a.a[e.p]?Ekb(a.b,c):TBc(a,e)}a.a[b.p]=false} +function pCc(a,b,c){var d;d=0;switch(BD(vNb(b,(Nyc(),mxc)),163).g){case 2:d=2*-c+a.a;++a.a;break;case 1:d=-c;break;case 3:d=c;break;case 4:d=2*c+a.b;++a.b;}wNb(b,(wtc(),Zsc))&&(d+=BD(vNb(b,Zsc),19).a);return d} +function jOc(a,b,c){var d,e,f;c.zc(b,a);Ekb(a.n,b);f=a.p.eg(b);b.j==a.p.fg()?yOc(a.e,f):yOc(a.j,f);lOc(a);for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(b),new R0b(b)])));Qr(e);){d=BD(Rr(e),11);c._b(d)||jOc(a,d,c)}} +function rfd(a){var b,c,d;c=BD(hkd(a,(Y9c(),Y8c)),21);if(c.Hc((tdd(),pdd))){d=BD(hkd(a,b9c),21);b=new g7c(BD(hkd(a,_8c),8));if(d.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b}else{return new d7c}} +function PKd(a){var b,c,d;if(!a.b){d=new $Nd;for(c=new $yd(SKd(a));c.e!=c.i.gc();){b=BD(Zyd(c),18);(b.Bb&ote)!=0&&wtd(d,b)}vud(d);a.b=new nNd((BD(qud(ZKd((NFd(),MFd).o),8),18),d.i),d.g);$Kd(a).b&=-9}return a.b} +function Rmc(a,b){var c,d,e,f,g,h,i,j;i=BD(Ee(Ec(b.k),KC(F1,bne,61,2,0,1)),122);j=b.g;c=Tmc(b,i[0]);e=Smc(b,i[1]);d=Kmc(a,j,c,e);f=Tmc(b,i[1]);h=Smc(b,i[0]);g=Kmc(a,j,f,h);if(d<=g){b.a=c;b.c=e}else{b.a=f;b.c=h}} +function ESc(a,b,c){var d,e,f;Odd(c,'Processor set neighbors',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){f=BD(Xsb(d),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(e=f)}!!e&&FSc(a,new ZRc(e),c);Qdd(c)} +function PEd(a){IEd();var b,c,d,e;d=hfb(a,wfb(35));b=d==-1?a:a.substr(0,d);c=d==-1?null:a.substr(d+1);e=kFd(HEd,b);if(!e){e=aFd(b);lFd(HEd,b,e);c!=null&&(e=JEd(e,c))}else c!=null&&(e=JEd(e,(uCb(c),c)));return e} +function smb(a){var h;mmb();var b,c,d,e,f,g;if(JD(a,54)){for(e=0,d=a.gc()-1;e<d;++e,--d){h=a.Xb(e);a._c(e,a.Xb(d));a._c(d,h)}}else{b=a.Yc();f=a.Zc(a.gc());while(b.Tb()<f.Vb()){c=b.Pb();g=f.Ub();b.Wb(g);f.Wb(c)}}} +function I3b(a,b){var c,d,e;Odd(b,'End label pre-processing',1);c=Edb(ED(vNb(a,(Nyc(),nyc))));d=Edb(ED(vNb(a,ryc)));e=gad(BD(vNb(a,Lwc),103));MAb(LAb(new YAb(null,new Kub(a.b,16)),new Q3b),new S3b(c,d,e));Qdd(b)} +function NFc(a,b){var c,d,e,f,g,h;h=0;f=new jkb;Wjb(f,b);while(f.b!=f.c){g=BD(fkb(f),214);h+=pHc(g.d,g.e);for(e=new olb(g.b);e.a<e.c.c.length;){d=BD(mlb(e),37);c=BD(Ikb(a.b,d.p),214);c.s||(h+=NFc(a,c))}}return h} +function YQc(a,b,c){var d,e;TQc(this);b==(FQc(),DQc)?Qqb(this.r,a.c):Qqb(this.w,a.c);c==DQc?Qqb(this.r,a.d):Qqb(this.w,a.d);UQc(this,a);d=VQc(a.c);e=VQc(a.d);XQc(this,d,e,e);this.o=(hQc(),$wnd.Math.abs(d-e)<0.2)} +function a0d(a,b,c){var d,e,f,g,h,i;h=BD(Ajd(a.a,8),1936);if(h!=null){for(e=h,f=0,g=e.length;f<g;++f){null.jm()}}d=c;if((a.a.Db&1)==0){i=new f0d(a,c,b);d.ui(i)}JD(d,672)?BD(d,672).wi(a.a):d.ti()==a.a&&d.vi(null)} +function dae(){var a;if(Z9d)return BD(nUd((yFd(),xFd),Ewe),1945);eae();a=BD(JD(Phb((yFd(),xFd),Ewe),586)?Phb(xFd,Ewe):new cae,586);Z9d=true;aae(a);bae(a);Rhb((JFd(),IFd),a,new fae);Tnd(a);Shb(xFd,Ewe,a);return a} +function xA(a,b,c,d){var e;e=oA(a,c,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje]),b);e<0&&(e=oA(a,c,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function AA(a,b,c,d){var e;e=oA(a,c,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje]),b);e<0&&(e=oA(a,c,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function NVb(a){var b,c,d;KVb(a);d=new Rkb;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);Ekb(d,new ZVb(b,true));Ekb(d,new ZVb(b,false))}RVb(a.c);rXb(d,a.b,new amb(OC(GC(bQ,1),Uhe,369,0,[a.c])));MVb(a)} +function c4b(a){var b,c,d,e;c=new Lqb;for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);b=BD(d.We((wtc(),Dsc)),17);!!irb(c.f,b)||Rhb(c,b,new p4b(b));Ekb(BD(Wd(irb(c.f,b)),456).b,d)}return new Tkb(new $ib(c))} +function Gac(a,b){var c,d,e,f,g;d=new kkb(a.j.c.length);c=null;for(f=new olb(a.j);f.a<f.c.c.length;){e=BD(mlb(f),11);if(e.j!=c){d.b==d.c||Hac(d,c,b);Yjb(d);c=e.j}g=N3b(e);!!g&&(Xjb(d,g),true)}d.b==d.c||Hac(d,c,b)} +function wbc(a,b){var c,d,e;d=new Bib(a.b,0);while(d.b<d.d.gc()){c=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),70));e=BD(vNb(c,(Nyc(),Qwc)),272);if(e==(qad(),oad)){uib(d);Ekb(b.b,c);wNb(c,(wtc(),Dsc))||yNb(c,Dsc,a)}}} +function GDc(a){var b,c,d,e,f;b=sr(new Sr(ur(U_b(a).a.Kc(),new Sq)));for(e=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);c=d.c.i;f=sr(new Sr(ur(U_b(c).a.Kc(),new Sq)));b=$wnd.Math.max(b,f)}return meb(b)} +function rUc(a,b,c){var d,e,f,g;Odd(c,'Processor arrange node',1);e=null;f=new Psb;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){g=BD(Xsb(d),86);Ccb(DD(vNb(g,(mTc(),jTc))))&&(e=g)}Gsb(f,e,f.c.b,f.c);qUc(a,f,Udd(c,1));Qdd(c)} +function Ffd(a,b,c){var d,e,f;d=BD(hkd(a,(Y9c(),w8c)),21);e=0;f=0;b.a>c.a&&(d.Hc((i8c(),c8c))?(e=(b.a-c.a)/2):d.Hc(e8c)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((i8c(),g8c))?(f=(b.b-c.b)/2):d.Hc(f8c)&&(f=b.b-c.b));Efd(a,e,f)} +function aod(a,b,c,d,e,f,g,h,i,j,k,l,m){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=g;dJd(a,h);fJd(a,i);ZId(a,j);eJd(a,k);CId(a,l);aJd(a,m);BId(a,true);AId(a,e);a.ok(f);yId(a,b);d!=null&&(a.i=null,_Id(a,d))} +function PRd(a){var b,c;if(a.f){while(a.n>0){b=BD(a.k.Xb(a.n-1),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{--a.n}}return false}else{return a.n>0}} +function Jb(a,b,c){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,[c,meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must not be greater than size (%s)',OC(GC(SI,1),Uhe,1,5,[c,meb(a),meb(b)]))}} +function Llb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Ilb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Llb(b,a,i,j,-e,f);Llb(b,a,j,h,-e,f);if(f.ue(a[j-1],a[j])<=0){while(c<d){NC(b,c++,a[i++])}return}Jlb(a,i,j,h,b,c,d,f)} +function nEb(a,b){var c,d,e;e=new Rkb;for(d=new olb(a.c.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);if(b.Lb(c)){Ekb(e,new BEb(c,true));Ekb(e,new BEb(c,false))}}tEb(a.e);kDb(e,a.d,new amb(OC(GC(JM,1),Uhe,679,0,[a.e])))} +function gnc(a,b){var c,d,e,f,g,h,i;i=b.d;e=b.b.j;for(h=new olb(i);h.a<h.c.c.length;){g=BD(mlb(h),101);f=KC(sbb,dle,25,e.c.length,16,1);Rhb(a.b,g,f);c=g.a.d.p-1;d=g.c.d.p;while(c!=d){c=(c+1)%e.c.length;f[c]=true}}} +function tOc(a,b){a.r=new uOc(a.p);sOc(a.r,a);ye(a.r.j,a.j);Osb(a.j);Dsb(a.j,b);Dsb(a.r.e,b);lOc(a);lOc(a.r);while(a.f.c.length!=0){AOc(BD(Ikb(a.f,0),129))}while(a.k.c.length!=0){AOc(BD(Ikb(a.k,0),129))}return a.r} +function yid(a,b,c){var d,e,f;e=XKd(a.Tg(),b);d=b-a.Ah();if(d<0){if(!e){throw vbb(new Wdb(mte+b+nte))}else if(e.Ij()){f=a.Yg(e);f>=0?a.sh(f,c):uid(a,e,c)}else{throw vbb(new Wdb(ite+e.ne()+jte))}}else{did(a,d,e,c)}} +function q6d(b){var c,d,e,f;d=BD(b,49).qh();if(d){try{e=null;c=nUd((yFd(),xFd),LEd(MEd(d)));if(c){f=c.rh();!!f&&(e=f.Wk(tfb(d.e)))}if(!!e&&e!=b){return q6d(e)}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}return b} +function jrb(a,b,c){var d,e,f,g;g=b==null?0:a.b.se(b);e=(d=a.a.get(g),d==null?new Array:d);if(e.length==0){a.a.set(g,e)}else{f=grb(a,b,e);if(f){return f.ed(c)}}NC(e,e.length,new pjb(b,c));++a.c;zpb(a.b);return null} +function YUc(a,b){var c,d;H2c(a.a);K2c(a.a,(PUc(),NUc),NUc);K2c(a.a,OUc,OUc);d=new j3c;e3c(d,OUc,(tVc(),sVc));PD(hkd(b,(ZWc(),LWc)))!==PD((pWc(),mWc))&&e3c(d,OUc,qVc);e3c(d,OUc,rVc);E2c(a.a,d);c=F2c(a.a,b);return c} +function uC(a){if(!a){return OB(),NB}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=qC[typeof b];return c?c(b):xC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new xB(a)}else{return new fC(a)}} +function RJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}hIb(d);iIb(d)} +function SJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}hIb(d);iIb(d)} +function Jgc(a,b){var c,d,e,f,g;if(b.dc()){return}e=BD(b.Xb(0),128);if(b.gc()==1){Igc(a,e,e,1,0,b);return}c=1;while(c<b.gc()){if(e.j||!e.o){f=Ogc(b,c);if(f){d=BD(f.a,19).a;g=BD(f.b,128);Igc(a,e,g,c,d,b);c=d+1;e=g}}}} +function mlc(a){var b,c,d,e,f,g;g=new Tkb(a.d);Okb(g,new Qlc);b=(Alc(),OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc]));c=0;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),101);d=b[c%b.length];olc(e,d);++c}} +function o6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(!(m6c(a,d)&&m6c(a,e))){return false}d=e}if(!(m6c(a,d)&&m6c(a,c))){return false}return true} +function hrd(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;l=a;g=Xpd(l,'x');c=new Krd(b);Gqd(c.a,g);h=Xpd(l,'y');d=new Lrd(b);Hqd(d.a,h);i=Xpd(l,Gte);e=new Mrd(b);Iqd(e.a,i);j=Xpd(l,Fte);f=new Nrd(b);k=(Jqd(f.a,j),j);return k} +function XMd(a,b){TMd(a,b);(a.b&1)!=0&&(a.a.a=null);(a.b&2)!=0&&(a.a.f=null);if((a.b&4)!=0){a.a.g=null;a.a.i=null}if((a.b&16)!=0){a.a.d=null;a.a.e=null}(a.b&8)!=0&&(a.a.b=null);if((a.b&32)!=0){a.a.j=null;a.a.c=null}} +function l0d(b,c){var d,e,f;f=0;if(c.length>0){try{f=Icb(c,Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){e=a;throw vbb(new rFd(e))}else throw vbb(a)}}d=(!b.a&&(b.a=new z0d(b)),b.a);return f<d.i&&f>=0?BD(qud(d,f),56):null} +function Ib(a,b){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,['index',meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must be less than size (%s)',OC(GC(SI,1),Uhe,1,5,['index',meb(a),meb(b)]))}} +function Slb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Tlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Ulb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Xlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function bub(a,b){var c,d,e,f,g,h;c=a.b.c.length;e=Ikb(a.b,b);while(b*2+1<c){d=(f=2*b+1,g=f+1,h=f,g<c&&a.a.ue(Ikb(a.b,g),Ikb(a.b,f))<0&&(h=g),h);if(a.a.ue(e,Ikb(a.b,d))<0){break}Nkb(a.b,b,Ikb(a.b,d));b=d}Nkb(a.b,b,e)} +function $Bb(a,b,c,d,e,f){var g,h,i,j,k;if(PD(a)===PD(c)){a=a.slice(b,b+e);b=0}i=c;for(h=b,j=b+e;h<j;){g=$wnd.Math.min(h+10000,j);e=g-h;k=a.slice(h,g);k.splice(0,0,d,f?e:0);Array.prototype.splice.apply(i,k);h=g;d+=e}} +function xGb(a,b,c){var d,e;d=c.d;e=c.e;if(a.g[d.d]<=a.i[b.d]&&a.i[b.d]<=a.i[d.d]&&a.g[e.d]<=a.i[b.d]&&a.i[b.d]<=a.i[e.d]){if(a.i[d.d]<a.i[e.d]){return false}return true}if(a.i[d.d]<a.i[e.d]){return true}return false} +function cRb(a){var b,c,d,e,f,g,h;d=a.a.c.length;if(d>0){g=a.c.d;h=a.d.d;e=Y6c(c7c(new f7c(h.a,h.b),g),1/(d+1));f=new f7c(g.a,g.b);for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),559);b.d.a=f.a;b.d.b=f.b;P6c(f,e)}}} +function YNb(a,b,c){var d,e,f,g,h,i;i=Pje;for(f=new olb(wOb(a.b));f.a<f.c.c.length;){e=BD(mlb(f),168);for(h=new olb(wOb(b.b));h.a<h.c.c.length;){g=BD(mlb(h),168);d=p6c(e.a,e.b,g.a,g.b,c);i=$wnd.Math.min(i,d)}}return i} +function G0b(a,b){if(!b){throw vbb(new Geb)}a.j=b;if(!a.d){switch(a.j.g){case 1:a.a.a=a.o.a/2;a.a.b=0;break;case 2:a.a.a=a.o.a;a.a.b=a.o.b/2;break;case 3:a.a.a=a.o.a/2;a.a.b=a.o.b;break;case 4:a.a.a=0;a.a.b=a.o.b/2;}}} +function dfc(a,b){var c,d,e;if(JD(b.g,10)&&BD(b.g,10).k==(j0b(),e0b)){return Pje}e=ugc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=tgc(b);if(c){d=Edb(ED(pBc(c,(Nyc(),vyc))));return $wnd.Math.max(0,d/2-0.5)}return Pje} +function ffc(a,b){var c,d,e;if(JD(b.g,10)&&BD(b.g,10).k==(j0b(),e0b)){return Pje}e=ugc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=tgc(b);if(c){d=Edb(ED(pBc(c,(Nyc(),vyc))));return $wnd.Math.max(0,d/2-0.5)}return Pje} +function xic(a){var b,c,d,e,f,g;g=CHc(a.d,a.e);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);d=a.e==(Ucd(),Tcd)?e.e:e.g;for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),17);if(!OZb(b)&&b.c.i.c!=b.d.i.c){tic(a,b);++a.f;++a.c}}}} +function tpc(a,b){var c,d;if(b.dc()){return mmb(),mmb(),jmb}d=new Rkb;Ekb(d,meb(Rie));for(c=1;c<a.f;++c){a.a==null&&Toc(a);a.a[c]&&Ekb(d,meb(c))}if(d.c.length==1){return mmb(),mmb(),jmb}Ekb(d,meb(Ohe));return spc(b,d)} +function MJc(a,b){var c,d,e,f,g,h,i;g=b.c.i.k!=(j0b(),h0b);i=g?b.d:b.c;c=MZb(b,i).i;e=BD(Ohb(a.k,i),121);d=a.i[c.p].a;if(S_b(i.i)<(!c.c?-1:Jkb(c.c.a,c,0))){f=e;h=d}else{f=d;h=e}AFb(DFb(CFb(EFb(BFb(new FFb,0),4),f),h))} +function oqd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Wqd(a,Vpd(tB(c,g.a)));if(i){f=(!b.b&&(b.b=new y5d(z2,b,4,7)),b.b);wtd(f,i)}}}} +function pqd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Wqd(a,Vpd(tB(c,g.a)));if(i){f=(!b.c&&(b.c=new y5d(z2,b,5,8)),b.c);wtd(f,i)}}}} +function po(a,b,c){var d,e;d=b.a&a.f;b.b=a.b[d];a.b[d]=b;e=b.f&a.f;b.d=a.c[e];a.c[e]=b;if(!c){b.e=a.e;b.c=null;!a.e?(a.a=b):(a.e.c=b);a.e=b}else{b.e=c.e;!b.e?(a.a=b):(b.e.c=b);b.c=c.c;!b.c?(a.e=b):(b.c.e=b)}++a.i;++a.g} +function qr(a){var b,c,d;b=a.Pb();if(!a.Ob()){return b}d=Pfb(Qfb(new Ufb,'expected one element but was: <'),b);for(c=0;c<4&&a.Ob();c++){Pfb((d.a+=She,d),a.Pb())}a.Ob()&&(d.a+=', ...',d);d.a+='>';throw vbb(new Wdb(d.a))} +function lt(a,b){var c;b.d?(b.d.b=b.b):(a.a=b.b);b.b?(b.b.d=b.d):(a.e=b.d);if(!b.e&&!b.c){c=BD(Thb(a.b,b.a),283);c.a=0;++a.c}else{c=BD(Ohb(a.b,b.a),283);--c.a;!b.e?(c.b=b.c):(b.e.c=b.c);!b.c?(c.c=b.e):(b.c.e=b.e)}--a.d} +function OA(a){var b,c;c=-a.a;b=OC(GC(TD,1),$ie,25,15,[43,48,48,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&aje;b[2]=b[2]+(c/60|0)%10&aje;b[3]=b[3]+(c%60/10|0)&aje;b[4]=b[4]+c%10&aje;return zfb(b,0,b.length)} +function uRb(a,b,c){var d,e;d=b.d;e=c.d;while(d.a-e.a==0&&d.b-e.b==0){d.a+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;d.b+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;e.a+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;e.b+=Cub(a,26)*ike+Cub(a,27)*jke-0.5}} +function N_b(a){var b,c,d,e;a.g=new Rpb(BD(Qb(F1),290));d=0;c=(Ucd(),Acd);b=0;for(;b<a.j.c.length;b++){e=BD(Ikb(a.j,b),11);if(e.j!=c){d!=b&&Npb(a.g,c,new vgd(meb(d),meb(b)));c=e.j;d=b}}Npb(a.g,c,new vgd(meb(d),meb(b)))} +function d4b(a){var b,c,d,e,f,g,h;d=0;for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);e.p=d++;for(h=new olb(e.j);h.a<h.c.c.length;){g=BD(mlb(h),11);g.p=d++}}}} +function qPc(a,b,c,d,e){var f,g,h,i,j;if(b){for(h=b.Kc();h.Ob();){g=BD(h.Pb(),10);for(j=X_b(g,(KAc(),IAc),c).Kc();j.Ob();){i=BD(j.Pb(),11);f=BD(Wd(irb(e.f,i)),112);if(!f){f=new uOc(a.d);d.c[d.c.length]=f;jOc(f,i,e)}}}}} +function vid(a,b){var c,d,e;e=e1d((O6d(),M6d),a.Tg(),b);if(e){Q6d();BD(e,66).Oj()||(e=_1d(q1d(M6d,e)));d=(c=a.Yg(e),BD(c>=0?a._g(c,true,true):sid(a,e,true),153));BD(d,215).ol(b)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} +function ugb(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=QD($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return vgb(Cbb(a))} +function QOc(a){var b,c,d,e,f,g,h;f=new zsb;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),129);g=b.a;h=b.b;if(f.a._b(g)||f.a._b(h)){continue}e=g;d=h;if(g.e.b+g.j.b>2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f} +function K5b(a,b){var c,d,e;d=new b0b(a);tNb(d,b);yNb(d,(wtc(),Gsc),b);yNb(d,(Nyc(),Vxc),(dcd(),$bd));yNb(d,mwc,(F7c(),B7c));__b(d,(j0b(),e0b));c=new H0b;F0b(c,d);G0b(c,(Ucd(),Tcd));e=new H0b;F0b(e,d);G0b(e,zcd);return d} +function Spc(a){switch(a.g){case 0:return new fGc((rGc(),oGc));case 1:return new CFc;case 2:return new fHc;default:throw vbb(new Wdb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} +function tDc(a,b){var c,d,e,f,g;a.c[b.p]=true;Ekb(a.a,b);for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(d=new b1b(f.b);llb(d.a)||llb(d.b);){c=BD(llb(d.a)?mlb(d.a):mlb(d.b),17);e=uDc(f,c).i;a.c[e.p]||tDc(a,e)}}} +function _Uc(a){var b,c,d,e,f,g,h;g=0;for(c=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),33);h=b.g;e=b.f;d=$wnd.Math.sqrt(h*h+e*e);g=$wnd.Math.max(d,g);f=_Uc(b);g=$wnd.Math.max(f,g)}return g} +function rcd(){rcd=ccb;pcd=new scd('OUTSIDE',0);ncd=new scd('INSIDE',1);ocd=new scd('NEXT_TO_PORT_IF_POSSIBLE',2);mcd=new scd('ALWAYS_SAME_SIDE',3);lcd=new scd('ALWAYS_OTHER_SAME_SIDE',4);qcd=new scd('SPACE_EFFICIENT',5)} +function drd(a,b,c){var d,e,f,h,i,j;d=Tqd(a,(e=(Fhd(),f=new apd,f),!!c&&$od(e,c),e),b);Lkd(d,_pd(b,Vte));grd(b,d);brd(b,d);hrd(b,d);g=null;h=b;i=Ypd(h,'ports');j=new Jrd(a,d);Fqd(j.a,j.b,i);crd(a,b,d);Zqd(a,b,d);return d} +function NA(a){var b,c;c=-a.a;b=OC(GC(TD,1),$ie,25,15,[43,48,48,58,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&aje;b[2]=b[2]+(c/60|0)%10&aje;b[4]=b[4]+(c%60/10|0)&aje;b[5]=b[5]+c%10&aje;return zfb(b,0,b.length)} +function QA(a){var b;b=OC(GC(TD,1),$ie,25,15,[71,77,84,45,48,48,58,48,48]);if(a<=0){b[3]=43;a=-a}b[4]=b[4]+((a/60|0)/10|0)&aje;b[5]=b[5]+(a/60|0)%10&aje;b[7]=b[7]+(a%60/10|0)&aje;b[8]=b[8]+a%10&aje;return zfb(b,0,b.length)} +function Vlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+Ubb(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function DGb(a,b){var c,d,e;e=Ohe;for(d=new olb(LFb(b));d.a<d.c.c.length;){c=BD(mlb(d),213);if(c.f&&!a.c[c.c]){a.c[c.c]=true;e=$wnd.Math.min(e,DGb(a,xFb(c,b)))}}a.i[b.d]=a.j;a.g[b.d]=$wnd.Math.min(e,a.j++);return a.g[b.d]} +function EKb(a,b){var c,d,e;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.b=(c=d.b,c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Acd)?-c.rf().b-Edb(ED(c.We(s9c))):Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Acd)?-c.rf().b:0)}} +function LPb(a){var b,c,d,e,f,g,h;c=IOb(a.e);f=Y6c(b7c(R6c(HOb(a.e)),a.d*a.a,a.c*a.b),-0.5);b=c.a-f.a;e=c.b-f.b;for(h=0;h<a.c;h++){d=b;for(g=0;g<a.d;g++){JOb(a.e,new J6c(d,e,a.a,a.b))&&aNb(a,g,h,false,true);d+=a.a}e+=a.b}} +function s2c(a){var b,c,d;if(Ccb(DD(hkd(a,(Y9c(),M8c))))){d=new Rkb;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);Qld(b)&&Ccb(DD(hkd(b,N8c)))&&(d.c[d.c.length]=b,true)}return d}else{return mmb(),mmb(),jmb}} +function Vpd(a){var b,c;c=false;if(JD(a,204)){c=true;return BD(a,204).a}if(!c){if(JD(a,258)){b=BD(a,258).a%1==0;if(b){c=true;return meb(Idb(BD(a,258).a))}}}throw vbb(new cqd("Id must be a string or an integer: '"+a+"'."))} +function k0d(a,b){var c,d,e,f,g,h;f=null;for(e=new x0d((!a.a&&(a.a=new z0d(a)),a.a));u0d(e);){c=BD(Vud(e),56);d=(g=c.Tg(),h=(OKd(g),g.o),!h||!c.mh(h)?null:h6d(KJd(h),c.ah(h)));if(d!=null){if(dfb(d,b)){f=c;break}}}return f} +function Bw(a,b,c){var d,e,f,g,h;Xj(c,'occurrences');if(c==0){return h=BD(Hv(nd(a.a),b),14),!h?0:h.gc()}g=BD(Hv(nd(a.a),b),14);if(!g){return 0}f=g.gc();if(c>=f){g.$b()}else{e=g.Kc();for(d=0;d<c;d++){e.Pb();e.Qb()}}return f} +function ax(a,b,c){var d,e,f,g;Xj(c,'oldCount');Xj(0,'newCount');d=BD(Hv(nd(a.a),b),14);if((!d?0:d.gc())==c){Xj(0,'count');e=(f=BD(Hv(nd(a.a),b),14),!f?0:f.gc());g=-e;g>0?zh():g<0&&Bw(a,b,-g);return true}else{return false}} +function fIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=jIb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Mtb(Zzb(OAb(JAb(Plb(a.a),new xIb),new zIb)))}return h>0?h+a.n.d+a.n.a:0} +function gIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Mtb(Zzb(OAb(JAb(Plb(a.a),new tIb),new vIb)))}else{g=kIb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0} +function MJb(a,b){var c,d,e,f;f=BD(Mpb(a.b,b),124);c=f.a;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);!!d.c&&(c.a=$wnd.Math.max(c.a,ZHb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} +function NQb(a,b){var c,d,e;c=BD(vNb(b,(wSb(),oSb)),19).a-BD(vNb(a,oSb),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(HSb(),DSb)),8)),BD(vNb(a,ESb),8));e=c7c(R6c(BD(vNb(b,DSb),8)),BD(vNb(b,ESb),8));return Kdb(d.a*d.b,e.a*e.b)}return c} +function iRc(a,b){var c,d,e;c=BD(vNb(b,(JTc(),ETc)),19).a-BD(vNb(a,ETc),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(mTc(),VSc)),8)),BD(vNb(a,WSc),8));e=c7c(R6c(BD(vNb(b,VSc),8)),BD(vNb(b,WSc),8));return Kdb(d.a*d.b,e.a*e.b)}return c} +function TZb(a){var b,c;c=new Ufb;c.a+='e_';b=KZb(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Qfb((c.a+=' ',c),C0b(a.c));Qfb(Pfb((c.a+='[',c),a.c.i),']');Qfb((c.a+=gne,c),C0b(a.d));Qfb(Pfb((c.a+='[',c),a.d.i),']')}return c.a} +function zRc(a){switch(a.g){case 0:return new lUc;case 1:return new sUc;case 2:return new CUc;case 3:return new IUc;default:throw vbb(new Wdb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}} +function mfd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f} +function mqd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);f=Zpd(c,g.a);Lte in f.a||Mte in f.a?$qd(a,f,b):erd(a,f,b);otd(BD(Ohb(a.b,Wpd(f)),79))}}} +function LJd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=wId(a);if(!!b&&(Q6d(),b.Cj()==Bve)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} +function k1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=BD(qud(d,e),170);switch($1d(q1d(a,c))){case 2:case 3:{!f&&(f=new Rkb);f.c[f.c.length]=c}}}return !f?(mmb(),mmb(),jmb):f} +function tde(a,b){var c,d,e,f;nde(a);if(a.c!=0||a.a!=123)throw vbb(new mde(tvd((h0d(),Fue))));f=b==112;d=a.d;c=gfb(a.i,125,d);if(c<0)throw vbb(new mde(tvd((h0d(),Gue))));e=qfb(a.i,d,c);a.d=c+1;return Lfe(e,f,(a.e&512)==512)} +function QTb(a){var b;b=BD(vNb(a,(Nyc(),Iwc)),314);if(b==(Rpc(),Ppc)){throw vbb(new z2c('The hierarchy aware processor '+b+' in child node '+a+' is only allowed if the root node specifies the same hierarchical processor.'))}} +function dhc(a,b){Hgc();var c,d,e,f,g,h;c=null;for(g=b.Kc();g.Ob();){f=BD(g.Pb(),128);if(f.o){continue}d=F6c(f.a);e=C6c(f.a);h=new hic(d,e,null,BD(f.d.a.ec().Kc().Pb(),17));Ekb(h.c,f.a);a.c[a.c.length]=h;!!c&&Ekb(c.d,h);c=h}} +function hKd(a,b){var c,d,e;if(!b){jKd(a,null);_Jd(a,null)}else if((b.i&4)!=0){d='[]';for(c=b.c;;c=c.c){if((c.i&4)==0){e=jfb((fdb(c),c.o+d));jKd(a,e);_Jd(a,e);break}d+='[]'}}else{e=jfb((fdb(b),b.o));jKd(a,e);_Jd(a,e)}a.yk(b)} +function b3d(a,b,c,d,e){var f,g,h,i;i=a3d(a,BD(e,56));if(PD(i)!==PD(e)){h=BD(a.g[c],72);f=R6d(b,i);mud(a,c,t3d(a,c,f));if(oid(a.e)){g=H2d(a,9,f.ak(),e,i,d,false);Qwd(g,new pSd(a.e,9,a.c,h,f,d,false));Rwd(g)}return i}return e} +function xCc(a,b,c){var d,e,f,g,h,i;d=BD(Qc(a.c,b),15);e=BD(Qc(a.c,c),15);f=d.Zc(d.gc());g=e.Zc(e.gc());while(f.Sb()&&g.Sb()){h=BD(f.Ub(),19);i=BD(g.Ub(),19);if(h!=i){return beb(h.a,i.a)}}return !f.Ob()&&!g.Ob()?0:f.Ob()?1:-1} +function m5c(c,d){var e,f,g;try{g=fs(c.a,d);return g}catch(b){b=ubb(b);if(JD(b,32)){try{f=Icb(d,Rie,Ohe);e=gdb(c.a);if(f>=0&&f<e.length){return e[f]}}catch(a){a=ubb(a);if(!JD(a,127))throw vbb(a)}return null}else throw vbb(b)}} +function tid(a,b){var c,d,e;e=e1d((O6d(),M6d),a.Tg(),b);if(e){Q6d();BD(e,66).Oj()||(e=_1d(q1d(M6d,e)));d=(c=a.Yg(e),BD(c>=0?a._g(c,true,true):sid(a,e,true),153));return BD(d,215).ll(b)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} +function BZd(){tZd();var a;if(sZd)return BD(nUd((yFd(),xFd),_ve),1939);rEd(CK,new J_d);CZd();a=BD(JD(Phb((yFd(),xFd),_ve),547)?Phb(xFd,_ve):new AZd,547);sZd=true;yZd(a);zZd(a);Rhb((JFd(),IFd),a,new EZd);Shb(xFd,_ve,a);return a} +function v2d(a,b){var c,d,e,f;a.j=-1;if(oid(a.e)){c=a.i;f=a.i!=0;lud(a,b);d=new pSd(a.e,3,a.c,null,b,c,f);e=b.Qk(a.e,a.c,null);e=h3d(a,b,e);if(!e){Uhd(a.e,d)}else{e.Ei(d);e.Fi()}}else{lud(a,b);e=b.Qk(a.e,a.c,null);!!e&&e.Fi()}} +function rA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BCb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BCb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e} +function vMb(a){var b,c,d,e,f;e=BD(a.a,19).a;f=BD(a.b,19).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new vgd(meb(c),meb(d))} +function fNb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;if((i=f,j=h,i+=a.j,j+=a.k,i>=0&&j>=0&&i<a.o&&j<a.p)&&(!ZMb(b,e,g)&&hNb(a,f,h)||YMb(b,e,g)&&!iNb(a,f,h))){return true}}}return false} +function LNc(a,b,c){var d,e,f,g,h;g=a.c;h=a.d;f=l7c(OC(GC(m1,1),nie,8,0,[g.i.n,g.n,g.a])).b;e=(f+l7c(OC(GC(m1,1),nie,8,0,[h.i.n,h.n,h.a])).b)/2;d=null;g.j==(Ucd(),zcd)?(d=new f7c(b+g.i.c.c.a+c,e)):(d=new f7c(b-c,e));St(a.a,0,d)} +function Qld(a){var b,c,d,e;b=null;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));Qr(d);){c=BD(Rr(d),82);e=atd(c);if(!b){b=e}else if(b!=e){return false}}return true} +function sud(a,b,c){var d;++a.j;if(b>=a.i)throw vbb(new qcb(lue+b+mue+a.i));if(c>=a.i)throw vbb(new qcb(nue+c+mue+a.i));d=a.g[c];if(b!=c){b<c?$fb(a.g,b,a.g,b+1,c-b):$fb(a.g,c+1,a.g,c,b-c);NC(a.g,b,d);a.ei(b,d,c);a.ci()}return d} +function Rc(a,b,c){var d;d=BD(a.c.xc(b),14);if(!d){d=a.ic(b);if(d.Fc(c)){++a.d;a.c.zc(b,d);return true}else{throw vbb(new ycb('New Collection violated the Collection spec'))}}else if(d.Fc(c)){++a.d;return true}else{return false}} +function heb(a){var b,c,d;if(a<0){return 0}else if(a==0){return 32}else{d=-(a>>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-Rje;b=d>>16&4;c+=b;a<<=b;d=a-oie;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} +function $Pb(a){QPb();var b,c,d,e;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb;b=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);SPb(b);for(e=new Fyd(b);e.e!=e.i.gc();){d=BD(Dyd(e),33);if(Jkb(PPb,d,0)==-1){c=new Rkb;Ekb(NPb,c);TPb(d,c)}}return NPb} +function BQb(a,b,c){var d,e,f,g;a.a=c.b.d;if(JD(b,352)){e=itd(BD(b,79),false,false);f=ofd(e);d=new FQb(a);reb(f,d);ifd(f,e);b.We((Y9c(),Q8c))!=null&&reb(BD(b.We(Q8c),74),d)}else{g=BD(b,470);g.Hg(g.Dg()+a.a.a);g.Ig(g.Eg()+a.a.b)}} +function _5b(a,b){var c,d,e,f,g,h,i,j;j=Edb(ED(vNb(b,(Nyc(),zyc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h<a.length;h++){d=a[h].n;e=a[h].o;c=a[h].d;f=d.a-c.b-i;f<0&&(d.a-=f);g=b.f;g.a=$wnd.Math.max(g.a,d.a+e.a);i=d.a+e.a+c.c+j}} +function D$c(a,b){var c,d,e,f,g,h;d=BD(BD(Ohb(a.g,b.a),46).a,65);e=BD(BD(Ohb(a.g,b.b),46).a,65);f=d.b;g=e.b;c=z6c(f,g);if(c>=0){return c}h=U6c(c7c(new f7c(g.c+g.b/2,g.d+g.a/2),new f7c(f.c+f.b/2,f.d+f.a/2)));return -(xOb(f,g)-1)*h} +function ufd(a,b,c){var d;MAb(new YAb(null,(!c.a&&(c.a=new cUd(A2,c,6,6)),new Kub(c.a,16))),new Mfd(a,b));MAb(new YAb(null,(!c.n&&(c.n=new cUd(D2,c,1,7)),new Kub(c.n,16))),new Ofd(a,b));d=BD(hkd(c,(Y9c(),Q8c)),74);!!d&&p7c(d,a,b)} +function sid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();BD(f,66).Oj()||(f=_1d(q1d(M6d,f)));e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));return BD(e,215).hl(b,c)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} +function wAd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h<i;++h){g=BD(f[h],133);if(g.Sh()==c&&pb(d,g.cd())){return g}}}else{for(h=0;h<i;++h){g=BD(f[h],133);if(PD(g.cd())===PD(d)){return g}}}}return null} +function Pgb(a,b){var c;if(b<0){throw vbb(new ocb('Negative exponent'))}if(b==0){return Cgb}else if(b==1||Kgb(a,Cgb)||Kgb(a,Ggb)){return a}if(!Sgb(a,0)){c=1;while(!Sgb(a,c)){++c}return Ogb(bhb(c*b),Pgb(Rgb(a,c),b))}return Jhb(a,b)} +function xlb(a,b){var c,d,e;if(PD(a)===PD(b)){return true}if(a==null||b==null){return false}if(a.length!=b.length){return false}for(c=0;c<a.length;++c){d=a[c];e=b[c];if(!(PD(d)===PD(e)||d!=null&&pb(d,e))){return false}}return true} +function CVb(a){nVb();var b,c,d;this.b=mVb;this.c=(ead(),cad);this.f=(iVb(),hVb);this.a=a;zVb(this,new DVb);sVb(this);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);if(!c.d){b=new gVb(OC(GC(IP,1),Uhe,81,0,[c]));Ekb(a.a,b)}}} +function D3b(a,b,c){var d,e,f,g,h,i;if(!a||a.c.length==0){return null}f=new cIb(b,!c);for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),70);UHb(f,(a$b(),new v$b(d)))}g=f.i;g.a=(i=f.n,f.e.b+i.d+i.a);g.b=(h=f.n,f.e.a+h.b+h.c);return f} +function O5b(a){var b,c,d,e,f,g,h;h=l_b(a.a);Nlb(h,new T5b);c=null;for(e=h,f=0,g=e.length;f<g;++f){d=e[f];if(d.k!=(j0b(),e0b)){break}b=BD(vNb(d,(wtc(),Hsc)),61);if(b!=(Ucd(),Tcd)&&b!=zcd){continue}!!c&&BD(vNb(c,Qsc),15).Fc(d);c=d}} +function YOc(a,b,c){var d,e,f,g,h,i,j;i=(tCb(b,a.c.length),BD(a.c[b],329));Kkb(a,b);if(i.b/2>=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new bPc(i.c,g);Dkb(a,d++,e)}h=j+c;if(h<=i.a){f=new bPc(h,i.a);wCb(d,a.c.length);aCb(a.c,d,f)}}} +function u0d(a){var b;if(!a.c&&a.g==null){a.d=a.si(a.f);wtd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=BD(a.g[a.i-1],47)}}if(b==a.b&&null.km>=null.jm()){Vud(a);return u0d(a)}else{return b.Ob()}} +function KTb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Ydd(new Zdd,0));Odd(h,Vme,1);aUb(a.c,b);g=EYb(a.a,b);if(g.gc()==1){MTb(BD(g.Xb(0),37),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=BD(e.Pb(),37);MTb(d,Udd(h,f))}}CYb(a.a,g,b);NTb(b);Qdd(h)} +function qYb(a){this.a=a;if(a.c.i.k==(j0b(),e0b)){this.c=a.c;this.d=BD(vNb(a.c.i,(wtc(),Hsc)),61)}else if(a.d.i.k==e0b){this.c=a.d;this.d=BD(vNb(a.d.i,(wtc(),Hsc)),61)}else{throw vbb(new Wdb('Edge '+a+' is not an external edge.'))}} +function oQd(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,e,a.b));if(!b){pnd(a,null);qQd(a,0);pQd(a,null)}else if(b!=a){pnd(a,b.zb);qQd(a,b.d);c=(d=b.c,d==null?b.zb:d);pQd(a,c==null||dfb(c,b.zb)?null:c)}} +function NRd(a){var b,c;if(a.f){while(a.n<a.o){b=BD(!a.j?a.k.Xb(a.n):a.j.pi(a.n),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{++a.n}}return false}else{return a.n<a.o}} +function _i(a,b){var c;this.e=(im(),Qb(a),im(),nm(a));this.c=(Qb(b),nm(b));Lb(this.e.Hd().dc()==this.c.Hd().dc());this.d=Ev(this.e);this.b=Ev(this.c);c=IC(SI,[nie,Uhe],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2);this.a=c;Ri(this)} +function vz(b){var c=(!tz&&(tz=wz()),tz);var d=b.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(a){return uz(a,c)});return '"'+d+'"'} +function cEb(a){ODb();var b,c;this.b=LDb;this.c=NDb;this.g=(FDb(),EDb);this.d=(ead(),cad);this.a=a;RDb(this);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);!b.a&&pDb(rDb(new sDb,OC(GC(PM,1),Uhe,57,0,[b])),a);b.e=new K6c(b.d)}} +function HQb(a){var b,c,d,e,f,g;e=a.e.c.length;d=KC(yK,eme,15,e,0,1);for(g=new olb(a.e);g.a<g.c.c.length;){f=BD(mlb(g),144);d[f.b]=new Psb}for(c=new olb(a.c);c.a<c.c.c.length;){b=BD(mlb(c),282);d[b.c.b].Fc(b);d[b.d.b].Fc(b)}return d} +function fDc(a){var b,c,d,e,f,g,h;h=Pu(a.c.length);for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),10);g=new Tqb;f=U_b(d);for(c=new Sr(ur(f.a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);b.c.i==b.d.i||Qqb(g,b.d.i)}h.c[h.c.length]=g}return h} +function ozd(a,b){var c,d,e,f,g;c=BD(Ajd(a.a,4),126);g=c==null?0:c.length;if(b>=g)throw vbb(new Cyd(b,g));e=c[b];if(g==1){d=null}else{d=KC($3,hve,415,g-1,0,1);$fb(c,0,d,0,b);f=g-b-1;f>0&&$fb(c,b+1,d,b,f)}b0d(a,d);a0d(a,b,e);return e} +function m8d(){m8d=ccb;k8d=BD(qud(ZKd((r8d(),q8d).qb),6),34);h8d=BD(qud(ZKd(q8d.qb),3),34);i8d=BD(qud(ZKd(q8d.qb),4),34);j8d=BD(qud(ZKd(q8d.qb),5),18);XId(k8d);XId(h8d);XId(i8d);XId(j8d);l8d=new amb(OC(GC(t5,1),Mve,170,0,[k8d,h8d]))} +function AJb(a,b){var c;this.d=new H_b;this.b=b;this.e=new g7c(b.qf());c=a.u.Hc((rcd(),ocd));a.u.Hc(ncd)?a.D?(this.a=c&&!b.If()):(this.a=true):a.u.Hc(pcd)?c?(this.a=!(b.zf().Kc().Ob()||b.Bf().Kc().Ob())):(this.a=false):(this.a=false)} +function IKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Tcd)?-d.rf().a-Edb(ED(d.We(s9c))):c+Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Tcd)?-d.rf().a:c)}} +function Q1b(a,b){var c,d,e,f;c=BD(vNb(a,(Nyc(),Lwc)),103);f=BD(hkd(b,$xc),61);e=BD(vNb(a,Vxc),98);if(e!=(dcd(),bcd)&&e!=ccd){if(f==(Ucd(),Scd)){f=lfd(b,c);f==Scd&&(f=Zcd(c))}}else{d=M1b(b);d>0?(f=Zcd(c)):(f=Wcd(Zcd(c)))}jkd(b,$xc,f)} +function olc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&Okb(g,new Ulc);e=g.c.length/2|0;for(d=0;d<e;d++){f=(tCb(d,g.c.length),BD(g.c[d],113));f.c&&G0b(f.d,b.a)}for(c=e;c<g.c.length;c++){f=(tCb(c,g.c.length),BD(g.c[c],113));f.c&&G0b(f.d,b.b)}} +function TGc(a,b,c){var d,e,f;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){f=Ddb(d.a,e.a);f<0?WGc(a,b,c):f>0&&WGc(a,c,b);return f}else if(d.a!=null){WGc(a,b,c);return -1}else if(e.a!=null){WGc(a,c,b);return 1}return 0} +function swd(a,b){var c,d,e,f;if(a.ej()){c=a.Vi();f=a.fj();++a.j;a.Hi(c,a.oi(c,b));d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{Bvd(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}} +function D2d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);e=new yud;c=BD(a.g,119);for(f=a.i;--f>=0;){d=c[f];g.rl(d.ak())&&wtd(e,d)}!Yxd(a,e)&&oid(a.e)&&GLd(a,b.$j()?H2d(a,6,b,(mmb(),jmb),null,-1,false):H2d(a,b.Kj()?2:1,b,null,null,-1,false))} +function Dhb(){Dhb=ccb;var a,b;Bhb=KC(cJ,nie,91,32,0,1);Chb=KC(cJ,nie,91,32,0,1);a=1;for(b=0;b<=18;b++){Bhb[b]=ghb(a);Chb[b]=ghb(Nbb(a,b));a=Ibb(a,5)}for(;b<Chb.length;b++){Bhb[b]=Ogb(Bhb[b-1],Bhb[1]);Chb[b]=Ogb(Chb[b-1],(Hgb(),Egb))}} +function K4b(a,b){var c,d,e,f,g;if(a.a==(yrc(),wrc)){return true}f=b.a.c;c=b.a.c+b.a.b;if(b.j){d=b.A;g=d.c.c.a-d.o.a/2;e=f-(d.n.a+d.o.a);if(e>g){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true} +function wcc(a,b){var c;Odd(b,'Partition preprocessing',1);c=BD(GAb(JAb(LAb(JAb(new YAb(null,new Kub(a.a,16)),new Acc),new Ccc),new Ecc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);MAb(c.Oc(),new Gcc);Qdd(b)} +function DMc(a){wMc();var b,c,d,e,f,g,h;c=new $rb;for(e=new olb(a.e.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);h=a.g[f.p];b=BD(Wrb(c,h),15);if(!b){b=new Rkb;Xrb(c,h,b)}b.Fc(f)}}return c} +function dRc(a,b){var c,d,e,f,g;e=b.b.b;a.a=KC(yK,eme,15,e,0,1);a.b=KC(sbb,dle,25,e,16,1);for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);a.a[f.g]=new Psb}for(d=Jsb(b.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);a.a[c.b.g].Fc(c);a.a[c.c.g].Fc(c)}} +function qmd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (startX: ';Bfb(b,a.j);b.a+=', startY: ';Bfb(b,a.k);b.a+=', endX: ';Bfb(b,a.b);b.a+=', endY: ';Bfb(b,a.c);b.a+=', identifier: ';Efb(b,a.d);b.a+=')';return b.a} +function EId(a){var b;if((a.Db&64)!=0)return qnd(a);b=new Jfb(qnd(a));b.a+=' (ordered: ';Ffb(b,(a.Bb&256)!=0);b.a+=', unique: ';Ffb(b,(a.Bb&512)!=0);b.a+=', lowerBound: ';Cfb(b,a.s);b.a+=', upperBound: ';Cfb(b,a.t);b.a+=')';return b.a} +function Wnd(a,b,c,d,e,f,g,h){var i;JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=d;dJd(a,e);fJd(a,f);ZId(a,g);eJd(a,false);CId(a,true);aJd(a,h);BId(a,true);AId(a,0);a.b=0;DId(a,1);i=xId(a,b,null);!!i&&i.Fi();MJd(a,false);return a} +function fyb(a,b){var c,d,e,f;c=BD(Phb(a.a,b),512);if(!c){d=new wyb(b);e=(oyb(),lyb)?null:d.c;f=qfb(e,0,$wnd.Math.max(0,kfb(e,wfb(46))));vyb(d,fyb(a,f));(lyb?null:d.c).length==0&&qyb(d,new zyb);Shb(a.a,lyb?null:d.c,d);return d}return c} +function BOb(a,b){var c;a.b=b;a.g=new Rkb;c=COb(a.b);a.e=c;a.f=c;a.c=Ccb(DD(vNb(a.b,(fFb(),$Eb))));a.a=ED(vNb(a.b,(Y9c(),r8c)));a.a==null&&(a.a=1);Edb(a.a)>1?(a.e*=Edb(a.a)):(a.f/=Edb(a.a));DOb(a);EOb(a);AOb(a);yNb(a.b,(CPb(),uPb),a.g)} +function Y5b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new olb(a);f.a<f.c.c.length;){e=BD(mlb(f),10);yNb(e,(Nyc(),mwc),(F7c(),B7c));e.o.a=d;for(h=Y_b(e,(Ucd(),zcd)).Kc();h.Ob();){g=BD(h.Pb(),11);g.n.a=d}d+=i}} +function Qxd(a,b,c){var d,e,f;if(a.ej()){f=a.fj();kud(a,b,c);d=a.Zi(3,null,c,b,f);if(a.bj()){e=a.cj(c,null);a.ij()&&(e=a.jj(c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{kud(a,b,c);if(a.bj()){e=a.cj(c,null);!!e&&e.Fi()}}} +function ILd(a,b,c){var d,e,f,g,h,i;h=a.Gk(c);if(h!=c){g=a.g[b];i=h;mud(a,b,a.oi(b,i));f=g;a.gi(b,i,f);if(a.rk()){d=c;e=a.dj(d,null);!BD(h,49).eh()&&(e=a.cj(i,e));!!e&&e.Fi()}oid(a.e)&&GLd(a,a.Zi(9,c,h,b,false));return h}else{return c}} +function pVb(a,b){var c,d,e,f;for(d=new olb(a.a.a);d.a<d.c.c.length;){c=BD(mlb(d),189);c.g=true}for(f=new olb(a.a.b);f.a<f.c.c.length;){e=BD(mlb(f),81);e.k=Ccb(DD(a.e.Kb(new vgd(e,b))));e.d.g=e.d.g&Ccb(DD(a.e.Kb(new vgd(e,b))))}return a} +function pkc(a){var b,c,d,e,f;c=(b=BD(gdb(F1),9),new xqb(b,BD(_Bb(b,b.length),9),0));f=BD(vNb(a,(wtc(),gtc)),10);if(f){for(e=new olb(f.j);e.a<e.c.c.length;){d=BD(mlb(e),11);PD(vNb(d,$sc))===PD(a)&&a1b(new b1b(d.b))&&rqb(c,d.j)}}return c} +function zCc(a,b,c){var d,e,f,g,h;if(a.d[c.p]){return}for(e=new Sr(ur(U_b(c).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);h=d.d.i;for(g=new Sr(ur(R_b(h).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);f.c.i==b&&(a.a[f.p]=true)}zCc(a,b,h)}a.d[c.p]=true} +function Bjd(a,b){var c,d,e,f,g,h,i;d=aeb(a.Db&254);if(d==1){a.Eb=null}else{f=CD(a.Eb);if(d==2){e=zjd(a,b);a.Eb=f[e==0?1:0]}else{g=KC(SI,Uhe,1,d-1,5,1);for(c=2,h=0,i=0;c<=128;c<<=1){c==b?++h:(a.Db&c)!=0&&(g[i++]=f[h++])}a.Eb=g}}a.Db&=~b} +function n1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=BD(qud(d,e),170);switch($1d(q1d(a,c))){case 4:case 5:case 6:{!f&&(f=new Rkb);f.c[f.c.length]=c;break}}}return !f?(mmb(),mmb(),jmb):f} +function Uee(a){var b;b=0;switch(a){case 105:b=2;break;case 109:b=8;break;case 115:b=4;break;case 120:b=16;break;case 117:b=32;break;case 119:b=64;break;case 70:b=256;break;case 72:b=128;break;case 88:b=512;break;case 44:b=zte;}return b} +function Ghb(a,b,c,d,e){var f,g,h,i;if(PD(a)===PD(b)&&d==e){Lhb(a,d,c);return}for(h=0;h<d;h++){g=0;f=a[h];for(i=0;i<e;i++){g=wbb(wbb(Ibb(xbb(f,Yje),xbb(b[i],Yje)),xbb(c[h+i],Yje)),xbb(Tbb(g),Yje));c[h+i]=Tbb(g);g=Pbb(g,32)}c[h+e]=Tbb(g)}} +function COb(a){var b,c,d,e,f,g,h,i,j,k,l;k=0;j=0;e=a.a;h=e.a.gc();for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),561);b=(c.b&&LOb(c),c.a);l=b.a;g=b.b;k+=l+g;j+=l*g}i=$wnd.Math.sqrt(400*h*j-4*j+k*k)+k;f=2*(100*h-1);if(f==0){return i}return i/f} +function mOc(a,b){if(b.b!=0){isNaN(a.s)?(a.s=Edb((sCb(b.b!=0),ED(b.a.a.c)))):(a.s=$wnd.Math.min(a.s,Edb((sCb(b.b!=0),ED(b.a.a.c)))));isNaN(a.c)?(a.c=Edb((sCb(b.b!=0),ED(b.c.b.c)))):(a.c=$wnd.Math.max(a.c,Edb((sCb(b.b!=0),ED(b.c.b.c)))))}} +function Pld(a){var b,c,d,e;b=null;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));Qr(d);){c=BD(Rr(d),82);e=atd(c);if(!b){b=Xod(e)}else if(b!=Xod(e)){return true}}return false} +function Rxd(a,b){var c,d,e,f;if(a.ej()){c=a.i;f=a.fj();lud(a,b);d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);a.ij()&&(e=a.jj(b,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{lud(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}} +function rwd(a,b,c){var d,e,f;if(a.ej()){f=a.fj();++a.j;a.Hi(b,a.oi(b,c));d=a.Zi(3,null,c,b,f);if(a.bj()){e=a.cj(c,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{++a.j;a.Hi(b,a.oi(b,c));if(a.bj()){e=a.cj(c,null);!!e&&e.Fi()}}} +function Wee(a){var b,c,d,e;e=a.length;b=null;for(d=0;d<e;d++){c=(BCb(d,a.length),a.charCodeAt(d));if(hfb('.*+?{[()|\\^$',wfb(c))>=0){if(!b){b=new Ifb;d>0&&Efb(b,a.substr(0,d))}b.a+='\\';Afb(b,c&aje)}else !!b&&Afb(b,c&aje)}return b?b.a:a} +function l5c(a){var b;if(!a.a){throw vbb(new Zdb('IDataType class expected for layout option '+a.f))}b=gvd(a.a);if(b==null){throw vbb(new Zdb("Couldn't create new instance of property '"+a.f+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return BD(b,414)} +function aid(a){var b,c,d,e,f;f=a.eh();if(f){if(f.kh()){e=xid(a,f);if(e!=f){c=a.Vg();d=(b=a.Vg(),b>=0?a.Qg(null):a.eh().ih(a,-1-b,null,null));a.Rg(BD(e,49),c);!!d&&d.Fi();a.Lg()&&a.Mg()&&c>-1&&Uhd(a,new nSd(a,9,c,f,e));return e}}}return f} +function nTb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d<f.c.length;++d){h=(tCb(d,f.c.length),BD(f.c[d],144));for(e=d+1;e<f.c.length;++e){i=(tCb(e,f.c.length),BD(f.c[e],144));c=S6c(h.d,i.d);b=c-a.a[h.b][i.b];g+=a.i[h.b][i.b]*b*b}}return g} +function _ac(a,b){var c;if(wNb(b,(Nyc(),mxc))){return}c=hbc(BD(vNb(b,Uac),360),BD(vNb(a,mxc),163));yNb(b,Uac,c);if(Qr(new Sr(ur(O_b(b).a.Kc(),new Sq)))){return}switch(c.g){case 1:yNb(b,mxc,(Ctc(),xtc));break;case 2:yNb(b,mxc,(Ctc(),ztc));}} +function wkc(a,b){var c;mkc(a);a.a=(c=new Ji,MAb(new YAb(null,new Kub(b.d,16)),new Vkc(c)),c);rkc(a,BD(vNb(b.b,(Nyc(),Wwc)),376));tkc(a);skc(a);qkc(a);ukc(a);vkc(a,b);MAb(LAb(new YAb(null,$i(Yi(a.b).a)),new Lkc),new Nkc);b.a=false;a.a=null} +function Bod(){fod.call(this,yte,(Fhd(),Ehd));this.p=null;this.a=null;this.f=null;this.n=null;this.g=null;this.c=null;this.i=null;this.j=null;this.d=null;this.b=null;this.e=null;this.k=null;this.o=null;this.s=null;this.q=false;this.r=false} +function Csd(){Csd=ccb;Bsd=new Dsd(Wne,0);ysd=new Dsd('INSIDE_SELF_LOOPS',1);zsd=new Dsd('MULTI_EDGES',2);xsd=new Dsd('EDGE_LABELS',3);Asd=new Dsd('PORTS',4);vsd=new Dsd('COMPOUND',5);usd=new Dsd('CLUSTERS',6);wsd=new Dsd('DISCONNECTED',7)} +function Sgb(a,b){var c,d,e;if(b==0){return (a.a[0]&1)!=0}if(b<0){throw vbb(new ocb('Negative bit address'))}e=b>>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Mgb(a);if(e<d){return false}else d==e?(c=-c):(c=~c)}return (c&b)!=0} +function O1c(a,b,c,d){var e;BD(c.b,65);BD(c.b,65);BD(d.b,65);BD(d.b,65);e=c7c(R6c(BD(c.b,65).c),BD(d.b,65).c);$6c(e,YNb(BD(c.b,65),BD(d.b,65),e));BD(d.b,65);BD(d.b,65);BD(d.b,65).c.a+e.a;BD(d.b,65).c.b+e.b;BD(d.b,65);Hkb(d.a,new T1c(a,b,d))} +function vNd(a,b){var c,d,e,f,g,h,i;f=b.e;if(f){c=aid(f);d=BD(a.g,674);for(g=0;g<a.i;++g){i=d[g];if(JQd(i)==c){e=(!i.d&&(i.d=new xMd(j5,i,1)),i.d);h=BD(c.ah(Nid(f,f.Cb,f.Db>>16)),15).Xc(f);if(h<e.i){return vNd(a,BD(qud(e,h),87))}}}}return b} +function bcb(a,b,c){var d=_bb,h;var e=d[a];var f=e instanceof Array?e[0]:null;if(e&&!f){_=e}else{_=(h=b&&b.prototype,!h&&(h=_bb[b]),ecb(h));_.hm=c;!b&&(_.im=gcb);d[a]=_}for(var g=3;g<arguments.length;++g){arguments[g].prototype=_}f&&(_.gm=f)} +function Qr(a){var b;while(!BD(Qb(a.a),47).Ob()){a.d=Pr(a);if(!a.d){return false}a.a=BD(a.d.Pb(),47);if(JD(a.a,39)){b=BD(a.a,39);a.a=b.a;!a.b&&(a.b=new jkb);Wjb(a.b,a.d);if(b.b){while(!akb(b.b)){Wjb(a.b,BD(gkb(b.b),47))}}a.d=b.d}}return true} +function krb(a,b){var c,d,e,f,g;f=b==null?0:a.b.se(b);d=(c=a.a.get(f),c==null?new Array:c);for(g=0;g<d.length;g++){e=d[g];if(a.b.re(b,e.cd())){if(d.length==1){d.length=0;trb(a.a,f)}else{d.splice(g,1)}--a.c;zpb(a.b);return e.dd()}}return null} +function GGb(a,b){var c,d,e,f;e=1;b.j=true;f=null;for(d=new olb(LFb(b));d.a<d.c.c.length;){c=BD(mlb(d),213);if(!a.c[c.c]){a.c[c.c]=true;f=xFb(c,b);if(c.f){e+=GGb(a,f)}else if(!f.j&&c.a==c.e.e-c.d.e){c.f=true;Qqb(a.p,c);e+=GGb(a,f)}}}return e} +function MVb(a){var b,c,d;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=(uCb(0),0);if(d>0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} +function N3b(a){var b,c,d,e,f;e=new Rkb;f=O3b(a,e);b=BD(vNb(a,(wtc(),gtc)),10);if(b){for(d=new olb(b.j);d.a<d.c.c.length;){c=BD(mlb(d),11);PD(vNb(c,$sc))===PD(a)&&(f=$wnd.Math.max(f,O3b(c,e)))}}e.c.length==0||yNb(a,Ysc,f);return f!=-1?e:null} +function a9b(a,b,c){var d,e,f,g,h,i;f=BD(Ikb(b.e,0),17).c;d=f.i;e=d.k;i=BD(Ikb(c.g,0),17).d;g=i.i;h=g.k;e==(j0b(),g0b)?yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11)):yNb(a,(wtc(),Vsc),f);h==g0b?yNb(a,(wtc(),Wsc),BD(vNb(g,Wsc),11)):yNb(a,(wtc(),Wsc),i)} +function Rs(a,b){var c,d,e,f;f=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));c=f&a.b.length-1;e=null;for(d=a.b[c];d;e=d,d=d.a){if(d.d==f&&Hb(d.i,b)){!e?(a.b[c]=d.a):(e.a=d.a);Bs(d.c,d.f);As(d.b,d.e);--a.f;++a.e;return true}}return false} +function lD(a,b){var c,d,e,f,g;b&=63;c=a.h;d=(c&Gje)!=0;d&&(c|=-1048576);if(b<22){g=c>>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?Fje:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?Fje:0;f=d?Eje:0;e=c>>b-44}return TC(e&Eje,f&Eje,g&Fje)} +function XOb(a){var b,c,d,e,f,g;this.c=new Rkb;this.d=a;d=Pje;e=Pje;b=Qje;c=Qje;for(g=Jsb(a,0);g.b!=g.d.c;){f=BD(Xsb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new J6c(d,e,b-d,c-e)} +function Dac(a,b){var c,d,e,f,g,h;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);g.k==(j0b(),f0b)&&zac(g,b);for(d=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);yac(c,b)}}}} +function Xoc(a){var b,c,d;this.c=a;d=BD(vNb(a,(Nyc(),Lwc)),103);b=Edb(ED(vNb(a,owc)));c=Edb(ED(vNb(a,Dyc)));d==(ead(),aad)||d==bad||d==cad?(this.b=b*c):(this.b=1/(b*c));this.j=Edb(ED(vNb(a,wyc)));this.e=Edb(ED(vNb(a,vyc)));this.f=a.b.c.length} +function ADc(a){var b,c;a.e=KC(WD,oje,25,a.p.c.length,15,1);a.k=KC(WD,oje,25,a.p.c.length,15,1);for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);a.e[b.p]=sr(new Sr(ur(R_b(b).a.Kc(),new Sq)));a.k[b.p]=sr(new Sr(ur(U_b(b).a.Kc(),new Sq)))}} +function DDc(a){var b,c,d,e,f,g;e=0;a.q=new Rkb;b=new Tqb;for(g=new olb(a.p);g.a<g.c.c.length;){f=BD(mlb(g),10);f.p=e;for(d=new Sr(ur(U_b(f).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);Qqb(b,c.d.i)}b.a.Bc(f)!=null;Ekb(a.q,new Vqb(b));b.a.$b();++e}} +function JTc(){JTc=ccb;CTc=new q0b(20);BTc=new Osd((Y9c(),f9c),CTc);HTc=new Osd(T9c,20);uTc=new Osd(r8c,tme);ETc=new Osd(D9c,meb(1));GTc=new Osd(H9c,(Bcb(),true));vTc=y8c;xTc=Y8c;yTc=_8c;zTc=b9c;wTc=W8c;ATc=e9c;DTc=x9c;ITc=(rTc(),pTc);FTc=nTc} +function RBd(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.f>0&&JD(b,42)){a.a.qj();j=BD(b,42);i=j.cd();f=i==null?0:tb(i);g=DAd(a.a,f);c=a.a.d[g];if(c){d=BD(c.g,367);k=c.i;for(h=0;h<k;++h){e=d[h];if(e.Sh()==f&&e.Fb(j)){RBd(a,j);return true}}}}return false} +function skc(a){var b,c,d,e;for(e=BD(Qc(a.a,(Xjc(),Ujc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);c=(b=Ec(d.k),b.Hc((Ucd(),Acd))?b.Hc(zcd)?b.Hc(Rcd)?b.Hc(Tcd)?null:dkc:fkc:ekc:ckc);kkc(a,d,c[0],(Fkc(),Ckc),0);kkc(a,d,c[1],Dkc,1);kkc(a,d,c[2],Ekc,1)}} +function enc(a,b){var c,d;c=fnc(b);inc(a,b,c);uPc(a.a,BD(vNb(Q_b(b.b),(wtc(),jtc)),230));dnc(a);cnc(a,b);d=KC(WD,oje,25,b.b.j.c.length,15,1);lnc(a,b,(Ucd(),Acd),d,c);lnc(a,b,zcd,d,c);lnc(a,b,Rcd,d,c);lnc(a,b,Tcd,d,c);a.a=null;a.c=null;a.b=null} +function OYc(){OYc=ccb;LYc=(zYc(),yYc);KYc=new Nsd(Bre,LYc);IYc=new Nsd(Cre,(Bcb(),true));meb(-1);FYc=new Nsd(Dre,meb(-1));meb(-1);GYc=new Nsd(Ere,meb(-1));JYc=new Nsd(Fre,false);MYc=new Nsd(Gre,true);HYc=new Nsd(Hre,false);NYc=new Nsd(Ire,-1)} +function yld(a,b,c){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);!a.e&&(a.e=new y5d(B2,a,7,4));ytd(a.e,BD(c,14));return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);!a.d&&(a.d=new y5d(B2,a,8,5));ytd(a.d,BD(c,14));return;}Zkd(a,b,c)} +function At(a,b){var c,d,e,f,g;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}g=BD(b,15);if(a.gc()!=g.gc()){return false}f=g.Kc();for(d=a.Kc();d.Ob();){c=d.Pb();e=f.Pb();if(!(PD(c)===PD(e)||c!=null&&pb(c,e))){return false}}return true} +function U6b(a,b){var c,d,e,f;f=BD(GAb(LAb(LAb(new YAb(null,new Kub(b.b,16)),new $6b),new a7b),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);f.Jc(new c7b);c=0;for(e=f.Kc();e.Ob();){d=BD(e.Pb(),11);d.p==-1&&T6b(a,d,c++)}} +function Wzc(a){switch(a.g){case 0:return new KLc;case 1:return new dJc;case 2:return new tJc;case 3:return new CMc;case 4:return new $Jc;default:throw vbb(new Wdb('No implementation is available for the node placer '+(a.f!=null?a.f:''+a.g)));}} +function nqc(a){switch(a.g){case 0:return new aCc;case 1:return new VBc;case 2:return new kCc;case 3:return new rCc;case 4:return new eCc;default:throw vbb(new Wdb('No implementation is available for the cycle breaker '+(a.f!=null?a.f:''+a.g)));}} +function HWc(){HWc=ccb;BWc=new Nsd(lre,meb(0));CWc=new Nsd(mre,0);yWc=(pWc(),mWc);xWc=new Nsd(nre,yWc);meb(0);wWc=new Nsd(ore,meb(1));EWc=(sXc(),qXc);DWc=new Nsd(pre,EWc);GWc=(fWc(),eWc);FWc=new Nsd(qre,GWc);AWc=(iXc(),hXc);zWc=new Nsd(rre,AWc)} +function XXb(a,b,c){var d;d=null;!!b&&(d=b.d);hYb(a,new cWb(b.n.a-d.b+c.a,b.n.b-d.d+c.b));hYb(a,new cWb(b.n.a-d.b+c.a,b.n.b+b.o.b+d.a+c.b));hYb(a,new cWb(b.n.a+b.o.a+d.c+c.a,b.n.b-d.d+c.b));hYb(a,new cWb(b.n.a+b.o.a+d.c+c.a,b.n.b+b.o.b+d.a+c.b))} +function T6b(a,b,c){var d,e,f;b.p=c;for(f=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(b),new R0b(b)])));Qr(f);){d=BD(Rr(f),11);d.p==-1&&T6b(a,d,c)}if(b.i.k==(j0b(),g0b)){for(e=new olb(b.i.j);e.a<e.c.c.length;){d=BD(mlb(e),11);d!=b&&d.p==-1&&T6b(a,d,c)}}} +function rPc(a){var b,c,d,e,f;e=BD(GAb(IAb(UAb(a)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=dme;if(e.gc()>=2){c=e.Kc();b=ED(c.Pb());while(c.Ob()){f=b;b=ED(c.Pb());d=$wnd.Math.min(d,(uCb(b),b)-(uCb(f),f))}}return d} +function gUc(a,b){var c,d,e,f,g;d=new Psb;Gsb(d,b,d.c.b,d.c);do{c=(sCb(d.b!=0),BD(Nsb(d,d.a.a),86));a.b[c.g]=1;for(f=Jsb(c.d,0);f.b!=f.d.c;){e=BD(Xsb(f),188);g=e.c;a.b[g.g]==1?Dsb(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Gsb(d,g,d.c.b,d.c)}}while(d.b!=0)} +function Ju(a,b){var c,d,e;if(PD(b)===PD(Qb(a))){return true}if(!JD(b,15)){return false}d=BD(b,15);e=a.gc();if(e!=d.gc()){return false}if(JD(d,54)){for(c=0;c<e;c++){if(!Hb(a.Xb(c),d.Xb(c))){return false}}return true}else{return kr(a.Kc(),d.Kc())}} +function Aac(a,b){var c,d;if(a.c.length!=0){if(a.c.length==2){zac((tCb(0,a.c.length),BD(a.c[0],10)),(rbd(),nbd));zac((tCb(1,a.c.length),BD(a.c[1],10)),obd)}else{for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),10);zac(c,b)}}a.c=KC(SI,Uhe,1,0,5,1)}} +function uKc(a){var b,c;if(a.c.length!=2){throw vbb(new Zdb('Order only allowed for two paths.'))}b=(tCb(0,a.c.length),BD(a.c[0],17));c=(tCb(1,a.c.length),BD(a.c[1],17));if(b.d.i!=c.c.i){a.c=KC(SI,Uhe,1,0,5,1);a.c[a.c.length]=c;a.c[a.c.length]=b}} +function EMc(a,b){var c,d,e,f,g,h;d=new $rb;g=Gx(new amb(a.g));for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),10);if(!e){Sdd(b,'There are no classes in a balanced layout.');break}h=a.j[e.p];c=BD(Wrb(d,h),15);if(!c){c=new Rkb;Xrb(d,h,c)}c.Fc(e)}return d} +function Dqd(a,b,c){var d,e,f,g,h,i,j;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Zpd(c,g.a);if(i){j=ftd(_pd(i,Ite),b);Rhb(a.f,j,i);e=Vte in i.a;e&&Lkd(j,_pd(i,Vte));grd(i,j);hrd(i,j)}}}} +function ndc(a,b){var c,d,e,f,g;Odd(b,'Port side processing',1);for(g=new olb(a.a);g.a<g.c.c.length;){e=BD(mlb(g),10);odc(e)}for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);odc(e)}}Qdd(b)} +function bfc(a,b,c){var d,e,f,g,h;e=a.f;!e&&(e=BD(a.a.a.ec().Kc().Pb(),57));cfc(e,b,c);if(a.a.a.gc()==1){return}d=b*c;for(g=a.a.a.ec().Kc();g.Ob();){f=BD(g.Pb(),57);if(f!=e){h=ugc(f);if(h.f.d){f.d.d+=d+ple;f.d.a-=d+ple}else h.f.a&&(f.d.a-=d+ple)}}} +function tQb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;g=c-a;h=d-b;f=$wnd.Math.atan2(g,h);i=f+cme;j=f-cme;k=e*$wnd.Math.sin(i)+a;m=e*$wnd.Math.cos(i)+b;l=e*$wnd.Math.sin(j)+a;n=e*$wnd.Math.cos(j)+b;return Ou(OC(GC(m1,1),nie,8,0,[new f7c(k,m),new f7c(l,n)]))} +function OLc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];h=(l=a.g[f.p],Edb(a.p[l.p])+Edb(a.d[f.p])-f.d.d);i=RLc(f,d);if(i){g=(j=a.g[i.p],Edb(a.p[j.p])+Edb(a.d[i.p])+i.o.b+i.d.a);e=$wnd.Math.min(e,h-(g+jBc(a.k,f,i)))}}while(k!=f);return e} +function PLc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];g=(l=a.g[f.p],Edb(a.p[l.p])+Edb(a.d[f.p])+f.o.b+f.d.a);i=QLc(f,d);if(i){h=(j=a.g[i.p],Edb(a.p[j.p])+Edb(a.d[i.p])-i.d.d);e=$wnd.Math.min(e,h-(g+jBc(a.k,f,i)))}}while(k!=f);return e} +function hkd(a,b){var c,d;d=(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),AAd(a.o,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c)),a);return c} +function Hbd(){Hbd=ccb;zbd=new Ibd('H_LEFT',0);ybd=new Ibd('H_CENTER',1);Bbd=new Ibd('H_RIGHT',2);Gbd=new Ibd('V_TOP',3);Fbd=new Ibd('V_CENTER',4);Ebd=new Ibd('V_BOTTOM',5);Cbd=new Ibd('INSIDE',6);Dbd=new Ibd('OUTSIDE',7);Abd=new Ibd('H_PRIORITY',8)} +function o6d(a){var b,c,d,e,f,g,h;b=a.Hh(_ve);if(b){h=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'settingDelegates'));if(h!=null){c=new Rkb;for(e=mfb(h,'\\w+'),f=0,g=e.length;f<g;++f){d=e[f];c.c[c.c.length]=d}return c}}return mmb(),mmb(),jmb} +function sGb(a,b){var c,d,e,f,g,h,i;if(!b.f){throw vbb(new Wdb('The input edge is not a tree edge.'))}f=null;e=Ohe;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),213);h=c.d;i=c.e;if(xGb(a,h,b)&&!xGb(a,i,b)){g=i.e-h.e-c.a;if(g<e){e=g;f=c}}}return f} +function qTb(a){var b,c,d,e,f,g;if(a.f.e.c.length<=1){return}b=0;e=nTb(a);c=Pje;do{b>0&&(e=c);for(g=new olb(a.f.e);g.a<g.c.c.length;){f=BD(mlb(g),144);if(Ccb(DD(vNb(f,(bTb(),USb))))){continue}d=mTb(a,f);P6c(X6c(f.d),d)}c=nTb(a)}while(!pTb(a,b++,e,c))} +function $ac(a,b){var c,d,e;Odd(b,'Layer constraint preprocessing',1);c=new Rkb;e=new Bib(a.a,0);while(e.b<e.d.gc()){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),10));if(Zac(d)){Xac(d);c.c[c.c.length]=d;uib(e)}}c.c.length==0||yNb(a,(wtc(),Lsc),c);Qdd(b)} +function sjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.n;a.a==(Ajc(),xjc)||a.i==(Ucd(),zcd)?(e.a=f):a.a==yjc||a.i==(Ucd(),Tcd)?(e.a=f+a.j.a-c.o.a):(e.a=f+(a.j.a-c.o.a)/2);e.b=g;P6c(e,b);g+=c.o.b+a.e}} +function LSc(a,b,c){var d,e,f,g;Odd(c,'Processor set coordinates',1);a.a=b.b.b==0?1:b.b.b;f=null;d=Jsb(b.b,0);while(!f&&d.b!=d.d.c){g=BD(Xsb(d),86);if(Ccb(DD(vNb(g,(mTc(),jTc))))){f=g;e=g.e;e.a=BD(vNb(g,kTc),19).a;e.b=0}}MSc(a,URc(f),Udd(c,1));Qdd(c)} +function xSc(a,b,c){var d,e,f;Odd(c,'Processor determine the height for each level',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){f=BD(Xsb(d),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(e=f)}!!e&&ySc(a,Ou(OC(GC(q$,1),fme,86,0,[e])),c);Qdd(c)} +function brd(a,b){var c,d,e,f,g,h,i,j,k,l;j=a;i=$pd(j,'individualSpacings');if(i){d=ikd(b,(Y9c(),O9c));g=!d;if(g){e=new _fd;jkd(b,O9c,e)}h=BD(hkd(b,O9c),373);l=i;f=null;!!l&&(f=(k=$B(l,KC(ZI,nie,2,0,6,1)),new mC(l,k)));if(f){c=new Frd(l,h);reb(f,c)}}} +function frd(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=null;l=a;k=null;if(cue in l.a||due in l.a||Ote in l.a){j=null;m=etd(b);g=$pd(l,cue);c=new Ird(m);Eqd(c.a,g);h=$pd(l,due);d=new asd(m);Pqd(d.a,h);f=Ypd(l,Ote);e=new dsd(m);j=(Qqd(e.a,f),f);k=j}i=k;return i} +function $w(a,b){var c,d,e;if(b===a){return true}if(JD(b,543)){e=BD(b,835);if(a.a.d!=e.a.d||Ah(a).gc()!=Ah(e).gc()){return false}for(d=Ah(e).Kc();d.Ob();){c=BD(d.Pb(),416);if(Aw(a,c.a.cd())!=BD(c.a.dd(),14).gc()){return false}}return true}return false} +function BMb(a){var b,c,d,e;d=BD(a.a,19).a;e=BD(a.b,19).a;b=d;c=e;if(d==0&&e==0){c-=1}else{if(d==-1&&e<=0){b=0;c-=2}else{if(d<=0&&e>0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new vgd(meb(b),meb(c))} +function PIc(a,b){if(a.c<b.c){return -1}else if(a.c>b.c){return 1}else if(a.b<b.b){return -1}else if(a.b>b.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(UIc(),TIc)&&b.d==SIc){return -1}else if(a.d==SIc&&b.d==TIc){return 1}return 0} +function aNc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=NLc(a.a,g,d);if(e>0&&e<dme){c=OLc(a.a,d.i,e,a.c);TLc(a.a,d.i,-c);return c>0}else if(e<0&&-e<dme){c=PLc(a.a,d.i,-e,a.c);TLc(a.a,d.i,c);return c>0}return false} +function RZc(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new olb(a.c);l.a<l.c.c.length;){k=BD(mlb(l),33);j=k.g;i=k.f;dld(k,k.i+f*e);eld(k,k.j+d*c);cld(k,k.g+e);ald(k,a.a);++f;h=k.g;g=k.f;Ffd(k,new f7c(h,g),new f7c(j,i))}} +function Xmd(a){var b,c,d,e,f,g,h;if(a==null){return null}h=a.length;e=(h+1)/2|0;g=KC(SD,wte,25,e,15,1);h%2!=0&&(g[--e]=jnd((BCb(h-1,a.length),a.charCodeAt(h-1))));for(c=0,d=0;c<e;++c){b=jnd(bfb(a,d++));f=jnd(bfb(a,d++));g[c]=(b<<4|f)<<24>>24}return g} +function vdb(a){if(a.pe()){var b=a.c;b.qe()?(a.o='['+b.n):!b.pe()?(a.o='[L'+b.ne()+';'):(a.o='['+b.ne());a.b=b.me()+'[]';a.k=b.oe()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=ydb('.',[c,ydb('$',d)]);a.b=ydb('.',[c,ydb('.',d)]);a.k=d[d.length-1]} +function qGb(a,b){var c,d,e,f,g;g=null;for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);if(e.b.a.c.length==e.g.a.c.length){d=e.e;g=BGb(e);for(c=e.e-BD(g.a,19).a+1;c<e.e+BD(g.b,19).a;c++){b[c]<b[d]&&(d=c)}if(b[d]<b[e.e]){--b[e.e];++b[d];e.e=d}}}} +function SLc(a){var b,c,d,e,f,g,h,i;e=Pje;d=Qje;for(c=new olb(a.e.b);c.a<c.c.c.length;){b=BD(mlb(c),29);for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);i=Edb(a.p[f.p]);h=i+Edb(a.b[a.g[f.p].p]);e=$wnd.Math.min(e,i);d=$wnd.Math.max(d,h)}}return d-e} +function r1d(a,b,c,d){var e,f,g,h,i,j;i=null;e=f1d(a,b);for(h=0,j=e.gc();h<j;++h){f=BD(e.Xb(h),170);if(dfb(d,a2d(q1d(a,f)))){g=b2d(q1d(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(dfb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} +function s1d(a,b,c,d){var e,f,g,h,i,j;i=null;e=g1d(a,b);for(h=0,j=e.gc();h<j;++h){f=BD(e.Xb(h),170);if(dfb(d,a2d(q1d(a,f)))){g=b2d(q1d(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(dfb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} +function p3d(a,b,c){var d,e,f,g,h,i;g=new yud;h=S6d(a.e.Tg(),b);d=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(f=0;f<a.i;++f){e=d[f];h.rl(e.ak())&&wtd(g,e)}}else{for(f=0;f<a.i;++f){e=d[f];if(h.rl(e.ak())){i=e.dd();wtd(g,c?b3d(a,b,f,g.i,i):i)}}}return wud(g)} +function T9b(a,b){var c,d,e,f,g;c=new Rpb(EW);for(e=(Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])),f=0,g=e.length;f<g;++f){d=e[f];Opb(c,d,new Rkb)}MAb(NAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new hac),new jac),new lac(b)),new nac(c));return c} +function AVc(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(f=b.Kc();f.Ob();){e=BD(f.Pb(),33);k=e.i+e.g/2;m=e.j+e.f/2;i=a.f;g=i.i+i.g/2;h=i.j+i.f/2;j=k-g;l=m-h;d=$wnd.Math.sqrt(j*j+l*l);j*=a.e/d;l*=a.e/d;if(c){k-=j;m-=l}else{k+=j;m+=l}dld(e,k-e.g/2);eld(e,m-e.f/2)}} +function Yfe(a){var b,c,d;if(a.c)return;if(a.b==null)return;for(b=a.b.length-4;b>=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} +function UUb(a,b){var c,d,e,f,g,h,i,j;g=b==1?KUb:JUb;for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),103);for(i=BD(Qc(a.f.c,e),21).Kc();i.Ob();){h=BD(i.Pb(),46);d=BD(h.b,81);j=BD(h.a,189);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} +function PFc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h<i;++h){f=g[h];c=new Dnc(j==-1?a[0]:a[j],b,(xzc(),wzc));for(d=0;d<f.length;d++){for(e=d+1;e<f.length;e++){wNb(f[d],(wtc(),Zsc))&&wNb(f[e],Zsc)&&ync(c,f[d],f[e])>0&&++k}}++j}return k} +function Eid(a){var b,c;c=new Wfb(hdb(a.gm));c.a+='@';Qfb(c,(b=tb(a)>>>0,b.toString(16)));if(a.kh()){c.a+=' (eProxyURI: ';Pfb(c,a.qh());if(a.$g()){c.a+=' eClass: ';Pfb(c,a.$g())}c.a+=')'}else if(a.$g()){c.a+=' (eClass: ';Pfb(c,a.$g());c.a+=')'}return c.a} +function TDb(a){var b,c,d,e;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}a.d==(ead(),cad)&&SDb(a,aad);for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.g=b.i}for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);d.i=Qje}a.b.Le(a);return a} +function TPc(a,b){var c,d,e,f,g;if(b<2*a.b){throw vbb(new Wdb('The knot vector must have at least two time the dimension elements.'))}a.f=1;for(e=0;e<a.b;e++){Ekb(a.e,0)}g=b+1-2*a.b;c=g;for(f=1;f<g;f++){Ekb(a.e,f/c)}if(a.d){for(d=0;d<a.b;d++){Ekb(a.e,1)}}} +function ard(a,b){var c,d,e,f,g,h,i,j,k;j=b;k=BD(_o(qo(a.i),j),33);if(!k){e=_pd(j,Vte);h="Unable to find elk node for json object '"+e;i=h+"' Panic!";throw vbb(new cqd(i))}f=Ypd(j,'edges');c=new krd(a,k);mqd(c.a,c.b,f);g=Ypd(j,Jte);d=new vrd(a);xqd(d.a,g)} +function xAd(a,b,c,d){var e,f,g,h,i;if(d!=null){e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=BD(f[h],133);if(g.Sh()==c&&pb(d,g.cd())){return h}}}}else{e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=BD(f[h],133);if(PD(g.cd())===PD(d)){return h}}}}return -1} +function nUd(a,b){var c,d,e;c=b==null?Wd(irb(a.f,null)):Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e}else if(JD(c,498)){d=BD(c,1938);e=d.a;!!e&&(e.yb==null?undefined:b==null?jrb(a.f,null,e):Drb(a.g,b,e));return e}else{return null}} +function ide(a){hde();var b,c,d,e,f,g,h;if(a==null)return null;e=a.length;if(e%2!=0)return null;b=rfb(a);f=e/2|0;c=KC(SD,wte,25,f,15,1);for(d=0;d<f;d++){g=fde[b[d*2]];if(g==-1)return null;h=fde[b[d*2+1]];if(h==-1)return null;c[d]=(g<<4|h)<<24>>24}return c} +function lKb(a,b,c){var d,e,f;e=BD(Mpb(a.i,b),306);if(!e){e=new bIb(a.d,b,c);Npb(a.i,b,e);if(sJb(b)){CHb(a.a,b.c,b.b,e)}else{f=rJb(b);d=BD(Mpb(a.p,f),244);switch(f.g){case 1:case 3:e.j=true;lIb(d,b.b,e);break;case 4:case 2:e.k=true;lIb(d,b.c,e);}}}return e} +function r3d(a,b,c,d){var e,f,g,h,i,j;h=new yud;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];i.rl(f.ak())&&wtd(h,f)}}else{for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){j=f.dd();wtd(h,d?b3d(a,b,g,h.i,j):j)}}}return xud(h,c)} +function YCc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new olb(b.j);h.a<h.c.c.length;){g=BD(mlb(h),11);for(d=new olb(g.g);d.a<d.c.c.length;){c=BD(mlb(d),17);j=c.d.i;if(b!=j){i=YCc(a,j);f=$wnd.Math.max(f,i+1)}}}XCc(a,b,f);return f}} +function YGc(a,b,c){var d,e,f;for(d=1;d<a.c.length;d++){f=(tCb(d,a.c.length),BD(a.c[d],10));e=d;while(e>0&&b.ue((tCb(e-1,a.c.length),BD(a.c[e-1],10)),f)>0){Nkb(a,e,(tCb(e-1,a.c.length),BD(a.c[e-1],10)));--e}tCb(e,a.c.length);a.c[e]=f}c.a=new Lqb;c.b=new Lqb} +function n5c(a,b,c){var d,e,f,g,h,i,j,k;k=(d=BD(b.e&&b.e(),9),new xqb(d,BD(_Bb(d,d.length),9),0));i=mfb(c,'[\\[\\]\\s,]+');for(f=i,g=0,h=f.length;g<h;++g){e=f[g];if(ufb(e).length==0){continue}j=m5c(a,e);if(j==null){return null}else{rqb(k,BD(j,22))}}return k} +function KVb(a){var b,c,d;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=(uCb(0),0);if(d>0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} +function Hac(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(Ucd(),Acd)||b==zcd){xac(BD(bkb(a),15),(rbd(),nbd));xac(BD(bkb(a),15),obd)}else{xac(BD(bkb(a),15),(rbd(),obd));xac(BD(bkb(a),15),nbd)}}else{for(e=new xkb(a);e.a!=e.b;){d=BD(vkb(e),15);xac(d,c)}}} +function htd(a,b){var c,d,e,f,g,h,i;e=Nu(new qtd(a));h=new Bib(e,e.c.length);f=Nu(new qtd(b));i=new Bib(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sCb(h.b>0),BD(h.a.Xb(h.c=--h.b),33));d=(sCb(i.b>0),BD(i.a.Xb(i.c=--i.b),33));if(c==d){g=c}else{break}}return g} +function Cub(a,b){var c,d,e,f,g,h;f=a.a*kke+a.b*1502;h=a.b*kke+11;c=$wnd.Math.floor(h*lke);f+=c;h-=c*mke;f%=mke;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*wub[b])}else{e=a.a*(1<<b-24);g=$wnd.Math.floor(a.b*xub[b]);d=e+g;d>=2147483648&&(d-=Zje);return d}} +function Zic(a,b,c){var d,e,f,g;if(bjc(a,b)>bjc(a,c)){d=V_b(c,(Ucd(),zcd));a.d=d.dc()?0:B0b(BD(d.Xb(0),11));g=V_b(b,Tcd);a.b=g.dc()?0:B0b(BD(g.Xb(0),11))}else{e=V_b(c,(Ucd(),Tcd));a.d=e.dc()?0:B0b(BD(e.Xb(0),11));f=V_b(b,zcd);a.b=f.dc()?0:B0b(BD(f.Xb(0),11))}} +function l6d(a){var b,c,d,e,f,g,h;if(a){b=a.Hh(_ve);if(b){g=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'conversionDelegates'));if(g!=null){h=new Rkb;for(d=mfb(g,'\\w+'),e=0,f=d.length;e<f;++e){c=d[e];h.c[h.c.length]=c}return h}}}return mmb(),mmb(),jmb} +function FKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=c*Edb(ED(e.b.We(BKb)));e.e.b=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Acd)?-d.rf().b-Edb(ED(d.We(s9c))):Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Acd)?-d.rf().b:0)}} +function Woc(a){var b,c,d,e,f,g,h,i;b=true;e=null;f=null;j:for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);for(d=new Sr(ur(R_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(!!e&&e!=h){b=false;break j}e=h;g=c.c.i;if(!!f&&f!=g){b=false;break j}f=g}}return b} +function OOc(a,b,c){var d,e,f,g,h,i;f=-1;h=-1;for(g=0;g<b.c.length;g++){e=(tCb(g,b.c.length),BD(b.c[g],329));if(e.c>a.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=NOc(a,b,f,h);i=$Oc((tCb(d,b.c.length),BD(b.c[d],329)));YOc(b,d,c)}return i} +function lZc(){lZc=ccb;RYc=new Osd((Y9c(),r8c),1.3);VYc=I8c;gZc=new q0b(15);fZc=new Osd(f9c,gZc);jZc=new Osd(T9c,15);SYc=w8c;_Yc=Y8c;aZc=_8c;bZc=b9c;$Yc=W8c;cZc=e9c;hZc=x9c;eZc=(OYc(),KYc);ZYc=IYc;dZc=JYc;iZc=MYc;WYc=HYc;XYc=O8c;YYc=P8c;UYc=GYc;TYc=FYc;kZc=NYc} +function Bnd(a,b,c){var d,e,f,g,h,i,j;g=(f=new RHd,f);PHd(g,(uCb(b),b));j=(!g.b&&(g.b=new sId((jGd(),fGd),x6,g)),g.b);for(i=1;i<c.length;i+=2){HAd(j,c[i-1],c[i])}d=(!a.Ab&&(a.Ab=new cUd(a5,a,0,3)),a.Ab);for(h=0;h<0;++h){e=LHd(BD(qud(d,d.i-1),590));d=e}wtd(d,g)} +function MPb(a,b,c){var d,e,f;sNb.call(this,new Rkb);this.a=b;this.b=c;this.e=a;d=(a.b&&LOb(a),a.a);this.d=KPb(d.a,this.a);this.c=KPb(d.b,this.b);kNb(this,this.d,this.c);LPb(this);for(f=this.e.e.a.ec().Kc();f.Ob();){e=BD(f.Pb(),266);e.c.c.length>0&&JPb(this,e)}} +function IQb(a,b,c,d,e,f){var g,h,i;if(!e[b.b]){e[b.b]=true;g=d;!g&&(g=new kRb);Ekb(g.e,b);for(i=f[b.b].Kc();i.Ob();){h=BD(i.Pb(),282);if(h.d==c||h.c==c){continue}h.c!=b&&IQb(a,h.c,b,g,e,f);h.d!=b&&IQb(a,h.d,b,g,e,f);Ekb(g.c,h);Gkb(g.d,h.b)}return g}return null} +function e4b(a){var b,c,d,e,f,g,h;b=0;for(e=new olb(a.e);e.a<e.c.c.length;){d=BD(mlb(e),17);c=FAb(new YAb(null,new Kub(d.b,16)),new w4b);c&&++b}for(g=new olb(a.g);g.a<g.c.c.length;){f=BD(mlb(g),17);h=FAb(new YAb(null,new Kub(f.b,16)),new y4b);h&&++b}return b>=2} +function gec(a,b){var c,d,e,f;Odd(b,'Self-Loop pre-processing',1);for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(Ljc(c)){e=(f=new Kjc(c),yNb(c,(wtc(),ntc),f),Hjc(f),f);MAb(NAb(LAb(new YAb(null,new Kub(e.d,16)),new jec),new lec),new nec);eec(e)}}Qdd(b)} +function vnc(a,b,c,d,e){var f,g,h,i,j,k;f=a.c.d.j;g=BD(Ut(c,0),8);for(k=1;k<c.b;k++){j=BD(Ut(c,k),8);Gsb(d,g,d.c.b,d.c);h=Y6c(P6c(new g7c(g),j),0.5);i=Y6c(new e7c(bRc(f)),e);P6c(h,i);Gsb(d,h,d.c.b,d.c);g=j;f=b==0?Xcd(f):Vcd(f)}Dsb(d,(sCb(c.b!=0),BD(c.c.b.c,8)))} +function Jbd(a){Hbd();var b,c,d;c=qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Dbd]));if(Ox(Cx(c,a))>1){return false}b=qqb(zbd,OC(GC(B1,1),Kie,93,0,[ybd,Bbd]));if(Ox(Cx(b,a))>1){return false}d=qqb(Gbd,OC(GC(B1,1),Kie,93,0,[Fbd,Ebd]));if(Ox(Cx(d,a))>1){return false}return true} +function U0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'affiliation'));if(e!=null){d=kfb(e,wfb(35));return d==-1?l1d(a,u1d(a,bKd(b.Hj())),e):d==0?l1d(a,null,e.substr(1)):l1d(a,e.substr(0,d),e.substr(d+1))}}return null} +function ic(b){var c,d,e;try{return b==null?Xhe:fcb(b)}catch(a){a=ubb(a);if(JD(a,102)){c=a;e=hdb(rb(b))+'@'+(d=(Zfb(),kCb(b))>>>0,d.toString(16));tyb(xyb(),($xb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+hdb(c.gm)+'>'}else throw vbb(a)}} +function mzc(a){switch(a.g){case 0:return new xDc;case 1:return new ZCc;case 2:return new DCc;case 3:return new QCc;case 4:return new LDc;case 5:return new iDc;default:throw vbb(new Wdb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} +function AQc(a,b,c){var d,e,f;for(f=new olb(a.t);f.a<f.c.c.length;){d=BD(mlb(f),268);if(d.b.s<0&&d.c>0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Dsb(b,d.b)}}for(e=new olb(a.i);e.a<e.c.c.length;){d=BD(mlb(e),268);if(d.a.s<0&&d.c>0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Dsb(c,d.a)}}} +function Vud(a){var b,c,d,e,f;if(a.g==null){a.d=a.si(a.f);wtd(a,a.d);if(a.c){f=a.f;return f}}b=BD(a.g[a.i-1],47);e=b.Pb();a.e=b;c=a.si(e);if(c.Ob()){a.d=c;wtd(a,c)}else{a.d=null;while(!b.Ob()){NC(a.g,--a.i,null);if(a.i==0){break}d=BD(a.g[a.i-1],47);b=d}}return e} +function r2d(a,b){var c,d,e,f,g,h;d=b;e=d.ak();if(T6d(a.e,e)){if(e.hi()&&E2d(a,e,d.dd())){return false}}else{h=S6d(a.e.Tg(),e);c=BD(a.g,119);for(f=0;f<a.i;++f){g=c[f];if(h.rl(g.ak())){if(pb(g,d)){return false}else{BD(Gtd(a,f,b),72);return true}}}}return wtd(a,b)} +function r9b(a,b,c,d){var e,f,g,h;e=new b0b(a);__b(e,(j0b(),f0b));yNb(e,(wtc(),$sc),b);yNb(e,ktc,d);yNb(e,(Nyc(),Vxc),(dcd(),$bd));yNb(e,Vsc,b.c);yNb(e,Wsc,b.d);zbc(b,e);h=$wnd.Math.floor(c/2);for(g=new olb(e.j);g.a<g.c.c.length;){f=BD(mlb(g),11);f.n.b=h}return e} +function wac(a,b){var c,d,e,f,g,h,i,j,k;i=Pu(a.c-a.b&a.a.length-1);j=null;k=null;for(f=new xkb(a);f.a!=f.b;){e=BD(vkb(f),10);c=(h=BD(vNb(e,(wtc(),Vsc)),11),!h?null:h.i);d=(g=BD(vNb(e,Wsc),11),!g?null:g.i);if(j!=c||k!=d){Aac(i,b);j=c;k=d}i.c[i.c.length]=e}Aac(i,b)} +function HNc(a){var b,c,d,e,f,g,h;b=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);for(f=new Sr(ur(U_b(c).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a==e.d.i.c&&e.c.j==(Ucd(),Tcd)){g=A0b(e.c).b;h=A0b(e.d).b;b=$wnd.Math.max(b,$wnd.Math.abs(h-g))}}}return b} +function aWc(a,b,c){var d,e,f;Odd(c,'Remove overlaps',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));d=BD(hkd(b,(MUc(),LUc)),33);a.f=d;a.a=tXc(BD(hkd(b,(ZWc(),WWc)),293));e=ED(hkd(b,(Y9c(),T9c)));FVc(a,(uCb(e),e));f=gVc(d);_Vc(a,b,f,c);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} +function aYb(a,b,c){switch(c.g){case 1:return new f7c(b.a,$wnd.Math.min(a.d.b,b.b));case 2:return new f7c($wnd.Math.max(a.c.a,b.a),b.b);case 3:return new f7c(b.a,$wnd.Math.max(a.c.b,b.b));case 4:return new f7c($wnd.Math.min(b.a,a.d.a),b.b);}return new f7c(b.a,b.b)} +function mFc(a,b,c,d){var e,f,g,h,i,j,k,l,m;l=d?(Ucd(),Tcd):(Ucd(),zcd);e=false;for(i=b[c],j=0,k=i.length;j<k;++j){h=i[j];if(ecd(BD(vNb(h,(Nyc(),Vxc)),98))){continue}g=h.e;m=!V_b(h,l).dc()&&!!g;if(m){f=WZb(g);a.b=new sic(f,d?0:f.length-1)}e=e|nFc(a,h,l,m)}return e} +function $sd(a){var b,c,d;b=Pu(1+(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c).i);Ekb(b,(!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));for(d=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Ekb(b,(!c.d&&(c.d=new y5d(B2,c,8,5)),c.d))}return Qb(b),new sl(b)} +function _sd(a){var b,c,d;b=Pu(1+(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c).i);Ekb(b,(!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));for(d=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Ekb(b,(!c.e&&(c.e=new y5d(B2,c,7,4)),c.e))}return Qb(b),new sl(b)} +function M9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return x9d}else if(b==45){return w9d}}else if(c==3){return x9d}}return Hcb(d)}} +function aKc(a){var b,c,d,e;b=0;c=0;for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);b=Tbb(wbb(b,HAb(JAb(new YAb(null,new Kub(d.e,16)),new nLc))));c=Tbb(wbb(c,HAb(JAb(new YAb(null,new Kub(d.g,16)),new pLc))));if(b>1||c>1){return 2}}if(b+c==1){return 2}return 0} +function WQb(a,b,c){var d,e,f,g,h;Odd(c,'ELK Force',1);Ccb(DD(hkd(b,(wSb(),jSb))))||$Cb((d=new _Cb((Pgd(),new bhd(b))),d));h=TQb(b);XQb(h);YQb(a,BD(vNb(h,fSb),424));g=LQb(a.a,h);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),231);tRb(a.b,e,Udd(c,1/g.gc()))}h=KQb(g);SQb(h);Qdd(c)} +function yoc(a,b){var c,d,e,f,g;Odd(b,'Breaking Point Processor',1);xoc(a);if(Ccb(DD(vNb(a,(Nyc(),Jyc))))){for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);c=0;for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);f.p=c++}}soc(a);toc(a,true);toc(a,false)}Qdd(b)} +function $1c(a,b,c){var d,e,f,g,h,i;h=a.c;for(g=(!c.q?(mmb(),mmb(),kmb):c.q).vc().Kc();g.Ob();){f=BD(g.Pb(),42);d=!WAb(JAb(new YAb(null,new Kub(h,16)),new Xxb(new m2c(b,f)))).sd((EAb(),DAb));if(d){i=f.dd();if(JD(i,4)){e=fvd(i);e!=null&&(i=e)}b.Ye(BD(f.cd(),146),i)}}} +function MQd(a,b){var c,d,e,f,g;if(!b){return null}else{f=JD(a.Cb,88)||JD(a.Cb,99);g=!f&&JD(a.Cb,322);for(d=new Fyd((!b.a&&(b.a=new KYd(b,j5,b)),b.a));d.e!=d.i.gc();){c=BD(Dyd(d),87);e=KQd(c);if(f?JD(e,88):g?JD(e,148):!!e){return e}}return f?(jGd(),_Fd):(jGd(),YFd)}} +function g3b(a,b){var c,d,e,f,g,h;Odd(b,'Constraints Postprocessor',1);g=0;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);h=0;for(d=new olb(e.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(c.k==(j0b(),h0b)){yNb(c,(Nyc(),nxc),meb(g));yNb(c,Gwc,meb(h));++h}}++g}Qdd(b)} +function eRc(a,b,c,d){var e,f,g,h,i,j,k;i=new f7c(c,d);c7c(i,BD(vNb(b,(mTc(),WSc)),8));for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);P6c(j.e,i);Dsb(a.b,j)}for(h=Jsb(b.a,0);h.b!=h.d.c;){g=BD(Xsb(h),188);for(f=Jsb(g.a,0);f.b!=f.d.c;){e=BD(Xsb(f),8);P6c(e,i)}Dsb(a.a,g)}} +function uid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();if(!BD(f,66).Oj()){f=_1d(q1d(M6d,f));if(!f){throw vbb(new Wdb(ite+b.ne()+jte))}}e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));BD(e,215).ml(b,c)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} +function ROc(a,b){var c,d,e,f,g;c=new Rkb;e=LAb(new YAb(null,new Kub(a,16)),new iPc);f=LAb(new YAb(null,new Kub(a,16)),new kPc);g=aAb(_zb(OAb(ty(OC(GC(xM,1),Uhe,833,0,[e,f])),new mPc)));for(d=1;d<g.length;d++){g[d]-g[d-1]>=2*b&&Ekb(c,new bPc(g[d-1]+b,g[d]-b))}return c} +function AXc(a,b,c){Odd(c,'Eades radial',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));a.d=BD(hkd(b,(MUc(),LUc)),33);a.c=Edb(ED(hkd(b,(ZWc(),VWc))));a.e=tXc(BD(hkd(b,WWc),293));a.a=gWc(BD(hkd(b,YWc),426));a.b=jXc(BD(hkd(b,RWc),340));BXc(a);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} +function Fqd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&(i=null,j=Uqd(a,(k=(Fhd(),l=new ppd,l),!!b&&npd(k,b),k),e),Lkd(j,_pd(e,Vte)),grd(e,j),hrd(e,j),crd(a,e,j))}}} +function UKd(a){var b,c,d,e,f,g;if(!a.j){g=new HPd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);e=UKd(c);ytd(g,e);wtd(g,c)}b.a.Bc(a)!=null}vud(g);a.j=new nNd((BD(qud(ZKd((NFd(),MFd).o),11),18),g.i),g.g);$Kd(a).b&=-33}return a.j} +function O9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return z9d}else if(b==45){return y9d}}else if(c==3){return z9d}}return new Odb(d)}} +function _C(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ieb(c)}if(b==0&&d!=0&&c==0){return ieb(d)+22}if(b!=0&&d==0&&c==0){return ieb(b)+44}return -1} +function qbc(a,b){var c,d,e,f,g;Odd(b,'Edge joining',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);g=new Bib(d.a,0);while(g.b<g.d.gc()){f=(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),10));if(f.k==(j0b(),g0b)){sbc(f,c);uib(g)}}}Qdd(b)} +function c_c(a,b,c){var d,e;H2c(a.b);K2c(a.b,(Y$c(),V$c),(R0c(),Q0c));K2c(a.b,W$c,b.g);K2c(a.b,X$c,b.a);a.a=F2c(a.b,b);Odd(c,'Compaction by shrinking a tree',a.a.c.length);if(b.i.c.length>1){for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),51);d.pf(b,Udd(c,1))}}Qdd(c)} +function mo(a,b){var c,d,e,f,g;e=b.a&a.f;f=null;for(d=a.b[e];true;d=d.b){if(d==b){!f?(a.b[e]=b.b):(f.b=b.b);break}f=d}g=b.f&a.f;f=null;for(c=a.c[g];true;c=c.d){if(c==b){!f?(a.c[g]=b.d):(f.d=b.d);break}f=c}!b.e?(a.a=b.c):(b.e.c=b.c);!b.c?(a.e=b.e):(b.c.e=b.e);--a.i;++a.g} +function eNb(a){var b,c,d,e,f,g,h,i,j,k;c=a.o;b=a.p;g=Ohe;e=Rie;h=Ohe;f=Rie;for(j=0;j<c;++j){for(k=0;k<b;++k){if(YMb(a,j,k)){g=$wnd.Math.min(g,j);e=$wnd.Math.max(e,j);h=$wnd.Math.min(h,k);f=$wnd.Math.max(f,k)}}}i=e-g+1;d=f-h+1;return new Ggd(meb(g),meb(h),meb(i),meb(d))} +function DWb(a,b){var c,d,e,f;f=new Bib(a,0);c=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),140));while(f.b<f.d.gc()){d=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),140));e=new dWb(d.c,c.d,b);sCb(f.b>0);f.a.Xb(f.c=--f.b);Aib(f,e);sCb(f.b<f.d.gc());f.d.Xb(f.c=f.b++);e.a=false;c=d}} +function Y2b(a){var b,c,d,e,f,g;e=BD(vNb(a,(wtc(),vsc)),11);for(g=new olb(a.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(d=new olb(f.g);d.a<d.c.c.length;){b=BD(mlb(d),17);RZb(b,e);return f}for(c=new olb(f.e);c.a<c.c.c.length;){b=BD(mlb(c),17);QZb(b,e);return f}}return null} +function iA(a,b,c){var d,e;d=Cbb(c.q.getTime());if(ybb(d,0)<0){e=_ie-Tbb(Hbb(Jbb(d),_ie));e==_ie&&(e=0)}else{e=Tbb(Hbb(d,_ie))}if(b==1){e=$wnd.Math.min((e+50)/100|0,9);Kfb(a,48+e&aje)}else if(b==2){e=$wnd.Math.min((e+5)/10|0,99);EA(a,e,2)}else{EA(a,e,3);b>3&&EA(a,0,b-3)}} +function cUb(a){var b,c,d,e;if(PD(vNb(a,(Nyc(),axc)))===PD((hbd(),ebd))){return !a.e&&PD(vNb(a,Cwc))!==PD((Xrc(),Urc))}d=BD(vNb(a,Dwc),292);e=Ccb(DD(vNb(a,Hwc)))||PD(vNb(a,Iwc))===PD((Rpc(),Opc));b=BD(vNb(a,Bwc),19).a;c=a.a.c.length;return !e&&d!=(Xrc(),Urc)&&(b==0||b>c)} +function lkc(a){var b,c;c=0;for(;c<a.c.length;c++){if(Ojc((tCb(c,a.c.length),BD(a.c[c],113)))>0){break}}if(c>0&&c<a.c.length-1){return c}b=0;for(;b<a.c.length;b++){if(Ojc((tCb(b,a.c.length),BD(a.c[b],113)))>0){break}}if(b>0&&c<a.c.length-1){return b}return a.c.length/2|0} +function mmd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=6&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+qmd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cmd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,6,d));d=bmd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,6,b,b))} +function npd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+opd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?lpd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,9,d));d=kpd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,9,b,b))} +function Rld(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Sld(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Lld(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,12,d));d=Kld(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function VId(b){var c,d,e,f,g;e=wId(b);g=b.j;if(g==null&&!!e){return b.$j()?null:e.zj()}else if(JD(e,148)){d=e.Aj();if(d){f=d.Nh();if(f!=b.i){c=BD(e,148);if(c.Ej()){try{b.g=f.Kh(c,g)}catch(a){a=ubb(a);if(JD(a,78)){b.g=null}else throw vbb(a)}}b.i=f}}return b.g}return null} +function wOb(a){var b;b=new Rkb;Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c,a.d+a.a)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a)));return b} +function IJc(a,b,c,d){var e,f,g;g=LZb(b,c);d.c[d.c.length]=b;if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new Sr(ur(O_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!(!OZb(e)&&!(!OZb(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return IJc(a,e,g,d)}return d} +function vQb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),79);d=BD(Ohb(a.b,e),266);!d&&(Xod(jtd(e))==Xod(ltd(e))?uQb(a,e,c):jtd(e)==Xod(ltd(e))?Ohb(a.c,e)==null&&Ohb(a.b,ltd(e))!=null&&xQb(a,e,c,false):Ohb(a.d,e)==null&&Ohb(a.b,jtd(e))!=null&&xQb(a,e,c,true))}} +function jcc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),10);h=new H0b;F0b(h,d);G0b(h,(Ucd(),zcd));yNb(h,(wtc(),ftc),(Bcb(),true));for(g=b.Kc();g.Ob();){f=BD(g.Pb(),10);i=new H0b;F0b(i,f);G0b(i,Tcd);yNb(i,ftc,true);c=new UZb;yNb(c,ftc,true);QZb(c,h);RZb(c,i)}}} +function jnc(a,b,c,d){var e,f,g,h;e=hnc(a,b,c);f=hnc(a,c,b);g=BD(Ohb(a.c,b),112);h=BD(Ohb(a.c,c),112);if(e<f){new DOc((HOc(),GOc),g,h,f-e)}else if(f<e){new DOc((HOc(),GOc),h,g,e-f)}else if(e!=0||!(!b.i||!c.i)&&d[b.i.c][c.i.c]){new DOc((HOc(),GOc),g,h,0);new DOc(GOc,h,g,0)}} +function Qoc(a,b){var c,d,e,f,g,h,i;e=0;for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);e+=f.o.b+f.d.a+f.d.d+a.e;for(d=new Sr(ur(R_b(f).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.c.i.k==(j0b(),i0b)){i=c.c.i;h=BD(vNb(i,(wtc(),$sc)),10);e+=h.o.b+h.d.a+h.d.d}}}return e} +function WNc(a,b,c){var d,e,f,g,h,i,j;f=new Rkb;j=new Psb;g=new Psb;XNc(a,j,g,b);VNc(a,j,g,b,c);for(i=new olb(a);i.a<i.c.c.length;){h=BD(mlb(i),112);for(e=new olb(h.k);e.a<e.c.c.length;){d=BD(mlb(e),129);(!b||d.c==(HOc(),FOc))&&h.g>d.b.g&&(f.c[f.c.length]=d,true)}}return f} +function k$c(){k$c=ccb;g$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);f$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);i$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);h$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);j$c=new l$c('WHOLE_DRAWING',4)} +function Xqd(a,b){if(JD(b,239)){return iqd(a,BD(b,33))}else if(JD(b,186)){return jqd(a,BD(b,118))}else if(JD(b,354)){return hqd(a,BD(b,137))}else if(JD(b,352)){return gqd(a,BD(b,79))}else if(b){return null}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}} +function aic(a){var b,c,d,e,f,g,h;f=new Psb;for(e=new olb(a.d.a);e.a<e.c.c.length;){d=BD(mlb(e),121);d.b.a.c.length==0&&(Gsb(f,d,f.c.b,f.c),true)}if(f.b>1){b=nGb((c=new pGb,++a.b,c),a.d);for(h=Jsb(f,0);h.b!=h.d.c;){g=BD(Xsb(h),121);AFb(DFb(CFb(EFb(BFb(new FFb,1),0),b),g))}}} +function $od(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+_od(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Uod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,10,d));d=Tod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,b,b))} +function uZb(a){var b,c,d,e;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);e=BD(c.cd(),11);b=BD(c.dd(),10);yNb(b,(wtc(),$sc),e);yNb(e,gtc,b);yNb(e,Nsc,(Bcb(),true));G0b(e,BD(vNb(b,Hsc),61));vNb(b,Hsc);yNb(e.i,(Nyc(),Vxc),(dcd(),acd));BD(vNb(Q_b(e.i),Ksc),21).Fc((Orc(),Krc))}} +function G4b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new olb(a.d.i.j);i.a<i.c.c.length;){h=BD(mlb(i),11);f+=h.e.c.length}}else{f=1}if(a.d){for(i=new olb(a.c.i.j);i.a<i.c.c.length;){h=BD(mlb(i),11);g+=h.g.c.length}}else{g=1}e=QD(Eeb(g-f));d=(c+b)/2+(c-b)*(0.4*e);return d} +function Zjc(a){Xjc();var b,c;if(a.Hc((Ucd(),Scd))){throw vbb(new Wdb('Port sides must not contain UNDEFINED'))}switch(a.gc()){case 1:return Tjc;case 2:b=a.Hc(zcd)&&a.Hc(Tcd);c=a.Hc(Acd)&&a.Hc(Rcd);return b||c?Wjc:Vjc;case 3:return Ujc;case 4:return Sjc;default:return null;}} +function Hoc(a,b,c){var d,e,f,g,h;Odd(c,'Breaking Point Removing',1);a.a=BD(vNb(b,(Nyc(),Swc)),218);for(f=new olb(b.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(Mu(e.a));h.a<h.c.c.length;){g=BD(mlb(h),10);if(hoc(g)){d=BD(vNb(g,(wtc(),usc)),305);!d.d&&Ioc(a,d)}}}Qdd(c)} +function s6c(a,b,c){i6c();if(m6c(a,b)&&m6c(a,c)){return false}return u6c(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d),b,c)||u6c(new f7c(a.c+a.b,a.d),new f7c(a.c+a.b,a.d+a.a),b,c)||u6c(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a),b,c)||u6c(new f7c(a.c,a.d+a.a),new f7c(a.c,a.d),b,c)} +function x1d(a,b){var c,d,e,f;if(!a.dc()){for(c=0,d=a.gc();c<d;++c){f=GD(a.Xb(c));if(f==null?b==null:dfb(f.substr(0,3),'!##')?b!=null&&(e=b.length,!dfb(f.substr(f.length-e,e),b)||f.length!=b.length+3)&&!dfb(Ewe,b):dfb(f,Fwe)&&!dfb(Ewe,b)||dfb(f,b)){return true}}}return false} +function J3b(a,b,c,d){var e,f,g,h,i,j;g=a.j.c.length;i=KC(tN,ile,306,g,0,1);for(h=0;h<g;h++){f=BD(Ikb(a.j,h),11);f.p=h;i[h]=D3b(N3b(f),c,d)}F3b(a,i,c,b,d);j=new Lqb;for(e=0;e<i.length;e++){!!i[e]&&Rhb(j,BD(Ikb(a.j,e),11),i[e])}if(j.f.c+j.g.c!=0){yNb(a,(wtc(),Csc),j);L3b(a,i)}} +function Lgc(a,b,c){var d,e,f;for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);f=tgc(d);if(f){if(f.k==(j0b(),e0b)){switch(BD(vNb(f,(wtc(),Hsc)),61).g){case 4:f.n.a=b.a;break;case 2:f.n.a=c.a-(f.o.a+f.d.c);break;case 1:f.n.b=b.b;break;case 3:f.n.b=c.b-(f.o.b+f.d.a);}}}}} +function kAc(){kAc=ccb;iAc=new lAc(ane,0);dAc=new lAc('NIKOLOV',1);gAc=new lAc('NIKOLOV_PIXEL',2);eAc=new lAc('NIKOLOV_IMPROVED',3);fAc=new lAc('NIKOLOV_IMPROVED_PIXEL',4);cAc=new lAc('DUMMYNODE_PERCENTAGE',5);hAc=new lAc('NODECOUNT_PERCENTAGE',6);jAc=new lAc('NO_BOUNDARY',7)} +function led(a,b,c){var d,e,f,g,h;e=BD(hkd(b,(X7c(),V7c)),19);!e&&(e=meb(0));f=BD(hkd(c,V7c),19);!f&&(f=meb(0));if(e.a>f.a){return -1}else if(e.a<f.a){return 1}else{if(a.a){d=Kdb(b.j,c.j);if(d!=0){return d}d=Kdb(b.i,c.i);if(d!=0){return d}}g=b.g*b.f;h=c.g*c.f;return Kdb(g,h)}} +function BAd(a,b){var c,d,e,f,g,h,i,j,k,l;++a.e;i=a.d==null?0:a.d.length;if(b>i){k=a.d;a.d=KC(y4,jve,63,2*i+4,0,1);for(f=0;f<i;++f){j=k[f];if(j){d=j.g;l=j.i;for(h=0;h<l;++h){e=BD(d[h],133);g=DAd(a,e.Sh());c=a.d[g];!c&&(c=a.d[g]=a.uj());c.Fc(e)}}}return true}else{return false}} +function o2d(a,b,c){var d,e,f,g,h,i;e=c;f=e.ak();if(T6d(a.e,f)){if(f.hi()){d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw vbb(new Wdb(kue))}}}}else{i=S6d(a.e.Tg(),f);d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(i.rl(h.ak())){throw vbb(new Wdb(Hwe))}}}vtd(a,b,c)} +function OYb(a,b){var c,d,e,f,g,h;c=BD(vNb(b,(wtc(),Esc)),21);g=BD(Qc((xXb(),wXb),c),21);h=BD(Qc(LYb,c),21);for(f=g.Kc();f.Ob();){d=BD(f.Pb(),21);if(!BD(Qc(a.b,d),15).dc()){return false}}for(e=h.Kc();e.Ob();){d=BD(e.Pb(),21);if(!BD(Qc(a.b,d),15).dc()){return false}}return true} +function scc(a,b){var c,d,e,f,g,h;Odd(b,'Partition postprocessing',1);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);h=new olb(e.j);while(h.a<h.c.c.length){g=BD(mlb(h),11);Ccb(DD(vNb(g,(wtc(),ftc))))&&nlb(h)}}}Qdd(b)} +function ZZc(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.c.length==1){return JZc(BD(Ikb(a.a,0),187),b)}g=YZc(a);i=0;j=a.d;f=g;k=a.d;h=(j-f)/2+f;while(f+1<j){i=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);i+=(e=MZc(c,h,false),e.a)}if(i<b){k=h;j=h}else{f=h}h=(j-f)/2+f}return k} +function fD(a){var b,c,d,e,f;if(isNaN(a)){return wD(),vD}if(a<-9223372036854775808){return wD(),tD}if(a>=9223372036854775807){return wD(),sD}e=false;if(a<0){e=true;a=-a}d=0;if(a>=Ije){d=QD(a/Ije);a-=d*Ije}c=0;if(a>=Hje){c=QD(a/Hje);a-=c*Hje}b=QD(a);f=TC(b,c,d);e&&ZC(f);return f} +function rKb(a,b){var c,d,e,f;c=!b||!a.u.Hc((rcd(),ncd));f=0;for(e=new olb(a.e.Cf());e.a<e.c.c.length;){d=BD(mlb(e),838);if(d.Hf()==(Ucd(),Scd)){throw vbb(new Wdb('Label and node size calculator can only be used with ports that have port sides assigned.'))}d.vf(f++);qKb(a,d,c)}} +function V0d(a,b){var c,d,e,f,g;e=b.Hh(a.a);if(e){d=(!e.b&&(e.b=new sId((jGd(),fGd),x6,e)),e.b);c=GD(AAd(d,cwe));if(c!=null){f=c.lastIndexOf('#');g=f==-1?w1d(a,b.Aj(),c):f==0?v1d(a,null,c.substr(1)):v1d(a,c.substr(0,f),c.substr(f+1));if(JD(g,148)){return BD(g,148)}}}return null} +function Z0d(a,b){var c,d,e,f,g;d=b.Hh(a.a);if(d){c=(!d.b&&(d.b=new sId((jGd(),fGd),x6,d)),d.b);f=GD(AAd(c,zwe));if(f!=null){e=f.lastIndexOf('#');g=e==-1?w1d(a,b.Aj(),f):e==0?v1d(a,null,f.substr(1)):v1d(a,f.substr(0,e),f.substr(e+1));if(JD(g,148)){return BD(g,148)}}}return null} +function RDb(a){var b,c,d,e,f;for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.j=null;for(f=b.a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),57);X6c(d.b);(!b.j||d.d.c<b.j.d.c)&&(b.j=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);d.b.a=d.d.c-b.j.d.c;d.b.b=d.d.d-b.j.d.d}}return a} +function sVb(a){var b,c,d,e,f;for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),189);b.f=null;for(f=b.a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),81);X6c(d.e);(!b.f||d.g.c<b.f.g.c)&&(b.f=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),81);d.e.a=d.g.c-b.f.g.c;d.e.b=d.g.d-b.f.g.d}}return a} +function EMb(a){var b,c,d;c=BD(a.a,19).a;d=BD(a.b,19).a;b=$wnd.Math.max($wnd.Math.abs(c),$wnd.Math.abs(d));if(c<b&&d==-b){return new vgd(meb(c+1),meb(d))}if(c==b&&d<b){return new vgd(meb(c),meb(d+1))}if(c>=-b&&d==b){return new vgd(meb(c-1),meb(d))}return new vgd(meb(c),meb(d-1))} +function W8b(){S8b();return OC(GC(AS,1),Kie,77,0,[Y7b,V7b,Z7b,n8b,G8b,r8b,M8b,w8b,E8b,i8b,A8b,v8b,F8b,e8b,O8b,P7b,z8b,I8b,o8b,H8b,Q8b,C8b,Q7b,D8b,R8b,K8b,P8b,p8b,b8b,q8b,m8b,N8b,T7b,_7b,t8b,S7b,u8b,k8b,f8b,x8b,h8b,W7b,U7b,l8b,g8b,y8b,L8b,R7b,B8b,j8b,s8b,c8b,a8b,J8b,$7b,d8b,X7b])} +function Yic(a,b,c){a.d=0;a.b=0;b.k==(j0b(),i0b)&&c.k==i0b&&BD(vNb(b,(wtc(),$sc)),10)==BD(vNb(c,$sc),10)&&(ajc(b).j==(Ucd(),Acd)?Zic(a,b,c):Zic(a,c,b));b.k==i0b&&c.k==g0b?ajc(b).j==(Ucd(),Acd)?(a.d=1):(a.b=1):c.k==i0b&&b.k==g0b&&(ajc(c).j==(Ucd(),Acd)?(a.b=1):(a.d=1));cjc(a,b,c)} +function esd(a){var b,c,d,e,f,g,h,i,j,k,l;l=hsd(a);b=a.a;i=b!=null;i&&Upd(l,'category',a.a);e=Fhe(new Pib(a.d));g=!e;if(g){j=new wB;cC(l,'knownOptions',j);c=new msd(j);reb(new Pib(a.d),c)}f=Fhe(a.g);h=!f;if(h){k=new wB;cC(l,'supportedFeatures',k);d=new osd(k);reb(a.g,d)}return l} +function ty(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new Xp(a.length);for(h=a,i=0,j=h.length;i<j;++i){g=h[i];d=d|(Uzb(g),false);e=(Tzb(g),g.a);Ekb(f.a,Qb(e));b&=e.qd();c=Ly(c,e.rd())}return BD(BD(Rzb(new YAb(null,Yj(new Kub((im(),nm(f.a)),16),new vy,b,c)),new xy(a)),670),833)} +function UWb(a,b){var c;if(!!a.d&&(b.c!=a.e.c||qWb(a.e.b,b.b))){Ekb(a.f,a.d);a.a=a.d.c+a.d.b;a.d=null;a.e=null}nWb(b.b)?(a.c=b):(a.b=b);if(b.b==(lWb(),hWb)&&!b.a||b.b==iWb&&b.a||b.b==jWb&&b.a||b.b==kWb&&!b.a){if(!!a.c&&!!a.b){c=new J6c(a.a,a.c.d,b.c-a.a,a.b.d-a.c.d);a.d=c;a.e=b}}} +function L2c(a){var b;D2c.call(this);this.i=new Z2c;this.g=a;this.f=BD(a.e&&a.e(),9).length;if(this.f==0){throw vbb(new Wdb('There must be at least one phase in the phase enumeration.'))}this.c=(b=BD(gdb(this.g),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.a=new j3c;this.b=new Lqb} +function God(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=7&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Iod(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Eod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,1,C2,d));d=Dod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,b,b))} +function NHd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+QHd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?KHd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,0,k5,d));d=JHd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function Ehb(a,b){Dhb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Ihb(a,b)}g=(a.d&-2)<<4;j=Rgb(a,g);k=Rgb(b,g);d=yhb(a,Qgb(j,g));e=yhb(b,Qgb(k,g));i=Ehb(j,k);c=Ehb(d,e);f=Ehb(yhb(j,d),yhb(e,k));f=thb(thb(f,i),c);f=Qgb(f,g);i=Qgb(i,g<<1);return thb(thb(i,f),c)} +function aGc(a,b,c){var d,e,f,g,h;g=CHc(a,c);h=KC(OQ,kne,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);Ccb(DD(vNb(e,(wtc(),Nsc))))&&(h[d++]=BD(vNb(e,gtc),10))}if(d<b.length){throw vbb(new Zdb('Expected '+b.length+' hierarchical ports, but found only '+d+'.'))}return h} +function Und(a,b){var c,d,e,f,g,h;if(!a.tb){f=(!a.rb&&(a.rb=new jUd(a,d5,a)),a.rb);h=new Mqb(f.i);for(e=new Fyd(f);e.e!=e.i.gc();){d=BD(Dyd(e),138);g=d.ne();c=BD(g==null?jrb(h.f,null,d):Drb(h.g,g,d),138);!!c&&(g==null?jrb(h.f,null,c):Drb(h.g,g,c))}a.tb=h}return BD(Phb(a.tb,b),138)} +function YKd(a,b){var c,d,e,f,g;(a.i==null&&TKd(a),a.i).length;if(!a.p){g=new Mqb((3*a.g.i/2|0)+1);for(e=new $yd(a.g);e.e!=e.i.gc();){d=BD(Zyd(e),170);f=d.ne();c=BD(f==null?jrb(g.f,null,d):Drb(g.g,f,d),170);!!c&&(f==null?jrb(g.f,null,c):Drb(g.g,f,c))}a.p=g}return BD(Phb(a.p,b),170)} +function hCb(a,b,c,d,e){var f,g,h,i,j;fCb(d+Wy(c,c.$d()),e);gCb(b,jCb(c));f=c.f;!!f&&hCb(a,b,f,'Caused by: ',false);for(h=(c.k==null&&(c.k=KC(_I,nie,78,0,0,1)),c.k),i=0,j=h.length;i<j;++i){g=h[i];hCb(a,b,g,'Suppressed: ',false)}console.groupEnd!=null&&console.groupEnd.call(console)} +function dGc(a,b,c,d){var e,f,g,h,i;i=b.e;h=i.length;g=b.q._f(i,c?0:h-1,c);e=i[c?0:h-1];g=g|cGc(a,e,c,d);for(f=c?1:h-2;c?f<h:f>=0;f+=c?1:-1){g=g|b.c.Sf(i,f,c,d&&!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,(wtc(),mtc)))));g=g|b.q._f(i,f,c);g=g|cGc(a,i[f],c,d)}Qqb(a.c,b);return g} +function o3b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=m_b(a.j),l=0,m=k.length;l<m;++l){j=k[l];if(c==(KAc(),HAc)||c==JAc){i=k_b(j.g);for(e=i,f=0,g=e.length;f<g;++f){d=e[f];k3b(b,d)&&PZb(d,true)}}if(c==IAc||c==JAc){h=k_b(j.e);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];j3b(b,d)&&PZb(d,true)}}}} +function Qmc(a){var b,c;b=null;c=null;switch(Lmc(a).g){case 1:b=(Ucd(),zcd);c=Tcd;break;case 2:b=(Ucd(),Rcd);c=Acd;break;case 3:b=(Ucd(),Tcd);c=zcd;break;case 4:b=(Ucd(),Acd);c=Rcd;}mjc(a,BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113));njc(a,BD(Btb(QAb(BD(Qc(a.k,c),15).Oc(),Hmc)),113))} +function a6b(a){var b,c,d,e,f,g;e=BD(Ikb(a.j,0),11);if(e.e.c.length+e.g.c.length==0){a.n.a=0}else{g=0;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(e),new R0b(e)])));Qr(d);){c=BD(Rr(d),11);g+=c.i.n.a+c.n.a+c.a.a}b=BD(vNb(a,(Nyc(),Txc)),8);f=!b?0:b.a;a.n.a=g/(e.e.c.length+e.g.c.length)-f}} +function F1c(a,b){var c,d,e;for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),221);$Nb(BD(c.b,65),c7c(R6c(BD(b.b,65).c),BD(b.b,65).a));e=xOb(BD(b.b,65).b,BD(c.b,65).b);e>1&&(a.a=true);ZNb(BD(c.b,65),P6c(R6c(BD(b.b,65).c),Y6c(c7c(R6c(BD(c.b,65).a),BD(b.b,65).a),e)));D1c(a,b);F1c(a,c)}} +function rVb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a<f.c.c.length;){d=BD(mlb(f),189);d.e=0;d.d.a.$b()}for(e=new olb(a.a.a);e.a<e.c.c.length;){d=BD(mlb(e),189);for(c=d.a.a.ec().Kc();c.Ob();){b=BD(c.Pb(),81);for(h=b.f.Kc();h.Ob();){g=BD(h.Pb(),81);if(g.d!=d){Qqb(d.d,g);++g.d.e}}}}} +function bcc(a){var b,c,d,e,f,g,h,i;i=a.j.c.length;c=0;b=i;e=2*i;for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);switch(g.j.g){case 2:case 4:g.p=-1;break;case 1:case 3:d=g.e.c.length;f=g.g.c.length;d>0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}mmb();Okb(a.j,new fcc)} +function Vec(a){var b,c;c=null;b=BD(Ikb(a.g,0),17);do{c=b.d.i;if(wNb(c,(wtc(),Wsc))){return BD(vNb(c,Wsc),11).i}if(c.k!=(j0b(),h0b)&&Qr(new Sr(ur(U_b(c).a.Kc(),new Sq)))){b=BD(Rr(new Sr(ur(U_b(c).a.Kc(),new Sq))),17)}else if(c.k!=h0b){return null}}while(!!c&&c.k!=(j0b(),h0b));return c} +function Omc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=BD(Ikb(h,h.c.length-1),113);k=(tCb(0,h.c.length),BD(h.c[0],113));j=Kmc(a,g,i,k);for(f=1;f<h.c.length;f++){c=(tCb(f-1,h.c.length),BD(h.c[f-1],113));e=(tCb(f,h.c.length),BD(h.c[f],113));d=Kmc(a,g,c,e);if(d>j){i=c;k=e;j=d}}b.a=k;b.c=i} +function sEb(a,b){var c,d;d=Axb(a.b,b.b);if(!d){throw vbb(new Zdb('Invalid hitboxes for scanline constraint calculation.'))}(mEb(b.b,BD(Cxb(a.b,b.b),57))||mEb(b.b,BD(Bxb(a.b,b.b),57)))&&(Zfb(),b.b+' has overlap.');a.a[b.b.f]=BD(Exb(a.b,b.b),57);c=BD(Dxb(a.b,b.b),57);!!c&&(a.a[c.f]=b.b)} +function AFb(a){if(!a.a.d||!a.a.e){throw vbb(new Zdb((fdb(fN),fN.k+' must have a source and target '+(fdb(jN),jN.k)+' specified.')))}if(a.a.d==a.a.e){throw vbb(new Zdb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}NFb(a.a.d.g,a.a);NFb(a.a.e.b,a.a);return a.a} +function HHc(a,b,c){var d,e,f,g,h,i,j;j=new Hxb(new tIc(a));for(g=OC(GC(aR,1),lne,11,0,[b,c]),h=0,i=g.length;h<i;++h){f=g[h];Iwb(j.a,f,(Bcb(),zcb))==null;for(e=new b1b(f.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);d.c==d.d||Axb(j,f==d.c?d.d:d.c)}}return Qb(j),new Tkb(j)} +function oPc(a,b,c){var d,e,f,g,h,i;d=0;if(b.b!=0&&c.b!=0){f=Jsb(b,0);g=Jsb(c,0);h=Edb(ED(Xsb(f)));i=Edb(ED(Xsb(g)));e=true;do{if(h>i-a.b&&h<i+a.b){return -1}else h>i-a.a&&h<i+a.a&&++d;h<=i&&f.b!=f.d.c?(h=Edb(ED(Xsb(f)))):i<=h&&g.b!=g.d.c?(i=Edb(ED(Xsb(g)))):(e=false)}while(e)}return d} +function F3b(a,b,c,d,e){var f,g,h,i;i=(f=BD(gdb(F1),9),new xqb(f,BD(_Bb(f,f.length),9),0));for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);if(b[g.p]){G3b(g,b[g.p],d);rqb(i,g.j)}}if(e){K3b(a,b,(Ucd(),zcd),2*c,d);K3b(a,b,Tcd,2*c,d)}else{K3b(a,b,(Ucd(),Acd),2*c,d);K3b(a,b,Rcd,2*c,d)}} +function Szb(a){var b,c,d,e,f;f=new Rkb;Hkb(a.b,new XBb(f));a.b.c=KC(SI,Uhe,1,0,5,1);if(f.c.length!=0){b=(tCb(0,f.c.length),BD(f.c[0],78));for(c=1,d=f.c.length;c<d;++c){e=(tCb(c,f.c.length),BD(f.c[c],78));e!=b&&Qy(b,e)}if(JD(b,60)){throw vbb(BD(b,60))}if(JD(b,289)){throw vbb(BD(b,289))}}} +function DCb(a,b){var c,d,e,f;a=a==null?Xhe:(uCb(a),a);c=new Vfb;f=0;d=0;while(d<b.length){e=a.indexOf('%s',f);if(e==-1){break}Qfb(c,a.substr(f,e-f));Pfb(c,b[d++]);f=e+2}Qfb(c,a.substr(f));if(d<b.length){c.a+=' [';Pfb(c,b[d++]);while(d<b.length){c.a+=She;Pfb(c,b[d++])}c.a+=']'}return c.a} +function KCb(a){var b,c,d,e;b=0;d=a.length;e=d-4;c=0;while(c<e){b=(BCb(c+3,a.length),a.charCodeAt(c+3)+(BCb(c+2,a.length),31*(a.charCodeAt(c+2)+(BCb(c+1,a.length),31*(a.charCodeAt(c+1)+(BCb(c,a.length),31*(a.charCodeAt(c)+31*b)))))));b=b|0;c+=4}while(c<d){b=b*31+bfb(a,c++)}b=b|0;return b} +function Rac(a){var b,c;for(c=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.d.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to LAST, but has at least one outgoing edge that "+' does not go to a LAST_SEPARATE node. That must not happen.'))}}} +function jQc(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=0;for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);h=0;for(f=new Sr(ur(R_b(j).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);l=A0b(e.c).b;m=A0b(e.d).b;h=$wnd.Math.max(h,$wnd.Math.abs(m-l))}i=$wnd.Math.max(i,h)}g=d*$wnd.Math.min(1,b/c)*i;return g} +function See(a){var b;b=new Ifb;(a&256)!=0&&(b.a+='F',b);(a&128)!=0&&(b.a+='H',b);(a&512)!=0&&(b.a+='X',b);(a&2)!=0&&(b.a+='i',b);(a&8)!=0&&(b.a+='m',b);(a&4)!=0&&(b.a+='s',b);(a&32)!=0&&(b.a+='u',b);(a&64)!=0&&(b.a+='w',b);(a&16)!=0&&(b.a+='x',b);(a&zte)!=0&&(b.a+=',',b);return jfb(b.a)} +function F5b(a,b){var c,d,e,f;Odd(b,'Resize child graph to fit parent.',1);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);Gkb(a.a,c.a);c.a.c=KC(SI,Uhe,1,0,5,1)}for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),10);$_b(e,null)}a.b.c=KC(SI,Uhe,1,0,5,1);G5b(a);!!a.e&&E5b(a.e,a);Qdd(b)} +function eec(a){var b,c,d,e,f,g,h,i,j;d=a.b;f=d.e;g=ecd(BD(vNb(d,(Nyc(),Vxc)),98));c=!!f&&BD(vNb(f,(wtc(),Ksc)),21).Hc((Orc(),Hrc));if(g||c){return}for(j=(h=(new $ib(a.e)).a.vc().Kc(),new djb(h));j.a.Ob();){i=(b=BD(j.a.Pb(),42),BD(b.dd(),113));if(i.a){e=i.d;F0b(e,null);i.c=true;a.a=true}}} +function QFc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;m=-1;n=0;for(j=a,k=0,l=j.length;k<l;++k){i=j[k];for(f=i,g=0,h=f.length;g<h;++g){e=f[g];b=new Unc(m==-1?a[0]:a[m],Xec(e));for(c=0;c<e.j.c.length;c++){for(d=c+1;d<e.j.c.length;d++){Rnc(b,BD(Ikb(e.j,c),11),BD(Ikb(e.j,d),11))>0&&++n}}}++m}return n} +function hUc(a,b){var c,d,e,f,g;g=BD(vNb(b,(JTc(),FTc)),425);for(f=Jsb(b.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);if(a.b[e.g]==0){switch(g.g){case 0:iUc(a,e);break;case 1:gUc(a,e);}a.b[e.g]=2}}for(d=Jsb(a.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);ze(c.b.d,c,true);ze(c.c.b,c,true)}yNb(b,(mTc(),gTc),a.a)} +function S6d(a,b){Q6d();var c,d,e,f;if(!b){return P6d}else if(b==(Q8d(),N8d)||(b==v8d||b==t8d||b==u8d)&&a!=s8d){return new Z6d(a,b)}else{d=BD(b,677);c=d.pk();if(!c){a2d(q1d((O6d(),M6d),b));c=d.pk()}f=(!c.i&&(c.i=new Lqb),c.i);e=BD(Wd(irb(f.f,a)),1942);!e&&Rhb(f,a,e=new Z6d(a,b));return e}} +function Tbc(a,b){var c,d,e,f,g,h,i,j,k;i=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=k_b(a.e);for(e=c,f=0,g=e.length;f<g;++f){d=e[f];RZb(d,i);Fsb(d.a,new f7c(j,k));if(b){h=BD(vNb(d,(Nyc(),jxc)),74);if(!h){h=new s7c;yNb(d,jxc,h)}Dsb(h,new f7c(j,k))}}} +function Ubc(a,b){var c,d,e,f,g,h,i,j,k;e=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).a;k=a.i.n.b;c=k_b(a.g);for(g=c,h=0,i=g.length;h<i;++h){f=g[h];QZb(f,e);Esb(f.a,new f7c(j,k));if(b){d=BD(vNb(f,(Nyc(),jxc)),74);if(!d){d=new s7c;yNb(f,jxc,d)}Dsb(d,new f7c(j,k))}}} +function TFc(a,b){var c,d,e,f,g,h;a.b=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);a.e=Dub(a.d);f=new Psb;e=Ou(OC(GC(KQ,1),cne,37,0,[b]));g=0;while(g<e.c.length){d=(tCb(g,e.c.length),BD(e.c[g],37));d.p=g++;c=new fFc(d,a.a,a.b);Gkb(e,c.b);Ekb(a.b,c);c.s&&(h=Jsb(f,0),Vsb(h,c))}a.c=new Tqb;return f} +function HJb(a,b){var c,d,e,f,g,h;for(g=BD(BD(Qc(a.r,b),21),84).Kc();g.Ob();){f=BD(g.Pb(),111);c=f.c?ZHb(f.c):0;if(c>0){if(f.a){h=f.b.rf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(tcd(a.u)){d=sfd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.rf().a&&(f.d.c=d.c+d.b-f.b.rf().a)}}} +function Eec(a,b){var c,d,e,f;Odd(b,'Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);f=TAb(VAb(JAb(JAb(new YAb(null,new Kub(d.a,16)),new Jec),new Lec),new Nec),new Rec);c=c|f.a!=null}c&&yNb(a,(wtc(),Rsc),(Bcb(),true));Qdd(b)} +function sRc(a,b,c){var d,e,f,g,h;e=c;!e&&(e=new Zdd);Odd(e,'Layout',a.a.c.length);if(Ccb(DD(vNb(b,(JTc(),vTc))))){Zfb();for(d=0;d<a.a.c.length;d++){h=(d<10?'0':'')+d++;' Slot '+h+': '+hdb(rb(BD(Ikb(a.a,d),51)))}}for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),51);f.pf(b,Udd(e,1))}Qdd(e)} +function yMb(a){var b,c;b=BD(a.a,19).a;c=BD(a.b,19).a;if(b>=0){if(b==c){return new vgd(meb(-b-1),meb(-b-1))}if(b==-c){return new vgd(meb(-b),meb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new vgd(meb(-b),meb(c))}return new vgd(meb(-b),meb(c+1))}return new vgd(meb(b+1),meb(c))} +function q5b(a){var b,c;c=BD(vNb(a,(Nyc(),mxc)),163);b=BD(vNb(a,(wtc(),Osc)),303);if(c==(Ctc(),ytc)){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),dsc))}else if(c==Atc){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),bsc))}else if(b==(esc(),dsc)){yNb(a,mxc,ytc);yNb(a,Osc,csc)}else if(b==bsc){yNb(a,mxc,Atc);yNb(a,Osc,csc)}} +function FNc(){FNc=ccb;DNc=new RNc;zNc=e3c(new j3c,(qUb(),nUb),(S8b(),o8b));CNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);ENc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);ANc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);BNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function hQc(){hQc=ccb;cQc=e3c(c3c(new j3c,(qUb(),pUb),(S8b(),c8b)),nUb,o8b);gQc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);dQc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);fQc=e3c(e3c(new j3c,nUb,C8b),pUb,B8b);eQc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function GNc(a,b,c,d,e){var f,g;if((!OZb(b)&&b.c.i.c==b.d.i.c||!T6c(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])),c))&&!OZb(b)){b.c==e?St(b.a,0,new g7c(c)):Dsb(b.a,new g7c(c));if(d&&!Rqb(a.a,c)){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(c);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}}} +function Qac(a){var b,c;for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.c.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to FIRST, but has at least one incoming edge that "+' does not come from a FIRST_SEPARATE node. That must not happen.'))}}} +function vjd(a,b,c){var d,e,f,g,h,i,j;e=aeb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=KC(SI,Uhe,1,2,5,1);f=zjd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=KC(SI,Uhe,1,e+1,5,1);g=CD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b} +function ENb(a,b,c){var d,e,f,g;this.b=new Rkb;e=0;d=0;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),167);c&&rMb(f);Ekb(this.b,f);e+=f.o;d+=f.p}if(this.b.c.length>0){f=BD(Ikb(this.b,0),167);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=QD($wnd.Math.ceil(e*b))):(d=QD($wnd.Math.ceil(d/b)));this.a=new pNb(e,d)} +function Igc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=BD(Ohb(a.f,b.A),57);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=BD(Ohb(a.f,c.C),57);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m<l;++m){g=BD(f.Xb(m),128);r=g.a.b;g.a.c=o-r/2;o+=h}} +function UHc(a,b,c,d,e,f){var g,h,i,j,k,l;j=c.c.length;f&&(a.c=KC(WD,oje,25,b.length,15,1));for(g=e?0:b.length-1;e?g<b.length:g>=0;g+=e?1:-1){h=b[g];i=d==(Ucd(),zcd)?e?V_b(h,d):Su(V_b(h,d)):e?Su(V_b(h,d)):V_b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=BD(l.Pb(),11);a.d[k.p]=j++}Gkb(c,i)}} +function aQc(a,b,c){var d,e,f,g,h,i,j,k;f=Edb(ED(a.b.Kc().Pb()));j=Edb(ED(Pq(b.b)));d=Y6c(R6c(a.a),j-c);e=Y6c(R6c(b.a),c-f);k=P6c(d,e);Y6c(k,1/(j-f));this.a=k;this.b=new Rkb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Edb(ED(g.Pb()));if(h&&i-c>Oqe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)} +function vGb(a){var b,c,d,e;yGb(a,a.n);if(a.d.c.length>0){Blb(a.c);while(GGb(a,BD(mlb(new olb(a.e.a)),121))<a.e.a.c.length){b=AGb(a);e=b.e.e-b.d.e-b.a;b.e.j&&(e=-e);for(d=new olb(a.e.a);d.a<d.c.c.length;){c=BD(mlb(d),121);c.j&&(c.e+=e)}Blb(a.c)}Blb(a.c);DGb(a,BD(mlb(new olb(a.e.a)),121));rGb(a)}} +function rkc(a,b){var c,d,e,f,g;for(e=BD(Qc(a.a,(Xjc(),Tjc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);c=BD(Ikb(d.j,0),113).d.j;f=new Tkb(d.j);Okb(f,new Xkc);switch(b.g){case 1:jkc(a,f,c,(Fkc(),Dkc),1);break;case 0:g=lkc(f);jkc(a,new Jib(f,0,g),c,(Fkc(),Dkc),0);jkc(a,new Jib(f,g,f.c.length),c,Dkc,1);}}} +function c2c(a,b){Y1c();var c,d;c=j4c(n4c(),b.tg());if(c){d=c.j;if(JD(a,239)){return Zod(BD(a,33))?uqb(d,(N5c(),K5c))||uqb(d,L5c):uqb(d,(N5c(),K5c))}else if(JD(a,352)){return uqb(d,(N5c(),I5c))}else if(JD(a,186)){return uqb(d,(N5c(),M5c))}else if(JD(a,354)){return uqb(d,(N5c(),J5c))}}return true} +function c3d(a,b,c){var d,e,f,g,h,i;e=c;f=e.ak();if(T6d(a.e,f)){if(f.hi()){d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw vbb(new Wdb(kue))}}}}else{i=S6d(a.e.Tg(),f);d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(i.rl(h.ak())&&g!=b){throw vbb(new Wdb(Hwe))}}}return BD(Gtd(a,b,c),72)} +function Sy(d,b){if(b instanceof Object){try{b.__java$exception=d;if(navigator.userAgent.toLowerCase().indexOf('msie')!=-1&&$doc.documentMode<9){return}var c=d;Object.defineProperties(b,{cause:{get:function(){var a=c.Zd();return a&&a.Xd()}},suppressed:{get:function(){return c.Yd()}}})}catch(a){}}} +function lhb(a,b){var c,d,e,f,g;d=b>>5;b&=31;if(d>=a.d){return a.e<0?(Hgb(),Bgb):(Hgb(),Ggb)}f=a.d-d;e=KC(WD,oje,25,f+1,15,1);mhb(e,f,a.a,d,b);if(a.e<0){for(c=0;c<d&&a.a[c]==0;c++);if(c<d||b>0&&a.a[c]<<32-b!=0){for(c=0;c<f&&e[c]==-1;c++){e[c]=0}c==f&&++f;++e[c]}}g=new Vgb(a.e,f,e);Jgb(g);return g} +function UPb(a){var b,c,d,e;e=mpd(a);c=new kQb(e);d=new mQb(e);b=new Rkb;Gkb(b,(!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));Gkb(b,(!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));return BD(GAb(NAb(JAb(new YAb(null,new Kub(b,16)),c),d),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21)} +function p2d(a,b,c,d){var e,f,g,h,i;h=(Q6d(),BD(b,66).Oj());if(T6d(a.e,b)){if(b.hi()&&F2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){throw vbb(new Wdb(kue))}}else{i=S6d(a.e.Tg(),b);e=BD(a.g,119);for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){throw vbb(new Wdb(Hwe))}}}vtd(a,I2d(a,b,c),h?BD(d,72):R6d(b,d))} +function T6d(a,b){Q6d();var c,d,e;if(b.$j()){return true}else if(b.Zj()==-2){if(b==(m8d(),k8d)||b==h8d||b==i8d||b==j8d){return true}else{e=a.Tg();if(bLd(e,b)>=0){return false}else{c=e1d((O6d(),M6d),e,b);if(!c){return true}else{d=c.Zj();return (d>1||d==-1)&&$1d(q1d(M6d,c))!=3}}}}else{return false}} +function R1b(a,b,c,d){var e,f,g,h,i;h=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));i=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));if(Xod(h)==Xod(i)){return null}if(ntd(i,h)){return null}g=Mld(b);if(g==c){return d}else{f=BD(Ohb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null} +function Cac(a,b){var c;c=BD(vNb(a,(Nyc(),Rwc)),276);Odd(b,'Label side selection ('+c+')',1);switch(c.g){case 0:Dac(a,(rbd(),nbd));break;case 1:Dac(a,(rbd(),obd));break;case 2:Bac(a,(rbd(),nbd));break;case 3:Bac(a,(rbd(),obd));break;case 4:Eac(a,(rbd(),nbd));break;case 5:Eac(a,(rbd(),obd));}Qdd(b)} +function bGc(a,b,c){var d,e,f,g,h,i;d=RFc(c,a.length);g=a[d];if(g[0].k!=(j0b(),e0b)){return}f=SFc(c,g.length);i=b.j;for(e=0;e<i.c.length;e++){h=(tCb(e,i.c.length),BD(i.c[e],11));if((c?h.j==(Ucd(),zcd):h.j==(Ucd(),Tcd))&&Ccb(DD(vNb(h,(wtc(),Nsc))))){Nkb(i,e,BD(vNb(g[f],(wtc(),$sc)),11));f+=c?1:-1}}} +function rQc(a,b){var c,d,e,f,g;g=new Rkb;c=b;do{f=BD(Ohb(a.b,c),128);f.B=c.c;f.D=c.d;g.c[g.c.length]=f;c=BD(Ohb(a.k,c),17)}while(c);d=(tCb(0,g.c.length),BD(g.c[0],128));d.j=true;d.A=BD(d.d.a.ec().Kc().Pb(),17).c.i;e=BD(Ikb(g,g.c.length-1),128);e.q=true;e.C=BD(e.d.a.ec().Kc().Pb(),17).d.i;return g} +function $wd(a){if(a.g==null){switch(a.p){case 0:a.g=Swd(a)?(Bcb(),Acb):(Bcb(),zcb);break;case 1:a.g=Scb(Twd(a));break;case 2:a.g=bdb(Uwd(a));break;case 3:a.g=Vwd(a);break;case 4:a.g=new Ndb(Wwd(a));break;case 6:a.g=Aeb(Ywd(a));break;case 5:a.g=meb(Xwd(a));break;case 7:a.g=Web(Zwd(a));}}return a.g} +function hxd(a){if(a.n==null){switch(a.p){case 0:a.n=_wd(a)?(Bcb(),Acb):(Bcb(),zcb);break;case 1:a.n=Scb(axd(a));break;case 2:a.n=bdb(bxd(a));break;case 3:a.n=cxd(a);break;case 4:a.n=new Ndb(dxd(a));break;case 6:a.n=Aeb(fxd(a));break;case 5:a.n=meb(exd(a));break;case 7:a.n=Web(gxd(a));}}return a.n} +function QDb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a<f.c.c.length;){d=BD(mlb(f),307);d.g=0;d.i=0;d.e.a.$b()}for(e=new olb(a.a.a);e.a<e.c.c.length;){d=BD(mlb(e),307);for(c=d.a.a.ec().Kc();c.Ob();){b=BD(c.Pb(),57);for(h=b.c.Kc();h.Ob();){g=BD(h.Pb(),57);if(g.a!=d){Qqb(d.e,g);++g.a.g;++g.a.i}}}}} +function gOb(a,b){var c,d,e,f,g,h;h=Axb(a.a,b.b);if(!h){throw vbb(new Zdb('Invalid hitboxes for scanline overlap calculation.'))}g=false;for(f=(d=new Ywb((new cxb((new Gjb(a.a.a)).a)).b),new Njb(d));sib(f.a.a);){e=(c=Wwb(f.a),BD(c.cd(),65));if(bOb(b.b,e)){T$c(a.b.a,b.b,e);g=true}else{if(g){break}}}} +function G5b(a){var b,c,d,e,f;e=BD(vNb(a,(Nyc(),Fxc)),21);f=BD(vNb(a,Ixc),21);c=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new g7c(c);if(e.Hc((tdd(),pdd))){d=BD(vNb(a,Hxc),8);if(f.Hc((Idd(),Bdd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}H5b(a,c,b)} +function toc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b?new Coc:new Eoc;f=false;do{f=false;j=b?Su(a.b):a.b;for(i=j.Kc();i.Ob();){h=BD(i.Pb(),29);m=Mu(h.a);b||new ov(m);for(l=new olb(m);l.a<l.c.c.length;){k=BD(mlb(l),10);if(e.Mb(k)){d=k;c=BD(vNb(k,(wtc(),usc)),305);g=b?c.b:c.k;f=roc(d,g,b,false)}}}}while(f)} +function WCc(a,b,c){var d,e,f,g,h;Odd(c,'Longest path layering',1);a.a=b;h=a.a.a;a.b=KC(WD,oje,25,h.c.length,15,1);d=0;for(g=new olb(h);g.a<g.c.c.length;){e=BD(mlb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),10);YCc(a,e)}h.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.b=null;Qdd(c)} +function QVb(a,b){var c,d,e;b.a?(Axb(a.b,b.b),a.a[b.b.i]=BD(Exb(a.b,b.b),81),c=BD(Dxb(a.b,b.b),81),!!c&&(a.a[c.i]=b.b),undefined):(d=BD(Exb(a.b,b.b),81),!!d&&d==a.a[b.b.i]&&!!d.d&&d.d!=b.b.d&&d.f.Fc(b.b),e=BD(Dxb(a.b,b.b),81),!!e&&a.a[e.i]==b.b&&!!e.d&&e.d!=b.b.d&&b.b.f.Fc(e),Fxb(a.b,b.b),undefined)} +function zbc(a,b){var c,d,e,f,g,h;f=a.d;h=Edb(ED(vNb(a,(Nyc(),Zwc))));if(h<0){h=0;yNb(a,Zwc,h)}b.o.b=h;g=$wnd.Math.floor(h/2);d=new H0b;G0b(d,(Ucd(),Tcd));F0b(d,b);d.n.b=g;e=new H0b;G0b(e,zcd);F0b(e,b);e.n.b=g;RZb(a,d);c=new UZb;tNb(c,a);yNb(c,jxc,null);QZb(c,e);RZb(c,f);ybc(b,a,c);wbc(a,c);return c} +function uNc(a){var b,c;c=BD(vNb(a,(wtc(),Ksc)),21);b=new j3c;if(c.Hc((Orc(),Irc))){d3c(b,oNc);d3c(b,qNc)}if(c.Hc(Krc)||Ccb(DD(vNb(a,(Nyc(),$wc))))){d3c(b,qNc);c.Hc(Lrc)&&d3c(b,rNc)}c.Hc(Hrc)&&d3c(b,nNc);c.Hc(Nrc)&&d3c(b,sNc);c.Hc(Jrc)&&d3c(b,pNc);c.Hc(Erc)&&d3c(b,lNc);c.Hc(Grc)&&d3c(b,mNc);return b} +function Ihb(a,b){var c,d,e,f,g,h,i,j,k,l,m;d=a.d;f=b.d;h=d+f;i=a.e!=b.e?-1:1;if(h==2){k=Ibb(xbb(a.a[0],Yje),xbb(b.a[0],Yje));m=Tbb(k);l=Tbb(Pbb(k,32));return l==0?new Ugb(i,m):new Vgb(i,2,OC(GC(WD,1),oje,25,15,[m,l]))}c=a.a;e=b.a;g=KC(WD,oje,25,h,15,1);Fhb(c,d,e,f,g);j=new Vgb(i,h,g);Jgb(j);return j} +function Gwb(a,b,c,d){var e,f;if(!b){return c}else{e=a.a.ue(c.d,b.d);if(e==0){d.d=ijb(b,c.e);d.b=true;return b}f=e<0?0:1;b.a[f]=Gwb(a,b.a[f],c,d);if(Hwb(b.a[f])){if(Hwb(b.a[1-f])){b.b=true;b.a[0].b=false;b.a[1].b=false}else{Hwb(b.a[f].a[f])?(b=Owb(b,1-f)):Hwb(b.a[f].a[1-f])&&(b=Nwb(b,1-f))}}}return b} +function wHb(a,b,c){var d,e,f,g;e=a.i;d=a.n;vHb(a,(gHb(),dHb),e.c+d.b,c);vHb(a,fHb,e.c+e.b-d.c-c[2],c);g=e.b-d.b-d.c;if(c[0]>0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);vHb(a,eHb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==eHb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} +function AYb(){this.c=KC(UD,Vje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);this.a=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);zlb(this.c,Pje);zlb(this.b,Qje);zlb(this.a,Qje)} +function Ufe(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=KC(WD,oje,25,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=KC(WD,oje,25,d+2,15,1);$fb(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||Yfe(a)}} +function inc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new Skb(j.c.length);a.c=new Lqb;for(h=new olb(j);h.a<h.c.c.length;){g=BD(mlb(h),101);f=new uOc(null);Ekb(a.a,f);Rhb(a.c,g,f)}a.b=new Lqb;gnc(a,b);for(d=0;d<j.c.length-1;d++){i=BD(Ikb(b.d,d),101);for(e=d+1;e<j.c.length;e++){jnc(a,i,BD(Ikb(b.d,e),101),c)}}} +function ySc(a,b,c){var d,e,f,g,h,i;if(!Qq(b)){i=Udd(c,(JD(b,14)?BD(b,14).gc():sr(b.Kc()))/a.a|0);Odd(i,Xqe,1);h=new BSc;g=0;for(f=b.Kc();f.Ob();){d=BD(f.Pb(),86);h=pl(OC(GC(KI,1),Uhe,20,0,[h,new ZRc(d)]));g<d.f.b&&(g=d.f.b)}for(e=b.Kc();e.Ob();){d=BD(e.Pb(),86);yNb(d,(mTc(),bTc),g)}Qdd(i);ySc(a,h,c)}} +function bJc(a,b){var c,d,e,f,g,h,i;c=Qje;h=(j0b(),h0b);for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=d.k;if(f!=h0b){g=ED(vNb(d,(wtc(),atc)));if(g==null){c=$wnd.Math.max(c,0);d.n.b=c+iBc(a.a,f,h)}else{d.n.b=(uCb(g),g)}}i=iBc(a.a,f,h);d.n.b<c+i+d.d.d&&(d.n.b=c+i+d.d.d);c=d.n.b+d.o.b+d.d.a;h=f}} +function uQb(a,b,c){var d,e,f,g,h,i,j,k,l;f=itd(b,false,false);j=ofd(f);l=Edb(ED(hkd(b,(CPb(),vPb))));e=sQb(j,l+a.a);k=new XOb(e);tNb(k,b);Rhb(a.b,b,k);c.c[c.c.length]=k;i=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(h=new Fyd(i);h.e!=h.i.gc();){g=BD(Dyd(h),137);d=wQb(a,g,true,0,0);c.c[c.c.length]=d}return k} +function JVc(a,b,c,d,e){var f,g,h,i,j,k;!!a.d&&a.d.lg(e);f=BD(e.Xb(0),33);if(HVc(a,c,f,false)){return true}g=BD(e.Xb(e.gc()-1),33);if(HVc(a,d,g,true)){return true}if(CVc(a,e)){return true}for(k=e.Kc();k.Ob();){j=BD(k.Pb(),33);for(i=b.Kc();i.Ob();){h=BD(i.Pb(),33);if(BVc(a,j,h)){return true}}}return false} +function qid(a,b,c){var d,e,f,g,h,i,j,k,l,m;m=b.c.length;l=(j=a.Yg(c),BD(j>=0?a._g(j,false,true):sid(a,c,false),58));n:for(f=l.Kc();f.Ob();){e=BD(f.Pb(),56);for(k=0;k<m;++k){g=(tCb(k,b.c.length),BD(b.c[k],72));i=g.dd();h=g.ak();d=e.bh(h,false);if(i==null?d!=null:!pb(i,d)){continue n}}return e}return null} +function V6b(a,b,c,d){var e,f,g,h;e=BD(Y_b(b,(Ucd(),Tcd)).Kc().Pb(),11);f=BD(Y_b(b,zcd).Kc().Pb(),11);for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);while(g.e.c.length!=0){RZb(BD(Ikb(g.e,0),17),e)}while(g.g.c.length!=0){QZb(BD(Ikb(g.g,0),17),f)}}c||yNb(b,(wtc(),Vsc),null);d||yNb(b,(wtc(),Wsc),null)} +function itd(a,b,c){var d,e;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){return etd(a)}else{d=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);if(b){Uxd((!d.a&&(d.a=new xMd(y2,d,5)),d.a));omd(d,0);pmd(d,0);hmd(d,0);imd(d,0)}if(c){e=(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a);while(e.i>1){Xxd(e,e.i-1)}}return d}} +function Z2b(a,b){var c,d,e,f,g,h,i;Odd(b,'Comment post-processing',1);for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);d=new Rkb;for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);i=BD(vNb(g,(wtc(),vtc)),15);c=BD(vNb(g,tsc),15);if(!!i||!!c){$2b(g,i,c);!!i&&Gkb(d,i);!!c&&Gkb(d,c)}}Gkb(e.a,d)}Qdd(b)} +function Eac(a,b){var c,d,e,f,g,h,i;c=new jkb;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);i=true;d=0;for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);switch(g.k.g){case 4:++d;case 1:Xjb(c,g);break;case 0:Gac(g,b);default:c.b==c.c||Fac(c,d,i,false,b);i=false;d=0;}}c.b==c.c||Fac(c,d,i,true,b)}} +function Ebc(a,b){var c,d,e,f,g,h,i;e=new Rkb;for(c=0;c<=a.i;c++){d=new H1b(b);d.p=a.i-c;e.c[e.c.length]=d}for(h=new olb(a.o);h.a<h.c.c.length;){g=BD(mlb(h),10);$_b(g,BD(Ikb(e,a.i-a.f[g.p]),29))}f=new olb(e);while(f.a<f.c.c.length){i=BD(mlb(f),29);i.a.c.length==0&&nlb(f)}b.b.c=KC(SI,Uhe,1,0,5,1);Gkb(b.b,e)} +function KHc(a,b){var c,d,e,f,g,h;c=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),11);AHc(a.b,a.d[g.p]);for(e=new b1b(g.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);f=aIc(a,g==d.c?d.d:d.c);if(f>a.d[g.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function o2c(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i==0||(f+=o2c(a,d,false))}if(c){g=Xod(b);while(g){f+=(!g.a&&(g.a=new cUd(E2,g,10,11)),g.a).i;g=Xod(g)}}return f} +function Xxd(a,b){var c,d,e,f;if(a.ej()){d=null;e=a.fj();a.ij()&&(d=a.kj(a.pi(b),null));c=a.Zi(4,f=tud(a,b),null,b,e);if(a.bj()&&f!=null){d=a.dj(f,d);if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}else{if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}return f}else{f=tud(a,b);if(a.bj()&&f!=null){d=a.dj(f,null);!!d&&d.Fi()}return f}} +function UKb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new Tqb;i=0;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),222);k=0;ktb(c.b,new XKb);for(g=Jsb(c.b,0);g.b!=g.d.c;){f=BD(Xsb(g),222);if(b.a._b(f)){e=c.c;h=f.c;k<h.d+h.a+j&&k+e.a+j>h.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i} +function Orc(){Orc=ccb;Frc=new Prc('COMMENTS',0);Hrc=new Prc('EXTERNAL_PORTS',1);Irc=new Prc('HYPEREDGES',2);Jrc=new Prc('HYPERNODES',3);Krc=new Prc('NON_FREE_PORTS',4);Lrc=new Prc('NORTH_SOUTH_PORTS',5);Nrc=new Prc(Wne,6);Erc=new Prc('CENTER_LABELS',7);Grc=new Prc('END_LABELS',8);Mrc=new Prc('PARTITIONS',9)} +function gVc(a){var b,c,d,e,f;e=new Rkb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(d=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){f=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));b.a._b(f)||(e.c[e.c.length]=f,true)}}return e} +function fVc(a){var b,c,d,e,f,g;f=new Tqb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(e=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!JD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),186)){g=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f} +function zA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function BA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function DA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=bfb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=rA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new eB;j=i.q.getFullYear()-nje+nje-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d<g?100:0)}f.p=d;return true} +function L1b(a,b){var c,d,e,f,g;if(!Xod(a)){return}g=BD(vNb(b,(Nyc(),Fxc)),174);PD(hkd(a,Vxc))===PD((dcd(),ccd))&&jkd(a,Vxc,bcd);d=(Pgd(),new bhd(Xod(a)));f=new hhd(!Xod(a)?null:new bhd(Xod(a)),a);e=PGb(d,f,false,true);rqb(g,(tdd(),pdd));c=BD(vNb(b,Hxc),8);c.a=$wnd.Math.max(e.a,c.a);c.b=$wnd.Math.max(e.b,c.b)} +function Pac(a,b,c){var d,e,f,g,h,i;for(g=BD(vNb(a,(wtc(),Lsc)),15).Kc();g.Ob();){f=BD(g.Pb(),10);switch(BD(vNb(f,(Nyc(),mxc)),163).g){case 2:$_b(f,b);break;case 4:$_b(f,c);}for(e=new Sr(ur(O_b(f).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(!!d.c&&!!d.d){continue}h=!d.d;i=BD(vNb(d,ctc),11);h?RZb(d,i):QZb(d,i)}}} +function Alc(){Alc=ccb;tlc=new Blc(xle,0,(Ucd(),Acd),Acd);wlc=new Blc(zle,1,Rcd,Rcd);slc=new Blc(yle,2,zcd,zcd);zlc=new Blc(Ale,3,Tcd,Tcd);vlc=new Blc('NORTH_WEST_CORNER',4,Tcd,Acd);ulc=new Blc('NORTH_EAST_CORNER',5,Acd,zcd);ylc=new Blc('SOUTH_WEST_CORNER',6,Rcd,Tcd);xlc=new Blc('SOUTH_EAST_CORNER',7,zcd,Rcd)} +function i6c(){i6c=ccb;h6c=OC(GC(XD,1),Sje,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]);$wnd.Math.pow(2,-65)} +function Pcc(a,b){var c,d,e,f,g;if(a.c.length==0){return new vgd(meb(0),meb(0))}c=(tCb(0,a.c.length),BD(a.c[0],11)).j;g=0;f=b.g;d=b.g+1;while(g<a.c.length-1&&c.g<f){++g;c=(tCb(g,a.c.length),BD(a.c[g],11)).j}e=g;while(e<a.c.length-1&&c.g<d){++e;c=(tCb(g,a.c.length),BD(a.c[g],11)).j}return new vgd(meb(g),meb(e))} +function R9b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=b.c.length;g=(tCb(c,b.c.length),BD(b.c[c],286));h=g.a.o.a;l=g.c;m=0;for(j=g.c;j<=g.f;j++){if(h<=a.a[j]){return j}k=a.a[j];i=null;for(e=c+1;e<f;e++){d=(tCb(e,b.c.length),BD(b.c[e],286));d.c<=j&&d.f>=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l} +function ode(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=Xee(a.i));a.j=a.i.length;nde(a);f=rde(a);if(a.d!=a.j)throw vbb(new mde(tvd((h0d(),sue))));if(a.g){for(d=0;d<a.g.a.c.length;d++){e=BD(Uvb(a.g,d),584);if(a.f<=e.a)throw vbb(new mde(tvd((h0d(),tue))))}a.g.a.c=KC(SI,Uhe,1,0,5,1)}return f} +function _Pd(a,b){var c,d,e;if(b==null){for(d=(!a.a&&(a.a=new cUd(g5,a,9,5)),new Fyd(a.a));d.e!=d.i.gc();){c=BD(Dyd(d),678);e=c.c;if((e==null?c.zb:e)==null){return c}}}else{for(d=(!a.a&&(a.a=new cUd(g5,a,9,5)),new Fyd(a.a));d.e!=d.i.gc();){c=BD(Dyd(d),678);if(dfb(b,(e=c.c,e==null?c.zb:e))){return c}}}return null} +function KIb(a,b){var c;c=null;switch(b.g){case 1:a.e.Xe((Y9c(),o9c))&&(c=BD(a.e.We(o9c),249));break;case 3:a.e.Xe((Y9c(),p9c))&&(c=BD(a.e.We(p9c),249));break;case 2:a.e.Xe((Y9c(),n9c))&&(c=BD(a.e.We(n9c),249));break;case 4:a.e.Xe((Y9c(),q9c))&&(c=BD(a.e.We(q9c),249));}!c&&(c=BD(a.e.We((Y9c(),l9c)),249));return c} +function OCc(a,b,c){var d,e,f,g,h,i,j,k,l;b.p=1;f=b.c;for(l=W_b(b,(KAc(),IAc)).Kc();l.Ob();){k=BD(l.Pb(),11);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);j=d.d.i;if(b!=j){g=j.c;if(g.p<=f.p){h=f.p+1;if(h==c.b.c.length){i=new H1b(c);i.p=h;Ekb(c.b,i);$_b(j,i)}else{i=BD(Ikb(c.b,h),29);$_b(j,i)}OCc(a,j,c)}}}}} +function ZXc(a,b,c){var d,e,f,g,h,i;e=c;f=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);jkd(g,(ZWc(),SWc),meb(e++));i=gVc(g);d=$wnd.Math.atan2(g.j+g.f/2,g.i+g.g/2);d+=d<0?dre:0;d<0.7853981633974483||d>vre?Okb(i,a.b):d<=vre&&d>wre?Okb(i,a.d):d<=wre&&d>xre?Okb(i,a.c):d<=xre&&Okb(i,a.a);f=ZXc(a,i,f)}return e} +function Hgb(){Hgb=ccb;var a;Cgb=new Ugb(1,1);Egb=new Ugb(1,10);Ggb=new Ugb(0,0);Bgb=new Ugb(-1,1);Dgb=OC(GC(cJ,1),nie,91,0,[Ggb,Cgb,new Ugb(1,2),new Ugb(1,3),new Ugb(1,4),new Ugb(1,5),new Ugb(1,6),new Ugb(1,7),new Ugb(1,8),new Ugb(1,9),Egb]);Fgb=KC(cJ,nie,91,32,0,1);for(a=0;a<Fgb.length;a++){Fgb[a]=ghb(Nbb(1,a))}} +function B9b(a,b,c,d,e,f){var g,h,i,j;h=!WAb(JAb(a.Oc(),new Xxb(new F9b))).sd((EAb(),DAb));g=a;f==(ead(),dad)&&(g=JD(g,152)?km(BD(g,152)):JD(g,131)?BD(g,131).a:JD(g,54)?new ov(g):new dv(g));for(j=g.Kc();j.Ob();){i=BD(j.Pb(),70);i.n.a=b.a;h?(i.n.b=b.b+(d.b-i.o.b)/2):e?(i.n.b=b.b):(i.n.b=b.b+d.b-i.o.b);b.a+=i.o.a+c}} +function UOc(a,b,c,d){var e,f,g,h,i,j;e=(d.c+d.a)/2;Osb(b.j);Dsb(b.j,e);Osb(c.e);Dsb(c.e,e);j=new aPc;for(h=new olb(a.f);h.a<h.c.c.length;){f=BD(mlb(h),129);i=f.a;WOc(j,b,i);WOc(j,c,i)}for(g=new olb(a.k);g.a<g.c.c.length;){f=BD(mlb(g),129);i=f.b;WOc(j,b,i);WOc(j,c,i)}j.b+=2;j.a+=POc(b,a.q);j.a+=POc(a.q,c);return j} +function FSc(a,b,c){var d,e,f,g,h;if(!Qq(b)){h=Udd(c,(JD(b,14)?BD(b,14).gc():sr(b.Kc()))/a.a|0);Odd(h,Xqe,1);g=new ISc;f=null;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),86);g=pl(OC(GC(KI,1),Uhe,20,0,[g,new ZRc(d)]));if(f){yNb(f,(mTc(),hTc),d);yNb(d,_Sc,f);if(VRc(d)==VRc(f)){yNb(f,iTc,d);yNb(d,aTc,f)}}f=d}Qdd(h);FSc(a,g,c)}} +function VHb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.d;a.f==(EIb(),CIb)?(h+=(c.a-a.e.b)/2):a.f==BIb&&(h+=c.a-a.e.b);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);g=d.rf();f=new d7c;f.b=h;h+=g.b+a.a;switch(a.b.g){case 0:f.a=c.c+b.b;break;case 1:f.a=c.c+b.b+(c.b-g.a)/2;break;case 2:f.a=c.c+c.b-b.c-g.a;}d.tf(f)}} +function XHb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.c;a.b==(NHb(),KHb)?(h+=(c.b-a.e.a)/2):a.b==MHb&&(h+=c.b-a.e.a);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);g=d.rf();f=new d7c;f.a=h;h+=g.a+a.a;switch(a.f.g){case 0:f.b=c.d+b.d;break;case 1:f.b=c.d+b.d+(c.a-g.b)/2;break;case 2:f.b=c.d+c.a-b.a-g.b;}d.tf(f)}} +function D4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=BD(Ohb(c.c,b),459);n=f.f;o=f.a;i=new f7c(k,n);l=new f7c(g,o);e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new f7c(e,n);m=new f7c(e,o);n7c(b.a,OC(GC(m1,1),nie,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} +function jdd(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Rse),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new mdd)));p4c(a,Rse,ame,fdd);p4c(a,Rse,wme,15);p4c(a,Rse,yme,meb(0));p4c(a,Rse,_le,tme)} +function hde(){hde=ccb;var a,b,c,d,e,f;fde=KC(SD,wte,25,255,15,1);gde=KC(TD,$ie,25,16,15,1);for(b=0;b<255;b++){fde[b]=-1}for(c=57;c>=48;c--){fde[c]=c-48<<24>>24}for(d=70;d>=65;d--){fde[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){fde[e]=e-97+10<<24>>24}for(f=0;f<10;f++)gde[f]=48+f&aje;for(a=10;a<=15;a++)gde[a]=65+a-10&aje} +function BVc(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g/2;g=c.g+a.g/2;d=b.f+a.g/2;e=c.f+a.g/2;if(h<i+g&&i<h&&j<k+e&&k<j){return true}else if(i<h+f&&h<i&&k<j+d&&j<k){return true}else if(h<i+g&&i<h&&j<k&&k<j+d){return true}else if(i<h+f&&h<i&&j<k+e&&k<j){return true}return false} +function NTb(a){var b,c,d,e,f;e=BD(vNb(a,(Nyc(),Fxc)),21);f=BD(vNb(a,Ixc),21);c=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new g7c(c);if(e.Hc((tdd(),pdd))){d=BD(vNb(a,Hxc),8);if(f.Hc((Idd(),Bdd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Ccb(DD(vNb(a,Gxc)))||OTb(a,c,b)} +function NJc(a,b){var c,d,e,f;for(f=V_b(b,(Ucd(),Rcd)).Kc();f.Ob();){d=BD(f.Pb(),11);c=BD(vNb(d,(wtc(),gtc)),10);!!c&&AFb(DFb(CFb(EFb(BFb(new FFb,0),0.1),a.i[b.p].d),a.i[c.p].a))}for(e=V_b(b,Acd).Kc();e.Ob();){d=BD(e.Pb(),11);c=BD(vNb(d,(wtc(),gtc)),10);!!c&&AFb(DFb(CFb(EFb(BFb(new FFb,0),0.1),a.i[c.p].d),a.i[b.p].a))}} +function QKd(a){var b,c,d,e,f,g;if(!a.c){g=new wNd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(VKd(a));d.e!=d.i.gc();){c=BD(Dyd(d),87);e=KQd(c);JD(e,88)&&ytd(g,QKd(BD(e,26)));wtd(g,c)}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}tNd(g);vud(g);a.c=new nNd((BD(qud(ZKd((NFd(),MFd).o),15),18),g.i),g.g);$Kd(a).b&=-33}return a.c} +function eee(a){var b;if(a.c!=10)throw vbb(new mde(tvd((h0d(),uue))));b=a.a;switch(b){case 110:b=10;break;case 114:b=13;break;case 116:b=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw vbb(new mde(tvd((h0d(),Yue))));}return b} +function qD(a){var b,c,d,e,f;if(a.l==0&&a.m==0&&a.h==0){return '0'}if(a.h==Gje&&a.m==0&&a.l==0){return '-9223372036854775808'}if(a.h>>19!=0){return '-'+qD(hD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=RC(Jje);c=UC(c,e,true);b=''+pD(QC);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} +function xrb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function Pgc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new olb(a.d.b);e.a<e.c.c.length;){d=BD(mlb(e),29);d.p=c++;for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);!b&&!Qq(O_b(f))&&(b=true)}}h=qqb((ead(),cad),OC(GC(t1,1),Kie,103,0,[aad,bad]));if(!b){rqb(h,dad);rqb(h,_9c)}a.a=new mDb(h);Uhb(a.f);Uhb(a.b);Uhb(a.e);Uhb(a.g)} +function _Xb(a,b,c){var d,e,f,g,h,i,j,k,l;d=c.c;e=c.d;h=A0b(b.c);i=A0b(b.d);if(d==b.c){h=aYb(a,h,e);i=bYb(b.d)}else{h=bYb(b.c);i=aYb(a,i,e)}j=new t7c(b.a);Gsb(j,h,j.a,j.a.a);Gsb(j,i,j.c.b,j.c);g=b.c==d;l=new BYb;for(f=0;f<j.b-1;++f){k=new vgd(BD(Ut(j,f),8),BD(Ut(j,f+1),8));g&&f==0||!g&&f==j.b-2?(l.b=k):Ekb(l.a,k)}return l} +function O$b(a,b){var c,d,e,f;f=a.j.g-b.j.g;if(f!=0){return f}c=BD(vNb(a,(Nyc(),Wxc)),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}} +function G6b(a,b,c,d){var e,f,g,h,i;if(sr((D6b(),new Sr(ur(O_b(b).a.Kc(),new Sq))))>=a.a){return -1}if(!F6b(b,c)){return -1}if(Qq(BD(d.Kb(b),20))){return 1}e=0;for(g=BD(d.Kb(b),20).Kc();g.Ob();){f=BD(g.Pb(),17);i=f.c.i==b?f.d.i:f.c.i;h=G6b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1} +function Btd(a,b){var c,d,e,f,g,h;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}d=BD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.ni()){for(c=0;c<h;++c){e=a.ki(c);f=g.Pb();if(e==null?f!=null:!pb(e,f)){return false}}}else{for(c=0;c<h;++c){e=a.ki(c);f=g.Pb();if(PD(e)!==PD(f)){return false}}}return true} +function rAd(a,b){var c,d,e,f,g,h;if(a.f>0){a.qj();if(b!=null){for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=BD(c.g,367);h=c.i;for(g=0;g<h;++g){e=d[g];if(pb(b,e.dd())){return true}}}}}else{for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=BD(c.g,367);h=c.i;for(g=0;g<h;++g){e=d[g];if(PD(b)===PD(e.dd())){return true}}}}}}return false} +function e6b(a,b,c){var d,e,f,g;Odd(c,'Orthogonally routing hierarchical port edges',1);a.a=0;d=h6b(b);k6b(b,d);j6b(a,b,d);f6b(b);e=BD(vNb(b,(Nyc(),Vxc)),98);f=b.b;d6b((tCb(0,f.c.length),BD(f.c[0],29)),e,b);d6b(BD(Ikb(f,f.c.length-1),29),e,b);g=b.b;b6b((tCb(0,g.c.length),BD(g.c[0],29)));b6b(BD(Ikb(g,g.c.length-1),29));Qdd(c)} +function jnd(a){switch(a){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{return a-48<<24>>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw vbb(new Oeb('Invalid hexadecimal'))}}} +function AUc(a,b,c){var d,e,f,g;Odd(c,'Processor order nodes',2);a.a=Edb(ED(vNb(b,(JTc(),HTc))));e=new Psb;for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(Gsb(e,f,e.c.b,e.c),true)}d=(sCb(e.b!=0),BD(e.a.a.c,86));yUc(a,d);!c.b&&Rdd(c,1);BUc(a,d,0-Edb(ED(vNb(d,(mTc(),bTc))))/2,0);!c.b&&Rdd(c,1);Qdd(c)} +function rFb(){rFb=ccb;qFb=new sFb('SPIRAL',0);lFb=new sFb('LINE_BY_LINE',1);mFb=new sFb('MANHATTAN',2);kFb=new sFb('JITTER',3);oFb=new sFb('QUADRANTS_LINE_BY_LINE',4);pFb=new sFb('QUADRANTS_MANHATTAN',5);nFb=new sFb('QUADRANTS_JITTER',6);jFb=new sFb('COMBINE_LINE_BY_LINE_MANHATTAN',7);iFb=new sFb('COMBINE_JITTER_MANHATTAN',8)} +function roc(a,b,c,d){var e,f,g,h,i,j;i=woc(a,c);j=woc(b,c);e=false;while(!!i&&!!j){if(d||uoc(i,j,c)){g=woc(i,c);h=woc(j,c);zoc(b);zoc(a);f=i.c;sbc(i,false);sbc(j,false);if(c){Z_b(b,j.p,f);b.p=j.p;Z_b(a,i.p+1,f);a.p=i.p}else{Z_b(a,i.p,f);a.p=i.p;Z_b(b,j.p+1,f);b.p=j.p}$_b(i,null);$_b(j,null);i=g;j=h;e=true}else{break}}return e} +function VDc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new olb(d.j);h.a<h.c.c.length;){g=BD(mlb(h),11);PD(vNb(g,(wtc(),$sc)))===PD(c)&&(g.g.c.length==0?g.e.c.length==0||(e=true):(f=true))}i=0;e&&e^f?(i=c.j==(Ucd(),Acd)?-a.e[d.c.p][d.p]:b-a.e[d.c.p][d.p]):f&&e^f?(i=a.e[d.c.p][d.p]+1):e&&f&&(i=c.j==(Ucd(),Acd)?0:b/2);return i} +function NEd(a,b,c,d,e,f,g,h){var i,j,k;i=0;b!=null&&(i^=LCb(b.toLowerCase()));c!=null&&(i^=LCb(c));d!=null&&(i^=LCb(d));g!=null&&(i^=LCb(g));h!=null&&(i^=LCb(h));for(j=0,k=f.length;j<k;j++){i^=LCb(f[j])}a?(i|=256):(i&=-257);e?(i|=16):(i&=-17);this.f=i;this.i=b==null?null:(uCb(b),b);this.a=c;this.d=d;this.j=f;this.g=g;this.e=h} +function X_b(a,b,c){var d,e;e=null;switch(b.g){case 1:e=(z0b(),u0b);break;case 2:e=(z0b(),w0b);}d=null;switch(c.g){case 1:d=(z0b(),v0b);break;case 2:d=(z0b(),t0b);break;case 3:d=(z0b(),x0b);break;case 4:d=(z0b(),y0b);}return !!e&&!!d?Nq(a.j,new Yb(new amb(OC(GC(_D,1),Uhe,169,0,[BD(Qb(e),169),BD(Qb(d),169)])))):(mmb(),mmb(),jmb)} +function t5b(a){var b,c,d;b=BD(vNb(a,(Nyc(),Hxc)),8);yNb(a,Hxc,new f7c(b.b,b.a));switch(BD(vNb(a,mwc),248).g){case 1:yNb(a,mwc,(F7c(),E7c));break;case 2:yNb(a,mwc,(F7c(),A7c));break;case 3:yNb(a,mwc,(F7c(),C7c));break;case 4:yNb(a,mwc,(F7c(),D7c));}if((!a.q?(mmb(),mmb(),kmb):a.q)._b(ayc)){c=BD(vNb(a,ayc),8);d=c.a;c.a=c.b;c.b=d}} +function jjc(a,b,c,d,e,f){this.b=c;this.d=e;if(a>=b.length){throw vbb(new qcb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new dIc(d);THc(this.e,this.c,(Ucd(),Tcd));this.i=new dIc(d);THc(this.i,this.c,zcd);this.f=new ejc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(j0b(),e0b);this.a&&hjc(this,a,b.length)} +function hKb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((Idd(),zdd));g=a.B.Hc(Cdd);a.a=new FHb(g,f,a.c);!!a.n&&u_b(a.a.n,a.n);lIb(a.g,(gHb(),eHb),a.a);if(!b){d=new mIb(1,f,a.c);d.n.a=a.k;Npb(a.p,(Ucd(),Acd),d);e=new mIb(1,f,a.c);e.n.d=a.k;Npb(a.p,Rcd,e);h=new mIb(0,f,a.c);h.n.c=a.k;Npb(a.p,Tcd,h);c=new mIb(0,f,a.c);c.n.b=a.k;Npb(a.p,zcd,c)}} +function Vgc(a){var b,c,d;b=BD(vNb(a.d,(Nyc(),Swc)),218);switch(b.g){case 2:c=Ngc(a);break;case 3:c=(d=new Rkb,MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Shc),new Uhc),new Whc),new ehc),new Yhc(d)),d);break;default:throw vbb(new Zdb('Compaction not supported for '+b+' edges.'));}Ugc(a,c);reb(new Pib(a.g),new Ehc(a))} +function a2c(a,b){var c;c=new zNb;!!b&&tNb(c,BD(Ohb(a.a,C2),94));JD(b,470)&&tNb(c,BD(Ohb(a.a,G2),94));if(JD(b,354)){tNb(c,BD(Ohb(a.a,D2),94));return c}JD(b,82)&&tNb(c,BD(Ohb(a.a,z2),94));if(JD(b,239)){tNb(c,BD(Ohb(a.a,E2),94));return c}if(JD(b,186)){tNb(c,BD(Ohb(a.a,F2),94));return c}JD(b,352)&&tNb(c,BD(Ohb(a.a,B2),94));return c} +function wSb(){wSb=ccb;oSb=new Osd((Y9c(),D9c),meb(1));uSb=new Osd(T9c,80);tSb=new Osd(M9c,5);bSb=new Osd(r8c,tme);pSb=new Osd(E9c,meb(1));sSb=new Osd(H9c,(Bcb(),true));lSb=new q0b(50);kSb=new Osd(f9c,lSb);dSb=O8c;mSb=t9c;cSb=new Osd(B8c,false);jSb=e9c;iSb=b9c;hSb=Y8c;gSb=W8c;nSb=x9c;fSb=(SRb(),LRb);vSb=QRb;eSb=KRb;qSb=NRb;rSb=PRb} +function ZXb(a){var b,c,d,e,f,g,h,i;i=new jYb;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){continue}XXb(i,g,new d7c);for(f=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(e.c.i.k==e0b||e.d.i.k==e0b){continue}for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);b=c;hYb(i,new cWb(b.a,b.b))}}}return i} +function A0c(){A0c=ccb;z0c=new Lsd(Qre);y0c=(R0c(),Q0c);x0c=new Nsd(Vre,y0c);w0c=(a1c(),_0c);v0c=new Nsd(Rre,w0c);u0c=(N_c(),J_c);t0c=new Nsd(Sre,u0c);p0c=new Nsd(Tre,null);s0c=(C_c(),A_c);r0c=new Nsd(Ure,s0c);l0c=(i_c(),h_c);k0c=new Nsd(Wre,l0c);m0c=new Nsd(Xre,(Bcb(),false));n0c=new Nsd(Yre,meb(64));o0c=new Nsd(Zre,true);q0c=B_c} +function Toc(a){var b,c,d,e,f,g;if(a.a!=null){return}a.a=KC(sbb,dle,25,a.c.b.c.length,16,1);a.a[0]=false;if(wNb(a.c,(Nyc(),Lyc))){d=BD(vNb(a.c,Lyc),15);for(c=d.Kc();c.Ob();){b=BD(c.Pb(),19).a;b>0&&b<a.a.length&&(a.a[b]=false)}}else{g=new olb(a.c.b);g.a<g.c.c.length&&mlb(g);e=1;while(g.a<g.c.c.length){f=BD(mlb(g),29);a.a[e++]=Woc(f)}}} +function TMd(a,b){var c,d,e,f;e=a.b;switch(b){case 1:{a.b|=1;a.b|=4;a.b|=8;break}case 2:{a.b|=2;a.b|=4;a.b|=8;break}case 4:{a.b|=1;a.b|=2;a.b|=4;a.b|=8;break}case 3:{a.b|=16;a.b|=8;break}case 0:{a.b|=32;a.b|=16;a.b|=8;a.b|=1;a.b|=2;a.b|=4;break}}if(a.b!=e&&!!a.c){for(d=new Fyd(a.c);d.e!=d.i.gc();){f=BD(Dyd(d),473);c=$Kd(f);XMd(c,b)}}} +function cGc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;e=false;for(g=b,h=0,i=g.length;h<i;++h){f=g[h];Ccb((Bcb(),f.e?true:false))&&!BD(Ikb(a.b,f.e.p),214).s&&(e=e|(j=f.e,k=BD(Ikb(a.b,j.p),214),l=k.e,m=SFc(c,l.length),n=l[m][0],n.k==(j0b(),e0b)?(l[m]=aGc(f,l[m],c?(Ucd(),Tcd):(Ucd(),zcd))):k.c.Tf(l,c),o=dGc(a,k,c,d),bGc(k.e,k.o,c),o))}return e} +function p2c(a,b){var c,d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);if(PD(hkd(d,(Y9c(),J8c)))!==PD((hbd(),gbd))){g=BD(hkd(b,F9c),149);c=BD(hkd(d,F9c),149);(g==c||!!g&&C3c(g,c))&&(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i!=0&&(f+=p2c(a,d))}}return f} +function nlc(a){var b,c,d,e,f,g,h;d=0;h=0;for(g=new olb(a.d);g.a<g.c.c.length;){f=BD(mlb(g),101);e=BD(GAb(JAb(new YAb(null,new Kub(f.j,16)),new Ylc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);c=null;if(d<=h){c=(Ucd(),Acd);d+=e.gc()}else if(h<d){c=(Ucd(),Rcd);h+=e.gc()}b=c;MAb(NAb(e.Oc(),new Mlc),new Olc(b))}} +function mkc(a){var b,c,d,e,f,g,h,i;a.b=new _i(new amb((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]))),new amb((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc]))));for(g=OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]),h=0,i=g.length;h<i;++h){f=g[h];for(c=OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc]),d=0,e=c.length;d<e;++d){b=c[d];Ui(a.b,f,b,new Rkb)}}} +function KJb(a,b){var c,d,e,f,g,h,i,j,k,l;g=BD(BD(Qc(a.r,b),21),84);h=a.u.Hc((rcd(),pcd));c=a.u.Hc(mcd);d=a.u.Hc(lcd);j=a.u.Hc(qcd);l=a.B.Hc((Idd(),Hdd));k=!c&&!d&&(j||g.gc()==2);HJb(a,b);e=null;i=null;if(h){f=g.Kc();e=BD(f.Pb(),111);i=e;while(f.Ob()){i=BD(f.Pb(),111)}e.d.b=0;i.d.c=0;k&&!e.a&&(e.d.c=0)}if(l){LJb(g);if(h){e.d.b=0;i.d.c=0}}} +function SKb(a,b){var c,d,e,f,g,h,i,j,k,l;g=BD(BD(Qc(a.r,b),21),84);h=a.u.Hc((rcd(),pcd));c=a.u.Hc(mcd);d=a.u.Hc(lcd);i=a.u.Hc(qcd);l=a.B.Hc((Idd(),Hdd));j=!c&&!d&&(i||g.gc()==2);QKb(a,b);k=null;e=null;if(h){f=g.Kc();k=BD(f.Pb(),111);e=k;while(f.Ob()){e=BD(f.Pb(),111)}k.d.d=0;e.d.a=0;j&&!k.a&&(k.d.a=0)}if(l){TKb(g);if(h){k.d.d=0;e.d.a=0}}} +function oJc(a,b,c){var d,e,f,g,h,i,j,k;e=b.k;if(b.p>=0){return false}else{b.p=c.b;Ekb(c.e,b)}if(e==(j0b(),g0b)||e==i0b){for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(k=(d=new olb((new R0b(f)).a.g),new U0b(d));llb(k.a);){j=BD(mlb(k.a),17).d;h=j.i;i=h.k;if(b.c!=h.c){if(i==g0b||i==i0b){if(oJc(a,h,c)){return true}}}}}}return true} +function gJd(a){var b;if((a.Db&64)!=0)return EId(a);b=new Jfb(EId(a));b.a+=' (changeable: ';Ffb(b,(a.Bb&zte)!=0);b.a+=', volatile: ';Ffb(b,(a.Bb&Dve)!=0);b.a+=', transient: ';Ffb(b,(a.Bb&Rje)!=0);b.a+=', defaultValueLiteral: ';Efb(b,a.j);b.a+=', unsettable: ';Ffb(b,(a.Bb&Cve)!=0);b.a+=', derived: ';Ffb(b,(a.Bb&oie)!=0);b.a+=')';return b.a} +function AOb(a){var b,c,d,e,f,g,h,i,j,k,l,m;e=eNb(a.d);g=BD(vNb(a.b,(CPb(),wPb)),116);h=g.b+g.c;i=g.d+g.a;k=e.d.a*a.e+h;j=e.b.a*a.f+i;$Ob(a.b,new f7c(k,j));for(m=new olb(a.g);m.a<m.c.c.length;){l=BD(mlb(m),562);b=l.g-e.a.a;c=l.i-e.c.a;d=P6c(Z6c(new f7c(b,c),l.a,l.b),Y6c(b7c(R6c(HOb(l.e)),l.d*l.a,l.c*l.b),-0.5));f=IOb(l.e);KOb(l.e,c7c(d,f))}} +function tmc(a,b,c,d){var e,f,g,h,i;i=KC(UD,nie,104,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,0,2);for(f=OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]),g=0,h=f.length;g<h;++g){e=f[g];i[e.g]=KC(UD,Vje,25,a.c[e.g],15,1)}vmc(i,a,Acd);vmc(i,a,Rcd);smc(i,a,Acd,b,c,d);smc(i,a,zcd,b,c,d);smc(i,a,Rcd,b,c,d);smc(i,a,Tcd,b,c,d);return i} +function UGc(a,b,c){if(Mhb(a.a,b)){if(Rqb(BD(Ohb(a.a,b),53),c)){return 1}}else{Rhb(a.a,b,new Tqb)}if(Mhb(a.a,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return -1}}else{Rhb(a.a,c,new Tqb)}if(Mhb(a.b,b)){if(Rqb(BD(Ohb(a.b,b),53),c)){return -1}}else{Rhb(a.b,b,new Tqb)}if(Mhb(a.b,c)){if(Rqb(BD(Ohb(a.b,c),53),b)){return 1}}else{Rhb(a.b,c,new Tqb)}return 0} +function x2d(a,b,c,d){var e,f,g,h,i,j;if(c==null){e=BD(a.g,119);for(h=0;h<a.i;++h){g=e[h];if(g.ak()==b){return Txd(a,g,d)}}}f=(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c));if(oid(a.e)){j=!R2d(a,b);d=Sxd(a,f,d);i=b.$j()?H2d(a,3,b,null,c,M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0),j):H2d(a,1,b,b.zj(),c,-1,j);d?d.Ei(i):(d=i)}else{d=Sxd(a,f,d)}return d} +function CJb(a){var b,c,d,e,f,g;if(a.q==(dcd(),_bd)||a.q==$bd){return}e=a.f.n.d+_Gb(BD(Mpb(a.b,(Ucd(),Acd)),124))+a.c;b=a.f.n.a+_Gb(BD(Mpb(a.b,Rcd),124))+a.c;d=BD(Mpb(a.b,zcd),124);g=BD(Mpb(a.b,Tcd),124);f=$wnd.Math.max(0,d.n.d-e);f=$wnd.Math.max(f,g.n.d-e);c=$wnd.Math.max(0,d.n.a-b);c=$wnd.Math.max(c,g.n.a-b);d.n.d=f;g.n.d=f;d.n.a=c;g.n.a=c} +function rdc(a,b){var c,d,e,f,g,h,i,j,k,l,m;Odd(b,'Restoring reversed edges',1);for(i=new olb(a.b);i.a<i.c.c.length;){h=BD(mlb(i),29);for(k=new olb(h.a);k.a<k.c.c.length;){j=BD(mlb(k),10);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);g=k_b(l.g);for(d=g,e=0,f=d.length;e<f;++e){c=d[e];Ccb(DD(vNb(c,(wtc(),ltc))))&&PZb(c,false)}}}}Qdd(b)} +function m4c(){this.b=new $rb;this.d=new $rb;this.e=new $rb;this.c=new $rb;this.a=new Lqb;this.f=new Lqb;hvd(m1,new x4c,new z4c);hvd(l1,new V4c,new X4c);hvd(i1,new Z4c,new _4c);hvd(j1,new b5c,new d5c);hvd(i2,new f5c,new h5c);hvd(DJ,new B4c,new D4c);hvd(xK,new F4c,new H4c);hvd(jK,new J4c,new L4c);hvd(uK,new N4c,new P4c);hvd(kL,new R4c,new T4c)} +function R5d(a){var b,c,d,e,f,g;f=0;b=wId(a);!!b.Bj()&&(f|=4);(a.Bb&Cve)!=0&&(f|=2);if(JD(a,99)){c=BD(a,18);e=zUd(c);(c.Bb&ote)!=0&&(f|=32);if(e){aLd(WId(e));f|=8;g=e.t;(g>1||g==-1)&&(f|=16);(e.Bb&ote)!=0&&(f|=64)}(c.Bb&Tje)!=0&&(f|=Dve);f|=zte}else{if(JD(b,457)){f|=512}else{d=b.Bj();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} +function hc(a,b){var c,d,e,f,g;a=a==null?Xhe:(uCb(a),a);for(e=0;e<b.length;e++){b[e]=ic(b[e])}c=new Vfb;g=0;d=0;while(d<b.length){f=a.indexOf('%s',g);if(f==-1){break}c.a+=''+qfb(a==null?Xhe:(uCb(a),a),g,f);Pfb(c,b[d++]);g=f+2}Ofb(c,a,g,a.length);if(d<b.length){c.a+=' [';Pfb(c,b[d++]);while(d<b.length){c.a+=She;Pfb(c,b[d++])}c.a+=']'}return c.a} +function m3b(a){var b,c,d,e,f;f=new Skb(a.a.c.length);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),10);c=BD(vNb(d,(Nyc(),mxc)),163);b=null;switch(c.g){case 1:case 2:b=(Gqc(),Fqc);break;case 3:case 4:b=(Gqc(),Dqc);}if(b){yNb(d,(wtc(),Bsc),(Gqc(),Fqc));b==Dqc?o3b(d,c,(KAc(),HAc)):b==Fqc&&o3b(d,c,(KAc(),IAc))}else{f.c[f.c.length]=d}}return f} +function MHc(a,b){var c,d,e,f,g,h,i;c=0;for(i=new olb(b);i.a<i.c.c.length;){h=BD(mlb(i),11);AHc(a.b,a.d[h.p]);g=0;for(e=new b1b(h.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);if(WHc(d)){f=aIc(a,h==d.c?d.d:d.c);if(f>a.d[h.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}else{++g}}c+=a.b.d*g;while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function Y6d(a,b){var c;if(a.f==W6d){c=$1d(q1d((O6d(),M6d),b));return a.e?c==4&&b!=(m8d(),k8d)&&b!=(m8d(),h8d)&&b!=(m8d(),i8d)&&b!=(m8d(),j8d):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(_1d(q1d((O6d(),M6d),b)))||a.d.Hc(e1d((O6d(),M6d),a.b,b)))){return true}if(a.f){if(x1d((O6d(),a.f),b2d(q1d(M6d,b)))){c=$1d(q1d(M6d,b));return a.e?c==4:c==2}}return false} +function iVc(a,b,c,d){var e,f,g,h,i,j,k,l;g=BD(hkd(c,(Y9c(),C9c)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dre);e+=b;e>dre&&(e-=dre);h=BD(hkd(d,C9c),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dre);f+=b;f>dre&&(f-=dre);return Iy(),My(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:e<f?-1:e>f?1:Ny(isNaN(e),isNaN(f))} +function YDb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);Rhb(h,b,new Rkb)}for(e=new olb(a.a.b);e.a<e.c.c.length;){b=BD(mlb(e),57);b.i=Qje;for(g=b.c.Kc();g.Ob();){f=BD(g.Pb(),57);BD(Wd(irb(h.f,f)),15).Fc(b)}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b();b.c=BD(Wd(irb(h.f,b)),15)}QDb(a)} +function yVb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),81);Rhb(h,b,new Rkb)}for(e=new olb(a.a.b);e.a<e.c.c.length;){b=BD(mlb(e),81);b.o=Qje;for(g=b.f.Kc();g.Ob();){f=BD(g.Pb(),81);BD(Wd(irb(h.f,f)),15).Fc(b)}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.f.$b();b.f=BD(Wd(irb(h.f,b)),15)}rVb(a)} +function dNb(a,b,c,d){var e,f;cNb(a,b,c,d);qNb(b,a.j-b.j+c);rNb(b,a.k-b.k+d);for(f=new olb(b.f);f.a<f.c.c.length;){e=BD(mlb(f),324);switch(e.a.g){case 0:nNb(a,b.g+e.b.a,0,b.g+e.c.a,b.i-1);break;case 1:nNb(a,b.g+b.o,b.i+e.b.a,a.o-1,b.i+e.c.a);break;case 2:nNb(a,b.g+e.b.a,b.i+b.p,b.g+e.c.a,a.p-1);break;default:nNb(a,0,b.i+e.b.a,b.g-1,b.i+e.c.a);}}} +function aNb(b,c,d,e,f){var g,h,i;try{if(c>=b.o){throw vbb(new rcb)}i=c>>5;h=c&31;g=Nbb(1,Tbb(Nbb(h,1)));f?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)));g=Nbb(g,1);e?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)))}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function BUc(a,b,c,d){var e,f,g;if(b){f=Edb(ED(vNb(b,(mTc(),fTc))))+d;g=c+Edb(ED(vNb(b,bTc)))/2;yNb(b,kTc,meb(Tbb(Cbb($wnd.Math.round(f)))));yNb(b,lTc,meb(Tbb(Cbb($wnd.Math.round(g)))));b.d.b==0||BUc(a,BD(pr((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86),c+Edb(ED(vNb(b,bTc)))+a.a,d+Edb(ED(vNb(b,cTc))));vNb(b,iTc)!=null&&BUc(a,BD(vNb(b,iTc),86),c,d)}} +function N9b(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Q_b(b.a);e=Edb(ED(vNb(i,(Nyc(),pyc))))*2;k=Edb(ED(vNb(i,wyc)));j=$wnd.Math.max(e,k);f=KC(UD,Vje,25,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=BD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new olb(b.e);m.a<m.c.c.length;){l=BD(mlb(m),10);d+=a.a[l.c.p]+j;f[c++]=d}return f} +function GHc(a,b,c,d){var e,f,g,h,i,j,k,l,m;m=new Hxb(new pIc(a));for(h=OC(GC(OQ,1),kne,10,0,[b,c]),i=0,j=h.length;i<j;++i){g=h[i];for(l=CHc(g,d).Kc();l.Ob();){k=BD(l.Pb(),11);for(f=new b1b(k.b);llb(f.a)||llb(f.b);){e=BD(llb(f.a)?mlb(f.a):mlb(f.b),17);if(!OZb(e)){Iwb(m.a,k,(Bcb(),zcb))==null;WHc(e)&&Axb(m,k==e.c?e.d:e.c)}}}}return Qb(m),new Tkb(m)} +function zhd(a,b){var c,d,e,f;f=BD(hkd(a,(Y9c(),A9c)),61).g-BD(hkd(b,A9c),61).g;if(f!=0){return f}c=BD(hkd(a,v9c),19);d=BD(hkd(b,v9c),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(BD(hkd(a,A9c),61).g){case 1:return Kdb(a.i,b.i);case 2:return Kdb(a.j,b.j);case 3:return Kdb(b.i,a.i);case 4:return Kdb(b.j,a.j);default:throw vbb(new Zdb(ine));}} +function _od(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(ete);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function opd(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(fte);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function h4c(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=BD(Phb(a.a,b),149);if(!e){for(d=(h=(new $ib(a.b)).a.vc().Kc(),new djb(h));d.a.Ob();){c=(f=BD(d.a.Pb(),42),BD(f.dd(),149));g=c.c;i=b.length;if(dfb(g.substr(g.length-i,i),b)&&(b.length==g.length||bfb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&Shb(a.a,b,e)}return e} +function QLb(a,b){var c,d,e,f;c=new VLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();if(e<f){return -1}if(e==f){return 0}return 1} +function r5b(a){var b,c,d;if(!wNb(a,(Nyc(),xxc))){return}d=BD(vNb(a,xxc),21);if(d.dc()){return}c=(b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));d.Hc((Hbd(),Cbd))?rqb(c,Cbd):rqb(c,Dbd);d.Hc(Abd)||rqb(c,Abd);d.Hc(zbd)?rqb(c,Gbd):d.Hc(ybd)?rqb(c,Fbd):d.Hc(Bbd)&&rqb(c,Ebd);d.Hc(Gbd)?rqb(c,zbd):d.Hc(Fbd)?rqb(c,ybd):d.Hc(Ebd)&&rqb(c,Bbd);yNb(a,xxc,c)} +function kHc(a){var b,c,d,e,f,g,h;e=BD(vNb(a,(wtc(),Psc)),10);d=a.j;c=(tCb(0,d.c.length),BD(d.c[0],11));for(g=new olb(e.j);g.a<g.c.c.length;){f=BD(mlb(g),11);if(PD(f)===PD(vNb(c,$sc))){if(f.j==(Ucd(),Acd)&&a.p>e.p){G0b(f,Rcd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==Rcd&&e.p>a.p){G0b(f,Acd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e} +function NOc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c<d){m=(n=new uOc(a.p),o=new uOc(a.p),ye(n.e,a.e),n.q=a.q,n.r=o,lOc(n),ye(o.j,a.j),o.r=n,lOc(o),new vgd(n,o));l=BD(m.a,112);k=BD(m.b,112);e=(tCb(f,b.c.length),BD(b.c[f],329));g=UOc(a,l,k,e);for(j=c+1;j<=d;j++){h=(tCb(j,b.c.length),BD(b.c[j],329));i=UOc(a,l,k,h);if(SOc(h,i,e,g)){e=h;g=i}}}return f} +function wQb(a,b,c,d,e){var f,g,h,i,j,k,l;if(!(JD(b,239)||JD(b,354)||JD(b,186))){throw vbb(new Wdb('Method only works for ElkNode-, ElkLabel and ElkPort-objects.'))}g=a.a/2;i=b.i+d-g;k=b.j+e-g;j=i+b.g+a.a;l=k+b.f+a.a;f=new s7c;Dsb(f,new f7c(i,k));Dsb(f,new f7c(i,l));Dsb(f,new f7c(j,l));Dsb(f,new f7c(j,k));h=new XOb(f);tNb(h,b);c&&Rhb(a.b,b,h);return h} +function uXb(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new f7c(b,c);for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);P6c(j.n,f);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);q7c(d.a,f);g=BD(vNb(d,(Nyc(),jxc)),74);!!g&&q7c(g,f);for(i=new olb(d.b);i.a<i.c.c.length;){h=BD(mlb(i),70);P6c(h.n,f)}}}}} +function g_b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new f7c(b,c);for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);P6c(j.n,f);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);q7c(d.a,f);g=BD(vNb(d,(Nyc(),jxc)),74);!!g&&q7c(g,f);for(i=new olb(d.b);i.a<i.c.c.length;){h=BD(mlb(i),70);P6c(h.n,f)}}}}} +function N1b(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==0){throw vbb(new z2c('Edges must have a source.'))}else if((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i==0){throw vbb(new z2c('Edges must have a target.'))}else{!a.b&&(a.b=new y5d(z2,a,4,7));if(!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1))){throw vbb(new z2c('Hyperedges are not supported.'))}}} +function OFc(a,b){var c,d,e,f,g,h,i,j,k,l;l=0;f=new jkb;Wjb(f,b);while(f.b!=f.c){i=BD(fkb(f),214);j=0;k=BD(vNb(b.j,(Nyc(),ywc)),339);g=Edb(ED(vNb(b.j,uwc)));h=Edb(ED(vNb(b.j,vwc)));if(k!=(tAc(),rAc)){j+=g*PFc(i.e,k);j+=h*QFc(i.e)}l+=pHc(i.d,i.e)+j;for(e=new olb(i.b);e.a<e.c.c.length;){d=BD(mlb(e),37);c=BD(Ikb(a.b,d.p),214);c.s||(l+=NFc(a,c))}}return l} +function dhb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;n=b.length;i=n;BCb(0,b.length);if(b.charCodeAt(0)==45){l=-1;m=1;--n}else{l=1;m=0}f=(phb(),ohb)[10];e=n/f|0;q=n%f;q!=0&&++e;h=KC(WD,oje,25,e,15,1);c=nhb[8];g=0;o=m+(q==0?f:q);for(p=m;p<i;p=o,o=p+f){d=Icb(b.substr(p,o-p),Rie,Ohe);j=(Dhb(),Hhb(h,h,g,c));j+=xhb(h,g,d);h[g++]=j}k=g;a.e=l;a.d=k;a.a=h;Jgb(a)} +function SGb(a,b,c,d,e,f,g){a.c=d.qf().a;a.d=d.qf().b;if(e){a.c+=e.qf().a;a.d+=e.qf().b}a.b=b.rf().a;a.a=b.rf().b;if(!e){c?(a.c-=g+b.rf().a):(a.c+=d.rf().a+g)}else{switch(e.Hf().g){case 0:case 2:a.c+=e.rf().a+g+f.a+g;break;case 4:a.c-=g+f.a+g+b.rf().a;break;case 1:a.c+=e.rf().a+g;a.d-=g+f.b+g+b.rf().b;break;case 3:a.c+=e.rf().a+g;a.d+=e.rf().b+g+f.b+g;}}} +function gac(a,b){var c,d;this.b=new Rkb;this.e=new Rkb;this.a=a;this.d=b;dac(this);eac(this);this.b.dc()?(this.c=a.c.p):(this.c=BD(this.b.Xb(0),10).c.p);this.e.c.length==0?(this.f=a.c.p):(this.f=BD(Ikb(this.e,this.e.c.length-1),10).c.p);for(d=BD(vNb(a,(wtc(),ktc)),15).Kc();d.Ob();){c=BD(d.Pb(),70);if(wNb(c,(Nyc(),Owc))){this.d=BD(vNb(c,Owc),227);break}}} +function Anc(a,b,c){var d,e,f,g,h,i,j,k;d=BD(Ohb(a.a,b),53);f=BD(Ohb(a.a,c),53);e=BD(Ohb(a.e,b),53);g=BD(Ohb(a.e,c),53);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=BD(k.Pb(),10);d.a.zc(j,d);Qqb(BD(Ohb(a.e,j),53),b);ye(BD(Ohb(a.e,j),53),e)}for(i=e.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);g.a.zc(h,g);Qqb(BD(Ohb(a.a,h),53),c);ye(BD(Ohb(a.a,h),53),f)}} +function WGc(a,b,c){var d,e,f,g,h,i,j,k;d=BD(Ohb(a.a,b),53);f=BD(Ohb(a.a,c),53);e=BD(Ohb(a.b,b),53);g=BD(Ohb(a.b,c),53);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=BD(k.Pb(),10);d.a.zc(j,d);Qqb(BD(Ohb(a.b,j),53),b);ye(BD(Ohb(a.b,j),53),e)}for(i=e.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);g.a.zc(h,g);Qqb(BD(Ohb(a.a,h),53),c);ye(BD(Ohb(a.a,h),53),f)}} +function doc(a,b){var c,d,e;Odd(b,'Breaking Point Insertion',1);d=new Xoc(a);switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:e=new hpc;case 0:e=new Ync;break;default:e=new kpc;}c=e.Vf(a,d);Ccb(DD(vNb(a,Iyc)))&&(c=coc(a,c));if(!e.Wf()&&wNb(a,Myc)){switch(BD(vNb(a,Myc),338).g){case 2:c=tpc(d,c);break;case 1:c=rpc(d,c);}}if(c.dc()){Qdd(b);return}aoc(a,c);Qdd(b)} +function $qd(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=null;m=b;l=Rqd(a,dtd(c),m);Lkd(l,_pd(m,Vte));g=Ypd(m,Lte);d=new mrd(a,l);oqd(d.a,d.b,g);h=Ypd(m,Mte);e=new nrd(a,l);pqd(e.a,e.b,h);if((!l.b&&(l.b=new y5d(z2,l,4,7)),l.b).i==0||(!l.c&&(l.c=new y5d(z2,l,5,8)),l.c).i==0){f=_pd(m,Vte);i=Zte+f;j=i+$te;throw vbb(new cqd(j))}grd(m,l);_qd(a,m,l);k=crd(a,m,l);return k} +function yGb(a,b){var c,d,e,f,g,h,i;e=KC(WD,oje,25,a.e.a.c.length,15,1);for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);e[f.d]+=f.b.a.c.length}h=Ru(b);while(h.b!=0){f=BD(h.b==0?null:(sCb(h.b!=0),Nsb(h,h.a.a)),121);for(d=vr(new olb(f.g.a));d.Ob();){c=BD(d.Pb(),213);i=c.e;i.e=$wnd.Math.max(i.e,f.e+c.a);--e[i.d];e[i.d]==0&&(Gsb(h,i,h.c.b,h.c),true)}}} +function CGb(a){var b,c,d,e,f,g,h,i,j,k,l;c=Rie;e=Ohe;for(h=new olb(a.e.a);h.a<h.c.c.length;){f=BD(mlb(h),121);e=$wnd.Math.min(e,f.e);c=$wnd.Math.max(c,f.e)}b=KC(WD,oje,25,c-e+1,15,1);for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);f.e-=e;++b[f.e]}d=0;if(a.k!=null){for(j=a.k,k=0,l=j.length;k<l;++k){i=j[k];b[d++]+=i;if(b.length==d){break}}}return b} +function ixd(a){switch(a.d){case 9:case 8:{return true}case 3:case 5:case 4:case 6:{return false}case 7:{return BD(hxd(a),19).a==a.o}case 1:case 2:{if(a.o==-2){return false}else{switch(a.p){case 0:case 1:case 2:case 6:case 5:case 7:{return Bbb(a.k,a.f)}case 3:case 4:{return a.j==a.e}default:{return a.n==null?a.g==null:pb(a.n,a.g)}}}}default:{return false}}} +function $ad(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Qse),'ELK Fixed'),'Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points.'),new bbd)));p4c(a,Qse,ame,Xad);p4c(a,Qse,uqe,Ksd(Yad));p4c(a,Qse,use,Ksd(Sad));p4c(a,Qse,Fme,Ksd(Tad));p4c(a,Qse,Tme,Ksd(Vad));p4c(a,Qse,bqe,Ksd(Uad))} +function ro(a,b,c){var d,e,f,g,h;d=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));h=Tbb(Ibb(Eie,keb(Tbb(Ibb(c==null?0:tb(c),Fie)),15)));f=uo(a,b,d);if(!!f&&h==f.f&&Hb(c,f.i)){return c}g=vo(a,c,h);if(g){throw vbb(new Wdb('value already present: '+c))}e=new $o(b,d,c,h);if(f){mo(a,f);po(a,e,f);f.e=null;f.c=null;return f.i}else{po(a,e,null);to(a);return null}} +function E4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=BD(Ohb(c.c,b),459);n=f.f;o=f.a;f.b?(i=new f7c(g,n)):(i=new f7c(k,n));f.c?(l=new f7c(k,o)):(l=new f7c(g,o));e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new f7c(e,n);m=new f7c(e,o);n7c(b.a,OC(GC(m1,1),nie,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} +function Nid(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=XKd(b.Tg(),-1-c);if(JD(d,99)){return BD(d,18)}else{g=BD(b.ah(d),153);for(h=0,i=g.gc();h<i;++h){if(PD(g.jl(h))===PD(a)){e=g.il(h);if(JD(e,99)){f=BD(e,18);if((f.Bb&ote)!=0){return f}}}}throw vbb(new Zdb('The containment feature could not be located'))}}else{return zUd(BD(XKd(a.Tg(),c),18))}}} +function Xee(a){var b,c,d,e,f;d=a.length;b=new Ifb;f=0;while(f<d){c=bfb(a,f++);if(c==9||c==10||c==12||c==13||c==32)continue;if(c==35){while(f<d){c=bfb(a,f++);if(c==13||c==10)break}continue}if(c==92&&f<d){if((e=(BCb(f,a.length),a.charCodeAt(f)))==35||e==9||e==10||e==12||e==13||e==32){Afb(b,e&aje);++f}else{b.a+='\\';Afb(b,e&aje);++f}}else Afb(b,c&aje)}return b.a} +function GVc(a,b){var c,d,e;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),33);Rc(a.a,c,c);Rc(a.b,c,c);e=gVc(c);if(e.c.length!=0){!!a.d&&a.d.lg(e);Rc(a.a,c,(tCb(0,e.c.length),BD(e.c[0],33)));Rc(a.b,c,BD(Ikb(e,e.c.length-1),33));while(dVc(e).c.length!=0){e=dVc(e);!!a.d&&a.d.lg(e);Rc(a.a,c,(tCb(0,e.c.length),BD(e.c[0],33)));Rc(a.b,c,BD(Ikb(e,e.c.length-1),33))}}}} +function fnc(a){var b,c,d,e,f,g,h,i,j,k;c=0;for(h=new olb(a.d);h.a<h.c.c.length;){g=BD(mlb(h),101);!!g.i&&(g.i.c=c++)}b=IC(sbb,[nie,dle],[177,25],16,[c,c],2);k=a.d;for(e=0;e<k.c.length;e++){i=(tCb(e,k.c.length),BD(k.c[e],101));if(i.i){for(f=e+1;f<k.c.length;f++){j=(tCb(f,k.c.length),BD(k.c[f],101));if(j.i){d=knc(i,j);b[i.i.c][j.i.c]=d;b[j.i.c][i.i.c]=d}}}}return b} +function ht(a,b,c,d){var e,f,g;g=new qu(b,c);if(!a.a){a.a=a.e=g;Rhb(a.b,b,new pu(g));++a.c}else if(!d){a.e.b=g;g.d=a.e;a.e=g;e=BD(Ohb(a.b,b),283);if(!e){Rhb(a.b,b,e=new pu(g));++a.c}else{++e.a;f=e.c;f.c=g;g.e=f;e.c=g}}else{e=BD(Ohb(a.b,b),283);++e.a;g.d=d.d;g.e=d.e;g.b=d;g.c=d;!d.e?(BD(Ohb(a.b,b),283).b=g):(d.e.c=g);!d.d?(a.a=g):(d.d.b=g);d.d=g;d.e=g}++a.d;return g} +function mfb(a,b){var c,d,e,f,g,h,i,j;c=new RegExp(b,'g');i=KC(ZI,nie,2,0,6,1);d=0;j=a;f=null;while(true){h=c.exec(j);if(h==null||j==''){i[d]=j;break}else{g=h.index;i[d]=j.substr(0,g);j=qfb(j,g+h[0].length,j.length);c.lastIndex=0;if(f==j){i[d]=j.substr(0,1);j=j.substr(1)}f=j;++d}}if(a.length>0){e=i.length;while(e>0&&i[e-1]==''){--e}e<i.length&&(i.length=e)}return i} +function f1d(a,b){var c,d,e,f,g,h,i,j,k,l;l=_Kd(b);j=null;e=false;for(h=0,k=VKd(l.a).i;h<k;++h){g=BD(nOd(l,h,(f=BD(qud(VKd(l.a),h),87),i=f.c,JD(i,88)?BD(i,26):(jGd(),_Fd))),26);c=f1d(a,g);if(!c.dc()){if(!j){j=c}else{if(!e){e=true;j=new pFd(j)}j.Gc(c)}}}d=k1d(a,b);if(d.dc()){return !j?(mmb(),mmb(),jmb):j}else{if(!j){return d}else{e||(j=new pFd(j));j.Gc(d);return j}}} +function g1d(a,b){var c,d,e,f,g,h,i,j,k,l;l=_Kd(b);j=null;d=false;for(h=0,k=VKd(l.a).i;h<k;++h){f=BD(nOd(l,h,(e=BD(qud(VKd(l.a),h),87),i=e.c,JD(i,88)?BD(i,26):(jGd(),_Fd))),26);c=g1d(a,f);if(!c.dc()){if(!j){j=c}else{if(!d){d=true;j=new pFd(j)}j.Gc(c)}}}g=n1d(a,b);if(g.dc()){return !j?(mmb(),mmb(),jmb):j}else{if(!j){return g}else{d||(j=new pFd(j));j.Gc(g);return j}}} +function B2d(a,b,c){var d,e,f,g,h,i;if(JD(b,72)){return Txd(a,b,c)}else{h=null;f=null;d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];if(pb(b,e.dd())){f=e.ak();if(JD(f,99)&&(BD(f,18).Bb&ote)!=0){h=e;break}}}if(h){if(oid(a.e)){i=f.$j()?H2d(a,4,f,b,null,M2d(a,f,b,JD(f,99)&&(BD(f,18).Bb&Tje)!=0),true):H2d(a,f.Kj()?2:1,f,b,f.zj(),-1,true);c?c.Ei(i):(c=i)}c=B2d(a,h,c)}return c}} +function pKb(a){var b,c,d,e;d=a.o;$Jb();if(a.A.dc()||pb(a.A,ZJb)){e=d.a}else{e=gIb(a.f);if(a.A.Hc((tdd(),qdd))&&!a.B.Hc((Idd(),Edd))){e=$wnd.Math.max(e,gIb(BD(Mpb(a.p,(Ucd(),Acd)),244)));e=$wnd.Math.max(e,gIb(BD(Mpb(a.p,Rcd),244)))}b=aKb(a);!!b&&(e=$wnd.Math.max(e,b.a))}Ccb(DD(a.e.yf().We((Y9c(),$8c))))?(d.a=$wnd.Math.max(d.a,e)):(d.a=e);c=a.f.i;c.c=0;c.b=e;hIb(a.f)} +function $0d(a,b){var c,d,e,f,g,h,i,j,k;c=b.Hh(a.a);if(c){i=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'memberTypes'));if(i!=null){j=new Rkb;for(f=mfb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];d=e.lastIndexOf('#');k=d==-1?w1d(a,b.Aj(),e):d==0?v1d(a,null,e.substr(1)):v1d(a,e.substr(0,d),e.substr(d+1));JD(k,148)&&Ekb(j,BD(k,148))}return j}}return mmb(),mmb(),jmb} +function tRb(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,kme,1);a.bf(b);f=0;while(a.df(f)){for(k=new olb(b.e);k.a<k.c.c.length;){i=BD(mlb(k),144);for(h=ul(pl(OC(GC(KI,1),Uhe,20,0,[b.e,b.d,b.b])));Qr(h);){g=BD(Rr(h),357);if(g!=i){e=a.af(g,i);!!e&&P6c(i.a,e)}}}for(j=new olb(b.e);j.a<j.c.c.length;){i=BD(mlb(j),144);d=i.a;Q6c(d,-a.d,-a.d,a.d,a.d);P6c(i.d,d);X6c(d)}a.cf();++f}Qdd(c)} +function $2d(a,b,c){var d,e,f,g;g=S6d(a.e.Tg(),b);d=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(pb(e,c)){Xxd(a,f);return true}}}}else if(c!=null){for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(pb(c,e.dd())){Xxd(a,f);return true}}}}else{for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(e.dd()==null){Xxd(a,f);return true}}}}return false} +function sDc(a,b){var c,d,e,f,g;a.c==null||a.c.length<b.c.length?(a.c=KC(sbb,dle,25,b.c.length,16,1)):Blb(a.c);a.a=new Rkb;d=0;for(g=new olb(b);g.a<g.c.c.length;){e=BD(mlb(g),10);e.p=d++}c=new Psb;for(f=new olb(b);f.a<f.c.c.length;){e=BD(mlb(f),10);if(!a.c[e.p]){tDc(a,e);c.b==0||(sCb(c.b!=0),BD(c.a.a.c,15)).gc()<a.a.c.length?Esb(c,a.a):Fsb(c,a.a);a.a=new Rkb}}return c} +function jYc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;g=BD(qud(b,0),33);dld(g,0);eld(g,0);m=new Rkb;m.c[m.c.length]=g;h=g;f=new d$c(a.a,g.g,g.f,(k$c(),j$c));for(n=1;n<b.i;n++){o=BD(qud(b,n),33);i=kYc(a,g$c,o,h,f,m,c);j=kYc(a,f$c,o,h,f,m,c);k=kYc(a,i$c,o,h,f,m,c);l=kYc(a,h$c,o,h,f,m,c);e=mYc(a,i,j,k,l,o,h,d);dld(o,e.d);eld(o,e.e);c$c(e,j$c);f=e;h=o;m.c[m.c.length]=o}return f} +function K0c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,ase),'ELK SPOrE Overlap Removal'),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new N0c)));p4c(a,ase,Qre,Ksd(I0c));p4c(a,ase,ame,G0c);p4c(a,ase,wme,8);p4c(a,ase,Vre,Ksd(H0c));p4c(a,ase,Yre,Ksd(E0c));p4c(a,ase,Zre,Ksd(F0c));p4c(a,ase,Zpe,(Bcb(),false))} +function sXb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;g=O6c(b.c,c,d);for(l=new olb(b.a);l.a<l.c.c.length;){k=BD(mlb(l),10);P6c(k.n,g);for(n=new olb(k.j);n.a<n.c.c.length;){m=BD(mlb(n),11);for(f=new olb(m.g);f.a<f.c.c.length;){e=BD(mlb(f),17);q7c(e.a,g);h=BD(vNb(e,(Nyc(),jxc)),74);!!h&&q7c(h,g);for(j=new olb(e.b);j.a<j.c.c.length;){i=BD(mlb(j),70);P6c(i.n,g)}}}Ekb(a.a,k);k.a=a}} +function g9b(a,b){var c,d,e,f,g;Odd(b,'Node and Port Label Placement and Node Sizing',1);MGb((a$b(),new l$b(a,true,true,new j9b)));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){f=BD(vNb(a,(Nyc(),Yxc)),21);e=f.Hc((rcd(),ocd));g=Ccb(DD(vNb(a,Zxc)));for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);MAb(JAb(new YAb(null,new Kub(c.a,16)),new l9b),new n9b(f,e,g))}}Qdd(b)} +function Y0d(a,b){var c,d,e,f,g,h;c=b.Hh(a.a);if(c){h=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),eue));if(h!=null){e=kfb(h,wfb(35));d=b.Hj();if(e==-1){g=u1d(a,bKd(d));f=h}else if(e==0){g=null;f=h.substr(1)}else{g=h.substr(0,e);f=h.substr(e+1)}switch($1d(q1d(a,b))){case 2:case 3:{return j1d(a,d,g,f)}case 0:case 4:case 5:case 6:{return m1d(a,d,g,f)}}}}return null} +function q2d(a,b,c){var d,e,f,g,h;g=(Q6d(),BD(b,66).Oj());if(T6d(a.e,b)){if(b.hi()&&F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){return false}}else{h=S6d(a.e.Tg(),b);d=BD(a.g,119);for(f=0;f<a.i;++f){e=d[f];if(h.rl(e.ak())){if(g?pb(e,c):c==null?e.dd()==null:pb(c,e.dd())){return false}else{BD(Gtd(a,f,g?BD(c,72):R6d(b,c)),72);return true}}}}return wtd(a,g?BD(c,72):R6d(b,c))} +function uVb(a){var b,c,d,e,f,g,h,i;if(a.d){throw vbb(new Zdb((fdb(LP),Jke+LP.k+Kke)))}a.c==(ead(),cad)&&tVb(a,aad);for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),189);b.e=0}for(g=new olb(a.a.b);g.a<g.c.c.length;){f=BD(mlb(g),81);f.o=Qje;for(e=f.f.Kc();e.Ob();){d=BD(e.Pb(),81);++d.d.e}}JVb(a);for(i=new olb(a.a.b);i.a<i.c.c.length;){h=BD(mlb(i),81);h.k=true}return a} +function Ijc(a,b){var c,d,e,f,g,h,i,j;h=new pjc(a);c=new Psb;Gsb(c,b,c.c.b,c.c);while(c.b!=0){d=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),113);d.d.p=1;for(g=new olb(d.e);g.a<g.c.c.length;){e=BD(mlb(g),409);kjc(h,e);j=e.d;j.d.p==0&&(Gsb(c,j,c.c.b,c.c),true)}for(f=new olb(d.b);f.a<f.c.c.length;){e=BD(mlb(f),409);kjc(h,e);i=e.c;i.d.p==0&&(Gsb(c,i,c.c.b,c.c),true)}}return h} +function hfd(a){var b,c,d,e,f;d=Edb(ED(hkd(a,(Y9c(),G9c))));if(d==1){return}_kd(a,d*a.g,d*a.f);c=Mq(Rq((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c),new Hfd));for(f=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.n&&(a.n=new cUd(D2,a,1,7)),a.n),(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c),c])));Qr(f);){e=BD(Rr(f),470);e.Gg(d*e.Dg(),d*e.Eg());e.Fg(d*e.Cg(),d*e.Bg());b=BD(e.We(r9c),8);if(b){b.a*=d;b.b*=d}}} +function Mac(a,b,c,d,e){var f,g,h,i,j,k,l,m;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);m=l_b(f.a);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];switch(BD(vNb(i,(Nyc(),mxc)),163).g){case 1:Qac(i);$_b(i,b);Nac(i,true,d);break;case 3:Rac(i);$_b(i,c);Nac(i,false,e);}}}h=new Bib(a.b,0);while(h.b<h.d.gc()){(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29)).a.c.length==0&&uib(h)}} +function d1d(a,b){var c,d,e,f,g,h,i;c=b.Hh(a.a);if(c){i=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Dwe));if(i!=null){d=new Rkb;for(f=mfb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];dfb(e,'##other')?Ekb(d,'!##'+u1d(a,bKd(b.Hj()))):dfb(e,'##local')?(d.c[d.c.length]=null,true):dfb(e,Bwe)?Ekb(d,u1d(a,bKd(b.Hj()))):(d.c[d.c.length]=e,true)}return d}}return mmb(),mmb(),jmb} +function kMb(a,b){var c,d,e,f;c=new pMb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();e=e==1?1:0;f=f==1?1:0;if(e<f){return -1}if(e==f){return 0}return 1} +function hZb(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.i;e=Ccb(DD(vNb(h,(Nyc(),fxc))));k=0;d=0;for(j=new olb(a.g);j.a<j.c.c.length;){i=BD(mlb(j),17);g=OZb(i);f=g&&e&&Ccb(DD(vNb(i,gxc)));m=i.d.i;g&&f?++d:g&&!f?++k:Q_b(m).e==h?++d:++k}for(c=new olb(a.e);c.a<c.c.c.length;){b=BD(mlb(c),17);g=OZb(b);f=g&&e&&Ccb(DD(vNb(b,gxc)));l=b.c.i;g&&f?++k:g&&!f?++d:Q_b(l).e==h?++k:++d}return k-d} +function ULc(a,b,c,d){this.e=a;this.k=BD(vNb(a,(wtc(),otc)),304);this.g=KC(OQ,kne,10,b,0,1);this.b=KC(BI,nie,333,b,7,1);this.a=KC(OQ,kne,10,b,0,1);this.d=KC(BI,nie,333,b,7,1);this.j=KC(OQ,kne,10,b,0,1);this.i=KC(BI,nie,333,b,7,1);this.p=KC(BI,nie,333,b,7,1);this.n=KC(wI,nie,476,b,8,1);Alb(this.n,(Bcb(),false));this.f=KC(wI,nie,476,b,8,1);Alb(this.f,true);this.o=c;this.c=d} +function X9b(a,b){var c,d,e,f,g,h;if(b.dc()){return}if(BD(b.Xb(0),286).d==(Apc(),xpc)){O9b(a,b)}else{for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);switch(c.d.g){case 5:K9b(a,c,Q9b(a,c));break;case 0:K9b(a,c,(g=c.f-c.c+1,h=(g-1)/2|0,c.c+h));break;case 4:K9b(a,c,S9b(a,c));break;case 2:Y9b(c);K9b(a,c,(f=U9b(c),f?c.c:c.f));break;case 1:Y9b(c);K9b(a,c,(e=U9b(c),e?c.f:c.c));}P9b(c.a)}}} +function C4b(a,b){var c,d,e,f,g,h,i;if(b.e){return}b.e=true;for(d=b.d.a.ec().Kc();d.Ob();){c=BD(d.Pb(),17);if(b.o&&b.d.a.gc()<=1){g=b.a.c;h=b.a.c+b.a.b;i=new f7c(g+(h-g)/2,b.b);Dsb(BD(b.d.a.ec().Kc().Pb(),17).a,i);continue}e=BD(Ohb(b.c,c),459);if(e.b||e.c){E4b(a,c,b);continue}f=a.d==(tBc(),sBc)&&(e.d||e.e)&&K4b(a,b)&&b.d.a.gc()<=1;f?F4b(c,b):D4b(a,c,b)}b.k&&reb(b.d,new X4b)} +function zXc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=f;h=(d+e)/2+m;q=c*$wnd.Math.cos(h);r=c*$wnd.Math.sin(h);s=q-b.g/2;t=r-b.f/2;dld(b,s);eld(b,t);l=a.a.jg(b);p=2*$wnd.Math.acos(c/c+a.c);if(p<e-d){n=p/l;g=(d+e-p)/2}else{n=(e-d)/l;g=d}o=gVc(b);if(a.e){a.e.kg(a.d);a.e.lg(o)}for(j=new olb(o);j.a<j.c.c.length;){i=BD(mlb(j),33);k=a.a.jg(i);zXc(a,i,c+a.c,g,g+n*k,f);g+=n*k}} +function jA(a,b,c){var d;d=c.q.getMonth();switch(b){case 5:Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[d]);break;case 4:Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[d]);break;case 3:Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[d]);break;default:EA(a,d+1,b);}} +function uGb(a,b){var c,d,e,f,g;Odd(b,'Network simplex',1);if(a.e.a.c.length<1){Qdd(b);return}for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);e.e=0}g=a.e.a.c.length>=40;g&&FGb(a);wGb(a);vGb(a);c=zGb(a);d=0;while(!!c&&d<a.f){tGb(a,c,sGb(a,c));c=zGb(a);++d}g&&EGb(a);a.a?qGb(a,CGb(a)):CGb(a);a.b=null;a.d=null;a.p=null;a.c=null;a.g=null;a.i=null;a.n=null;a.o=null;Qdd(b)} +function JQb(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=new f7c(c,d);c7c(i,BD(vNb(b,(HSb(),ESb)),8));for(m=new olb(b.e);m.a<m.c.c.length;){l=BD(mlb(m),144);P6c(l.d,i);Ekb(a.e,l)}for(h=new olb(b.c);h.a<h.c.c.length;){g=BD(mlb(h),282);for(f=new olb(g.a);f.a<f.c.c.length;){e=BD(mlb(f),559);P6c(e.d,i)}Ekb(a.c,g)}for(k=new olb(b.d);k.a<k.c.c.length;){j=BD(mlb(k),447);P6c(j.d,i);Ekb(a.d,j)}} +function _Bc(a,b){var c,d,e,f,g,h,i,j;for(i=new olb(b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);for(e=new b1b(h.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);c=d.c==h?d.d:d.c;f=c.i;if(b==f){continue}j=BD(vNb(d,(Nyc(),cyc)),19).a;j<0&&(j=0);g=f.p;if(a.b[g]==0){if(d.d==c){a.a[g]-=j+1;a.a[g]<=0&&a.c[g]>0&&Dsb(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Dsb(a.e,f)}}}}} +function _Kb(a){var b,c,d,e,f,g,h,i,j;h=new Hxb(BD(Qb(new nLb),62));j=Qje;for(c=new olb(a.d);c.a<c.c.c.length;){b=BD(mlb(c),222);j=b.c.c;while(h.a.c!=0){i=BD(zjb(Bwb(h.a)),222);if(i.c.c+i.c.b<j){Jwb(h.a,i)!=null}else{break}}for(g=(e=new Ywb((new cxb((new Gjb(h.a)).a)).b),new Njb(e));sib(g.a.a);){f=(d=Wwb(g.a),BD(d.cd(),222));Dsb(f.b,b);Dsb(b.b,f)}Iwb(h.a,b,(Bcb(),zcb))==null}} +function QEc(a,b,c){var d,e,f,g,h,i,j,k,l;f=new Skb(b.c.length);for(j=new olb(b);j.a<j.c.c.length;){g=BD(mlb(j),10);Ekb(f,a.b[g.c.p][g.p])}LEc(a,f,c);l=null;while(l=MEc(f)){NEc(a,BD(l.a,233),BD(l.b,233),f)}b.c=KC(SI,Uhe,1,0,5,1);for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),233);for(h=d.d,i=0,k=h.length;i<k;++i){g=h[i];b.c[b.c.length]=g;a.a[g.c.p][g.p].a=REc(d.g,d.d[0]).a}}} +function JRc(a,b){var c,d,e,f;if(0<(JD(a,14)?BD(a,14).gc():sr(a.Kc()))){e=b;if(1<e){--e;f=new KRc;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),86);f=pl(OC(GC(KI,1),Uhe,20,0,[f,new ZRc(c)]))}return JRc(f,e)}if(e<0){f=new NRc;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),86);f=pl(OC(GC(KI,1),Uhe,20,0,[f,new ZRc(c)]))}if(0<(JD(f,14)?BD(f,14).gc():sr(f.Kc()))){return JRc(f,e)}}}return BD(pr(a.Kc()),86)} +function Idd(){Idd=ccb;Bdd=new Jdd('DEFAULT_MINIMUM_SIZE',0);Ddd=new Jdd('MINIMUM_SIZE_ACCOUNTS_FOR_PADDING',1);Add=new Jdd('COMPUTE_PADDING',2);Edd=new Jdd('OUTSIDE_NODE_LABELS_OVERHANG',3);Fdd=new Jdd('PORTS_OVERHANG',4);Hdd=new Jdd('UNIFORM_PORT_SPACING',5);Gdd=new Jdd('SPACE_EFFICIENT_PORT_LABELS',6);Cdd=new Jdd('FORCE_TABULAR_NODE_LABELS',7);zdd=new Jdd('ASYMMETRICAL',8)} +function s6d(a,b){var c,d,e,f,g,h,i,j;if(!b){return null}else{c=(f=b.Tg(),!f?null:bKd(f).Nh().Jh(f));if(c){Xrb(a,b,c);e=b.Tg();for(i=0,j=(e.i==null&&TKd(e),e.i).length;i<j;++i){h=(d=(e.i==null&&TKd(e),e.i),i>=0&&i<d.length?d[i]:null);if(h.Ij()&&!h.Jj()){if(JD(h,322)){u6d(a,BD(h,34),b,c)}else{g=BD(h,18);(g.Bb&ote)!=0&&w6d(a,g,b,c)}}}b.kh()&&BD(c,49).vh(BD(b,49).qh())}return c}} +function tGb(a,b,c){var d,e,f;if(!b.f){throw vbb(new Wdb('Given leave edge is no tree edge.'))}if(c.f){throw vbb(new Wdb('Given enter edge is a tree edge already.'))}b.f=false;Sqb(a.p,b);c.f=true;Qqb(a.p,c);d=c.e.e-c.d.e-c.a;xGb(a,c.e,b)||(d=-d);for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);xGb(a,e,b)||(e.e+=d)}a.j=1;Blb(a.c);DGb(a,BD(mlb(new olb(a.e.a)),121));rGb(a)} +function x6b(a,b){var c,d,e,f,g,h;h=BD(vNb(b,(Nyc(),Vxc)),98);if(!(h==(dcd(),_bd)||h==$bd)){return}e=(new f7c(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a)).b;for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k!=(j0b(),e0b)){continue}c=BD(vNb(f,(wtc(),Hsc)),61);if(c!=(Ucd(),zcd)&&c!=Tcd){continue}d=Edb(ED(vNb(f,htc)));h==_bd&&(d*=e);f.n.b=d-BD(vNb(f,Txc),8).b;M_b(f,false,true)}} +function YDc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;bEc(a,b,c);f=b[c];n=d?(Ucd(),Tcd):(Ucd(),zcd);if(ZDc(b.length,c,d)){e=b[d?c-1:c+1];UDc(a,e,d?(KAc(),IAc):(KAc(),HAc));for(i=f,k=0,m=i.length;k<m;++k){g=i[k];XDc(a,g,n)}UDc(a,f,d?(KAc(),HAc):(KAc(),IAc));for(h=e,j=0,l=h.length;j<l;++j){g=h[j];!!g.e||XDc(a,g,Wcd(n))}}else{for(h=f,j=0,l=h.length;j<l;++j){g=h[j];XDc(a,g,n)}}return false} +function nFc(a,b,c,d){var e,f,g,h,i,j,k;i=V_b(b,c);(c==(Ucd(),Rcd)||c==Tcd)&&(i=JD(i,152)?km(BD(i,152)):JD(i,131)?BD(i,131).a:JD(i,54)?new ov(i):new dv(i));g=false;do{e=false;for(f=0;f<i.gc()-1;f++){j=BD(i.Xb(f),11);h=BD(i.Xb(f+1),11);if(oFc(a,j,h,d)){g=true;cIc(a.a,BD(i.Xb(f),11),BD(i.Xb(f+1),11));k=BD(i.Xb(f+1),11);i._c(f+1,BD(i.Xb(f),11));i._c(f,k);e=true}}}while(e);return g} +function W2d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(oid(a.e)){if(b!=c){e=BD(a.g,119);n=e[c];g=n.ak();if(T6d(a.e,g)){o=S6d(a.e.Tg(),g);i=-1;h=-1;d=0;for(j=0,l=b>c?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.rl(f.ak());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=BD(Wxd(a,b,c),72);h!=i&&GLd(a,new ESd(a.e,7,g,meb(h),n.dd(),i));return m}}}else{return BD(sud(a,b,c),72)}return BD(Wxd(a,b,c),72)} +function Qcc(a,b){var c,d,e,f,g,h,i;Odd(b,'Port order processing',1);i=BD(vNb(a,(Nyc(),_xc)),421);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);g=BD(vNb(e,Vxc),98);h=e.j;if(g==(dcd(),Zbd)||g==_bd||g==$bd){mmb();Okb(h,Icc)}else if(g!=bcd&&g!=ccd){mmb();Okb(h,Lcc);Scc(h);i==(BAc(),AAc)&&Okb(h,Kcc)}e.i=true;N_b(e)}}Qdd(b)} +function vDc(a){var b,c,d,e,f,g,h,i;i=new Lqb;b=new KFb;for(g=a.Kc();g.Ob();){e=BD(g.Pb(),10);h=nGb(oGb(new pGb,e),b);jrb(i.f,e,h)}for(f=a.Kc();f.Ob();){e=BD(f.Pb(),10);for(d=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)){continue}AFb(DFb(CFb(BFb(EFb(new FFb,$wnd.Math.max(1,BD(vNb(c,(Nyc(),dyc)),19).a)),1),BD(Ohb(i,c.c.i),121)),BD(Ohb(i,c.d.i),121)))}}return b} +function tNc(){tNc=ccb;oNc=e3c(new j3c,(qUb(),oUb),(S8b(),k8b));qNc=e3c(new j3c,nUb,o8b);rNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);nNc=c3c(e3c(e3c(new j3c,nUb,e8b),oUb,f8b),pUb,g8b);sNc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);pNc=c3c(new j3c,pUb,l8b);lNc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);mNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function XC(a,b,c,d,e,f){var g,h,i,j,k,l,m;j=$C(b)-$C(a);g=kD(b,j);i=TC(0,0,0);while(j>=0){h=bD(a,g);if(h){j<22?(i.l|=1<<j,undefined):j<44?(i.m|=1<<j-22,undefined):(i.h|=1<<j-44,undefined);if(a.l==0&&a.m==0&&a.h==0){break}}k=g.m;l=g.h;m=g.l;g.h=l>>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&ZC(i);if(f){if(d){QC=hD(a);e&&(QC=nD(QC,(wD(),uD)))}else{QC=TC(a.l,a.m,a.h)}}return i} +function TDc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),11);l=0;f=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(g),new R0b(g)])));Qr(e);){d=BD(Rr(e),11);if(d.i.c==b.c){l+=aEc(a,d.i)+1;++f}}c=l/f;k=g.j;k==(Ucd(),zcd)?c<j?(a.f[g.p]=a.c-c):(a.f[g.p]=a.b+(i-c)):k==Tcd&&(c<j?(a.f[g.p]=a.b+c):(a.f[g.p]=a.c-(i-c)))}} +function Icb(a,b,c){var d,e,f,g,h;if(a==null){throw vbb(new Oeb(Xhe))}f=a.length;g=f>0&&(BCb(0,a.length),a.charCodeAt(0)==45||(BCb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;d<f;d++){if(Zcb((BCb(d,a.length),a.charCodeAt(d)))==-1){throw vbb(new Oeb(Oje+a+'"'))}}h=parseInt(a,10);e=h<b;if(isNaN(h)){throw vbb(new Oeb(Oje+a+'"'))}else if(e||h>c){throw vbb(new Oeb(Oje+a+'"'))}return h} +function dnc(a){var b,c,d,e,f,g,h;g=new Psb;for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),112);pOc(e,e.f.c.length);qOc(e,e.k.c.length);if(e.i==0){e.o=0;Gsb(g,e,g.c.b,g.c)}}while(g.b!=0){e=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),112);d=e.o+1;for(c=new olb(e.f);c.a<c.c.c.length;){b=BD(mlb(c),129);h=b.a;rOc(h,$wnd.Math.max(h.o,d));qOc(h,h.i-1);h.i==0&&(Gsb(g,h,g.c.b,g.c),true)}}} +function v2c(a){var b,c,d,e,f,g,h,i;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),79);d=atd(BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));h=d.i;i=d.j;e=BD(qud((!f.a&&(f.a=new cUd(A2,f,6,6)),f.a),0),202);nmd(e,e.j+h,e.k+i);gmd(e,e.b+h,e.c+i);for(c=new Fyd((!e.a&&(e.a=new xMd(y2,e,5)),e.a));c.e!=c.i.gc();){b=BD(Dyd(c),469);ukd(b,b.a+h,b.b+i)}p7c(BD(hkd(f,(Y9c(),Q8c)),74),h,i)}} +function fee(a){var b;switch(a){case 100:return kee(nxe,true);case 68:return kee(nxe,false);case 119:return kee(oxe,true);case 87:return kee(oxe,false);case 115:return kee(pxe,true);case 83:return kee(pxe,false);case 99:return kee(qxe,true);case 67:return kee(qxe,false);case 105:return kee(rxe,true);case 73:return kee(rxe,false);default:throw vbb(new hz((b=a,mxe+b.toString(16))));}} +function $Xb(a){var b,c,d,e,f;e=BD(Ikb(a.a,0),10);b=new b0b(a);Ekb(a.a,b);b.o.a=$wnd.Math.max(1,e.o.a);b.o.b=$wnd.Math.max(1,e.o.b);b.n.a=e.n.a;b.n.b=e.n.b;switch(BD(vNb(e,(wtc(),Hsc)),61).g){case 4:b.n.a+=2;break;case 1:b.n.b+=2;break;case 2:b.n.a-=2;break;case 3:b.n.b-=2;}d=new H0b;F0b(d,b);c=new UZb;f=BD(Ikb(e.j,0),11);QZb(c,f);RZb(c,d);P6c(X6c(d.n),f.n);P6c(X6c(d.a),f.a);return b} +function Fac(a,b,c,d,e){if(c&&(!d||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.b],10).k==(j0b(),f0b)){zac(BD(a.a[a.b],10),(rbd(),nbd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.c-1&a.a.length-1],10).k==(j0b(),f0b)){zac(BD(a.a[a.c-1&a.a.length-1],10),(rbd(),obd))}else if((a.c-a.b&a.a.length-1)==2){zac(BD(bkb(a),10),(rbd(),nbd));zac(BD(bkb(a),10),obd)}else{wac(a,e)}Yjb(a)} +function pRc(a,b,c){var d,e,f,g,h;f=0;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);g='';(!d.n&&(d.n=new cUd(D2,d,1,7)),d.n).i==0||(g=BD(qud((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n),0),137).a);h=new XRc(f++,b,g);tNb(h,d);yNb(h,(mTc(),dTc),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Dsb(b.b,h);jrb(c.f,d,h)}} +function B2b(a){var b,c,d,e,f;d=BD(vNb(a,(wtc(),$sc)),33);f=BD(hkd(d,(Nyc(),Fxc)),174).Hc((tdd(),sdd));if(!a.e){e=BD(vNb(a,Ksc),21);b=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((Orc(),Hrc))){jkd(d,Vxc,(dcd(),$bd));Afd(d,b.a,b.b,false,true)}else{Ccb(DD(hkd(d,Gxc)))||Afd(d,b.a,b.b,true,true)}}f?jkd(d,Fxc,pqb(sdd)):jkd(d,Fxc,(c=BD(gdb(I1),9),new xqb(c,BD(_Bb(c,c.length),9),0)))} +function tA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(bfb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}if(b[0]<a.length&&bfb(a,b[0])==58){d=g*60;++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}d+=g}else{d=g;d<24&&b[0]-f<=2?(d*=60):(d=d%100+(d/100|0)*60)}d*=e;c.o=-d;return true} +function Hjc(a){var b,c,d,e,f,g,h,i,j;g=new Rkb;for(d=new Sr(ur(U_b(a.b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);OZb(c)&&Ekb(g,new Gjc(c,Jjc(a,c.c),Jjc(a,c.d)))}for(j=(f=(new $ib(a.e)).a.vc().Kc(),new djb(f));j.a.Ob();){h=(b=BD(j.a.Pb(),42),BD(b.dd(),113));h.d.p=0}for(i=(e=(new $ib(a.e)).a.vc().Kc(),new djb(e));i.a.Ob();){h=(b=BD(i.a.Pb(),42),BD(b.dd(),113));h.d.p==0&&Ekb(a.d,Ijc(a,h))}} +function W1b(a){var b,c,d,e,f,g,h;f=mpd(a);for(e=new Fyd((!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));e.e!=e.i.gc();){d=BD(Dyd(e),79);h=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));if(!ntd(h,f)){return true}}for(c=new Fyd((!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));c.e!=c.i.gc();){b=BD(Dyd(c),79);g=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));if(!ntd(g,f)){return true}}return false} +function Dmc(a){var b,c,d,e,f,g,h,i;i=new s7c;b=Jsb(a,0);h=null;c=BD(Xsb(b),8);e=BD(Xsb(b),8);while(b.b!=b.d.c){h=c;c=e;e=BD(Xsb(b),8);f=Emc(c7c(new f7c(h.a,h.b),c));g=Emc(c7c(new f7c(e.a,e.b),c));d=10;d=$wnd.Math.min(d,$wnd.Math.abs(f.a+f.b)/2);d=$wnd.Math.min(d,$wnd.Math.abs(g.a+g.b)/2);f.a=Eeb(f.a)*d;f.b=Eeb(f.b)*d;g.a=Eeb(g.a)*d;g.b=Eeb(g.b)*d;Dsb(i,P6c(f,c));Dsb(i,P6c(g,c))}return i} +function _hd(a,b,c,d){var e,f,g,h,i;g=a.eh();i=a.Zg();e=null;if(i){if(!!b&&(Nid(a,b,c).Bb&Tje)==0){d=Txd(i.Vk(),a,d);a.uh(null);e=b.fh()}else{i=null}}else{!!g&&(i=g.fh());!!b&&(e=b.fh())}i!=e&&!!i&&i.Zk(a);h=a.Vg();a.Rg(b,c);i!=e&&!!e&&e.Yk(a);if(a.Lg()&&a.Mg()){if(!!g&&h>=0&&h!=c){f=new nSd(a,1,h,g,null);!d?(d=f):d.Ei(f)}if(c>=0){f=new nSd(a,1,c,h==c?g:null,b);!d?(d=f):d.Ei(f)}}return d} +function LEd(a){var b,c,d;if(a.b==null){d=new Hfb;if(a.i!=null){Efb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){YEd(a.i)||(d.a+='//',d);Efb(d,a.a)}if(a.d!=null){d.a+='/';Efb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;b<c;b++){b!=0&&(d.a+='/',d);Efb(d,a.j[b])}if(a.g!=null){d.a+='?';Efb(d,a.g)}}else{Efb(d,a.a)}if(a.e!=null){d.a+='#';Efb(d,a.e)}a.b=d.a}return a.b} +function E5b(a,b){var c,d,e,f,g,h;for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=vNb(d,(wtc(),$sc));if(JD(f,11)){g=BD(f,11);h=b_b(b,d,g.o.a,g.o.b);g.n.a=h.a;g.n.b=h.b;G0b(g,BD(vNb(d,Hsc),61))}}c=new f7c(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a);if(BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){yNb(a,(Nyc(),Vxc),(dcd(),$bd));BD(vNb(Q_b(a),Ksc),21).Fc(Krc);j_b(a,c,false)}else{j_b(a,c,true)}} +function YFc(a,b,c){var d,e,f,g,h,i;Odd(c,'Minimize Crossings '+a.a,1);d=b.b.c.length==0||!WAb(JAb(new YAb(null,new Kub(b.b,16)),new Xxb(new xGc))).sd((EAb(),DAb));i=b.b.c.length==1&&BD(Ikb(b.b,0),29).a.c.length==1;f=PD(vNb(b,(Nyc(),axc)))===PD((hbd(),ebd));if(d||i&&!f){Qdd(c);return}e=TFc(a,b);g=(h=BD(Ut(e,0),214),h.c.Rf()?h.c.Lf()?new kGc(a):new mGc(a):new iGc(a));UFc(e,g);eGc(a);Qdd(c)} +function so(a,b,c,d){var e,f,g,h,i;i=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));e=Tbb(Ibb(Eie,keb(Tbb(Ibb(c==null?0:tb(c),Fie)),15)));h=vo(a,b,i);g=uo(a,c,e);if(!!h&&e==h.a&&Hb(c,h.g)){return c}else if(!!g&&!d){throw vbb(new Wdb('key already present: '+c))}!!h&&mo(a,h);!!g&&mo(a,g);f=new $o(c,e,b,i);po(a,f,g);if(g){g.e=null;g.c=null}if(h){h.e=null;h.c=null}to(a);return !h?null:h.g} +function Lhb(a,b,c){var d,e,f,g,h;for(f=0;f<b;f++){d=0;for(h=f+1;h<b;h++){d=wbb(wbb(Ibb(xbb(a[f],Yje),xbb(a[h],Yje)),xbb(c[f+h],Yje)),xbb(Tbb(d),Yje));c[f+h]=Tbb(d);d=Pbb(d,32)}c[f+b]=Tbb(d)}khb(c,c,b<<1);d=0;for(e=0,g=0;e<b;++e,g++){d=wbb(wbb(Ibb(xbb(a[e],Yje),xbb(a[e],Yje)),xbb(c[g],Yje)),xbb(Tbb(d),Yje));c[g]=Tbb(d);d=Pbb(d,32);++g;d=wbb(d,xbb(c[g],Yje));c[g]=Tbb(d);d=Pbb(d,32)}return c} +function ZJc(a,b,c){var d,e,f,g,h,i,j,k;if(Qq(b)){return}i=Edb(ED(pBc(c.c,(Nyc(),zyc))));j=BD(pBc(c.c,yyc),142);!j&&(j=new H_b);d=c.a;e=null;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),11);k=0;if(!e){k=j.d}else{k=i;k+=e.o.b}f=nGb(oGb(new pGb,g),a.f);Rhb(a.k,g,f);AFb(DFb(CFb(BFb(EFb(new FFb,0),QD($wnd.Math.ceil(k))),d),f));e=g;d=f}AFb(DFb(CFb(BFb(EFb(new FFb,0),QD($wnd.Math.ceil(j.a+e.o.b))),d),c.d))} +function uZc(a,b,c,d,e,f,g,h){var i,j,k,l,m,n;n=false;m=f-c.s;k=c.t-b.f+(j=MZc(c,m,false),j.a);if(d.g+h>m){return false}l=(i=MZc(d,m,false),i.a);if(k+h+l<=b.b){KZc(c,f-c.s);c.c=true;KZc(d,f-c.s);OZc(d,c.s,c.t+c.d+h);d.k=true;WZc(c.q,d);n=true;if(e){s$c(b,d);d.j=b;if(a.c.length>g){v$c((tCb(g,a.c.length),BD(a.c[g],200)),d);(tCb(g,a.c.length),BD(a.c[g],200)).a.c.length==0&&Kkb(a,g)}}}return n} +function kcc(a,b){var c,d,e,f,g,h;Odd(b,'Partition midprocessing',1);e=new Hp;MAb(JAb(new YAb(null,new Kub(a.a,16)),new occ),new qcc(e));if(e.d==0){return}h=BD(GAb(UAb((f=e.i,new YAb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=h.Kc();c=BD(d.Pb(),19);while(d.Ob()){g=BD(d.Pb(),19);jcc(BD(Qc(e,c),21),BD(Qc(e,g),21));c=g}Qdd(b)} +function DYb(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new Rkb;f=(d=BD(gdb(F1),9),new xqb(d,BD(_Bb(d,d.length),9),0));g=new vgd(e,f)}BD(g.a,15).Fc(b);b.k==(j0b(),e0b)&&BD(g.b,21).Fc(BD(vNb(b,(wtc(),Hsc)),61));for(i=new olb(b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);for(k=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(h),new R0b(h)])));Qr(k);){j=BD(Rr(k),11);DYb(a,j.i,g)}}return g}return null} +function Dmd(a,b){var c,d,e,f,g;if(a.Ab){if(a.Ab){g=a.Ab.i;if(g>0){e=BD(a.Ab.g,1934);if(b==null){for(f=0;f<g;++f){c=e[f];if(c.d==null){return c}}}else{for(f=0;f<g;++f){c=e[f];if(dfb(b,c.d)){return c}}}}}else{if(b==null){for(d=new Fyd(a.Ab);d.e!=d.i.gc();){c=BD(Dyd(d),590);if(c.d==null){return c}}}else{for(d=new Fyd(a.Ab);d.e!=d.i.gc();){c=BD(Dyd(d),590);if(dfb(b,c.d)){return c}}}}}return null} +function gRc(a,b){var c,d,e,f,g,h,i,j;j=DD(vNb(b,(JTc(),GTc)));if(j==null||(uCb(j),j)){dRc(a,b);e=new Rkb;for(i=Jsb(b.b,0);i.b!=i.d.c;){g=BD(Xsb(i),86);c=cRc(a,g,null);if(c){tNb(c,b);e.c[e.c.length]=c}}a.a=null;a.b=null;if(e.c.length>1){for(d=new olb(e);d.a<d.c.c.length;){c=BD(mlb(d),135);f=0;for(h=Jsb(c.b,0);h.b!=h.d.c;){g=BD(Xsb(h),86);g.g=f++}}}return e}return Ou(OC(GC(n$,1),fme,135,0,[b]))} +function rqd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v;n=Sqd(a,etd(b),e);jmd(n,_pd(e,Vte));o=null;p=e;q=$pd(p,Yte);r=new urd(n);wqd(r.a,q);s=$pd(p,'endPoint');t=new yrd(n);yqd(t.a,s);u=Ypd(p,Ote);v=new Brd(n);zqd(v.a,u);l=_pd(e,Qte);f=new qrd(a,n);sqd(f.a,f.b,l);m=_pd(e,Pte);g=new rrd(a,n);tqd(g.a,g.b,m);j=Ypd(e,Ste);h=new srd(c,n);uqd(h.b,h.a,j);k=Ypd(e,Rte);i=new trd(d,n);vqd(i.b,i.a,k)} +function i_b(a,b,c){var d,e,f,g,h;h=null;switch(b.g){case 1:for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);if(Ccb(DD(vNb(d,(wtc(),Msc))))){return d}}h=new H0b;yNb(h,(wtc(),Msc),(Bcb(),true));break;case 2:for(g=new olb(a.j);g.a<g.c.c.length;){f=BD(mlb(g),11);if(Ccb(DD(vNb(f,(wtc(),etc))))){return f}}h=new H0b;yNb(h,(wtc(),etc),(Bcb(),true));}if(h){F0b(h,a);G0b(h,c);X$b(h.n,a.o,c)}return h} +function O3b(a,b){var c,d,e,f,g,h;h=-1;g=new Psb;for(d=new b1b(a.b);llb(d.a)||llb(d.b);){c=BD(llb(d.a)?mlb(d.a):mlb(d.b),17);h=$wnd.Math.max(h,Edb(ED(vNb(c,(Nyc(),Zwc)))));c.c==a?MAb(JAb(new YAb(null,new Kub(c.b,16)),new U3b),new W3b(g)):MAb(JAb(new YAb(null,new Kub(c.b,16)),new Y3b),new $3b(g));for(f=Jsb(g,0);f.b!=f.d.c;){e=BD(Xsb(f),70);wNb(e,(wtc(),Dsc))||yNb(e,Dsc,c)}Gkb(b,g);Osb(g)}return h} +function _bc(a,b,c,d,e){var f,g,h,i;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));yNb(f,(wtc(),$sc),b.c.i);g=new H0b;yNb(g,$sc,b.c);G0b(g,e);F0b(g,f);yNb(b.c,gtc,f);h=new b0b(a);__b(h,i0b);yNb(h,Vxc,$bd);yNb(h,$sc,b.d.i);i=new H0b;yNb(i,$sc,b.d);G0b(i,e);F0b(i,h);yNb(b.d,gtc,h);QZb(b,g);RZb(b,i);wCb(0,c.c.length);aCb(c.c,0,f);d.c[d.c.length]=h;yNb(f,ysc,meb(1));yNb(h,ysc,meb(1))} +function BPc(a,b,c,d,e){var f,g,h,i,j;h=e?d.b:d.a;if(Rqb(a.a,d)){return}j=h>c.s&&h<c.c;i=false;if(c.e.b!=0&&c.j.b!=0){i=i|($wnd.Math.abs(h-Edb(ED(Hsb(c.e))))<qme&&$wnd.Math.abs(h-Edb(ED(Hsb(c.j))))<qme);i=i|($wnd.Math.abs(h-Edb(ED(Isb(c.e))))<qme&&$wnd.Math.abs(h-Edb(ED(Isb(c.j))))<qme)}if(j||i){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(d);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}} +function gNb(a,b,c,d){var e,f,g,h,i,j,k;if(fNb(a,b,c,d)){return true}else{for(g=new olb(b.f);g.a<g.c.c.length;){f=BD(mlb(g),324);h=false;i=a.j-b.j+c;j=i+b.o;k=a.k-b.k+d;e=k+b.p;switch(f.a.g){case 0:h=oNb(a,i+f.b.a,0,i+f.c.a,k-1);break;case 1:h=oNb(a,j,k+f.b.a,a.o-1,k+f.c.a);break;case 2:h=oNb(a,i+f.b.a,e,i+f.c.a,a.p-1);break;default:h=oNb(a,0,k+f.b.a,i-1,k+f.c.a);}if(h){return true}}}return false} +function LMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(j=new olb(f.a);j.a<j.c.c.length;){i=BD(mlb(j),10);k=new Rkb;h=0;for(d=new Sr(ur(R_b(i).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)||!OZb(c)&&c.c.i.c==c.d.i.c){continue}e=BD(vNb(c,(Nyc(),eyc)),19).a;if(e>h){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.c.i,c))}mmb();Okb(k,a.c);Dkb(a.b,i.p,k)}}} +function MMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(j=new olb(f.a);j.a<j.c.c.length;){i=BD(mlb(j),10);k=new Rkb;h=0;for(d=new Sr(ur(U_b(i).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)||!OZb(c)&&c.c.i.c==c.d.i.c){continue}e=BD(vNb(c,(Nyc(),eyc)),19).a;if(e>h){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.d.i,c))}mmb();Okb(k,a.c);Dkb(a.f,i.p,k)}}} +function Y7c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,qse),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new _7c)));p4c(a,qse,ame,U7c);p4c(a,qse,wme,15);p4c(a,qse,vme,meb(0));p4c(a,qse,Jre,Ksd(O7c));p4c(a,qse,Fme,Ksd(Q7c));p4c(a,qse,Eme,Ksd(S7c));p4c(a,qse,_le,pse);p4c(a,qse,Ame,Ksd(P7c));p4c(a,qse,Tme,Ksd(R7c));p4c(a,qse,rse,Ksd(M7c));p4c(a,qse,lqe,Ksd(N7c))} +function W$b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return Ucd(),Scd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return Ucd(),Tcd}else if(j+h>g){return Ucd(),zcd}break;case 4:case 3:if(k<0){return Ucd(),Acd}else if(k+c>f){return Ucd(),Rcd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(Ucd(),Tcd):i+d>=1&&i-d>=0?(Ucd(),zcd):d<0.5?(Ucd(),Acd):(Ucd(),Rcd)} +function pJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Edb(ED(vNb(b,(Nyc(),vyc))));o=Qie*k;for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),29);j=new olb(d.a);f=BD(mlb(j),10);l=xJc(a.a[f.p]);while(j.a<j.c.c.length){h=BD(mlb(j),10);m=xJc(a.a[h.p]);if(l!=m){n=jBc(a.b,f,h);g=f.n.b+f.o.b+f.d.a+l.a+n;i=h.n.b-h.d.d+m.a;if(g>i+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c} +function VGb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new I6c;for(j=b.Kc();j.Ob();){h=BD(j.Pb(),839);for(l=new olb(h.wf());l.a<l.c.c.length;){k=BD(mlb(l),181);if(PD(k.We((Y9c(),C8c)))===PD((qad(),pad))){SGb(m,k,false,d,e,f,g);H6c(a,m)}}}for(i=c.Kc();i.Ob();){h=BD(i.Pb(),839);for(l=new olb(h.wf());l.a<l.c.c.length;){k=BD(mlb(l),181);if(PD(k.We((Y9c(),C8c)))===PD((qad(),oad))){SGb(m,k,true,d,e,f,g);H6c(a,m)}}}} +function oRc(a,b,c){var d,e,f,g,h,i,j;for(g=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);for(e=new Sr(ur(_sd(f).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!Pld(d)&&!Pld(d)&&!Qld(d)){i=BD(Wd(irb(c.f,f)),86);j=BD(Ohb(c,atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))),86);if(!!i&&!!j){h=new QRc(i,j);yNb(h,(mTc(),dTc),d);tNb(h,d);Dsb(i.d,h);Dsb(j.b,h);Dsb(b.a,h)}}}}} +function QKb(a,b){var c,d,e,f,g,h,i,j;for(i=BD(BD(Qc(a.r,b),21),84).Kc();i.Ob();){h=BD(i.Pb(),111);e=h.c?YHb(h.c):0;if(e>0){if(h.a){j=h.b.rf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=BD(Ikb(h.c.d,0),181).rf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(tcd(a.u)){f=sfd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.rf().b&&(h.d.a=f.d+f.a-h.b.rf().b)}}} +function FC(a,b){var c;switch(HC(a)){case 6:return ND(b);case 7:return LD(b);case 8:return KD(b);case 3:return Array.isArray(b)&&(c=HC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===Nhe;case 12:return b!=null&&(typeof b===Jhe||typeof b==Nhe);case 0:return AD(b,a.__elementTypeId$);case 2:return OD(b)&&!(b.im===gcb);case 1:return OD(b)&&!(b.im===gcb)||AD(b,a.__elementTypeId$);default:return true;}} +function xOb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1} +function mgb(a,b){var c,d,e,f,g,h;e=pgb(a);h=pgb(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.f<b.f?-1:a.f>b.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*Xje)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*Xje)+1);if(c>d+1){return e}else if(c<d-1){return -e}else{f=(!a.c&&(a.c=fhb(a.f)),a.c);g=(!b.c&&(b.c=fhb(b.f)),b.c);d<0?(f=Ogb(f,Khb(-d))):d>0&&(g=Ogb(g,Khb(d)));return Igb(f,g)}}else return e<h?-1:1} +function mTb(a,b){var c,d,e,f,g,h,i;f=0;h=0;i=0;for(e=new olb(a.f.e);e.a<e.c.c.length;){d=BD(mlb(e),144);if(b==d){continue}g=a.i[b.b][d.b];f+=g;c=S6c(b.d,d.d);c>0&&a.d!=(yTb(),xTb)&&(h+=g*(d.d.a+a.a[b.b][d.b]*(b.d.a-d.d.a)/c));c>0&&a.d!=(yTb(),vTb)&&(i+=g*(d.d.b+a.a[b.b][d.b]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new f7c(h/f,b.d.b);case 2:return new f7c(b.d.a,i/f);default:return new f7c(h/f,i/f);}} +function Wcc(a,b){Occ();var c,d,e,f,g;g=BD(vNb(a.i,(Nyc(),Vxc)),98);f=a.j.g-b.j.g;if(f!=0||!(g==(dcd(),Zbd)||g==_bd||g==$bd)){return 0}if(g==(dcd(),Zbd)){c=BD(vNb(a,Wxc),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}} +function tfd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new xMd(y2,a,5)),a.a).i+2;g=new Skb(c);Ekb(g,new f7c(a.j,a.k));MAb(new YAb(null,(!a.a&&(a.a=new xMd(y2,a,5)),new Kub(a.a,16))),new Qfd(g));Ekb(g,new f7c(a.b,a.c));b=1;while(b<g.c.length-1){d=(tCb(b-1,g.c.length),BD(g.c[b-1],8));e=(tCb(b,g.c.length),BD(g.c[b],8));f=(tCb(b+1,g.c.length),BD(g.c[b+1],8));d.a==e.a&&e.a==f.a||d.b==e.b&&e.b==f.b?Kkb(g,b):++b}return g} +function Xgc(a,b){var c,d,e,f,g,h,i;c=vDb(yDb(wDb(xDb(new zDb,b),new K6c(b.e)),Ggc),a.a);b.j.c.length==0||nDb(BD(Ikb(b.j,0),57).a,c);i=new lEb;Rhb(a.e,c,i);g=new Tqb;h=new Tqb;for(f=new olb(b.k);f.a<f.c.c.length;){e=BD(mlb(f),17);Qqb(g,e.c);Qqb(h,e.d)}d=g.a.gc()-h.a.gc();if(d<0){jEb(i,true,(ead(),aad));jEb(i,false,bad)}else if(d>0){jEb(i,false,(ead(),aad));jEb(i,true,bad)}Hkb(b.g,new $hc(a,c));Rhb(a.g,b,c)} +function Neb(){Neb=ccb;var a;Jeb=OC(GC(WD,1),oje,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]);Keb=KC(WD,oje,25,37,15,1);Leb=OC(GC(WD,1),oje,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]);Meb=KC(XD,Sje,25,37,14,1);for(a=2;a<=36;a++){Keb[a]=QD($wnd.Math.pow(a,Jeb[a]));Meb[a]=Abb(rie,Keb[a])}} +function pfd(a){var b;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}b=new s7c;!!btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)),false));!!btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)),true));return b} +function _Mc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(YLc(),XLc)?R_b(b.b):U_b(b.b)):(e=a.a.c==(YLc(),WLc)?R_b(b.b):U_b(b.b));f=false;for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=Ccb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!OZb(c)&&c.c.i.c==c.d.i.c){continue}if(Ccb(a.a.n[a.a.g[b.b.p].p])||Ccb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Rqb(a.b,a.a.g[TMc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} +function bed(a,b,c,d,e){var f,g,h,i,j,k,l;mmb();Okb(a,new Red);h=new Bib(a,0);l=new Rkb;f=0;while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),157));if(l.c.length!=0&&red(g)*qed(g)>f*2){k=new wed(l);j=red(g)/qed(g);i=fed(k,b,new p0b,c,d,e,j);P6c(X6c(k.e),i);l.c=KC(SI,Uhe,1,0,5,1);f=0;l.c[l.c.length]=k;l.c[l.c.length]=g;f=red(k)*qed(k)+red(g)*qed(g)}else{l.c[l.c.length]=g;f+=red(g)*qed(g)}}return l} +function qwd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.ej()){i=a.fj();zvd(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,i):a.Zi(5,null,c,b,i);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){j=a.Oi(e);h=a.cj(j,h);h=h}if(!h){a.$i(g)}else{h.Ei(g);h.Fi()}}else{a.$i(g)}}else{zvd(a,b,c);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){h=a.cj(a.Oi(e),h)}!!h&&h.Fi()}}return true}} +function wwd(a,b,c){var d,e,f,g,h;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,h=(g=a.Ui(b,a.oi(b,c)),g),c,b,f);if(a.bj()&&!(a.ni()&&!!h?pb(h,c):PD(h)===PD(c))){!!h&&(e=a.dj(h,e));e=a.cj(c,e);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return h}else{h=(g=a.Ui(b,a.oi(b,c)),g);if(a.bj()&&!(a.ni()&&!!h?pb(h,c):PD(h)===PD(c))){e=null;!!h&&(e=a.dj(h,null));e=a.cj(c,e);!!e&&e.Fi()}return h}} +function rRb(a,b){var c,d,e,f,g,h,i,j,k;a.e=b;a.f=BD(vNb(b,(HSb(),GSb)),230);iRb(b);a.d=$wnd.Math.max(b.e.c.length*16+b.c.c.length,256);if(!Ccb(DD(vNb(b,(wSb(),dSb))))){k=a.e.e.c.length;for(i=new olb(b.e);i.a<i.c.c.length;){h=BD(mlb(i),144);j=h.d;j.a=Aub(a.f)*k;j.b=Aub(a.f)*k}}c=b.b;for(f=new olb(b.c);f.a<f.c.c.length;){e=BD(mlb(f),282);d=BD(vNb(e,rSb),19).a;if(d>0){for(g=0;g<d;g++){Ekb(c,new aRb(e))}cRb(e)}}} +function zac(a,b){var c,d,e,f,g,h;if(a.k==(j0b(),f0b)){c=WAb(JAb(BD(vNb(a,(wtc(),ktc)),15).Oc(),new Xxb(new Kac))).sd((EAb(),DAb))?b:(rbd(),pbd);yNb(a,Ssc,c);if(c!=(rbd(),obd)){d=BD(vNb(a,$sc),17);h=Edb(ED(vNb(d,(Nyc(),Zwc))));g=0;if(c==nbd){g=a.o.b-$wnd.Math.ceil(h/2)}else if(c==pbd){a.o.b-=Edb(ED(vNb(Q_b(a),nyc)));g=(a.o.b-$wnd.Math.ceil(h))/2}for(f=new olb(a.j);f.a<f.c.c.length;){e=BD(mlb(f),11);e.n.b=g}}}} +function Uge(){Uge=ccb;g5d();Tge=new Vge;OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Xwe)])]);OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Ywe)])]);OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Zwe)]),OC(GC(w5,1),Axe,592,0,[new Rge(Ywe)])]);new Ygb('-1');OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge('\\c+')])]);new Ygb('0');new Ygb('0');new Ygb('1');new Ygb('0');new Ygb(hxe)} +function KQd(a){var b,c;if(!!a.c&&a.c.kh()){c=BD(a.c,49);a.c=BD(xid(a,c),138);if(a.c!=c){(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,2,c,a.c));if(JD(a.Cb,399)){a.Db>>16==-15&&a.Cb.nh()&&Rwd(new oSd(a.Cb,9,13,c,a.c,HLd(QSd(BD(a.Cb,59)),a)))}else if(JD(a.Cb,88)){if(a.Db>>16==-23&&a.Cb.nh()){b=a.c;JD(b,88)||(b=(jGd(),_Fd));JD(c,88)||(c=(jGd(),_Fd));Rwd(new oSd(a.Cb,9,10,c,b,HLd(VKd(BD(a.Cb,26)),a)))}}}}return a.c} +function f7b(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Hypernodes processing',1);for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(h=new olb(d.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(Ccb(DD(vNb(g,(Nyc(),exc))))&&g.j.c.length<=2){l=0;k=0;c=0;f=0;for(j=new olb(g.j);j.a<j.c.c.length;){i=BD(mlb(j),11);switch(i.j.g){case 1:++l;break;case 2:++k;break;case 3:++c;break;case 4:++f;}}l==0&&c==0&&e7b(a,g,f<=k)}}}Qdd(b)} +function i7b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Layer constraint edge reversal',1);for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);k=-1;c=new Rkb;j=l_b(f.a);for(e=0;e<j.length;e++){d=BD(vNb(j[e],(wtc(),Osc)),303);if(k==-1){d!=(esc(),dsc)&&(k=e)}else{if(d==(esc(),dsc)){$_b(j[e],null);Z_b(j[e],k++,f)}}d==(esc(),bsc)&&Ekb(c,j[e])}for(i=new olb(c);i.a<i.c.c.length;){h=BD(mlb(i),10);$_b(h,null);$_b(h,f)}}Qdd(b)} +function W6b(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Hyperedge merging',1);U6b(a,b);i=new Bib(b.b,0);while(i.b<i.d.gc()){h=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),29));k=h.a;if(k.c.length==0){continue}d=null;e=null;f=null;g=null;for(j=0;j<k.c.length;j++){d=(tCb(j,k.c.length),BD(k.c[j],10));e=d.k;if(e==(j0b(),g0b)&&g==g0b){l=S6b(d,f);if(l.a){V6b(d,f,l.b,l.c);tCb(j,k.c.length);cCb(k.c,j,1);--j;d=f;e=g}}f=d;g=e}}Qdd(c)} +function WFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=OFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=OFc(a,b)}while(e>c);return e} +function XFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=NFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=NFc(a,b)}while(e>c);return e} +function uNd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=vNd(a,b);c=vNd(a,c);d=JQd(b);if(d){k=JQd(c);if(k!=d){if(!k){return false}else{i=d.Dj();o=k.Dj();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new xMd(j5,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new xMd(j5,c,1)),c.d);if(f==m.i){for(j=0;j<f;++j){e=BD(qud(g,j),87);l=BD(qud(m,j),87);if(!uNd(a,e,l)){return false}}}return true}}else{h=b.e;n=c.e;return h==n}}} +function X2d(a,b,c,d){var e,f,g,h,i,j,k,l;if(T6d(a.e,b)){l=S6d(a.e.Tg(),b);f=BD(a.g,119);k=null;i=-1;h=-1;e=0;for(j=0;j<a.i;++j){g=f[j];if(l.rl(g.ak())){e==c&&(i=j);if(e==d){h=j;k=g.dd()}++e}}if(i==-1){throw vbb(new qcb(lue+c+mue+e))}if(h==-1){throw vbb(new qcb(nue+d+mue+e))}Wxd(a,i,h);oid(a.e)&&GLd(a,H2d(a,7,b,meb(d),k,c,true));return k}else{throw vbb(new Wdb('The feature must be many-valued to support move'))}} +function b_b(a,b,c,d){var e,f,g,h,i;i=new g7c(b.n);i.a+=b.o.a/2;i.b+=b.o.b/2;h=Edb(ED(vNb(b,(Nyc(),Uxc))));f=a.f;g=a.d;e=a.c;switch(BD(vNb(b,(wtc(),Hsc)),61).g){case 1:i.a+=g.b+e.a-c/2;i.b=-d-h;b.n.b=-(g.d+h+e.b);break;case 2:i.a=f.a+g.b+g.c+h;i.b+=g.d+e.b-d/2;b.n.a=f.a+g.c+h-e.a;break;case 3:i.a+=g.b+e.a-c/2;i.b=f.b+g.d+g.a+h;b.n.b=f.b+g.a+h-e.b;break;case 4:i.a=-c-h;i.b+=g.d+e.b-d/2;b.n.a=-(g.b+h+e.a);}return i} +function P1b(a){var b,c,d,e,f,g;d=new XZb;tNb(d,a);PD(vNb(d,(Nyc(),Lwc)))===PD((ead(),cad))&&yNb(d,Lwc,a_b(d));if(vNb(d,(g6c(),f6c))==null){g=BD(m6d(a),160);yNb(d,f6c,RD(g.We(f6c)))}yNb(d,(wtc(),$sc),a);yNb(d,Ksc,(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));e=OGb((!Xod(a)?null:(Pgd(),new bhd(Xod(a))),Pgd(),new hhd(!Xod(a)?null:new bhd(Xod(a)),a)),bad);f=BD(vNb(d,Kxc),116);c=d.d;t_b(c,f);t_b(c,e);return d} +function ybc(a,b,c){var d,e;d=b.c.i;e=c.d.i;if(d.k==(j0b(),g0b)){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11));yNb(a,Usc,DD(vNb(d,Usc)))}else if(d.k==f0b){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11));yNb(a,Usc,(Bcb(),true))}else if(e.k==f0b){yNb(a,(wtc(),Vsc),BD(vNb(e,Vsc),11));yNb(a,Wsc,BD(vNb(e,Wsc),11));yNb(a,Usc,(Bcb(),true))}else{yNb(a,(wtc(),Vsc),b.c);yNb(a,Wsc,c.d)}} +function FGb(a){var b,c,d,e,f,g,h;a.o=new jkb;d=new Psb;for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);LFb(f).c.length==1&&(Gsb(d,f,d.c.b,d.c),true)}while(d.b!=0){f=BD(d.b==0?null:(sCb(d.b!=0),Nsb(d,d.a.a)),121);if(LFb(f).c.length==0){continue}b=BD(Ikb(LFb(f),0),213);c=f.g.a.c.length>0;h=xFb(b,f);c?OFb(h.b,b):OFb(h.g,b);LFb(h).c.length==1&&(Gsb(d,h,d.c.b,d.c),true);e=new vgd(f,b);Wjb(a.o,e);Lkb(a.e.a,f)}} +function _Nb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(D6c(a.b).a-D6c(b.b).a);h=$wnd.Math.abs(D6c(a.b).b-D6c(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)} +function lQc(a){var b,c,d,e;nQc(a,a.e,a.f,(FQc(),DQc),true,a.c,a.i);nQc(a,a.e,a.f,DQc,false,a.c,a.i);nQc(a,a.e,a.f,EQc,true,a.c,a.i);nQc(a,a.e,a.f,EQc,false,a.c,a.i);mQc(a,a.c,a.e,a.f,a.i);d=new Bib(a.i,0);while(d.b<d.d.gc()){b=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),128));e=new Bib(a.i,d.b);while(e.b<e.d.gc()){c=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),128));kQc(b,c)}}wQc(a.i,BD(vNb(a.d,(wtc(),jtc)),230));zQc(a.i)} +function fKd(a,b){var c,d;if(b!=null){d=dKd(a);if(d){if((d.i&1)!=0){if(d==sbb){return KD(b)}else if(d==WD){return JD(b,19)}else if(d==VD){return JD(b,155)}else if(d==SD){return JD(b,217)}else if(d==TD){return JD(b,172)}else if(d==UD){return LD(b)}else if(d==rbb){return JD(b,184)}else if(d==XD){return JD(b,162)}}else{return pEd(),c=BD(Ohb(oEd,d),55),!c||c.wj(b)}}else if(JD(b,56)){return a.uk(BD(b,56))}}return false} +function ade(){ade=ccb;var a,b,c,d,e,f,g,h,i;$ce=KC(SD,wte,25,255,15,1);_ce=KC(TD,$ie,25,64,15,1);for(b=0;b<255;b++){$ce[b]=-1}for(c=90;c>=65;c--){$ce[c]=c-65<<24>>24}for(d=122;d>=97;d--){$ce[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){$ce[e]=e-48+52<<24>>24}$ce[43]=62;$ce[47]=63;for(f=0;f<=25;f++)_ce[f]=65+f&aje;for(g=26,i=0;g<=51;++g,i++)_ce[g]=97+i&aje;for(a=52,h=0;a<=61;++a,h++)_ce[a]=48+h&aje;_ce[62]=43;_ce[63]=47} +function FXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new d7c}j=0;l=0;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Edb(ED(vNb(BD(a.Kc().Pb(),37),(Nyc(),owc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}uXb(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new f7c(c+b,n+i+b)} +function mQc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),17);i=f.c;if(c.a._b(i)){j=(FQc(),DQc)}else if(d.a._b(i)){j=(FQc(),EQc)}else{throw vbb(new Wdb('Source port must be in one of the port sets.'))}k=f.d;if(c.a._b(k)){l=(FQc(),DQc)}else if(d.a._b(k)){l=(FQc(),EQc)}else{throw vbb(new Wdb('Target port must be in one of the port sets.'))}h=new YQc(f,j,l);Rhb(a.b,f,h);e.c[e.c.length]=h}} +function lfd(a,b){var c,d,e,f,g,h,i;if(!mpd(a)){throw vbb(new Zdb(Sse))}d=mpd(a);f=d.g;e=d.f;if(f<=0&&e<=0){return Ucd(),Scd}h=a.i;i=a.j;switch(b.g){case 2:case 1:if(h<0){return Ucd(),Tcd}else if(h+a.g>f){return Ucd(),zcd}break;case 4:case 3:if(i<0){return Ucd(),Acd}else if(i+a.f>e){return Ucd(),Rcd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(Ucd(),Tcd):g+c>=1&&g-c>=0?(Ucd(),zcd):c<0.5?(Ucd(),Acd):(Ucd(),Rcd)} +function vhb(a,b,c,d,e){var f,g;f=wbb(xbb(b[0],Yje),xbb(d[0],Yje));a[0]=Tbb(f);f=Obb(f,32);if(c>=e){for(g=1;g<e;g++){f=wbb(f,wbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<c;g++){f=wbb(f,xbb(b[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}}else{for(g=1;g<c;g++){f=wbb(f,wbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<e;g++){f=wbb(f,xbb(d[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}}ybb(f,0)!=0&&(a[g]=Tbb(f))} +function _fe(a){wfe();var b,c,d,e,f,g;if(a.e!=4&&a.e!=5)throw vbb(new Wdb('Token#complementRanges(): must be RANGE: '+a.e));f=a;Yfe(f);Vfe(f);d=f.b.length+2;f.b[0]==0&&(d-=2);c=f.b[f.b.length-1];c==lxe&&(d-=2);e=(++vfe,new $fe(4));e.b=KC(WD,oje,25,d,15,1);g=0;if(f.b[0]>0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b<f.b.length-2;b+=2){e.b[g++]=f.b[b]+1;e.b[g++]=f.b[b+1]-1}if(c!=lxe){e.b[g++]=c+1;e.b[g]=lxe}e.a=true;return e} +function Pxd(a,b,c){var d,e,f,g,h,i,j,k;d=c.gc();if(d==0){return false}else{if(a.ej()){j=a.fj();iud(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,j):a.Zi(5,null,c,b,j);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){k=a.g[e];h=a.cj(k,h);h=a.jj(k,h)}if(!h){a.$i(g)}else{h.Ei(g);h.Fi()}}else{a.$i(g)}}else{iud(a,b,c);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){i=a.g[e];h=a.cj(i,h)}!!h&&h.Fi()}}return true}} +function YNc(a,b,c,d){var e,f,g,h,i;for(g=new olb(a.k);g.a<g.c.c.length;){e=BD(mlb(g),129);if(!d||e.c==(HOc(),FOc)){i=e.b;if(i.g<0&&e.d>0){pOc(i,i.d-e.d);e.c==(HOc(),FOc)&&nOc(i,i.a-e.d);i.d<=0&&i.i>0&&(Gsb(b,i,b.c.b,b.c),true)}}}for(f=new olb(a.f);f.a<f.c.c.length;){e=BD(mlb(f),129);if(!d||e.c==(HOc(),FOc)){h=e.a;if(h.g<0&&e.d>0){qOc(h,h.i-e.d);e.c==(HOc(),FOc)&&oOc(h,h.b-e.d);h.i<=0&&h.d>0&&(Gsb(c,h,c.c.b,c.c),true)}}}} +function gSc(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,'Processor compute fanout',1);Uhb(a.b);Uhb(a.a);h=null;f=Jsb(b.b,0);while(!h&&f.b!=f.d.c){j=BD(Xsb(f),86);Ccb(DD(vNb(j,(mTc(),jTc))))&&(h=j)}i=new Psb;Gsb(i,h,i.c.b,i.c);fSc(a,i);for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);g=GD(vNb(j,(mTc(),$Sc)));e=Phb(a.b,g)!=null?BD(Phb(a.b,g),19).a:0;yNb(j,ZSc,meb(e));d=1+(Phb(a.a,g)!=null?BD(Phb(a.a,g),19).a:0);yNb(j,XSc,meb(d))}Qdd(c)} +function WPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=VPc(a,c);for(i=0;i<b;i++){Aib(e,c);n=new Rkb;o=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),407));for(k=m+i;k<a.b;k++){h=o;o=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),407));Ekb(n,new aQc(h,o,c))}for(l=m+i;l<a.b;l++){sCb(d.b>0);d.a.Xb(d.c=--d.b);l>m+i&&uib(d)}for(g=new olb(n);g.a<g.c.c.length;){f=BD(mlb(g),407);Aib(d,f)}if(i<b-1){for(j=m+i;j<a.b;j++){sCb(d.b>0);d.a.Xb(d.c=--d.b)}}}} +function Jfe(){wfe();var a,b,c,d,e,f;if(gfe)return gfe;a=(++vfe,new $fe(4));Xfe(a,Kfe(vxe,true));Zfe(a,Kfe('M',true));Zfe(a,Kfe('C',true));f=(++vfe,new $fe(4));for(d=0;d<11;d++){Ufe(f,d,d)}b=(++vfe,new $fe(4));Xfe(b,Kfe('M',true));Ufe(b,4448,4607);Ufe(b,65438,65439);e=(++vfe,new Lge(2));Kge(e,a);Kge(e,ffe);c=(++vfe,new Lge(2));c.$l(Bfe(f,Kfe('L',true)));c.$l(b);c=(++vfe,new lge(3,c));c=(++vfe,new rge(e,c));gfe=c;return gfe} +function S3c(a){var b,c;b=GD(hkd(a,(Y9c(),o8c)));if(T3c(b,a)){return}if(!ikd(a,F9c)&&((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i!=0||Ccb(DD(hkd(a,M8c))))){if(b==null||ufb(b).length==0){if(!T3c(sne,a)){c=Qfb(Qfb(new Wfb('Unable to load default layout algorithm '),sne),' for unconfigured node ');yfd(a,c);throw vbb(new y2c(c.a))}}else{c=Qfb(Qfb(new Wfb("Layout algorithm '"),b),"' not found for ");yfd(a,c);throw vbb(new y2c(c.a))}}} +function hIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];mHb(e,n,m)}}else{d=kIb(a,false);mHb(a.a[0],c.c+b.b,d[0]);mHb(a.a[2],c.c+c.b-b.c-d[2],d[2]);l=c.b-b.b-b.c;if(d[0]>0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);mHb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];JD(e,326)&&BD(e,326).Te()}} +function KMc(a){var b,c,d,e,f,g,h,i,j,k,l;l=new JMc;l.d=0;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);l.d+=f.a.c.length}d=0;e=0;l.a=KC(WD,oje,25,a.b.c.length,15,1);j=0;k=0;l.e=KC(WD,oje,25,l.d,15,1);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);b.p=d++;l.a[b.p]=e++;k=0;for(i=new olb(b.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p=j++;l.e[h.p]=k++}}l.c=new OMc(l);l.b=Pu(l.d);LMc(l,a);l.f=Pu(l.d);MMc(l,a);return l} +function GZc(a,b){var c,d,e,f;f=BD(Ikb(a.n,a.n.c.length-1),211).d;a.p=$wnd.Math.min(a.p,b.g);a.r=$wnd.Math.max(a.r,f);a.g=$wnd.Math.max(a.g,b.g+(a.b.c.length==1?0:a.i));a.o=$wnd.Math.min(a.o,b.f);a.e+=b.f+(a.b.c.length==1?0:a.i);a.f=$wnd.Math.max(a.f,b.f);e=a.n.c.length>0?(a.n.c.length-1)*a.i:0;for(d=new olb(a.n);d.a<d.c.c.length;){c=BD(mlb(d),211);e+=c.a}a.d=e;a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);u$c(a.j)} +function LQb(a,b){var c,d,e,f,g,h,i,j,k,l;k=DD(vNb(b,(wSb(),sSb)));if(k==null||(uCb(k),k)){l=KC(sbb,dle,25,b.e.c.length,16,1);g=HQb(b);e=new Psb;for(j=new olb(b.e);j.a<j.c.c.length;){h=BD(mlb(j),144);c=IQb(a,h,null,null,l,g);if(c){tNb(c,b);Gsb(e,c,e.c.b,e.c)}}if(e.b>1){for(d=Jsb(e,0);d.b!=d.d.c;){c=BD(Xsb(d),231);f=0;for(i=new olb(c.e);i.a<i.c.c.length;){h=BD(mlb(i),144);h.b=f++}}}return e}return Ou(OC(GC($O,1),fme,231,0,[b]))} +function TKd(a){var b,c,d,e,f,g,h;if(!a.g){h=new zNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);ytd(h,TKd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}e=h.i;for(f=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));f.e!=f.i.gc();++e){bJd(BD(Dyd(f),449),e)}ytd(h,(!a.s&&(a.s=new cUd(t5,a,21,17)),a.s));vud(h);a.g=new rNd(a,h);a.i=BD(h.g,247);a.i==null&&(a.i=MKd);a.p=null;$Kd(a).b&=-5}return a.g} +function iIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;d=a.i;c=a.n;if(a.b==0){b=jIb(a,false);nHb(a.a[0],d.d+c.d,b[0]);nHb(a.a[2],d.d+d.a-c.a-b[2],b[2]);m=d.a-c.d-c.a;l=m;if(b[0]>0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);nHb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];nHb(e,o,n)}}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];JD(e,326)&&BD(e,326).Ue()}} +function boc(a){var b,c,d,e,f,g,h,i,j,k;k=KC(WD,oje,25,a.b.c.length+1,15,1);j=new Tqb;d=0;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);k[d++]=j.a.gc();for(i=new olb(e.a);i.a<i.c.c.length;){g=BD(mlb(i),10);for(c=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);j.a.zc(b,j)}}for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);for(c=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);j.a.Bc(b)!=null}}}return k} +function F2d(a,b,c,d){var e,f,g,h,i;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&pb(f,c)){return true}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(i.rl(f.ak())&&pb(c,f.dd())){return true}}if(d){for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&PD(c)===PD(a3d(a,BD(f.dd(),56)))){return true}}}}else{for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&f.dd()==null){return false}}}return false} +function e3d(a,b,c,d){var e,f,g,h,i,j;j=S6d(a.e.Tg(),b);g=BD(a.g,119);if(T6d(a.e,b)){if(b.hi()){f=M2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0);if(f>=0&&f!=c){throw vbb(new Wdb(kue))}}e=0;for(i=0;i<a.i;++i){h=g[i];if(j.rl(h.ak())){if(e==c){return BD(Gtd(a,i,(Q6d(),BD(b,66).Oj()?BD(d,72):R6d(b,d))),72)}++e}}throw vbb(new qcb(gve+c+mue+e))}else{for(i=0;i<a.i;++i){h=g[i];if(j.rl(h.ak())){return Q6d(),BD(b,66).Oj()?h:h.dd()}}return null}} +function ONb(a,b,c,d){var e,f,g,h;h=c;for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),221);e=BD(f.b,65);if(Jy(a.b.c,e.b.c+e.b.b)<=0&&Jy(e.b.c,a.b.c+a.b.b)<=0&&Jy(a.b.d,e.b.d+e.b.a)<=0&&Jy(e.b.d,a.b.d+a.b.a)<=0){if(Jy(e.b.c,a.b.c+a.b.b)==0&&d.a<0||Jy(e.b.c+e.b.b,a.b.c)==0&&d.a>0||Jy(e.b.d,a.b.d+a.b.a)==0&&d.b<0||Jy(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,YNb(a,e,d))}h=$wnd.Math.min(h,ONb(a,f,h,d))}return h} +function ifd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw vbb(new Wdb('The vector chain must contain at least a source and a target point.'))}e=(sCb(a.b!=0),BD(a.a.a.c,8));nmd(b,e.a,e.b);i=new Oyd((!b.a&&(b.a=new xMd(y2,b,5)),b.a));g=Jsb(a,1);while(g.a<a.b-1){h=BD(Xsb(g),8);if(i.e!=i.i.gc()){c=BD(Dyd(i),469)}else{c=(Fhd(),d=new xkd,d);Myd(i,c)}ukd(c,h.a,h.b)}while(i.e!=i.i.gc()){Dyd(i);Eyd(i)}f=(sCb(a.b!=0),BD(a.c.b.c,8));gmd(b,f.a,f.b)} +function $lc(a,b){var c,d,e,f,g,h,i,j,k;c=0;for(e=new olb((tCb(0,a.c.length),BD(a.c[0],101)).g.b.j);e.a<e.c.c.length;){d=BD(mlb(e),11);d.p=c++}b==(Ucd(),Acd)?Okb(a,new gmc):Okb(a,new kmc);h=0;k=a.c.length-1;while(h<k){g=(tCb(h,a.c.length),BD(a.c[h],101));j=(tCb(k,a.c.length),BD(a.c[k],101));f=b==Acd?g.c:g.a;i=b==Acd?j.a:j.c;amc(g,b,(Ajc(),yjc),f);amc(j,b,xjc,i);++h;--k}h==k&&amc((tCb(h,a.c.length),BD(a.c[h],101)),b,(Ajc(),wjc),null)} +function UVc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;l=a.a.i+a.a.g/2;m=a.a.i+a.a.g/2;o=b.i+b.g/2;q=b.j+b.f/2;h=new f7c(o,q);j=BD(hkd(b,(Y9c(),C9c)),8);j.a=j.a+l;j.b=j.b+m;f=(h.b-j.b)/(h.a-j.a);d=h.b-f*h.a;p=c.i+c.g/2;r=c.j+c.f/2;i=new f7c(p,r);k=BD(hkd(c,C9c),8);k.a=k.a+l;k.b=k.b+m;g=(i.b-k.b)/(i.a-k.a);e=i.b-g*i.a;n=(d-e)/(g-f);if(j.a<n&&h.a<n||n<j.a&&n<h.a){return false}else if(k.a<n&&i.a<n||n<k.a&&n<i.a){return false}return true} +function gqd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;m=BD(Ohb(a.c,b),183);if(!m){throw vbb(new cqd('Edge did not exist in input.'))}j=Wpd(m);f=Fhe((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a));h=!f;if(h){n=new wB;c=new Rrd(a,j,n);Dhe((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),c);cC(m,Nte,n)}e=ikd(b,(Y9c(),Q8c));if(e){k=BD(hkd(b,Q8c),74);g=!k||Ehe(k);i=!g;if(i){l=new wB;d=new Zrd(l);reb(k,d);cC(m,'junctionPoints',l)}}Upd(m,'container',Mld(b).k);return null} +function eDb(a,b,c){var d,e,f,g,h,i,j,k;this.a=a;this.b=b;this.c=c;this.e=Ou(OC(GC(GM,1),Uhe,168,0,[new aDb(a,b),new aDb(b,c),new aDb(c,a)]));this.f=Ou(OC(GC(m1,1),nie,8,0,[a,b,c]));this.d=(d=c7c(R6c(this.b),this.a),e=c7c(R6c(this.c),this.a),f=c7c(R6c(this.c),this.b),g=d.a*(this.a.a+this.b.a)+d.b*(this.a.b+this.b.b),h=e.a*(this.a.a+this.c.a)+e.b*(this.a.b+this.c.b),i=2*(d.a*f.b-d.b*f.a),j=(e.b*g-d.b*h)/i,k=(d.a*h-e.a*g)/i,new f7c(j,k))} +function nvd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;m=new yC(a.p);cC(b,fue,m);if(c&&!(!a.f?null:vmb(a.f)).a.dc()){k=new wB;cC(b,'logs',k);h=0;for(o=new Dnb((!a.f?null:vmb(a.f)).b.Kc());o.b.Ob();){n=GD(o.b.Pb());l=new yC(n);tB(k,h);vB(k,h,l);++h}}if(d){j=new TB(a.q);cC(b,'executionTime',j)}if(!vmb(a.a).a.dc()){g=new wB;cC(b,Jte,g);h=0;for(f=new Dnb(vmb(a.a).b.Kc());f.b.Ob();){e=BD(f.b.Pb(),1949);i=new eC;tB(g,h);vB(g,h,i);nvd(e,i,c,d);++h}}} +function PZb(a,b){var c,d,e,f,g,h;f=a.c;g=a.d;QZb(a,null);RZb(a,null);b&&Ccb(DD(vNb(g,(wtc(),Msc))))?QZb(a,i_b(g.i,(KAc(),IAc),(Ucd(),zcd))):QZb(a,g);b&&Ccb(DD(vNb(f,(wtc(),etc))))?RZb(a,i_b(f.i,(KAc(),HAc),(Ucd(),Tcd))):RZb(a,f);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),70);e=BD(vNb(c,(Nyc(),Qwc)),272);e==(qad(),pad)?yNb(c,Qwc,oad):e==oad&&yNb(c,Qwc,pad)}h=Ccb(DD(vNb(a,(wtc(),ltc))));yNb(a,ltc,(Bcb(),h?false:true));a.a=w7c(a.a)} +function VQb(a,b,c){var d,e,f,g,h,i;d=0;for(f=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));f.e!=f.i.gc();){e=BD(Dyd(f),33);g='';(!e.n&&(e.n=new cUd(D2,e,1,7)),e.n).i==0||(g=BD(qud((!e.n&&(e.n=new cUd(D2,e,1,7)),e.n),0),137).a);h=new pRb(g);tNb(h,e);yNb(h,(HSb(),FSb),e);h.b=d++;h.d.a=e.i+e.g/2;h.d.b=e.j+e.f/2;h.e.a=$wnd.Math.max(e.g,1);h.e.b=$wnd.Math.max(e.f,1);Ekb(b.e,h);jrb(c.f,e,h);i=BD(hkd(e,(wSb(),mSb)),98);i==(dcd(),ccd)&&(i=bcd)}} +function XJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;c=nGb(new pGb,a.f);j=a.i[b.c.i.p];n=a.i[b.d.i.p];i=b.c;m=b.d;h=i.a.b;l=m.a.b;j.b||(h+=i.n.b);n.b||(l+=m.n.b);k=QD($wnd.Math.max(0,h-l));g=QD($wnd.Math.max(0,l-h));o=(p=$wnd.Math.max(1,BD(vNb(b,(Nyc(),eyc)),19).a),q=JJc(b.c.i.k,b.d.i.k),p*q);e=AFb(DFb(CFb(BFb(EFb(new FFb,o),g),c),BD(Ohb(a.k,b.c),121)));f=AFb(DFb(CFb(BFb(EFb(new FFb,o),k),c),BD(Ohb(a.k,b.d),121)));d=new qKc(e,f);a.c[b.p]=d} +function NEc(a,b,c,d){var e,f,g,h,i,j;g=new _Ec(a,b,c);i=new Bib(d,0);e=false;while(i.b<i.d.gc()){h=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),233));if(h==b||h==c){uib(i)}else if(!e&&Edb(REc(h.g,h.d[0]).a)>Edb(REc(g.g,g.d[0]).a)){sCb(i.b>0);i.a.Xb(i.c=--i.b);Aib(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new Rkb),h.e).Mc(b);j=(!h.e&&(h.e=new Rkb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new Rkb),h.e).Fc(g);++g.c}}}e||(d.c[d.c.length]=g,true)} +function odc(a){var b,c,d;if(fcd(BD(vNb(a,(Nyc(),Vxc)),98))){for(c=new olb(a.j);c.a<c.c.c.length;){b=BD(mlb(c),11);b.j==(Ucd(),Scd)&&(d=BD(vNb(b,(wtc(),gtc)),10),d?G0b(b,BD(vNb(d,Hsc),61)):b.e.c.length-b.g.c.length<0?G0b(b,zcd):G0b(b,Tcd))}}else{for(c=new olb(a.j);c.a<c.c.c.length;){b=BD(mlb(c),11);d=BD(vNb(b,(wtc(),gtc)),10);d?G0b(b,BD(vNb(d,Hsc),61)):b.e.c.length-b.g.c.length<0?G0b(b,(Ucd(),zcd)):G0b(b,(Ucd(),Tcd))}yNb(a,Vxc,(dcd(),acd))}} +function age(a){var b,c,d;switch(a){case 91:case 93:case 45:case 94:case 44:case 92:d='\\'+String.fromCharCode(a&aje);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(a<32){c=(b=a>>>0,'0'+b.toString(16));d='\\x'+qfb(c,c.length-2,c.length)}else if(a>=Tje){c=(b=a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&aje);}return d} +function yhb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new Vgb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);g<0&&(c=Jbb(c));i<0&&(d=Jbb(d));return ghb(Qbb(c,d))}e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?zhb(b.a,h,a.a,f):uhb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Hgb(),Ggb}k=zhb(a.a,f,b.a,h)}else{k=uhb(a.a,f,b.a,h)}}j=new Vgb(l,k.length,k);Jgb(j);return j} +function YPc(a){var b,c,d,e,f,g;this.e=new Rkb;this.a=new Rkb;for(c=a.b-1;c<3;c++){St(a,0,BD(Ut(a,0),8))}if(a.b<4){throw vbb(new Wdb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;TPc(this,a.b+this.b-1);g=new Rkb;f=new olb(this.e);for(b=0;b<this.b-1;b++){Ekb(g,ED(mlb(f)))}for(e=Jsb(a,0);e.b!=e.d.c;){d=BD(Xsb(e),8);Ekb(g,ED(mlb(f)));Ekb(this.a,new bQc(d,g));tCb(0,g.c.length);g.c.splice(0,1)}}} +function Bac(a,b){var c,d,e,f,g,h,i,j,k;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),f0b)){i=(j=BD(Rr(new Sr(ur(R_b(g).a.Kc(),new Sq))),17),k=BD(Rr(new Sr(ur(U_b(g).a.Kc(),new Sq))),17),!Ccb(DD(vNb(j,(wtc(),ltc))))||!Ccb(DD(vNb(k,ltc))))?b:sbd(b);zac(g,i)}for(d=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);i=Ccb(DD(vNb(c,(wtc(),ltc))))?sbd(b):b;yac(c,i)}}}} +function yZc(a,b,c,d,e){var f,g,h;if(c.f>=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=BD(Ikb(b.n,b.n.c.length-1),211);if(g.e+g.d+c.g+e<=d&&(f=BD(Ikb(b.n,b.n.c.length-1),211),f.f-a.f+c.f<=a.b||a.a.c.length==1)){EZc(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Ekb(b.b,c);h=BD(Ikb(b.n,b.n.c.length-1),211);Ekb(b.n,new VZc(b.s,h.f+h.a+b.i,b.i));QZc(BD(Ikb(b.n,b.n.c.length-1),211),c);GZc(b,c);return true}}return false} +function Zxd(a,b,c){var d,e,f,g;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,g=uud(a,b,c),c,b,f);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){g!=null&&(e=a.dj(g,e));e=a.cj(c,e);a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return g}else{g=uud(a,b,c);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){e=null;g!=null&&(e=a.dj(g,null));e=a.cj(c,e);!!e&&e.Fi()}return g}} +function YA(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} +function opc(a,b){var c,d,e,f,g;Odd(b,'Path-Like Graph Wrapping',1);if(a.b.c.length==0){Qdd(b);return}e=new Xoc(a);g=(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i)*e.f);c=g/(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i));if(e.b>c){Qdd(b);return}switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:f=new hpc;break;case 0:f=new Ync;break;default:f=new kpc;}d=f.Vf(a,e);if(!f.Wf()){switch(BD(vNb(a,Myc),338).g){case 2:d=tpc(e,d);break;case 1:d=rpc(e,d);}}npc(a,e,d);Qdd(b)} +function MFc(a,b){var c,d,e,f;Fub(a.d,a.e);a.c.a.$b();if(Edb(ED(vNb(b.j,(Nyc(),uwc))))!=0||Edb(ED(vNb(b.j,uwc)))!=0){c=dme;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;e<f;e++){d=WFc(a,b);if(d<c){c=d;ZFc(a);if(c==0){break}}}}else{c=Ohe;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;e<f;e++){d=XFc(a,b);if(d<c){c=d;ZFc(a);if(c==0){break}}}}} +function spc(a,b){var c,d,e,f,g,h,i,j;g=new Rkb;h=0;c=0;i=0;while(h<b.c.length-1&&c<a.gc()){d=BD(a.Xb(c),19).a+i;while((tCb(h+1,b.c.length),BD(b.c[h+1],19)).a<d){++h}j=0;f=d-(tCb(h,b.c.length),BD(b.c[h],19)).a;e=(tCb(h+1,b.c.length),BD(b.c[h+1],19)).a-d;f>e&&++j;Ekb(g,(tCb(h+j,b.c.length),BD(b.c[h+j],19)));i+=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a-d;++c;while(c<a.gc()&&BD(a.Xb(c),19).a+i<=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a){++c}h+=1+j}return g} +function RKd(a){var b,c,d,e,f,g,h;if(!a.d){h=new XNd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);ytd(h,RKd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}g=h.i;for(e=(!a.q&&(a.q=new cUd(n5,a,11,10)),new Fyd(a.q));e.e!=e.i.gc();++g){BD(Dyd(e),399)}ytd(h,(!a.q&&(a.q=new cUd(n5,a,11,10)),a.q));vud(h);a.d=new nNd((BD(qud(ZKd((NFd(),MFd).o),9),18),h.i),h.g);a.e=BD(h.g,673);a.e==null&&(a.e=LKd);$Kd(a).b&=-17}return a.d} +function M2d(a,b,c,d){var e,f,g,h,i,j;j=S6d(a.e.Tg(),b);i=0;e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(pb(f,c)){return i}++i}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(j.rl(f.ak())){if(pb(c,f.dd())){return i}++i}}if(d){i=0;for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(PD(c)===PD(a3d(a,BD(f.dd(),56)))){return i}++i}}}}else{for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(f.dd()==null){return i}++i}}}return -1} +function aed(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;mmb();Okb(a,new Jed);g=Ru(a);n=new Rkb;m=new Rkb;h=null;i=0;while(g.b!=0){f=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),157);if(!h||red(h)*qed(h)/2<red(f)*qed(f)){h=f;n.c[n.c.length]=f}else{i+=red(f)*qed(f);m.c[m.c.length]=f;if(m.c.length>1&&(i>red(h)*qed(h)/2||g.b==0)){l=new wed(m);k=red(h)/qed(h);j=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),j);h=l;n.c[n.c.length]=l;i=0;m.c=KC(SI,Uhe,1,0,5,1)}}}Gkb(n,m);return n} +function y6d(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.mh(b)){k=(n=b,!n?null:BD(d,49).xh(n));if(k){p=c.bh(b,a.a);o=b.t;if(o>1||o==-1){l=BD(p,69);m=BD(k,69);if(l.dc()){m.$b()}else{g=!!zUd(b);f=0;for(h=a.a?l.Kc():l.Zh();h.Ob();){j=BD(h.Pb(),56);e=BD(Wrb(a,j),56);if(!e){if(a.b&&!g){m.Xh(f,j);++f}}else{if(g){i=m.Xc(e);i==-1?m.Xh(f,e):f!=i&&m.ji(f,e)}else{m.Xh(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=Wrb(a,p);e==null?a.b&&!zUd(b)&&k.Wb(p):k.Wb(e)}}}}} +function E6b(a,b){var c,d,e,f,g,h,i,j;c=new L6b;for(e=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(OZb(d)){continue}h=d.c.i;if(F6b(h,C6b)){j=G6b(a,h,C6b,B6b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new Rkb);Ekb(c.a,h)}}for(g=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);if(OZb(f)){continue}i=f.d.i;if(F6b(i,B6b)){j=G6b(a,i,B6b,C6b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new Rkb);Ekb(c.c,i)}}return c} +function Khb(a){Dhb();var b,c,d,e;b=QD(a);if(a<Chb.length){return Chb[b]}else if(a<=50){return Pgb((Hgb(),Egb),b)}else if(a<=_ie){return Qgb(Pgb(Bhb[1],b),b)}if(a>1000000){throw vbb(new ocb('power of ten too big'))}if(a<=Ohe){return Qgb(Pgb(Bhb[1],b),b)}d=Pgb(Bhb[1],Ohe);e=d;c=Cbb(a-Ohe);b=QD(a%Ohe);while(ybb(c,Ohe)>0){e=Ogb(e,d);c=Qbb(c,Ohe)}e=Ogb(e,Pgb(Bhb[1],b));e=Qgb(e,Ohe);c=Cbb(a-Ohe);while(ybb(c,Ohe)>0){e=Qgb(e,Ohe);c=Qbb(c,Ohe)}e=Qgb(e,b);return e} +function X5b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Hierarchical port dummy size processing',1);i=new Rkb;k=new Rkb;d=Edb(ED(vNb(a,(Nyc(),myc))));c=d*2;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);i.c=KC(SI,Uhe,1,0,5,1);k.c=KC(SI,Uhe,1,0,5,1);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){j=BD(vNb(g,(wtc(),Hsc)),61);j==(Ucd(),Acd)?(i.c[i.c.length]=g,true):j==Rcd&&(k.c[k.c.length]=g,true)}}Y5b(i,true,c);Y5b(k,false,c)}Qdd(b)} +function Oac(a,b){var c,d,e,f,g,h,i;Odd(b,'Layer constraint postprocessing',1);i=a.b;if(i.c.length!=0){d=(tCb(0,i.c.length),BD(i.c[0],29));g=BD(Ikb(i,i.c.length-1),29);c=new H1b(a);f=new H1b(a);Mac(a,d,g,c,f);c.a.c.length==0||(wCb(0,i.c.length),aCb(i.c,0,c));f.a.c.length==0||(i.c[i.c.length]=f,true)}if(wNb(a,(wtc(),Lsc))){e=new H1b(a);h=new H1b(a);Pac(a,e,h);e.a.c.length==0||(wCb(0,i.c.length),aCb(i.c,0,e));h.a.c.length==0||(i.c[i.c.length]=h,true)}Qdd(b)} +function b6b(a){var b,c,d,e,f,g,h,i,j,k;for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(h.k!=(j0b(),e0b)){continue}e=BD(vNb(h,(wtc(),Hsc)),61);if(e==(Ucd(),zcd)||e==Tcd){for(d=new Sr(ur(O_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);b=c.a;if(b.b==0){continue}j=c.c;if(j.i==h){f=(sCb(b.b!=0),BD(b.a.a.c,8));f.b=l7c(OC(GC(m1,1),nie,8,0,[j.i.n,j.n,j.a])).b}k=c.d;if(k.i==h){g=(sCb(b.b!=0),BD(b.c.b.c,8));g.b=l7c(OC(GC(m1,1),nie,8,0,[k.i.n,k.n,k.a])).b}}}}} +function Tec(a,b){var c,d,e,f,g,h,i;Odd(b,'Sort By Input Model '+vNb(a,(Nyc(),ywc)),1);e=0;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);i=e==0?0:e-1;h=BD(Ikb(a.b,i),29);for(g=new olb(c.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(PD(vNb(f,Vxc))!==PD((dcd(),Zbd))&&PD(vNb(f,Vxc))!==PD($bd)){mmb();Okb(f.j,new Tnc(h,Xec(f)));Sdd(b,'Node '+f+' ports: '+f.j)}}mmb();Okb(c.a,new Bnc(h,BD(vNb(a,ywc),339),BD(vNb(a,wwc),378)));Sdd(b,'Layer '+e+': '+c);++e}Qdd(b)} +function U1b(a,b){var c,d,e,f;f=P1b(b);MAb(new YAb(null,(!b.c&&(b.c=new cUd(F2,b,9,9)),new Kub(b.c,16))),new i2b(f));e=BD(vNb(f,(wtc(),Ksc)),21);O1b(b,e);if(e.Hc((Orc(),Hrc))){for(d=new Fyd((!b.c&&(b.c=new cUd(F2,b,9,9)),b.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Y1b(a,b,f,c)}}BD(hkd(b,(Nyc(),Fxc)),174).gc()!=0&&L1b(b,f);Ccb(DD(vNb(f,Mxc)))&&e.Fc(Mrc);wNb(f,hyc)&&Wyc(new ezc(Edb(ED(vNb(f,hyc)))),f);PD(hkd(b,axc))===PD((hbd(),ebd))?V1b(a,b,f):T1b(a,b,f);return f} +function hic(a,b,c,d){var e,f,g;this.j=new Rkb;this.k=new Rkb;this.b=new Rkb;this.c=new Rkb;this.e=new I6c;this.i=new s7c;this.f=new lEb;this.d=new Rkb;this.g=new Rkb;Ekb(this.b,a);Ekb(this.b,b);this.e.c=$wnd.Math.min(a.a,b.a);this.e.d=$wnd.Math.min(a.b,b.b);this.e.b=$wnd.Math.abs(a.a-b.a);this.e.a=$wnd.Math.abs(a.b-b.b);e=BD(vNb(d,(Nyc(),jxc)),74);if(e){for(g=Jsb(e,0);g.b!=g.d.c;){f=BD(Xsb(g),8);ADb(f.a,a.a)&&Dsb(this.i,f)}}!!c&&Ekb(this.j,c);Ekb(this.k,d)} +function oTb(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new gub(new ETb(c));h=KC(sbb,dle,25,a.f.e.c.length,16,1);Glb(h,h.length);c[b.b]=0;for(j=new olb(a.f.e);j.a<j.c.c.length;){i=BD(mlb(j),144);i.b!=b.b&&(c[i.b]=Ohe);zCb(cub(k,i))}while(k.b.c.length!=0){l=BD(dub(k),144);h[l.b]=true;for(f=au(new bu(a.b,l),0);f.c;){e=BD(uu(f),282);m=rTb(e,l);if(h[m.b]){continue}wNb(e,(bTb(),RSb))?(g=Edb(ED(vNb(e,RSb)))):(g=a.c);d=c[l.b]+g;if(d<c[m.b]){c[m.b]=d;eub(k,m);zCb(cub(k,m))}}}} +function xMc(a,b,c){var d,e,f,g,h,i,j,k,l;e=true;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);j=Qje;k=null;for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);l=Edb(b.p[h.p])+Edb(b.d[h.p])-h.d.d;d=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a;if(l>j&&d>j){k=h;j=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c.n&&Sdd(c,'bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c.n&&Sdd(c,b+' is feasible: '+e);return e} +function XNc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new olb(a);k.a<k.c.c.length;){j=BD(mlb(k),112);j.g=h--;e=Tbb(tAb(PAb(JAb(new YAb(null,new Kub(j.f,16)),new ZNc),new _Nc)).d);f=Tbb(tAb(PAb(JAb(new YAb(null,new Kub(j.k,16)),new bOc),new dOc)).d);g=e;i=f;if(!d){g=Tbb(tAb(PAb(new YAb(null,new Kub(j.f,16)),new fOc)).d);i=Tbb(tAb(PAb(new YAb(null,new Kub(j.k,16)),new hOc)).d)}j.d=g;j.a=e;j.i=i;j.b=f;i==0?(Gsb(c,j,c.c.b,c.c),true):g==0&&(Gsb(b,j,b.c.b,b.c),true)}} +function $8b(a,b,c,d){var e,f,g,h,i,j,k;if(c.d.i==b.i){return}e=new b0b(a);__b(e,(j0b(),g0b));yNb(e,(wtc(),$sc),c);yNb(e,(Nyc(),Vxc),(dcd(),$bd));d.c[d.c.length]=e;g=new H0b;F0b(g,e);G0b(g,(Ucd(),Tcd));h=new H0b;F0b(h,e);G0b(h,zcd);k=c.d;RZb(c,g);f=new UZb;tNb(f,c);yNb(f,jxc,null);QZb(f,h);RZb(f,k);j=new Bib(c.b,0);while(j.b<j.d.gc()){i=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),70));if(PD(vNb(i,Qwc))===PD((qad(),oad))){yNb(i,Dsc,c);uib(j);Ekb(f.b,i)}}a9b(e,g,h)} +function Z8b(a,b,c,d){var e,f,g,h,i,j,k;if(c.c.i==b.i){return}e=new b0b(a);__b(e,(j0b(),g0b));yNb(e,(wtc(),$sc),c);yNb(e,(Nyc(),Vxc),(dcd(),$bd));d.c[d.c.length]=e;g=new H0b;F0b(g,e);G0b(g,(Ucd(),Tcd));h=new H0b;F0b(h,e);G0b(h,zcd);RZb(c,g);f=new UZb;tNb(f,c);yNb(f,jxc,null);QZb(f,h);RZb(f,b);a9b(e,g,h);j=new Bib(c.b,0);while(j.b<j.d.gc()){i=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),70));k=BD(vNb(i,Qwc),272);if(k==(qad(),oad)){wNb(i,Dsc)||yNb(i,Dsc,c);uib(j);Ekb(f.b,i)}}} +function dDc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=new Rkb;r=Gx(d);q=b*a.a;l=0;o=0;f=new Tqb;g=new Tqb;h=new Rkb;s=0;t=0;n=0;p=0;j=0;k=0;while(r.a.gc()!=0){i=hDc(r,e,g);if(i){r.a.Bc(i)!=null;h.c[h.c.length]=i;f.a.zc(i,f);o=a.f[i.p];s+=a.e[i.p]-o*a.b;l=a.c[i.p];t+=l*a.b;k+=o*a.b;p+=a.e[i.p]}if(!i||r.a.gc()==0||s>=q&&a.e[i.p]>o*a.b||t>=c*q){m.c[m.c.length]=h;h=new Rkb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new vgd(n,m)} +function q4c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new $ib(a.c.b)).a.vc().Kc(),new djb(j));c.a.Ob();){b=(h=BD(c.a.Pb(),42),BD(h.dd(),149));e=b.a;e==null&&(e='');d=i4c(a.c,e);!d&&e.length==0&&(d=u4c(a));!!d&&!ze(d.c,b,false)&&Dsb(d.c,b)}for(g=Jsb(a.a,0);g.b!=g.d.c;){f=BD(Xsb(g),478);k=j4c(a.c,f.a);n=j4c(a.c,f.b);!!k&&!!n&&Dsb(k.c,new vgd(n,f.c))}Osb(a.a);for(m=Jsb(a.b,0);m.b!=m.d.c;){l=BD(Xsb(m),478);b=g4c(a.c,l.a);i=j4c(a.c,l.b);!!b&&!!i&&B3c(b,i,l.c)}Osb(a.b)} +function qvd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new fC(a);g=new ird;e=(ko(g.g),ko(g.j),Uhb(g.b),ko(g.d),ko(g.i),Uhb(g.k),Uhb(g.c),Uhb(g.e),n=drd(g,f,null),ard(g,f),n);if(b){j=new fC(b);h=rvd(j);jfd(e,OC(GC(g2,1),Uhe,527,0,[h]))}m=false;l=false;if(c){j=new fC(c);que in j.a&&(m=aC(j,que).ge().a);rue in j.a&&(l=aC(j,rue).ge().a)}k=Vdd(Xdd(new Zdd,m),l);t2c(new w2c,e,k);que in f.a&&cC(f,que,null);if(m||l){i=new eC;nvd(k,i,m,l);cC(f,que,i)}d=new Prd(g);Ghe(new _ud(e),d)} +function pA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new nB;j=OC(GC(WD,1),oje,25,15,[0]);e=-1;f=0;d=0;for(i=0;i<a.b.c.length;++i){k=BD(Ikb(a.b,i),434);if(k.b>0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!wA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!wA(b,j,k,0,g)){return 0}}}else{e=-1;if(bfb(k.c,0)==32){l=j[0];uA(b,j);if(j[0]>l){continue}}else if(ofb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!mB(g,c)){return 0}return j[0]} +function SKd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new CNd;h=new CNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(f=new Fyd(_Kd(a));f.e!=f.i.gc();){e=BD(Dyd(f),26);ytd(i,SKd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));d.e!=d.i.gc();){c=BD(Dyd(d),170);JD(c,99)&&wtd(h,BD(c,18))}vud(h);a.r=new UNd(a,(BD(qud(ZKd((NFd(),MFd).o),6),18),h.i),h.g);ytd(i,a.r);vud(i);a.f=new nNd((BD(qud(ZKd(MFd.o),5),18),i.i),i.g);$Kd(a).b&=-3}return a.f} +function rMb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=KC(WD,oje,25,g,15,1);e=KC(WD,oje,25,g,15,1);c=a.p;b=KC(WD,oje,25,c,15,1);f=KC(WD,oje,25,c,15,1);for(j=0;j<g;j++){l=0;while(l<c&&!YMb(a,j,l)){++l}d[j]=l}for(k=0;k<g;k++){l=c-1;while(l>=0&&!YMb(a,k,l)){--l}e[k]=l}for(n=0;n<c;n++){h=0;while(h<g&&!YMb(a,h,n)){++h}b[n]=h}for(o=0;o<c;o++){h=g-1;while(h>=0&&!YMb(a,h,o)){--h}f[o]=h}for(i=0;i<g;i++){for(m=0;m<c;m++){i<f[m]&&i>b[m]&&m<e[i]&&m>d[i]&&aNb(a,i,m,false,true)}}} +function lRb(a){var b,c,d,e,f,g,h,i;c=Ccb(DD(vNb(a,(wSb(),cSb))));f=a.a.c.d;h=a.a.d.d;if(c){g=Y6c(c7c(new f7c(h.a,h.b),f),0.5);i=Y6c(R6c(a.e),0.5);b=c7c(P6c(new f7c(f.a,f.b),g),i);a7c(a.d,b)}else{e=Edb(ED(vNb(a.a,tSb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}} +function Qge(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=KC(TD,$ie,25,f,15,1);ACb(0,f,a.length);ACb(0,f,i.length);ffb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e<f;e++){d=i[e];lde();if(d<=32&&(kde[d]&2)!=0){if(h){!c&&(c=new Jfb(a));Gfb(c,e-g++)}else{h=b;if(d!=32){!c&&(c=new Jfb(a));kcb(c,e-g,e-g+1,String.fromCharCode(32))}}}else{h=false}}if(h){if(!c){return a.substr(0,f-1)}else{f=c.a.length;return f>0?qfb(c.a,0,f-1):''}}else{return !c?a:c.a}} +function DPb(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Yle),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new GPb)));p4c(a,Yle,Zle,Ksd(BPb));p4c(a,Yle,$le,Ksd(vPb));p4c(a,Yle,_le,Ksd(qPb));p4c(a,Yle,ame,Ksd(wPb));p4c(a,Yle,Zke,Ksd(zPb));p4c(a,Yle,$ke,Ksd(yPb));p4c(a,Yle,Yke,Ksd(APb));p4c(a,Yle,_ke,Ksd(xPb));p4c(a,Yle,Tle,Ksd(sPb));p4c(a,Yle,Ule,Ksd(rPb));p4c(a,Yle,Vle,Ksd(tPb));p4c(a,Yle,Wle,Ksd(uPb))} +function Zbc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));e=0;if(b){g=new H0b;yNb(g,(wtc(),$sc),b);yNb(f,$sc,b.i);G0b(g,(Ucd(),Tcd));F0b(g,f);m=k_b(b.e);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];RZb(i,g)}yNb(b,gtc,f);++e}if(c){h=new H0b;yNb(f,(wtc(),$sc),c.i);yNb(h,$sc,c);G0b(h,(Ucd(),zcd));F0b(h,f);m=k_b(c.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];QZb(i,h)}yNb(c,gtc,f);++e}yNb(f,(wtc(),ysc),meb(e));d.c[d.c.length]=f;return f} +function Smd(){Smd=ccb;Qmd=OC(GC(TD,1),$ie,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]);Rmd=new RegExp('[ \t\n\r\f]+');try{Pmd=OC(GC(c6,1),Uhe,2015,0,[new EQd((GA(),IA("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",LA((KA(),KA(),JA))))),new EQd(IA("yyyy-MM-dd'T'HH:mm:ss'.'SSS",LA((null,JA)))),new EQd(IA("yyyy-MM-dd'T'HH:mm:ss",LA((null,JA)))),new EQd(IA("yyyy-MM-dd'T'HH:mm",LA((null,JA)))),new EQd(IA('yyyy-MM-dd',LA((null,JA))))])}catch(a){a=ubb(a);if(!JD(a,78))throw vbb(a)}} +function qgb(a){var b,c,d,e;d=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0||a.a==0&&a.f!=-1&&a.e<0){return d}b=pgb(a)<0?1:0;c=a.e;e=(d.length+1+$wnd.Math.abs(QD(a.e)),new Vfb);b==1&&(e.a+='-',e);if(a.e>0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>egb.length;c-=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(c));Qfb(e,d.substr(b))}else{c=b-c;Qfb(e,qfb(d,b,QD(c)));e.a+='.';Qfb(e,pfb(d,QD(c)))}}else{Qfb(e,d.substr(b));for(;c<-egb.length;c+=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(-c))}return e.a} +function v6c(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=c7c(new f7c(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=P6c(new f7c(c.a,c.b),Y6c(new f7c(d.a,d.b),0.5));f=S6c(a,e);g=S6c(P6c(new f7c(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f<g&&f<=h){return new f7c(a.a,a.b)}if(g<=h){return P6c(new f7c(a.a,a.b),b)}return null}else{return null}}else{return l>=0&&l<=1&&m>=0&&m<=1?P6c(new f7c(a.a,a.b),Y6c(new f7c(b.a,b.b),l)):null}} +function OTb(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){e=BD(vNb(g,Hsc),61);e==(Ucd(),zcd)?(g.n.a+=c.a-b.a):e==Rcd&&(g.n.b+=c.b-b.b)}}}f=a.d;a.f.a=c.a-f.b-f.c;a.f.b=c.b-f.d-f.a} +function H5b(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k==(j0b(),e0b)){e=BD(vNb(f,Hsc),61);e==(Ucd(),zcd)?(f.n.a+=c.a-b.a):e==Rcd&&(f.n.b+=c.b-b.b)}}}h=a.d;a.f.a=c.a-h.b-h.c;a.f.b=c.b-h.d-h.a} +function kMc(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=DMc(a);for(k=(h=(new Pib(b)).a.vc().Kc(),new Vib(h));k.a.Ob();){j=(e=BD(k.a.Pb(),42),BD(e.cd(),10));l=0;m=0;l=j.d.d;m=j.o.b+j.d.a;a.d[j.p]=0;c=j;while((f=a.a[c.p])!=j){d=FMc(c,f);i=0;a.c==(YLc(),WLc)?(i=d.d.n.b+d.d.a.b-d.c.n.b-d.c.a.b):(i=d.c.n.b+d.c.a.b-d.d.n.b-d.d.a.b);g=Edb(a.d[c.p])+i;a.d[f.p]=g;l=$wnd.Math.max(l,f.d.d-g);m=$wnd.Math.max(m,g+f.o.b+f.d.a);c=f}c=j;do{a.d[c.p]=Edb(a.d[c.p])+l;c=a.a[c.p]}while(c!=j);a.b[j.p]=l+m}} +function LOb(a){var b,c,d,e,f,g,h,i,j,k,l,m;a.b=false;l=Pje;i=Qje;m=Pje;j=Qje;for(d=a.e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),266);e=c.a;l=$wnd.Math.min(l,e.c);i=$wnd.Math.max(i,e.c+e.b);m=$wnd.Math.min(m,e.d);j=$wnd.Math.max(j,e.d+e.a);for(g=new olb(c.c);g.a<g.c.c.length;){f=BD(mlb(g),395);b=f.a;if(b.a){k=e.d+f.b.b;h=k+f.c;m=$wnd.Math.min(m,k);j=$wnd.Math.max(j,h)}else{k=e.c+f.b.a;h=k+f.c;l=$wnd.Math.min(l,k);i=$wnd.Math.max(i,h)}}}a.a=new f7c(i-l,j-m);a.c=new f7c(l+a.d.a,m+a.d.b)} +function xZc(a,b,c){var d,e,f,g,h,i,j,k,l;l=new Rkb;k=new x$c(0,c);f=0;s$c(k,new PZc(0,0,k,c));e=0;for(j=new Fyd(a);j.e!=j.i.gc();){i=BD(Dyd(j),33);d=BD(Ikb(k.a,k.a.c.length-1),187);h=e+i.g+(BD(Ikb(k.a,0),187).b.c.length==0?0:c);if(h>b){e=0;f+=k.b+c;l.c[l.c.length]=k;k=new x$c(f,c);d=new PZc(0,k.f,k,c);s$c(k,d);e=0}if(d.b.c.length==0||i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f){EZc(d,i)}else{g=new PZc(d.s+d.r+c,k.f,k,c);s$c(k,g);EZc(g,i)}e=i.i+i.g}l.c[l.c.length]=k;return l} +function OKd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new GNd(a);b=new KNd;c=KKd;h=c.a.zc(a,c);if(h==null){for(g=new Fyd(_Kd(a));g.e!=g.i.gc();){f=BD(Dyd(g),26);ytd(i,OKd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));e.e!=e.i.gc();){d=BD(Dyd(e),170);JD(d,322)&&wtd(b,BD(d,34))}vud(b);a.k=new PNd(a,(BD(qud(ZKd((NFd(),MFd).o),7),18),b.i),b.g);ytd(i,a.k);vud(i);a.a=new nNd((BD(qud(ZKd(MFd.o),4),18),i.i),i.g);$Kd(a).b&=-2}return a.a} +function vZc(a,b,c,d,e,f,g){var h,i,j,k,l,m;l=false;i=ZZc(c.q,b.f+b.b-c.q.f);m=e-(c.q.e+i-g);if(m<d.g){return false}j=f==a.c.length-1&&m>=(tCb(f,a.c.length),BD(a.c[f],200)).e;k=(h=MZc(d,m,false),h.a);if(k>b.b&&!j){return false}if(j||k<=b.b){if(j&&k>b.b){c.d=k;KZc(c,JZc(c,k))}else{$Zc(c.q,i);c.c=true}KZc(d,e-(c.s+c.r));OZc(d,c.q.e+c.q.d,b.f);s$c(b,d);if(a.c.length>f){v$c((tCb(f,a.c.length),BD(a.c[f],200)),d);(tCb(f,a.c.length),BD(a.c[f],200)).a.c.length==0&&Kkb(a,f)}l=true}return l} +function C2d(a,b,c,d){var e,f,g,h,i,j,k;k=S6d(a.e.Tg(),b);e=0;f=BD(a.g,119);i=null;Q6d();if(BD(b,66).Oj()){for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(pb(g,c)){i=g;break}++e}}}else if(c!=null){for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(pb(c,g.dd())){i=g;break}++e}}}else{for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(g.dd()==null){i=g;break}++e}}}if(i){if(oid(a.e)){j=b.$j()?new O7d(a.e,4,b,c,null,e,true):H2d(a,b.Kj()?2:1,b,c,b.zj(),-1,true);d?d.Ei(j):(d=j)}d=B2d(a,i,d)}return d} +function kYc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p;o=0;p=0;i=e.c;h=e.b;k=c.f;n=c.g;switch(b.g){case 0:o=d.i+d.g+g;a.c?(p=tYc(o,f,d,g)):(p=d.j);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 1:p=d.j+d.f+g;a.c?(o=sYc(p,f,d,g)):(o=d.i);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 2:o=i+g;p=0;m=i+g+n;j=$wnd.Math.max(h,k);break;case 3:o=0;p=h+g;m=$wnd.Math.max(i,n);j=h+g+k;break;default:throw vbb(new Wdb('IllegalPlacementOption.'));}l=new e$c(a.a,m,j,b,o,p);return l} +function R2b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.d;l=BD(vNb(a,(wtc(),vtc)),15);b=BD(vNb(a,tsc),15);if(!l&&!b){return}f=Edb(ED(pBc(a,(Nyc(),iyc))));g=Edb(ED(pBc(a,jyc)));m=0;if(l){j=0;for(e=l.Kc();e.Ob();){d=BD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);m+=d.o.a}m+=f*(l.gc()-1);h.d+=j+g}c=0;if(b){j=0;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);c+=d.o.a}c+=f*(b.gc()-1);h.a+=j+g}i=$wnd.Math.max(m,c);if(i>a.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}} +function rvd(a){var b,c,d,e,f,g,h,i;f=new b2c;Z1c(f,(Y1c(),V1c));for(d=(e=$B(a,KC(ZI,nie,2,0,6,1)),new vib(new amb((new mC(a,e)).b)));d.b<d.d.gc();){c=(sCb(d.b<d.d.gc()),GD(d.d.Xb(d.c=d.b++)));g=k4c(lvd,c);if(g){b=aC(a,c);b.je()?(h=b.je().a):b.ge()?(h=''+b.ge().a):b.he()?(h=''+b.he().a):(h=b.Ib());i=o5c(g,h);if(i!=null){(uqb(g.j,(N5c(),K5c))||uqb(g.j,L5c))&&xNb(_1c(f,E2),g,i);uqb(g.j,I5c)&&xNb(_1c(f,B2),g,i);uqb(g.j,M5c)&&xNb(_1c(f,F2),g,i);uqb(g.j,J5c)&&xNb(_1c(f,D2),g,i)}}}return f} +function J2d(a,b,c,d){var e,f,g,h,i,j;i=S6d(a.e.Tg(),b);f=BD(a.g,119);if(T6d(a.e,b)){e=0;for(h=0;h<a.i;++h){g=f[h];if(i.rl(g.ak())){if(e==c){Q6d();if(BD(b,66).Oj()){return g}else{j=g.dd();j!=null&&d&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(j=b3d(a,b,h,e,j));return j}}++e}}throw vbb(new qcb(gve+c+mue+e))}else{e=0;for(h=0;h<a.i;++h){g=f[h];if(i.rl(g.ak())){Q6d();if(BD(b,66).Oj()){return g}else{j=g.dd();j!=null&&d&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(j=b3d(a,b,h,e,j));return j}}++e}return b.zj()}} +function K2d(a,b,c){var d,e,f,g,h,i,j,k;e=BD(a.g,119);if(T6d(a.e,b)){return Q6d(),BD(b,66).Oj()?new R7d(b,a):new f7d(b,a)}else{j=S6d(a.e.Tg(),b);d=0;for(h=0;h<a.i;++h){f=e[h];g=f.ak();if(j.rl(g)){Q6d();if(BD(b,66).Oj()){return f}else if(g==(m8d(),k8d)||g==h8d){i=new Wfb(fcb(f.dd()));while(++h<a.i){f=e[h];g=f.ak();(g==k8d||g==h8d)&&Qfb(i,fcb(f.dd()))}return j6d(BD(b.Yj(),148),i.a)}else{k=f.dd();k!=null&&c&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(k=b3d(a,b,h,d,k));return k}}++d}return b.zj()}} +function MZc(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=0;g=a.t;e=0;d=0;i=0;m=0;l=0;if(c){a.n.c=KC(SI,Uhe,1,0,5,1);Ekb(a.n,new VZc(a.s,a.t,a.i))}h=0;for(k=new olb(a.b);k.a<k.c.c.length;){j=BD(mlb(k),33);if(f+j.g+(h>0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Ekb(a.n,new VZc(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&QZc(BD(Ikb(a.n,l),211),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;u$c(a.j)}return new J6c(a.s,a.t,e,d)} +function $fb(a,b,c,d,e){Zfb();var f,g,h,i,j,k,l,m,n;vCb(a,'src');vCb(c,'dest');m=rb(a);i=rb(c);rCb((m.i&4)!=0,'srcType is not an array');rCb((i.i&4)!=0,'destType is not an array');l=m.c;g=i.c;rCb((l.i&1)!=0?l==g:(g.i&1)==0,"Array types don't match");n=a.length;j=c.length;if(b<0||d<0||e<0||b+e>n||d+e>j){throw vbb(new pcb)}if((l.i&1)==0&&m!=i){k=CD(a);f=CD(c);if(PD(a)===PD(c)&&b<d){b+=e;for(h=d+e;h-->d;){NC(f,h,k[--b])}}else{for(h=d+e;d<h;){NC(f,d++,k[b++])}}}else e>0&&$Bb(a,b,c,d,e,true)} +function phb(){phb=ccb;nhb=OC(GC(WD,1),oje,25,15,[Rie,1162261467,Iie,1220703125,362797056,1977326743,Iie,387420489,Jje,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,Iie,1291467969,1544804416,1838265625,60466176]);ohb=OC(GC(WD,1),oje,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])} +function soc(a){var b,c,d,e,f,g,h,i;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(g=new olb(Mu(d.a));g.a<g.c.c.length;){f=BD(mlb(g),10);if(ioc(f)){c=BD(vNb(f,(wtc(),usc)),305);if(!c.g&&!!c.d){b=c;i=c.d;while(i){roc(i.i,i.k,false,true);zoc(b.a);zoc(i.i);zoc(i.k);zoc(i.b);RZb(i.c,b.c.d);RZb(b.c,null);$_b(b.a,null);$_b(i.i,null);$_b(i.k,null);$_b(i.b,null);h=new goc(b.i,i.a,b.e,i.j,i.f);h.k=b.k;h.n=b.n;h.b=b.b;h.c=i.c;h.g=b.g;h.d=i.d;yNb(b.i,usc,h);yNb(i.a,usc,h);i=i.d;b=h}}}}}} +function Xfe(a,b){var c,d,e,f,g;g=BD(b,136);Yfe(a);Yfe(g);if(g.b==null)return;a.c=true;if(a.b==null){a.b=KC(WD,oje,25,g.b.length,15,1);$fb(g.b,0,a.b,0,g.b.length);return}f=KC(WD,oje,25,a.b.length+g.b.length,15,1);for(c=0,d=0,e=0;c<a.b.length||d<g.b.length;){if(c>=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]<a.b[c]||g.b[d]===a.b[c]&&g.b[d+1]<a.b[c+1]){f[e++]=g.b[d++];f[e++]=g.b[d++]}else{f[e++]=a.b[c++];f[e++]=a.b[c++]}}a.b=f} +function S6b(a,b){var c,d,e,f,g,h,i,j,k,l;c=Ccb(DD(vNb(a,(wtc(),Usc))));h=Ccb(DD(vNb(b,Usc)));d=BD(vNb(a,Vsc),11);i=BD(vNb(b,Vsc),11);e=BD(vNb(a,Wsc),11);j=BD(vNb(b,Wsc),11);k=!!d&&d==i;l=!!e&&e==j;if(!c&&!h){return new Z6b(BD(mlb(new olb(a.j)),11).p==BD(mlb(new olb(b.j)),11).p,k,l)}f=(!Ccb(DD(vNb(a,Usc)))||Ccb(DD(vNb(a,Tsc))))&&(!Ccb(DD(vNb(b,Usc)))||Ccb(DD(vNb(b,Tsc))));g=(!Ccb(DD(vNb(a,Usc)))||!Ccb(DD(vNb(a,Tsc))))&&(!Ccb(DD(vNb(b,Usc)))||!Ccb(DD(vNb(b,Tsc))));return new Z6b(k&&f||l&&g,k,l)} +function HZc(a){var b,c,d,e,f,g,h,i;d=0;c=0;i=new Psb;b=0;for(h=new olb(a.n);h.a<h.c.c.length;){g=BD(mlb(h),211);if(g.c.c.length==0){Gsb(i,g,i.c.b,i.c)}else{d=$wnd.Math.max(d,g.d);c+=g.a+(b>0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=Pje;a.p=Pje;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),33);a.p=$wnd.Math.min(a.p,e.g);a.g=$wnd.Math.max(a.g,e.g);a.f=$wnd.Math.max(a.f,e.f);a.o=$wnd.Math.min(a.o,e.f);a.e+=e.f+a.i}a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);u$c(a.j)} +function Sld(a){var b,c,d,e;if((a.Db&64)!=0)return Mkd(a);b=new Wfb(_se);d=a.k;if(!d){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){e=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!e||Qfb(Qfb((b.a+=' "',b),e),'"')}}else{Qfb(Qfb((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new y5d(z2,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Qfb(b,Eb(new Gb,new Fyd(a.b)));c&&(b.a+=']',b);b.a+=gne;c&&(b.a+='[',b);Qfb(b,Eb(new Gb,new Fyd(a.c)));c&&(b.a+=']',b);return b.a} +function TQd(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.ne();i=null;if(h!=null){b.a+=''+h}else{g=a.a.Dj();if(g!=null){f=hfb(g,wfb(91));if(f!=-1){i=g.substr(f);b.a+=''+qfb(g==null?Xhe:(uCb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new Fyd(a.d);d.e!=d.i.gc();){c=BD(Dyd(d),87);e?(e=false):(b.a+=She,b);TQd(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';TQd(a.b,b)}else{if(a.f){b.a+=' extends ';TQd(a.f,b)}}}} +function Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Jkb(v.a,a,0);d=Jkb(w.a,b,0);t=BD(W_b(a,(KAc(),HAc)).Kc().Pb(),11);C=BD(W_b(a,IAc).Kc().Pb(),11);u=BD(W_b(b,HAc).Kc().Pb(),11);D=BD(W_b(b,IAc).Kc().Pb(),11);r=k_b(t.e);A=k_b(C.g);s=k_b(u.e);B=k_b(D.g);Z_b(a,d,w);for(g=s,k=0,o=g.length;k<o;++k){e=g[k];RZb(e,t)}for(h=B,l=0,p=h.length;l<p;++l){e=h[l];QZb(e,C)}Z_b(b,c,v);for(i=r,m=0,q=i.length;m<q;++m){e=i[m];RZb(e,u)}for(f=A,j=0,n=f.length;j<n;++j){e=f[j];QZb(e,D)}} +function $$b(a,b,c,d){var e,f,g,h,i,j,k;f=a_b(d);h=Ccb(DD(vNb(d,(Nyc(),uxc))));if((h||Ccb(DD(vNb(a,exc))))&&!fcd(BD(vNb(a,Vxc),98))){e=Zcd(f);i=i_b(a,c,c==(KAc(),IAc)?e:Wcd(e))}else{i=new H0b;F0b(i,a);if(b){k=i.n;k.a=b.a-a.n.a;k.b=b.b-a.n.b;Q6c(k,0,0,a.o.a,a.o.b);G0b(i,W$b(i,f))}else{e=Zcd(f);G0b(i,c==(KAc(),IAc)?e:Wcd(e))}g=BD(vNb(d,(wtc(),Ksc)),21);j=i.j;switch(f.g){case 2:case 1:(j==(Ucd(),Acd)||j==Rcd)&&g.Fc((Orc(),Lrc));break;case 4:case 3:(j==(Ucd(),zcd)||j==Tcd)&&g.Fc((Orc(),Lrc));}}return i} +function pPc(a,b,c){var d,e,f,g,h,i,j,k;if($wnd.Math.abs(b.s-b.c)<qme||$wnd.Math.abs(c.s-c.c)<qme){return 0}d=oPc(a,b.j,c.e);e=oPc(a,c.j,b.e);f=d==-1||e==-1;g=0;if(f){if(d==-1){new DOc((HOc(),FOc),c,b,1);++g}if(e==-1){new DOc((HOc(),FOc),b,c,1);++g}}else{h=vPc(b.j,c.s,c.c);h+=vPc(c.e,b.s,b.c);i=vPc(c.j,b.s,b.c);i+=vPc(b.e,c.s,c.c);j=d+16*h;k=e+16*i;if(j<k){new DOc((HOc(),GOc),b,c,k-j)}else if(j>k){new DOc((HOc(),GOc),c,b,j-k)}else if(j>0&&k>0){new DOc((HOc(),GOc),b,c,0);new DOc(GOc,c,b,0)}}return g} +function TUb(a,b){var c,d,e,f,g,h;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);e=BD(f.cd(),594);if(b==1){if(e.gf()!=(ead(),dad)&&e.gf()!=_9c){continue}}else{if(e.gf()!=(ead(),aad)&&e.gf()!=bad){continue}}d=BD(BD(f.dd(),46).b,81);h=BD(BD(f.dd(),46).a,189);c=h.c;switch(e.gf().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} +function nJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=KC(WD,oje,25,b.b.c.length,15,1);j=KC(NQ,Kie,267,b.b.c.length,0,1);i=KC(OQ,kne,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m<n;++m){k=l[m];p=0;for(g=new olb(k.e);g.a<g.c.c.length;){e=BD(mlb(g),10);d=G1b(e.c);++h[d];o=Edb(ED(vNb(b,(Nyc(),lyc))));h[d]>0&&!!i[d]&&(o=jBc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new olb(k.e);f.a<f.c.c.length;){e=BD(mlb(f),10);e.n.b=p+e.d.d;c=e.c;c.c.b=p+e.d.d+e.o.b+e.d.a;j[Jkb(c.b.b,c,0)]=e.k;i[Jkb(c.b.b,c,0)]=e}}} +function LXc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(d=new Sr(ur(_sd(b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){i=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));if(!Pld(c)){g=b.i+b.g/2;h=b.j+b.f/2;k=i.i+i.g/2;l=i.j+i.f/2;m=new d7c;m.a=k-g;m.b=l-h;f=new f7c(m.a,m.b);l6c(f,b.g,b.f);m.a-=f.a;m.b-=f.b;g=k-m.a;h=l-m.b;j=new f7c(m.a,m.b);l6c(j,i.g,i.f);m.a-=j.a;m.b-=j.b;k=g+m.a;l=h+m.b;e=itd(c,true,true);omd(e,g);pmd(e,h);hmd(e,k);imd(e,l);LXc(a,i)}}}} +function e0c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Pre),'ELK SPOrE Compaction'),'ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree.'),new h0c)));p4c(a,Pre,Qre,Ksd(c0c));p4c(a,Pre,Rre,Ksd(__c));p4c(a,Pre,Sre,Ksd($_c));p4c(a,Pre,Tre,Ksd(Y_c));p4c(a,Pre,Ure,Ksd(Z_c));p4c(a,Pre,ame,X_c);p4c(a,Pre,wme,8);p4c(a,Pre,Vre,Ksd(b0c));p4c(a,Pre,Wre,Ksd(T_c));p4c(a,Pre,Xre,Ksd(U_c));p4c(a,Pre,Zpe,(Bcb(),false))} +function JLc(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Simple node placement',1);l=BD(vNb(a,(wtc(),otc)),304);h=0;for(f=new olb(a.b);f.a<f.c.c.length;){d=BD(mlb(f),29);g=d.c;g.b=0;c=null;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);!!c&&(g.b+=hBc(i,c,l.c));g.b+=i.d.d+i.o.b+i.d.a;c=i}h=$wnd.Math.max(h,g.b)}for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);g=d.c;k=(h-g.b)/2;c=null;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);!!c&&(k+=hBc(i,c,l.c));k+=i.d.d;i.n.b=k;k+=i.o.b+i.d.a;c=i}}Qdd(b)} +function s2d(a,b,c,d){var e,f,g,h,i,j,k,l;if(d.gc()==0){return false}i=(Q6d(),BD(b,66).Oj());g=i?d:new zud(d.gc());if(T6d(a.e,b)){if(b.hi()){for(k=d.Kc();k.Ob();){j=k.Pb();if(!F2d(a,b,j,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){f=R6d(b,j);g.Fc(f)}}}else if(!i){for(k=d.Kc();k.Ob();){j=k.Pb();f=R6d(b,j);g.Fc(f)}}}else{l=S6d(a.e.Tg(),b);e=BD(a.g,119);for(h=0;h<a.i;++h){f=e[h];if(l.rl(f.ak())){throw vbb(new Wdb(Hwe))}}if(d.gc()>1){throw vbb(new Wdb(Hwe))}if(!i){f=R6d(b,d.Kc().Pb());g.Fc(f)}}return xtd(a,I2d(a,b,c),g)} +function Pmc(a,b){var c,d,e,f;Jmc(b.b.j);MAb(NAb(new YAb(null,new Kub(b.d,16)),new $mc),new anc);for(f=new olb(b.d);f.a<f.c.c.length;){e=BD(mlb(f),101);switch(e.e.g){case 0:c=BD(Ikb(e.j,0),113).d.j;mjc(e,BD(Btb(RAb(BD(Qc(e.k,c),15).Oc(),Hmc)),113));njc(e,BD(Btb(QAb(BD(Qc(e.k,c),15).Oc(),Hmc)),113));break;case 1:d=Bkc(e);mjc(e,BD(Btb(RAb(BD(Qc(e.k,d[0]),15).Oc(),Hmc)),113));njc(e,BD(Btb(QAb(BD(Qc(e.k,d[1]),15).Oc(),Hmc)),113));break;case 2:Rmc(a,e);break;case 3:Qmc(e);break;case 4:Omc(a,e);}Mmc(e)}a.a=null} +function $Mc(a,b,c){var d,e,f,g,h,i,j,k;d=a.a.o==(eMc(),dMc)?Pje:Qje;h=_Mc(a,new ZMc(b,c));if(!h.a&&h.c){Dsb(a.d,h);return d}else if(h.a){e=h.a.c;i=h.a.d;if(c){j=a.a.c==(YLc(),XLc)?i:e;f=a.a.c==XLc?e:i;g=a.a.g[f.i.p];k=Edb(a.a.p[g.p])+Edb(a.a.d[f.i.p])+f.n.b+f.a.b-Edb(a.a.d[j.i.p])-j.n.b-j.a.b}else{j=a.a.c==(YLc(),WLc)?i:e;f=a.a.c==WLc?e:i;k=Edb(a.a.p[a.a.g[f.i.p].p])+Edb(a.a.d[f.i.p])+f.n.b+f.a.b-Edb(a.a.d[j.i.p])-j.n.b-j.a.b}a.a.n[a.a.g[e.i.p].p]=(Bcb(),true);a.a.n[a.a.g[i.i.p].p]=true;return k}return d} +function f3d(a,b,c){var d,e,f,g,h,i,j,k;if(T6d(a.e,b)){i=(Q6d(),BD(b,66).Oj()?new R7d(b,a):new f7d(b,a));D2d(i.c,i.b);b7d(i,BD(c,14))}else{k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];f=e.ak();if(k.rl(f)){if(f==(m8d(),k8d)||f==h8d){j=m3d(a,b,c);h=g;j?Xxd(a,g):++g;while(g<a.i){e=d[g];f=e.ak();f==k8d||f==h8d?Xxd(a,g):++g}j||BD(Gtd(a,h,R6d(b,c)),72)}else m3d(a,b,c)?Xxd(a,g):BD(Gtd(a,g,(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c))),72);return}}m3d(a,b,c)||wtd(a,(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c)))}} +function IMb(a,b,c){var d,e,f,g,h,i,j,k;if(!pb(c,a.b)){a.b=c;f=new LMb;g=BD(GAb(NAb(new YAb(null,new Kub(c.f,16)),f),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);a.e=true;a.f=true;a.c=true;a.d=true;e=g.Hc((RMb(),OMb));d=g.Hc(PMb);e&&!d&&(a.f=false);!e&&d&&(a.d=false);e=g.Hc(NMb);d=g.Hc(QMb);e&&!d&&(a.c=false);!e&&d&&(a.e=false)}k=BD(a.a.Ce(b,c),46);i=BD(k.a,19).a;j=BD(k.b,19).a;h=false;i<0?a.c||(h=true):a.e||(h=true);j<0?a.d||(h=true):a.f||(h=true);return h?IMb(a,k,c):k} +function oKb(a){var b,c,d,e;e=a.o;$Jb();if(a.A.dc()||pb(a.A,ZJb)){b=e.b}else{b=fIb(a.f);if(a.A.Hc((tdd(),qdd))&&!a.B.Hc((Idd(),Edd))){b=$wnd.Math.max(b,fIb(BD(Mpb(a.p,(Ucd(),zcd)),244)));b=$wnd.Math.max(b,fIb(BD(Mpb(a.p,Tcd),244)))}c=aKb(a);!!c&&(b=$wnd.Math.max(b,c.b));if(a.A.Hc(rdd)){if(a.q==(dcd(),_bd)||a.q==$bd){b=$wnd.Math.max(b,_Gb(BD(Mpb(a.b,(Ucd(),zcd)),124)));b=$wnd.Math.max(b,_Gb(BD(Mpb(a.b,Tcd),124)))}}}Ccb(DD(a.e.yf().We((Y9c(),$8c))))?(e.b=$wnd.Math.max(e.b,b)):(e.b=b);d=a.f.i;d.d=0;d.a=b;iIb(a.f)} +function $Ic(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;for(l=0;l<b.length;l++){for(h=a.Kc();h.Ob();){f=BD(h.Pb(),225);f.Of(l,b)}for(m=0;m<b[l].length;m++){for(i=a.Kc();i.Ob();){f=BD(i.Pb(),225);f.Pf(l,m,b)}p=b[l][m].j;for(n=0;n<p.c.length;n++){for(j=a.Kc();j.Ob();){f=BD(j.Pb(),225);f.Qf(l,m,n,b)}o=(tCb(n,p.c.length),BD(p.c[n],11));c=0;for(e=new b1b(o.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);for(k=a.Kc();k.Ob();){f=BD(k.Pb(),225);f.Nf(l,m,n,c++,d,b)}}}}}for(g=a.Kc();g.Ob();){f=BD(g.Pb(),225);f.Mf()}} +function J4b(a,b){var c,d,e,f,g,h,i;a.b=Edb(ED(vNb(b,(Nyc(),myc))));a.c=Edb(ED(vNb(b,pyc)));a.d=BD(vNb(b,Xwc),336);a.a=BD(vNb(b,swc),275);H4b(b);h=BD(GAb(JAb(JAb(LAb(LAb(new YAb(null,new Kub(b.b,16)),new N4b),new P4b),new R4b),new T4b),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);for(e=h.Kc();e.Ob();){c=BD(e.Pb(),17);g=BD(vNb(c,(wtc(),rtc)),15);g.Jc(new V4b(a));yNb(c,rtc,null)}for(d=h.Kc();d.Ob();){c=BD(d.Pb(),17);i=BD(vNb(c,(wtc(),stc)),17);f=BD(vNb(c,ptc),15);B4b(a,f,i);yNb(c,ptc,null)}} +function uZd(a){a.b=null;a.a=null;a.o=null;a.q=null;a.v=null;a.w=null;a.B=null;a.p=null;a.Q=null;a.R=null;a.S=null;a.T=null;a.U=null;a.V=null;a.W=null;a.bb=null;a.eb=null;a.ab=null;a.H=null;a.db=null;a.c=null;a.d=null;a.f=null;a.n=null;a.r=null;a.s=null;a.u=null;a.G=null;a.J=null;a.e=null;a.j=null;a.i=null;a.g=null;a.k=null;a.t=null;a.F=null;a.I=null;a.L=null;a.M=null;a.O=null;a.P=null;a.$=null;a.N=null;a.Z=null;a.cb=null;a.K=null;a.D=null;a.A=null;a.C=null;a._=null;a.fb=null;a.X=null;a.Y=null;a.gb=false;a.hb=false} +function bKc(a){var b,c,d,e,f,g,h,i,j;if(a.k!=(j0b(),h0b)){return false}if(a.j.c.length<=1){return false}f=BD(vNb(a,(Nyc(),Vxc)),98);if(f==(dcd(),$bd)){return false}e=(Izc(),(!a.q?(mmb(),mmb(),kmb):a.q)._b(Cxc)?(d=BD(vNb(a,Cxc),197)):(d=BD(vNb(Q_b(a),Dxc),197)),d);if(e==Gzc){return false}if(!(e==Fzc||e==Ezc)){g=Edb(ED(pBc(a,zyc)));b=BD(vNb(a,yyc),142);!b&&(b=new J_b(g,g,g,g));j=V_b(a,(Ucd(),Tcd));i=b.d+b.a+(j.gc()-1)*g;if(i>a.o.b){return false}c=V_b(a,zcd);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true} +function thb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);if(g==i){k=wbb(c,d);o=Tbb(k);n=Tbb(Pbb(k,32));return n==0?new Ugb(g,o):new Vgb(g,2,OC(GC(WD,1),oje,25,15,[o,n]))}return ghb(g<0?Qbb(d,c):Qbb(c,d))}else if(g==i){m=g;l=f>=h?uhb(a.a,f,b.a,h):uhb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==0){return Hgb(),Ggb}if(e==1){m=g;l=zhb(a.a,f,b.a,h)}else{m=i;l=zhb(b.a,h,a.a,f)}}j=new Vgb(m,l.length,l);Jgb(j);return j} +function oZb(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Ccb(DD(vNb(b,(Nyc(),vxc))));m=null;f==(KAc(),HAc)&&d.c.i==c?(m=d.c):f==IAc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(Ucd(),Scd);m?(k=m.j):fcd(BD(vNb(c,Vxc),98))&&(k=f==HAc?Tcd:zcd);i=lZb(a,b,c,f,k,d);h=kZb((Q_b(c),d));if(f==HAc){QZb(h,BD(Ikb(i.j,0),11));RZb(h,e)}else{QZb(h,e);RZb(h,BD(Ikb(i.j,0),11))}j=new yZb(d,h,i,BD(vNb(i,(wtc(),$sc)),11),f,!m)}else{Ekb(j.e,d);n=$wnd.Math.max(Edb(ED(vNb(j.d,Zwc))),Edb(ED(vNb(d,Zwc))));yNb(j.d,Zwc,n)}Rc(a.a,d,new BZb(j.d,b,f));return j} +function V1d(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=BD(Phb(a.d,b),138));if(!k){f=a.a.Mh();l=f.i;if(!a.d||Vhb(a.d)!=l){i=new Lqb;!!a.d&&Ld(i,a.d);j=i.f.c+i.g.c;for(h=j;h<l;++h){d=BD(qud(f,h),138);e=o1d(a.e,d).ne();c=BD(e==null?jrb(i.f,null,d):Drb(i.g,e,d),138);!!c&&c!=d&&(e==null?jrb(i.f,null,c):Drb(i.g,e,c))}if(i.f.c+i.g.c!=l){for(g=0;g<j;++g){d=BD(qud(f,g),138);e=o1d(a.e,d).ne();c=BD(e==null?jrb(i.f,null,d):Drb(i.g,e,d),138);!!c&&c!=d&&(e==null?jrb(i.f,null,c):Drb(i.g,e,c))}}a.d=i}k=BD(Phb(a.d,b),138)}return k} +function lZb(a,b,c,d,e,f){var g,h,i,j,k,l;g=null;j=d==(KAc(),HAc)?f.c:f.d;i=a_b(b);if(j.i==c){g=BD(Ohb(a.b,j),10);if(!g){g=Z$b(j,BD(vNb(c,(Nyc(),Vxc)),98),e,hZb(j),null,j.n,j.o,i,b);yNb(g,(wtc(),$sc),j);Rhb(a.b,j,g)}}else{g=Z$b((k=new zNb,l=Edb(ED(vNb(b,(Nyc(),lyc))))/2,xNb(k,Uxc,l),k),BD(vNb(c,Vxc),98),e,d==HAc?-1:1,null,new d7c,new f7c(0,0),i,b);h=mZb(g,c,d);yNb(g,(wtc(),$sc),h);Rhb(a.b,h,g)}BD(vNb(b,(wtc(),Ksc)),21).Fc((Orc(),Hrc));fcd(BD(vNb(b,(Nyc(),Vxc)),98))?yNb(b,Vxc,(dcd(),acd)):yNb(b,Vxc,(dcd(),bcd));return g} +function vNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(b,'Orthogonal edge routing',1);j=Edb(ED(vNb(a,(Nyc(),wyc))));c=Edb(ED(vNb(a,myc)));d=Edb(ED(vNb(a,pyc)));m=new tPc(0,c);q=0;g=new Bib(a.b,0);h=null;k=null;i=null;l=null;do{k=g.b<g.d.gc()?(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),29)):null;l=!k?null:k.a;if(h){h_b(h,q);q+=h.c.a}p=!h?q:q+d;o=sPc(m,a,i,l,p);e=!h||Kq(i,(FNc(),DNc));f=!k||Kq(l,(FNc(),DNc));if(o>0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n<j&&!e&&!f&&(n=j);q+=n}else !e&&!f&&(q+=j);h=k;i=l}while(k);a.f.a=q;Qdd(b)} +function IEd(){IEd=ccb;var a;HEd=new mFd;BEd=KC(ZI,nie,2,0,6,1);uEd=Mbb(ZEd(33,58),ZEd(1,26));vEd=Mbb(ZEd(97,122),ZEd(65,90));wEd=ZEd(48,57);sEd=Mbb(uEd,0);tEd=Mbb(vEd,wEd);xEd=Mbb(Mbb(0,ZEd(1,6)),ZEd(33,38));yEd=Mbb(Mbb(wEd,ZEd(65,70)),ZEd(97,102));EEd=Mbb(sEd,XEd("-_.!~*'()"));FEd=Mbb(tEd,$Ed("-_.!~*'()"));XEd(lve);$Ed(lve);Mbb(EEd,XEd(';:@&=+$,'));Mbb(FEd,$Ed(';:@&=+$,'));zEd=XEd(':/?#');AEd=$Ed(':/?#');CEd=XEd('/?#');DEd=$Ed('/?#');a=new Tqb;a.a.zc('jar',a);a.a.zc('zip',a);a.a.zc('archive',a);GEd=(mmb(),new zob(a))} +function yUc(a,b){var c,d,e,f,g,h,i,j,k,l;yNb(b,(mTc(),cTc),0);i=BD(vNb(b,aTc),86);if(b.d.b==0){if(i){k=Edb(ED(vNb(i,fTc)))+a.a+zUc(i,b);yNb(b,fTc,k)}else{yNb(b,fTc,0)}}else{for(d=(f=Jsb((new ZRc(b)).a.d,0),new aSc(f));Wsb(d.a);){c=BD(Xsb(d.a),188).c;yUc(a,c)}h=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);l=BD(or((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86);j=(Edb(ED(vNb(l,fTc)))+Edb(ED(vNb(h,fTc))))/2;if(i){k=Edb(ED(vNb(i,fTc)))+a.a+zUc(i,b);yNb(b,fTc,k);yNb(b,cTc,Edb(ED(vNb(b,fTc)))-j);xUc(a,b)}else{yNb(b,fTc,j)}}} +function Dbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=0;o=0;i=tlb(a.f,a.f.length);f=a.d;g=a.i;d=a.a;e=a.b;do{n=0;for(k=new olb(a.p);k.a<k.c.c.length;){j=BD(mlb(k),10);m=Cbc(a,j);c=true;(a.q==(kAc(),dAc)||a.q==gAc)&&(c=Ccb(DD(m.b)));if(BD(m.a,19).a<0&&c){++n;i=tlb(a.f,a.f.length);a.d=a.d+BD(m.a,19).a;o+=f-a.d;f=a.d+BD(m.a,19).a;g=a.i;d=Mu(a.a);e=Mu(a.b)}else{a.f=tlb(i,i.length);a.d=f;a.a=(Qb(d),d?new Tkb(d):Nu(new olb(d)));a.b=(Qb(e),e?new Tkb(e):Nu(new olb(e)));a.i=g}}++h;l=n!=0&&Ccb(DD(b.Kb(new vgd(meb(o),meb(h)))))}while(l)} +function lYc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;g=a.f;m=b.f;h=g==(k$c(),f$c)||g==h$c;n=m==f$c||m==h$c;i=g==g$c||g==i$c;o=m==g$c||m==i$c;j=g==g$c||g==f$c;p=m==g$c||m==f$c;if(h&&n){return a.f==h$c?a:b}else if(i&&o){return a.f==i$c?a:b}else if(j&&p){if(g==g$c){l=a;k=b}else{l=b;k=a}f=(q=c.j+c.f,r=l.e+d.f,s=$wnd.Math.max(q,r),t=s-$wnd.Math.min(c.j,l.e),u=l.d+d.g-c.i,u*t);e=(v=c.i+c.g,w=k.d+d.g,A=$wnd.Math.max(v,w),B=A-$wnd.Math.min(c.i,k.d),C=k.e+d.f-c.j,B*C);return f<=e?a.f==g$c?a:b:a.f==f$c?a:b}return a} +function wGb(a){var b,c,d,e,f,g,h,i,j,k,l;k=a.e.a.c.length;for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);f.j=false}a.i=KC(WD,oje,25,k,15,1);a.g=KC(WD,oje,25,k,15,1);a.n=new Rkb;e=0;l=new Rkb;for(i=new olb(a.e.a);i.a<i.c.c.length;){h=BD(mlb(i),121);h.d=e++;h.b.a.c.length==0&&Ekb(a.n,h);Gkb(l,h.g)}b=0;for(d=new olb(l);d.a<d.c.c.length;){c=BD(mlb(d),213);c.c=b++;c.f=false}j=l.c.length;if(a.b==null||a.b.length<j){a.b=KC(UD,Vje,25,j,15,1);a.c=KC(sbb,dle,25,j,16,1)}else{Blb(a.c)}a.d=l;a.p=new Asb(Cv(a.d.c.length));a.j=1} +function sTb(a,b){var c,d,e,f,g,h,i,j,k;if(b.e.c.length<=1){return}a.f=b;a.d=BD(vNb(a.f,(bTb(),SSb)),379);a.g=BD(vNb(a.f,WSb),19).a;a.e=Edb(ED(vNb(a.f,TSb)));a.c=Edb(ED(vNb(a.f,RSb)));it(a.b);for(e=new olb(a.f.c);e.a<e.c.c.length;){d=BD(mlb(e),282);ht(a.b,d.c,d,null);ht(a.b,d.d,d,null)}h=a.f.e.c.length;a.a=IC(UD,[nie,Vje],[104,25],15,[h,h],2);for(j=new olb(a.f.e);j.a<j.c.c.length;){i=BD(mlb(j),144);oTb(a,i,a.a[i.b])}a.i=IC(UD,[nie,Vje],[104,25],15,[h,h],2);for(f=0;f<h;++f){for(g=0;g<h;++g){c=a.a[f][g];k=1/(c*c);a.i[f][g]=k}}} +function Vfe(a){var b,c,d,e;if(a.b==null||a.b.length<=2)return;if(a.a)return;b=0;e=0;while(e<a.b.length){if(b!=e){a.b[b]=a.b[e++];a.b[b+1]=a.b[e++]}else e+=2;c=a.b[b+1];while(e<a.b.length){if(c+1<a.b[e])break;if(c+1==a.b[e]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else if(c>=a.b[e+1]){e+=2}else if(c<a.b[e+1]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else{throw vbb(new hz('Token#compactRanges(): Internel Error: ['+a.b[b]+','+a.b[b+1]+'] ['+a.b[e]+','+a.b[e+1]+']'))}}b+=2}if(b!=a.b.length){d=KC(WD,oje,25,b,15,1);$fb(a.b,0,d,0,b);a.b=d}a.a=true} +function pZb(a,b){var c,d,e,f,g,h,i;for(g=Ec(a.a).Kc();g.Ob();){f=BD(g.Pb(),17);if(f.b.c.length>0){d=new Tkb(BD(Qc(a.a,f),21));mmb();Okb(d,new EZb(b));e=new Bib(f.b,0);while(e.b<e.d.gc()){c=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),70));h=-1;switch(BD(vNb(c,(Nyc(),Qwc)),272).g){case 1:h=d.c.length-1;break;case 0:h=nZb(d);break;case 2:h=0;}if(h!=-1){i=(tCb(h,d.c.length),BD(d.c[h],243));Ekb(i.b.b,c);BD(vNb(Q_b(i.b.c.i),(wtc(),Ksc)),21).Fc((Orc(),Grc));BD(vNb(Q_b(i.b.c.i),Ksc),21).Fc(Erc);uib(e);yNb(c,btc,f)}}}QZb(f,null);RZb(f,null)}} +function FLb(a,b){var c,d,e,f;c=new KLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();e=e==2?1:0;e==1&&Bbb(Hbb(BD(GAb(JAb(d.Lc(),new MLb),Xyb(Aeb(0),new Czb)),162).a,2),0)&&(e=0);d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();f=f==2?1:0;f==1&&Bbb(Hbb(BD(GAb(JAb(d.Lc(),new OLb),Xyb(Aeb(0),new Czb)),162).a,2),0)&&(f=0);if(e<f){return -1}if(e==f){return 0}return 1} +function h6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;j=new Rkb;if(!wNb(a,(wtc(),Fsc))){return j}for(d=BD(vNb(a,Fsc),15).Kc();d.Ob();){b=BD(d.Pb(),10);g6b(b,a);j.c[j.c.length]=b}for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k!=(j0b(),e0b)){continue}i=BD(vNb(g,Gsc),10);!!i&&(k=new H0b,F0b(k,g),l=BD(vNb(g,Hsc),61),G0b(k,l),m=BD(Ikb(i.j,0),11),n=new UZb,QZb(n,k),RZb(n,m),undefined)}}for(c=new olb(j);c.a<c.c.c.length;){b=BD(mlb(c),10);$_b(b,BD(Ikb(a.b,a.b.c.length-1),29))}return j} +function M1b(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=mpd(a);f=Ccb(DD(hkd(b,(Nyc(),fxc))));k=0;e=0;for(j=new Fyd((!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));j.e!=j.i.gc();){i=BD(Dyd(j),79);h=Qld(i);g=h&&f&&Ccb(DD(hkd(i,gxc)));m=atd(BD(qud((!i.c&&(i.c=new y5d(z2,i,5,8)),i.c),0),82));h&&g?++e:h&&!g?++k:Xod(m)==b||m==b?++e:++k}for(d=new Fyd((!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));d.e!=d.i.gc();){c=BD(Dyd(d),79);h=Qld(c);g=h&&f&&Ccb(DD(hkd(c,gxc)));l=atd(BD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),82));h&&g?++k:h&&!g?++e:Xod(l)==b||l==b?++k:++e}return k-e} +function ubc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;Odd(b,'Edge splitting',1);if(a.b.c.length<=2){Qdd(b);return}f=new Bib(a.b,0);g=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),29));while(f.b<f.d.gc()){e=g;g=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),29));for(i=new olb(e.a);i.a<i.c.c.length;){h=BD(mlb(i),10);for(k=new olb(h.j);k.a<k.c.c.length;){j=BD(mlb(k),11);for(d=new olb(j.g);d.a<d.c.c.length;){c=BD(mlb(d),17);m=c.d;l=m.i.c;l!=e&&l!=g&&zbc(c,(n=new b0b(a),__b(n,(j0b(),g0b)),yNb(n,(wtc(),$sc),c),yNb(n,(Nyc(),Vxc),(dcd(),$bd)),$_b(n,g),n))}}}}Qdd(b)} +function MTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=b.p!=null&&!b.b;h||Odd(b,kme,1);c=BD(vNb(a,(wtc(),itc)),15);g=1/c.gc();if(b.n){Sdd(b,'ELK Layered uses the following '+c.gc()+' modules:');n=0;for(m=c.Kc();m.Ob();){k=BD(m.Pb(),51);d=(n<10?'0':'')+n++;Sdd(b,' Slot '+d+': '+hdb(rb(k)))}}o=0;for(l=c.Kc();l.Ob();){k=BD(l.Pb(),51);k.pf(a,Udd(b,g));++o}for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);Gkb(a.a,e.a);e.a.c=KC(SI,Uhe,1,0,5,1)}for(j=new olb(a.a);j.a<j.c.c.length;){i=BD(mlb(j),10);$_b(i,null)}a.b.c=KC(SI,Uhe,1,0,5,1);h||Qdd(b)} +function kJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;d=Edb(ED(vNb(b,(Nyc(),Bxc))));v=BD(vNb(b,Ayc),19).a;m=4;e=3;w=20/v;n=false;i=0;g=Ohe;do{f=i!=1;l=i!=0;A=0;for(q=a.a,s=0,u=q.length;s<u;++s){o=q[s];o.f=null;lJc(a,o,f,l,d);A+=$wnd.Math.abs(o.a)}do{h=pJc(a,b)}while(h);for(p=a.a,r=0,t=p.length;r<t;++r){o=p[r];c=xJc(o).a;if(c!=0){for(k=new olb(o.e);k.a<k.c.c.length;){j=BD(mlb(k),10);j.n.b+=c}}}if(i==0||i==1){--m;if(m<=0&&(A<g||-m>v)){i=2;g=Ohe}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A<w;g=A;n&&--e}}while(!(n&&e<=0))} +function UCb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;o=new Lqb;for(f=a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),168);Rhb(o,d,c.Je(d))}g=(Qb(a),a?new Tkb(a):Nu(a.a.ec().Kc()));Okb(g,new WCb(o));h=Gx(g);i=new hDb(b);n=new Lqb;jrb(n.f,b,i);while(h.a.gc()!=0){j=null;k=null;l=null;for(e=h.a.ec().Kc();e.Ob();){d=BD(e.Pb(),168);if(Edb(ED(Wd(irb(o.f,d))))<=Pje){if(Mhb(n,d.a)&&!Mhb(n,d.b)){k=d.b;l=d.a;j=d;break}if(Mhb(n,d.b)){if(!Mhb(n,d.a)){k=d.a;l=d.b;j=d;break}}}}if(!j){break}m=new hDb(k);Ekb(BD(Wd(irb(n.f,l)),221).a,m);jrb(n.f,k,m);h.a.Bc(j)!=null}return i} +function UBc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;Odd(c,'Depth-first cycle removal',1);l=b.a;k=l.c.length;a.c=new Rkb;a.d=KC(sbb,dle,25,k,16,1);a.a=KC(sbb,dle,25,k,16,1);a.b=new Rkb;g=0;for(j=new olb(l);j.a<j.c.c.length;){i=BD(mlb(j),10);i.p=g;Qq(R_b(i))&&Ekb(a.c,i);++g}for(n=new olb(a.c);n.a<n.c.c.length;){m=BD(mlb(n),10);TBc(a,m)}for(f=0;f<k;f++){if(!a.d[f]){h=(tCb(f,l.c.length),BD(l.c[f],10));TBc(a,h)}}for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true);yNb(b,(wtc(),Asc),(Bcb(),true))}a.c=null;a.d=null;a.a=null;a.b=null;Qdd(c)} +function PSc(a,b){var c,d,e,f,g,h,i;a.a.c=KC(SI,Uhe,1,0,5,1);for(d=Jsb(b.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);if(c.b.b==0){yNb(c,(mTc(),jTc),(Bcb(),true));Ekb(a.a,c)}}switch(a.a.c.length){case 0:e=new XRc(0,b,'DUMMY_ROOT');yNb(e,(mTc(),jTc),(Bcb(),true));yNb(e,YSc,true);Dsb(b.b,e);break;case 1:break;default:f=new XRc(0,b,'SUPER_ROOT');for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),86);i=new QRc(f,g);yNb(i,(mTc(),YSc),(Bcb(),true));Dsb(f.a.a,i);Dsb(f.d,i);Dsb(g.b,i);yNb(g,jTc,false)}yNb(f,(mTc(),jTc),(Bcb(),true));yNb(f,YSc,true);Dsb(b.b,f);}} +function z6c(a,b){i6c();var c,d,e,f,g,h;f=b.c-(a.c+a.b);e=a.c-(b.c+b.b);g=a.d-(b.d+b.a);c=b.d-(a.d+a.a);d=$wnd.Math.max(e,f);h=$wnd.Math.max(g,c);Iy();My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>=0^(null,My(Jqe),($wnd.Math.abs(h)<=Jqe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:Ny(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)} +function Kge(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new Wvb);if(a.e==2){Tvb(a.a,b);return}if(b.e==1){for(e=0;e<b.em();e++)Kge(a,b.am(e));return}h=a.a.a.c.length;if(h==0){Tvb(a.a,b);return}g=BD(Uvb(a.a,h-1),117);if(!((g.e==0||g.e==10)&&(b.e==0||b.e==10))){Tvb(a.a,b);return}f=b.e==0?2:b.bm().length;if(g.e==0){c=new Ifb;d=g._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje);g=(++vfe,new Hge(10,null,0));Vvb(a.a,g,h-1)}else{c=(g.bm().length+f,new Ifb);Efb(c,g.bm())}if(b.e==0){d=b._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje)}else{Efb(c,b.bm())}BD(g,521).b=c.a} +function rgb(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=rhb(Cbb(a.f),QD(a.e));return a.g}e=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=fhb(a.f)),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new Ufb;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){Tfb(f,c-QD(a.e),String.fromCharCode(46))}else{f.a=qfb(f.a,0,b-1)+'0.'+pfb(f.a,b-1);Tfb(f,b+1,zfb(egb,0,-QD(d)-1))}}else{if(c-b>=1){Tfb(f,b,String.fromCharCode(46));++c}Tfb(f,c,String.fromCharCode(69));d>0&&Tfb(f,++c,String.fromCharCode(43));Tfb(f,++c,''+Ubb(Cbb(d)))}a.g=f.a;return a.g} +function npc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=BD(d.Pb(),19).a;while(h<b.f){if(h==o){m=0;d.Ob()?(o=BD(d.Pb(),19).a):(o=b.f+1)}if(h!=m){q=BD(Ikb(a.b,h),29);n=BD(Ikb(a.b,m),29);p=Mu(q.a);for(l=new olb(p);l.a<l.c.c.length;){k=BD(mlb(l),10);Z_b(k,n.a.c.length,n);if(m==0){g=Mu(R_b(k));for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),17);PZb(e,true);yNb(a,(wtc(),Asc),(Bcb(),true));Noc(a,e,1)}}}}++m;++h}i=new Bib(a.b,0);while(i.b<i.d.gc()){j=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),29));j.a.c.length==0&&uib(i)}} +function xmc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;g=b.b;k=g.o;i=g.d;d=Edb(ED(c_b(g,(Nyc(),lyc))));e=Edb(ED(c_b(g,nyc)));j=Edb(ED(c_b(g,xyc)));h=new L_b;v_b(h,i.d,i.c,i.a,i.b);m=tmc(b,d,e,j);for(r=new olb(b.d);r.a<r.c.c.length;){q=BD(mlb(r),101);for(o=q.f.a.ec().Kc();o.Ob();){n=BD(o.Pb(),409);f=n.a;l=rmc(n);c=(s=new s7c,pmc(n,n.c,m,s),omc(n,l,m,s),pmc(n,n.d,m,s),s);c=a.Uf(n,l,c);Osb(f.a);ye(f.a,c);MAb(new YAb(null,new Kub(c,16)),new Bmc(k,h))}p=q.i;if(p){wmc(q,p,m,e);t=new g7c(p.g);ymc(k,h,t);P6c(t,p.j);ymc(k,h,t)}}v_b(i,h.d,h.c,h.a,h.b)} +function rgc(a,b,c){var d,e,f;e=BD(vNb(b,(Nyc(),swc)),275);if(e==(yrc(),wrc)){return}Odd(c,'Horizontal Compaction',1);a.a=b;f=new Ygc;d=new cEb((f.d=b,f.c=BD(vNb(f.d,Swc),218),Pgc(f),Wgc(f),Vgc(f),f.a));aEb(d,a.b);switch(BD(vNb(b,rwc),422).g){case 1:$Db(d,new jfc(a.a));break;default:$Db(d,(ODb(),MDb));}switch(e.g){case 1:TDb(d);break;case 2:TDb(SDb(d,(ead(),bad)));break;case 3:TDb(_Db(SDb(TDb(d),(ead(),bad)),new Bgc));break;case 4:TDb(_Db(SDb(TDb(d),(ead(),bad)),new Dgc(f)));break;case 5:TDb(ZDb(d,pgc));}SDb(d,(ead(),aad));d.e=true;Mgc(f);Qdd(c)} +function mYc(a,b,c,d,e,f,g,h){var i,j,k,l;i=Ou(OC(GC(z_,1),Uhe,220,0,[b,c,d,e]));l=null;switch(a.b.g){case 1:l=Ou(OC(GC(o_,1),Uhe,526,0,[new uYc,new oYc,new qYc]));break;case 0:l=Ou(OC(GC(o_,1),Uhe,526,0,[new qYc,new oYc,new uYc]));break;case 2:l=Ou(OC(GC(o_,1),Uhe,526,0,[new oYc,new uYc,new qYc]));}for(k=new olb(l);k.a<k.c.c.length;){j=BD(mlb(k),526);i.c.length>1&&(i=j.mg(i,a.a,h))}if(i.c.length==1){return BD(Ikb(i,i.c.length-1),220)}if(i.c.length==2){return lYc((tCb(0,i.c.length),BD(i.c[0],220)),(tCb(1,i.c.length),BD(i.c[1],220)),g,f)}return null} +function JNb(a){var b,c,d,e,f,g;Hkb(a.a,new PNb);for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),221);d=c7c(R6c(BD(a.b,65).c),BD(b.b,65).c);if(FNb){g=BD(a.b,65).b;f=BD(b.b,65).b;if($wnd.Math.abs(d.a)>=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.d<g.d+g.a&&$6c(d,$wnd.Math.max(g.c-(f.c+f.b),f.c-(g.c+g.b)))}else{d.a=0;f.c+f.b>g.c&&f.c<g.c+g.b&&$6c(d,$wnd.Math.max(g.d-(f.d+f.a),f.d-(g.d+g.a)))}}else{$6c(d,_Nb(BD(a.b,65),BD(b.b,65)))}e=$wnd.Math.sqrt(d.a*d.a+d.b*d.b);e=LNb(GNb,b,e,d);$6c(d,e);$Nb(BD(b.b,65),d);Hkb(b.a,new RNb(d));BD(GNb.b,65);KNb(GNb,HNb,b)}} +function VJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;a.f=new KFb;j=0;e=0;for(g=new olb(a.e.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p=j++;for(d=new Sr(ur(U_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);c.p=e++}b=bKc(h);for(m=new olb(h.j);m.a<m.c.c.length;){l=BD(mlb(m),11);if(b){o=l.a.b;if(o!=$wnd.Math.floor(o)){k=o-Sbb(Cbb($wnd.Math.round(o)));l.a.b-=k}}n=l.n.b+l.a.b;if(n!=$wnd.Math.floor(n)){k=n-Sbb(Cbb($wnd.Math.round(n)));l.n.b-=k}}}}a.g=j;a.b=e;a.i=KC(xY,Uhe,401,j,0,1);a.c=KC(wY,Uhe,649,e,0,1);a.d.a.$b()} +function Uxd(a){var b,c,d,e,f,g,h,i,j;if(a.ej()){i=a.fj();if(a.i>0){b=new _zd(a.i,a.g);c=a.i;f=c<100?null:new Ixd(c);if(a.ij()){for(d=0;d<a.i;++d){g=a.g[d];f=a.kj(g,f)}}oud(a);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new $yd(b);d.e!=d.i.gc();){f=a.dj(Zyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{oud(a);a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){if(a.i>0){h=a.g;j=a.i;oud(a);f=j<100?null:new Ixd(j);for(d=0;d<j;++d){g=h[d];f=a.dj(g,f)}!!f&&f.Fi()}else{oud(a)}}else{oud(a)}} +function ZQc(a,b,c){var d,e,f,g,h,i,j,k,l,m;TQc(this);c==(FQc(),DQc)?Qqb(this.r,a):Qqb(this.w,a);k=Pje;j=Qje;for(g=b.a.ec().Kc();g.Ob();){e=BD(g.Pb(),46);h=BD(e.a,455);d=BD(e.b,17);i=d.c;i==a&&(i=d.d);h==DQc?Qqb(this.r,i):Qqb(this.w,i);m=(Ucd(),Lcd).Hc(i.j)?Edb(ED(vNb(i,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).b;k=$wnd.Math.min(k,m);j=$wnd.Math.max(j,m)}l=(Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b;XQc(this,l,k,j);for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),46);UQc(this,BD(e.b,17))}this.o=false} +function gD(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c=a.l&8191;d=a.l>>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&Eje;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=Eje;u+=p>>22;p&=Eje;u&=Fje;return TC(m,p,u)} +function o7b(a){var b,c,d,e,f,g,h;h=BD(Ikb(a.j,0),11);if(h.g.c.length!=0&&h.e.c.length!=0){throw vbb(new Zdb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=Pje;for(c=new olb(h.g);c.a<c.c.c.length;){b=BD(mlb(c),17);g=b.d.i;d=BD(vNb(g,(Nyc(),txc)),142);f=$wnd.Math.min(f,g.n.a-d.b)}return new cc(Qb(f))}if(h.e.c.length!=0){e=Qje;for(c=new olb(h.e);c.a<c.c.c.length;){b=BD(mlb(c),17);g=b.c.i;d=BD(vNb(g,(Nyc(),txc)),142);e=$wnd.Math.max(e,g.n.a+g.o.a+d.c)}return new cc(Qb(e))}return wb(),wb(),vb} +function ELd(a,b){var c,d,e,f,g,h,i;if(a.Fk()){if(a.i>4){if(a.wj(b)){if(a.rk()){e=BD(b,49);d=e.Ug();i=d==a.e&&(a.Dk()?e.Og(e.Vg(),a.zk())==a.Ak():-1-e.Vg()==a.aj());if(a.Ek()&&!i&&!d&&!!e.Zg()){for(f=0;f<a.i;++f){c=a.Gk(BD(a.g[f],56));if(PD(c)===PD(b)){return true}}}return i}else if(a.Dk()&&!a.Ck()){g=BD(b,56).ah(zUd(BD(a.ak(),18)));if(PD(g)===PD(a.e)){return true}else if(g==null||!BD(g,56).kh()){return false}}}else{return false}}h=pud(a,b);if(a.Ek()&&!h){for(f=0;f<a.i;++f){e=a.Gk(BD(a.g[f],56));if(PD(e)===PD(b)){return true}}}return h}else{return pud(a,b)}} +function mHc(a,b){var c,d,e,f,g,h,i,j,k,l,m;k=new Rkb;m=new Tqb;g=b.b;for(e=0;e<g.c.length;e++){j=(tCb(e,g.c.length),BD(g.c[e],29)).a;k.c=KC(SI,Uhe,1,0,5,1);for(f=0;f<j.c.length;f++){h=a.a[e][f];h.p=f;h.k==(j0b(),i0b)&&(k.c[k.c.length]=h,true);Nkb(BD(Ikb(b.b,e),29).a,f,h);h.j.c=KC(SI,Uhe,1,0,5,1);Gkb(h.j,BD(BD(Ikb(a.b,e),15).Xb(f),14));ecd(BD(vNb(h,(Nyc(),Vxc)),98))||yNb(h,Vxc,(dcd(),Zbd))}for(d=new olb(k);d.a<d.c.c.length;){c=BD(mlb(d),10);l=kHc(c);m.a.zc(l,m);m.a.zc(c,m)}}for(i=m.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);mmb();Okb(h.j,(Occ(),Icc));h.i=true;N_b(h)}} +function g6b(a,b){var c,d,e,f,g,h,i,j,k,l;k=BD(vNb(a,(wtc(),Hsc)),61);d=BD(Ikb(a.j,0),11);k==(Ucd(),Acd)?G0b(d,Rcd):k==Rcd&&G0b(d,Acd);if(BD(vNb(b,(Nyc(),Fxc)),174).Hc((tdd(),sdd))){i=Edb(ED(vNb(a,tyc)));j=Edb(ED(vNb(a,uyc)));g=Edb(ED(vNb(a,ryc)));h=BD(vNb(b,Yxc),21);if(h.Hc((rcd(),ncd))){c=j;l=a.o.a/2-d.n.a;for(f=new olb(d.f);f.a<f.c.c.length;){e=BD(mlb(f),70);e.n.b=c;e.n.a=l-e.o.a/2;c+=e.o.b+g}}else if(h.Hc(pcd)){for(f=new olb(d.f);f.a<f.c.c.length;){e=BD(mlb(f),70);e.n.a=i+a.o.a-d.n.a}}WGb(new YGb((a$b(),new l$b(b,false,false,new T$b))),new x$b(null,a,false))}} +function Ugc(a,b){var c,d,e,f,g,h,i,j,k;if(b.c.length==0){return}mmb();Mlb(b.c,b.c.length,null);e=new olb(b);d=BD(mlb(e),145);while(e.a<e.c.c.length){c=BD(mlb(e),145);if(ADb(d.e.c,c.e.c)&&!(DDb(B6c(d.e).b,c.e.d)||DDb(B6c(c.e).b,d.e.d))){d=(Gkb(d.k,c.k),Gkb(d.b,c.b),Gkb(d.c,c.c),ye(d.i,c.i),Gkb(d.d,c.d),Gkb(d.j,c.j),f=$wnd.Math.min(d.e.c,c.e.c),g=$wnd.Math.min(d.e.d,c.e.d),h=$wnd.Math.max(d.e.c+d.e.b,c.e.c+c.e.b),i=h-f,j=$wnd.Math.max(d.e.d+d.e.a,c.e.d+c.e.a),k=j-g,G6c(d.e,f,g,i,k),hEb(d.f,c.f),!d.a&&(d.a=c.a),Gkb(d.g,c.g),Ekb(d.g,c),d)}else{Xgc(a,d);d=c}}Xgc(a,d)} +function e_b(a,b,c,d){var e,f,g,h,i,j;h=a.j;if(h==(Ucd(),Scd)&&b!=(dcd(),bcd)&&b!=(dcd(),ccd)){h=W$b(a,c);G0b(a,h);!(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Uxc))&&h!=Scd&&(a.n.a!=0||a.n.b!=0)&&yNb(a,Uxc,V$b(a,h))}if(b==(dcd(),_bd)){j=0;switch(h.g){case 1:case 3:f=a.i.o.a;f>0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}yNb(a,(wtc(),htc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=bcd&&b!=ccd&&h!=Scd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} +function vwd(a){var b,c,d,e,f,g,h,i,j,k;if(a.ej()){k=a.Vi();i=a.fj();if(k>0){b=new Aud(a.Gi());c=k;f=c<100?null:new Ixd(c);Cvd(a,c,b.g);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new Fyd(b);d.e!=d.i.gc();){f=a.dj(Dyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{Cvd(a,a.Vi(),a.Wi());a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){k=a.Vi();if(k>0){h=a.Wi();j=k;Cvd(a,k,h);f=j<100?null:new Ixd(j);for(d=0;d<j;++d){g=h[d];f=a.dj(g,f)}!!f&&f.Fi()}else{Cvd(a,a.Vi(),a.Wi())}}else{Cvd(a,a.Vi(),a.Wi())}} +function LEc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;for(h=new olb(b);h.a<h.c.c.length;){f=BD(mlb(h),233);f.e=null;f.c=0}i=null;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),233);l=f.d[0];if(c&&l.k!=(j0b(),h0b)){continue}for(n=BD(vNb(l,(wtc(),Qsc)),15).Kc();n.Ob();){m=BD(n.Pb(),10);if(!c||m.k==(j0b(),h0b)){(!f.e&&(f.e=new Rkb),f.e).Fc(a.b[m.c.p][m.p]);++a.b[m.c.p][m.p].c}}if(!c&&l.k==(j0b(),h0b)){if(i){for(k=BD(Qc(a.d,i),21).Kc();k.Ob();){j=BD(k.Pb(),10);for(e=BD(Qc(a.d,l),21).Kc();e.Ob();){d=BD(e.Pb(),10);YEc(a.b[j.c.p][j.p]).Fc(a.b[d.c.p][d.p]);++a.b[d.c.p][d.p].c}}}i=l}}} +function OHc(a,b){var c,d,e,f,g,h,i,j,k;c=0;k=new Rkb;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),11);AHc(a.b,a.d[g.p]);k.c=KC(SI,Uhe,1,0,5,1);switch(g.i.k.g){case 0:d=BD(vNb(g,(wtc(),gtc)),10);Hkb(d.j,new xIc(k));break;case 1:Ctb(KAb(JAb(new YAb(null,new Kub(g.i.j,16)),new zIc(g))),new CIc(k));break;case 3:e=BD(vNb(g,(wtc(),$sc)),11);Ekb(k,new vgd(e,meb(g.e.c.length+g.g.c.length)));}for(j=new olb(k);j.a<j.c.c.length;){i=BD(mlb(j),46);f=aIc(a,BD(i.a,11));if(f>a.d[g.p]){c+=zHc(a.b,f)*BD(i.b,19).a;Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function eed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new g7c(BD(hkd(a,(X7c(),R7c)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=ED(hkd(a,L7c));(e==null||(uCb(e),e)<=0)&&(e=1.3);h=new Rkb;for(o=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));o.e!=o.i.gc();){n=BD(Dyd(o),33);g=new xed(n);h.c[h.c.length]=g}m=BD(hkd(a,M7c),311);switch(m.g){case 3:q=bed(h,b,l.a,l.b,(j=d,uCb(e),e,j));break;case 1:q=aed(h,b,l.a,l.b,(k=d,uCb(e),e,k));break;default:q=ced(h,b,l.a,l.b,(i=d,uCb(e),e,i));}f=new wed(q);p=fed(f,b,c,l.a,l.b,d,(uCb(e),e));Afd(a,p.a,p.b,false,true)} +function vkc(a,b){var c,d,e,f;c=b.b;f=new Tkb(c.j);e=0;d=c.j;d.c=KC(SI,Uhe,1,0,5,1);hkc(BD(Si(a.b,(Ucd(),Acd),(Fkc(),Ekc)),15),c);e=ikc(f,e,new blc,d);hkc(BD(Si(a.b,Acd,Dkc),15),c);e=ikc(f,e,new dlc,d);hkc(BD(Si(a.b,Acd,Ckc),15),c);hkc(BD(Si(a.b,zcd,Ekc),15),c);hkc(BD(Si(a.b,zcd,Dkc),15),c);e=ikc(f,e,new flc,d);hkc(BD(Si(a.b,zcd,Ckc),15),c);hkc(BD(Si(a.b,Rcd,Ekc),15),c);e=ikc(f,e,new hlc,d);hkc(BD(Si(a.b,Rcd,Dkc),15),c);e=ikc(f,e,new jlc,d);hkc(BD(Si(a.b,Rcd,Ckc),15),c);hkc(BD(Si(a.b,Tcd,Ekc),15),c);e=ikc(f,e,new Pkc,d);hkc(BD(Si(a.b,Tcd,Dkc),15),c);hkc(BD(Si(a.b,Tcd,Ckc),15),c)} +function nbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Layer size calculation',1);k=Pje;j=Qje;e=false;for(h=new olb(a.b);h.a<h.c.c.length;){g=BD(mlb(h),29);i=g.c;i.a=0;i.b=0;if(g.a.c.length==0){continue}e=true;for(m=new olb(g.a);m.a<m.c.c.length;){l=BD(mlb(m),10);o=l.o;n=l.d;i.a=$wnd.Math.max(i.a,o.a+n.b+n.c)}d=BD(Ikb(g.a,0),10);p=d.n.b-d.d.d;d.k==(j0b(),e0b)&&(p-=BD(vNb(a,(Nyc(),yyc)),142).d);f=BD(Ikb(g.a,g.a.c.length-1),10);c=f.n.b+f.o.b+f.d.a;f.k==e0b&&(c+=BD(vNb(a,(Nyc(),yyc)),142).a);i.b=c-p;k=$wnd.Math.min(k,p);j=$wnd.Math.max(j,c)}if(!e){k=0;j=0}a.f.b=j-k;a.c.b-=k;Qdd(b)} +function h_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;f=0;g=0;for(j=new olb(a.a);j.a<j.c.c.length;){h=BD(mlb(j),10);f=$wnd.Math.max(f,h.d.b);g=$wnd.Math.max(g,h.d.c)}for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);c=BD(vNb(h,(Nyc(),mwc)),248);switch(c.g){case 1:o=0;break;case 2:o=1;break;case 5:o=0.5;break;default:d=0;l=0;for(n=new olb(h.j);n.a<n.c.c.length;){m=BD(mlb(n),11);m.e.c.length==0||++d;m.g.c.length==0||++l}d+l==0?(o=0.5):(o=l/(d+l));}q=a.c;k=h.o.a;r=(q.a-k)*o;o>0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;r<e&&(r=e);p=h.d.c;r>q.a-p-k&&(r=q.a-p-k);h.n.a=b+r}} +function ced(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=KC(UD,Vje,25,a.c.length,15,1);m=new gub(new Ned);_tb(m,a);j=0;p=new Rkb;while(m.b.c.length!=0){g=BD(m.b.c.length==0?null:Ikb(m.b,0),157);if(j>1&&red(g)*qed(g)/2>h[0]){f=0;while(f<p.c.length-1&&red(g)*qed(g)/2>h[f]){++f}o=new Jib(p,0,f+1);l=new wed(o);k=red(g)/qed(g);i=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),i);zCb(cub(m,l));n=new Jib(p,f+1,p.c.length);_tb(m,n);p.c=KC(SI,Uhe,1,0,5,1);j=0;Dlb(h,h.length,0)}else{q=m.b.c.length==0?null:Ikb(m.b,0);q!=null&&fub(m,0);j>0&&(h[j]=h[j-1]);h[j]+=red(g)*qed(g);++j;p.c[p.c.length]=g}}return p} +function Wac(a){var b,c,d,e,f;d=BD(vNb(a,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!Yac(b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. "+'FIRST_SEPARATE nodes must not have incoming edges.'))}}}else if(d==Atc){for(f=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!Yac(e)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. "+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}} +function C9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;Odd(b,'Label dummy removal',1);d=Edb(ED(vNb(a,(Nyc(),nyc))));e=Edb(ED(vNb(a,ryc)));j=BD(vNb(a,Lwc),103);for(i=new olb(a.b);i.a<i.c.c.length;){h=BD(mlb(i),29);l=new Bib(h.a,0);while(l.b<l.d.gc()){k=(sCb(l.b<l.d.gc()),BD(l.d.Xb(l.c=l.b++),10));if(k.k==(j0b(),f0b)){m=BD(vNb(k,(wtc(),$sc)),17);o=Edb(ED(vNb(m,Zwc)));g=PD(vNb(k,Ssc))===PD((rbd(),obd));c=new g7c(k.n);g&&(c.b+=o+d);f=new f7c(k.o.a,k.o.b-o-d);n=BD(vNb(k,ktc),15);j==(ead(),dad)||j==_9c?B9b(n,c,e,f,g,j):A9b(n,c,e,f);Gkb(m.b,n);sbc(k,PD(vNb(a,Swc))===PD((Aad(),xad)));uib(l)}}}Qdd(b)} +function tZb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;i=new Rkb;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);for(h=new olb(e.j);h.a<h.c.c.length;){g=BD(mlb(h),11);k=null;for(t=k_b(g.g),u=0,v=t.length;u<v;++u){s=t[u];if(!f_b(s.d.i,c)){r=oZb(a,b,c,s,s.c,(KAc(),IAc),k);r!=k&&(i.c[i.c.length]=r,true);r.c&&(k=r)}}j=null;for(o=k_b(g.e),p=0,q=o.length;p<q;++p){n=o[p];if(!f_b(n.c.i,c)){r=oZb(a,b,c,n,n.d,(KAc(),HAc),j);r!=j&&(i.c[i.c.length]=r,true);r.c&&(j=r)}}}}for(m=new olb(i);m.a<m.c.c.length;){l=BD(mlb(m),441);Jkb(b.a,l.a,0)!=-1||Ekb(b.a,l.a);l.c&&(d.c[d.c.length]=l,true)}} +function jCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(c,'Interactive cycle breaking',1);l=new Rkb;for(n=new olb(b.a);n.a<n.c.c.length;){m=BD(mlb(n),10);m.p=1;o=T_b(m).a;for(k=W_b(m,(KAc(),IAc)).Kc();k.Ob();){j=BD(k.Pb(),11);for(f=new olb(j.g);f.a<f.c.c.length;){d=BD(mlb(f),17);p=d.d.i;if(p!=m){q=T_b(p).a;q<o&&(l.c[l.c.length]=d,true)}}}}for(g=new olb(l);g.a<g.c.c.length;){d=BD(mlb(g),17);PZb(d,true)}l.c=KC(SI,Uhe,1,0,5,1);for(i=new olb(b.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p>0&&iCc(a,h,l)}for(e=new olb(l);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true)}l.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function _z(a,b){var c,d,e,f,g,h,i,j,k;j='';if(b.length==0){return a.de(Zie,Xie,-1,-1)}k=ufb(b);dfb(k.substr(0,3),'at ')&&(k=k.substr(3));k=k.replace(/\[.*?\]/g,'');g=k.indexOf('(');if(g==-1){g=k.indexOf('@');if(g==-1){j=k;k=''}else{j=ufb(k.substr(g+1));k=ufb(k.substr(0,g))}}else{c=k.indexOf(')',g);j=k.substr(g+1,c-(g+1));k=ufb(k.substr(0,g))}g=hfb(k,wfb(46));g!=-1&&(k=k.substr(g+1));(k.length==0||dfb(k,'Anonymous function'))&&(k=Xie);h=kfb(j,wfb(58));e=lfb(j,wfb(58),h-1);i=-1;d=-1;f=Zie;if(h!=-1&&e!=-1){f=j.substr(0,e);i=Vz(j.substr(e+1,h-(e+1)));d=Vz(j.substr(h+1))}return a.de(f,k,i,d)} +function UC(a,b,c){var d,e,f,g,h,i;if(b.l==0&&b.m==0&&b.h==0){throw vbb(new ocb('divide by zero'))}if(a.l==0&&a.m==0&&a.h==0){c&&(QC=TC(0,0,0));return TC(0,0,0)}if(b.h==Gje&&b.m==0&&b.l==0){return VC(a,c)}i=false;if(b.h>>19!=0){b=hD(b);i=!i}g=_C(b);f=false;e=false;d=false;if(a.h==Gje&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=SC((wD(),sD));d=true;i=!i}else{h=lD(a,g);i&&ZC(h);c&&(QC=TC(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=hD(a);d=true;i=!i}if(g!=-1){return WC(a,g,i,f,c)}if(eD(a,b)<0){c&&(f?(QC=hD(a)):(QC=TC(a.l,a.m,a.h)));return TC(0,0,0)}return XC(d?a:TC(a.l,a.m,a.h),b,i,f,e,c)} +function F2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.c<a.f){throw vbb(new Zdb('Expected '+a.f+' phases to be configured; '+'only found '+a.c.c))}k=BD(gdb(a.g),9);n=Pu(a.f);for(f=k,h=0,j=f.length;h<j;++h){d=f[h];l=BD(B2c(a,d.g),246);l?Ekb(n,BD(I2c(a,l),123)):(n.c[n.c.length]=null,true)}o=new j3c;MAb(JAb(NAb(JAb(new YAb(null,new Kub(n,16)),new O2c),new Q2c(b)),new S2c),new U2c(o));d3c(o,a.a);c=new Rkb;for(e=k,g=0,i=e.length;g<i;++g){d=e[g];Gkb(c,J2c(a,Dx(BD(B2c(o,d.g),20))));m=BD(Ikb(n,d.g),123);!!m&&(c.c[c.c.length]=m,true)}Gkb(c,J2c(a,Dx(BD(B2c(o,k[k.length-1].g+1),20))));return c} +function qCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(c,'Model order cycle breaking',1);a.a=0;a.b=0;n=new Rkb;k=b.a.c.length;for(j=new olb(b.a);j.a<j.c.c.length;){i=BD(mlb(j),10);wNb(i,(wtc(),Zsc))&&(k=$wnd.Math.max(k,BD(vNb(i,Zsc),19).a+1))}for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);g=pCc(a,o,k);for(m=W_b(o,(KAc(),IAc)).Kc();m.Ob();){l=BD(m.Pb(),11);for(f=new olb(l.g);f.a<f.c.c.length;){d=BD(mlb(f),17);q=d.d.i;h=pCc(a,q,k);h<g&&(n.c[n.c.length]=d,true)}}}for(e=new olb(n);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true);yNb(b,(wtc(),Asc),(Bcb(),true))}n.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function kQc(a,b){var c,d,e,f,g,h,i;if(a.g>b.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=BD(g.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=BD(h.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=BD(i.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=BD(f.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c<d){new BQc(a,b,d-c)}else if(d<c){new BQc(b,a,c-d)}else{new BQc(b,a,0);new BQc(a,b,0)}} +function JPb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=b.c;e=IOb(a.e);l=Y6c(b7c(R6c(HOb(a.e)),a.d*a.a,a.c*a.b),-0.5);c=e.a-l.a;d=e.b-l.b;g=b.a;c=g.c-c;d=g.d-d;for(i=new olb(j);i.a<i.c.c.length;){h=BD(mlb(i),395);m=h.b;n=c+m.a;q=d+m.b;o=QD(n/a.a);r=QD(q/a.b);f=h.a;switch(f.g){case 0:k=(RMb(),OMb);break;case 1:k=(RMb(),NMb);break;case 2:k=(RMb(),PMb);break;default:k=(RMb(),QMb);}if(f.a){s=QD((q+h.c)/a.b);Ekb(a.f,new uOb(k,meb(r),meb(s)));f==(ROb(),QOb)?nNb(a,0,r,o,s):nNb(a,o,r,a.d-1,s)}else{p=QD((n+h.c)/a.a);Ekb(a.f,new uOb(k,meb(o),meb(p)));f==(ROb(),OOb)?nNb(a,o,0,p,r):nNb(a,o,r,p,a.c-1)}}} +function coc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;m=new Rkb;e=new Rkb;p=null;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),19);f=new qoc(g.a);e.c[e.c.length]=f;if(p){f.d=p;p.e=f}p=f}t=boc(a);for(k=0;k<e.c.length;++k){n=null;q=poc((tCb(0,e.c.length),BD(e.c[0],652)));c=null;d=Pje;for(l=1;l<a.b.c.length;++l){r=q?$wnd.Math.abs(q.b-l):$wnd.Math.abs(l-n.b)+1;o=n?$wnd.Math.abs(l-n.b):r+1;if(o<r){j=n;i=o}else{j=q;i=r}s=(u=Edb(ED(vNb(a,(Nyc(),Hyc)))),t[l]+$wnd.Math.pow(i,u));if(s<d){d=s;c=j;c.c=l}if(!!q&&l==q.b){n=q;q=koc(q)}}if(c){Ekb(m,meb(c.c));c.a=true;loc(c)}}mmb();Mlb(m.c,m.c.length,null);return m} +function qNd(a){var b,c,d,e,f,g,h,i,j,k;b=new zNd;c=new zNd;j=dfb(Qve,(e=Dmd(a.b,Rve),!e?null:GD(AAd((!e.b&&(e.b=new sId((jGd(),fGd),x6,e)),e.b),Sve))));for(i=0;i<a.i;++i){h=BD(a.g[i],170);if(JD(h,99)){g=BD(h,18);(g.Bb&ote)!=0?((g.Bb&oie)==0||!j&&(f=Dmd(g,Rve),(!f?null:GD(AAd((!f.b&&(f.b=new sId((jGd(),fGd),x6,f)),f.b),eue)))==null))&&wtd(b,g):(k=zUd(g),!!k&&(k.Bb&ote)!=0||((g.Bb&oie)==0||!j&&(d=Dmd(g,Rve),(!d?null:GD(AAd((!d.b&&(d.b=new sId((jGd(),fGd),x6,d)),d.b),eue)))==null))&&wtd(c,g))}else{Q6d();if(BD(h,66).Oj()){if(!h.Jj()){wtd(b,h);wtd(c,h)}}}}vud(b);vud(c);a.a=BD(b.g,247);BD(c.g,247)} +function LTb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=ITb(b);q=BD(vNb(b,(Nyc(),Iwc)),314);q!=(Rpc(),Ppc)&&reb(j,new STb);r=BD(vNb(b,Cwc),292);reb(j,new UTb(r));p=0;k=new Rkb;for(f=new xkb(j);f.a!=f.b;){e=BD(vkb(f),37);aUb(a.c,e);m=BD(vNb(e,(wtc(),itc)),15);p+=m.gc();d=m.Kc();Ekb(k,new vgd(e,d))}Odd(c,'Recursive hierarchical layout',p);o=0;n=BD(BD(Ikb(k,k.c.length-1),46).b,47);while(n.Ob()){for(i=new olb(k);i.a<i.c.c.length;){h=BD(mlb(i),46);m=BD(h.b,47);g=BD(h.a,37);while(m.Ob()){l=BD(m.Pb(),51);if(JD(l,507)){if(!g.e){l.pf(g,Udd(c,1));++o;break}else{break}}else{l.pf(g,Udd(c,1));++o}}}}Qdd(c)} +function rid(b,c){var d,e,f,g,h,i,j,k,l,m;j=c.length-1;i=(BCb(j,c.length),c.charCodeAt(j));if(i==93){h=hfb(c,wfb(91));if(h>=0){f=wid(b,c.substr(1,h-1));l=c.substr(h+1,j-(h+1));return pid(b,l,f)}}else{d=-1;Vcb==null&&(Vcb=new RegExp('\\d'));if(Vcb.test(String.fromCharCode(i))){d=lfb(c,wfb(46),j-1);if(d>=0){e=BD(hid(b,Bid(b,c.substr(1,d-1)),false),58);k=0;try{k=Icb(c.substr(d+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){g=a;throw vbb(new rFd(g))}else throw vbb(a)}if(k<e.gc()){m=e.Xb(k);JD(m,72)&&(m=BD(m,72).dd());return BD(m,56)}}}if(d<0){return BD(hid(b,Bid(b,c.substr(1)),false),56)}}return null} +function e1d(a,b,c){var d,e,f,g,h,i,j,k,l;if(bLd(b,c)>=0){return c}switch($1d(q1d(a,c))){case 2:{if(dfb('',o1d(a,c.Hj()).ne())){i=b2d(q1d(a,c));h=a2d(q1d(a,c));k=r1d(a,b,i,h);if(k){return k}e=f1d(a,b);for(g=0,l=e.gc();g<l;++g){k=BD(e.Xb(g),170);if(x1d(c2d(q1d(a,k)),i)){return k}}}return null}case 4:{if(dfb('',o1d(a,c.Hj()).ne())){for(d=c;d;d=Z1d(q1d(a,d))){j=b2d(q1d(a,d));h=a2d(q1d(a,d));k=s1d(a,b,j,h);if(k){return k}}i=b2d(q1d(a,c));if(dfb(Ewe,i)){return t1d(a,b)}else{f=g1d(a,b);for(g=0,l=f.gc();g<l;++g){k=BD(f.Xb(g),170);if(x1d(c2d(q1d(a,k)),i)){return k}}}}return null}default:{return null}}} +function t2d(a,b,c){var d,e,f,g,h,i,j,k;if(c.gc()==0){return false}h=(Q6d(),BD(b,66).Oj());f=h?c:new zud(c.gc());if(T6d(a.e,b)){if(b.hi()){for(j=c.Kc();j.Ob();){i=j.Pb();if(!F2d(a,b,i,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){e=R6d(b,i);f.Hc(e)||f.Fc(e)}}}else if(!h){for(j=c.Kc();j.Ob();){i=j.Pb();e=R6d(b,i);f.Fc(e)}}}else{if(c.gc()>1){throw vbb(new Wdb(Hwe))}k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];if(k.rl(e.ak())){if(c.Hc(h?e:e.dd())){return false}else{for(j=c.Kc();j.Ob();){i=j.Pb();BD(Gtd(a,g,h?BD(i,72):R6d(b,i)),72)}return true}}}if(!h){e=R6d(b,c.Kc().Pb());f.Fc(e)}}return ytd(a,f)} +function qMc(a,b){var c,d,e,f,g,h,i,j,k;k=new Psb;for(h=(j=(new $ib(a.c)).a.vc().Kc(),new djb(j));h.a.Ob();){f=(e=BD(h.a.Pb(),42),BD(e.dd(),458));f.b==0&&(Gsb(k,f,k.c.b,k.c),true)}while(k.b!=0){f=BD(k.b==0?null:(sCb(k.b!=0),Nsb(k,k.a.a)),458);f.a==null&&(f.a=0);for(d=new olb(f.d);d.a<d.c.c.length;){c=BD(mlb(d),654);c.b.a==null?(c.b.a=Edb(f.a)+c.a):b.o==(eMc(),cMc)?(c.b.a=$wnd.Math.min(Edb(c.b.a),Edb(f.a)+c.a)):(c.b.a=$wnd.Math.max(Edb(c.b.a),Edb(f.a)+c.a));--c.b.b;c.b.b==0&&Dsb(k,c.b)}}for(g=(i=(new $ib(a.c)).a.vc().Kc(),new djb(i));g.a.Ob();){f=(e=BD(g.a.Pb(),42),BD(e.dd(),458));b.i[f.c.p]=f.a}} +function mTc(){mTc=ccb;dTc=new Lsd(Ime);new Lsd(Jme);new Msd('DEPTH',meb(0));ZSc=new Msd('FAN',meb(0));XSc=new Msd(Yqe,meb(0));jTc=new Msd('ROOT',(Bcb(),false));_Sc=new Msd('LEFTNEIGHBOR',null);hTc=new Msd('RIGHTNEIGHBOR',null);aTc=new Msd('LEFTSIBLING',null);iTc=new Msd('RIGHTSIBLING',null);YSc=new Msd('DUMMY',false);new Msd('LEVEL',meb(0));gTc=new Msd('REMOVABLE_EDGES',new Psb);kTc=new Msd('XCOOR',meb(0));lTc=new Msd('YCOOR',meb(0));bTc=new Msd('LEVELHEIGHT',0);$Sc=new Msd('ID','');eTc=new Msd('POSITION',meb(0));fTc=new Msd('PRELIM',0);cTc=new Msd('MODIFIER',0);WSc=new Lsd(Kme);VSc=new Lsd(Lme)} +function MNc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;k=c+b.c.c.a;for(n=new olb(b.j);n.a<n.c.c.length;){m=BD(mlb(n),11);e=l7c(OC(GC(m1,1),nie,8,0,[m.i.n,m.n,m.a]));if(b.k==(j0b(),i0b)){h=BD(vNb(m,(wtc(),$sc)),11);e.a=l7c(OC(GC(m1,1),nie,8,0,[h.i.n,h.n,h.a])).a;b.n.a=e.a}g=new f7c(0,e.b);if(m.j==(Ucd(),zcd)){g.a=k}else if(m.j==Tcd){g.a=c}else{continue}o=$wnd.Math.abs(e.a-g.a);if(o<=d&&!JNc(b)){continue}f=m.g.c.length+m.e.c.length>1;for(j=new b1b(m.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);l=i.c==m?i.d:i.c;$wnd.Math.abs(l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&GNc(a,i,g,f,m)}}} +function XPc(a){var b,c,d,e,f,g;e=new Bib(a.e,0);d=new Bib(a.a,0);if(a.d){for(c=0;c<a.b;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}}else{for(c=0;c<a.b-1;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);uib(e)}}b=Edb((sCb(e.b<e.d.gc()),ED(e.d.Xb(e.c=e.b++))));while(a.f-b>Oqe){f=b;g=0;while($wnd.Math.abs(b-f)<Oqe){++g;b=Edb((sCb(e.b<e.d.gc()),ED(e.d.Xb(e.c=e.b++))));sCb(d.b<d.d.gc());d.d.Xb(d.c=d.b++)}if(g<a.b){sCb(e.b>0);e.a.Xb(e.c=--e.b);WPc(a,a.b-g,f,d,e);sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}sCb(d.b>0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c<a.b-1;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);uib(e)}}a.d=true;a.c=true} +function Q8d(){Q8d=ccb;s8d=(r8d(),q8d).b;v8d=BD(qud(ZKd(q8d.b),0),34);t8d=BD(qud(ZKd(q8d.b),1),34);u8d=BD(qud(ZKd(q8d.b),2),34);F8d=q8d.bb;BD(qud(ZKd(q8d.bb),0),34);BD(qud(ZKd(q8d.bb),1),34);H8d=q8d.fb;I8d=BD(qud(ZKd(q8d.fb),0),34);BD(qud(ZKd(q8d.fb),1),34);BD(qud(ZKd(q8d.fb),2),18);K8d=q8d.qb;N8d=BD(qud(ZKd(q8d.qb),0),34);BD(qud(ZKd(q8d.qb),1),18);BD(qud(ZKd(q8d.qb),2),18);L8d=BD(qud(ZKd(q8d.qb),3),34);M8d=BD(qud(ZKd(q8d.qb),4),34);P8d=BD(qud(ZKd(q8d.qb),6),34);O8d=BD(qud(ZKd(q8d.qb),5),18);w8d=q8d.j;x8d=q8d.k;y8d=q8d.q;z8d=q8d.w;A8d=q8d.B;B8d=q8d.A;C8d=q8d.C;D8d=q8d.D;E8d=q8d._;G8d=q8d.cb;J8d=q8d.hb} +function $Dc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.c=0;a.b=0;d=2*b.c.a.c.length+1;o:for(l=c.Kc();l.Ob();){k=BD(l.Pb(),11);h=k.j==(Ucd(),Acd)||k.j==Rcd;n=0;if(h){m=BD(vNb(k,(wtc(),gtc)),10);if(!m){continue}n+=VDc(a,d,k,m)}else{for(j=new olb(k.g);j.a<j.c.c.length;){i=BD(mlb(j),17);e=i.d;if(e.i.c==b.c){Ekb(a.a,k);continue o}else{n+=a.g[e.p]}}for(g=new olb(k.e);g.a<g.c.c.length;){f=BD(mlb(g),17);e=f.c;if(e.i.c==b.c){Ekb(a.a,k);continue o}else{n-=a.g[e.p]}}}if(k.e.c.length+k.g.c.length>0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}} +function $9d(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} +function l5b(a,b,c){var d,e,f,g;Odd(c,'Graph transformation ('+a.a+')',1);g=Mu(b.a);for(f=new olb(b.b);f.a<f.c.c.length;){e=BD(mlb(f),29);Gkb(g,e.a)}d=BD(vNb(b,(Nyc(),Mwc)),419);if(d==(xqc(),vqc)){switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);break;case 3:p5b(b,g);break;case 4:if(a.a==(y5b(),x5b)){p5b(b,g);a5b(b,g)}else{a5b(b,g);p5b(b,g)}}}else{if(a.a==(y5b(),x5b)){switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);a5b(b,g);break;case 3:p5b(b,g);_4b(b,g);break;case 4:_4b(b,g);p5b(b,g);}}else{switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);a5b(b,g);break;case 3:_4b(b,g);p5b(b,g);break;case 4:p5b(b,g);_4b(b,g);}}}Qdd(c)} +function j6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;j=new zsb;k=new zsb;o=new zsb;p=new zsb;i=Edb(ED(vNb(b,(Nyc(),vyc))));f=Edb(ED(vNb(b,lyc)));for(h=new olb(c);h.a<h.c.c.length;){g=BD(mlb(h),10);l=BD(vNb(g,(wtc(),Hsc)),61);if(l==(Ucd(),Acd)){k.a.zc(g,k);for(e=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);Qqb(j,d.c.i)}}else if(l==Rcd){p.a.zc(g,p);for(e=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);Qqb(o,d.c.i)}}}if(j.a.gc()!=0){m=new tPc(2,f);n=sPc(m,b,j,k,-i-b.c.b);if(n>0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new tPc(1,f);n=sPc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}} +function kKd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;$Jd(a,null)}else{a.F=(uCb(b),b);d=hfb(b,wfb(60));if(d!=-1){e=b.substr(0,d);hfb(b,wfb(46))==-1&&!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)&&(e=Lve);c=kfb(b,wfb(62));c!=-1&&(e+=''+b.substr(c+1));$Jd(a,e)}else{e=b;if(hfb(b,wfb(46))==-1){d=hfb(b,wfb(91));d!=-1&&(e=b.substr(0,d));if(!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)){e=Lve;d!=-1&&(e+=''+b.substr(d))}else{e=b}}$Jd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,f,b))} +function AMc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=KC(WD,oje,25,p,15,1);l=0;for(k=new olb(b.b);k.a<k.c.c.length;){j=BD(mlb(k),29);n[l++]=j.a.c.length}m=new Bib(b.b,2);for(d=1;d<p-1;d++){c=(sCb(m.b<m.d.gc()),BD(m.d.Xb(m.c=m.b++),29));o=new olb(c.a);f=0;h=0;for(i=0;i<n[d+1];i++){t=BD(mlb(o),10);if(i==n[d+1]-1||zMc(a,t,d+1,d)){g=n[d]-1;zMc(a,t,d+1,d)&&(g=a.c.e[BD(BD(BD(Ikb(a.c.b,t.p),15).Xb(0),46).a,10).p]);while(h<=i){s=BD(Ikb(c.a,h),10);if(!zMc(a,s,d+1,d)){for(r=BD(Ikb(a.c.b,s.p),15).Kc();r.Ob();){q=BD(r.Pb(),46);e=a.c.e[BD(q.a,10).p];(e<f||e>g)&&Qqb(a.b,BD(q.b,17))}}++h}f=g}}}} +function o5c(b,c){var d;if(c==null||dfb(c,Xhe)){return null}if(c.length==0&&b.k!=(_5c(),W5c)){return null}switch(b.k.g){case 1:return efb(c,kse)?(Bcb(),Acb):efb(c,lse)?(Bcb(),zcb):null;case 2:try{return meb(Icb(c,Rie,Ohe))}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 4:try{return Hcb(c)}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 3:return c;case 5:j5c(b);return m5c(b,c);case 6:j5c(b);return n5c(b,b.a,c);case 7:try{d=l5c(b);d.Jf(c);return d}catch(a){a=ubb(a);if(JD(a,32)){return null}else throw vbb(a)}default:throw vbb(new Zdb('Invalid type set for this layout option.'));}} +function JWb(a){AWb();var b,c,d,e,f,g,h;h=new CWb;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),140);(!h.b||b.c>=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new NWb((lWb(),hWb));rXb(a,yWb,new amb(OC(GC(bQ,1),Uhe,369,0,[d])));g=new NWb(kWb);rXb(a,xWb,new amb(OC(GC(bQ,1),Uhe,369,0,[g])));e=new NWb(iWb);rXb(a,wWb,new amb(OC(GC(bQ,1),Uhe,369,0,[e])));f=new NWb(jWb);rXb(a,vWb,new amb(OC(GC(bQ,1),Uhe,369,0,[f])));DWb(d.c,hWb);DWb(e.c,iWb);DWb(f.c,jWb);DWb(g.c,kWb);h.a.c=KC(SI,Uhe,1,0,5,1);Gkb(h.a,d.c);Gkb(h.a,Su(e.c));Gkb(h.a,f.c);Gkb(h.a,Su(g.c));return h} +function jxd(a){var b;switch(a.d){case 1:{if(a.hj()){return a.o!=-2}break}case 2:{if(a.hj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.gj();switch(a.p){case 0:return b!=null&&Ccb(DD(b))!=Kbb(a.k,0);case 1:return b!=null&&BD(b,217).a!=Tbb(a.k)<<24>>24;case 2:return b!=null&&BD(b,172).a!=(Tbb(a.k)&aje);case 6:return b!=null&&Kbb(BD(b,162).a,a.k);case 5:return b!=null&&BD(b,19).a!=Tbb(a.k);case 7:return b!=null&&BD(b,184).a!=Tbb(a.k)<<16>>16;case 3:return b!=null&&Edb(ED(b))!=a.j;case 4:return b!=null&&BD(b,155).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}} +function nOd(a,b,c){var d,e,f,g;if(a.Fk()&&a.Ek()){g=oOd(a,BD(c,56));if(PD(g)!==PD(c)){a.Oi(b);a.Ui(b,pOd(a,b,g));if(a.rk()){f=(e=BD(c,49),a.Dk()?a.Bk()?e.ih(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),null):e.ih(a.b,bLd(e.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,null):e.ih(a.b,-1-a.aj(),null,null));!BD(g,49).eh()&&(f=(d=BD(g,49),a.Dk()?a.Bk()?d.gh(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),f):d.gh(a.b,bLd(d.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,f):d.gh(a.b,-1-a.aj(),null,f)));!!f&&f.Fi()}oid(a.b)&&a.$i(a.Zi(9,c,g,b,false));return g}}return c} +function Noc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Edb(ED(vNb(a,(Nyc(),oyc))));d=Edb(ED(vNb(a,Cyc)));m=new _fd;yNb(m,oyc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=G1b(p.c);t=G1b(s.c);e=new Rkb;for(l=q;l<=t;l++){h=new b0b(a);__b(h,(j0b(),g0b));yNb(h,(wtc(),$sc),j);yNb(h,Vxc,(dcd(),$bd));yNb(h,qyc,m);n=BD(Ikb(a.b,l),29);l==q?Z_b(h,n.a.c.length-c,n):$_b(h,n);u=Edb(ED(vNb(j,Zwc)));if(u<0){u=0;yNb(j,Zwc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new H0b;G0b(g,(Ucd(),Tcd));F0b(g,h);g.n.b=o;i=new H0b;G0b(i,zcd);F0b(i,h);i.n.b=o;RZb(j,g);f=new UZb;tNb(f,j);yNb(f,jxc,null);QZb(f,i);RZb(f,r);Ooc(h,j,f);e.c[e.c.length]=f;j=f}return e} +function sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=BD(Y_b(a,(Ucd(),Tcd)).Kc().Pb(),11).e;n=BD(Y_b(a,zcd).Kc().Pb(),11).g;h=i.c.length;t=A0b(BD(Ikb(a.j,0),11));while(h-->0){p=(tCb(0,i.c.length),BD(i.c[0],17));e=(tCb(0,n.c.length),BD(n.c[0],17));s=e.d.e;f=Jkb(s,e,0);SZb(p,e.d,f);QZb(e,null);RZb(e,null);o=p.a;b&&Dsb(o,new g7c(t));for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);Dsb(o,new g7c(c))}r=p.b;for(m=new olb(e.b);m.a<m.c.c.length;){l=BD(mlb(m),70);r.c[r.c.length]=l}q=BD(vNb(p,(Nyc(),jxc)),74);g=BD(vNb(e,jxc),74);if(g){if(!q){q=new s7c;yNb(p,jxc,q)}for(k=Jsb(g,0);k.b!=k.d.c;){j=BD(Xsb(k),8);Dsb(q,new g7c(j))}}}} +function EJb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.b=0;c.n.c=0;return}j=a.u.Hc((rcd(),ncd));g=0;h=i.Kc();k=null;l=0;m=0;while(h.Ob()){d=BD(h.Pb(),111);e=Edb(ED(d.b.We((CKb(),BKb))));f=d.b.rf().a;a.A.Hc((tdd(),sdd))&&KJb(a,b);if(!k){!!a.C&&a.C.b>0&&(g=$wnd.Math.max(g,IJb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-e)<=ple||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-1)<=ple||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g} +function NKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((rcd(),ncd));g=0;a.A.Hc((tdd(),sdd))&&SKb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=BD(h.Pb(),111);f=Edb(ED(d.b.We((CKb(),BKb))));e=d.b.rf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,IJb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-f)<=ple||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-1)<=ple||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g} +function _Ec(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=KC(OQ,kne,10,h+i,0,1);for(g=0;g<h;g++){this.d[g]=b.d[g]}for(f=0;f<i;f++){this.d[h+f]=c.d[f]}if(b.e){this.e=Ru(b.e);this.e.Mc(c);if(c.e){for(e=c.e.Kc();e.Ob();){d=BD(e.Pb(),233);if(d==b){continue}else this.e.Hc(d)?--d.c:this.e.Fc(d)}}}else if(c.e){this.e=Ru(c.e);this.e.Mc(b)}this.f=b.f+c.f;this.a=b.a+c.a;this.a>0?ZEc(this,this.f/this.a):REc(b.g,b.d[0]).a!=null&&REc(c.g,c.d[0]).a!=null?ZEc(this,(Edb(REc(b.g,b.d[0]).a)+Edb(REc(c.g,c.d[0]).a))/2):REc(b.g,b.d[0]).a!=null?ZEc(this,REc(b.g,b.d[0]).a):REc(c.g,c.d[0]).a!=null&&ZEc(this,REc(c.g,c.d[0]).a)} +function BUb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new dVb(oqb(t1));for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),841);h=new gVb(OC(GC(IP,1),Uhe,81,0,[]));Ekb(a.a.a,h);for(j=new olb(c.d);j.a<j.c.c.length;){i=BD(mlb(j),110);k=new GUb(a,i);AUb(k,BD(vNb(c.c,(wtc(),Esc)),21));if(!Mhb(a.g,c)){Rhb(a.g,c,new f7c(i.c,i.d));Rhb(a.f,c,k)}Ekb(a.a.b,k);eVb(h,k)}for(g=new olb(c.b);g.a<g.c.c.length;){f=BD(mlb(g),594);k=new GUb(a,f.kf());Rhb(a.b,f,new vgd(h,k));AUb(k,BD(vNb(c.c,(wtc(),Esc)),21));if(f.hf()){l=new HUb(a,f.hf(),1);AUb(l,BD(vNb(c.c,Esc),21));e=new gVb(OC(GC(IP,1),Uhe,81,0,[]));eVb(e,l);Rc(a.c,f.gf(),new vgd(h,l))}}}return a.a} +function oBc(a){var b;this.a=a;b=(j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])).length;this.b=IC(Q3,[nie,zqe],[593,146],0,[b,b],2);this.c=IC(Q3,[nie,zqe],[593,146],0,[b,b],2);nBc(this,h0b,(Nyc(),vyc),wyc);lBc(this,h0b,g0b,oyc,pyc);kBc(this,h0b,i0b,oyc);kBc(this,h0b,e0b,oyc);lBc(this,h0b,f0b,vyc,wyc);nBc(this,g0b,lyc,myc);kBc(this,g0b,i0b,lyc);kBc(this,g0b,e0b,lyc);lBc(this,g0b,f0b,oyc,pyc);mBc(this,i0b,lyc);kBc(this,i0b,e0b,lyc);kBc(this,i0b,f0b,syc);mBc(this,e0b,zyc);lBc(this,e0b,f0b,uyc,tyc);nBc(this,f0b,lyc,lyc);nBc(this,d0b,lyc,myc);lBc(this,d0b,h0b,oyc,pyc);lBc(this,d0b,f0b,oyc,pyc);lBc(this,d0b,g0b,oyc,pyc)} +function _2d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;g=c.ak();if(JD(g,99)&&(BD(g,18).Bb&Tje)!=0){m=BD(c.dd(),49);p=xid(a.e,m);if(p!=m){k=R6d(g,p);mud(a,b,t3d(a,b,k));l=null;if(oid(a.e)){d=e1d((O6d(),M6d),a.e.Tg(),g);if(d!=XKd(a.e.Tg(),a.c)){q=S6d(a.e.Tg(),g);h=0;f=BD(a.g,119);for(i=0;i<b;++i){e=f[i];q.rl(e.ak())&&++h}l=new O7d(a.e,9,d,m,p,h,false);l.Ei(new pSd(a.e,9,a.c,c,k,b,false))}}o=BD(g,18);n=zUd(o);if(n){l=m.ih(a.e,bLd(m.Tg(),n),null,l);l=BD(p,49).gh(a.e,bLd(p.Tg(),n),null,l)}else if((o.Bb&ote)!=0){j=-1-bLd(a.e.Tg(),o);l=m.ih(a.e,j,null,null);!BD(p,49).eh()&&(l=BD(p,49).gh(a.e,j,null,l))}!!l&&l.Fi();return k}}return c} +function yUb(a){var b,c,d,e,f,g,h,i;for(f=new olb(a.a.b);f.a<f.c.c.length;){e=BD(mlb(f),81);e.b.c=e.g.c;e.b.d=e.g.d}i=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(d=new olb(a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}for(h=Uc(a.c).a.nc();h.Ob();){g=BD(h.Pb(),46);c=BD(g.b,81);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}a.d=V6c(new f7c(i.a,i.b));a.e=c7c(new f7c(b.a,b.b),i);a.a.a.c=KC(SI,Uhe,1,0,5,1);a.a.b.c=KC(SI,Uhe,1,0,5,1)} +function svd(a){var b,c,d;l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new Z9c]));c=new xB(a);for(d=0;d<c.a.length;++d){b=tB(c,d).je().a;dfb(b,'layered')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new kwc])):dfb(b,'force')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new TRb])):dfb(b,'stress')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new PSb])):dfb(b,'mrtree')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new sTc])):dfb(b,'radial')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new IWc])):dfb(b,'disco')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new gFb,new oPb])):dfb(b,'sporeOverlap')||dfb(b,'sporeCompaction')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new B0c])):dfb(b,'rectpacking')&&l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new PYc]))}} +function j_b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;m=new g7c(a.o);r=b.a/m.a;h=b.b/m.b;p=b.a-m.a;f=b.b-m.b;if(c){e=PD(vNb(a,(Nyc(),Vxc)))===PD((dcd(),$bd));for(o=new olb(a.j);o.a<o.c.c.length;){n=BD(mlb(o),11);switch(n.j.g){case 1:e||(n.n.a*=r);break;case 2:n.n.a+=p;e||(n.n.b*=h);break;case 3:e||(n.n.a*=r);n.n.b+=f;break;case 4:e||(n.n.b*=h);}}}for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),70);k=i.n.a+i.o.a/2;l=i.n.b+i.o.b/2;q=k/m.a;g=l/m.b;if(q+g>=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;yNb(a,(Nyc(),Fxc),(tdd(),d=BD(gdb(I1),9),new xqb(d,BD(_Bb(d,d.length),9),0)))} +function iFd(a,b,c,d,e,f){var g;if(!(b==null||!OEd(b,zEd,AEd))){throw vbb(new Wdb('invalid scheme: '+b))}if(!a&&!(c!=null&&hfb(c,wfb(35))==-1&&c.length>0&&(BCb(0,c.length),c.charCodeAt(0)!=47))){throw vbb(new Wdb('invalid opaquePart: '+c))}if(a&&!(b!=null&&hnb(GEd,b.toLowerCase()))&&!(c==null||!OEd(c,CEd,DEd))){throw vbb(new Wdb(mve+c))}if(a&&b!=null&&hnb(GEd,b.toLowerCase())&&!eFd(c)){throw vbb(new Wdb(mve+c))}if(!fFd(d)){throw vbb(new Wdb('invalid device: '+d))}if(!hFd(e)){g=e==null?'invalid segments: null':'invalid segment: '+VEd(e);throw vbb(new Wdb(g))}if(!(f==null||hfb(f,wfb(35))==-1)){throw vbb(new Wdb('invalid query: '+f))}} +function nVc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Calculate Graph Size',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));h=dme;i=dme;f=ere;g=ere;for(l=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));l.e!=l.i.gc();){j=BD(Dyd(l),33);o=j.i;p=j.j;r=j.g;d=j.f;e=BD(hkd(j,(Y9c(),S8c)),142);h=$wnd.Math.min(h,o-e.b);i=$wnd.Math.min(i,p-e.d);f=$wnd.Math.max(f,o+r+e.c);g=$wnd.Math.max(g,p+d+e.a)}n=BD(hkd(a,(Y9c(),f9c)),116);m=new f7c(h-n.b,i-n.d);for(k=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));k.e!=k.i.gc();){j=BD(Dyd(k),33);dld(j,j.i-m.a);eld(j,j.j-m.b)}q=f-h+(n.b+n.c);c=g-i+(n.d+n.a);cld(a,q);ald(a,c);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))} +function rGb(a){var b,c,d,e,f,g,h,i,j,k;d=new Rkb;for(g=new olb(a.e.a);g.a<g.c.c.length;){e=BD(mlb(g),121);k=0;e.k.c=KC(SI,Uhe,1,0,5,1);for(c=new olb(LFb(e));c.a<c.c.c.length;){b=BD(mlb(c),213);if(b.f){Ekb(e.k,b);++k}}k==1&&(d.c[d.c.length]=e,true)}for(f=new olb(d);f.a<f.c.c.length;){e=BD(mlb(f),121);while(e.k.c.length==1){j=BD(mlb(new olb(e.k)),213);a.b[j.c]=j.g;h=j.d;i=j.e;for(c=new olb(LFb(e));c.a<c.c.c.length;){b=BD(mlb(c),213);pb(b,j)||(b.f?h==b.d||i==b.e?(a.b[j.c]-=a.b[b.c]-b.g):(a.b[j.c]+=a.b[b.c]-b.g):e==h?b.d==e?(a.b[j.c]+=b.g):(a.b[j.c]-=b.g):b.d==e?(a.b[j.c]-=b.g):(a.b[j.c]+=b.g))}Lkb(h.k,j);Lkb(i.k,j);h==e?(e=j.e):(e=j.d)}}} +function k4c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(b==null||b.length==0){return null}f=BD(Phb(a.f,b),23);if(!f){for(e=(n=(new $ib(a.d)).a.vc().Kc(),new djb(n));e.a.Ob();){c=(g=BD(e.a.Pb(),42),BD(g.dd(),23));h=c.f;o=b.length;if(dfb(h.substr(h.length-o,o),b)&&(b.length==h.length||bfb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}if(!f){for(d=(m=(new $ib(a.d)).a.vc().Kc(),new djb(m));d.a.Ob();){c=(g=BD(d.a.Pb(),42),BD(g.dd(),23));l=c.g;if(l!=null){for(i=l,j=0,k=i.length;j<k;++j){h=i[j];o=b.length;if(dfb(h.substr(h.length-o,o),b)&&(b.length==h.length||bfb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}}}}!!f&&Shb(a.f,b,f)}return f} +function sA(a,b){var c,d,e,f,g;c=new Vfb;g=false;for(f=0;f<b.length;f++){d=(BCb(f,b.length),b.charCodeAt(f));if(d==32){gA(a,c,0);c.a+=' ';gA(a,c,0);while(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==32)){++f}continue}if(g){if(d==39){if(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+=String.fromCharCode(d);++f}else{g=false}}else{c.a+=String.fromCharCode(d)}continue}if(hfb('GyMLdkHmsSEcDahKzZv',wfb(d))>0){gA(a,c,0);c.a+=String.fromCharCode(d);e=lA(b,f);gA(a,c,e);f+=e-1;continue}if(d==39){if(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+="'";++f}else{g=true}}else{c.a+=String.fromCharCode(d)}}gA(a,c,0);mA(a)} +function wDc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(c,'Network simplex layering',1);a.b=b;r=BD(vNb(b,(Nyc(),Ayc)),19).a*4;q=a.b.a;if(q.c.length<1){Qdd(c);return}f=sDc(a,q);p=null;for(e=Jsb(f,0);e.b!=e.d.c;){d=BD(Xsb(e),15);h=r*QD($wnd.Math.sqrt(d.gc()));g=vDc(d);uGb(HGb(JGb(IGb(LGb(g),h),p),true),Udd(c,1));m=a.b.b;for(o=new olb(g.a);o.a<o.c.c.length;){n=BD(mlb(o),121);while(m.c.length<=n.e){Dkb(m,m.c.length,new H1b(a.b))}k=BD(n.f,10);$_b(k,BD(Ikb(m,n.e),29))}if(f.b>1){p=KC(WD,oje,25,a.b.b.c.length,15,1);l=0;for(j=new olb(a.b.b);j.a<j.c.c.length;){i=BD(mlb(j),29);p[l++]=i.a.c.length}}}q.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.b=null;a.c=null;Qdd(c)} +function OUb(a){var b,c,d,e,f,g,h;b=0;for(f=new olb(a.b.a);f.a<f.c.c.length;){d=BD(mlb(f),189);d.b=0;d.c=0}NUb(a,0);MUb(a,a.g);sVb(a.c);wVb(a.c);c=(ead(),aad);uVb(oVb(tVb(uVb(oVb(tVb(uVb(tVb(a.c,c)),had(c)))),c)));tVb(a.c,aad);RUb(a,a.g);SUb(a,0);TUb(a,0);UUb(a,1);NUb(a,1);MUb(a,a.d);sVb(a.c);for(g=new olb(a.b.a);g.a<g.c.c.length;){d=BD(mlb(g),189);b+=$wnd.Math.abs(d.c)}for(h=new olb(a.b.a);h.a<h.c.c.length;){d=BD(mlb(h),189);d.b=0;d.c=0}c=dad;uVb(oVb(tVb(uVb(oVb(tVb(uVb(wVb(tVb(a.c,c))),had(c)))),c)));tVb(a.c,aad);RUb(a,a.d);SUb(a,1);TUb(a,1);UUb(a,0);wVb(a.c);for(e=new olb(a.b.a);e.a<e.c.c.length;){d=BD(mlb(e),189);b+=$wnd.Math.abs(d.c)}return b} +function Wfe(a,b){var c,d,e,f,g,h,i,j,k;j=b;if(j.b==null||a.b==null)return;Yfe(a);Vfe(a);Yfe(j);Vfe(j);c=KC(WD,oje,25,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){d+=2}else if(f>=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(i<e){g+=2}else{throw vbb(new hz('Token#intersectRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] & ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=KC(WD,oje,25,k,15,1);$fb(c,0,a.b,0,k)} +function PUb(a){var b,c,d,e,f,g,h;b=new Rkb;a.g=new Rkb;a.d=new Rkb;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);Ekb(b,BD(BD(f.dd(),46).b,81));fad(BD(f.cd(),594).gf())?Ekb(a.d,BD(f.dd(),46)):Ekb(a.g,BD(f.dd(),46))}MUb(a,a.d);MUb(a,a.g);a.c=new CVb(a.b);AVb(a.c,(xUb(),wUb));RUb(a,a.d);RUb(a,a.g);Gkb(b,a.c.a.b);a.e=new f7c(Pje,Pje);a.a=new f7c(Qje,Qje);for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),81);a.e.a=$wnd.Math.min(a.e.a,c.g.c);a.e.b=$wnd.Math.min(a.e.b,c.g.d);a.a.a=$wnd.Math.max(a.a.a,c.g.c+c.g.b);a.a.b=$wnd.Math.max(a.a.b,c.g.d+c.g.a)}zVb(a.c,new YUb);h=0;do{e=OUb(a);++h}while((h<2||e>Qie)&&h<10);zVb(a.c,new _Ub);OUb(a);vVb(a.c);yUb(a.f)} +function sZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Ccb(DD(vNb(c,(Nyc(),fxc))))){return}for(h=new olb(c.j);h.a<h.c.c.length;){g=BD(mlb(h),11);m=k_b(g.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];f=i.d.i==c;e=f&&Ccb(DD(vNb(i,gxc)));if(e){o=i.c;n=BD(Ohb(a.b,o),10);if(!n){n=Z$b(o,(dcd(),bcd),o.j,-1,null,null,o.o,BD(vNb(b,Lwc),103),b);yNb(n,(wtc(),$sc),o);Rhb(a.b,o,n);Ekb(b.a,n)}q=i.d;p=BD(Ohb(a.b,q),10);if(!p){p=Z$b(q,(dcd(),bcd),q.j,1,null,null,q.o,BD(vNb(b,Lwc),103),b);yNb(p,(wtc(),$sc),q);Rhb(a.b,q,p);Ekb(b.a,p)}d=kZb(i);QZb(d,BD(Ikb(n.j,0),11));RZb(d,BD(Ikb(p.j,0),11));Rc(a.a,i,new BZb(d,b,(KAc(),IAc)));BD(vNb(b,(wtc(),Ksc)),21).Fc((Orc(),Hrc))}}}} +function W9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;Odd(c,'Label dummy switching',1);d=BD(vNb(b,(Nyc(),Owc)),227);J9b(b);e=T9b(b,d);a.a=KC(UD,Vje,25,b.b.c.length,15,1);for(h=(Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])),k=0,n=h.length;k<n;++k){f=h[k];if((f==zpc||f==upc||f==xpc)&&!BD(uqb(e.a,f)?e.b[f.g]:null,15).dc()){M9b(a,b);break}}for(i=OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc]),l=0,o=i.length;l<o;++l){f=i[l];f==zpc||f==upc||f==xpc||X9b(a,BD(uqb(e.a,f)?e.b[f.g]:null,15))}for(g=OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc]),j=0,m=g.length;j<m;++j){f=g[j];(f==zpc||f==upc||f==xpc)&&X9b(a,BD(uqb(e.a,f)?e.b[f.g]:null,15))}a.a=null;Qdd(c)} +function AFc(a,b){var c,d,e,f,g,h,i,j,k,l,m;switch(a.k.g){case 1:d=BD(vNb(a,(wtc(),$sc)),17);c=BD(vNb(d,_sc),74);!c?(c=new s7c):Ccb(DD(vNb(d,ltc)))&&(c=w7c(c));j=BD(vNb(a,Vsc),11);if(j){k=l7c(OC(GC(m1,1),nie,8,0,[j.i.n,j.n,j.a]));if(b<=k.a){return k.b}Gsb(c,k,c.a,c.a.a)}l=BD(vNb(a,Wsc),11);if(l){m=l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a]));if(m.a<=b){return m.b}Gsb(c,m,c.c.b,c.c)}if(c.b>=2){i=Jsb(c,0);g=BD(Xsb(i),8);h=BD(Xsb(i),8);while(h.a<b&&i.b!=i.d.c){g=h;h=BD(Xsb(i),8)}return g.b+(b-g.a)/(h.a-g.a)*(h.b-g.b)}break;case 3:f=BD(vNb(BD(Ikb(a.j,0),11),(wtc(),$sc)),11);e=f.i;switch(f.j.g){case 1:return e.n.b;case 3:return e.n.b+e.o.b;}}return T_b(a).b} +function Wgc(a){var b,c,d,e,f,g,h,i,j,k,l;for(g=new olb(a.d.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(Ccb(DD(vNb(h,(Nyc(),pwc))))){if(!Qq(O_b(h))){d=BD(Oq(O_b(h)),17);k=d.c.i;k==h&&(k=d.d.i);l=new vgd(k,c7c(R6c(h.n),k.n));Rhb(a.b,h,l);continue}}e=new J6c(h.n.a-h.d.b,h.n.b-h.d.d,h.o.a+h.d.b+h.d.c,h.o.b+h.d.d+h.d.a);b=vDb(yDb(wDb(xDb(new zDb,h),e),Fgc),a.a);pDb(qDb(rDb(new sDb,OC(GC(PM,1),Uhe,57,0,[b])),b),a.a);j=new lEb;Rhb(a.e,b,j);c=sr(new Sr(ur(R_b(h).a.Kc(),new Sq)))-sr(new Sr(ur(U_b(h).a.Kc(),new Sq)));c<0?jEb(j,true,(ead(),aad)):c>0&&jEb(j,true,(ead(),bad));h.k==(j0b(),e0b)&&kEb(j);Rhb(a.f,h,b)}}} +function Bbc(a,b,c){var d,e,f,g,h,i,j,k,l,m;Odd(c,'Node promotion heuristic',1);a.g=b;Abc(a);a.q=BD(vNb(b,(Nyc(),rxc)),260);k=BD(vNb(a.g,qxc),19).a;f=new Jbc;switch(a.q.g){case 2:case 1:Dbc(a,f);break;case 3:a.q=(kAc(),jAc);Dbc(a,f);i=0;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),19);i=$wnd.Math.max(i,g.a)}if(i>a.j){a.q=dAc;Dbc(a,f)}break;case 4:a.q=(kAc(),jAc);Dbc(a,f);j=0;for(e=new olb(a.b);e.a<e.c.c.length;){d=ED(mlb(e));j=$wnd.Math.max(j,(uCb(d),d))}if(j>a.k){a.q=gAc;Dbc(a,f)}break;case 6:m=QD($wnd.Math.ceil(a.f.length*k/100));Dbc(a,new Mbc(m));break;case 5:l=QD($wnd.Math.ceil(a.d*k/100));Dbc(a,new Pbc(l));break;default:Dbc(a,f);}Ebc(a,b);Qdd(c)} +function fFc(a,b,c){var d,e,f,g;this.j=a;this.e=WZb(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?BD(Ikb(c,Q_b(this.o).p),214):null;e=BD(vNb(a,(wtc(),Ksc)),21);this.g=e.Hc((Orc(),Hrc));this.b=new Rkb;this.d=new rHc(this.e);g=BD(vNb(this.j,jtc),230);this.q=wFc(b,g,this.e);this.k=new BGc(this);f=Ou(OC(GC(qY,1),Uhe,225,0,[this,this.d,this.k,this.q]));if(b==(rGc(),oGc)&&!Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new uEc(d,g,BD(this.q,402))}else if(b==oGc&&Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new XGc(d,g,BD(this.q,402))}else{this.c=new Oic(b,this)}Ekb(f,this.c);$Ic(f,this.e);this.s=AGc(this.k)} +function xUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);o=l?BD(vNb(l,(mTc(),_Sc)),86):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h<e;h++){c=VRc(c);d=VRc(d);u+=Edb(ED(vNb(c,(mTc(),cTc))));i+=Edb(ED(vNb(d,cTc)))}t=Edb(ED(vNb(o,(mTc(),fTc))));s=Edb(ED(vNb(l,fTc)));m=zUc(l,o);n=t+i+a.a+m-s-u;if(0<n){j=b;k=0;while(!!j&&j!=d){++k;j=BD(vNb(j,aTc),86)}if(j){r=n/k;j=b;while(j!=d){q=Edb(ED(vNb(j,fTc)))+n;yNb(j,fTc,q);p=Edb(ED(vNb(j,cTc)))+n;yNb(j,cTc,p);n-=r;j=BD(vNb(j,aTc),86)}}else{return}}++e;l.d.b==0?(l=JRc(new ZRc(b),e)):(l=BD(pr((f=Jsb((new ZRc(l)).a.d,0),new aSc(f))),86));o=l?BD(vNb(l,_Sc),86):null}} +function Cbc(a,b){var c,d,e,f,g,h,i,j,k,l;i=true;e=0;j=a.f[b.p];k=b.o.b+a.n;c=a.c[b.p][2];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a-1+c));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))-k+c*a.e);++j;if(j>=a.i){++a.i;Ekb(a.a,meb(1));Ekb(a.b,k)}else{d=a.c[b.p][1];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a+1-d));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))+k-d*a.e)}(a.q==(kAc(),dAc)&&(BD(Ikb(a.a,j),19).a>a.j||BD(Ikb(a.a,j-1),19).a>a.j)||a.q==gAc&&(Edb(ED(Ikb(a.b,j)))>a.k||Edb(ED(Ikb(a.b,j-1)))>a.k))&&(i=false);for(g=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);h=f.c.i;if(a.f[h.p]==j){l=Cbc(a,h);e=e+BD(l.a,19).a;i=i&&Ccb(DD(l.b))}}a.f[b.p]=j;e=e+a.c[b.p][0];return new vgd(meb(e),(Bcb(),i?true:false))} +function sPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Lqb;g=new Rkb;qPc(a,c,a.d.fg(),g,l);qPc(a,d,a.d.gg(),g,l);a.b=0.2*(p=rPc(LAb(new YAb(null,new Kub(g,16)),new xPc)),q=rPc(LAb(new YAb(null,new Kub(g,16)),new zPc)),$wnd.Math.min(p,q));f=0;for(h=0;h<g.c.length-1;h++){i=(tCb(h,g.c.length),BD(g.c[h],112));for(o=h+1;o<g.c.length;o++){f+=pPc(a,i,(tCb(o,g.c.length),BD(g.c[o],112)))}}m=BD(vNb(b,(wtc(),jtc)),230);f>=2&&(r=WNc(g,true,m),!a.e&&(a.e=new ZOc(a)),VOc(a.e,r,g,a.b),undefined);uPc(g,m);wPc(g);n=-1;for(k=new olb(g);k.a<k.c.c.length;){j=BD(mlb(k),112);if($wnd.Math.abs(j.s-j.c)<qme){continue}n=$wnd.Math.max(n,j.o);a.d.dg(j,e,a.c)}a.d.a.a.$b();return n+1} +function aUb(a,b){var c,d,e,f,g;c=Edb(ED(vNb(b,(Nyc(),lyc))));c<2&&yNb(b,lyc,2);d=BD(vNb(b,Lwc),103);d==(ead(),cad)&&yNb(b,Lwc,a_b(b));e=BD(vNb(b,fyc),19);e.a==0?yNb(b,(wtc(),jtc),new Gub):yNb(b,(wtc(),jtc),new Hub(e.a));f=DD(vNb(b,Axc));f==null&&yNb(b,Axc,(Bcb(),PD(vNb(b,Swc))===PD((Aad(),wad))?true:false));MAb(new YAb(null,new Kub(b.a,16)),new dUb(a));MAb(LAb(new YAb(null,new Kub(b.b,16)),new fUb),new hUb(a));g=new oBc(b);yNb(b,(wtc(),otc),g);H2c(a.a);K2c(a.a,(qUb(),lUb),BD(vNb(b,Jwc),246));K2c(a.a,mUb,BD(vNb(b,sxc),246));K2c(a.a,nUb,BD(vNb(b,Iwc),246));K2c(a.a,oUb,BD(vNb(b,Exc),246));K2c(a.a,pUb,kNc(BD(vNb(b,Swc),218)));E2c(a.a,_Tb(b));yNb(b,itc,F2c(a.a,b))} +function fjc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(m=a.c[b],n=a.c[c],(o=BD(vNb(m,(wtc(),Qsc)),15),!!o&&o.gc()!=0&&o.Hc(n))||(p=m.k!=(j0b(),g0b)&&n.k!=g0b,q=BD(vNb(m,Psc),10),r=BD(vNb(n,Psc),10),s=q!=r,t=!!q&&q!=m||!!r&&r!=n,u=gjc(m,(Ucd(),Acd)),v=gjc(n,Rcd),t=t|(gjc(m,Rcd)||gjc(n,Acd)),w=t&&s||u||v,p&&w)||m.k==(j0b(),i0b)&&n.k==h0b||n.k==(j0b(),i0b)&&m.k==h0b){return false}k=a.c[b];f=a.c[c];e=LHc(a.e,k,f,(Ucd(),Tcd));i=LHc(a.i,k,f,zcd);Yic(a.f,k,f);j=Hic(a.b,k,f)+BD(e.a,19).a+BD(i.a,19).a+a.f.d;h=Hic(a.b,f,k)+BD(e.b,19).a+BD(i.b,19).a+a.f.b;if(a.a){l=BD(vNb(k,$sc),11);g=BD(vNb(f,$sc),11);d=JHc(a.g,l,g);j+=BD(d.a,19).a;h+=BD(d.b,19).a}return j>h} +function k6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=BD(vNb(a,(Nyc(),Vxc)),98);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new Rkb;l=new Rkb;for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),10);switch(c.g){case 1:case 2:case 3:a6b(d);break;case 4:m=BD(vNb(d,Txc),8);n=!m?0:m.a;d.n.a=h*Edb(ED(vNb(d,(wtc(),htc))))-n;M_b(d,true,false);break;case 5:o=BD(vNb(d,Txc),8);p=!o?0:o.a;d.n.a=Edb(ED(vNb(d,(wtc(),htc))))-p;M_b(d,true,false);g.a=$wnd.Math.max(g.a,d.n.a+d.o.a/2);}switch(BD(vNb(d,(wtc(),Hsc)),61).g){case 1:d.n.b=i;j.c[j.c.length]=d;break;case 3:d.n.b=k;l.c[l.c.length]=d;}}switch(c.g){case 1:case 2:c6b(j,a);c6b(l,a);break;case 3:i6b(j,a);i6b(l,a);}} +function VHc(a,b){var c,d,e,f,g,h,i,j,k,l;k=new Rkb;l=new jkb;f=null;e=0;for(d=0;d<b.length;++d){c=b[d];XHc(f,c)&&(e=QHc(a,l,k,EHc,e));wNb(c,(wtc(),Psc))&&(f=BD(vNb(c,Psc),10));switch(c.k.g){case 0:for(i=Vq(Nq(V_b(c,(Ucd(),Acd)),new GIc));xc(i);){g=BD(yc(i),11);a.d[g.p]=e++;k.c[k.c.length]=g}e=QHc(a,l,k,EHc,e);for(j=Vq(Nq(V_b(c,Rcd),new GIc));xc(j);){g=BD(yc(j),11);a.d[g.p]=e++;k.c[k.c.length]=g}break;case 3:if(!V_b(c,DHc).dc()){g=BD(V_b(c,DHc).Xb(0),11);a.d[g.p]=e++;k.c[k.c.length]=g}V_b(c,EHc).dc()||Wjb(l,c);break;case 1:for(h=V_b(c,(Ucd(),Tcd)).Kc();h.Ob();){g=BD(h.Pb(),11);a.d[g.p]=e++;k.c[k.c.length]=g}V_b(c,zcd).Jc(new EIc(l,c));}}QHc(a,l,k,EHc,e);return k} +function y$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=Pje;k=Pje;h=Qje;i=Qje;for(m=new olb(b.i);m.a<m.c.c.length;){l=BD(mlb(m),65);e=BD(BD(Ohb(a.g,l.a),46).b,33);bld(e,l.b.c,l.b.d);j=$wnd.Math.min(j,e.i);k=$wnd.Math.min(k,e.j);h=$wnd.Math.max(h,e.i+e.g);i=$wnd.Math.max(i,e.j+e.f)}n=BD(hkd(a.c,(d0c(),W_c)),116);Afd(a.c,h-j+(n.b+n.c),i-k+(n.d+n.a),true,true);Efd(a.c,-j+n.b,-k+n.d);for(d=new Fyd(Wod(a.c));d.e!=d.i.gc();){c=BD(Dyd(d),79);g=itd(c,true,true);o=jtd(c);q=ltd(c);p=new f7c(o.i+o.g/2,o.j+o.f/2);f=new f7c(q.i+q.g/2,q.j+q.f/2);r=c7c(new f7c(f.a,f.b),p);l6c(r,o.g,o.f);P6c(p,r);s=c7c(new f7c(p.a,p.b),f);l6c(s,q.g,q.f);P6c(f,s);nmd(g,p.a,p.b);gmd(g,f.a,f.b)}} +function EYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;a.c=a.d;o=DD(vNb(b,(Nyc(),gyc)));n=o==null||(uCb(o),o);f=BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc));e=BD(vNb(b,Vxc),98);c=!(e==(dcd(),Zbd)||e==_bd||e==$bd);if(n&&(c||!f)){for(l=new olb(b.a);l.a<l.c.c.length;){j=BD(mlb(l),10);j.p=0}m=new Rkb;for(k=new olb(b.a);k.a<k.c.c.length;){j=BD(mlb(k),10);d=DYb(a,j,null);if(d){i=new XZb;tNb(i,b);yNb(i,Esc,BD(d.b,21));u_b(i.d,b.d);yNb(i,Hxc,null);for(h=BD(d.a,15).Kc();h.Ob();){g=BD(h.Pb(),10);Ekb(i.a,g);g.a=i}m.Fc(i)}}f&&(PD(vNb(b,twc))===PD((RXb(),OXb))?(a.c=a.b):(a.c=a.a))}else{m=new amb(OC(GC(KQ,1),cne,37,0,[b]))}PD(vNb(b,twc))!==PD((RXb(),QXb))&&(mmb(),m.ad(new HYb));return m} +function KTc(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,are),'ELK Mr. Tree'),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new NTc),bre),pqb((Csd(),wsd)))));p4c(a,are,ame,CTc);p4c(a,are,wme,20);p4c(a,are,_le,tme);p4c(a,are,vme,meb(1));p4c(a,are,zme,(Bcb(),true));p4c(a,are,Zpe,Ksd(vTc));p4c(a,are,Fme,Ksd(xTc));p4c(a,are,Tme,Ksd(yTc));p4c(a,are,Eme,Ksd(zTc));p4c(a,are,Gme,Ksd(wTc));p4c(a,are,Dme,Ksd(ATc));p4c(a,are,Hme,Ksd(DTc));p4c(a,are,Zqe,Ksd(ITc));p4c(a,are,$qe,Ksd(FTc))} +function zod(a){if(a.q)return;a.q=true;a.p=Lnd(a,0);a.a=Lnd(a,1);Qnd(a.a,0);a.f=Lnd(a,2);Qnd(a.f,1);Knd(a.f,2);a.n=Lnd(a,3);Knd(a.n,3);Knd(a.n,4);Knd(a.n,5);Knd(a.n,6);a.g=Lnd(a,4);Qnd(a.g,7);Knd(a.g,8);a.c=Lnd(a,5);Qnd(a.c,7);Qnd(a.c,8);a.i=Lnd(a,6);Qnd(a.i,9);Qnd(a.i,10);Qnd(a.i,11);Qnd(a.i,12);Knd(a.i,13);a.j=Lnd(a,7);Qnd(a.j,9);a.d=Lnd(a,8);Qnd(a.d,3);Qnd(a.d,4);Qnd(a.d,5);Qnd(a.d,6);Knd(a.d,7);Knd(a.d,8);Knd(a.d,9);Knd(a.d,10);a.b=Lnd(a,9);Knd(a.b,0);Knd(a.b,1);a.e=Lnd(a,10);Knd(a.e,1);Knd(a.e,2);Knd(a.e,3);Knd(a.e,4);Qnd(a.e,5);Qnd(a.e,6);Qnd(a.e,7);Qnd(a.e,8);Qnd(a.e,9);Qnd(a.e,10);Knd(a.e,11);a.k=Lnd(a,11);Knd(a.k,0);Knd(a.k,1);a.o=Mnd(a,12);a.s=Mnd(a,13)} +function AUb(a,b){b.dc()&&HVb(a.j,true,true,true,true);pb(b,(Ucd(),Gcd))&&HVb(a.j,true,true,true,false);pb(b,Bcd)&&HVb(a.j,false,true,true,true);pb(b,Ocd)&&HVb(a.j,true,true,false,true);pb(b,Qcd)&&HVb(a.j,true,false,true,true);pb(b,Hcd)&&HVb(a.j,false,true,true,false);pb(b,Ccd)&&HVb(a.j,false,true,false,true);pb(b,Pcd)&&HVb(a.j,true,false,false,true);pb(b,Ncd)&&HVb(a.j,true,false,true,false);pb(b,Lcd)&&HVb(a.j,true,true,true,true);pb(b,Ecd)&&HVb(a.j,true,true,true,true);pb(b,Lcd)&&HVb(a.j,true,true,true,true);pb(b,Dcd)&&HVb(a.j,true,true,true,true);pb(b,Mcd)&&HVb(a.j,true,true,true,true);pb(b,Kcd)&&HVb(a.j,true,true,true,true);pb(b,Jcd)&&HVb(a.j,true,true,true,true)} +function rZb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;f=new Rkb;for(j=new olb(d);j.a<j.c.c.length;){h=BD(mlb(j),441);g=null;if(h.f==(KAc(),IAc)){for(o=new olb(h.e);o.a<o.c.c.length;){n=BD(mlb(o),17);q=n.d.i;if(Q_b(q)==b){iZb(a,b,h,n,h.b,n.d)}else if(!c||f_b(q,c)){jZb(a,b,h,d,n)}else{m=oZb(a,b,c,n,h.b,IAc,g);m!=g&&(f.c[f.c.length]=m,true);m.c&&(g=m)}}}else{for(l=new olb(h.e);l.a<l.c.c.length;){k=BD(mlb(l),17);p=k.c.i;if(Q_b(p)==b){iZb(a,b,h,k,k.c,h.b)}else if(!c||f_b(p,c)){continue}else{m=oZb(a,b,c,k,h.b,HAc,g);m!=g&&(f.c[f.c.length]=m,true);m.c&&(g=m)}}}}for(i=new olb(f);i.a<i.c.c.length;){h=BD(mlb(i),441);Jkb(b.a,h.a,0)!=-1||Ekb(b.a,h.a);h.c&&(e.c[e.c.length]=h,true)}} +function SJc(a,b,c){var d,e,f,g,h,i,j,k,l,m;j=new Rkb;for(i=new olb(b.a);i.a<i.c.c.length;){g=BD(mlb(i),10);for(m=V_b(g,(Ucd(),zcd)).Kc();m.Ob();){l=BD(m.Pb(),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(!OZb(d)&&d.c.i.c==d.d.i.c||OZb(d)||d.d.i.c!=c){continue}j.c[j.c.length]=d}}}for(h=Su(c.a).Kc();h.Ob();){g=BD(h.Pb(),10);for(m=V_b(g,(Ucd(),Tcd)).Kc();m.Ob();){l=BD(m.Pb(),11);for(e=new olb(l.e);e.a<e.c.c.length;){d=BD(mlb(e),17);if(!OZb(d)&&d.c.i.c==d.d.i.c||OZb(d)||d.c.i.c!=b){continue}k=new Bib(j,j.c.length);f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17))}k.b>0&&uib(k)}}}} +function Vmd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}e=o1d((O6d(),M6d),c).$k();if(e){return e.Aj().Nh().Ih(e,d)}h=o1d(M6d,c).al();if(h){if(d==null){return null}i=BD(d,15);if(i.dc()){return ''}m=new Hfb;for(g=i.Kc();g.Ob();){f=g.Pb();Efb(m,h.Aj().Nh().Ih(h,f));m.a+=' '}return lcb(m,m.a.length-1)}l=o1d(M6d,c).bl();if(!l.dc()){for(k=l.Kc();k.Ob();){j=BD(k.Pb(),148);if(j.wj(d)){try{m=j.Aj().Nh().Ih(j,d);if(m!=null){return m}}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}}}throw vbb(new Wdb("Invalid value: '"+d+"' for datatype :"+c.ne()))}BD(c,834).Fj();return d==null?null:JD(d,172)?''+BD(d,172).a:rb(d)==$J?CQd(Pmd[0],BD(d,199)):fcb(d)} +function zQc(a){var b,c,d,e,f,g,h,i,j,k;j=new Psb;h=new Psb;for(f=new olb(a);f.a<f.c.c.length;){d=BD(mlb(f),128);d.v=0;d.n=d.i.c.length;d.u=d.t.c.length;d.n==0&&(Gsb(j,d,j.c.b,j.c),true);d.u==0&&d.r.a.gc()==0&&(Gsb(h,d,h.c.b,h.c),true)}g=-1;while(j.b!=0){d=BD(Vt(j,0),128);for(c=new olb(d.t);c.a<c.c.c.length;){b=BD(mlb(c),268);k=b.b;k.v=$wnd.Math.max(k.v,d.v+1);g=$wnd.Math.max(g,k.v);--k.n;k.n==0&&(Gsb(j,k,j.c.b,j.c),true)}}if(g>-1){for(e=Jsb(h,0);e.b!=e.d.c;){d=BD(Xsb(e),128);d.v=g}while(h.b!=0){d=BD(Vt(h,0),128);for(c=new olb(d.i);c.a<c.c.c.length;){b=BD(mlb(c),268);i=b.a;if(i.r.a.gc()!=0){continue}i.v=$wnd.Math.min(i.v,d.v-1);--i.u;i.u==0&&(Gsb(h,i,h.c.b,h.c),true)}}}} +function A6c(a,b,c,d,e){var f,g,h,i;i=Pje;g=false;h=v6c(a,c7c(new f7c(b.a,b.b),a),P6c(new f7c(c.a,c.b),e),c7c(new f7c(d.a,d.b),c));f=!!h&&!($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse||$wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse);h=v6c(a,c7c(new f7c(b.a,b.b),a),c,e);!!h&&(($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse)==($wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse)||f?(i=$wnd.Math.min(i,U6c(c7c(h,c)))):(g=true));h=v6c(a,c7c(new f7c(b.a,b.b),a),d,e);!!h&&(g||($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse)==($wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse)||f)&&(i=$wnd.Math.min(i,U6c(c7c(h,d))));return i} +function cTb(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,Rme),Sme),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new fTb),ume)));p4c(a,Rme,Ame,Ksd(VSb));p4c(a,Rme,Cme,(Bcb(),true));p4c(a,Rme,Fme,Ksd(YSb));p4c(a,Rme,Tme,Ksd(ZSb));p4c(a,Rme,Eme,Ksd($Sb));p4c(a,Rme,Gme,Ksd(XSb));p4c(a,Rme,Dme,Ksd(_Sb));p4c(a,Rme,Hme,Ksd(aTb));p4c(a,Rme,Mme,Ksd(USb));p4c(a,Rme,Ome,Ksd(SSb));p4c(a,Rme,Pme,Ksd(TSb));p4c(a,Rme,Qme,Ksd(WSb));p4c(a,Rme,Nme,Ksd(RSb))} +function BFc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Interactive crossing minimization',1);g=0;for(f=new olb(a.b);f.a<f.c.c.length;){d=BD(mlb(f),29);d.p=g++}m=WZb(a);q=new iHc(m.length);$Ic(new amb(OC(GC(qY,1),Uhe,225,0,[q])),m);p=0;g=0;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);c=0;l=0;for(k=new olb(d.a);k.a<k.c.c.length;){i=BD(mlb(k),10);if(i.n.a>0){c+=i.n.a+i.o.a/2;++l}for(o=new olb(i.j);o.a<o.c.c.length;){n=BD(mlb(o),11);n.p=p++}}l>0&&(c/=l);r=KC(UD,Vje,25,d.a.c.length,15,1);h=0;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);i.p=h++;r[i.p]=AFc(i,c);i.k==(j0b(),g0b)&&yNb(i,(wtc(),atc),r[i.p])}mmb();Okb(d.a,new GFc(r));YDc(q,m,g,true);++g}Qdd(b)} +function Zfe(a,b){var c,d,e,f,g,h,i,j,k;if(b.e==5){Wfe(a,b);return}j=b;if(j.b==null||a.b==null)return;Yfe(a);Vfe(a);Yfe(j);Vfe(j);c=KC(WD,oje,25,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){c[k++]=a.b[d++];c[k++]=a.b[d++]}else if(f>=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i<e){g+=2}else{throw vbb(new hz('Token#subtractRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] - ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=KC(WD,oje,25,k,15,1);$fb(c,0,a.b,0,k)} +function BJb(a){var b,c,d,e,f,g,h;if(a.A.dc()){return}if(a.A.Hc((tdd(),rdd))){BD(Mpb(a.b,(Ucd(),Acd)),124).k=true;BD(Mpb(a.b,Rcd),124).k=true;b=a.q!=(dcd(),_bd)&&a.q!=$bd;ZGb(BD(Mpb(a.b,zcd),124),b);ZGb(BD(Mpb(a.b,Tcd),124),b);ZGb(a.g,b);if(a.A.Hc(sdd)){BD(Mpb(a.b,Acd),124).j=true;BD(Mpb(a.b,Rcd),124).j=true;BD(Mpb(a.b,zcd),124).k=true;BD(Mpb(a.b,Tcd),124).k=true;a.g.k=true}}if(a.A.Hc(qdd)){a.a.j=true;a.a.k=true;a.g.j=true;a.g.k=true;h=a.B.Hc((Idd(),Edd));for(e=wJb(),f=0,g=e.length;f<g;++f){d=e[f];c=BD(Mpb(a.i,d),306);if(c){if(sJb(d)){c.j=true;c.k=true}else{c.j=!h;c.k=!h}}}}if(a.A.Hc(pdd)&&a.B.Hc((Idd(),Ddd))){a.g.j=true;a.g.j=true;if(!a.a.j){a.a.j=true;a.a.k=true;a.a.e=true}}} +function GJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;for(d=new olb(a.e.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);n=a.i[e.p];j=n.a.e;i=n.d.e;e.n.b=j;r=i-j-e.o.b;b=bKc(e);m=(Izc(),(!e.q?(mmb(),mmb(),kmb):e.q)._b((Nyc(),Cxc))?(l=BD(vNb(e,Cxc),197)):(l=BD(vNb(Q_b(e),Dxc),197)),l);b&&(m==Fzc||m==Ezc)&&(e.o.b+=r);if(b&&(m==Hzc||m==Fzc||m==Ezc)){for(p=new olb(e.j);p.a<p.c.c.length;){o=BD(mlb(p),11);if((Ucd(),Ecd).Hc(o.j)){k=BD(Ohb(a.k,o),121);o.n.b=k.e-j}}for(h=new olb(e.b);h.a<h.c.c.length;){g=BD(mlb(h),70);q=BD(vNb(e,xxc),21);q.Hc((Hbd(),Ebd))?(g.n.b+=r):q.Hc(Fbd)&&(g.n.b+=r/2)}(m==Fzc||m==Ezc)&&V_b(e,(Ucd(),Rcd)).Jc(new $Kc(r))}}}} +function Lwb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;if(!a.b){return false}g=null;m=null;i=new exb(null,null);e=1;i.a[1]=a.b;l=i;while(l.a[e]){j=e;h=m;m=l;l=l.a[e];d=a.a.ue(b,l.d);e=d<0?0:1;d==0&&(!c.c||wtb(l.e,c.d))&&(g=l);if(!(!!l&&l.b)&&!Hwb(l.a[e])){if(Hwb(l.a[1-e])){m=m.a[j]=Owb(l,e)}else if(!Hwb(l.a[1-e])){n=m.a[1-j];if(n){if(!Hwb(n.a[1-j])&&!Hwb(n.a[j])){m.b=false;n.b=true;l.b=true}else{f=h.a[1]==m?1:0;Hwb(n.a[j])?(h.a[f]=Nwb(m,j)):Hwb(n.a[1-j])&&(h.a[f]=Owb(m,j));l.b=h.a[f].b=true;h.a[f].a[0].b=false;h.a[f].a[1].b=false}}}}}if(g){c.b=true;c.d=g.e;if(l!=g){k=new exb(l.d,l.e);Mwb(a,i,g,k);m==g&&(m=k)}m.a[m.a[1]==l?1:0]=l.a[!l.a[0]?1:0];--a.c}a.b=i.a[1];!!a.b&&(a.b.b=false);return c.b} +function cic(a){var b,c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);for(i=d.c.Kc();i.Ob();){h=BD(i.Pb(),57);if(d.a==h.a){continue}fad(a.a.d)?(l=a.a.g.Oe(d,h)):(l=a.a.g.Pe(d,h));f=d.b.a+d.d.b+l-h.b.a;f=$wnd.Math.ceil(f);f=$wnd.Math.max(0,f);if(vgc(d,h)){g=nGb(new pGb,a.d);j=QD($wnd.Math.ceil(h.b.a-d.b.a));b=j-(h.b.a-d.b.a);k=ugc(d).a;c=d;if(!k){k=ugc(h).a;b=-b;c=h}if(k){c.b.a-=b;k.n.a-=b}AFb(DFb(CFb(EFb(BFb(new FFb,$wnd.Math.max(0,j)),1),g),a.c[d.a.d]));AFb(DFb(CFb(EFb(BFb(new FFb,$wnd.Math.max(0,-j)),1),g),a.c[h.a.d]))}else{m=1;(JD(d.g,145)&&JD(h.g,10)||JD(h.g,145)&&JD(d.g,10))&&(m=2);AFb(DFb(CFb(EFb(BFb(new FFb,QD(f)),m),a.c[d.a.d]),a.c[h.a.d]))}}}} +function pEc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(c){d=-1;k=new Bib(b,0);while(k.b<k.d.gc()){h=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),10));l=a.c[h.c.p][h.p].a;if(l==null){g=d+1;f=new Bib(b,k.b);while(f.b<f.d.gc()){m=tEc(a,(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),10))).a;if(m!=null){g=(uCb(m),m);break}}l=(d+g)/2;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=(uCb(l),l);a.c[h.c.p][h.p].b=1}d=(uCb(l),l)}}else{e=0;for(j=new olb(b);j.a<j.c.c.length;){h=BD(mlb(j),10);a.c[h.c.p][h.p].a!=null&&(e=$wnd.Math.max(e,Edb(a.c[h.c.p][h.p].a)))}e+=2;for(i=new olb(b);i.a<i.c.c.length;){h=BD(mlb(i),10);if(a.c[h.c.p][h.p].a==null){l=Cub(a.i,24)*lke*e-1;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=l;a.c[h.c.p][h.p].b=1}}}} +function CZd(){rEd(b5,new i$d);rEd(a5,new P$d);rEd(c5,new u_d);rEd(d5,new M_d);rEd(f5,new P_d);rEd(h5,new S_d);rEd(g5,new V_d);rEd(i5,new Y_d);rEd(k5,new GZd);rEd(l5,new JZd);rEd(m5,new MZd);rEd(n5,new PZd);rEd(o5,new SZd);rEd(p5,new VZd);rEd(q5,new YZd);rEd(t5,new _Zd);rEd(v5,new c$d);rEd(x6,new f$d);rEd(j5,new l$d);rEd(u5,new o$d);rEd(wI,new r$d);rEd(GC(SD,1),new u$d);rEd(xI,new x$d);rEd(yI,new A$d);rEd($J,new D$d);rEd(O4,new G$d);rEd(BI,new J$d);rEd(T4,new M$d);rEd(U4,new S$d);rEd(O9,new V$d);rEd(E9,new Y$d);rEd(FI,new _$d);rEd(JI,new c_d);rEd(AI,new f_d);rEd(MI,new i_d);rEd(DK,new l_d);rEd(v8,new o_d);rEd(u8,new r_d);rEd(UI,new x_d);rEd(ZI,new A_d);rEd(X4,new D_d);rEd(V4,new G_d)} +function hA(a,b,c){var d,e,f,g,h,i,j,k,l;!c&&(c=TA(b.q.getTimezoneOffset()));e=(b.q.getTimezoneOffset()-c.a)*60000;h=new gB(wbb(Cbb(b.q.getTime()),e));i=h;if(h.q.getTimezoneOffset()!=b.q.getTimezoneOffset()){e>0?(e-=86400000):(e+=86400000);i=new gB(wbb(Cbb(b.q.getTime()),e))}k=new Vfb;j=a.a.length;for(f=0;f<j;){d=bfb(a.a,f);if(d>=97&&d<=122||d>=65&&d<=90){for(g=f+1;g<j&&bfb(a.a,g)==d;++g);vA(k,d,g-f,h,i,c);f=g}else if(d==39){++f;if(f<j&&bfb(a.a,f)==39){k.a+="'";++f;continue}l=false;while(!l){g=f;while(g<j&&bfb(a.a,g)!=39){++g}if(g>=j){throw vbb(new Wdb("Missing trailing '"))}g+1<j&&bfb(a.a,g+1)==39?++g:(l=true);Qfb(k,qfb(a.a,f,g));f=g+1}}else{k.a+=String.fromCharCode(d);++f}}return k.a} +function MEc(a){var b,c,d,e,f,g,h,i;b=null;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),233);Edb(REc(c.g,c.d[0]).a);c.b=null;if(!!c.e&&c.e.gc()>0&&c.c==0){!b&&(b=new Rkb);b.c[b.c.length]=c}}if(b){while(b.c.length!=0){c=BD(Kkb(b,0),233);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new Rkb),new olb(c.b));f.a<f.c.c.length;){e=BD(mlb(f),233);if(Gdb(REc(e.g,e.d[0]).a)==Gdb(REc(c.g,c.d[0]).a)){if(Jkb(a,e,0)>Jkb(a,c,0)){return new vgd(e,c)}}else if(Edb(REc(e.g,e.d[0]).a)>Edb(REc(c.g,c.d[0]).a)){return new vgd(e,c)}}}for(h=(!c.e&&(c.e=new Rkb),c.e).Kc();h.Ob();){g=BD(h.Pb(),233);i=(!g.b&&(g.b=new Rkb),g.b);wCb(0,i.c.length);aCb(i.c,0,c);g.c==i.c.length&&(b.c[b.c.length]=g,true)}}}return null} +function wlb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return Xhe}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new xwb(She,'[',']');for(e=a,f=0,g=e.length;f<g;++f){d=e[f];if(d!=null&&(rb(d).i&4)!=0){if(Array.isArray(d)&&(k=HC(d),!(k>=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new Wfb(c.d)):Qfb(c.a,c.b);Nfb(c.a,'[...]')}else{h=CD(d);j=new Vqb(b);uwb(c,wlb(h,j))}}else JD(d,177)?uwb(c,Xlb(BD(d,177))):JD(d,190)?uwb(c,Qlb(BD(d,190))):JD(d,195)?uwb(c,Rlb(BD(d,195))):JD(d,2012)?uwb(c,Wlb(BD(d,2012))):JD(d,48)?uwb(c,Ulb(BD(d,48))):JD(d,364)?uwb(c,Vlb(BD(d,364))):JD(d,832)?uwb(c,Tlb(BD(d,832))):JD(d,104)&&uwb(c,Slb(BD(d,104)))}else{uwb(c,d==null?Xhe:fcb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} +function xQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=itd(b,false,false);r=ofd(h);d&&(r=w7c(r));t=Edb(ED(hkd(b,(CPb(),vPb))));q=(sCb(r.b!=0),BD(r.a.a.c,8));l=BD(Ut(r,1),8);if(r.b>2){k=new Rkb;Gkb(k,new Jib(r,1,r.b));f=sQb(k,t+a.a);s=new XOb(f);tNb(s,b);c.c[c.c.length]=s}else{d?(s=BD(Ohb(a.b,jtd(b)),266)):(s=BD(Ohb(a.b,ltd(b)),266))}i=jtd(b);d&&(i=ltd(b));g=zQb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new f7c(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new f7c((l.a+q.a)/2,l.b)}d?Rhb(a.d,b,new ZOb(s,g,p,j)):Rhb(a.c,b,new ZOb(s,g,p,j));Rhb(a.b,b,s);o=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(n=new Fyd(o);n.e!=n.i.gc();){m=BD(Dyd(n),137);e=wQb(a,m,true,0,0);c.c[c.c.length]=e}} +function wPc(a){var b,c,d,e,f,g,h,i,j,k;j=new Rkb;h=new Rkb;for(g=new olb(a);g.a<g.c.c.length;){e=BD(mlb(g),112);pOc(e,e.f.c.length);qOc(e,e.k.c.length);e.d==0&&(j.c[j.c.length]=e,true);e.i==0&&e.e.b==0&&(h.c[h.c.length]=e,true)}d=-1;while(j.c.length!=0){e=BD(Kkb(j,0),112);for(c=new olb(e.k);c.a<c.c.c.length;){b=BD(mlb(c),129);k=b.b;rOc(k,$wnd.Math.max(k.o,e.o+1));d=$wnd.Math.max(d,k.o);pOc(k,k.d-1);k.d==0&&(j.c[j.c.length]=k,true)}}if(d>-1){for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),112);e.o=d}while(h.c.length!=0){e=BD(Kkb(h,0),112);for(c=new olb(e.f);c.a<c.c.c.length;){b=BD(mlb(c),129);i=b.a;if(i.e.b>0){continue}rOc(i,$wnd.Math.min(i.o,e.o-1));qOc(i,i.i-1);i.i==0&&(h.c[h.c.length]=i,true)}}}} +function QQd(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=FQd);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new nSd(a,1,2,j,a.c);!c?(c=i):c.Ei(i)}if(j!=b){if(JD(a.Cb,284)){if(a.Db>>16==-10){c=BD(a.Cb,284).nk(b,c)}else if(a.Db>>16==-15){!b&&(b=(jGd(),YFd));!j&&(j=(jGd(),YFd));if(a.Cb.nh()){i=new pSd(a.Cb,1,13,j,b,HLd(QSd(BD(a.Cb,59)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,88)){if(a.Db>>16==-23){JD(b,88)||(b=(jGd(),_Fd));JD(j,88)||(j=(jGd(),_Fd));if(a.Cb.nh()){i=new pSd(a.Cb,1,10,j,b,HLd(VKd(BD(a.Cb,26)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,444)){h=BD(a.Cb,836);g=(!h.b&&(h.b=new RYd(new NYd)),h.b);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,h),c)}}}return c} +function O1b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Ccb(DD(hkd(a,(Nyc(),fxc))));m=BD(hkd(a,Yxc),21);i=false;j=false;l=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=BD(Dyd(l),118);h=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!f.d&&(f.d=new y5d(B2,f,8,5)),f.d),(!f.e&&(f.e=new y5d(B2,f,7,4)),f.e)])));Qr(e);){d=BD(Rr(e),79);k=g&&Qld(d)&&Ccb(DD(hkd(d,gxc)));c=ELd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),f)?a==Xod(atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))):a==Xod(atd(BD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),82)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((rcd(),ncd))&&(!f.n&&(f.n=new cUd(D2,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((Orc(),Hrc));j&&b.Fc((Orc(),Irc))} +function zfd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=BD(hkd(a,(Y9c(),Y8c)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((tdd(),rdd))){k=BD(hkd(a,t9c),98);d=2;c=2;e=2;f=2;b=!Xod(a)?BD(hkd(a,z8c),103):BD(hkd(Xod(a),z8c),103);for(j=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));j.e!=j.i.gc();){i=BD(Dyd(j),118);l=BD(hkd(i,A9c),61);if(l==(Ucd(),Scd)){l=lfd(i,b);jkd(i,A9c,l)}if(k==(dcd(),$bd)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Afd(a,h,g,true,true)} +function lnc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=BD(GAb(VAb(JAb(new YAb(null,new Kub(b.d,16)),new pnc(c)),new rnc(c)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);l=Ohe;k=Rie;for(i=new olb(b.b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);if(h.j==c){l=$wnd.Math.min(l,h.p);k=$wnd.Math.max(k,h.p)}}if(l==Ohe){for(g=0;g<s.gc();g++){ojc(BD(s.Xb(g),101),c,g)}}else{t=KC(WD,oje,25,e.length,15,1);Elb(t,t.length);for(r=s.Kc();r.Ob();){q=BD(r.Pb(),101);f=BD(Ohb(a.b,q),177);j=0;for(p=l;p<=k;p++){f[p]&&(j=$wnd.Math.max(j,d[p]))}if(q.i){n=q.i.c;u=new Tqb;for(m=0;m<e.length;m++){e[n][m]&&Qqb(u,meb(t[m]))}while(Rqb(u,meb(j))){++j}}ojc(q,c,j);for(o=l;o<=k;o++){f[o]&&(d[o]=j+1)}!!q.i&&(t[q.i.c]=j)}}} +function YJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;e=null;for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),10);bKc(c)?(f=(h=nGb(oGb(new pGb,c),a.f),i=nGb(oGb(new pGb,c),a.f),j=new rKc(c,true,h,i),k=c.o.b,l=(Izc(),(!c.q?(mmb(),mmb(),kmb):c.q)._b((Nyc(),Cxc))?(m=BD(vNb(c,Cxc),197)):(m=BD(vNb(Q_b(c),Dxc),197)),m),n=10000,l==Ezc&&(n=1),o=AFb(DFb(CFb(BFb(EFb(new FFb,n),QD($wnd.Math.ceil(k))),h),i)),l==Fzc&&Qqb(a.d,o),ZJc(a,Su(V_b(c,(Ucd(),Tcd))),j),ZJc(a,V_b(c,zcd),j),j)):(f=(p=nGb(oGb(new pGb,c),a.f),MAb(JAb(new YAb(null,new Kub(c.j,16)),new EKc),new GKc(a,p)),new rKc(c,false,p,p)));a.i[c.p]=f;if(e){g=e.c.d.a+jBc(a.n,e.c,c)+c.d.d;e.b||(g+=e.c.o.b);AFb(DFb(CFb(EFb(BFb(new FFb,QD($wnd.Math.ceil(g))),0),e.d),f.a))}e=f}} +function s9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Label dummy insertions',1);l=new Rkb;g=Edb(ED(vNb(a,(Nyc(),nyc))));j=Edb(ED(vNb(a,ryc)));k=BD(vNb(a,Lwc),103);for(n=new olb(a.a);n.a<n.c.c.length;){m=BD(mlb(n),10);for(f=new Sr(ur(U_b(m).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(e.c.i!=e.d.i&&Lq(e.b,p9b)){p=t9b(e);o=Pu(e.b.c.length);c=r9b(a,e,p,o);l.c[l.c.length]=c;d=c.o;h=new Bib(e.b,0);while(h.b<h.d.gc()){i=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),70));if(PD(vNb(i,Qwc))===PD((qad(),nad))){if(k==(ead(),dad)||k==_9c){d.a+=i.o.a+j;d.b=$wnd.Math.max(d.b,i.o.b)}else{d.a=$wnd.Math.max(d.a,i.o.a);d.b+=i.o.b+j}o.c[o.c.length]=i;uib(h)}}if(k==(ead(),dad)||k==_9c){d.a-=j;d.b+=g+p}else{d.b+=g-j+p}}}}Gkb(a.a,l);Qdd(b)} +function eYb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;f=new qYb(b);l=_Xb(a,b,f);n=$wnd.Math.max(Edb(ED(vNb(b,(Nyc(),Zwc)))),1);for(k=new olb(l.a);k.a<k.c.c.length;){j=BD(mlb(k),46);i=dYb(BD(j.a,8),BD(j.b,8),n);o=true;o=o&iYb(c,new f7c(i.c,i.d));o=o&iYb(c,O6c(new f7c(i.c,i.d),i.b,0));o=o&iYb(c,O6c(new f7c(i.c,i.d),0,i.a));o&iYb(c,O6c(new f7c(i.c,i.d),i.b,i.a))}m=f.d;h=dYb(BD(l.b.a,8),BD(l.b.b,8),n);if(m==(Ucd(),Tcd)||m==zcd){d.c[m.g]=$wnd.Math.min(d.c[m.g],h.d);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.d+h.a)}else{d.c[m.g]=$wnd.Math.min(d.c[m.g],h.c);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.c+h.b)}e=Qje;g=f.c.i.d;switch(m.g){case 4:e=g.c;break;case 2:e=g.b;break;case 1:e=g.a;break;case 3:e=g.d;}d.a[m.g]=$wnd.Math.max(d.a[m.g],e);return f} +function eKd(b){var c,d,e,f;d=b.D!=null?b.D:b.B;c=hfb(d,wfb(91));if(c!=-1){e=d.substr(0,c);f=new Hfb;do f.a+='[';while((c=gfb(d,91,++c))!=-1);if(dfb(e,Khe))f.a+='Z';else if(dfb(e,Eve))f.a+='B';else if(dfb(e,Fve))f.a+='C';else if(dfb(e,Gve))f.a+='D';else if(dfb(e,Hve))f.a+='F';else if(dfb(e,Ive))f.a+='I';else if(dfb(e,Jve))f.a+='J';else if(dfb(e,Kve))f.a+='S';else{f.a+='L';f.a+=''+e;f.a+=';'}try{return null}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}else if(hfb(d,wfb(46))==-1){if(dfb(d,Khe))return sbb;else if(dfb(d,Eve))return SD;else if(dfb(d,Fve))return TD;else if(dfb(d,Gve))return UD;else if(dfb(d,Hve))return VD;else if(dfb(d,Ive))return WD;else if(dfb(d,Jve))return XD;else if(dfb(d,Kve))return rbb}return null} +function $1b(a,b,c){var d,e,f,g,h,i,j,k;j=new b0b(c);tNb(j,b);yNb(j,(wtc(),$sc),b);j.o.a=b.g;j.o.b=b.f;j.n.a=b.i;j.n.b=b.j;Ekb(c.a,j);Rhb(a.a,b,j);((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0||Ccb(DD(hkd(b,(Nyc(),fxc)))))&&yNb(j,wsc,(Bcb(),true));i=BD(vNb(c,Ksc),21);k=BD(vNb(j,(Nyc(),Vxc)),98);k==(dcd(),ccd)?yNb(j,Vxc,bcd):k!=bcd&&i.Fc((Orc(),Krc));d=BD(vNb(c,Lwc),103);for(h=new Fyd((!b.c&&(b.c=new cUd(F2,b,9,9)),b.c));h.e!=h.i.gc();){g=BD(Dyd(h),118);Ccb(DD(hkd(g,Jxc)))||_1b(a,g,j,i,d,k)}for(f=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));f.e!=f.i.gc();){e=BD(Dyd(f),137);!Ccb(DD(hkd(e,Jxc)))&&!!e.a&&Ekb(j.b,Z1b(e))}Ccb(DD(vNb(j,pwc)))&&i.Fc((Orc(),Frc));if(Ccb(DD(vNb(j,exc)))){i.Fc((Orc(),Jrc));i.Fc(Irc);yNb(j,Vxc,bcd)}return j} +function F4b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;h=BD(Ohb(b.c,a),459);s=b.a.c;i=b.a.c+b.a.b;C=h.f;D=h.a;g=C<D;p=new f7c(s,C);t=new f7c(i,D);e=(s+i)/2;q=new f7c(e,C);u=new f7c(e,D);f=G4b(a,C,D);w=A0b(b.B);A=new f7c(e,f);B=A0b(b.D);c=j6c(OC(GC(m1,1),nie,8,0,[w,A,B]));n=false;r=b.B.i;if(!!r&&!!r.c&&h.d){j=g&&r.p<r.c.a.c.length-1||!g&&r.p>0;if(j){if(j){m=r.p;g?++m:--m;l=BD(Ikb(r.c.a,m),10);d=I4b(l);n=!(s6c(d,w,c[0])||n6c(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p<v.c.a.c.length-1;if(k){m=v.p;g?--m:++m;l=BD(Ikb(v.c.a,m),10);d=I4b(l);o=!(s6c(d,c[0],B)||n6c(d,c[0],B))}else{o=true}}n&&o&&Dsb(a.a,A);n||n7c(a.a,OC(GC(m1,1),nie,8,0,[p,q]));o||n7c(a.a,OC(GC(m1,1),nie,8,0,[u,t]))} +function yfd(a,b){var c,d,e,f,g,h,i,j;if(JD(a.Ug(),160)){yfd(BD(a.Ug(),160),b);b.a+=' > '}else{b.a+='Root '}c=a.Tg().zb;dfb(c.substr(0,3),'Elk')?Qfb(b,c.substr(3)):(b.a+=''+c,b);e=a.zg();if(e){Qfb((b.a+=' ',b),e);return}if(JD(a,354)){j=BD(a,137).a;if(j){Qfb((b.a+=' ',b),j);return}}for(g=new Fyd(a.Ag());g.e!=g.i.gc();){f=BD(Dyd(g),137);j=f.a;if(j){Qfb((b.a+=' ',b),j);return}}if(JD(a,352)){d=BD(a,79);!d.b&&(d.b=new y5d(z2,d,4,7));if(d.b.i!=0&&(!d.c&&(d.c=new y5d(z2,d,5,8)),d.c.i!=0)){b.a+=' (';h=new Oyd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b));while(h.e!=h.i.gc()){h.e>0&&(b.a+=She,b);yfd(BD(Dyd(h),160),b)}b.a+=gne;i=new Oyd((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=She,b);yfd(BD(Dyd(i),160),b)}b.a+=')'}}} +function y2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=BD(vNb(a,(wtc(),$sc)),79);if(!f){return}d=a.a;e=new g7c(c);P6c(e,C2b(a));if(f_b(a.d.i,a.c.i)){m=a.c;l=l7c(OC(GC(m1,1),nie,8,0,[m.n,m.a]));c7c(l,c)}else{l=A0b(a.c)}Gsb(d,l,d.a,d.a.a);n=A0b(a.d);vNb(a,utc)!=null&&P6c(n,BD(vNb(a,utc),8));Gsb(d,n,d.c.b,d.c);q7c(d,e);g=itd(f,true,true);kmd(g,BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));lmd(g,BD(qud((!f.c&&(f.c=new y5d(z2,f,5,8)),f.c),0),82));ifd(d,g);for(k=new olb(a.b);k.a<k.c.c.length;){j=BD(mlb(k),70);h=BD(vNb(j,$sc),137);cld(h,j.o.a);ald(h,j.o.b);bld(h,j.n.a+e.a,j.n.b+e.b);jkd(h,(I9b(),H9b),DD(vNb(j,H9b)))}i=BD(vNb(a,(Nyc(),jxc)),74);if(i){q7c(i,e);jkd(f,jxc,i)}else{jkd(f,jxc,null)}b==(Aad(),yad)?jkd(f,Swc,yad):jkd(f,Swc,null)} +function mJc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;n=b.c.length;m=0;for(l=new olb(a.b);l.a<l.c.c.length;){k=BD(mlb(l),29);r=k.a;if(r.c.length==0){continue}q=new olb(r);j=0;s=null;e=BD(mlb(q),10);f=null;while(e){f=BD(Ikb(b,e.p),257);if(f.c>=0){i=null;h=new Bib(k.a,j+1);while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),10));i=BD(Ikb(b,g.p),257);if(i.d==f.d&&i.c<f.c){break}else{i=null}}if(i){if(s){Nkb(d,e.p,meb(BD(Ikb(d,e.p),19).a-1));BD(Ikb(c,s.p),15).Mc(f)}f=yJc(f,e,n++);b.c[b.c.length]=f;Ekb(c,new Rkb);if(s){BD(Ikb(c,s.p),15).Fc(f);Ekb(d,meb(1))}else{Ekb(d,meb(0))}}}o=null;if(q.a<q.c.c.length){o=BD(mlb(q),10);p=BD(Ikb(b,o.p),257);BD(Ikb(c,e.p),15).Fc(p);Nkb(d,o.p,meb(BD(Ikb(d,o.p),19).a+1))}f.d=m;f.c=j++;s=e;e=o}++m}} +function u6c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=a;k=c7c(new f7c(b.a,b.b),a);j=c;l=c7c(new f7c(d.a,d.b),c);m=i.a;q=i.b;o=j.a;s=j.b;n=k.a;r=k.b;p=l.a;t=l.b;e=p*r-n*t;Iy();My(Jqe);if($wnd.Math.abs(0-e)<=Jqe||0==e||isNaN(0)&&isNaN(e)){return false}g=1/e*((m-o)*r-(q-s)*n);h=1/e*-(-(m-o)*t+(q-s)*p);f=(null,My(Jqe),($wnd.Math.abs(0-g)<=Jqe||0==g||isNaN(0)&&isNaN(g)?0:0<g?-1:0>g?1:Ny(isNaN(0),isNaN(g)))<0&&(null,My(Jqe),($wnd.Math.abs(g-1)<=Jqe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:Ny(isNaN(g),isNaN(1)))<0)&&(null,My(Jqe),($wnd.Math.abs(0-h)<=Jqe||0==h||isNaN(0)&&isNaN(h)?0:0<h?-1:0>h?1:Ny(isNaN(0),isNaN(h)))<0)&&(null,My(Jqe),($wnd.Math.abs(h-1)<=Jqe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Ny(isNaN(h),isNaN(1)))<0));return f} +function z6d(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new usb(new nsb(a));l.b!=l.c.a.d;){k=tsb(l);h=BD(k.d,56);b=BD(k.e,56);g=h.Tg();for(p=0,u=(g.i==null&&TKd(g),g.i).length;p<u;++p){j=(f=(g.i==null&&TKd(g),g.i),p>=0&&p<f.length?f[p]:null);if(j.Ij()&&!j.Jj()){if(JD(j,99)){i=BD(j,18);(i.Bb&ote)==0&&(w=zUd(i),!(!!w&&(w.Bb&ote)!=0))&&y6d(a,i,h,b)}else{Q6d();if(BD(j,66).Oj()){c=(v=j,BD(!v?null:BD(b,49).xh(v),153));if(c){n=BD(h.ah(j),153);d=c.gc();for(q=0,o=n.gc();q<o;++q){m=n.il(q);if(JD(m,99)){t=n.jl(q);e=Wrb(a,t);if(e==null&&t!=null){s=BD(m,18);if(!a.b||(s.Bb&ote)!=0||!!zUd(s)){continue}e=t}if(!c.dl(m,e)){for(r=0;r<d;++r){if(c.il(r)==m&&PD(c.jl(r))===PD(e)){c.ii(c.gc()-1,r);--d;break}}}}else{c.dl(n.il(q),n.jl(q))}}}}}}}}} +function CZc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;r=xZc(b,c,a.g);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));if(a.b){for(q=0;q<r.c.length;q++){l=(tCb(q,r.c.length),BD(r.c[q],200));if(q!=0){n=(tCb(q-1,r.c.length),BD(r.c[q-1],200));w$c(l,n.f+n.b+a.g)}tZc(q,r,c,a.g);AZc(a,l);e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd))}}else{for(p=new olb(r);p.a<p.c.c.length;){o=BD(mlb(p),200);for(k=new olb(o.a);k.a<k.c.c.length;){j=BD(mlb(k),187);s=new b$c(j.s,j.t,a.g);WZc(s,j);Ekb(o.d,s)}}}BZc(a,r);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));t=$wnd.Math.max(a.d,d.a-(g.b+g.c));m=$wnd.Math.max(a.c,d.b-(g.d+g.a));h=m-a.c;if(a.e&&a.f){i=t/m;i<a.a?(t=m*a.a):(h+=t/a.a-m)}a.e&&zZc(r,t,h);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));return new d$c(a.a,t,a.c+h,(k$c(),j$c))} +function UJc(a){var b,c,d,e,f,g,h,i,j,k,l;a.j=KC(WD,oje,25,a.g,15,1);a.o=new Rkb;MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new aLc),new cLc(a));a.a=KC(sbb,dle,25,a.b,16,1);TAb(new YAb(null,new Kub(a.e.b,16)),new rLc(a));d=(l=new Rkb,MAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new hLc),new jLc(a)),new lLc(a,l)),l);for(i=new olb(d);i.a<i.c.c.length;){h=BD(mlb(i),508);if(h.c.length<=1){continue}if(h.c.length==2){uKc(h);bKc((tCb(0,h.c.length),BD(h.c[0],17)).d.i)||Ekb(a.o,h);continue}if(tKc(h)||sKc(h,new fLc)){continue}j=new olb(h);e=null;while(j.a<j.c.c.length){b=BD(mlb(j),17);c=a.c[b.p];!e||j.a>=j.c.c.length?(k=JJc((j0b(),h0b),g0b)):(k=JJc((j0b(),g0b),g0b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} +function VNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;v=Hx(a);k=new Rkb;h=a.c.length;l=h-1;m=h+1;while(v.a.c!=0){while(c.b!=0){t=(sCb(c.b!=0),BD(Nsb(c,c.a.a),112));Jwb(v.a,t)!=null;t.g=l--;YNc(t,b,c,d)}while(b.b!=0){u=(sCb(b.b!=0),BD(Nsb(b,b.a.a),112));Jwb(v.a,u)!=null;u.g=m++;YNc(u,b,c,d)}j=Rie;for(r=(g=new Ywb((new cxb((new Gjb(v.a)).a)).b),new Njb(g));sib(r.a.a);){q=(f=Wwb(r.a),BD(f.cd(),112));if(!d&&q.b>0&&q.a<=0){k.c=KC(SI,Uhe,1,0,5,1);k.c[k.c.length]=q;break}p=q.i-q.d;if(p>=j){if(p>j){k.c=KC(SI,Uhe,1,0,5,1);j=p}k.c[k.c.length]=q}}if(k.c.length!=0){i=BD(Ikb(k,Bub(e,k.c.length)),112);Jwb(v.a,i)!=null;i.g=m++;YNc(i,b,c,d);k.c=KC(SI,Uhe,1,0,5,1)}}s=a.c.length+1;for(o=new olb(a);o.a<o.c.c.length;){n=BD(mlb(o),112);n.g<h&&(n.g=n.g+s)}} +function SDb(a,b){var c;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}if(!lDb(a.a,b)){throw vbb(new hz(Lke+b+Mke))}if(b==a.d){return a}c=a.d;a.d=b;switch(c.g){case 0:switch(b.g){case 2:PDb(a);break;case 1:XDb(a);PDb(a);break;case 4:bEb(a);PDb(a);break;case 3:bEb(a);XDb(a);PDb(a);}break;case 2:switch(b.g){case 1:XDb(a);YDb(a);break;case 4:bEb(a);PDb(a);break;case 3:bEb(a);XDb(a);PDb(a);}break;case 1:switch(b.g){case 2:XDb(a);YDb(a);break;case 4:XDb(a);bEb(a);PDb(a);break;case 3:XDb(a);bEb(a);XDb(a);PDb(a);}break;case 4:switch(b.g){case 2:bEb(a);PDb(a);break;case 1:bEb(a);XDb(a);PDb(a);break;case 3:XDb(a);YDb(a);}break;case 3:switch(b.g){case 2:XDb(a);bEb(a);PDb(a);break;case 1:XDb(a);bEb(a);XDb(a);PDb(a);break;case 4:XDb(a);YDb(a);}}return a} +function tVb(a,b){var c;if(a.d){throw vbb(new Zdb((fdb(LP),Jke+LP.k+Kke)))}if(!cVb(a.a,b)){throw vbb(new hz(Lke+b+Mke))}if(b==a.c){return a}c=a.c;a.c=b;switch(c.g){case 0:switch(b.g){case 2:qVb(a);break;case 1:xVb(a);qVb(a);break;case 4:BVb(a);qVb(a);break;case 3:BVb(a);xVb(a);qVb(a);}break;case 2:switch(b.g){case 1:xVb(a);yVb(a);break;case 4:BVb(a);qVb(a);break;case 3:BVb(a);xVb(a);qVb(a);}break;case 1:switch(b.g){case 2:xVb(a);yVb(a);break;case 4:xVb(a);BVb(a);qVb(a);break;case 3:xVb(a);BVb(a);xVb(a);qVb(a);}break;case 4:switch(b.g){case 2:BVb(a);qVb(a);break;case 1:BVb(a);xVb(a);qVb(a);break;case 3:xVb(a);yVb(a);}break;case 3:switch(b.g){case 2:xVb(a);BVb(a);qVb(a);break;case 1:xVb(a);BVb(a);xVb(a);qVb(a);break;case 4:xVb(a);yVb(a);}}return a} +function UQb(a,b,c){var d,e,f,g,h,i,j,k;for(i=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));i.e!=i.i.gc();){h=BD(Dyd(i),33);for(e=new Sr(ur(_sd(h).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);!d.b&&(d.b=new y5d(z2,d,4,7));if(!(d.b.i<=1&&(!d.c&&(d.c=new y5d(z2,d,5,8)),d.c.i<=1))){throw vbb(new z2c('Graph must not contain hyperedges.'))}if(!Pld(d)&&h!=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))){j=new gRb;tNb(j,d);yNb(j,(HSb(),FSb),d);dRb(j,BD(Wd(irb(c.f,h)),144));eRb(j,BD(Ohb(c,atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))),144));Ekb(b.c,j);for(g=new Fyd((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=new mRb(j,f.a);tNb(k,f);yNb(k,FSb,f);k.e.a=$wnd.Math.max(f.g,1);k.e.b=$wnd.Math.max(f.f,1);lRb(k);Ekb(b.d,k)}}}}} +function OGb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=new LIb(a);iKb(l,!(b==(ead(),dad)||b==_9c));k=l.a;m=new p0b;for(e=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),g=0,i=e.length;g<i;++g){c=e[g];j=xHb(k,dHb,c);!!j&&(m.d=$wnd.Math.max(m.d,j.Re()))}for(d=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),f=0,h=d.length;f<h;++f){c=d[f];j=xHb(k,fHb,c);!!j&&(m.a=$wnd.Math.max(m.a,j.Re()))}for(p=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),r=0,t=p.length;r<t;++r){n=p[r];j=xHb(k,n,dHb);!!j&&(m.b=$wnd.Math.max(m.b,j.Se()))}for(o=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),q=0,s=o.length;q<s;++q){n=o[q];j=xHb(k,n,fHb);!!j&&(m.c=$wnd.Math.max(m.c,j.Se()))}if(m.d>0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m} +function d6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new f7c(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new olb(a.a);j.a<j.c.c.length;){h=BD(mlb(j),10);if(h.k!=(j0b(),e0b)){continue}d=BD(vNb(h,(wtc(),Hsc)),61);e=BD(vNb(h,Isc),8);k=h.n;switch(d.g){case 2:k.a=c.f.a+m.c-l.a;break;case 4:k.a=-l.a-m.b;}o=0;switch(d.g){case 2:case 4:if(b==(dcd(),_bd)){n=Edb(ED(vNb(h,htc)));k.b=f.b*n-BD(vNb(h,(Nyc(),Txc)),8).b;o=k.b+e.b;M_b(h,false,true)}else if(b==$bd){k.b=Edb(ED(vNb(h,htc)))-BD(vNb(h,(Nyc(),Txc)),8).b;o=k.b+e.b;M_b(h,false,true)}}g=$wnd.Math.max(g,o)}c.f.b+=g-f.b;for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(h.k!=(j0b(),e0b)){continue}d=BD(vNb(h,(wtc(),Hsc)),61);k=h.n;switch(d.g){case 1:k.b=-l.b-m.d;break;case 3:k.b=c.f.b+m.a-l.b;}}} +function nRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;e=BD(vNb(a,(mTc(),dTc)),33);j=Ohe;k=Ohe;h=Rie;i=Rie;for(w=Jsb(a.b,0);w.b!=w.d.c;){u=BD(Xsb(w),86);p=u.e;q=u.f;j=$wnd.Math.min(j,p.a-q.a/2);k=$wnd.Math.min(k,p.b-q.b/2);h=$wnd.Math.max(h,p.a+q.a/2);i=$wnd.Math.max(i,p.b+q.b/2)}o=BD(hkd(e,(JTc(),BTc)),116);n=new f7c(o.b-j,o.d-k);for(v=Jsb(a.b,0);v.b!=v.d.c;){u=BD(Xsb(v),86);m=vNb(u,dTc);if(JD(m,239)){f=BD(m,33);l=P6c(u.e,n);bld(f,l.a-f.g/2,l.b-f.f/2)}}for(t=Jsb(a.a,0);t.b!=t.d.c;){s=BD(Xsb(t),188);d=BD(vNb(s,dTc),79);if(d){b=s.a;r=new g7c(s.b.e);Gsb(b,r,b.a,b.a.a);A=new g7c(s.c.e);Gsb(b,A,b.c.b,b.c);qRc(r,BD(Ut(b,1),8),s.b.f);qRc(A,BD(Ut(b,b.b-2),8),s.c.f);c=itd(d,true,true);ifd(b,c)}}B=h-j+(o.b+o.c);g=i-k+(o.d+o.a);Afd(e,B,g,false,false)} +function xoc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=a.b;k=new Bib(l,0);Aib(k,new H1b(a));s=false;g=1;while(k.b<k.d.gc()){j=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),29));p=(tCb(g,l.c.length),BD(l.c[g],29));q=Mu(j.a);r=q.c.length;for(o=new olb(q);o.a<o.c.c.length;){m=BD(mlb(o),10);$_b(m,p)}if(s){for(n=av(new ov(q),0);n.c.Sb();){m=BD(pv(n),10);for(f=new olb(Mu(R_b(m)));f.a<f.c.c.length;){e=BD(mlb(f),17);PZb(e,true);yNb(a,(wtc(),Asc),(Bcb(),true));d=Noc(a,e,r);c=BD(vNb(m,usc),305);t=BD(Ikb(d,d.c.length-1),17);c.k=t.c.i;c.n=t;c.b=e.d.i;c.c=e}}s=false}else{if(q.c.length!=0){b=(tCb(0,q.c.length),BD(q.c[0],10));if(b.k==(j0b(),d0b)){s=true;g=-1}}}++g}h=new Bib(a.b,0);while(h.b<h.d.gc()){i=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29));i.a.c.length==0&&uib(h)}} +function wKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;k=BD(BD(Qc(a.r,b),21),84);if(k.gc()<=2||b==(Ucd(),zcd)||b==(Ucd(),Tcd)){AKb(a,b);return}p=a.u.Hc((rcd(),qcd));c=b==(Ucd(),Acd)?(vLb(),uLb):(vLb(),rLb);r=b==Acd?(EIb(),BIb):(EIb(),DIb);d=dLb(iLb(c),a.s);q=b==Acd?Pje:Qje;for(j=k.Kc();j.Ob();){h=BD(j.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}o=h.b.rf();n=h.e;l=h.c;m=l.i;m.b=(f=l.n,l.e.a+f.b+f.c);m.a=(g=l.n,l.e.b+g.d+g.a);if(p){m.c=n.a-(e=l.n,l.e.a+e.b+e.c)-a.s;p=false}else{m.c=n.a+o.a+a.s}ytb(r,lle);l.f=r;$Hb(l,(NHb(),MHb));Ekb(d.d,new BLb(m,bLb(d,m)));q=b==Acd?$wnd.Math.min(q,n.b):$wnd.Math.max(q,n.b+h.b.rf().b)}q+=b==Acd?-a.t:a.t;cLb((d.e=q,d));for(i=k.Kc();i.Ob();){h=BD(i.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}m=h.c.i;m.c-=h.e.a;m.d-=h.e.b}} +function IDc(a,b,c){var d;Odd(c,'StretchWidth layering',1);if(b.a.c.length==0){Qdd(c);return}a.c=b;a.t=0;a.u=0;a.i=Pje;a.g=Qje;a.d=Edb(ED(vNb(b,(Nyc(),lyc))));CDc(a);DDc(a);ADc(a);HDc(a);BDc(a);a.i=$wnd.Math.max(1,a.i);a.g=$wnd.Math.max(1,a.g);a.d=a.d/a.i;a.f=a.g/a.i;a.s=FDc(a);d=new H1b(a.c);Ekb(a.c.b,d);a.r=Mu(a.p);a.n=tlb(a.k,a.k.length);while(a.r.c.length!=0){a.o=JDc(a);if(!a.o||EDc(a)&&a.b.a.gc()!=0){KDc(a,d);d=new H1b(a.c);Ekb(a.c.b,d);ye(a.a,a.b);a.b.a.$b();a.t=a.u;a.u=0}else{if(EDc(a)){a.c.b.c=KC(SI,Uhe,1,0,5,1);d=new H1b(a.c);Ekb(a.c.b,d);a.t=0;a.u=0;a.b.a.$b();a.a.a.$b();++a.f;a.r=Mu(a.p);a.n=tlb(a.k,a.k.length)}else{$_b(a.o,d);Lkb(a.r,a.o);Qqb(a.b,a.o);a.t=a.t-a.k[a.o.p]*a.d+a.j[a.o.p];a.u+=a.e[a.o.p]*a.d}}}b.a.c=KC(SI,Uhe,1,0,5,1);smb(b.b);Qdd(c)} +function Mgc(a){var b,c,d,e;MAb(JAb(new YAb(null,new Kub(a.a.b,16)),new khc),new mhc);Kgc(a);MAb(JAb(new YAb(null,new Kub(a.a.b,16)),new ohc),new qhc);if(a.c==(Aad(),yad)){MAb(JAb(LAb(new YAb(null,new Kub(new Pib(a.f),1)),new yhc),new Ahc),new Chc(a));MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Ghc),new Ihc),new Khc),new Mhc),new Ohc(a))}e=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(d=new olb(a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);e.a=$wnd.Math.min(e.a,c.d.c);e.b=$wnd.Math.min(e.b,c.d.d);b.a=$wnd.Math.max(b.a,c.d.c+c.d.b);b.b=$wnd.Math.max(b.b,c.d.d+c.d.a)}P6c(X6c(a.d.c),V6c(new f7c(e.a,e.b)));P6c(X6c(a.d.f),c7c(new f7c(b.a,b.b),e));Lgc(a,e,b);Uhb(a.f);Uhb(a.b);Uhb(a.g);Uhb(a.e);a.a.a.c=KC(SI,Uhe,1,0,5,1);a.a.b.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.d=null} +function vZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;e=new Rkb;for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);n=o.e;if(n){d=vZb(a,n,o);Gkb(e,d);sZb(a,n,o);if(BD(vNb(n,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){s=BD(vNb(o,(Nyc(),Vxc)),98);m=BD(vNb(o,Yxc),174).Hc((rcd(),ncd));for(r=new olb(o.j);r.a<r.c.c.length;){q=BD(mlb(r),11);f=BD(Ohb(a.b,q),10);if(!f){f=Z$b(q,s,q.j,-(q.e.c.length-q.g.c.length),null,new d7c,q.o,BD(vNb(n,Lwc),103),n);yNb(f,$sc,q);Rhb(a.b,q,f);Ekb(n.a,f)}g=BD(Ikb(f.j,0),11);for(k=new olb(q.f);k.a<k.c.c.length;){j=BD(mlb(k),70);h=new p_b;h.o.a=j.o.a;h.o.b=j.o.b;Ekb(g.f,h);if(!m){t=q.j;l=0;tcd(BD(vNb(o,Yxc),21))&&(l=mfd(j.n,j.o,q.o,0,t));s==(dcd(),bcd)||(Ucd(),Ecd).Hc(t)?(h.o.a=l):(h.o.b=l)}}}}}}i=new Rkb;rZb(a,b,c,e,i);!!c&&tZb(a,b,c,i);return i} +function nEc(a,b,c){var d,e,f,g,h,i,j,k,l;if(a.c[b.c.p][b.p].e){return}else{a.c[b.c.p][b.p].e=true}a.c[b.c.p][b.p].b=0;a.c[b.c.p][b.p].d=0;a.c[b.c.p][b.p].a=null;for(k=new olb(b.j);k.a<k.c.c.length;){j=BD(mlb(k),11);l=c?new J0b(j):new R0b(j);for(i=l.Kc();i.Ob();){h=BD(i.Pb(),11);g=h.i;if(g.c==b.c){if(g!=b){nEc(a,g,c);a.c[b.c.p][b.p].b+=a.c[g.c.p][g.p].b;a.c[b.c.p][b.p].d+=a.c[g.c.p][g.p].d}}else{a.c[b.c.p][b.p].d+=a.g[h.p];++a.c[b.c.p][b.p].b}}}f=BD(vNb(b,(wtc(),ssc)),15);if(f){for(e=f.Kc();e.Ob();){d=BD(e.Pb(),10);if(b.c==d.c){nEc(a,d,c);a.c[b.c.p][b.p].b+=a.c[d.c.p][d.p].b;a.c[b.c.p][b.p].d+=a.c[d.c.p][d.p].d}}}if(a.c[b.c.p][b.p].b>0){a.c[b.c.p][b.p].d+=Cub(a.i,24)*lke*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}} +function m5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new olb(a);o.a<o.c.c.length;){n=BD(mlb(o),10);n5b(n.n);n5b(n.o);o5b(n.f);r5b(n);t5b(n);for(q=new olb(n.j);q.a<q.c.c.length;){p=BD(mlb(q),11);n5b(p.n);n5b(p.a);n5b(p.o);G0b(p,s5b(p.j));f=BD(vNb(p,(Nyc(),Wxc)),19);!!f&&yNb(p,Wxc,meb(-f.a));for(e=new olb(p.g);e.a<e.c.c.length;){d=BD(mlb(e),17);for(c=Jsb(d.a,0);c.b!=c.d.c;){b=BD(Xsb(c),8);n5b(b)}i=BD(vNb(d,jxc),74);if(i){for(h=Jsb(i,0);h.b!=h.d.c;){g=BD(Xsb(h),8);n5b(g)}}for(l=new olb(d.b);l.a<l.c.c.length;){j=BD(mlb(l),70);n5b(j.n);n5b(j.o)}}for(m=new olb(p.f);m.a<m.c.c.length;){j=BD(mlb(m),70);n5b(j.n);n5b(j.o)}}if(n.k==(j0b(),e0b)){yNb(n,(wtc(),Hsc),s5b(BD(vNb(n,Hsc),61)));q5b(n)}for(k=new olb(n.b);k.a<k.c.c.length;){j=BD(mlb(k),70);r5b(j);n5b(j.o);n5b(j.n)}}} +function yQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;a.e=b;h=$Pb(b);w=new Rkb;for(d=new olb(h);d.a<d.c.c.length;){c=BD(mlb(d),15);A=new Rkb;w.c[w.c.length]=A;i=new Tqb;for(o=c.Kc();o.Ob();){n=BD(o.Pb(),33);f=wQb(a,n,true,0,0);A.c[A.c.length]=f;p=n.i;q=n.j;new f7c(p,q);m=(!n.n&&(n.n=new cUd(D2,n,1,7)),n.n);for(l=new Fyd(m);l.e!=l.i.gc();){j=BD(Dyd(l),137);e=wQb(a,j,false,p,q);A.c[A.c.length]=e}v=(!n.c&&(n.c=new cUd(F2,n,9,9)),n.c);for(s=new Fyd(v);s.e!=s.i.gc();){r=BD(Dyd(s),118);g=wQb(a,r,false,p,q);A.c[A.c.length]=g;t=r.i+p;u=r.j+q;m=(!r.n&&(r.n=new cUd(D2,r,1,7)),r.n);for(k=new Fyd(m);k.e!=k.i.gc();){j=BD(Dyd(k),137);e=wQb(a,j,false,t,u);A.c[A.c.length]=e}}ye(i,Dx(pl(OC(GC(KI,1),Uhe,20,0,[_sd(n),$sd(n)]))))}vQb(a,i,A)}a.f=new aPb(w);tNb(a.f,b);return a.f} +function Kqd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;D=Ohb(a.e,d);if(D==null){D=new eC;n=BD(D,183);s=b+'_s';t=s+e;m=new yC(t);cC(n,Vte,m)}C=BD(D,183);Qpd(c,C);G=new eC;Spd(G,'x',d.j);Spd(G,'y',d.k);cC(C,Yte,G);A=new eC;Spd(A,'x',d.b);Spd(A,'y',d.c);cC(C,'endPoint',A);l=Fhe((!d.a&&(d.a=new xMd(y2,d,5)),d.a));o=!l;if(o){w=new wB;f=new Srd(w);reb((!d.a&&(d.a=new xMd(y2,d,5)),d.a),f);cC(C,Ote,w)}i=dmd(d);u=!!i;u&&Tpd(a.a,C,Qte,kqd(a,dmd(d)));r=emd(d);v=!!r;v&&Tpd(a.a,C,Pte,kqd(a,emd(d)));j=(!d.e&&(d.e=new y5d(A2,d,10,9)),d.e).i==0;p=!j;if(p){B=new wB;g=new Urd(a,B);reb((!d.e&&(d.e=new y5d(A2,d,10,9)),d.e),g);cC(C,Ste,B)}k=(!d.g&&(d.g=new y5d(A2,d,9,10)),d.g).i==0;q=!k;if(q){F=new wB;h=new Wrd(a,F);reb((!d.g&&(d.g=new y5d(A2,d,9,10)),d.g),h);cC(C,Rte,F)}} +function eKb(a){$Jb();var b,c,d,e,f,g,h;d=a.f.n;for(g=ci(a.r).a.nc();g.Ob();){f=BD(g.Pb(),111);e=0;if(f.b.Xe((Y9c(),s9c))){e=Edb(ED(f.b.We(s9c)));if(e<0){switch(f.b.Hf().g){case 1:d.d=$wnd.Math.max(d.d,-e);break;case 3:d.a=$wnd.Math.max(d.a,-e);break;case 2:d.c=$wnd.Math.max(d.c,-e);break;case 4:d.b=$wnd.Math.max(d.b,-e);}}}if(tcd(a.u)){b=nfd(f.b,e);h=!BD(a.e.We(b9c),174).Hc((Idd(),zdd));c=false;switch(f.b.Hf().g){case 1:c=b>d.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}} +function l3b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new olb(a);j.a<j.c.c.length;){i=BD(mlb(j),10);g=BD(vNb(i,(Nyc(),mxc)),163);f=null;switch(g.g){case 1:case 2:f=(Gqc(),Fqc);break;case 3:case 4:f=(Gqc(),Dqc);}if(f){yNb(i,(wtc(),Bsc),(Gqc(),Fqc));f==Dqc?o3b(i,g,(KAc(),HAc)):f==Fqc&&o3b(i,g,(KAc(),IAc))}else{if(fcd(BD(vNb(i,Vxc),98))&&i.j.c.length!=0){b=true;for(l=new olb(i.j);l.a<l.c.c.length;){k=BD(mlb(l),11);if(!(k.j==(Ucd(),zcd)&&k.e.c.length-k.g.c.length>0||k.j==Tcd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new olb(k.g);e.a<e.c.c.length;){c=BD(mlb(e),17);h=BD(vNb(c.d.i,mxc),163);if(h==(Ctc(),ztc)||h==Atc){b=false;break}}for(d=new olb(k.e);d.a<d.c.c.length;){c=BD(mlb(d),17);h=BD(vNb(c.c.i,mxc),163);if(h==(Ctc(),xtc)||h==ytc){b=false;break}}}b&&o3b(i,g,(KAc(),JAc))}}}} +function lJc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;w=0;n=0;for(l=new olb(b.e);l.a<l.c.c.length;){k=BD(mlb(l),10);m=0;h=0;i=c?BD(vNb(k,hJc),19).a:Rie;r=d?BD(vNb(k,iJc),19).a:Rie;j=$wnd.Math.max(i,r);for(t=new olb(k.j);t.a<t.c.c.length;){s=BD(mlb(t),11);u=k.n.b+s.n.b+s.a.b;if(d){for(g=new olb(s.g);g.a<g.c.c.length;){f=BD(mlb(g),17);p=f.d;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(BD(vNb(o,hJc),19).a,BD(vNb(o,iJc),19).a);v=BD(vNb(f,(Nyc(),eyc)),19).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new olb(s.e);g.a<g.c.c.length;){f=BD(mlb(g),17);p=f.c;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(BD(vNb(o,hJc),19).a,BD(vNb(o,iJc),19).a);v=BD(vNb(f,(Nyc(),eyc)),19).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}} +function oMc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.b);e.a<e.c.c.length;){c=BD(mlb(e),29);for(i=new olb(c.a);i.a<i.c.c.length;){h=BD(mlb(i),10);b.j[h.p]=h;b.i[h.p]=b.o==(eMc(),dMc)?Qje:Pje}}Uhb(a.c);g=a.a.b;b.c==(YLc(),WLc)&&(g=JD(g,152)?km(BD(g,152)):JD(g,131)?BD(g,131).a:JD(g,54)?new ov(g):new dv(g));UMc(a.e,b,a.b);Alb(b.p,null);for(f=g.Kc();f.Ob();){c=BD(f.Pb(),29);j=c.a;b.o==(eMc(),dMc)&&(j=JD(j,152)?km(BD(j,152)):JD(j,131)?BD(j,131).a:JD(j,54)?new ov(j):new dv(j));for(m=j.Kc();m.Ob();){l=BD(m.Pb(),10);b.g[l.p]==l&&pMc(a,l,b)}}qMc(a,b);for(d=g.Kc();d.Ob();){c=BD(d.Pb(),29);for(m=new olb(c.a);m.a<m.c.c.length;){l=BD(mlb(m),10);b.p[l.p]=b.p[b.g[l.p].p];if(l==b.g[l.p]){k=Edb(b.i[b.j[l.p].p]);(b.o==(eMc(),dMc)&&k>Qje||b.o==cMc&&k<Pje)&&(b.p[l.p]=Edb(b.p[l.p])+k)}}}a.e.cg()} +function PGb(a,b,c,d){var e,f,g,h,i;h=new LIb(b);rKb(h,d);e=true;if(!!a&&a.Xe((Y9c(),z8c))){f=BD(a.We((Y9c(),z8c)),103);e=f==(ead(),cad)||f==aad||f==bad}hKb(h,false);Hkb(h.e.wf(),new mKb(h,false,e));NJb(h,h.f,(gHb(),dHb),(Ucd(),Acd));NJb(h,h.f,fHb,Rcd);NJb(h,h.g,dHb,Tcd);NJb(h,h.g,fHb,zcd);PJb(h,Acd);PJb(h,Rcd);OJb(h,zcd);OJb(h,Tcd);$Jb();g=h.A.Hc((tdd(),pdd))&&h.B.Hc((Idd(),Ddd))?_Jb(h):null;!!g&&DHb(h.a,g);eKb(h);GJb(h);PKb(h);BJb(h);pKb(h);HKb(h);xKb(h,Acd);xKb(h,Rcd);CJb(h);oKb(h);if(!c){return h.o}cKb(h);LKb(h);xKb(h,zcd);xKb(h,Tcd);i=h.B.Hc((Idd(),Edd));RJb(h,i,Acd);RJb(h,i,Rcd);SJb(h,i,zcd);SJb(h,i,Tcd);MAb(new YAb(null,new Kub(new $ib(h.i),0)),new TJb);MAb(JAb(new YAb(null,ci(h.r).a.oc()),new VJb),new XJb);dKb(h);h.e.uf(h.o);MAb(new YAb(null,ci(h.r).a.oc()),new fKb);return h.o} +function JVb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),81);j=$wnd.Math.min(j,b.d.f.g.c+b.e.a)}n=new Psb;for(g=new olb(a.a.a);g.a<g.c.c.length;){f=BD(mlb(g),189);f.i=j;f.e==0&&(Gsb(n,f,n.c.b,n.c),true)}while(n.b!=0){f=BD(n.b==0?null:(sCb(n.b!=0),Nsb(n,n.a.a)),189);e=f.f.g.c;for(m=f.a.a.ec().Kc();m.Ob();){k=BD(m.Pb(),81);p=f.i+k.e.a;k.d.g||k.g.c<p?(k.o=p):(k.o=k.g.c)}e-=f.f.o;f.b+=e;a.c==(ead(),bad)||a.c==_9c?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=BD(l.Pb(),81);for(i=k.f.Kc();i.Ob();){h=BD(i.Pb(),81);fad(a.c)?(o=a.f.ef(k,h)):(o=a.f.ff(k,h));h.d.i=$wnd.Math.max(h.d.i,k.o+k.g.b+o-h.e.a);h.k||(h.d.i=$wnd.Math.max(h.d.i,h.g.c-h.e.a));--h.d.e;h.d.e==0&&Dsb(n,h.d)}}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.g.c=b.o}} +function ELb(a){var b,c,d,e,f,g,h,i;h=a.b;b=a.a;switch(BD(vNb(a,(fFb(),bFb)),427).g){case 0:Okb(h,new tpb(new bMb));break;case 1:default:Okb(h,new tpb(new gMb));}switch(BD(vNb(a,_Eb),428).g){case 1:Okb(h,new YLb);Okb(h,new lMb);Okb(h,new GLb);break;case 0:default:Okb(h,new YLb);Okb(h,new RLb);}switch(BD(vNb(a,dFb),250).g){case 0:i=new FMb;break;case 1:i=new zMb;break;case 2:i=new CMb;break;case 3:i=new wMb;break;case 5:i=new JMb(new CMb);break;case 4:i=new JMb(new zMb);break;case 7:i=new tMb(new JMb(new zMb),new JMb(new CMb));break;case 8:i=new tMb(new JMb(new wMb),new JMb(new CMb));break;case 6:default:i=new JMb(new wMb);}for(g=new olb(h);g.a<g.c.c.length;){f=BD(mlb(g),167);d=0;e=0;c=new vgd(meb(d),meb(e));while(gNb(b,f,d,e)){c=BD(i.Ce(c,f),46);d=BD(c.a,19).a;e=BD(c.b,19).a}dNb(b,f,d,e)}} +function qQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;f=a.f.b;m=f.a;k=f.b;o=a.e.g;n=a.e.f;_kd(a.e,f.a,f.b);w=m/o;A=k/n;for(j=new Fyd(Kkd(a.e));j.e!=j.i.gc();){i=BD(Dyd(j),137);dld(i,i.i*w);eld(i,i.j*A)}for(s=new Fyd(Yod(a.e));s.e!=s.i.gc();){r=BD(Dyd(s),118);u=r.i;v=r.j;u>0&&dld(r,u*w);v>0&&eld(r,v*A)}stb(a.b,new CQb);b=new Rkb;for(h=new nib((new eib(a.c)).a);h.b;){g=lib(h);d=BD(g.cd(),79);c=BD(g.dd(),395).a;e=itd(d,false,false);l=oQb(jtd(d),ofd(e),c);ifd(l,e);t=ktd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.a.a.c,8)),c)}}for(q=new nib((new eib(a.d)).a);q.b;){p=lib(q);d=BD(p.cd(),79);c=BD(p.dd(),395).a;e=itd(d,false,false);l=oQb(ltd(d),w7c(ofd(e)),c);l=w7c(l);ifd(l,e);t=mtd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.c.b.c,8)),c)}}} +function _Vc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new Rkb;for(n=new olb(c);n.a<n.c.c.length;){m=BD(mlb(n),33);Ekb(o,new f7c(m.i,m.j))}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));while(CVc(a,c)){AVc(a,c,false)}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));h=0;i=0;e=null;if(c.c.length!=0){e=(tCb(0,c.c.length),BD(c.c[0],33));h=e.i-(tCb(0,o.c.length),BD(o.c[0],8)).a;i=e.j-(tCb(0,o.c.length),BD(o.c[0],8)).b}g=$wnd.Math.sqrt(h*h+i*i);l=cVc(c);f=1;while(l.a.gc()!=0){for(k=l.a.ec().Kc();k.Ob();){j=BD(k.Pb(),33);p=a.f;q=p.i+p.g/2;r=p.j+p.f/2;s=j.i+j.g/2;t=j.j+j.f/2;u=s-q;v=t-r;w=$wnd.Math.sqrt(u*u+v*v);A=u/w;B=v/w;dld(j,j.i+A*g);eld(j,j.j+B*g)}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));l=cVc(new Tkb(l));++f}!!a.a&&a.a.lg(new Tkb(l));d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));_Vc(a,b,new Tkb(l),d)}} +function $2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;p=a.n;q=a.o;m=a.d;l=Edb(ED(pBc(a,(Nyc(),iyc))));if(b){k=l*(b.gc()-1);n=0;for(i=b.Kc();i.Ob();){g=BD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b-m.d+n;d=q.a/(b.gc()+1);e=d;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),10);g.n.a=r;g.n.b=f-g.o.b;r+=g.o.a+l;j=Y2b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=g.o.b;o=BD(vNb(g,(wtc(),vsc)),11);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=0;F0b(o,a)}e+=d}}if(c){k=l*(c.gc()-1);n=0;for(i=c.Kc();i.Ob();){g=BD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b+q.b+m.a-n;d=q.a/(c.gc()+1);e=d;for(h=c.Kc();h.Ob();){g=BD(h.Pb(),10);g.n.a=r;g.n.b=f;r+=g.o.a+l;j=Y2b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=0;o=BD(vNb(g,(wtc(),vsc)),11);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=q.b;F0b(o,a)}e+=d}}} +function q7b(a,b){var c,d,e,f,g,h;if(!BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){return}for(h=new olb(b.a);h.a<h.c.c.length;){f=BD(mlb(h),10);if(f.k==(j0b(),h0b)){e=BD(vNb(f,(Nyc(),txc)),142);a.c=$wnd.Math.min(a.c,f.n.a-e.b);a.a=$wnd.Math.max(a.a,f.n.a+f.o.a+e.c);a.d=$wnd.Math.min(a.d,f.n.b-e.d);a.b=$wnd.Math.max(a.b,f.n.b+f.o.b+e.a)}}for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k!=(j0b(),h0b)){switch(f.k.g){case 2:d=BD(vNb(f,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){f.n.a=a.c-10;p7b(f,new x7b).Jb(new A7b(f));break}if(d==Atc){f.n.a=a.a+10;p7b(f,new D7b).Jb(new G7b(f));break}c=BD(vNb(f,Osc),303);if(c==(esc(),dsc)){o7b(f).Jb(new J7b(f));f.n.b=a.d-10;break}if(c==bsc){o7b(f).Jb(new M7b(f));f.n.b=a.b+10;break}break;default:throw vbb(new Wdb('The node type '+f.k+' is not supported by the '+zS));}}}} +function Y1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=new f7c(d.i+d.g/2,d.j+d.f/2);n=M1b(d);o=BD(hkd(b,(Nyc(),Vxc)),98);q=BD(hkd(d,$xc),61);if(!hCd(gkd(d),Uxc)){d.i==0&&d.j==0?(p=0):(p=kfd(d,q));jkd(d,Uxc,p)}j=new f7c(b.g,b.f);e=Z$b(d,o,q,n,j,i,new f7c(d.g,d.f),BD(vNb(c,Lwc),103),c);yNb(e,(wtc(),$sc),d);f=BD(Ikb(e.j,0),11);E0b(f,W1b(d));yNb(e,Yxc,(rcd(),pqb(pcd)));l=BD(hkd(b,Yxc),174).Hc(ncd);for(h=new Fyd((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n));h.e!=h.i.gc();){g=BD(Dyd(h),137);if(!Ccb(DD(hkd(g,Jxc)))&&!!g.a){m=Z1b(g);Ekb(f.f,m);if(!l){k=0;tcd(BD(hkd(b,Yxc),21))&&(k=mfd(new f7c(g.i,g.j),new f7c(g.g,g.f),new f7c(d.g,d.f),0,q));switch(q.g){case 2:case 4:m.o.a=k;break;case 1:case 3:m.o.b=k;}}}}yNb(e,tyc,ED(hkd(Xod(b),tyc)));yNb(e,uyc,ED(hkd(Xod(b),uyc)));yNb(e,ryc,ED(hkd(Xod(b),ryc)));Ekb(c.a,e);Rhb(a.a,d,e)} +function qUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(c,'Processor arrange level',1);k=0;mmb();ktb(b,new Wsd((mTc(),ZSc)));f=b.b;h=Jsb(b,b.b);j=true;while(j&&h.b.b!=h.d.a){r=BD(Ysb(h),86);BD(vNb(r,ZSc),19).a==0?--f:(j=false)}v=new Jib(b,0,f);g=new Qsb(v);v=new Jib(b,f,b.b);i=new Qsb(v);if(g.b==0){for(o=Jsb(i,0);o.b!=o.d.c;){n=BD(Xsb(o),86);yNb(n,eTc,meb(k++))}}else{l=g.b;for(u=Jsb(g,0);u.b!=u.d.c;){t=BD(Xsb(u),86);yNb(t,eTc,meb(k++));d=URc(t);qUc(a,d,Udd(c,1/l|0));ktb(d,tmb(new Wsd(eTc)));m=new Psb;for(s=Jsb(d,0);s.b!=s.d.c;){r=BD(Xsb(s),86);for(q=Jsb(t.d,0);q.b!=q.d.c;){p=BD(Xsb(q),188);p.c==r&&(Gsb(m,p,m.c.b,m.c),true)}}Osb(t.d);ye(t.d,m);h=Jsb(i,i.b);e=t.d.b;j=true;while(0<e&&j&&h.b.b!=h.d.a){r=BD(Ysb(h),86);if(BD(vNb(r,ZSc),19).a==0){yNb(r,eTc,meb(k++));--e;Zsb(h)}else{j=false}}}}Qdd(c)} +function _8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;Odd(b,'Inverted port preprocessing',1);k=a.b;j=new Bib(k,0);c=null;t=new Rkb;while(j.b<j.d.gc()){s=c;c=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),29));for(n=new olb(t);n.a<n.c.c.length;){l=BD(mlb(n),10);$_b(l,s)}t.c=KC(SI,Uhe,1,0,5,1);for(o=new olb(c.a);o.a<o.c.c.length;){l=BD(mlb(o),10);if(l.k!=(j0b(),h0b)){continue}if(!fcd(BD(vNb(l,(Nyc(),Vxc)),98))){continue}for(r=X_b(l,(KAc(),HAc),(Ucd(),zcd)).Kc();r.Ob();){p=BD(r.Pb(),11);i=p.e;h=BD(Qkb(i,KC(AQ,jne,17,i.c.length,0,1)),474);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];Z8b(a,p,d,t)}}for(q=X_b(l,IAc,Tcd).Kc();q.Ob();){p=BD(q.Pb(),11);i=p.g;h=BD(Qkb(i,KC(AQ,jne,17,i.c.length,0,1)),474);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];$8b(a,p,d,t)}}}}for(m=new olb(t);m.a<m.c.c.length;){l=BD(mlb(m),10);$_b(l,c)}Qdd(b)} +function _1b(a,b,c,d,e,f){var g,h,i,j,k,l;j=new H0b;tNb(j,b);G0b(j,BD(hkd(b,(Nyc(),$xc)),61));yNb(j,(wtc(),$sc),b);F0b(j,c);l=j.o;l.a=b.g;l.b=b.f;k=j.n;k.a=b.i;k.b=b.j;Rhb(a.a,b,j);g=FAb(NAb(LAb(new YAb(null,(!b.e&&(b.e=new y5d(B2,b,7,4)),new Kub(b.e,16))),new m2b),new e2b),new o2b(b));g||(g=FAb(NAb(LAb(new YAb(null,(!b.d&&(b.d=new y5d(B2,b,8,5)),new Kub(b.d,16))),new q2b),new g2b),new s2b(b)));g||(g=FAb(new YAb(null,(!b.e&&(b.e=new y5d(B2,b,7,4)),new Kub(b.e,16))),new u2b));yNb(j,Nsc,(Bcb(),g?true:false));e_b(j,f,e,BD(hkd(b,Txc),8));for(i=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);!Ccb(DD(hkd(h,Jxc)))&&!!h.a&&Ekb(j.f,Z1b(h))}switch(e.g){case 2:case 1:(j.j==(Ucd(),Acd)||j.j==Rcd)&&d.Fc((Orc(),Lrc));break;case 4:case 3:(j.j==(Ucd(),zcd)||j.j==Tcd)&&d.Fc((Orc(),Lrc));}return j} +function nQc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;m=null;d==(FQc(),DQc)?(m=b):d==EQc&&(m=c);for(p=m.a.ec().Kc();p.Ob();){o=BD(p.Pb(),11);q=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).b;t=new Tqb;h=new Tqb;for(j=new b1b(o.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);if(Ccb(DD(vNb(i,(wtc(),ltc))))!=e){continue}if(Jkb(f,i,0)!=-1){i.d==o?(r=i.c):(r=i.d);s=l7c(OC(GC(m1,1),nie,8,0,[r.i.n,r.n,r.a])).b;if($wnd.Math.abs(s-q)<0.2){continue}s<q?b.a._b(r)?Qqb(t,new vgd(DQc,i)):Qqb(t,new vgd(EQc,i)):b.a._b(r)?Qqb(h,new vgd(DQc,i)):Qqb(h,new vgd(EQc,i))}}if(t.a.gc()>1){n=new ZQc(o,t,d);reb(t,new PQc(a,n));g.c[g.c.length]=n;for(l=t.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}if(h.a.gc()>1){n=new ZQc(o,h,d);reb(h,new RQc(a,n));g.c[g.c.length]=n;for(l=h.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}}} +function $Wc(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,sre),'ELK Radial'),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new bXc),sre)));p4c(a,sre,uqe,Ksd(UWc));p4c(a,sre,wme,Ksd(XWc));p4c(a,sre,Fme,Ksd(NWc));p4c(a,sre,Tme,Ksd(OWc));p4c(a,sre,Eme,Ksd(PWc));p4c(a,sre,Gme,Ksd(MWc));p4c(a,sre,Dme,Ksd(QWc));p4c(a,sre,Hme,Ksd(TWc));p4c(a,sre,ore,Ksd(KWc));p4c(a,sre,nre,Ksd(LWc));p4c(a,sre,rre,Ksd(RWc));p4c(a,sre,lre,Ksd(SWc));p4c(a,sre,mre,Ksd(VWc));p4c(a,sre,pre,Ksd(WWc));p4c(a,sre,qre,Ksd(YWc))} +function LIb(a){var b;this.r=Cy(new OIb,new SIb);this.b=new Rpb(BD(Qb(F1),290));this.p=new Rpb(BD(Qb(F1),290));this.i=new Rpb(BD(Qb(DN),290));this.e=a;this.o=new g7c(a.rf());this.D=a.Df()||Ccb(DD(a.We((Y9c(),M8c))));this.A=BD(a.We((Y9c(),Y8c)),21);this.B=BD(a.We(b9c),21);this.q=BD(a.We(t9c),98);this.u=BD(a.We(x9c),21);if(!ucd(this.u)){throw vbb(new y2c('Invalid port label placement: '+this.u))}this.v=Ccb(DD(a.We(z9c)));this.j=BD(a.We(W8c),21);if(!Jbd(this.j)){throw vbb(new y2c('Invalid node label placement: '+this.j))}this.n=BD(bgd(a,U8c),116);this.k=Edb(ED(bgd(a,Q9c)));this.d=Edb(ED(bgd(a,P9c)));this.w=Edb(ED(bgd(a,X9c)));this.s=Edb(ED(bgd(a,R9c)));this.t=Edb(ED(bgd(a,S9c)));this.C=BD(bgd(a,V9c),142);this.c=2*this.d;b=!this.B.Hc((Idd(),zdd));this.f=new mIb(0,b,0);this.g=new mIb(1,b,0);lIb(this.f,(gHb(),eHb),this.g)} +function Lgd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);m+=sr(new Sr(ur(_sd(q).a.Kc(),new Sq)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);C=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(i-q.g);D=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(h-q.f);dld(q,C);eld(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));v.e!=v.i.gc();){u=BD(Dyd(v),33);for(k=new Sr(ur(_sd(u).a.Kc(),new Sq));Qr(k);){j=BD(Rr(k),79);Pld(j)||Kgd(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Afd(a,A,w,false,true)} +function Jcb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw vbb(new Oeb(Xhe))}j=a;f=a.length;i=false;if(f>0){b=(BCb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=a.substr(1);--f;i=b==45}}if(f==0){throw vbb(new Oeb(Oje+j+'"'))}while(a.length>0&&(BCb(0,a.length),a.charCodeAt(0)==48)){a=a.substr(1);--f}if(f>(Neb(),Leb)[10]){throw vbb(new Oeb(Oje+j+'"'))}for(e=0;e<f;e++){if(Zcb((BCb(e,a.length),a.charCodeAt(e)))==-1){throw vbb(new Oeb(Oje+j+'"'))}}l=0;g=Jeb[10];k=Keb[10];h=Jbb(Meb[10]);c=true;d=f%g;if(d>0){l=-parseInt(a.substr(0,d),10);a=a.substr(d);f-=d;c=false}while(f>=g){d=parseInt(a.substr(0,g),10);a=a.substr(g);f-=g;if(c){c=false}else{if(ybb(l,h)<0){throw vbb(new Oeb(Oje+j+'"'))}l=Ibb(l,k)}l=Qbb(l,d)}if(ybb(l,0)>0){throw vbb(new Oeb(Oje+j+'"'))}if(!i){l=Jbb(l);if(ybb(l,0)<0){throw vbb(new Oeb(Oje+j+'"'))}}return l} +function Z6d(a,b){X6d();var c,d,e,f,g,h,i;this.a=new a7d(this);this.b=a;this.c=b;this.f=c2d(q1d((O6d(),M6d),b));if(this.f.dc()){if((h=t1d(M6d,a))==b){this.e=true;this.d=new Rkb;this.f=new oFd;this.f.Fc(Ewe);BD(V1d(p1d(M6d,bKd(a)),''),26)==a&&this.f.Fc(u1d(M6d,bKd(a)));for(e=g1d(M6d,a).Kc();e.Ob();){d=BD(e.Pb(),170);switch($1d(q1d(M6d,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(c2d(q1d(M6d,d)));break}}}}else{Q6d();if(BD(b,66).Oj()){this.e=true;this.f=null;this.d=new Rkb;for(g=0,i=(a.i==null&&TKd(a),a.i).length;g<i;++g){d=(c=(a.i==null&&TKd(a),a.i),g>=0&&g<c.length?c[g]:null);for(f=_1d(q1d(M6d,d));f;f=_1d(q1d(M6d,f))){f==b&&this.d.Fc(d)}}}else if($1d(q1d(M6d,b))==1&&!!h){this.f=null;this.d=(m8d(),l8d)}else{this.f=null;this.e=true;this.d=(mmb(),new anb(b))}}}else{this.e=$1d(q1d(M6d,b))==5;this.f.Fb(W6d)&&(this.f=W6d)}} +function zKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;c=0;d=yKb(a,b);m=a.s;n=a.t;for(j=BD(BD(Qc(a.r,b),21),84).Kc();j.Ob();){i=BD(j.Pb(),111);if(!i.c||i.c.d.c.length<=0){continue}o=i.b.rf();h=i.b.Xe((Y9c(),s9c))?Edb(ED(i.b.We(s9c))):0;k=i.c;l=k.i;l.b=(g=k.n,k.e.a+g.b+g.c);l.a=(f=k.n,k.e.b+f.d+f.a);switch(b.g){case 1:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=o.b+h+d;$Hb(k,(NHb(),KHb));_Hb(k,(EIb(),DIb));break;case 3:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=-h-d-l.a;$Hb(k,(NHb(),KHb));_Hb(k,(EIb(),BIb));break;case 2:l.c=-h-d-l.b;if(i.a){e=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}$Hb(k,(NHb(),MHb));_Hb(k,(EIb(),CIb));break;case 4:l.c=o.a+h+d;if(i.a){e=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}$Hb(k,(NHb(),LHb));_Hb(k,(EIb(),CIb));}(b==(Ucd(),Acd)||b==Rcd)&&(c=$wnd.Math.max(c,l.a))}c>0&&(BD(Mpb(a.b,b),124).a.b=c)} +function b3b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Comment pre-processing',1);c=0;i=new olb(a.a);while(i.a<i.c.c.length){h=BD(mlb(i),10);if(Ccb(DD(vNb(h,(Nyc(),pwc))))){++c;e=0;d=null;j=null;for(o=new olb(h.j);o.a<o.c.c.length;){m=BD(mlb(o),11);e+=m.e.c.length+m.g.c.length;if(m.e.c.length==1){d=BD(Ikb(m.e,0),17);j=d.c}if(m.g.c.length==1){d=BD(Ikb(m.g,0),17);j=d.d}}if(e==1&&j.e.c.length+j.g.c.length==1&&!Ccb(DD(vNb(j.i,pwc)))){c3b(h,d,j,j.i);nlb(i)}else{r=new Rkb;for(n=new olb(h.j);n.a<n.c.c.length;){m=BD(mlb(n),11);for(l=new olb(m.g);l.a<l.c.c.length;){k=BD(mlb(l),17);k.d.g.c.length==0||(r.c[r.c.length]=k,true)}for(g=new olb(m.e);g.a<g.c.c.length;){f=BD(mlb(g),17);f.c.e.c.length==0||(r.c[r.c.length]=f,true)}}for(q=new olb(r);q.a<q.c.c.length;){p=BD(mlb(q),17);PZb(p,true)}}}}b.n&&Sdd(b,'Found '+c+' comment boxes');Qdd(b)} +function f9b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;m=Edb(ED(vNb(a,(Nyc(),tyc))));n=Edb(ED(vNb(a,uyc)));l=Edb(ED(vNb(a,ryc)));h=a.o;f=BD(Ikb(a.j,0),11);g=f.n;p=d9b(f,l);if(!p){return}if(b.Hc((rcd(),ncd))){switch(BD(vNb(a,(wtc(),Hsc)),61).g){case 1:p.c=(h.a-p.b)/2-g.a;p.d=n;break;case 3:p.c=(h.a-p.b)/2-g.a;p.d=-n-p.a;break;case 2:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=-m-p.b;break;case 4:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=m;}}else if(b.Hc(pcd)){switch(BD(vNb(a,(wtc(),Hsc)),61).g){case 1:case 3:p.c=g.a+m;break;case 2:case 4:if(c&&!f.c){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=g.b+n}}}e=p.d;for(j=new olb(f.f);j.a<j.c.c.length;){i=BD(mlb(j),70);o=i.n;o.a=p.c;o.b=e;e+=i.o.b+l}} +function eae(){rEd(Q9,new Lae);rEd(S9,new qbe);rEd(T9,new Xbe);rEd(U9,new Cce);rEd(ZI,new Oce);rEd(GC(SD,1),new Rce);rEd(wI,new Uce);rEd(xI,new Xce);rEd(ZI,new hae);rEd(ZI,new kae);rEd(ZI,new nae);rEd(BI,new qae);rEd(ZI,new tae);rEd(yK,new wae);rEd(yK,new zae);rEd(ZI,new Cae);rEd(FI,new Fae);rEd(ZI,new Iae);rEd(ZI,new Oae);rEd(ZI,new Rae);rEd(ZI,new Uae);rEd(ZI,new Xae);rEd(GC(SD,1),new $ae);rEd(ZI,new bbe);rEd(ZI,new ebe);rEd(yK,new hbe);rEd(yK,new kbe);rEd(ZI,new nbe);rEd(JI,new tbe);rEd(ZI,new wbe);rEd(MI,new zbe);rEd(ZI,new Cbe);rEd(ZI,new Fbe);rEd(ZI,new Ibe);rEd(ZI,new Lbe);rEd(yK,new Obe);rEd(yK,new Rbe);rEd(ZI,new Ube);rEd(ZI,new $be);rEd(ZI,new bce);rEd(ZI,new ece);rEd(ZI,new hce);rEd(ZI,new kce);rEd(UI,new nce);rEd(ZI,new qce);rEd(ZI,new tce);rEd(ZI,new wce);rEd(UI,new zce);rEd(MI,new Fce);rEd(ZI,new Ice);rEd(JI,new Lce)} +function Bmd(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;n=c.length;if(n>0){j=(BCb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BCb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=c.substr(1,m-1);u=dfb('%',h)?null:QEd(h);e=0;if(k){try{e=Icb(c.substr(m+2),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){i=a;throw vbb(new rFd(i))}else throw vbb(a)}}for(r=pRd(b.Wg());r.Ob();){p=MRd(r);if(JD(p,510)){f=BD(p,590);t=f.d;if((u==null?t==null:dfb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:c.substr(0,l);d=0;if(l!=-1){try{d=Icb(c.substr(l+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){o=c}else throw vbb(a)}}o=dfb('%',o)?null:QEd(o);for(q=pRd(b.Wg());q.Ob();){p=MRd(q);if(JD(p,191)){g=BD(p,191);s=g.ne();if((o==null?s==null:dfb(o,s))&&d--==0){return g}}}return null}}return rid(b,c)} +function f6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new Rkb;for(o=new olb(a.b);o.a<o.c.c.length;){n=BD(mlb(o),29);for(r=new olb(n.a);r.a<r.c.c.length;){p=BD(mlb(r),10);if(p.k!=(j0b(),e0b)){continue}if(!wNb(p,(wtc(),Gsc))){continue}s=null;u=null;t=null;for(C=new olb(p.j);C.a<C.c.c.length;){B=BD(mlb(C),11);switch(B.j.g){case 4:s=B;break;case 2:u=B;break;default:t=B;}}v=BD(Ikb(t.g,0),17);k=new t7c(v.a);j=new g7c(t.n);P6c(j,p.n);l=Jsb(k,0);Vsb(l,j);A=w7c(v.a);m=new g7c(t.n);P6c(m,p.n);Gsb(A,m,A.c.b,A.c);D=BD(vNb(p,Gsc),10);F=BD(Ikb(D.j,0),11);i=BD(Qkb(s.e,KC(AQ,jne,17,0,0,1)),474);for(d=i,f=0,h=d.length;f<h;++f){b=d[f];RZb(b,F);o7c(b.a,b.a.b,k)}i=k_b(u.g);for(c=i,e=0,g=c.length;e<g;++e){b=c[e];QZb(b,F);o7c(b.a,0,A)}QZb(v,null);RZb(v,null);w.c[w.c.length]=p}}for(q=new olb(w);q.a<q.c.c.length;){p=BD(mlb(q),10);$_b(p,null)}} +function lgb(){lgb=ccb;var a,b,c;new sgb(1,0);new sgb(10,0);new sgb(0,0);dgb=KC(bJ,nie,240,11,0,1);egb=KC(TD,$ie,25,100,15,1);fgb=OC(GC(UD,1),Vje,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,2384185791015625]);ggb=KC(WD,oje,25,fgb.length,15,1);hgb=OC(GC(UD,1),Vje,25,15,[1,10,100,_ie,10000,Wje,1000000,10000000,100000000,Jje,10000000000,100000000000,1000000000000,10000000000000,100000000000000,1000000000000000,10000000000000000]);igb=KC(WD,oje,25,hgb.length,15,1);jgb=KC(bJ,nie,240,11,0,1);a=0;for(;a<jgb.length;a++){dgb[a]=new sgb(a,0);jgb[a]=new sgb(0,a);egb[a]=48}for(;a<egb.length;a++){egb[a]=48}for(c=0;c<ggb.length;c++){ggb[c]=ugb(fgb[c])}for(b=0;b<igb.length;b++){igb[b]=ugb(hgb[b])}Dhb()} +function zrb(){function e(){this.obj=this.createObject()} +;e.prototype.createObject=function(a){return Object.create(null)};e.prototype.get=function(a){return this.obj[a]};e.prototype.set=function(a,b){this.obj[a]=b};e.prototype[hke]=function(a){delete this.obj[a]};e.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)};e.prototype.entries=function(){var b=this.keys();var c=this;var d=0;return {next:function(){if(d>=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!xrb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[hke]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function cde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=KC(TD,$ie,25,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i<n;i++){b=a[e++];c=a[e++];d=a[e++];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2|q];f[g++]=_ce[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2];f[g++]=61}return zfb(f,0,f.length)} +function mB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>Rie&&dB(b,a.p-nje);g=b.q.getDate();ZA(b,1);a.k>=0&&aB(b,a.k);if(a.c>=0){ZA(b,a.c)}else if(a.k>=0){i=new fB(b.q.getFullYear()-nje,b.q.getMonth(),35);d=35-i.q.getDate();ZA(b,$wnd.Math.min(d,g))}else{ZA(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);$A(b,a.f==24&&a.g?0:a.f);a.j>=0&&_A(b,a.j);a.n>=0&&bB(b,a.n);a.i>=0&&cB(b,wbb(Ibb(Abb(Cbb(b.q.getTime()),_ie),_ie),a.i));if(a.a){e=new eB;dB(e,e.q.getFullYear()-nje-80);Gbb(Cbb(b.q.getTime()),Cbb(e.q.getTime()))&&dB(b,e.q.getFullYear()-nje+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();ZA(b,b.q.getDate()+c);b.q.getMonth()!=h&&ZA(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>Rie){f=b.q.getTimezoneOffset();cB(b,wbb(Cbb(b.q.getTime()),(a.o-f)*60*_ie))}return true} +function z2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=vNb(b,(wtc(),$sc));if(!JD(e,239)){return}o=BD(e,33);p=b.e;m=new g7c(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=BD(hkd(o,(Nyc(),Ixc)),174);if(uqb(u,(Idd(),Add))){n=BD(hkd(o,Kxc),116);w_b(n,f.a);z_b(n,f.d);x_b(n,f.b);y_b(n,f.c)}c=new Rkb;for(k=new olb(b.a);k.a<k.c.c.length;){i=BD(mlb(k),10);if(JD(vNb(i,$sc),239)){A2b(i,m)}else if(JD(vNb(i,$sc),186)&&!p){d=BD(vNb(i,$sc),118);s=b_b(b,i,d.g,d.f);bld(d,s.a,s.b)}for(r=new olb(i.j);r.a<r.c.c.length;){q=BD(mlb(r),11);MAb(JAb(new YAb(null,new Kub(q.g,16)),new G2b(i)),new I2b(c))}}if(p){for(r=new olb(p.j);r.a<r.c.c.length;){q=BD(mlb(r),11);MAb(JAb(new YAb(null,new Kub(q.g,16)),new K2b(p)),new M2b(c))}}t=BD(hkd(o,Swc),218);for(h=new olb(c);h.a<h.c.c.length;){g=BD(mlb(h),17);y2b(g,t,m)}B2b(b);for(j=new olb(b.a);j.a<j.c.c.length;){i=BD(mlb(j),10);l=i.e;!!l&&z2b(a,l)}} +function xSb(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,ume),'ELK Force'),'Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported.'),new ASb),ume),qqb((Csd(),zsd),OC(GC(O3,1),Kie,237,0,[xsd])))));p4c(a,ume,vme,meb(1));p4c(a,ume,wme,80);p4c(a,ume,xme,5);p4c(a,ume,_le,tme);p4c(a,ume,yme,meb(1));p4c(a,ume,zme,(Bcb(),true));p4c(a,ume,ame,lSb);p4c(a,ume,Ame,Ksd(dSb));p4c(a,ume,Bme,Ksd(mSb));p4c(a,ume,Cme,false);p4c(a,ume,Dme,Ksd(jSb));p4c(a,ume,Eme,Ksd(iSb));p4c(a,ume,Fme,Ksd(hSb));p4c(a,ume,Gme,Ksd(gSb));p4c(a,ume,Hme,Ksd(nSb));p4c(a,ume,mme,Ksd(fSb));p4c(a,ume,pme,Ksd(vSb));p4c(a,ume,nme,Ksd(eSb));p4c(a,ume,rme,Ksd(qSb));p4c(a,ume,ome,Ksd(rSb))} +function GKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(BD(BD(Qc(a.r,b),21),84).dc()){return}g=BD(Mpb(a.b,b),124);i=g.i;h=g.n;k=KIb(a,b);d=i.b-h.b-h.c;e=g.a.a;f=i.c+h.b;n=a.w;if((k==(Tbd(),Qbd)||k==Sbd)&&BD(BD(Qc(a.r,b),21),84).gc()==1){e=k==Qbd?e-2*a.w:e;k=Pbd}if(d<e&&!a.B.Hc((Idd(),Fdd))){if(k==Qbd){n+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);f+=n}else{n+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1)}}else{if(d<e){e=k==Qbd?e-2*a.w:e;k=Pbd}switch(k.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);n+=$wnd.Math.max(0,c);f+=n;break;case 1:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1);n+=$wnd.Math.max(0,c);}}for(m=BD(BD(Qc(a.r,b),21),84).Kc();m.Ob();){l=BD(m.Pb(),111);l.e.a=f+l.d.b;l.e.b=(j=l.b,j.Xe((Y9c(),s9c))?j.Hf()==(Ucd(),Acd)?-j.rf().b-Edb(ED(j.We(s9c))):Edb(ED(j.We(s9c))):j.Hf()==(Ucd(),Acd)?-j.rf().b:0);f+=l.d.b+l.b.rf().a+l.d.c+n}} +function KKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(BD(BD(Qc(a.r,b),21),84).dc()){return}g=BD(Mpb(a.b,b),124);i=g.i;h=g.n;l=KIb(a,b);d=i.a-h.d-h.a;e=g.a.b;f=i.d+h.d;o=a.w;j=a.o.a;if((l==(Tbd(),Qbd)||l==Sbd)&&BD(BD(Qc(a.r,b),21),84).gc()==1){e=l==Qbd?e-2*a.w:e;l=Pbd}if(d<e&&!a.B.Hc((Idd(),Fdd))){if(l==Qbd){o+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);f+=o}else{o+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1)}}else{if(d<e){e=l==Qbd?e-2*a.w:e;l=Pbd}switch(l.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);o+=$wnd.Math.max(0,c);f+=o;break;case 1:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1);o+=$wnd.Math.max(0,c);}}for(n=BD(BD(Qc(a.r,b),21),84).Kc();n.Ob();){m=BD(n.Pb(),111);m.e.a=(k=m.b,k.Xe((Y9c(),s9c))?k.Hf()==(Ucd(),Tcd)?-k.rf().a-Edb(ED(k.We(s9c))):j+Edb(ED(k.We(s9c))):k.Hf()==(Ucd(),Tcd)?-k.rf().a:j);m.e.b=f+m.d.d;f+=m.d.d+m.b.rf().b+m.d.a+o}} +function Abc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;a.n=Edb(ED(vNb(a.g,(Nyc(),vyc))));a.e=Edb(ED(vNb(a.g,pyc)));a.i=a.g.b.c.length;h=a.i-1;m=0;a.j=0;a.k=0;a.a=Ou(KC(JI,nie,19,a.i,0,1));a.b=Ou(KC(BI,nie,333,a.i,7,1));for(g=new olb(a.g.b);g.a<g.c.c.length;){e=BD(mlb(g),29);e.p=h;for(l=new olb(e.a);l.a<l.c.c.length;){k=BD(mlb(l),10);k.p=m;++m}--h}a.f=KC(WD,oje,25,m,15,1);a.c=IC(WD,[nie,oje],[48,25],15,[m,3],2);a.o=new Rkb;a.p=new Rkb;b=0;a.d=0;for(f=new olb(a.g.b);f.a<f.c.c.length;){e=BD(mlb(f),29);h=e.p;d=0;p=0;i=e.a.c.length;j=0;for(l=new olb(e.a);l.a<l.c.c.length;){k=BD(mlb(l),10);m=k.p;a.f[m]=k.c.p;j+=k.o.b+a.n;c=sr(new Sr(ur(R_b(k).a.Kc(),new Sq)));o=sr(new Sr(ur(U_b(k).a.Kc(),new Sq)));a.c[m][0]=o-c;a.c[m][1]=c;a.c[m][2]=o;d+=c;p+=o;c>0&&Ekb(a.p,k);Ekb(a.o,k)}b-=d;n=i+b;j+=b*a.e;Nkb(a.a,h,meb(n));Nkb(a.b,h,j);a.j=$wnd.Math.max(a.j,n);a.k=$wnd.Math.max(a.k,j);a.d+=b;b+=p}} +function Ucd(){Ucd=ccb;var a;Scd=new Ycd(ole,0);Acd=new Ycd(xle,1);zcd=new Ycd(yle,2);Rcd=new Ycd(zle,3);Tcd=new Ycd(Ale,4);Fcd=(mmb(),new zob((a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0))));Gcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[])));Bcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[])));Ocd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[])));Qcd=Up(qqb(Tcd,OC(GC(F1,1),bne,61,0,[])));Lcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd])));Ecd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ncd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Tcd])));Hcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd])));Pcd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ccd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd])));Kcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Tcd])));Dcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Mcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Icd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd])));Jcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd])))} +function fSc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Psb;h=null;o=null;d=QD($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Jsb(b,0);t.b!=t.d.c;){r=BD(Xsb(t),86);if(PD(o)!==PD(vNb(r,(mTc(),$Sc)))){o=GD(vNb(r,$Sc));i=0}o!=null?(h=o+iSc(i++,d)):(h=iSc(i++,d));yNb(r,$Sc,h);for(q=(e=Jsb((new ZRc(r)).a.d,0),new aSc(e));Wsb(q.a);){p=BD(Xsb(q.a),188).c;Gsb(n,p,n.c.b,n.c);yNb(p,$Sc,h)}}m=new Lqb;for(g=0;g<h.length-d;g++){for(s=Jsb(b,0);s.b!=s.d.c;){r=BD(Xsb(s),86);j=qfb(GD(vNb(r,(mTc(),$Sc))),0,g+1);c=(j==null?Wd(irb(m.f,null)):Crb(m.g,j))!=null?BD(j==null?Wd(irb(m.f,null)):Crb(m.g,j),19).a+1:1;Shb(m,j,meb(c))}}for(l=new nib((new eib(m)).a);l.b;){k=lib(l);f=meb(Ohb(a.a,k.cd())!=null?BD(Ohb(a.a,k.cd()),19).a:0);Shb(a.a,GD(k.cd()),meb(BD(k.dd(),19).a+f.a));f=BD(Ohb(a.b,k.cd()),19);(!f||f.a<BD(k.dd(),19).a)&&Shb(a.b,GD(k.cd()),BD(k.dd(),19))}fSc(a,n)}} +function PCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(c,'Interactive node layering',1);d=new Rkb;for(n=new olb(b.a);n.a<n.c.c.length;){l=BD(mlb(n),10);j=l.n.a;i=j+l.o.a;i=$wnd.Math.max(j+1,i);r=new Bib(d,0);e=null;while(r.b<r.d.gc()){p=(sCb(r.b<r.d.gc()),BD(r.d.Xb(r.c=r.b++),569));if(p.c>=i){sCb(r.b>0);r.a.Xb(r.c=--r.b);break}else if(p.a>j){if(!e){Ekb(p.b,l);p.c=$wnd.Math.min(p.c,j);p.a=$wnd.Math.max(p.a,i);e=p}else{Gkb(e.b,p.b);e.a=$wnd.Math.max(e.a,p.a);uib(r)}}}if(!e){e=new TCc;e.c=j;e.a=i;Aib(r,e);Ekb(e.b,l)}}h=b.b;k=0;for(q=new olb(d);q.a<q.c.c.length;){p=BD(mlb(q),569);f=new H1b(b);f.p=k++;h.c[h.c.length]=f;for(o=new olb(p.b);o.a<o.c.c.length;){l=BD(mlb(o),10);$_b(l,f);l.p=0}}for(m=new olb(b.a);m.a<m.c.c.length;){l=BD(mlb(m),10);l.p==0&&OCc(a,l,b)}g=new Bib(h,0);while(g.b<g.d.gc()){(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),29)).a.c.length==0&&uib(g)}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function Snc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(b.e.c.length!=0&&c.e.c.length!=0){d=BD(Ikb(b.e,0),17).c.i;g=BD(Ikb(c.e,0),17).c.i;if(d==g){return beb(BD(vNb(BD(Ikb(b.e,0),17),(wtc(),Zsc)),19).a,BD(vNb(BD(Ikb(c.e,0),17),Zsc),19).a)}for(k=a.a,l=0,m=k.length;l<m;++l){j=k[l];if(j==d){return 1}else if(j==g){return -1}}}if(b.g.c.length!=0&&c.g.c.length!=0){f=BD(vNb(b,(wtc(),Xsc)),10);i=BD(vNb(c,Xsc),10);e=0;h=0;wNb(BD(Ikb(b.g,0),17),Zsc)&&(e=BD(vNb(BD(Ikb(b.g,0),17),Zsc),19).a);wNb(BD(Ikb(c.g,0),17),Zsc)&&(h=BD(vNb(BD(Ikb(b.g,0),17),Zsc),19).a);if(!!f&&f==i){if(Ccb(DD(vNb(BD(Ikb(b.g,0),17),ltc)))&&!Ccb(DD(vNb(BD(Ikb(c.g,0),17),ltc)))){return 1}else if(!Ccb(DD(vNb(BD(Ikb(b.g,0),17),ltc)))&&Ccb(DD(vNb(BD(Ikb(c.g,0),17),ltc)))){return -1}return e<h?-1:e>h?1:0}if(a.b){a.b._b(f)&&(e=BD(a.b.xc(f),19).a);a.b._b(i)&&(h=BD(a.b.xc(i),19).a)}return e<h?-1:e>h?1:0}return b.e.c.length!=0&&c.g.c.length!=0?1:-1} +function acc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;Odd(b,Ine,1);p=new Rkb;w=new Rkb;for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),29);r=-1;o=l_b(i.a);for(l=o,m=0,n=l.length;m<n;++m){k=l[m];++r;if(!(k.k==(j0b(),h0b)&&fcd(BD(vNb(k,(Nyc(),Vxc)),98)))){continue}ecd(BD(vNb(k,(Nyc(),Vxc)),98))||bcc(k);yNb(k,(wtc(),Psc),k);p.c=KC(SI,Uhe,1,0,5,1);w.c=KC(SI,Uhe,1,0,5,1);c=new Rkb;u=new Psb;Jq(u,Y_b(k,(Ucd(),Acd)));$bc(a,u,p,w,c);h=r;A=k;for(f=new olb(p);f.a<f.c.c.length;){d=BD(mlb(f),10);Z_b(d,h,i);++r;yNb(d,Psc,k);g=BD(Ikb(d.j,0),11);q=BD(vNb(g,$sc),11);Ccb(DD(vNb(q,nwc)))||BD(vNb(d,Qsc),15).Fc(A)}Osb(u);for(t=Y_b(k,Rcd).Kc();t.Ob();){s=BD(t.Pb(),11);Gsb(u,s,u.a,u.a.a)}$bc(a,u,w,null,c);v=k;for(e=new olb(w);e.a<e.c.c.length;){d=BD(mlb(e),10);Z_b(d,++r,i);yNb(d,Psc,k);g=BD(Ikb(d.j,0),11);q=BD(vNb(g,$sc),11);Ccb(DD(vNb(q,nwc)))||BD(vNb(v,Qsc),15).Fc(d)}c.c.length==0||yNb(k,ssc,c)}}Qdd(b)} +function SQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;l=BD(vNb(a,(HSb(),FSb)),33);r=Ohe;s=Ohe;p=Rie;q=Rie;for(u=new olb(a.e);u.a<u.c.c.length;){t=BD(mlb(u),144);C=t.d;D=t.e;r=$wnd.Math.min(r,C.a-D.a/2);s=$wnd.Math.min(s,C.b-D.b/2);p=$wnd.Math.max(p,C.a+D.a/2);q=$wnd.Math.max(q,C.b+D.b/2)}B=BD(hkd(l,(wSb(),kSb)),116);A=new f7c(B.b-r,B.d-s);for(h=new olb(a.e);h.a<h.c.c.length;){g=BD(mlb(h),144);w=vNb(g,FSb);if(JD(w,239)){n=BD(w,33);v=P6c(g.d,A);bld(n,v.a-n.g/2,v.b-n.f/2)}}for(d=new olb(a.c);d.a<d.c.c.length;){c=BD(mlb(d),282);j=BD(vNb(c,FSb),79);k=itd(j,true,true);F=(H=c7c(R6c(c.d.d),c.c.d),l6c(H,c.c.e.a,c.c.e.b),P6c(H,c.c.d));nmd(k,F.a,F.b);b=(I=c7c(R6c(c.c.d),c.d.d),l6c(I,c.d.e.a,c.d.e.b),P6c(I,c.d.d));gmd(k,b.a,b.b)}for(f=new olb(a.d);f.a<f.c.c.length;){e=BD(mlb(f),447);m=BD(vNb(e,FSb),137);o=P6c(e.d,A);bld(m,o.a,o.b)}G=p-r+(B.b+B.c);i=q-s+(B.d+B.a);Afd(l,G,i,false,true)} +function bmc(a){var b,c,d,e,f,g,h,i,j,k,l,m;c=null;i=null;e=BD(vNb(a.b,(Nyc(),Wwc)),376);if(e==(_Ac(),ZAc)){c=new Rkb;i=new Rkb}for(h=new olb(a.d);h.a<h.c.c.length;){g=BD(mlb(h),101);f=g.i;if(!f){continue}switch(g.e.g){case 0:b=BD(Fqb(new Gqb(g.b)),61);e==ZAc&&b==(Ucd(),Acd)?(c.c[c.c.length]=g,true):e==ZAc&&b==(Ucd(),Rcd)?(i.c[i.c.length]=g,true):_lc(g,b);break;case 1:j=g.a.d.j;k=g.c.d.j;j==(Ucd(),Acd)?amc(g,Acd,(Ajc(),xjc),g.a):k==Acd?amc(g,Acd,(Ajc(),yjc),g.c):j==Rcd?amc(g,Rcd,(Ajc(),yjc),g.a):k==Rcd&&amc(g,Rcd,(Ajc(),xjc),g.c);break;case 2:case 3:d=g.b;uqb(d,(Ucd(),Acd))?uqb(d,Rcd)?uqb(d,Tcd)?uqb(d,zcd)||amc(g,Acd,(Ajc(),yjc),g.c):amc(g,Acd,(Ajc(),xjc),g.a):amc(g,Acd,(Ajc(),wjc),null):amc(g,Rcd,(Ajc(),wjc),null);break;case 4:l=g.a.d.j;m=g.a.d.j;l==(Ucd(),Acd)||m==Acd?amc(g,Rcd,(Ajc(),wjc),null):amc(g,Acd,(Ajc(),wjc),null);}}if(c){c.c.length==0||$lc(c,(Ucd(),Acd));i.c.length==0||$lc(i,(Ucd(),Rcd))}} +function A2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;d=BD(vNb(a,(wtc(),$sc)),33);o=BD(vNb(a,(Nyc(),Gwc)),19).a;f=BD(vNb(a,nxc),19).a;jkd(d,Gwc,meb(o));jkd(d,nxc,meb(f));dld(d,a.n.a+b.a);eld(d,a.n.b+b.b);if(BD(hkd(d,Fxc),174).gc()!=0||!!a.e||PD(vNb(Q_b(a),Exc))===PD((Vzc(),Tzc))&&Jzc((Izc(),(!a.q?(mmb(),mmb(),kmb):a.q)._b(Cxc)?(m=BD(vNb(a,Cxc),197)):(m=BD(vNb(Q_b(a),Dxc),197)),m))){cld(d,a.o.a);ald(d,a.o.b)}for(l=new olb(a.j);l.a<l.c.c.length;){j=BD(mlb(l),11);p=vNb(j,$sc);if(JD(p,186)){e=BD(p,118);bld(e,j.n.a,j.n.b);jkd(e,$xc,j.j)}}n=BD(vNb(a,xxc),174).gc()!=0;for(i=new olb(a.b);i.a<i.c.c.length;){g=BD(mlb(i),70);if(n||BD(vNb(g,xxc),174).gc()!=0){c=BD(vNb(g,$sc),137);_kd(c,g.o.a,g.o.b);bld(c,g.n.a,g.n.b)}}if(!tcd(BD(vNb(a,Yxc),21))){for(k=new olb(a.j);k.a<k.c.c.length;){j=BD(mlb(k),11);for(h=new olb(j.f);h.a<h.c.c.length;){g=BD(mlb(h),70);c=BD(vNb(g,$sc),137);cld(c,g.o.a);ald(c,g.o.b);bld(c,g.n.a,g.n.b)}}}} +function gtd(a){var b,c,d,e,f;ytb(a,hue);switch((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i+(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i){case 0:throw vbb(new Wdb('The edge must have at least one source or target.'));case 1:return (!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==0?Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))):Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));}if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i==1){e=atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82));f=atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82));if(Xod(e)==Xod(f)){return Xod(e)}else if(e==Xod(f)){return e}else if(f==Xod(e)){return f}}d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));b=atd(BD(Rr(d),82));while(Qr(d)){c=atd(BD(Rr(d),82));if(c!=b&&!ntd(c,b)){if(Xod(c)==Xod(b)){b=Xod(c)}else{b=htd(b,c);if(!b){return null}}}}return b} +function KNc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;Odd(c,'Polyline edge routing',1);q=Edb(ED(vNb(b,(Nyc(),Uwc))));n=Edb(ED(vNb(b,wyc)));e=Edb(ED(vNb(b,myc)));d=$wnd.Math.min(1,e/n);t=0;i=0;if(b.b.c.length!=0){u=HNc(BD(Ikb(b.b,0),29));t=0.4*d*u}h=new Bib(b.b,0);while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29));f=Kq(g,DNc);f&&t>0&&(t-=n);h_b(g,t);k=0;for(m=new olb(g.a);m.a<m.c.c.length;){l=BD(mlb(m),10);j=0;for(p=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(p);){o=BD(Rr(p),17);r=A0b(o.c).b;s=A0b(o.d).b;if(g==o.d.i.c&&!OZb(o)){LNc(o,t,0.4*d*$wnd.Math.abs(r-s));if(o.c.j==(Ucd(),Tcd)){r=0;s=0}}j=$wnd.Math.max(j,$wnd.Math.abs(s-r))}switch(l.k.g){case 0:case 4:case 1:case 3:case 5:MNc(a,l,t,q);}k=$wnd.Math.max(k,j)}if(h.b<h.d.gc()){u=HNc((sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29)));k=$wnd.Math.max(k,u);sCb(h.b>0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.b<h.d.gc()&&(i+=n);t+=g.c.a+i}a.a.a.$b();b.f.a=t;Qdd(c)} +function bic(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;k=new Lqb;i=new Hp;for(d=new olb(a.a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);j=tgc(b);if(j){jrb(k.f,j,b)}else{s=ugc(b);if(s){for(f=new olb(s.k);f.a<f.c.c.length;){e=BD(mlb(f),17);Rc(i,e,b)}}}}for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);j=tgc(b);if(j){for(h=new Sr(ur(U_b(j).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(OZb(g)){continue}o=g.c;r=g.d;if((Ucd(),Lcd).Hc(g.c.j)&&Lcd.Hc(g.d.j)){continue}p=BD(Ohb(k,g.d.i),57);AFb(DFb(CFb(EFb(BFb(new FFb,0),100),a.c[b.a.d]),a.c[p.a.d]));if(o.j==Tcd&&l1b((z0b(),w0b,o))){for(m=BD(Qc(i,g),21).Kc();m.Ob();){l=BD(m.Pb(),57);if(l.d.c<b.d.c){n=a.c[l.a.d];q=a.c[b.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}if(r.j==zcd&&g1b((z0b(),u0b,r))){for(m=BD(Qc(i,g),21).Kc();m.Ob();){l=BD(m.Pb(),57);if(l.d.c>b.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}}}}} +function QEd(a){IEd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=hfb(a,wfb(37));if(e<0){return a}else{i=new Wfb(a.substr(0,e));b=KC(SD,wte,25,4,15,1);h=0;d=0;for(g=a.length;e<g;e++){BCb(e,a.length);if(a.charCodeAt(e)==37&&a.length>e+2&&_Ed((BCb(e+1,a.length),a.charCodeAt(e+1)),xEd,yEd)&&_Ed((BCb(e+2,a.length),a.charCodeAt(e+2)),xEd,yEd)){c=dFd((BCb(e+1,a.length),a.charCodeAt(e+1)),(BCb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Kfb(i,((b[0]&31)<<6|b[1]&63)&aje);break}case 3:{Kfb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&aje);break}}h=0;d=0}}else{for(f=0;f<h;++f){Kfb(i,b[f]&aje)}h=0;i.a+=String.fromCharCode(c)}}else{for(f=0;f<h;++f){Kfb(i,b[f]&aje)}h=0;Kfb(i,(BCb(e,a.length),a.charCodeAt(e)))}}return i.a}} +function wA(a,b,c,d,e){var f,g,h;uA(a,b);g=b[0];f=bfb(c.c,0);h=-1;if(nA(c)){if(d>0){if(g+d>a.length){return false}h=rA(a.substr(0,g+d),b)}else{h=rA(a,b)}}switch(f){case 71:h=oA(a,g,OC(GC(ZI,1),nie,2,6,[pje,qje]),b);e.e=h;return true;case 77:return zA(a,b,e,h,g);case 76:return BA(a,b,e,h,g);case 69:return xA(a,b,g,e);case 99:return AA(a,b,g,e);case 97:h=oA(a,g,OC(GC(ZI,1),nie,2,6,['AM','PM']),b);e.b=h;return true;case 121:return DA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return yA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(g<a.length&&(BCb(g,a.length),a.charCodeAt(g)==90)){++b[0];e.o=0;return true}case 122:case 118:return CA(a,g,b,e);default:return false;}} +function vKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;m=BD(BD(Qc(a.r,b),21),84);if(b==(Ucd(),zcd)||b==Tcd){zKb(a,b);return}f=b==Acd?(vLb(),rLb):(vLb(),uLb);u=b==Acd?(EIb(),DIb):(EIb(),BIb);c=BD(Mpb(a.b,b),124);d=c.i;e=d.c+w6c(OC(GC(UD,1),Vje,25,15,[c.n.b,a.C.b,a.k]));r=d.c+d.b-w6c(OC(GC(UD,1),Vje,25,15,[c.n.c,a.C.c,a.k]));g=dLb(iLb(f),a.t);s=b==Acd?Qje:Pje;for(l=m.Kc();l.Ob();){j=BD(l.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}q=j.b.rf();p=j.e;n=j.c;o=n.i;o.b=(i=n.n,n.e.a+i.b+i.c);o.a=(h=n.n,n.e.b+h.d+h.a);ytb(u,lle);n.f=u;$Hb(n,(NHb(),MHb));o.c=p.a-(o.b-q.a)/2;v=$wnd.Math.min(e,p.a);w=$wnd.Math.max(r,p.a+q.a);o.c<v?(o.c=v):o.c+o.b>w&&(o.c=w-o.b);Ekb(g.d,new BLb(o,bLb(g,o)));s=b==Acd?$wnd.Math.max(s,p.b+j.b.rf().b):$wnd.Math.min(s,p.b)}s+=b==Acd?a.t:-a.t;t=cLb((g.e=s,g));t>0&&(BD(Mpb(a.b,b),124).a.b=t);for(k=m.Kc();k.Ob();){j=BD(k.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} +function SPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Lqb;for(i=new Fyd(a);i.e!=i.i.gc();){h=BD(Dyd(i),33);c=new Tqb;Rhb(OPb,h,c);n=new aQb;e=BD(GAb(new YAb(null,new Lub(new Sr(ur($sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)])))),83);RPb(c,BD(e.xc((Bcb(),true)),14),new cQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new eQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),79);m=ktd(f);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}e=BD(GAb(new YAb(null,new Lub(new Sr(ur(_sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb])))),83);RPb(c,BD(e.xc(true),14),new gQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new iQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(l=d.Kc();l.Ob();){k=BD(l.Pb(),79);m=mtd(k);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}}} +function rhb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=ybb(a,0)<0;i&&(a=Jbb(a));if(ybb(a,0)==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:n=new Ufb;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==Rie?'2147483648':''+-b;return n.a;}}k=18;l=KC(TD,$ie,25,k+1,15,1);c=k;p=a;do{j=p;p=Abb(p,10);l[--c]=Tbb(wbb(48,Qbb(j,Ibb(p,10))))&aje}while(ybb(p,0)!=0);e=Qbb(Qbb(Qbb(k,c),b),1);if(b==0){i&&(l[--c]=45);return zfb(l,c,k-c)}if(b>0&&ybb(e,-6)>=0){if(ybb(e,0)>=0){f=c+Tbb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return zfb(l,c,k-c+1)}for(g=2;Gbb(g,wbb(Jbb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return zfb(l,c,k-c)}o=c+1;d=k;m=new Vfb;i&&(m.a+='-',m);if(d-o>=1){Kfb(m,l[c]);m.a+='.';m.a+=zfb(l,c+1,k-c-1)}else{m.a+=zfb(l,c,k-c)}m.a+='E';ybb(e,0)>0&&(m.a+='+',m);m.a+=''+Ubb(e);return m.a} +function iQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c=KC(SI,Uhe,1,0,5,1);a.i.c=KC(SI,Uhe,1,0,5,1);a.g.a.$b();if(b){for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);for(l=Y_b(f,(Ucd(),zcd)).Kc();l.Ob();){k=BD(l.Pb(),11);Qqb(a.e,k);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(OZb(d)){continue}Ekb(a.c,d);oQc(a,d);h=d.c.i.k;(h==(j0b(),h0b)||h==i0b||h==e0b||h==d0b)&&Ekb(a.j,d);n=d.d;m=n.i.c;m==c?Qqb(a.f,n):m==b?Qqb(a.e,n):Lkb(a.c,d)}}}}if(c){for(g=new olb(c.a);g.a<g.c.c.length;){f=BD(mlb(g),10);for(j=new olb(f.j);j.a<j.c.c.length;){i=BD(mlb(j),11);for(e=new olb(i.g);e.a<e.c.c.length;){d=BD(mlb(e),17);OZb(d)&&Qqb(a.g,d)}}for(l=Y_b(f,(Ucd(),Tcd)).Kc();l.Ob();){k=BD(l.Pb(),11);Qqb(a.f,k);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(OZb(d)){continue}Ekb(a.c,d);oQc(a,d);h=d.c.i.k;(h==(j0b(),h0b)||h==i0b||h==e0b||h==d0b)&&Ekb(a.j,d);n=d.d;m=n.i.c;m==c?Qqb(a.f,n):m==b?Qqb(a.e,n):Lkb(a.c,d)}}}}} +function Afd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;q=new f7c(a.g,a.f);p=rfd(a);p.a=$wnd.Math.max(p.a,b);p.b=$wnd.Math.max(p.b,c);w=p.a/q.a;k=p.b/q.b;u=p.a-q.a;i=p.b-q.b;if(d){g=!Xod(a)?BD(hkd(a,(Y9c(),z8c)),103):BD(hkd(Xod(a),(Y9c(),z8c)),103);h=PD(hkd(a,(Y9c(),t9c)))===PD((dcd(),$bd));for(s=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));s.e!=s.i.gc();){r=BD(Dyd(s),118);t=BD(hkd(r,A9c),61);if(t==(Ucd(),Scd)){t=lfd(r,g);jkd(r,A9c,t)}switch(t.g){case 1:h||dld(r,r.i*w);break;case 2:dld(r,r.i+u);h||eld(r,r.j*k);break;case 3:h||dld(r,r.i*w);eld(r,r.j+i);break;case 4:h||eld(r,r.j*k);}}}_kd(a,p.a,p.b);if(e){for(m=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);n=l.i+l.g/2;o=l.j+l.f/2;v=n/q.a;j=o/q.b;if(v+j>=1){if(v-j>0&&o>=0){dld(l,l.i+u);eld(l,l.j+i*j)}else if(v-j<0&&n>=0){dld(l,l.i+u*v);eld(l,l.j+i)}}}}jkd(a,(Y9c(),Y8c),(tdd(),f=BD(gdb(I1),9),new xqb(f,BD(_Bb(f,f.length),9),0)));return new f7c(w,k)} +function Yfd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));o=Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)));l=n==o;h=new d7c;b=BD(hkd(a,(Zad(),Sad)),74);if(!!b&&b.b>=2){if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){c=(Fhd(),e=new rmd,e);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){m=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(m.e!=m.i.gc()){Eyd(m)}}ifd(b,BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202))}if(l){for(d=new Fyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));d.e!=d.i.gc();){c=BD(Dyd(d),202);for(j=new Fyd((!c.a&&(c.a=new xMd(y2,c,5)),c.a));j.e!=j.i.gc();){i=BD(Dyd(j),469);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=BD(hkd(f,Yad),8);!!k&&bld(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} +function yMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new ULc(a.a,c,null,null);B=KC(UD,Vje,25,t,15,1);p=KC(UD,Vje,25,t,15,1);o=KC(UD,Vje,25,t,15,1);q=0;for(h=0;h<t;h++){p[h]=Ohe;o[h]=Rie}for(i=0;i<t;i++){d=(tCb(i,b.c.length),BD(b.c[i],180));B[i]=SLc(d);B[q]>B[i]&&(q=i);for(l=new olb(a.a.b);l.a<l.c.c.length;){k=BD(mlb(l),29);for(s=new olb(k.a);s.a<s.c.c.length;){r=BD(mlb(s),10);w=Edb(d.p[r.p])+Edb(d.d[r.p]);p[i]=$wnd.Math.min(p[i],w);o[i]=$wnd.Math.max(o[i],w+r.o.b)}}}A=KC(UD,Vje,25,t,15,1);for(j=0;j<t;j++){(tCb(j,b.c.length),BD(b.c[j],180)).o==(eMc(),cMc)?(A[j]=p[q]-p[j]):(A[j]=o[q]-o[j])}f=KC(UD,Vje,25,t,15,1);for(n=new olb(a.a.b);n.a<n.c.c.length;){m=BD(mlb(n),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);for(g=0;g<t;g++){f[g]=Edb((tCb(g,b.c.length),BD(b.c[g],180)).p[u.p])+Edb((tCb(g,b.c.length),BD(b.c[g],180)).d[u.p])+A[g]}f.sort(dcb(Ylb.prototype.te,Ylb,[]));e.p[u.p]=(f[1]+f[2])/2;e.d[u.p]=0}}return e} +function G3b(a,b,c){var d,e,f,g,h;d=b.i;f=a.i.o;e=a.i.d;h=a.n;g=l7c(OC(GC(m1,1),nie,8,0,[h,a.a]));switch(a.j.g){case 1:_Hb(b,(EIb(),BIb));d.d=-e.d-c-d.a;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){$Hb(b,(NHb(),MHb));d.c=g.a-Edb(ED(vNb(a,Ysc)))-c-d.b}else{$Hb(b,(NHb(),LHb));d.c=g.a+Edb(ED(vNb(a,Ysc)))+c}break;case 2:$Hb(b,(NHb(),LHb));d.c=f.a+e.c+c;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){_Hb(b,(EIb(),BIb));d.d=g.b-Edb(ED(vNb(a,Ysc)))-c-d.a}else{_Hb(b,(EIb(),DIb));d.d=g.b+Edb(ED(vNb(a,Ysc)))+c}break;case 3:_Hb(b,(EIb(),DIb));d.d=f.b+e.a+c;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){$Hb(b,(NHb(),MHb));d.c=g.a-Edb(ED(vNb(a,Ysc)))-c-d.b}else{$Hb(b,(NHb(),LHb));d.c=g.a+Edb(ED(vNb(a,Ysc)))+c}break;case 4:$Hb(b,(NHb(),MHb));d.c=-e.b-c-d.b;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){_Hb(b,(EIb(),BIb));d.d=g.b-Edb(ED(vNb(a,Ysc)))-c-d.a}else{_Hb(b,(EIb(),DIb));d.d=g.b+Edb(ED(vNb(a,Ysc)))+c}}} +function ded(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=0;D=0;for(i=new olb(a);i.a<i.c.c.length;){h=BD(mlb(i),33);zfd(h);n=$wnd.Math.max(n,h.g);D+=h.g*h.f}o=D/a.c.length;C=$dd(a,o);D+=a.c.length*C;n=$wnd.Math.max(n,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;m=0;k=c.b+c.c;B=new Psb;Dsb(B,meb(0));w=new Psb;j=new Bib(a,0);while(j.b<j.d.gc()){h=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),33));G=h.g;l=h.f;if(H+G>n){if(f){Fsb(w,m);Fsb(B,meb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}dld(h,H);eld(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(F<e){m+=e-F;F=e}if(f){H=c.b;j=new Bib(a,0);Fsb(B,meb(a.c.length));A=Jsb(B,0);r=BD(Xsb(A),19).a;Fsb(w,m);v=Jsb(w,0);u=0;while(j.b<j.d.gc()){if(j.b==r){H=c.b;u=Edb(ED(Xsb(v)));r=BD(Xsb(A),19).a}h=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),33));s=h.f;ald(h,u);p=u;if(j.b==r){q=k-H-c.c;t=h.g;cld(h,q);Ffd(h,new f7c(q,p),new f7c(t,s))}H+=h.g+b}}return new f7c(k,F)} +function _Yb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;Odd(b,'Compound graph postprocessor',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));h=BD(vNb(a,(wtc(),zsc)),224);k=new Tqb;for(r=h.ec().Kc();r.Ob();){q=BD(r.Pb(),17);g=new Tkb(h.cc(q));mmb();Okb(g,new EZb(a));v=zZb((tCb(0,g.c.length),BD(g.c[0],243)));A=AZb(BD(Ikb(g,g.c.length-1),243));t=v.i;f_b(A.i,t)?(s=t.e):(s=Q_b(t));l=aZb(q,g);Osb(q.a);m=null;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),243);p=new d7c;Y$b(p,e.a,s);n=e.b;d=new s7c;o7c(d,0,n.a);q7c(d,p);u=new g7c(A0b(n.c));w=new g7c(A0b(n.d));P6c(u,p);P6c(w,p);if(m){d.b==0?(o=w):(o=(sCb(d.b!=0),BD(d.a.a.c,8)));B=$wnd.Math.abs(m.a-o.a)>qme;C=$wnd.Math.abs(m.b-o.b)>qme;(!c&&B&&C||c&&(B||C))&&Dsb(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sCb(d.b!=0),BD(d.c.b.c,8)));bZb(n,l,p);if(AZb(e)==A){if(Q_b(A.i)!=e.a){p=new d7c;Y$b(p,Q_b(A.i),s)}yNb(q,utc,p)}cZb(n,q,s);k.a.zc(n,k)}QZb(q,v);RZb(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=BD(j.Pb(),17);QZb(i,null);RZb(i,null)}Qdd(b)} +function KQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return BD(a.Xb(0),231)}else if(a.gc()<=0){return new kRb}for(e=a.Kc();e.Ob();){c=BD(e.Pb(),231);o=0;k=Ohe;l=Ohe;i=Rie;j=Rie;for(n=new olb(c.e);n.a<n.c.c.length;){m=BD(mlb(n),144);o+=BD(vNb(m,(wSb(),oSb)),19).a;k=$wnd.Math.min(k,m.d.a-m.e.a/2);l=$wnd.Math.min(l,m.d.b-m.e.b/2);i=$wnd.Math.max(i,m.d.a+m.e.a/2);j=$wnd.Math.max(j,m.d.b+m.e.b/2)}yNb(c,(wSb(),oSb),meb(o));yNb(c,(HSb(),ESb),new f7c(k,l));yNb(c,DSb,new f7c(i,j))}mmb();a.ad(new OQb);p=new kRb;tNb(p,BD(a.Xb(0),94));h=0;s=0;for(f=a.Kc();f.Ob();){c=BD(f.Pb(),231);q=c7c(R6c(BD(vNb(c,(HSb(),DSb)),8)),BD(vNb(c,ESb),8));h=$wnd.Math.max(h,q.a);s+=q.a*q.b}h=$wnd.Math.max(h,$wnd.Math.sqrt(s)*Edb(ED(vNb(p,(wSb(),bSb)))));r=Edb(ED(vNb(p,uSb)));t=0;u=0;g=0;b=r;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),231);q=c7c(R6c(BD(vNb(c,(HSb(),DSb)),8)),BD(vNb(c,ESb),8));if(t+q.a>h){t=0;u+=g+r;g=0}JQb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} +function Ioc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new s7c;switch(a.a.g){case 3:m=BD(vNb(b.e,(wtc(),rtc)),15);n=BD(vNb(b.j,rtc),15);o=BD(vNb(b.f,rtc),15);c=BD(vNb(b.e,ptc),15);d=BD(vNb(b.j,ptc),15);e=BD(vNb(b.f,ptc),15);g=new Rkb;Gkb(g,m);n.Jc(new Loc);Gkb(g,JD(n,152)?km(BD(n,152)):JD(n,131)?BD(n,131).a:JD(n,54)?new ov(n):new dv(n));Gkb(g,o);f=new Rkb;Gkb(f,c);Gkb(f,JD(d,152)?km(BD(d,152)):JD(d,131)?BD(d,131).a:JD(d,54)?new ov(d):new dv(d));Gkb(f,e);yNb(b.f,rtc,g);yNb(b.f,ptc,f);yNb(b.f,stc,b.f);yNb(b.e,rtc,null);yNb(b.e,ptc,null);yNb(b.j,rtc,null);yNb(b.j,ptc,null);break;case 1:ye(k,b.e.a);Dsb(k,b.i.n);ye(k,Su(b.j.a));Dsb(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,Su(b.j.a));ye(k,b.f.a);}Osb(b.f.a);ye(b.f.a,k);QZb(b.f,b.e.c);h=BD(vNb(b.e,(Nyc(),jxc)),74);j=BD(vNb(b.j,jxc),74);i=BD(vNb(b.f,jxc),74);if(!!h||!!j||!!i){l=new s7c;Goc(l,i);Goc(l,j);Goc(l,h);yNb(b.f,jxc,l)}QZb(b.j,null);RZb(b.j,null);QZb(b.e,null);RZb(b.e,null);$_b(b.a,null);$_b(b.i,null);!!b.g&&Ioc(a,b.g)} +function bde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=rfb(a);o=ede(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return KC(SD,wte,25,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=KC(SD,wte,25,p*3,15,1);for(;n<p-1;n++){if(!dde(g=f[k++])||!dde(h=f[k++])||!dde(i=f[k++])||!dde(j=f[k++]))return null;b=$ce[g];c=$ce[h];d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!dde(g=f[k++])||!dde(h=f[k++])){return null}b=$ce[g];c=$ce[h];i=f[k++];j=f[k++];if($ce[i]==-1||$ce[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=KC(SD,wte,25,n*3+1,15,1);$fb(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=$ce[i];if((d&3)!=0)return null;q=KC(SD,wte,25,n*3+2,15,1);$fb(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} +function Sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(b,Ine,1);o=BD(vNb(a,(Nyc(),Swc)),218);for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);j=l_b(d.a);for(g=j,h=0,i=g.length;h<i;++h){f=g[h];if(f.k!=(j0b(),i0b)){continue}if(o==(Aad(),yad)){for(l=new olb(f.j);l.a<l.c.c.length;){k=BD(mlb(l),11);k.e.c.length==0||Vbc(k);k.g.c.length==0||Wbc(k)}}else if(JD(vNb(f,(wtc(),$sc)),17)){q=BD(vNb(f,$sc),17);r=BD(Y_b(f,(Ucd(),Tcd)).Kc().Pb(),11);s=BD(Y_b(f,zcd).Kc().Pb(),11);t=BD(vNb(r,$sc),11);u=BD(vNb(s,$sc),11);QZb(q,u);RZb(q,t);v=new g7c(s.i.n);v.a=l7c(OC(GC(m1,1),nie,8,0,[u.i.n,u.n,u.a])).a;Dsb(q.a,v);v=new g7c(r.i.n);v.a=l7c(OC(GC(m1,1),nie,8,0,[t.i.n,t.n,t.a])).a;Dsb(q.a,v)}else{if(f.j.c.length>=2){p=true;m=new olb(f.j);c=BD(mlb(m),11);n=null;while(m.a<m.c.c.length){n=c;c=BD(mlb(m),11);if(!pb(vNb(n,$sc),vNb(c,$sc))){p=false;break}}}else{p=false}for(l=new olb(f.j);l.a<l.c.c.length;){k=BD(mlb(l),11);k.e.c.length==0||Tbc(k,p);k.g.c.length==0||Ubc(k,p)}}$_b(f,null)}}Qdd(b)} +function KJc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=a.c[(tCb(0,b.c.length),BD(b.c[0],17)).p];A=a.c[(tCb(1,b.c.length),BD(b.c[1],17)).p];if(t.a.e.e-t.a.a-(t.b.e.e-t.b.a)==0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)==0){return false}r=t.b.e.f;if(!JD(r,10)){return false}q=BD(r,10);v=a.i[q.p];w=!q.c?-1:Jkb(q.c.a,q,0);f=Pje;if(w>0){e=BD(Ikb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(jBc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=Pje;if(w<q.c.a.c.length-1){i=BD(Ikb(q.c.a,w+1),10);k=a.i[i.p];B=$wnd.Math.ceil(jBc(a.n,i,q));j=k.a.e-i.d.d-(v.a.e+q.o.b+q.d.a)-B}if(c&&(Iy(),My(Jqe),$wnd.Math.abs(f-j)<=Jqe||f==j||isNaN(f)&&isNaN(j))){return true}d=gKc(t.a);h=-gKc(t.b);l=-gKc(A.a);s=gKc(A.b);p=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)>0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.a<A.b.e.e+A.a.a;m=t.a.e.e+t.b.a>A.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} +function XGb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new J6c(b.qf().a,b.qf().b,b.rf().a,b.rf().b);e=new I6c;if(a.c){for(g=new olb(b.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);e.c=f.qf().a+b.qf().a;e.d=f.qf().b+b.qf().b;e.b=f.rf().a;e.a=f.rf().b;H6c(d,e)}}for(j=new olb(b.Cf());j.a<j.c.c.length;){i=BD(mlb(j),838);k=i.qf().a+b.qf().a;l=i.qf().b+b.qf().b;if(a.e){e.c=k;e.d=l;e.b=i.rf().a;e.a=i.rf().b;H6c(d,e)}if(a.d){for(g=new olb(i.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);e.c=f.qf().a+k;e.d=f.qf().b+l;e.b=f.rf().a;e.a=f.rf().b;H6c(d,e)}}if(a.b){m=new f7c(-c,-c);if(BD(b.We((Y9c(),x9c)),174).Hc((rcd(),pcd))){for(g=new olb(i.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);m.a+=f.rf().a+c;m.b+=f.rf().b+c}}m.a=$wnd.Math.max(m.a,0);m.b=$wnd.Math.max(m.b,0);VGb(d,i.Bf(),i.zf(),b,i,m,c)}}a.b&&VGb(d,b.Bf(),b.zf(),b,null,null,c);h=new K_b(b.Af());h.d=$wnd.Math.max(0,b.qf().b-d.d);h.a=$wnd.Math.max(0,d.d+d.a-(b.qf().b+b.rf().b));h.b=$wnd.Math.max(0,b.qf().a-d.c);h.c=$wnd.Math.max(0,d.c+d.b-(b.qf().a+b.rf().a));b.Ef(h)} +function wz(){var a=['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007','\\b','\\t','\\n','\\u000B','\\f','\\r','\\u000E','\\u000F','\\u0010','\\u0011','\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019','\\u001A','\\u001B','\\u001C','\\u001D','\\u001E','\\u001F'];a[34]='\\"';a[92]='\\\\';a[173]='\\u00ad';a[1536]='\\u0600';a[1537]='\\u0601';a[1538]='\\u0602';a[1539]='\\u0603';a[1757]='\\u06dd';a[1807]='\\u070f';a[6068]='\\u17b4';a[6069]='\\u17b5';a[8203]='\\u200b';a[8204]='\\u200c';a[8205]='\\u200d';a[8206]='\\u200e';a[8207]='\\u200f';a[8232]='\\u2028';a[8233]='\\u2029';a[8234]='\\u202a';a[8235]='\\u202b';a[8236]='\\u202c';a[8237]='\\u202d';a[8238]='\\u202e';a[8288]='\\u2060';a[8289]='\\u2061';a[8290]='\\u2062';a[8291]='\\u2063';a[8292]='\\u2064';a[8298]='\\u206a';a[8299]='\\u206b';a[8300]='\\u206c';a[8301]='\\u206d';a[8302]='\\u206e';a[8303]='\\u206f';a[65279]='\\ufeff';a[65529]='\\ufff9';a[65530]='\\ufffa';a[65531]='\\ufffb';return a} +function pid(a,b,c){var d,e,f,g,h,i,j,k,l,m;i=new Rkb;l=b.length;g=AUd(c);for(j=0;j<l;++j){k=ifb(b,wfb(61),j);d=$hd(g,b.substr(j,k-j));e=KJd(d);f=e.Aj().Nh();switch(bfb(b,++k)){case 39:{h=gfb(b,39,++k);Ekb(i,new kGd(d,Pid(b.substr(k,h-k),f,e)));j=h+1;break}case 34:{h=gfb(b,34,++k);Ekb(i,new kGd(d,Pid(b.substr(k,h-k),f,e)));j=h+1;break}case 91:{m=new Rkb;Ekb(i,new kGd(d,m));n:for(;;){switch(bfb(b,++k)){case 39:{h=gfb(b,39,++k);Ekb(m,Pid(b.substr(k,h-k),f,e));k=h+1;break}case 34:{h=gfb(b,34,++k);Ekb(m,Pid(b.substr(k,h-k),f,e));k=h+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){m.c[m.c.length]=null}else{throw vbb(new hz(kte))}k+=3;break}}if(k<l){switch(BCb(k,b.length),b.charCodeAt(k)){case 44:{break}case 93:{break n}default:{throw vbb(new hz('Expecting , or ]'))}}}else{break}}j=k+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){Ekb(i,new kGd(d,null))}else{throw vbb(new hz(kte))}j=k+3;break}}if(j<l){BCb(j,b.length);if(b.charCodeAt(j)!=44){throw vbb(new hz('Expecting ,'))}}else{break}}return qid(a,i,c)} +function AKb(a,b){var c,d,e,f,g,h,i,j,k,l,m;j=BD(BD(Qc(a.r,b),21),84);g=bKb(a,b);c=a.u.Hc((rcd(),lcd));for(i=j.Kc();i.Ob();){h=BD(i.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}m=h.b.rf();k=h.c;l=k.i;l.b=(f=k.n,k.e.a+f.b+f.c);l.a=(e=k.n,k.e.b+e.d+e.a);switch(b.g){case 1:if(h.a){l.c=(m.a-l.b)/2;$Hb(k,(NHb(),KHb))}else if(g||c){l.c=-l.b-a.s;$Hb(k,(NHb(),MHb))}else{l.c=m.a+a.s;$Hb(k,(NHb(),LHb))}l.d=-l.a-a.t;_Hb(k,(EIb(),BIb));break;case 3:if(h.a){l.c=(m.a-l.b)/2;$Hb(k,(NHb(),KHb))}else if(g||c){l.c=-l.b-a.s;$Hb(k,(NHb(),MHb))}else{l.c=m.a+a.s;$Hb(k,(NHb(),LHb))}l.d=m.b+a.t;_Hb(k,(EIb(),DIb));break;case 2:if(h.a){d=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(m.b-d)/2;_Hb(k,(EIb(),CIb))}else if(g||c){l.d=-l.a-a.t;_Hb(k,(EIb(),BIb))}else{l.d=m.b+a.t;_Hb(k,(EIb(),DIb))}l.c=m.a+a.s;$Hb(k,(NHb(),LHb));break;case 4:if(h.a){d=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(m.b-d)/2;_Hb(k,(EIb(),CIb))}else if(g||c){l.d=-l.a-a.t;_Hb(k,(EIb(),BIb))}else{l.d=m.b+a.t;_Hb(k,(EIb(),DIb))}l.c=-l.b-a.s;$Hb(k,(NHb(),MHb));}g=false}} +function Kfe(a,b){wfe();var c,d,e,f,g,h,i,j,k,l,m,n,o;if(Vhb(Zee)==0){l=KC(lbb,nie,117,_ee.length,0,1);for(g=0;g<l.length;g++){l[g]=(++vfe,new $fe(4))}d=new Ifb;for(f=0;f<Yee.length;f++){k=(++vfe,new $fe(4));if(f<84){h=f*2;n=(BCb(h,wxe.length),wxe.charCodeAt(h));m=(BCb(h+1,wxe.length),wxe.charCodeAt(h+1));Ufe(k,n,m)}else{h=(f-84)*2;Ufe(k,afe[h],afe[h+1])}i=Yee[f];dfb(i,'Specials')&&Ufe(k,65520,65533);if(dfb(i,uxe)){Ufe(k,983040,1048573);Ufe(k,1048576,1114109)}Shb(Zee,i,k);Shb($ee,i,_fe(k));j=d.a.length;0<j?(d.a=d.a.substr(0,0)):0>j&&(d.a+=yfb(KC(TD,$ie,25,-j,15,1)));d.a+='Is';if(hfb(i,wfb(32))>=0){for(e=0;e<i.length;e++){BCb(e,i.length);i.charCodeAt(e)!=32&&Afb(d,(BCb(e,i.length),i.charCodeAt(e)))}}else{d.a+=''+i}Ofe(d.a,i,true)}Ofe(vxe,'Cn',false);Ofe(xxe,'Cn',true);c=(++vfe,new $fe(4));Ufe(c,0,lxe);Shb(Zee,'ALL',c);Shb($ee,'ALL',_fe(c));!bfe&&(bfe=new Lqb);Shb(bfe,vxe,vxe);!bfe&&(bfe=new Lqb);Shb(bfe,xxe,xxe);!bfe&&(bfe=new Lqb);Shb(bfe,'ALL','ALL')}o=b?BD(Phb(Zee,a),136):BD(Phb($ee,a),136);return o} +function c3b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;m=false;l=false;if(fcd(BD(vNb(d,(Nyc(),Vxc)),98))){g=false;h=false;t:for(o=new olb(d.j);o.a<o.c.c.length;){n=BD(mlb(o),11);for(q=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(n),new R0b(n)])));Qr(q);){p=BD(Rr(q),11);if(!Ccb(DD(vNb(p.i,pwc)))){if(n.j==(Ucd(),Acd)){g=true;break t}if(n.j==Rcd){h=true;break t}}}}m=h&&!g;l=g&&!h}if(!m&&!l&&d.b.c.length!=0){k=0;for(j=new olb(d.b);j.a<j.c.c.length;){i=BD(mlb(j),70);k+=i.n.b+i.o.b/2}k/=d.b.c.length;s=k>=d.o.b/2}else{s=!l}if(s){r=BD(vNb(d,(wtc(),vtc)),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else if(m){f=r}else{e=BD(vNb(d,tsc),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=BD(vNb(d,(wtc(),tsc)),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else if(l){f=e}else{r=BD(vNb(d,vtc),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);yNb(a,(wtc(),vsc),c);if(b.d==c){RZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null);d3b(c)}else{QZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null)}Osb(b.a)} +function aoc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Bib(a.b,0);k=b.Kc();o=0;j=BD(k.Pb(),19).a;v=0;c=new Tqb;A=new zsb;while(s.b<s.d.gc()){r=(sCb(s.b<s.d.gc()),BD(s.d.Xb(s.c=s.b++),29));for(u=new olb(r.a);u.a<u.c.c.length;){t=BD(mlb(u),10);for(n=new Sr(ur(U_b(t).a.Kc(),new Sq));Qr(n);){l=BD(Rr(n),17);A.a.zc(l,A)}for(m=new Sr(ur(R_b(t).a.Kc(),new Sq));Qr(m);){l=BD(Rr(m),17);A.a.Bc(l)!=null}}if(o+1==j){e=new H1b(a);Aib(s,e);f=new H1b(a);Aib(s,f);for(C=A.a.ec().Kc();C.Ob();){B=BD(C.Pb(),17);if(!c.a._b(B)){++v;c.a.zc(B,c)}g=new b0b(a);yNb(g,(Nyc(),Vxc),(dcd(),acd));$_b(g,e);__b(g,(j0b(),d0b));p=new H0b;F0b(p,g);G0b(p,(Ucd(),Tcd));D=new H0b;F0b(D,g);G0b(D,zcd);d=new b0b(a);yNb(d,Vxc,acd);$_b(d,f);__b(d,d0b);q=new H0b;F0b(q,d);G0b(q,Tcd);F=new H0b;F0b(F,d);G0b(F,zcd);w=new UZb;QZb(w,B.c);RZb(w,p);H=new UZb;QZb(H,D);RZb(H,q);QZb(B,F);h=new goc(g,d,w,H,B);yNb(g,(wtc(),usc),h);yNb(d,usc,h);G=w.c.i;if(G.k==d0b){i=BD(vNb(G,usc),305);i.d=h;h.g=i}}if(k.Ob()){j=BD(k.Pb(),19).a}else{break}}++o}return meb(v)} +function T1b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;l=0;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);if(!Ccb(DD(hkd(d,(Nyc(),Jxc))))){if((PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&!Ccb(DD(hkd(d,xwc)))){jkd(d,(wtc(),Zsc),meb(l));++l}$1b(a,d,c)}}l=0;for(j=new Fyd((!b.b&&(b.b=new cUd(B2,b,12,3)),b.b));j.e!=j.i.gc();){h=BD(Dyd(j),79);if(PD(hkd(b,(Nyc(),ywc)))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb))){jkd(h,(wtc(),Zsc),meb(l));++l}o=jtd(h);p=ltd(h);k=Ccb(DD(hkd(o,fxc)));n=!Ccb(DD(hkd(h,Jxc)));m=k&&Qld(h)&&Ccb(DD(hkd(h,gxc)));f=Xod(o)==b&&Xod(o)==Xod(p);g=(Xod(o)==b&&p==b)^(Xod(p)==b&&o==b);n&&!m&&(g||f)&&X1b(a,h,b,c)}if(Xod(b)){for(i=new Fyd(Wod(Xod(b)));i.e!=i.i.gc();){h=BD(Dyd(i),79);o=jtd(h);if(o==b&&Qld(h)){m=Ccb(DD(hkd(o,(Nyc(),fxc))))&&Ccb(DD(hkd(h,gxc)));m&&X1b(a,h,b,c)}}}} +function gDc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;Odd(c,'MinWidth layering',1);n=b.b;A=b.a;I=BD(vNb(b,(Nyc(),oxc)),19).a;h=BD(vNb(b,pxc),19).a;a.b=Edb(ED(vNb(b,lyc)));a.d=Pje;for(u=new olb(A);u.a<u.c.c.length;){s=BD(mlb(u),10);if(s.k!=(j0b(),h0b)){continue}D=s.o.b;a.d=$wnd.Math.min(a.d,D)}a.d=$wnd.Math.max(1,a.d);B=A.c.length;a.c=KC(WD,oje,25,B,15,1);a.f=KC(WD,oje,25,B,15,1);a.e=KC(UD,Vje,25,B,15,1);j=0;a.a=0;for(v=new olb(A);v.a<v.c.c.length;){s=BD(mlb(v),10);s.p=j++;a.c[s.p]=eDc(R_b(s));a.f[s.p]=eDc(U_b(s));a.e[s.p]=s.o.b/a.d;a.a+=a.e[s.p]}a.b/=a.d;a.a/=B;w=fDc(A);Okb(A,tmb(new mDc(a)));p=Pje;o=Ohe;g=null;H=I;G=I;f=h;e=h;if(I<0){H=BD(bDc.a.zd(),19).a;G=BD(bDc.b.zd(),19).a}if(h<0){f=BD(aDc.a.zd(),19).a;e=BD(aDc.b.zd(),19).a}for(F=H;F<=G;F++){for(d=f;d<=e;d++){C=dDc(a,F,d,A,w);r=Edb(ED(C.a));m=BD(C.b,15);q=m.gc();if(r<p||r==p&&q<o){p=r;o=q;g=m}}}for(l=g.Kc();l.Ob();){k=BD(l.Pb(),15);i=new H1b(b);for(t=k.Kc();t.Ob();){s=BD(t.Pb(),10);$_b(s,i)}n.c[n.c.length]=i}smb(n);A.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function I6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;a.b=b;a.a=BD(vNb(b,(Nyc(),bxc)),19).a;a.c=BD(vNb(b,dxc),19).a;a.c==0&&(a.c=Ohe);q=new Bib(b.b,0);while(q.b<q.d.gc()){p=(sCb(q.b<q.d.gc()),BD(q.d.Xb(q.c=q.b++),29));h=new Rkb;k=-1;u=-1;for(t=new olb(p.a);t.a<t.c.c.length;){s=BD(mlb(t),10);if(sr((D6b(),new Sr(ur(O_b(s).a.Kc(),new Sq))))>=a.a){d=E6b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Ekb(h,new vgd(s,d))}}B=new Rkb;for(j=0;j<k;++j){Dkb(B,0,(sCb(q.b>0),q.a.Xb(q.c=--q.b),C=new H1b(a.b),Aib(q,C),sCb(q.b<q.d.gc()),q.d.Xb(q.c=q.b++),C))}for(g=new olb(h);g.a<g.c.c.length;){e=BD(mlb(g),46);n=BD(e.b,571).a;if(!n){continue}for(m=new olb(n);m.a<m.c.c.length;){l=BD(mlb(m),10);H6b(a,l,B6b,B)}}c=new Rkb;for(i=0;i<u;++i){Ekb(c,(D=new H1b(a.b),Aib(q,D),D))}for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),46);A=BD(e.b,571).c;if(!A){continue}for(w=new olb(A);w.a<w.c.c.length;){v=BD(mlb(w),10);H6b(a,v,C6b,c)}}}r=new Bib(b.b,0);while(r.b<r.d.gc()){o=(sCb(r.b<r.d.gc()),BD(r.d.Xb(r.c=r.b++),29));o.a.c.length==0&&uib(r)}} +function uQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;Odd(c,'Spline edge routing',1);if(b.b.c.length==0){b.f.a=0;Qdd(c);return}s=Edb(ED(vNb(b,(Nyc(),wyc))));h=Edb(ED(vNb(b,pyc)));g=Edb(ED(vNb(b,myc)));r=BD(vNb(b,Xwc),336);B=r==(tBc(),sBc);A=Edb(ED(vNb(b,Ywc)));a.d=b;a.j.c=KC(SI,Uhe,1,0,5,1);a.a.c=KC(SI,Uhe,1,0,5,1);Uhb(a.k);i=BD(Ikb(b.b,0),29);k=Kq(i.a,(FNc(),DNc));o=BD(Ikb(b.b,b.b.c.length-1),29);l=Kq(o.a,DNc);p=new olb(b.b);q=null;G=0;do{t=p.a<p.c.c.length?BD(mlb(p),29):null;iQc(a,q,t);lQc(a);C=Vtb(uAb(PAb(JAb(new YAb(null,new Kub(a.i,16)),new LQc),new NQc)));F=0;u=G;m=!q||k&&q==i;n=!t||l&&t==o;if(C>0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,jQc(t,g,s,A)));if(j<s&&!m&&!n){F=(s-j)/2;j=s}u+=j}else !m&&!n&&(u+=s);!!t&&h_b(t,u);for(w=new olb(a.i);w.a<w.c.c.length;){v=BD(mlb(w),128);v.a.c=G;v.a.b=u-G;v.F=F;v.p=!q}Gkb(a.a,a.i);G=u;!!t&&(G+=t.c.a);q=t;m=n}while(t);for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),17);f=pQc(a,d);yNb(d,(wtc(),ptc),f);D=rQc(a,d);yNb(d,rtc,D)}b.f.a=G;a.d=null;Qdd(c)} +function Yxd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;p=a.i!=0;t=false;r=null;if(oid(a.e)){k=b.gc();if(k>0){m=k<100?null:new Ixd(k);j=new Aud(b);o=j.g;r=KC(WD,oje,25,k,15,1);d=0;u=new zud(k);for(e=0;e<a.i;++e){h=a.g[e];n=h;v:for(s=0;s<2;++s){for(i=k;--i>=0;){if(n!=null?pb(n,o[i]):PD(n)===PD(o[i])){if(r.length<=d){q=r;r=KC(WD,oje,25,2*r.length,15,1);$fb(q,0,r,0,d)}r[d++]=e;wtd(u,o[i]);break v}}n=n;if(PD(n)===PD(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}if(d>0){t=true;for(f=0;f<d;++f){n=o[f];m=k3d(a,BD(n,72),m)}for(g=d;--g>=0;){tud(a,r[g])}if(d!=k){for(e=k;--e>=d;){tud(j,e)}q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}b=j}}}else{b=Ctd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){tud(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?FLd(a,4,b.Kc().Pb(),null,r[0],p):FLd(a,6,b,r,r[0],p);m=c<100?null:new Ixd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}if(!m){Uhd(a.e,l)}else{m.Ei(l);m.Fi()}}else{m=Vxd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}!!m&&m.Fi()}return true}else{return false}} +function fYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new mYb(b);c.a||$Xb(b);j=ZXb(b);i=new Hp;q=new AYb;for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);for(e=new Sr(ur(U_b(o).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(d.c.i.k==(j0b(),e0b)||d.d.i.k==e0b){k=eYb(a,d,j,q);Rc(i,cYb(k.d),k.a)}}}g=new Rkb;for(t=BD(vNb(c.c,(wtc(),Esc)),21).Kc();t.Ob();){s=BD(t.Pb(),61);n=q.c[s.g];m=q.b[s.g];h=q.a[s.g];f=null;r=null;switch(s.g){case 4:f=new J6c(a.d.a,n,j.b.a-a.d.a,m-n);r=new J6c(a.d.a,n,h,m-n);iYb(j,new f7c(f.c+f.b,f.d));iYb(j,new f7c(f.c+f.b,f.d+f.a));break;case 2:f=new J6c(j.a.a,n,a.c.a-j.a.a,m-n);r=new J6c(a.c.a-h,n,h,m-n);iYb(j,new f7c(f.c,f.d));iYb(j,new f7c(f.c,f.d+f.a));break;case 1:f=new J6c(n,a.d.b,m-n,j.b.b-a.d.b);r=new J6c(n,a.d.b,m-n,h);iYb(j,new f7c(f.c,f.d+f.a));iYb(j,new f7c(f.c+f.b,f.d+f.a));break;case 3:f=new J6c(n,j.a.b,m-n,a.c.b-j.a.b);r=new J6c(n,a.c.b-h,m-n,h);iYb(j,new f7c(f.c,f.d));iYb(j,new f7c(f.c+f.b,f.d));}if(f){l=new vYb;l.d=s;l.b=f;l.c=r;l.a=Dx(BD(Qc(i,cYb(s)),21));g.c[g.c.length]=l}}Gkb(c.b,g);c.d=BWb(JWb(j));return c} +function pMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(c.p[b.p]!=null){return}h=true;c.p[b.p]=0;g=b;p=c.o==(eMc(),cMc)?Qje:Pje;do{e=a.b.e[g.p];f=g.c.a.c.length;if(c.o==cMc&&e>0||c.o==dMc&&e<f-1){i=null;j=null;c.o==dMc?(i=BD(Ikb(g.c.a,e+1),10)):(i=BD(Ikb(g.c.a,e-1),10));j=c.g[i.p];pMc(a,j,c);p=a.e.bg(p,b,g);c.j[b.p]==b&&(c.j[b.p]=c.j[j.p]);if(c.j[b.p]==c.j[j.p]){o=jBc(a.d,g,i);if(c.o==dMc){d=Edb(c.p[b.p]);l=Edb(c.p[j.p])+Edb(c.d[i.p])-i.d.d-o-g.d.a-g.o.b-Edb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.min(l,p)}else{c.p[b.p]=$wnd.Math.min(d,$wnd.Math.min(l,p))}}else{d=Edb(c.p[b.p]);l=Edb(c.p[j.p])+Edb(c.d[i.p])+i.o.b+i.d.a+o+g.d.d-Edb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.max(l,p)}else{c.p[b.p]=$wnd.Math.max(d,$wnd.Math.max(l,p))}}}else{o=Edb(ED(vNb(a.a,(Nyc(),vyc))));n=nMc(a,c.j[b.p]);k=nMc(a,c.j[j.p]);if(c.o==dMc){m=Edb(c.p[b.p])+Edb(c.d[g.p])+g.o.b+g.d.a+o-(Edb(c.p[j.p])+Edb(c.d[i.p])-i.d.d);tMc(n,k,m)}else{m=Edb(c.p[b.p])+Edb(c.d[g.p])-g.d.d-Edb(c.p[j.p])-Edb(c.d[i.p])-i.o.b-i.d.a-o;tMc(n,k,m)}}}else{p=a.e.bg(p,b,g)}g=c.a[g.p]}while(g!=b);SMc(a.e,b)} +function _qd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;t=b;s=new Hp;u=new Hp;k=Ypd(t,Nte);d=new ord(a,c,s,u);qqd(d.a,d.b,d.c,d.d,k);i=(A=s.i,!A?(s.i=new zf(s,s.c)):A);for(C=i.Kc();C.Ob();){B=BD(C.Pb(),202);e=BD(Qc(s,B),21);for(p=e.Kc();p.Ob();){o=p.Pb();v=BD(oo(a.d,o),202);if(v){h=(!B.e&&(B.e=new y5d(A2,B,10,9)),B.e);wtd(h,v)}else{g=_pd(t,Vte);m=_te+o+aue+g;n=m+$te;throw vbb(new cqd(n))}}}j=(w=u.i,!w?(u.i=new zf(u,u.c)):w);for(F=j.Kc();F.Ob();){D=BD(F.Pb(),202);f=BD(Qc(u,D),21);for(r=f.Kc();r.Ob();){q=r.Pb();v=BD(oo(a.d,q),202);if(v){l=(!D.g&&(D.g=new y5d(A2,D,9,10)),D.g);wtd(l,v)}else{g=_pd(t,Vte);m=_te+q+aue+g;n=m+$te;throw vbb(new cqd(n))}}}!c.b&&(c.b=new y5d(z2,c,4,7));if(c.b.i!=0&&(!c.c&&(c.c=new y5d(z2,c,5,8)),c.c.i!=0)&&(!c.b&&(c.b=new y5d(z2,c,4,7)),c.b.i<=1&&(!c.c&&(c.c=new y5d(z2,c,5,8)),c.c.i<=1))&&(!c.a&&(c.a=new cUd(A2,c,6,6)),c.a).i==1){G=BD(qud((!c.a&&(c.a=new cUd(A2,c,6,6)),c.a),0),202);if(!dmd(G)&&!emd(G)){kmd(G,BD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),82));lmd(G,BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82))}}} +function qJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;for(t=a.a,u=0,v=t.length;u<v;++u){s=t[u];j=Ohe;k=Ohe;for(o=new olb(s.e);o.a<o.c.c.length;){m=BD(mlb(o),10);g=!m.c?-1:Jkb(m.c.a,m,0);if(g>0){l=BD(Ikb(m.c.a,g-1),10);B=jBc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(g<m.c.a.c.length-1){l=BD(Ikb(m.c.a,g+1),10);B=jBc(a.b,m,l);r=l.n.b-l.d.d-(m.n.b+m.o.b+m.d.a+B)}else{r=2*m.n.b}k=$wnd.Math.min(r,k)}i=Ohe;f=false;e=BD(Ikb(s.e,0),10);for(D=new olb(e.j);D.a<D.c.c.length;){C=BD(mlb(D),11);p=e.n.b+C.n.b+C.a.b;for(d=new olb(C.e);d.a<d.c.c.length;){c=BD(mlb(d),17);w=c.c;b=w.i.n.b+w.n.b+w.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}h=BD(Ikb(s.e,s.e.c.length-1),10);for(A=new olb(h.j);A.a<A.c.c.length;){w=BD(mlb(A),11);p=h.n.b+w.n.b+w.a.b;for(d=new olb(w.g);d.a<d.c.c.length;){c=BD(mlb(d),17);C=c.d;b=C.i.n.b+C.n.b+C.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}if(f&&i!=0){for(n=new olb(s.e);n.a<n.c.c.length;){m=BD(mlb(n),10);m.n.b+=i}}}} +function ync(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(Mhb(a.a,b)){if(Rqb(BD(Ohb(a.a,b),53),c)){return 1}}else{Rhb(a.a,b,new Tqb)}if(Mhb(a.a,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return -1}}else{Rhb(a.a,c,new Tqb)}if(Mhb(a.e,b)){if(Rqb(BD(Ohb(a.e,b),53),c)){return -1}}else{Rhb(a.e,b,new Tqb)}if(Mhb(a.e,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return 1}}else{Rhb(a.e,c,new Tqb)}if(a.c==(tAc(),sAc)||!wNb(b,(wtc(),Zsc))||!wNb(c,(wtc(),Zsc))){i=BD(Etb(Dtb(KAb(JAb(new YAb(null,new Kub(b.j,16)),new Hnc)),new Jnc)),11);k=BD(Etb(Dtb(KAb(JAb(new YAb(null,new Kub(c.j,16)),new Lnc)),new Nnc)),11);if(!!i&&!!k){h=i.i;j=k.i;if(!!h&&h==j){for(m=new olb(h.j);m.a<m.c.c.length;){l=BD(mlb(m),11);if(l==i){Anc(a,c,b);return -1}else if(l==k){Anc(a,b,c);return 1}}return beb(znc(a,b),znc(a,c))}for(o=a.d,p=0,q=o.length;p<q;++p){n=o[p];if(n==h){Anc(a,c,b);return -1}else if(n==j){Anc(a,b,c);return 1}}}if(!wNb(b,(wtc(),Zsc))||!wNb(c,Zsc)){e=znc(a,b);g=znc(a,c);e>g?Anc(a,b,c):Anc(a,c,b);return e<g?-1:e>g?1:0}}d=BD(vNb(b,(wtc(),Zsc)),19).a;f=BD(vNb(c,Zsc),19).a;d>f?Anc(a,b,c):Anc(a,c,b);return d<f?-1:d>f?1:0} +function u2c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;if(Ccb(DD(hkd(b,(Y9c(),d9c))))){return mmb(),mmb(),jmb}j=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0;l=s2c(b);k=!l.dc();if(j||k){e=BD(hkd(b,F9c),149);if(!e){throw vbb(new y2c('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}s=D3c(e,(Csd(),ysd));q2c(b);if(!j&&k&&!s){return mmb(),mmb(),jmb}i=new Rkb;if(PD(hkd(b,J8c))===PD((hbd(),ebd))&&(D3c(e,vsd)||D3c(e,usd))){n=p2c(a,b);o=new Psb;ye(o,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(o.b!=0){m=BD(o.b==0?null:(sCb(o.b!=0),Nsb(o,o.a.a)),33);q2c(m);r=PD(hkd(m,J8c))===PD(gbd);if(r||ikd(m,o8c)&&!C3c(e,hkd(m,F9c))){h=u2c(a,m,c,d);Gkb(i,h);jkd(m,J8c,gbd);hfd(m)}else{ye(o,(!m.a&&(m.a=new cUd(E2,m,10,11)),m.a))}}}else{n=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(g=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);h=u2c(a,f,c,d);Gkb(i,h);hfd(f)}}for(q=new olb(i);q.a<q.c.c.length;){p=BD(mlb(q),79);jkd(p,d9c,(Bcb(),true))}r2c(b,e,Udd(d,n));v2c(i);return k&&s?l:(mmb(),mmb(),jmb)}else{return mmb(),mmb(),jmb}} +function Z$b(a,b,c,d,e,f,g,h,i){var j,k,l,m,n,o,p;n=c;k=new b0b(i);__b(k,(j0b(),e0b));yNb(k,(wtc(),Isc),g);yNb(k,(Nyc(),Vxc),(dcd(),$bd));p=Edb(ED(a.We(Uxc)));yNb(k,Uxc,p);l=new H0b;F0b(l,k);if(!(b!=bcd&&b!=ccd)){d>=0?(n=Zcd(h)):(n=Wcd(Zcd(h)));a.Ye($xc,n)}j=new d7c;m=false;if(a.Xe(Txc)){a7c(j,BD(a.We(Txc),8));m=true}else{_6c(j,g.a/2,g.b/2)}switch(n.g){case 4:yNb(k,mxc,(Ctc(),ytc));yNb(k,Bsc,(Gqc(),Fqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),zcd));m||(j.a=g.a);j.a-=g.a;break;case 2:yNb(k,mxc,(Ctc(),Atc));yNb(k,Bsc,(Gqc(),Dqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),Tcd));m||(j.a=0);break;case 1:yNb(k,Osc,(esc(),dsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Rcd));m||(j.b=g.b);j.b-=g.b;break;case 3:yNb(k,Osc,(esc(),bsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Acd));m||(j.b=0);}a7c(l.n,j);yNb(k,Txc,j);if(b==Zbd||b==_bd||b==$bd){o=0;if(b==Zbd&&a.Xe(Wxc)){switch(n.g){case 1:case 2:o=BD(a.We(Wxc),19).a;break;case 3:case 4:o=-BD(a.We(Wxc),19).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==_bd&&(o/=e.b);break;case 1:case 3:o=f.a;b==_bd&&(o/=e.a);}}yNb(k,htc,o)}yNb(k,Hsc,n);return k} +function AGc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Edb(ED(vNb(a.a.j,(Nyc(),Ewc))));if(c<-1||!a.a.i||ecd(BD(vNb(a.a.o,Vxc),98))||V_b(a.a.o,(Ucd(),zcd)).gc()<2&&V_b(a.a.o,Tcd).gc()<2){return true}if(a.a.c.Rf()){return false}v=0;u=0;t=new Rkb;for(i=a.a.e,j=0,k=i.length;j<k;++j){h=i[j];for(m=h,n=0,p=m.length;n<p;++n){l=m[n];if(l.k==(j0b(),i0b)){t.c[t.c.length]=l;continue}d=a.b[l.c.p][l.p];if(l.k==e0b){d.b=1;BD(vNb(l,(wtc(),$sc)),11).j==(Ucd(),zcd)&&(u+=d.a)}else{C=V_b(l,(Ucd(),Tcd));C.dc()||!Lq(C,new NGc)?(d.c=1):(e=V_b(l,zcd),(e.dc()||!Lq(e,new JGc))&&(v+=d.a))}for(g=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);v+=d.c;u+=d.b;B=f.d.i;zGc(a,d,B)}r=pl(OC(GC(KI,1),Uhe,20,0,[V_b(l,(Ucd(),Acd)),V_b(l,Rcd)]));for(A=new Sr(new xl(r.a.length,r.a));Qr(A);){w=BD(Rr(A),11);s=BD(vNb(w,(wtc(),gtc)),10);if(s){v+=d.c;u+=d.b;zGc(a,d,s)}}}for(o=new olb(t);o.a<o.c.c.length;){l=BD(mlb(o),10);d=a.b[l.c.p][l.p];for(g=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);v+=d.c;u+=d.b;B=f.d.i;zGc(a,d,B)}}t.c=KC(SI,Uhe,1,0,5,1)}b=v+u;q=b==0?Pje:(v-u)/b;return q>=c} +function ovd(){mvd();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=pvd((mmb(),new lnb(new $ib(lvd.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=pvd((mmb(),new lnb(new $ib(lvd.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=pvd((mmb(),new lnb(new $ib(lvd.d))));f.postMessage({id:b.id,data:e});break;case 'register':svd(b.algorithms);f.postMessage({id:b.id});break;case 'layout':qvd(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}} +function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} +if(typeof document===uke&&typeof self!==uke){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==uke&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} +function aae(a){if(a.N)return;a.N=true;a.b=Lnd(a,0);Knd(a.b,0);Knd(a.b,1);Knd(a.b,2);a.bb=Lnd(a,1);Knd(a.bb,0);Knd(a.bb,1);a.fb=Lnd(a,2);Knd(a.fb,3);Knd(a.fb,4);Qnd(a.fb,5);a.qb=Lnd(a,3);Knd(a.qb,0);Qnd(a.qb,1);Qnd(a.qb,2);Knd(a.qb,3);Knd(a.qb,4);Qnd(a.qb,5);Knd(a.qb,6);a.a=Mnd(a,4);a.c=Mnd(a,5);a.d=Mnd(a,6);a.e=Mnd(a,7);a.f=Mnd(a,8);a.g=Mnd(a,9);a.i=Mnd(a,10);a.j=Mnd(a,11);a.k=Mnd(a,12);a.n=Mnd(a,13);a.o=Mnd(a,14);a.p=Mnd(a,15);a.q=Mnd(a,16);a.s=Mnd(a,17);a.r=Mnd(a,18);a.t=Mnd(a,19);a.u=Mnd(a,20);a.v=Mnd(a,21);a.w=Mnd(a,22);a.B=Mnd(a,23);a.A=Mnd(a,24);a.C=Mnd(a,25);a.D=Mnd(a,26);a.F=Mnd(a,27);a.G=Mnd(a,28);a.H=Mnd(a,29);a.J=Mnd(a,30);a.I=Mnd(a,31);a.K=Mnd(a,32);a.M=Mnd(a,33);a.L=Mnd(a,34);a.P=Mnd(a,35);a.Q=Mnd(a,36);a.R=Mnd(a,37);a.S=Mnd(a,38);a.T=Mnd(a,39);a.U=Mnd(a,40);a.V=Mnd(a,41);a.X=Mnd(a,42);a.W=Mnd(a,43);a.Y=Mnd(a,44);a.Z=Mnd(a,45);a.$=Mnd(a,46);a._=Mnd(a,47);a.ab=Mnd(a,48);a.cb=Mnd(a,49);a.db=Mnd(a,50);a.eb=Mnd(a,51);a.gb=Mnd(a,52);a.hb=Mnd(a,53);a.ib=Mnd(a,54);a.jb=Mnd(a,55);a.kb=Mnd(a,56);a.lb=Mnd(a,57);a.mb=Mnd(a,58);a.nb=Mnd(a,59);a.ob=Mnd(a,60);a.pb=Mnd(a,61)} +function f5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new olb(a);q.a<q.c.c.length;){o=BD(mlb(q),10);s=$wnd.Math.max(s,o.n.a+o.o.a+o.d.c)}}else{s=b.f.a-b.c.a}s-=b.c.a;for(p=new olb(a);p.a<p.c.c.length;){o=BD(mlb(p),10);g5b(o.n,s-o.o.a);h5b(o.f);d5b(o);(!o.q?(mmb(),mmb(),kmb):o.q)._b((Nyc(),ayc))&&g5b(BD(vNb(o,ayc),8),s-o.o.a);switch(BD(vNb(o,mwc),248).g){case 1:yNb(o,mwc,(F7c(),D7c));break;case 2:yNb(o,mwc,(F7c(),C7c));}r=o.o;for(u=new olb(o.j);u.a<u.c.c.length;){t=BD(mlb(u),11);g5b(t.n,r.a-t.o.a);g5b(t.a,t.o.a);G0b(t,Z4b(t.j));g=BD(vNb(t,Wxc),19);!!g&&yNb(t,Wxc,meb(-g.a));for(f=new olb(t.g);f.a<f.c.c.length;){e=BD(mlb(f),17);for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);c.a=s-c.a}j=BD(vNb(e,jxc),74);if(j){for(i=Jsb(j,0);i.b!=i.d.c;){h=BD(Xsb(i),8);h.a=s-h.a}}for(m=new olb(e.b);m.a<m.c.c.length;){k=BD(mlb(m),70);g5b(k.n,s-k.o.a)}}for(n=new olb(t.f);n.a<n.c.c.length;){k=BD(mlb(n),70);g5b(k.n,t.o.a-k.o.a)}}if(o.k==(j0b(),e0b)){yNb(o,(wtc(),Hsc),Z4b(BD(vNb(o,Hsc),61)));c5b(o)}for(l=new olb(o.b);l.a<l.c.c.length;){k=BD(mlb(l),70);d5b(k);g5b(k.n,r.a-k.o.a)}}} +function i5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.b==0){for(q=new olb(a);q.a<q.c.c.length;){o=BD(mlb(q),10);s=$wnd.Math.max(s,o.n.b+o.o.b+o.d.a)}}else{s=b.f.b-b.c.b}s-=b.c.b;for(p=new olb(a);p.a<p.c.c.length;){o=BD(mlb(p),10);j5b(o.n,s-o.o.b);k5b(o.f);e5b(o);(!o.q?(mmb(),mmb(),kmb):o.q)._b((Nyc(),ayc))&&j5b(BD(vNb(o,ayc),8),s-o.o.b);switch(BD(vNb(o,mwc),248).g){case 3:yNb(o,mwc,(F7c(),A7c));break;case 4:yNb(o,mwc,(F7c(),E7c));}r=o.o;for(u=new olb(o.j);u.a<u.c.c.length;){t=BD(mlb(u),11);j5b(t.n,r.b-t.o.b);j5b(t.a,t.o.b);G0b(t,$4b(t.j));g=BD(vNb(t,Wxc),19);!!g&&yNb(t,Wxc,meb(-g.a));for(f=new olb(t.g);f.a<f.c.c.length;){e=BD(mlb(f),17);for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);c.b=s-c.b}j=BD(vNb(e,jxc),74);if(j){for(i=Jsb(j,0);i.b!=i.d.c;){h=BD(Xsb(i),8);h.b=s-h.b}}for(m=new olb(e.b);m.a<m.c.c.length;){k=BD(mlb(m),70);j5b(k.n,s-k.o.b)}}for(n=new olb(t.f);n.a<n.c.c.length;){k=BD(mlb(n),70);j5b(k.n,t.o.b-k.o.b)}}if(o.k==(j0b(),e0b)){yNb(o,(wtc(),Hsc),$4b(BD(vNb(o,Hsc),61)));b5b(o)}for(l=new olb(o.b);l.a<l.c.c.length;){k=BD(mlb(l),70);e5b(k);j5b(k.n,r.b-k.o.b)}}} +function tZc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;l=false;j=a+1;k=(tCb(a,b.c.length),BD(b.c[a],200));g=k.a;h=null;for(f=0;f<k.a.c.length;f++){e=(tCb(f,g.c.length),BD(g.c[f],187));if(e.c){continue}if(e.b.c.length==0){Zfb();v$c(k,e);--f;l=true;continue}if(!e.k){!!h&&a$c(h);h=new b$c(!h?0:h.e+h.d+d,k.f,d);OZc(e,h.e+h.d,k.f);Ekb(k.d,h);WZc(h,e);e.k=true}i=null;i=(n=null,f<k.a.c.length-1?(n=BD(Ikb(k.a,f+1),187)):j<b.c.length&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length!=0&&(n=BD(Ikb((tCb(j,b.c.length),BD(b.c[j],200)).a,0),187)),n);m=false;!!i&&(m=!pb(i.j,k));if(i){if(i.b.c.length==0){v$c(k,i);break}else{KZc(e,c-e.s);a$c(e.q);l=l|sZc(k,e,i,c,d)}if(i.b.c.length==0){v$c((tCb(j,b.c.length),BD(b.c[j],200)),i);i=null;while(b.c.length>j&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length==0){Lkb(b,(tCb(j,b.c.length),b.c[j]))}}if(!i){--f;continue}if(uZc(b,k,e,i,m,c,j,d)){l=true;continue}if(m){if(vZc(b,k,e,i,c,j,d)){l=true;continue}else if(wZc(k,e)){e.c=true;l=true;continue}}else if(wZc(k,e)){e.c=true;l=true;continue}if(l){continue}}if(wZc(k,e)){e.c=true;l=true;!!i&&(i.k=false);continue}else{a$c(e.q)}}return l} +function fed(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),157);!!i.c&&zfd(i.c);p=$wnd.Math.max(p,red(i));D+=red(i)*qed(i)}q=D/a.b.c.length;C=_dd(a.b,q);D+=a.b.c.length*C;p=$wnd.Math.max(p,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;n=0;l=c.b+c.c;B=new Psb;Dsb(B,meb(0));w=new Psb;k=new Bib(a.b,0);o=null;h=new Rkb;while(k.b<k.d.gc()){i=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),157));G=red(i);m=qed(i);if(H+G>p){if(f){Fsb(w,n);Fsb(B,meb(k.b-1));Ekb(a.d,o);h.c=KC(SI,Uhe,1,0,5,1)}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}h.c[h.c.length]=i;ued(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Gkb(a.a,h);Ekb(a.d,BD(Ikb(h,h.c.length-1),157));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F<e){n+=e-F;F=e}if(f){H=c.b;k=new Bib(a.b,0);Fsb(B,meb(a.b.c.length));A=Jsb(B,0);s=BD(Xsb(A),19).a;Fsb(w,n);v=Jsb(w,0);u=0;while(k.b<k.d.gc()){if(k.b==s){H=c.b;u=Edb(ED(Xsb(v)));s=BD(Xsb(A),19).a}i=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),157));sed(i,u);if(k.b==s){r=l-H-c.c;t=red(i);ted(i,r);ved(i,(r-t)/2,0)}H+=red(i)+b}}return new f7c(l,F)} +function pde(a){var b,c,d,e,f;b=a.c;f=null;switch(b){case 6:return a.Vl();case 13:return a.Wl();case 23:return a.Nl();case 22:return a.Sl();case 18:return a.Pl();case 8:nde(a);f=(wfe(),efe);break;case 9:return a.vl(true);case 19:return a.wl();case 10:switch(a.a){case 100:case 68:case 119:case 87:case 115:case 83:f=a.ul(a.a);nde(a);return f;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:{c=a.tl();c<Tje?(f=(wfe(),wfe(),++vfe,new ige(0,c))):(f=Ffe(Tee(c)))}break;case 99:return a.Fl();case 67:return a.Al();case 105:return a.Il();case 73:return a.Bl();case 103:return a.Gl();case 88:return a.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return a.xl();case 80:case 112:f=tde(a,a.a);if(!f)throw vbb(new mde(tvd((h0d(),Iue))));break;default:f=zfe(a.a);}nde(a);break;case 0:if(a.a==93||a.a==123||a.a==125)throw vbb(new mde(tvd((h0d(),Hue))));f=zfe(a.a);d=a.a;nde(a);if((d&64512)==Uje&&a.c==0&&(a.a&64512)==56320){e=KC(TD,$ie,25,2,15,1);e[0]=d&aje;e[1]=a.a&aje;f=Efe(Ffe(zfb(e,0,e.length)),0);nde(a)}break;default:throw vbb(new mde(tvd((h0d(),Hue))));}return f} +function e7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;e=Ohe;f=Ohe;g=Ohe;if(c){e=a.f.a;for(p=new olb(b.j);p.a<p.c.c.length;){o=BD(mlb(p),11);for(i=new olb(o.g);i.a<i.c.c.length;){h=BD(mlb(i),17);if(h.a.b!=0){k=BD(Hsb(h.a),8);if(k.a<e){f=e-k.a;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=k.a}if(k.a<=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,1),8).b-k.b)))}}}}}else{for(p=new olb(b.j);p.a<p.c.c.length;){o=BD(mlb(p),11);for(i=new olb(o.e);i.a<i.c.c.length;){h=BD(mlb(i),17);if(h.a.b!=0){m=BD(Isb(h.a),8);if(m.a>e){f=m.a-e;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=m.a}if(m.a>=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new H0b;F0b(n,b);G0b(n,(Ucd(),Acd));n.n.a=b.o.a/2;r=new H0b;F0b(r,b);G0b(r,Rcd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new olb(d);i.a<i.c.c.length;){h=BD(mlb(i),17);if(c){j=BD(Lsb(h.a),8);q=h.a.b==0?A0b(h.d):BD(Hsb(h.a),8);q.b>=j.b?QZb(h,r):QZb(h,n)}else{j=BD(Msb(h.a),8);q=h.a.b==0?A0b(h.c):BD(Isb(h.a),8);q.b>=j.b?RZb(h,r):RZb(h,n)}l=BD(vNb(h,(Nyc(),jxc)),74);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}} +function erd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=Rqd(a,dtd(c),G);Lkd(F,_pd(G,Vte));H=BD(oo(a.g,Vpd(aC(G,Cte))),33);m=aC(G,'sourcePort');d=null;!!m&&(d=Vpd(m));I=BD(oo(a.j,d),118);if(!H){h=Wpd(G);o="An edge must have a source node (edge id: '"+h;p=o+$te;throw vbb(new cqd(p))}if(!!I&&!Hb(mpd(I),H)){i=_pd(G,Vte);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+$te;throw vbb(new cqd(r))}B=(!F.b&&(F.b=new y5d(z2,F,4,7)),F.b);f=null;I?(f=I):(f=H);wtd(B,f);J=BD(oo(a.g,Vpd(aC(G,bue))),33);n=aC(G,'targetPort');e=null;!!n&&(e=Vpd(n));K=BD(oo(a.j,e),118);if(!J){l=Wpd(G);s="An edge must have a target node (edge id: '"+l;t=s+$te;throw vbb(new cqd(t))}if(!!K&&!Hb(mpd(K),J)){j=_pd(G,Vte);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+$te;throw vbb(new cqd(v))}C=(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c);g=null;K?(g=K):(g=J);wtd(C,g);if((!F.b&&(F.b=new y5d(z2,F,4,7)),F.b).i==0||(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c).i==0){k=_pd(G,Vte);w=Zte+k;A=w+$te;throw vbb(new cqd(A))}grd(G,F);frd(G,F);D=crd(a,G,F);return D} +function DXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=FXb(zXb(a,(Ucd(),Fcd)),b);o=EXb(zXb(a,Gcd),b);u=EXb(zXb(a,Ocd),b);B=GXb(zXb(a,Qcd),b);m=GXb(zXb(a,Bcd),b);s=EXb(zXb(a,Ncd),b);p=EXb(zXb(a,Hcd),b);w=EXb(zXb(a,Pcd),b);v=EXb(zXb(a,Ccd),b);C=GXb(zXb(a,Ecd),b);r=EXb(zXb(a,Lcd),b);t=EXb(zXb(a,Kcd),b);A=EXb(zXb(a,Dcd),b);D=GXb(zXb(a,Mcd),b);n=GXb(zXb(a,Icd),b);q=EXb(zXb(a,Jcd),b);c=w6c(OC(GC(UD,1),Vje,25,15,[s.a,B.a,w.a,D.a]));d=w6c(OC(GC(UD,1),Vje,25,15,[o.a,l.a,u.a,q.a]));e=r.a;f=w6c(OC(GC(UD,1),Vje,25,15,[p.a,m.a,v.a,n.a]));j=w6c(OC(GC(UD,1),Vje,25,15,[s.b,o.b,p.b,t.b]));i=w6c(OC(GC(UD,1),Vje,25,15,[B.b,l.b,m.b,q.b]));k=C.b;h=w6c(OC(GC(UD,1),Vje,25,15,[w.b,u.b,v.b,A.b]));vXb(zXb(a,Fcd),c+e,j+k);vXb(zXb(a,Jcd),c+e,j+k);vXb(zXb(a,Gcd),c+e,0);vXb(zXb(a,Ocd),c+e,j+k+i);vXb(zXb(a,Qcd),0,j+k);vXb(zXb(a,Bcd),c+e+d,j+k);vXb(zXb(a,Hcd),c+e+d,0);vXb(zXb(a,Pcd),0,j+k+i);vXb(zXb(a,Ccd),c+e+d,j+k+i);vXb(zXb(a,Ecd),0,j);vXb(zXb(a,Lcd),c,0);vXb(zXb(a,Dcd),0,j+k+i);vXb(zXb(a,Icd),c+e+d,0);g=new d7c;g.a=w6c(OC(GC(UD,1),Vje,25,15,[c+d+e+f,C.a,t.a,A.a]));g.b=w6c(OC(GC(UD,1),Vje,25,15,[j+i+k+h,r.b,D.b,n.b]));return g} +function Ngc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new Rkb;for(m=new olb(a.d.b);m.a<m.c.c.length;){l=BD(mlb(m),29);for(o=new olb(l.a);o.a<o.c.c.length;){n=BD(mlb(o),10);e=BD(Ohb(a.f,n),57);for(i=new Sr(ur(U_b(n).a.Kc(),new Sq));Qr(i);){g=BD(Rr(i),17);d=Jsb(g.a,0);j=true;k=null;if(d.b!=d.d.c){b=BD(Xsb(d),8);c=null;if(g.c.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.c;p.c[p.c.length]=q}if(g.c.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.c;p.c[p.c.length]=q}while(d.b!=d.d.c){c=BD(Xsb(d),8);if(!ADb(b.b,c.b)){k=new hic(b,c,null,g);p.c[p.c.length]=k;if(j){j=false;if(c.b<e.d.d){k.f.a=true}else if(c.b>e.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=BD(Ohb(a.f,g.d.i),57);if(b.b<f.d.d){k.f.a=true}else if(b.b>f.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new Sr(ur(R_b(n).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(g.a.b!=0){b=BD(Isb(g.a),8);if(g.d.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;p.c[p.c.length]=q}if(g.d.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;p.c[p.c.length]=q}}}}}return p} +function WJc(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Network simplex node placement',1);a.e=b;a.n=BD(vNb(b,(wtc(),otc)),304);VJc(a);HJc(a);MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new KKc),new MKc(a));MAb(JAb(LAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new zLc),new BLc),new DLc),new FLc),new IKc(a));if(Ccb(DD(vNb(a.e,(Nyc(),Axc))))){g=Udd(c,1);Odd(g,'Straight Edges Pre-Processing',1);UJc(a);Qdd(g)}JFb(a.f);f=BD(vNb(b,Ayc),19).a*a.f.a.c.length;uGb(HGb(IGb(LGb(a.f),f),false),Udd(c,1));if(a.d.a.gc()!=0){g=Udd(c,1);Odd(g,'Flexible Where Space Processing',1);h=BD(Btb(RAb(NAb(new YAb(null,new Kub(a.f.a,16)),new OKc),new iKc)),19).a;i=BD(Btb(QAb(NAb(new YAb(null,new Kub(a.f.a,16)),new QKc),new mKc)),19).a;j=i-h;k=nGb(new pGb,a.f);l=nGb(new pGb,a.f);AFb(DFb(CFb(BFb(EFb(new FFb,20000),j),k),l));MAb(JAb(JAb(Plb(a.i),new SKc),new UKc),new WKc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=BD(e.Pb(),213);d.g=1}uGb(HGb(IGb(LGb(a.f),f),false),Udd(g,1));Qdd(g)}if(Ccb(DD(vNb(b,Axc)))){g=Udd(c,1);Odd(g,'Straight Edges Post-Processing',1);TJc(a);Qdd(g)}GJc(a);a.e=null;a.f=null;a.i=null;a.c=null;Uhb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();Qdd(c)} +function lMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new olb(a.a.b);h.a<h.c.c.length;){f=BD(mlb(h),29);for(t=new olb(f.a);t.a<t.c.c.length;){s=BD(mlb(t),10);b.g[s.p]=s;b.a[s.p]=s;b.d[s.p]=0}}i=a.a.b;b.c==(YLc(),WLc)&&(i=JD(i,152)?km(BD(i,152)):JD(i,131)?BD(i,131).a:JD(i,54)?new ov(i):new dv(i));for(g=i.Kc();g.Ob();){f=BD(g.Pb(),29);n=-1;m=f.a;if(b.o==(eMc(),dMc)){n=Ohe;m=JD(m,152)?km(BD(m,152)):JD(m,131)?BD(m,131).a:JD(m,54)?new ov(m):new dv(m)}for(v=m.Kc();v.Ob();){u=BD(v.Pb(),10);l=null;b.c==WLc?(l=BD(Ikb(a.b.f,u.p),15)):(l=BD(Ikb(a.b.b,u.p),15));if(l.gc()>0){d=l.gc();j=QD($wnd.Math.floor((d+1)/2))-1;e=QD($wnd.Math.ceil((d+1)/2))-1;if(b.o==dMc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=BD(l.Xb(k),46);o=BD(p.a,10);if(!Rqb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=BD(l.Xb(k),46);q=BD(r.a,10);if(!Rqb(c,r.b)&&n<a.b.e[q.p]){b.a[q.p]=u;b.g[u.p]=b.g[q.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[q.p]}}}}}}}} +function Thd(){Thd=ccb;Hhd();Shd=Ghd.a;BD(qud(ZKd(Ghd.a),0),18);Mhd=Ghd.f;BD(qud(ZKd(Ghd.f),0),18);BD(qud(ZKd(Ghd.f),1),34);Rhd=Ghd.n;BD(qud(ZKd(Ghd.n),0),34);BD(qud(ZKd(Ghd.n),1),34);BD(qud(ZKd(Ghd.n),2),34);BD(qud(ZKd(Ghd.n),3),34);Nhd=Ghd.g;BD(qud(ZKd(Ghd.g),0),18);BD(qud(ZKd(Ghd.g),1),34);Jhd=Ghd.c;BD(qud(ZKd(Ghd.c),0),18);BD(qud(ZKd(Ghd.c),1),18);Ohd=Ghd.i;BD(qud(ZKd(Ghd.i),0),18);BD(qud(ZKd(Ghd.i),1),18);BD(qud(ZKd(Ghd.i),2),18);BD(qud(ZKd(Ghd.i),3),18);BD(qud(ZKd(Ghd.i),4),34);Phd=Ghd.j;BD(qud(ZKd(Ghd.j),0),18);Khd=Ghd.d;BD(qud(ZKd(Ghd.d),0),18);BD(qud(ZKd(Ghd.d),1),18);BD(qud(ZKd(Ghd.d),2),18);BD(qud(ZKd(Ghd.d),3),18);BD(qud(ZKd(Ghd.d),4),34);BD(qud(ZKd(Ghd.d),5),34);BD(qud(ZKd(Ghd.d),6),34);BD(qud(ZKd(Ghd.d),7),34);Ihd=Ghd.b;BD(qud(ZKd(Ghd.b),0),34);BD(qud(ZKd(Ghd.b),1),34);Lhd=Ghd.e;BD(qud(ZKd(Ghd.e),0),34);BD(qud(ZKd(Ghd.e),1),34);BD(qud(ZKd(Ghd.e),2),34);BD(qud(ZKd(Ghd.e),3),34);BD(qud(ZKd(Ghd.e),4),18);BD(qud(ZKd(Ghd.e),5),18);BD(qud(ZKd(Ghd.e),6),18);BD(qud(ZKd(Ghd.e),7),18);BD(qud(ZKd(Ghd.e),8),18);BD(qud(ZKd(Ghd.e),9),18);BD(qud(ZKd(Ghd.e),10),34);Qhd=Ghd.k;BD(qud(ZKd(Ghd.k),0),34);BD(qud(ZKd(Ghd.k),1),34)} +function wQc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;C=new Psb;w=new Psb;q=-1;for(i=new olb(a);i.a<i.c.c.length;){g=BD(mlb(i),128);g.s=q--;k=0;t=0;for(f=new olb(g.t);f.a<f.c.c.length;){d=BD(mlb(f),268);t+=d.c}for(e=new olb(g.i);e.a<e.c.c.length;){d=BD(mlb(e),268);k+=d.c}g.n=k;g.u=t;t==0?(Gsb(w,g,w.c.b,w.c),true):k==0&&(Gsb(C,g,C.c.b,C.c),true)}F=Gx(a);l=a.c.length;p=l+1;r=l-1;n=new Rkb;while(F.a.gc()!=0){while(w.b!=0){v=(sCb(w.b!=0),BD(Nsb(w,w.a.a),128));F.a.Bc(v)!=null;v.s=r--;AQc(v,C,w)}while(C.b!=0){A=(sCb(C.b!=0),BD(Nsb(C,C.a.a),128));F.a.Bc(A)!=null;A.s=p++;AQc(A,C,w)}o=Rie;for(j=F.a.ec().Kc();j.Ob();){g=BD(j.Pb(),128);s=g.u-g.n;if(s>=o){if(s>o){n.c=KC(SI,Uhe,1,0,5,1);o=s}n.c[n.c.length]=g}}if(n.c.length!=0){m=BD(Ikb(n,Bub(b,n.c.length)),128);F.a.Bc(m)!=null;m.s=p++;AQc(m,C,w);n.c=KC(SI,Uhe,1,0,5,1)}}u=a.c.length+1;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),128);g.s<l&&(g.s+=u)}for(B=new olb(a);B.a<B.c.c.length;){A=BD(mlb(B),128);c=new Bib(A.t,0);while(c.b<c.d.gc()){d=(sCb(c.b<c.d.gc()),BD(c.d.Xb(c.c=c.b++),268));D=d.b;if(A.s>D.s){uib(c);Lkb(D.i,d);if(d.c>0){d.a=D;Ekb(D.t,d);d.b=A;Ekb(A.i,d)}}}}} +function qde(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.Ml();case 12:return a.Ol();case 14:return a.Ql();case 15:return a.Tl();case 16:return a.Rl();case 17:return a.Ul();case 21:nde(a);return wfe(),wfe(),ffe;case 10:switch(a.a){case 65:return a.yl();case 90:return a.Dl();case 122:return a.Kl();case 98:return a.El();case 66:return a.zl();case 60:return a.Jl();case 62:return a.Hl();}}f=pde(a);b=a.c;switch(b){case 3:return a.Zl(f);case 4:return a.Xl(f);case 5:return a.Yl(f);case 0:if(a.a==123&&a.d<a.j){e=a.d;d=0;c=-1;if((b=bfb(a.i,e++))>=48&&b<=57){d=b-48;while(e<a.j&&(b=bfb(a.i,e++))>=48&&b<=57){d=d*10+b-48;if(d<0)throw vbb(new mde(tvd((h0d(),bve))))}}else{throw vbb(new mde(tvd((h0d(),Zue))))}c=d;if(b==44){if(e>=a.j){throw vbb(new mde(tvd((h0d(),_ue))))}else if((b=bfb(a.i,e++))>=48&&b<=57){c=b-48;while(e<a.j&&(b=bfb(a.i,e++))>=48&&b<=57){c=c*10+b-48;if(c<0)throw vbb(new mde(tvd((h0d(),bve))))}if(d>c)throw vbb(new mde(tvd((h0d(),ave))))}else{c=-1}}if(b!=125)throw vbb(new mde(tvd((h0d(),$ue))));if(a.sl(e)){f=(wfe(),wfe(),++vfe,new lge(9,f));a.d=e+1}else{f=(wfe(),wfe(),++vfe,new lge(3,f));a.d=e}f.dm(d);f.cm(c);nde(a)}}return f} +function $bc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new Skb(b.b);u=new Skb(b.b);m=new Skb(b.b);B=new Skb(b.b);q=new Skb(b.b);for(A=Jsb(b,0);A.b!=A.d.c;){v=BD(Xsb(A),11);for(h=new olb(v.g);h.a<h.c.c.length;){f=BD(mlb(h),17);if(f.c.i==f.d.i){if(v.j==f.d.j){B.c[B.c.length]=f;continue}else if(v.j==(Ucd(),Acd)&&f.d.j==Rcd){q.c[q.c.length]=f;continue}}}}for(i=new olb(q);i.a<i.c.c.length;){f=BD(mlb(i),17);_bc(a,f,c,d,(Ucd(),zcd))}for(g=new olb(B);g.a<g.c.c.length;){f=BD(mlb(g),17);C=new b0b(a);__b(C,(j0b(),i0b));yNb(C,(Nyc(),Vxc),(dcd(),$bd));yNb(C,(wtc(),$sc),f);D=new H0b;yNb(D,$sc,f.d);G0b(D,(Ucd(),Tcd));F0b(D,C);F=new H0b;yNb(F,$sc,f.c);G0b(F,zcd);F0b(F,C);yNb(f.c,gtc,C);yNb(f.d,gtc,C);QZb(f,null);RZb(f,null);c.c[c.c.length]=C;yNb(C,ysc,meb(2))}for(w=Jsb(b,0);w.b!=w.d.c;){v=BD(Xsb(w),11);j=v.e.c.length>0;r=v.g.c.length>0;j&&r?(m.c[m.c.length]=v,true):j?(p.c[p.c.length]=v,true):r&&(u.c[u.c.length]=v,true)}for(o=new olb(p);o.a<o.c.c.length;){n=BD(mlb(o),11);Ekb(e,Zbc(a,n,null,c))}for(t=new olb(u);t.a<t.c.c.length;){s=BD(mlb(t),11);Ekb(e,Zbc(a,null,s,c))}for(l=new olb(m);l.a<l.c.c.length;){k=BD(mlb(l),11);Ekb(e,Zbc(a,k,k,c))}} +function NCb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;s=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(B=new olb(a);B.a<B.c.c.length;){A=BD(mlb(B),8);s.a=$wnd.Math.min(s.a,A.a);s.b=$wnd.Math.min(s.b,A.b);b.a=$wnd.Math.max(b.a,A.a);b.b=$wnd.Math.max(b.b,A.b)}m=new f7c(b.a-s.a,b.b-s.b);j=new f7c(s.a-50,s.b-m.a-50);k=new f7c(s.a-50,b.b+m.a+50);l=new f7c(b.a+m.b/2+50,s.b+m.b/2);n=new eDb(j,k,l);w=new Tqb;f=new Rkb;c=new Rkb;w.a.zc(n,w);for(D=new olb(a);D.a<D.c.c.length;){C=BD(mlb(D),8);f.c=KC(SI,Uhe,1,0,5,1);for(v=w.a.ec().Kc();v.Ob();){t=BD(v.Pb(),308);d=t.d;S6c(d,t.a);Jy(S6c(t.d,C),S6c(t.d,t.a))<0&&(f.c[f.c.length]=t,true)}c.c=KC(SI,Uhe,1,0,5,1);for(u=new olb(f);u.a<u.c.c.length;){t=BD(mlb(u),308);for(q=new olb(t.e);q.a<q.c.c.length;){o=BD(mlb(q),168);g=true;for(i=new olb(f);i.a<i.c.c.length;){h=BD(mlb(i),308);h!=t&&(wtb(o,Ikb(h.e,0))||wtb(o,Ikb(h.e,1))||wtb(o,Ikb(h.e,2)))&&(g=false)}g&&(c.c[c.c.length]=o,true)}}Ve(w,f);reb(w,new OCb);for(p=new olb(c);p.a<p.c.c.length;){o=BD(mlb(p),168);Qqb(w,new eDb(C,o.a,o.b))}}r=new Tqb;reb(w,new QCb(r));e=r.a.ec().Kc();while(e.Ob()){o=BD(e.Pb(),168);(dDb(n,o.a)||dDb(n,o.b))&&e.Qb()}reb(r,new SCb);return r} +function _Tb(a){var b,c,d,e,f;c=BD(vNb(a,(wtc(),Ksc)),21);b=k3c(WTb);e=BD(vNb(a,(Nyc(),axc)),334);e==(hbd(),ebd)&&d3c(b,XTb);Ccb(DD(vNb(a,$wc)))?e3c(b,(qUb(),lUb),(S8b(),I8b)):e3c(b,(qUb(),nUb),(S8b(),I8b));vNb(a,(g6c(),f6c))!=null&&d3c(b,YTb);(Ccb(DD(vNb(a,hxc)))||Ccb(DD(vNb(a,_wc))))&&c3c(b,(qUb(),pUb),(S8b(),W7b));switch(BD(vNb(a,Lwc),103).g){case 2:case 3:case 4:c3c(e3c(b,(qUb(),lUb),(S8b(),Y7b)),pUb,X7b);}c.Hc((Orc(),Frc))&&c3c(e3c(e3c(b,(qUb(),lUb),(S8b(),V7b)),oUb,T7b),pUb,U7b);PD(vNb(a,rxc))!==PD((kAc(),iAc))&&e3c(b,(qUb(),nUb),(S8b(),A8b));if(c.Hc(Mrc)){e3c(b,(qUb(),lUb),(S8b(),G8b));e3c(b,mUb,E8b);e3c(b,nUb,F8b)}PD(vNb(a,swc))!==PD((yrc(),wrc))&&PD(vNb(a,Swc))!==PD((Aad(),xad))&&c3c(b,(qUb(),pUb),(S8b(),j8b));Ccb(DD(vNb(a,cxc)))&&e3c(b,(qUb(),nUb),(S8b(),i8b));Ccb(DD(vNb(a,Hwc)))&&e3c(b,(qUb(),nUb),(S8b(),O8b));if(cUb(a)){PD(vNb(a,axc))===PD(ebd)?(d=BD(vNb(a,Cwc),292)):(d=BD(vNb(a,Dwc),292));f=d==(Xrc(),Vrc)?(S8b(),D8b):(S8b(),R8b);e3c(b,(qUb(),oUb),f)}switch(BD(vNb(a,Kyc),377).g){case 1:e3c(b,(qUb(),oUb),(S8b(),P8b));break;case 2:c3c(e3c(e3c(b,(qUb(),nUb),(S8b(),P7b)),oUb,Q7b),pUb,R7b);}PD(vNb(a,ywc))!==PD((tAc(),rAc))&&e3c(b,(qUb(),nUb),(S8b(),Q8b));return b} +function mZc(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Kre),'ELK Rectangle Packing'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces.'),new pZc)));p4c(a,Kre,_le,1.3);p4c(a,Kre,Jre,Ksd(VYc));p4c(a,Kre,ame,gZc);p4c(a,Kre,wme,15);p4c(a,Kre,lqe,Ksd(SYc));p4c(a,Kre,Fme,Ksd(_Yc));p4c(a,Kre,Tme,Ksd(aZc));p4c(a,Kre,Eme,Ksd(bZc));p4c(a,Kre,Gme,Ksd($Yc));p4c(a,Kre,Dme,Ksd(cZc));p4c(a,Kre,Hme,Ksd(hZc));p4c(a,Kre,Bre,Ksd(eZc));p4c(a,Kre,Cre,Ksd(ZYc));p4c(a,Kre,Fre,Ksd(dZc));p4c(a,Kre,Gre,Ksd(iZc));p4c(a,Kre,Hre,Ksd(WYc));p4c(a,Kre,Ame,Ksd(XYc));p4c(a,Kre,xqe,Ksd(YYc));p4c(a,Kre,Ere,Ksd(UYc));p4c(a,Kre,Dre,Ksd(TYc));p4c(a,Kre,Ire,Ksd(kZc))} +function Wmd(b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;if(d==null){return null}if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}if(JD(c,457)){r=_Pd(BD(c,671),d);if(!r){throw vbb(new Wdb(vte+d+"' is not a valid enumerator of '"+c.ne()+"'"))}return r}switch(o1d((O6d(),M6d),c).cl()){case 2:{d=Qge(d,false);break}case 3:{d=Qge(d,true);break}}e=o1d(M6d,c).$k();if(e){return e.Aj().Nh().Kh(e,d)}n=o1d(M6d,c).al();if(n){r=new Rkb;for(k=Zmd(d),l=0,m=k.length;l<m;++l){j=k[l];Ekb(r,n.Aj().Nh().Kh(n,j))}return r}q=o1d(M6d,c).bl();if(!q.dc()){for(p=q.Kc();p.Ob();){o=BD(p.Pb(),148);try{r=o.Aj().Nh().Kh(o,d);if(r!=null){return r}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}throw vbb(new Wdb(vte+d+"' does not match any member types of the union datatype '"+c.ne()+"'"))}BD(c,834).Fj();f=r6d(c.Bj());if(!f)return null;if(f==yI){h=0;try{h=Icb(d,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){g=rfb(d);h=g[0]}else throw vbb(a)}return bdb(h)}if(f==$J){for(i=0;i<Pmd.length;++i){try{return DQd(Pmd[i],d)}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}throw vbb(new Wdb(vte+d+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw vbb(new Wdb(vte+d+"' is invalid. "))} +function ngb(a,b){var c,d,e,f,g,h,i,j;c=0;g=0;f=b.length;h=null;j=new Vfb;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43)){++g;++c;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43||(BCb(g,b.length),b.charCodeAt(g)==45))){throw vbb(new Oeb(Oje+b+'"'))}}while(g<f&&(BCb(g,b.length),b.charCodeAt(g)!=46)&&(BCb(g,b.length),b.charCodeAt(g)!=101)&&(BCb(g,b.length),b.charCodeAt(g)!=69)){++g}j.a+=''+qfb(b==null?Xhe:(uCb(b),b),c,g);if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==46)){++g;c=g;while(g<f&&(BCb(g,b.length),b.charCodeAt(g)!=101)&&(BCb(g,b.length),b.charCodeAt(g)!=69)){++g}a.e=g-c;j.a+=''+qfb(b==null?Xhe:(uCb(b),b),c,g)}else{a.e=0}if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==101||(BCb(g,b.length),b.charCodeAt(g)==69))){++g;c=g;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43)){++g;g<f&&(BCb(g,b.length),b.charCodeAt(g)!=45)&&++c}h=b.substr(c,f-c);a.e=a.e-Icb(h,Rie,Ohe);if(a.e!=QD(a.e)){throw vbb(new Oeb('Scale out of range.'))}}i=j.a;if(i.length<16){a.f=(kgb==null&&(kgb=new RegExp('^[+-]?\\d*$','i')),kgb.test(i)?parseInt(i,10):NaN);if(isNaN(a.f)){throw vbb(new Oeb(Oje+b+'"'))}a.a=ugb(a.f)}else{ogb(a,new Ygb(i))}a.d=j.a.length;for(e=0;e<j.a.length;++e){d=bfb(j.a,e);if(d!=45&&d!=48){break}--a.d}a.d==0&&(a.d=1)} +function xXb(){xXb=ccb;wXb=new Hp;Rc(wXb,(Ucd(),Fcd),Jcd);Rc(wXb,Qcd,Jcd);Rc(wXb,Qcd,Mcd);Rc(wXb,Bcd,Icd);Rc(wXb,Bcd,Jcd);Rc(wXb,Gcd,Jcd);Rc(wXb,Gcd,Kcd);Rc(wXb,Ocd,Dcd);Rc(wXb,Ocd,Jcd);Rc(wXb,Lcd,Ecd);Rc(wXb,Lcd,Jcd);Rc(wXb,Lcd,Kcd);Rc(wXb,Lcd,Dcd);Rc(wXb,Ecd,Lcd);Rc(wXb,Ecd,Mcd);Rc(wXb,Ecd,Icd);Rc(wXb,Ecd,Jcd);Rc(wXb,Ncd,Ncd);Rc(wXb,Ncd,Kcd);Rc(wXb,Ncd,Mcd);Rc(wXb,Hcd,Hcd);Rc(wXb,Hcd,Kcd);Rc(wXb,Hcd,Icd);Rc(wXb,Pcd,Pcd);Rc(wXb,Pcd,Dcd);Rc(wXb,Pcd,Mcd);Rc(wXb,Ccd,Ccd);Rc(wXb,Ccd,Dcd);Rc(wXb,Ccd,Icd);Rc(wXb,Kcd,Gcd);Rc(wXb,Kcd,Lcd);Rc(wXb,Kcd,Ncd);Rc(wXb,Kcd,Hcd);Rc(wXb,Kcd,Jcd);Rc(wXb,Kcd,Kcd);Rc(wXb,Kcd,Mcd);Rc(wXb,Kcd,Icd);Rc(wXb,Dcd,Ocd);Rc(wXb,Dcd,Lcd);Rc(wXb,Dcd,Pcd);Rc(wXb,Dcd,Ccd);Rc(wXb,Dcd,Dcd);Rc(wXb,Dcd,Mcd);Rc(wXb,Dcd,Icd);Rc(wXb,Dcd,Jcd);Rc(wXb,Mcd,Qcd);Rc(wXb,Mcd,Ecd);Rc(wXb,Mcd,Ncd);Rc(wXb,Mcd,Pcd);Rc(wXb,Mcd,Kcd);Rc(wXb,Mcd,Dcd);Rc(wXb,Mcd,Mcd);Rc(wXb,Mcd,Jcd);Rc(wXb,Icd,Bcd);Rc(wXb,Icd,Ecd);Rc(wXb,Icd,Hcd);Rc(wXb,Icd,Ccd);Rc(wXb,Icd,Kcd);Rc(wXb,Icd,Dcd);Rc(wXb,Icd,Icd);Rc(wXb,Icd,Jcd);Rc(wXb,Jcd,Fcd);Rc(wXb,Jcd,Qcd);Rc(wXb,Jcd,Bcd);Rc(wXb,Jcd,Gcd);Rc(wXb,Jcd,Ocd);Rc(wXb,Jcd,Lcd);Rc(wXb,Jcd,Ecd);Rc(wXb,Jcd,Kcd);Rc(wXb,Jcd,Dcd);Rc(wXb,Jcd,Mcd);Rc(wXb,Jcd,Icd);Rc(wXb,Jcd,Jcd)} +function YXb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;a.d=new f7c(Pje,Pje);a.c=new f7c(Qje,Qje);for(m=b.Kc();m.Ob();){k=BD(m.Pb(),37);for(t=new olb(k.a);t.a<t.c.c.length;){s=BD(mlb(t),10);a.d.a=$wnd.Math.min(a.d.a,s.n.a-s.d.b);a.d.b=$wnd.Math.min(a.d.b,s.n.b-s.d.d);a.c.a=$wnd.Math.max(a.c.a,s.n.a+s.o.a+s.d.c);a.c.b=$wnd.Math.max(a.c.b,s.n.b+s.o.b+s.d.a)}}h=new nYb;for(l=b.Kc();l.Ob();){k=BD(l.Pb(),37);d=fYb(a,k);Ekb(h.a,d);d.a=d.a|!BD(vNb(d.c,(wtc(),Esc)),21).dc()}a.b=(LUb(),B=new VUb,B.f=new CUb(c),B.b=BUb(B.f,h),B);PUb((o=a.b,new Zdd,o));a.e=new d7c;a.a=a.b.f.e;for(g=new olb(h.a);g.a<g.c.c.length;){e=BD(mlb(g),841);u=QUb(a.b,e);g_b(e.c,u.a,u.b);for(q=new olb(e.c.a);q.a<q.c.c.length;){p=BD(mlb(q),10);if(p.k==(j0b(),e0b)){r=aYb(a,p.n,BD(vNb(p,(wtc(),Hsc)),61));P6c(X6c(p.n),r)}}}for(f=new olb(h.a);f.a<f.c.c.length;){e=BD(mlb(f),841);for(j=new olb(lYb(e));j.a<j.c.c.length;){i=BD(mlb(j),17);A=new t7c(i.a);St(A,0,A0b(i.c));Dsb(A,A0b(i.d));n=null;for(w=Jsb(A,0);w.b!=w.d.c;){v=BD(Xsb(w),8);if(!n){n=v;continue}if(Ky(n.a,v.a)){a.e.a=$wnd.Math.min(a.e.a,n.a);a.a.a=$wnd.Math.max(a.a.a,n.a)}else if(Ky(n.b,v.b)){a.e.b=$wnd.Math.min(a.e.b,n.b);a.a.b=$wnd.Math.max(a.a.b,n.b)}n=v}}}V6c(a.e);P6c(a.a,a.e)} +function wZd(a){Bnd(a.b,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentTransient']));Bnd(a.a,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedSourceURI']));Bnd(a.o,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures']));Bnd(a.p,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedInstanceTypeName UniqueTypeParameterNames']));Bnd(a.v,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'UniqueEnumeratorNames UniqueEnumeratorLiterals']));Bnd(a.R,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedName']));Bnd(a.T,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid']));Bnd(a.U,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs']));Bnd(a.W,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer']));Bnd(a.bb,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ValidDefaultValueLiteral']));Bnd(a.eb,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ValidLowerBound ValidUpperBound ConsistentBounds ValidType']));Bnd(a.H,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentType ConsistentBounds ConsistentArguments']))} +function B4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;if(b.dc()){return}e=new s7c;h=c?c:BD(b.Xb(0),17);o=h.c;hQc();m=o.i.k;if(!(m==(j0b(),h0b)||m==i0b||m==e0b||m==d0b)){throw vbb(new Wdb('The target node of the edge must be a normal node or a northSouthPort.'))}Fsb(e,l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])));if((Ucd(),Lcd).Hc(o.j)){q=Edb(ED(vNb(o,(wtc(),qtc))));l=new f7c(l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a,q);Gsb(e,l,e.c.b,e.c)}k=null;d=false;i=b.Kc();while(i.Ob()){g=BD(i.Pb(),17);f=g.a;if(f.b!=0){if(d){j=Y6c(P6c(k,(sCb(f.b!=0),BD(f.a.a.c,8))),0.5);Gsb(e,j,e.c.b,e.c);d=false}else{d=true}k=R6c((sCb(f.b!=0),BD(f.c.b.c,8)));ye(e,f);Osb(f)}}p=h.d;if(Lcd.Hc(p.j)){q=Edb(ED(vNb(p,(wtc(),qtc))));l=new f7c(l7c(OC(GC(m1,1),nie,8,0,[p.i.n,p.n,p.a])).a,q);Gsb(e,l,e.c.b,e.c)}Fsb(e,l7c(OC(GC(m1,1),nie,8,0,[p.i.n,p.n,p.a])));a.d==(tBc(),qBc)&&(r=(sCb(e.b!=0),BD(e.a.a.c,8)),s=BD(Ut(e,1),8),t=new e7c(bRc(o.j)),t.a*=5,t.b*=5,u=c7c(new f7c(s.a,s.b),r),v=new f7c(A4b(t.a,u.a),A4b(t.b,u.b)),P6c(v,r),w=Jsb(e,1),Vsb(w,v),A=(sCb(e.b!=0),BD(e.c.b.c,8)),B=BD(Ut(e,e.b-2),8),t=new e7c(bRc(p.j)),t.a*=5,t.b*=5,u=c7c(new f7c(B.a,B.b),A),C=new f7c(A4b(t.a,u.a),A4b(t.b,u.b)),P6c(C,A),St(e,e.b-1,C),undefined);n=new YPc(e);ye(h.a,UPc(n))} +function Kgd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P;t=BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82);v=t.Dg();w=t.Eg();u=t.Cg()/2;p=t.Bg()/2;if(JD(t,186)){s=BD(t,118);v+=mpd(s).i;v+=mpd(s).i}v+=u;w+=p;F=BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82);H=F.Dg();I=F.Eg();G=F.Cg()/2;A=F.Bg()/2;if(JD(F,186)){D=BD(F,118);H+=mpd(D).i;H+=mpd(D).i}H+=G;I+=A;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){h=(Fhd(),j=new rmd,j);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),h)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){o=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(o.e!=o.i.gc()){Eyd(o)}}g=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);q=H;H>v+u?(q=v+u):H<v-u&&(q=v-u);r=I;I>w+p?(r=w+p):I<w-p&&(r=w-p);q>v-u&&q<v+u&&r>w-p&&r<w+p&&(q=v+u);omd(g,q);pmd(g,r);B=v;v>H+G?(B=H+G):v<H-G&&(B=H-G);C=w;w>I+A?(C=I+A):w<I-A&&(C=I-A);B>H-G&&B<H+G&&C>I-A&&C<I+A&&(C=I+A);hmd(g,B);imd(g,C);Uxd((!g.a&&(g.a=new xMd(y2,g,5)),g.a));f=Bub(b,5);t==F&&++f;L=B-q;O=C-r;J=$wnd.Math.sqrt(L*L+O*O);l=J*0.20000000298023224;M=L/(f+1);P=O/(f+1);K=q;N=r;for(k=0;k<f;k++){K+=M;N+=P;m=K+Cub(b,24)*lke*l-l/2;m<0?(m=1):m>c&&(m=c-1);n=N+Cub(b,24)*lke*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(Fhd(),i=new xkd,i);vkd(e,m);wkd(e,n);wtd((!g.a&&(g.a=new xMd(y2,g,5)),g.a),e)}} +function Nyc(){Nyc=ccb;iyc=(Y9c(),I9c);jyc=J9c;kyc=K9c;lyc=L9c;nyc=M9c;oyc=N9c;ryc=P9c;tyc=R9c;uyc=S9c;syc=Q9c;vyc=T9c;xyc=U9c;zyc=X9c;qyc=O9c;hyc=(jwc(),Bvc);myc=Cvc;pyc=Dvc;wyc=Evc;byc=new Osd(D9c,meb(0));cyc=yvc;dyc=zvc;eyc=Avc;Kyc=awc;Cyc=Hvc;Dyc=Kvc;Gyc=Svc;Eyc=Nvc;Fyc=Pvc;Myc=fwc;Lyc=cwc;Iyc=Yvc;Hyc=Wvc;Jyc=$vc;Cxc=pvc;Dxc=qvc;Xwc=Auc;Ywc=Duc;Lxc=new q0b(12);Kxc=new Osd(f9c,Lxc);Twc=(Aad(),wad);Swc=new Osd(E8c,Twc);Uxc=new Osd(s9c,0);fyc=new Osd(E9c,meb(1));owc=new Osd(r8c,tme);Jxc=d9c;Vxc=t9c;$xc=A9c;Kwc=y8c;mwc=p8c;axc=J8c;gyc=new Osd(H9c,(Bcb(),true));fxc=M8c;gxc=N8c;Fxc=Y8c;Ixc=b9c;Gxc=$8c;Nwc=(ead(),cad);Lwc=new Osd(z8c,Nwc);xxc=W8c;wxc=U8c;Yxc=x9c;Xxc=w9c;Zxc=z9c;Oxc=(Tbd(),Sbd);new Osd(l9c,Oxc);Qxc=o9c;Rxc=p9c;Sxc=q9c;Pxc=n9c;Byc=Gvc;sxc=avc;rxc=$uc;Ayc=Fvc;mxc=Suc;Jwc=muc;Iwc=kuc;Awc=Xtc;Bwc=Ytc;Dwc=buc;Cwc=Ztc;Hwc=iuc;uxc=cvc;vxc=dvc;ixc=Luc;Exc=uvc;zxc=hvc;$wc=Guc;Bxc=nvc;Vwc=wuc;Wwc=yuc;zwc=w8c;yxc=evc;swc=Mtc;rwc=Ktc;qwc=Jtc;cxc=Juc;bxc=Iuc;dxc=Kuc;Hxc=_8c;jxc=Q8c;Zwc=G8c;Qwc=C8c;Pwc=B8c;Ewc=euc;Wxc=v9c;pwc=v8c;exc=L8c;Txc=r9c;Mxc=h9c;Nxc=j9c;oxc=Vuc;pxc=Xuc;ayc=C9c;nwc=Itc;qxc=Zuc;Rwc=suc;Owc=quc;txc=S8c;kxc=Puc;Axc=kvc;yyc=V9c;Mwc=ouc;_xc=wvc;Uwc=uuc;lxc=Ruc;Fwc=guc;hxc=P8c;nxc=Uuc;Gwc=huc;ywc=Vtc;wwc=Stc;uwc=Qtc;vwc=Rtc;xwc=Utc;twc=Otc;_wc=Huc} +function shb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:w=new Ufb;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=KC(TD,$ie,25,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=xbb(h,Yje);do{p=H;H=Abb(H,10);u[--c]=48+Tbb(Qbb(p,Ibb(H,10)))&aje}while(ybb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&aje}while(H!=0)}}else{D=KC(WD,oje,25,o,15,1);G=o;$fb(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=wbb(Nbb(A,32),xbb(D[j],Yje));r=qhb(F);D[j]=Tbb(r);A=Tbb(Obb(r,32))}s=Tbb(A);q=c;do{u[--c]=48+s%10&aje}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i<d&&c>0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return zfb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return zfb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return zfb(u,c,t-c)}C=c+1;f=t;v=new Vfb;n&&(v.a+='-',v);if(f-C>=1){Kfb(v,u[c]);v.a+='.';v.a+=zfb(u,c+1,t-c-1)}else{v.a+=zfb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a} +function z$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Lqb;c=(Pgd(),new bhd(a.c));d=new YGb(c);UGb(d);t=GD(hkd(a.c,(d0c(),Y_c)));i=BD(hkd(a.c,$_c),316);v=BD(hkd(a.c,__c),429);g=BD(hkd(a.c,T_c),482);u=BD(hkd(a.c,Z_c),430);a.j=Edb(ED(hkd(a.c,a0c)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw vbb(new Wdb(Mre+(i.f!=null?i.f:''+i.g)));}a.d=new g_c(h,v,g);yNb(a.d,(XNb(),VNb),DD(hkd(a.c,V_c)));a.d.c=Ccb(DD(hkd(a.c,U_c)));if(Vod(a.c).i==0){return a.d}for(l=new Fyd(Vod(a.c));l.e!=l.i.gc();){k=BD(Dyd(l),33);n=k.g/2;m=k.f/2;w=new f7c(k.i+n,k.j+m);while(Mhb(a.g,w)){O6c(w,($wnd.Math.random()-0.5)*qme,($wnd.Math.random()-0.5)*qme)}p=BD(hkd(k,(Y9c(),S8c)),142);q=new aOb(w,new J6c(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Ekb(a.d.i,q);Rhb(a.g,w,new vgd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=BD(Ikb(a.d.i,0),65)}else{for(s=new olb(a.d.i);s.a<s.c.c.length;){q=BD(mlb(s),65);o=BD(BD(Ohb(a.g,q.a),46).b,33).zg();o!=null&&dfb(o,t)&&(a.d.d=q)}}break;case 1:e=new f7c(a.c.g,a.c.f);e.a*=0.5;e.b*=0.5;O6c(e,a.c.i,a.c.j);f=Pje;for(r=new olb(a.d.i);r.a<r.c.c.length;){q=BD(mlb(r),65);j=S6c(q.a,e);if(j<f){f=j;a.d.d=q}}break;default:throw vbb(new Wdb(Mre+(u.f!=null?u.f:''+u.g)));}return a.d} +function qfd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;v=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);k=new s7c;u=new Lqb;w=tfd(v);jrb(u.f,v,w);m=new Lqb;d=new Psb;for(o=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!b.d&&(b.d=new y5d(B2,b,8,5)),b.d),(!b.e&&(b.e=new y5d(B2,b,7,4)),b.e)])));Qr(o);){n=BD(Rr(o),79);if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}if(n!=a){q=BD(qud((!n.a&&(n.a=new cUd(A2,n,6,6)),n.a),0),202);Gsb(d,q,d.c.b,d.c);p=BD(Wd(irb(u.f,q)),12);if(!p){p=tfd(q);jrb(u.f,q,p)}l=c?c7c(new g7c(BD(Ikb(w,w.c.length-1),8)),BD(Ikb(p,p.c.length-1),8)):c7c(new g7c((tCb(0,w.c.length),BD(w.c[0],8))),(tCb(0,p.c.length),BD(p.c[0],8)));jrb(m.f,q,l)}}if(d.b!=0){r=BD(Ikb(w,c?w.c.length-1:0),8);for(j=1;j<w.c.length;j++){s=BD(Ikb(w,c?w.c.length-1-j:j),8);e=Jsb(d,0);while(e.b!=e.d.c){q=BD(Xsb(e),202);p=BD(Wd(irb(u.f,q)),12);if(p.c.length<=j){Zsb(e)}else{t=P6c(new g7c(BD(Ikb(p,c?p.c.length-1-j:j),8)),BD(Wd(irb(m.f,q)),8));if(s.a!=t.a||s.b!=t.b){f=s.a-r.a;h=s.b-r.b;g=t.a-r.a;i=t.b-r.b;g*h==i*f&&(f==0||isNaN(f)?f:f<0?-1:1)==(g==0||isNaN(g)?g:g<0?-1:1)&&(h==0||isNaN(h)?h:h<0?-1:1)==(i==0||isNaN(i)?i:i<0?-1:1)?($wnd.Math.abs(f)<$wnd.Math.abs(g)||$wnd.Math.abs(h)<$wnd.Math.abs(i))&&(Gsb(k,s,k.c.b,k.c),true):j>1&&(Gsb(k,r,k.c.b,k.c),true);Zsb(e)}}}r=s}}return k} +function $Bc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;Odd(c,'Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=KC(WD,oje,25,L,15,1);a.c=KC(WD,oje,25,L,15,1);a.b=KC(WD,oje,25,L,15,1);j=0;for(r=new olb(t);r.a<r.c.c.length;){p=BD(mlb(r),10);p.p=j;for(C=new olb(p.j);C.a<C.c.c.length;){w=BD(mlb(C),11);for(h=new olb(w.e);h.a<h.c.c.length;){d=BD(mlb(h),17);if(d.c.i==p){continue}G=BD(vNb(d,(Nyc(),cyc)),19).a;a.a[j]+=G>0?G+1:1}for(g=new olb(w.g);g.a<g.c.c.length;){d=BD(mlb(g),17);if(d.d.i==p){continue}G=BD(vNb(d,(Nyc(),cyc)),19).a;a.c[j]+=G>0?G+1:1}}a.c[j]==0?Dsb(a.e,p):a.a[j]==0&&Dsb(a.f,p);++j}o=-1;n=1;l=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);while(L>0){while(a.e.b!=0){I=BD(Lsb(a.e),10);a.b[I.p]=o--;_Bc(a,I);--L}while(a.f.b!=0){J=BD(Lsb(a.f),10);a.b[J.p]=n++;_Bc(a,J);--L}if(L>0){m=Rie;for(s=new olb(t);s.a<s.c.c.length;){p=BD(mlb(s),10);if(a.b[p.p]==0){u=a.c[p.p]-a.a[p.p];if(u>=m){if(u>m){l.c=KC(SI,Uhe,1,0,5,1);m=u}l.c[l.c.length]=p}}}k=a.Zf(l);a.b[k.p]=n++;_Bc(a,k);--L}}H=t.c.length+1;for(j=0;j<t.c.length;j++){a.b[j]<0&&(a.b[j]+=H)}for(q=new olb(t);q.a<q.c.c.length;){p=BD(mlb(q),10);F=m_b(p.j);for(A=F,B=0,D=A.length;B<D;++B){w=A[B];v=k_b(w.g);for(e=v,f=0,i=e.length;f<i;++f){d=e[f];K=d.d.i.p;if(a.b[p.p]>a.b[K]){PZb(d,true);yNb(b,Asc,(Bcb(),true))}}}}a.a=null;a.c=null;a.b=null;Osb(a.f);Osb(a.e);Qdd(c)} +function sQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;h=new Rkb;q=b/2;n=a.gc();e=BD(a.Xb(0),8);r=BD(a.Xb(1),8);o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)));for(j=2;j<n;j++){p=e;e=r;r=BD(a.Xb(j),8);o=tQb(e.a,e.b,p.a,p.b,q);Ekb(d,(tCb(1,o.c.length),BD(o.c[1],8)));Ekb(h,(tCb(0,o.c.length),BD(o.c[0],8)));o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)))}o=tQb(r.a,r.b,e.a,e.b,q);Ekb(d,(tCb(1,o.c.length),BD(o.c[1],8)));Ekb(h,(tCb(0,o.c.length),BD(o.c[0],8)));c=new s7c;g=new Rkb;Dsb(c,(tCb(0,d.c.length),BD(d.c[0],8)));for(k=1;k<d.c.length-2;k+=2){f=(tCb(k,d.c.length),BD(d.c[k],8));m=rQb((tCb(k-1,d.c.length),BD(d.c[k-1],8)),f,(tCb(k+1,d.c.length),BD(d.c[k+1],8)),(tCb(k+2,d.c.length),BD(d.c[k+2],8)));!isFinite(m.a)||!isFinite(m.b)?(Gsb(c,f,c.c.b,c.c),true):(Gsb(c,m,c.c.b,c.c),true)}Dsb(c,BD(Ikb(d,d.c.length-1),8));Ekb(g,(tCb(0,h.c.length),BD(h.c[0],8)));for(l=1;l<h.c.length-2;l+=2){f=(tCb(l,h.c.length),BD(h.c[l],8));m=rQb((tCb(l-1,h.c.length),BD(h.c[l-1],8)),f,(tCb(l+1,h.c.length),BD(h.c[l+1],8)),(tCb(l+2,h.c.length),BD(h.c[l+2],8)));!isFinite(m.a)||!isFinite(m.b)?(g.c[g.c.length]=f,true):(g.c[g.c.length]=m,true)}Ekb(g,BD(Ikb(h,h.c.length-1),8));for(i=g.c.length-1;i>=0;i--){Dsb(c,(tCb(i,g.c.length),BD(g.c[i],8)))}return c} +function aFd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=BEd;j=null;f=null;h=0;i=UEd(a,h,zEd,AEd);if(i<a.length&&(BCb(i,a.length),a.charCodeAt(i)==58)){l=a.substr(h,i-h);h=i+1}c=l!=null&&hnb(GEd,l.toLowerCase());if(c){i=a.lastIndexOf('!/');if(i==-1){throw vbb(new Wdb('no archive separator'))}g=true;d=qfb(a,h,++i);h=i}else if(h>=0&&dfb(a.substr(h,'//'.length),'//')){h+=2;i=UEd(a,h,CEd,DEd);d=a.substr(h,i-h);h=i}else if(l!=null&&(h==a.length||(BCb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=ifb(a,wfb(35),h);i==-1&&(i=a.length);d=a.substr(h,i-h);h=i}if(!c&&h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)){i=UEd(a,h+1,CEd,DEd);k=a.substr(h+1,i-(h+1));if(k.length>0&&bfb(k,k.length-1)==58){e=k;h=i}}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)){++h;b=true}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)!=63)&&(BCb(h,a.length),a.charCodeAt(h)!=35)){m=new Rkb;while(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)!=63)&&(BCb(h,a.length),a.charCodeAt(h)!=35)){i=UEd(a,h,CEd,DEd);Ekb(m,a.substr(h,i-h));h=i;h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)&&(bFd(a,++h)||(m.c[m.c.length]='',true))}n=KC(ZI,nie,2,m.c.length,6,1);Qkb(m,n)}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==63)){i=gfb(a,35,++h);i==-1&&(i=a.length);j=a.substr(h,i-h);h=i}h<a.length&&(f=pfb(a,++h));iFd(g,l,d,e,n,j);return new NEd(g,l,d,e,b,n,j,f)} +function sJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;I=new Rkb;for(o=new olb(b.b);o.a<o.c.c.length;){m=BD(mlb(o),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);u.p=-1;l=Rie;B=Rie;for(D=new olb(u.j);D.a<D.c.c.length;){C=BD(mlb(D),11);for(e=new olb(C.e);e.a<e.c.c.length;){c=BD(mlb(e),17);F=BD(vNb(c,(Nyc(),eyc)),19).a;l=$wnd.Math.max(l,F)}for(d=new olb(C.g);d.a<d.c.c.length;){c=BD(mlb(d),17);F=BD(vNb(c,(Nyc(),eyc)),19).a;B=$wnd.Math.max(B,F)}}yNb(u,hJc,meb(l));yNb(u,iJc,meb(B))}}r=0;for(n=new olb(b.b);n.a<n.c.c.length;){m=BD(mlb(n),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);if(u.p<0){H=new zJc;H.b=r++;oJc(a,u,H);I.c[I.c.length]=H}}}A=Pu(I.c.length);k=Pu(I.c.length);for(g=0;g<I.c.length;g++){Ekb(A,new Rkb);Ekb(k,meb(0))}mJc(b,I,A,k);J=BD(Qkb(I,KC(sY,Iqe,257,I.c.length,0,1)),840);w=BD(Qkb(A,KC(yK,eme,15,A.c.length,0,1)),192);j=KC(WD,oje,25,k.c.length,15,1);for(h=0;h<j.length;h++){j[h]=(tCb(h,k.c.length),BD(k.c[h],19)).a}s=0;t=new Rkb;for(i=0;i<J.length;i++){j[i]==0&&Ekb(t,J[i])}q=KC(WD,oje,25,J.length,15,1);while(t.c.length!=0){H=BD(Kkb(t,0),257);q[H.b]=s++;while(!w[H.b].dc()){K=BD(w[H.b].$c(0),257);--j[K.b];j[K.b]==0&&(t.c[t.c.length]=K,true)}}a.a=KC(sY,Iqe,257,J.length,0,1);for(f=0;f<J.length;f++){p=J[f];G=q[f];a.a[G]=p;p.b=G;for(v=new olb(p.e);v.a<v.c.c.length;){u=BD(mlb(v),10);u.p=G}}return a.a} +function nde(a){var b,c,d;if(a.d>=a.j){a.a=-1;a.c=1;return}b=bfb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d<a.j&&bfb(a.i,a.d)==91){++a.d;d=24}else d=0;break;case 91:if((a.e&512)!=512&&a.d<a.j&&bfb(a.i,a.d)==58){++a.d;d=20;break}default:if((b&64512)==Uje&&a.d<a.j){c=bfb(a.i,a.d);if((c&64512)==56320){a.a=Tje+(b-Uje<<10)+c-56320;++a.d}}d=0;}a.c=d;return}switch(b){case 124:d=2;break;case 42:d=3;break;case 43:d=4;break;case 63:d=5;break;case 41:d=7;break;case 46:d=8;break;case 91:d=9;break;case 94:d=11;break;case 36:d=12;break;case 40:d=6;if(a.d>=a.j)break;if(bfb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw vbb(new mde(tvd((h0d(),wue))));break;case 35:while(a.d<a.j){b=bfb(a.i,a.d++);if(b==41)break}if(b!=41)throw vbb(new mde(tvd((h0d(),xue))));d=21;break;default:if(b==45||97<=b&&b<=122||65<=b&&b<=90){--a.d;d=22;break}else if(b==40){d=23;break}throw vbb(new mde(tvd((h0d(),vue))));}break;case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;default:d=0;}a.c=d} +function P5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=BD(vNb(a,(Nyc(),Vxc)),98);if(!(A!=(dcd(),bcd)&&A!=ccd)){return}o=a.b;n=o.c.length;k=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));p=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));Ekb(k,new Lqb);Ekb(k,new Lqb);Ekb(p,new Rkb);Ekb(p,new Rkb);w=new Rkb;for(b=0;b<n;b++){c=(tCb(b,o.c.length),BD(o.c[b],29));B=(tCb(b,k.c.length),BD(k.c[b],83));q=new Lqb;k.c[k.c.length]=q;D=(tCb(b,p.c.length),BD(p.c[b],15));s=new Rkb;p.c[p.c.length]=s;for(e=new olb(c.a);e.a<e.c.c.length;){d=BD(mlb(e),10);if(L5b(d)){w.c[w.c.length]=d;continue}for(j=new Sr(ur(R_b(d).a.Kc(),new Sq));Qr(j);){h=BD(Rr(j),17);F=h.c.i;if(!L5b(F)){continue}C=BD(B.xc(vNb(F,(wtc(),$sc))),10);if(!C){C=K5b(a,F);B.zc(vNb(F,$sc),C);D.Fc(C)}QZb(h,BD(Ikb(C.j,1),11))}for(i=new Sr(ur(U_b(d).a.Kc(),new Sq));Qr(i);){h=BD(Rr(i),17);G=h.d.i;if(!L5b(G)){continue}r=BD(Ohb(q,vNb(G,(wtc(),$sc))),10);if(!r){r=K5b(a,G);Rhb(q,vNb(G,$sc),r);s.c[s.c.length]=r}RZb(h,BD(Ikb(r.j,0),11))}}}for(l=0;l<p.c.length;l++){t=(tCb(l,p.c.length),BD(p.c[l],15));if(t.dc()){continue}m=null;if(l==0){m=new H1b(a);wCb(0,o.c.length);aCb(o.c,0,m)}else if(l==k.c.length-1){m=new H1b(a);o.c[o.c.length]=m}else{m=(tCb(l-1,o.c.length),BD(o.c[l-1],29))}for(g=t.Kc();g.Ob();){f=BD(g.Pb(),10);$_b(f,m)}}for(v=new olb(w);v.a<v.c.c.length;){u=BD(mlb(v),10);$_b(u,null)}yNb(a,(wtc(),Fsc),w)} +function BCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(c,'Coffman-Graham Layering',1);if(b.a.c.length==0){Qdd(c);return}v=BD(vNb(b,(Nyc(),kxc)),19).a;i=0;g=0;for(m=new olb(b.a);m.a<m.c.c.length;){l=BD(mlb(m),10);l.p=i++;for(f=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);e.p=g++}}a.d=KC(sbb,dle,25,i,16,1);a.a=KC(sbb,dle,25,g,16,1);a.b=KC(WD,oje,25,i,15,1);a.e=KC(WD,oje,25,i,15,1);a.f=KC(WD,oje,25,i,15,1);Nc(a.c);CCc(a,b);o=new gub(new GCc(a));for(u=new olb(b.a);u.a<u.c.c.length;){s=BD(mlb(u),10);for(f=new Sr(ur(R_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);a.a[e.p]||++a.b[s.p]}a.b[s.p]==0&&(zCb(cub(o,s)),true)}h=0;while(o.b.c.length!=0){s=BD(dub(o),10);a.f[s.p]=h++;for(f=new Sr(ur(U_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}q=e.d.i;--a.b[q.p];Rc(a.c,q,meb(a.f[s.p]));a.b[q.p]==0&&(zCb(cub(o,q)),true)}}n=new gub(new KCc(a));for(t=new olb(b.a);t.a<t.c.c.length;){s=BD(mlb(t),10);for(f=new Sr(ur(U_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);a.a[e.p]||++a.e[s.p]}a.e[s.p]==0&&(zCb(cub(n,s)),true)}k=new Rkb;d=yCc(b,k);while(n.b.c.length!=0){r=BD(dub(n),10);(d.a.c.length>=v||!wCc(r,d))&&(d=yCc(b,k));$_b(r,d);for(f=new Sr(ur(R_b(r).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zCb(cub(n,p)),true)}}for(j=k.c.length-1;j>=0;--j){Ekb(b.b,(tCb(j,k.c.length),BD(k.c[j],29)))}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function gee(a){var b,c,d,e,f,g,h,i,j;a.b=1;nde(a);b=null;if(a.c==0&&a.a==94){nde(a);b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);h=(null,++vfe,new $fe(4))}else{h=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){Zfe(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(h,fee(c));d=true;break;case 105:case 73:case 99:case 67:c=(Xfe(h,fee(c)),-1);c<0&&(d=true);break;case 112:case 80:i=tde(a,c);if(!i)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(h,i);d=true;break;default:c=eee(a);}}else if(j==24&&!e){if(b){Zfe(b,h);h=b}f=gee(a);Zfe(h,f);if(a.c!=0||a.a!=93)throw vbb(new mde(tvd((h0d(),Mue))));break}nde(a);if(!d){if(j==0){if(c==91)throw vbb(new mde(tvd((h0d(),Nue))));if(c==93)throw vbb(new mde(tvd((h0d(),Oue))));if(c==45&&!e&&a.a!=93)throw vbb(new mde(tvd((h0d(),Pue))))}if(a.c!=0||a.a!=45||c==45&&e){Ufe(h,c,c)}else{nde(a);if((j=a.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(j==0&&a.a==93){Ufe(h,c,c);Ufe(h,45,45)}else if(j==0&&a.a==93||j==24){throw vbb(new mde(tvd((h0d(),Pue))))}else{g=a.a;if(j==0){if(g==91)throw vbb(new mde(tvd((h0d(),Nue))));if(g==93)throw vbb(new mde(tvd((h0d(),Oue))));if(g==45)throw vbb(new mde(tvd((h0d(),Pue))))}else j==10&&(g=eee(a));nde(a);if(c>g)throw vbb(new mde(tvd((h0d(),Sue))));Ufe(h,c,g)}}}e=false}if(a.c==1)throw vbb(new mde(tvd((h0d(),Kue))));Yfe(h);Vfe(h);a.b=0;nde(a);return h} +function xZd(a){Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#decimal']));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#integer']));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#boolean']));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EBoolean',fue,'EBoolean:Object']));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#byte']));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#hexBinary']));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EByte',fue,'EByte:Object']));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EChar',fue,'EChar:Object']));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#double']));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EDouble',fue,'EDouble:Object']));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#float']));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EFloat',fue,'EFloat:Object']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#int']));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EInt',fue,'EInt:Object']));Bnd(a.N,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#long']));Bnd(a.O,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'ELong',fue,'ELong:Object']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#short']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EShort',fue,'EShort:Object']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#string']))} +function fRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){return tCb(0,a.c.length),BD(a.c[0],135)}else if(a.c.length<=0){return new SRc}for(i=new olb(a);i.a<i.c.c.length;){g=BD(mlb(i),135);s=0;o=Ohe;p=Ohe;m=Rie;n=Rie;for(r=Jsb(g.b,0);r.b!=r.d.c;){q=BD(Xsb(r),86);s+=BD(vNb(q,(JTc(),ETc)),19).a;o=$wnd.Math.min(o,q.e.a);p=$wnd.Math.min(p,q.e.b);m=$wnd.Math.max(m,q.e.a+q.f.a);n=$wnd.Math.max(n,q.e.b+q.f.b)}yNb(g,(JTc(),ETc),meb(s));yNb(g,(mTc(),WSc),new f7c(o,p));yNb(g,VSc,new f7c(m,n))}mmb();Okb(a,new jRc);v=new SRc;tNb(v,(tCb(0,a.c.length),BD(a.c[0],94)));l=0;D=0;for(j=new olb(a);j.a<j.c.c.length;){g=BD(mlb(j),135);w=c7c(R6c(BD(vNb(g,(mTc(),VSc)),8)),BD(vNb(g,WSc),8));l=$wnd.Math.max(l,w.a);D+=w.a*w.b}l=$wnd.Math.max(l,$wnd.Math.sqrt(D)*Edb(ED(vNb(v,(JTc(),uTc)))));A=Edb(ED(vNb(v,HTc)));F=0;G=0;k=0;b=A;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),135);w=c7c(R6c(BD(vNb(g,(mTc(),VSc)),8)),BD(vNb(g,WSc),8));if(F+w.a>l){F=0;G+=k+A;k=0}eRc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Lqb;c=new Lqb;for(C=new olb(a);C.a<C.c.c.length;){B=BD(mlb(C),135);d=Ccb(DD(vNb(B,(Y9c(),y8c))));t=!B.q?(null,kmb):B.q;for(f=t.vc().Kc();f.Ob();){e=BD(f.Pb(),42);if(Mhb(u,e.cd())){if(PD(BD(e.cd(),146).wg())!==PD(e.dd())){if(d&&Mhb(c,e.cd())){Zfb();'Found different values for property '+BD(e.cd(),146).tg()+' in components.'}else{Rhb(u,BD(e.cd(),146),e.dd());yNb(v,BD(e.cd(),146),e.dd());d&&Rhb(c,BD(e.cd(),146),e.dd())}}}else{Rhb(u,BD(e.cd(),146),e.dd());yNb(v,BD(e.cd(),146),e.dd())}}}return v} +function MYb(){MYb=ccb;xXb();LYb=new Hp;Rc(LYb,(Ucd(),Gcd),Fcd);Rc(LYb,Qcd,Fcd);Rc(LYb,Hcd,Fcd);Rc(LYb,Ncd,Fcd);Rc(LYb,Mcd,Fcd);Rc(LYb,Kcd,Fcd);Rc(LYb,Ncd,Gcd);Rc(LYb,Fcd,Bcd);Rc(LYb,Gcd,Bcd);Rc(LYb,Qcd,Bcd);Rc(LYb,Hcd,Bcd);Rc(LYb,Lcd,Bcd);Rc(LYb,Ncd,Bcd);Rc(LYb,Mcd,Bcd);Rc(LYb,Kcd,Bcd);Rc(LYb,Ecd,Bcd);Rc(LYb,Fcd,Ocd);Rc(LYb,Gcd,Ocd);Rc(LYb,Bcd,Ocd);Rc(LYb,Qcd,Ocd);Rc(LYb,Hcd,Ocd);Rc(LYb,Lcd,Ocd);Rc(LYb,Ncd,Ocd);Rc(LYb,Ecd,Ocd);Rc(LYb,Pcd,Ocd);Rc(LYb,Mcd,Ocd);Rc(LYb,Icd,Ocd);Rc(LYb,Kcd,Ocd);Rc(LYb,Gcd,Qcd);Rc(LYb,Hcd,Qcd);Rc(LYb,Ncd,Qcd);Rc(LYb,Kcd,Qcd);Rc(LYb,Gcd,Hcd);Rc(LYb,Qcd,Hcd);Rc(LYb,Ncd,Hcd);Rc(LYb,Hcd,Hcd);Rc(LYb,Mcd,Hcd);Rc(LYb,Fcd,Ccd);Rc(LYb,Gcd,Ccd);Rc(LYb,Bcd,Ccd);Rc(LYb,Ocd,Ccd);Rc(LYb,Qcd,Ccd);Rc(LYb,Hcd,Ccd);Rc(LYb,Lcd,Ccd);Rc(LYb,Ncd,Ccd);Rc(LYb,Pcd,Ccd);Rc(LYb,Ecd,Ccd);Rc(LYb,Kcd,Ccd);Rc(LYb,Mcd,Ccd);Rc(LYb,Jcd,Ccd);Rc(LYb,Fcd,Pcd);Rc(LYb,Gcd,Pcd);Rc(LYb,Bcd,Pcd);Rc(LYb,Qcd,Pcd);Rc(LYb,Hcd,Pcd);Rc(LYb,Lcd,Pcd);Rc(LYb,Ncd,Pcd);Rc(LYb,Ecd,Pcd);Rc(LYb,Kcd,Pcd);Rc(LYb,Icd,Pcd);Rc(LYb,Jcd,Pcd);Rc(LYb,Gcd,Ecd);Rc(LYb,Qcd,Ecd);Rc(LYb,Hcd,Ecd);Rc(LYb,Ncd,Ecd);Rc(LYb,Pcd,Ecd);Rc(LYb,Kcd,Ecd);Rc(LYb,Mcd,Ecd);Rc(LYb,Fcd,Dcd);Rc(LYb,Gcd,Dcd);Rc(LYb,Bcd,Dcd);Rc(LYb,Qcd,Dcd);Rc(LYb,Hcd,Dcd);Rc(LYb,Lcd,Dcd);Rc(LYb,Ncd,Dcd);Rc(LYb,Ecd,Dcd);Rc(LYb,Kcd,Dcd);Rc(LYb,Gcd,Mcd);Rc(LYb,Bcd,Mcd);Rc(LYb,Ocd,Mcd);Rc(LYb,Hcd,Mcd);Rc(LYb,Fcd,Icd);Rc(LYb,Gcd,Icd);Rc(LYb,Ocd,Icd);Rc(LYb,Qcd,Icd);Rc(LYb,Hcd,Icd);Rc(LYb,Lcd,Icd);Rc(LYb,Ncd,Icd);Rc(LYb,Ncd,Jcd);Rc(LYb,Hcd,Jcd);Rc(LYb,Ecd,Fcd);Rc(LYb,Ecd,Qcd);Rc(LYb,Ecd,Bcd);Rc(LYb,Lcd,Fcd);Rc(LYb,Lcd,Gcd);Rc(LYb,Lcd,Ocd)} +function HVd(a,b){switch(a.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new U5d(a.b,a.a,b,a.c);case 1:return new BMd(a.a,b,bLd(b.Tg(),a.c));case 43:return new N4d(a.a,b,bLd(b.Tg(),a.c));case 3:return new xMd(a.a,b,bLd(b.Tg(),a.c));case 45:return new K4d(a.a,b,bLd(b.Tg(),a.c));case 41:return new dId(BD(wId(a.c),26),a.a,b,bLd(b.Tg(),a.c));case 50:return new c6d(BD(wId(a.c),26),a.a,b,bLd(b.Tg(),a.c));case 5:return new Q4d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 47:return new U4d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 7:return new cUd(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 49:return new gUd(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 9:return new I4d(a.a,b,bLd(b.Tg(),a.c));case 11:return new G4d(a.a,b,bLd(b.Tg(),a.c));case 13:return new C4d(a.a,b,bLd(b.Tg(),a.c));case 15:return new k2d(a.a,b,bLd(b.Tg(),a.c));case 17:return new c5d(a.a,b,bLd(b.Tg(),a.c));case 19:return new _4d(a.a,b,bLd(b.Tg(),a.c));case 21:return new X4d(a.a,b,bLd(b.Tg(),a.c));case 23:return new pMd(a.a,b,bLd(b.Tg(),a.c));case 25:return new D5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 27:return new y5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 29:return new t5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 31:return new n5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 33:return new A5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 35:return new v5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 37:return new p5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 39:return new i5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 40:return new u3d(b,bLd(b.Tg(),a.c));default:throw vbb(new hz('Unknown feature style: '+a.e));}} +function BMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;Odd(c,'Brandes & Koepf node placement',1);a.a=b;a.c=KMc(b);d=BD(vNb(b,(Nyc(),zxc)),274);n=Ccb(DD(vNb(b,Axc)));a.d=d==(lrc(),irc)&&!n||d==frc;AMc(a,b);v=null;w=null;r=null;s=null;q=(Xj(4,Jie),new Skb(4));switch(BD(vNb(b,zxc),274).g){case 3:r=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),WLc));q.c[q.c.length]=r;break;case 1:s=new ULc(b,a.c.d,(eMc(),dMc),(YLc(),WLc));q.c[q.c.length]=s;break;case 4:v=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),XLc));q.c[q.c.length]=v;break;case 2:w=new ULc(b,a.c.d,(eMc(),dMc),(YLc(),XLc));q.c[q.c.length]=w;break;default:r=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),WLc));s=new ULc(b,a.c.d,dMc,WLc);v=new ULc(b,a.c.d,cMc,XLc);w=new ULc(b,a.c.d,dMc,XLc);q.c[q.c.length]=v;q.c[q.c.length]=w;q.c[q.c.length]=r;q.c[q.c.length]=s;}e=new mMc(b,a.c);for(h=new olb(q);h.a<h.c.c.length;){f=BD(mlb(h),180);lMc(e,f,a.b);kMc(f)}m=new rMc(b,a.c);for(i=new olb(q);i.a<i.c.c.length;){f=BD(mlb(i),180);oMc(m,f)}if(c.n){for(j=new olb(q);j.a<j.c.c.length;){f=BD(mlb(j),180);Sdd(c,f+' size is '+SLc(f))}}l=null;if(a.d){k=yMc(a,q,a.c.d);xMc(b,k,c)&&(l=k)}if(!l){for(j=new olb(q);j.a<j.c.c.length;){f=BD(mlb(j),180);xMc(b,f,c)&&(!l||SLc(l)>SLc(f))&&(l=f)}}!l&&(l=(tCb(0,q.c.length),BD(q.c[0],180)));for(p=new olb(b.b);p.a<p.c.c.length;){o=BD(mlb(p),29);for(u=new olb(o.a);u.a<u.c.c.length;){t=BD(mlb(u),10);t.n.b=Edb(l.p[t.p])+Edb(l.d[t.p])}}if(c.n){Sdd(c,'Chosen node placement: '+l);Sdd(c,'Blocks: '+DMc(l));Sdd(c,'Classes: '+EMc(l,c));Sdd(c,'Marked edges: '+a.b)}for(g=new olb(q);g.a<g.c.c.length;){f=BD(mlb(g),180);f.g=null;f.b=null;f.a=null;f.d=null;f.j=null;f.i=null;f.p=null}IMc(a.c);a.b.a.$b();Qdd(c)} +function V1b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;g=new Psb;v=BD(vNb(c,(Nyc(),Lwc)),103);o=0;ye(g,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(g.b!=0){j=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),33);(PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&!Ccb(DD(hkd(j,xwc)))&&jkd(j,(wtc(),Zsc),meb(o++));q=!Ccb(DD(hkd(j,Jxc)));if(q){l=(!j.a&&(j.a=new cUd(E2,j,10,11)),j.a).i!=0;n=S1b(j);m=PD(hkd(j,axc))===PD((hbd(),ebd));F=!ikd(j,(Y9c(),o8c))||dfb(GD(hkd(j,o8c)),sne);t=null;if(F&&m&&(l||n)){t=P1b(j);yNb(t,Lwc,v);wNb(t,hyc)&&Wyc(new ezc(Edb(ED(vNb(t,hyc)))),t);if(BD(hkd(j,Fxc),174).gc()!=0){k=t;MAb(new YAb(null,(!j.c&&(j.c=new cUd(F2,j,9,9)),new Kub(j.c,16))),new k2b(k));L1b(j,t)}}w=c;A=BD(Ohb(a.a,Xod(j)),10);!!A&&(w=A.e);s=$1b(a,j,w);if(t){s.e=t;t.e=s;ye(g,(!j.a&&(j.a=new cUd(E2,j,10,11)),j.a))}}}o=0;Gsb(g,b,g.c.b,g.c);while(g.b!=0){f=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),33);for(i=new Fyd((!f.b&&(f.b=new cUd(B2,f,12,3)),f.b));i.e!=i.i.gc();){h=BD(Dyd(i),79);N1b(h);(PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&jkd(h,(wtc(),Zsc),meb(o++));C=atd(BD(qud((!h.b&&(h.b=new y5d(z2,h,4,7)),h.b),0),82));D=atd(BD(qud((!h.c&&(h.c=new y5d(z2,h,5,8)),h.c),0),82));if(Ccb(DD(hkd(h,Jxc)))||Ccb(DD(hkd(C,Jxc)))||Ccb(DD(hkd(D,Jxc)))){continue}p=Qld(h)&&Ccb(DD(hkd(C,fxc)))&&Ccb(DD(hkd(h,gxc)));u=f;p||ntd(D,C)?(u=C):ntd(C,D)&&(u=D);w=c;A=BD(Ohb(a.a,u),10);!!A&&(w=A.e);r=X1b(a,h,u,w);yNb(r,(wtc(),xsc),R1b(a,h,b,c))}m=PD(hkd(f,axc))===PD((hbd(),ebd));if(m){for(e=new Fyd((!f.a&&(f.a=new cUd(E2,f,10,11)),f.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);F=!ikd(d,(Y9c(),o8c))||dfb(GD(hkd(d,o8c)),sne);B=PD(hkd(d,axc))===PD(ebd);F&&B&&(Gsb(g,d,g.c.b,g.c),true)}}}} +function vA(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;switch(b){case 71:h=d.q.getFullYear()-nje>=-1900?1:0;c>=4?Qfb(a,OC(GC(ZI,1),nie,2,6,[pje,qje])[h]):Qfb(a,OC(GC(ZI,1),nie,2,6,['BC','AD'])[h]);break;case 121:kA(a,c,d);break;case 77:jA(a,c,d);break;case 107:i=e.q.getHours();i==0?EA(a,24,c):EA(a,i,c);break;case 83:iA(a,c,e);break;case 69:k=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[k]):Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[1]):Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?EA(a,12,c):EA(a,l,c);break;case 75:m=e.q.getHours()%12;EA(a,m,c);break;case 72:n=e.q.getHours();EA(a,n,c);break;case 99:o=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[o]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):EA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[p]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):EA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Qfb(a,OC(GC(ZI,1),nie,2,6,['Q1','Q2','Q3','Q4'])[q]):Qfb(a,OC(GC(ZI,1),nie,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();EA(a,r,c);break;case 109:j=e.q.getMinutes();EA(a,j,c);break;case 115:g=e.q.getSeconds();EA(a,g,c);break;case 122:c<4?Qfb(a,f.c[0]):Qfb(a,f.c[1]);break;case 118:Qfb(a,f.b);break;case 90:c<3?Qfb(a,OA(f)):c==3?Qfb(a,NA(f)):Qfb(a,QA(f.a));break;default:return false;}return true} +function X1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;N1b(b);i=BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82);k=BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82);h=atd(i);j=atd(k);g=(!b.a&&(b.a=new cUd(A2,b,6,6)),b.a).i==0?null:BD(qud((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),0),202);A=BD(Ohb(a.a,h),10);F=BD(Ohb(a.a,j),10);B=null;G=null;if(JD(i,186)){w=BD(Ohb(a.a,i),299);if(JD(w,11)){B=BD(w,11)}else if(JD(w,10)){A=BD(w,10);B=BD(Ikb(A.j,0),11)}}if(JD(k,186)){D=BD(Ohb(a.a,k),299);if(JD(D,11)){G=BD(D,11)}else if(JD(D,10)){F=BD(D,10);G=BD(Ikb(F.j,0),11)}}if(!A||!F){throw vbb(new z2c('The source or the target of edge '+b+' could not be found. '+'This usually happens when an edge connects a node laid out by ELK Layered to a node in '+'another level of hierarchy laid out by either another instance of ELK Layered or another '+'layout algorithm alltogether. The former can be solved by setting the hierarchyHandling '+'option to INCLUDE_CHILDREN.'))}p=new UZb;tNb(p,b);yNb(p,(wtc(),$sc),b);yNb(p,(Nyc(),jxc),null);n=BD(vNb(d,Ksc),21);A==F&&n.Fc((Orc(),Nrc));if(!B){v=(KAc(),IAc);C=null;if(!!g&&fcd(BD(vNb(A,Vxc),98))){C=new f7c(g.j,g.k);Bfd(C,Mld(b));Cfd(C,c);if(ntd(j,h)){v=HAc;P6c(C,A.n)}}B=$$b(A,C,v,d)}if(!G){v=(KAc(),HAc);H=null;if(!!g&&fcd(BD(vNb(F,Vxc),98))){H=new f7c(g.b,g.c);Bfd(H,Mld(b));Cfd(H,c)}G=$$b(F,H,v,Q_b(F))}QZb(p,B);RZb(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((Orc(),Irc));for(m=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);if(!Ccb(DD(hkd(l,Jxc)))&&!!l.a){q=Z1b(l);Ekb(p.b,q);switch(BD(vNb(q,Qwc),272).g){case 1:case 2:n.Fc((Orc(),Grc));break;case 0:n.Fc((Orc(),Erc));yNb(q,Qwc,(qad(),nad));}}}f=BD(vNb(d,Iwc),314);r=BD(vNb(d,Exc),315);e=f==(Rpc(),Opc)||r==(Vzc(),Rzc);if(!!g&&(!g.a&&(g.a=new xMd(y2,g,5)),g.a).i!=0&&e){s=ofd(g);o=new s7c;for(u=Jsb(s,0);u.b!=u.d.c;){t=BD(Xsb(u),8);Dsb(o,new g7c(t))}yNb(p,_sc,o)}return p} +function yZd(a){if(a.gb)return;a.gb=true;a.b=Lnd(a,0);Knd(a.b,18);Qnd(a.b,19);a.a=Lnd(a,1);Knd(a.a,1);Qnd(a.a,2);Qnd(a.a,3);Qnd(a.a,4);Qnd(a.a,5);a.o=Lnd(a,2);Knd(a.o,8);Knd(a.o,9);Qnd(a.o,10);Qnd(a.o,11);Qnd(a.o,12);Qnd(a.o,13);Qnd(a.o,14);Qnd(a.o,15);Qnd(a.o,16);Qnd(a.o,17);Qnd(a.o,18);Qnd(a.o,19);Qnd(a.o,20);Qnd(a.o,21);Qnd(a.o,22);Qnd(a.o,23);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);a.p=Lnd(a,3);Knd(a.p,2);Knd(a.p,3);Knd(a.p,4);Knd(a.p,5);Qnd(a.p,6);Qnd(a.p,7);Pnd(a.p);Pnd(a.p);a.q=Lnd(a,4);Knd(a.q,8);a.v=Lnd(a,5);Qnd(a.v,9);Pnd(a.v);Pnd(a.v);Pnd(a.v);a.w=Lnd(a,6);Knd(a.w,2);Knd(a.w,3);Knd(a.w,4);Qnd(a.w,5);a.B=Lnd(a,7);Qnd(a.B,1);Pnd(a.B);Pnd(a.B);Pnd(a.B);a.Q=Lnd(a,8);Qnd(a.Q,0);Pnd(a.Q);a.R=Lnd(a,9);Knd(a.R,1);a.S=Lnd(a,10);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);a.T=Lnd(a,11);Qnd(a.T,10);Qnd(a.T,11);Qnd(a.T,12);Qnd(a.T,13);Qnd(a.T,14);Pnd(a.T);Pnd(a.T);a.U=Lnd(a,12);Knd(a.U,2);Knd(a.U,3);Qnd(a.U,4);Qnd(a.U,5);Qnd(a.U,6);Qnd(a.U,7);Pnd(a.U);a.V=Lnd(a,13);Qnd(a.V,10);a.W=Lnd(a,14);Knd(a.W,18);Knd(a.W,19);Knd(a.W,20);Qnd(a.W,21);Qnd(a.W,22);Qnd(a.W,23);a.bb=Lnd(a,15);Knd(a.bb,10);Knd(a.bb,11);Knd(a.bb,12);Knd(a.bb,13);Knd(a.bb,14);Knd(a.bb,15);Knd(a.bb,16);Qnd(a.bb,17);Pnd(a.bb);Pnd(a.bb);a.eb=Lnd(a,16);Knd(a.eb,2);Knd(a.eb,3);Knd(a.eb,4);Knd(a.eb,5);Knd(a.eb,6);Knd(a.eb,7);Qnd(a.eb,8);Qnd(a.eb,9);a.ab=Lnd(a,17);Knd(a.ab,0);Knd(a.ab,1);a.H=Lnd(a,18);Qnd(a.H,0);Qnd(a.H,1);Qnd(a.H,2);Qnd(a.H,3);Qnd(a.H,4);Qnd(a.H,5);Pnd(a.H);a.db=Lnd(a,19);Qnd(a.db,2);a.c=Mnd(a,20);a.d=Mnd(a,21);a.e=Mnd(a,22);a.f=Mnd(a,23);a.i=Mnd(a,24);a.g=Mnd(a,25);a.j=Mnd(a,26);a.k=Mnd(a,27);a.n=Mnd(a,28);a.r=Mnd(a,29);a.s=Mnd(a,30);a.t=Mnd(a,31);a.u=Mnd(a,32);a.fb=Mnd(a,33);a.A=Mnd(a,34);a.C=Mnd(a,35);a.D=Mnd(a,36);a.F=Mnd(a,37);a.G=Mnd(a,38);a.I=Mnd(a,39);a.J=Mnd(a,40);a.L=Mnd(a,41);a.M=Mnd(a,42);a.N=Mnd(a,43);a.O=Mnd(a,44);a.P=Mnd(a,45);a.X=Mnd(a,46);a.Y=Mnd(a,47);a.Z=Mnd(a,48);a.$=Mnd(a,49);a._=Mnd(a,50);a.cb=Mnd(a,51);a.K=Mnd(a,52)} +function Y9c(){Y9c=ccb;var a,b;o8c=new Lsd(sse);F9c=new Lsd(tse);q8c=(F7c(),z7c);p8c=new Nsd($pe,q8c);new Tfd;r8c=new Nsd(_le,null);s8c=new Lsd(use);x8c=(i8c(),qqb(h8c,OC(GC(r1,1),Kie,291,0,[d8c])));w8c=new Nsd(lqe,x8c);y8c=new Nsd(Zpe,(Bcb(),false));A8c=(ead(),cad);z8c=new Nsd(cqe,A8c);F8c=(Aad(),zad);E8c=new Nsd(ype,F8c);I8c=new Nsd(Jre,false);K8c=(hbd(),fbd);J8c=new Nsd(tpe,K8c);g9c=new q0b(12);f9c=new Nsd(ame,g9c);O8c=new Nsd(Ame,false);P8c=new Nsd(xqe,false);e9c=new Nsd(Dme,false);u9c=(dcd(),ccd);t9c=new Nsd(Bme,u9c);C9c=new Lsd(uqe);D9c=new Lsd(vme);E9c=new Lsd(yme);H9c=new Lsd(zme);R8c=new s7c;Q8c=new Nsd(mqe,R8c);v8c=new Nsd(pqe,false);L8c=new Nsd(qqe,false);new Lsd(vse);T8c=new H_b;S8c=new Nsd(vqe,T8c);d9c=new Nsd(Xpe,false);new Tfd;G9c=new Nsd(wse,1);new Nsd(xse,true);meb(0);new Nsd(yse,meb(100));new Nsd(zse,false);meb(0);new Nsd(Ase,meb(4000));meb(0);new Nsd(Bse,meb(400));new Nsd(Cse,false);new Nsd(Dse,false);new Nsd(Ese,true);new Nsd(Fse,false);u8c=(Ded(),Ced);t8c=new Nsd(rse,u8c);I9c=new Nsd(Lpe,10);J9c=new Nsd(Mpe,10);K9c=new Nsd(Zle,20);L9c=new Nsd(Npe,10);M9c=new Nsd(xme,2);N9c=new Nsd(Ope,10);P9c=new Nsd(Ppe,0);Q9c=new Nsd(Spe,5);R9c=new Nsd(Qpe,1);S9c=new Nsd(Rpe,1);T9c=new Nsd(wme,20);U9c=new Nsd(Tpe,10);X9c=new Nsd(Upe,10);O9c=new Lsd(Vpe);W9c=new I_b;V9c=new Nsd(wqe,W9c);j9c=new Lsd(tqe);i9c=false;h9c=new Nsd(sqe,i9c);V8c=new q0b(5);U8c=new Nsd(dqe,V8c);X8c=(Hbd(),b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));W8c=new Nsd(Gme,X8c);m9c=(Tbd(),Qbd);l9c=new Nsd(gqe,m9c);o9c=new Lsd(hqe);p9c=new Lsd(iqe);q9c=new Lsd(jqe);n9c=new Lsd(kqe);Z8c=(a=BD(gdb(I1),9),new xqb(a,BD(_Bb(a,a.length),9),0));Y8c=new Nsd(Fme,Z8c);c9c=pqb((Idd(),Bdd));b9c=new Nsd(Eme,c9c);a9c=new f7c(0,0);_8c=new Nsd(Tme,a9c);$8c=new Nsd(bqe,false);D8c=(qad(),nad);C8c=new Nsd(nqe,D8c);B8c=new Nsd(Cme,false);new Lsd(Gse);meb(1);new Nsd(Hse,null);r9c=new Lsd(rqe);v9c=new Lsd(oqe);B9c=(Ucd(),Scd);A9c=new Nsd(Ype,B9c);s9c=new Lsd(Wpe);y9c=(rcd(),pqb(pcd));x9c=new Nsd(Hme,y9c);w9c=new Nsd(eqe,false);z9c=new Nsd(fqe,true);M8c=new Nsd(_pe,false);N8c=new Nsd(aqe,false);G8c=new Nsd($le,1);H8c=(Mad(),Kad);new Nsd(Ise,H8c);k9c=true} +function wtc(){wtc=ccb;var a,b;$sc=new Lsd(Ime);xsc=new Lsd('coordinateOrigin');itc=new Lsd('processors');wsc=new Msd('compoundNode',(Bcb(),false));Nsc=new Msd('insideConnections',false);_sc=new Lsd('originalBendpoints');atc=new Lsd('originalDummyNodePosition');btc=new Lsd('originalLabelEdge');ktc=new Lsd('representedLabels');Csc=new Lsd('endLabels');Dsc=new Lsd('endLabel.origin');Ssc=new Msd('labelSide',(rbd(),qbd));Ysc=new Msd('maxEdgeThickness',0);ltc=new Msd('reversed',false);jtc=new Lsd(Jme);Vsc=new Msd('longEdgeSource',null);Wsc=new Msd('longEdgeTarget',null);Usc=new Msd('longEdgeHasLabelDummies',false);Tsc=new Msd('longEdgeBeforeLabelDummy',false);Bsc=new Msd('edgeConstraint',(Gqc(),Eqc));Psc=new Lsd('inLayerLayoutUnit');Osc=new Msd('inLayerConstraint',(esc(),csc));Qsc=new Msd('inLayerSuccessorConstraint',new Rkb);Rsc=new Msd('inLayerSuccessorConstraintBetweenNonDummies',false);gtc=new Lsd('portDummy');ysc=new Msd('crossingHint',meb(0));Ksc=new Msd('graphProperties',(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));Hsc=new Msd('externalPortSide',(Ucd(),Scd));Isc=new Msd('externalPortSize',new d7c);Fsc=new Lsd('externalPortReplacedDummies');Gsc=new Lsd('externalPortReplacedDummy');Esc=new Msd('externalPortConnections',(a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0)));htc=new Msd(tle,0);ssc=new Lsd('barycenterAssociates');vtc=new Lsd('TopSideComments');tsc=new Lsd('BottomSideComments');vsc=new Lsd('CommentConnectionPort');Msc=new Msd('inputCollect',false);etc=new Msd('outputCollect',false);Asc=new Msd('cyclic',false);zsc=new Lsd('crossHierarchyMap');utc=new Lsd('targetOffset');new Msd('splineLabelSize',new d7c);otc=new Lsd('spacings');ftc=new Msd('partitionConstraint',false);usc=new Lsd('breakingPoint.info');stc=new Lsd('splines.survivingEdge');rtc=new Lsd('splines.route.start');ptc=new Lsd('splines.edgeChain');dtc=new Lsd('originalPortConstraints');ntc=new Lsd('selfLoopHolder');qtc=new Lsd('splines.nsPortY');Zsc=new Lsd('modelOrder');Xsc=new Lsd('longEdgeTargetNode');Jsc=new Msd(Xne,false);mtc=new Msd(Xne,false);Lsc=new Lsd('layerConstraints.hiddenNodes');ctc=new Lsd('layerConstraints.opposidePort');ttc=new Lsd('targetNode.modelOrder')} +function jwc(){jwc=ccb;puc=(xqc(),vqc);ouc=new Nsd(Yne,puc);Guc=new Nsd(Zne,(Bcb(),false));Muc=(msc(),ksc);Luc=new Nsd($ne,Muc);cvc=new Nsd(_ne,false);dvc=new Nsd(aoe,true);Itc=new Nsd(boe,false);xvc=(BAc(),zAc);wvc=new Nsd(coe,xvc);meb(1);Fvc=new Nsd(doe,meb(7));Gvc=new Nsd(eoe,false);Huc=new Nsd(foe,false);nuc=(mqc(),iqc);muc=new Nsd(goe,nuc);bvc=(lzc(),jzc);avc=new Nsd(hoe,bvc);Tuc=(Ctc(),Btc);Suc=new Nsd(ioe,Tuc);meb(-1);Ruc=new Nsd(joe,meb(-1));meb(-1);Uuc=new Nsd(koe,meb(-1));meb(-1);Vuc=new Nsd(loe,meb(4));meb(-1);Xuc=new Nsd(moe,meb(2));_uc=(kAc(),iAc);$uc=new Nsd(noe,_uc);meb(0);Zuc=new Nsd(ooe,meb(0));Puc=new Nsd(poe,meb(Ohe));luc=(Rpc(),Ppc);kuc=new Nsd(qoe,luc);Xtc=new Nsd(roe,false);euc=new Nsd(soe,0.1);iuc=new Nsd(toe,false);meb(-1);guc=new Nsd(uoe,meb(-1));meb(-1);huc=new Nsd(voe,meb(-1));meb(0);Ytc=new Nsd(woe,meb(40));cuc=(Xrc(),Wrc);buc=new Nsd(xoe,cuc);$tc=Urc;Ztc=new Nsd(yoe,$tc);vvc=(Vzc(),Qzc);uvc=new Nsd(zoe,vvc);kvc=new Lsd(Aoe);fvc=(_qc(),Zqc);evc=new Nsd(Boe,fvc);ivc=(lrc(),irc);hvc=new Nsd(Coe,ivc);new Tfd;nvc=new Nsd(Doe,0.3);pvc=new Lsd(Eoe);rvc=(Izc(),Gzc);qvc=new Nsd(Foe,rvc);xuc=(TAc(),RAc);wuc=new Nsd(Goe,xuc);zuc=(_Ac(),$Ac);yuc=new Nsd(Hoe,zuc);Buc=(tBc(),sBc);Auc=new Nsd(Ioe,Buc);Duc=new Nsd(Joe,0.2);uuc=new Nsd(Koe,2);Bvc=new Nsd(Loe,null);Dvc=new Nsd(Moe,10);Cvc=new Nsd(Noe,10);Evc=new Nsd(Ooe,20);meb(0);yvc=new Nsd(Poe,meb(0));meb(0);zvc=new Nsd(Qoe,meb(0));meb(0);Avc=new Nsd(Roe,meb(0));Jtc=new Nsd(Soe,false);Ntc=(yrc(),wrc);Mtc=new Nsd(Toe,Ntc);Ltc=(Ipc(),Hpc);Ktc=new Nsd(Uoe,Ltc);Juc=new Nsd(Voe,false);meb(0);Iuc=new Nsd(Woe,meb(16));meb(0);Kuc=new Nsd(Xoe,meb(5));bwc=(LBc(),JBc);awc=new Nsd(Yoe,bwc);Hvc=new Nsd(Zoe,10);Kvc=new Nsd($oe,1);Tvc=(bqc(),aqc);Svc=new Nsd(_oe,Tvc);Nvc=new Lsd(ape);Qvc=meb(1);meb(0);Pvc=new Nsd(bpe,Qvc);gwc=(CBc(),zBc);fwc=new Nsd(cpe,gwc);cwc=new Lsd(dpe);Yvc=new Nsd(epe,true);Wvc=new Nsd(fpe,2);$vc=new Nsd(gpe,true);tuc=(Sqc(),Qqc);suc=new Nsd(hpe,tuc);ruc=(Apc(),wpc);quc=new Nsd(ipe,ruc);Wtc=(tAc(),rAc);Vtc=new Nsd(jpe,Wtc);Utc=new Nsd(kpe,false);Ptc=(RXb(),QXb);Otc=new Nsd(lpe,Ptc);Ttc=(xzc(),uzc);Stc=new Nsd(mpe,Ttc);Qtc=new Nsd(npe,0);Rtc=new Nsd(ope,0);Ouc=kqc;Nuc=Opc;Wuc=izc;Yuc=izc;Quc=fzc;fuc=(hbd(),ebd);juc=Ppc;duc=Ppc;_tc=Ppc;auc=ebd;lvc=Tzc;mvc=Qzc;gvc=Qzc;jvc=Qzc;ovc=Szc;tvc=Tzc;svc=Tzc;Cuc=(Aad(),yad);Euc=yad;Fuc=sBc;vuc=xad;Ivc=KBc;Jvc=IBc;Lvc=KBc;Mvc=IBc;Uvc=KBc;Vvc=IBc;Ovc=_pc;Rvc=aqc;hwc=KBc;iwc=IBc;dwc=KBc;ewc=IBc;Zvc=IBc;Xvc=IBc;_vc=IBc} +function S8b(){S8b=ccb;Y7b=new T8b('DIRECTION_PREPROCESSOR',0);V7b=new T8b('COMMENT_PREPROCESSOR',1);Z7b=new T8b('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);n8b=new T8b('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);G8b=new T8b('PARTITION_PREPROCESSOR',4);r8b=new T8b('LABEL_DUMMY_INSERTER',5);M8b=new T8b('SELF_LOOP_PREPROCESSOR',6);w8b=new T8b('LAYER_CONSTRAINT_PREPROCESSOR',7);E8b=new T8b('PARTITION_MIDPROCESSOR',8);i8b=new T8b('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);A8b=new T8b('NODE_PROMOTION',10);v8b=new T8b('LAYER_CONSTRAINT_POSTPROCESSOR',11);F8b=new T8b('PARTITION_POSTPROCESSOR',12);e8b=new T8b('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);O8b=new T8b('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);P7b=new T8b('BREAKING_POINT_INSERTER',15);z8b=new T8b('LONG_EDGE_SPLITTER',16);I8b=new T8b('PORT_SIDE_PROCESSOR',17);o8b=new T8b('INVERTED_PORT_PROCESSOR',18);H8b=new T8b('PORT_LIST_SORTER',19);Q8b=new T8b('SORT_BY_INPUT_ORDER_OF_MODEL',20);C8b=new T8b('NORTH_SOUTH_PORT_PREPROCESSOR',21);Q7b=new T8b('BREAKING_POINT_PROCESSOR',22);D8b=new T8b(Bne,23);R8b=new T8b(Cne,24);K8b=new T8b('SELF_LOOP_PORT_RESTORER',25);P8b=new T8b('SINGLE_EDGE_GRAPH_WRAPPER',26);p8b=new T8b('IN_LAYER_CONSTRAINT_PROCESSOR',27);b8b=new T8b('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);q8b=new T8b('LABEL_AND_NODE_SIZE_PROCESSOR',29);m8b=new T8b('INNERMOST_NODE_MARGIN_CALCULATOR',30);N8b=new T8b('SELF_LOOP_ROUTER',31);T7b=new T8b('COMMENT_NODE_MARGIN_CALCULATOR',32);_7b=new T8b('END_LABEL_PREPROCESSOR',33);t8b=new T8b('LABEL_DUMMY_SWITCHER',34);S7b=new T8b('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);u8b=new T8b('LABEL_SIDE_SELECTOR',36);k8b=new T8b('HYPEREDGE_DUMMY_MERGER',37);f8b=new T8b('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);x8b=new T8b('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);h8b=new T8b('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);W7b=new T8b('CONSTRAINTS_POSTPROCESSOR',41);U7b=new T8b('COMMENT_POSTPROCESSOR',42);l8b=new T8b('HYPERNODE_PROCESSOR',43);g8b=new T8b('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);y8b=new T8b('LONG_EDGE_JOINER',45);L8b=new T8b('SELF_LOOP_POSTPROCESSOR',46);R7b=new T8b('BREAKING_POINT_REMOVER',47);B8b=new T8b('NORTH_SOUTH_PORT_POSTPROCESSOR',48);j8b=new T8b('HORIZONTAL_COMPACTOR',49);s8b=new T8b('LABEL_DUMMY_REMOVER',50);c8b=new T8b('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);a8b=new T8b('END_LABEL_SORTER',52);J8b=new T8b('REVERSED_EDGE_RESTORER',53);$7b=new T8b('END_LABEL_POSTPROCESSOR',54);d8b=new T8b('HIERARCHICAL_NODE_RESIZER',55);X7b=new T8b('DIRECTION_POSTPROCESSOR',56)} +function KIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K<N;++K){F=H[K];for(V=new olb(F.j);V.a<V.c.c.length;){U=BD(mlb(V),11);X=0;for(h=new olb(U.g);h.a<h.c.c.length;){g=BD(mlb(h),17);F.c!=g.d.i.c&&++X}X>0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L<O;++L){F=I[L];P=0;for(V=new olb(F.j);V.a<V.c.c.length;){U=BD(mlb(V),11);if(U.j==(Ucd(),Acd)){for(h=new olb(U.e);h.a<h.c.c.length;){g=BD(mlb(h),17);if(F.c!=g.c.i.c){++P;break}}}else{break}}R=0;Y=new Bib(F.j,F.j.c.length);while(Y.b>0){U=(sCb(Y.b>0),BD(Y.a.Xb(Y.c=--Y.b),11));X=0;for(h=new olb(U.e);h.a<h.c.c.length;){g=BD(mlb(h),17);F.c!=g.c.i.c&&++X}if(X>0){if(U.j==(Ucd(),Acd)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Lqb;o=new zsb;for(G=b,J=0,M=G.length;J<M;++J){F=G[J];for(fb=new olb(F.j);fb.a<fb.c.c.length;){eb=BD(mlb(fb),11);for(h=new olb(eb.g);h.a<h.c.c.length;){g=BD(mlb(h),17);jb=g.d;if(F.c!=jb.i.c){db=BD(Wd(irb(W.f,eb)),467);ib=BD(Wd(irb(W.f,jb)),467);if(!db&&!ib){n=new NIc;o.a.zc(n,o);Ekb(n.a,g);Ekb(n.d,eb);jrb(W.f,eb,n);Ekb(n.d,jb);jrb(W.f,jb,n)}else if(!db){Ekb(ib.a,g);Ekb(ib.d,eb);jrb(W.f,eb,ib)}else if(!ib){Ekb(db.a,g);Ekb(db.d,jb);jrb(W.f,jb,db)}else if(db==ib){Ekb(db.a,g)}else{Ekb(db.a,g);for(T=new olb(ib.d);T.a<T.c.c.length;){S=BD(mlb(T),11);jrb(W.f,S,db)}Gkb(db.a,ib.a);Gkb(db.d,ib.d);o.a.Bc(ib)!=null}}}}}p=BD(Ee(o,KC(oY,{3:1,4:1,5:1,1946:1},467,o.a.gc(),0,1)),1946);D=b[0].c;bb=c[0].c;for(k=p,l=0,m=k.length;l<m;++l){j=k[l];j.e=cb;j.f=hb;for(V=new olb(j.d);V.a<V.c.c.length;){U=BD(mlb(V),11);Z=a.a[U.p];if(U.i.c==D){Z<j.e&&(j.e=Z);Z>j.b&&(j.b=Z)}else if(U.i.c==bb){Z<j.f&&(j.f=Z);Z>j.c&&(j.c=Z)}}}Klb(p,0,p.length,null);gb=KC(WD,oje,25,p.length,15,1);d=KC(WD,oje,25,hb+1,15,1);for(r=0;r<p.length;r++){gb[r]=p[r].f;d[gb[r]]=1}f=0;for(s=0;s<d.length;s++){d[s]==1?(d[s]=f):--f}$=0;for(t=0;t<gb.length;t++){gb[t]+=d[gb[t]];$=$wnd.Math.max($,gb[t]+1)}i=1;while(i<$){i*=2}lb=2*i-1;i-=1;kb=KC(WD,oje,25,lb,15,1);e=0;for(B=0;B<gb.length;B++){A=gb[B]+i;++kb[A];while(A>0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=KC(nY,Uhe,362,p.length*2,0,1);for(u=0;u<p.length;u++){C[2*u]=new QIc(p[u],p[u].e,p[u].b,(UIc(),TIc));C[2*u+1]=new QIc(p[u],p[u].b,p[u].e,SIc)}Klb(C,0,C.length,null);Q=0;for(v=0;v<C.length;v++){switch(C[v].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}ab=KC(nY,Uhe,362,p.length*2,0,1);for(w=0;w<p.length;w++){ab[2*w]=new QIc(p[w],p[w].f,p[w].c,(UIc(),TIc));ab[2*w+1]=new QIc(p[w],p[w].c,p[w].f,SIc)}Klb(ab,0,ab.length,null);Q=0;for(q=0;q<ab.length;q++){switch(ab[q].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}return e} +function wfe(){wfe=ccb;ffe=new xfe(7);hfe=(++vfe,new ige(8,94));++vfe;new ige(8,64);ife=(++vfe,new ige(8,36));ofe=(++vfe,new ige(8,65));pfe=(++vfe,new ige(8,122));qfe=(++vfe,new ige(8,90));tfe=(++vfe,new ige(8,98));mfe=(++vfe,new ige(8,66));rfe=(++vfe,new ige(8,60));ufe=(++vfe,new ige(8,62));efe=new xfe(11);cfe=(++vfe,new $fe(4));Ufe(cfe,48,57);sfe=(++vfe,new $fe(4));Ufe(sfe,48,57);Ufe(sfe,65,90);Ufe(sfe,95,95);Ufe(sfe,97,122);nfe=(++vfe,new $fe(4));Ufe(nfe,9,9);Ufe(nfe,10,10);Ufe(nfe,12,12);Ufe(nfe,13,13);Ufe(nfe,32,32);jfe=_fe(cfe);lfe=_fe(sfe);kfe=_fe(nfe);Zee=new Lqb;$ee=new Lqb;_ee=OC(GC(ZI,1),nie,2,6,['Cn','Lu','Ll','Lt','Lm','Lo','Mn','Me','Mc','Nd','Nl','No','Zs','Zl','Zp','Cc','Cf',null,'Co','Cs','Pd','Ps','Pe','Pc','Po','Sm','Sc','Sk','So','Pi','Pf','L','M','N','Z','C','P','S']);Yee=OC(GC(ZI,1),nie,2,6,['Basic Latin','Latin-1 Supplement','Latin Extended-A','Latin Extended-B','IPA Extensions','Spacing Modifier Letters','Combining Diacritical Marks','Greek','Cyrillic','Armenian','Hebrew','Arabic','Syriac','Thaana','Devanagari','Bengali','Gurmukhi','Gujarati','Oriya','Tamil','Telugu','Kannada','Malayalam','Sinhala','Thai','Lao','Tibetan','Myanmar','Georgian','Hangul Jamo','Ethiopic','Cherokee','Unified Canadian Aboriginal Syllabics','Ogham','Runic','Khmer','Mongolian','Latin Extended Additional','Greek Extended','General Punctuation','Superscripts and Subscripts','Currency Symbols','Combining Marks for Symbols','Letterlike Symbols','Number Forms','Arrows','Mathematical Operators','Miscellaneous Technical','Control Pictures','Optical Character Recognition','Enclosed Alphanumerics','Box Drawing','Block Elements','Geometric Shapes','Miscellaneous Symbols','Dingbats','Braille Patterns','CJK Radicals Supplement','Kangxi Radicals','Ideographic Description Characters','CJK Symbols and Punctuation','Hiragana','Katakana','Bopomofo','Hangul Compatibility Jamo','Kanbun','Bopomofo Extended','Enclosed CJK Letters and Months','CJK Compatibility','CJK Unified Ideographs Extension A','CJK Unified Ideographs','Yi Syllables','Yi Radicals','Hangul Syllables',uxe,'CJK Compatibility Ideographs','Alphabetic Presentation Forms','Arabic Presentation Forms-A','Combining Half Marks','CJK Compatibility Forms','Small Form Variants','Arabic Presentation Forms-B','Specials','Halfwidth and Fullwidth Forms','Old Italic','Gothic','Deseret','Byzantine Musical Symbols','Musical Symbols','Mathematical Alphanumeric Symbols','CJK Unified Ideographs Extension B','CJK Compatibility Ideographs Supplement','Tags']);afe=OC(GC(WD,1),oje,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])} +function qJb(){qJb=ccb;nJb=new tJb('OUT_T_L',0,(NHb(),LHb),(EIb(),BIb),(gHb(),dHb),dHb,OC(GC(LK,1),Uhe,21,0,[qqb((Hbd(),Dbd),OC(GC(B1,1),Kie,93,0,[Gbd,zbd]))]));mJb=new tJb('OUT_T_C',1,KHb,BIb,dHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd,Abd]))]));oJb=new tJb('OUT_T_R',2,MHb,BIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd]))]));eJb=new tJb('OUT_B_L',3,LHb,DIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd]))]));dJb=new tJb('OUT_B_C',4,KHb,DIb,fHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd,Abd]))]));fJb=new tJb('OUT_B_R',5,MHb,DIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd]))]));iJb=new tJb('OUT_L_T',6,MHb,DIb,dHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Gbd,Abd]))]));hJb=new tJb('OUT_L_C',7,MHb,CIb,eHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Fbd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Fbd,Abd]))]));gJb=new tJb('OUT_L_B',8,MHb,BIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Ebd,Abd]))]));lJb=new tJb('OUT_R_T',9,LHb,DIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Gbd,Abd]))]));kJb=new tJb('OUT_R_C',10,LHb,CIb,eHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Fbd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Fbd,Abd]))]));jJb=new tJb('OUT_R_B',11,LHb,BIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Ebd,Abd]))]));bJb=new tJb('IN_T_L',12,LHb,DIb,dHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,zbd,Abd]))]));aJb=new tJb('IN_T_C',13,KHb,DIb,dHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd,Abd]))]));cJb=new tJb('IN_T_R',14,MHb,DIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd,Abd]))]));$Ib=new tJb('IN_C_L',15,LHb,CIb,eHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,zbd,Abd]))]));ZIb=new tJb('IN_C_C',16,KHb,CIb,eHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,ybd,Abd]))]));_Ib=new tJb('IN_C_R',17,MHb,CIb,eHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,Bbd,Abd]))]));XIb=new tJb('IN_B_L',18,LHb,BIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd,Abd]))]));WIb=new tJb('IN_B_C',19,KHb,BIb,fHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd,Abd]))]));YIb=new tJb('IN_B_R',20,MHb,BIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd,Abd]))]));pJb=new tJb(ole,21,null,null,null,null,OC(GC(LK,1),Uhe,21,0,[]))} +function jGd(){jGd=ccb;PFd=(NFd(),MFd).b;BD(qud(ZKd(MFd.b),0),34);BD(qud(ZKd(MFd.b),1),18);OFd=MFd.a;BD(qud(ZKd(MFd.a),0),34);BD(qud(ZKd(MFd.a),1),18);BD(qud(ZKd(MFd.a),2),18);BD(qud(ZKd(MFd.a),3),18);BD(qud(ZKd(MFd.a),4),18);QFd=MFd.o;BD(qud(ZKd(MFd.o),0),34);BD(qud(ZKd(MFd.o),1),34);SFd=BD(qud(ZKd(MFd.o),2),18);BD(qud(ZKd(MFd.o),3),18);BD(qud(ZKd(MFd.o),4),18);BD(qud(ZKd(MFd.o),5),18);BD(qud(ZKd(MFd.o),6),18);BD(qud(ZKd(MFd.o),7),18);BD(qud(ZKd(MFd.o),8),18);BD(qud(ZKd(MFd.o),9),18);BD(qud(ZKd(MFd.o),10),18);BD(qud(ZKd(MFd.o),11),18);BD(qud(ZKd(MFd.o),12),18);BD(qud(ZKd(MFd.o),13),18);BD(qud(ZKd(MFd.o),14),18);BD(qud(ZKd(MFd.o),15),18);BD(qud(WKd(MFd.o),0),59);BD(qud(WKd(MFd.o),1),59);BD(qud(WKd(MFd.o),2),59);BD(qud(WKd(MFd.o),3),59);BD(qud(WKd(MFd.o),4),59);BD(qud(WKd(MFd.o),5),59);BD(qud(WKd(MFd.o),6),59);BD(qud(WKd(MFd.o),7),59);BD(qud(WKd(MFd.o),8),59);BD(qud(WKd(MFd.o),9),59);RFd=MFd.p;BD(qud(ZKd(MFd.p),0),34);BD(qud(ZKd(MFd.p),1),34);BD(qud(ZKd(MFd.p),2),34);BD(qud(ZKd(MFd.p),3),34);BD(qud(ZKd(MFd.p),4),18);BD(qud(ZKd(MFd.p),5),18);BD(qud(WKd(MFd.p),0),59);BD(qud(WKd(MFd.p),1),59);TFd=MFd.q;BD(qud(ZKd(MFd.q),0),34);UFd=MFd.v;BD(qud(ZKd(MFd.v),0),18);BD(qud(WKd(MFd.v),0),59);BD(qud(WKd(MFd.v),1),59);BD(qud(WKd(MFd.v),2),59);VFd=MFd.w;BD(qud(ZKd(MFd.w),0),34);BD(qud(ZKd(MFd.w),1),34);BD(qud(ZKd(MFd.w),2),34);BD(qud(ZKd(MFd.w),3),18);WFd=MFd.B;BD(qud(ZKd(MFd.B),0),18);BD(qud(WKd(MFd.B),0),59);BD(qud(WKd(MFd.B),1),59);BD(qud(WKd(MFd.B),2),59);ZFd=MFd.Q;BD(qud(ZKd(MFd.Q),0),18);BD(qud(WKd(MFd.Q),0),59);$Fd=MFd.R;BD(qud(ZKd(MFd.R),0),34);_Fd=MFd.S;BD(qud(WKd(MFd.S),0),59);BD(qud(WKd(MFd.S),1),59);BD(qud(WKd(MFd.S),2),59);BD(qud(WKd(MFd.S),3),59);BD(qud(WKd(MFd.S),4),59);BD(qud(WKd(MFd.S),5),59);BD(qud(WKd(MFd.S),6),59);BD(qud(WKd(MFd.S),7),59);BD(qud(WKd(MFd.S),8),59);BD(qud(WKd(MFd.S),9),59);BD(qud(WKd(MFd.S),10),59);BD(qud(WKd(MFd.S),11),59);BD(qud(WKd(MFd.S),12),59);BD(qud(WKd(MFd.S),13),59);BD(qud(WKd(MFd.S),14),59);aGd=MFd.T;BD(qud(ZKd(MFd.T),0),18);BD(qud(ZKd(MFd.T),2),18);bGd=BD(qud(ZKd(MFd.T),3),18);BD(qud(ZKd(MFd.T),4),18);BD(qud(WKd(MFd.T),0),59);BD(qud(WKd(MFd.T),1),59);BD(qud(ZKd(MFd.T),1),18);cGd=MFd.U;BD(qud(ZKd(MFd.U),0),34);BD(qud(ZKd(MFd.U),1),34);BD(qud(ZKd(MFd.U),2),18);BD(qud(ZKd(MFd.U),3),18);BD(qud(ZKd(MFd.U),4),18);BD(qud(ZKd(MFd.U),5),18);BD(qud(WKd(MFd.U),0),59);dGd=MFd.V;BD(qud(ZKd(MFd.V),0),18);eGd=MFd.W;BD(qud(ZKd(MFd.W),0),34);BD(qud(ZKd(MFd.W),1),34);BD(qud(ZKd(MFd.W),2),34);BD(qud(ZKd(MFd.W),3),18);BD(qud(ZKd(MFd.W),4),18);BD(qud(ZKd(MFd.W),5),18);gGd=MFd.bb;BD(qud(ZKd(MFd.bb),0),34);BD(qud(ZKd(MFd.bb),1),34);BD(qud(ZKd(MFd.bb),2),34);BD(qud(ZKd(MFd.bb),3),34);BD(qud(ZKd(MFd.bb),4),34);BD(qud(ZKd(MFd.bb),5),34);BD(qud(ZKd(MFd.bb),6),34);BD(qud(ZKd(MFd.bb),7),18);BD(qud(WKd(MFd.bb),0),59);BD(qud(WKd(MFd.bb),1),59);hGd=MFd.eb;BD(qud(ZKd(MFd.eb),0),34);BD(qud(ZKd(MFd.eb),1),34);BD(qud(ZKd(MFd.eb),2),34);BD(qud(ZKd(MFd.eb),3),34);BD(qud(ZKd(MFd.eb),4),34);BD(qud(ZKd(MFd.eb),5),34);BD(qud(ZKd(MFd.eb),6),18);BD(qud(ZKd(MFd.eb),7),18);fGd=MFd.ab;BD(qud(ZKd(MFd.ab),0),34);BD(qud(ZKd(MFd.ab),1),34);XFd=MFd.H;BD(qud(ZKd(MFd.H),0),18);BD(qud(ZKd(MFd.H),1),18);BD(qud(ZKd(MFd.H),2),18);BD(qud(ZKd(MFd.H),3),18);BD(qud(ZKd(MFd.H),4),18);BD(qud(ZKd(MFd.H),5),18);BD(qud(WKd(MFd.H),0),59);iGd=MFd.db;BD(qud(ZKd(MFd.db),0),18);YFd=MFd.M} +function bae(a){var b;if(a.O)return;a.O=true;pnd(a,'type');cod(a,'ecore.xml.type');dod(a,Ewe);b=BD(nUd((yFd(),xFd),Ewe),1945);wtd(_Kd(a.fb),a.b);Xnd(a.b,Q9,'AnyType',false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.wb.D,Qve,null,0,-1,Q9,false,false,true,false,false,false);Vnd(BD(qud(ZKd(a.b),1),34),a.wb.D,'any',null,0,-1,Q9,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.b),2),34),a.wb.D,'anyAttribute',null,0,-1,Q9,false,false,true,false,false,false);Xnd(a.bb,S9,Jwe,false,false,true);Vnd(BD(qud(ZKd(a.bb),0),34),a.gb,'data',null,0,1,S9,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),1),34),a.gb,bue,null,1,1,S9,false,false,true,false,true,false);Xnd(a.fb,T9,Kwe,false,false,true);Vnd(BD(qud(ZKd(a.fb),0),34),b.gb,'rawValue',null,0,1,T9,true,true,true,false,true,true);Vnd(BD(qud(ZKd(a.fb),1),34),b.a,Bte,null,0,1,T9,true,true,true,false,true,true);_nd(BD(qud(ZKd(a.fb),2),18),a.wb.q,null,'instanceType',1,1,T9,false,false,true,false,false,false,false);Xnd(a.qb,U9,Lwe,false,false,true);Vnd(BD(qud(ZKd(a.qb),0),34),a.wb.D,Qve,null,0,-1,null,false,false,true,false,false,false);_nd(BD(qud(ZKd(a.qb),1),18),a.wb.ab,null,'xMLNSPrefixMap',0,-1,null,true,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.qb),2),18),a.wb.ab,null,'xSISchemaLocation',0,-1,null,true,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.qb),3),34),a.gb,'cDATA',null,0,-2,null,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.qb),4),34),a.gb,'comment',null,0,-2,null,true,true,true,false,false,true);_nd(BD(qud(ZKd(a.qb),5),18),a.bb,null,jxe,0,-2,null,true,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.qb),6),34),a.gb,Ite,null,0,-2,null,true,true,true,false,false,true);Znd(a.a,SI,'AnySimpleType',true);Znd(a.c,ZI,'AnyURI',true);Znd(a.d,GC(SD,1),'Base64Binary',true);Znd(a.e,sbb,'Boolean',true);Znd(a.f,wI,'BooleanObject',true);Znd(a.g,SD,'Byte',true);Znd(a.i,xI,'ByteObject',true);Znd(a.j,ZI,'Date',true);Znd(a.k,ZI,'DateTime',true);Znd(a.n,bJ,'Decimal',true);Znd(a.o,UD,'Double',true);Znd(a.p,BI,'DoubleObject',true);Znd(a.q,ZI,'Duration',true);Znd(a.s,yK,'ENTITIES',true);Znd(a.r,yK,'ENTITIESBase',true);Znd(a.t,ZI,Rwe,true);Znd(a.u,VD,'Float',true);Znd(a.v,FI,'FloatObject',true);Znd(a.w,ZI,'GDay',true);Znd(a.B,ZI,'GMonth',true);Znd(a.A,ZI,'GMonthDay',true);Znd(a.C,ZI,'GYear',true);Znd(a.D,ZI,'GYearMonth',true);Znd(a.F,GC(SD,1),'HexBinary',true);Znd(a.G,ZI,'ID',true);Znd(a.H,ZI,'IDREF',true);Znd(a.J,yK,'IDREFS',true);Znd(a.I,yK,'IDREFSBase',true);Znd(a.K,WD,'Int',true);Znd(a.M,cJ,'Integer',true);Znd(a.L,JI,'IntObject',true);Znd(a.P,ZI,'Language',true);Znd(a.Q,XD,'Long',true);Znd(a.R,MI,'LongObject',true);Znd(a.S,ZI,'Name',true);Znd(a.T,ZI,Swe,true);Znd(a.U,cJ,'NegativeInteger',true);Znd(a.V,ZI,axe,true);Znd(a.X,yK,'NMTOKENS',true);Znd(a.W,yK,'NMTOKENSBase',true);Znd(a.Y,cJ,'NonNegativeInteger',true);Znd(a.Z,cJ,'NonPositiveInteger',true);Znd(a.$,ZI,'NormalizedString',true);Znd(a._,ZI,'NOTATION',true);Znd(a.ab,ZI,'PositiveInteger',true);Znd(a.cb,ZI,'QName',true);Znd(a.db,rbb,'Short',true);Znd(a.eb,UI,'ShortObject',true);Znd(a.gb,ZI,Vie,true);Znd(a.hb,ZI,'Time',true);Znd(a.ib,ZI,'Token',true);Znd(a.jb,rbb,'UnsignedByte',true);Znd(a.kb,UI,'UnsignedByteObject',true);Znd(a.lb,XD,'UnsignedInt',true);Znd(a.mb,MI,'UnsignedIntObject',true);Znd(a.nb,cJ,'UnsignedLong',true);Znd(a.ob,WD,'UnsignedShort',true);Znd(a.pb,JI,'UnsignedShortObject',true);Rnd(a,Ewe);_9d(a)} +function Oyc(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,sne),'ELK Layered'),'Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level.'),new Ryc),sne),qqb((Csd(),Bsd),OC(GC(O3,1),Kie,237,0,[ysd,zsd,xsd,Asd,vsd,usd])))));p4c(a,sne,Lpe,Ksd(iyc));p4c(a,sne,Mpe,Ksd(jyc));p4c(a,sne,Zle,Ksd(kyc));p4c(a,sne,Npe,Ksd(lyc));p4c(a,sne,xme,Ksd(nyc));p4c(a,sne,Ope,Ksd(oyc));p4c(a,sne,Ppe,Ksd(ryc));p4c(a,sne,Qpe,Ksd(tyc));p4c(a,sne,Rpe,Ksd(uyc));p4c(a,sne,Spe,Ksd(syc));p4c(a,sne,wme,Ksd(vyc));p4c(a,sne,Tpe,Ksd(xyc));p4c(a,sne,Upe,Ksd(zyc));p4c(a,sne,Vpe,Ksd(qyc));p4c(a,sne,Loe,Ksd(hyc));p4c(a,sne,Noe,Ksd(myc));p4c(a,sne,Moe,Ksd(pyc));p4c(a,sne,Ooe,Ksd(wyc));p4c(a,sne,vme,meb(0));p4c(a,sne,Poe,Ksd(cyc));p4c(a,sne,Qoe,Ksd(dyc));p4c(a,sne,Roe,Ksd(eyc));p4c(a,sne,Yoe,Ksd(Kyc));p4c(a,sne,Zoe,Ksd(Cyc));p4c(a,sne,$oe,Ksd(Dyc));p4c(a,sne,_oe,Ksd(Gyc));p4c(a,sne,ape,Ksd(Eyc));p4c(a,sne,bpe,Ksd(Fyc));p4c(a,sne,cpe,Ksd(Myc));p4c(a,sne,dpe,Ksd(Lyc));p4c(a,sne,epe,Ksd(Iyc));p4c(a,sne,fpe,Ksd(Hyc));p4c(a,sne,gpe,Ksd(Jyc));p4c(a,sne,Eoe,Ksd(Cxc));p4c(a,sne,Foe,Ksd(Dxc));p4c(a,sne,Ioe,Ksd(Xwc));p4c(a,sne,Joe,Ksd(Ywc));p4c(a,sne,ame,Lxc);p4c(a,sne,ype,Twc);p4c(a,sne,Wpe,0);p4c(a,sne,yme,meb(1));p4c(a,sne,_le,tme);p4c(a,sne,Xpe,Ksd(Jxc));p4c(a,sne,Bme,Ksd(Vxc));p4c(a,sne,Ype,Ksd($xc));p4c(a,sne,Zpe,Ksd(Kwc));p4c(a,sne,$pe,Ksd(mwc));p4c(a,sne,tpe,Ksd(axc));p4c(a,sne,zme,(Bcb(),true));p4c(a,sne,_pe,Ksd(fxc));p4c(a,sne,aqe,Ksd(gxc));p4c(a,sne,Fme,Ksd(Fxc));p4c(a,sne,Eme,Ksd(Ixc));p4c(a,sne,bqe,Ksd(Gxc));p4c(a,sne,cqe,Nwc);p4c(a,sne,Gme,Ksd(xxc));p4c(a,sne,dqe,Ksd(wxc));p4c(a,sne,Hme,Ksd(Yxc));p4c(a,sne,eqe,Ksd(Xxc));p4c(a,sne,fqe,Ksd(Zxc));p4c(a,sne,gqe,Oxc);p4c(a,sne,hqe,Ksd(Qxc));p4c(a,sne,iqe,Ksd(Rxc));p4c(a,sne,jqe,Ksd(Sxc));p4c(a,sne,kqe,Ksd(Pxc));p4c(a,sne,eoe,Ksd(Byc));p4c(a,sne,hoe,Ksd(sxc));p4c(a,sne,noe,Ksd(rxc));p4c(a,sne,doe,Ksd(Ayc));p4c(a,sne,ioe,Ksd(mxc));p4c(a,sne,goe,Ksd(Jwc));p4c(a,sne,qoe,Ksd(Iwc));p4c(a,sne,roe,Ksd(Awc));p4c(a,sne,woe,Ksd(Bwc));p4c(a,sne,xoe,Ksd(Dwc));p4c(a,sne,yoe,Ksd(Cwc));p4c(a,sne,toe,Ksd(Hwc));p4c(a,sne,_ne,Ksd(uxc));p4c(a,sne,aoe,Ksd(vxc));p4c(a,sne,$ne,Ksd(ixc));p4c(a,sne,zoe,Ksd(Exc));p4c(a,sne,Coe,Ksd(zxc));p4c(a,sne,Zne,Ksd($wc));p4c(a,sne,Doe,Ksd(Bxc));p4c(a,sne,Goe,Ksd(Vwc));p4c(a,sne,Hoe,Ksd(Wwc));p4c(a,sne,lqe,Ksd(zwc));p4c(a,sne,Boe,Ksd(yxc));p4c(a,sne,Toe,Ksd(swc));p4c(a,sne,Uoe,Ksd(rwc));p4c(a,sne,Soe,Ksd(qwc));p4c(a,sne,Voe,Ksd(cxc));p4c(a,sne,Woe,Ksd(bxc));p4c(a,sne,Xoe,Ksd(dxc));p4c(a,sne,Tme,Ksd(Hxc));p4c(a,sne,mqe,Ksd(jxc));p4c(a,sne,$le,Ksd(Zwc));p4c(a,sne,nqe,Ksd(Qwc));p4c(a,sne,Cme,Ksd(Pwc));p4c(a,sne,soe,Ksd(Ewc));p4c(a,sne,oqe,Ksd(Wxc));p4c(a,sne,pqe,Ksd(pwc));p4c(a,sne,qqe,Ksd(exc));p4c(a,sne,rqe,Ksd(Txc));p4c(a,sne,sqe,Ksd(Mxc));p4c(a,sne,tqe,Ksd(Nxc));p4c(a,sne,loe,Ksd(oxc));p4c(a,sne,moe,Ksd(pxc));p4c(a,sne,uqe,Ksd(ayc));p4c(a,sne,boe,Ksd(nwc));p4c(a,sne,ooe,Ksd(qxc));p4c(a,sne,hpe,Ksd(Rwc));p4c(a,sne,ipe,Ksd(Owc));p4c(a,sne,vqe,Ksd(txc));p4c(a,sne,poe,Ksd(kxc));p4c(a,sne,Aoe,Ksd(Axc));p4c(a,sne,wqe,Ksd(yyc));p4c(a,sne,Yne,Ksd(Mwc));p4c(a,sne,coe,Ksd(_xc));p4c(a,sne,Koe,Ksd(Uwc));p4c(a,sne,joe,Ksd(lxc));p4c(a,sne,uoe,Ksd(Fwc));p4c(a,sne,xqe,Ksd(hxc));p4c(a,sne,koe,Ksd(nxc));p4c(a,sne,voe,Ksd(Gwc));p4c(a,sne,jpe,Ksd(ywc));p4c(a,sne,mpe,Ksd(wwc));p4c(a,sne,npe,Ksd(uwc));p4c(a,sne,ope,Ksd(vwc));p4c(a,sne,kpe,Ksd(xwc));p4c(a,sne,lpe,Ksd(twc));p4c(a,sne,foe,Ksd(_wc))} +function kee(a,b){var c,d;if(!cee){cee=new Lqb;dee=new Lqb;d=(wfe(),wfe(),++vfe,new $fe(4));Ree(d,'\t\n\r\r ');Shb(cee,pxe,d);Shb(dee,pxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,sxe);Shb(cee,nxe,d);Shb(dee,nxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,sxe);Shb(cee,nxe,d);Shb(dee,nxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,txe);Xfe(d,BD(Phb(cee,nxe),117));Shb(cee,oxe,d);Shb(dee,oxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,'-.0:AZ__az\xB7\xB7\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u02D0\u02D1\u0300\u0345\u0360\u0361\u0386\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0483\u0486\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05A1\u05A3\u05B9\u05BB\u05BD\u05BF\u05BF\u05C1\u05C2\u05C4\u05C4\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0640\u0652\u0660\u0669\u0670\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06E8\u06EA\u06ED\u06F0\u06F9\u0901\u0903\u0905\u0939\u093C\u094D\u0951\u0954\u0958\u0963\u0966\u096F\u0981\u0983\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09BC\u09BC\u09BE\u09C4\u09C7\u09C8\u09CB\u09CD\u09D7\u09D7\u09DC\u09DD\u09DF\u09E3\u09E6\u09F1\u0A02\u0A02\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3C\u0A3E\u0A42\u0A47\u0A48\u0A4B\u0A4D\u0A59\u0A5C\u0A5E\u0A5E\u0A66\u0A74\u0A81\u0A83\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABC\u0AC5\u0AC7\u0AC9\u0ACB\u0ACD\u0AE0\u0AE0\u0AE6\u0AEF\u0B01\u0B03\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3C\u0B43\u0B47\u0B48\u0B4B\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F\u0B61\u0B66\u0B6F\u0B82\u0B83\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0BBE\u0BC2\u0BC6\u0BC8\u0BCA\u0BCD\u0BD7\u0BD7\u0BE7\u0BEF\u0C01\u0C03\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C3E\u0C44\u0C46\u0C48\u0C4A\u0C4D\u0C55\u0C56\u0C60\u0C61\u0C66\u0C6F\u0C82\u0C83\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CBE\u0CC4\u0CC6\u0CC8\u0CCA\u0CCD\u0CD5\u0CD6\u0CDE\u0CDE\u0CE0\u0CE1\u0CE6\u0CEF\u0D02\u0D03\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D3E\u0D43\u0D46\u0D48\u0D4A\u0D4D\u0D57\u0D57\u0D60\u0D61\u0D66\u0D6F\u0E01\u0E2E\u0E30\u0E3A\u0E40\u0E4E\u0E50\u0E59\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB9\u0EBB\u0EBD\u0EC0\u0EC4\u0EC6\u0EC6\u0EC8\u0ECD\u0ED0\u0ED9\u0F18\u0F19\u0F20\u0F29\u0F35\u0F35\u0F37\u0F37\u0F39\u0F39\u0F3E\u0F47\u0F49\u0F69\u0F71\u0F84\u0F86\u0F8B\u0F90\u0F95\u0F97\u0F97\u0F99\u0FAD\u0FB1\u0FB7\u0FB9\u0FB9\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u20D0\u20DC\u20E1\u20E1\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302F\u3031\u3035\u3041\u3094\u3099\u309A\u309D\u309E\u30A1\u30FA\u30FC\u30FE\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3');Shb(cee,qxe,d);Shb(dee,qxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,txe);Ufe(d,95,95);Ufe(d,58,58);Shb(cee,rxe,d);Shb(dee,rxe,_fe(d))}c=b?BD(Phb(cee,a),136):BD(Phb(dee,a),136);return c} +function _9d(a){Bnd(a.a,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anySimpleType']));Bnd(a.b,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anyType',Sve,Qve]));Bnd(BD(qud(ZKd(a.b),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,fue,':mixed']));Bnd(BD(qud(ZKd(a.b),1),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,Dwe,Fwe,fue,':1',Owe,'lax']));Bnd(BD(qud(ZKd(a.b),2),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,vwe,Dwe,Fwe,fue,':2',Owe,'lax']));Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anyURI',Cwe,ywe]));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[fue,'base64Binary',Cwe,ywe]));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[fue,Khe,Cwe,ywe]));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[fue,'boolean:Object',cwe,Khe]));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[fue,Eve]));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[fue,'byte:Object',cwe,Eve]));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[fue,'date',Cwe,ywe]));Bnd(a.k,Rve,OC(GC(ZI,1),nie,2,6,[fue,'dateTime',Cwe,ywe]));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[fue,'decimal',Cwe,ywe]));Bnd(a.o,Rve,OC(GC(ZI,1),nie,2,6,[fue,Gve,Cwe,ywe]));Bnd(a.p,Rve,OC(GC(ZI,1),nie,2,6,[fue,'double:Object',cwe,Gve]));Bnd(a.q,Rve,OC(GC(ZI,1),nie,2,6,[fue,'duration',Cwe,ywe]));Bnd(a.s,Rve,OC(GC(ZI,1),nie,2,6,[fue,'ENTITIES',cwe,Pwe,Qwe,'1']));Bnd(a.r,Rve,OC(GC(ZI,1),nie,2,6,[fue,Pwe,zwe,Rwe]));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[fue,Rwe,cwe,Swe]));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[fue,Hve,Cwe,ywe]));Bnd(a.v,Rve,OC(GC(ZI,1),nie,2,6,[fue,'float:Object',cwe,Hve]));Bnd(a.w,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gDay',Cwe,ywe]));Bnd(a.B,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gMonth',Cwe,ywe]));Bnd(a.A,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gMonthDay',Cwe,ywe]));Bnd(a.C,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gYear',Cwe,ywe]));Bnd(a.D,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gYearMonth',Cwe,ywe]));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[fue,'hexBinary',Cwe,ywe]));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[fue,'ID',cwe,Swe]));Bnd(a.H,Rve,OC(GC(ZI,1),nie,2,6,[fue,'IDREF',cwe,Swe]));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[fue,'IDREFS',cwe,Twe,Qwe,'1']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[fue,Twe,zwe,'IDREF']));Bnd(a.K,Rve,OC(GC(ZI,1),nie,2,6,[fue,Ive]));Bnd(a.M,Rve,OC(GC(ZI,1),nie,2,6,[fue,Uwe]));Bnd(a.L,Rve,OC(GC(ZI,1),nie,2,6,[fue,'int:Object',cwe,Ive]));Bnd(a.P,Rve,OC(GC(ZI,1),nie,2,6,[fue,'language',cwe,Vwe,Wwe,Xwe]));Bnd(a.Q,Rve,OC(GC(ZI,1),nie,2,6,[fue,Jve]));Bnd(a.R,Rve,OC(GC(ZI,1),nie,2,6,[fue,'long:Object',cwe,Jve]));Bnd(a.S,Rve,OC(GC(ZI,1),nie,2,6,[fue,'Name',cwe,Vwe,Wwe,Ywe]));Bnd(a.T,Rve,OC(GC(ZI,1),nie,2,6,[fue,Swe,cwe,'Name',Wwe,Zwe]));Bnd(a.U,Rve,OC(GC(ZI,1),nie,2,6,[fue,'negativeInteger',cwe,$we,_we,'-1']));Bnd(a.V,Rve,OC(GC(ZI,1),nie,2,6,[fue,axe,cwe,Vwe,Wwe,'\\c+']));Bnd(a.X,Rve,OC(GC(ZI,1),nie,2,6,[fue,'NMTOKENS',cwe,bxe,Qwe,'1']));Bnd(a.W,Rve,OC(GC(ZI,1),nie,2,6,[fue,bxe,zwe,axe]));Bnd(a.Y,Rve,OC(GC(ZI,1),nie,2,6,[fue,cxe,cwe,Uwe,dxe,'0']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[fue,$we,cwe,Uwe,_we,'0']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[fue,exe,cwe,Mhe,Cwe,'replace']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[fue,'NOTATION',Cwe,ywe]));Bnd(a.ab,Rve,OC(GC(ZI,1),nie,2,6,[fue,'positiveInteger',cwe,cxe,dxe,'1']));Bnd(a.bb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'processingInstruction_._type',Sve,'empty']));Bnd(BD(qud(ZKd(a.bb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'data']));Bnd(BD(qud(ZKd(a.bb),1),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,bue]));Bnd(a.cb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'QName',Cwe,ywe]));Bnd(a.db,Rve,OC(GC(ZI,1),nie,2,6,[fue,Kve]));Bnd(a.eb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'short:Object',cwe,Kve]));Bnd(a.fb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'simpleAnyType',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[fue,':3',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),1),34),Rve,OC(GC(ZI,1),nie,2,6,[fue,':4',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),2),18),Rve,OC(GC(ZI,1),nie,2,6,[fue,':5',Sve,twe]));Bnd(a.gb,Rve,OC(GC(ZI,1),nie,2,6,[fue,Mhe,Cwe,'preserve']));Bnd(a.hb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'time',Cwe,ywe]));Bnd(a.ib,Rve,OC(GC(ZI,1),nie,2,6,[fue,Vwe,cwe,exe,Cwe,ywe]));Bnd(a.jb,Rve,OC(GC(ZI,1),nie,2,6,[fue,fxe,_we,'255',dxe,'0']));Bnd(a.kb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedByte:Object',cwe,fxe]));Bnd(a.lb,Rve,OC(GC(ZI,1),nie,2,6,[fue,gxe,_we,'4294967295',dxe,'0']));Bnd(a.mb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedInt:Object',cwe,gxe]));Bnd(a.nb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedLong',cwe,cxe,_we,hxe,dxe,'0']));Bnd(a.ob,Rve,OC(GC(ZI,1),nie,2,6,[fue,ixe,_we,'65535',dxe,'0']));Bnd(a.pb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedShort:Object',cwe,ixe]));Bnd(a.qb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'',Sve,Qve]));Bnd(BD(qud(ZKd(a.qb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,fue,':mixed']));Bnd(BD(qud(ZKd(a.qb),1),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'xmlns:prefix']));Bnd(BD(qud(ZKd(a.qb),2),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'xsi:schemaLocation']));Bnd(BD(qud(ZKd(a.qb),3),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,'cDATA',Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),4),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,'comment',Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),5),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,jxe,Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),6),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,Ite,Awe,Bwe]))} +function tvd(a){return dfb('_UI_EMFDiagnostic_marker',a)?'EMF Problem':dfb('_UI_CircularContainment_diagnostic',a)?'An object may not circularly contain itself':dfb(sue,a)?'Wrong character.':dfb(tue,a)?'Invalid reference number.':dfb(uue,a)?'A character is required after \\.':dfb(vue,a)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":dfb(wue,a)?"'(?<' or '(?<!' is expected.":dfb(xue,a)?'A comment is not terminated.':dfb(yue,a)?"')' is expected.":dfb(zue,a)?'Unexpected end of the pattern in a modifier group.':dfb(Aue,a)?"':' is expected.":dfb(Bue,a)?'Unexpected end of the pattern in a conditional group.':dfb(Cue,a)?'A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.':dfb(Due,a)?'There are more than three choices in a conditional group.':dfb(Eue,a)?'A character in U+0040-U+005f must follow \\c.':dfb(Fue,a)?"A '{' is required before a character category.":dfb(Gue,a)?"A property name is not closed by '}'.":dfb(Hue,a)?'Unexpected meta character.':dfb(Iue,a)?'Unknown property.':dfb(Jue,a)?"A POSIX character class must be closed by ':]'.":dfb(Kue,a)?'Unexpected end of the pattern in a character class.':dfb(Lue,a)?'Unknown name for a POSIX character class.':dfb('parser.cc.4',a)?"'-' is invalid here.":dfb(Mue,a)?"']' is expected.":dfb(Nue,a)?"'[' is invalid in a character class. Write '\\['.":dfb(Oue,a)?"']' is invalid in a character class. Write '\\]'.":dfb(Pue,a)?"'-' is an invalid character range. Write '\\-'.":dfb(Que,a)?"'[' is expected.":dfb(Rue,a)?"')' or '-[' or '+[' or '&[' is expected.":dfb(Sue,a)?'The range end code point is less than the start code point.':dfb(Tue,a)?'Invalid Unicode hex notation.':dfb(Uue,a)?'Overflow in a hex notation.':dfb(Vue,a)?"'\\x{' must be closed by '}'.":dfb(Wue,a)?'Invalid Unicode code point.':dfb(Xue,a)?'An anchor must not be here.':dfb(Yue,a)?'This expression is not supported in the current option setting.':dfb(Zue,a)?'Invalid quantifier. A digit is expected.':dfb($ue,a)?"Invalid quantifier. Invalid quantity or a '}' is missing.":dfb(_ue,a)?"Invalid quantifier. A digit or '}' is expected.":dfb(ave,a)?'Invalid quantifier. A min quantity must be <= a max quantity.':dfb(bve,a)?'Invalid quantifier. A quantity value overflow.':dfb('_UI_PackageRegistry_extensionpoint',a)?'Ecore Package Registry for Generated Packages':dfb('_UI_DynamicPackageRegistry_extensionpoint',a)?'Ecore Package Registry for Dynamic Packages':dfb('_UI_FactoryRegistry_extensionpoint',a)?'Ecore Factory Override Registry':dfb('_UI_URIExtensionParserRegistry_extensionpoint',a)?'URI Extension Parser Registry':dfb('_UI_URIProtocolParserRegistry_extensionpoint',a)?'URI Protocol Parser Registry':dfb('_UI_URIContentParserRegistry_extensionpoint',a)?'URI Content Parser Registry':dfb('_UI_ContentHandlerRegistry_extensionpoint',a)?'Content Handler Registry':dfb('_UI_URIMappingRegistry_extensionpoint',a)?'URI Converter Mapping Registry':dfb('_UI_PackageRegistryImplementation_extensionpoint',a)?'Ecore Package Registry Implementation':dfb('_UI_ValidationDelegateRegistry_extensionpoint',a)?'Validation Delegate Registry':dfb('_UI_SettingDelegateRegistry_extensionpoint',a)?'Feature Setting Delegate Factory Registry':dfb('_UI_InvocationDelegateRegistry_extensionpoint',a)?'Operation Invocation Delegate Factory Registry':dfb('_UI_EClassInterfaceNotAbstract_diagnostic',a)?'A class that is an interface must also be abstract':dfb('_UI_EClassNoCircularSuperTypes_diagnostic',a)?'A class may not be a super type of itself':dfb('_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic',a)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":dfb('_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic',a)?'The opposite of the opposite may not be a reference different from this one':dfb('_UI_EReferenceOppositeNotFeatureOfType_diagnostic',a)?"The opposite must be a feature of the reference's type":dfb('_UI_EReferenceTransientOppositeNotTransient_diagnostic',a)?'The opposite of a transient reference must be transient if it is proxy resolving':dfb('_UI_EReferenceOppositeBothContainment_diagnostic',a)?'The opposite of a containment reference must not be a containment reference':dfb('_UI_EReferenceConsistentUnique_diagnostic',a)?'A containment or bidirectional reference must be unique if its upper bound is different from 1':dfb('_UI_ETypedElementNoType_diagnostic',a)?'The typed element must have a type':dfb('_UI_EAttributeNoDataType_diagnostic',a)?'The generic attribute type must not refer to a class':dfb('_UI_EReferenceNoClass_diagnostic',a)?'The generic reference type must not refer to a data type':dfb('_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic',a)?"A generic type can't refer to both a type parameter and a classifier":dfb('_UI_EGenericTypeNoClass_diagnostic',a)?'A generic super type must refer to a class':dfb('_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic',a)?'A generic type in this context must refer to a classifier or a type parameter':dfb('_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic',a)?'A generic type may have bounds only when used as a type argument':dfb('_UI_EGenericTypeNoUpperAndLowerBound_diagnostic',a)?'A generic type must not have both a lower and an upper bound':dfb('_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic',a)?'A generic type with bounds must not also refer to a type parameter or classifier':dfb('_UI_EGenericTypeNoArguments_diagnostic',a)?'A generic type may have arguments only if it refers to a classifier':dfb('_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic',a)?'A generic type may only refer to a type parameter that is in scope':a} +function Aod(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(a.r)return;a.r=true;pnd(a,'graph');cod(a,'graph');dod(a,yte);Gnd(a.o,'T');wtd(_Kd(a.a),a.p);wtd(_Kd(a.f),a.a);wtd(_Kd(a.n),a.f);wtd(_Kd(a.g),a.n);wtd(_Kd(a.c),a.n);wtd(_Kd(a.i),a.c);wtd(_Kd(a.j),a.c);wtd(_Kd(a.d),a.f);wtd(_Kd(a.e),a.a);Xnd(a.p,P3,Ile,true,true,false);o=Dnd(a.p,a.p,'setProperty');p=Hnd(o);j=Nnd(a.o);k=(c=(d=new UQd,d),c);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);l=Ond(p);PQd(k,l);Fnd(o,j,Ate);j=Ond(p);Fnd(o,j,Bte);o=Dnd(a.p,null,'getProperty');p=Hnd(o);j=Nnd(a.o);k=Ond(p);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Fnd(o,j,Ate);j=Ond(p);n=xId(o,j,null);!!n&&n.Fi();o=Dnd(a.p,a.wb.e,'hasProperty');j=Nnd(a.o);k=(e=(f=new UQd,f),e);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Fnd(o,j,Ate);o=Dnd(a.p,a.p,'copyProperties');End(o,a.p,Cte);o=Dnd(a.p,null,'getAllProperties');j=Nnd(a.wb.P);k=Nnd(a.o);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);l=(g=(h=new UQd,h),g);wtd((!k.d&&(k.d=new xMd(j5,k,1)),k.d),l);k=Nnd(a.wb.M);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);m=xId(o,j,null);!!m&&m.Fi();Xnd(a.a,x2,Xse,true,false,true);_nd(BD(qud(ZKd(a.a),0),18),a.k,null,Dte,0,-1,x2,false,false,true,true,false,false,false);Xnd(a.f,C2,Zse,true,false,true);_nd(BD(qud(ZKd(a.f),0),18),a.g,BD(qud(ZKd(a.g),0),18),'labels',0,-1,C2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.f),1),34),a.wb._,Ete,null,0,1,C2,false,false,true,false,true,false);Xnd(a.n,G2,'ElkShape',true,false,true);Vnd(BD(qud(ZKd(a.n),0),34),a.wb.t,Fte,$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),1),34),a.wb.t,Gte,$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),2),34),a.wb.t,'x',$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),3),34),a.wb.t,'y',$je,1,1,G2,false,false,true,false,true,false);o=Dnd(a.n,null,'setDimensions');End(o,a.wb.t,Gte);End(o,a.wb.t,Fte);o=Dnd(a.n,null,'setLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.g,D2,dte,false,false,true);_nd(BD(qud(ZKd(a.g),0),18),a.f,BD(qud(ZKd(a.f),0),18),Hte,0,1,D2,false,false,true,false,false,false,false);Vnd(BD(qud(ZKd(a.g),1),34),a.wb._,Ite,'',0,1,D2,false,false,true,false,true,false);Xnd(a.c,z2,$se,true,false,true);_nd(BD(qud(ZKd(a.c),0),18),a.d,BD(qud(ZKd(a.d),1),18),'outgoingEdges',0,-1,z2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.c),1),18),a.d,BD(qud(ZKd(a.d),2),18),'incomingEdges',0,-1,z2,false,false,true,false,true,false,false);Xnd(a.i,E2,ete,false,false,true);_nd(BD(qud(ZKd(a.i),0),18),a.j,BD(qud(ZKd(a.j),0),18),'ports',0,-1,E2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.i),1),18),a.i,BD(qud(ZKd(a.i),2),18),Jte,0,-1,E2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.i),2),18),a.i,BD(qud(ZKd(a.i),1),18),Hte,0,1,E2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.i),3),18),a.d,BD(qud(ZKd(a.d),0),18),'containedEdges',0,-1,E2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.i),4),34),a.wb.e,Kte,null,0,1,E2,true,true,false,false,true,true);Xnd(a.j,F2,fte,false,false,true);_nd(BD(qud(ZKd(a.j),0),18),a.i,BD(qud(ZKd(a.i),0),18),Hte,0,1,F2,false,false,true,false,false,false,false);Xnd(a.d,B2,_se,false,false,true);_nd(BD(qud(ZKd(a.d),0),18),a.i,BD(qud(ZKd(a.i),3),18),'containingNode',0,1,B2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.d),1),18),a.c,BD(qud(ZKd(a.c),0),18),Lte,0,-1,B2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.d),2),18),a.c,BD(qud(ZKd(a.c),1),18),Mte,0,-1,B2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.d),3),18),a.e,BD(qud(ZKd(a.e),5),18),Nte,0,-1,B2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.d),4),34),a.wb.e,'hyperedge',null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),5),34),a.wb.e,Kte,null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),6),34),a.wb.e,'selfloop',null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),7),34),a.wb.e,'connected',null,0,1,B2,true,true,false,false,true,true);Xnd(a.b,y2,Yse,false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.wb.t,'x',$je,1,1,y2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.b),1),34),a.wb.t,'y',$je,1,1,y2,false,false,true,false,true,false);o=Dnd(a.b,null,'set');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.e,A2,ate,false,false,true);Vnd(BD(qud(ZKd(a.e),0),34),a.wb.t,'startX',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),1),34),a.wb.t,'startY',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),2),34),a.wb.t,'endX',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),3),34),a.wb.t,'endY',null,0,1,A2,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.e),4),18),a.b,null,Ote,0,-1,A2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.e),5),18),a.d,BD(qud(ZKd(a.d),3),18),Hte,0,1,A2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.e),6),18),a.c,null,Pte,0,1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),7),18),a.c,null,Qte,0,1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),8),18),a.e,BD(qud(ZKd(a.e),9),18),Rte,0,-1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),9),18),a.e,BD(qud(ZKd(a.e),8),18),Ste,0,-1,A2,false,false,true,false,true,false,false);Vnd(BD(qud(ZKd(a.e),10),34),a.wb._,Ete,null,0,1,A2,false,false,true,false,true,false);o=Dnd(a.e,null,'setStartLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');o=Dnd(a.e,null,'setEndLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.k,CK,'ElkPropertyToValueMapEntry',false,false,false);j=Nnd(a.o);k=(i=(b=new UQd,b),i);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Wnd(BD(qud(ZKd(a.k),0),34),j,'key',CK,false,false,true,false);Vnd(BD(qud(ZKd(a.k),1),34),a.s,Bte,null,0,1,CK,false,false,true,false,true,false);Znd(a.o,Q3,'IProperty',true);Znd(a.s,SI,'PropertyValue',true);Rnd(a,yte)} +function lde(){lde=ccb;kde=KC(SD,wte,25,Tje,15,1);kde[9]=35;kde[10]=19;kde[13]=19;kde[32]=51;kde[33]=49;kde[34]=33;ylb(kde,35,38,49);kde[38]=1;ylb(kde,39,45,49);ylb(kde,45,47,-71);kde[47]=49;ylb(kde,48,58,-71);kde[58]=61;kde[59]=49;kde[60]=1;kde[61]=49;kde[62]=33;ylb(kde,63,65,49);ylb(kde,65,91,-3);ylb(kde,91,93,33);kde[93]=1;kde[94]=33;kde[95]=-3;kde[96]=33;ylb(kde,97,123,-3);ylb(kde,123,183,33);kde[183]=-87;ylb(kde,184,192,33);ylb(kde,192,215,-19);kde[215]=33;ylb(kde,216,247,-19);kde[247]=33;ylb(kde,248,306,-19);ylb(kde,306,308,33);ylb(kde,308,319,-19);ylb(kde,319,321,33);ylb(kde,321,329,-19);kde[329]=33;ylb(kde,330,383,-19);kde[383]=33;ylb(kde,384,452,-19);ylb(kde,452,461,33);ylb(kde,461,497,-19);ylb(kde,497,500,33);ylb(kde,500,502,-19);ylb(kde,502,506,33);ylb(kde,506,536,-19);ylb(kde,536,592,33);ylb(kde,592,681,-19);ylb(kde,681,699,33);ylb(kde,699,706,-19);ylb(kde,706,720,33);ylb(kde,720,722,-87);ylb(kde,722,768,33);ylb(kde,768,838,-87);ylb(kde,838,864,33);ylb(kde,864,866,-87);ylb(kde,866,902,33);kde[902]=-19;kde[903]=-87;ylb(kde,904,907,-19);kde[907]=33;kde[908]=-19;kde[909]=33;ylb(kde,910,930,-19);kde[930]=33;ylb(kde,931,975,-19);kde[975]=33;ylb(kde,976,983,-19);ylb(kde,983,986,33);kde[986]=-19;kde[987]=33;kde[988]=-19;kde[989]=33;kde[990]=-19;kde[991]=33;kde[992]=-19;kde[993]=33;ylb(kde,994,1012,-19);ylb(kde,1012,1025,33);ylb(kde,1025,1037,-19);kde[1037]=33;ylb(kde,1038,1104,-19);kde[1104]=33;ylb(kde,1105,1117,-19);kde[1117]=33;ylb(kde,1118,1154,-19);kde[1154]=33;ylb(kde,1155,1159,-87);ylb(kde,1159,1168,33);ylb(kde,1168,1221,-19);ylb(kde,1221,1223,33);ylb(kde,1223,1225,-19);ylb(kde,1225,1227,33);ylb(kde,1227,1229,-19);ylb(kde,1229,1232,33);ylb(kde,1232,1260,-19);ylb(kde,1260,1262,33);ylb(kde,1262,1270,-19);ylb(kde,1270,1272,33);ylb(kde,1272,1274,-19);ylb(kde,1274,1329,33);ylb(kde,1329,1367,-19);ylb(kde,1367,1369,33);kde[1369]=-19;ylb(kde,1370,1377,33);ylb(kde,1377,1415,-19);ylb(kde,1415,1425,33);ylb(kde,1425,1442,-87);kde[1442]=33;ylb(kde,1443,1466,-87);kde[1466]=33;ylb(kde,1467,1470,-87);kde[1470]=33;kde[1471]=-87;kde[1472]=33;ylb(kde,1473,1475,-87);kde[1475]=33;kde[1476]=-87;ylb(kde,1477,1488,33);ylb(kde,1488,1515,-19);ylb(kde,1515,1520,33);ylb(kde,1520,1523,-19);ylb(kde,1523,1569,33);ylb(kde,1569,1595,-19);ylb(kde,1595,1600,33);kde[1600]=-87;ylb(kde,1601,1611,-19);ylb(kde,1611,1619,-87);ylb(kde,1619,1632,33);ylb(kde,1632,1642,-87);ylb(kde,1642,1648,33);kde[1648]=-87;ylb(kde,1649,1720,-19);ylb(kde,1720,1722,33);ylb(kde,1722,1727,-19);kde[1727]=33;ylb(kde,1728,1743,-19);kde[1743]=33;ylb(kde,1744,1748,-19);kde[1748]=33;kde[1749]=-19;ylb(kde,1750,1765,-87);ylb(kde,1765,1767,-19);ylb(kde,1767,1769,-87);kde[1769]=33;ylb(kde,1770,1774,-87);ylb(kde,1774,1776,33);ylb(kde,1776,1786,-87);ylb(kde,1786,2305,33);ylb(kde,2305,2308,-87);kde[2308]=33;ylb(kde,2309,2362,-19);ylb(kde,2362,2364,33);kde[2364]=-87;kde[2365]=-19;ylb(kde,2366,2382,-87);ylb(kde,2382,2385,33);ylb(kde,2385,2389,-87);ylb(kde,2389,2392,33);ylb(kde,2392,2402,-19);ylb(kde,2402,2404,-87);ylb(kde,2404,2406,33);ylb(kde,2406,2416,-87);ylb(kde,2416,2433,33);ylb(kde,2433,2436,-87);kde[2436]=33;ylb(kde,2437,2445,-19);ylb(kde,2445,2447,33);ylb(kde,2447,2449,-19);ylb(kde,2449,2451,33);ylb(kde,2451,2473,-19);kde[2473]=33;ylb(kde,2474,2481,-19);kde[2481]=33;kde[2482]=-19;ylb(kde,2483,2486,33);ylb(kde,2486,2490,-19);ylb(kde,2490,2492,33);kde[2492]=-87;kde[2493]=33;ylb(kde,2494,2501,-87);ylb(kde,2501,2503,33);ylb(kde,2503,2505,-87);ylb(kde,2505,2507,33);ylb(kde,2507,2510,-87);ylb(kde,2510,2519,33);kde[2519]=-87;ylb(kde,2520,2524,33);ylb(kde,2524,2526,-19);kde[2526]=33;ylb(kde,2527,2530,-19);ylb(kde,2530,2532,-87);ylb(kde,2532,2534,33);ylb(kde,2534,2544,-87);ylb(kde,2544,2546,-19);ylb(kde,2546,2562,33);kde[2562]=-87;ylb(kde,2563,2565,33);ylb(kde,2565,2571,-19);ylb(kde,2571,2575,33);ylb(kde,2575,2577,-19);ylb(kde,2577,2579,33);ylb(kde,2579,2601,-19);kde[2601]=33;ylb(kde,2602,2609,-19);kde[2609]=33;ylb(kde,2610,2612,-19);kde[2612]=33;ylb(kde,2613,2615,-19);kde[2615]=33;ylb(kde,2616,2618,-19);ylb(kde,2618,2620,33);kde[2620]=-87;kde[2621]=33;ylb(kde,2622,2627,-87);ylb(kde,2627,2631,33);ylb(kde,2631,2633,-87);ylb(kde,2633,2635,33);ylb(kde,2635,2638,-87);ylb(kde,2638,2649,33);ylb(kde,2649,2653,-19);kde[2653]=33;kde[2654]=-19;ylb(kde,2655,2662,33);ylb(kde,2662,2674,-87);ylb(kde,2674,2677,-19);ylb(kde,2677,2689,33);ylb(kde,2689,2692,-87);kde[2692]=33;ylb(kde,2693,2700,-19);kde[2700]=33;kde[2701]=-19;kde[2702]=33;ylb(kde,2703,2706,-19);kde[2706]=33;ylb(kde,2707,2729,-19);kde[2729]=33;ylb(kde,2730,2737,-19);kde[2737]=33;ylb(kde,2738,2740,-19);kde[2740]=33;ylb(kde,2741,2746,-19);ylb(kde,2746,2748,33);kde[2748]=-87;kde[2749]=-19;ylb(kde,2750,2758,-87);kde[2758]=33;ylb(kde,2759,2762,-87);kde[2762]=33;ylb(kde,2763,2766,-87);ylb(kde,2766,2784,33);kde[2784]=-19;ylb(kde,2785,2790,33);ylb(kde,2790,2800,-87);ylb(kde,2800,2817,33);ylb(kde,2817,2820,-87);kde[2820]=33;ylb(kde,2821,2829,-19);ylb(kde,2829,2831,33);ylb(kde,2831,2833,-19);ylb(kde,2833,2835,33);ylb(kde,2835,2857,-19);kde[2857]=33;ylb(kde,2858,2865,-19);kde[2865]=33;ylb(kde,2866,2868,-19);ylb(kde,2868,2870,33);ylb(kde,2870,2874,-19);ylb(kde,2874,2876,33);kde[2876]=-87;kde[2877]=-19;ylb(kde,2878,2884,-87);ylb(kde,2884,2887,33);ylb(kde,2887,2889,-87);ylb(kde,2889,2891,33);ylb(kde,2891,2894,-87);ylb(kde,2894,2902,33);ylb(kde,2902,2904,-87);ylb(kde,2904,2908,33);ylb(kde,2908,2910,-19);kde[2910]=33;ylb(kde,2911,2914,-19);ylb(kde,2914,2918,33);ylb(kde,2918,2928,-87);ylb(kde,2928,2946,33);ylb(kde,2946,2948,-87);kde[2948]=33;ylb(kde,2949,2955,-19);ylb(kde,2955,2958,33);ylb(kde,2958,2961,-19);kde[2961]=33;ylb(kde,2962,2966,-19);ylb(kde,2966,2969,33);ylb(kde,2969,2971,-19);kde[2971]=33;kde[2972]=-19;kde[2973]=33;ylb(kde,2974,2976,-19);ylb(kde,2976,2979,33);ylb(kde,2979,2981,-19);ylb(kde,2981,2984,33);ylb(kde,2984,2987,-19);ylb(kde,2987,2990,33);ylb(kde,2990,2998,-19);kde[2998]=33;ylb(kde,2999,3002,-19);ylb(kde,3002,3006,33);ylb(kde,3006,3011,-87);ylb(kde,3011,3014,33);ylb(kde,3014,3017,-87);kde[3017]=33;ylb(kde,3018,3022,-87);ylb(kde,3022,3031,33);kde[3031]=-87;ylb(kde,3032,3047,33);ylb(kde,3047,3056,-87);ylb(kde,3056,3073,33);ylb(kde,3073,3076,-87);kde[3076]=33;ylb(kde,3077,3085,-19);kde[3085]=33;ylb(kde,3086,3089,-19);kde[3089]=33;ylb(kde,3090,3113,-19);kde[3113]=33;ylb(kde,3114,3124,-19);kde[3124]=33;ylb(kde,3125,3130,-19);ylb(kde,3130,3134,33);ylb(kde,3134,3141,-87);kde[3141]=33;ylb(kde,3142,3145,-87);kde[3145]=33;ylb(kde,3146,3150,-87);ylb(kde,3150,3157,33);ylb(kde,3157,3159,-87);ylb(kde,3159,3168,33);ylb(kde,3168,3170,-19);ylb(kde,3170,3174,33);ylb(kde,3174,3184,-87);ylb(kde,3184,3202,33);ylb(kde,3202,3204,-87);kde[3204]=33;ylb(kde,3205,3213,-19);kde[3213]=33;ylb(kde,3214,3217,-19);kde[3217]=33;ylb(kde,3218,3241,-19);kde[3241]=33;ylb(kde,3242,3252,-19);kde[3252]=33;ylb(kde,3253,3258,-19);ylb(kde,3258,3262,33);ylb(kde,3262,3269,-87);kde[3269]=33;ylb(kde,3270,3273,-87);kde[3273]=33;ylb(kde,3274,3278,-87);ylb(kde,3278,3285,33);ylb(kde,3285,3287,-87);ylb(kde,3287,3294,33);kde[3294]=-19;kde[3295]=33;ylb(kde,3296,3298,-19);ylb(kde,3298,3302,33);ylb(kde,3302,3312,-87);ylb(kde,3312,3330,33);ylb(kde,3330,3332,-87);kde[3332]=33;ylb(kde,3333,3341,-19);kde[3341]=33;ylb(kde,3342,3345,-19);kde[3345]=33;ylb(kde,3346,3369,-19);kde[3369]=33;ylb(kde,3370,3386,-19);ylb(kde,3386,3390,33);ylb(kde,3390,3396,-87);ylb(kde,3396,3398,33);ylb(kde,3398,3401,-87);kde[3401]=33;ylb(kde,3402,3406,-87);ylb(kde,3406,3415,33);kde[3415]=-87;ylb(kde,3416,3424,33);ylb(kde,3424,3426,-19);ylb(kde,3426,3430,33);ylb(kde,3430,3440,-87);ylb(kde,3440,3585,33);ylb(kde,3585,3631,-19);kde[3631]=33;kde[3632]=-19;kde[3633]=-87;ylb(kde,3634,3636,-19);ylb(kde,3636,3643,-87);ylb(kde,3643,3648,33);ylb(kde,3648,3654,-19);ylb(kde,3654,3663,-87);kde[3663]=33;ylb(kde,3664,3674,-87);ylb(kde,3674,3713,33);ylb(kde,3713,3715,-19);kde[3715]=33;kde[3716]=-19;ylb(kde,3717,3719,33);ylb(kde,3719,3721,-19);kde[3721]=33;kde[3722]=-19;ylb(kde,3723,3725,33);kde[3725]=-19;ylb(kde,3726,3732,33);ylb(kde,3732,3736,-19);kde[3736]=33;ylb(kde,3737,3744,-19);kde[3744]=33;ylb(kde,3745,3748,-19);kde[3748]=33;kde[3749]=-19;kde[3750]=33;kde[3751]=-19;ylb(kde,3752,3754,33);ylb(kde,3754,3756,-19);kde[3756]=33;ylb(kde,3757,3759,-19);kde[3759]=33;kde[3760]=-19;kde[3761]=-87;ylb(kde,3762,3764,-19);ylb(kde,3764,3770,-87);kde[3770]=33;ylb(kde,3771,3773,-87);kde[3773]=-19;ylb(kde,3774,3776,33);ylb(kde,3776,3781,-19);kde[3781]=33;kde[3782]=-87;kde[3783]=33;ylb(kde,3784,3790,-87);ylb(kde,3790,3792,33);ylb(kde,3792,3802,-87);ylb(kde,3802,3864,33);ylb(kde,3864,3866,-87);ylb(kde,3866,3872,33);ylb(kde,3872,3882,-87);ylb(kde,3882,3893,33);kde[3893]=-87;kde[3894]=33;kde[3895]=-87;kde[3896]=33;kde[3897]=-87;ylb(kde,3898,3902,33);ylb(kde,3902,3904,-87);ylb(kde,3904,3912,-19);kde[3912]=33;ylb(kde,3913,3946,-19);ylb(kde,3946,3953,33);ylb(kde,3953,3973,-87);kde[3973]=33;ylb(kde,3974,3980,-87);ylb(kde,3980,3984,33);ylb(kde,3984,3990,-87);kde[3990]=33;kde[3991]=-87;kde[3992]=33;ylb(kde,3993,4014,-87);ylb(kde,4014,4017,33);ylb(kde,4017,4024,-87);kde[4024]=33;kde[4025]=-87;ylb(kde,4026,4256,33);ylb(kde,4256,4294,-19);ylb(kde,4294,4304,33);ylb(kde,4304,4343,-19);ylb(kde,4343,4352,33);kde[4352]=-19;kde[4353]=33;ylb(kde,4354,4356,-19);kde[4356]=33;ylb(kde,4357,4360,-19);kde[4360]=33;kde[4361]=-19;kde[4362]=33;ylb(kde,4363,4365,-19);kde[4365]=33;ylb(kde,4366,4371,-19);ylb(kde,4371,4412,33);kde[4412]=-19;kde[4413]=33;kde[4414]=-19;kde[4415]=33;kde[4416]=-19;ylb(kde,4417,4428,33);kde[4428]=-19;kde[4429]=33;kde[4430]=-19;kde[4431]=33;kde[4432]=-19;ylb(kde,4433,4436,33);ylb(kde,4436,4438,-19);ylb(kde,4438,4441,33);kde[4441]=-19;ylb(kde,4442,4447,33);ylb(kde,4447,4450,-19);kde[4450]=33;kde[4451]=-19;kde[4452]=33;kde[4453]=-19;kde[4454]=33;kde[4455]=-19;kde[4456]=33;kde[4457]=-19;ylb(kde,4458,4461,33);ylb(kde,4461,4463,-19);ylb(kde,4463,4466,33);ylb(kde,4466,4468,-19);kde[4468]=33;kde[4469]=-19;ylb(kde,4470,4510,33);kde[4510]=-19;ylb(kde,4511,4520,33);kde[4520]=-19;ylb(kde,4521,4523,33);kde[4523]=-19;ylb(kde,4524,4526,33);ylb(kde,4526,4528,-19);ylb(kde,4528,4535,33);ylb(kde,4535,4537,-19);kde[4537]=33;kde[4538]=-19;kde[4539]=33;ylb(kde,4540,4547,-19);ylb(kde,4547,4587,33);kde[4587]=-19;ylb(kde,4588,4592,33);kde[4592]=-19;ylb(kde,4593,4601,33);kde[4601]=-19;ylb(kde,4602,7680,33);ylb(kde,7680,7836,-19);ylb(kde,7836,7840,33);ylb(kde,7840,7930,-19);ylb(kde,7930,7936,33);ylb(kde,7936,7958,-19);ylb(kde,7958,7960,33);ylb(kde,7960,7966,-19);ylb(kde,7966,7968,33);ylb(kde,7968,8006,-19);ylb(kde,8006,8008,33);ylb(kde,8008,8014,-19);ylb(kde,8014,8016,33);ylb(kde,8016,8024,-19);kde[8024]=33;kde[8025]=-19;kde[8026]=33;kde[8027]=-19;kde[8028]=33;kde[8029]=-19;kde[8030]=33;ylb(kde,8031,8062,-19);ylb(kde,8062,8064,33);ylb(kde,8064,8117,-19);kde[8117]=33;ylb(kde,8118,8125,-19);kde[8125]=33;kde[8126]=-19;ylb(kde,8127,8130,33);ylb(kde,8130,8133,-19);kde[8133]=33;ylb(kde,8134,8141,-19);ylb(kde,8141,8144,33);ylb(kde,8144,8148,-19);ylb(kde,8148,8150,33);ylb(kde,8150,8156,-19);ylb(kde,8156,8160,33);ylb(kde,8160,8173,-19);ylb(kde,8173,8178,33);ylb(kde,8178,8181,-19);kde[8181]=33;ylb(kde,8182,8189,-19);ylb(kde,8189,8400,33);ylb(kde,8400,8413,-87);ylb(kde,8413,8417,33);kde[8417]=-87;ylb(kde,8418,8486,33);kde[8486]=-19;ylb(kde,8487,8490,33);ylb(kde,8490,8492,-19);ylb(kde,8492,8494,33);kde[8494]=-19;ylb(kde,8495,8576,33);ylb(kde,8576,8579,-19);ylb(kde,8579,12293,33);kde[12293]=-87;kde[12294]=33;kde[12295]=-19;ylb(kde,12296,12321,33);ylb(kde,12321,12330,-19);ylb(kde,12330,12336,-87);kde[12336]=33;ylb(kde,12337,12342,-87);ylb(kde,12342,12353,33);ylb(kde,12353,12437,-19);ylb(kde,12437,12441,33);ylb(kde,12441,12443,-87);ylb(kde,12443,12445,33);ylb(kde,12445,12447,-87);ylb(kde,12447,12449,33);ylb(kde,12449,12539,-19);kde[12539]=33;ylb(kde,12540,12543,-87);ylb(kde,12543,12549,33);ylb(kde,12549,12589,-19);ylb(kde,12589,19968,33);ylb(kde,19968,40870,-19);ylb(kde,40870,44032,33);ylb(kde,44032,55204,-19);ylb(kde,55204,Uje,33);ylb(kde,57344,65534,33)} +function zZd(a){var b,c,d,e,f,g,h;if(a.hb)return;a.hb=true;pnd(a,'ecore');cod(a,'ecore');dod(a,_ve);Gnd(a.fb,'E');Gnd(a.L,'T');Gnd(a.P,'K');Gnd(a.P,'V');Gnd(a.cb,'E');wtd(_Kd(a.b),a.bb);wtd(_Kd(a.a),a.Q);wtd(_Kd(a.o),a.p);wtd(_Kd(a.p),a.R);wtd(_Kd(a.q),a.p);wtd(_Kd(a.v),a.q);wtd(_Kd(a.w),a.R);wtd(_Kd(a.B),a.Q);wtd(_Kd(a.R),a.Q);wtd(_Kd(a.T),a.eb);wtd(_Kd(a.U),a.R);wtd(_Kd(a.V),a.eb);wtd(_Kd(a.W),a.bb);wtd(_Kd(a.bb),a.eb);wtd(_Kd(a.eb),a.R);wtd(_Kd(a.db),a.R);Xnd(a.b,b5,qve,false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.e,'iD',null,0,1,b5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.b),1),18),a.q,null,'eAttributeType',1,1,b5,true,true,false,false,true,false,true);Xnd(a.a,a5,nve,false,false,true);Vnd(BD(qud(ZKd(a.a),0),34),a._,Cte,null,0,1,a5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.a),1),18),a.ab,null,'details',0,-1,a5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.a),2),18),a.Q,BD(qud(ZKd(a.Q),0),18),'eModelElement',0,1,a5,true,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.a),3),18),a.S,null,'contents',0,-1,a5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.a),4),18),a.S,null,'references',0,-1,a5,false,false,true,false,true,false,false);Xnd(a.o,c5,'EClass',false,false,true);Vnd(BD(qud(ZKd(a.o),0),34),a.e,'abstract',null,0,1,c5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.o),1),34),a.e,'interface',null,0,1,c5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.o),2),18),a.o,null,'eSuperTypes',0,-1,c5,false,false,true,false,true,true,false);_nd(BD(qud(ZKd(a.o),3),18),a.T,BD(qud(ZKd(a.T),0),18),'eOperations',0,-1,c5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.o),4),18),a.b,null,'eAllAttributes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),5),18),a.W,null,'eAllReferences',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),6),18),a.W,null,'eReferences',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),7),18),a.b,null,'eAttributes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),8),18),a.W,null,'eAllContainments',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),9),18),a.T,null,'eAllOperations',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),10),18),a.bb,null,'eAllStructuralFeatures',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),11),18),a.o,null,'eAllSuperTypes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),12),18),a.b,null,'eIDAttribute',0,1,c5,true,true,false,false,false,false,true);_nd(BD(qud(ZKd(a.o),13),18),a.bb,BD(qud(ZKd(a.bb),7),18),'eStructuralFeatures',0,-1,c5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.o),14),18),a.H,null,'eGenericSuperTypes',0,-1,c5,false,false,true,true,false,true,false);_nd(BD(qud(ZKd(a.o),15),18),a.H,null,'eAllGenericSuperTypes',0,-1,c5,true,true,false,false,true,false,true);h=$nd(BD(qud(WKd(a.o),0),59),a.e,'isSuperTypeOf');End(h,a.o,'someClass');$nd(BD(qud(WKd(a.o),1),59),a.I,'getFeatureCount');h=$nd(BD(qud(WKd(a.o),2),59),a.bb,dwe);End(h,a.I,'featureID');h=$nd(BD(qud(WKd(a.o),3),59),a.I,ewe);End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.o),4),59),a.bb,dwe);End(h,a._,'featureName');$nd(BD(qud(WKd(a.o),5),59),a.I,'getOperationCount');h=$nd(BD(qud(WKd(a.o),6),59),a.T,'getEOperation');End(h,a.I,'operationID');h=$nd(BD(qud(WKd(a.o),7),59),a.I,gwe);End(h,a.T,hwe);h=$nd(BD(qud(WKd(a.o),8),59),a.T,'getOverride');End(h,a.T,hwe);h=$nd(BD(qud(WKd(a.o),9),59),a.H,'getFeatureType');End(h,a.bb,fwe);Xnd(a.p,d5,rve,true,false,true);Vnd(BD(qud(ZKd(a.p),0),34),a._,'instanceClassName',null,0,1,d5,false,true,true,true,true,false);b=Nnd(a.L);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);Wnd(BD(qud(ZKd(a.p),1),34),b,'instanceClass',d5,true,true,false,true);Vnd(BD(qud(ZKd(a.p),2),34),a.M,iwe,null,0,1,d5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.p),3),34),a._,'instanceTypeName',null,0,1,d5,false,true,true,true,true,false);_nd(BD(qud(ZKd(a.p),4),18),a.U,BD(qud(ZKd(a.U),3),18),'ePackage',0,1,d5,true,false,false,false,true,false,false);_nd(BD(qud(ZKd(a.p),5),18),a.db,null,jwe,0,-1,d5,false,false,true,true,true,false,false);h=$nd(BD(qud(WKd(a.p),0),59),a.e,kwe);End(h,a.M,Jhe);$nd(BD(qud(WKd(a.p),1),59),a.I,'getClassifierID');Xnd(a.q,f5,'EDataType',false,false,true);Vnd(BD(qud(ZKd(a.q),0),34),a.e,'serializable',kse,0,1,f5,false,false,true,false,true,false);Xnd(a.v,h5,'EEnum',false,false,true);_nd(BD(qud(ZKd(a.v),0),18),a.w,BD(qud(ZKd(a.w),3),18),'eLiterals',0,-1,h5,false,false,true,true,false,false,false);h=$nd(BD(qud(WKd(a.v),0),59),a.w,lwe);End(h,a._,fue);h=$nd(BD(qud(WKd(a.v),1),59),a.w,lwe);End(h,a.I,Bte);h=$nd(BD(qud(WKd(a.v),2),59),a.w,'getEEnumLiteralByLiteral');End(h,a._,'literal');Xnd(a.w,g5,sve,false,false,true);Vnd(BD(qud(ZKd(a.w),0),34),a.I,Bte,null,0,1,g5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.w),1),34),a.A,'instance',null,0,1,g5,true,false,true,false,true,false);Vnd(BD(qud(ZKd(a.w),2),34),a._,'literal',null,0,1,g5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.w),3),18),a.v,BD(qud(ZKd(a.v),0),18),'eEnum',0,1,g5,true,false,false,false,false,false,false);Xnd(a.B,i5,'EFactory',false,false,true);_nd(BD(qud(ZKd(a.B),0),18),a.U,BD(qud(ZKd(a.U),2),18),'ePackage',1,1,i5,true,false,true,false,false,false,false);h=$nd(BD(qud(WKd(a.B),0),59),a.S,'create');End(h,a.o,'eClass');h=$nd(BD(qud(WKd(a.B),1),59),a.M,'createFromString');End(h,a.q,'eDataType');End(h,a._,'literalValue');h=$nd(BD(qud(WKd(a.B),2),59),a._,'convertToString');End(h,a.q,'eDataType');End(h,a.M,'instanceValue');Xnd(a.Q,k5,bte,true,false,true);_nd(BD(qud(ZKd(a.Q),0),18),a.a,BD(qud(ZKd(a.a),2),18),'eAnnotations',0,-1,k5,false,false,true,true,false,false,false);h=$nd(BD(qud(WKd(a.Q),0),59),a.a,'getEAnnotation');End(h,a._,Cte);Xnd(a.R,l5,cte,true,false,true);Vnd(BD(qud(ZKd(a.R),0),34),a._,fue,null,0,1,l5,false,false,true,false,true,false);Xnd(a.S,m5,'EObject',false,false,true);$nd(BD(qud(WKd(a.S),0),59),a.o,'eClass');$nd(BD(qud(WKd(a.S),1),59),a.e,'eIsProxy');$nd(BD(qud(WKd(a.S),2),59),a.X,'eResource');$nd(BD(qud(WKd(a.S),3),59),a.S,'eContainer');$nd(BD(qud(WKd(a.S),4),59),a.bb,'eContainingFeature');$nd(BD(qud(WKd(a.S),5),59),a.W,'eContainmentFeature');h=$nd(BD(qud(WKd(a.S),6),59),null,'eContents');b=Nnd(a.fb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);e=xId(h,b,null);!!e&&e.Fi();h=$nd(BD(qud(WKd(a.S),7),59),null,'eAllContents');b=Nnd(a.cb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);f=xId(h,b,null);!!f&&f.Fi();h=$nd(BD(qud(WKd(a.S),8),59),null,'eCrossReferences');b=Nnd(a.fb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);g=xId(h,b,null);!!g&&g.Fi();h=$nd(BD(qud(WKd(a.S),9),59),a.M,'eGet');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),10),59),a.M,'eGet');End(h,a.bb,fwe);End(h,a.e,'resolve');h=$nd(BD(qud(WKd(a.S),11),59),null,'eSet');End(h,a.bb,fwe);End(h,a.M,'newValue');h=$nd(BD(qud(WKd(a.S),12),59),a.e,'eIsSet');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),13),59),null,'eUnset');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),14),59),a.M,'eInvoke');End(h,a.T,hwe);b=Nnd(a.fb);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);Fnd(h,b,'arguments');Cnd(h,a.K);Xnd(a.T,n5,uve,false,false,true);_nd(BD(qud(ZKd(a.T),0),18),a.o,BD(qud(ZKd(a.o),3),18),mwe,0,1,n5,true,false,false,false,false,false,false);_nd(BD(qud(ZKd(a.T),1),18),a.db,null,jwe,0,-1,n5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.T),2),18),a.V,BD(qud(ZKd(a.V),0),18),'eParameters',0,-1,n5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.T),3),18),a.p,null,'eExceptions',0,-1,n5,false,false,true,false,true,true,false);_nd(BD(qud(ZKd(a.T),4),18),a.H,null,'eGenericExceptions',0,-1,n5,false,false,true,true,false,true,false);$nd(BD(qud(WKd(a.T),0),59),a.I,gwe);h=$nd(BD(qud(WKd(a.T),1),59),a.e,'isOverrideOf');End(h,a.T,'someOperation');Xnd(a.U,o5,'EPackage',false,false,true);Vnd(BD(qud(ZKd(a.U),0),34),a._,'nsURI',null,0,1,o5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.U),1),34),a._,'nsPrefix',null,0,1,o5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.U),2),18),a.B,BD(qud(ZKd(a.B),0),18),'eFactoryInstance',1,1,o5,true,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.U),3),18),a.p,BD(qud(ZKd(a.p),4),18),'eClassifiers',0,-1,o5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.U),4),18),a.U,BD(qud(ZKd(a.U),5),18),'eSubpackages',0,-1,o5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.U),5),18),a.U,BD(qud(ZKd(a.U),4),18),'eSuperPackage',0,1,o5,true,false,false,false,true,false,false);h=$nd(BD(qud(WKd(a.U),0),59),a.p,'getEClassifier');End(h,a._,fue);Xnd(a.V,p5,vve,false,false,true);_nd(BD(qud(ZKd(a.V),0),18),a.T,BD(qud(ZKd(a.T),2),18),'eOperation',0,1,p5,true,false,false,false,false,false,false);Xnd(a.W,q5,wve,false,false,true);Vnd(BD(qud(ZKd(a.W),0),34),a.e,'containment',null,0,1,q5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.W),1),34),a.e,'container',null,0,1,q5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.W),2),34),a.e,'resolveProxies',kse,0,1,q5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.W),3),18),a.W,null,'eOpposite',0,1,q5,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.W),4),18),a.o,null,'eReferenceType',1,1,q5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.W),5),18),a.b,null,'eKeys',0,-1,q5,false,false,true,false,true,false,false);Xnd(a.bb,t5,pve,true,false,true);Vnd(BD(qud(ZKd(a.bb),0),34),a.e,'changeable',kse,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),1),34),a.e,'volatile',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),2),34),a.e,'transient',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),3),34),a._,'defaultValueLiteral',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),4),34),a.M,iwe,null,0,1,t5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.bb),5),34),a.e,'unsettable',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),6),34),a.e,'derived',null,0,1,t5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.bb),7),18),a.o,BD(qud(ZKd(a.o),13),18),mwe,0,1,t5,true,false,false,false,false,false,false);$nd(BD(qud(WKd(a.bb),0),59),a.I,ewe);h=$nd(BD(qud(WKd(a.bb),1),59),null,'getContainerClass');b=Nnd(a.L);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);d=xId(h,b,null);!!d&&d.Fi();Xnd(a.eb,v5,ove,true,false,true);Vnd(BD(qud(ZKd(a.eb),0),34),a.e,'ordered',kse,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),1),34),a.e,'unique',kse,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),2),34),a.I,'lowerBound',null,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),3),34),a.I,'upperBound','1',0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),4),34),a.e,'many',null,0,1,v5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.eb),5),34),a.e,'required',null,0,1,v5,true,true,false,false,true,true);_nd(BD(qud(ZKd(a.eb),6),18),a.p,null,'eType',0,1,v5,false,true,true,false,true,true,false);_nd(BD(qud(ZKd(a.eb),7),18),a.H,null,'eGenericType',0,1,v5,false,true,true,true,false,true,false);Xnd(a.ab,CK,'EStringToStringMapEntry',false,false,false);Vnd(BD(qud(ZKd(a.ab),0),34),a._,'key',null,0,1,CK,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.ab),1),34),a._,Bte,null,0,1,CK,false,false,true,false,true,false);Xnd(a.H,j5,tve,false,false,true);_nd(BD(qud(ZKd(a.H),0),18),a.H,null,'eUpperBound',0,1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),1),18),a.H,null,'eTypeArguments',0,-1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),2),18),a.p,null,'eRawType',1,1,j5,true,false,false,false,true,false,true);_nd(BD(qud(ZKd(a.H),3),18),a.H,null,'eLowerBound',0,1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),4),18),a.db,null,'eTypeParameter',0,1,j5,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.H),5),18),a.p,null,'eClassifier',0,1,j5,false,false,true,false,true,false,false);h=$nd(BD(qud(WKd(a.H),0),59),a.e,kwe);End(h,a.M,Jhe);Xnd(a.db,u5,xve,false,false,true);_nd(BD(qud(ZKd(a.db),0),18),a.H,null,'eBounds',0,-1,u5,false,false,true,true,false,false,false);Znd(a.c,bJ,'EBigDecimal',true);Znd(a.d,cJ,'EBigInteger',true);Znd(a.e,sbb,'EBoolean',true);Znd(a.f,wI,'EBooleanObject',true);Znd(a.i,SD,'EByte',true);Znd(a.g,GC(SD,1),'EByteArray',true);Znd(a.j,xI,'EByteObject',true);Znd(a.k,TD,'EChar',true);Znd(a.n,yI,'ECharacterObject',true);Znd(a.r,$J,'EDate',true);Znd(a.s,O4,'EDiagnosticChain',false);Znd(a.t,UD,'EDouble',true);Znd(a.u,BI,'EDoubleObject',true);Znd(a.fb,T4,'EEList',false);Znd(a.A,U4,'EEnumerator',false);Znd(a.C,O9,'EFeatureMap',false);Znd(a.D,E9,'EFeatureMapEntry',false);Znd(a.F,VD,'EFloat',true);Znd(a.G,FI,'EFloatObject',true);Znd(a.I,WD,'EInt',true);Znd(a.J,JI,'EIntegerObject',true);Znd(a.L,AI,'EJavaClass',true);Znd(a.M,SI,'EJavaObject',true);Znd(a.N,XD,'ELong',true);Znd(a.O,MI,'ELongObject',true);Znd(a.P,DK,'EMap',false);Znd(a.X,v8,'EResource',false);Znd(a.Y,u8,'EResourceSet',false);Znd(a.Z,rbb,'EShort',true);Znd(a.$,UI,'EShortObject',true);Znd(a._,ZI,'EString',true);Znd(a.cb,X4,'ETreeIterator',false);Znd(a.K,V4,'EInvocationTargetException',false);Rnd(a,_ve)} +var Jhe='object',Khe='boolean',Lhe='number',Mhe='string',Nhe='function',Ohe=2147483647,Phe='java.lang',Qhe={3:1},Rhe='com.google.common.base',She=', ',The='%s (%s) must not be negative',Uhe={3:1,4:1,5:1},Vhe='negative size: ',Whe='Optional.of(',Xhe='null',Yhe={198:1,47:1},Zhe='com.google.common.collect',$he={198:1,47:1,125:1},_he={224:1,3:1},aie={47:1},bie='java.util',cie={83:1},die={20:1,28:1,14:1},eie=1965,fie={20:1,28:1,14:1,21:1},gie={83:1,171:1,161:1},hie={20:1,28:1,14:1,21:1,84:1},iie={20:1,28:1,14:1,271:1,21:1,84:1},jie={47:1,125:1},kie={345:1,42:1},lie='AbstractMapEntry',mie='expectedValuesPerKey',nie={3:1,6:1,4:1,5:1},oie=16384,pie={164:1},qie={38:1},rie={l:4194303,m:4194303,h:524287},sie={196:1},tie={245:1,3:1,35:1},uie='range unbounded on this side',vie={20:1},wie={20:1,14:1},xie={3:1,20:1,28:1,14:1},yie={152:1,3:1,20:1,28:1,14:1,15:1,54:1},zie={3:1,4:1,5:1,165:1},Aie={3:1,83:1},Bie={20:1,14:1,21:1},Cie={3:1,20:1,28:1,14:1,21:1},Die={20:1,14:1,21:1,84:1},Eie=461845907,Fie=-862048943,Gie={3:1,6:1,4:1,5:1,165:1},Hie='expectedSize',Iie=1073741824,Jie='initialArraySize',Kie={3:1,6:1,4:1,9:1,5:1},Lie={20:1,28:1,52:1,14:1,15:1},Mie='arraySize',Nie={20:1,28:1,52:1,14:1,15:1,54:1},Oie={45:1},Pie={365:1},Qie=1.0E-4,Rie=-2147483648,Sie='__noinit__',Tie={3:1,102:1,60:1,78:1},Uie='com.google.gwt.core.client.impl',Vie='String',Wie='com.google.gwt.core.client',Xie='anonymous',Yie='fnStack',Zie='Unknown',$ie={195:1,3:1,4:1},_ie=1000,aje=65535,bje='January',cje='February',dje='March',eje='April',fje='May',gje='June',hje='July',ije='August',jje='September',kje='October',lje='November',mje='December',nje=1900,oje={48:1,3:1,4:1},pje='Before Christ',qje='Anno Domini',rje='Sunday',sje='Monday',tje='Tuesday',uje='Wednesday',vje='Thursday',wje='Friday',xje='Saturday',yje='com.google.gwt.i18n.shared',zje='DateTimeFormat',Aje='com.google.gwt.i18n.client',Bje='DefaultDateTimeFormatInfo',Cje={3:1,4:1,35:1,199:1},Dje='com.google.gwt.json.client',Eje=4194303,Fje=1048575,Gje=524288,Hje=4194304,Ije=17592186044416,Jje=1000000000,Kje=-17592186044416,Lje='java.io',Mje={3:1,102:1,73:1,60:1,78:1},Nje={3:1,289:1,78:1},Oje='For input string: "',Pje=Infinity,Qje=-Infinity,Rje=4096,Sje={3:1,4:1,364:1},Tje=65536,Uje=55296,Vje={104:1,3:1,4:1},Wje=100000,Xje=0.3010299956639812,Yje=4294967295,Zje=4294967296,$je='0.0',_je={42:1},ake={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},bke={3:1,20:1,28:1,52:1,14:1,15:1,54:1},cke={20:1,14:1,15:1},dke={3:1,62:1},eke={182:1},fke={3:1,4:1,83:1},gke={3:1,4:1,20:1,28:1,14:1,53:1,21:1},hke='delete',ike=1.4901161193847656E-8,jke=1.1102230246251565E-16,kke=15525485,lke=5.9604644775390625E-8,mke=16777216,nke=16777215,oke=', length: ',pke={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},qke={3:1,35:1,22:1,297:1},rke='java.util.function',ske='java.util.logging',tke={3:1,4:1,5:1,842:1},uke='undefined',vke='java.util.stream',wke={525:1,670:1},xke='fromIndex: ',yke=' > toIndex: ',zke=', toIndex: ',Ake='Index: ',Bke=', Size: ',Cke='org.eclipse.elk.alg.common',Dke={62:1},Eke='org.eclipse.elk.alg.common.compaction',Fke='Scanline/EventHandler',Gke='org.eclipse.elk.alg.common.compaction.oned',Hke='CNode belongs to another CGroup.',Ike='ISpacingsHandler/1',Jke='The ',Kke=' instance has been finished already.',Lke='The direction ',Mke=' is not supported by the CGraph instance.',Nke='OneDimensionalCompactor',Oke='OneDimensionalCompactor/lambda$0$Type',Pke='Quadruplet',Qke='ScanlineConstraintCalculator',Rke='ScanlineConstraintCalculator/ConstraintsScanlineHandler',Ske='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',Tke='ScanlineConstraintCalculator/Timestamp',Uke='ScanlineConstraintCalculator/lambda$0$Type',Vke={169:1,45:1},Wke='org.eclipse.elk.alg.common.compaction.options',Xke='org.eclipse.elk.core.data',Yke='org.eclipse.elk.polyomino.traversalStrategy',Zke='org.eclipse.elk.polyomino.lowLevelSort',$ke='org.eclipse.elk.polyomino.highLevelSort',_ke='org.eclipse.elk.polyomino.fill',ale={130:1},ble='polyomino',cle='org.eclipse.elk.alg.common.networksimplex',dle={177:1,3:1,4:1},ele='org.eclipse.elk.alg.common.nodespacing',fle='org.eclipse.elk.alg.common.nodespacing.cellsystem',gle='CENTER',hle={212:1,326:1},ile={3:1,4:1,5:1,595:1},jle='LEFT',kle='RIGHT',lle='Vertical alignment cannot be null',mle='BOTTOM',nle='org.eclipse.elk.alg.common.nodespacing.internal',ole='UNDEFINED',ple=0.01,qle='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',rle='LabelPlacer/lambda$0$Type',sle='LabelPlacer/lambda$1$Type',tle='portRatioOrPosition',ule='org.eclipse.elk.alg.common.overlaps',vle='DOWN',wle='org.eclipse.elk.alg.common.polyomino',xle='NORTH',yle='EAST',zle='SOUTH',Ale='WEST',Ble='org.eclipse.elk.alg.common.polyomino.structures',Cle='Direction',Dle='Grid is only of size ',Ele='. Requested point (',Fle=') is out of bounds.',Gle=' Given center based coordinates were (',Hle='org.eclipse.elk.graph.properties',Ile='IPropertyHolder',Jle={3:1,94:1,134:1},Kle='org.eclipse.elk.alg.common.spore',Lle='org.eclipse.elk.alg.common.utils',Mle={209:1},Nle='org.eclipse.elk.core',Ole='Connected Components Compaction',Ple='org.eclipse.elk.alg.disco',Qle='org.eclipse.elk.alg.disco.graph',Rle='org.eclipse.elk.alg.disco.options',Sle='CompactionStrategy',Tle='org.eclipse.elk.disco.componentCompaction.strategy',Ule='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',Vle='org.eclipse.elk.disco.debug.discoGraph',Wle='org.eclipse.elk.disco.debug.discoPolys',Xle='componentCompaction',Yle='org.eclipse.elk.disco',Zle='org.eclipse.elk.spacing.componentComponent',$le='org.eclipse.elk.edge.thickness',_le='org.eclipse.elk.aspectRatio',ame='org.eclipse.elk.padding',bme='org.eclipse.elk.alg.disco.transform',cme=1.5707963267948966,dme=1.7976931348623157E308,eme={3:1,4:1,5:1,192:1},fme={3:1,6:1,4:1,5:1,106:1,120:1},gme='org.eclipse.elk.alg.force',hme='ComponentsProcessor',ime='ComponentsProcessor/1',jme='org.eclipse.elk.alg.force.graph',kme='Component Layout',lme='org.eclipse.elk.alg.force.model',mme='org.eclipse.elk.force.model',nme='org.eclipse.elk.force.iterations',ome='org.eclipse.elk.force.repulsivePower',pme='org.eclipse.elk.force.temperature',qme=0.001,rme='org.eclipse.elk.force.repulsion',sme='org.eclipse.elk.alg.force.options',tme=1.600000023841858,ume='org.eclipse.elk.force',vme='org.eclipse.elk.priority',wme='org.eclipse.elk.spacing.nodeNode',xme='org.eclipse.elk.spacing.edgeLabel',yme='org.eclipse.elk.randomSeed',zme='org.eclipse.elk.separateConnectedComponents',Ame='org.eclipse.elk.interactive',Bme='org.eclipse.elk.portConstraints',Cme='org.eclipse.elk.edgeLabels.inline',Dme='org.eclipse.elk.omitNodeMicroLayout',Eme='org.eclipse.elk.nodeSize.options',Fme='org.eclipse.elk.nodeSize.constraints',Gme='org.eclipse.elk.nodeLabels.placement',Hme='org.eclipse.elk.portLabels.placement',Ime='origin',Jme='random',Kme='boundingBox.upLeft',Lme='boundingBox.lowRight',Mme='org.eclipse.elk.stress.fixed',Nme='org.eclipse.elk.stress.desiredEdgeLength',Ome='org.eclipse.elk.stress.dimension',Pme='org.eclipse.elk.stress.epsilon',Qme='org.eclipse.elk.stress.iterationLimit',Rme='org.eclipse.elk.stress',Sme='ELK Stress',Tme='org.eclipse.elk.nodeSize.minimum',Ume='org.eclipse.elk.alg.force.stress',Vme='Layered layout',Wme='org.eclipse.elk.alg.layered',Xme='org.eclipse.elk.alg.layered.compaction.components',Yme='org.eclipse.elk.alg.layered.compaction.oned',Zme='org.eclipse.elk.alg.layered.compaction.oned.algs',$me='org.eclipse.elk.alg.layered.compaction.recthull',_me='org.eclipse.elk.alg.layered.components',ane='NONE',bne={3:1,6:1,4:1,9:1,5:1,122:1},cne={3:1,6:1,4:1,5:1,141:1,106:1,120:1},dne='org.eclipse.elk.alg.layered.compound',ene={51:1},fne='org.eclipse.elk.alg.layered.graph',gne=' -> ',hne='Not supported by LGraph',ine='Port side is undefined',jne={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},kne={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},lne={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},mne='([{"\' \t\r\n',nne=')]}"\' \t\r\n',one='The given string contains parts that cannot be parsed as numbers.',pne='org.eclipse.elk.core.math',qne={3:1,4:1,142:1,207:1,414:1},rne={3:1,4:1,116:1,207:1,414:1},sne='org.eclipse.elk.layered',tne='org.eclipse.elk.alg.layered.graph.transform',une='ElkGraphImporter',vne='ElkGraphImporter/lambda$0$Type',wne='ElkGraphImporter/lambda$1$Type',xne='ElkGraphImporter/lambda$2$Type',yne='ElkGraphImporter/lambda$4$Type',zne='Node margin calculation',Ane='org.eclipse.elk.alg.layered.intermediate',Bne='ONE_SIDED_GREEDY_SWITCH',Cne='TWO_SIDED_GREEDY_SWITCH',Dne='No implementation is available for the layout processor ',Ene='IntermediateProcessorStrategy',Fne="Node '",Gne='FIRST_SEPARATE',Hne='LAST_SEPARATE',Ine='Odd port side processing',Jne='org.eclipse.elk.alg.layered.intermediate.compaction',Kne='org.eclipse.elk.alg.layered.intermediate.greedyswitch',Lne='org.eclipse.elk.alg.layered.p3order.counting',Mne={225:1},Nne='org.eclipse.elk.alg.layered.intermediate.loops',One='org.eclipse.elk.alg.layered.intermediate.loops.ordering',Pne='org.eclipse.elk.alg.layered.intermediate.loops.routing',Qne='org.eclipse.elk.alg.layered.intermediate.preserveorder',Rne='org.eclipse.elk.alg.layered.intermediate.wrapping',Sne='org.eclipse.elk.alg.layered.options',Tne='INTERACTIVE',Une='DEPTH_FIRST',Vne='EDGE_LENGTH',Wne='SELF_LOOPS',Xne='firstTryWithInitialOrder',Yne='org.eclipse.elk.layered.directionCongruency',Zne='org.eclipse.elk.layered.feedbackEdges',$ne='org.eclipse.elk.layered.interactiveReferencePoint',_ne='org.eclipse.elk.layered.mergeEdges',aoe='org.eclipse.elk.layered.mergeHierarchyEdges',boe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',coe='org.eclipse.elk.layered.portSortingStrategy',doe='org.eclipse.elk.layered.thoroughness',eoe='org.eclipse.elk.layered.unnecessaryBendpoints',foe='org.eclipse.elk.layered.generatePositionAndLayerIds',goe='org.eclipse.elk.layered.cycleBreaking.strategy',hoe='org.eclipse.elk.layered.layering.strategy',ioe='org.eclipse.elk.layered.layering.layerConstraint',joe='org.eclipse.elk.layered.layering.layerChoiceConstraint',koe='org.eclipse.elk.layered.layering.layerId',loe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',moe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',noe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ooe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',poe='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',qoe='org.eclipse.elk.layered.crossingMinimization.strategy',roe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',soe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',toe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',uoe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',voe='org.eclipse.elk.layered.crossingMinimization.positionId',woe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',xoe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',yoe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',zoe='org.eclipse.elk.layered.nodePlacement.strategy',Aoe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',Boe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',Coe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',Doe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',Eoe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',Foe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',Goe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',Hoe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',Ioe='org.eclipse.elk.layered.edgeRouting.splines.mode',Joe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',Koe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',Loe='org.eclipse.elk.layered.spacing.baseValue',Moe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',Noe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',Ooe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',Poe='org.eclipse.elk.layered.priority.direction',Qoe='org.eclipse.elk.layered.priority.shortness',Roe='org.eclipse.elk.layered.priority.straightness',Soe='org.eclipse.elk.layered.compaction.connectedComponents',Toe='org.eclipse.elk.layered.compaction.postCompaction.strategy',Uoe='org.eclipse.elk.layered.compaction.postCompaction.constraints',Voe='org.eclipse.elk.layered.highDegreeNodes.treatment',Woe='org.eclipse.elk.layered.highDegreeNodes.threshold',Xoe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',Yoe='org.eclipse.elk.layered.wrapping.strategy',Zoe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',$oe='org.eclipse.elk.layered.wrapping.correctionFactor',_oe='org.eclipse.elk.layered.wrapping.cutting.strategy',ape='org.eclipse.elk.layered.wrapping.cutting.cuts',bpe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',cpe='org.eclipse.elk.layered.wrapping.validify.strategy',dpe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',epe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',fpe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',gpe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',hpe='org.eclipse.elk.layered.edgeLabels.sideSelection',ipe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',jpe='org.eclipse.elk.layered.considerModelOrder.strategy',kpe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',lpe='org.eclipse.elk.layered.considerModelOrder.components',mpe='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',npe='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',ope='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',ppe='layering',qpe='layering.minWidth',rpe='layering.nodePromotion',spe='crossingMinimization',tpe='org.eclipse.elk.hierarchyHandling',upe='crossingMinimization.greedySwitch',vpe='nodePlacement',wpe='nodePlacement.bk',xpe='edgeRouting',ype='org.eclipse.elk.edgeRouting',zpe='spacing',Ape='priority',Bpe='compaction',Cpe='compaction.postCompaction',Dpe='Specifies whether and how post-process compaction is applied.',Epe='highDegreeNodes',Fpe='wrapping',Gpe='wrapping.cutting',Hpe='wrapping.validify',Ipe='wrapping.multiEdge',Jpe='edgeLabels',Kpe='considerModelOrder',Lpe='org.eclipse.elk.spacing.commentComment',Mpe='org.eclipse.elk.spacing.commentNode',Npe='org.eclipse.elk.spacing.edgeEdge',Ope='org.eclipse.elk.spacing.edgeNode',Ppe='org.eclipse.elk.spacing.labelLabel',Qpe='org.eclipse.elk.spacing.labelPortHorizontal',Rpe='org.eclipse.elk.spacing.labelPortVertical',Spe='org.eclipse.elk.spacing.labelNode',Tpe='org.eclipse.elk.spacing.nodeSelfLoop',Upe='org.eclipse.elk.spacing.portPort',Vpe='org.eclipse.elk.spacing.individual',Wpe='org.eclipse.elk.port.borderOffset',Xpe='org.eclipse.elk.noLayout',Ype='org.eclipse.elk.port.side',Zpe='org.eclipse.elk.debugMode',$pe='org.eclipse.elk.alignment',_pe='org.eclipse.elk.insideSelfLoops.activate',aqe='org.eclipse.elk.insideSelfLoops.yo',bqe='org.eclipse.elk.nodeSize.fixedGraphSize',cqe='org.eclipse.elk.direction',dqe='org.eclipse.elk.nodeLabels.padding',eqe='org.eclipse.elk.portLabels.nextToPortIfPossible',fqe='org.eclipse.elk.portLabels.treatAsGroup',gqe='org.eclipse.elk.portAlignment.default',hqe='org.eclipse.elk.portAlignment.north',iqe='org.eclipse.elk.portAlignment.south',jqe='org.eclipse.elk.portAlignment.west',kqe='org.eclipse.elk.portAlignment.east',lqe='org.eclipse.elk.contentAlignment',mqe='org.eclipse.elk.junctionPoints',nqe='org.eclipse.elk.edgeLabels.placement',oqe='org.eclipse.elk.port.index',pqe='org.eclipse.elk.commentBox',qqe='org.eclipse.elk.hypernode',rqe='org.eclipse.elk.port.anchor',sqe='org.eclipse.elk.partitioning.activate',tqe='org.eclipse.elk.partitioning.partition',uqe='org.eclipse.elk.position',vqe='org.eclipse.elk.margins',wqe='org.eclipse.elk.spacing.portsSurrounding',xqe='org.eclipse.elk.interactiveLayout',yqe='org.eclipse.elk.core.util',zqe={3:1,4:1,5:1,593:1},Aqe='NETWORK_SIMPLEX',Bqe={123:1,51:1},Cqe='org.eclipse.elk.alg.layered.p1cycles',Dqe='org.eclipse.elk.alg.layered.p2layers',Eqe={402:1,225:1},Fqe={832:1,3:1,4:1},Gqe='org.eclipse.elk.alg.layered.p3order',Hqe='org.eclipse.elk.alg.layered.p4nodes',Iqe={3:1,4:1,5:1,840:1},Jqe=1.0E-5,Kqe='org.eclipse.elk.alg.layered.p4nodes.bk',Lqe='org.eclipse.elk.alg.layered.p5edges',Mqe='org.eclipse.elk.alg.layered.p5edges.orthogonal',Nqe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',Oqe=1.0E-6,Pqe='org.eclipse.elk.alg.layered.p5edges.splines',Qqe=0.09999999999999998,Rqe=1.0E-8,Sqe=4.71238898038469,Tqe=3.141592653589793,Uqe='org.eclipse.elk.alg.mrtree',Vqe='org.eclipse.elk.alg.mrtree.graph',Wqe='org.eclipse.elk.alg.mrtree.intermediate',Xqe='Set neighbors in level',Yqe='DESCENDANTS',Zqe='org.eclipse.elk.mrtree.weighting',$qe='org.eclipse.elk.mrtree.searchOrder',_qe='org.eclipse.elk.alg.mrtree.options',are='org.eclipse.elk.mrtree',bre='org.eclipse.elk.tree',cre='org.eclipse.elk.alg.radial',dre=6.283185307179586,ere=4.9E-324,fre='org.eclipse.elk.alg.radial.intermediate',gre='org.eclipse.elk.alg.radial.intermediate.compaction',hre={3:1,4:1,5:1,106:1},ire='org.eclipse.elk.alg.radial.intermediate.optimization',jre='No implementation is available for the layout option ',kre='org.eclipse.elk.alg.radial.options',lre='org.eclipse.elk.radial.orderId',mre='org.eclipse.elk.radial.radius',nre='org.eclipse.elk.radial.compactor',ore='org.eclipse.elk.radial.compactionStepSize',pre='org.eclipse.elk.radial.sorter',qre='org.eclipse.elk.radial.wedgeCriteria',rre='org.eclipse.elk.radial.optimizationCriteria',sre='org.eclipse.elk.radial',tre='org.eclipse.elk.alg.radial.p1position.wedge',ure='org.eclipse.elk.alg.radial.sorting',vre=5.497787143782138,wre=3.9269908169872414,xre=2.356194490192345,yre='org.eclipse.elk.alg.rectpacking',zre='org.eclipse.elk.alg.rectpacking.firstiteration',Are='org.eclipse.elk.alg.rectpacking.options',Bre='org.eclipse.elk.rectpacking.optimizationGoal',Cre='org.eclipse.elk.rectpacking.lastPlaceShift',Dre='org.eclipse.elk.rectpacking.currentPosition',Ere='org.eclipse.elk.rectpacking.desiredPosition',Fre='org.eclipse.elk.rectpacking.onlyFirstIteration',Gre='org.eclipse.elk.rectpacking.rowCompaction',Hre='org.eclipse.elk.rectpacking.expandToAspectRatio',Ire='org.eclipse.elk.rectpacking.targetWidth',Jre='org.eclipse.elk.expandNodes',Kre='org.eclipse.elk.rectpacking',Lre='org.eclipse.elk.alg.rectpacking.util',Mre='No implementation available for ',Nre='org.eclipse.elk.alg.spore',Ore='org.eclipse.elk.alg.spore.options',Pre='org.eclipse.elk.sporeCompaction',Qre='org.eclipse.elk.underlyingLayoutAlgorithm',Rre='org.eclipse.elk.processingOrder.treeConstruction',Sre='org.eclipse.elk.processingOrder.spanningTreeCostFunction',Tre='org.eclipse.elk.processingOrder.preferredRoot',Ure='org.eclipse.elk.processingOrder.rootSelection',Vre='org.eclipse.elk.structure.structureExtractionStrategy',Wre='org.eclipse.elk.compaction.compactionStrategy',Xre='org.eclipse.elk.compaction.orthogonal',Yre='org.eclipse.elk.overlapRemoval.maxIterations',Zre='org.eclipse.elk.overlapRemoval.runScanline',$re='processingOrder',_re='overlapRemoval',ase='org.eclipse.elk.sporeOverlap',bse='org.eclipse.elk.alg.spore.p1structure',cse='org.eclipse.elk.alg.spore.p2processingorder',dse='org.eclipse.elk.alg.spore.p3execution',ese='Invalid index: ',fse='org.eclipse.elk.core.alg',gse={331:1},hse={288:1},ise='Make sure its type is registered with the ',jse=' utility class.',kse='true',lse='false',mse="Couldn't clone property '",nse=0.05,ose='org.eclipse.elk.core.options',pse=1.2999999523162842,qse='org.eclipse.elk.box',rse='org.eclipse.elk.box.packingMode',sse='org.eclipse.elk.algorithm',tse='org.eclipse.elk.resolvedAlgorithm',use='org.eclipse.elk.bendPoints',vse='org.eclipse.elk.labelManager',wse='org.eclipse.elk.scaleFactor',xse='org.eclipse.elk.animate',yse='org.eclipse.elk.animTimeFactor',zse='org.eclipse.elk.layoutAncestors',Ase='org.eclipse.elk.maxAnimTime',Bse='org.eclipse.elk.minAnimTime',Cse='org.eclipse.elk.progressBar',Dse='org.eclipse.elk.validateGraph',Ese='org.eclipse.elk.validateOptions',Fse='org.eclipse.elk.zoomToFit',Gse='org.eclipse.elk.font.name',Hse='org.eclipse.elk.font.size',Ise='org.eclipse.elk.edge.type',Jse='partitioning',Kse='nodeLabels',Lse='portAlignment',Mse='nodeSize',Nse='port',Ose='portLabels',Pse='insideSelfLoops',Qse='org.eclipse.elk.fixed',Rse='org.eclipse.elk.random',Sse='port must have a parent node to calculate the port side',Tse='The edge needs to have exactly one edge section. Found: ',Use='org.eclipse.elk.core.util.adapters',Vse='org.eclipse.emf.ecore',Wse='org.eclipse.elk.graph',Xse='EMapPropertyHolder',Yse='ElkBendPoint',Zse='ElkGraphElement',$se='ElkConnectableShape',_se='ElkEdge',ate='ElkEdgeSection',bte='EModelElement',cte='ENamedElement',dte='ElkLabel',ete='ElkNode',fte='ElkPort',gte={92:1,90:1},hte='org.eclipse.emf.common.notify.impl',ite="The feature '",jte="' is not a valid changeable feature",kte='Expecting null',lte="' is not a valid feature",mte='The feature ID',nte=' is not a valid feature ID',ote=32768,pte={105:1,92:1,90:1,56:1,49:1,97:1},qte='org.eclipse.emf.ecore.impl',rte='org.eclipse.elk.graph.impl',ste='Recursive containment not allowed for ',tte="The datatype '",ute="' is not a valid classifier",vte="The value '",wte={190:1,3:1,4:1},xte="The class '",yte='http://www.eclipse.org/elk/ElkGraph',zte=1024,Ate='property',Bte='value',Cte='source',Dte='properties',Ete='identifier',Fte='height',Gte='width',Hte='parent',Ite='text',Jte='children',Kte='hierarchical',Lte='sources',Mte='targets',Nte='sections',Ote='bendPoints',Pte='outgoingShape',Qte='incomingShape',Rte='outgoingSections',Ste='incomingSections',Tte='org.eclipse.emf.common.util',Ute='Severe implementation error in the Json to ElkGraph importer.',Vte='id',Wte='org.eclipse.elk.graph.json',Xte='Unhandled parameter types: ',Yte='startPoint',Zte="An edge must have at least one source and one target (edge id: '",$te="').",_te='Referenced edge section does not exist: ',aue=" (edge id: '",bue='target',cue='sourcePoint',due='targetPoint',eue='group',fue='name',gue='connectableShape cannot be null',hue='edge cannot be null',iue="Passed edge is not 'simple'.",jue='org.eclipse.elk.graph.util',kue="The 'no duplicates' constraint is violated",lue='targetIndex=',mue=', size=',nue='sourceIndex=',oue={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},pue={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},que='logging',rue='measureExecutionTime',sue='parser.parse.1',tue='parser.parse.2',uue='parser.next.1',vue='parser.next.2',wue='parser.next.3',xue='parser.next.4',yue='parser.factor.1',zue='parser.factor.2',Aue='parser.factor.3',Bue='parser.factor.4',Cue='parser.factor.5',Due='parser.factor.6',Eue='parser.atom.1',Fue='parser.atom.2',Gue='parser.atom.3',Hue='parser.atom.4',Iue='parser.atom.5',Jue='parser.cc.1',Kue='parser.cc.2',Lue='parser.cc.3',Mue='parser.cc.5',Nue='parser.cc.6',Oue='parser.cc.7',Pue='parser.cc.8',Que='parser.ope.1',Rue='parser.ope.2',Sue='parser.ope.3',Tue='parser.descape.1',Uue='parser.descape.2',Vue='parser.descape.3',Wue='parser.descape.4',Xue='parser.descape.5',Yue='parser.process.1',Zue='parser.quantifier.1',$ue='parser.quantifier.2',_ue='parser.quantifier.3',ave='parser.quantifier.4',bve='parser.quantifier.5',cve='org.eclipse.emf.common.notify',dve={415:1,672:1},eve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},fve={366:1,143:1},gve='index=',hve={3:1,4:1,5:1,126:1},ive={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},jve={3:1,6:1,4:1,5:1,192:1},kve={3:1,4:1,5:1,165:1,367:1},lve=';/?:@&=+$,',mve='invalid authority: ',nve='EAnnotation',ove='ETypedElement',pve='EStructuralFeature',qve='EAttribute',rve='EClassifier',sve='EEnumLiteral',tve='EGenericType',uve='EOperation',vve='EParameter',wve='EReference',xve='ETypeParameter',yve='org.eclipse.emf.ecore.util',zve={76:1},Ave={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},Bve='org.eclipse.emf.ecore.util.FeatureMap$Entry',Cve=8192,Dve=2048,Eve='byte',Fve='char',Gve='double',Hve='float',Ive='int',Jve='long',Kve='short',Lve='java.lang.Object',Mve={3:1,4:1,5:1,247:1},Nve={3:1,4:1,5:1,673:1},Ove={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},Pve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},Qve='mixed',Rve='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',Sve='kind',Tve={3:1,4:1,5:1,674:1},Uve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},Vve={20:1,28:1,52:1,14:1,15:1,58:1,69:1},Wve={47:1,125:1,279:1},Xve={72:1,332:1},Yve="The value of type '",Zve="' must be of type '",$ve=1316,_ve='http://www.eclipse.org/emf/2002/Ecore',awe=-32768,bwe='constraints',cwe='baseType',dwe='getEStructuralFeature',ewe='getFeatureID',fwe='feature',gwe='getOperationID',hwe='operation',iwe='defaultValue',jwe='eTypeParameters',kwe='isInstance',lwe='getEEnumLiteral',mwe='eContainingClass',nwe={55:1},owe={3:1,4:1,5:1,119:1},pwe='org.eclipse.emf.ecore.resource',qwe={92:1,90:1,591:1,1935:1},rwe='org.eclipse.emf.ecore.resource.impl',swe='unspecified',twe='simple',uwe='attribute',vwe='attributeWildcard',wwe='element',xwe='elementWildcard',ywe='collapse',zwe='itemType',Awe='namespace',Bwe='##targetNamespace',Cwe='whiteSpace',Dwe='wildcards',Ewe='http://www.eclipse.org/emf/2003/XMLType',Fwe='##any',Gwe='uninitialized',Hwe='The multiplicity constraint is violated',Iwe='org.eclipse.emf.ecore.xml.type',Jwe='ProcessingInstruction',Kwe='SimpleAnyType',Lwe='XMLTypeDocumentRoot',Mwe='org.eclipse.emf.ecore.xml.type.impl',Nwe='INF',Owe='processing',Pwe='ENTITIES_._base',Qwe='minLength',Rwe='ENTITY',Swe='NCName',Twe='IDREFS_._base',Uwe='integer',Vwe='token',Wwe='pattern',Xwe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',Ywe='\\i\\c*',Zwe='[\\i-[:]][\\c-[:]]*',$we='nonPositiveInteger',_we='maxInclusive',axe='NMTOKEN',bxe='NMTOKENS_._base',cxe='nonNegativeInteger',dxe='minInclusive',exe='normalizedString',fxe='unsignedByte',gxe='unsignedInt',hxe='18446744073709551615',ixe='unsignedShort',jxe='processingInstruction',kxe='org.eclipse.emf.ecore.xml.type.internal',lxe=1114111,mxe='Internal Error: shorthands: \\u',nxe='xml:isDigit',oxe='xml:isWord',pxe='xml:isSpace',qxe='xml:isNameChar',rxe='xml:isInitialNameChar',sxe='09\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59\u0ED0\u0ED9\u0F20\u0F29',txe='AZaz\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0641\u064A\u0671\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06D5\u06E5\u06E6\u0905\u0939\u093D\u093D\u0958\u0961\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09DC\u09DD\u09DF\u09E1\u09F0\u09F1\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5C\u0A5E\u0A5E\u0A72\u0A74\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABD\u0ABD\u0AE0\u0AE0\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3D\u0B3D\u0B5C\u0B5D\u0B5F\u0B61\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D60\u0D61\u0E01\u0E2E\u0E30\u0E30\u0E32\u0E33\u0E40\u0E45\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB0\u0EB2\u0EB3\u0EBD\u0EBD\u0EC0\u0EC4\u0F40\u0F47\u0F49\u0F69\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30A1\u30FA\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3',uxe='Private Use',vxe='ASSIGNED',wxe='\x00\x7F\x80\xFF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF\u0900\u097F\u0980\u09FF\u0A00\u0A7F\u0A80\u0AFF\u0B00\u0B7F\u0B80\u0BFF\u0C00\u0C7F\u0C80\u0CFF\u0D00\u0D7F\u0D80\u0DFF\u0E00\u0E7F\u0E80\u0EFF\u0F00\u0FFF\u1000\u109F\u10A0\u10FF\u1100\u11FF\u1200\u137F\u13A0\u13FF\u1400\u167F\u1680\u169F\u16A0\u16FF\u1780\u17FF\u1800\u18AF\u1E00\u1EFF\u1F00\u1FFF\u2000\u206F\u2070\u209F\u20A0\u20CF\u20D0\u20FF\u2100\u214F\u2150\u218F\u2190\u21FF\u2200\u22FF\u2300\u23FF\u2400\u243F\u2440\u245F\u2460\u24FF\u2500\u257F\u2580\u259F\u25A0\u25FF\u2600\u26FF\u2700\u27BF\u2800\u28FF\u2E80\u2EFF\u2F00\u2FDF\u2FF0\u2FFF\u3000\u303F\u3040\u309F\u30A0\u30FF\u3100\u312F\u3130\u318F\u3190\u319F\u31A0\u31BF\u3200\u32FF\u3300\u33FF\u3400\u4DB5\u4E00\u9FFF\uA000\uA48F\uA490\uA4CF\uAC00\uD7A3\uE000\uF8FF\uF900\uFAFF\uFB00\uFB4F\uFB50\uFDFF\uFE20\uFE2F\uFE30\uFE4F\uFE50\uFE6F\uFE70\uFEFE\uFEFF\uFEFF\uFF00\uFFEF',xxe='UNASSIGNED',yxe={3:1,117:1},zxe='org.eclipse.emf.ecore.xml.type.util',Axe={3:1,4:1,5:1,368:1},Bxe='org.eclipse.xtext.xbase.lib',Cxe='Cannot add elements to a Range',Dxe='Cannot set elements in a Range',Exe='Cannot remove elements from a Range',Fxe='locale',Gxe='default',Hxe='user.agent';var _,_bb,Wbb,tbb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;acb();bcb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.gm};_.Hb=function sb(){return FCb(this)};_.Ib=function ub(){var a;return hdb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var xD,yD,zD;bcb(290,1,{290:1,2026:1},jdb);_.le=function kdb(a){var b;b=new jdb;b.i=4;a>1?(b.c=rdb(this,a-1)):(b.c=this);return b};_.me=function qdb(){fdb(this);return this.b};_.ne=function sdb(){return hdb(this)};_.oe=function udb(){return fdb(this),this.k};_.pe=function wdb(){return (this.i&4)!=0};_.qe=function xdb(){return (this.i&1)!=0};_.Ib=function Adb(){return idb(this)};_.i=0;var edb=1;var SI=mdb(Phe,'Object',1);var AI=mdb(Phe,'Class',290);bcb(1998,1,Qhe);var $D=mdb(Rhe,'Optional',1998);bcb(1170,1998,Qhe,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var YD=mdb(Rhe,'Absent',1170);bcb(628,1,{},Gb);var ZD=mdb(Rhe,'Joiner',628);var _D=odb(Rhe,'Predicate');bcb(582,1,{169:1,582:1,3:1,45:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(JD(a,582)){b=BD(a,582);return At(this.a,b.a)}return false};_.Hb=function _b(){return qmb(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var aE=mdb(Rhe,'Predicates/AndPredicate',582);bcb(408,1998,{408:1,3:1},cc);_.Fb=function dc(a){var b;if(JD(a,408)){b=BD(a,408);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return Whe+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var bE=mdb(Rhe,'Present',408);bcb(198,1,Yhe);_.Nb=function kc(a){Rrb(this,a)};_.Qb=function lc(){jc()};var MH=mdb(Zhe,'UnmodifiableIterator',198);bcb(1978,198,$he);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw vbb(new bgb)};_.Wb=function oc(a){throw vbb(new bgb)};var NH=mdb(Zhe,'UnmodifiableListIterator',1978);bcb(386,1978,$he);_.Ob=function rc(){return this.c<this.d};_.Sb=function sc(){return this.c>0};_.Pb=function tc(){if(this.c>=this.d){throw vbb(new utb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw vbb(new utb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var cE=mdb(Zhe,'AbstractIndexedListIterator',386);bcb(699,198,Yhe);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var dE=mdb(Zhe,'AbstractIterator',699);bcb(1986,1,{224:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return hw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return fcb(this.Zb())};var IE=mdb(Zhe,'AbstractMultimap',1986);bcb(726,1986,_he);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return Yj(this.c.vc().Nc(),new $g,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return mmb(),new lnb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return Yj(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new dg(this,a,b,null)};_.d=0;var DE=mdb(Zhe,'AbstractMapBasedMultimap',726);bcb(1631,726,_he);_.hc=function pd(){return new Skb(this.a)};_.jc=function qd(){return mmb(),mmb(),jmb};_.cc=function sd(a){return BD(Qc(this,a),15)};_.fc=function ud(a){return BD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return hw(this,a)};_.qc=function td(a){return BD(Qc(this,a),15)};_.rc=function vd(a){return BD(Sc(this,a),15)};_.mc=function wd(a){return vmb(BD(a,15))};_.pc=function xd(a,b){return Vc(this,a,BD(b,15),null)};var eE=mdb(Zhe,'AbstractListMultimap',1631);bcb(732,1,aie);_.Nb=function zd(a){Rrb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=BD(this.c.Pb(),42);this.b=a.cd();this.a=BD(a.dd(),14);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();this.a.dc()&&this.c.Qb();--this.d.d};var mE=mdb(Zhe,'AbstractMapBasedMultimap/Itr',732);bcb(1099,732,aie,Dd);_.sc=function Ed(a,b){return b};var fE=mdb(Zhe,'AbstractMapBasedMultimap/1',1099);bcb(1100,1,{},Fd);_.Kb=function Gd(a){return BD(a,14).Nc()};var gE=mdb(Zhe,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1100);bcb(1101,732,aie,Hd);_.sc=function Id(a,b){return new Wo(a,b)};var hE=mdb(Zhe,'AbstractMapBasedMultimap/2',1101);var DK=odb(bie,'Map');bcb(1967,1,cie);_.wc=function Td(a){stb(this,a)};_.yc=function $d(a,b,c){return ttb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=BD(c.Pb(),42);d=b.dd();if(PD(a)===PD(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!JD(a,83)){return false}d=BD(a,83);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=BD(c.Pb(),42);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return pmb(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Pib(this)};_.zc=function _d(a,b){throw vbb(new cgb('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new $ib(this)};var sJ=mdb(bie,'AbstractMap',1967);bcb(1987,1967,cie);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new Zv(this)):a};var bH=mdb(Zhe,'Maps/ViewCachingAbstractMap',1987);bcb(389,1987,cie,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():ir(new mf(this))};_._b=function pe(a){return Gv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return fcb(this.d)};var lE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap',389);var KI=odb(Phe,'Iterable');bcb(28,1,die);_.Jc=function Le(a){reb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Kub(this,0)};_.Oc=function Qe(){return new YAb(null,this.Nc())};_.Fc=function Ge(a){throw vbb(new cgb('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var dJ=mdb(bie,'AbstractCollection',28);var LK=odb(bie,'Set');bcb(eie,28,fie);_.Nc=function Ye(){return new Kub(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return pmb(this)};var zJ=mdb(bie,'AbstractSet',eie);bcb(1970,eie,fie);var BH=mdb(Zhe,'Sets/ImprovedAbstractSet',1970);bcb(1971,1970,fie);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)){b=BD(a,42);return this.Rc().ec().Mc(b.cd())}return false};_.gc=function cf(){return this.Rc().gc()};var WG=mdb(Zhe,'Maps/EntrySet',1971);bcb(1097,1971,fie,df);_.Hc=function ef(a){return Ck(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Ck(this.a.d.vc(),a)){return false}b=BD(a,42);Tc(this.a.e,b.cd());return true};_.Nc=function jf(){return $j(this.a.d.vc().Nc(),new kf(this.a))};var jE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1097);bcb(1098,1,{},kf);_.Kb=function lf(a){return me(this.a,BD(a,42))};var iE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1098);bcb(730,1,aie,mf);_.Nb=function nf(a){Rrb(this,a)};_.Pb=function pf(){var a;return a=BD(this.b.Pb(),42),this.a=BD(a.dd(),14),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var kE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapIterator',730);bcb(532,1970,fie,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new Xv(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new Mv(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var $G=mdb(Zhe,'Maps/KeySet',532);bcb(318,532,fie,zf);_.$b=function Af(){var a;ir((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=BD(this.b.Bc(a),14);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var oE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet',318);bcb(731,1,aie,Hf);_.Nb=function If(a){Rrb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=BD(this.c.Pb(),42);return this.a.cd()};_.Qb=function Lf(){var a;Vb(!!this.a);a=BD(this.a.dd(),14);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var nE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet/1',731);bcb(491,389,{83:1,161:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Pf(){return this.Tc()};_.Sc=function Of(){return new Yf(this.c,this.Uc())};_.Tc=function Qf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Uc=function Rf(){return BD(this.d,161)};var sE=mdb(Zhe,'AbstractMapBasedMultimap/SortedAsMap',491);bcb(542,491,gie,Sf);_.bc=function Tf(){return new $f(this.a,BD(BD(this.d,161),171))};_.Sc=function Uf(){return new $f(this.a,BD(BD(this.d,161),171))};_.ec=function Vf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Tc=function Wf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Uc=function Xf(){return BD(BD(this.d,161),171)};var pE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableAsMap',542);bcb(490,318,hie,Yf);_.Nc=function Zf(){return this.b.ec().Nc()};var tE=mdb(Zhe,'AbstractMapBasedMultimap/SortedKeySet',490);bcb(388,490,iie,$f);var qE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableKeySet',388);bcb(541,28,die,dg);_.Fc=function eg(a){var b,c;ag(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&_f(this)}return b};_.Gc=function fg(a){var b,c,d;if(a.dc()){return false}d=(ag(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&_f(this)}return b};_.$b=function gg(){var a;a=(ag(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;bg(this)};_.Hc=function hg(a){ag(this);return this.d.Hc(a)};_.Ic=function ig(a){ag(this);return this.d.Ic(a)};_.Fb=function jg(a){if(a===this){return true}ag(this);return pb(this.d,a)};_.Hb=function kg(){ag(this);return tb(this.d)};_.Kc=function lg(){ag(this);return new Gg(this)};_.Mc=function mg(a){var b;ag(this);b=this.d.Mc(a);if(b){--this.f.d;bg(this)}return b};_.gc=function ng(){return cg(this)};_.Nc=function og(){return ag(this),this.d.Nc()};_.Ib=function pg(){ag(this);return fcb(this.d)};var vE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection',541);var yK=odb(bie,'List');bcb(728,541,{20:1,28:1,14:1,15:1},qg);_.ad=function zg(a){ktb(this,a)};_.Nc=function Ag(){return ag(this),this.d.Nc()};_.Vc=function rg(a,b){var c;ag(this);c=this.d.dc();BD(this.d,15).Vc(a,b);++this.a.d;c&&_f(this)};_.Wc=function sg(a,b){var c,d,e;if(b.dc()){return false}e=(ag(this),this.d.gc());c=BD(this.d,15).Wc(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&_f(this)}return c};_.Xb=function tg(a){ag(this);return BD(this.d,15).Xb(a)};_.Xc=function ug(a){ag(this);return BD(this.d,15).Xc(a)};_.Yc=function vg(){ag(this);return new Mg(this)};_.Zc=function wg(a){ag(this);return new Ng(this,a)};_.$c=function xg(a){var b;ag(this);b=BD(this.d,15).$c(a);--this.a.d;bg(this);return b};_._c=function yg(a,b){ag(this);return BD(this.d,15)._c(a,b)};_.bd=function Bg(a,b){ag(this);return Vc(this.a,this.e,BD(this.d,15).bd(a,b),!this.b?this:this.b)};var xE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList',728);bcb(1096,728,{20:1,28:1,14:1,15:1,54:1},Cg);var rE=mdb(Zhe,'AbstractMapBasedMultimap/RandomAccessWrappedList',1096);bcb(620,1,aie,Gg);_.Nb=function Ig(a){Rrb(this,a)};_.Ob=function Jg(){Fg(this);return this.b.Ob()};_.Pb=function Kg(){Fg(this);return this.b.Pb()};_.Qb=function Lg(){Eg(this)};var uE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',620);bcb(729,620,jie,Mg,Ng);_.Qb=function Tg(){Eg(this)};_.Rb=function Og(a){var b;b=cg(this.a)==0;(Fg(this),BD(this.b,125)).Rb(a);++this.a.a.d;b&&_f(this.a)};_.Sb=function Pg(){return (Fg(this),BD(this.b,125)).Sb()};_.Tb=function Qg(){return (Fg(this),BD(this.b,125)).Tb()};_.Ub=function Rg(){return (Fg(this),BD(this.b,125)).Ub()};_.Vb=function Sg(){return (Fg(this),BD(this.b,125)).Vb()};_.Wb=function Ug(a){(Fg(this),BD(this.b,125)).Wb(a)};var wE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',729);bcb(727,541,hie,Vg);_.Nc=function Wg(){return ag(this),this.d.Nc()};var AE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSortedSet',727);bcb(1095,727,iie,Xg);var yE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedNavigableSet',1095);bcb(1094,541,fie,Yg);_.Nc=function Zg(){return ag(this),this.d.Nc()};var zE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSet',1094);bcb(1103,1,{},$g);_.Kb=function _g(a){return fd(BD(a,42))};var BE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$1$Type',1103);bcb(1102,1,{},ah);_.Kb=function bh(a){return new Wo(this.a,a)};var CE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$2$Type',1102);var CK=odb(bie,'Map/Entry');bcb(345,1,kie);_.Fb=function dh(a){var b;if(JD(a,42)){b=BD(a,42);return Hb(this.cd(),b.cd())&&Hb(this.dd(),b.dd())}return false};_.Hb=function eh(){var a,b;a=this.cd();b=this.dd();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.ed=function fh(a){throw vbb(new bgb)};_.Ib=function gh(){return this.cd()+'='+this.dd()};var EE=mdb(Zhe,lie,345);bcb(1988,28,die);_.$b=function hh(){this.fd().$b()};_.Hc=function ih(a){var b;if(JD(a,42)){b=BD(a,42);return Cc(this.fd(),b.cd(),b.dd())}return false};_.Mc=function jh(a){var b;if(JD(a,42)){b=BD(a,42);return Gc(this.fd(),b.cd(),b.dd())}return false};_.gc=function kh(){return this.fd().d};var fH=mdb(Zhe,'Multimaps/Entries',1988);bcb(733,1988,die,lh);_.Kc=function mh(){return this.a.kc()};_.fd=function nh(){return this.a};_.Nc=function oh(){return this.a.lc()};var FE=mdb(Zhe,'AbstractMultimap/Entries',733);bcb(734,733,fie,ph);_.Nc=function sh(){return this.a.lc()};_.Fb=function qh(a){return Ax(this,a)};_.Hb=function rh(){return Bx(this)};var GE=mdb(Zhe,'AbstractMultimap/EntrySet',734);bcb(735,28,die,th);_.$b=function uh(){this.a.$b()};_.Hc=function vh(a){return Dc(this.a,a)};_.Kc=function wh(){return this.a.nc()};_.gc=function xh(){return this.a.d};_.Nc=function yh(){return this.a.oc()};var HE=mdb(Zhe,'AbstractMultimap/Values',735);bcb(1989,28,{835:1,20:1,28:1,14:1});_.Jc=function Gh(a){Qb(a);Ah(this).Jc(new Xw(a))};_.Nc=function Kh(){var a;return a=Ah(this).Nc(),Yj(a,new cx,64|a.qd()&1296,this.a.d)};_.Fc=function Ch(a){zh();return true};_.Gc=function Dh(a){return Qb(this),Qb(a),JD(a,543)?Zw(BD(a,835)):!a.dc()&&fr(this,a.Kc())};_.Hc=function Eh(a){var b;return b=BD(Hv(nd(this.a),a),14),(!b?0:b.gc())>0};_.Fb=function Fh(a){return $w(this,a)};_.Hb=function Hh(){return tb(Ah(this))};_.dc=function Ih(){return Ah(this).dc()};_.Mc=function Jh(a){return Bw(this,a,1)>0};_.Ib=function Lh(){return fcb(Ah(this))};var KE=mdb(Zhe,'AbstractMultiset',1989);bcb(1991,1970,fie);_.$b=function Mh(){Nc(this.a.a)};_.Hc=function Nh(a){var b,c;if(JD(a,492)){c=BD(a,416);if(BD(c.a.dd(),14).gc()<=0){return false}b=Aw(this.a,c.a.cd());return b==BD(c.a.dd(),14).gc()}return false};_.Mc=function Oh(a){var b,c,d,e;if(JD(a,492)){c=BD(a,416);b=c.a.cd();d=BD(c.a.dd(),14).gc();if(d!=0){e=this.a;return ax(e,b,d)}}return false};var pH=mdb(Zhe,'Multisets/EntrySet',1991);bcb(1109,1991,fie,Ph);_.Kc=function Qh(){return new Lw(fe(nd(this.a.a)).Kc())};_.gc=function Rh(){return nd(this.a.a).gc()};var JE=mdb(Zhe,'AbstractMultiset/EntrySet',1109);bcb(619,726,_he);_.hc=function Uh(){return this.gd()};_.jc=function Vh(){return this.hd()};_.cc=function Yh(a){return this.jd(a)};_.fc=function $h(a){return this.kd(a)};_.Zb=function Th(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.hd=function Wh(){return mmb(),mmb(),lmb};_.Fb=function Xh(a){return hw(this,a)};_.jd=function Zh(a){return BD(Qc(this,a),21)};_.kd=function _h(a){return BD(Sc(this,a),21)};_.mc=function ai(a){return mmb(),new zob(BD(a,21))};_.pc=function bi(a,b){return new Yg(this,a,BD(b,21))};var LE=mdb(Zhe,'AbstractSetMultimap',619);bcb(1657,619,_he);_.hc=function ei(){return new Hxb(this.b)};_.gd=function fi(){return new Hxb(this.b)};_.jc=function gi(){return Ix(new Hxb(this.b))};_.hd=function hi(){return Ix(new Hxb(this.b))};_.cc=function ii(a){return BD(BD(Qc(this,a),21),84)};_.jd=function ji(a){return BD(BD(Qc(this,a),21),84)};_.fc=function ki(a){return BD(BD(Sc(this,a),21),84)};_.kd=function li(a){return BD(BD(Sc(this,a),21),84)};_.mc=function mi(a){return JD(a,271)?Ix(BD(a,271)):(mmb(),new Zob(BD(a,84)))};_.Zb=function di(){var a;return a=this.f,!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a};_.pc=function ni(a,b){return JD(b,271)?new Xg(this,a,BD(b,271)):new Vg(this,a,BD(b,84))};var NE=mdb(Zhe,'AbstractSortedSetMultimap',1657);bcb(1658,1657,_he);_.Zb=function pi(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.ec=function ri(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.bc=function qi(){return JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)};var ME=mdb(Zhe,'AbstractSortedKeySortedSetMultimap',1658);bcb(2010,1,{1947:1});_.Fb=function si(a){return zy(this,a)};_.Hb=function ti(){var a;return pmb((a=this.g,!a?(this.g=new vi(this)):a))};_.Ib=function ui(){var a;return Md((a=this.f,!a?(this.f=new Rj(this)):a))};var QE=mdb(Zhe,'AbstractTable',2010);bcb(665,eie,fie,vi);_.$b=function wi(){Pi()};_.Hc=function xi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Ck(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.Kc=function yi(){return Ni(this.a)};_.Mc=function zi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Dk(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.gc=function Ai(){return Xi(this.a)};_.Nc=function Bi(){return Oi(this.a)};var OE=mdb(Zhe,'AbstractTable/CellSet',665);bcb(1928,28,die,Ci);_.$b=function Di(){Pi()};_.Hc=function Ei(a){return Qi(this.a,a)};_.Kc=function Fi(){return Zi(this.a)};_.gc=function Gi(){return Xi(this.a)};_.Nc=function Hi(){return $i(this.a)};var PE=mdb(Zhe,'AbstractTable/Values',1928);bcb(1632,1631,_he);var RE=mdb(Zhe,'ArrayListMultimapGwtSerializationDependencies',1632);bcb(513,1632,_he,Ji,Ki);_.hc=function Li(){return new Skb(this.a)};_.a=0;var SE=mdb(Zhe,'ArrayListMultimap',513);bcb(664,2010,{664:1,1947:1,3:1},_i);var cF=mdb(Zhe,'ArrayTable',664);bcb(1924,386,$he,aj);_.Xb=function bj(a){return new hj(this.a,a)};var TE=mdb(Zhe,'ArrayTable/1',1924);bcb(1925,1,{},cj);_.ld=function dj(a){return new hj(this.a,a)};var UE=mdb(Zhe,'ArrayTable/1methodref$getCell$Type',1925);bcb(2011,1,{682:1});_.Fb=function ej(a){var b;if(a===this){return true}if(JD(a,468)){b=BD(a,682);return Hb(Em(this.c.e,this.b),Em(b.c.e,b.b))&&Hb(Em(this.c.c,this.a),Em(b.c.c,b.a))&&Hb(Mi(this.c,this.b,this.a),Mi(b.c,b.b,b.a))}return false};_.Hb=function fj(){return Hlb(OC(GC(SI,1),Uhe,1,5,[Em(this.c.e,this.b),Em(this.c.c,this.a),Mi(this.c,this.b,this.a)]))};_.Ib=function gj(){return '('+Em(this.c.e,this.b)+','+Em(this.c.c,this.a)+')='+Mi(this.c,this.b,this.a)};var JH=mdb(Zhe,'Tables/AbstractCell',2011);bcb(468,2011,{468:1,682:1},hj);_.a=0;_.b=0;_.d=0;var VE=mdb(Zhe,'ArrayTable/2',468);bcb(1927,1,{},ij);_.ld=function jj(a){return Ti(this.a,a)};var WE=mdb(Zhe,'ArrayTable/2methodref$getValue$Type',1927);bcb(1926,386,$he,kj);_.Xb=function lj(a){return Ti(this.a,a)};var XE=mdb(Zhe,'ArrayTable/3',1926);bcb(1979,1967,cie);_.$b=function nj(){ir(this.kc())};_.vc=function oj(){return new Sv(this)};_.lc=function pj(){return new Mub(this.kc(),this.gc())};var YG=mdb(Zhe,'Maps/IteratorBasedAbstractMap',1979);bcb(828,1979,cie);_.$b=function tj(){throw vbb(new bgb)};_._b=function uj(a){return sn(this.c,a)};_.kc=function vj(){return new Jj(this,this.c.b.c.gc())};_.lc=function wj(){return Zj(this.c.b.c.gc(),16,new Dj(this))};_.xc=function xj(a){var b;b=BD(tn(this.c,a),19);return !b?null:this.nd(b.a)};_.dc=function yj(){return this.c.b.c.dc()};_.ec=function zj(){return Xm(this.c)};_.zc=function Aj(a,b){var c;c=BD(tn(this.c,a),19);if(!c){throw vbb(new Wdb(this.md()+' '+a+' not in '+Xm(this.c)))}return this.od(c.a,b)};_.Bc=function Bj(a){throw vbb(new bgb)};_.gc=function Cj(){return this.c.b.c.gc()};var _E=mdb(Zhe,'ArrayTable/ArrayMap',828);bcb(1923,1,{},Dj);_.ld=function Ej(a){return qj(this.a,a)};var YE=mdb(Zhe,'ArrayTable/ArrayMap/0methodref$getEntry$Type',1923);bcb(1921,345,kie,Fj);_.cd=function Gj(){return rj(this.a,this.b)};_.dd=function Hj(){return this.a.nd(this.b)};_.ed=function Ij(a){return this.a.od(this.b,a)};_.b=0;var ZE=mdb(Zhe,'ArrayTable/ArrayMap/1',1921);bcb(1922,386,$he,Jj);_.Xb=function Kj(a){return qj(this.a,a)};var $E=mdb(Zhe,'ArrayTable/ArrayMap/2',1922);bcb(1920,828,cie,Lj);_.md=function Mj(){return 'Column'};_.nd=function Nj(a){return Mi(this.b,this.a,a)};_.od=function Oj(a,b){return Wi(this.b,this.a,a,b)};_.a=0;var bF=mdb(Zhe,'ArrayTable/Row',1920);bcb(829,828,cie,Rj);_.nd=function Tj(a){return new Lj(this.a,a)};_.zc=function Uj(a,b){return BD(b,83),Pj()};_.od=function Vj(a,b){return BD(b,83),Qj()};_.md=function Sj(){return 'Row'};var aF=mdb(Zhe,'ArrayTable/RowMap',829);bcb(1120,1,pie,_j);_.qd=function ak(){return this.a.qd()&-262};_.rd=function bk(){return this.a.rd()};_.Nb=function ck(a){this.a.Nb(new gk(a,this.b))};_.sd=function dk(a){return this.a.sd(new ek(a,this.b))};var lF=mdb(Zhe,'CollectSpliterators/1',1120);bcb(1121,1,qie,ek);_.td=function fk(a){this.a.td(this.b.Kb(a))};var dF=mdb(Zhe,'CollectSpliterators/1/lambda$0$Type',1121);bcb(1122,1,qie,gk);_.td=function hk(a){this.a.td(this.b.Kb(a))};var eF=mdb(Zhe,'CollectSpliterators/1/lambda$1$Type',1122);bcb(1123,1,pie,jk);_.qd=function kk(){return this.a};_.rd=function lk(){!!this.d&&(this.b=Deb(this.b,this.d.rd()));return Deb(this.b,0)};_.Nb=function mk(a){if(this.d){this.d.Nb(a);this.d=null}this.c.Nb(new rk(this.e,a));this.b=0};_.sd=function ok(a){while(true){if(!!this.d&&this.d.sd(a)){Kbb(this.b,rie)&&(this.b=Qbb(this.b,1));return true}else{this.d=null}if(!this.c.sd(new pk(this,this.e))){return false}}};_.a=0;_.b=0;var hF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator',1123);bcb(1124,1,qie,pk);_.td=function qk(a){ik(this.a,this.b,a)};var fF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$0$Type',1124);bcb(1125,1,qie,rk);_.td=function sk(a){nk(this.b,this.a,a)};var gF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$1$Type',1125);bcb(1117,1,pie,tk);_.qd=function uk(){return 16464|this.b};_.rd=function vk(){return this.a.rd()};_.Nb=function wk(a){this.a.xe(new Ak(a,this.c))};_.sd=function xk(a){return this.a.ye(new yk(a,this.c))};_.b=0;var kF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics',1117);bcb(1118,1,sie,yk);_.ud=function zk(a){this.a.td(this.b.ld(a))};var iF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1118);bcb(1119,1,sie,Ak);_.ud=function Bk(a){this.a.td(this.b.ld(a))};var jF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1119);bcb(245,1,tie);_.wd=function Hk(a){return this.vd(BD(a,245))};_.vd=function Gk(a){var b;if(a==(_k(),$k)){return 1}if(a==(Lk(),Kk)){return -1}b=(ex(),Fcb(this.a,a.a));if(b!=0){return b}return JD(this,519)==JD(a,519)?0:JD(this,519)?1:-1};_.zd=function Ik(){return this.a};_.Fb=function Jk(a){return Ek(this,a)};var qF=mdb(Zhe,'Cut',245);bcb(1761,245,tie,Mk);_.vd=function Nk(a){return a==this?0:1};_.xd=function Ok(a){throw vbb(new xcb)};_.yd=function Pk(a){a.a+='+\u221E)'};_.zd=function Qk(){throw vbb(new Zdb(uie))};_.Hb=function Rk(){return Zfb(),kCb(this)};_.Ad=function Sk(a){return false};_.Ib=function Tk(){return '+\u221E'};var Kk;var mF=mdb(Zhe,'Cut/AboveAll',1761);bcb(519,245,{245:1,519:1,3:1,35:1},Uk);_.xd=function Vk(a){Pfb((a.a+='(',a),this.a)};_.yd=function Wk(a){Kfb(Pfb(a,this.a),93)};_.Hb=function Xk(){return ~tb(this.a)};_.Ad=function Yk(a){return ex(),Fcb(this.a,a)<0};_.Ib=function Zk(){return '/'+this.a+'\\'};var nF=mdb(Zhe,'Cut/AboveValue',519);bcb(1760,245,tie,al);_.vd=function bl(a){return a==this?0:-1};_.xd=function cl(a){a.a+='(-\u221E'};_.yd=function dl(a){throw vbb(new xcb)};_.zd=function el(){throw vbb(new Zdb(uie))};_.Hb=function fl(){return Zfb(),kCb(this)};_.Ad=function gl(a){return true};_.Ib=function hl(){return '-\u221E'};var $k;var oF=mdb(Zhe,'Cut/BelowAll',1760);bcb(1762,245,tie,il);_.xd=function jl(a){Pfb((a.a+='[',a),this.a)};_.yd=function kl(a){Kfb(Pfb(a,this.a),41)};_.Hb=function ll(){return tb(this.a)};_.Ad=function ml(a){return ex(),Fcb(this.a,a)<=0};_.Ib=function nl(){return '\\'+this.a+'/'};var pF=mdb(Zhe,'Cut/BelowValue',1762);bcb(537,1,vie);_.Jc=function ql(a){reb(this,a)};_.Ib=function rl(){return tr(BD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var uF=mdb(Zhe,'FluentIterable',537);bcb(433,537,vie,sl);_.Kc=function tl(){return new Sr(ur(this.a.Kc(),new Sq))};var rF=mdb(Zhe,'FluentIterable/2',433);bcb(1046,537,vie,vl);_.Kc=function wl(){return ul(this)};var tF=mdb(Zhe,'FluentIterable/3',1046);bcb(708,386,$he,xl);_.Xb=function yl(a){return this.a[a].Kc()};var sF=mdb(Zhe,'FluentIterable/3/1',708);bcb(1972,1,{});_.Ib=function zl(){return fcb(this.Bd().b)};var BF=mdb(Zhe,'ForwardingObject',1972);bcb(1973,1972,wie);_.Bd=function Fl(){return this.Cd()};_.Jc=function Gl(a){reb(this,a)};_.Lc=function Jl(){return this.Oc()};_.Nc=function Ml(){return new Kub(this,0)};_.Oc=function Nl(){return new YAb(null,this.Nc())};_.Fc=function Al(a){return this.Cd(),enb()};_.Gc=function Bl(a){return this.Cd(),fnb()};_.$b=function Cl(){this.Cd(),gnb()};_.Hc=function Dl(a){return this.Cd().Hc(a)};_.Ic=function El(a){return this.Cd().Ic(a)};_.dc=function Hl(){return this.Cd().b.dc()};_.Kc=function Il(){return this.Cd().Kc()};_.Mc=function Kl(a){return this.Cd(),jnb()};_.gc=function Ll(){return this.Cd().b.gc()};_.Pc=function Ol(){return this.Cd().Pc()};_.Qc=function Pl(a){return this.Cd().Qc(a)};var vF=mdb(Zhe,'ForwardingCollection',1973);bcb(1980,28,xie);_.Kc=function Xl(){return this.Ed()};_.Fc=function Sl(a){throw vbb(new bgb)};_.Gc=function Tl(a){throw vbb(new bgb)};_.$b=function Ul(){throw vbb(new bgb)};_.Hc=function Vl(a){return a!=null&&ze(this,a,false)};_.Dd=function Wl(){switch(this.gc()){case 0:return im(),im(),hm;case 1:return im(),new my(Qb(this.Ed().Pb()));default:return new px(this,this.Pc());}};_.Mc=function Yl(a){throw vbb(new bgb)};var WF=mdb(Zhe,'ImmutableCollection',1980);bcb(712,1980,xie,Zl);_.Kc=function cm(){return vr(this.a.Kc())};_.Hc=function $l(a){return a!=null&&this.a.Hc(a)};_.Ic=function _l(a){return this.a.Ic(a)};_.dc=function am(){return this.a.dc()};_.Ed=function bm(){return vr(this.a.Kc())};_.gc=function dm(){return this.a.gc()};_.Pc=function em(){return this.a.Pc()};_.Qc=function fm(a){return this.a.Qc(a)};_.Ib=function gm(){return fcb(this.a)};var wF=mdb(Zhe,'ForwardingImmutableCollection',712);bcb(152,1980,yie);_.Kc=function sm(){return this.Ed()};_.Yc=function tm(){return this.Fd(0)};_.Zc=function vm(a){return this.Fd(a)};_.ad=function zm(a){ktb(this,a)};_.Nc=function Am(){return new Kub(this,16)};_.bd=function Cm(a,b){return this.Gd(a,b)};_.Vc=function lm(a,b){throw vbb(new bgb)};_.Wc=function mm(a,b){throw vbb(new bgb)};_.Fb=function om(a){return Ju(this,a)};_.Hb=function pm(){return Ku(this)};_.Xc=function qm(a){return a==null?-1:Lu(this,a)};_.Ed=function rm(){return this.Fd(0)};_.Fd=function um(a){return jm(this,a)};_.$c=function xm(a){throw vbb(new bgb)};_._c=function ym(a,b){throw vbb(new bgb)};_.Gd=function Bm(a,b){var c;return Dm((c=new $u(this),new Jib(c,a,b)))};var hm;var _F=mdb(Zhe,'ImmutableList',152);bcb(2006,152,yie);_.Kc=function Nm(){return vr(this.Hd().Kc())};_.bd=function Qm(a,b){return Dm(this.Hd().bd(a,b))};_.Hc=function Fm(a){return a!=null&&this.Hd().Hc(a)};_.Ic=function Gm(a){return this.Hd().Ic(a)};_.Fb=function Hm(a){return pb(this.Hd(),a)};_.Xb=function Im(a){return Em(this,a)};_.Hb=function Jm(){return tb(this.Hd())};_.Xc=function Km(a){return this.Hd().Xc(a)};_.dc=function Lm(){return this.Hd().dc()};_.Ed=function Mm(){return vr(this.Hd().Kc())};_.gc=function Om(){return this.Hd().gc()};_.Gd=function Pm(a,b){return Dm(this.Hd().bd(a,b))};_.Pc=function Rm(){return this.Hd().Qc(KC(SI,Uhe,1,this.Hd().gc(),5,1))};_.Qc=function Sm(a){return this.Hd().Qc(a)};_.Ib=function Tm(){return fcb(this.Hd())};var xF=mdb(Zhe,'ForwardingImmutableList',2006);bcb(714,1,Aie);_.vc=function cn(){return Wm(this)};_.wc=function en(a){stb(this,a)};_.ec=function jn(){return Xm(this)};_.yc=function kn(a,b,c){return ttb(this,a,b,c)};_.Cc=function rn(){return this.Ld()};_.$b=function Zm(){throw vbb(new bgb)};_._b=function $m(a){return this.xc(a)!=null};_.uc=function _m(a){return this.Ld().Hc(a)};_.Jd=function an(){return new jq(this)};_.Kd=function bn(){return new sq(this)};_.Fb=function dn(a){return Dv(this,a)};_.Hb=function gn(){return Wm(this).Hb()};_.dc=function hn(){return this.gc()==0};_.zc=function nn(a,b){return Ym()};_.Bc=function on(a){throw vbb(new bgb)};_.Ib=function pn(){return Jv(this)};_.Ld=function qn(){if(this.e){return this.e}return this.e=this.Kd()};_.c=null;_.d=null;_.e=null;var Um;var iG=mdb(Zhe,'ImmutableMap',714);bcb(715,714,Aie);_._b=function vn(a){return sn(this,a)};_.uc=function wn(a){return dob(this.b,a)};_.Id=function xn(){return Vn(new Ln(this))};_.Jd=function yn(){return Vn(gob(this.b))};_.Kd=function zn(){return Ql(),new Zl(hob(this.b))};_.Fb=function An(a){return fob(this.b,a)};_.xc=function Bn(a){return tn(this,a)};_.Hb=function Cn(){return tb(this.b.c)};_.dc=function Dn(){return this.b.c.dc()};_.gc=function En(){return this.b.c.gc()};_.Ib=function Fn(){return fcb(this.b.c)};var zF=mdb(Zhe,'ForwardingImmutableMap',715);bcb(1974,1973,Bie);_.Bd=function Gn(){return this.Md()};_.Cd=function Hn(){return this.Md()};_.Nc=function Kn(){return new Kub(this,1)};_.Fb=function In(a){return a===this||this.Md().Fb(a)};_.Hb=function Jn(){return this.Md().Hb()};var CF=mdb(Zhe,'ForwardingSet',1974);bcb(1069,1974,Bie,Ln);_.Bd=function Nn(){return eob(this.a.b)};_.Cd=function On(){return eob(this.a.b)};_.Hc=function Mn(b){if(JD(b,42)&&BD(b,42).cd()==null){return false}try{return Dob(eob(this.a.b),b)}catch(a){a=ubb(a);if(JD(a,205)){return false}else throw vbb(a)}};_.Md=function Pn(){return eob(this.a.b)};_.Qc=function Qn(a){var b;b=Eob(eob(this.a.b),a);eob(this.a.b).b.gc()<b.length&&NC(b,eob(this.a.b).b.gc(),null);return b};var yF=mdb(Zhe,'ForwardingImmutableMap/1',1069);bcb(1981,1980,Cie);_.Kc=function Tn(){return this.Ed()};_.Nc=function Un(){return new Kub(this,1)};_.Fb=function Rn(a){return Ax(this,a)};_.Hb=function Sn(){return Bx(this)};var jG=mdb(Zhe,'ImmutableSet',1981);bcb(703,1981,Cie);_.Kc=function ao(){return vr(new Dnb(this.a.b.Kc()))};_.Hc=function Xn(a){return a!=null&&hnb(this.a,a)};_.Ic=function Yn(a){return inb(this.a,a)};_.Hb=function Zn(){return tb(this.a.b)};_.dc=function $n(){return this.a.b.dc()};_.Ed=function _n(){return vr(new Dnb(this.a.b.Kc()))};_.gc=function bo(){return this.a.b.gc()};_.Pc=function co(){return this.a.b.Pc()};_.Qc=function eo(a){return knb(this.a,a)};_.Ib=function fo(){return fcb(this.a.b)};var AF=mdb(Zhe,'ForwardingImmutableSet',703);bcb(1975,1974,Die);_.Bd=function go(){return this.b};_.Cd=function ho(){return this.b};_.Md=function io(){return this.b};_.Nc=function jo(){return new Rub(this)};var DF=mdb(Zhe,'ForwardingSortedSet',1975);bcb(533,1979,Aie,wo);_.Ac=function Fo(a){Ld(this,a)};_.Cc=function Io(){var a;return a=this.d,new up(!a?(this.d=new ap(this)):a)};_.$b=function xo(){ko(this)};_._b=function yo(a){return !!uo(this,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))))};_.uc=function zo(a){return lo(this,a)};_.kc=function Ao(){return new Qo(this,this)};_.wc=function Bo(a){no(this,a)};_.xc=function Co(a){return oo(this,a)};_.ec=function Do(){return new Bp(this)};_.zc=function Eo(a,b){return ro(this,a,b)};_.Bc=function Go(a){var b;b=uo(this,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return null}else{mo(this,b);b.e=null;b.c=null;return b.i}};_.gc=function Ho(){return this.i};_.pd=function Jo(){var a;return a=this.d,new up(!a?(this.d=new ap(this)):a)};_.f=0;_.g=0;_.i=0;var QF=mdb(Zhe,'HashBiMap',533);bcb(534,1,aie);_.Nb=function Mo(a){Rrb(this,a)};_.Ob=function No(){return Ko(this)};_.Pb=function Oo(){var a;if(!Ko(this)){throw vbb(new utb)}a=this.c;this.c=a.c;this.f=a;--this.d;return this.Nd(a)};_.Qb=function Po(){if(this.e.g!=this.b){throw vbb(new Apb)}Vb(!!this.f);mo(this.e,this.f);this.b=this.e.g;this.f=null};_.b=0;_.d=0;_.f=null;var NF=mdb(Zhe,'HashBiMap/Itr',534);bcb(1011,534,aie,Qo);_.Nd=function Ro(a){return new So(this,a)};var FF=mdb(Zhe,'HashBiMap/1',1011);bcb(1012,345,kie,So);_.cd=function To(){return this.a.g};_.dd=function Uo(){return this.a.i};_.ed=function Vo(a){var b,c,d;c=this.a.i;d=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));if(d==this.a.f&&(PD(a)===PD(c)||a!=null&&pb(a,c))){return a}Nb(!vo(this.b.a,a,d),a);mo(this.b.a,this.a);b=new $o(this.a.g,this.a.a,a,d);po(this.b.a,b,this.a);this.a.e=null;this.a.c=null;this.b.b=this.b.a.g;this.b.f==this.a&&(this.b.f=b);this.a=b;return c};var EF=mdb(Zhe,'HashBiMap/1/MapEntry',1012);bcb(238,345,{345:1,238:1,3:1,42:1},Wo);_.cd=function Xo(){return this.g};_.dd=function Yo(){return this.i};_.ed=function Zo(a){throw vbb(new bgb)};var XF=mdb(Zhe,'ImmutableEntry',238);bcb(317,238,{345:1,317:1,238:1,3:1,42:1},$o);_.a=0;_.f=0;var GF=mdb(Zhe,'HashBiMap/BiEntry',317);bcb(610,1979,Aie,ap);_.Ac=function jp(a){Ld(this,a)};_.Cc=function mp(){return new Bp(this.a)};_.$b=function bp(){ko(this.a)};_._b=function cp(a){return lo(this.a,a)};_.kc=function dp(){return new op(this,this.a)};_.wc=function ep(a){Qb(a);no(this.a,new zp(a))};_.xc=function fp(a){return _o(this,a)};_.ec=function gp(){return new up(this)};_.zc=function ip(a,b){return so(this.a,a,b,false)};_.Bc=function kp(a){var b;b=vo(this.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return null}else{mo(this.a,b);b.e=null;b.c=null;return b.g}};_.gc=function lp(){return this.a.i};_.pd=function np(){return new Bp(this.a)};var MF=mdb(Zhe,'HashBiMap/Inverse',610);bcb(1008,534,aie,op);_.Nd=function pp(a){return new qp(this,a)};var IF=mdb(Zhe,'HashBiMap/Inverse/1',1008);bcb(1009,345,kie,qp);_.cd=function rp(){return this.a.i};_.dd=function sp(){return this.a.g};_.ed=function tp(a){var b,c,d;d=this.a.g;b=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));if(b==this.a.a&&(PD(a)===PD(d)||a!=null&&pb(a,d))){return a}Nb(!uo(this.b.a.a,a,b),a);mo(this.b.a.a,this.a);c=new $o(a,b,this.a.i,this.a.f);this.a=c;po(this.b.a.a,c,null);this.b.b=this.b.a.a.g;return d};var HF=mdb(Zhe,'HashBiMap/Inverse/1/InverseEntry',1009);bcb(611,532,fie,up);_.Kc=function vp(){return new xp(this.a.a)};_.Mc=function wp(a){var b;b=vo(this.a.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return false}else{mo(this.a.a,b);return true}};var KF=mdb(Zhe,'HashBiMap/Inverse/InverseKeySet',611);bcb(1007,534,aie,xp);_.Nd=function yp(a){return a.i};var JF=mdb(Zhe,'HashBiMap/Inverse/InverseKeySet/1',1007);bcb(1010,1,{},zp);_.Od=function Ap(a,b){hp(this.a,a,b)};var LF=mdb(Zhe,'HashBiMap/Inverse/lambda$0$Type',1010);bcb(609,532,fie,Bp);_.Kc=function Cp(){return new Ep(this.a)};_.Mc=function Dp(a){var b;b=uo(this.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return false}else{mo(this.a,b);b.e=null;b.c=null;return true}};var PF=mdb(Zhe,'HashBiMap/KeySet',609);bcb(1006,534,aie,Ep);_.Nd=function Fp(a){return a.g};var OF=mdb(Zhe,'HashBiMap/KeySet/1',1006);bcb(1093,619,_he);var RF=mdb(Zhe,'HashMultimapGwtSerializationDependencies',1093);bcb(265,1093,_he,Hp);_.hc=function Ip(){return new Uqb(Cv(this.a))};_.gd=function Jp(){return new Uqb(Cv(this.a))};_.a=2;var SF=mdb(Zhe,'HashMultimap',265);bcb(1999,152,yie);_.Hc=function Mp(a){return this.Pd().Hc(a)};_.dc=function Np(){return this.Pd().dc()};_.gc=function Op(){return this.Pd().gc()};var TF=mdb(Zhe,'ImmutableAsList',1999);bcb(1931,715,Aie);_.Ld=function Qp(){return Ql(),new oy(this.a)};_.Cc=function Rp(){return Ql(),new oy(this.a)};_.pd=function Sp(){return Ql(),new oy(this.a)};var UF=mdb(Zhe,'ImmutableBiMap',1931);bcb(1977,1,{});var VF=mdb(Zhe,'ImmutableCollection/Builder',1977);bcb(1022,703,Cie,Tp);var YF=mdb(Zhe,'ImmutableEnumSet',1022);bcb(969,386,$he,Vp);_.Xb=function Wp(a){return this.a.Xb(a)};var ZF=mdb(Zhe,'ImmutableList/1',969);bcb(968,1977,{},Xp);var $F=mdb(Zhe,'ImmutableList/Builder',968);bcb(614,198,Yhe,Yp);_.Ob=function Zp(){return this.a.Ob()};_.Pb=function $p(){return BD(this.a.Pb(),42).cd()};var aG=mdb(Zhe,'ImmutableMap/1',614);bcb(1041,1,{},_p);_.Kb=function aq(a){return BD(a,42).cd()};var bG=mdb(Zhe,'ImmutableMap/2methodref$getKey$Type',1041);bcb(1040,1,{},cq);var cG=mdb(Zhe,'ImmutableMap/Builder',1040);bcb(2000,1981,Cie);_.Kc=function gq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.Dd=function dq(){return new Fq(this)};_.Jc=function eq(a){var b,c;Qb(a);c=this.gc();for(b=0;b<c;b++){a.td(BD(Rl(Wm(this.a)).Xb(b),42).cd())}};_.Ed=function fq(){var a;return (a=this.c,!a?(this.c=new Fq(this)):a).Ed()};_.Nc=function hq(){return Zj(this.gc(),1296,new Dq(this))};var mG=mdb(Zhe,'IndexedImmutableSet',2000);bcb(1180,2000,Cie,jq);_.Kc=function nq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.Hc=function kq(a){return this.a._b(a)};_.Jc=function lq(a){Qb(a);stb(this.a,new qq(a))};_.Ed=function mq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.gc=function oq(){return this.a.gc()};_.Nc=function pq(){return $j(Wm(this.a).Nc(),new _p)};var eG=mdb(Zhe,'ImmutableMapKeySet',1180);bcb(1181,1,{},qq);_.Od=function rq(a,b){Ql();this.a.td(a)};var dG=mdb(Zhe,'ImmutableMapKeySet/lambda$0$Type',1181);bcb(1178,1980,xie,sq);_.Kc=function vq(){return new Aq(this)};_.Hc=function tq(a){return a!=null&&jr(new Aq(this),a)};_.Ed=function uq(){return new Aq(this)};_.gc=function wq(){return this.a.gc()};_.Nc=function xq(){return $j(Wm(this.a).Nc(),new yq)};var hG=mdb(Zhe,'ImmutableMapValues',1178);bcb(1179,1,{},yq);_.Kb=function zq(a){return BD(a,42).dd()};var fG=mdb(Zhe,'ImmutableMapValues/0methodref$getValue$Type',1179);bcb(626,198,Yhe,Aq);_.Ob=function Bq(){return this.a.Ob()};_.Pb=function Cq(){return BD(this.a.Pb(),42).dd()};var gG=mdb(Zhe,'ImmutableMapValues/1',626);bcb(1182,1,{},Dq);_.ld=function Eq(a){return iq(this.a,a)};var kG=mdb(Zhe,'IndexedImmutableSet/0methodref$get$Type',1182);bcb(752,1999,yie,Fq);_.Pd=function Gq(){return this.a};_.Xb=function Hq(a){return iq(this.a,a)};_.gc=function Iq(){return this.a.a.gc()};var lG=mdb(Zhe,'IndexedImmutableSet/1',752);bcb(44,1,{},Sq);_.Kb=function Tq(a){return BD(a,20).Kc()};_.Fb=function Uq(a){return this===a};var nG=mdb(Zhe,'Iterables/10',44);bcb(1042,537,vie,Wq);_.Jc=function Xq(a){Qb(a);this.b.Jc(new $q(this.a,a))};_.Kc=function Yq(){return Vq(this)};var pG=mdb(Zhe,'Iterables/4',1042);bcb(1043,1,qie,$q);_.td=function _q(a){Zq(this.b,this.a,a)};var oG=mdb(Zhe,'Iterables/4/lambda$0$Type',1043);bcb(1044,537,vie,ar);_.Jc=function br(a){Qb(a);reb(this.a,new dr(a,this.b))};_.Kc=function cr(){return ur(new Fyd(this.a),this.b)};var rG=mdb(Zhe,'Iterables/5',1044);bcb(1045,1,qie,dr);_.td=function er(a){this.a.td(Gfd(a))};var qG=mdb(Zhe,'Iterables/5/lambda$0$Type',1045);bcb(1071,198,Yhe,wr);_.Ob=function xr(){return this.a.Ob()};_.Pb=function yr(){return this.a.Pb()};var sG=mdb(Zhe,'Iterators/1',1071);bcb(1072,699,Yhe,zr);_.Yb=function Ar(){var a;while(this.b.Ob()){a=this.b.Pb();if(this.a.Lb(a)){return a}}return this.e=2,null};var tG=mdb(Zhe,'Iterators/5',1072);bcb(487,1,aie);_.Nb=function Cr(a){Rrb(this,a)};_.Ob=function Dr(){return this.b.Ob()};_.Pb=function Er(){return this.Qd(this.b.Pb())};_.Qb=function Fr(){this.b.Qb()};var KH=mdb(Zhe,'TransformedIterator',487);bcb(1073,487,aie,Gr);_.Qd=function Hr(a){return this.a.Kb(a)};var uG=mdb(Zhe,'Iterators/6',1073);bcb(717,198,Yhe,Ir);_.Ob=function Jr(){return !this.a};_.Pb=function Kr(){if(this.a){throw vbb(new utb)}this.a=true;return this.b};_.a=false;var vG=mdb(Zhe,'Iterators/9',717);bcb(1070,386,$he,Nr);_.Xb=function Or(a){return this.a[this.b+a]};_.b=0;var Lr;var wG=mdb(Zhe,'Iterators/ArrayItr',1070);bcb(39,1,{39:1,47:1},Sr);_.Nb=function Tr(a){Rrb(this,a)};_.Ob=function Ur(){return Qr(this)};_.Pb=function Vr(){return Rr(this)};_.Qb=function Wr(){Vb(!!this.c);this.c.Qb();this.c=null};var xG=mdb(Zhe,'Iterators/ConcatenatedIterator',39);bcb(22,1,{3:1,35:1,22:1});_.wd=function _r(a){return Xr(this,BD(a,22))};_.Fb=function bs(a){return this===a};_.Hb=function cs(){return FCb(this)};_.Ib=function ds(){return Zr(this)};_.g=0;var CI=mdb(Phe,'Enum',22);bcb(538,22,{538:1,3:1,35:1,22:1,47:1},is);_.Nb=function js(a){Rrb(this,a)};_.Ob=function ks(){return false};_.Pb=function ls(){throw vbb(new utb)};_.Qb=function ms(){Vb(false)};var gs;var yG=ndb(Zhe,'Iterators/EmptyModifiableIterator',538,CI,os,ns);var ps;bcb(1834,619,_he);var EG=mdb(Zhe,'LinkedHashMultimapGwtSerializationDependencies',1834);bcb(1835,1834,_he,ss);_.hc=function us(){return new Asb(Cv(this.b))};_.$b=function ts(){Nc(this);As(this.a,this.a)};_.gd=function vs(){return new Asb(Cv(this.b))};_.ic=function ws(a){return new Ss(this,a,this.b)};_.kc=function xs(){return new Hs(this)};_.lc=function ys(){var a;return new Kub((a=this.g,BD(!a?(this.g=new ph(this)):a,21)),17)};_.ec=function zs(){var a;return a=this.i,!a?(this.i=new zf(this,this.c)):a};_.nc=function Cs(){return new Ov(new Hs(this))};_.oc=function Ds(){var a;return $j(new Kub((a=this.g,BD(!a?(this.g=new ph(this)):a,21)),17),new Es)};_.b=2;var FG=mdb(Zhe,'LinkedHashMultimap',1835);bcb(1838,1,{},Es);_.Kb=function Fs(a){return BD(a,42).dd()};var zG=mdb(Zhe,'LinkedHashMultimap/0methodref$getValue$Type',1838);bcb(824,1,aie,Hs);_.Nb=function Is(a){Rrb(this,a)};_.Pb=function Ks(){return Gs(this)};_.Ob=function Js(){return this.a!=this.b.a};_.Qb=function Ls(){Vb(!!this.c);Gc(this.b,this.c.g,this.c.i);this.c=null};var AG=mdb(Zhe,'LinkedHashMultimap/1',824);bcb(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},Ms);_.Rd=function Ns(){return this.f};_.Sd=function Os(a){this.c=a};_.Td=function Ps(a){this.f=a};_.d=0;var BG=mdb(Zhe,'LinkedHashMultimap/ValueEntry',330);bcb(1836,1970,{2020:1,20:1,28:1,14:1,21:1},Ss);_.Fc=function Ts(a){var b,c,d,e,f;f=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));b=f&this.b.length-1;e=this.b[b];for(c=e;c;c=c.a){if(c.d==f&&Hb(c.i,a)){return false}}d=new Ms(this.c,a,f,e);Bs(this.d,d);d.f=this;this.d=d;As(this.g.a.b,d);As(d,this.g.a);this.b[b]=d;++this.f;++this.e;Qs(this);return true};_.$b=function Us(){var a,b;Alb(this.b,null);this.f=0;for(a=this.a;a!=this;a=a.Rd()){b=BD(a,330);As(b.b,b.e)}this.a=this;this.d=this;++this.e};_.Hc=function Vs(a){var b,c;c=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));for(b=this.b[c&this.b.length-1];b;b=b.a){if(b.d==c&&Hb(b.i,a)){return true}}return false};_.Jc=function Ws(a){var b;Qb(a);for(b=this.a;b!=this;b=b.Rd()){a.td(BD(b,330).i)}};_.Rd=function Xs(){return this.a};_.Kc=function Ys(){return new ct(this)};_.Mc=function Zs(a){return Rs(this,a)};_.Sd=function $s(a){this.d=a};_.Td=function _s(a){this.a=a};_.gc=function at(){return this.f};_.e=0;_.f=0;var DG=mdb(Zhe,'LinkedHashMultimap/ValueSet',1836);bcb(1837,1,aie,ct);_.Nb=function dt(a){Rrb(this,a)};_.Ob=function et(){return bt(this),this.b!=this.c};_.Pb=function ft(){var a,b;bt(this);if(this.b==this.c){throw vbb(new utb)}a=BD(this.b,330);b=a.i;this.d=a;this.b=a.f;return b};_.Qb=function gt(){bt(this);Vb(!!this.d);Rs(this.c,this.d.i);this.a=this.c.e;this.d=null};_.a=0;var CG=mdb(Zhe,'LinkedHashMultimap/ValueSet/1',1837);bcb(766,1986,_he,mt);_.Zb=function nt(){var a;return a=this.f,!a?(this.f=new jw(this)):a};_.Fb=function tt(a){return hw(this,a)};_.cc=function ut(a){return new bu(this,a)};_.fc=function xt(a){return kt(this,a)};_.$b=function pt(){it(this)};_._b=function qt(a){return jt(this,a)};_.ac=function rt(){return new jw(this)};_.bc=function st(){return new eu(this)};_.qc=function vt(a){return new bu(this,a)};_.dc=function wt(){return !this.a};_.rc=function yt(a){return kt(this,a)};_.gc=function zt(){return this.d};_.c=0;_.d=0;var MG=mdb(Zhe,'LinkedListMultimap',766);bcb(52,28,Lie);_.ad=function Pt(a){ktb(this,a)};_.Nc=function Qt(){return new Kub(this,16)};_.Vc=function Ct(a,b){throw vbb(new cgb('Add not supported on this list'))};_.Fc=function Dt(a){this.Vc(this.gc(),a);return true};_.Wc=function Et(a,b){var c,d,e;uCb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();this.Vc(a++,d);c=true}return c};_.$b=function Ft(){this.Ud(0,this.gc())};_.Fb=function Gt(a){return At(this,a)};_.Hb=function Ht(){return qmb(this)};_.Xc=function It(a){return Bt(this,a)};_.Kc=function Jt(){return new vib(this)};_.Yc=function Kt(){return this.Zc(0)};_.Zc=function Lt(a){return new Bib(this,a)};_.$c=function Mt(a){throw vbb(new cgb('Remove not supported on this list'))};_.Ud=function Nt(a,b){var c,d;d=this.Zc(a);for(c=a;c<b;++c){d.Pb();d.Qb()}};_._c=function Ot(a,b){throw vbb(new cgb('Set not supported on this list'))};_.bd=function Rt(a,b){return new Jib(this,a,b)};_.j=0;var kJ=mdb(bie,'AbstractList',52);bcb(1964,52,Lie);_.Vc=function Wt(a,b){St(this,a,b)};_.Wc=function Xt(a,b){return Tt(this,a,b)};_.Xb=function Yt(a){return Ut(this,a)};_.Kc=function Zt(){return this.Zc(0)};_.$c=function $t(a){return Vt(this,a)};_._c=function _t(b,c){var d,e;d=this.Zc(b);try{e=d.Pb();d.Wb(c);return e}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't set element "+b))}else throw vbb(a)}};var yJ=mdb(bie,'AbstractSequentialList',1964);bcb(636,1964,Lie,bu);_.Zc=function cu(a){return au(this,a)};_.gc=function du(){var a;a=BD(Ohb(this.a.b,this.b),283);return !a?0:a.a};var HG=mdb(Zhe,'LinkedListMultimap/1',636);bcb(1297,1970,fie,eu);_.Hc=function fu(a){return jt(this.a,a)};_.Kc=function gu(){return new ku(this.a)};_.Mc=function hu(a){return !kt(this.a,a).a.dc()};_.gc=function iu(){return Vhb(this.a.b)};var GG=mdb(Zhe,'LinkedListMultimap/1KeySetImpl',1297);bcb(1296,1,aie,ku);_.Nb=function lu(a){Rrb(this,a)};_.Ob=function mu(){ju(this);return !!this.c};_.Pb=function nu(){ju(this);ot(this.c);this.a=this.c;Qqb(this.d,this.a.a);do{this.c=this.c.b}while(!!this.c&&!Qqb(this.d,this.c.a));return this.a.a};_.Qb=function ou(){ju(this);Vb(!!this.a);ir(new wu(this.e,this.a.a));this.a=null;this.b=this.e.c};_.b=0;var IG=mdb(Zhe,'LinkedListMultimap/DistinctKeyIterator',1296);bcb(283,1,{283:1},pu);_.a=0;var JG=mdb(Zhe,'LinkedListMultimap/KeyList',283);bcb(1295,345,kie,qu);_.cd=function ru(){return this.a};_.dd=function su(){return this.f};_.ed=function tu(a){var b;b=this.f;this.f=a;return b};var KG=mdb(Zhe,'LinkedListMultimap/Node',1295);bcb(560,1,jie,wu,xu);_.Nb=function zu(a){Rrb(this,a)};_.Rb=function yu(a){this.e=ht(this.f,this.b,a,this.c);++this.d;this.a=null};_.Ob=function Au(){return !!this.c};_.Sb=function Bu(){return !!this.e};_.Pb=function Cu(){return uu(this)};_.Tb=function Du(){return this.d};_.Ub=function Eu(){return vu(this)};_.Vb=function Fu(){return this.d-1};_.Qb=function Gu(){Vb(!!this.a);if(this.a!=this.c){this.e=this.a.e;--this.d}else{this.c=this.a.c}lt(this.f,this.a);this.a=null};_.Wb=function Hu(a){Ub(!!this.a);this.a.f=a};_.d=0;var LG=mdb(Zhe,'LinkedListMultimap/ValueForKeyIterator',560);bcb(1018,52,Lie);_.Vc=function Tu(a,b){this.a.Vc(a,b)};_.Wc=function Uu(a,b){return this.a.Wc(a,b)};_.Hc=function Vu(a){return this.a.Hc(a)};_.Xb=function Wu(a){return this.a.Xb(a)};_.$c=function Xu(a){return this.a.$c(a)};_._c=function Yu(a,b){return this.a._c(a,b)};_.gc=function Zu(){return this.a.gc()};var OG=mdb(Zhe,'Lists/AbstractListWrapper',1018);bcb(1019,1018,Nie);var PG=mdb(Zhe,'Lists/RandomAccessListWrapper',1019);bcb(1021,1019,Nie,$u);_.Zc=function _u(a){return this.a.Zc(a)};var NG=mdb(Zhe,'Lists/1',1021);bcb(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},dv);_.Vc=function ev(a,b){this.a.Vc(cv(this,a),b)};_.$b=function fv(){this.a.$b()};_.Xb=function gv(a){return this.a.Xb(bv(this,a))};_.Kc=function hv(){return av(this,0)};_.Zc=function iv(a){return av(this,a)};_.$c=function jv(a){return this.a.$c(bv(this,a))};_.Ud=function kv(a,b){(Tb(a,b,this.a.gc()),Su(this.a.bd(cv(this,b),cv(this,a)))).$b()};_._c=function lv(a,b){return this.a._c(bv(this,a),b)};_.gc=function mv(){return this.a.gc()};_.bd=function nv(a,b){return Tb(a,b,this.a.gc()),Su(this.a.bd(cv(this,b),cv(this,a)))};var SG=mdb(Zhe,'Lists/ReverseList',131);bcb(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},ov);var QG=mdb(Zhe,'Lists/RandomAccessReverseList',280);bcb(1020,1,jie,qv);_.Nb=function sv(a){Rrb(this,a)};_.Rb=function rv(a){this.c.Rb(a);this.c.Ub();this.a=false};_.Ob=function tv(){return this.c.Sb()};_.Sb=function uv(){return this.c.Ob()};_.Pb=function vv(){return pv(this)};_.Tb=function wv(){return cv(this.b,this.c.Tb())};_.Ub=function xv(){if(!this.c.Ob()){throw vbb(new utb)}this.a=true;return this.c.Pb()};_.Vb=function yv(){return cv(this.b,this.c.Tb())-1};_.Qb=function zv(){Vb(this.a);this.c.Qb();this.a=false};_.Wb=function Av(a){Ub(this.a);this.c.Wb(a)};_.a=false;var RG=mdb(Zhe,'Lists/ReverseList/1',1020);bcb(432,487,aie,Mv);_.Qd=function Nv(a){return Lv(a)};var TG=mdb(Zhe,'Maps/1',432);bcb(698,487,aie,Ov);_.Qd=function Pv(a){return BD(a,42).dd()};var UG=mdb(Zhe,'Maps/2',698);bcb(962,487,aie,Qv);_.Qd=function Rv(a){return new Wo(a,ww(this.a,a))};var VG=mdb(Zhe,'Maps/3',962);bcb(959,1971,fie,Sv);_.Jc=function Tv(a){mj(this.a,a)};_.Kc=function Uv(){return this.a.kc()};_.Rc=function Vv(){return this.a};_.Nc=function Wv(){return this.a.lc()};var XG=mdb(Zhe,'Maps/IteratorBasedAbstractMap/1',959);bcb(960,1,{},Xv);_.Od=function Yv(a,b){this.a.td(a)};var ZG=mdb(Zhe,'Maps/KeySet/lambda$0$Type',960);bcb(958,28,die,Zv);_.$b=function $v(){this.a.$b()};_.Hc=function _v(a){return this.a.uc(a)};_.Jc=function aw(a){Qb(a);this.a.wc(new fw(a))};_.dc=function bw(){return this.a.dc()};_.Kc=function cw(){return new Ov(this.a.vc().Kc())};_.Mc=function dw(b){var c,d;try{return ze(this,b,true)}catch(a){a=ubb(a);if(JD(a,41)){for(d=this.a.vc().Kc();d.Ob();){c=BD(d.Pb(),42);if(Hb(b,c.dd())){this.a.Bc(c.cd());return true}}return false}else throw vbb(a)}};_.gc=function ew(){return this.a.gc()};var aH=mdb(Zhe,'Maps/Values',958);bcb(961,1,{},fw);_.Od=function gw(a,b){this.a.td(b)};var _G=mdb(Zhe,'Maps/Values/lambda$0$Type',961);bcb(736,1987,cie,jw);_.xc=function nw(a){return this.a._b(a)?this.a.cc(a):null};_.Bc=function qw(a){return this.a._b(a)?this.a.fc(a):null};_.$b=function kw(){this.a.$b()};_._b=function lw(a){return this.a._b(a)};_.Ec=function mw(){return new sw(this)};_.Dc=function(){return this.Ec()};_.dc=function ow(){return this.a.dc()};_.ec=function pw(){return this.a.ec()};_.gc=function rw(){return this.a.ec().gc()};var eH=mdb(Zhe,'Multimaps/AsMap',736);bcb(1104,1971,fie,sw);_.Kc=function tw(){return Bv(this.a.a.ec(),new xw(this))};_.Rc=function uw(){return this.a};_.Mc=function vw(a){var b;if(!Ze(this,a)){return false}b=BD(a,42);iw(this.a,b.cd());return true};var dH=mdb(Zhe,'Multimaps/AsMap/EntrySet',1104);bcb(1108,1,{},xw);_.Kb=function yw(a){return ww(this,a)};_.Fb=function zw(a){return this===a};var cH=mdb(Zhe,'Multimaps/AsMap/EntrySet/1',1108);bcb(543,1989,{543:1,835:1,20:1,28:1,14:1},Cw);_.$b=function Dw(){Nc(this.a)};_.Hc=function Ew(a){return Oc(this.a,a)};_.Jc=function Fw(a){Qb(a);reb(Pc(this.a),new Rw(a))};_.Kc=function Gw(){return new Mv(Pc(this.a).a.kc())};_.gc=function Hw(){return this.a.d};_.Nc=function Iw(){return $j(Pc(this.a).Nc(),new Jw)};var kH=mdb(Zhe,'Multimaps/Keys',543);bcb(1106,1,{},Jw);_.Kb=function Kw(a){return BD(a,42).cd()};var gH=mdb(Zhe,'Multimaps/Keys/0methodref$getKey$Type',1106);bcb(1105,487,aie,Lw);_.Qd=function Mw(a){return new Qw(BD(a,42))};var iH=mdb(Zhe,'Multimaps/Keys/1',1105);bcb(1990,1,{416:1});_.Fb=function Nw(a){var b;if(JD(a,492)){b=BD(a,416);return BD(this.a.dd(),14).gc()==BD(b.a.dd(),14).gc()&&Hb(this.a.cd(),b.a.cd())}return false};_.Hb=function Ow(){var a;a=this.a.cd();return (a==null?0:tb(a))^BD(this.a.dd(),14).gc()};_.Ib=function Pw(){var a,b;b=xfb(this.a.cd());a=BD(this.a.dd(),14).gc();return a==1?b:b+' x '+a};var oH=mdb(Zhe,'Multisets/AbstractEntry',1990);bcb(492,1990,{492:1,416:1},Qw);var hH=mdb(Zhe,'Multimaps/Keys/1/1',492);bcb(1107,1,qie,Rw);_.td=function Sw(a){this.a.td(BD(a,42).cd())};var jH=mdb(Zhe,'Multimaps/Keys/lambda$1$Type',1107);bcb(1110,1,qie,Vw);_.td=function Ww(a){Tw(BD(a,416))};var lH=mdb(Zhe,'Multiset/lambda$0$Type',1110);bcb(737,1,qie,Xw);_.td=function Yw(a){Uw(this.a,BD(a,416))};var mH=mdb(Zhe,'Multiset/lambda$1$Type',737);bcb(1111,1,{},bx);var nH=mdb(Zhe,'Multisets/0methodref$add$Type',1111);bcb(738,1,{},cx);_.Kb=function dx(a){return _w(BD(a,416))};var qH=mdb(Zhe,'Multisets/lambda$3$Type',738);bcb(2008,1,Qhe);var rH=mdb(Zhe,'RangeGwtSerializationDependencies',2008);bcb(514,2008,{169:1,514:1,3:1,45:1},gx);_.Lb=function hx(a){return fx(this,BD(a,35))};_.Mb=function lx(a){return fx(this,BD(a,35))};_.Fb=function jx(a){var b;if(JD(a,514)){b=BD(a,514);return Ek(this.a,b.a)&&Ek(this.b,b.b)}return false};_.Hb=function kx(){return this.a.Hb()*31+this.b.Hb()};_.Ib=function mx(){return nx(this.a,this.b)};var sH=mdb(Zhe,'Range',514);bcb(778,1999,yie,px);_.Zc=function tx(a){return jm(this.b,a)};_.Pd=function qx(){return this.a};_.Xb=function rx(a){return Em(this.b,a)};_.Fd=function sx(a){return jm(this.b,a)};var tH=mdb(Zhe,'RegularImmutableAsList',778);bcb(646,2006,yie,ux);_.Hd=function vx(){return this.a};var uH=mdb(Zhe,'RegularImmutableList',646);bcb(616,715,Aie,wx);var vH=mdb(Zhe,'RegularImmutableMap',616);bcb(716,703,Cie,zx);var xx;var wH=mdb(Zhe,'RegularImmutableSet',716);bcb(1976,eie,fie);_.Kc=function Mx(){return new Xx(this.a,this.b)};_.Fc=function Jx(a){throw vbb(new bgb)};_.Gc=function Kx(a){throw vbb(new bgb)};_.$b=function Lx(){throw vbb(new bgb)};_.Mc=function Nx(a){throw vbb(new bgb)};var CH=mdb(Zhe,'Sets/SetView',1976);bcb(963,1976,fie,Px);_.Kc=function Tx(){return new Xx(this.a,this.b)};_.Hc=function Qx(a){return tqb(this.a,a)&&this.b.Hc(a)};_.Ic=function Rx(a){return Be(this.a,a)&&this.b.Ic(a)};_.dc=function Sx(){return omb(this.b,this.a)};_.Lc=function Ux(){return JAb(new YAb(null,new Kub(this.a,1)),new _x(this.b))};_.gc=function Vx(){return Ox(this)};_.Oc=function Wx(){return JAb(new YAb(null,new Kub(this.a,1)),new Zx(this.b))};var AH=mdb(Zhe,'Sets/2',963);bcb(700,699,Yhe,Xx);_.Yb=function Yx(){var a;while(Eqb(this.a)){a=Fqb(this.a);if(this.c.Hc(a)){return a}}return this.e=2,null};var xH=mdb(Zhe,'Sets/2/1',700);bcb(964,1,Oie,Zx);_.Mb=function $x(a){return this.a.Hc(a)};var yH=mdb(Zhe,'Sets/2/4methodref$contains$Type',964);bcb(965,1,Oie,_x);_.Mb=function ay(a){return this.a.Hc(a)};var zH=mdb(Zhe,'Sets/2/5methodref$contains$Type',965);bcb(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},by);_.Bd=function cy(){return this.b};_.Cd=function dy(){return this.b};_.Md=function ey(){return this.b};_.Jc=function fy(a){this.a.Jc(a)};_.Lc=function gy(){return this.a.Lc()};_.Oc=function hy(){return this.a.Oc()};var DH=mdb(Zhe,'Sets/UnmodifiableNavigableSet',607);bcb(1932,1931,Aie,iy);_.Ld=function jy(){return Ql(),new oy(this.a)};_.Cc=function ky(){return Ql(),new oy(this.a)};_.pd=function ly(){return Ql(),new oy(this.a)};var EH=mdb(Zhe,'SingletonImmutableBiMap',1932);bcb(647,2006,yie,my);_.Hd=function ny(){return this.a};var FH=mdb(Zhe,'SingletonImmutableList',647);bcb(350,1981,Cie,oy);_.Kc=function ry(){return new Ir(this.a)};_.Hc=function py(a){return pb(this.a,a)};_.Ed=function qy(){return new Ir(this.a)};_.gc=function sy(){return 1};var GH=mdb(Zhe,'SingletonImmutableSet',350);bcb(1115,1,{},vy);_.Kb=function wy(a){return BD(a,164)};var HH=mdb(Zhe,'Streams/lambda$0$Type',1115);bcb(1116,1,Pie,xy);_.Vd=function yy(){uy(this.a)};var IH=mdb(Zhe,'Streams/lambda$1$Type',1116);bcb(1659,1658,_he,Ay);_.Zb=function By(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.hc=function Ey(){return new Hxb(this.b)};_.gd=function Fy(){return new Hxb(this.b)};_.ec=function Hy(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.ac=function Dy(){return JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)};_.ic=function Gy(a){a==null&&this.a.ue(a,a);return new Hxb(this.b)};var LH=mdb(Zhe,'TreeMultimap',1659);bcb(78,1,{3:1,78:1});_.Wd=function $y(a){return new Error(a)};_.Xd=function az(){return this.e};_.Yd=function bz(){return XAb(NAb(Plb((this.k==null&&(this.k=KC(_I,nie,78,0,0,1)),this.k)),new _fb),new bBb)};_.Zd=function cz(){return this.f};_.$d=function dz(){return this.g};_._d=function ez(){Vy(this,_y(this.Wd(Wy(this,this.g))));Sz(this)};_.Ib=function fz(){return Wy(this,this.$d())};_.e=Sie;_.i=false;_.n=true;var _I=mdb(Phe,'Throwable',78);bcb(102,78,{3:1,102:1,78:1});var EI=mdb(Phe,'Exception',102);bcb(60,102,Tie,gz,hz);var TI=mdb(Phe,'RuntimeException',60);bcb(598,60,Tie);var LI=mdb(Phe,'JsException',598);bcb(863,598,Tie);var RH=mdb(Uie,'JavaScriptExceptionBase',863);bcb(477,863,{477:1,3:1,102:1,60:1,78:1},lz);_.$d=function oz(){kz(this);return this.c};_.ae=function pz(){return PD(this.b)===PD(iz)?null:this.b};var iz;var OH=mdb(Wie,'JavaScriptException',477);var PH=mdb(Wie,'JavaScriptObject$',0);var tz;bcb(1948,1,{});var QH=mdb(Wie,'Scheduler',1948);var xz=0,yz=0,zz=-1;bcb(890,1948,{},Nz);var Jz;var SH=mdb(Uie,'SchedulerImpl',890);var Qz;bcb(1960,1,{});var WH=mdb(Uie,'StackTraceCreator/Collector',1960);bcb(864,1960,{},Yz);_.be=function Zz(a){var b={},j;var c=[];a[Yie]=c;var d=arguments.callee.caller;while(d){var e=(Rz(),d.name||(d.name=Uz(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h<i;h++){if(g[h]===d){return}}}(g||(b[f]=[])).push(d);d=d.caller}};_.ce=function $z(a){var b,c,d,e;d=(Rz(),a&&a[Yie]?a[Yie]:[]);c=d.length;e=KC(VI,nie,310,c,0,1);for(b=0;b<c;b++){e[b]=new Zeb(d[b],null,-1)}return e};var TH=mdb(Uie,'StackTraceCreator/CollectorLegacy',864);bcb(1961,1960,{});_.be=function aA(a){};_.de=function bA(a,b,c,d){return new Zeb(b,a+'@'+d,c<0?-1:c)};_.ce=function cA(a){var b,c,d,e,f,g;e=Wz(a);f=KC(VI,nie,310,0,0,1);b=0;d=e.length;if(d==0){return f}g=_z(this,e[0]);dfb(g.d,Xie)||(f[b++]=g);for(c=1;c<d;c++){f[b++]=_z(this,e[c])}return f};var VH=mdb(Uie,'StackTraceCreator/CollectorModern',1961);bcb(865,1961,{},dA);_.de=function eA(a,b,c,d){return new Zeb(b,a,-1)};var UH=mdb(Uie,'StackTraceCreator/CollectorModernNoSourceMap',865);bcb(1050,1,{});var cI=mdb(yje,zje,1050);bcb(615,1050,{615:1},HA);var FA;var XH=mdb(Aje,zje,615);bcb(2001,1,{});var dI=mdb(yje,Bje,2001);bcb(2002,2001,{});var YH=mdb(Aje,Bje,2002);bcb(1090,1,{},MA);var JA;var ZH=mdb(Aje,'LocaleInfo',1090);bcb(1918,1,{},PA);_.a=0;var _H=mdb(Aje,'TimeZone',1918);bcb(1258,2002,{},VA);var aI=mdb('com.google.gwt.i18n.client.impl.cldr','DateTimeFormatInfoImpl',1258);bcb(434,1,{434:1},WA);_.a=false;_.b=0;var bI=mdb(yje,'DateTimeFormat/PatternPart',434);bcb(199,1,Cje,eB,fB,gB);_.wd=function hB(a){return XA(this,BD(a,199))};_.Fb=function iB(a){return JD(a,199)&&Bbb(Cbb(this.q.getTime()),Cbb(BD(a,199).q.getTime()))};_.Hb=function jB(){var a;a=Cbb(this.q.getTime());return Tbb(Vbb(a,Pbb(a,32)))};_.Ib=function lB(){var a,b,c;c=-this.q.getTimezoneOffset();a=(c>=0?'+':'')+(c/60|0);b=kB($wnd.Math.abs(c)%60);return (Dpb(),Bpb)[this.q.getDay()]+' '+Cpb[this.q.getMonth()]+' '+kB(this.q.getDate())+' '+kB(this.q.getHours())+':'+kB(this.q.getMinutes())+':'+kB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var $J=mdb(bie,'Date',199);bcb(1915,199,Cje,nB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var eI=mdb('com.google.gwt.i18n.shared.impl','DateRecord',1915);bcb(1966,1,{});_.fe=function oB(){return null};_.ge=function pB(){return null};_.he=function qB(){return null};_.ie=function rB(){return null};_.je=function sB(){return null};var nI=mdb(Dje,'JSONValue',1966);bcb(216,1966,{216:1},wB,xB);_.Fb=function yB(a){if(!JD(a,216)){return false}return qz(this.a,BD(a,216).a)};_.ee=function zB(){return DB};_.Hb=function AB(){return rz(this.a)};_.fe=function BB(){return this};_.Ib=function CB(){var a,b,c;c=new Wfb('[');for(b=0,a=this.a.length;b<a;b++){b>0&&(c.a+=',',c);Pfb(c,tB(this,b))}c.a+=']';return c.a};var fI=mdb(Dje,'JSONArray',216);bcb(483,1966,{483:1},HB);_.ee=function IB(){return LB};_.ge=function JB(){return this};_.Ib=function KB(){return Bcb(),''+this.a};_.a=false;var EB,FB;var gI=mdb(Dje,'JSONBoolean',483);bcb(985,60,Tie,MB);var hI=mdb(Dje,'JSONException',985);bcb(1023,1966,{},PB);_.ee=function QB(){return SB};_.Ib=function RB(){return Xhe};var NB;var iI=mdb(Dje,'JSONNull',1023);bcb(258,1966,{258:1},TB);_.Fb=function UB(a){if(!JD(a,258)){return false}return this.a==BD(a,258).a};_.ee=function VB(){return ZB};_.Hb=function WB(){return Hdb(this.a)};_.he=function XB(){return this};_.Ib=function YB(){return this.a+''};_.a=0;var jI=mdb(Dje,'JSONNumber',258);bcb(183,1966,{183:1},eC,fC);_.Fb=function gC(a){if(!JD(a,183)){return false}return qz(this.a,BD(a,183).a)};_.ee=function hC(){return lC};_.Hb=function iC(){return rz(this.a)};_.ie=function jC(){return this};_.Ib=function kC(){var a,b,c,d,e,f,g;g=new Wfb('{');a=true;f=$B(this,KC(ZI,nie,2,0,6,1));for(c=f,d=0,e=c.length;d<e;++d){b=c[d];a?(a=false):(g.a+=She,g);Qfb(g,vz(b));g.a+=':';Pfb(g,aC(this,b))}g.a+='}';return g.a};var lI=mdb(Dje,'JSONObject',183);bcb(596,eie,fie,mC);_.Hc=function nC(a){return ND(a)&&_B(this.a,GD(a))};_.Kc=function oC(){return new vib(new amb(this.b))};_.gc=function pC(){return this.b.length};var kI=mdb(Dje,'JSONObject/1',596);var qC;bcb(204,1966,{204:1},yC);_.Fb=function zC(a){if(!JD(a,204)){return false}return dfb(this.a,BD(a,204).a)};_.ee=function AC(){return EC};_.Hb=function BC(){return LCb(this.a)};_.je=function CC(){return this};_.Ib=function DC(){return vz(this.a)};var mI=mdb(Dje,'JSONString',204);var QC;var sD,tD,uD,vD;bcb(1962,1,{525:1});var pI=mdb(Lje,'OutputStream',1962);bcb(1963,1962,{525:1});var oI=mdb(Lje,'FilterOutputStream',1963);bcb(866,1963,{525:1},jcb);var qI=mdb(Lje,'PrintStream',866);bcb(418,1,{475:1});_.Ib=function ncb(){return this.a};var rI=mdb(Phe,'AbstractStringBuilder',418);bcb(529,60,Tie,ocb);var sI=mdb(Phe,'ArithmeticException',529);bcb(73,60,Mje,pcb,qcb);var II=mdb(Phe,'IndexOutOfBoundsException',73);bcb(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},rcb,scb);var tI=mdb(Phe,'ArrayIndexOutOfBoundsException',320);bcb(528,60,Tie,tcb,ucb);var uI=mdb(Phe,'ArrayStoreException',528);bcb(289,78,Nje,vcb);var DI=mdb(Phe,'Error',289);bcb(194,289,Nje,xcb,ycb);var vI=mdb(Phe,'AssertionError',194);xD={3:1,476:1,35:1};var zcb,Acb;var wI=mdb(Phe,'Boolean',476);bcb(236,1,{3:1,236:1});var Gcb;var RI=mdb(Phe,'Number',236);bcb(217,236,{3:1,217:1,35:1,236:1},Mcb);_.wd=function Ncb(a){return Lcb(this,BD(a,217))};_.ke=function Ocb(){return this.a};_.Fb=function Pcb(a){return JD(a,217)&&BD(a,217).a==this.a};_.Hb=function Qcb(){return this.a};_.Ib=function Rcb(){return ''+this.a};_.a=0;var xI=mdb(Phe,'Byte',217);var Tcb;bcb(172,1,{3:1,172:1,35:1},Xcb);_.wd=function Ycb(a){return Wcb(this,BD(a,172))};_.Fb=function $cb(a){return JD(a,172)&&BD(a,172).a==this.a};_.Hb=function _cb(){return this.a};_.Ib=function adb(){return String.fromCharCode(this.a)};_.a=0;var Vcb;var yI=mdb(Phe,'Character',172);var cdb;bcb(205,60,{3:1,205:1,102:1,60:1,78:1},Bdb,Cdb);var zI=mdb(Phe,'ClassCastException',205);yD={3:1,35:1,333:1,236:1};var BI=mdb(Phe,'Double',333);bcb(155,236,{3:1,35:1,155:1,236:1},Ndb,Odb);_.wd=function Pdb(a){return Mdb(this,BD(a,155))};_.ke=function Qdb(){return this.a};_.Fb=function Rdb(a){return JD(a,155)&&Fdb(this.a,BD(a,155).a)};_.Hb=function Sdb(){return QD(this.a)};_.Ib=function Udb(){return ''+this.a};_.a=0;var FI=mdb(Phe,'Float',155);bcb(32,60,{3:1,102:1,32:1,60:1,78:1},Vdb,Wdb,Xdb);var GI=mdb(Phe,'IllegalArgumentException',32);bcb(71,60,Tie,Ydb,Zdb);var HI=mdb(Phe,'IllegalStateException',71);bcb(19,236,{3:1,35:1,19:1,236:1},_db);_.wd=function ceb(a){return $db(this,BD(a,19))};_.ke=function deb(){return this.a};_.Fb=function eeb(a){return JD(a,19)&&BD(a,19).a==this.a};_.Hb=function feb(){return this.a};_.Ib=function leb(){return ''+this.a};_.a=0;var JI=mdb(Phe,'Integer',19);var neb;var peb;bcb(162,236,{3:1,35:1,162:1,236:1},teb);_.wd=function veb(a){return seb(this,BD(a,162))};_.ke=function web(){return Sbb(this.a)};_.Fb=function xeb(a){return JD(a,162)&&Bbb(BD(a,162).a,this.a)};_.Hb=function yeb(){return Tbb(this.a)};_.Ib=function zeb(){return ''+Ubb(this.a)};_.a=0;var MI=mdb(Phe,'Long',162);var Beb;bcb(2039,1,{});bcb(1831,60,Tie,Feb);var NI=mdb(Phe,'NegativeArraySizeException',1831);bcb(173,598,{3:1,102:1,173:1,60:1,78:1},Geb,Heb);_.Wd=function Ieb(a){return new TypeError(a)};var OI=mdb(Phe,'NullPointerException',173);var Jeb,Keb,Leb,Meb;bcb(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},Oeb);var QI=mdb(Phe,'NumberFormatException',127);bcb(184,236,{3:1,35:1,236:1,184:1},Qeb);_.wd=function Reb(a){return Peb(this,BD(a,184))};_.ke=function Seb(){return this.a};_.Fb=function Teb(a){return JD(a,184)&&BD(a,184).a==this.a};_.Hb=function Ueb(){return this.a};_.Ib=function Veb(){return ''+this.a};_.a=0;var UI=mdb(Phe,'Short',184);var Xeb;bcb(310,1,{3:1,310:1},Zeb);_.Fb=function $eb(a){var b;if(JD(a,310)){b=BD(a,310);return this.c==b.c&&this.d==b.d&&this.a==b.a&&this.b==b.b}return false};_.Hb=function _eb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[meb(this.c),this.a,this.d,this.b]))};_.Ib=function afb(){return this.a+'.'+this.d+'('+(this.b!=null?this.b:'Unknown Source')+(this.c>=0?':'+this.c:'')+')'};_.c=0;var VI=mdb(Phe,'StackTraceElement',310);zD={3:1,475:1,35:1,2:1};var ZI=mdb(Phe,Vie,2);bcb(107,418,{475:1},Hfb,Ifb,Jfb);var WI=mdb(Phe,'StringBuffer',107);bcb(100,418,{475:1},Ufb,Vfb,Wfb);var XI=mdb(Phe,'StringBuilder',100);bcb(687,73,Mje,Xfb);var YI=mdb(Phe,'StringIndexOutOfBoundsException',687);bcb(2043,1,{});var Yfb;bcb(844,1,{},_fb);_.Kb=function agb(a){return BD(a,78).e};var $I=mdb(Phe,'Throwable/lambda$0$Type',844);bcb(41,60,{3:1,102:1,60:1,78:1,41:1},bgb,cgb);var aJ=mdb(Phe,'UnsupportedOperationException',41);bcb(240,236,{3:1,35:1,236:1,240:1},sgb,tgb);_.wd=function wgb(a){return mgb(this,BD(a,240))};_.ke=function xgb(){return Hcb(rgb(this))};_.Fb=function ygb(a){var b;if(this===a){return true}if(JD(a,240)){b=BD(a,240);return this.e==b.e&&mgb(this,b)==0}return false};_.Hb=function zgb(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Cbb(this.f);this.b=Tbb(xbb(a,-1));this.b=33*this.b+Tbb(xbb(Obb(a,32),-1));this.b=17*this.b+QD(this.e);return this.b}this.b=17*Ngb(this.c)+QD(this.e);return this.b};_.Ib=function Agb(){return rgb(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var dgb,egb,fgb,ggb,hgb,igb,jgb,kgb;var bJ=mdb('java.math','BigDecimal',240);bcb(91,236,{3:1,35:1,236:1,91:1},Tgb,Ugb,Vgb,Wgb,Xgb,Ygb);_.wd=function $gb(a){return Igb(this,BD(a,91))};_.ke=function _gb(){return Hcb(shb(this,0))};_.Fb=function ahb(a){return Kgb(this,a)};_.Hb=function chb(){return Ngb(this)};_.Ib=function ehb(){return shb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Bgb,Cgb,Dgb,Egb,Fgb,Ggb;var cJ=mdb('java.math','BigInteger',91);var nhb,ohb;var Bhb,Chb;bcb(488,1967,cie);_.$b=function Xhb(){Uhb(this)};_._b=function Yhb(a){return Mhb(this,a)};_.uc=function Zhb(a){return Nhb(this,a,this.g)||Nhb(this,a,this.f)};_.vc=function $hb(){return new eib(this)};_.xc=function _hb(a){return Ohb(this,a)};_.zc=function aib(a,b){return Rhb(this,a,b)};_.Bc=function bib(a){return Thb(this,a)};_.gc=function cib(){return Vhb(this)};var gJ=mdb(bie,'AbstractHashMap',488);bcb(261,eie,fie,eib);_.$b=function fib(){this.a.$b()};_.Hc=function gib(a){return dib(this,a)};_.Kc=function hib(){return new nib(this.a)};_.Mc=function iib(a){var b;if(dib(this,a)){b=BD(a,42).cd();this.a.Bc(b);return true}return false};_.gc=function jib(){return this.a.gc()};var fJ=mdb(bie,'AbstractHashMap/EntrySet',261);bcb(262,1,aie,nib);_.Nb=function oib(a){Rrb(this,a)};_.Pb=function qib(){return lib(this)};_.Ob=function pib(){return this.b};_.Qb=function rib(){mib(this)};_.b=false;var eJ=mdb(bie,'AbstractHashMap/EntrySetIterator',262);bcb(417,1,aie,vib);_.Nb=function wib(a){Rrb(this,a)};_.Ob=function xib(){return sib(this)};_.Pb=function yib(){return tib(this)};_.Qb=function zib(){uib(this)};_.b=0;_.c=-1;var hJ=mdb(bie,'AbstractList/IteratorImpl',417);bcb(96,417,jie,Bib);_.Qb=function Hib(){uib(this)};_.Rb=function Cib(a){Aib(this,a)};_.Sb=function Dib(){return this.b>0};_.Tb=function Eib(){return this.b};_.Ub=function Fib(){return sCb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Gib(){return this.b-1};_.Wb=function Iib(a){yCb(this.c!=-1);this.a._c(this.c,a)};var iJ=mdb(bie,'AbstractList/ListIteratorImpl',96);bcb(219,52,Lie,Jib);_.Vc=function Kib(a,b){wCb(a,this.b);this.c.Vc(this.a+a,b);++this.b};_.Xb=function Lib(a){tCb(a,this.b);return this.c.Xb(this.a+a)};_.$c=function Mib(a){var b;tCb(a,this.b);b=this.c.$c(this.a+a);--this.b;return b};_._c=function Nib(a,b){tCb(a,this.b);return this.c._c(this.a+a,b)};_.gc=function Oib(){return this.b};_.a=0;_.b=0;var jJ=mdb(bie,'AbstractList/SubList',219);bcb(384,eie,fie,Pib);_.$b=function Qib(){this.a.$b()};_.Hc=function Rib(a){return this.a._b(a)};_.Kc=function Sib(){var a;return a=this.a.vc().Kc(),new Vib(a)};_.Mc=function Tib(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function Uib(){return this.a.gc()};var mJ=mdb(bie,'AbstractMap/1',384);bcb(691,1,aie,Vib);_.Nb=function Wib(a){Rrb(this,a)};_.Ob=function Xib(){return this.a.Ob()};_.Pb=function Yib(){var a;return a=BD(this.a.Pb(),42),a.cd()};_.Qb=function Zib(){this.a.Qb()};var lJ=mdb(bie,'AbstractMap/1/1',691);bcb(226,28,die,$ib);_.$b=function _ib(){this.a.$b()};_.Hc=function ajb(a){return this.a.uc(a)};_.Kc=function bjb(){var a;return a=this.a.vc().Kc(),new djb(a)};_.gc=function cjb(){return this.a.gc()};var oJ=mdb(bie,'AbstractMap/2',226);bcb(294,1,aie,djb);_.Nb=function ejb(a){Rrb(this,a)};_.Ob=function fjb(){return this.a.Ob()};_.Pb=function gjb(){var a;return a=BD(this.a.Pb(),42),a.dd()};_.Qb=function hjb(){this.a.Qb()};var nJ=mdb(bie,'AbstractMap/2/1',294);bcb(484,1,{484:1,42:1});_.Fb=function jjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.d,b.cd())&&wtb(this.e,b.dd())};_.cd=function kjb(){return this.d};_.dd=function ljb(){return this.e};_.Hb=function mjb(){return xtb(this.d)^xtb(this.e)};_.ed=function njb(a){return ijb(this,a)};_.Ib=function ojb(){return this.d+'='+this.e};var pJ=mdb(bie,'AbstractMap/AbstractEntry',484);bcb(383,484,{484:1,383:1,42:1},pjb);var qJ=mdb(bie,'AbstractMap/SimpleEntry',383);bcb(1984,1,_je);_.Fb=function qjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.cd(),b.cd())&&wtb(this.dd(),b.dd())};_.Hb=function rjb(){return xtb(this.cd())^xtb(this.dd())};_.Ib=function sjb(){return this.cd()+'='+this.dd()};var rJ=mdb(bie,lie,1984);bcb(1992,1967,gie);_.tc=function vjb(a){return tjb(this,a)};_._b=function wjb(a){return ujb(this,a)};_.vc=function xjb(){return new Bjb(this)};_.xc=function yjb(a){var b;b=a;return Wd(Awb(this,b))};_.ec=function Ajb(){return new Gjb(this)};var wJ=mdb(bie,'AbstractNavigableMap',1992);bcb(739,eie,fie,Bjb);_.Hc=function Cjb(a){return JD(a,42)&&tjb(this.b,BD(a,42))};_.Kc=function Djb(){return new Ywb(this.b)};_.Mc=function Ejb(a){var b;if(JD(a,42)){b=BD(a,42);return Kwb(this.b,b)}return false};_.gc=function Fjb(){return this.b.c};var tJ=mdb(bie,'AbstractNavigableMap/EntrySet',739);bcb(493,eie,iie,Gjb);_.Nc=function Mjb(){return new Rub(this)};_.$b=function Hjb(){zwb(this.a)};_.Hc=function Ijb(a){return ujb(this.a,a)};_.Kc=function Jjb(){var a;return a=new Ywb((new cxb(this.a)).b),new Njb(a)};_.Mc=function Kjb(a){if(ujb(this.a,a)){Jwb(this.a,a);return true}return false};_.gc=function Ljb(){return this.a.c};var vJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet',493);bcb(494,1,aie,Njb);_.Nb=function Ojb(a){Rrb(this,a)};_.Ob=function Pjb(){return sib(this.a.a)};_.Pb=function Qjb(){var a;return a=Wwb(this.a),a.cd()};_.Qb=function Rjb(){Xwb(this.a)};var uJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet/1',494);bcb(2004,28,die);_.Fc=function Sjb(a){return zCb(cub(this,a)),true};_.Gc=function Tjb(a){uCb(a);mCb(a!=this,"Can't add a queue to itself");return ye(this,a)};_.$b=function Ujb(){while(dub(this)!=null);};var xJ=mdb(bie,'AbstractQueue',2004);bcb(302,28,{4:1,20:1,28:1,14:1},jkb,kkb);_.Fc=function lkb(a){return Xjb(this,a),true};_.$b=function nkb(){Yjb(this)};_.Hc=function okb(a){return Zjb(new xkb(this),a)};_.dc=function pkb(){return akb(this)};_.Kc=function qkb(){return new xkb(this)};_.Mc=function rkb(a){return dkb(new xkb(this),a)};_.gc=function skb(){return this.c-this.b&this.a.length-1};_.Nc=function tkb(){return new Kub(this,272)};_.Qc=function ukb(a){var b;b=this.c-this.b&this.a.length-1;a.length<b&&(a=eCb(new Array(b),a));$jb(this,a,b);a.length>b&&NC(a,b,null);return a};_.b=0;_.c=0;var BJ=mdb(bie,'ArrayDeque',302);bcb(446,1,aie,xkb);_.Nb=function ykb(a){Rrb(this,a)};_.Ob=function zkb(){return this.a!=this.b};_.Pb=function Akb(){return vkb(this)};_.Qb=function Bkb(){wkb(this)};_.a=0;_.b=0;_.c=-1;var AJ=mdb(bie,'ArrayDeque/IteratorImpl',446);bcb(12,52,ake,Rkb,Skb,Tkb);_.Vc=function Ukb(a,b){Dkb(this,a,b)};_.Fc=function Vkb(a){return Ekb(this,a)};_.Wc=function Wkb(a,b){return Fkb(this,a,b)};_.Gc=function Xkb(a){return Gkb(this,a)};_.$b=function Ykb(){this.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function Zkb(a){return Jkb(this,a,0)!=-1};_.Jc=function $kb(a){Hkb(this,a)};_.Xb=function _kb(a){return Ikb(this,a)};_.Xc=function alb(a){return Jkb(this,a,0)};_.dc=function blb(){return this.c.length==0};_.Kc=function clb(){return new olb(this)};_.$c=function dlb(a){return Kkb(this,a)};_.Mc=function elb(a){return Lkb(this,a)};_.Ud=function flb(a,b){Mkb(this,a,b)};_._c=function glb(a,b){return Nkb(this,a,b)};_.gc=function hlb(){return this.c.length};_.ad=function ilb(a){Okb(this,a)};_.Pc=function jlb(){return Pkb(this)};_.Qc=function klb(a){return Qkb(this,a)};var DJ=mdb(bie,'ArrayList',12);bcb(7,1,aie,olb);_.Nb=function plb(a){Rrb(this,a)};_.Ob=function qlb(){return llb(this)};_.Pb=function rlb(){return mlb(this)};_.Qb=function slb(){nlb(this)};_.a=0;_.b=-1;var CJ=mdb(bie,'ArrayList/1',7);bcb(2013,$wnd.Function,{},Ylb);_.te=function Zlb(a,b){return Kdb(a,b)};bcb(154,52,bke,amb);_.Hc=function bmb(a){return Bt(this,a)!=-1};_.Jc=function cmb(a){var b,c,d,e;uCb(a);for(c=this.a,d=0,e=c.length;d<e;++d){b=c[d];a.td(b)}};_.Xb=function dmb(a){return $lb(this,a)};_._c=function emb(a,b){var c;c=(tCb(a,this.a.length),this.a[a]);NC(this.a,a,b);return c};_.gc=function fmb(){return this.a.length};_.ad=function gmb(a){Mlb(this.a,this.a.length,a)};_.Pc=function hmb(){return _lb(this,KC(SI,Uhe,1,this.a.length,5,1))};_.Qc=function imb(a){return _lb(this,a)};var EJ=mdb(bie,'Arrays/ArrayList',154);var jmb,kmb,lmb;bcb(940,52,bke,xmb);_.Hc=function ymb(a){return false};_.Xb=function zmb(a){return wmb(a)};_.Kc=function Amb(){return mmb(),Emb(),Dmb};_.Yc=function Bmb(){return mmb(),Emb(),Dmb};_.gc=function Cmb(){return 0};var GJ=mdb(bie,'Collections/EmptyList',940);bcb(941,1,jie,Fmb);_.Nb=function Hmb(a){Rrb(this,a)};_.Rb=function Gmb(a){throw vbb(new bgb)};_.Ob=function Imb(){return false};_.Sb=function Jmb(){return false};_.Pb=function Kmb(){throw vbb(new utb)};_.Tb=function Lmb(){return 0};_.Ub=function Mmb(){throw vbb(new utb)};_.Vb=function Nmb(){return -1};_.Qb=function Omb(){throw vbb(new Ydb)};_.Wb=function Pmb(a){throw vbb(new Ydb)};var Dmb;var FJ=mdb(bie,'Collections/EmptyListIterator',941);bcb(943,1967,Aie,Qmb);_._b=function Rmb(a){return false};_.uc=function Smb(a){return false};_.vc=function Tmb(){return mmb(),lmb};_.xc=function Umb(a){return null};_.ec=function Vmb(){return mmb(),lmb};_.gc=function Wmb(){return 0};_.Cc=function Xmb(){return mmb(),jmb};var HJ=mdb(bie,'Collections/EmptyMap',943);bcb(942,eie,Cie,Ymb);_.Hc=function Zmb(a){return false};_.Kc=function $mb(){return mmb(),Emb(),Dmb};_.gc=function _mb(){return 0};var IJ=mdb(bie,'Collections/EmptySet',942);bcb(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},anb);_.Hc=function bnb(a){return wtb(this.a,a)};_.Xb=function cnb(a){tCb(a,1);return this.a};_.gc=function dnb(){return 1};var JJ=mdb(bie,'Collections/SingletonList',599);bcb(372,1,wie,lnb);_.Jc=function rnb(a){reb(this,a)};_.Lc=function unb(){return new YAb(null,this.Nc())};_.Nc=function xnb(){return new Kub(this,0)};_.Oc=function ynb(){return new YAb(null,this.Nc())};_.Fc=function mnb(a){return enb()};_.Gc=function nnb(a){return fnb()};_.$b=function onb(){gnb()};_.Hc=function pnb(a){return hnb(this,a)};_.Ic=function qnb(a){return inb(this,a)};_.dc=function snb(){return this.b.dc()};_.Kc=function tnb(){return new Dnb(this.b.Kc())};_.Mc=function vnb(a){return jnb()};_.gc=function wnb(){return this.b.gc()};_.Pc=function znb(){return this.b.Pc()};_.Qc=function Anb(a){return knb(this,a)};_.Ib=function Bnb(){return fcb(this.b)};var LJ=mdb(bie,'Collections/UnmodifiableCollection',372);bcb(371,1,aie,Dnb);_.Nb=function Enb(a){Rrb(this,a)};_.Ob=function Fnb(){return this.b.Ob()};_.Pb=function Gnb(){return this.b.Pb()};_.Qb=function Hnb(){Cnb()};var KJ=mdb(bie,'Collections/UnmodifiableCollectionIterator',371);bcb(531,372,cke,Inb);_.Nc=function Vnb(){return new Kub(this,16)};_.Vc=function Jnb(a,b){throw vbb(new bgb)};_.Wc=function Knb(a,b){throw vbb(new bgb)};_.Fb=function Lnb(a){return pb(this.a,a)};_.Xb=function Mnb(a){return this.a.Xb(a)};_.Hb=function Nnb(){return tb(this.a)};_.Xc=function Onb(a){return this.a.Xc(a)};_.dc=function Pnb(){return this.a.dc()};_.Yc=function Qnb(){return new Xnb(this.a.Zc(0))};_.Zc=function Rnb(a){return new Xnb(this.a.Zc(a))};_.$c=function Snb(a){throw vbb(new bgb)};_._c=function Tnb(a,b){throw vbb(new bgb)};_.ad=function Unb(a){throw vbb(new bgb)};_.bd=function Wnb(a,b){return new Inb(this.a.bd(a,b))};var NJ=mdb(bie,'Collections/UnmodifiableList',531);bcb(690,371,jie,Xnb);_.Qb=function bob(){Cnb()};_.Rb=function Ynb(a){throw vbb(new bgb)};_.Sb=function Znb(){return this.a.Sb()};_.Tb=function $nb(){return this.a.Tb()};_.Ub=function _nb(){return this.a.Ub()};_.Vb=function aob(){return this.a.Vb()};_.Wb=function cob(a){throw vbb(new bgb)};var MJ=mdb(bie,'Collections/UnmodifiableListIterator',690);bcb(600,1,cie,iob);_.wc=function oob(a){stb(this,a)};_.yc=function tob(a,b,c){return ttb(this,a,b,c)};_.$b=function job(){throw vbb(new bgb)};_._b=function kob(a){return this.c._b(a)};_.uc=function lob(a){return dob(this,a)};_.vc=function mob(){return eob(this)};_.Fb=function nob(a){return fob(this,a)};_.xc=function pob(a){return this.c.xc(a)};_.Hb=function qob(){return tb(this.c)};_.dc=function rob(){return this.c.dc()};_.ec=function sob(){return gob(this)};_.zc=function uob(a,b){throw vbb(new bgb)};_.Bc=function vob(a){throw vbb(new bgb)};_.gc=function wob(){return this.c.gc()};_.Ib=function xob(){return fcb(this.c)};_.Cc=function yob(){return hob(this)};var RJ=mdb(bie,'Collections/UnmodifiableMap',600);bcb(382,372,Bie,zob);_.Nc=function Cob(){return new Kub(this,1)};_.Fb=function Aob(a){return pb(this.b,a)};_.Hb=function Bob(){return tb(this.b)};var TJ=mdb(bie,'Collections/UnmodifiableSet',382);bcb(944,382,Bie,Gob);_.Hc=function Hob(a){return Dob(this,a)};_.Ic=function Iob(a){return this.b.Ic(a)};_.Kc=function Job(){var a;a=this.b.Kc();return new Mob(a)};_.Pc=function Kob(){var a;a=this.b.Pc();Fob(a,a.length);return a};_.Qc=function Lob(a){return Eob(this,a)};var QJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet',944);bcb(945,1,aie,Mob);_.Nb=function Nob(a){Rrb(this,a)};_.Pb=function Pob(){return new Rob(BD(this.a.Pb(),42))};_.Ob=function Oob(){return this.a.Ob()};_.Qb=function Qob(){throw vbb(new bgb)};var OJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet/1',945);bcb(688,1,_je,Rob);_.Fb=function Sob(a){return this.a.Fb(a)};_.cd=function Tob(){return this.a.cd()};_.dd=function Uob(){return this.a.dd()};_.Hb=function Vob(){return this.a.Hb()};_.ed=function Wob(a){throw vbb(new bgb)};_.Ib=function Xob(){return fcb(this.a)};var PJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry',688);bcb(601,531,{20:1,14:1,15:1,54:1},Yob);var SJ=mdb(bie,'Collections/UnmodifiableRandomAccessList',601);bcb(689,382,Die,Zob);_.Nc=function apb(){return new Rub(this)};_.Fb=function $ob(a){return pb(this.a,a)};_.Hb=function _ob(){return tb(this.a)};var UJ=mdb(bie,'Collections/UnmodifiableSortedSet',689);bcb(847,1,dke,bpb);_.ue=function cpb(a,b){var c;return c=Ucc(BD(a,11),BD(b,11)),c!=0?c:Wcc(BD(a,11),BD(b,11))};_.Fb=function dpb(a){return this===a};_.ve=function epb(){return new tpb(this)};var VJ=mdb(bie,'Comparator/lambda$0$Type',847);var fpb,gpb,hpb;bcb(751,1,dke,kpb);_.ue=function lpb(a,b){return jpb(BD(a,35),BD(b,35))};_.Fb=function mpb(a){return this===a};_.ve=function npb(){return ipb(),hpb};var WJ=mdb(bie,'Comparators/NaturalOrderComparator',751);bcb(1177,1,dke,ppb);_.ue=function qpb(a,b){return opb(BD(a,35),BD(b,35))};_.Fb=function rpb(a){return this===a};_.ve=function spb(){return ipb(),gpb};var XJ=mdb(bie,'Comparators/ReverseNaturalOrderComparator',1177);bcb(64,1,dke,tpb);_.Fb=function vpb(a){return this===a};_.ue=function upb(a,b){return this.a.ue(b,a)};_.ve=function wpb(){return this.a};var YJ=mdb(bie,'Comparators/ReversedComparator',64);bcb(166,60,Tie,Apb);var ZJ=mdb(bie,'ConcurrentModificationException',166);var Bpb,Cpb;bcb(1904,1,eke,Gpb);_.we=function Hpb(a){Epb(this,a)};_.Ib=function Ipb(){return 'DoubleSummaryStatistics[count = '+Ubb(this.a)+', avg = '+(Dbb(this.a,0)?Fpb(this)/Sbb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Fpb(this)+']'};_.a=0;_.b=Qje;_.c=Pje;_.d=0;_.e=0;_.f=0;var _J=mdb(bie,'DoubleSummaryStatistics',1904);bcb(1805,60,Tie,Jpb);var aK=mdb(bie,'EmptyStackException',1805);bcb(451,1967,cie,Rpb);_.zc=function Xpb(a,b){return Opb(this,a,b)};_.$b=function Spb(){Kpb(this)};_._b=function Tpb(a){return Lpb(this,a)};_.uc=function Upb(a){var b,c;for(c=new Gqb(this.a);c.a<c.c.a.length;){b=Fqb(c);if(wtb(a,this.b[b.g])){return true}}return false};_.vc=function Vpb(){return new _pb(this)};_.xc=function Wpb(a){return Mpb(this,a)};_.Bc=function Ypb(a){return Ppb(this,a)};_.gc=function Zpb(){return this.a.c};var eK=mdb(bie,'EnumMap',451);bcb(1352,eie,fie,_pb);_.$b=function aqb(){Kpb(this.a)};_.Hc=function bqb(a){return $pb(this,a)};_.Kc=function cqb(){return new fqb(this.a)};_.Mc=function dqb(a){var b;if($pb(this,a)){b=BD(a,42).cd();Ppb(this.a,b);return true}return false};_.gc=function eqb(){return this.a.a.c};var cK=mdb(bie,'EnumMap/EntrySet',1352);bcb(1353,1,aie,fqb);_.Nb=function gqb(a){Rrb(this,a)};_.Pb=function iqb(){return this.b=Fqb(this.a),new kqb(this.c,this.b)};_.Ob=function hqb(){return Eqb(this.a)};_.Qb=function jqb(){yCb(!!this.b);Ppb(this.c,this.b);this.b=null};var bK=mdb(bie,'EnumMap/EntrySetIterator',1353);bcb(1354,1984,_je,kqb);_.cd=function lqb(){return this.a};_.dd=function mqb(){return this.b.b[this.a.g]};_.ed=function nqb(a){return Qpb(this.b,this.a.g,a)};var dK=mdb(bie,'EnumMap/MapEntry',1354);bcb(174,eie,{20:1,28:1,14:1,174:1,21:1});var hK=mdb(bie,'EnumSet',174);bcb(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},xqb);_.Fc=function yqb(a){return rqb(this,BD(a,22))};_.Hc=function zqb(a){return tqb(this,a)};_.Kc=function Aqb(){return new Gqb(this)};_.Mc=function Bqb(a){return vqb(this,a)};_.gc=function Cqb(){return this.c};_.c=0;var gK=mdb(bie,'EnumSet/EnumSetImpl',156);bcb(343,1,aie,Gqb);_.Nb=function Hqb(a){Rrb(this,a)};_.Pb=function Jqb(){return Fqb(this)};_.Ob=function Iqb(){return Eqb(this)};_.Qb=function Kqb(){yCb(this.b!=-1);NC(this.c.b,this.b,null);--this.c.c;this.b=-1};_.a=-1;_.b=-1;var fK=mdb(bie,'EnumSet/EnumSetImpl/IteratorImpl',343);bcb(43,488,fke,Lqb,Mqb,Nqb);_.re=function Oqb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)};_.se=function Pqb(a){var b;b=tb(a);return b|0};var iK=mdb(bie,'HashMap',43);bcb(53,eie,gke,Tqb,Uqb,Vqb);_.Fc=function Xqb(a){return Qqb(this,a)};_.$b=function Yqb(){this.a.$b()};_.Hc=function Zqb(a){return Rqb(this,a)};_.dc=function $qb(){return this.a.gc()==0};_.Kc=function _qb(){return this.a.ec().Kc()};_.Mc=function arb(a){return Sqb(this,a)};_.gc=function brb(){return this.a.gc()};var jK=mdb(bie,'HashSet',53);bcb(1781,1,sie,drb);_.ud=function erb(a){crb(this,a)};_.Ib=function frb(){return 'IntSummaryStatistics[count = '+Ubb(this.a)+', avg = '+(Dbb(this.a,0)?Sbb(this.d)/Sbb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Ubb(this.d)+']'};_.a=0;_.b=Rie;_.c=Ohe;_.d=0;var kK=mdb(bie,'IntSummaryStatistics',1781);bcb(1049,1,vie,lrb);_.Jc=function mrb(a){reb(this,a)};_.Kc=function nrb(){return new orb(this)};_.c=0;var mK=mdb(bie,'InternalHashCodeMap',1049);bcb(711,1,aie,orb);_.Nb=function prb(a){Rrb(this,a)};_.Pb=function rrb(){return this.d=this.a[this.c++],this.d};_.Ob=function qrb(){var a;if(this.c<this.a.length){return true}a=this.b.next();if(!a.done){this.a=a.value[1];this.c=0;return true}return false};_.Qb=function srb(){krb(this.e,this.d.cd());this.c!=0&&--this.c};_.c=0;_.d=null;var lK=mdb(bie,'InternalHashCodeMap/1',711);var vrb;bcb(1047,1,vie,Frb);_.Jc=function Grb(a){reb(this,a)};_.Kc=function Hrb(){return new Irb(this)};_.c=0;_.d=0;var pK=mdb(bie,'InternalStringMap',1047);bcb(710,1,aie,Irb);_.Nb=function Jrb(a){Rrb(this,a)};_.Pb=function Lrb(){return this.c=this.a,this.a=this.b.next(),new Nrb(this.d,this.c,this.d.d)};_.Ob=function Krb(){return !this.a.done};_.Qb=function Mrb(){Erb(this.d,this.c.value[0])};var nK=mdb(bie,'InternalStringMap/1',710);bcb(1048,1984,_je,Nrb);_.cd=function Orb(){return this.b.value[0]};_.dd=function Prb(){if(this.a.d!=this.c){return Crb(this.a,this.b.value[0])}return this.b.value[1]};_.ed=function Qrb(a){return Drb(this.a,this.b.value[0],a)};_.c=0;var oK=mdb(bie,'InternalStringMap/2',1048);bcb(228,43,fke,$rb,_rb);_.$b=function asb(){Urb(this)};_._b=function bsb(a){return Vrb(this,a)};_.uc=function csb(a){var b;b=this.d.a;while(b!=this.d){if(wtb(b.e,a)){return true}b=b.a}return false};_.vc=function dsb(){return new nsb(this)};_.xc=function esb(a){return Wrb(this,a)};_.zc=function fsb(a,b){return Xrb(this,a,b)};_.Bc=function gsb(a){return Zrb(this,a)};_.gc=function hsb(){return Vhb(this.e)};_.c=false;var tK=mdb(bie,'LinkedHashMap',228);bcb(387,383,{484:1,383:1,387:1,42:1},ksb,lsb);var qK=mdb(bie,'LinkedHashMap/ChainEntry',387);bcb(701,eie,fie,nsb);_.$b=function osb(){Urb(this.a)};_.Hc=function psb(a){return msb(this,a)};_.Kc=function qsb(){return new usb(this)};_.Mc=function rsb(a){var b;if(msb(this,a)){b=BD(a,42).cd();Zrb(this.a,b);return true}return false};_.gc=function ssb(){return Vhb(this.a.e)};var sK=mdb(bie,'LinkedHashMap/EntrySet',701);bcb(702,1,aie,usb);_.Nb=function vsb(a){Rrb(this,a)};_.Pb=function xsb(){return tsb(this)};_.Ob=function wsb(){return this.b!=this.c.a.d};_.Qb=function ysb(){yCb(!!this.a);xpb(this.c.a.e,this);jsb(this.a);Thb(this.c.a.e,this.a.d);ypb(this.c.a.e,this);this.a=null};var rK=mdb(bie,'LinkedHashMap/EntrySet/EntryIterator',702);bcb(178,53,gke,zsb,Asb,Bsb);var uK=mdb(bie,'LinkedHashSet',178);bcb(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},Psb,Qsb);_.Fc=function Rsb(a){return Dsb(this,a)};_.$b=function Ssb(){Osb(this)};_.Zc=function Tsb(a){return Jsb(this,a)};_.gc=function Usb(){return this.b};_.b=0;var xK=mdb(bie,'LinkedList',68);bcb(970,1,jie,$sb);_.Nb=function atb(a){Rrb(this,a)};_.Rb=function _sb(a){Vsb(this,a)};_.Ob=function btb(){return Wsb(this)};_.Sb=function ctb(){return this.b.b!=this.d.a};_.Pb=function dtb(){return Xsb(this)};_.Tb=function etb(){return this.a};_.Ub=function ftb(){return Ysb(this)};_.Vb=function gtb(){return this.a-1};_.Qb=function htb(){Zsb(this)};_.Wb=function itb(a){yCb(!!this.c);this.c.c=a};_.a=0;_.c=null;var vK=mdb(bie,'LinkedList/ListIteratorImpl',970);bcb(608,1,{},jtb);var wK=mdb(bie,'LinkedList/Node',608);bcb(1959,1,{});var ltb,mtb;var BK=mdb(bie,'Locale',1959);bcb(861,1959,{},otb);_.Ib=function ptb(){return ''};var zK=mdb(bie,'Locale/1',861);bcb(862,1959,{},qtb);_.Ib=function rtb(){return 'unknown'};var AK=mdb(bie,'Locale/4',862);bcb(109,60,{3:1,102:1,60:1,78:1,109:1},utb,vtb);var EK=mdb(bie,'NoSuchElementException',109);bcb(404,1,{404:1},Ftb);_.Fb=function Gtb(a){var b;if(a===this){return true}if(!JD(a,404)){return false}b=BD(a,404);return wtb(this.a,b.a)};_.Hb=function Htb(){return xtb(this.a)};_.Ib=function Jtb(){return this.a!=null?Whe+xfb(this.a)+')':'Optional.empty()'};var ztb;var HK=mdb(bie,'Optional',404);bcb(463,1,{463:1},Otb,Ptb);_.Fb=function Qtb(a){var b;if(a===this){return true}if(!JD(a,463)){return false}b=BD(a,463);return this.a==b.a&&Kdb(this.b,b.b)==0};_.Hb=function Rtb(){return this.a?QD(this.b):0};_.Ib=function Stb(){return this.a?'OptionalDouble.of('+(''+this.b)+')':'OptionalDouble.empty()'};_.a=false;_.b=0;var Ktb;var FK=mdb(bie,'OptionalDouble',463);bcb(517,1,{517:1},Wtb,Xtb);_.Fb=function Ytb(a){var b;if(a===this){return true}if(!JD(a,517)){return false}b=BD(a,517);return this.a==b.a&&beb(this.b,b.b)==0};_.Hb=function Ztb(){return this.a?this.b:0};_.Ib=function $tb(){return this.a?'OptionalInt.of('+(''+this.b)+')':'OptionalInt.empty()'};_.a=false;_.b=0;var Ttb;var GK=mdb(bie,'OptionalInt',517);bcb(503,2004,die,gub);_.Gc=function hub(a){return _tb(this,a)};_.$b=function iub(){this.b.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function jub(a){return (a==null?-1:Jkb(this.b,a,0))!=-1};_.Kc=function kub(){return new qub(this)};_.Mc=function lub(a){return eub(this,a)};_.gc=function mub(){return this.b.c.length};_.Nc=function nub(){return new Kub(this,256)};_.Pc=function oub(){return Pkb(this.b)};_.Qc=function pub(a){return Qkb(this.b,a)};var JK=mdb(bie,'PriorityQueue',503);bcb(1277,1,aie,qub);_.Nb=function rub(a){Rrb(this,a)};_.Ob=function tub(){return this.a<this.c.b.c.length};_.Pb=function uub(){sCb(this.a<this.c.b.c.length);this.b=this.a++;return Ikb(this.c.b,this.b)};_.Qb=function vub(){yCb(this.b!=-1);fub(this.c,this.a=this.b);this.b=-1};_.a=0;_.b=-1;var IK=mdb(bie,'PriorityQueue/1',1277);bcb(230,1,{230:1},Gub,Hub);_.a=0;_.b=0;var wub,xub,yub=0;var KK=mdb(bie,'Random',230);bcb(27,1,pie,Kub,Lub,Mub);_.qd=function Nub(){return this.a};_.rd=function Oub(){Iub(this);return this.c};_.Nb=function Pub(a){Iub(this);this.d.Nb(a)};_.sd=function Qub(a){return Jub(this,a)};_.a=0;_.c=0;var $K=mdb(bie,'Spliterators/IteratorSpliterator',27);bcb(485,27,pie,Rub);var MK=mdb(bie,'SortedSet/1',485);bcb(602,1,eke,Tub);_.we=function Uub(a){this.a.td(a)};var NK=mdb(bie,'Spliterator/OfDouble/0methodref$accept$Type',602);bcb(603,1,eke,Vub);_.we=function Wub(a){this.a.td(a)};var OK=mdb(bie,'Spliterator/OfDouble/1methodref$accept$Type',603);bcb(604,1,sie,Xub);_.ud=function Yub(a){this.a.td(meb(a))};var PK=mdb(bie,'Spliterator/OfInt/2methodref$accept$Type',604);bcb(605,1,sie,Zub);_.ud=function $ub(a){this.a.td(meb(a))};var QK=mdb(bie,'Spliterator/OfInt/3methodref$accept$Type',605);bcb(617,1,pie);_.Nb=function evb(a){Sub(this,a)};_.qd=function cvb(){return this.d};_.rd=function dvb(){return this.e};_.d=0;_.e=0;var WK=mdb(bie,'Spliterators/BaseSpliterator',617);bcb(721,617,pie);_.xe=function gvb(a){_ub(this,a)};_.Nb=function hvb(a){JD(a,182)?_ub(this,BD(a,182)):_ub(this,new Vub(a))};_.sd=function ivb(a){return JD(a,182)?this.ye(BD(a,182)):this.ye(new Tub(a))};var RK=mdb(bie,'Spliterators/AbstractDoubleSpliterator',721);bcb(720,617,pie);_.xe=function kvb(a){_ub(this,a)};_.Nb=function lvb(a){JD(a,196)?_ub(this,BD(a,196)):_ub(this,new Zub(a))};_.sd=function mvb(a){return JD(a,196)?this.ye(BD(a,196)):this.ye(new Xub(a))};var SK=mdb(bie,'Spliterators/AbstractIntSpliterator',720);bcb(540,617,pie);var TK=mdb(bie,'Spliterators/AbstractSpliterator',540);bcb(692,1,pie);_.Nb=function tvb(a){Sub(this,a)};_.qd=function rvb(){return this.b};_.rd=function svb(){return this.d-this.c};_.b=0;_.c=0;_.d=0;var VK=mdb(bie,'Spliterators/BaseArraySpliterator',692);bcb(947,692,pie,vvb);_.ze=function wvb(a,b){uvb(this,BD(a,38),b)};_.Nb=function xvb(a){ovb(this,a)};_.sd=function yvb(a){return pvb(this,a)};var UK=mdb(bie,'Spliterators/ArraySpliterator',947);bcb(693,692,pie,Avb);_.ze=function Cvb(a,b){zvb(this,BD(a,182),b)};_.xe=function Dvb(a){ovb(this,a)};_.Nb=function Evb(a){JD(a,182)?ovb(this,BD(a,182)):ovb(this,new Vub(a))};_.ye=function Fvb(a){return pvb(this,a)};_.sd=function Gvb(a){return JD(a,182)?pvb(this,BD(a,182)):pvb(this,new Tub(a))};var XK=mdb(bie,'Spliterators/DoubleArraySpliterator',693);bcb(1968,1,pie);_.Nb=function Lvb(a){Sub(this,a)};_.qd=function Jvb(){return 16448};_.rd=function Kvb(){return 0};var Hvb;var ZK=mdb(bie,'Spliterators/EmptySpliterator',1968);bcb(946,1968,pie,Ovb);_.xe=function Pvb(a){Mvb(a)};_.Nb=function Qvb(a){JD(a,196)?Mvb(BD(a,196)):Mvb(new Zub(a))};_.ye=function Rvb(a){return Nvb(a)};_.sd=function Svb(a){return JD(a,196)?Nvb(BD(a,196)):Nvb(new Xub(a))};var YK=mdb(bie,'Spliterators/EmptySpliterator/OfInt',946);bcb(580,52,pke,Wvb);_.Vc=function Xvb(a,b){_vb(a,this.a.c.length+1);Dkb(this.a,a,b)};_.Fc=function Yvb(a){return Ekb(this.a,a)};_.Wc=function Zvb(a,b){_vb(a,this.a.c.length+1);return Fkb(this.a,a,b)};_.Gc=function $vb(a){return Gkb(this.a,a)};_.$b=function awb(){this.a.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function bwb(a){return Jkb(this.a,a,0)!=-1};_.Ic=function cwb(a){return Be(this.a,a)};_.Jc=function dwb(a){Hkb(this.a,a)};_.Xb=function ewb(a){return _vb(a,this.a.c.length),Ikb(this.a,a)};_.Xc=function fwb(a){return Jkb(this.a,a,0)};_.dc=function gwb(){return this.a.c.length==0};_.Kc=function hwb(){return new olb(this.a)};_.$c=function iwb(a){return _vb(a,this.a.c.length),Kkb(this.a,a)};_.Ud=function jwb(a,b){Mkb(this.a,a,b)};_._c=function kwb(a,b){return _vb(a,this.a.c.length),Nkb(this.a,a,b)};_.gc=function lwb(){return this.a.c.length};_.ad=function mwb(a){Okb(this.a,a)};_.bd=function nwb(a,b){return new Jib(this.a,a,b)};_.Pc=function owb(){return Pkb(this.a)};_.Qc=function pwb(a){return Qkb(this.a,a)};_.Ib=function qwb(){return Fe(this.a)};var lL=mdb(bie,'Vector',580);bcb(809,580,pke,twb);var _K=mdb(bie,'Stack',809);bcb(206,1,{206:1},xwb);_.Ib=function ywb(){return wwb(this)};var aL=mdb(bie,'StringJoiner',206);bcb(544,1992,{3:1,83:1,171:1,161:1},Pwb,Qwb);_.$b=function Rwb(){zwb(this)};_.vc=function Swb(){return new cxb(this)};_.zc=function Twb(a,b){return Iwb(this,a,b)};_.Bc=function Uwb(a){return Jwb(this,a)};_.gc=function Vwb(){return this.c};_.c=0;var jL=mdb(bie,'TreeMap',544);bcb(390,1,aie,Ywb);_.Nb=function $wb(a){Rrb(this,a)};_.Pb=function axb(){return Wwb(this)};_.Ob=function _wb(){return sib(this.a)};_.Qb=function bxb(){Xwb(this)};var bL=mdb(bie,'TreeMap/EntryIterator',390);bcb(435,739,fie,cxb);_.$b=function dxb(){zwb(this.a)};var cL=mdb(bie,'TreeMap/EntrySet',435);bcb(436,383,{484:1,383:1,42:1,436:1},exb);_.b=false;var dL=mdb(bie,'TreeMap/Node',436);bcb(621,1,{},fxb);_.Ib=function gxb(){return 'State: mv='+this.c+' value='+this.d+' done='+this.a+' found='+this.b};_.a=false;_.b=false;_.c=false;var eL=mdb(bie,'TreeMap/State',621);bcb(297,22,qke,mxb);_.Ae=function nxb(){return false};_.Be=function oxb(){return false};var hxb,ixb,jxb,kxb;var iL=ndb(bie,'TreeMap/SubMapType',297,CI,qxb,pxb);bcb(1112,297,qke,rxb);_.Be=function sxb(){return true};var fL=ndb(bie,'TreeMap/SubMapType/1',1112,iL,null,null);bcb(1113,297,qke,txb);_.Ae=function uxb(){return true};_.Be=function vxb(){return true};var gL=ndb(bie,'TreeMap/SubMapType/2',1113,iL,null,null);bcb(1114,297,qke,wxb);_.Ae=function xxb(){return true};var hL=ndb(bie,'TreeMap/SubMapType/3',1114,iL,null,null);var yxb;bcb(208,eie,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},Gxb,Hxb);_.Nc=function Oxb(){return new Rub(this)};_.Fc=function Ixb(a){return Axb(this,a)};_.$b=function Jxb(){zwb(this.a)};_.Hc=function Kxb(a){return ujb(this.a,a)};_.Kc=function Lxb(){var a;return a=new Ywb((new cxb((new Gjb(this.a)).a)).b),new Njb(a)};_.Mc=function Mxb(a){return Fxb(this,a)};_.gc=function Nxb(){return this.a.c};var kL=mdb(bie,'TreeSet',208);bcb(966,1,{},Rxb);_.Ce=function Sxb(a,b){return Pxb(this.a,a,b)};var mL=mdb(rke,'BinaryOperator/lambda$0$Type',966);bcb(967,1,{},Txb);_.Ce=function Uxb(a,b){return Qxb(this.a,a,b)};var nL=mdb(rke,'BinaryOperator/lambda$1$Type',967);bcb(846,1,{},Vxb);_.Kb=function Wxb(a){return a};var oL=mdb(rke,'Function/lambda$0$Type',846);bcb(431,1,Oie,Xxb);_.Mb=function Yxb(a){return !this.a.Mb(a)};var pL=mdb(rke,'Predicate/lambda$2$Type',431);bcb(572,1,{572:1});var qL=mdb(ske,'Handler',572);bcb(2007,1,Qhe);_.ne=function _xb(){return 'DUMMY'};_.Ib=function ayb(){return this.ne()};var Zxb;var sL=mdb(ske,'Level',2007);bcb(1621,2007,Qhe,byb);_.ne=function cyb(){return 'INFO'};var rL=mdb(ske,'Level/LevelInfo',1621);bcb(1640,1,{},gyb);var dyb;var tL=mdb(ske,'LogManager',1640);bcb(1780,1,Qhe,iyb);_.b=null;var uL=mdb(ske,'LogRecord',1780);bcb(512,1,{512:1},wyb);_.e=false;var jyb=false,kyb=false,lyb=false,myb=false,nyb=false;var vL=mdb(ske,'Logger',512);bcb(819,572,{572:1},zyb);var wL=mdb(ske,'SimpleConsoleLogHandler',819);bcb(132,22,{3:1,35:1,22:1,132:1},Gyb);var Cyb,Dyb,Eyb;var xL=ndb(vke,'Collector/Characteristics',132,CI,Iyb,Hyb);var Jyb;bcb(744,1,{},Lyb);var yL=mdb(vke,'CollectorImpl',744);bcb(1060,1,{},Zyb);_.Ce=function $yb(a,b){return vwb(BD(a,206),BD(b,206))};var zL=mdb(vke,'Collectors/10methodref$merge$Type',1060);bcb(1061,1,{},_yb);_.Kb=function azb(a){return wwb(BD(a,206))};var AL=mdb(vke,'Collectors/11methodref$toString$Type',1061);bcb(1062,1,{},bzb);_.Kb=function czb(a){return Bcb(),_Pb(a)?true:false};var BL=mdb(vke,'Collectors/12methodref$test$Type',1062);bcb(251,1,{},dzb);_.Od=function ezb(a,b){BD(a,14).Fc(b)};var CL=mdb(vke,'Collectors/20methodref$add$Type',251);bcb(253,1,{},fzb);_.Ee=function gzb(){return new Rkb};var DL=mdb(vke,'Collectors/21methodref$ctor$Type',253);bcb(346,1,{},hzb);_.Ee=function izb(){return new Tqb};var EL=mdb(vke,'Collectors/23methodref$ctor$Type',346);bcb(347,1,{},jzb);_.Od=function kzb(a,b){Qqb(BD(a,53),b)};var FL=mdb(vke,'Collectors/24methodref$add$Type',347);bcb(1055,1,{},lzb);_.Ce=function mzb(a,b){return Myb(BD(a,15),BD(b,14))};var GL=mdb(vke,'Collectors/4methodref$addAll$Type',1055);bcb(1059,1,{},nzb);_.Od=function ozb(a,b){uwb(BD(a,206),BD(b,475))};var HL=mdb(vke,'Collectors/9methodref$add$Type',1059);bcb(1058,1,{},pzb);_.Ee=function qzb(){return new xwb(this.a,this.b,this.c)};var IL=mdb(vke,'Collectors/lambda$15$Type',1058);bcb(1063,1,{},rzb);_.Ee=function szb(){var a;return a=new $rb,Xrb(a,(Bcb(),false),new Rkb),Xrb(a,true,new Rkb),a};var JL=mdb(vke,'Collectors/lambda$22$Type',1063);bcb(1064,1,{},tzb);_.Ee=function uzb(){return OC(GC(SI,1),Uhe,1,5,[this.a])};var KL=mdb(vke,'Collectors/lambda$25$Type',1064);bcb(1065,1,{},vzb);_.Od=function wzb(a,b){Oyb(this.a,CD(a))};var LL=mdb(vke,'Collectors/lambda$26$Type',1065);bcb(1066,1,{},xzb);_.Ce=function yzb(a,b){return Pyb(this.a,CD(a),CD(b))};var ML=mdb(vke,'Collectors/lambda$27$Type',1066);bcb(1067,1,{},zzb);_.Kb=function Azb(a){return CD(a)[0]};var NL=mdb(vke,'Collectors/lambda$28$Type',1067);bcb(713,1,{},Czb);_.Ce=function Dzb(a,b){return Bzb(a,b)};var OL=mdb(vke,'Collectors/lambda$4$Type',713);bcb(252,1,{},Ezb);_.Ce=function Fzb(a,b){return Ryb(BD(a,14),BD(b,14))};var PL=mdb(vke,'Collectors/lambda$42$Type',252);bcb(348,1,{},Gzb);_.Ce=function Hzb(a,b){return Syb(BD(a,53),BD(b,53))};var QL=mdb(vke,'Collectors/lambda$50$Type',348);bcb(349,1,{},Izb);_.Kb=function Jzb(a){return BD(a,53)};var RL=mdb(vke,'Collectors/lambda$51$Type',349);bcb(1054,1,{},Kzb);_.Od=function Lzb(a,b){Tyb(this.a,BD(a,83),b)};var SL=mdb(vke,'Collectors/lambda$7$Type',1054);bcb(1056,1,{},Mzb);_.Ce=function Nzb(a,b){return Vyb(BD(a,83),BD(b,83),new lzb)};var TL=mdb(vke,'Collectors/lambda$8$Type',1056);bcb(1057,1,{},Ozb);_.Kb=function Pzb(a){return Uyb(this.a,BD(a,83))};var UL=mdb(vke,'Collectors/lambda$9$Type',1057);bcb(539,1,{});_.He=function Wzb(){Qzb(this)};_.d=false;var zM=mdb(vke,'TerminatableStream',539);bcb(812,539,wke,bAb);_.He=function cAb(){Qzb(this)};var ZL=mdb(vke,'DoubleStreamImpl',812);bcb(1784,721,pie,fAb);_.ye=function hAb(a){return eAb(this,BD(a,182))};_.a=null;var WL=mdb(vke,'DoubleStreamImpl/2',1784);bcb(1785,1,eke,iAb);_.we=function jAb(a){gAb(this.a,a)};var VL=mdb(vke,'DoubleStreamImpl/2/lambda$0$Type',1785);bcb(1782,1,eke,kAb);_.we=function lAb(a){dAb(this.a,a)};var XL=mdb(vke,'DoubleStreamImpl/lambda$0$Type',1782);bcb(1783,1,eke,mAb);_.we=function nAb(a){Epb(this.a,a)};var YL=mdb(vke,'DoubleStreamImpl/lambda$2$Type',1783);bcb(1358,720,pie,rAb);_.ye=function sAb(a){return qAb(this,BD(a,196))};_.a=0;_.b=0;_.c=0;var $L=mdb(vke,'IntStream/5',1358);bcb(787,539,wke,vAb);_.He=function wAb(){Qzb(this)};_.Ie=function xAb(){return Tzb(this),this.a};var bM=mdb(vke,'IntStreamImpl',787);bcb(788,539,wke,yAb);_.He=function zAb(){Qzb(this)};_.Ie=function AAb(){return Tzb(this),Ivb(),Hvb};var _L=mdb(vke,'IntStreamImpl/Empty',788);bcb(1463,1,sie,BAb);_.ud=function CAb(a){crb(this.a,a)};var aM=mdb(vke,'IntStreamImpl/lambda$4$Type',1463);var xM=odb(vke,'Stream');bcb(30,539,{525:1,670:1,833:1},YAb);_.He=function ZAb(){Qzb(this)};var DAb;var wM=mdb(vke,'StreamImpl',30);bcb(845,1,{},bBb);_.ld=function cBb(a){return aBb(a)};var cM=mdb(vke,'StreamImpl/0methodref$lambda$2$Type',845);bcb(1084,540,pie,fBb);_.sd=function gBb(a){while(dBb(this)){if(this.a.sd(a)){return true}else{Qzb(this.b);this.b=null;this.a=null}}return false};var eM=mdb(vke,'StreamImpl/1',1084);bcb(1085,1,qie,hBb);_.td=function iBb(a){eBb(this.a,BD(a,833))};var dM=mdb(vke,'StreamImpl/1/lambda$0$Type',1085);bcb(1086,1,Oie,jBb);_.Mb=function kBb(a){return Qqb(this.a,a)};var fM=mdb(vke,'StreamImpl/1methodref$add$Type',1086);bcb(1087,540,pie,lBb);_.sd=function mBb(a){var b;if(!this.a){b=new Rkb;this.b.a.Nb(new nBb(b));mmb();Okb(b,this.c);this.a=new Kub(b,16)}return Jub(this.a,a)};_.a=null;var hM=mdb(vke,'StreamImpl/5',1087);bcb(1088,1,qie,nBb);_.td=function oBb(a){Ekb(this.a,a)};var gM=mdb(vke,'StreamImpl/5/2methodref$add$Type',1088);bcb(722,540,pie,qBb);_.sd=function rBb(a){this.b=false;while(!this.b&&this.c.sd(new sBb(this,a)));return this.b};_.b=false;var jM=mdb(vke,'StreamImpl/FilterSpliterator',722);bcb(1079,1,qie,sBb);_.td=function tBb(a){pBb(this.a,this.b,a)};var iM=mdb(vke,'StreamImpl/FilterSpliterator/lambda$0$Type',1079);bcb(1075,721,pie,wBb);_.ye=function xBb(a){return vBb(this,BD(a,182))};var lM=mdb(vke,'StreamImpl/MapToDoubleSpliterator',1075);bcb(1078,1,qie,yBb);_.td=function zBb(a){uBb(this.a,this.b,a)};var kM=mdb(vke,'StreamImpl/MapToDoubleSpliterator/lambda$0$Type',1078);bcb(1074,720,pie,CBb);_.ye=function DBb(a){return BBb(this,BD(a,196))};var nM=mdb(vke,'StreamImpl/MapToIntSpliterator',1074);bcb(1077,1,qie,EBb);_.td=function FBb(a){ABb(this.a,this.b,a)};var mM=mdb(vke,'StreamImpl/MapToIntSpliterator/lambda$0$Type',1077);bcb(719,540,pie,IBb);_.sd=function JBb(a){return HBb(this,a)};var pM=mdb(vke,'StreamImpl/MapToObjSpliterator',719);bcb(1076,1,qie,KBb);_.td=function LBb(a){GBb(this.a,this.b,a)};var oM=mdb(vke,'StreamImpl/MapToObjSpliterator/lambda$0$Type',1076);bcb(618,1,qie,NBb);_.td=function OBb(a){MBb(this,a)};var qM=mdb(vke,'StreamImpl/ValueConsumer',618);bcb(1080,1,qie,PBb);_.td=function QBb(a){EAb()};var rM=mdb(vke,'StreamImpl/lambda$0$Type',1080);bcb(1081,1,qie,RBb);_.td=function SBb(a){EAb()};var sM=mdb(vke,'StreamImpl/lambda$1$Type',1081);bcb(1082,1,{},TBb);_.Ce=function UBb(a,b){return $Ab(this.a,a,b)};var uM=mdb(vke,'StreamImpl/lambda$4$Type',1082);bcb(1083,1,qie,VBb);_.td=function WBb(a){_Ab(this.b,this.a,a)};var vM=mdb(vke,'StreamImpl/lambda$5$Type',1083);bcb(1089,1,qie,XBb);_.td=function YBb(a){Xzb(this.a,BD(a,365))};var yM=mdb(vke,'TerminatableStream/lambda$0$Type',1089);bcb(2041,1,{});bcb(1914,1,{},iCb);var AM=mdb('javaemul.internal','ConsoleLogger',1914);bcb(2038,1,{});var ECb=0;var GCb,HCb=0,ICb;bcb(1768,1,qie,OCb);_.td=function PCb(a){BD(a,308)};var BM=mdb(Cke,'BowyerWatsonTriangulation/lambda$0$Type',1768);bcb(1769,1,qie,QCb);_.td=function RCb(a){ye(this.a,BD(a,308).e)};var CM=mdb(Cke,'BowyerWatsonTriangulation/lambda$1$Type',1769);bcb(1770,1,qie,SCb);_.td=function TCb(a){BD(a,168)};var DM=mdb(Cke,'BowyerWatsonTriangulation/lambda$2$Type',1770);bcb(1765,1,Dke,WCb);_.ue=function XCb(a,b){return VCb(this.a,BD(a,168),BD(b,168))};_.Fb=function YCb(a){return this===a};_.ve=function ZCb(){return new tpb(this)};var EM=mdb(Cke,'NaiveMinST/lambda$0$Type',1765);bcb(499,1,{},_Cb);var FM=mdb(Cke,'NodeMicroLayout',499);bcb(168,1,{168:1},aDb);_.Fb=function bDb(a){var b;if(JD(a,168)){b=BD(a,168);return wtb(this.a,b.a)&&wtb(this.b,b.b)||wtb(this.a,b.b)&&wtb(this.b,b.a)}else{return false}};_.Hb=function cDb(){return xtb(this.a)+xtb(this.b)};var GM=mdb(Cke,'TEdge',168);bcb(308,1,{308:1},eDb);_.Fb=function fDb(a){var b;if(JD(a,308)){b=BD(a,308);return dDb(this,b.a)&&dDb(this,b.b)&&dDb(this,b.c)}else{return false}};_.Hb=function gDb(){return xtb(this.a)+xtb(this.b)+xtb(this.c)};var HM=mdb(Cke,'TTriangle',308);bcb(221,1,{221:1},hDb);var IM=mdb(Cke,'Tree',221);bcb(1254,1,{},jDb);var KM=mdb(Eke,'Scanline',1254);var JM=odb(Eke,Fke);bcb(1692,1,{},mDb);var LM=mdb(Gke,'CGraph',1692);bcb(307,1,{307:1},oDb);_.b=0;_.c=0;_.d=0;_.g=0;_.i=0;_.k=Qje;var NM=mdb(Gke,'CGroup',307);bcb(815,1,{},sDb);var MM=mdb(Gke,'CGroup/CGroupBuilder',815);bcb(57,1,{57:1},tDb);_.Ib=function uDb(){var a;if(this.j){return GD(this.j.Kb(this))}return fdb(PM),PM.o+'@'+(a=FCb(this)>>>0,a.toString(16))};_.f=0;_.i=Qje;var PM=mdb(Gke,'CNode',57);bcb(814,1,{},zDb);var OM=mdb(Gke,'CNode/CNodeBuilder',814);var EDb;bcb(1525,1,{},GDb);_.Oe=function HDb(a,b){return 0};_.Pe=function IDb(a,b){return 0};var QM=mdb(Gke,Ike,1525);bcb(1790,1,{},JDb);_.Le=function KDb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);j=$wnd.Math.min(j,b.a.j.d.c+b.b.a)}n=new Psb;for(g=new olb(a.a.a);g.a<g.c.c.length;){f=BD(mlb(g),307);f.k=j;f.g==0&&(Gsb(n,f,n.c.b,n.c),true)}while(n.b!=0){f=BD(n.b==0?null:(sCb(n.b!=0),Nsb(n,n.a.a)),307);e=f.j.d.c;for(m=f.a.a.ec().Kc();m.Ob();){k=BD(m.Pb(),57);p=f.k+k.b.a;!UDb(a,f,a.d)||k.d.c<p?(k.i=p):(k.i=k.d.c)}e-=f.j.i;f.b+=e;a.d==(ead(),bad)||a.d==_9c?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=BD(l.Pb(),57);for(i=k.c.Kc();i.Ob();){h=BD(i.Pb(),57);fad(a.d)?(o=a.g.Oe(k,h)):(o=a.g.Pe(k,h));h.a.k=$wnd.Math.max(h.a.k,k.i+k.d.b+o-h.b.a);VDb(a,h,a.d)&&(h.a.k=$wnd.Math.max(h.a.k,h.d.c-h.b.a));--h.a.g;h.a.g==0&&Dsb(n,h.a)}}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.d.c=b.i}};var RM=mdb(Gke,'LongestPathCompaction',1790);bcb(1690,1,{},cEb);_.e=false;var LDb,MDb,NDb;var TM=mdb(Gke,Nke,1690);bcb(1691,1,qie,dEb);_.td=function eEb(a){WDb(this.a,BD(a,46))};var SM=mdb(Gke,Oke,1691);bcb(1791,1,{},fEb);_.Me=function gEb(a){var b,c,d,e,f,g,h;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b()}for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);for(g=new olb(a.a.b);g.a<g.c.c.length;){f=BD(mlb(g),57);if(d==f){continue}if(!!d.a&&d.a==f.a){continue}fad(a.d)?(h=a.g.Pe(d,f)):(h=a.g.Oe(d,f));(f.d.c>d.d.c||d.d.c==f.d.c&&d.d.b<f.d.b)&&BDb(f.d.d+f.d.a+h,d.d.d)&&DDb(f.d.d,d.d.d+d.d.a+h)&&d.c.Fc(f)}}};var UM=mdb(Gke,'QuadraticConstraintCalculation',1791);bcb(522,1,{522:1},lEb);_.a=false;_.b=false;_.c=false;_.d=false;var VM=mdb(Gke,Pke,522);bcb(803,1,{},oEb);_.Me=function pEb(a){this.c=a;nEb(this,new GEb)};var _M=mdb(Gke,Qke,803);bcb(1718,1,{679:1},uEb);_.Ke=function vEb(a){rEb(this,BD(a,464))};var XM=mdb(Gke,Rke,1718);bcb(1719,1,Dke,xEb);_.ue=function yEb(a,b){return wEb(BD(a,57),BD(b,57))};_.Fb=function zEb(a){return this===a};_.ve=function AEb(){return new tpb(this)};var WM=mdb(Gke,Ske,1719);bcb(464,1,{464:1},BEb);_.a=false;var YM=mdb(Gke,Tke,464);bcb(1720,1,Dke,CEb);_.ue=function DEb(a,b){return qEb(BD(a,464),BD(b,464))};_.Fb=function EEb(a){return this===a};_.ve=function FEb(){return new tpb(this)};var ZM=mdb(Gke,Uke,1720);bcb(1721,1,Vke,GEb);_.Lb=function HEb(a){return BD(a,57),true};_.Fb=function IEb(a){return this===a};_.Mb=function JEb(a){return BD(a,57),true};var $M=mdb(Gke,'ScanlineConstraintCalculator/lambda$1$Type',1721);bcb(428,22,{3:1,35:1,22:1,428:1},NEb);var KEb,LEb;var aN=ndb(Wke,'HighLevelSortingCriterion',428,CI,PEb,OEb);var QEb;bcb(427,22,{3:1,35:1,22:1,427:1},VEb);var SEb,TEb;var bN=ndb(Wke,'LowLevelSortingCriterion',427,CI,XEb,WEb);var YEb;var C0=odb(Xke,'ILayoutMetaDataProvider');bcb(853,1,ale,gFb);_.Qe=function hFb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yke),ble),'Polyomino Traversal Strategy'),'Traversal strategy for trying different candidate positions for polyominoes.'),eFb),(_5c(),V5c)),dN),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zke),ble),'Polyomino Secondary Sorting Criterion'),'Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion.'),cFb),V5c),bN),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ke),ble),'Polyomino Primary Sorting Criterion'),'Possible primary sorting criteria for the processing order of polyominoes.'),aFb),V5c),aN),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ke),ble),'Fill Polyominoes'),'Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area.'),(Bcb(),true)),T5c),wI),pqb(L5c))))};var $Eb,_Eb,aFb,bFb,cFb,dFb,eFb;var cN=mdb(Wke,'PolyominoOptions',853);bcb(250,22,{3:1,35:1,22:1,250:1},sFb);var iFb,jFb,kFb,lFb,mFb,nFb,oFb,pFb,qFb;var dN=ndb(Wke,'TraversalStrategy',250,CI,uFb,tFb);var vFb;bcb(213,1,{213:1},yFb);_.Ib=function zFb(){return 'NEdge[id='+this.b+' w='+this.g+' d='+this.a+']'};_.a=1;_.b=0;_.c=0;_.f=false;_.g=0;var fN=mdb(cle,'NEdge',213);bcb(176,1,{},FFb);var eN=mdb(cle,'NEdge/NEdgeBuilder',176);bcb(653,1,{},KFb);var gN=mdb(cle,'NGraph',653);bcb(121,1,{121:1},MFb);_.c=-1;_.d=0;_.e=0;_.i=-1;_.j=false;var jN=mdb(cle,'NNode',121);bcb(795,1,cke,PFb);_.Jc=function XFb(a){reb(this,a)};_.Lc=function cGb(){return new YAb(null,new Kub(this,16))};_.ad=function hGb(a){ktb(this,a)};_.Nc=function iGb(){return new Kub(this,16)};_.Oc=function jGb(){return new YAb(null,new Kub(this,16))};_.Vc=function QFb(a,b){++this.b;Dkb(this.a,a,b)};_.Fc=function RFb(a){return NFb(this,a)};_.Wc=function SFb(a,b){++this.b;return Fkb(this.a,a,b)};_.Gc=function TFb(a){++this.b;return Gkb(this.a,a)};_.$b=function UFb(){++this.b;this.a.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function VFb(a){return Jkb(this.a,a,0)!=-1};_.Ic=function WFb(a){return Be(this.a,a)};_.Xb=function YFb(a){return Ikb(this.a,a)};_.Xc=function ZFb(a){return Jkb(this.a,a,0)};_.dc=function $Fb(){return this.a.c.length==0};_.Kc=function _Fb(){return vr(new olb(this.a))};_.Yc=function aGb(){throw vbb(new bgb)};_.Zc=function bGb(a){throw vbb(new bgb)};_.$c=function dGb(a){++this.b;return Kkb(this.a,a)};_.Mc=function eGb(a){return OFb(this,a)};_._c=function fGb(a,b){++this.b;return Nkb(this.a,a,b)};_.gc=function gGb(){return this.a.c.length};_.bd=function kGb(a,b){return new Jib(this.a,a,b)};_.Pc=function lGb(){return Pkb(this.a)};_.Qc=function mGb(a){return Qkb(this.a,a)};_.b=0;var hN=mdb(cle,'NNode/ChangeAwareArrayList',795);bcb(269,1,{},pGb);var iN=mdb(cle,'NNode/NNodeBuilder',269);bcb(1630,1,{},KGb);_.a=false;_.f=Ohe;_.j=0;var kN=mdb(cle,'NetworkSimplex',1630);bcb(1294,1,qie,QGb);_.td=function RGb(a){PGb(this.a,BD(a,680),true,false)};var lN=mdb(ele,'NodeLabelAndSizeCalculator/lambda$0$Type',1294);bcb(558,1,{},YGb);_.b=true;_.c=true;_.d=true;_.e=true;var mN=mdb(ele,'NodeMarginCalculator',558);bcb(212,1,{212:1});_.j=false;_.k=false;var oN=mdb(fle,'Cell',212);bcb(124,212,{124:1,212:1},aHb);_.Re=function bHb(){return _Gb(this)};_.Se=function cHb(){var a;a=this.n;return this.a.a+a.b+a.c};var nN=mdb(fle,'AtomicCell',124);bcb(232,22,{3:1,35:1,22:1,232:1},hHb);var dHb,eHb,fHb;var pN=ndb(fle,'ContainerArea',232,CI,jHb,iHb);var kHb;bcb(326,212,hle);var qN=mdb(fle,'ContainerCell',326);bcb(1473,326,hle,FHb);_.Re=function GHb(){var a;a=0;this.e?this.b?(a=this.b.b):!!this.a[1][1]&&(a=this.a[1][1].Re()):(a=EHb(this,AHb(this,true)));return a>0?a+this.n.d+this.n.a:0};_.Se=function HHb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].Se())}else if(this.g){e=EHb(this,yHb(this,null,true))}else{for(b=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),c=0,d=b.length;c<d;++c){a=b[c];e=$wnd.Math.max(e,EHb(this,yHb(this,a,true)))}}return e>0?e+this.n.b+this.n.c:0};_.Te=function IHb(){var a,b,c,d,e;if(this.g){a=yHb(this,null,false);for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d<e;++d){b=c[d];wHb(this,b,a)}}else{for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d<e;++d){b=c[d];a=yHb(this,b,false);wHb(this,b,a)}}};_.Ue=function JHb(){var a,b,c,d;b=this.i;a=this.n;d=AHb(this,false);uHb(this,(gHb(),dHb),b.d+a.d,d);uHb(this,fHb,b.d+b.a-a.a-d[2],d);c=b.a-a.d-a.a;if(d[0]>0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);uHb(this,eHb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var rHb=0,sHb=0;var rN=mdb(fle,'GridContainerCell',1473);bcb(461,22,{3:1,35:1,22:1,461:1},OHb);var KHb,LHb,MHb;var sN=ndb(fle,'HorizontalLabelAlignment',461,CI,QHb,PHb);var RHb;bcb(306,212,{212:1,306:1},aIb,bIb,cIb);_.Re=function dIb(){return YHb(this)};_.Se=function eIb(){return ZHb(this)};_.a=0;_.c=false;var tN=mdb(fle,'LabelCell',306);bcb(244,326,{212:1,326:1,244:1},mIb);_.Re=function nIb(){return fIb(this)};_.Se=function oIb(){return gIb(this)};_.Te=function rIb(){hIb(this)};_.Ue=function sIb(){iIb(this)};_.b=0;_.c=0;_.d=false;var yN=mdb(fle,'StripContainerCell',244);bcb(1626,1,Oie,tIb);_.Mb=function uIb(a){return pIb(BD(a,212))};var uN=mdb(fle,'StripContainerCell/lambda$0$Type',1626);bcb(1627,1,{},vIb);_.Fe=function wIb(a){return BD(a,212).Se()};var vN=mdb(fle,'StripContainerCell/lambda$1$Type',1627);bcb(1628,1,Oie,xIb);_.Mb=function yIb(a){return qIb(BD(a,212))};var wN=mdb(fle,'StripContainerCell/lambda$2$Type',1628);bcb(1629,1,{},zIb);_.Fe=function AIb(a){return BD(a,212).Re()};var xN=mdb(fle,'StripContainerCell/lambda$3$Type',1629);bcb(462,22,{3:1,35:1,22:1,462:1},FIb);var BIb,CIb,DIb;var zN=ndb(fle,'VerticalLabelAlignment',462,CI,HIb,GIb);var IIb;bcb(789,1,{},LIb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var CN=mdb(nle,'NodeContext',789);bcb(1471,1,Dke,OIb);_.ue=function PIb(a,b){return NIb(BD(a,61),BD(b,61))};_.Fb=function QIb(a){return this===a};_.ve=function RIb(){return new tpb(this)};var AN=mdb(nle,'NodeContext/0methodref$comparePortSides$Type',1471);bcb(1472,1,Dke,SIb);_.ue=function TIb(a,b){return MIb(BD(a,111),BD(b,111))};_.Fb=function UIb(a){return this===a};_.ve=function VIb(){return new tpb(this)};var BN=mdb(nle,'NodeContext/1methodref$comparePortContexts$Type',1472);bcb(159,22,{3:1,35:1,22:1,159:1},tJb);var WIb,XIb,YIb,ZIb,$Ib,_Ib,aJb,bJb,cJb,dJb,eJb,fJb,gJb,hJb,iJb,jJb,kJb,lJb,mJb,nJb,oJb,pJb;var DN=ndb(nle,'NodeLabelLocation',159,CI,wJb,vJb);var xJb;bcb(111,1,{111:1},AJb);_.a=false;var EN=mdb(nle,'PortContext',111);bcb(1476,1,qie,TJb);_.td=function UJb(a){WHb(BD(a,306))};var FN=mdb(qle,rle,1476);bcb(1477,1,Oie,VJb);_.Mb=function WJb(a){return !!BD(a,111).c};var GN=mdb(qle,sle,1477);bcb(1478,1,qie,XJb);_.td=function YJb(a){WHb(BD(a,111).c)};var HN=mdb(qle,'LabelPlacer/lambda$2$Type',1478);var ZJb;bcb(1475,1,qie,fKb);_.td=function gKb(a){$Jb();zJb(BD(a,111))};var IN=mdb(qle,'NodeLabelAndSizeUtilities/lambda$0$Type',1475);bcb(790,1,qie,mKb);_.td=function nKb(a){kKb(this.b,this.c,this.a,BD(a,181))};_.a=false;_.c=false;var JN=mdb(qle,'NodeLabelCellCreator/lambda$0$Type',790);bcb(1474,1,qie,tKb);_.td=function uKb(a){sKb(this.a,BD(a,181))};var KN=mdb(qle,'PortContextCreator/lambda$0$Type',1474);var BKb;bcb(1829,1,{},VKb);var MN=mdb(ule,'GreedyRectangleStripOverlapRemover',1829);bcb(1830,1,Dke,XKb);_.ue=function YKb(a,b){return WKb(BD(a,222),BD(b,222))};_.Fb=function ZKb(a){return this===a};_.ve=function $Kb(){return new tpb(this)};var LN=mdb(ule,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1830);bcb(1786,1,{},fLb);_.a=5;_.e=0;var SN=mdb(ule,'RectangleStripOverlapRemover',1786);bcb(1787,1,Dke,jLb);_.ue=function kLb(a,b){return gLb(BD(a,222),BD(b,222))};_.Fb=function lLb(a){return this===a};_.ve=function mLb(){return new tpb(this)};var NN=mdb(ule,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1787);bcb(1789,1,Dke,nLb);_.ue=function oLb(a,b){return hLb(BD(a,222),BD(b,222))};_.Fb=function pLb(a){return this===a};_.ve=function qLb(){return new tpb(this)};var ON=mdb(ule,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1789);bcb(406,22,{3:1,35:1,22:1,406:1},wLb);var rLb,sLb,tLb,uLb;var PN=ndb(ule,'RectangleStripOverlapRemover/OverlapRemovalDirection',406,CI,yLb,xLb);var zLb;bcb(222,1,{222:1},BLb);var QN=mdb(ule,'RectangleStripOverlapRemover/RectangleNode',222);bcb(1788,1,qie,CLb);_.td=function DLb(a){aLb(this.a,BD(a,222))};var RN=mdb(ule,'RectangleStripOverlapRemover/lambda$1$Type',1788);bcb(1304,1,Dke,GLb);_.ue=function HLb(a,b){return FLb(BD(a,167),BD(b,167))};_.Fb=function ILb(a){return this===a};_.ve=function JLb(){return new tpb(this)};var WN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1304);bcb(1307,1,{},KLb);_.Kb=function LLb(a){return BD(a,324).a};var TN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1307);bcb(1308,1,Oie,MLb);_.Mb=function NLb(a){return BD(a,323).a};var UN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1308);bcb(1309,1,Oie,OLb);_.Mb=function PLb(a){return BD(a,323).a};var VN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1309);bcb(1302,1,Dke,RLb);_.ue=function SLb(a,b){return QLb(BD(a,167),BD(b,167))};_.Fb=function TLb(a){return this===a};_.ve=function ULb(){return new tpb(this)};var YN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1302);bcb(1305,1,{},VLb);_.Kb=function WLb(a){return BD(a,324).a};var XN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1305);bcb(767,1,Dke,YLb);_.ue=function ZLb(a,b){return XLb(BD(a,167),BD(b,167))};_.Fb=function $Lb(a){return this===a};_.ve=function _Lb(){return new tpb(this)};var ZN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionsComparator',767);bcb(1300,1,Dke,bMb);_.ue=function cMb(a,b){return aMb(BD(a,321),BD(b,321))};_.Fb=function dMb(a){return this===a};_.ve=function eMb(){return new tpb(this)};var _N=mdb(wle,'PolyominoCompactor/MinPerimeterComparator',1300);bcb(1301,1,Dke,gMb);_.ue=function hMb(a,b){return fMb(BD(a,321),BD(b,321))};_.Fb=function iMb(a){return this===a};_.ve=function jMb(){return new tpb(this)};var $N=mdb(wle,'PolyominoCompactor/MinPerimeterComparatorWithShape',1301);bcb(1303,1,Dke,lMb);_.ue=function mMb(a,b){return kMb(BD(a,167),BD(b,167))};_.Fb=function nMb(a){return this===a};_.ve=function oMb(){return new tpb(this)};var bO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1303);bcb(1306,1,{},pMb);_.Kb=function qMb(a){return BD(a,324).a};var aO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1306);bcb(777,1,{},tMb);_.Ce=function uMb(a,b){return sMb(this,BD(a,46),BD(b,167))};var cO=mdb(wle,'SuccessorCombination',777);bcb(644,1,{},wMb);_.Ce=function xMb(a,b){var c;return vMb((c=BD(a,46),BD(b,167),c))};var dO=mdb(wle,'SuccessorJitter',644);bcb(643,1,{},zMb);_.Ce=function AMb(a,b){var c;return yMb((c=BD(a,46),BD(b,167),c))};var eO=mdb(wle,'SuccessorLineByLine',643);bcb(568,1,{},CMb);_.Ce=function DMb(a,b){var c;return BMb((c=BD(a,46),BD(b,167),c))};var fO=mdb(wle,'SuccessorManhattan',568);bcb(1356,1,{},FMb);_.Ce=function GMb(a,b){var c;return EMb((c=BD(a,46),BD(b,167),c))};var gO=mdb(wle,'SuccessorMaxNormWindingInMathPosSense',1356);bcb(400,1,{},JMb);_.Ce=function KMb(a,b){return HMb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var iO=mdb(wle,'SuccessorQuadrantsGeneric',400);bcb(1357,1,{},LMb);_.Kb=function MMb(a){return BD(a,324).a};var hO=mdb(wle,'SuccessorQuadrantsGeneric/lambda$0$Type',1357);bcb(323,22,{3:1,35:1,22:1,323:1},SMb);_.a=false;var NMb,OMb,PMb,QMb;var jO=ndb(Ble,Cle,323,CI,UMb,TMb);var VMb;bcb(1298,1,{});_.Ib=function bNb(){var a,b,c,d,e,f;c=' ';a=meb(0);for(e=0;e<this.o;e++){c+=''+a.a;a=meb(XMb(a.a))}c+='\n';a=meb(0);for(f=0;f<this.p;f++){c+=''+a.a;a=meb(XMb(a.a));for(d=0;d<this.o;d++){b=_Mb(this,d,f);ybb(b,0)==0?(c+='_'):ybb(b,1)==0?(c+='X'):(c+='0')}c+='\n'}return qfb(c,0,c.length-1)};_.o=0;_.p=0;var nO=mdb(Ble,'TwoBitGrid',1298);bcb(321,1298,{321:1},pNb);_.j=0;_.k=0;var kO=mdb(Ble,'PlanarGrid',321);bcb(167,321,{321:1,167:1});_.g=0;_.i=0;var lO=mdb(Ble,'Polyomino',167);var P3=odb(Hle,Ile);bcb(134,1,Jle,zNb);_.Ye=function DNb(a,b){return xNb(this,a,b)};_.Ve=function ANb(){return uNb(this)};_.We=function BNb(a){return vNb(this,a)};_.Xe=function CNb(a){return wNb(this,a)};var R3=mdb(Hle,'MapPropertyHolder',134);bcb(1299,134,Jle,ENb);var mO=mdb(Ble,'Polyominoes',1299);var FNb=false,GNb,HNb;bcb(1766,1,qie,PNb);_.td=function QNb(a){JNb(BD(a,221))};var oO=mdb(Kle,'DepthFirstCompaction/0methodref$compactTree$Type',1766);bcb(810,1,qie,RNb);_.td=function SNb(a){MNb(this.a,BD(a,221))};var pO=mdb(Kle,'DepthFirstCompaction/lambda$1$Type',810);bcb(1767,1,qie,TNb);_.td=function UNb(a){NNb(this.a,this.b,this.c,BD(a,221))};var qO=mdb(Kle,'DepthFirstCompaction/lambda$2$Type',1767);var VNb,WNb;bcb(65,1,{65:1},aOb);var rO=mdb(Kle,'Node',65);bcb(1250,1,{},dOb);var wO=mdb(Kle,'ScanlineOverlapCheck',1250);bcb(1251,1,{679:1},hOb);_.Ke=function iOb(a){fOb(this,BD(a,440))};var tO=mdb(Kle,'ScanlineOverlapCheck/OverlapsScanlineHandler',1251);bcb(1252,1,Dke,kOb);_.ue=function lOb(a,b){return jOb(BD(a,65),BD(b,65))};_.Fb=function mOb(a){return this===a};_.ve=function nOb(){return new tpb(this)};var sO=mdb(Kle,'ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type',1252);bcb(440,1,{440:1},oOb);_.a=false;var uO=mdb(Kle,'ScanlineOverlapCheck/Timestamp',440);bcb(1253,1,Dke,pOb);_.ue=function qOb(a,b){return eOb(BD(a,440),BD(b,440))};_.Fb=function rOb(a){return this===a};_.ve=function sOb(){return new tpb(this)};var vO=mdb(Kle,'ScanlineOverlapCheck/lambda$0$Type',1253);bcb(550,1,{},tOb);var xO=mdb(Lle,'SVGImage',550);bcb(324,1,{324:1},uOb);_.Ib=function vOb(){return '('+this.a+She+this.b+She+this.c+')'};var yO=mdb(Lle,'UniqueTriple',324);bcb(209,1,Mle);var g0=mdb(Nle,'AbstractLayoutProvider',209);bcb(1132,209,Mle,yOb);_.Ze=function zOb(a,b){var c,d,e,f;Odd(b,Ole,1);this.a=Edb(ED(hkd(a,(CPb(),BPb))));if(ikd(a,rPb)){e=GD(hkd(a,rPb));c=h4c(n4c(),e);if(c){d=BD(hgd(c.f),209);d.Ze(a,Udd(b,1))}}f=new AQb(this.a);this.b=yQb(f,a);switch(BD(hkd(a,(nPb(),jPb)),481).g){case 0:BOb(new FOb,this.b);jkd(a,uPb,vNb(this.b,uPb));break;default:Zfb();}qQb(f);jkd(a,tPb,this.b);Qdd(b)};_.a=0;var zO=mdb(Ple,'DisCoLayoutProvider',1132);bcb(1244,1,{},FOb);_.c=false;_.e=0;_.f=0;var AO=mdb(Ple,'DisCoPolyominoCompactor',1244);bcb(561,1,{561:1},MOb);_.b=true;var BO=mdb(Qle,'DCComponent',561);bcb(394,22,{3:1,35:1,22:1,394:1},SOb);_.a=false;var NOb,OOb,POb,QOb;var CO=ndb(Qle,'DCDirection',394,CI,UOb,TOb);var VOb;bcb(266,134,{3:1,266:1,94:1,134:1},XOb);var DO=mdb(Qle,'DCElement',266);bcb(395,1,{395:1},ZOb);_.c=0;var EO=mdb(Qle,'DCExtension',395);bcb(755,134,Jle,aPb);var FO=mdb(Qle,'DCGraph',755);bcb(481,22,{3:1,35:1,22:1,481:1},dPb);var bPb;var GO=ndb(Rle,Sle,481,CI,fPb,ePb);var gPb;bcb(854,1,ale,oPb);_.Qe=function pPb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tle),Xle),'Connected Components Compaction Strategy'),'Strategy for packing different connected components in order to save space and enhance readability of a graph.'),kPb),(_5c(),V5c)),GO),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Ule),Xle),'Connected Components Layout Algorithm'),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),Z5c),ZI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vle),'debug'),'DCGraph'),'Access to the DCGraph is intended for the debug view,'),Y5c),SI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wle),'debug'),'List of Polyominoes'),'Access to the polyominoes is intended for the debug view,'),Y5c),SI),pqb(L5c))));DPb((new EPb,a))};var iPb,jPb,kPb,lPb,mPb;var HO=mdb(Rle,'DisCoMetaDataProvider',854);bcb(998,1,ale,EPb);_.Qe=function FPb(a){DPb(a)};var qPb,rPb,sPb,tPb,uPb,vPb,wPb,xPb,yPb,zPb,APb,BPb;var JO=mdb(Rle,'DisCoOptions',998);bcb(999,1,{},GPb);_.$e=function HPb(){var a;return a=new yOb,a};_._e=function IPb(a){};var IO=mdb(Rle,'DisCoOptions/DiscoFactory',999);bcb(562,167,{321:1,167:1,562:1},MPb);_.a=0;_.b=0;_.c=0;_.d=0;var KO=mdb('org.eclipse.elk.alg.disco.structures','DCPolyomino',562);var NPb,OPb,PPb;bcb(1268,1,Oie,aQb);_.Mb=function bQb(a){return _Pb(a)};var LO=mdb(bme,'ElkGraphComponentsProcessor/lambda$0$Type',1268);bcb(1269,1,{},cQb);_.Kb=function dQb(a){return QPb(),jtd(BD(a,79))};var MO=mdb(bme,'ElkGraphComponentsProcessor/lambda$1$Type',1269);bcb(1270,1,Oie,eQb);_.Mb=function fQb(a){return WPb(BD(a,79))};var NO=mdb(bme,'ElkGraphComponentsProcessor/lambda$2$Type',1270);bcb(1271,1,{},gQb);_.Kb=function hQb(a){return QPb(),ltd(BD(a,79))};var OO=mdb(bme,'ElkGraphComponentsProcessor/lambda$3$Type',1271);bcb(1272,1,Oie,iQb);_.Mb=function jQb(a){return XPb(BD(a,79))};var PO=mdb(bme,'ElkGraphComponentsProcessor/lambda$4$Type',1272);bcb(1273,1,Oie,kQb);_.Mb=function lQb(a){return YPb(this.a,BD(a,79))};var QO=mdb(bme,'ElkGraphComponentsProcessor/lambda$5$Type',1273);bcb(1274,1,{},mQb);_.Kb=function nQb(a){return ZPb(this.a,BD(a,79))};var RO=mdb(bme,'ElkGraphComponentsProcessor/lambda$6$Type',1274);bcb(1241,1,{},AQb);_.a=0;var UO=mdb(bme,'ElkGraphTransformer',1241);bcb(1242,1,{},CQb);_.Od=function DQb(a,b){BQb(this,BD(a,160),BD(b,266))};var TO=mdb(bme,'ElkGraphTransformer/OffsetApplier',1242);bcb(1243,1,qie,FQb);_.td=function GQb(a){EQb(this,BD(a,8))};var SO=mdb(bme,'ElkGraphTransformer/OffsetApplier/OffSetToChainApplier',1243);bcb(753,1,{},MQb);var WO=mdb(gme,hme,753);bcb(1232,1,Dke,OQb);_.ue=function PQb(a,b){return NQb(BD(a,231),BD(b,231))};_.Fb=function QQb(a){return this===a};_.ve=function RQb(){return new tpb(this)};var VO=mdb(gme,ime,1232);bcb(740,209,Mle,ZQb);_.Ze=function $Qb(a,b){WQb(this,a,b)};var XO=mdb(gme,'ForceLayoutProvider',740);bcb(357,134,{3:1,357:1,94:1,134:1});var bP=mdb(jme,'FParticle',357);bcb(559,357,{3:1,559:1,357:1,94:1,134:1},aRb);_.Ib=function bRb(){var a;if(this.a){a=Jkb(this.a.a,this,0);return a>=0?'b'+a+'['+fRb(this.a)+']':'b['+fRb(this.a)+']'}return 'b_'+FCb(this)};var YO=mdb(jme,'FBendpoint',559);bcb(282,134,{3:1,282:1,94:1,134:1},gRb);_.Ib=function hRb(){return fRb(this)};var ZO=mdb(jme,'FEdge',282);bcb(231,134,{3:1,231:1,94:1,134:1},kRb);var $O=mdb(jme,'FGraph',231);bcb(447,357,{3:1,447:1,357:1,94:1,134:1},mRb);_.Ib=function nRb(){return this.b==null||this.b.length==0?'l['+fRb(this.a)+']':'l_'+this.b};var _O=mdb(jme,'FLabel',447);bcb(144,357,{3:1,144:1,357:1,94:1,134:1},pRb);_.Ib=function qRb(){return oRb(this)};_.b=0;var aP=mdb(jme,'FNode',144);bcb(2003,1,{});_.bf=function vRb(a){rRb(this,a)};_.cf=function wRb(){sRb(this)};_.d=0;var cP=mdb(lme,'AbstractForceModel',2003);bcb(631,2003,{631:1},xRb);_.af=function zRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);c=jRb(this.e,a,b);c>0?(f=-yRb(d,this.c)*c):(f=CRb(d,this.b)*BD(vNb(a,(wSb(),oSb)),19).a);Y6c(e,f/g);return e};_.bf=function ARb(a){rRb(this,a);this.a=BD(vNb(a,(wSb(),eSb)),19).a;this.c=Edb(ED(vNb(a,uSb)));this.b=Edb(ED(vNb(a,qSb)))};_.df=function BRb(a){return a<this.a};_.a=0;_.b=0;_.c=0;var dP=mdb(lme,'EadesModel',631);bcb(632,2003,{632:1},DRb);_.af=function FRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);f=JRb(d,this.a)*BD(vNb(a,(wSb(),oSb)),19).a;c=jRb(this.e,a,b);c>0&&(f-=ERb(d,this.a)*c);Y6c(e,f*this.b/g);return e};_.bf=function GRb(a){var b,c,d,e,f,g,h;rRb(this,a);this.b=Edb(ED(vNb(a,(wSb(),vSb))));this.c=this.b/BD(vNb(a,eSb),19).a;d=a.e.c.length;f=0;e=0;for(h=new olb(a.e);h.a<h.c.c.length;){g=BD(mlb(h),144);f+=g.e.a;e+=g.e.b}b=f*e;c=Edb(ED(vNb(a,uSb)))*ple;this.a=$wnd.Math.sqrt(b/(2*d))*c};_.cf=function HRb(){sRb(this);this.b-=this.c};_.df=function IRb(a){return this.b>0};_.a=0;_.b=0;_.c=0;var eP=mdb(lme,'FruchtermanReingoldModel',632);bcb(849,1,ale,TRb);_.Qe=function URb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mme),''),'Force Model'),'Determines the model for force calculation.'),MRb),(_5c(),V5c)),gP),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nme),''),'Iterations'),'The number of iterations on the force model.'),meb(300)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ome),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pme),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),qme),U5c),BI),pqb(L5c))));o4c(a,pme,mme,RRb);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rme),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),U5c),BI),pqb(L5c))));o4c(a,rme,mme,ORb);xSb((new ySb,a))};var KRb,LRb,MRb,NRb,ORb,PRb,QRb,RRb;var fP=mdb(sme,'ForceMetaDataProvider',849);bcb(424,22,{3:1,35:1,22:1,424:1},YRb);var VRb,WRb;var gP=ndb(sme,'ForceModelStrategy',424,CI,$Rb,ZRb);var _Rb;bcb(988,1,ale,ySb);_.Qe=function zSb(a){xSb(a)};var bSb,cSb,dSb,eSb,fSb,gSb,hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb,tSb,uSb,vSb;var iP=mdb(sme,'ForceOptions',988);bcb(989,1,{},ASb);_.$e=function BSb(){var a;return a=new ZQb,a};_._e=function CSb(a){};var hP=mdb(sme,'ForceOptions/ForceFactory',989);var DSb,ESb,FSb,GSb;bcb(850,1,ale,PSb);_.Qe=function QSb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mme),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Bcb(),false)),(_5c(),T5c)),wI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Nme),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ome),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),KSb),V5c),oP),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Pme),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),qme),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qme),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),meb(Ohe)),X5c),JI),pqb(L5c))));cTb((new dTb,a))};var ISb,JSb,KSb,LSb,MSb,NSb;var jP=mdb(sme,'StressMetaDataProvider',850);bcb(992,1,ale,dTb);_.Qe=function eTb(a){cTb(a)};var RSb,SSb,TSb,USb,VSb,WSb,XSb,YSb,ZSb,$Sb,_Sb,aTb;var lP=mdb(sme,'StressOptions',992);bcb(993,1,{},fTb);_.$e=function gTb(){var a;return a=new iTb,a};_._e=function hTb(a){};var kP=mdb(sme,'StressOptions/StressFactory',993);bcb(1128,209,Mle,iTb);_.Ze=function jTb(a,b){var c,d,e,f,g;Odd(b,Sme,1);Ccb(DD(hkd(a,(bTb(),VSb))))?Ccb(DD(hkd(a,_Sb)))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c)):WQb(new ZQb,a,Udd(b,1));e=TQb(a);d=LQb(this.a,e);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),231);if(f.e.c.length<=1){continue}sTb(this.b,f);qTb(this.b);Hkb(f.d,new kTb)}e=KQb(d);SQb(e);Qdd(b)};var nP=mdb(Ume,'StressLayoutProvider',1128);bcb(1129,1,qie,kTb);_.td=function lTb(a){lRb(BD(a,447))};var mP=mdb(Ume,'StressLayoutProvider/lambda$0$Type',1129);bcb(990,1,{},tTb);_.c=0;_.e=0;_.g=0;var qP=mdb(Ume,'StressMajorization',990);bcb(379,22,{3:1,35:1,22:1,379:1},zTb);var vTb,wTb,xTb;var oP=ndb(Ume,'StressMajorization/Dimension',379,CI,BTb,ATb);var CTb;bcb(991,1,Dke,ETb);_.ue=function FTb(a,b){return uTb(this.a,BD(a,144),BD(b,144))};_.Fb=function GTb(a){return this===a};_.ve=function HTb(){return new tpb(this)};var pP=mdb(Ume,'StressMajorization/lambda$0$Type',991);bcb(1229,1,{},PTb);var tP=mdb(Wme,'ElkLayered',1229);bcb(1230,1,qie,STb);_.td=function TTb(a){QTb(BD(a,37))};var rP=mdb(Wme,'ElkLayered/lambda$0$Type',1230);bcb(1231,1,qie,UTb);_.td=function VTb(a){RTb(this.a,BD(a,37))};var sP=mdb(Wme,'ElkLayered/lambda$1$Type',1231);bcb(1263,1,{},bUb);var WTb,XTb,YTb;var xP=mdb(Wme,'GraphConfigurator',1263);bcb(759,1,qie,dUb);_.td=function eUb(a){$Tb(this.a,BD(a,10))};var uP=mdb(Wme,'GraphConfigurator/lambda$0$Type',759);bcb(760,1,{},fUb);_.Kb=function gUb(a){return ZTb(),new YAb(null,new Kub(BD(a,29).a,16))};var vP=mdb(Wme,'GraphConfigurator/lambda$1$Type',760);bcb(761,1,qie,hUb);_.td=function iUb(a){$Tb(this.a,BD(a,10))};var wP=mdb(Wme,'GraphConfigurator/lambda$2$Type',761);bcb(1127,209,Mle,jUb);_.Ze=function kUb(a,b){var c;c=U1b(new a2b,a);PD(hkd(a,(Nyc(),axc)))===PD((hbd(),ebd))?JTb(this.a,c,b):KTb(this.a,c,b);z2b(new D2b,c)};var yP=mdb(Wme,'LayeredLayoutProvider',1127);bcb(356,22,{3:1,35:1,22:1,356:1},rUb);var lUb,mUb,nUb,oUb,pUb;var zP=ndb(Wme,'LayeredPhases',356,CI,tUb,sUb);var uUb;bcb(1651,1,{},CUb);_.i=0;var wUb;var CP=mdb(Xme,'ComponentsToCGraphTransformer',1651);var hVb;bcb(1652,1,{},DUb);_.ef=function EUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function FUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var AP=mdb(Xme,'ComponentsToCGraphTransformer/1',1652);bcb(81,1,{81:1});_.i=0;_.k=true;_.o=Qje;var IP=mdb(Yme,'CNode',81);bcb(460,81,{460:1,81:1},GUb,HUb);_.Ib=function IUb(){return ''};var BP=mdb(Xme,'ComponentsToCGraphTransformer/CRectNode',460);bcb(1623,1,{},VUb);var JUb,KUb;var FP=mdb(Xme,'OneDimensionalComponentsCompaction',1623);bcb(1624,1,{},YUb);_.Kb=function ZUb(a){return WUb(BD(a,46))};_.Fb=function $Ub(a){return this===a};var DP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$0$Type',1624);bcb(1625,1,{},_Ub);_.Kb=function aVb(a){return XUb(BD(a,46))};_.Fb=function bVb(a){return this===a};var EP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$1$Type',1625);bcb(1654,1,{},dVb);var GP=mdb(Yme,'CGraph',1654);bcb(189,1,{189:1},gVb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=Qje;var HP=mdb(Yme,'CGroup',189);bcb(1653,1,{},jVb);_.ef=function kVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function lVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var JP=mdb(Yme,Ike,1653);bcb(1655,1,{},CVb);_.d=false;var mVb;var LP=mdb(Yme,Nke,1655);bcb(1656,1,{},DVb);_.Kb=function EVb(a){return nVb(),Bcb(),BD(BD(a,46).a,81).d.e!=0?true:false};_.Fb=function FVb(a){return this===a};var KP=mdb(Yme,Oke,1656);bcb(823,1,{},IVb);_.a=false;_.b=false;_.c=false;_.d=false;var MP=mdb(Yme,Pke,823);bcb(1825,1,{},OVb);var RP=mdb(Zme,Qke,1825);var bQ=odb($me,Fke);bcb(1826,1,{369:1},SVb);_.Ke=function TVb(a){QVb(this,BD(a,466))};var OP=mdb(Zme,Rke,1826);bcb(1827,1,Dke,VVb);_.ue=function WVb(a,b){return UVb(BD(a,81),BD(b,81))};_.Fb=function XVb(a){return this===a};_.ve=function YVb(){return new tpb(this)};var NP=mdb(Zme,Ske,1827);bcb(466,1,{466:1},ZVb);_.a=false;var PP=mdb(Zme,Tke,466);bcb(1828,1,Dke,$Vb);_.ue=function _Vb(a,b){return PVb(BD(a,466),BD(b,466))};_.Fb=function aWb(a){return this===a};_.ve=function bWb(){return new tpb(this)};var QP=mdb(Zme,Uke,1828);bcb(140,1,{140:1},cWb,dWb);_.Fb=function eWb(a){var b;if(a==null){return false}if(TP!=rb(a)){return false}b=BD(a,140);return wtb(this.c,b.c)&&wtb(this.d,b.d)};_.Hb=function fWb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d]))};_.Ib=function gWb(){return '('+this.c+She+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var TP=mdb($me,'Point',140);bcb(405,22,{3:1,35:1,22:1,405:1},oWb);var hWb,iWb,jWb,kWb;var SP=ndb($me,'Point/Quadrant',405,CI,sWb,rWb);var tWb;bcb(1642,1,{},CWb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var vWb,wWb,xWb,yWb,zWb;var aQ=mdb($me,'RectilinearConvexHull',1642);bcb(574,1,{369:1},NWb);_.Ke=function OWb(a){MWb(this,BD(a,140))};_.b=0;var KWb;var VP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler',574);bcb(1644,1,Dke,QWb);_.ue=function RWb(a,b){return PWb(ED(a),ED(b))};_.Fb=function SWb(a){return this===a};_.ve=function TWb(){return new tpb(this)};var UP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1644);bcb(1643,1,{369:1},VWb);_.Ke=function WWb(a){UWb(this,BD(a,140))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var WP=mdb($me,'RectilinearConvexHull/RectangleEventHandler',1643);bcb(1645,1,Dke,XWb);_.ue=function YWb(a,b){return EWb(BD(a,140),BD(b,140))};_.Fb=function ZWb(a){return this===a};_.ve=function $Wb(){return new tpb(this)};var XP=mdb($me,'RectilinearConvexHull/lambda$0$Type',1645);bcb(1646,1,Dke,_Wb);_.ue=function aXb(a,b){return FWb(BD(a,140),BD(b,140))};_.Fb=function bXb(a){return this===a};_.ve=function cXb(){return new tpb(this)};var YP=mdb($me,'RectilinearConvexHull/lambda$1$Type',1646);bcb(1647,1,Dke,dXb);_.ue=function eXb(a,b){return GWb(BD(a,140),BD(b,140))};_.Fb=function fXb(a){return this===a};_.ve=function gXb(){return new tpb(this)};var ZP=mdb($me,'RectilinearConvexHull/lambda$2$Type',1647);bcb(1648,1,Dke,hXb);_.ue=function iXb(a,b){return HWb(BD(a,140),BD(b,140))};_.Fb=function jXb(a){return this===a};_.ve=function kXb(){return new tpb(this)};var $P=mdb($me,'RectilinearConvexHull/lambda$3$Type',1648);bcb(1649,1,Dke,lXb);_.ue=function mXb(a,b){return IWb(BD(a,140),BD(b,140))};_.Fb=function nXb(a){return this===a};_.ve=function oXb(){return new tpb(this)};var _P=mdb($me,'RectilinearConvexHull/lambda$4$Type',1649);bcb(1650,1,{},qXb);var cQ=mdb($me,'Scanline',1650);bcb(2005,1,{});var dQ=mdb(_me,'AbstractGraphPlacer',2005);bcb(325,1,{325:1},AXb);_.mf=function BXb(a){if(this.nf(a)){Rc(this.b,BD(vNb(a,(wtc(),Esc)),21),a);return true}else{return false}};_.nf=function CXb(a){var b,c,d,e;b=BD(vNb(a,(wtc(),Esc)),21);e=BD(Qc(wXb,b),21);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),21);if(!BD(Qc(this.b,c),15).dc()){return false}}return true};var wXb;var gQ=mdb(_me,'ComponentGroup',325);bcb(765,2005,{},HXb);_.of=function IXb(a){var b,c;for(c=new olb(this.a);c.a<c.c.c.length;){b=BD(mlb(c),325);if(b.mf(a)){return}}Ekb(this.a,new AXb(a))};_.lf=function JXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;this.a.c=KC(SI,Uhe,1,0,5,1);b.a.c=KC(SI,Uhe,1,0,5,1);if(a.dc()){b.f.a=0;b.f.b=0;return}g=BD(a.Xb(0),37);tNb(b,g);for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);this.of(d)}o=new d7c;f=Edb(ED(vNb(g,(Nyc(),kyc))));for(j=new olb(this.a);j.a<j.c.c.length;){h=BD(mlb(j),325);k=DXb(h,f);vXb(Uc(h.b),o.a,o.b);o.a+=k.a;o.b+=k.b}b.f.a=o.a-f;b.f.b=o.b-f;if(Ccb(DD(vNb(g,qwc)))&&PD(vNb(g,Swc))===PD((Aad(),wad))){for(n=a.Kc();n.Ob();){l=BD(n.Pb(),37);uXb(l,l.c.a,l.c.b)}c=new gYb;YXb(c,a,f);for(m=a.Kc();m.Ob();){l=BD(m.Pb(),37);P6c(X6c(l.c),c.e)}P6c(X6c(b.f),c.a)}for(i=new olb(this.a);i.a<i.c.c.length;){h=BD(mlb(i),325);tXb(b,Uc(h.b))}};var eQ=mdb(_me,'ComponentGroupGraphPlacer',765);bcb(1293,765,{},LXb);_.of=function MXb(a){KXb(this,a)};_.lf=function NXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;this.a.c=KC(SI,Uhe,1,0,5,1);b.a.c=KC(SI,Uhe,1,0,5,1);if(a.dc()){b.f.a=0;b.f.b=0;return}g=BD(a.Xb(0),37);tNb(b,g);for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);KXb(this,d)}t=new d7c;s=new d7c;p=new d7c;o=new d7c;f=Edb(ED(vNb(g,(Nyc(),kyc))));for(j=new olb(this.a);j.a<j.c.c.length;){h=BD(mlb(j),325);if(fad(BD(vNb(b,(Y9c(),z8c)),103))){p.a=t.a;for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Acd))){p.a=s.a;break}}}else if(gad(BD(vNb(b,z8c),103))){p.b=t.b;for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Tcd))){p.b=s.b;break}}}k=DXb(BD(h,570),f);vXb(Uc(h.b),p.a,p.b);if(fad(BD(vNb(b,z8c),103))){s.a=p.a+k.a;o.a=$wnd.Math.max(o.a,s.a);for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Rcd))){t.a=p.a+k.a;break}}s.b=p.b+k.b;p.b=s.b;o.b=$wnd.Math.max(o.b,p.b)}else if(gad(BD(vNb(b,z8c),103))){s.b=p.b+k.b;o.b=$wnd.Math.max(o.b,s.b);for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),zcd))){t.b=p.b+k.b;break}}s.a=p.a+k.a;p.a=s.a;o.a=$wnd.Math.max(o.a,p.a)}}b.f.a=o.a-f;b.f.b=o.b-f;if(Ccb(DD(vNb(g,qwc)))&&PD(vNb(g,Swc))===PD((Aad(),wad))){for(n=a.Kc();n.Ob();){l=BD(n.Pb(),37);uXb(l,l.c.a,l.c.b)}c=new gYb;YXb(c,a,f);for(m=a.Kc();m.Ob();){l=BD(m.Pb(),37);P6c(X6c(l.c),c.e)}P6c(X6c(b.f),c.a)}for(i=new olb(this.a);i.a<i.c.c.length;){h=BD(mlb(i),325);tXb(b,Uc(h.b))}};var fQ=mdb(_me,'ComponentGroupModelOrderGraphPlacer',1293);bcb(423,22,{3:1,35:1,22:1,423:1},SXb);var OXb,PXb,QXb;var hQ=ndb(_me,'ComponentOrderingStrategy',423,CI,UXb,TXb);var VXb;bcb(650,1,{},gYb);var pQ=mdb(_me,'ComponentsCompactor',650);bcb(1468,12,ake,jYb);_.Fc=function kYb(a){return hYb(this,BD(a,140))};var iQ=mdb(_me,'ComponentsCompactor/Hullpoints',1468);bcb(1465,1,{841:1},mYb);_.a=false;var jQ=mdb(_me,'ComponentsCompactor/InternalComponent',1465);bcb(1464,1,vie,nYb);_.Jc=function oYb(a){reb(this,a)};_.Kc=function pYb(){return new olb(this.a)};var kQ=mdb(_me,'ComponentsCompactor/InternalConnectedComponents',1464);bcb(1467,1,{594:1},qYb);_.hf=function sYb(){return null};_.jf=function tYb(){return this.a};_.gf=function rYb(){return cYb(this.d)};_.kf=function uYb(){return this.b};var lQ=mdb(_me,'ComponentsCompactor/InternalExternalExtension',1467);bcb(1466,1,{594:1},vYb);_.jf=function yYb(){return this.a};_.gf=function wYb(){return cYb(this.d)};_.hf=function xYb(){return this.c};_.kf=function zYb(){return this.b};var mQ=mdb(_me,'ComponentsCompactor/InternalUnionExternalExtension',1466);bcb(1470,1,{},AYb);var nQ=mdb(_me,'ComponentsCompactor/OuterSegments',1470);bcb(1469,1,{},BYb);var oQ=mdb(_me,'ComponentsCompactor/Segments',1469);bcb(1264,1,{},FYb);var rQ=mdb(_me,hme,1264);bcb(1265,1,Dke,HYb);_.ue=function IYb(a,b){return GYb(BD(a,37),BD(b,37))};_.Fb=function JYb(a){return this===a};_.ve=function KYb(){return new tpb(this)};var qQ=mdb(_me,'ComponentsProcessor/lambda$0$Type',1265);bcb(570,325,{325:1,570:1},PYb);_.mf=function QYb(a){return NYb(this,a)};_.nf=function RYb(a){return OYb(this,a)};var LYb;var sQ=mdb(_me,'ModelOrderComponentGroup',570);bcb(1291,2005,{},SYb);_.lf=function TYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(a.gc()==1){t=BD(a.Xb(0),37);if(t!=b){b.a.c=KC(SI,Uhe,1,0,5,1);sXb(b,t,0,0);tNb(b,t);u_b(b.d,t.d);b.f.a=t.f.a;b.f.b=t.f.b}return}else if(a.dc()){b.a.c=KC(SI,Uhe,1,0,5,1);b.f.a=0;b.f.b=0;return}if(PD(vNb(b,(Nyc(),twc)))===PD((RXb(),QXb))){for(i=a.Kc();i.Ob();){g=BD(i.Pb(),37);r=0;for(p=new olb(g.a);p.a<p.c.c.length;){o=BD(mlb(p),10);r+=BD(vNb(o,byc),19).a}g.p=r}mmb();a.ad(new VYb)}f=BD(a.Xb(0),37);b.a.c=KC(SI,Uhe,1,0,5,1);tNb(b,f);n=0;u=0;for(j=a.Kc();j.Ob();){g=BD(j.Pb(),37);s=g.f;n=$wnd.Math.max(n,s.a);u+=s.a*s.b}n=$wnd.Math.max(n,$wnd.Math.sqrt(u)*Edb(ED(vNb(b,owc))));e=Edb(ED(vNb(b,kyc)));v=0;w=0;m=0;c=e;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);s=g.f;if(v+s.a>n){v=0;w+=m+e;m=0}q=g.c;uXb(g,v+q.a,w+q.b);X6c(q);c=$wnd.Math.max(c,v+s.a);m=$wnd.Math.max(m,s.b);v+=s.a+e}b.f.a=c;b.f.b=w+m;if(Ccb(DD(vNb(f,qwc)))){d=new gYb;YXb(d,a,e);for(l=a.Kc();l.Ob();){k=BD(l.Pb(),37);P6c(X6c(k.c),d.e)}P6c(X6c(b.f),d.a)}tXb(b,a)};var uQ=mdb(_me,'SimpleRowGraphPlacer',1291);bcb(1292,1,Dke,VYb);_.ue=function WYb(a,b){return UYb(BD(a,37),BD(b,37))};_.Fb=function XYb(a){return this===a};_.ve=function YYb(){return new tpb(this)};var tQ=mdb(_me,'SimpleRowGraphPlacer/1',1292);var ZYb;bcb(1262,1,Vke,dZb);_.Lb=function eZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};_.Fb=function fZb(a){return this===a};_.Mb=function gZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};var vQ=mdb(dne,'CompoundGraphPostprocessor/1',1262);bcb(1261,1,ene,wZb);_.pf=function xZb(a,b){qZb(this,BD(a,37),b)};var xQ=mdb(dne,'CompoundGraphPreprocessor',1261);bcb(441,1,{441:1},yZb);_.c=false;var wQ=mdb(dne,'CompoundGraphPreprocessor/ExternalPort',441);bcb(243,1,{243:1},BZb);_.Ib=function CZb(){return Zr(this.c)+':'+TZb(this.b)};var zQ=mdb(dne,'CrossHierarchyEdge',243);bcb(763,1,Dke,EZb);_.ue=function FZb(a,b){return DZb(this,BD(a,243),BD(b,243))};_.Fb=function GZb(a){return this===a};_.ve=function IZb(){return new tpb(this)};var yQ=mdb(dne,'CrossHierarchyEdgeComparator',763);bcb(299,134,{3:1,299:1,94:1,134:1});_.p=0;var JQ=mdb(fne,'LGraphElement',299);bcb(17,299,{3:1,17:1,299:1,94:1,134:1},UZb);_.Ib=function VZb(){return TZb(this)};var AQ=mdb(fne,'LEdge',17);bcb(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},XZb);_.Jc=function YZb(a){reb(this,a)};_.Kc=function ZZb(){return new olb(this.b)};_.Ib=function $Zb(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var KQ=mdb(fne,'LGraph',37);var _Zb;bcb(657,1,{});_.qf=function b$b(){return this.e.n};_.We=function c$b(a){return vNb(this.e,a)};_.rf=function d$b(){return this.e.o};_.sf=function e$b(){return this.e.p};_.Xe=function f$b(a){return wNb(this.e,a)};_.tf=function g$b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.uf=function h$b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.vf=function i$b(a){this.e.p=a};var BQ=mdb(fne,'LGraphAdapters/AbstractLShapeAdapter',657);bcb(577,1,{839:1},j$b);_.wf=function k$b(){var a,b;if(!this.b){this.b=Pu(this.a.b.c.length);for(b=new olb(this.a.b);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.b,new v$b(a))}}return this.b};_.b=null;var CQ=mdb(fne,'LGraphAdapters/LEdgeAdapter',577);bcb(656,1,{},l$b);_.xf=function m$b(){var a,b,c,d,e,f;if(!this.b){this.b=new Rkb;for(d=new olb(this.a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);if(this.c.Mb(e)){Ekb(this.b,new x$b(this,e,this.e));if(this.d){if(wNb(e,(wtc(),vtc))){for(b=BD(vNb(e,vtc),15).Kc();b.Ob();){a=BD(b.Pb(),10);Ekb(this.b,new x$b(this,a,false))}}if(wNb(e,tsc)){for(b=BD(vNb(e,tsc),15).Kc();b.Ob();){a=BD(b.Pb(),10);Ekb(this.b,new x$b(this,a,false))}}}}}}}return this.b};_.qf=function n$b(){throw vbb(new cgb(hne))};_.We=function o$b(a){return vNb(this.a,a)};_.rf=function p$b(){return this.a.f};_.sf=function q$b(){return this.a.p};_.Xe=function r$b(a){return wNb(this.a,a)};_.tf=function s$b(a){throw vbb(new cgb(hne))};_.uf=function t$b(a){this.a.f.a=a.a;this.a.f.b=a.b};_.vf=function u$b(a){this.a.p=a};_.b=null;_.d=false;_.e=false;var DQ=mdb(fne,'LGraphAdapters/LGraphAdapter',656);bcb(576,657,{181:1},v$b);var EQ=mdb(fne,'LGraphAdapters/LLabelAdapter',576);bcb(575,657,{680:1},x$b);_.yf=function y$b(){return this.b};_.zf=function z$b(){return mmb(),mmb(),jmb};_.wf=function A$b(){var a,b;if(!this.a){this.a=Pu(BD(this.e,10).b.c.length);for(b=new olb(BD(this.e,10).b);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.a,new v$b(a))}}return this.a};_.Af=function B$b(){var a;a=BD(this.e,10).d;return new J_b(a.d,a.c,a.a,a.b)};_.Bf=function C$b(){return mmb(),mmb(),jmb};_.Cf=function D$b(){var a,b;if(!this.c){this.c=Pu(BD(this.e,10).j.c.length);for(b=new olb(BD(this.e,10).j);b.a<b.c.c.length;){a=BD(mlb(b),11);Ekb(this.c,new I$b(a,this.d))}}return this.c};_.Df=function E$b(){return Ccb(DD(vNb(BD(this.e,10),(wtc(),wsc))))};_.Ef=function F$b(a){BD(this.e,10).d.b=a.b;BD(this.e,10).d.d=a.d;BD(this.e,10).d.c=a.c;BD(this.e,10).d.a=a.a};_.Ff=function G$b(a){BD(this.e,10).f.b=a.b;BD(this.e,10).f.d=a.d;BD(this.e,10).f.c=a.c;BD(this.e,10).f.a=a.a};_.Gf=function H$b(){w$b(this,(a$b(),_Zb))};_.a=null;_.b=null;_.c=null;_.d=false;var FQ=mdb(fne,'LGraphAdapters/LNodeAdapter',575);bcb(1722,657,{838:1},I$b);_.zf=function J$b(){var a,b,c,d;if(this.d&&BD(this.e,11).i.k==(j0b(),i0b)){return mmb(),mmb(),jmb}else if(!this.a){this.a=new Rkb;for(c=new olb(BD(this.e,11).e);c.a<c.c.c.length;){a=BD(mlb(c),17);Ekb(this.a,new j$b(a))}if(this.d){d=BD(vNb(BD(this.e,11),(wtc(),gtc)),10);if(d){for(b=new Sr(ur(R_b(d).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),17);Ekb(this.a,new j$b(a))}}}}return this.a};_.wf=function K$b(){var a,b;if(!this.b){this.b=Pu(BD(this.e,11).f.c.length);for(b=new olb(BD(this.e,11).f);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.b,new v$b(a))}}return this.b};_.Bf=function L$b(){var a,b,c,d;if(this.d&&BD(this.e,11).i.k==(j0b(),i0b)){return mmb(),mmb(),jmb}else if(!this.c){this.c=new Rkb;for(c=new olb(BD(this.e,11).g);c.a<c.c.c.length;){a=BD(mlb(c),17);Ekb(this.c,new j$b(a))}if(this.d){d=BD(vNb(BD(this.e,11),(wtc(),gtc)),10);if(d){for(b=new Sr(ur(U_b(d).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),17);Ekb(this.c,new j$b(a))}}}}return this.c};_.Hf=function M$b(){return BD(this.e,11).j};_.If=function N$b(){return Ccb(DD(vNb(BD(this.e,11),(wtc(),Nsc))))};_.a=null;_.b=null;_.c=null;_.d=false;var GQ=mdb(fne,'LGraphAdapters/LPortAdapter',1722);bcb(1723,1,Dke,P$b);_.ue=function Q$b(a,b){return O$b(BD(a,11),BD(b,11))};_.Fb=function R$b(a){return this===a};_.ve=function S$b(){return new tpb(this)};var HQ=mdb(fne,'LGraphAdapters/PortComparator',1723);bcb(804,1,Oie,T$b);_.Mb=function U$b(a){return BD(a,10),a$b(),true};var IQ=mdb(fne,'LGraphAdapters/lambda$0$Type',804);bcb(392,299,{3:1,299:1,392:1,94:1,134:1});var bR=mdb(fne,'LShape',392);bcb(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},p_b,q_b);_.Ib=function r_b(){var a;a=o_b(this);return a==null?'label':'l_'+a};var LQ=mdb(fne,'LLabel',70);bcb(207,1,{3:1,4:1,207:1,414:1});_.Fb=function C_b(a){var b;if(JD(a,207)){b=BD(a,207);return this.d==b.d&&this.a==b.a&&this.b==b.b&&this.c==b.c}else{return false}};_.Hb=function D_b(){var a,b;a=Hdb(this.b)<<16;a|=Hdb(this.a)&aje;b=Hdb(this.c)<<16;b|=Hdb(this.d)&aje;return a^b};_.Jf=function F_b(b){var c,d,e,f,g,h,i,j,k,l,m;g=0;while(g<b.length&&E_b((BCb(g,b.length),b.charCodeAt(g)),mne)){++g}c=b.length;while(c>0&&E_b((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(g<c){l=mfb(b.substr(g,c-g),',|;');try{for(i=l,j=0,k=i.length;j<k;++j){h=i[j];f=mfb(h,'=');if(f.length!=2){throw vbb(new Wdb('Expecting a list of key-value pairs.'))}e=ufb(f[0]);m=Hcb(ufb(f[1]));dfb(e,'top')?(this.d=m):dfb(e,'left')?(this.b=m):dfb(e,'bottom')?(this.a=m):dfb(e,'right')&&(this.c=m)}}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}}};_.Ib=function G_b(){return '[top='+this.d+',left='+this.b+',bottom='+this.a+',right='+this.c+']'};_.a=0;_.b=0;_.c=0;_.d=0;var n1=mdb(pne,'Spacing',207);bcb(142,207,qne,H_b,I_b,J_b,K_b);var i1=mdb(pne,'ElkMargin',142);bcb(651,142,qne,L_b);var MQ=mdb(fne,'LMargin',651);bcb(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},b0b);_.Ib=function c0b(){return a0b(this)};_.i=false;var OQ=mdb(fne,'LNode',10);bcb(267,22,{3:1,35:1,22:1,267:1},k0b);var d0b,e0b,f0b,g0b,h0b,i0b;var NQ=ndb(fne,'LNode/NodeType',267,CI,m0b,l0b);var n0b;bcb(116,207,rne,p0b,q0b,r0b);var j1=mdb(pne,'ElkPadding',116);bcb(764,116,rne,s0b);var PQ=mdb(fne,'LPadding',764);bcb(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},H0b);_.Ib=function I0b(){var a,b,c;a=new Ufb;Qfb((a.a+='p_',a),C0b(this));!!this.i&&Qfb(Pfb((a.a+='[',a),this.i),']');if(this.e.c.length==1&&this.g.c.length==0&&BD(Ikb(this.e,0),17).c!=this){b=BD(Ikb(this.e,0),17).c;Qfb((a.a+=' << ',a),C0b(b));Qfb(Pfb((a.a+='[',a),b.i),']')}if(this.e.c.length==0&&this.g.c.length==1&&BD(Ikb(this.g,0),17).d!=this){c=BD(Ikb(this.g,0),17).d;Qfb((a.a+=' >> ',a),C0b(c));Qfb(Pfb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var t0b,u0b,v0b,w0b,x0b,y0b;var aR=mdb(fne,'LPort',11);bcb(397,1,vie,J0b);_.Jc=function K0b(a){reb(this,a)};_.Kc=function L0b(){var a;a=new olb(this.a.e);return new M0b(a)};var RQ=mdb(fne,'LPort/1',397);bcb(1290,1,aie,M0b);_.Nb=function N0b(a){Rrb(this,a)};_.Pb=function P0b(){return BD(mlb(this.a),17).c};_.Ob=function O0b(){return llb(this.a)};_.Qb=function Q0b(){nlb(this.a)};var QQ=mdb(fne,'LPort/1/1',1290);bcb(359,1,vie,R0b);_.Jc=function S0b(a){reb(this,a)};_.Kc=function T0b(){var a;return a=new olb(this.a.g),new U0b(a)};var TQ=mdb(fne,'LPort/2',359);bcb(762,1,aie,U0b);_.Nb=function V0b(a){Rrb(this,a)};_.Pb=function X0b(){return BD(mlb(this.a),17).d};_.Ob=function W0b(){return llb(this.a)};_.Qb=function Y0b(){nlb(this.a)};var SQ=mdb(fne,'LPort/2/1',762);bcb(1283,1,vie,Z0b);_.Jc=function $0b(a){reb(this,a)};_.Kc=function _0b(){return new b1b(this)};var VQ=mdb(fne,'LPort/CombineIter',1283);bcb(201,1,aie,b1b);_.Nb=function c1b(a){Rrb(this,a)};_.Qb=function f1b(){Srb()};_.Ob=function d1b(){return a1b(this)};_.Pb=function e1b(){return llb(this.a)?mlb(this.a):mlb(this.b)};var UQ=mdb(fne,'LPort/CombineIter/1',201);bcb(1285,1,Vke,h1b);_.Lb=function i1b(a){return g1b(a)};_.Fb=function j1b(a){return this===a};_.Mb=function k1b(a){return z0b(),BD(a,11).e.c.length!=0};var WQ=mdb(fne,'LPort/lambda$0$Type',1285);bcb(1284,1,Vke,m1b);_.Lb=function n1b(a){return l1b(a)};_.Fb=function o1b(a){return this===a};_.Mb=function p1b(a){return z0b(),BD(a,11).g.c.length!=0};var XQ=mdb(fne,'LPort/lambda$1$Type',1284);bcb(1286,1,Vke,q1b);_.Lb=function r1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};_.Fb=function s1b(a){return this===a};_.Mb=function t1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};var YQ=mdb(fne,'LPort/lambda$2$Type',1286);bcb(1287,1,Vke,u1b);_.Lb=function v1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};_.Fb=function w1b(a){return this===a};_.Mb=function x1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};var ZQ=mdb(fne,'LPort/lambda$3$Type',1287);bcb(1288,1,Vke,y1b);_.Lb=function z1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};_.Fb=function A1b(a){return this===a};_.Mb=function B1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};var $Q=mdb(fne,'LPort/lambda$4$Type',1288);bcb(1289,1,Vke,C1b);_.Lb=function D1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};_.Fb=function E1b(a){return this===a};_.Mb=function F1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};var _Q=mdb(fne,'LPort/lambda$5$Type',1289);bcb(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},H1b);_.Jc=function I1b(a){reb(this,a)};_.Kc=function J1b(){return new olb(this.a)};_.Ib=function K1b(){return 'L_'+Jkb(this.b.b,this,0)+Fe(this.a)};var cR=mdb(fne,'Layer',29);bcb(1342,1,{},a2b);var mR=mdb(tne,une,1342);bcb(1346,1,{},e2b);_.Kb=function f2b(a){return atd(BD(a,82))};var dR=mdb(tne,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1346);bcb(1349,1,{},g2b);_.Kb=function h2b(a){return atd(BD(a,82))};var eR=mdb(tne,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1349);bcb(1343,1,qie,i2b);_.td=function j2b(a){Q1b(this.a,BD(a,118))};var fR=mdb(tne,vne,1343);bcb(1344,1,qie,k2b);_.td=function l2b(a){Q1b(this.a,BD(a,118))};var gR=mdb(tne,wne,1344);bcb(1345,1,{},m2b);_.Kb=function n2b(a){return new YAb(null,new Kub(Old(BD(a,79)),16))};var hR=mdb(tne,xne,1345);bcb(1347,1,Oie,o2b);_.Mb=function p2b(a){return b2b(this.a,BD(a,33))};var iR=mdb(tne,yne,1347);bcb(1348,1,{},q2b);_.Kb=function r2b(a){return new YAb(null,new Kub(Nld(BD(a,79)),16))};var jR=mdb(tne,'ElkGraphImporter/lambda$5$Type',1348);bcb(1350,1,Oie,s2b);_.Mb=function t2b(a){return c2b(this.a,BD(a,33))};var kR=mdb(tne,'ElkGraphImporter/lambda$7$Type',1350);bcb(1351,1,Oie,u2b);_.Mb=function v2b(a){return d2b(BD(a,79))};var lR=mdb(tne,'ElkGraphImporter/lambda$8$Type',1351);bcb(1278,1,{},D2b);var w2b;var rR=mdb(tne,'ElkGraphLayoutTransferrer',1278);bcb(1279,1,Oie,G2b);_.Mb=function H2b(a){return E2b(this.a,BD(a,17))};var nR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$0$Type',1279);bcb(1280,1,qie,I2b);_.td=function J2b(a){x2b();Ekb(this.a,BD(a,17))};var oR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$1$Type',1280);bcb(1281,1,Oie,K2b);_.Mb=function L2b(a){return F2b(this.a,BD(a,17))};var pR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$2$Type',1281);bcb(1282,1,qie,M2b);_.td=function N2b(a){x2b();Ekb(this.a,BD(a,17))};var qR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$3$Type',1282);bcb(1485,1,ene,S2b);_.pf=function T2b(a,b){Q2b(BD(a,37),b)};var uR=mdb(Ane,'CommentNodeMarginCalculator',1485);bcb(1486,1,{},U2b);_.Kb=function V2b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var sR=mdb(Ane,'CommentNodeMarginCalculator/lambda$0$Type',1486);bcb(1487,1,qie,W2b);_.td=function X2b(a){R2b(BD(a,10))};var tR=mdb(Ane,'CommentNodeMarginCalculator/lambda$1$Type',1487);bcb(1488,1,ene,_2b);_.pf=function a3b(a,b){Z2b(BD(a,37),b)};var vR=mdb(Ane,'CommentPostprocessor',1488);bcb(1489,1,ene,e3b);_.pf=function f3b(a,b){b3b(BD(a,37),b)};var wR=mdb(Ane,'CommentPreprocessor',1489);bcb(1490,1,ene,h3b);_.pf=function i3b(a,b){g3b(BD(a,37),b)};var xR=mdb(Ane,'ConstraintsPostprocessor',1490);bcb(1491,1,ene,p3b);_.pf=function q3b(a,b){n3b(BD(a,37),b)};var yR=mdb(Ane,'EdgeAndLayerConstraintEdgeReverser',1491);bcb(1492,1,ene,t3b);_.pf=function v3b(a,b){r3b(BD(a,37),b)};var CR=mdb(Ane,'EndLabelPostprocessor',1492);bcb(1493,1,{},w3b);_.Kb=function x3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var zR=mdb(Ane,'EndLabelPostprocessor/lambda$0$Type',1493);bcb(1494,1,Oie,y3b);_.Mb=function z3b(a){return u3b(BD(a,10))};var AR=mdb(Ane,'EndLabelPostprocessor/lambda$1$Type',1494);bcb(1495,1,qie,A3b);_.td=function B3b(a){s3b(BD(a,10))};var BR=mdb(Ane,'EndLabelPostprocessor/lambda$2$Type',1495);bcb(1496,1,ene,M3b);_.pf=function P3b(a,b){I3b(BD(a,37),b)};var JR=mdb(Ane,'EndLabelPreprocessor',1496);bcb(1497,1,{},Q3b);_.Kb=function R3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DR=mdb(Ane,'EndLabelPreprocessor/lambda$0$Type',1497);bcb(1498,1,qie,S3b);_.td=function T3b(a){E3b(this.a,this.b,this.c,BD(a,10))};_.a=0;_.b=0;_.c=false;var ER=mdb(Ane,'EndLabelPreprocessor/lambda$1$Type',1498);bcb(1499,1,Oie,U3b);_.Mb=function V3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var FR=mdb(Ane,'EndLabelPreprocessor/lambda$2$Type',1499);bcb(1500,1,qie,W3b);_.td=function X3b(a){Dsb(this.a,BD(a,70))};var GR=mdb(Ane,'EndLabelPreprocessor/lambda$3$Type',1500);bcb(1501,1,Oie,Y3b);_.Mb=function Z3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var HR=mdb(Ane,'EndLabelPreprocessor/lambda$4$Type',1501);bcb(1502,1,qie,$3b);_.td=function _3b(a){Dsb(this.a,BD(a,70))};var IR=mdb(Ane,'EndLabelPreprocessor/lambda$5$Type',1502);bcb(1551,1,ene,i4b);_.pf=function j4b(a,b){f4b(BD(a,37),b)};var a4b;var RR=mdb(Ane,'EndLabelSorter',1551);bcb(1552,1,Dke,l4b);_.ue=function m4b(a,b){return k4b(BD(a,456),BD(b,456))};_.Fb=function n4b(a){return this===a};_.ve=function o4b(){return new tpb(this)};var KR=mdb(Ane,'EndLabelSorter/1',1552);bcb(456,1,{456:1},p4b);var LR=mdb(Ane,'EndLabelSorter/LabelGroup',456);bcb(1553,1,{},q4b);_.Kb=function r4b(a){return b4b(),new YAb(null,new Kub(BD(a,29).a,16))};var MR=mdb(Ane,'EndLabelSorter/lambda$0$Type',1553);bcb(1554,1,Oie,s4b);_.Mb=function t4b(a){return b4b(),BD(a,10).k==(j0b(),h0b)};var NR=mdb(Ane,'EndLabelSorter/lambda$1$Type',1554);bcb(1555,1,qie,u4b);_.td=function v4b(a){g4b(BD(a,10))};var OR=mdb(Ane,'EndLabelSorter/lambda$2$Type',1555);bcb(1556,1,Oie,w4b);_.Mb=function x4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var PR=mdb(Ane,'EndLabelSorter/lambda$3$Type',1556);bcb(1557,1,Oie,y4b);_.Mb=function z4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var QR=mdb(Ane,'EndLabelSorter/lambda$4$Type',1557);bcb(1503,1,ene,L4b);_.pf=function M4b(a,b){J4b(this,BD(a,37))};_.b=0;_.c=0;var YR=mdb(Ane,'FinalSplineBendpointsCalculator',1503);bcb(1504,1,{},N4b);_.Kb=function O4b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var SR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$0$Type',1504);bcb(1505,1,{},P4b);_.Kb=function Q4b(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var TR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$1$Type',1505);bcb(1506,1,Oie,R4b);_.Mb=function S4b(a){return !OZb(BD(a,17))};var UR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$2$Type',1506);bcb(1507,1,Oie,T4b);_.Mb=function U4b(a){return wNb(BD(a,17),(wtc(),rtc))};var VR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$3$Type',1507);bcb(1508,1,qie,V4b);_.td=function W4b(a){C4b(this.a,BD(a,128))};var WR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$4$Type',1508);bcb(1509,1,qie,X4b);_.td=function Y4b(a){smb(BD(a,17).a)};var XR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$5$Type',1509);bcb(792,1,ene,u5b);_.pf=function v5b(a,b){l5b(this,BD(a,37),b)};var $R=mdb(Ane,'GraphTransformer',792);bcb(511,22,{3:1,35:1,22:1,511:1},z5b);var w5b,x5b;var ZR=ndb(Ane,'GraphTransformer/Mode',511,CI,B5b,A5b);var C5b;bcb(1510,1,ene,I5b);_.pf=function J5b(a,b){F5b(BD(a,37),b)};var _R=mdb(Ane,'HierarchicalNodeResizingProcessor',1510);bcb(1511,1,ene,Q5b);_.pf=function R5b(a,b){M5b(BD(a,37),b)};var bS=mdb(Ane,'HierarchicalPortConstraintProcessor',1511);bcb(1512,1,Dke,T5b);_.ue=function U5b(a,b){return S5b(BD(a,10),BD(b,10))};_.Fb=function V5b(a){return this===a};_.ve=function W5b(){return new tpb(this)};var aS=mdb(Ane,'HierarchicalPortConstraintProcessor/NodeComparator',1512);bcb(1513,1,ene,Z5b);_.pf=function $5b(a,b){X5b(BD(a,37),b)};var cS=mdb(Ane,'HierarchicalPortDummySizeProcessor',1513);bcb(1514,1,ene,l6b);_.pf=function m6b(a,b){e6b(this,BD(a,37),b)};_.a=0;var fS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter',1514);bcb(1515,1,Dke,o6b);_.ue=function p6b(a,b){return n6b(BD(a,10),BD(b,10))};_.Fb=function q6b(a){return this===a};_.ve=function r6b(){return new tpb(this)};var dS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/1',1515);bcb(1516,1,Dke,t6b);_.ue=function u6b(a,b){return s6b(BD(a,10),BD(b,10))};_.Fb=function v6b(a){return this===a};_.ve=function w6b(){return new tpb(this)};var eS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/2',1516);bcb(1517,1,ene,z6b);_.pf=function A6b(a,b){y6b(BD(a,37),b)};var gS=mdb(Ane,'HierarchicalPortPositionProcessor',1517);bcb(1518,1,ene,J6b);_.pf=function K6b(a,b){I6b(this,BD(a,37))};_.a=0;_.c=0;var B6b,C6b;var kS=mdb(Ane,'HighDegreeNodeLayeringProcessor',1518);bcb(571,1,{571:1},L6b);_.b=-1;_.d=-1;var hS=mdb(Ane,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',571);bcb(1519,1,{},M6b);_.Kb=function N6b(a){return D6b(),R_b(BD(a,10))};_.Fb=function O6b(a){return this===a};var iS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1519);bcb(1520,1,{},P6b);_.Kb=function Q6b(a){return D6b(),U_b(BD(a,10))};_.Fb=function R6b(a){return this===a};var jS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1520);bcb(1526,1,ene,X6b);_.pf=function Y6b(a,b){W6b(this,BD(a,37),b)};var pS=mdb(Ane,'HyperedgeDummyMerger',1526);bcb(793,1,{},Z6b);_.a=false;_.b=false;_.c=false;var lS=mdb(Ane,'HyperedgeDummyMerger/MergeState',793);bcb(1527,1,{},$6b);_.Kb=function _6b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var mS=mdb(Ane,'HyperedgeDummyMerger/lambda$0$Type',1527);bcb(1528,1,{},a7b);_.Kb=function b7b(a){return new YAb(null,new Kub(BD(a,10).j,16))};var nS=mdb(Ane,'HyperedgeDummyMerger/lambda$1$Type',1528);bcb(1529,1,qie,c7b);_.td=function d7b(a){BD(a,11).p=-1};var oS=mdb(Ane,'HyperedgeDummyMerger/lambda$2$Type',1529);bcb(1530,1,ene,g7b);_.pf=function h7b(a,b){f7b(BD(a,37),b)};var qS=mdb(Ane,'HypernodesProcessor',1530);bcb(1531,1,ene,j7b);_.pf=function k7b(a,b){i7b(BD(a,37),b)};var rS=mdb(Ane,'InLayerConstraintProcessor',1531);bcb(1532,1,ene,m7b);_.pf=function n7b(a,b){l7b(BD(a,37),b)};var sS=mdb(Ane,'InnermostNodeMarginCalculator',1532);bcb(1533,1,ene,r7b);_.pf=function w7b(a,b){q7b(this,BD(a,37))};_.a=Qje;_.b=Qje;_.c=Pje;_.d=Pje;var zS=mdb(Ane,'InteractiveExternalPortPositioner',1533);bcb(1534,1,{},x7b);_.Kb=function y7b(a){return BD(a,17).d.i};_.Fb=function z7b(a){return this===a};var tS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$0$Type',1534);bcb(1535,1,{},A7b);_.Kb=function B7b(a){return s7b(this.a,ED(a))};_.Fb=function C7b(a){return this===a};var uS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$1$Type',1535);bcb(1536,1,{},D7b);_.Kb=function E7b(a){return BD(a,17).c.i};_.Fb=function F7b(a){return this===a};var vS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$2$Type',1536);bcb(1537,1,{},G7b);_.Kb=function H7b(a){return t7b(this.a,ED(a))};_.Fb=function I7b(a){return this===a};var wS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$3$Type',1537);bcb(1538,1,{},J7b);_.Kb=function K7b(a){return u7b(this.a,ED(a))};_.Fb=function L7b(a){return this===a};var xS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$4$Type',1538);bcb(1539,1,{},M7b);_.Kb=function N7b(a){return v7b(this.a,ED(a))};_.Fb=function O7b(a){return this===a};var yS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$5$Type',1539);bcb(77,22,{3:1,35:1,22:1,77:1,234:1},T8b);_.Kf=function U8b(){switch(this.g){case 15:return new eoc;case 22:return new Aoc;case 47:return new Joc;case 28:case 35:return new uac;case 32:return new S2b;case 42:return new _2b;case 1:return new e3b;case 41:return new h3b;case 56:return new u5b((y5b(),x5b));case 0:return new u5b((y5b(),w5b));case 2:return new p3b;case 54:return new t3b;case 33:return new M3b;case 51:return new L4b;case 55:return new I5b;case 13:return new Q5b;case 38:return new Z5b;case 44:return new l6b;case 40:return new z6b;case 9:return new J6b;case 49:return new sgc;case 37:return new X6b;case 43:return new g7b;case 27:return new j7b;case 30:return new m7b;case 3:return new r7b;case 18:return new b9b;case 29:return new h9b;case 5:return new u9b;case 50:return new D9b;case 34:return new $9b;case 36:return new Iac;case 52:return new i4b;case 11:return new Sac;case 7:return new abc;case 39:return new obc;case 45:return new rbc;case 16:return new vbc;case 10:return new Fbc;case 48:return new Xbc;case 21:return new ccc;case 23:return new fGc((rGc(),pGc));case 8:return new lcc;case 12:return new tcc;case 4:return new ycc;case 19:return new Tcc;case 17:return new pdc;case 53:return new sdc;case 6:return new hec;case 25:return new wdc;case 46:return new Ndc;case 31:return new sec;case 14:return new Fec;case 26:return new ppc;case 20:return new Uec;case 24:return new fGc((rGc(),qGc));default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var P7b,Q7b,R7b,S7b,T7b,U7b,V7b,W7b,X7b,Y7b,Z7b,$7b,_7b,a8b,b8b,c8b,d8b,e8b,f8b,g8b,h8b,i8b,j8b,k8b,l8b,m8b,n8b,o8b,p8b,q8b,r8b,s8b,t8b,u8b,v8b,w8b,x8b,y8b,z8b,A8b,B8b,C8b,D8b,E8b,F8b,G8b,H8b,I8b,J8b,K8b,L8b,M8b,N8b,O8b,P8b,Q8b,R8b;var AS=ndb(Ane,Ene,77,CI,W8b,V8b);var X8b;bcb(1540,1,ene,b9b);_.pf=function c9b(a,b){_8b(BD(a,37),b)};var BS=mdb(Ane,'InvertedPortProcessor',1540);bcb(1541,1,ene,h9b);_.pf=function i9b(a,b){g9b(BD(a,37),b)};var FS=mdb(Ane,'LabelAndNodeSizeProcessor',1541);bcb(1542,1,Oie,j9b);_.Mb=function k9b(a){return BD(a,10).k==(j0b(),h0b)};var CS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$0$Type',1542);bcb(1543,1,Oie,l9b);_.Mb=function m9b(a){return BD(a,10).k==(j0b(),e0b)};var DS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$1$Type',1543);bcb(1544,1,qie,n9b);_.td=function o9b(a){e9b(this.b,this.a,this.c,BD(a,10))};_.a=false;_.c=false;var ES=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$2$Type',1544);bcb(1545,1,ene,u9b);_.pf=function v9b(a,b){s9b(BD(a,37),b)};var p9b;var HS=mdb(Ane,'LabelDummyInserter',1545);bcb(1546,1,Vke,w9b);_.Lb=function x9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};_.Fb=function y9b(a){return this===a};_.Mb=function z9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};var GS=mdb(Ane,'LabelDummyInserter/1',1546);bcb(1547,1,ene,D9b);_.pf=function E9b(a,b){C9b(BD(a,37),b)};var JS=mdb(Ane,'LabelDummyRemover',1547);bcb(1548,1,Oie,F9b);_.Mb=function G9b(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var IS=mdb(Ane,'LabelDummyRemover/lambda$0$Type',1548);bcb(1359,1,ene,$9b);_.pf=function cac(a,b){W9b(this,BD(a,37),b)};_.a=null;var H9b;var QS=mdb(Ane,'LabelDummySwitcher',1359);bcb(286,1,{286:1},gac);_.c=0;_.d=null;_.f=0;var KS=mdb(Ane,'LabelDummySwitcher/LabelDummyInfo',286);bcb(1360,1,{},hac);_.Kb=function iac(a){return I9b(),new YAb(null,new Kub(BD(a,29).a,16))};var LS=mdb(Ane,'LabelDummySwitcher/lambda$0$Type',1360);bcb(1361,1,Oie,jac);_.Mb=function kac(a){return I9b(),BD(a,10).k==(j0b(),f0b)};var MS=mdb(Ane,'LabelDummySwitcher/lambda$1$Type',1361);bcb(1362,1,{},lac);_.Kb=function mac(a){return _9b(this.a,BD(a,10))};var NS=mdb(Ane,'LabelDummySwitcher/lambda$2$Type',1362);bcb(1363,1,qie,nac);_.td=function oac(a){aac(this.a,BD(a,286))};var OS=mdb(Ane,'LabelDummySwitcher/lambda$3$Type',1363);bcb(1364,1,Dke,pac);_.ue=function qac(a,b){return bac(BD(a,286),BD(b,286))};_.Fb=function rac(a){return this===a};_.ve=function sac(){return new tpb(this)};var PS=mdb(Ane,'LabelDummySwitcher/lambda$4$Type',1364);bcb(791,1,ene,uac);_.pf=function vac(a,b){tac(BD(a,37),b)};var RS=mdb(Ane,'LabelManagementProcessor',791);bcb(1549,1,ene,Iac);_.pf=function Jac(a,b){Cac(BD(a,37),b)};var TS=mdb(Ane,'LabelSideSelector',1549);bcb(1550,1,Oie,Kac);_.Mb=function Lac(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var SS=mdb(Ane,'LabelSideSelector/lambda$0$Type',1550);bcb(1558,1,ene,Sac);_.pf=function Tac(a,b){Oac(BD(a,37),b)};var US=mdb(Ane,'LayerConstraintPostprocessor',1558);bcb(1559,1,ene,abc);_.pf=function bbc(a,b){$ac(BD(a,37),b)};var Uac;var WS=mdb(Ane,'LayerConstraintPreprocessor',1559);bcb(360,22,{3:1,35:1,22:1,360:1},ibc);var cbc,dbc,ebc,fbc;var VS=ndb(Ane,'LayerConstraintPreprocessor/HiddenNodeConnections',360,CI,kbc,jbc);var lbc;bcb(1560,1,ene,obc);_.pf=function pbc(a,b){nbc(BD(a,37),b)};var XS=mdb(Ane,'LayerSizeAndGraphHeightCalculator',1560);bcb(1561,1,ene,rbc);_.pf=function tbc(a,b){qbc(BD(a,37),b)};var YS=mdb(Ane,'LongEdgeJoiner',1561);bcb(1562,1,ene,vbc);_.pf=function xbc(a,b){ubc(BD(a,37),b)};var ZS=mdb(Ane,'LongEdgeSplitter',1562);bcb(1563,1,ene,Fbc);_.pf=function Ibc(a,b){Bbc(this,BD(a,37),b)};_.d=0;_.e=0;_.i=0;_.j=0;_.k=0;_.n=0;var bT=mdb(Ane,'NodePromotion',1563);bcb(1564,1,{},Jbc);_.Kb=function Kbc(a){return BD(a,46),Bcb(),true};_.Fb=function Lbc(a){return this===a};var $S=mdb(Ane,'NodePromotion/lambda$0$Type',1564);bcb(1565,1,{},Mbc);_.Kb=function Nbc(a){return Gbc(this.a,BD(a,46))};_.Fb=function Obc(a){return this===a};_.a=0;var _S=mdb(Ane,'NodePromotion/lambda$1$Type',1565);bcb(1566,1,{},Pbc);_.Kb=function Qbc(a){return Hbc(this.a,BD(a,46))};_.Fb=function Rbc(a){return this===a};_.a=0;var aT=mdb(Ane,'NodePromotion/lambda$2$Type',1566);bcb(1567,1,ene,Xbc);_.pf=function Ybc(a,b){Sbc(BD(a,37),b)};var cT=mdb(Ane,'NorthSouthPortPostprocessor',1567);bcb(1568,1,ene,ccc);_.pf=function ecc(a,b){acc(BD(a,37),b)};var eT=mdb(Ane,'NorthSouthPortPreprocessor',1568);bcb(1569,1,Dke,fcc);_.ue=function gcc(a,b){return dcc(BD(a,11),BD(b,11))};_.Fb=function hcc(a){return this===a};_.ve=function icc(){return new tpb(this)};var dT=mdb(Ane,'NorthSouthPortPreprocessor/lambda$0$Type',1569);bcb(1570,1,ene,lcc);_.pf=function ncc(a,b){kcc(BD(a,37),b)};var hT=mdb(Ane,'PartitionMidprocessor',1570);bcb(1571,1,Oie,occ);_.Mb=function pcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var fT=mdb(Ane,'PartitionMidprocessor/lambda$0$Type',1571);bcb(1572,1,qie,qcc);_.td=function rcc(a){mcc(this.a,BD(a,10))};var gT=mdb(Ane,'PartitionMidprocessor/lambda$1$Type',1572);bcb(1573,1,ene,tcc);_.pf=function ucc(a,b){scc(BD(a,37),b)};var iT=mdb(Ane,'PartitionPostprocessor',1573);bcb(1574,1,ene,ycc);_.pf=function zcc(a,b){wcc(BD(a,37),b)};var nT=mdb(Ane,'PartitionPreprocessor',1574);bcb(1575,1,Oie,Acc);_.Mb=function Bcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var jT=mdb(Ane,'PartitionPreprocessor/lambda$0$Type',1575);bcb(1576,1,{},Ccc);_.Kb=function Dcc(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var kT=mdb(Ane,'PartitionPreprocessor/lambda$1$Type',1576);bcb(1577,1,Oie,Ecc);_.Mb=function Fcc(a){return vcc(BD(a,17))};var lT=mdb(Ane,'PartitionPreprocessor/lambda$2$Type',1577);bcb(1578,1,qie,Gcc);_.td=function Hcc(a){xcc(BD(a,17))};var mT=mdb(Ane,'PartitionPreprocessor/lambda$3$Type',1578);bcb(1579,1,ene,Tcc);_.pf=function Xcc(a,b){Qcc(BD(a,37),b)};var Icc,Jcc,Kcc,Lcc,Mcc,Ncc;var tT=mdb(Ane,'PortListSorter',1579);bcb(1580,1,{},Zcc);_.Kb=function $cc(a){return Occ(),BD(a,11).e};var oT=mdb(Ane,'PortListSorter/lambda$0$Type',1580);bcb(1581,1,{},_cc);_.Kb=function adc(a){return Occ(),BD(a,11).g};var pT=mdb(Ane,'PortListSorter/lambda$1$Type',1581);bcb(1582,1,Dke,bdc);_.ue=function cdc(a,b){return Ucc(BD(a,11),BD(b,11))};_.Fb=function ddc(a){return this===a};_.ve=function edc(){return new tpb(this)};var qT=mdb(Ane,'PortListSorter/lambda$2$Type',1582);bcb(1583,1,Dke,fdc);_.ue=function gdc(a,b){return Vcc(BD(a,11),BD(b,11))};_.Fb=function hdc(a){return this===a};_.ve=function idc(){return new tpb(this)};var rT=mdb(Ane,'PortListSorter/lambda$3$Type',1583);bcb(1584,1,Dke,jdc);_.ue=function kdc(a,b){return Wcc(BD(a,11),BD(b,11))};_.Fb=function ldc(a){return this===a};_.ve=function mdc(){return new tpb(this)};var sT=mdb(Ane,'PortListSorter/lambda$4$Type',1584);bcb(1585,1,ene,pdc);_.pf=function qdc(a,b){ndc(BD(a,37),b)};var uT=mdb(Ane,'PortSideProcessor',1585);bcb(1586,1,ene,sdc);_.pf=function tdc(a,b){rdc(BD(a,37),b)};var vT=mdb(Ane,'ReversedEdgeRestorer',1586);bcb(1591,1,ene,wdc);_.pf=function xdc(a,b){udc(this,BD(a,37),b)};var CT=mdb(Ane,'SelfLoopPortRestorer',1591);bcb(1592,1,{},ydc);_.Kb=function zdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var wT=mdb(Ane,'SelfLoopPortRestorer/lambda$0$Type',1592);bcb(1593,1,Oie,Adc);_.Mb=function Bdc(a){return BD(a,10).k==(j0b(),h0b)};var xT=mdb(Ane,'SelfLoopPortRestorer/lambda$1$Type',1593);bcb(1594,1,Oie,Cdc);_.Mb=function Ddc(a){return wNb(BD(a,10),(wtc(),ntc))};var yT=mdb(Ane,'SelfLoopPortRestorer/lambda$2$Type',1594);bcb(1595,1,{},Edc);_.Kb=function Fdc(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var zT=mdb(Ane,'SelfLoopPortRestorer/lambda$3$Type',1595);bcb(1596,1,qie,Gdc);_.td=function Hdc(a){vdc(this.a,BD(a,403))};var AT=mdb(Ane,'SelfLoopPortRestorer/lambda$4$Type',1596);bcb(794,1,qie,Idc);_.td=function Jdc(a){ljc(BD(a,101))};var BT=mdb(Ane,'SelfLoopPortRestorer/lambda$5$Type',794);bcb(1597,1,ene,Ndc);_.pf=function Pdc(a,b){Kdc(BD(a,37),b)};var LT=mdb(Ane,'SelfLoopPostProcessor',1597);bcb(1598,1,{},Qdc);_.Kb=function Rdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DT=mdb(Ane,'SelfLoopPostProcessor/lambda$0$Type',1598);bcb(1599,1,Oie,Sdc);_.Mb=function Tdc(a){return BD(a,10).k==(j0b(),h0b)};var ET=mdb(Ane,'SelfLoopPostProcessor/lambda$1$Type',1599);bcb(1600,1,Oie,Udc);_.Mb=function Vdc(a){return wNb(BD(a,10),(wtc(),ntc))};var FT=mdb(Ane,'SelfLoopPostProcessor/lambda$2$Type',1600);bcb(1601,1,qie,Wdc);_.td=function Xdc(a){Ldc(BD(a,10))};var GT=mdb(Ane,'SelfLoopPostProcessor/lambda$3$Type',1601);bcb(1602,1,{},Ydc);_.Kb=function Zdc(a){return new YAb(null,new Kub(BD(a,101).f,1))};var HT=mdb(Ane,'SelfLoopPostProcessor/lambda$4$Type',1602);bcb(1603,1,qie,$dc);_.td=function _dc(a){Mdc(this.a,BD(a,409))};var IT=mdb(Ane,'SelfLoopPostProcessor/lambda$5$Type',1603);bcb(1604,1,Oie,aec);_.Mb=function bec(a){return !!BD(a,101).i};var JT=mdb(Ane,'SelfLoopPostProcessor/lambda$6$Type',1604);bcb(1605,1,qie,cec);_.td=function dec(a){Odc(this.a,BD(a,101))};var KT=mdb(Ane,'SelfLoopPostProcessor/lambda$7$Type',1605);bcb(1587,1,ene,hec);_.pf=function iec(a,b){gec(BD(a,37),b)};var PT=mdb(Ane,'SelfLoopPreProcessor',1587);bcb(1588,1,{},jec);_.Kb=function kec(a){return new YAb(null,new Kub(BD(a,101).f,1))};var MT=mdb(Ane,'SelfLoopPreProcessor/lambda$0$Type',1588);bcb(1589,1,{},lec);_.Kb=function mec(a){return BD(a,409).a};var NT=mdb(Ane,'SelfLoopPreProcessor/lambda$1$Type',1589);bcb(1590,1,qie,nec);_.td=function oec(a){fec(BD(a,17))};var OT=mdb(Ane,'SelfLoopPreProcessor/lambda$2$Type',1590);bcb(1606,1,ene,sec);_.pf=function tec(a,b){qec(this,BD(a,37),b)};var VT=mdb(Ane,'SelfLoopRouter',1606);bcb(1607,1,{},uec);_.Kb=function vec(a){return new YAb(null,new Kub(BD(a,29).a,16))};var QT=mdb(Ane,'SelfLoopRouter/lambda$0$Type',1607);bcb(1608,1,Oie,wec);_.Mb=function xec(a){return BD(a,10).k==(j0b(),h0b)};var RT=mdb(Ane,'SelfLoopRouter/lambda$1$Type',1608);bcb(1609,1,Oie,yec);_.Mb=function zec(a){return wNb(BD(a,10),(wtc(),ntc))};var ST=mdb(Ane,'SelfLoopRouter/lambda$2$Type',1609);bcb(1610,1,{},Aec);_.Kb=function Bec(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var TT=mdb(Ane,'SelfLoopRouter/lambda$3$Type',1610);bcb(1611,1,qie,Cec);_.td=function Dec(a){pec(this.a,this.b,BD(a,403))};var UT=mdb(Ane,'SelfLoopRouter/lambda$4$Type',1611);bcb(1612,1,ene,Fec);_.pf=function Iec(a,b){Eec(BD(a,37),b)};var $T=mdb(Ane,'SemiInteractiveCrossMinProcessor',1612);bcb(1613,1,Oie,Jec);_.Mb=function Kec(a){return BD(a,10).k==(j0b(),h0b)};var WT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1613);bcb(1614,1,Oie,Lec);_.Mb=function Mec(a){return uNb(BD(a,10))._b((Nyc(),ayc))};var XT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1614);bcb(1615,1,Dke,Nec);_.ue=function Oec(a,b){return Gec(BD(a,10),BD(b,10))};_.Fb=function Pec(a){return this===a};_.ve=function Qec(){return new tpb(this)};var YT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1615);bcb(1616,1,{},Rec);_.Ce=function Sec(a,b){return Hec(BD(a,10),BD(b,10))};var ZT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1616);bcb(1618,1,ene,Uec);_.pf=function Yec(a,b){Tec(BD(a,37),b)};var bU=mdb(Ane,'SortByInputModelProcessor',1618);bcb(1619,1,Oie,Zec);_.Mb=function $ec(a){return BD(a,11).g.c.length!=0};var _T=mdb(Ane,'SortByInputModelProcessor/lambda$0$Type',1619);bcb(1620,1,qie,_ec);_.td=function afc(a){Wec(this.a,BD(a,11))};var aU=mdb(Ane,'SortByInputModelProcessor/lambda$1$Type',1620);bcb(1693,803,{},jfc);_.Me=function kfc(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new Rkb;MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new lgc),new ngc(this,b));nEb(this,new tfc);Hkb(b,new xfc);b.c=KC(SI,Uhe,1,0,5,1);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new zfc),new Bfc(b));nEb(this,new Ffc);Hkb(b,new Jfc);b.c=KC(SI,Uhe,1,0,5,1);c=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new Lfc(this))),new Nfc);MAb(new YAb(null,new Kub(this.c.a.a,16)),new Rfc(c,b));nEb(this,new Vfc);Hkb(b,new Zfc);b.c=KC(SI,Uhe,1,0,5,1);break;case 3:d=new Rkb;nEb(this,new lfc);e=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new pfc(this))),new Pfc);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new _fc),new bgc(e,d));nEb(this,new fgc);Hkb(d,new jgc);d.c=KC(SI,Uhe,1,0,5,1);break;default:throw vbb(new x2c);}};_.b=0;var AU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation',1693);bcb(1694,1,Vke,lfc);_.Lb=function mfc(a){return JD(BD(a,57).g,145)};_.Fb=function nfc(a){return this===a};_.Mb=function ofc(a){return JD(BD(a,57).g,145)};var cU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1694);bcb(1695,1,{},pfc);_.Fe=function qfc(a){return dfc(this.a,BD(a,57))};var dU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1695);bcb(1703,1,Pie,rfc);_.Vd=function sfc(){cfc(this.a,this.b,-1)};_.b=0;var eU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1703);bcb(1705,1,Vke,tfc);_.Lb=function ufc(a){return JD(BD(a,57).g,145)};_.Fb=function vfc(a){return this===a};_.Mb=function wfc(a){return JD(BD(a,57).g,145)};var fU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1705);bcb(1706,1,qie,xfc);_.td=function yfc(a){BD(a,365).Vd()};var gU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1706);bcb(1707,1,Oie,zfc);_.Mb=function Afc(a){return JD(BD(a,57).g,10)};var hU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1707);bcb(1709,1,qie,Bfc);_.td=function Cfc(a){efc(this.a,BD(a,57))};var iU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1709);bcb(1708,1,Pie,Dfc);_.Vd=function Efc(){cfc(this.b,this.a,-1)};_.a=0;var jU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1708);bcb(1710,1,Vke,Ffc);_.Lb=function Gfc(a){return JD(BD(a,57).g,10)};_.Fb=function Hfc(a){return this===a};_.Mb=function Ifc(a){return JD(BD(a,57).g,10)};var kU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1710);bcb(1711,1,qie,Jfc);_.td=function Kfc(a){BD(a,365).Vd()};var lU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1711);bcb(1712,1,{},Lfc);_.Fe=function Mfc(a){return ffc(this.a,BD(a,57))};var mU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1712);bcb(1713,1,{},Nfc);_.De=function Ofc(){return 0};var nU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1713);bcb(1696,1,{},Pfc);_.De=function Qfc(){return 0};var oU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1696);bcb(1715,1,qie,Rfc);_.td=function Sfc(a){gfc(this.a,this.b,BD(a,307))};_.a=0;var pU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1715);bcb(1714,1,Pie,Tfc);_.Vd=function Ufc(){bfc(this.a,this.b,-1)};_.b=0;var qU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1714);bcb(1716,1,Vke,Vfc);_.Lb=function Wfc(a){return BD(a,57),true};_.Fb=function Xfc(a){return this===a};_.Mb=function Yfc(a){return BD(a,57),true};var rU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1716);bcb(1717,1,qie,Zfc);_.td=function $fc(a){BD(a,365).Vd()};var sU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1717);bcb(1697,1,Oie,_fc);_.Mb=function agc(a){return JD(BD(a,57).g,10)};var tU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1697);bcb(1699,1,qie,bgc);_.td=function cgc(a){hfc(this.a,this.b,BD(a,57))};_.a=0;var uU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1699);bcb(1698,1,Pie,dgc);_.Vd=function egc(){cfc(this.b,this.a,-1)};_.a=0;var vU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1698);bcb(1700,1,Vke,fgc);_.Lb=function ggc(a){return BD(a,57),true};_.Fb=function hgc(a){return this===a};_.Mb=function igc(a){return BD(a,57),true};var wU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1700);bcb(1701,1,qie,jgc);_.td=function kgc(a){BD(a,365).Vd()};var xU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1701);bcb(1702,1,Oie,lgc);_.Mb=function mgc(a){return JD(BD(a,57).g,145)};var yU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1702);bcb(1704,1,qie,ngc);_.td=function ogc(a){ifc(this.a,this.b,BD(a,57))};var zU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1704);bcb(1521,1,ene,sgc);_.pf=function xgc(a,b){rgc(this,BD(a,37),b)};var pgc;var EU=mdb(Jne,'HorizontalGraphCompactor',1521);bcb(1522,1,{},ygc);_.Oe=function zgc(a,b){var c,d,e;if(vgc(a,b)){return 0}c=tgc(a);d=tgc(b);if(!!c&&c.k==(j0b(),e0b)||!!d&&d.k==(j0b(),e0b)){return 0}e=BD(vNb(this.a.a,(wtc(),otc)),304);return fBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};_.Pe=function Agc(a,b){var c,d,e;if(vgc(a,b)){return 1}c=tgc(a);d=tgc(b);e=BD(vNb(this.a.a,(wtc(),otc)),304);return iBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};var BU=mdb(Jne,'HorizontalGraphCompactor/1',1522);bcb(1523,1,{},Bgc);_.Ne=function Cgc(a,b){return qgc(),a.a.i==0};var CU=mdb(Jne,'HorizontalGraphCompactor/lambda$0$Type',1523);bcb(1524,1,{},Dgc);_.Ne=function Egc(a,b){return wgc(this.a,a,b)};var DU=mdb(Jne,'HorizontalGraphCompactor/lambda$1$Type',1524);bcb(1664,1,{},Ygc);var Fgc,Ggc;var cV=mdb(Jne,'LGraphToCGraphTransformer',1664);bcb(1672,1,Oie,ehc);_.Mb=function fhc(a){return a!=null};var FU=mdb(Jne,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1672);bcb(1665,1,{},ghc);_.Kb=function hhc(a){return Hgc(),fcb(vNb(BD(BD(a,57).g,10),(wtc(),$sc)))};var GU=mdb(Jne,'LGraphToCGraphTransformer/lambda$0$Type',1665);bcb(1666,1,{},ihc);_.Kb=function jhc(a){return Hgc(),gic(BD(BD(a,57).g,145))};var HU=mdb(Jne,'LGraphToCGraphTransformer/lambda$1$Type',1666);bcb(1675,1,Oie,khc);_.Mb=function lhc(a){return Hgc(),JD(BD(a,57).g,10)};var IU=mdb(Jne,'LGraphToCGraphTransformer/lambda$10$Type',1675);bcb(1676,1,qie,mhc);_.td=function nhc(a){Zgc(BD(a,57))};var JU=mdb(Jne,'LGraphToCGraphTransformer/lambda$11$Type',1676);bcb(1677,1,Oie,ohc);_.Mb=function phc(a){return Hgc(),JD(BD(a,57).g,145)};var KU=mdb(Jne,'LGraphToCGraphTransformer/lambda$12$Type',1677);bcb(1681,1,qie,qhc);_.td=function rhc(a){$gc(BD(a,57))};var LU=mdb(Jne,'LGraphToCGraphTransformer/lambda$13$Type',1681);bcb(1678,1,qie,shc);_.td=function thc(a){_gc(this.a,BD(a,8))};_.a=0;var MU=mdb(Jne,'LGraphToCGraphTransformer/lambda$14$Type',1678);bcb(1679,1,qie,uhc);_.td=function vhc(a){ahc(this.a,BD(a,110))};_.a=0;var NU=mdb(Jne,'LGraphToCGraphTransformer/lambda$15$Type',1679);bcb(1680,1,qie,whc);_.td=function xhc(a){bhc(this.a,BD(a,8))};_.a=0;var OU=mdb(Jne,'LGraphToCGraphTransformer/lambda$16$Type',1680);bcb(1682,1,{},yhc);_.Kb=function zhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var PU=mdb(Jne,'LGraphToCGraphTransformer/lambda$17$Type',1682);bcb(1683,1,Oie,Ahc);_.Mb=function Bhc(a){return Hgc(),OZb(BD(a,17))};var QU=mdb(Jne,'LGraphToCGraphTransformer/lambda$18$Type',1683);bcb(1684,1,qie,Chc);_.td=function Dhc(a){Qgc(this.a,BD(a,17))};var RU=mdb(Jne,'LGraphToCGraphTransformer/lambda$19$Type',1684);bcb(1668,1,qie,Ehc);_.td=function Fhc(a){Rgc(this.a,BD(a,145))};var SU=mdb(Jne,'LGraphToCGraphTransformer/lambda$2$Type',1668);bcb(1685,1,{},Ghc);_.Kb=function Hhc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var TU=mdb(Jne,'LGraphToCGraphTransformer/lambda$20$Type',1685);bcb(1686,1,{},Ihc);_.Kb=function Jhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var UU=mdb(Jne,'LGraphToCGraphTransformer/lambda$21$Type',1686);bcb(1687,1,{},Khc);_.Kb=function Lhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var VU=mdb(Jne,'LGraphToCGraphTransformer/lambda$22$Type',1687);bcb(1688,1,Oie,Mhc);_.Mb=function Nhc(a){return chc(BD(a,15))};var WU=mdb(Jne,'LGraphToCGraphTransformer/lambda$23$Type',1688);bcb(1689,1,qie,Ohc);_.td=function Phc(a){Jgc(this.a,BD(a,15))};var XU=mdb(Jne,'LGraphToCGraphTransformer/lambda$24$Type',1689);bcb(1667,1,qie,Qhc);_.td=function Rhc(a){Sgc(this.a,this.b,BD(a,145))};var YU=mdb(Jne,'LGraphToCGraphTransformer/lambda$3$Type',1667);bcb(1669,1,{},Shc);_.Kb=function Thc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var ZU=mdb(Jne,'LGraphToCGraphTransformer/lambda$4$Type',1669);bcb(1670,1,{},Uhc);_.Kb=function Vhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var $U=mdb(Jne,'LGraphToCGraphTransformer/lambda$5$Type',1670);bcb(1671,1,{},Whc);_.Kb=function Xhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var _U=mdb(Jne,'LGraphToCGraphTransformer/lambda$6$Type',1671);bcb(1673,1,qie,Yhc);_.td=function Zhc(a){dhc(this.a,BD(a,15))};var aV=mdb(Jne,'LGraphToCGraphTransformer/lambda$8$Type',1673);bcb(1674,1,qie,$hc);_.td=function _hc(a){Tgc(this.a,this.b,BD(a,145))};var bV=mdb(Jne,'LGraphToCGraphTransformer/lambda$9$Type',1674);bcb(1663,1,{},dic);_.Le=function eic(a){var b,c,d,e,f;this.a=a;this.d=new KFb;this.c=KC(jN,Uhe,121,this.a.a.a.c.length,0,1);this.b=0;for(c=new olb(this.a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.d=this.b;f=nGb(oGb(new pGb,b),this.d);this.c[this.b]=f;++this.b}cic(this);bic(this);aic(this);uGb(LGb(this.d),new Zdd);for(e=new olb(this.a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);d.d.c=this.c[d.a.d].e+d.b.a}};_.b=0;var dV=mdb(Jne,'NetworkSimplexCompaction',1663);bcb(145,1,{35:1,145:1},hic);_.wd=function iic(a){return fic(this,BD(a,145))};_.Ib=function jic(){return gic(this)};var eV=mdb(Jne,'VerticalSegment',145);bcb(827,1,{},sic);_.c=0;_.e=0;_.i=0;var hV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter',827);bcb(663,1,{663:1},zic);_.Ib=function Aic(){return 'AdjacencyList [node='+this.d+', adjacencies= '+this.a+']'};_.b=0;_.c=0;_.f=0;var gV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList',663);bcb(287,1,{35:1,287:1},Dic);_.wd=function Eic(a){return Bic(this,BD(a,287))};_.Ib=function Fic(){return 'Adjacency [position='+this.c+', cardinality='+this.a+', currentCardinality='+this.b+']'};_.a=0;_.b=0;_.c=0;var fV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency',287);bcb(1929,1,{},Iic);_.b=0;_.e=false;var iV=mdb(Kne,'CrossingMatrixFiller',1929);var qY=odb(Lne,'IInitializable');bcb(1804,1,Mne,Oic);_.Nf=function Ric(a,b,c,d,e,f){};_.Pf=function Tic(a,b,c){};_.Lf=function Pic(){return this.c!=(rGc(),pGc)};_.Mf=function Qic(){this.e=KC(WD,oje,25,this.d,15,1)};_.Of=function Sic(a,b){b[a][0].c.p=a};_.Qf=function Uic(a,b,c,d){++this.d};_.Rf=function Vic(){return true};_.Sf=function Wic(a,b,c,d){Kic(this,a,b,c);return Jic(this,b)};_.Tf=function Xic(a,b){var c;c=Lic(b,a.length);Kic(this,a,c,b);return Mic(this,c)};_.d=0;var jV=mdb(Kne,'GreedySwitchHeuristic',1804);bcb(1930,1,{},ejc);_.b=0;_.d=0;var kV=mdb(Kne,'NorthSouthEdgeNeighbouringNodeCrossingsCounter',1930);bcb(1917,1,{},jjc);_.a=false;var lV=mdb(Kne,'SwitchDecider',1917);bcb(101,1,{101:1},pjc);_.a=null;_.c=null;_.i=null;var oV=mdb(Nne,'SelfHyperLoop',101);bcb(1916,1,{},vjc);_.c=0;_.e=0;var nV=mdb(Nne,'SelfHyperLoopLabels',1916);bcb(411,22,{3:1,35:1,22:1,411:1},Bjc);var wjc,xjc,yjc,zjc;var mV=ndb(Nne,'SelfHyperLoopLabels/Alignment',411,CI,Djc,Cjc);var Ejc;bcb(409,1,{409:1},Gjc);var pV=mdb(Nne,'SelfLoopEdge',409);bcb(403,1,{403:1},Kjc);_.a=false;var rV=mdb(Nne,'SelfLoopHolder',403);bcb(1724,1,Oie,Mjc);_.Mb=function Njc(a){return OZb(BD(a,17))};var qV=mdb(Nne,'SelfLoopHolder/lambda$0$Type',1724);bcb(113,1,{113:1},Pjc);_.a=false;_.c=false;var tV=mdb(Nne,'SelfLoopPort',113);bcb(1792,1,Oie,Qjc);_.Mb=function Rjc(a){return OZb(BD(a,17))};var sV=mdb(Nne,'SelfLoopPort/lambda$0$Type',1792);bcb(363,22,{3:1,35:1,22:1,363:1},Yjc);var Sjc,Tjc,Ujc,Vjc,Wjc;var uV=ndb(Nne,'SelfLoopType',363,CI,_jc,$jc);var akc;bcb(1732,1,{},xkc);var ckc,dkc,ekc,fkc;var JV=mdb(One,'PortRestorer',1732);bcb(361,22,{3:1,35:1,22:1,361:1},Gkc);var Ckc,Dkc,Ekc;var vV=ndb(One,'PortRestorer/PortSideArea',361,CI,Ikc,Hkc);var Jkc;bcb(1733,1,{},Lkc);_.Kb=function Mkc(a){return gkc(),BD(a,15).Oc()};var wV=mdb(One,'PortRestorer/lambda$0$Type',1733);bcb(1734,1,qie,Nkc);_.td=function Okc(a){gkc();BD(a,113).c=false};var xV=mdb(One,'PortRestorer/lambda$1$Type',1734);bcb(1743,1,Oie,Pkc);_.Mb=function Qkc(a){return gkc(),BD(a,11).j==(Ucd(),Tcd)};var yV=mdb(One,'PortRestorer/lambda$10$Type',1743);bcb(1744,1,{},Rkc);_.Kb=function Skc(a){return gkc(),BD(a,113).d};var zV=mdb(One,'PortRestorer/lambda$11$Type',1744);bcb(1745,1,qie,Tkc);_.td=function Ukc(a){ykc(this.a,BD(a,11))};var AV=mdb(One,'PortRestorer/lambda$12$Type',1745);bcb(1735,1,qie,Vkc);_.td=function Wkc(a){zkc(this.a,BD(a,101))};var BV=mdb(One,'PortRestorer/lambda$2$Type',1735);bcb(1736,1,Dke,Xkc);_.ue=function Ykc(a,b){return Akc(BD(a,113),BD(b,113))};_.Fb=function Zkc(a){return this===a};_.ve=function $kc(){return new tpb(this)};var CV=mdb(One,'PortRestorer/lambda$3$Type',1736);bcb(1737,1,Oie,_kc);_.Mb=function alc(a){return gkc(),BD(a,113).c};var DV=mdb(One,'PortRestorer/lambda$4$Type',1737);bcb(1738,1,Oie,blc);_.Mb=function clc(a){return nkc(BD(a,11))};var EV=mdb(One,'PortRestorer/lambda$5$Type',1738);bcb(1739,1,Oie,dlc);_.Mb=function elc(a){return gkc(),BD(a,11).j==(Ucd(),Acd)};var FV=mdb(One,'PortRestorer/lambda$6$Type',1739);bcb(1740,1,Oie,flc);_.Mb=function glc(a){return gkc(),BD(a,11).j==(Ucd(),zcd)};var GV=mdb(One,'PortRestorer/lambda$7$Type',1740);bcb(1741,1,Oie,hlc);_.Mb=function ilc(a){return okc(BD(a,11))};var HV=mdb(One,'PortRestorer/lambda$8$Type',1741);bcb(1742,1,Oie,jlc);_.Mb=function klc(a){return gkc(),BD(a,11).j==(Ucd(),Rcd)};var IV=mdb(One,'PortRestorer/lambda$9$Type',1742);bcb(270,22,{3:1,35:1,22:1,270:1},Blc);var slc,tlc,ulc,vlc,wlc,xlc,ylc,zlc;var KV=ndb(One,'PortSideAssigner/Target',270,CI,Dlc,Clc);var Elc;bcb(1725,1,{},Glc);_.Kb=function Hlc(a){return JAb(new YAb(null,new Kub(BD(a,101).j,16)),new Ylc)};var LV=mdb(One,'PortSideAssigner/lambda$1$Type',1725);bcb(1726,1,{},Ilc);_.Kb=function Jlc(a){return BD(a,113).d};var MV=mdb(One,'PortSideAssigner/lambda$2$Type',1726);bcb(1727,1,qie,Klc);_.td=function Llc(a){G0b(BD(a,11),(Ucd(),Acd))};var NV=mdb(One,'PortSideAssigner/lambda$3$Type',1727);bcb(1728,1,{},Mlc);_.Kb=function Nlc(a){return BD(a,113).d};var OV=mdb(One,'PortSideAssigner/lambda$4$Type',1728);bcb(1729,1,qie,Olc);_.td=function Plc(a){plc(this.a,BD(a,11))};var PV=mdb(One,'PortSideAssigner/lambda$5$Type',1729);bcb(1730,1,Dke,Qlc);_.ue=function Rlc(a,b){return qlc(BD(a,101),BD(b,101))};_.Fb=function Slc(a){return this===a};_.ve=function Tlc(){return new tpb(this)};var QV=mdb(One,'PortSideAssigner/lambda$6$Type',1730);bcb(1731,1,Dke,Ulc);_.ue=function Vlc(a,b){return rlc(BD(a,113),BD(b,113))};_.Fb=function Wlc(a){return this===a};_.ve=function Xlc(){return new tpb(this)};var RV=mdb(One,'PortSideAssigner/lambda$7$Type',1731);bcb(805,1,Oie,Ylc);_.Mb=function Zlc(a){return BD(a,113).c};var SV=mdb(One,'PortSideAssigner/lambda$8$Type',805);bcb(2009,1,{});var TV=mdb(Pne,'AbstractSelfLoopRouter',2009);bcb(1750,1,Dke,gmc);_.ue=function hmc(a,b){return emc(BD(a,101),BD(b,101))};_.Fb=function imc(a){return this===a};_.ve=function jmc(){return new tpb(this)};var UV=mdb(Pne,rle,1750);bcb(1751,1,Dke,kmc);_.ue=function lmc(a,b){return fmc(BD(a,101),BD(b,101))};_.Fb=function mmc(a){return this===a};_.ve=function nmc(){return new tpb(this)};var VV=mdb(Pne,sle,1751);bcb(1793,2009,{},zmc);_.Uf=function Amc(a,b,c){return c};var XV=mdb(Pne,'OrthogonalSelfLoopRouter',1793);bcb(1795,1,qie,Bmc);_.td=function Cmc(a){ymc(this.b,this.a,BD(a,8))};var WV=mdb(Pne,'OrthogonalSelfLoopRouter/lambda$0$Type',1795);bcb(1794,1793,{},Fmc);_.Uf=function Gmc(a,b,c){var d,e;d=a.c.d;St(c,0,P6c(R6c(d.n),d.a));e=a.d.d;Dsb(c,P6c(R6c(e.n),e.a));return Dmc(c)};var YV=mdb(Pne,'PolylineSelfLoopRouter',1794);bcb(1746,1,{},Umc);_.a=null;var Hmc;var aW=mdb(Pne,'RoutingDirector',1746);bcb(1747,1,Dke,Wmc);_.ue=function Xmc(a,b){return Vmc(BD(a,113),BD(b,113))};_.Fb=function Ymc(a){return this===a};_.ve=function Zmc(){return new tpb(this)};var ZV=mdb(Pne,'RoutingDirector/lambda$0$Type',1747);bcb(1748,1,{},$mc);_.Kb=function _mc(a){return Imc(),BD(a,101).j};var $V=mdb(Pne,'RoutingDirector/lambda$1$Type',1748);bcb(1749,1,qie,anc);_.td=function bnc(a){Imc();BD(a,15).ad(Hmc)};var _V=mdb(Pne,'RoutingDirector/lambda$2$Type',1749);bcb(1752,1,{},mnc);var dW=mdb(Pne,'RoutingSlotAssigner',1752);bcb(1753,1,Oie,pnc);_.Mb=function qnc(a){return nnc(this.a,BD(a,101))};var bW=mdb(Pne,'RoutingSlotAssigner/lambda$0$Type',1753);bcb(1754,1,Dke,rnc);_.ue=function snc(a,b){return onc(this.a,BD(a,101),BD(b,101))};_.Fb=function tnc(a){return this===a};_.ve=function unc(){return new tpb(this)};var cW=mdb(Pne,'RoutingSlotAssigner/lambda$1$Type',1754);bcb(1796,1793,{},wnc);_.Uf=function xnc(a,b,c){var d,e,f,g;d=Edb(ED(c_b(a.b.g.b,(Nyc(),nyc))));g=new u7c(OC(GC(m1,1),nie,8,0,[(f=a.c.d,P6c(new g7c(f.n),f.a))]));vnc(a,b,c,g,d);Dsb(g,(e=a.d.d,P6c(new g7c(e.n),e.a)));return UPc(new YPc(g))};var eW=mdb(Pne,'SplineSelfLoopRouter',1796);bcb(578,1,Dke,Bnc,Dnc);_.ue=function Enc(a,b){return ync(this,BD(a,10),BD(b,10))};_.Fb=function Fnc(a){return this===a};_.ve=function Gnc(){return new tpb(this)};var kW=mdb(Qne,'ModelOrderNodeComparator',578);bcb(1755,1,Oie,Hnc);_.Mb=function Inc(a){return BD(a,11).e.c.length!=0};var fW=mdb(Qne,'ModelOrderNodeComparator/lambda$0$Type',1755);bcb(1756,1,{},Jnc);_.Kb=function Knc(a){return BD(Ikb(BD(a,11).e,0),17).c};var gW=mdb(Qne,'ModelOrderNodeComparator/lambda$1$Type',1756);bcb(1757,1,Oie,Lnc);_.Mb=function Mnc(a){return BD(a,11).e.c.length!=0};var hW=mdb(Qne,'ModelOrderNodeComparator/lambda$2$Type',1757);bcb(1758,1,{},Nnc);_.Kb=function Onc(a){return BD(Ikb(BD(a,11).e,0),17).c};var iW=mdb(Qne,'ModelOrderNodeComparator/lambda$3$Type',1758);bcb(1759,1,Oie,Pnc);_.Mb=function Qnc(a){return BD(a,11).e.c.length!=0};var jW=mdb(Qne,'ModelOrderNodeComparator/lambda$4$Type',1759);bcb(806,1,Dke,Tnc,Unc);_.ue=function Vnc(a,b){return Rnc(this,a,b)};_.Fb=function Wnc(a){return this===a};_.ve=function Xnc(){return new tpb(this)};var lW=mdb(Qne,'ModelOrderPortComparator',806);bcb(801,1,{},Ync);_.Vf=function $nc(a,b){var c,d,e,f;e=Znc(b);c=new Rkb;f=b.f/e;for(d=1;d<e;++d){Ekb(c,meb(Tbb(Cbb($wnd.Math.round(d*f)))))}return c};_.Wf=function _nc(){return false};var mW=mdb(Rne,'ARDCutIndexHeuristic',801);bcb(1479,1,ene,eoc);_.pf=function foc(a,b){doc(BD(a,37),b)};var pW=mdb(Rne,'BreakingPointInserter',1479);bcb(305,1,{305:1},goc);_.Ib=function joc(){var a;a=new Ufb;a.a+='BPInfo[';a.a+='\n\tstart=';Pfb(a,this.i);a.a+='\n\tend=';Pfb(a,this.a);a.a+='\n\tnodeStartEdge=';Pfb(a,this.e);a.a+='\n\tstartEndEdge=';Pfb(a,this.j);a.a+='\n\toriginalEdge=';Pfb(a,this.f);a.a+='\n\tstartInLayerDummy=';Pfb(a,this.k);a.a+='\n\tstartInLayerEdge=';Pfb(a,this.n);a.a+='\n\tendInLayerDummy=';Pfb(a,this.b);a.a+='\n\tendInLayerEdge=';Pfb(a,this.c);return a.a};var nW=mdb(Rne,'BreakingPointInserter/BPInfo',305);bcb(652,1,{652:1},qoc);_.a=false;_.b=0;_.c=0;var oW=mdb(Rne,'BreakingPointInserter/Cut',652);bcb(1480,1,ene,Aoc);_.pf=function Boc(a,b){yoc(BD(a,37),b)};var sW=mdb(Rne,'BreakingPointProcessor',1480);bcb(1481,1,Oie,Coc);_.Mb=function Doc(a){return hoc(BD(a,10))};var qW=mdb(Rne,'BreakingPointProcessor/0methodref$isEnd$Type',1481);bcb(1482,1,Oie,Eoc);_.Mb=function Foc(a){return ioc(BD(a,10))};var rW=mdb(Rne,'BreakingPointProcessor/1methodref$isStart$Type',1482);bcb(1483,1,ene,Joc);_.pf=function Koc(a,b){Hoc(this,BD(a,37),b)};var uW=mdb(Rne,'BreakingPointRemover',1483);bcb(1484,1,qie,Loc);_.td=function Moc(a){BD(a,128).k=true};var tW=mdb(Rne,'BreakingPointRemover/lambda$0$Type',1484);bcb(797,1,{},Xoc);_.b=0;_.e=0;_.f=0;_.j=0;var AW=mdb(Rne,'GraphStats',797);bcb(798,1,{},Zoc);_.Ce=function $oc(a,b){return $wnd.Math.max(Edb(ED(a)),Edb(ED(b)))};var vW=mdb(Rne,'GraphStats/0methodref$max$Type',798);bcb(799,1,{},_oc);_.Ce=function apc(a,b){return $wnd.Math.max(Edb(ED(a)),Edb(ED(b)))};var wW=mdb(Rne,'GraphStats/2methodref$max$Type',799);bcb(1660,1,{},bpc);_.Ce=function cpc(a,b){return Yoc(ED(a),ED(b))};var xW=mdb(Rne,'GraphStats/lambda$1$Type',1660);bcb(1661,1,{},dpc);_.Kb=function epc(a){return Roc(this.a,BD(a,29))};var yW=mdb(Rne,'GraphStats/lambda$2$Type',1661);bcb(1662,1,{},fpc);_.Kb=function gpc(a){return Qoc(this.a,BD(a,29))};var zW=mdb(Rne,'GraphStats/lambda$6$Type',1662);bcb(800,1,{},hpc);_.Vf=function ipc(a,b){var c;c=BD(vNb(a,(Nyc(),Eyc)),15);return c?c:(mmb(),mmb(),jmb)};_.Wf=function jpc(){return false};var BW=mdb(Rne,'ICutIndexCalculator/ManualCutIndexCalculator',800);bcb(802,1,{},kpc);_.Vf=function lpc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=(b.n==null&&Uoc(b),b.n);i=(b.d==null&&Uoc(b),b.d);t=KC(UD,Vje,25,u.length,15,1);t[0]=u[0];r=u[0];for(j=1;j<u.length;j++){t[j]=t[j-1]+u[j];r+=u[j]}e=Znc(b)-1;g=BD(vNb(a,(Nyc(),Fyc)),19).a;d=Qje;c=new Rkb;for(m=$wnd.Math.max(0,e-g);m<=$wnd.Math.min(b.f-1,e+g);m++){p=r/(m+1);q=0;k=1;f=new Rkb;s=Qje;l=0;h=0;o=i[0];if(m==0){s=r;h=(b.g==null&&(b.g=Poc(b,new _oc)),Edb(b.g))}else{while(k<b.f){if(t[k-1]-q>=p){Ekb(f,meb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.Wf=function mpc(){return false};var CW=mdb(Rne,'MSDCutIndexHeuristic',802);bcb(1617,1,ene,ppc);_.pf=function qpc(a,b){opc(BD(a,37),b)};var DW=mdb(Rne,'SingleEdgeGraphWrapper',1617);bcb(227,22,{3:1,35:1,22:1,227:1},Bpc);var upc,vpc,wpc,xpc,ypc,zpc;var EW=ndb(Sne,'CenterEdgeLabelPlacementStrategy',227,CI,Dpc,Cpc);var Epc;bcb(422,22,{3:1,35:1,22:1,422:1},Jpc);var Gpc,Hpc;var FW=ndb(Sne,'ConstraintCalculationStrategy',422,CI,Lpc,Kpc);var Mpc;bcb(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},Tpc);_.Kf=function Vpc(){return Spc(this)};_.Xf=function Upc(){return Spc(this)};var Opc,Ppc,Qpc;var GW=ndb(Sne,'CrossingMinimizationStrategy',314,CI,Xpc,Wpc);var Ypc;bcb(337,22,{3:1,35:1,22:1,337:1},cqc);var $pc,_pc,aqc;var HW=ndb(Sne,'CuttingStrategy',337,CI,eqc,dqc);var fqc;bcb(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},oqc);_.Kf=function qqc(){return nqc(this)};_.Xf=function pqc(){return nqc(this)};var hqc,iqc,jqc,kqc,lqc;var IW=ndb(Sne,'CycleBreakingStrategy',335,CI,sqc,rqc);var tqc;bcb(419,22,{3:1,35:1,22:1,419:1},yqc);var vqc,wqc;var JW=ndb(Sne,'DirectionCongruency',419,CI,Aqc,zqc);var Bqc;bcb(450,22,{3:1,35:1,22:1,450:1},Hqc);var Dqc,Eqc,Fqc;var KW=ndb(Sne,'EdgeConstraint',450,CI,Jqc,Iqc);var Kqc;bcb(276,22,{3:1,35:1,22:1,276:1},Uqc);var Mqc,Nqc,Oqc,Pqc,Qqc,Rqc;var LW=ndb(Sne,'EdgeLabelSideSelection',276,CI,Wqc,Vqc);var Xqc;bcb(479,22,{3:1,35:1,22:1,479:1},arc);var Zqc,$qc;var MW=ndb(Sne,'EdgeStraighteningStrategy',479,CI,crc,brc);var drc;bcb(274,22,{3:1,35:1,22:1,274:1},mrc);var frc,grc,hrc,irc,jrc,krc;var NW=ndb(Sne,'FixedAlignment',274,CI,orc,nrc);var prc;bcb(275,22,{3:1,35:1,22:1,275:1},zrc);var rrc,trc,urc,vrc,wrc,xrc;var OW=ndb(Sne,'GraphCompactionStrategy',275,CI,Brc,Arc);var Crc;bcb(256,22,{3:1,35:1,22:1,256:1},Prc);var Erc,Frc,Grc,Hrc,Irc,Jrc,Krc,Lrc,Mrc,Nrc;var PW=ndb(Sne,'GraphProperties',256,CI,Rrc,Qrc);var Src;bcb(292,22,{3:1,35:1,22:1,292:1},Yrc);var Urc,Vrc,Wrc;var QW=ndb(Sne,'GreedySwitchType',292,CI,$rc,Zrc);var _rc;bcb(303,22,{3:1,35:1,22:1,303:1},fsc);var bsc,csc,dsc;var RW=ndb(Sne,'InLayerConstraint',303,CI,hsc,gsc);var isc;bcb(420,22,{3:1,35:1,22:1,420:1},nsc);var ksc,lsc;var SW=ndb(Sne,'InteractiveReferencePoint',420,CI,psc,osc);var qsc;var ssc,tsc,usc,vsc,wsc,xsc,ysc,zsc,Asc,Bsc,Csc,Dsc,Esc,Fsc,Gsc,Hsc,Isc,Jsc,Ksc,Lsc,Msc,Nsc,Osc,Psc,Qsc,Rsc,Ssc,Tsc,Usc,Vsc,Wsc,Xsc,Ysc,Zsc,$sc,_sc,atc,btc,ctc,dtc,etc,ftc,gtc,htc,itc,jtc,ktc,ltc,mtc,ntc,otc,ptc,qtc,rtc,stc,ttc,utc,vtc;bcb(163,22,{3:1,35:1,22:1,163:1},Dtc);var xtc,ytc,ztc,Atc,Btc;var TW=ndb(Sne,'LayerConstraint',163,CI,Ftc,Etc);var Gtc;bcb(848,1,ale,kwc);_.Qe=function lwc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yne),''),'Direction Congruency'),'Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other.'),puc),(_5c(),V5c)),JW),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zne),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ne),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),Muc),V5c),SW),pqb(L5c))));o4c(a,$ne,goe,Ouc);o4c(a,$ne,qoe,Nuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ne),''),'Merge Edges'),'Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aoe),''),'Merge Hierarchy-Crossing Edges'),'If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(C5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,boe),''),'Allow Non-Flow Ports To Switch Sides'),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),false),T5c),wI),pqb(M5c)),OC(GC(ZI,1),nie,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,coe),''),'Port Sorting Strategy'),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),xvc),V5c),cX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,doe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),meb(7)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eoe),''),'Add Unnecessary Bendpoints'),'Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,foe),''),'Generate Position and Layer IDs'),'If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,goe),'cycleBreaking'),'Cycle Breaking Strategy'),'Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).'),nuc),V5c),IW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hoe),ppe),'Node Layering Strategy'),'Strategy for node layering.'),bvc),V5c),YW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ioe),ppe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),Tuc),V5c),TW),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,joe),ppe),'Layer Choice Constraint'),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,koe),ppe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,loe),qpe),'Upper Bound On Width [MinWidth Layerer]'),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),meb(4)),X5c),JI),pqb(L5c))));o4c(a,loe,hoe,Wuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,moe),qpe),'Upper Layer Estimation Scaling Factor [MinWidth Layerer]'),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),meb(2)),X5c),JI),pqb(L5c))));o4c(a,moe,hoe,Yuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,noe),rpe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),_uc),V5c),aX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ooe),rpe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),meb(0)),X5c),JI),pqb(L5c))));o4c(a,ooe,noe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,poe),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),meb(Ohe)),X5c),JI),pqb(L5c))));o4c(a,poe,hoe,Quc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qoe),spe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),luc),V5c),GW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,roe),spe),'Force Node Model Order'),'The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,soe),spe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),U5c),BI),pqb(L5c))));o4c(a,soe,tpe,fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,toe),spe),'Semi-Interactive Crossing Minimization'),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),false),T5c),wI),pqb(L5c))));o4c(a,toe,qoe,juc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,uoe),spe),'Position Choice Constraint'),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,voe),spe),'Position ID'),'Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,woe),upe),'Greedy Switch Activation Threshold'),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),meb(40)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xoe),upe),'Greedy Switch Crossing Minimization'),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),cuc),V5c),QW),pqb(L5c))));o4c(a,xoe,qoe,duc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yoe),'crossingMinimization.greedySwitchHierarchical'),'Greedy Switch Crossing Minimization (hierarchical)'),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),$tc),V5c),QW),pqb(L5c))));o4c(a,yoe,qoe,_tc);o4c(a,yoe,tpe,auc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zoe),vpe),'Node Placement Strategy'),'Strategy for node placement.'),vvc),V5c),_W),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Aoe),vpe),'Favor Straight Edges Over Balancing'),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),T5c),wI),pqb(L5c))));o4c(a,Aoe,zoe,lvc);o4c(a,Aoe,zoe,mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Boe),wpe),'BK Edge Straightening'),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),fvc),V5c),MW),pqb(L5c))));o4c(a,Boe,zoe,gvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Coe),wpe),'BK Fixed Alignment'),'Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four.'),ivc),V5c),NW),pqb(L5c))));o4c(a,Coe,zoe,jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Doe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),U5c),BI),pqb(L5c))));o4c(a,Doe,zoe,ovc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Eoe),'nodePlacement.networkSimplex'),'Node Flexibility'),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),V5c),$W),pqb(K5c))));o4c(a,Eoe,zoe,tvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Foe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),rvc),V5c),$W),pqb(L5c))));o4c(a,Foe,zoe,svc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Goe),xpe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),xuc),V5c),eX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hoe),xpe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),zuc),V5c),fX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ioe),'edgeRouting.splines'),'Spline Routing Mode'),'Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes.'),Buc),V5c),hX),pqb(L5c))));o4c(a,Ioe,ype,Cuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Joe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),U5c),BI),pqb(L5c))));o4c(a,Joe,ype,Euc);o4c(a,Joe,Ioe,Fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Koe),'edgeRouting.polyline'),'Sloped Edge Zone Width'),'Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer.'),2),U5c),BI),pqb(L5c))));o4c(a,Koe,ype,vuc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Loe),zpe),'Spacing Base Value'),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Moe),zpe),'Edge Node Between Layers Spacing'),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Noe),zpe),'Edge Edge Between Layer Spacing'),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ooe),zpe),'Node Node Between Layers Spacing'),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Poe),Ape),'Direction Priority'),'Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qoe),Ape),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Roe),Ape),'Straightness Priority'),'Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Soe),Bpe),Ole),'Tries to further compact components (disconnected sub-graphs).'),false),T5c),wI),pqb(L5c))));o4c(a,Soe,zme,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Toe),Cpe),'Post Compaction Strategy'),Dpe),Ntc),V5c),OW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Uoe),Cpe),'Post Compaction Constraint Calculation'),Dpe),Ltc),V5c),FW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Voe),Epe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Woe),Epe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),meb(16)),X5c),JI),pqb(L5c))));o4c(a,Woe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xoe),Epe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),meb(5)),X5c),JI),pqb(L5c))));o4c(a,Xoe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yoe),Fpe),'Graph Wrapping Strategy'),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),bwc),V5c),jX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zoe),Fpe),'Additional Wrapped Edges Spacing'),'To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing.'),10),U5c),BI),pqb(L5c))));o4c(a,Zoe,Yoe,Ivc);o4c(a,Zoe,Yoe,Jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$oe),Fpe),'Correction Factor for Wrapping'),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),U5c),BI),pqb(L5c))));o4c(a,$oe,Yoe,Lvc);o4c(a,$oe,Yoe,Mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_oe),Gpe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),Tvc),V5c),HW),pqb(L5c))));o4c(a,_oe,Yoe,Uvc);o4c(a,_oe,Yoe,Vvc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,ape),Gpe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),Y5c),yK),pqb(L5c))));o4c(a,ape,_oe,Ovc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bpe),'wrapping.cutting.msd'),'MSD Freedom'),'The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts.'),Qvc),X5c),JI),pqb(L5c))));o4c(a,bpe,_oe,Rvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cpe),Hpe),'Validification Strategy'),'When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed.'),gwc),V5c),iX),pqb(L5c))));o4c(a,cpe,Yoe,hwc);o4c(a,cpe,Yoe,iwc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,dpe),Hpe),'Valid Indices for Wrapping'),null),Y5c),yK),pqb(L5c))));o4c(a,dpe,Yoe,dwc);o4c(a,dpe,Yoe,ewc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,epe),Ipe),'Improve Cuts'),'For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought.'),true),T5c),wI),pqb(L5c))));o4c(a,epe,Yoe,Zvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fpe),Ipe),'Distance Penalty When Improving Cuts'),null),2),U5c),BI),pqb(L5c))));o4c(a,fpe,Yoe,Xvc);o4c(a,fpe,epe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gpe),Ipe),'Improve Wrapped Edges'),'The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges.'),true),T5c),wI),pqb(L5c))));o4c(a,gpe,Yoe,_vc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hpe),Jpe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),tuc),V5c),LW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ipe),Jpe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),ruc),V5c),EW),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,jpe),Kpe),'Consider Model Order'),'Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.'),Wtc),V5c),bX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,kpe),Kpe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lpe),Kpe),'Consider Model Order for Components'),'If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected.'),Ptc),V5c),hQ),pqb(L5c))));o4c(a,lpe,zme,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mpe),Kpe),'Long Edge Ordering Strategy'),'Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout.'),Ttc),V5c),ZW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,npe),Kpe),'Crossing Counter Node Order Influence'),'Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,npe,jpe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ope),Kpe),'Crossing Counter Port Order Influence'),'Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,ope,jpe,null);Oyc((new Pyc,a))};var Itc,Jtc,Ktc,Ltc,Mtc,Ntc,Otc,Ptc,Qtc,Rtc,Stc,Ttc,Utc,Vtc,Wtc,Xtc,Ytc,Ztc,$tc,_tc,auc,buc,cuc,duc,euc,fuc,guc,huc,iuc,juc,kuc,luc,muc,nuc,ouc,puc,quc,ruc,suc,tuc,uuc,vuc,wuc,xuc,yuc,zuc,Auc,Buc,Cuc,Duc,Euc,Fuc,Guc,Huc,Iuc,Juc,Kuc,Luc,Muc,Nuc,Ouc,Puc,Quc,Ruc,Suc,Tuc,Uuc,Vuc,Wuc,Xuc,Yuc,Zuc,$uc,_uc,avc,bvc,cvc,dvc,evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc,ovc,pvc,qvc,rvc,svc,tvc,uvc,vvc,wvc,xvc,yvc,zvc,Avc,Bvc,Cvc,Dvc,Evc,Fvc,Gvc,Hvc,Ivc,Jvc,Kvc,Lvc,Mvc,Nvc,Ovc,Pvc,Qvc,Rvc,Svc,Tvc,Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc;var UW=mdb(Sne,'LayeredMetaDataProvider',848);bcb(986,1,ale,Pyc);_.Qe=function Qyc(a){Oyc(a)};var mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc,Ywc,Zwc,$wc,_wc,axc,bxc,cxc,dxc,exc,fxc,gxc,hxc,ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc;var WW=mdb(Sne,'LayeredOptions',986);bcb(987,1,{},Ryc);_.$e=function Syc(){var a;return a=new jUb,a};_._e=function Tyc(a){};var VW=mdb(Sne,'LayeredOptions/LayeredFactory',987);bcb(1372,1,{});_.a=0;var Uyc;var $1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder',1372);bcb(779,1372,{},ezc);var bzc,czc;var XW=mdb(Sne,'LayeredSpacings/LayeredSpacingsBuilder',779);bcb(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},nzc);_.Kf=function pzc(){return mzc(this)};_.Xf=function ozc(){return mzc(this)};var fzc,gzc,hzc,izc,jzc,kzc;var YW=ndb(Sne,'LayeringStrategy',313,CI,rzc,qzc);var szc;bcb(378,22,{3:1,35:1,22:1,378:1},zzc);var uzc,vzc,wzc;var ZW=ndb(Sne,'LongEdgeOrderingStrategy',378,CI,Bzc,Azc);var Czc;bcb(197,22,{3:1,35:1,22:1,197:1},Kzc);var Ezc,Fzc,Gzc,Hzc;var $W=ndb(Sne,'NodeFlexibility',197,CI,Nzc,Mzc);var Ozc;bcb(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},Xzc);_.Kf=function Zzc(){return Wzc(this)};_.Xf=function Yzc(){return Wzc(this)};var Qzc,Rzc,Szc,Tzc,Uzc;var _W=ndb(Sne,'NodePlacementStrategy',315,CI,_zc,$zc);var aAc;bcb(260,22,{3:1,35:1,22:1,260:1},lAc);var cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc;var aX=ndb(Sne,'NodePromotionStrategy',260,CI,nAc,mAc);var oAc;bcb(339,22,{3:1,35:1,22:1,339:1},uAc);var qAc,rAc,sAc;var bX=ndb(Sne,'OrderingStrategy',339,CI,wAc,vAc);var xAc;bcb(421,22,{3:1,35:1,22:1,421:1},CAc);var zAc,AAc;var cX=ndb(Sne,'PortSortingStrategy',421,CI,EAc,DAc);var FAc;bcb(452,22,{3:1,35:1,22:1,452:1},LAc);var HAc,IAc,JAc;var dX=ndb(Sne,'PortType',452,CI,NAc,MAc);var OAc;bcb(375,22,{3:1,35:1,22:1,375:1},UAc);var QAc,RAc,SAc;var eX=ndb(Sne,'SelfLoopDistributionStrategy',375,CI,WAc,VAc);var XAc;bcb(376,22,{3:1,35:1,22:1,376:1},aBc);var ZAc,$Ac;var fX=ndb(Sne,'SelfLoopOrderingStrategy',376,CI,cBc,bBc);var dBc;bcb(304,1,{304:1},oBc);var gX=mdb(Sne,'Spacings',304);bcb(336,22,{3:1,35:1,22:1,336:1},uBc);var qBc,rBc,sBc;var hX=ndb(Sne,'SplineRoutingMode',336,CI,wBc,vBc);var xBc;bcb(338,22,{3:1,35:1,22:1,338:1},DBc);var zBc,ABc,BBc;var iX=ndb(Sne,'ValidifyStrategy',338,CI,FBc,EBc);var GBc;bcb(377,22,{3:1,35:1,22:1,377:1},MBc);var IBc,JBc,KBc;var jX=ndb(Sne,'WrappingStrategy',377,CI,OBc,NBc);var PBc;bcb(1383,1,Bqe,VBc);_.Yf=function WBc(a){return BD(a,37),RBc};_.pf=function XBc(a,b){UBc(this,BD(a,37),b)};var RBc;var kX=mdb(Cqe,'DepthFirstCycleBreaker',1383);bcb(782,1,Bqe,aCc);_.Yf=function cCc(a){return BD(a,37),YBc};_.pf=function dCc(a,b){$Bc(this,BD(a,37),b)};_.Zf=function bCc(a){return BD(Ikb(a,Bub(this.d,a.c.length)),10)};var YBc;var lX=mdb(Cqe,'GreedyCycleBreaker',782);bcb(1386,782,Bqe,eCc);_.Zf=function fCc(a){var b,c,d,e;e=null;b=Ohe;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(wNb(c,(wtc(),Zsc))&&BD(vNb(c,Zsc),19).a<b){b=BD(vNb(c,Zsc),19).a;e=c}}if(!e){return BD(Ikb(a,Bub(this.d,a.c.length)),10)}return e};var mX=mdb(Cqe,'GreedyModelOrderCycleBreaker',1386);bcb(1384,1,Bqe,kCc);_.Yf=function lCc(a){return BD(a,37),gCc};_.pf=function mCc(a,b){jCc(this,BD(a,37),b)};var gCc;var nX=mdb(Cqe,'InteractiveCycleBreaker',1384);bcb(1385,1,Bqe,rCc);_.Yf=function sCc(a){return BD(a,37),nCc};_.pf=function tCc(a,b){qCc(this,BD(a,37),b)};_.a=0;_.b=0;var nCc;var oX=mdb(Cqe,'ModelOrderCycleBreaker',1385);bcb(1389,1,Bqe,DCc);_.Yf=function ECc(a){return BD(a,37),uCc};_.pf=function FCc(a,b){BCc(this,BD(a,37),b)};var uCc;var rX=mdb(Dqe,'CoffmanGrahamLayerer',1389);bcb(1390,1,Dke,GCc);_.ue=function HCc(a,b){return xCc(this.a,BD(a,10),BD(b,10))};_.Fb=function ICc(a){return this===a};_.ve=function JCc(){return new tpb(this)};var pX=mdb(Dqe,'CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type',1390);bcb(1391,1,Dke,KCc);_.ue=function LCc(a,b){return ACc(this.a,BD(a,10),BD(b,10))};_.Fb=function MCc(a){return this===a};_.ve=function NCc(){return new tpb(this)};var qX=mdb(Dqe,'CoffmanGrahamLayerer/lambda$1$Type',1391);bcb(1392,1,Bqe,QCc);_.Yf=function RCc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),n8b)),mUb,w8b),nUb,v8b)};_.pf=function SCc(a,b){PCc(this,BD(a,37),b)};var tX=mdb(Dqe,'InteractiveLayerer',1392);bcb(569,1,{569:1},TCc);_.a=0;_.c=0;var sX=mdb(Dqe,'InteractiveLayerer/LayerSpan',569);bcb(1388,1,Bqe,ZCc);_.Yf=function $Cc(a){return BD(a,37),UCc};_.pf=function _Cc(a,b){WCc(this,BD(a,37),b)};var UCc;var uX=mdb(Dqe,'LongestPathLayerer',1388);bcb(1395,1,Bqe,iDc);_.Yf=function jDc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)};_.pf=function kDc(a,b){gDc(this,BD(a,37),b)};_.a=0;_.b=0;_.d=0;var aDc,bDc;var wX=mdb(Dqe,'MinWidthLayerer',1395);bcb(1396,1,Dke,mDc);_.ue=function nDc(a,b){return lDc(this,BD(a,10),BD(b,10))};_.Fb=function oDc(a){return this===a};_.ve=function pDc(){return new tpb(this)};var vX=mdb(Dqe,'MinWidthLayerer/MinOutgoingEdgesComparator',1396);bcb(1387,1,Bqe,xDc);_.Yf=function yDc(a){return BD(a,37),qDc};_.pf=function zDc(a,b){wDc(this,BD(a,37),b)};var qDc;var xX=mdb(Dqe,'NetworkSimplexLayerer',1387);bcb(1393,1,Bqe,LDc);_.Yf=function MDc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)};_.pf=function NDc(a,b){IDc(this,BD(a,37),b)};_.d=0;_.f=0;_.g=0;_.i=0;_.s=0;_.t=0;_.u=0;var zX=mdb(Dqe,'StretchWidthLayerer',1393);bcb(1394,1,Dke,PDc);_.ue=function QDc(a,b){return ODc(BD(a,10),BD(b,10))};_.Fb=function RDc(a){return this===a};_.ve=function SDc(){return new tpb(this)};var yX=mdb(Dqe,'StretchWidthLayerer/1',1394);bcb(402,1,Eqe);_.Nf=function fEc(a,b,c,d,e,f){};_._f=function dEc(a,b,c){return YDc(this,a,b,c)};_.Mf=function eEc(){this.g=KC(VD,Fqe,25,this.d,15,1);this.f=KC(VD,Fqe,25,this.d,15,1)};_.Of=function gEc(a,b){this.e[a]=KC(WD,oje,25,b[a].length,15,1)};_.Pf=function hEc(a,b,c){var d;d=c[a][b];d.p=b;this.e[a][b]=b};_.Qf=function iEc(a,b,c,d){BD(Ikb(d[a][b].j,c),11).p=this.d++};_.b=0;_.c=0;_.d=0;var BX=mdb(Gqe,'AbstractBarycenterPortDistributor',402);bcb(1633,1,Dke,jEc);_.ue=function kEc(a,b){return _Dc(this.a,BD(a,11),BD(b,11))};_.Fb=function lEc(a){return this===a};_.ve=function mEc(){return new tpb(this)};var AX=mdb(Gqe,'AbstractBarycenterPortDistributor/lambda$0$Type',1633);bcb(817,1,Mne,uEc);_.Nf=function xEc(a,b,c,d,e,f){};_.Pf=function zEc(a,b,c){};_.Qf=function AEc(a,b,c,d){};_.Lf=function vEc(){return false};_.Mf=function wEc(){this.c=this.e.a;this.g=this.f.g};_.Of=function yEc(a,b){b[a][0].c.p=a};_.Rf=function BEc(){return false};_.ag=function CEc(a,b,c,d){if(c){rEc(this,a)}else{oEc(this,a,d);pEc(this,a,b)}if(a.c.length>1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,BD(this,660)):(mmb(),Okb(a,this.d));PEc(this.e,a)}};_.Sf=function DEc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=sEc(c,a.length)){f=a[b-(c?1:-1)];UDc(this.f,f,c?(KAc(),IAc):(KAc(),HAc))}e=a[b][0];k=!d||e.k==(j0b(),e0b);j=Ou(a[b]);this.ag(j,k,false,c);g=0;for(i=new olb(j);i.a<i.c.c.length;){h=BD(mlb(i),10);a[b][g++]=h}return false};_.Tf=function EEc(a,b){var c,d,e,f,g;g=sEc(b,a.length);f=Ou(a[g]);this.ag(f,false,true,b);c=0;for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),10);a[g][c++]=d}return false};var EX=mdb(Gqe,'BarycenterHeuristic',817);bcb(658,1,{658:1},FEc);_.Ib=function GEc(){return 'BarycenterState [node='+this.c+', summedWeight='+this.d+', degree='+this.b+', barycenter='+this.a+', visited='+this.e+']'};_.b=0;_.d=0;_.e=false;var CX=mdb(Gqe,'BarycenterHeuristic/BarycenterState',658);bcb(1802,1,Dke,HEc);_.ue=function IEc(a,b){return qEc(this.a,BD(a,10),BD(b,10))};_.Fb=function JEc(a){return this===a};_.ve=function KEc(){return new tpb(this)};var DX=mdb(Gqe,'BarycenterHeuristic/lambda$0$Type',1802);bcb(816,1,Mne,SEc);_.Mf=function TEc(){};_.Nf=function UEc(a,b,c,d,e,f){};_.Qf=function XEc(a,b,c,d){};_.Of=function VEc(a,b){this.a[a]=KC(CX,{3:1,4:1,5:1,2018:1},658,b[a].length,0,1);this.b[a]=KC(FX,{3:1,4:1,5:1,2019:1},233,b[a].length,0,1)};_.Pf=function WEc(a,b,c){OEc(this,c[a][b],true)};_.c=false;var HX=mdb(Gqe,'ForsterConstraintResolver',816);bcb(233,1,{233:1},$Ec,_Ec);_.Ib=function aFc(){var a,b;b=new Ufb;b.a+='[';for(a=0;a<this.d.length;a++){Qfb(b,a0b(this.d[a]));REc(this.g,this.d[0]).a!=null&&Qfb(Qfb((b.a+='<',b),Jdb(REc(this.g,this.d[0]).a)),'>');a<this.d.length-1&&(b.a+=She,b)}return (b.a+=']',b).a};_.a=0;_.c=0;_.f=0;var FX=mdb(Gqe,'ForsterConstraintResolver/ConstraintGroup',233);bcb(1797,1,qie,bFc);_.td=function cFc(a){OEc(this.a,BD(a,10),false)};var GX=mdb(Gqe,'ForsterConstraintResolver/lambda$0$Type',1797);bcb(214,1,{214:1,225:1},fFc);_.Nf=function hFc(a,b,c,d,e,f){};_.Of=function iFc(a,b){};_.Mf=function gFc(){this.r=KC(WD,oje,25,this.n,15,1)};_.Pf=function jFc(a,b,c){var d,e;e=c[a][b];d=e.e;!!d&&Ekb(this.b,d)};_.Qf=function kFc(a,b,c,d){++this.n};_.Ib=function lFc(){return wlb(this.e,new Tqb)};_.g=false;_.i=false;_.n=0;_.s=false;var IX=mdb(Gqe,'GraphInfoHolder',214);bcb(1832,1,Mne,pFc);_.Nf=function sFc(a,b,c,d,e,f){};_.Of=function tFc(a,b){};_.Qf=function vFc(a,b,c,d){};_._f=function qFc(a,b,c){c&&b>0?(RHc(this.a,a[b-1],a[b]),undefined):!c&&b<a.length-1?(RHc(this.a,a[b],a[b+1]),undefined):THc(this.a,a[b],c?(Ucd(),Tcd):(Ucd(),zcd));return mFc(this,a,b,c)};_.Mf=function rFc(){this.d=KC(WD,oje,25,this.c,15,1);this.a=new dIc(this.d)};_.Pf=function uFc(a,b,c){var d;d=c[a][b];this.c+=d.j.c.length};_.c=0;var JX=mdb(Gqe,'GreedyPortDistributor',1832);bcb(1401,1,Bqe,CFc);_.Yf=function DFc(a){return zFc(BD(a,37))};_.pf=function EFc(a,b){BFc(BD(a,37),b)};var xFc;var LX=mdb(Gqe,'InteractiveCrossingMinimizer',1401);bcb(1402,1,Dke,GFc);_.ue=function HFc(a,b){return FFc(this,BD(a,10),BD(b,10))};_.Fb=function IFc(a){return this===a};_.ve=function JFc(){return new tpb(this)};var KX=mdb(Gqe,'InteractiveCrossingMinimizer/1',1402);bcb(507,1,{507:1,123:1,51:1},fGc);_.Yf=function gGc(a){var b;return BD(a,37),b=k3c(KFc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hGc(a,b){YFc(this,BD(a,37),b)};_.e=0;var KFc;var RX=mdb(Gqe,'LayerSweepCrossingMinimizer',507);bcb(1398,1,qie,iGc);_.td=function jGc(a){MFc(this.a,BD(a,214))};var MX=mdb(Gqe,'LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type',1398);bcb(1399,1,qie,kGc);_.td=function lGc(a){VFc(this.a,BD(a,214))};var NX=mdb(Gqe,'LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type',1399);bcb(1400,1,qie,mGc);_.td=function nGc(a){XFc(this.a,BD(a,214))};var OX=mdb(Gqe,'LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type',1400);bcb(454,22,{3:1,35:1,22:1,454:1},sGc);var oGc,pGc,qGc;var PX=ndb(Gqe,'LayerSweepCrossingMinimizer/CrossMinType',454,CI,uGc,tGc);var vGc;bcb(1397,1,Oie,xGc);_.Mb=function yGc(a){return LFc(),BD(a,29).a.c.length==0};var QX=mdb(Gqe,'LayerSweepCrossingMinimizer/lambda$0$Type',1397);bcb(1799,1,Mne,BGc);_.Mf=function CGc(){};_.Nf=function DGc(a,b,c,d,e,f){};_.Qf=function GGc(a,b,c,d){};_.Of=function EGc(a,b){b[a][0].c.p=a;this.b[a]=KC(SX,{3:1,4:1,5:1,1944:1},659,b[a].length,0,1)};_.Pf=function FGc(a,b,c){var d;d=c[a][b];d.p=b;NC(this.b[a],b,new HGc)};var VX=mdb(Gqe,'LayerSweepTypeDecider',1799);bcb(659,1,{659:1},HGc);_.Ib=function IGc(){return 'NodeInfo [connectedEdges='+this.a+', hierarchicalInfluence='+this.b+', randomInfluence='+this.c+']'};_.a=0;_.b=0;_.c=0;var SX=mdb(Gqe,'LayerSweepTypeDecider/NodeInfo',659);bcb(1800,1,Vke,JGc);_.Lb=function KGc(a){return a1b(new b1b(BD(a,11).b))};_.Fb=function LGc(a){return this===a};_.Mb=function MGc(a){return a1b(new b1b(BD(a,11).b))};var TX=mdb(Gqe,'LayerSweepTypeDecider/lambda$0$Type',1800);bcb(1801,1,Vke,NGc);_.Lb=function OGc(a){return a1b(new b1b(BD(a,11).b))};_.Fb=function PGc(a){return this===a};_.Mb=function QGc(a){return a1b(new b1b(BD(a,11).b))};var UX=mdb(Gqe,'LayerSweepTypeDecider/lambda$1$Type',1801);bcb(1833,402,Eqe,RGc);_.$f=function SGc(a,b,c){var d,e,f,g,h,i,j,k,l;j=this.g;switch(c.g){case 1:{d=0;e=0;for(i=new olb(a.j);i.a<i.c.c.length;){g=BD(mlb(i),11);if(g.e.c.length!=0){++d;g.j==(Ucd(),Acd)&&++e}}f=b+e;l=b+d;for(h=W_b(a,(KAc(),HAc)).Kc();h.Ob();){g=BD(h.Pb(),11);if(g.j==(Ucd(),Acd)){j[g.p]=f;--f}else{j[g.p]=l;--l}}return d}case 2:{k=0;for(h=W_b(a,(KAc(),IAc)).Kc();h.Ob();){g=BD(h.Pb(),11);++k;j[g.p]=b+k}return k}default:throw vbb(new Vdb);}};var WX=mdb(Gqe,'LayerTotalPortDistributor',1833);bcb(660,817,{660:1,225:1},XGc);_.ag=function ZGc(a,b,c,d){if(c){rEc(this,a)}else{oEc(this,a,d);pEc(this,a,b)}if(a.c.length>1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,this):(mmb(),Okb(a,this.d));Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),Awc)))||PEc(this.e,a)}};var YX=mdb(Gqe,'ModelOrderBarycenterHeuristic',660);bcb(1803,1,Dke,$Gc);_.ue=function _Gc(a,b){return VGc(this.a,BD(a,10),BD(b,10))};_.Fb=function aHc(a){return this===a};_.ve=function bHc(){return new tpb(this)};var XX=mdb(Gqe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1803);bcb(1403,1,Bqe,fHc);_.Yf=function gHc(a){var b;return BD(a,37),b=k3c(cHc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hHc(a,b){eHc((BD(a,37),b))};var cHc;var ZX=mdb(Gqe,'NoCrossingMinimizer',1403);bcb(796,402,Eqe,iHc);_.$f=function jHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new olb(a.j);k.a<k.c.c.length;){i=BD(mlb(k),11);if(i.e.c.length!=0){++e;i.j==(Ucd(),Acd)&&++f}}d=1/(e+1);g=b+f*d;n=b+1-d;for(j=W_b(a,(KAc(),HAc)).Kc();j.Ob();){i=BD(j.Pb(),11);if(i.j==(Ucd(),Acd)){l[i.p]=g;g-=d}else{l[i.p]=n;n-=d}}break}case 2:{h=0;for(k=new olb(a.j);k.a<k.c.c.length;){i=BD(mlb(k),11);i.g.c.length==0||++h}d=1/(h+1);m=b+d;for(j=W_b(a,(KAc(),IAc)).Kc();j.Ob();){i=BD(j.Pb(),11);l[i.p]=m;m+=d}break}default:throw vbb(new Wdb('Port type is undefined'));}return 1};var $X=mdb(Gqe,'NodeRelativePortDistributor',796);bcb(807,1,{},nHc,oHc);var _X=mdb(Gqe,'SweepCopy',807);bcb(1798,1,Mne,rHc);_.Of=function uHc(a,b){};_.Mf=function sHc(){var a;a=KC(WD,oje,25,this.f,15,1);this.d=new LIc(a);this.a=new dIc(a)};_.Nf=function tHc(a,b,c,d,e,f){var g;g=BD(Ikb(f[a][b].j,c),11);e.c==g&&e.c.i.c==e.d.i.c&&++this.e[a]};_.Pf=function vHc(a,b,c){var d;d=c[a][b];this.c[a]=this.c[a]|d.k==(j0b(),i0b)};_.Qf=function wHc(a,b,c,d){var e;e=BD(Ikb(d[a][b].j,c),11);e.p=this.f++;e.g.c.length+e.e.c.length>1&&(e.j==(Ucd(),zcd)?(this.b[a]=true):e.j==Tcd&&a>0&&(this.b[a-1]=true))};_.f=0;var aY=mdb(Lne,'AllCrossingsCounter',1798);bcb(587,1,{},BHc);_.b=0;_.d=0;var bY=mdb(Lne,'BinaryIndexedTree',587);bcb(524,1,{},dIc);var DHc,EHc;var lY=mdb(Lne,'CrossingsCounter',524);bcb(1906,1,Dke,hIc);_.ue=function iIc(a,b){return YHc(this.a,BD(a,11),BD(b,11))};_.Fb=function jIc(a){return this===a};_.ve=function kIc(){return new tpb(this)};var cY=mdb(Lne,'CrossingsCounter/lambda$0$Type',1906);bcb(1907,1,Dke,lIc);_.ue=function mIc(a,b){return ZHc(this.a,BD(a,11),BD(b,11))};_.Fb=function nIc(a){return this===a};_.ve=function oIc(){return new tpb(this)};var dY=mdb(Lne,'CrossingsCounter/lambda$1$Type',1907);bcb(1908,1,Dke,pIc);_.ue=function qIc(a,b){return $Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function rIc(a){return this===a};_.ve=function sIc(){return new tpb(this)};var eY=mdb(Lne,'CrossingsCounter/lambda$2$Type',1908);bcb(1909,1,Dke,tIc);_.ue=function uIc(a,b){return _Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function vIc(a){return this===a};_.ve=function wIc(){return new tpb(this)};var fY=mdb(Lne,'CrossingsCounter/lambda$3$Type',1909);bcb(1910,1,qie,xIc);_.td=function yIc(a){eIc(this.a,BD(a,11))};var gY=mdb(Lne,'CrossingsCounter/lambda$4$Type',1910);bcb(1911,1,Oie,zIc);_.Mb=function AIc(a){return fIc(this.a,BD(a,11))};var hY=mdb(Lne,'CrossingsCounter/lambda$5$Type',1911);bcb(1912,1,qie,CIc);_.td=function DIc(a){BIc(this,a)};var iY=mdb(Lne,'CrossingsCounter/lambda$6$Type',1912);bcb(1913,1,qie,EIc);_.td=function FIc(a){var b;FHc();Wjb(this.b,(b=this.a,BD(a,11),b))};var jY=mdb(Lne,'CrossingsCounter/lambda$7$Type',1913);bcb(826,1,Vke,GIc);_.Lb=function HIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};_.Fb=function IIc(a){return this===a};_.Mb=function JIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};var kY=mdb(Lne,'CrossingsCounter/lambda$8$Type',826);bcb(1905,1,{},LIc);var pY=mdb(Lne,'HyperedgeCrossingsCounter',1905);bcb(467,1,{35:1,467:1},NIc);_.wd=function OIc(a){return MIc(this,BD(a,467))};_.b=0;_.c=0;_.e=0;_.f=0;var oY=mdb(Lne,'HyperedgeCrossingsCounter/Hyperedge',467);bcb(362,1,{35:1,362:1},QIc);_.wd=function RIc(a){return PIc(this,BD(a,362))};_.b=0;_.c=0;var nY=mdb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner',362);bcb(523,22,{3:1,35:1,22:1,523:1},VIc);var SIc,TIc;var mY=ndb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',523,CI,XIc,WIc);var YIc;bcb(1405,1,Bqe,dJc);_.Yf=function eJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?_Ic:null};_.pf=function fJc(a,b){cJc(this,BD(a,37),b)};var _Ic;var rY=mdb(Hqe,'InteractiveNodePlacer',1405);bcb(1406,1,Bqe,tJc);_.Yf=function uJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?gJc:null};_.pf=function vJc(a,b){rJc(this,BD(a,37),b)};var gJc,hJc,iJc;var tY=mdb(Hqe,'LinearSegmentsNodePlacer',1406);bcb(257,1,{35:1,257:1},zJc);_.wd=function AJc(a){return wJc(this,BD(a,257))};_.Fb=function BJc(a){var b;if(JD(a,257)){b=BD(a,257);return this.b==b.b}return false};_.Hb=function CJc(){return this.b};_.Ib=function DJc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var sY=mdb(Hqe,'LinearSegmentsNodePlacer/LinearSegment',257);bcb(1408,1,Bqe,$Jc);_.Yf=function _Jc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?EJc:null};_.pf=function hKc(a,b){WJc(this,BD(a,37),b)};_.b=0;_.g=0;var EJc;var dZ=mdb(Hqe,'NetworkSimplexPlacer',1408);bcb(1427,1,Dke,iKc);_.ue=function jKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function kKc(a){return this===a};_.ve=function lKc(){return new tpb(this)};var uY=mdb(Hqe,'NetworkSimplexPlacer/0methodref$compare$Type',1427);bcb(1429,1,Dke,mKc);_.ue=function nKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function oKc(a){return this===a};_.ve=function pKc(){return new tpb(this)};var vY=mdb(Hqe,'NetworkSimplexPlacer/1methodref$compare$Type',1429);bcb(649,1,{649:1},qKc);var wY=mdb(Hqe,'NetworkSimplexPlacer/EdgeRep',649);bcb(401,1,{401:1},rKc);_.b=false;var xY=mdb(Hqe,'NetworkSimplexPlacer/NodeRep',401);bcb(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},vKc);var CY=mdb(Hqe,'NetworkSimplexPlacer/Path',508);bcb(1409,1,{},wKc);_.Kb=function xKc(a){return BD(a,17).d.i.k};var yY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$0$Type',1409);bcb(1410,1,Oie,yKc);_.Mb=function zKc(a){return BD(a,267)==(j0b(),g0b)};var zY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$1$Type',1410);bcb(1411,1,{},AKc);_.Kb=function BKc(a){return BD(a,17).d.i};var AY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$2$Type',1411);bcb(1412,1,Oie,CKc);_.Mb=function DKc(a){return eLc(Lzc(BD(a,10)))};var BY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$3$Type',1412);bcb(1413,1,Oie,EKc);_.Mb=function FKc(a){return dKc(BD(a,11))};var DY=mdb(Hqe,'NetworkSimplexPlacer/lambda$0$Type',1413);bcb(1414,1,qie,GKc);_.td=function HKc(a){LJc(this.a,this.b,BD(a,11))};var EY=mdb(Hqe,'NetworkSimplexPlacer/lambda$1$Type',1414);bcb(1423,1,qie,IKc);_.td=function JKc(a){MJc(this.a,BD(a,17))};var FY=mdb(Hqe,'NetworkSimplexPlacer/lambda$10$Type',1423);bcb(1424,1,{},KKc);_.Kb=function LKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var GY=mdb(Hqe,'NetworkSimplexPlacer/lambda$11$Type',1424);bcb(1425,1,qie,MKc);_.td=function NKc(a){NJc(this.a,BD(a,10))};var HY=mdb(Hqe,'NetworkSimplexPlacer/lambda$12$Type',1425);bcb(1426,1,{},OKc);_.Kb=function PKc(a){return FJc(),meb(BD(a,121).e)};var IY=mdb(Hqe,'NetworkSimplexPlacer/lambda$13$Type',1426);bcb(1428,1,{},QKc);_.Kb=function RKc(a){return FJc(),meb(BD(a,121).e)};var JY=mdb(Hqe,'NetworkSimplexPlacer/lambda$15$Type',1428);bcb(1430,1,Oie,SKc);_.Mb=function TKc(a){return FJc(),BD(a,401).c.k==(j0b(),h0b)};var KY=mdb(Hqe,'NetworkSimplexPlacer/lambda$17$Type',1430);bcb(1431,1,Oie,UKc);_.Mb=function VKc(a){return FJc(),BD(a,401).c.j.c.length>1};var LY=mdb(Hqe,'NetworkSimplexPlacer/lambda$18$Type',1431);bcb(1432,1,qie,WKc);_.td=function XKc(a){eKc(this.c,this.b,this.d,this.a,BD(a,401))};_.c=0;_.d=0;var MY=mdb(Hqe,'NetworkSimplexPlacer/lambda$19$Type',1432);bcb(1415,1,{},YKc);_.Kb=function ZKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var NY=mdb(Hqe,'NetworkSimplexPlacer/lambda$2$Type',1415);bcb(1433,1,qie,$Kc);_.td=function _Kc(a){fKc(this.a,BD(a,11))};_.a=0;var OY=mdb(Hqe,'NetworkSimplexPlacer/lambda$20$Type',1433);bcb(1434,1,{},aLc);_.Kb=function bLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var PY=mdb(Hqe,'NetworkSimplexPlacer/lambda$21$Type',1434);bcb(1435,1,qie,cLc);_.td=function dLc(a){OJc(this.a,BD(a,10))};var QY=mdb(Hqe,'NetworkSimplexPlacer/lambda$22$Type',1435);bcb(1436,1,Oie,fLc);_.Mb=function gLc(a){return eLc(a)};var RY=mdb(Hqe,'NetworkSimplexPlacer/lambda$23$Type',1436);bcb(1437,1,{},hLc);_.Kb=function iLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var SY=mdb(Hqe,'NetworkSimplexPlacer/lambda$24$Type',1437);bcb(1438,1,Oie,jLc);_.Mb=function kLc(a){return PJc(this.a,BD(a,10))};var TY=mdb(Hqe,'NetworkSimplexPlacer/lambda$25$Type',1438);bcb(1439,1,qie,lLc);_.td=function mLc(a){QJc(this.a,this.b,BD(a,10))};var UY=mdb(Hqe,'NetworkSimplexPlacer/lambda$26$Type',1439);bcb(1440,1,Oie,nLc);_.Mb=function oLc(a){return FJc(),!OZb(BD(a,17))};var VY=mdb(Hqe,'NetworkSimplexPlacer/lambda$27$Type',1440);bcb(1441,1,Oie,pLc);_.Mb=function qLc(a){return FJc(),!OZb(BD(a,17))};var WY=mdb(Hqe,'NetworkSimplexPlacer/lambda$28$Type',1441);bcb(1442,1,{},rLc);_.Ce=function sLc(a,b){return RJc(this.a,BD(a,29),BD(b,29))};var XY=mdb(Hqe,'NetworkSimplexPlacer/lambda$29$Type',1442);bcb(1416,1,{},tLc);_.Kb=function uLc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var YY=mdb(Hqe,'NetworkSimplexPlacer/lambda$3$Type',1416);bcb(1417,1,Oie,vLc);_.Mb=function wLc(a){return FJc(),cKc(BD(a,17))};var ZY=mdb(Hqe,'NetworkSimplexPlacer/lambda$4$Type',1417);bcb(1418,1,qie,xLc);_.td=function yLc(a){XJc(this.a,BD(a,17))};var $Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$5$Type',1418);bcb(1419,1,{},zLc);_.Kb=function ALc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var _Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$6$Type',1419);bcb(1420,1,Oie,BLc);_.Mb=function CLc(a){return FJc(),BD(a,10).k==(j0b(),h0b)};var aZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$7$Type',1420);bcb(1421,1,{},DLc);_.Kb=function ELc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(O_b(BD(a,10)).a.Kc(),new Sq))))};var bZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$8$Type',1421);bcb(1422,1,Oie,FLc);_.Mb=function GLc(a){return FJc(),NZb(BD(a,17))};var cZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$9$Type',1422);bcb(1404,1,Bqe,KLc);_.Yf=function LLc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?HLc:null};_.pf=function MLc(a,b){JLc(BD(a,37),b)};var HLc;var eZ=mdb(Hqe,'SimpleNodePlacer',1404);bcb(180,1,{180:1},ULc);_.Ib=function VLc(){var a;a='';this.c==(YLc(),XLc)?(a+=kle):this.c==WLc&&(a+=jle);this.o==(eMc(),cMc)?(a+=vle):this.o==dMc?(a+='UP'):(a+='BALANCED');return a};var hZ=mdb(Kqe,'BKAlignedLayout',180);bcb(516,22,{3:1,35:1,22:1,516:1},ZLc);var WLc,XLc;var fZ=ndb(Kqe,'BKAlignedLayout/HDirection',516,CI,_Lc,$Lc);var aMc;bcb(515,22,{3:1,35:1,22:1,515:1},fMc);var cMc,dMc;var gZ=ndb(Kqe,'BKAlignedLayout/VDirection',515,CI,hMc,gMc);var iMc;bcb(1634,1,{},mMc);var iZ=mdb(Kqe,'BKAligner',1634);bcb(1637,1,{},rMc);var lZ=mdb(Kqe,'BKCompactor',1637);bcb(654,1,{654:1},sMc);_.a=0;var jZ=mdb(Kqe,'BKCompactor/ClassEdge',654);bcb(458,1,{458:1},uMc);_.a=null;_.b=0;var kZ=mdb(Kqe,'BKCompactor/ClassNode',458);bcb(1407,1,Bqe,CMc);_.Yf=function GMc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?vMc:null};_.pf=function HMc(a,b){BMc(this,BD(a,37),b)};_.d=false;var vMc;var mZ=mdb(Kqe,'BKNodePlacer',1407);bcb(1635,1,{},JMc);_.d=0;var oZ=mdb(Kqe,'NeighborhoodInformation',1635);bcb(1636,1,Dke,OMc);_.ue=function PMc(a,b){return NMc(this,BD(a,46),BD(b,46))};_.Fb=function QMc(a){return this===a};_.ve=function RMc(){return new tpb(this)};var nZ=mdb(Kqe,'NeighborhoodInformation/NeighborComparator',1636);bcb(808,1,{});var sZ=mdb(Kqe,'ThresholdStrategy',808);bcb(1763,808,{},WMc);_.bg=function XMc(a,b,c){return this.a.o==(eMc(),dMc)?Pje:Qje};_.cg=function YMc(){};var pZ=mdb(Kqe,'ThresholdStrategy/NullThresholdStrategy',1763);bcb(579,1,{579:1},ZMc);_.c=false;_.d=false;var qZ=mdb(Kqe,'ThresholdStrategy/Postprocessable',579);bcb(1764,808,{},bNc);_.bg=function cNc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(YLc(),XLc)){e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}else{e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}return f};_.cg=function dNc(){var a,b,c,d,e;while(this.d.b!=0){e=BD(Ksb(this.d),579);d=_Mc(this,e);if(!d.a){continue}a=d.a;c=Ccb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!OZb(a)&&a.c.i.c==a.d.i.c){continue}b=aNc(this,e);b||swb(this.e,e)}while(this.e.a.c.length!=0){aNc(this,BD(rwb(this.e),579))}};var rZ=mdb(Kqe,'ThresholdStrategy/SimpleThresholdStrategy',1764);bcb(635,1,{635:1,246:1,234:1},hNc);_.Kf=function jNc(){return gNc(this)};_.Xf=function iNc(){return gNc(this)};var eNc;var tZ=mdb(Lqe,'EdgeRouterFactory',635);bcb(1458,1,Bqe,wNc);_.Yf=function xNc(a){return uNc(BD(a,37))};_.pf=function yNc(a,b){vNc(BD(a,37),b)};var lNc,mNc,nNc,oNc,pNc,qNc,rNc,sNc;var uZ=mdb(Lqe,'OrthogonalEdgeRouter',1458);bcb(1451,1,Bqe,NNc);_.Yf=function ONc(a){return INc(BD(a,37))};_.pf=function PNc(a,b){KNc(this,BD(a,37),b)};var zNc,ANc,BNc,CNc,DNc,ENc;var wZ=mdb(Lqe,'PolylineEdgeRouter',1451);bcb(1452,1,Vke,RNc);_.Lb=function SNc(a){return QNc(BD(a,10))};_.Fb=function TNc(a){return this===a};_.Mb=function UNc(a){return QNc(BD(a,10))};var vZ=mdb(Lqe,'PolylineEdgeRouter/1',1452);bcb(1809,1,Oie,ZNc);_.Mb=function $Nc(a){return BD(a,129).c==(HOc(),FOc)};var xZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$0$Type',1809);bcb(1810,1,{},_Nc);_.Ge=function aOc(a){return BD(a,129).d};var yZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$1$Type',1810);bcb(1811,1,Oie,bOc);_.Mb=function cOc(a){return BD(a,129).c==(HOc(),FOc)};var zZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$2$Type',1811);bcb(1812,1,{},dOc);_.Ge=function eOc(a){return BD(a,129).d};var AZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$3$Type',1812);bcb(1813,1,{},fOc);_.Ge=function gOc(a){return BD(a,129).d};var BZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$4$Type',1813);bcb(1814,1,{},hOc);_.Ge=function iOc(a){return BD(a,129).d};var CZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$5$Type',1814);bcb(112,1,{35:1,112:1},uOc);_.wd=function vOc(a){return kOc(this,BD(a,112))};_.Fb=function wOc(a){var b;if(JD(a,112)){b=BD(a,112);return this.g==b.g}return false};_.Hb=function xOc(){return this.g};_.Ib=function zOc(){var a,b,c,d;a=new Wfb('{');d=new olb(this.n);while(d.a<d.c.c.length){c=BD(mlb(d),11);b=P_b(c.i);b==null&&(b='n'+S_b(c.i));a.a+=''+b;d.a<d.c.c.length&&(a.a+=',',a)}a.a+='}';return a.a};_.a=0;_.b=0;_.c=NaN;_.d=0;_.g=0;_.i=0;_.o=0;_.s=NaN;var NZ=mdb(Mqe,'HyperEdgeSegment',112);bcb(129,1,{129:1},DOc);_.Ib=function EOc(){return this.a+'->'+this.b+' ('+Yr(this.c)+')'};_.d=0;var EZ=mdb(Mqe,'HyperEdgeSegmentDependency',129);bcb(520,22,{3:1,35:1,22:1,520:1},IOc);var FOc,GOc;var DZ=ndb(Mqe,'HyperEdgeSegmentDependency/DependencyType',520,CI,KOc,JOc);var LOc;bcb(1815,1,{},ZOc);var MZ=mdb(Mqe,'HyperEdgeSegmentSplitter',1815);bcb(1816,1,{},aPc);_.a=0;_.b=0;var FZ=mdb(Mqe,'HyperEdgeSegmentSplitter/AreaRating',1816);bcb(329,1,{329:1},bPc);_.a=0;_.b=0;_.c=0;var GZ=mdb(Mqe,'HyperEdgeSegmentSplitter/FreeArea',329);bcb(1817,1,Dke,cPc);_.ue=function dPc(a,b){return _Oc(BD(a,112),BD(b,112))};_.Fb=function ePc(a){return this===a};_.ve=function fPc(){return new tpb(this)};var HZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$0$Type',1817);bcb(1818,1,qie,gPc);_.td=function hPc(a){TOc(this.a,this.d,this.c,this.b,BD(a,112))};_.b=0;var IZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$1$Type',1818);bcb(1819,1,{},iPc);_.Kb=function jPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var JZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$2$Type',1819);bcb(1820,1,{},kPc);_.Kb=function lPc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var KZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$3$Type',1820);bcb(1821,1,{},mPc);_.Fe=function nPc(a){return Edb(ED(a))};var LZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$4$Type',1821);bcb(655,1,{},tPc);_.a=0;_.b=0;_.c=0;var QZ=mdb(Mqe,'OrthogonalRoutingGenerator',655);bcb(1638,1,{},xPc);_.Kb=function yPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var OZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$0$Type',1638);bcb(1639,1,{},zPc);_.Kb=function APc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var PZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$1$Type',1639);bcb(661,1,{});var RZ=mdb(Nqe,'BaseRoutingDirectionStrategy',661);bcb(1807,661,{},EPc);_.dg=function FPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b+m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function GPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function HPc(){return Ucd(),Rcd};_.gg=function IPc(){return Ucd(),Acd};var SZ=mdb(Nqe,'NorthToSouthRoutingStrategy',1807);bcb(1808,661,{},JPc);_.dg=function KPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b-m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function LPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function MPc(){return Ucd(),Acd};_.gg=function NPc(){return Ucd(),Rcd};var TZ=mdb(Nqe,'SouthToNorthRoutingStrategy',1808);bcb(1806,661,{},OPc);_.dg=function PPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).b;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).b;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(f,l);Dsb(g.a,d);BPc(this,g,e,d,true);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true);f=b+m.o*c;e=m;d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true)}d=new f7c(f,p);Dsb(g.a,d);BPc(this,g,e,d,true)}}}}};_.eg=function QPc(a){return a.i.n.b+a.n.b+a.a.b};_.fg=function RPc(){return Ucd(),zcd};_.gg=function SPc(){return Ucd(),Tcd};var UZ=mdb(Nqe,'WestToEastRoutingStrategy',1806);bcb(813,1,{},YPc);_.Ib=function ZPc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var WZ=mdb(Pqe,'NubSpline',813);bcb(407,1,{407:1},aQc,bQc);var VZ=mdb(Pqe,'NubSpline/PolarCP',407);bcb(1453,1,Bqe,vQc);_.Yf=function xQc(a){return qQc(BD(a,37))};_.pf=function yQc(a,b){uQc(this,BD(a,37),b)};var cQc,dQc,eQc,fQc,gQc;var b$=mdb(Pqe,'SplineEdgeRouter',1453);bcb(268,1,{268:1},BQc);_.Ib=function CQc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var XZ=mdb(Pqe,'SplineEdgeRouter/Dependency',268);bcb(455,22,{3:1,35:1,22:1,455:1},GQc);var DQc,EQc;var YZ=ndb(Pqe,'SplineEdgeRouter/SideToProcess',455,CI,IQc,HQc);var JQc;bcb(1454,1,Oie,LQc);_.Mb=function MQc(a){return hQc(),!BD(a,128).o};var ZZ=mdb(Pqe,'SplineEdgeRouter/lambda$0$Type',1454);bcb(1455,1,{},NQc);_.Ge=function OQc(a){return hQc(),BD(a,128).v+1};var $Z=mdb(Pqe,'SplineEdgeRouter/lambda$1$Type',1455);bcb(1456,1,qie,PQc);_.td=function QQc(a){sQc(this.a,this.b,BD(a,46))};var _Z=mdb(Pqe,'SplineEdgeRouter/lambda$2$Type',1456);bcb(1457,1,qie,RQc);_.td=function SQc(a){tQc(this.a,this.b,BD(a,46))};var a$=mdb(Pqe,'SplineEdgeRouter/lambda$3$Type',1457);bcb(128,1,{35:1,128:1},YQc,ZQc);_.wd=function $Qc(a){return WQc(this,BD(a,128))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var d$=mdb(Pqe,'SplineSegment',128);bcb(459,1,{459:1},_Qc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var c$=mdb(Pqe,'SplineSegment/EdgeInformation',459);bcb(1234,1,{},hRc);var f$=mdb(Uqe,hme,1234);bcb(1235,1,Dke,jRc);_.ue=function kRc(a,b){return iRc(BD(a,135),BD(b,135))};_.Fb=function lRc(a){return this===a};_.ve=function mRc(){return new tpb(this)};var e$=mdb(Uqe,ime,1235);bcb(1233,1,{},tRc);var g$=mdb(Uqe,'MrTree',1233);bcb(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},ARc);_.Kf=function CRc(){return zRc(this)};_.Xf=function BRc(){return zRc(this)};var uRc,vRc,wRc,xRc;var h$=ndb(Uqe,'TreeLayoutPhases',393,CI,ERc,DRc);var FRc;bcb(1130,209,Mle,HRc);_.Ze=function IRc(a,b){var c,d,e,f,g,h,i;Ccb(DD(hkd(a,(JTc(),ATc))))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c));g=(h=new SRc,tNb(h,a),yNb(h,(mTc(),dTc),a),i=new Lqb,pRc(a,h,i),oRc(a,h,i),h);f=gRc(this.a,g);for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),135);rRc(this.b,d,Udd(b,1/f.c.length))}g=fRc(f);nRc(g)};var i$=mdb(Uqe,'TreeLayoutProvider',1130);bcb(1847,1,vie,KRc);_.Jc=function LRc(a){reb(this,a)};_.Kc=function MRc(){return mmb(),Emb(),Dmb};var j$=mdb(Uqe,'TreeUtil/1',1847);bcb(1848,1,vie,NRc);_.Jc=function ORc(a){reb(this,a)};_.Kc=function PRc(){return mmb(),Emb(),Dmb};var k$=mdb(Uqe,'TreeUtil/2',1848);bcb(502,134,{3:1,502:1,94:1,134:1});_.g=0;var m$=mdb(Vqe,'TGraphElement',502);bcb(188,502,{3:1,188:1,502:1,94:1,134:1},QRc);_.Ib=function RRc(){return !!this.b&&!!this.c?WRc(this.b)+'->'+WRc(this.c):'e_'+tb(this)};var l$=mdb(Vqe,'TEdge',188);bcb(135,134,{3:1,135:1,94:1,134:1},SRc);_.Ib=function TRc(){var a,b,c,d,e;e=null;for(d=Jsb(this.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=Jsb(this.a,0);b.b!=b.d.c;){a=BD(Xsb(b),188);e+=(!!a.b&&!!a.c?WRc(a.b)+'->'+WRc(a.c):'e_'+tb(a))+'\n'}return e};var n$=mdb(Vqe,'TGraph',135);bcb(633,502,{3:1,502:1,633:1,94:1,134:1});var r$=mdb(Vqe,'TShape',633);bcb(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},XRc);_.Ib=function YRc(){return WRc(this)};var q$=mdb(Vqe,'TNode',86);bcb(255,1,vie,ZRc);_.Jc=function $Rc(a){reb(this,a)};_.Kc=function _Rc(){var a;return a=Jsb(this.a.d,0),new aSc(a)};var p$=mdb(Vqe,'TNode/2',255);bcb(358,1,aie,aSc);_.Nb=function bSc(a){Rrb(this,a)};_.Pb=function dSc(){return BD(Xsb(this.a),188).c};_.Ob=function cSc(){return Wsb(this.a)};_.Qb=function eSc(){Zsb(this.a)};var o$=mdb(Vqe,'TNode/2/1',358);bcb(1840,1,ene,hSc);_.pf=function jSc(a,b){gSc(this,BD(a,135),b)};var s$=mdb(Wqe,'FanProcessor',1840);bcb(327,22,{3:1,35:1,22:1,327:1,234:1},rSc);_.Kf=function sSc(){switch(this.g){case 0:return new QSc;case 1:return new hSc;case 2:return new GSc;case 3:return new zSc;case 4:return new NSc;case 5:return new TSc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var kSc,lSc,mSc,nSc,oSc,pSc;var t$=ndb(Wqe,Ene,327,CI,uSc,tSc);var vSc;bcb(1843,1,ene,zSc);_.pf=function ASc(a,b){xSc(this,BD(a,135),b)};_.a=0;var v$=mdb(Wqe,'LevelHeightProcessor',1843);bcb(1844,1,vie,BSc);_.Jc=function CSc(a){reb(this,a)};_.Kc=function DSc(){return mmb(),Emb(),Dmb};var u$=mdb(Wqe,'LevelHeightProcessor/1',1844);bcb(1841,1,ene,GSc);_.pf=function HSc(a,b){ESc(this,BD(a,135),b)};_.a=0;var x$=mdb(Wqe,'NeighborsProcessor',1841);bcb(1842,1,vie,ISc);_.Jc=function JSc(a){reb(this,a)};_.Kc=function KSc(){return mmb(),Emb(),Dmb};var w$=mdb(Wqe,'NeighborsProcessor/1',1842);bcb(1845,1,ene,NSc);_.pf=function OSc(a,b){LSc(this,BD(a,135),b)};_.a=0;var y$=mdb(Wqe,'NodePositionProcessor',1845);bcb(1839,1,ene,QSc);_.pf=function RSc(a,b){PSc(this,BD(a,135))};var z$=mdb(Wqe,'RootProcessor',1839);bcb(1846,1,ene,TSc);_.pf=function USc(a,b){SSc(BD(a,135))};var A$=mdb(Wqe,'Untreeifyer',1846);var VSc,WSc,XSc,YSc,ZSc,$Sc,_Sc,aTc,bTc,cTc,dTc,eTc,fTc,gTc,hTc,iTc,jTc,kTc,lTc;bcb(851,1,ale,sTc);_.Qe=function tTc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zqe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),qTc),(_5c(),V5c)),E$),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$qe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),oTc),V5c),F$),pqb(L5c))));KTc((new LTc,a))};var nTc,oTc,pTc,qTc;var B$=mdb(_qe,'MrTreeMetaDataProvider',851);bcb(994,1,ale,LTc);_.Qe=function MTc(a){KTc(a)};var uTc,vTc,wTc,xTc,yTc,zTc,ATc,BTc,CTc,DTc,ETc,FTc,GTc,HTc,ITc;var D$=mdb(_qe,'MrTreeOptions',994);bcb(995,1,{},NTc);_.$e=function OTc(){var a;return a=new HRc,a};_._e=function PTc(a){};var C$=mdb(_qe,'MrTreeOptions/MrtreeFactory',995);bcb(480,22,{3:1,35:1,22:1,480:1},TTc);var QTc,RTc;var E$=ndb(_qe,'OrderWeighting',480,CI,VTc,UTc);var WTc;bcb(425,22,{3:1,35:1,22:1,425:1},_Tc);var YTc,ZTc;var F$=ndb(_qe,'TreeifyingOrder',425,CI,bUc,aUc);var cUc;bcb(1459,1,Bqe,lUc);_.Yf=function mUc(a){return BD(a,135),eUc};_.pf=function nUc(a,b){kUc(this,BD(a,135),b)};var eUc;var G$=mdb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1459);bcb(1460,1,Bqe,sUc);_.Yf=function tUc(a){return BD(a,135),oUc};_.pf=function uUc(a,b){rUc(this,BD(a,135),b)};var oUc;var H$=mdb('org.eclipse.elk.alg.mrtree.p2order','NodeOrderer',1460);bcb(1461,1,Bqe,CUc);_.Yf=function DUc(a){return BD(a,135),vUc};_.pf=function EUc(a,b){AUc(this,BD(a,135),b)};_.a=0;var vUc;var I$=mdb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1461);bcb(1462,1,Bqe,IUc);_.Yf=function JUc(a){return BD(a,135),FUc};_.pf=function KUc(a,b){HUc(BD(a,135),b)};var FUc;var J$=mdb('org.eclipse.elk.alg.mrtree.p4route','EdgeRouter',1462);var LUc;bcb(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},RUc);_.Kf=function TUc(){return QUc(this)};_.Xf=function SUc(){return QUc(this)};var NUc,OUc;var K$=ndb(cre,'RadialLayoutPhases',495,CI,VUc,UUc);var WUc;bcb(1131,209,Mle,ZUc);_.Ze=function $Uc(a,b){var c,d,e,f,g,h;c=YUc(this,a);Odd(b,'Radial layout',c.c.length);Ccb(DD(hkd(a,(ZWc(),QWc))))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));h=aVc(a);jkd(a,(MUc(),LUc),h);if(!h){throw vbb(new Wdb('The given graph is not a tree!'))}e=Edb(ED(hkd(a,VWc)));e==0&&(e=_Uc(a));jkd(a,VWc,e);for(g=new olb(YUc(this,a));g.a<g.c.c.length;){f=BD(mlb(g),51);f.pf(a,Udd(b,1))}Qdd(b)};var L$=mdb(cre,'RadialLayoutProvider',1131);bcb(549,1,Dke,jVc);_.ue=function kVc(a,b){return iVc(this.a,this.b,BD(a,33),BD(b,33))};_.Fb=function lVc(a){return this===a};_.ve=function mVc(){return new tpb(this)};_.a=0;_.b=0;var M$=mdb(cre,'RadialUtil/lambda$0$Type',549);bcb(1375,1,ene,oVc);_.pf=function pVc(a,b){nVc(BD(a,33),b)};var N$=mdb(fre,'CalculateGraphSize',1375);bcb(442,22,{3:1,35:1,22:1,442:1,234:1},uVc);_.Kf=function vVc(){switch(this.g){case 0:return new bWc;case 1:return new NVc;case 2:return new oVc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var qVc,rVc,sVc;var O$=ndb(fre,Ene,442,CI,xVc,wVc);var yVc;bcb(645,1,{});_.e=1;_.g=0;var P$=mdb(gre,'AbstractRadiusExtensionCompaction',645);bcb(1772,645,{},KVc);_.hg=function LVc(a){var b,c,d,e,f,g,h,i,j;this.c=BD(hkd(a,(MUc(),LUc)),33);EVc(this,this.c);this.d=tXc(BD(hkd(a,(ZWc(),WWc)),293));i=BD(hkd(a,KWc),19);!!i&&DVc(this,i.a);h=ED(hkd(a,(Y9c(),T9c)));FVc(this,(uCb(h),h));j=gVc(this.c);!!this.d&&this.d.lg(j);GVc(this,j);g=new amb(OC(GC(E2,1),hre,33,0,[this.c]));for(c=0;c<2;c++){for(b=0;b<j.c.length;b++){e=new amb(OC(GC(E2,1),hre,33,0,[(tCb(b,j.c.length),BD(j.c[b],33))]));f=b<j.c.length-1?(tCb(b+1,j.c.length),BD(j.c[b+1],33)):(tCb(0,j.c.length),BD(j.c[0],33));d=b==0?BD(Ikb(j,j.c.length-1),33):(tCb(b-1,j.c.length),BD(j.c[b-1],33));IVc(this,(tCb(b,j.c.length),BD(j.c[b],33),g),d,f,e)}}};var Q$=mdb(gre,'AnnulusWedgeCompaction',1772);bcb(1374,1,ene,NVc);_.pf=function OVc(a,b){MVc(BD(a,33),b)};var R$=mdb(gre,'GeneralCompactor',1374);bcb(1771,645,{},SVc);_.hg=function TVc(a){var b,c,d,e;c=BD(hkd(a,(MUc(),LUc)),33);this.f=c;this.b=tXc(BD(hkd(a,(ZWc(),WWc)),293));e=BD(hkd(a,KWc),19);!!e&&DVc(this,e.a);d=ED(hkd(a,(Y9c(),T9c)));FVc(this,(uCb(d),d));b=gVc(c);!!this.b&&this.b.lg(b);QVc(this,b)};_.a=0;var S$=mdb(gre,'RadialCompaction',1771);bcb(1779,1,{},VVc);_.ig=function WVc(a){var b,c,d,e,f,g;this.a=a;b=0;g=gVc(a);d=0;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),33);++d;for(c=d;c<g.c.length;c++){UVc(this,e,(tCb(c,g.c.length),BD(g.c[c],33)))&&(b+=1)}}return b};var T$=mdb(ire,'CrossingMinimizationPosition',1779);bcb(1777,1,{},XVc);_.ig=function YVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=0;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);h=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));j=h.i+h.g/2;k=h.j+h.f/2;e=a.i+a.g/2;f=a.j+a.f/2;l=new d7c;l.a=j-e;l.b=k-f;g=new f7c(l.a,l.b);l6c(g,a.g,a.f);l.a-=g.a;l.b-=g.b;e=j-l.a;f=k-l.b;i=new f7c(l.a,l.b);l6c(i,h.g,h.f);l.a-=i.a;l.b-=i.b;j=e+l.a;k=f+l.b;m=j-e;n=k-f;d+=$wnd.Math.sqrt(m*m+n*n)}return d};var U$=mdb(ire,'EdgeLengthOptimization',1777);bcb(1778,1,{},ZVc);_.ig=function $Vc(a){var b,c,d,e,f,g,h,i,j,k,l;d=0;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);h=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));i=h.i+h.g/2;j=h.j+h.f/2;e=BD(hkd(h,(Y9c(),C9c)),8);f=a.i+e.a+a.g/2;g=a.j+e.b+a.f;k=i-f;l=j-g;d+=$wnd.Math.sqrt(k*k+l*l)}return d};var V$=mdb(ire,'EdgeLengthPositionOptimization',1778);bcb(1373,645,ene,bWc);_.pf=function cWc(a,b){aWc(this,BD(a,33),b)};var W$=mdb('org.eclipse.elk.alg.radial.intermediate.overlaps','RadiusExtensionOverlapRemoval',1373);bcb(426,22,{3:1,35:1,22:1,426:1},hWc);var dWc,eWc;var X$=ndb(kre,'AnnulusWedgeCriteria',426,CI,jWc,iWc);var kWc;bcb(380,22,{3:1,35:1,22:1,380:1},rWc);var mWc,nWc,oWc;var Y$=ndb(kre,Sle,380,CI,tWc,sWc);var uWc;bcb(852,1,ale,IWc);_.Qe=function JWc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lre),''),'Order ID'),'The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly.'),meb(0)),(_5c(),X5c)),JI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mre),''),'Radius'),'The radius option can be used to set the initial radius for the radial layouter.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nre),''),'Compaction'),'With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately.'),yWc),V5c),Y$),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ore),''),'Compaction Step Size'),'Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration.'),meb(1)),X5c),JI),pqb(L5c))));o4c(a,ore,nre,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pre),''),'Sorter'),'Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates.'),EWc),V5c),b_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qre),''),'Annulus Wedge Criteria'),'Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals.'),GWc),V5c),X$),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rre),''),'Translation Optimization'),'Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized.'),AWc),V5c),a_),pqb(L5c))));$Wc((new _Wc,a))};var wWc,xWc,yWc,zWc,AWc,BWc,CWc,DWc,EWc,FWc,GWc;var Z$=mdb(kre,'RadialMetaDataProvider',852);bcb(996,1,ale,_Wc);_.Qe=function aXc(a){$Wc(a)};var KWc,LWc,MWc,NWc,OWc,PWc,QWc,RWc,SWc,TWc,UWc,VWc,WWc,XWc,YWc;var _$=mdb(kre,'RadialOptions',996);bcb(997,1,{},bXc);_.$e=function cXc(){var a;return a=new ZUc,a};_._e=function dXc(a){};var $$=mdb(kre,'RadialOptions/RadialFactory',997);bcb(340,22,{3:1,35:1,22:1,340:1},kXc);var eXc,fXc,gXc,hXc;var a_=ndb(kre,'RadialTranslationStrategy',340,CI,mXc,lXc);var nXc;bcb(293,22,{3:1,35:1,22:1,293:1},uXc);var pXc,qXc,rXc;var b_=ndb(kre,'SortingStrategy',293,CI,wXc,vXc);var xXc;bcb(1449,1,Bqe,CXc);_.Yf=function DXc(a){return BD(a,33),null};_.pf=function EXc(a,b){AXc(this,BD(a,33),b)};_.c=0;var c_=mdb('org.eclipse.elk.alg.radial.p1position','EadesRadial',1449);bcb(1775,1,{},FXc);_.jg=function GXc(a){return eVc(a)};var d_=mdb(tre,'AnnulusWedgeByLeafs',1775);bcb(1776,1,{},IXc);_.jg=function JXc(a){return HXc(this,a)};var e_=mdb(tre,'AnnulusWedgeByNodeSpace',1776);bcb(1450,1,Bqe,MXc);_.Yf=function NXc(a){return BD(a,33),null};_.pf=function OXc(a,b){KXc(this,BD(a,33),b)};var f_=mdb('org.eclipse.elk.alg.radial.p2routing','StraightLineEdgeRouter',1450);bcb(811,1,{},QXc);_.kg=function RXc(a){};_.lg=function TXc(a){PXc(this,a)};var h_=mdb(ure,'IDSorter',811);bcb(1774,1,Dke,UXc);_.ue=function VXc(a,b){return SXc(BD(a,33),BD(b,33))};_.Fb=function WXc(a){return this===a};_.ve=function XXc(){return new tpb(this)};var g_=mdb(ure,'IDSorter/lambda$0$Type',1774);bcb(1773,1,{},$Xc);_.kg=function _Xc(a){YXc(this,a)};_.lg=function aYc(a){var b;if(!a.dc()){if(!this.e){b=bVc(BD(a.Xb(0),33));YXc(this,b)}PXc(this.e,a)}};var i_=mdb(ure,'PolarCoordinateSorter',1773);bcb(1136,209,Mle,bYc);_.Ze=function eYc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;Odd(b,'Rectangle Packing',1);b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));c=Edb(ED(hkd(a,(lZc(),RYc))));p=BD(hkd(a,eZc),381);s=Ccb(DD(hkd(a,ZYc)));w=Ccb(DD(hkd(a,dZc)));l=Ccb(DD(hkd(a,VYc)));A=BD(hkd(a,fZc),116);v=Edb(ED(hkd(a,jZc)));e=Ccb(DD(hkd(a,iZc)));m=Ccb(DD(hkd(a,WYc)));r=Ccb(DD(hkd(a,XYc)));F=Edb(ED(hkd(a,kZc)));C=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);r$c(C);if(r){o=new Rkb;for(i=new Fyd(C);i.e!=i.i.gc();){g=BD(Dyd(i),33);ikd(g,UYc)&&(o.c[o.c.length]=g,true)}for(j=new olb(o);j.a<j.c.c.length;){g=BD(mlb(j),33);Ftd(C,g)}mmb();Okb(o,new fYc);for(k=new olb(o);k.a<k.c.c.length;){g=BD(mlb(k),33);B=BD(hkd(g,UYc),19).a;B=$wnd.Math.min(B,C.i);vtd(C,B,g)}q=0;for(h=new Fyd(C);h.e!=h.i.gc();){g=BD(Dyd(h),33);jkd(g,TYc,meb(q));++q}}u=rfd(a);u.a-=A.b+A.c;u.b-=A.d+A.a;t=u.a;if(F<0||F<u.a){n=new nYc(c,p,s);f=jYc(n,C,v,A);b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))}else{f=new d$c(c,F,0,(k$c(),j$c))}u.a+=A.b+A.c;u.b+=A.d+A.a;if(!w){r$c(C);D=new DZc(c,l,m,e,v);t=$wnd.Math.max(u.a,f.c);f=CZc(D,C,t,u,b,a,A)}cYc(C,A);Afd(a,f.c+(A.b+A.c),f.b+(A.d+A.a),false,true);Ccb(DD(hkd(a,cZc)))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));Qdd(b)};var k_=mdb(yre,'RectPackingLayoutProvider',1136);bcb(1137,1,Dke,fYc);_.ue=function gYc(a,b){return dYc(BD(a,33),BD(b,33))};_.Fb=function hYc(a){return this===a};_.ve=function iYc(){return new tpb(this)};var j_=mdb(yre,'RectPackingLayoutProvider/lambda$0$Type',1137);bcb(1256,1,{},nYc);_.a=0;_.c=false;var l_=mdb(zre,'AreaApproximation',1256);var o_=odb(zre,'BestCandidateFilter');bcb(638,1,{526:1},oYc);_.mg=function pYc(a,b,c){var d,e,f,g,h,i;i=new Rkb;f=Pje;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),220);f=$wnd.Math.min(f,(g.c+(c.b+c.c))*(g.b+(c.d+c.a)))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);(d.c+(c.b+c.c))*(d.b+(c.d+c.a))==f&&(i.c[i.c.length]=d,true)}return i};var m_=mdb(zre,'AreaFilter',638);bcb(639,1,{526:1},qYc);_.mg=function rYc(a,b,c){var d,e,f,g,h,i;h=new Rkb;i=Pje;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),220);i=$wnd.Math.min(i,$wnd.Math.abs((f.c+(c.b+c.c))/(f.b+(c.d+c.a))-b))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);$wnd.Math.abs((d.c+(c.b+c.c))/(d.b+(c.d+c.a))-b)==i&&(h.c[h.c.length]=d,true)}return h};var n_=mdb(zre,'AspectRatioFilter',639);bcb(637,1,{526:1},uYc);_.mg=function vYc(a,b,c){var d,e,f,g,h,i;i=new Rkb;f=Qje;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),220);f=$wnd.Math.max(f,q$c(g.c+(c.b+c.c),g.b+(c.d+c.a),g.a))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);q$c(d.c+(c.b+c.c),d.b+(c.d+c.a),d.a)==f&&(i.c[i.c.length]=d,true)}return i};var p_=mdb(zre,'ScaleMeasureFilter',637);bcb(381,22,{3:1,35:1,22:1,381:1},AYc);var wYc,xYc,yYc;var q_=ndb(Are,'OptimizationGoal',381,CI,CYc,BYc);var DYc;bcb(856,1,ale,PYc);_.Qe=function QYc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bre),''),'Optimization Goal'),'Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored.'),LYc),(_5c(),V5c)),q_),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cre),''),'Shift Last Placed.'),'When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces.'),(Bcb(),true)),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dre),''),'Current position of a node in the order of nodes'),'The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ere),''),'Desired index of node'),'The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fre),''),'Only Area Approximation'),'If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gre),''),'Compact Rows'),'Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hre),''),'Fit Aspect Ratio'),'Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion.'),false),T5c),wI),pqb(K5c))));o4c(a,Hre,Jre,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ire),''),'Target Width'),'Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding.'),-1),U5c),BI),pqb(K5c))));mZc((new nZc,a))};var FYc,GYc,HYc,IYc,JYc,KYc,LYc,MYc,NYc;var r_=mdb(Are,'RectPackingMetaDataProvider',856);bcb(1004,1,ale,nZc);_.Qe=function oZc(a){mZc(a)};var RYc,SYc,TYc,UYc,VYc,WYc,XYc,YYc,ZYc,$Yc,_Yc,aZc,bZc,cZc,dZc,eZc,fZc,gZc,hZc,iZc,jZc,kZc;var t_=mdb(Are,'RectPackingOptions',1004);bcb(1005,1,{},pZc);_.$e=function qZc(){var a;return a=new bYc,a};_._e=function rZc(a){};var s_=mdb(Are,'RectPackingOptions/RectpackingFactory',1005);bcb(1257,1,{},DZc);_.a=0;_.b=false;_.c=0;_.d=0;_.e=false;_.f=false;_.g=0;var u_=mdb('org.eclipse.elk.alg.rectpacking.seconditeration','RowFillingAndCompaction',1257);bcb(187,1,{187:1},PZc);_.a=0;_.c=false;_.d=0;_.e=0;_.f=0;_.g=0;_.i=0;_.k=false;_.o=Pje;_.p=Pje;_.r=0;_.s=0;_.t=0;var x_=mdb(Lre,'Block',187);bcb(211,1,{211:1},VZc);_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var v_=mdb(Lre,'BlockRow',211);bcb(443,1,{443:1},b$c);_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;var w_=mdb(Lre,'BlockStack',443);bcb(220,1,{220:1},d$c,e$c);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;var z_=mdb(Lre,'DrawingData',220);bcb(355,22,{3:1,35:1,22:1,355:1},l$c);var f$c,g$c,h$c,i$c,j$c;var y_=ndb(Lre,'DrawingDataDescriptor',355,CI,n$c,m$c);var o$c;bcb(200,1,{200:1},x$c);_.b=0;_.c=0;_.e=0;_.f=0;var A_=mdb(Lre,'RectRow',200);bcb(756,1,{},F$c);_.j=0;var G_=mdb(Nre,une,756);bcb(1245,1,{},G$c);_.Je=function H$c(a){return S6c(a.a,a.b)};var B_=mdb(Nre,vne,1245);bcb(1246,1,{},I$c);_.Je=function J$c(a){return A$c(this.a,a)};var C_=mdb(Nre,wne,1246);bcb(1247,1,{},K$c);_.Je=function L$c(a){return B$c(this.a,a)};var D_=mdb(Nre,xne,1247);bcb(1248,1,{},M$c);_.Je=function N$c(a){return C$c(this.a,a)};var E_=mdb(Nre,'ElkGraphImporter/lambda$3$Type',1248);bcb(1249,1,{},O$c);_.Je=function P$c(a){return D$c(this.a,a)};var F_=mdb(Nre,yne,1249);bcb(1133,209,Mle,Q$c);_.Ze=function S$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(ikd(a,(d0c(),c0c))){n=GD(hkd(a,(J0c(),I0c)));f=h4c(n4c(),n);if(f){g=BD(hgd(f.f),209);g.Ze(a,Udd(b,1))}}jkd(a,Z_c,(C_c(),A_c));jkd(a,$_c,(N_c(),K_c));jkd(a,__c,(a1c(),_0c));h=BD(hkd(a,(J0c(),E0c)),19).a;Odd(b,'Overlap removal',1);Ccb(DD(hkd(a,D0c)))&&'null45scanlineOverlaps';i=new Tqb;j=new U$c(i);d=new F$c;c=z$c(d,a);k=true;e=0;while(e<h&&k){if(Ccb(DD(hkd(a,F0c)))){i.a.$b();cOb(new dOb(j),c.i);if(i.a.gc()==0){break}c.e=i}H2c(this.b);K2c(this.b,(Y$c(),V$c),(R0c(),Q0c));K2c(this.b,W$c,c.g);K2c(this.b,X$c,(s_c(),r_c));this.a=F2c(this.b,c);for(m=new olb(this.a);m.a<m.c.c.length;){l=BD(mlb(m),51);l.pf(c,Udd(b,1))}E$c(d,c);k=Ccb(DD(vNb(c,(XNb(),WNb))));++e}y$c(d,c);Qdd(b)};var I_=mdb(Nre,'OverlapRemovalLayoutProvider',1133);bcb(1134,1,{},U$c);var H_=mdb(Nre,'OverlapRemovalLayoutProvider/lambda$0$Type',1134);bcb(437,22,{3:1,35:1,22:1,437:1},Z$c);var V$c,W$c,X$c;var J_=ndb(Nre,'SPOrEPhases',437,CI,_$c,$$c);var a_c;bcb(1255,1,{},d_c);var L_=mdb(Nre,'ShrinkTree',1255);bcb(1135,209,Mle,e_c);_.Ze=function f_c(a,b){var c,d,e,f,g;if(ikd(a,(d0c(),c0c))){g=GD(hkd(a,c0c));e=h4c(n4c(),g);if(e){f=BD(hgd(e.f),209);f.Ze(a,Udd(b,1))}}d=new F$c;c=z$c(d,a);c_c(this.a,c,Udd(b,1));y$c(d,c)};var K_=mdb(Nre,'ShrinkTreeLayoutProvider',1135);bcb(300,134,{3:1,300:1,94:1,134:1},g_c);_.c=false;var M_=mdb('org.eclipse.elk.alg.spore.graph','Graph',300);bcb(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},k_c);_.Kf=function m_c(){return j_c(this)};_.Xf=function l_c(){return j_c(this)};var h_c;var N_=ndb(Ore,Sle,482,CI,o_c,n_c);var p_c;bcb(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},t_c);_.Kf=function v_c(){return new I1c};_.Xf=function u_c(){return new I1c};var r_c;var O_=ndb(Ore,'OverlapRemovalStrategy',551,CI,x_c,w_c);var y_c;bcb(430,22,{3:1,35:1,22:1,430:1},D_c);var A_c,B_c;var P_=ndb(Ore,'RootSelection',430,CI,F_c,E_c);var G_c;bcb(316,22,{3:1,35:1,22:1,316:1},O_c);var I_c,J_c,K_c,L_c,M_c;var Q_=ndb(Ore,'SpanningTreeCostFunction',316,CI,Q_c,P_c);var R_c;bcb(1002,1,ale,f0c);_.Qe=function g0c(a){e0c(a)};var T_c,U_c,V_c,W_c,X_c,Y_c,Z_c,$_c,__c,a0c,b0c,c0c;var S_=mdb(Ore,'SporeCompactionOptions',1002);bcb(1003,1,{},h0c);_.$e=function i0c(){var a;return a=new e_c,a};_._e=function j0c(a){};var R_=mdb(Ore,'SporeCompactionOptions/SporeCompactionFactory',1003);bcb(855,1,ale,B0c);_.Qe=function C0c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Qre),''),'Underlying Layout Algorithm'),'A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Vre),'structure'),'Structure Extraction Strategy'),'This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices.'),y0c),V5c),W_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rre),$re),'Tree Construction Strategy'),'Whether a minimum spanning tree or a maximum spanning tree should be constructed.'),w0c),V5c),X_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Sre),$re),'Cost Function for Spanning Tree'),'The cost function is used in the creation of the spanning tree.'),u0c),V5c),Q_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tre),$re),'Root node for spanning tree construction'),'The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen.'),null),Z5c),ZI),pqb(L5c))));o4c(a,Tre,Ure,q0c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ure),$re),'Root selection for spanning tree'),'This sets the method used to select a root node for the construction of a spanning tree'),s0c),V5c),P_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Wre),Bpe),'Compaction Strategy'),'This option defines how the compaction is applied.'),l0c),V5c),N_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xre),Bpe),'Orthogonal Compaction'),'Restricts the translation of nodes to orthogonal directions in the compaction phase.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yre),_re),'Upper limit for iterations of overlap removal'),null),meb(64)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zre),_re),'Whether to run a supplementary scanline overlap check.'),null),true),T5c),wI),pqb(L5c))));K0c((new L0c,a));e0c((new f0c,a))};var k0c,l0c,m0c,n0c,o0c,p0c,q0c,r0c,s0c,t0c,u0c,v0c,w0c,x0c,y0c,z0c;var T_=mdb(Ore,'SporeMetaDataProvider',855);bcb(_ie,1,ale,L0c);_.Qe=function M0c(a){K0c(a)};var D0c,E0c,F0c,G0c,H0c,I0c;var V_=mdb(Ore,'SporeOverlapRemovalOptions',_ie);bcb(1001,1,{},N0c);_.$e=function O0c(){var a;return a=new Q$c,a};_._e=function P0c(a){};var U_=mdb(Ore,'SporeOverlapRemovalOptions/SporeOverlapFactory',1001);bcb(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},T0c);_.Kf=function V0c(){return S0c(this)};_.Xf=function U0c(){return S0c(this)};var Q0c;var W_=ndb(Ore,'StructureExtractionStrategy',530,CI,X0c,W0c);var Y0c;bcb(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},c1c);_.Kf=function e1c(){return b1c(this)};_.Xf=function d1c(){return b1c(this)};var $0c,_0c;var X_=ndb(Ore,'TreeConstructionStrategy',429,CI,g1c,f1c);var h1c;bcb(1443,1,Bqe,k1c);_.Yf=function l1c(a){return BD(a,300),new j3c};_.pf=function m1c(a,b){j1c(BD(a,300),b)};var Z_=mdb(bse,'DelaunayTriangulationPhase',1443);bcb(1444,1,qie,n1c);_.td=function o1c(a){Ekb(this.a,BD(a,65).a)};var Y_=mdb(bse,'DelaunayTriangulationPhase/lambda$0$Type',1444);bcb(783,1,Bqe,s1c);_.Yf=function t1c(a){return BD(a,300),new j3c};_.pf=function u1c(a,b){this.ng(BD(a,300),b)};_.ng=function v1c(a,b){var c,d,e;Odd(b,'Minimum spanning tree construction',1);a.d?(d=a.d.a):(d=BD(Ikb(a.i,0),65).a);Ccb(DD(vNb(a,(XNb(),VNb))))?(e=UCb(a.e,d,(c=a.b,c))):(e=UCb(a.e,d,a.b));q1c(this,e,a);Qdd(b)};var b0=mdb(cse,'MinSTPhase',783);bcb(1446,783,Bqe,w1c);_.ng=function y1c(a,b){var c,d,e,f;Odd(b,'Maximum spanning tree construction',1);c=new z1c(a);a.d?(e=a.d.c):(e=BD(Ikb(a.i,0),65).c);Ccb(DD(vNb(a,(XNb(),VNb))))?(f=UCb(a.e,e,(d=c,d))):(f=UCb(a.e,e,c));q1c(this,f,a);Qdd(b)};var __=mdb(cse,'MaxSTPhase',1446);bcb(1447,1,{},z1c);_.Je=function A1c(a){return x1c(this.a,a)};var $_=mdb(cse,'MaxSTPhase/lambda$0$Type',1447);bcb(1445,1,qie,B1c);_.td=function C1c(a){r1c(this.a,BD(a,65))};var a0=mdb(cse,'MinSTPhase/lambda$0$Type',1445);bcb(785,1,Bqe,I1c);_.Yf=function J1c(a){return BD(a,300),new j3c};_.pf=function K1c(a,b){H1c(this,BD(a,300),b)};_.a=false;var d0=mdb(dse,'GrowTreePhase',785);bcb(786,1,qie,L1c);_.td=function M1c(a){G1c(this.a,this.b,this.c,BD(a,221))};var c0=mdb(dse,'GrowTreePhase/lambda$0$Type',786);bcb(1448,1,Bqe,Q1c);_.Yf=function R1c(a){return BD(a,300),new j3c};_.pf=function S1c(a,b){P1c(this,BD(a,300),b)};var f0=mdb(dse,'ShrinkTreeCompactionPhase',1448);bcb(784,1,qie,T1c);_.td=function U1c(a){O1c(this.a,this.b,this.c,BD(a,221))};var e0=mdb(dse,'ShrinkTreeCompactionPhase/lambda$0$Type',784);var g2=odb(yqe,'IGraphElementVisitor');bcb(860,1,{527:1},b2c);_.og=function e2c(a){var b;b=a2c(this,a);tNb(b,BD(Ohb(this.b,a),94));$1c(this,a,b)};var V1c,W1c,X1c;var m0=mdb(Nle,'LayoutConfigurator',860);var h0=odb(Nle,'LayoutConfigurator/IPropertyHolderOptionFilter');bcb(932,1,{1933:1},f2c);_.pg=function g2c(a,b){return Y1c(),!a.Xe(b)};var i0=mdb(Nle,'LayoutConfigurator/lambda$0$Type',932);bcb(933,1,{1933:1},i2c);_.pg=function j2c(a,b){return h2c(a,b)};var j0=mdb(Nle,'LayoutConfigurator/lambda$1$Type',933);bcb(931,1,{831:1},k2c);_.qg=function l2c(a,b){return Y1c(),!a.Xe(b)};var k0=mdb(Nle,'LayoutConfigurator/lambda$2$Type',931);bcb(934,1,Oie,m2c);_.Mb=function n2c(a){return d2c(this.a,this.b,BD(a,1933))};var l0=mdb(Nle,'LayoutConfigurator/lambda$3$Type',934);bcb(858,1,{},w2c);var n0=mdb(Nle,'RecursiveGraphLayoutEngine',858);bcb(296,60,Tie,x2c,y2c);var o0=mdb(Nle,'UnsupportedConfigurationException',296);bcb(453,60,Tie,z2c);var p0=mdb(Nle,'UnsupportedGraphException',453);bcb(754,1,{});var K1=mdb(yqe,'AbstractRandomListAccessor',754);bcb(500,754,{},L2c);_.rg=function N2c(){return null};_.d=true;_.e=true;_.f=0;var v0=mdb(fse,'AlgorithmAssembler',500);bcb(1236,1,Oie,O2c);_.Mb=function P2c(a){return !!BD(a,123)};var q0=mdb(fse,'AlgorithmAssembler/lambda$0$Type',1236);bcb(1237,1,{},Q2c);_.Kb=function R2c(a){return M2c(this.a,BD(a,123))};var r0=mdb(fse,'AlgorithmAssembler/lambda$1$Type',1237);bcb(1238,1,Oie,S2c);_.Mb=function T2c(a){return !!BD(a,80)};var s0=mdb(fse,'AlgorithmAssembler/lambda$2$Type',1238);bcb(1239,1,qie,U2c);_.td=function V2c(a){d3c(this.a,BD(a,80))};var t0=mdb(fse,'AlgorithmAssembler/lambda$3$Type',1239);bcb(1240,1,qie,W2c);_.td=function X2c(a){G2c(this.a,this.b,BD(a,234))};var u0=mdb(fse,'AlgorithmAssembler/lambda$4$Type',1240);bcb(1355,1,Dke,Z2c);_.ue=function $2c(a,b){return Y2c(BD(a,234),BD(b,234))};_.Fb=function _2c(a){return this===a};_.ve=function a3c(){return new tpb(this)};var w0=mdb(fse,'EnumBasedFactoryComparator',1355);bcb(80,754,{80:1},j3c);_.rg=function l3c(){return new Tqb};_.a=0;var x0=mdb(fse,'LayoutProcessorConfiguration',80);bcb(1013,1,{527:1},q3c);_.og=function u3c(a){stb(n3c,new z3c(a))};var m3c,n3c,o3c;var B0=mdb(Xke,'DeprecatedLayoutOptionReplacer',1013);bcb(1014,1,qie,v3c);_.td=function w3c(a){r3c(BD(a,160))};var y0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$0$Type',1014);bcb(1015,1,qie,x3c);_.td=function y3c(a){s3c(BD(a,160))};var z0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$1$Type',1015);bcb(1016,1,{},z3c);_.Od=function A3c(a,b){t3c(this.a,BD(a,146),BD(b,38))};var A0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$2$Type',1016);bcb(149,1,{686:1,149:1},E3c);_.Fb=function F3c(a){return C3c(this,a)};_.sg=function G3c(){return this.b};_.tg=function H3c(){return this.c};_.ne=function I3c(){return this.e};_.Hb=function J3c(){return LCb(this.c)};_.Ib=function K3c(){return 'Layout Algorithm: '+this.c};var E0=mdb(Xke,'LayoutAlgorithmData',149);bcb(263,1,{},R3c);var D0=mdb(Xke,'LayoutAlgorithmData/Builder',263);bcb(1017,1,{527:1},U3c);_.og=function V3c(a){JD(a,239)&&!Ccb(DD(a.We((Y9c(),d9c))))&&S3c(BD(a,33))};var F0=mdb(Xke,'LayoutAlgorithmResolver',1017);bcb(229,1,{686:1,229:1},W3c);_.Fb=function X3c(a){if(JD(a,229)){return dfb(this.b,BD(a,229).b)}return false};_.sg=function Y3c(){return this.a};_.tg=function Z3c(){return this.b};_.ne=function $3c(){return this.d};_.Hb=function _3c(){return LCb(this.b)};_.Ib=function a4c(){return 'Layout Type: '+this.b};var H0=mdb(Xke,'LayoutCategoryData',229);bcb(344,1,{},e4c);var G0=mdb(Xke,'LayoutCategoryData/Builder',344);bcb(867,1,{},m4c);var f4c;var c1=mdb(Xke,'LayoutMetaDataService',867);bcb(868,1,{},v4c);var J0=mdb(Xke,'LayoutMetaDataService/Registry',868);bcb(478,1,{478:1},w4c);var I0=mdb(Xke,'LayoutMetaDataService/Registry/Triple',478);bcb(869,1,gse,x4c);_.ug=function y4c(){return new d7c};var K0=mdb(Xke,'LayoutMetaDataService/lambda$0$Type',869);bcb(870,1,hse,z4c);_.vg=function A4c(a){return R6c(BD(a,8))};var L0=mdb(Xke,'LayoutMetaDataService/lambda$1$Type',870);bcb(879,1,gse,B4c);_.ug=function C4c(){return new Rkb};var M0=mdb(Xke,'LayoutMetaDataService/lambda$10$Type',879);bcb(880,1,hse,D4c);_.vg=function E4c(a){return new Tkb(BD(a,12))};var N0=mdb(Xke,'LayoutMetaDataService/lambda$11$Type',880);bcb(881,1,gse,F4c);_.ug=function G4c(){return new Psb};var O0=mdb(Xke,'LayoutMetaDataService/lambda$12$Type',881);bcb(882,1,hse,H4c);_.vg=function I4c(a){return Ru(BD(a,68))};var P0=mdb(Xke,'LayoutMetaDataService/lambda$13$Type',882);bcb(883,1,gse,J4c);_.ug=function K4c(){return new Tqb};var Q0=mdb(Xke,'LayoutMetaDataService/lambda$14$Type',883);bcb(884,1,hse,L4c);_.vg=function M4c(a){return Dx(BD(a,53))};var R0=mdb(Xke,'LayoutMetaDataService/lambda$15$Type',884);bcb(885,1,gse,N4c);_.ug=function O4c(){return new zsb};var S0=mdb(Xke,'LayoutMetaDataService/lambda$16$Type',885);bcb(886,1,hse,P4c);_.vg=function Q4c(a){return Gx(BD(a,53))};var T0=mdb(Xke,'LayoutMetaDataService/lambda$17$Type',886);bcb(887,1,gse,R4c);_.ug=function S4c(){return new Gxb};var U0=mdb(Xke,'LayoutMetaDataService/lambda$18$Type',887);bcb(888,1,hse,T4c);_.vg=function U4c(a){return Hx(BD(a,208))};var V0=mdb(Xke,'LayoutMetaDataService/lambda$19$Type',888);bcb(871,1,gse,V4c);_.ug=function W4c(){return new s7c};var W0=mdb(Xke,'LayoutMetaDataService/lambda$2$Type',871);bcb(872,1,hse,X4c);_.vg=function Y4c(a){return new t7c(BD(a,74))};var X0=mdb(Xke,'LayoutMetaDataService/lambda$3$Type',872);bcb(873,1,gse,Z4c);_.ug=function $4c(){return new H_b};var Y0=mdb(Xke,'LayoutMetaDataService/lambda$4$Type',873);bcb(874,1,hse,_4c);_.vg=function a5c(a){return new K_b(BD(a,142))};var Z0=mdb(Xke,'LayoutMetaDataService/lambda$5$Type',874);bcb(875,1,gse,b5c);_.ug=function c5c(){return new p0b};var $0=mdb(Xke,'LayoutMetaDataService/lambda$6$Type',875);bcb(876,1,hse,d5c);_.vg=function e5c(a){return new r0b(BD(a,116))};var _0=mdb(Xke,'LayoutMetaDataService/lambda$7$Type',876);bcb(877,1,gse,f5c);_.ug=function g5c(){return new _fd};var a1=mdb(Xke,'LayoutMetaDataService/lambda$8$Type',877);bcb(878,1,hse,h5c);_.vg=function i5c(a){return new agd(BD(a,373))};var b1=mdb(Xke,'LayoutMetaDataService/lambda$9$Type',878);var Q3=odb(Hle,'IProperty');bcb(23,1,{35:1,686:1,23:1,146:1},p5c);_.wd=function q5c(a){return k5c(this,BD(a,146))};_.Fb=function r5c(a){return JD(a,23)?dfb(this.f,BD(a,23).f):JD(a,146)&&dfb(this.f,BD(a,146).tg())};_.wg=function s5c(){var a;if(JD(this.b,4)){a=fvd(this.b);if(a==null){throw vbb(new Zdb(mse+this.f+"'. "+"Make sure it's type is registered with the "+(fdb(Y3),Y3.k)+jse))}return a}else{return this.b}};_.sg=function t5c(){return this.d};_.tg=function u5c(){return this.f};_.ne=function v5c(){return this.i};_.Hb=function w5c(){return LCb(this.f)};_.Ib=function x5c(){return 'Layout Option: '+this.f};var g1=mdb(Xke,'LayoutOptionData',23);bcb(24,1,{},H5c);var d1=mdb(Xke,'LayoutOptionData/Builder',24);bcb(175,22,{3:1,35:1,22:1,175:1},O5c);var I5c,J5c,K5c,L5c,M5c;var e1=ndb(Xke,'LayoutOptionData/Target',175,CI,Q5c,P5c);var R5c;bcb(277,22,{3:1,35:1,22:1,277:1},a6c);var T5c,U5c,V5c,W5c,X5c,Y5c,Z5c,$5c;var f1=ndb(Xke,'LayoutOptionData/Type',277,CI,c6c,b6c);var d6c;var f6c;var h6c;bcb(110,1,{110:1},I6c,J6c,K6c);_.Fb=function L6c(a){var b;if(a==null||!JD(a,110)){return false}b=BD(a,110);return wtb(this.c,b.c)&&wtb(this.d,b.d)&&wtb(this.b,b.b)&&wtb(this.a,b.a)};_.Hb=function M6c(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d,this.b,this.a]))};_.Ib=function N6c(){return 'Rect[x='+this.c+',y='+this.d+',w='+this.b+',h='+this.a+']'};_.a=0;_.b=0;_.c=0;_.d=0;var k1=mdb(pne,'ElkRectangle',110);bcb(8,1,{3:1,4:1,8:1,414:1},d7c,e7c,f7c,g7c);_.Fb=function h7c(a){return T6c(this,a)};_.Hb=function i7c(){return Hdb(this.a)+jeb(Hdb(this.b))};_.Jf=function k7c(b){var c,d,e,f;e=0;while(e<b.length&&j7c((BCb(e,b.length),b.charCodeAt(e)),mne)){++e}c=b.length;while(c>0&&j7c((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(e>=c){throw vbb(new Wdb('The given string does not contain any numbers.'))}f=mfb(b.substr(e,c-e),',|;|\r|\n');if(f.length!=2){throw vbb(new Wdb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Hcb(ufb(f[0]));this.b=Hcb(ufb(f[1]))}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}};_.Ib=function m7c(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var m1=mdb(pne,'KVector',8);bcb(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},s7c,t7c,u7c);_.Pc=function x7c(){return r7c(this)};_.Jf=function v7c(b){var c,d,e,f,g,h;e=mfb(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');Osb(this);try{d=0;g=0;f=0;h=0;while(d<e.length){if(e[d]!=null&&ufb(e[d]).length>0){g%2==0?(f=Hcb(e[d])):(h=Hcb(e[d]));g>0&&g%2!=0&&Dsb(this,new f7c(f,h));++g}++d}}catch(a){a=ubb(a);if(JD(a,127)){c=a;throw vbb(new Wdb('The given string does not match the expected format for vectors.'+c))}else throw vbb(a)}};_.Ib=function y7c(){var a,b,c;a=new Wfb('(');b=Jsb(this,0);while(b.b!=b.d.c){c=BD(Xsb(b),8);Qfb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var l1=mdb(pne,'KVectorChain',74);bcb(248,22,{3:1,35:1,22:1,248:1},G7c);var z7c,A7c,B7c,C7c,D7c,E7c;var o1=ndb(ose,'Alignment',248,CI,I7c,H7c);var J7c;bcb(979,1,ale,Z7c);_.Qe=function $7c(a){Y7c(a)};var L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var q1=mdb(ose,'BoxLayouterOptions',979);bcb(980,1,{},_7c);_.$e=function a8c(){var a;return a=new ged,a};_._e=function b8c(a){};var p1=mdb(ose,'BoxLayouterOptions/BoxFactory',980);bcb(291,22,{3:1,35:1,22:1,291:1},j8c);var c8c,d8c,e8c,f8c,g8c,h8c;var r1=ndb(ose,'ContentAlignment',291,CI,l8c,k8c);var m8c;bcb(684,1,ale,Z9c);_.Qe=function $9c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,sse),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tse),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),Y5c),E0),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$pe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),q8c),V5c),o1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,_le),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,use),''),'Bend Points'),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lqe),''),'Content Alignment'),'Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option.'),x8c),W5c),r1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zpe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cqe),''),Cle),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),A8c),V5c),t1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ype),''),'Edge Routing'),'What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline.'),F8c),V5c),v1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Jre),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,tpe),''),'Hierarchy Handling'),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),K8c),V5c),z1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ame),''),'Padding'),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),g9c),Y5c),j1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ame),''),'Interactive'),'Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xqe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dme),''),'Omit Node Micro Layout'),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bme),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),u9c),V5c),D1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,uqe),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),Y5c),m1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vme),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),X5c),JI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,yme),''),'Randomization Seed'),'Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time).'),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,zme),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mqe),''),'Junction Points'),'This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order.'),R8c),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pqe),''),'Comment Box'),'Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qqe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vse),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),Y5c),h1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,vqe),''),'Margins'),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),T8c),Y5c),i1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xpe),''),'No Layout'),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),false),T5c),wI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wse),''),'Scale Factor'),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),U5c),BI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xse),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yse),''),'Animation Time Factor'),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),meb(100)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zse),''),'Layout Ancestors'),'Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ase),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),meb(4000)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bse),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),meb(400)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cse),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dse),''),'Validate Graph'),'Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ese),''),'Validate Options'),'Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fse),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rse),'box'),'Box Layout Mode'),'Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better.'),u8c),V5c),O1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Lpe),zpe),'Comment Comment Spacing'),'Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mpe),zpe),'Comment Node Spacing'),'Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zle),zpe),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Npe),zpe),'Edge Spacing'),'Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xme),zpe),'Edge Label Spacing'),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ope),zpe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ppe),zpe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Spe),zpe),'Label Node Spacing'),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qpe),zpe),'Horizontal spacing between Label and Port'),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rpe),zpe),'Vertical spacing between Label and Port'),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wme),zpe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tpe),zpe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Upe),zpe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vpe),zpe),'Individual Spacing'),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),Y5c),i2),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wqe),zpe),'Additional Port Space'),'Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border.'),W9c),Y5c),i1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tqe),Jse),'Layout Partition'),'Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction).'),X5c),JI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));o4c(a,tqe,sqe,k9c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,sqe),Jse),'Layout Partitioning'),'Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle.'),i9c),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,dqe),Kse),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),V8c),Y5c),j1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gme),Kse),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),X8c),W5c),B1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gqe),Lse),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),m9c),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,hqe),Lse),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,iqe),Lse),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,jqe),Lse),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,kqe),Lse),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fme),Mse),'Node Size Constraints'),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),Z8c),W5c),I1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Eme),Mse),'Node Size Options'),'Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications.'),c9c),W5c),J1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tme),Mse),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),a9c),Y5c),m1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bqe),Mse),'Fixed Graph Size'),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nqe),Jpe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),D8c),V5c),u1),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cme),Jpe),'Inline Edge Labels'),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),false),T5c),wI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Gse),'font'),'Font Name'),'Font name used for a label.'),Z5c),ZI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Hse),'font'),'Font Size'),'Font size used for a label.'),X5c),JI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,rqe),Nse),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),Y5c),m1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,oqe),Nse),'Port Index'),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),X5c),JI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ype),Nse),'Port Side'),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),B9c),V5c),F1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wpe),Nse),'Port Border Offset'),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),U5c),BI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hme),Ose),'Port Label Placement'),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),y9c),W5c),E1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eqe),Ose),'Port Labels Next to Port'),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fqe),Ose),'Treat Port Labels as Group'),'If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_pe),Pse),'Activate Inside Self Loops'),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aqe),Pse),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),T5c),wI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$le),'edge'),'Edge Thickness'),'The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it.'),1),U5c),BI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ise),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),H8c),V5c),w1),pqb(I5c))));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sne),'Layered'),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.orthogonal'),'Orthogonal'),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,ume),'Force'),'Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.circle'),'Circle'),'Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,bre),'Tree'),'Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.planar'),'Planar'),'Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sre),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));$ad((new _ad,a));Y7c((new Z7c,a));jdd((new kdd,a))};var o8c,p8c,q8c,r8c,s8c,t8c,u8c,v8c,w8c,x8c,y8c,z8c,A8c,B8c,C8c,D8c,E8c,F8c,G8c,H8c,I8c,J8c,K8c,L8c,M8c,N8c,O8c,P8c,Q8c,R8c,S8c,T8c,U8c,V8c,W8c,X8c,Y8c,Z8c,$8c,_8c,a9c,b9c,c9c,d9c,e9c,f9c,g9c,h9c,i9c,j9c,k9c,l9c,m9c,n9c,o9c,p9c,q9c,r9c,s9c,t9c,u9c,v9c,w9c,x9c,y9c,z9c,A9c,B9c,C9c,D9c,E9c,F9c,G9c,H9c,I9c,J9c,K9c,L9c,M9c,N9c,O9c,P9c,Q9c,R9c,S9c,T9c,U9c,V9c,W9c,X9c;var s1=mdb(ose,'CoreOptions',684);bcb(103,22,{3:1,35:1,22:1,103:1},iad);var _9c,aad,bad,cad,dad;var t1=ndb(ose,Cle,103,CI,kad,jad);var lad;bcb(272,22,{3:1,35:1,22:1,272:1},rad);var nad,oad,pad;var u1=ndb(ose,'EdgeLabelPlacement',272,CI,tad,sad);var uad;bcb(218,22,{3:1,35:1,22:1,218:1},Bad);var wad,xad,yad,zad;var v1=ndb(ose,'EdgeRouting',218,CI,Dad,Cad);var Ead;bcb(312,22,{3:1,35:1,22:1,312:1},Nad);var Gad,Had,Iad,Jad,Kad,Lad;var w1=ndb(ose,'EdgeType',312,CI,Pad,Oad);var Qad;bcb(977,1,ale,_ad);_.Qe=function abd(a){$ad(a)};var Sad,Tad,Uad,Vad,Wad,Xad,Yad;var y1=mdb(ose,'FixedLayouterOptions',977);bcb(978,1,{},bbd);_.$e=function cbd(){var a;return a=new Zfd,a};_._e=function dbd(a){};var x1=mdb(ose,'FixedLayouterOptions/FixedFactory',978);bcb(334,22,{3:1,35:1,22:1,334:1},ibd);var ebd,fbd,gbd;var z1=ndb(ose,'HierarchyHandling',334,CI,kbd,jbd);var lbd;bcb(285,22,{3:1,35:1,22:1,285:1},tbd);var nbd,obd,pbd,qbd;var A1=ndb(ose,'LabelSide',285,CI,vbd,ubd);var wbd;bcb(93,22,{3:1,35:1,22:1,93:1},Ibd);var ybd,zbd,Abd,Bbd,Cbd,Dbd,Ebd,Fbd,Gbd;var B1=ndb(ose,'NodeLabelPlacement',93,CI,Lbd,Kbd);var Mbd;bcb(249,22,{3:1,35:1,22:1,249:1},Ubd);var Obd,Pbd,Qbd,Rbd,Sbd;var C1=ndb(ose,'PortAlignment',249,CI,Wbd,Vbd);var Xbd;bcb(98,22,{3:1,35:1,22:1,98:1},gcd);var Zbd,$bd,_bd,acd,bcd,ccd;var D1=ndb(ose,'PortConstraints',98,CI,icd,hcd);var jcd;bcb(273,22,{3:1,35:1,22:1,273:1},scd);var lcd,mcd,ncd,ocd,pcd,qcd;var E1=ndb(ose,'PortLabelPlacement',273,CI,wcd,vcd);var xcd;bcb(61,22,{3:1,35:1,22:1,61:1},Ycd);var zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd,Kcd,Lcd,Mcd,Ncd,Ocd,Pcd,Qcd,Rcd,Scd,Tcd;var F1=ndb(ose,'PortSide',61,CI,_cd,$cd);var bdd;bcb(981,1,ale,kdd);_.Qe=function ldd(a){jdd(a)};var ddd,edd,fdd,gdd,hdd;var H1=mdb(ose,'RandomLayouterOptions',981);bcb(982,1,{},mdd);_.$e=function ndd(){var a;return a=new Mgd,a};_._e=function odd(a){};var G1=mdb(ose,'RandomLayouterOptions/RandomFactory',982);bcb(374,22,{3:1,35:1,22:1,374:1},udd);var pdd,qdd,rdd,sdd;var I1=ndb(ose,'SizeConstraint',374,CI,wdd,vdd);var xdd;bcb(259,22,{3:1,35:1,22:1,259:1},Jdd);var zdd,Add,Bdd,Cdd,Ddd,Edd,Fdd,Gdd,Hdd;var J1=ndb(ose,'SizeOptions',259,CI,Ldd,Kdd);var Mdd;bcb(370,1,{1949:1},Zdd);_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var L1=mdb(yqe,'BasicProgressMonitor',370);bcb(972,209,Mle,ged);_.Ze=function ked(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Box layout',2);e=Gdb(ED(hkd(a,(X7c(),W7c))));f=BD(hkd(a,T7c),116);c=Ccb(DD(hkd(a,O7c)));d=Ccb(DD(hkd(a,P7c)));switch(BD(hkd(a,M7c),311).g){case 0:g=(h=new Tkb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a)),mmb(),Okb(h,new med(d)),h);i=rfd(a);j=ED(hkd(a,L7c));(j==null||(uCb(j),j)<=0)&&(j=1.3);k=ded(g,e,f,i.a,i.b,c,(uCb(j),j));Afd(a,k.a,k.b,false,true);break;default:eed(a,e,f,c);}Qdd(b)};var S1=mdb(yqe,'BoxLayoutProvider',972);bcb(973,1,Dke,med);_.ue=function ned(a,b){return led(this,BD(a,33),BD(b,33))};_.Fb=function oed(a){return this===a};_.ve=function ped(){return new tpb(this)};_.a=false;var M1=mdb(yqe,'BoxLayoutProvider/1',973);bcb(157,1,{157:1},wed,xed);_.Ib=function yed(){return this.c?_od(this.c):Fe(this.b)};var N1=mdb(yqe,'BoxLayoutProvider/Group',157);bcb(311,22,{3:1,35:1,22:1,311:1},Eed);var zed,Aed,Bed,Ced;var O1=ndb(yqe,'BoxLayoutProvider/PackingMode',311,CI,Ged,Fed);var Hed;bcb(974,1,Dke,Jed);_.ue=function Ked(a,b){return hed(BD(a,157),BD(b,157))};_.Fb=function Led(a){return this===a};_.ve=function Med(){return new tpb(this)};var P1=mdb(yqe,'BoxLayoutProvider/lambda$0$Type',974);bcb(975,1,Dke,Ned);_.ue=function Oed(a,b){return ied(BD(a,157),BD(b,157))};_.Fb=function Ped(a){return this===a};_.ve=function Qed(){return new tpb(this)};var Q1=mdb(yqe,'BoxLayoutProvider/lambda$1$Type',975);bcb(976,1,Dke,Red);_.ue=function Sed(a,b){return jed(BD(a,157),BD(b,157))};_.Fb=function Ted(a){return this===a};_.ve=function Ued(){return new tpb(this)};var R1=mdb(yqe,'BoxLayoutProvider/lambda$2$Type',976);bcb(1365,1,{831:1},Ved);_.qg=function Wed(a,b){return Vyc(),!JD(b,160)||h2c((Y1c(),X1c,BD(a,160)),b)};var T1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1365);bcb(1366,1,qie,Xed);_.td=function Yed(a){Yyc(this.a,BD(a,146))};var U1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1366);bcb(1367,1,qie,Zed);_.td=function $ed(a){BD(a,94);Vyc()};var V1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1367);bcb(1371,1,qie,_ed);_.td=function afd(a){Zyc(this.a,BD(a,94))};var W1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1371);bcb(1369,1,Oie,bfd);_.Mb=function cfd(a){return $yc(this.a,this.b,BD(a,146))};var X1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1369);bcb(1368,1,Oie,dfd);_.Mb=function efd(a){return azc(this.a,this.b,BD(a,831))};var Y1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1368);bcb(1370,1,qie,ffd);_.td=function gfd(a){_yc(this.a,this.b,BD(a,146))};var Z1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1370);bcb(935,1,{},Hfd);_.Kb=function Ifd(a){return Gfd(a)};_.Fb=function Jfd(a){return this===a};var _1=mdb(yqe,'ElkUtil/lambda$0$Type',935);bcb(936,1,qie,Kfd);_.td=function Lfd(a){ufd(this.a,this.b,BD(a,79))};_.a=0;_.b=0;var a2=mdb(yqe,'ElkUtil/lambda$1$Type',936);bcb(937,1,qie,Mfd);_.td=function Nfd(a){vfd(this.a,this.b,BD(a,202))};_.a=0;_.b=0;var b2=mdb(yqe,'ElkUtil/lambda$2$Type',937);bcb(938,1,qie,Ofd);_.td=function Pfd(a){wfd(this.a,this.b,BD(a,137))};_.a=0;_.b=0;var c2=mdb(yqe,'ElkUtil/lambda$3$Type',938);bcb(939,1,qie,Qfd);_.td=function Rfd(a){xfd(this.a,BD(a,469))};var d2=mdb(yqe,'ElkUtil/lambda$4$Type',939);bcb(342,1,{35:1,342:1},Tfd);_.wd=function Ufd(a){return Sfd(this,BD(a,236))};_.Fb=function Vfd(a){var b;if(JD(a,342)){b=BD(a,342);return this.a==b.a}return false};_.Hb=function Wfd(){return QD(this.a)};_.Ib=function Xfd(){return this.a+' (exclusive)'};_.a=0;var e2=mdb(yqe,'ExclusiveBounds/ExclusiveLowerBound',342);bcb(1138,209,Mle,Zfd);_.Ze=function $fd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;Odd(b,'Fixed Layout',1);f=BD(hkd(a,(Y9c(),E8c)),218);l=0;m=0;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);B=BD(hkd(q,(Zad(),Yad)),8);if(B){bld(q,B.a,B.b);if(BD(hkd(q,Tad),174).Hc((tdd(),pdd))){n=BD(hkd(q,Vad),8);n.a>0&&n.b>0&&Afd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new Fyd((!q.n&&(q.n=new cUd(D2,q,1,7)),q.n));j.e!=j.i.gc();){h=BD(Dyd(j),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new Fyd((!q.c&&(q.c=new cUd(F2,q,9,9)),q.c));v.e!=v.i.gc();){u=BD(Dyd(v),118);B=BD(hkd(u,Yad),8);!!B&&bld(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new Fyd((!u.n&&(u.n=new cUd(D2,u,1,7)),u.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(e);){c=BD(Rr(e),79);k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new Sr(ur($sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(Xod(jtd(c))!=a){k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Aad(),wad)){for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);for(d=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);g=pfd(c);g.b==0?jkd(c,Q8c,null):jkd(c,Q8c,g)}}}if(!Ccb(DD(hkd(a,(Zad(),Uad))))){t=BD(hkd(a,Wad),116);p=l+t.b+t.c;o=m+t.d+t.a;Afd(a,p,o,true,true)}Qdd(b)};var f2=mdb(yqe,'FixedLayoutProvider',1138);bcb(373,134,{3:1,414:1,373:1,94:1,134:1},_fd,agd);_.Jf=function dgd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=mfb(b,';,;');for(g=j,h=0,i=g.length;h<i;++h){f=g[h];d=mfb(f,'\\:');e=k4c(n4c(),d[0]);if(!e){throw vbb(new Wdb('Invalid option id: '+d[0]))}k=o5c(e,d[1]);if(k==null){throw vbb(new Wdb('Invalid option value: '+d[1]))}k==null?(!this.q&&(this.q=new Lqb),Thb(this.q,e)):(!this.q&&(this.q=new Lqb),Rhb(this.q,e,k))}}catch(a){a=ubb(a);if(JD(a,102)){c=a;throw vbb(new Xdb(c))}else throw vbb(a)}};_.Ib=function egd(){var a;a=GD(GAb(NAb((!this.q?(mmb(),mmb(),kmb):this.q).vc().Oc(),new fgd),Ayb(new pzb,new nzb,new Zyb,new _yb,OC(GC(xL,1),Kie,132,0,[]))));return a};var i2=mdb(yqe,'IndividualSpacings',373);bcb(971,1,{},fgd);_.Kb=function ggd(a){return cgd(BD(a,42))};var h2=mdb(yqe,'IndividualSpacings/lambda$0$Type',971);bcb(709,1,{},jgd);_.c=0;var j2=mdb(yqe,'InstancePool',709);bcb(1275,1,{},kgd);var l2=mdb(yqe,'LoggedGraph',1275);bcb(396,22,{3:1,35:1,22:1,396:1},qgd);var lgd,mgd,ngd,ogd;var k2=ndb(yqe,'LoggedGraph/Type',396,CI,sgd,rgd);var tgd;bcb(46,1,{20:1,46:1},vgd);_.Jc=function xgd(a){reb(this,a)};_.Fb=function wgd(a){var b,c,d;if(JD(a,46)){c=BD(a,46);b=this.a==null?c.a==null:pb(this.a,c.a);d=this.b==null?c.b==null:pb(this.b,c.b);return b&&d}else{return false}};_.Hb=function ygd(){var a,b,c,d,e,f;c=this.a==null?0:tb(this.a);a=c&aje;b=c&-65536;f=this.b==null?0:tb(this.b);d=f&aje;e=f&-65536;return a^e>>16&aje|b^d<<16};_.Kc=function zgd(){return new Bgd(this)};_.Ib=function Agd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+fcb(this.b)+')':this.b==null?'pair('+fcb(this.a)+',null)':'pair('+fcb(this.a)+','+fcb(this.b)+')'};var n2=mdb(yqe,'Pair',46);bcb(983,1,aie,Bgd);_.Nb=function Cgd(a){Rrb(this,a)};_.Ob=function Dgd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Egd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw vbb(new utb)};_.Qb=function Fgd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw vbb(new Ydb)};_.b=false;_.c=false;var m2=mdb(yqe,'Pair/1',983);bcb(448,1,{448:1},Ggd);_.Fb=function Hgd(a){return wtb(this.a,BD(a,448).a)&&wtb(this.c,BD(a,448).c)&&wtb(this.d,BD(a,448).d)&&wtb(this.b,BD(a,448).b)};_.Hb=function Igd(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function Jgd(){return '('+this.a+She+this.c+She+this.d+She+this.b+')'};var o2=mdb(yqe,'Quadruple',448);bcb(1126,209,Mle,Mgd);_.Ze=function Ngd(a,b){var c,d,e,f,g;Odd(b,'Random Layout',1);if((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i==0){Qdd(b);return}f=BD(hkd(a,(idd(),gdd)),19);!!f&&f.a!=0?(e=new Hub(f.a)):(e=new Gub);c=Gdb(ED(hkd(a,ddd)));g=Gdb(ED(hkd(a,hdd)));d=BD(hkd(a,edd),116);Lgd(a,e,c,g,d);Qdd(b)};var p2=mdb(yqe,'RandomLayoutProvider',1126);var Ogd;bcb(553,1,{});_.qf=function Sgd(){return new f7c(this.f.i,this.f.j)};_.We=function Tgd(a){if(Jsd(a,(Y9c(),s9c))){return hkd(this.f,Qgd)}return hkd(this.f,a)};_.rf=function Ugd(){return new f7c(this.f.g,this.f.f)};_.sf=function Vgd(){return this.g};_.Xe=function Wgd(a){return ikd(this.f,a)};_.tf=function Xgd(a){dld(this.f,a.a);eld(this.f,a.b)};_.uf=function Ygd(a){cld(this.f,a.a);ald(this.f,a.b)};_.vf=function Zgd(a){this.g=a};_.g=0;var Qgd;var q2=mdb(Use,'ElkGraphAdapters/AbstractElkGraphElementAdapter',553);bcb(554,1,{839:1},$gd);_.wf=function _gd(){var a,b;if(!this.b){this.b=Qu(Kkd(this.a).i);for(b=new Fyd(Kkd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),137);Ekb(this.b,new dhd(a))}}return this.b};_.b=null;var r2=mdb(Use,'ElkGraphAdapters/ElkEdgeAdapter',554);bcb(301,553,{},bhd);_.xf=function chd(){return ahd(this)};_.a=null;var s2=mdb(Use,'ElkGraphAdapters/ElkGraphAdapter',301);bcb(630,553,{181:1},dhd);var t2=mdb(Use,'ElkGraphAdapters/ElkLabelAdapter',630);bcb(629,553,{680:1},hhd);_.wf=function khd(){return ehd(this)};_.Af=function lhd(){var a;return a=BD(hkd(this.f,(Y9c(),S8c)),142),!a&&(a=new H_b),a};_.Cf=function nhd(){return fhd(this)};_.Ef=function phd(a){var b;b=new K_b(a);jkd(this.f,(Y9c(),S8c),b)};_.Ff=function qhd(a){jkd(this.f,(Y9c(),f9c),new r0b(a))};_.yf=function ihd(){return this.d};_.zf=function jhd(){var a,b;if(!this.a){this.a=new Rkb;for(b=new Sr(ur($sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function mhd(){var a,b;if(!this.c){this.c=new Rkb;for(b=new Sr(ur(_sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Df=function ohd(){return Vod(BD(this.f,33)).i!=0||Ccb(DD(BD(this.f,33).We((Y9c(),M8c))))};_.Gf=function rhd(){ghd(this,(Pgd(),Ogd))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var u2=mdb(Use,'ElkGraphAdapters/ElkNodeAdapter',629);bcb(1266,553,{838:1},thd);_.wf=function vhd(){return shd(this)};_.zf=function uhd(){var a,b;if(!this.a){this.a=Pu(BD(this.f,118).xg().i);for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function whd(){var a,b;if(!this.c){this.c=Pu(BD(this.f,118).yg().i);for(b=new Fyd(BD(this.f,118).yg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Hf=function xhd(){return BD(BD(this.f,118).We((Y9c(),A9c)),61)};_.If=function yhd(){var a,b,c,d,e,f,g,h;d=mpd(BD(this.f,118));for(c=new Fyd(BD(this.f,118).yg());c.e!=c.i.gc();){a=BD(Dyd(c),79);for(h=new Fyd((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c));h.e!=h.i.gc();){g=BD(Dyd(h),82);if(ntd(atd(g),d)){return true}else if(atd(g)==d&&Ccb(DD(hkd(a,(Y9c(),N8c))))){return true}}}for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);for(f=new Fyd((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b));f.e!=f.i.gc();){e=BD(Dyd(f),82);if(ntd(atd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var v2=mdb(Use,'ElkGraphAdapters/ElkPortAdapter',1266);bcb(1267,1,Dke,Ahd);_.ue=function Bhd(a,b){return zhd(BD(a,118),BD(b,118))};_.Fb=function Chd(a){return this===a};_.ve=function Dhd(){return new tpb(this)};var w2=mdb(Use,'ElkGraphAdapters/PortComparator',1267);var m5=odb(Vse,'EObject');var x2=odb(Wse,Xse);var y2=odb(Wse,Yse);var C2=odb(Wse,Zse);var G2=odb(Wse,'ElkShape');var z2=odb(Wse,$se);var B2=odb(Wse,_se);var A2=odb(Wse,ate);var k5=odb(Vse,bte);var i5=odb(Vse,'EFactory');var Ehd;var l5=odb(Vse,cte);var o5=odb(Vse,'EPackage');var Ghd;var Ihd,Jhd,Khd,Lhd,Mhd,Nhd,Ohd,Phd,Qhd,Rhd,Shd;var D2=odb(Wse,dte);var E2=odb(Wse,ete);var F2=odb(Wse,fte);bcb(90,1,gte);_.Jg=function Vhd(){this.Kg();return null};_.Kg=function Whd(){return null};_.Lg=function Xhd(){return this.Kg(),false};_.Mg=function Yhd(){return false};_.Ng=function Zhd(a){Uhd(this,a)};var b4=mdb(hte,'BasicNotifierImpl',90);bcb(97,90,pte);_.nh=function fjd(){return oid(this)};_.Og=function Fid(a,b){return a};_.Pg=function Gid(){throw vbb(new bgb)};_.Qg=function Hid(a){var b;return b=zUd(BD(XKd(this.Tg(),this.Vg()),18)),this.eh().ih(this,b.n,b.f,a)};_.Rg=function Iid(a,b){throw vbb(new bgb)};_.Sg=function Jid(a,b,c){return _hd(this,a,b,c)};_.Tg=function Kid(){var a;if(this.Pg()){a=this.Pg().ck();if(a){return a}}return this.zh()};_.Ug=function Lid(){return aid(this)};_.Vg=function Mid(){throw vbb(new bgb)};_.Wg=function Oid(){var a,b;b=this.ph().dk();!b&&this.Pg().ik(b=(nRd(),a=pNd(TKd(this.Tg())),a==null?mRd:new qRd(this,a)));return b};_.Xg=function Qid(a,b){return a};_.Yg=function Rid(a){var b;b=a.Gj();return !b?bLd(this.Tg(),a):a.aj()};_.Zg=function Sid(){var a;a=this.Pg();return !a?null:a.fk()};_.$g=function Tid(){return !this.Pg()?null:this.Pg().ck()};_._g=function Uid(a,b,c){return fid(this,a,b,c)};_.ah=function Vid(a){return gid(this,a)};_.bh=function Wid(a,b){return hid(this,a,b)};_.dh=function Xid(){var a;a=this.Pg();return !!a&&a.gk()};_.eh=function Yid(){throw vbb(new bgb)};_.fh=function Zid(){return jid(this)};_.gh=function $id(a,b,c,d){return kid(this,a,b,d)};_.hh=function _id(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Qj(this,this.yh(),b-this.Ah(),a,c)};_.ih=function ajd(a,b,c,d){return lid(this,a,b,d)};_.jh=function bjd(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Rj(this,this.yh(),b-this.Ah(),a,c)};_.kh=function cjd(){return !!this.Pg()&&!!this.Pg().ek()};_.lh=function djd(a){return mid(this,a)};_.mh=function ejd(a){return nid(this,a)};_.oh=function gjd(a){return rid(this,a)};_.ph=function hjd(){throw vbb(new bgb)};_.qh=function ijd(){return !this.Pg()?null:this.Pg().ek()};_.rh=function jjd(){return jid(this)};_.sh=function kjd(a,b){yid(this,a,b)};_.th=function ljd(a){this.ph().hk(a)};_.uh=function mjd(a){this.ph().kk(a)};_.vh=function njd(a){this.ph().jk(a)};_.wh=function ojd(a,b){var c,d,e,f;f=this.Zg();if(!!f&&!!a){b=Txd(f.Vk(),this,b);f.Zk(this)}d=this.eh();if(d){if((Nid(this,this.eh(),this.Vg()).Bb&Tje)!=0){e=d.fh();!!e&&(!a?e.Yk(this):!f&&e.Zk(this))}else{b=(c=this.Vg(),c>=0?this.Qg(b):this.eh().ih(this,-1-c,null,b));b=this.Sg(null,-1,b)}}this.uh(a);return b};_.xh=function pjd(a){var b,c,d,e,f,g,h,i;c=this.Tg();f=bLd(c,a);b=this.Ah();if(f>=b){return BD(a,66).Nj().Uj(this,this.yh(),f-b)}else if(f<=-1){g=e1d((O6d(),M6d),c,a);if(g){Q6d();BD(g,66).Oj()||(g=_1d(q1d(M6d,g)));e=(d=this.Yg(g),BD(d>=0?this._g(d,true,true):sid(this,g,true),153));i=g.Zj();if(i>1||i==-1){return BD(BD(e,215).hl(a,false),76)}}else{throw vbb(new Wdb(ite+a.ne()+lte))}}else if(a.$j()){return d=this.Yg(a),BD(d>=0?this._g(d,false,true):sid(this,a,false),76)}h=new nGd(this,a);return h};_.yh=function qjd(){return Aid(this)};_.zh=function rjd(){return (NFd(),MFd).S};_.Ah=function sjd(){return aLd(this.zh())};_.Bh=function tjd(a){Cid(this,a)};_.Ib=function ujd(){return Eid(this)};var B5=mdb(qte,'BasicEObjectImpl',97);var zFd;bcb(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1});_.Ch=function Djd(a){var b;b=xjd(this);return b[a]};_.Dh=function Ejd(a,b){var c;c=xjd(this);NC(c,a,b)};_.Eh=function Fjd(a){var b;b=xjd(this);NC(b,a,null)};_.Jg=function Gjd(){return BD(Ajd(this,4),126)};_.Kg=function Hjd(){throw vbb(new bgb)};_.Lg=function Ijd(){return (this.Db&4)!=0};_.Pg=function Jjd(){throw vbb(new bgb)};_.Fh=function Kjd(a){Cjd(this,2,a)};_.Rg=function Ljd(a,b){this.Db=b<<16|this.Db&255;this.Fh(a)};_.Tg=function Mjd(){return wjd(this)};_.Vg=function Njd(){return this.Db>>16};_.Wg=function Ojd(){var a,b;return nRd(),b=pNd(TKd((a=BD(Ajd(this,16),26),!a?this.zh():a))),b==null?(null,mRd):new qRd(this,b)};_.Mg=function Pjd(){return (this.Db&1)==0};_.Zg=function Qjd(){return BD(Ajd(this,128),1935)};_.$g=function Rjd(){return BD(Ajd(this,16),26)};_.dh=function Sjd(){return (this.Db&32)!=0};_.eh=function Tjd(){return BD(Ajd(this,2),49)};_.kh=function Ujd(){return (this.Db&64)!=0};_.ph=function Vjd(){throw vbb(new bgb)};_.qh=function Wjd(){return BD(Ajd(this,64),281)};_.th=function Xjd(a){Cjd(this,16,a)};_.uh=function Yjd(a){Cjd(this,128,a)};_.vh=function Zjd(a){Cjd(this,64,a)};_.yh=function $jd(){return yjd(this)};_.Db=0;var s8=mdb(qte,'MinimalEObjectImpl',114);bcb(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_.Fh=function _jd(a){this.Cb=a};_.eh=function akd(){return this.Cb};var r8=mdb(qte,'MinimalEObjectImpl/Container',115);bcb(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function kkd(a,b,c){return bkd(this,a,b,c)};_.jh=function lkd(a,b,c){return ckd(this,a,b,c)};_.lh=function mkd(a){return dkd(this,a)};_.sh=function nkd(a,b){ekd(this,a,b)};_.zh=function okd(){return Thd(),Shd};_.Bh=function pkd(a){fkd(this,a)};_.Ve=function qkd(){return gkd(this)};_.We=function rkd(a){return hkd(this,a)};_.Xe=function skd(a){return ikd(this,a)};_.Ye=function tkd(a,b){return jkd(this,a,b)};var H2=mdb(rte,'EMapPropertyHolderImpl',1985);bcb(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},xkd);_._g=function ykd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return fid(this,a,b,c)};_.lh=function zkd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return mid(this,a)};_.sh=function Akd(a,b){switch(a){case 0:vkd(this,Edb(ED(b)));return;case 1:wkd(this,Edb(ED(b)));return;}yid(this,a,b)};_.zh=function Bkd(){return Thd(),Ihd};_.Bh=function Ckd(a){switch(a){case 0:vkd(this,0);return;case 1:wkd(this,0);return;}Cid(this,a)};_.Ib=function Dkd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (x: ';Bfb(a,this.a);a.a+=', y: ';Bfb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var I2=mdb(rte,'ElkBendPointImpl',567);bcb(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Nkd(a,b,c){return Ekd(this,a,b,c)};_.hh=function Okd(a,b,c){return Fkd(this,a,b,c)};_.jh=function Pkd(a,b,c){return Gkd(this,a,b,c)};_.lh=function Qkd(a){return Hkd(this,a)};_.sh=function Rkd(a,b){Ikd(this,a,b)};_.zh=function Skd(){return Thd(),Mhd};_.Bh=function Tkd(a){Jkd(this,a)};_.zg=function Ukd(){return this.k};_.Ag=function Vkd(){return Kkd(this)};_.Ib=function Wkd(){return Mkd(this)};_.k=null;var M2=mdb(rte,'ElkGraphElementImpl',723);bcb(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function gld(a,b,c){return Xkd(this,a,b,c)};_.lh=function hld(a){return Ykd(this,a)};_.sh=function ild(a,b){Zkd(this,a,b)};_.zh=function jld(){return Thd(),Rhd};_.Bh=function kld(a){$kd(this,a)};_.Bg=function lld(){return this.f};_.Cg=function mld(){return this.g};_.Dg=function nld(){return this.i};_.Eg=function old(){return this.j};_.Fg=function pld(a,b){_kd(this,a,b)};_.Gg=function qld(a,b){bld(this,a,b)};_.Hg=function rld(a){dld(this,a)};_.Ig=function sld(a){eld(this,a)};_.Ib=function tld(){return fld(this)};_.f=0;_.g=0;_.i=0;_.j=0;var T2=mdb(rte,'ElkShapeImpl',724);bcb(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Bld(a,b,c){return uld(this,a,b,c)};_.hh=function Cld(a,b,c){return vld(this,a,b,c)};_.jh=function Dld(a,b,c){return wld(this,a,b,c)};_.lh=function Eld(a){return xld(this,a)};_.sh=function Fld(a,b){yld(this,a,b)};_.zh=function Gld(){return Thd(),Jhd};_.Bh=function Hld(a){zld(this,a)};_.xg=function Ild(){return !this.d&&(this.d=new y5d(B2,this,8,5)),this.d};_.yg=function Jld(){return !this.e&&(this.e=new y5d(B2,this,7,4)),this.e};var J2=mdb(rte,'ElkConnectableShapeImpl',725);bcb(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Tld);_.Qg=function Uld(a){return Lld(this,a)};_._g=function Vld(a,b,c){switch(a){case 3:return Mld(this);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b;case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),this.c;case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),this.a;case 7:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1)?false:true;case 8:return Bcb(),Pld(this)?true:false;case 9:return Bcb(),Qld(this)?true:false;case 10:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0)?true:false;}return Ekd(this,a,b,c)};_.hh=function Wld(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Lld(this,c):this.Cb.ih(this,-1-d,null,c)));return Kld(this,BD(a,33),c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Sxd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Sxd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Sxd(this.a,a,c);}return Fkd(this,a,b,c)};_.jh=function Xld(a,b,c){switch(b){case 3:return Kld(this,null,c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Txd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Txd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Txd(this.a,a,c);}return Gkd(this,a,b,c)};_.lh=function Yld(a){switch(a){case 3:return !!Mld(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new y5d(z2,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1));case 8:return Pld(this);case 9:return Qld(this);case 10:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0);}return Hkd(this,a)};_.sh=function Zld(a,b){switch(a){case 3:Rld(this,BD(b,33));return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);!this.b&&(this.b=new y5d(z2,this,4,7));ytd(this.b,BD(b,14));return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);!this.c&&(this.c=new y5d(z2,this,5,8));ytd(this.c,BD(b,14));return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);!this.a&&(this.a=new cUd(A2,this,6,6));ytd(this.a,BD(b,14));return;}Ikd(this,a,b)};_.zh=function $ld(){return Thd(),Khd};_.Bh=function _ld(a){switch(a){case 3:Rld(this,null);return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);return;}Jkd(this,a)};_.Ib=function amd(){return Sld(this)};var K2=mdb(rte,'ElkEdgeImpl',352);bcb(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},rmd);_.Qg=function smd(a){return cmd(this,a)};_._g=function tmd(a,b,c){switch(a){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return !this.a&&(this.a=new xMd(y2,this,5)),this.a;case 6:return fmd(this);case 7:if(b)return emd(this);return this.i;case 8:if(b)return dmd(this);return this.f;case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),this.g;case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),this.e;case 11:return this.d;}return bkd(this,a,b,c)};_.hh=function umd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?cmd(this,c):this.Cb.ih(this,-1-e,null,c)));return bmd(this,BD(a,79),c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Sxd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Sxd(this.e,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(Thd(),Lhd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((Thd(),Lhd)),a,c)};_.jh=function vmd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new xMd(y2,this,5)),Txd(this.a,a,c);case 6:return bmd(this,null,c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Txd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Txd(this.e,a,c);}return ckd(this,a,b,c)};_.lh=function wmd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!fmd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return dkd(this,a)};_.sh=function xmd(a,b){switch(a){case 1:omd(this,Edb(ED(b)));return;case 2:pmd(this,Edb(ED(b)));return;case 3:hmd(this,Edb(ED(b)));return;case 4:imd(this,Edb(ED(b)));return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);!this.a&&(this.a=new xMd(y2,this,5));ytd(this.a,BD(b,14));return;case 6:mmd(this,BD(b,79));return;case 7:lmd(this,BD(b,82));return;case 8:kmd(this,BD(b,82));return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);!this.g&&(this.g=new y5d(A2,this,9,10));ytd(this.g,BD(b,14));return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);!this.e&&(this.e=new y5d(A2,this,10,9));ytd(this.e,BD(b,14));return;case 11:jmd(this,GD(b));return;}ekd(this,a,b)};_.zh=function ymd(){return Thd(),Lhd};_.Bh=function zmd(a){switch(a){case 1:omd(this,0);return;case 2:pmd(this,0);return;case 3:hmd(this,0);return;case 4:imd(this,0);return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);return;case 6:mmd(this,null);return;case 7:lmd(this,null);return;case 8:kmd(this,null);return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);return;case 11:jmd(this,null);return;}fkd(this,a)};_.Ib=function Amd(){return qmd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var L2=mdb(rte,'ElkEdgeSectionImpl',439);bcb(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_._g=function Emd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function Fmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function Gmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function Hmd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.oh=function Imd(a){return Bmd(this,a)};_.sh=function Jmd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.uh=function Kmd(a){Cjd(this,128,a)};_.zh=function Lmd(){return jGd(),ZFd};_.Bh=function Mmd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function Nmd(){this.Bb|=1};_.Hh=function Omd(a){return Dmd(this,a)};_.Bb=0;var f6=mdb(qte,'EModelElementImpl',150);bcb(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},$md);_.Ih=function _md(a,b){return Vmd(this,a,b)};_.Jh=function and(a){var b,c,d,e,f;if(this.a!=bKd(a)||(a.Bb&256)!=0){throw vbb(new Wdb(xte+a.zb+ute))}for(d=_Kd(a);VKd(d.a).i!=0;){c=BD(nOd(d,0,(b=BD(qud(VKd(d.a),0),87),f=b.c,JD(f,88)?BD(f,26):(jGd(),_Fd))),26);if(dKd(c)){e=bKd(c).Nh().Jh(c);BD(e,49).th(a);return e}d=_Kd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new lHd(a):new _Gd(a)};_.Kh=function bnd(a,b){return Wmd(this,a,b)};_._g=function cnd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.a;}return bid(this,a-aLd((jGd(),WFd)),XKd((d=BD(Ajd(this,16),26),!d?WFd:d),a),b,c)};_.hh=function dnd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 1:!!this.a&&(c=BD(this.a,49).ih(this,4,o5,c));return Tmd(this,BD(a,235),c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Qj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.jh=function end(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 1:return Tmd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.lh=function fnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return cid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};_.sh=function gnd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:Ymd(this,BD(b,235));return;}did(this,a-aLd((jGd(),WFd)),XKd((c=BD(Ajd(this,16),26),!c?WFd:c),a),b)};_.zh=function hnd(){return jGd(),WFd};_.Bh=function ind(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:Ymd(this,null);return;}eid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};var Pmd,Qmd,Rmd;var d6=mdb(qte,'EFactoryImpl',704);bcb(zte,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},knd);_.Ih=function lnd(a,b){switch(a.yj()){case 12:return BD(b,146).tg();case 13:return fcb(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function mnd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=bKd(a),b?HLd(b.Mh(),a):-1)),a.G){case 4:return f=new Jod,f;case 6:return g=new apd,g;case 7:return h=new ppd,h;case 8:return d=new Tld,d;case 9:return c=new xkd,c;case 10:return e=new rmd,e;case 11:return i=new Bpd,i;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function nnd(a,b){switch(a.yj()){case 13:case 12:return null;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var N2=mdb(rte,'ElkGraphFactoryImpl',zte);bcb(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_.Wg=function rnd(){var a,b;b=(a=BD(Ajd(this,16),26),pNd(TKd(!a?this.zh():a)));return b==null?(nRd(),nRd(),mRd):new GRd(this,b)};_._g=function snd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.ne();}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function tnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function und(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vnd(){return jGd(),$Fd};_.Bh=function wnd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.ne=function xnd(){return this.zb};_.Lh=function ynd(a){pnd(this,a)};_.Ib=function znd(){return qnd(this)};_.zb=null;var j6=mdb(qte,'ENamedElementImpl',438);bcb(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},eod);_.Qg=function god(a){return Snd(this,a)};_._g=function hod(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb;case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?BD(this.Cb,235):null;return Ind(this);}return bid(this,a-aLd((jGd(),cGd)),XKd((d=BD(Ajd(this,16),26),!d?cGd:d),a),b,c)};_.hh=function iod(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 4:!!this.sb&&(c=BD(this.sb,49).ih(this,1,i5,c));return Jnd(this,BD(a,471),c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Sxd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Sxd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Snd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,7,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.jh=function jod(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 4:return Jnd(this,null,c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Txd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Txd(this.vb,a,c);case 7:return _hd(this,null,7,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.lh=function kod(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!Ind(this);}return cid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.oh=function lod(a){var b;b=Und(this,a);return b?b:Bmd(this,a)};_.sh=function mod(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:dod(this,GD(b));return;case 3:cod(this,GD(b));return;case 4:bod(this,BD(b,471));return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);!this.rb&&(this.rb=new jUd(this,d5,this));ytd(this.rb,BD(b,14));return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);!this.vb&&(this.vb=new gUd(o5,this,6,7));ytd(this.vb,BD(b,14));return;}did(this,a-aLd((jGd(),cGd)),XKd((c=BD(Ajd(this,16),26),!c?cGd:c),a),b)};_.vh=function nod(a){var b,c;if(!!a&&!!this.rb){for(c=new Fyd(this.rb);c.e!=c.i.gc();){b=Dyd(c);JD(b,351)&&(BD(b,351).w=null)}}Cjd(this,64,a)};_.zh=function ood(){return jGd(),cGd};_.Bh=function pod(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:dod(this,null);return;case 3:cod(this,null);return;case 4:bod(this,null);return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);return;}eid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.Gh=function qod(){Tnd(this)};_.Mh=function rod(){return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb};_.Nh=function sod(){return this.sb};_.Oh=function tod(){return this.ub};_.Ph=function uod(){return this.xb};_.Qh=function vod(){return this.yb};_.Rh=function wod(a){this.ub=a};_.Ib=function xod(){var a;if((this.Db&64)!=0)return qnd(this);a=new Jfb(qnd(this));a.a+=' (nsURI: ';Efb(a,this.yb);a.a+=', nsPrefix: ';Efb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var And;var t6=mdb(qte,'EPackageImpl',179);bcb(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Bod);_.q=false;_.r=false;var yod=false;var O2=mdb(rte,'ElkGraphPackageImpl',555);bcb(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Jod);_.Qg=function Kod(a){return Eod(this,a)};_._g=function Lod(a,b,c){switch(a){case 7:return Fod(this);case 8:return this.a;}return Xkd(this,a,b,c)};_.hh=function Mod(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Eod(this,c):this.Cb.ih(this,-1-d,null,c)));return Dod(this,BD(a,160),c);}return Fkd(this,a,b,c)};_.jh=function Nod(a,b,c){if(b==7){return Dod(this,null,c)}return Gkd(this,a,b,c)};_.lh=function Ood(a){switch(a){case 7:return !!Fod(this);case 8:return !dfb('',this.a);}return Ykd(this,a)};_.sh=function Pod(a,b){switch(a){case 7:God(this,BD(b,160));return;case 8:Hod(this,GD(b));return;}Zkd(this,a,b)};_.zh=function Qod(){return Thd(),Nhd};_.Bh=function Rod(a){switch(a){case 7:God(this,null);return;case 8:Hod(this,'');return;}$kd(this,a)};_.Ib=function Sod(){return Iod(this)};_.a='';var P2=mdb(rte,'ElkLabelImpl',354);bcb(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},apd);_.Qg=function bpd(a){return Uod(this,a)};_._g=function cpd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),this.c;case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a;case 11:return Xod(this);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),this.b;case 13:return Bcb(),!this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0?true:false;}return uld(this,a,b,c)};_.hh=function dpd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Sxd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Sxd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Uod(this,c):this.Cb.ih(this,-1-d,null,c)));return Tod(this,BD(a,33),c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Sxd(this.b,a,c);}return vld(this,a,b,c)};_.jh=function epd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Txd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Txd(this.a,a,c);case 11:return Tod(this,null,c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Txd(this.b,a,c);}return wld(this,a,b,c)};_.lh=function fpd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!Xod(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0;}return xld(this,a)};_.sh=function gpd(a,b){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);!this.c&&(this.c=new cUd(F2,this,9,9));ytd(this.c,BD(b,14));return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);!this.a&&(this.a=new cUd(E2,this,10,11));ytd(this.a,BD(b,14));return;case 11:$od(this,BD(b,33));return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);!this.b&&(this.b=new cUd(B2,this,12,3));ytd(this.b,BD(b,14));return;}yld(this,a,b)};_.zh=function hpd(){return Thd(),Ohd};_.Bh=function ipd(a){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);return;case 11:$od(this,null);return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);return;}zld(this,a)};_.Ib=function jpd(){return _od(this)};var Q2=mdb(rte,'ElkNodeImpl',239);bcb(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ppd);_.Qg=function qpd(a){return lpd(this,a)};_._g=function rpd(a,b,c){if(a==9){return mpd(this)}return uld(this,a,b,c)};_.hh=function spd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?lpd(this,c):this.Cb.ih(this,-1-d,null,c)));return kpd(this,BD(a,33),c);}return vld(this,a,b,c)};_.jh=function tpd(a,b,c){if(b==9){return kpd(this,null,c)}return wld(this,a,b,c)};_.lh=function upd(a){if(a==9){return !!mpd(this)}return xld(this,a)};_.sh=function vpd(a,b){switch(a){case 9:npd(this,BD(b,33));return;}yld(this,a,b)};_.zh=function wpd(){return Thd(),Phd};_.Bh=function xpd(a){switch(a){case 9:npd(this,null);return;}zld(this,a)};_.Ib=function ypd(){return opd(this)};var R2=mdb(rte,'ElkPortImpl',186);var J4=odb(Tte,'BasicEMap/Entry');bcb(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},Bpd);_.Fb=function Hpd(a){return this===a};_.cd=function Jpd(){return this.b};_.Hb=function Lpd(){return FCb(this)};_.Uh=function Npd(a){zpd(this,BD(a,146))};_._g=function Cpd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return fid(this,a,b,c)};_.lh=function Dpd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return mid(this,a)};_.sh=function Epd(a,b){switch(a){case 0:zpd(this,BD(b,146));return;case 1:Apd(this,b);return;}yid(this,a,b)};_.zh=function Fpd(){return Thd(),Qhd};_.Bh=function Gpd(a){switch(a){case 0:zpd(this,null);return;case 1:Apd(this,null);return;}Cid(this,a)};_.Sh=function Ipd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.dd=function Kpd(){return this.c};_.Th=function Mpd(a){this.a=a};_.ed=function Opd(a){var b;b=this.c;Apd(this,a);return b};_.Ib=function Ppd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Ufb;Qfb(Qfb(Qfb(a,this.b?this.b.tg():Xhe),gne),xfb(this.c));return a.a};_.a=-1;_.c=null;var S2=mdb(rte,'ElkPropertyToValueMapEntryImpl',1092);bcb(984,1,{},bqd);var U2=mdb(Wte,'JsonAdapter',984);bcb(210,60,Tie,cqd);var V2=mdb(Wte,'JsonImportException',210);bcb(857,1,{},ird);var J3=mdb(Wte,'JsonImporter',857);bcb(891,1,{},jrd);var W2=mdb(Wte,'JsonImporter/lambda$0$Type',891);bcb(892,1,{},krd);var X2=mdb(Wte,'JsonImporter/lambda$1$Type',892);bcb(900,1,{},lrd);var Y2=mdb(Wte,'JsonImporter/lambda$10$Type',900);bcb(902,1,{},mrd);var Z2=mdb(Wte,'JsonImporter/lambda$11$Type',902);bcb(903,1,{},nrd);var $2=mdb(Wte,'JsonImporter/lambda$12$Type',903);bcb(909,1,{},ord);var _2=mdb(Wte,'JsonImporter/lambda$13$Type',909);bcb(908,1,{},prd);var a3=mdb(Wte,'JsonImporter/lambda$14$Type',908);bcb(904,1,{},qrd);var b3=mdb(Wte,'JsonImporter/lambda$15$Type',904);bcb(905,1,{},rrd);var c3=mdb(Wte,'JsonImporter/lambda$16$Type',905);bcb(906,1,{},srd);var d3=mdb(Wte,'JsonImporter/lambda$17$Type',906);bcb(907,1,{},trd);var e3=mdb(Wte,'JsonImporter/lambda$18$Type',907);bcb(912,1,{},urd);var f3=mdb(Wte,'JsonImporter/lambda$19$Type',912);bcb(893,1,{},vrd);var g3=mdb(Wte,'JsonImporter/lambda$2$Type',893);bcb(910,1,{},wrd);var h3=mdb(Wte,'JsonImporter/lambda$20$Type',910);bcb(911,1,{},xrd);var i3=mdb(Wte,'JsonImporter/lambda$21$Type',911);bcb(915,1,{},yrd);var j3=mdb(Wte,'JsonImporter/lambda$22$Type',915);bcb(913,1,{},zrd);var k3=mdb(Wte,'JsonImporter/lambda$23$Type',913);bcb(914,1,{},Ard);var l3=mdb(Wte,'JsonImporter/lambda$24$Type',914);bcb(917,1,{},Brd);var m3=mdb(Wte,'JsonImporter/lambda$25$Type',917);bcb(916,1,{},Crd);var n3=mdb(Wte,'JsonImporter/lambda$26$Type',916);bcb(918,1,qie,Drd);_.td=function Erd(a){Bqd(this.b,this.a,GD(a))};var o3=mdb(Wte,'JsonImporter/lambda$27$Type',918);bcb(919,1,qie,Frd);_.td=function Grd(a){Cqd(this.b,this.a,GD(a))};var p3=mdb(Wte,'JsonImporter/lambda$28$Type',919);bcb(920,1,{},Hrd);var q3=mdb(Wte,'JsonImporter/lambda$29$Type',920);bcb(896,1,{},Ird);var r3=mdb(Wte,'JsonImporter/lambda$3$Type',896);bcb(921,1,{},Jrd);var s3=mdb(Wte,'JsonImporter/lambda$30$Type',921);bcb(922,1,{},Krd);var t3=mdb(Wte,'JsonImporter/lambda$31$Type',922);bcb(923,1,{},Lrd);var u3=mdb(Wte,'JsonImporter/lambda$32$Type',923);bcb(924,1,{},Mrd);var v3=mdb(Wte,'JsonImporter/lambda$33$Type',924);bcb(925,1,{},Nrd);var w3=mdb(Wte,'JsonImporter/lambda$34$Type',925);bcb(859,1,{},Prd);var x3=mdb(Wte,'JsonImporter/lambda$35$Type',859);bcb(929,1,{},Rrd);var y3=mdb(Wte,'JsonImporter/lambda$36$Type',929);bcb(926,1,qie,Srd);_.td=function Trd(a){Lqd(this.a,BD(a,469))};var z3=mdb(Wte,'JsonImporter/lambda$37$Type',926);bcb(927,1,qie,Urd);_.td=function Vrd(a){Mqd(this.a,this.b,BD(a,202))};var A3=mdb(Wte,'JsonImporter/lambda$38$Type',927);bcb(928,1,qie,Wrd);_.td=function Xrd(a){Nqd(this.a,this.b,BD(a,202))};var B3=mdb(Wte,'JsonImporter/lambda$39$Type',928);bcb(894,1,{},Yrd);var C3=mdb(Wte,'JsonImporter/lambda$4$Type',894);bcb(930,1,qie,Zrd);_.td=function $rd(a){Oqd(this.a,BD(a,8))};var D3=mdb(Wte,'JsonImporter/lambda$40$Type',930);bcb(895,1,{},_rd);var E3=mdb(Wte,'JsonImporter/lambda$5$Type',895);bcb(899,1,{},asd);var F3=mdb(Wte,'JsonImporter/lambda$6$Type',899);bcb(897,1,{},bsd);var G3=mdb(Wte,'JsonImporter/lambda$7$Type',897);bcb(898,1,{},csd);var H3=mdb(Wte,'JsonImporter/lambda$8$Type',898);bcb(901,1,{},dsd);var I3=mdb(Wte,'JsonImporter/lambda$9$Type',901);bcb(948,1,qie,msd);_.td=function nsd(a){Qpd(this.a,new yC(GD(a)))};var K3=mdb(Wte,'JsonMetaDataConverter/lambda$0$Type',948);bcb(949,1,qie,osd);_.td=function psd(a){isd(this.a,BD(a,237))};var L3=mdb(Wte,'JsonMetaDataConverter/lambda$1$Type',949);bcb(950,1,qie,qsd);_.td=function rsd(a){jsd(this.a,BD(a,149))};var M3=mdb(Wte,'JsonMetaDataConverter/lambda$2$Type',950);bcb(951,1,qie,ssd);_.td=function tsd(a){ksd(this.a,BD(a,175))};var N3=mdb(Wte,'JsonMetaDataConverter/lambda$3$Type',951);bcb(237,22,{3:1,35:1,22:1,237:1},Dsd);var usd,vsd,wsd,xsd,ysd,zsd,Asd,Bsd;var O3=ndb(Hle,'GraphFeature',237,CI,Fsd,Esd);var Gsd;bcb(13,1,{35:1,146:1},Lsd,Msd,Nsd,Osd);_.wd=function Psd(a){return Isd(this,BD(a,146))};_.Fb=function Qsd(a){return Jsd(this,a)};_.wg=function Rsd(){return Ksd(this)};_.tg=function Ssd(){return this.b};_.Hb=function Tsd(){return LCb(this.b)};_.Ib=function Usd(){return this.b};var T3=mdb(Hle,'Property',13);bcb(818,1,Dke,Wsd);_.ue=function Xsd(a,b){return Vsd(this,BD(a,94),BD(b,94))};_.Fb=function Ysd(a){return this===a};_.ve=function Zsd(){return new tpb(this)};var S3=mdb(Hle,'PropertyHolderComparator',818);bcb(695,1,aie,qtd);_.Nb=function rtd(a){Rrb(this,a)};_.Pb=function ttd(){return ptd(this)};_.Qb=function utd(){Srb()};_.Ob=function std(){return !!this.a};var U3=mdb(jue,'ElkGraphUtil/AncestorIterator',695);var T4=odb(Tte,'EList');bcb(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1});_.Vc=function Jtd(a,b){vtd(this,a,b)};_.Fc=function Ktd(a){return wtd(this,a)};_.Wc=function Ltd(a,b){return xtd(this,a,b)};_.Gc=function Mtd(a){return ytd(this,a)};_.Zh=function Ntd(){return new $yd(this)};_.$h=function Otd(){return new bzd(this)};_._h=function Ptd(a){return ztd(this,a)};_.ai=function Qtd(){return true};_.bi=function Rtd(a,b){};_.ci=function Std(){};_.di=function Ttd(a,b){Atd(this,a,b)};_.ei=function Utd(a,b,c){};_.fi=function Vtd(a,b){};_.gi=function Wtd(a,b,c){};_.Fb=function Xtd(a){return Btd(this,a)};_.Hb=function Ytd(){return Etd(this)};_.hi=function Ztd(){return false};_.Kc=function $td(){return new Fyd(this)};_.Yc=function _td(){return new Oyd(this)};_.Zc=function aud(a){var b;b=this.gc();if(a<0||a>b)throw vbb(new Cyd(a,b));return new Pyd(this,a)};_.ji=function bud(a,b){this.ii(a,this.Xc(b))};_.Mc=function cud(a){return Ftd(this,a)};_.li=function dud(a,b){return b};_._c=function eud(a,b){return Gtd(this,a,b)};_.Ib=function fud(){return Htd(this)};_.ni=function gud(){return true};_.oi=function hud(a,b){return Itd(this,b)};var p4=mdb(Tte,'AbstractEList',67);bcb(63,67,oue,yud,zud,Aud);_.Vh=function Bud(a,b){return iud(this,a,b)};_.Wh=function Cud(a){return jud(this,a)};_.Xh=function Dud(a,b){kud(this,a,b)};_.Yh=function Eud(a){lud(this,a)};_.pi=function Fud(a){return nud(this,a)};_.$b=function Gud(){oud(this)};_.Hc=function Hud(a){return pud(this,a)};_.Xb=function Iud(a){return qud(this,a)};_.qi=function Jud(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b<a&&(b=a);this.g=this.ri(b);d!=null&&$fb(d,0,this.g,0,this.i)}};_.Xc=function Kud(a){return rud(this,a)};_.dc=function Lud(){return this.i==0};_.ii=function Mud(a,b){return sud(this,a,b)};_.ri=function Nud(a){return KC(SI,Uhe,1,a,5,1)};_.ki=function Oud(a){return this.g[a]};_.$c=function Pud(a){return tud(this,a)};_.mi=function Qud(a,b){return uud(this,a,b)};_.gc=function Rud(){return this.i};_.Pc=function Sud(){return wud(this)};_.Qc=function Tud(a){return xud(this,a)};_.i=0;var y4=mdb(Tte,'BasicEList',63);var X4=odb(Tte,'TreeIterator');bcb(694,63,pue);_.Nb=function Xud(a){Rrb(this,a)};_.Ob=function Yud(){return this.g==null&&!this.c?Uud(this):this.g==null||this.i!=0&&BD(this.g[this.i-1],47).Ob()};_.Pb=function Zud(){return Vud(this)};_.Qb=function $ud(){if(!this.e){throw vbb(new Zdb('There is no valid object to remove.'))}this.e.Qb()};_.c=false;var q4=mdb(Tte,'AbstractTreeIterator',694);bcb(685,694,pue,_ud);_.si=function avd(a){var b;b=BD(a,56).Wg().Kc();JD(b,279)&&BD(b,279).Nk(new bvd);return b};var W3=mdb(jue,'ElkGraphUtil/PropertiesSkippingTreeIterator',685);bcb(952,1,{},bvd);var V3=mdb(jue,'ElkGraphUtil/PropertiesSkippingTreeIterator/1',952);var cvd,dvd;var Y3=mdb(jue,'ElkReflect',null);bcb(889,1,hse,jvd);_.vg=function kvd(a){return evd(),sqb(BD(a,174))};var X3=mdb(jue,'ElkReflect/lambda$0$Type',889);var lvd;var W4=odb(Tte,'ResourceLocator');bcb(1051,1,{});var N4=mdb(Tte,'DelegatingResourceLocator',1051);bcb(1052,1051,{});var Z3=mdb('org.eclipse.emf.common','EMFPlugin',1052);var $3=odb(cve,'Adapter');var _3=odb(cve,'Notification');bcb(1153,1,dve);_.ti=function vvd(){return this.d};_.ui=function wvd(a){};_.vi=function xvd(a){this.d=a};_.wi=function yvd(a){this.d==a&&(this.d=null)};_.d=null;var a4=mdb(hte,'AdapterImpl',1153);bcb(1995,67,eve);_.Vh=function Fvd(a,b){return zvd(this,a,b)};_.Wh=function Gvd(a){var b,c,d;++this.j;if(a.dc()){return false}else{b=this.Vi();for(d=a.Kc();d.Ob();){c=d.Pb();this.Ii(this.oi(b,c));++b}return true}};_.Xh=function Hvd(a,b){Avd(this,a,b)};_.Yh=function Ivd(a){Bvd(this,a)};_.Gi=function Jvd(){return this.Ji()};_.$b=function Kvd(){Cvd(this,this.Vi(),this.Wi())};_.Hc=function Lvd(a){return this.Li(a)};_.Ic=function Mvd(a){return this.Mi(a)};_.Hi=function Nvd(a,b){this.Si().jm()};_.Ii=function Ovd(a){this.Si().jm()};_.Ji=function Pvd(){return this.Si()};_.Ki=function Qvd(){this.Si().jm()};_.Li=function Rvd(a){return this.Si().jm()};_.Mi=function Svd(a){return this.Si().jm()};_.Ni=function Tvd(a){return this.Si().jm()};_.Oi=function Uvd(a){return this.Si().jm()};_.Pi=function Vvd(){return this.Si().jm()};_.Qi=function Wvd(a){return this.Si().jm()};_.Ri=function Xvd(){return this.Si().jm()};_.Ti=function Yvd(a){return this.Si().jm()};_.Ui=function Zvd(a,b){return this.Si().jm()};_.Vi=function $vd(){return this.Si().jm()};_.Wi=function _vd(){return this.Si().jm()};_.Xi=function awd(a){return this.Si().jm()};_.Yi=function bwd(){return this.Si().jm()};_.Fb=function cwd(a){return this.Ni(a)};_.Xb=function dwd(a){return this.li(a,this.Oi(a))};_.Hb=function ewd(){return this.Pi()};_.Xc=function fwd(a){return this.Qi(a)};_.dc=function gwd(){return this.Ri()};_.ii=function hwd(a,b){return Dvd(this,a,b)};_.ki=function iwd(a){return this.Oi(a)};_.$c=function jwd(a){return Evd(this,a)};_.Mc=function kwd(a){var b;b=this.Xc(a);if(b>=0){this.$c(b);return true}else{return false}};_.mi=function lwd(a,b){return this.Ui(a,this.oi(a,b))};_.gc=function mwd(){return this.Vi()};_.Pc=function nwd(){return this.Wi()};_.Qc=function owd(a){return this.Xi(a)};_.Ib=function pwd(){return this.Yi()};var M4=mdb(Tte,'DelegatingEList',1995);bcb(1996,1995,eve);_.Vh=function xwd(a,b){return qwd(this,a,b)};_.Wh=function ywd(a){return this.Vh(this.Vi(),a)};_.Xh=function zwd(a,b){rwd(this,a,b)};_.Yh=function Awd(a){swd(this,a)};_.ai=function Bwd(){return !this.bj()};_.$b=function Cwd(){vwd(this)};_.Zi=function Dwd(a,b,c,d,e){return new Cxd(this,a,b,c,d,e)};_.$i=function Ewd(a){Uhd(this.Ai(),a)};_._i=function Fwd(){return null};_.aj=function Gwd(){return -1};_.Ai=function Hwd(){return null};_.bj=function Iwd(){return false};_.cj=function Jwd(a,b){return b};_.dj=function Kwd(a,b){return b};_.ej=function Lwd(){return false};_.fj=function Mwd(){return !this.Ri()};_.ii=function Nwd(a,b){var c,d;if(this.ej()){d=this.fj();c=Dvd(this,a,b);this.$i(this.Zi(7,meb(b),c,a,d));return c}else{return Dvd(this,a,b)}};_.$c=function Owd(a){var b,c,d,e;if(this.ej()){c=null;d=this.fj();b=this.Zi(4,e=Evd(this,a),null,a,d);if(this.bj()&&!!e){c=this.dj(e,c);if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}else{if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}return e}else{e=Evd(this,a);if(this.bj()&&!!e){c=this.dj(e,null);!!c&&c.Fi()}return e}};_.mi=function Pwd(a,b){return wwd(this,a,b)};var d4=mdb(hte,'DelegatingNotifyingListImpl',1996);bcb(143,1,fve);_.Ei=function pxd(a){return Qwd(this,a)};_.Fi=function qxd(){Rwd(this)};_.xi=function rxd(){return this.d};_._i=function sxd(){return null};_.gj=function txd(){return null};_.yi=function uxd(a){return -1};_.zi=function vxd(){return $wd(this)};_.Ai=function wxd(){return null};_.Bi=function xxd(){return hxd(this)};_.Ci=function yxd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.hj=function zxd(){return false};_.Di=function Axd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.xi();switch(e){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}}}}case 4:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.Ci();this.d=6;l=new zud(2);if(i<=g){wtd(l,this.n);wtd(l,a.Bi());this.g=OC(GC(WD,1),oje,25,15,[this.o=i,g+1])}else{wtd(l,a.Bi());wtd(l,this.n);this.g=OC(GC(WD,1),oje,25,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);g=a.Ci();k=BD(this.g,48);d=KC(WD,oje,25,k.length+1,15,1);b=0;while(b<k.length){h=k[b];if(h<=g){d[b++]=h;++g}else{break}}c=BD(this.n,15);c.Vc(b,a.Bi());d[b]=g;while(++b<d.length){d[b]=k[b-1]}this.g=d;j||(this.o=-2-d[0]);return true}break}}break}}return false};_.Ib=function Bxd(){var a,b,c,d;d=new Jfb(hdb(this.gm)+'@'+(b=tb(this)>>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Cfb(d,this.d);break}}ixd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Cfb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Dfb(d,this.Ai());d.a+=', feature: ';Dfb(d,this._i());d.a+=', oldValue: ';Dfb(d,hxd(this));d.a+=', newValue: ';if(this.d==6&&JD(this.g,48)){c=BD(this.g,48);d.a+='[';for(a=0;a<c.length;){d.a+=c[a];++a<c.length&&(d.a+=She,d)}d.a+=']'}else{Dfb(d,$wd(this))}d.a+=', isTouch: ';Ffb(d,ixd(this));d.a+=', wasSet: ';Ffb(d,jxd(this));d.a+=')';return d.a};_.d=0;_.e=0;_.f=0;_.j=0;_.k=0;_.o=0;_.p=0;var f4=mdb(hte,'NotificationImpl',143);bcb(1167,143,fve,Cxd);_._i=function Dxd(){return this.a._i()};_.yi=function Exd(a){return this.a.aj()};_.Ai=function Fxd(){return this.a.Ai()};var c4=mdb(hte,'DelegatingNotifyingListImpl/1',1167);bcb(242,63,oue,Hxd,Ixd);_.Fc=function Jxd(a){return Gxd(this,BD(a,366))};_.Ei=function Kxd(a){return Gxd(this,a)};_.Fi=function Lxd(){var a,b,c;for(a=0;a<this.i;++a){b=BD(this.g[a],366);c=b.Ai();c!=null&&b.xi()!=-1&&BD(c,92).Ng(b)}};_.ri=function Mxd(a){return KC(_3,Uhe,366,a,0,1)};var e4=mdb(hte,'NotificationChainImpl',242);bcb(1378,90,gte);_.Kg=function Nxd(){return this.e};_.Mg=function Oxd(){return (this.f&1)!=0};_.f=1;var g4=mdb(hte,'NotifierImpl',1378);bcb(1993,63,oue);_.Vh=function $xd(a,b){return Pxd(this,a,b)};_.Wh=function _xd(a){return this.Vh(this.i,a)};_.Xh=function ayd(a,b){Qxd(this,a,b)};_.Yh=function byd(a){Rxd(this,a)};_.ai=function cyd(){return !this.bj()};_.$b=function dyd(){Uxd(this)};_.Zi=function eyd(a,b,c,d,e){return new vyd(this,a,b,c,d,e)};_.$i=function fyd(a){Uhd(this.Ai(),a)};_._i=function gyd(){return null};_.aj=function hyd(){return -1};_.Ai=function iyd(){return null};_.bj=function jyd(){return false};_.ij=function kyd(){return false};_.cj=function lyd(a,b){return b};_.dj=function myd(a,b){return b};_.ej=function nyd(){return false};_.fj=function oyd(){return this.i!=0};_.ii=function pyd(a,b){return Wxd(this,a,b)};_.$c=function qyd(a){return Xxd(this,a)};_.mi=function ryd(a,b){return Zxd(this,a,b)};_.jj=function syd(a,b){return b};_.kj=function tyd(a,b){return b};_.lj=function uyd(a,b,c){return c};var i4=mdb(hte,'NotifyingListImpl',1993);bcb(1166,143,fve,vyd);_._i=function wyd(){return this.a._i()};_.yi=function xyd(a){return this.a.aj()};_.Ai=function yyd(){return this.a.Ai()};var h4=mdb(hte,'NotifyingListImpl/1',1166);bcb(953,63,oue,zyd);_.Hc=function Ayd(a){if(this.i>10){if(!this.b||this.c.j!=this.a){this.b=new Vqb(this);this.a=this.j}return Rqb(this.b,a)}else{return pud(this,a)}};_.ni=function Byd(){return true};_.a=0;var j4=mdb(Tte,'AbstractEList/1',953);bcb(295,73,Mje,Cyd);var k4=mdb(Tte,'AbstractEList/BasicIndexOutOfBoundsException',295);bcb(40,1,aie,Fyd);_.Nb=function Iyd(a){Rrb(this,a)};_.mj=function Gyd(){if(this.i.j!=this.f){throw vbb(new Apb)}};_.nj=function Hyd(){return Dyd(this)};_.Ob=function Jyd(){return this.e!=this.i.gc()};_.Pb=function Kyd(){return this.nj()};_.Qb=function Lyd(){Eyd(this)};_.e=0;_.f=0;_.g=-1;var l4=mdb(Tte,'AbstractEList/EIterator',40);bcb(278,40,jie,Oyd,Pyd);_.Qb=function Xyd(){Eyd(this)};_.Rb=function Qyd(a){Myd(this,a)};_.oj=function Ryd(){var b;try{b=this.d.Xb(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.pj=function Syd(a){Nyd(this,a)};_.Sb=function Tyd(){return this.e!=0};_.Tb=function Uyd(){return this.e};_.Ub=function Vyd(){return this.oj()};_.Vb=function Wyd(){return this.e-1};_.Wb=function Yyd(a){this.pj(a)};var m4=mdb(Tte,'AbstractEList/EListIterator',278);bcb(341,40,aie,$yd);_.nj=function _yd(){return Zyd(this)};_.Qb=function azd(){throw vbb(new bgb)};var n4=mdb(Tte,'AbstractEList/NonResolvingEIterator',341);bcb(385,278,jie,bzd,czd);_.Rb=function dzd(a){throw vbb(new bgb)};_.nj=function ezd(){var b;try{b=this.c.ki(this.e);this.mj();this.g=this.e++;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.oj=function fzd(){var b;try{b=this.c.ki(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.Qb=function gzd(){throw vbb(new bgb)};_.Wb=function hzd(a){throw vbb(new bgb)};var o4=mdb(Tte,'AbstractEList/NonResolvingEListIterator',385);bcb(1982,67,ive);_.Vh=function pzd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=BD(Ajd(this.a,4),126);k=j==null?0:j.length;m=k+e;d=nzd(this,m);l=k-a;l>0&&$fb(j,a,d,a+e,l);i=b.Kc();for(g=0;g<e;++g){h=i.Pb();c=a+g;lzd(d,c,Itd(this,h))}b0d(this,d);for(f=0;f<e;++f){h=d[a];this.bi(a,h);++a}return true}else{++this.j;return false}};_.Wh=function qzd(a){var b,c,d,e,f,g,h,i,j;d=a.gc();if(d!=0){i=(c=BD(Ajd(this.a,4),126),c==null?0:c.length);j=i+d;b=nzd(this,j);h=a.Kc();for(f=i;f<j;++f){g=h.Pb();lzd(b,f,Itd(this,g))}b0d(this,b);for(e=i;e<j;++e){g=b[e];this.bi(e,g)}return true}else{++this.j;return false}};_.Xh=function rzd(a,b){var c,d,e,f;d=BD(Ajd(this.a,4),126);e=d==null?0:d.length;c=nzd(this,e+1);f=Itd(this,b);a!=e&&$fb(d,a,c,a+1,e-a);NC(c,a,f);b0d(this,c);this.bi(a,b)};_.Yh=function szd(a){var b,c,d;d=(c=BD(Ajd(this.a,4),126),c==null?0:c.length);b=nzd(this,d+1);lzd(b,d,Itd(this,a));b0d(this,b);this.bi(d,a)};_.Zh=function tzd(){return new Uzd(this)};_.$h=function uzd(){return new Xzd(this)};_._h=function vzd(a){var b,c;c=(b=BD(Ajd(this.a,4),126),b==null?0:b.length);if(a<0||a>c)throw vbb(new Cyd(a,c));return new Yzd(this,a)};_.$b=function wzd(){var a,b;++this.j;a=BD(Ajd(this.a,4),126);b=a==null?0:a.length;b0d(this,null);Atd(this,b,a)};_.Hc=function xzd(a){var b,c,d,e,f;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(pb(a,c)){return true}}}else{for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(PD(c)===PD(a)){return true}}}}return false};_.Xb=function yzd(a){var b,c;b=BD(Ajd(this.a,4),126);c=b==null?0:b.length;if(a>=c)throw vbb(new Cyd(a,c));return b[a]};_.Xc=function zzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(c=0,d=b.length;c<d;++c){if(pb(a,b[c])){return c}}}else{for(c=0,d=b.length;c<d;++c){if(PD(b[c])===PD(a)){return c}}}}return -1};_.dc=function Azd(){return BD(Ajd(this.a,4),126)==null};_.Kc=function Bzd(){return new Lzd(this)};_.Yc=function Czd(){return new Pzd(this)};_.Zc=function Dzd(a){var b,c;c=(b=BD(Ajd(this.a,4),126),b==null?0:b.length);if(a<0||a>c)throw vbb(new Cyd(a,c));return new Qzd(this,a)};_.ii=function Ezd(a,b){var c,d,e;c=mzd(this);e=c==null?0:c.length;if(a>=e)throw vbb(new qcb(lue+a+mue+e));if(b>=e)throw vbb(new qcb(nue+b+mue+e));d=c[b];if(a!=b){a<b?$fb(c,a,c,a+1,b-a):$fb(c,b+1,c,b,a-b);NC(c,a,d);b0d(this,c)}return d};_.ki=function Fzd(a){return BD(Ajd(this.a,4),126)[a]};_.$c=function Gzd(a){return ozd(this,a)};_.mi=function Hzd(a,b){var c,d;c=mzd(this);d=c[a];lzd(c,a,Itd(this,b));b0d(this,c);return d};_.gc=function Izd(){var a;return a=BD(Ajd(this.a,4),126),a==null?0:a.length};_.Pc=function Jzd(){var a,b,c;a=BD(Ajd(this.a,4),126);c=a==null?0:a.length;b=KC($3,hve,415,c,0,1);c>0&&$fb(a,0,b,0,c);return b};_.Qc=function Kzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);d=b==null?0:b.length;if(d>0){if(a.length<d){c=izd(rb(a).c,d);a=c}$fb(b,0,a,0,d)}a.length>d&&NC(a,d,null);return a};var jzd;var v4=mdb(Tte,'ArrayDelegatingEList',1982);bcb(1038,40,aie,Lzd);_.mj=function Mzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.Qb=function Nzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var r4=mdb(Tte,'ArrayDelegatingEList/EIterator',1038);bcb(706,278,jie,Pzd,Qzd);_.mj=function Rzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.pj=function Szd(a){Nyd(this,a);this.a=BD(Ajd(this.b.a,4),126)};_.Qb=function Tzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var s4=mdb(Tte,'ArrayDelegatingEList/EListIterator',706);bcb(1039,341,aie,Uzd);_.mj=function Vzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var t4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEIterator',1039);bcb(707,385,jie,Xzd,Yzd);_.mj=function Zzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var u4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEListIterator',707);bcb(606,295,Mje,$zd);var w4=mdb(Tte,'BasicEList/BasicIndexOutOfBoundsException',606);bcb(696,63,oue,_zd);_.Vc=function aAd(a,b){throw vbb(new bgb)};_.Fc=function bAd(a){throw vbb(new bgb)};_.Wc=function cAd(a,b){throw vbb(new bgb)};_.Gc=function dAd(a){throw vbb(new bgb)};_.$b=function eAd(){throw vbb(new bgb)};_.qi=function fAd(a){throw vbb(new bgb)};_.Kc=function gAd(){return this.Zh()};_.Yc=function hAd(){return this.$h()};_.Zc=function iAd(a){return this._h(a)};_.ii=function jAd(a,b){throw vbb(new bgb)};_.ji=function kAd(a,b){throw vbb(new bgb)};_.$c=function lAd(a){throw vbb(new bgb)};_.Mc=function mAd(a){throw vbb(new bgb)};_._c=function nAd(a,b){throw vbb(new bgb)};var x4=mdb(Tte,'BasicEList/UnmodifiableEList',696);bcb(705,1,{3:1,20:1,14:1,15:1,58:1,589:1});_.Vc=function OAd(a,b){oAd(this,a,BD(b,42))};_.Fc=function PAd(a){return pAd(this,BD(a,42))};_.Jc=function XAd(a){reb(this,a)};_.Xb=function YAd(a){return BD(qud(this.c,a),133)};_.ii=function fBd(a,b){return BD(this.c.ii(a,b),42)};_.ji=function gBd(a,b){GAd(this,a,BD(b,42))};_.Lc=function jBd(){return new YAb(null,new Kub(this,16))};_.$c=function kBd(a){return BD(this.c.$c(a),42)};_._c=function mBd(a,b){return MAd(this,a,BD(b,42))};_.ad=function oBd(a){ktb(this,a)};_.Nc=function pBd(){return new Kub(this,16)};_.Oc=function qBd(){return new YAb(null,new Kub(this,16))};_.Wc=function QAd(a,b){return this.c.Wc(a,b)};_.Gc=function RAd(a){return this.c.Gc(a)};_.$b=function SAd(){this.c.$b()};_.Hc=function TAd(a){return this.c.Hc(a)};_.Ic=function UAd(a){return Be(this.c,a)};_.qj=function VAd(){var a,b,c;if(this.d==null){this.d=KC(y4,jve,63,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=BD(b.nj(),133);uAd(this,a)}this.e=c}};_.Fb=function WAd(a){return zAd(this,a)};_.Hb=function ZAd(){return Etd(this.c)};_.Xc=function $Ad(a){return this.c.Xc(a)};_.rj=function _Ad(){this.c=new yBd(this)};_.dc=function aBd(){return this.f==0};_.Kc=function bBd(){return this.c.Kc()};_.Yc=function cBd(){return this.c.Yc()};_.Zc=function dBd(a){return this.c.Zc(a)};_.sj=function eBd(){return FAd(this)};_.tj=function hBd(a,b,c){return new zCd(a,b,c)};_.uj=function iBd(){return new EBd};_.Mc=function lBd(a){return JAd(this,a)};_.gc=function nBd(){return this.f};_.bd=function rBd(a,b){return new Jib(this.c,a,b)};_.Pc=function sBd(){return this.c.Pc()};_.Qc=function tBd(a){return this.c.Qc(a)};_.Ib=function uBd(){return Htd(this.c)};_.e=0;_.f=0;var L4=mdb(Tte,'BasicEMap',705);bcb(1033,63,oue,yBd);_.bi=function zBd(a,b){vBd(this,BD(b,133))};_.ei=function BBd(a,b,c){var d;++(d=this,BD(b,133),d).a.e};_.fi=function CBd(a,b){wBd(this,BD(b,133))};_.gi=function DBd(a,b,c){xBd(this,BD(b,133),BD(c,133))};_.di=function ABd(a,b){tAd(this.a)};var z4=mdb(Tte,'BasicEMap/1',1033);bcb(1034,63,oue,EBd);_.ri=function FBd(a){return KC(I4,kve,612,a,0,1)};var A4=mdb(Tte,'BasicEMap/2',1034);bcb(1035,eie,fie,GBd);_.$b=function HBd(){this.a.c.$b()};_.Hc=function IBd(a){return qAd(this.a,a)};_.Kc=function JBd(){return this.a.f==0?(LCd(),KCd.a):new dCd(this.a)};_.Mc=function KBd(a){var b;b=this.a.f;LAd(this.a,a);return this.a.f!=b};_.gc=function LBd(){return this.a.f};var B4=mdb(Tte,'BasicEMap/3',1035);bcb(1036,28,die,MBd);_.$b=function NBd(){this.a.c.$b()};_.Hc=function OBd(a){return rAd(this.a,a)};_.Kc=function PBd(){return this.a.f==0?(LCd(),KCd.a):new fCd(this.a)};_.gc=function QBd(){return this.a.f};var C4=mdb(Tte,'BasicEMap/4',1036);bcb(1037,eie,fie,SBd);_.$b=function TBd(){this.a.c.$b()};_.Hc=function UBd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&JD(a,42)){this.a.qj();i=BD(a,42);h=i.cd();e=h==null?0:tb(h);f=DAd(this.a,e);b=this.a.d[f];if(b){c=BD(b.g,367);j=b.i;for(g=0;g<j;++g){d=c[g];if(d.Sh()==e&&d.Fb(i)){return true}}}}return false};_.Kc=function VBd(){return this.a.f==0?(LCd(),KCd.a):new ZBd(this.a)};_.Mc=function WBd(a){return RBd(this,a)};_.gc=function XBd(){return this.a.f};var D4=mdb(Tte,'BasicEMap/5',1037);bcb(613,1,aie,ZBd);_.Nb=function $Bd(a){Rrb(this,a)};_.Ob=function _Bd(){return this.b!=-1};_.Pb=function aCd(){var a;if(this.f.e!=this.c){throw vbb(new Apb)}if(this.b==-1){throw vbb(new utb)}this.d=this.a;this.e=this.b;YBd(this);a=BD(this.f.d[this.d].g[this.e],133);return this.vj(a)};_.Qb=function bCd(){if(this.f.e!=this.c){throw vbb(new Apb)}if(this.e==-1){throw vbb(new Ydb)}this.f.c.Mc(qud(this.f.d[this.d],this.e));this.c=this.f.e;this.e=-1;this.a==this.d&&this.b!=-1&&--this.b};_.vj=function cCd(a){return a};_.a=0;_.b=-1;_.c=0;_.d=0;_.e=0;var E4=mdb(Tte,'BasicEMap/BasicEMapIterator',613);bcb(1031,613,aie,dCd);_.vj=function eCd(a){return a.cd()};var F4=mdb(Tte,'BasicEMap/BasicEMapKeyIterator',1031);bcb(1032,613,aie,fCd);_.vj=function gCd(a){return a.dd()};var G4=mdb(Tte,'BasicEMap/BasicEMapValueIterator',1032);bcb(1030,1,cie,iCd);_.wc=function oCd(a){stb(this,a)};_.yc=function tCd(a,b,c){return ttb(this,a,b,c)};_.$b=function jCd(){this.a.c.$b()};_._b=function kCd(a){return hCd(this,a)};_.uc=function lCd(a){return rAd(this.a,a)};_.vc=function mCd(){return yAd(this.a)};_.Fb=function nCd(a){return zAd(this.a,a)};_.xc=function pCd(a){return AAd(this.a,a)};_.Hb=function qCd(){return Etd(this.a.c)};_.dc=function rCd(){return this.a.f==0};_.ec=function sCd(){return EAd(this.a)};_.zc=function uCd(a,b){return HAd(this.a,a,b)};_.Bc=function vCd(a){return LAd(this.a,a)};_.gc=function wCd(){return this.a.f};_.Ib=function xCd(){return Htd(this.a.c)};_.Cc=function yCd(){return NAd(this.a)};var H4=mdb(Tte,'BasicEMap/DelegatingMap',1030);bcb(612,1,{42:1,133:1,612:1},zCd);_.Fb=function ACd(a){var b;if(JD(a,42)){b=BD(a,42);return (this.b!=null?pb(this.b,b.cd()):PD(this.b)===PD(b.cd()))&&(this.c!=null?pb(this.c,b.dd()):PD(this.c)===PD(b.dd()))}else{return false}};_.Sh=function BCd(){return this.a};_.cd=function CCd(){return this.b};_.dd=function DCd(){return this.c};_.Hb=function ECd(){return this.a^(this.c==null?0:tb(this.c))};_.Th=function FCd(a){this.a=a};_.Uh=function GCd(a){throw vbb(new gz)};_.ed=function HCd(a){var b;b=this.c;this.c=a;return b};_.Ib=function ICd(){return this.b+'->'+this.c};_.a=0;var I4=mdb(Tte,'BasicEMap/EntryImpl',612);bcb(536,1,{},JCd);var K4=mdb(Tte,'BasicEMap/View',536);var KCd;bcb(768,1,{});_.Fb=function ZCd(a){return At((mmb(),jmb),a)};_.Hb=function $Cd(){return qmb((mmb(),jmb))};_.Ib=function _Cd(){return Fe((mmb(),jmb))};var Q4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList',768);bcb(1312,1,jie,aDd);_.Nb=function cDd(a){Rrb(this,a)};_.Rb=function bDd(a){throw vbb(new bgb)};_.Ob=function dDd(){return false};_.Sb=function eDd(){return false};_.Pb=function fDd(){throw vbb(new utb)};_.Tb=function gDd(){return 0};_.Ub=function hDd(){throw vbb(new utb)};_.Vb=function iDd(){return -1};_.Qb=function jDd(){throw vbb(new bgb)};_.Wb=function kDd(a){throw vbb(new bgb)};var P4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList/1',1312);bcb(1310,768,{20:1,14:1,15:1,58:1},lDd);_.Vc=function mDd(a,b){OCd()};_.Fc=function nDd(a){return PCd()};_.Wc=function oDd(a,b){return QCd()};_.Gc=function pDd(a){return RCd()};_.$b=function qDd(){SCd()};_.Hc=function rDd(a){return false};_.Ic=function sDd(a){return false};_.Jc=function tDd(a){reb(this,a)};_.Xb=function uDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function vDd(a){return -1};_.dc=function wDd(){return true};_.Kc=function xDd(){return this.a};_.Yc=function yDd(){return this.a};_.Zc=function zDd(a){return this.a};_.ii=function ADd(a,b){return TCd()};_.ji=function BDd(a,b){UCd()};_.Lc=function CDd(){return new YAb(null,new Kub(this,16))};_.$c=function DDd(a){return VCd()};_.Mc=function EDd(a){return WCd()};_._c=function FDd(a,b){return XCd()};_.gc=function GDd(){return 0};_.ad=function HDd(a){ktb(this,a)};_.Nc=function IDd(){return new Kub(this,16)};_.Oc=function JDd(){return new YAb(null,new Kub(this,16))};_.bd=function KDd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function LDd(){return De((mmb(),jmb))};_.Qc=function MDd(a){return mmb(),Ee(jmb,a)};var R4=mdb(Tte,'ECollections/EmptyUnmodifiableEList',1310);bcb(1311,768,{20:1,14:1,15:1,58:1,589:1},NDd);_.Vc=function ODd(a,b){OCd()};_.Fc=function PDd(a){return PCd()};_.Wc=function QDd(a,b){return QCd()};_.Gc=function RDd(a){return RCd()};_.$b=function SDd(){SCd()};_.Hc=function TDd(a){return false};_.Ic=function UDd(a){return false};_.Jc=function VDd(a){reb(this,a)};_.Xb=function WDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function XDd(a){return -1};_.dc=function YDd(){return true};_.Kc=function ZDd(){return this.a};_.Yc=function $Dd(){return this.a};_.Zc=function _Dd(a){return this.a};_.ii=function bEd(a,b){return TCd()};_.ji=function cEd(a,b){UCd()};_.Lc=function dEd(){return new YAb(null,new Kub(this,16))};_.$c=function eEd(a){return VCd()};_.Mc=function fEd(a){return WCd()};_._c=function gEd(a,b){return XCd()};_.gc=function hEd(){return 0};_.ad=function iEd(a){ktb(this,a)};_.Nc=function jEd(){return new Kub(this,16)};_.Oc=function kEd(){return new YAb(null,new Kub(this,16))};_.bd=function lEd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function mEd(){return De((mmb(),jmb))};_.Qc=function nEd(a){return mmb(),Ee(jmb,a)};_.sj=function aEd(){return mmb(),mmb(),kmb};var S4=mdb(Tte,'ECollections/EmptyUnmodifiableEMap',1311);var U4=odb(Tte,'Enumerator');var oEd;bcb(281,1,{281:1},NEd);_.Fb=function REd(a){var b;if(this===a)return true;if(!JD(a,281))return false;b=BD(a,281);return this.f==b.f&&TEd(this.i,b.i)&&SEd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&SEd(this.d,b.d)&&SEd(this.g,b.g)&&SEd(this.e,b.e)&&KEd(this,b)};_.Hb=function WEd(){return this.f};_.Ib=function cFd(){return LEd(this)};_.f=0;var sEd=0,tEd=0,uEd=0,vEd=0,wEd=0,xEd=0,yEd=0,zEd=0,AEd=0,BEd,CEd=0,DEd=0,EEd=0,FEd=0,GEd,HEd;var Z4=mdb(Tte,'URI',281);bcb(1091,43,fke,mFd);_.zc=function nFd(a,b){return BD(Shb(this,GD(a),BD(b,281)),281)};var Y4=mdb(Tte,'URI/URICache',1091);bcb(497,63,oue,oFd,pFd);_.hi=function qFd(){return true};var $4=mdb(Tte,'UniqueEList',497);bcb(581,60,Tie,rFd);var _4=mdb(Tte,'WrappedException',581);var a5=odb(Vse,nve);var v5=odb(Vse,ove);var t5=odb(Vse,pve);var b5=odb(Vse,qve);var d5=odb(Vse,rve);var c5=odb(Vse,'EClass');var f5=odb(Vse,'EDataType');var sFd;bcb(1183,43,fke,vFd);_.xc=function wFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var e5=mdb(Vse,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1183);var h5=odb(Vse,'EEnum');var g5=odb(Vse,sve);var j5=odb(Vse,tve);var n5=odb(Vse,uve);var xFd;var p5=odb(Vse,vve);var q5=odb(Vse,wve);bcb(1029,1,{},BFd);_.Ib=function CFd(){return 'NIL'};var r5=mdb(Vse,'EStructuralFeature/Internal/DynamicValueHolder/1',1029);var DFd;bcb(1028,43,fke,GFd);_.xc=function HFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var s5=mdb(Vse,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1028);var u5=odb(Vse,xve);var w5=odb(Vse,'EValidator/PatternMatcher');var IFd;var KFd;var MFd;var OFd,PFd,QFd,RFd,SFd,TFd,UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd,aGd,bGd,cGd,dGd,eGd,fGd,gGd,hGd,iGd;var E9=odb(yve,'FeatureMap/Entry');bcb(535,1,{72:1},kGd);_.ak=function lGd(){return this.a};_.dd=function mGd(){return this.b};var x5=mdb(qte,'BasicEObjectImpl/1',535);bcb(1027,1,zve,nGd);_.Wj=function oGd(a){return hid(this.a,this.b,a)};_.fj=function pGd(){return nid(this.a,this.b)};_.Wb=function qGd(a){zid(this.a,this.b,a)};_.Xj=function rGd(){Did(this.a,this.b)};var y5=mdb(qte,'BasicEObjectImpl/4',1027);bcb(1983,1,{108:1});_.bk=function uGd(a){this.e=a==0?sGd:KC(SI,Uhe,1,a,5,1)};_.Ch=function vGd(a){return this.e[a]};_.Dh=function wGd(a,b){this.e[a]=b};_.Eh=function xGd(a){this.e[a]=null};_.ck=function yGd(){return this.c};_.dk=function zGd(){throw vbb(new bgb)};_.ek=function AGd(){throw vbb(new bgb)};_.fk=function BGd(){return this.d};_.gk=function CGd(){return this.e!=null};_.hk=function DGd(a){this.c=a};_.ik=function EGd(a){throw vbb(new bgb)};_.jk=function FGd(a){throw vbb(new bgb)};_.kk=function GGd(a){this.d=a};var sGd;var z5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderBaseImpl',1983);bcb(185,1983,{108:1},HGd);_.dk=function IGd(){return this.a};_.ek=function JGd(){return this.b};_.ik=function KGd(a){this.a=a};_.jk=function LGd(a){this.b=a};var A5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderImpl',185);bcb(506,97,pte,MGd);_.Kg=function NGd(){return this.f};_.Pg=function OGd(){return this.k};_.Rg=function PGd(a,b){this.g=a;this.i=b};_.Tg=function QGd(){return (this.j&2)==0?this.zh():this.ph().ck()};_.Vg=function RGd(){return this.i};_.Mg=function SGd(){return (this.j&1)!=0};_.eh=function TGd(){return this.g};_.kh=function UGd(){return (this.j&4)!=0};_.ph=function VGd(){return !this.k&&(this.k=new HGd),this.k};_.th=function WGd(a){this.ph().hk(a);a?(this.j|=2):(this.j&=-3)};_.vh=function XGd(a){this.ph().jk(a);a?(this.j|=4):(this.j&=-5)};_.zh=function YGd(){return (NFd(),MFd).S};_.i=0;_.j=1;var l6=mdb(qte,'EObjectImpl',506);bcb(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},_Gd);_.Ch=function aHd(a){return this.e[a]};_.Dh=function bHd(a,b){this.e[a]=b};_.Eh=function cHd(a){this.e[a]=null};_.Tg=function dHd(){return this.d};_.Yg=function eHd(a){return bLd(this.d,a)};_.$g=function fHd(){return this.d};_.dh=function gHd(){return this.e!=null};_.ph=function hHd(){!this.k&&(this.k=new vHd);return this.k};_.th=function iHd(a){this.d=a};_.yh=function jHd(){var a;if(this.e==null){a=aLd(this.d);this.e=a==0?ZGd:KC(SI,Uhe,1,a,5,1)}return this};_.Ah=function kHd(){return 0};var ZGd;var E5=mdb(qte,'DynamicEObjectImpl',780);bcb(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},lHd);_.Fb=function nHd(a){return this===a};_.Hb=function rHd(){return FCb(this)};_.th=function mHd(a){this.d=a;this.b=YKd(a,'key');this.c=YKd(a,Bte)};_.Sh=function oHd(){var a;if(this.a==-1){a=iid(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.cd=function pHd(){return iid(this,this.b)};_.dd=function qHd(){return iid(this,this.c)};_.Th=function sHd(a){this.a=a};_.Uh=function tHd(a){zid(this,this.b,a)};_.ed=function uHd(a){var b;b=iid(this,this.c);zid(this,this.c,a);return b};_.a=0;var C5=mdb(qte,'DynamicEObjectImpl/BasicEMapEntry',1376);bcb(1377,1,{108:1},vHd);_.bk=function wHd(a){throw vbb(new bgb)};_.Ch=function xHd(a){throw vbb(new bgb)};_.Dh=function yHd(a,b){throw vbb(new bgb)};_.Eh=function zHd(a){throw vbb(new bgb)};_.ck=function AHd(){throw vbb(new bgb)};_.dk=function BHd(){return this.a};_.ek=function CHd(){return this.b};_.fk=function DHd(){return this.c};_.gk=function EHd(){throw vbb(new bgb)};_.hk=function FHd(a){throw vbb(new bgb)};_.ik=function GHd(a){this.a=a};_.jk=function HHd(a){this.b=a};_.kk=function IHd(a){this.c=a};var D5=mdb(qte,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1377);bcb(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},RHd);_.Qg=function SHd(a){return KHd(this,a)};_._g=function THd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),this.b):(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),FAd(this.b));case 3:return MHd(this);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),this.a;case 5:return !this.c&&(this.c=new _4d(m5,this,5)),this.c;}return bid(this,a-aLd((jGd(),OFd)),XKd((d=BD(Ajd(this,16),26),!d?OFd:d),a),b,c)};_.hh=function UHd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?KHd(this,c):this.Cb.ih(this,-1-e,null,c)));return JHd(this,BD(a,147),c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.jh=function VHd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.b&&(this.b=new sId((jGd(),fGd),x6,this)),bId(this.b,a,c);case 3:return JHd(this,null,c);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.lh=function WHd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!MHd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return cid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.sh=function XHd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:OHd(this,GD(b));return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));cId(this.b,b);return;case 3:NHd(this,BD(b,147));return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);!this.a&&(this.a=new xMd(m5,this,4));ytd(this.a,BD(b,14));return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);!this.c&&(this.c=new _4d(m5,this,5));ytd(this.c,BD(b,14));return;}did(this,a-aLd((jGd(),OFd)),XKd((c=BD(Ajd(this,16),26),!c?OFd:c),a),b)};_.zh=function YHd(){return jGd(),OFd};_.Bh=function ZHd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:PHd(this,null);return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));this.b.c.$b();return;case 3:NHd(this,null);return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);return;}eid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.Ib=function $Hd(){return QHd(this)};_.d=null;var G5=mdb(qte,'EAnnotationImpl',510);bcb(151,705,Ave,dId);_.Xh=function eId(a,b){_Hd(this,a,BD(b,42))};_.lk=function fId(a,b){return aId(this,BD(a,42),b)};_.pi=function gId(a){return BD(BD(this.c,69).pi(a),133)};_.Zh=function hId(){return BD(this.c,69).Zh()};_.$h=function iId(){return BD(this.c,69).$h()};_._h=function jId(a){return BD(this.c,69)._h(a)};_.mk=function kId(a,b){return bId(this,a,b)};_.Wj=function lId(a){return BD(this.c,76).Wj(a)};_.rj=function mId(){};_.fj=function nId(){return BD(this.c,76).fj()};_.tj=function oId(a,b,c){var d;d=BD(bKd(this.b).Nh().Jh(this.b),133);d.Th(a);d.Uh(b);d.ed(c);return d};_.uj=function pId(){return new W5d(this)};_.Wb=function qId(a){cId(this,a)};_.Xj=function rId(){BD(this.c,76).Xj()};var y9=mdb(yve,'EcoreEMap',151);bcb(158,151,Ave,sId);_.qj=function tId(){var a,b,c,d,e,f;if(this.d==null){f=KC(y4,jve,63,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),133);d=b.Sh();e=(d&Ohe)%f.length;a=f[e];!a&&(a=f[e]=new W5d(this));a.Fc(b)}this.d=f}};var F5=mdb(qte,'EAnnotationImpl/1',158);bcb(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1});_._g=function GId(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.jh=function HId(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function IId(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function JId(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function KId(){return jGd(),hGd};_.Bh=function LId(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function MId(){wId(this);this.Bb|=1};_.Yj=function NId(){return wId(this)};_.Zj=function OId(){return this.t};_.$j=function PId(){var a;return a=this.t,a>1||a==-1};_.hi=function QId(){return (this.Bb&512)!=0};_.nk=function RId(a,b){return zId(this,a,b)};_.ok=function SId(a){DId(this,a)};_.Ib=function TId(){return EId(this)};_.s=0;_.t=1;var v7=mdb(qte,'ETypedElementImpl',284);bcb(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1});_.Qg=function iJd(a){return UId(this,a)};_._g=function jJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function kJd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?UId(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,17,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function lJd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 17:return _hd(this,null,17,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function mJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function nJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function oJd(){return jGd(),gGd};_.Bh=function pJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function qJd(){a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Gj=function rJd(){return this.f};_.zj=function sJd(){return VId(this)};_.Hj=function tJd(){return WId(this)};_.Lj=function uJd(){return null};_.pk=function vJd(){return this.k};_.aj=function wJd(){return this.n};_.Mj=function xJd(){return XId(this)};_.Nj=function yJd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=WId(this);(c.i==null&&TKd(c),c.i).length;d=this.Lj();!!d&&aLd(WId(d));e=wId(this);g=e.Bj();a=!g?null:(g.i&1)!=0?g==sbb?wI:g==WD?JI:g==VD?FI:g==UD?BI:g==XD?MI:g==rbb?UI:g==SD?xI:yI:g;b=VId(this);h=e.zj();n6d(this);(this.Bb&oie)!=0&&(!!(f=t1d((O6d(),M6d),c))&&f!=this||!!(f=_1d(q1d(M6d,this))))?(this.p=new zVd(this,f)):this.$j()?this.rk()?!d?(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new KVd(42,this)):(this.p=new KVd(0,this)):a==CK?(this.p=new IVd(50,J4,this)):this.sk()?(this.p=new IVd(43,a,this)):(this.p=new IVd(1,a,this)):!a?this.sk()?(this.p=new KVd(44,this)):(this.p=new KVd(2,this)):a==CK?(this.p=new IVd(41,J4,this)):this.sk()?(this.p=new IVd(45,a,this)):(this.p=new IVd(3,a,this)):(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new LVd(46,this,d)):(this.p=new LVd(4,this,d)):this.sk()?(this.p=new JVd(47,a,this,d)):(this.p=new JVd(5,a,this,d)):!a?this.sk()?(this.p=new LVd(48,this,d)):(this.p=new LVd(6,this,d)):this.sk()?(this.p=new JVd(49,a,this,d)):(this.p=new JVd(7,a,this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&512)!=0?(this.Bb&Cve)!=0?!a?(this.p=new KVd(8,this)):(this.p=new IVd(9,a,this)):!a?(this.p=new KVd(10,this)):(this.p=new IVd(11,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(12,this)):(this.p=new IVd(13,a,this)):!a?(this.p=new KVd(14,this)):(this.p=new IVd(15,a,this)):!d?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new KVd(16,this)):(this.p=new IVd(17,a,this)):!a?(this.p=new KVd(18,this)):(this.p=new IVd(19,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(20,this)):(this.p=new IVd(21,a,this)):!a?(this.p=new KVd(22,this)):(this.p=new IVd(23,a,this)):(i=d.t,i>1||i==-1?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(24,this,d)):(this.p=new JVd(25,a,this,d)):!a?(this.p=new LVd(26,this,d)):(this.p=new JVd(27,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(28,this,d)):(this.p=new JVd(29,a,this,d)):!a?(this.p=new LVd(30,this,d)):(this.p=new JVd(31,a,this,d)):this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(32,this,d)):(this.p=new JVd(33,a,this,d)):!a?(this.p=new LVd(34,this,d)):(this.p=new JVd(35,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(36,this,d)):(this.p=new JVd(37,a,this,d)):!a?(this.p=new LVd(38,this,d)):(this.p=new JVd(39,a,this,d))):this.qk()?this.sk()?(this.p=new kWd(BD(e,26),this,d)):(this.p=new cWd(BD(e,26),this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&Cve)!=0?!a?(this.p=new jXd(BD(e,148),b,h,this)):(this.p=new lXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):!a?(this.p=new cXd(BD(e,148),b,h,this)):(this.p=new eXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):this.rk()?!d?(this.Bb&Cve)!=0?this.sk()?(this.p=new FXd(BD(e,26),this)):(this.p=new DXd(BD(e,26),this)):this.sk()?(this.p=new BXd(BD(e,26),this)):(this.p=new zXd(BD(e,26),this)):(this.Bb&Cve)!=0?this.sk()?(this.p=new NXd(BD(e,26),this,d)):(this.p=new LXd(BD(e,26),this,d)):this.sk()?(this.p=new JXd(BD(e,26),this,d)):(this.p=new HXd(BD(e,26),this,d)):this.sk()?!d?(this.Bb&Cve)!=0?(this.p=new RXd(BD(e,26),this)):(this.p=new PXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new VXd(BD(e,26),this,d)):(this.p=new TXd(BD(e,26),this,d)):!d?(this.Bb&Cve)!=0?(this.p=new XXd(BD(e,26),this)):(this.p=new nXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new _Xd(BD(e,26),this,d)):(this.p=new ZXd(BD(e,26),this,d))}return this.p};_.Ij=function zJd(){return (this.Bb&zte)!=0};_.qk=function AJd(){return false};_.rk=function BJd(){return false};_.Jj=function CJd(){return (this.Bb&oie)!=0};_.Oj=function DJd(){return YId(this)};_.sk=function EJd(){return false};_.Kj=function FJd(){return (this.Bb&Cve)!=0};_.tk=function GJd(a){this.k=a};_.Lh=function HJd(a){cJd(this,a)};_.Ib=function IJd(){return gJd(this)};_.e=false;_.n=0;var n7=mdb(qte,'EStructuralFeatureImpl',449);bcb(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},OJd);_._g=function PJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),LJd(this)?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:if(b)return KJd(this);return JJd(this);}return bid(this,a-aLd((jGd(),PFd)),XKd((d=BD(Ajd(this,16),26),!d?PFd:d),a),b,c)};_.lh=function QJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return LJd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return !!JJd(this);}return cid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.sh=function RJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:NJd(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:MJd(this,Ccb(DD(b)));return;}did(this,a-aLd((jGd(),PFd)),XKd((c=BD(Ajd(this,16),26),!c?PFd:c),a),b)};_.zh=function SJd(){return jGd(),PFd};_.Bh=function TJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.b=0;DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:MJd(this,false);return;}eid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.Gh=function UJd(){KJd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.$j=function VJd(){return LJd(this)};_.nk=function WJd(a,b){this.b=0;this.a=null;return zId(this,a,b)};_.ok=function XJd(a){NJd(this,a)};_.Ib=function YJd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (iD: ';Ffb(a,(this.Bb&ote)!=0);a.a+=')';return a.a};_.b=0;var H5=mdb(qte,'EAttributeImpl',322);bcb(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1});_.uk=function nKd(a){return a.Tg()==this};_.Qg=function oKd(a){return aKd(this,a)};_.Rg=function pKd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_._g=function qKd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function rKd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function sKd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function tKd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function uKd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vKd(){return jGd(),RFd};_.Bh=function wKd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.yj=function xKd(){var a;return this.G==-1&&(this.G=(a=bKd(this),a?HLd(a.Mh(),this):-1)),this.G};_.zj=function yKd(){return null};_.Aj=function zKd(){return bKd(this)};_.vk=function AKd(){return this.v};_.Bj=function BKd(){return dKd(this)};_.Cj=function CKd(){return this.D!=null?this.D:this.B};_.Dj=function DKd(){return this.F};_.wj=function EKd(a){return fKd(this,a)};_.wk=function FKd(a){this.v=a};_.xk=function GKd(a){gKd(this,a)};_.yk=function HKd(a){this.C=a};_.Lh=function IKd(a){lKd(this,a)};_.Ib=function JKd(){return mKd(this)};_.C=null;_.D=null;_.G=-1;var Z5=mdb(qte,'EClassifierImpl',351);bcb(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},hLd);_.uk=function iLd(a){return dLd(this,a.Tg())};_._g=function jLd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return null;case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return Bcb(),(this.Bb&512)!=0?true:false;case 10:return _Kd(this);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),this.q;case 12:return OKd(this);case 13:return SKd(this);case 14:return SKd(this),this.r;case 15:return OKd(this),this.k;case 16:return PKd(this);case 17:return RKd(this);case 18:return TKd(this);case 19:return UKd(this);case 20:return OKd(this),this.o;case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),this.s;case 22:return VKd(this);case 23:return QKd(this);}return bid(this,a-aLd((jGd(),QFd)),XKd((d=BD(Ajd(this,16),26),!d?QFd:d),a),b,c)};_.hh=function kLd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Sxd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Sxd(this.s,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.jh=function lLd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Txd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Txd(this.s,a,c);case 22:return Txd(VKd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.lh=function mLd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&VKd(this.u.a).i!=0&&!(!!this.n&&FMd(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return OKd(this).i!=0;case 13:return SKd(this).i!=0;case 14:return SKd(this),this.r.i!=0;case 15:return OKd(this),this.k.i!=0;case 16:return PKd(this).i!=0;case 17:return RKd(this).i!=0;case 18:return TKd(this).i!=0;case 19:return UKd(this).i!=0;case 20:return OKd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&FMd(this.n);case 23:return QKd(this).i!=0;}return cid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.oh=function nLd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:YKd(this,a);return b?b:Bmd(this,a)};_.sh=function oLd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:eLd(this,Ccb(DD(b)));return;case 9:fLd(this,Ccb(DD(b)));return;case 10:vwd(_Kd(this));ytd(_Kd(this),BD(b,14));return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);!this.q&&(this.q=new cUd(n5,this,11,10));ytd(this.q,BD(b,14));return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);!this.s&&(this.s=new cUd(t5,this,21,17));ytd(this.s,BD(b,14));return;case 22:Uxd(VKd(this));ytd(VKd(this),BD(b,14));return;}did(this,a-aLd((jGd(),QFd)),XKd((c=BD(Ajd(this,16),26),!c?QFd:c),a),b)};_.zh=function pLd(){return jGd(),QFd};_.Bh=function qLd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:eLd(this,false);return;case 9:fLd(this,false);return;case 10:!!this.u&&vwd(this.u);return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);return;case 22:!!this.n&&Uxd(this.n);return;}eid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.Gh=function rLd(){var a,b;OKd(this);SKd(this);PKd(this);RKd(this);TKd(this);UKd(this);QKd(this);oud(SMd($Kd(this)));if(this.s){for(a=0,b=this.s.i;a<b;++a){Cmd(qud(this.s,a))}}if(this.q){for(a=0,b=this.q.i;a<b;++a){Cmd(qud(this.q,a))}}o1d((O6d(),M6d),this).ne();this.Bb|=1};_.Ib=function sLd(){return gLd(this)};_.k=null;_.r=null;var KKd,LKd,MKd;var Y5=mdb(qte,'EClassImpl',88);bcb(1994,1993,Ove);_.Vh=function tLd(a,b){return Pxd(this,a,b)};_.Wh=function uLd(a){return Pxd(this,this.i,a)};_.Xh=function vLd(a,b){Qxd(this,a,b)};_.Yh=function wLd(a){Rxd(this,a)};_.lk=function xLd(a,b){return Sxd(this,a,b)};_.pi=function yLd(a){return nud(this,a)};_.mk=function CLd(a,b){return Txd(this,a,b)};_.mi=function DLd(a,b){return Zxd(this,a,b)};_.Zh=function zLd(){return new $yd(this)};_.$h=function ALd(){return new bzd(this)};_._h=function BLd(a){return ztd(this,a)};var P9=mdb(yve,'NotifyingInternalEListImpl',1994);bcb(622,1994,Pve);_.Hc=function NLd(a){return ELd(this,a)};_.Zi=function OLd(a,b,c,d,e){return FLd(this,a,b,c,d,e)};_.$i=function PLd(a){GLd(this,a)};_.Wj=function QLd(a){return this};_.ak=function RLd(){return XKd(this.e.Tg(),this.aj())};_._i=function SLd(){return this.ak()};_.aj=function TLd(){return bLd(this.e.Tg(),this.ak())};_.zk=function ULd(){return BD(this.ak().Yj(),26).Bj()};_.Ak=function VLd(){return zUd(BD(this.ak(),18)).n};_.Ai=function WLd(){return this.e};_.Bk=function XLd(){return true};_.Ck=function YLd(){return false};_.Dk=function ZLd(){return false};_.Ek=function $Ld(){return false};_.Xc=function _Ld(a){return HLd(this,a)};_.cj=function aMd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.gh(this.e,this.Ak(),this.zk(),b):c.gh(this.e,bLd(c.Tg(),zUd(BD(this.ak(),18))),null,b):c.gh(this.e,-1-this.aj(),null,b)};_.dj=function bMd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.ih(this.e,this.Ak(),this.zk(),b):c.ih(this.e,bLd(c.Tg(),zUd(BD(this.ak(),18))),null,b):c.ih(this.e,-1-this.aj(),null,b)};_.rk=function cMd(){return false};_.Fk=function dMd(){return true};_.wj=function eMd(a){return qEd(this.d,a)};_.ej=function fMd(){return oid(this.e)};_.fj=function gMd(){return this.i!=0};_.ri=function hMd(a){return izd(this.d,a)};_.li=function iMd(a,b){return this.Fk()&&this.Ek()?ILd(this,a,BD(b,56)):b};_.Gk=function jMd(a){return a.kh()?xid(this.e,BD(a,49)):a};_.Wb=function kMd(a){JLd(this,a)};_.Pc=function lMd(){return KLd(this)};_.Qc=function mMd(a){var b;if(this.Ek()){for(b=this.i-1;b>=0;--b){qud(this,b)}}return xud(this,a)};_.Xj=function nMd(){Uxd(this)};_.oi=function oMd(a,b){return LLd(this,a,b)};var t9=mdb(yve,'EcoreEList',622);bcb(496,622,Pve,pMd);_.ai=function qMd(){return false};_.aj=function rMd(){return this.c};_.bj=function sMd(){return false};_.Fk=function tMd(){return true};_.hi=function uMd(){return true};_.li=function vMd(a,b){return b};_.ni=function wMd(){return false};_.c=0;var d9=mdb(yve,'EObjectEList',496);bcb(85,496,Pve,xMd);_.bj=function yMd(){return true};_.Dk=function zMd(){return false};_.rk=function AMd(){return true};var Z8=mdb(yve,'EObjectContainmentEList',85);bcb(545,85,Pve,BMd);_.ci=function CMd(){this.b=true};_.fj=function DMd(){return this.b};_.Xj=function EMd(){var a;Uxd(this);if(oid(this.e)){a=this.b;this.b=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var Y8=mdb(yve,'EObjectContainmentEList/Unsettable',545);bcb(1140,545,Pve,JMd);_.ii=function NMd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),SFd),meb(b),(d=c.c,JD(d,88)?BD(d,26):_Fd),a)),c};_.jj=function OMd(a,b){return GMd(this,BD(a,87),b)};_.kj=function PMd(a,b){return HMd(this,BD(a,87),b)};_.lj=function QMd(a,b,c){return IMd(this,BD(a,87),BD(b,87),c)};_.Zi=function KMd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function LMd(){return true};_.fj=function MMd(){return FMd(this)};_.Xj=function RMd(){Uxd(this)};var N5=mdb(qte,'EClassImpl/1',1140);bcb(1154,1153,dve);_.ui=function VMd(a){var b,c,d,e,f,g,h;c=a.xi();if(c!=8){d=UMd(a);if(d==0){switch(c){case 1:case 9:{h=a.Bi();if(h!=null){b=$Kd(BD(h,473));!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 3:{g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 5:{g=a.zi();if(g!=null){for(f=BD(g,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}}break}case 4:{h=a.Bi();if(h!=null){e=BD(h,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}break}case 6:{h=a.Bi();if(h!=null){for(f=BD(h,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}}break}}}this.Hk(d)}};_.Hk=function WMd(a){TMd(this,a)};_.b=63;var p7=mdb(qte,'ESuperAdapter',1154);bcb(1155,1154,dve,YMd);_.Hk=function ZMd(a){XMd(this,a)};var I5=mdb(qte,'EClassImpl/10',1155);bcb(1144,696,Pve);_.Vh=function $Md(a,b){return iud(this,a,b)};_.Wh=function _Md(a){return jud(this,a)};_.Xh=function aNd(a,b){kud(this,a,b)};_.Yh=function bNd(a){lud(this,a)};_.pi=function dNd(a){return nud(this,a)};_.mi=function lNd(a,b){return uud(this,a,b)};_.lk=function cNd(a,b){throw vbb(new bgb)};_.Zh=function eNd(){return new $yd(this)};_.$h=function fNd(){return new bzd(this)};_._h=function gNd(a){return ztd(this,a)};_.mk=function hNd(a,b){throw vbb(new bgb)};_.Wj=function iNd(a){return this};_.fj=function jNd(){return this.i!=0};_.Wb=function kNd(a){throw vbb(new bgb)};_.Xj=function mNd(){throw vbb(new bgb)};var s9=mdb(yve,'EcoreEList/UnmodifiableEList',1144);bcb(319,1144,Pve,nNd);_.ni=function oNd(){return false};var r9=mdb(yve,'EcoreEList/UnmodifiableEList/FastCompare',319);bcb(1147,319,Pve,rNd);_.Xc=function sNd(a){var b,c,d;if(JD(a,170)){b=BD(a,170);c=b.aj();if(c!=-1){for(d=this.i;c<d;++c){if(PD(this.g[c])===PD(a)){return c}}}}return -1};var J5=mdb(qte,'EClassImpl/1EAllStructuralFeaturesList',1147);bcb(1141,497,oue,wNd);_.ri=function xNd(a){return KC(j5,Tve,87,a,0,1)};_.ni=function yNd(){return false};var K5=mdb(qte,'EClassImpl/1EGenericSuperTypeEList',1141);bcb(623,497,oue,zNd);_.ri=function ANd(a){return KC(t5,Mve,170,a,0,1)};_.ni=function BNd(){return false};var L5=mdb(qte,'EClassImpl/1EStructuralFeatureUniqueEList',623);bcb(741,497,oue,CNd);_.ri=function DNd(a){return KC(q5,Mve,18,a,0,1)};_.ni=function ENd(){return false};var M5=mdb(qte,'EClassImpl/1ReferenceList',741);bcb(1142,497,oue,GNd);_.bi=function HNd(a,b){FNd(this,BD(b,34))};_.ri=function INd(a){return KC(b5,Mve,34,a,0,1)};_.ni=function JNd(){return false};var O5=mdb(qte,'EClassImpl/2',1142);bcb(1143,497,oue,KNd);_.ri=function LNd(a){return KC(b5,Mve,34,a,0,1)};_.ni=function MNd(){return false};var P5=mdb(qte,'EClassImpl/3',1143);bcb(1145,319,Pve,PNd);_.Fc=function QNd(a){return NNd(this,BD(a,34))};_.Yh=function RNd(a){ONd(this,BD(a,34))};var Q5=mdb(qte,'EClassImpl/4',1145);bcb(1146,319,Pve,UNd);_.Fc=function VNd(a){return SNd(this,BD(a,18))};_.Yh=function WNd(a){TNd(this,BD(a,18))};var R5=mdb(qte,'EClassImpl/5',1146);bcb(1148,497,oue,XNd);_.ri=function YNd(a){return KC(n5,Nve,59,a,0,1)};_.ni=function ZNd(){return false};var S5=mdb(qte,'EClassImpl/6',1148);bcb(1149,497,oue,$Nd);_.ri=function _Nd(a){return KC(q5,Mve,18,a,0,1)};_.ni=function aOd(){return false};var T5=mdb(qte,'EClassImpl/7',1149);bcb(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1});_.Vh=function bOd(a,b){return qwd(this,a,b)};_.Wh=function cOd(a){return qwd(this,this.Vi(),a)};_.Xh=function dOd(a,b){rwd(this,a,b)};_.Yh=function eOd(a){swd(this,a)};_.lk=function fOd(a,b){return twd(this,a,b)};_.mk=function lOd(a,b){return uwd(this,a,b)};_.mi=function mOd(a,b){return wwd(this,a,b)};_.pi=function gOd(a){return this.Oi(a)};_.Zh=function hOd(){return new $yd(this)};_.Gi=function iOd(){return this.Ji()};_.$h=function jOd(){return new bzd(this)};_._h=function kOd(a){return ztd(this,a)};var L8=mdb(yve,'DelegatingNotifyingInternalEListImpl',1997);bcb(742,1997,Uve);_.ai=function rOd(){var a;a=XKd(wjd(this.b),this.aj()).Yj();return JD(a,148)&&!JD(a,457)&&(a.Bj().i&1)==0};_.Hc=function sOd(a){var b,c,d,e,f,g,h,i;if(this.Fk()){i=this.Vi();if(i>4){if(this.wj(a)){if(this.rk()){d=BD(a,49);c=d.Ug();h=c==this.b&&(this.Dk()?d.Og(d.Vg(),BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj())==zUd(BD(XKd(wjd(this.b),this.aj()),18)).n:-1-d.Vg()==this.aj());if(this.Ek()&&!h&&!c&&!!d.Zg()){for(e=0;e<i;++e){b=oOd(this,this.Oi(e));if(PD(b)===PD(a)){return true}}}return h}else if(this.Dk()&&!this.Ck()){f=BD(a,56).ah(zUd(BD(XKd(wjd(this.b),this.aj()),18)));if(PD(f)===PD(this.b)){return true}else if(f==null||!BD(f,56).kh()){return false}}}else{return false}}g=this.Li(a);if(this.Ek()&&!g){for(e=0;e<i;++e){d=oOd(this,this.Oi(e));if(PD(d)===PD(a)){return true}}}return g}else{return this.Li(a)}};_.Zi=function tOd(a,b,c,d,e){return new pSd(this.b,a,this.aj(),b,c,d,e)};_.$i=function uOd(a){Uhd(this.b,a)};_.Wj=function vOd(a){return this};_._i=function wOd(){return XKd(wjd(this.b),this.aj())};_.aj=function xOd(){return bLd(wjd(this.b),XKd(wjd(this.b),this.aj()))};_.Ai=function yOd(){return this.b};_.Bk=function zOd(){return !!XKd(wjd(this.b),this.aj()).Yj().Bj()};_.bj=function AOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&ote)!=0||!!zUd(BD(b,18))}else{return false}};_.Ck=function BOd(){var a,b,c,d;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c&&(d=c.t,d>1||d==-1)}else{return false}};_.Dk=function COd(){var a,b,c;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c}else{return false}};_.Ek=function DOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&Tje)!=0}else{return false}};_.Xc=function EOd(a){var b,c,d,e;d=this.Qi(a);if(d>=0)return d;if(this.Fk()){for(c=0,e=this.Vi();c<e;++c){b=oOd(this,this.Oi(c));if(PD(b)===PD(a)){return c}}}return -1};_.cj=function FOd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.gh(this.b,zUd(BD(XKd(wjd(this.b),this.aj()),18)).n,BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj(),b):c.gh(this.b,bLd(c.Tg(),zUd(BD(XKd(wjd(this.b),this.aj()),18))),null,b):c.gh(this.b,-1-this.aj(),null,b)};_.dj=function GOd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.ih(this.b,zUd(BD(XKd(wjd(this.b),this.aj()),18)).n,BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj(),b):c.ih(this.b,bLd(c.Tg(),zUd(BD(XKd(wjd(this.b),this.aj()),18))),null,b):c.ih(this.b,-1-this.aj(),null,b)};_.rk=function HOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&ote)!=0}else{return false}};_.Fk=function IOd(){return JD(XKd(wjd(this.b),this.aj()).Yj(),88)};_.wj=function JOd(a){return XKd(wjd(this.b),this.aj()).Yj().wj(a)};_.ej=function KOd(){return oid(this.b)};_.fj=function LOd(){return !this.Ri()};_.hi=function MOd(){return XKd(wjd(this.b),this.aj()).hi()};_.li=function NOd(a,b){return nOd(this,a,b)};_.Wb=function OOd(a){vwd(this);ytd(this,BD(a,15))};_.Pc=function POd(){var a;if(this.Ek()){for(a=this.Vi()-1;a>=0;--a){nOd(this,a,this.Oi(a))}}return this.Wi()};_.Qc=function QOd(a){var b;if(this.Ek()){for(b=this.Vi()-1;b>=0;--b){nOd(this,b,this.Oi(b))}}return this.Xi(a)};_.Xj=function ROd(){vwd(this)};_.oi=function SOd(a,b){return pOd(this,a,b)};var K8=mdb(yve,'DelegatingEcoreEList',742);bcb(1150,742,Uve,YOd);_.Hi=function _Od(a,b){TOd(this,a,BD(b,26))};_.Ii=function aPd(a){UOd(this,BD(a,26))};_.Oi=function gPd(a){var b,c;return b=BD(qud(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ti=function lPd(a){var b,c;return b=BD(Xxd(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ui=function mPd(a,b){return WOd(this,a,BD(b,26))};_.ai=function ZOd(){return false};_.Zi=function $Od(a,b,c,d,e){return null};_.Ji=function bPd(){return new EPd(this)};_.Ki=function cPd(){Uxd(VKd(this.a))};_.Li=function dPd(a){return VOd(this,a)};_.Mi=function ePd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!VOd(this,b)){return false}}return true};_.Ni=function fPd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==VKd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function hPd(){var a,b,c,d,e;c=1;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,JD(e,88)?BD(e,26):(jGd(),_Fd));c=31*c+(!d?0:FCb(d))}return c};_.Qi=function iPd(a){var b,c,d,e;d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)))){return d}++d}return -1};_.Ri=function jPd(){return VKd(this.a).i==0};_.Si=function kPd(){return null};_.Vi=function nPd(){return VKd(this.a).i};_.Wi=function oPd(){var a,b,c,d,e,f;f=VKd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,JD(d,88)?BD(d,26):(jGd(),_Fd))}return e};_.Xi=function pPd(a){var b,c,d,e,f,g,h;h=VKd(this.a).i;if(a.length<h){e=izd(rb(a).c,h);a=e}a.length>h&&NC(a,h,null);d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd));NC(a,d++,f)}return a};_.Yi=function qPd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=VKd(this.a);for(b=0,d=VKd(this.a).i;b<d;){Efb(e,xfb((c=BD(qud(a,b),87).c,JD(c,88)?BD(c,26):(jGd(),_Fd))));++b<d&&(e.a+=She,e)}e.a+=']';return e.a};_.$i=function rPd(a){};_.aj=function sPd(){return 10};_.Bk=function tPd(){return true};_.bj=function uPd(){return false};_.Ck=function vPd(){return false};_.Dk=function wPd(){return false};_.Ek=function xPd(){return true};_.rk=function yPd(){return false};_.Fk=function zPd(){return true};_.wj=function APd(a){return JD(a,88)};_.fj=function BPd(){return cLd(this.a)};_.hi=function CPd(){return true};_.ni=function DPd(){return true};var V5=mdb(qte,'EClassImpl/8',1150);bcb(1151,1964,Lie,EPd);_.Zc=function FPd(a){return ztd(this.a,a)};_.gc=function GPd(){return VKd(this.a.a).i};var U5=mdb(qte,'EClassImpl/8/1',1151);bcb(1152,497,oue,HPd);_.ri=function IPd(a){return KC(d5,Uhe,138,a,0,1)};_.ni=function JPd(){return false};var W5=mdb(qte,'EClassImpl/9',1152);bcb(1139,53,gke,KPd);var X5=mdb(qte,'EClassImpl/MyHashSet',1139);bcb(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},MPd);_._g=function NPd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function OPd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function PPd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function QPd(){return jGd(),TFd};_.Bh=function RPd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function SPd(){o1d((O6d(),M6d),this).ne();this.Bb|=1};_.Fj=function TPd(){var a,b,c;if(!this.c){a=l6d(bKd(this));if(!a.dc()){for(c=a.Kc();c.Ob();){b=GD(c.Pb());!!Dmd(this,b)&&k6d(this)}}}return this.b};_.zj=function UPd(){var b;if(!this.e){b=null;try{b=dKd(this)}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}this.d=null;!!b&&(b.i&1)!=0&&(b==sbb?(this.d=(Bcb(),zcb)):b==WD?(this.d=meb(0)):b==VD?(this.d=new Ndb(0)):b==UD?(this.d=0):b==XD?(this.d=Aeb(0)):b==rbb?(this.d=Web(0)):b==SD?(this.d=Scb(0)):(this.d=bdb(0)));this.e=true}return this.d};_.Ej=function VPd(){return (this.Bb&256)!=0};_.Ik=function WPd(a){a&&(this.D='org.eclipse.emf.common.util.AbstractEnumerator')};_.xk=function XPd(a){gKd(this,a);this.Ik(a)};_.yk=function YPd(a){this.C=a;this.e=false};_.Ib=function ZPd(){var a;if((this.Db&64)!=0)return mKd(this);a=new Jfb(mKd(this));a.a+=' (serializable: ';Ffb(a,(this.Bb&256)!=0);a.a+=')';return a.a};_.c=false;_.d=null;_.e=false;var $5=mdb(qte,'EDataTypeImpl',566);bcb(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},aQd);_._g=function bQd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return $Pd(this);case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),this.a;}return bid(this,a-aLd((jGd(),UFd)),XKd((d=BD(Ajd(this,16),26),!d?UFd:d),a),b,c)};_.hh=function cQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Sxd(this.a,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.jh=function dQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.lh=function eQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return !!$Pd(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.sh=function fQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);!this.a&&(this.a=new cUd(g5,this,9,5));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),UFd)),XKd((c=BD(Ajd(this,16),26),!c?UFd:c),a),b)};_.zh=function gQd(){return jGd(),UFd};_.Bh=function hQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);return;}eid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.Gh=function iQd(){var a,b;if(this.a){for(a=0,b=this.a.i;a<b;++a){Cmd(qud(this.a,a))}}o1d((O6d(),M6d),this).ne();this.Bb|=1};_.zj=function jQd(){return $Pd(this)};_.wj=function kQd(a){if(a!=null){return true}return false};_.Ik=function lQd(a){};var _5=mdb(qte,'EEnumImpl',457);bcb(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},rQd);_.ne=function AQd(){return this.zb};_.Qg=function sQd(a){return mQd(this,a)};_._g=function tQd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return meb(this.d);case 3:return this.b?this.b:this.a;case 4:return e=this.c,e==null?this.zb:e;case 5:return this.Db>>16==5?BD(this.Cb,671):null;}return bid(this,a-aLd((jGd(),VFd)),XKd((d=BD(Ajd(this,16),26),!d?VFd:d),a),b,c)};_.hh=function uQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?mQd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,5,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.jh=function vQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 5:return _hd(this,null,5,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.lh=function wQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?BD(this.Cb,671):null);}return cid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.sh=function xQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:qQd(this,BD(b,19).a);return;case 3:oQd(this,BD(b,1940));return;case 4:pQd(this,GD(b));return;}did(this,a-aLd((jGd(),VFd)),XKd((c=BD(Ajd(this,16),26),!c?VFd:c),a),b)};_.zh=function yQd(){return jGd(),VFd};_.Bh=function zQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:qQd(this,0);return;case 3:oQd(this,null);return;case 4:pQd(this,null);return;}eid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.Ib=function BQd(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var a6=mdb(qte,'EEnumLiteralImpl',573);var c6=odb(qte,'EFactoryImpl/InternalEDateTimeFormat');bcb(489,1,{2015:1},EQd);var b6=mdb(qte,'EFactoryImpl/1ClientInternalEDateTimeFormat',489);bcb(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},UQd);_.Sg=function VQd(a,b,c){var d;c=_hd(this,a,b,c);if(!!this.e&&JD(a,170)){d=MQd(this,this.e);d!=this.c&&(c=QQd(this,d,c))}return c};_._g=function WQd(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new xMd(j5,this,1)),this.d;case 2:if(b)return KQd(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return JQd(this);return this.a;}return bid(this,a-aLd((jGd(),XFd)),XKd((d=BD(Ajd(this,16),26),!d?XFd:d),a),b,c)};_.jh=function XQd(a,b,c){var d,e;switch(b){case 0:return IQd(this,null,c);case 1:return !this.d&&(this.d=new xMd(j5,this,1)),Txd(this.d,a,c);case 3:return GQd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),XFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),XFd)),a,c)};_.lh=function YQd(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return cid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.sh=function ZQd(a,b){var c;switch(a){case 0:SQd(this,BD(b,87));return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);!this.d&&(this.d=new xMd(j5,this,1));ytd(this.d,BD(b,14));return;case 3:PQd(this,BD(b,87));return;case 4:RQd(this,BD(b,836));return;case 5:NQd(this,BD(b,138));return;}did(this,a-aLd((jGd(),XFd)),XKd((c=BD(Ajd(this,16),26),!c?XFd:c),a),b)};_.zh=function $Qd(){return jGd(),XFd};_.Bh=function _Qd(a){var b;switch(a){case 0:SQd(this,null);return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);return;case 3:PQd(this,null);return;case 4:RQd(this,null);return;case 5:NQd(this,null);return;}eid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.Ib=function aRd(){var a;a=new Wfb(Eid(this));a.a+=' (expression: ';TQd(this,a);a.a+=')';return a.a};var FQd;var e6=mdb(qte,'EGenericTypeImpl',241);bcb(1969,1964,Vve);_.Xh=function cRd(a,b){bRd(this,a,b)};_.lk=function dRd(a,b){bRd(this,this.gc(),a);return b};_.pi=function eRd(a){return Ut(this.Gi(),a)};_.Zh=function fRd(){return this.$h()};_.Gi=function gRd(){return new O0d(this)};_.$h=function hRd(){return this._h(0)};_._h=function iRd(a){return this.Gi().Zc(a)};_.mk=function jRd(a,b){ze(this,a,true);return b};_.ii=function kRd(a,b){var c,d;d=Vt(this,b);c=this.Zc(a);c.Rb(d);return d};_.ji=function lRd(a,b){var c;ze(this,b,true);c=this.Zc(a);c.Rb(b)};var B8=mdb(yve,'AbstractSequentialInternalEList',1969);bcb(486,1969,Vve,qRd);_.pi=function rRd(a){return Ut(this.Gi(),a)};_.Zh=function sRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_.Gi=function tRd(){return new w4d(this.a,this.b)};_.$h=function uRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_._h=function vRd(a){var b,c;if(this.b==null){if(a<0||a>1){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Jk();for(b=0;b<a;++b){MRd(c)}return c};_.dc=function wRd(){var a,b,c,d,e,f;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.Mk()||this.a.mh(a)){f=this.a.bh(a,false);Q6d();if(BD(a,66).Oj()){b=BD(f,153);for(d=0,e=b.gc();d<e;++d){if(oRd(b.il(d))&&b.jl(d)!=null){return false}}}else if(a.$j()){if(!BD(f,14).dc()){return false}}else if(f!=null){return false}}}}return true};_.Kc=function xRd(){return pRd(this)};_.Zc=function yRd(a){var b,c;if(this.b==null){if(a!=0){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Lk()?this.Kk():this.Jk();for(b=0;b<a;++b){MRd(c)}return c};_.ii=function zRd(a,b){throw vbb(new bgb)};_.ji=function ARd(a,b){throw vbb(new bgb)};_.Jk=function BRd(){return new RRd(this.a,this.b)};_.Kk=function CRd(){return new dSd(this.a,this.b)};_.Lk=function DRd(){return true};_.gc=function ERd(){var a,b,c,d,e,f,g;e=0;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.Mk()||this.a.mh(a)){g=this.a.bh(a,false);Q6d();if(BD(a,66).Oj()){b=BD(g,153);for(d=0,f=b.gc();d<f;++d){oRd(b.il(d))&&b.jl(d)!=null&&++e}}else a.$j()?(e+=BD(g,14).gc()):g!=null&&++e}}}return e};_.Mk=function FRd(){return true};var mRd;var R8=mdb(yve,'EContentsEList',486);bcb(1156,486,Vve,GRd);_.Jk=function HRd(){return new hSd(this.a,this.b)};_.Kk=function IRd(){return new fSd(this.a,this.b)};_.Mk=function JRd(){return false};var i6=mdb(qte,'ENamedElementImpl/1',1156);bcb(279,1,Wve,RRd);_.Nb=function URd(a){Rrb(this,a)};_.Rb=function SRd(a){throw vbb(new bgb)};_.Nk=function TRd(a){if(this.g!=0||!!this.e){throw vbb(new Zdb('Iterator already in use or already filtered'))}this.e=a};_.Ob=function VRd(){var a,b,c,d,e,f;switch(this.g){case 3:case 2:{return true}case 1:{return false}case -3:{!this.p?++this.n:this.p.Pb()}default:{if(!this.k||(!this.p?!NRd(this):!ORd(this,this.p))){while(this.d<this.c.length){b=this.c[this.d++];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.p=null;this.o=this.k.gc();this.n=0}else{this.p=!this.j?this.k.Yc():this.j.$h()}if(!this.p?NRd(this):ORd(this,this.p)){e=!this.p?!this.j?this.k.Xb(this.n++):this.j.pi(this.n++):this.p.Pb();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=2;return true}}}this.k=null;this.p=null;this.f=false;this.g=1;return false}else{e=!this.p?!this.j?this.k.Xb(this.n++):this.j.pi(this.n++):this.p.Pb();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=3;return true}}}};_.Sb=function WRd(){var a,b,c,d,e,f;switch(this.g){case -3:case -2:{return true}case -1:{return false}case 3:{!this.p?--this.n:this.p.Ub()}default:{if(!this.k||(!this.p?!PRd(this):!QRd(this,this.p))){while(this.d>0){b=this.c[--this.d];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.Zc(this.k.gc()):this.j._h(this.k.gc())}if(!this.p?PRd(this):QRd(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function XRd(){return MRd(this)};_.Tb=function YRd(){return this.a};_.Ub=function ZRd(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw vbb(new utb)}};_.Vb=function $Rd(){return this.a-1};_.Qb=function _Rd(){throw vbb(new bgb)};_.Lk=function aSd(){return false};_.Wb=function bSd(a){throw vbb(new bgb)};_.Mk=function cSd(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var KRd;var P8=mdb(yve,'EContentsEList/FeatureIteratorImpl',279);bcb(697,279,Wve,dSd);_.Lk=function eSd(){return true};var Q8=mdb(yve,'EContentsEList/ResolvingFeatureIteratorImpl',697);bcb(1157,697,Wve,fSd);_.Mk=function gSd(){return false};var g6=mdb(qte,'ENamedElementImpl/1/1',1157);bcb(1158,279,Wve,hSd);_.Mk=function iSd(){return false};var h6=mdb(qte,'ENamedElementImpl/1/2',1158);bcb(36,143,fve,lSd,mSd,nSd,oSd,pSd,qSd,rSd,sSd,tSd,uSd,vSd,wSd,xSd,ySd,zSd,ASd,BSd,CSd,DSd,ESd,FSd,GSd,HSd,ISd,JSd);_._i=function KSd(){return kSd(this)};_.gj=function LSd(){var a;a=kSd(this);if(a){return a.zj()}return null};_.yi=function MSd(a){this.b==-1&&!!this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj()));return this.c.Og(this.b,a)};_.Ai=function NSd(){return this.c};_.hj=function OSd(){var a;a=kSd(this);if(a){return a.Kj()}return false};_.b=-1;var k6=mdb(qte,'ENotificationImpl',36);bcb(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},SSd);_.Qg=function TSd(a){return PSd(this,a)};_._g=function USd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,26):null;case 11:return !this.d&&(this.d=new K4d(u5,this,11)),this.d;case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),this.c;case 13:return !this.a&&(this.a=new fTd(this,this)),this.a;case 14:return QSd(this);}return bid(this,a-aLd((jGd(),aGd)),XKd((d=BD(Ajd(this,16),26),!d?aGd:d),a),b,c)};_.hh=function VSd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?PSd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Sxd(this.c,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.jh=function WSd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);case 11:return !this.d&&(this.d=new K4d(u5,this,11)),Txd(this.d,a,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Txd(this.c,a,c);case 14:return Txd(QSd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.lh=function XSd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,26):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&QSd(this.a.a).i!=0&&!(!!this.b&&QTd(this.b));case 14:return !!this.b&&QTd(this.b);}return cid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.sh=function YSd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);!this.d&&(this.d=new K4d(u5,this,11));ytd(this.d,BD(b,14));return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);!this.c&&(this.c=new cUd(p5,this,12,10));ytd(this.c,BD(b,14));return;case 13:!this.a&&(this.a=new fTd(this,this));vwd(this.a);!this.a&&(this.a=new fTd(this,this));ytd(this.a,BD(b,14));return;case 14:Uxd(QSd(this));ytd(QSd(this),BD(b,14));return;}did(this,a-aLd((jGd(),aGd)),XKd((c=BD(Ajd(this,16),26),!c?aGd:c),a),b)};_.zh=function ZSd(){return jGd(),aGd};_.Bh=function $Sd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);return;case 13:!!this.a&&vwd(this.a);return;case 14:!!this.b&&Uxd(this.b);return;}eid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.Gh=function _Sd(){var a,b;if(this.c){for(a=0,b=this.c.i;a<b;++a){Cmd(qud(this.c,a))}}wId(this);this.Bb|=1};var p6=mdb(qte,'EOperationImpl',399);bcb(505,742,Uve,fTd);_.Hi=function iTd(a,b){aTd(this,a,BD(b,138))};_.Ii=function jTd(a){bTd(this,BD(a,138))};_.Oi=function pTd(a){var b,c;return b=BD(qud(QSd(this.a),a),87),c=b.c,c?c:(jGd(),YFd)};_.Ti=function uTd(a){var b,c;return b=BD(Xxd(QSd(this.a),a),87),c=b.c,c?c:(jGd(),YFd)};_.Ui=function vTd(a,b){return dTd(this,a,BD(b,138))};_.ai=function gTd(){return false};_.Zi=function hTd(a,b,c,d,e){return null};_.Ji=function kTd(){return new NTd(this)};_.Ki=function lTd(){Uxd(QSd(this.a))};_.Li=function mTd(a){return cTd(this,a)};_.Mi=function nTd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!cTd(this,b)){return false}}return true};_.Ni=function oTd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==QSd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function qTd(){var a,b,c,d,e;c=1;for(b=new Fyd(QSd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,e?e:(jGd(),YFd));c=31*c+(!d?0:tb(d))}return c};_.Qi=function rTd(a){var b,c,d,e;d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,e?e:(jGd(),YFd)))){return d}++d}return -1};_.Ri=function sTd(){return QSd(this.a).i==0};_.Si=function tTd(){return null};_.Vi=function wTd(){return QSd(this.a).i};_.Wi=function xTd(){var a,b,c,d,e,f;f=QSd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(QSd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,d?d:(jGd(),YFd))}return e};_.Xi=function yTd(a){var b,c,d,e,f,g,h;h=QSd(this.a).i;if(a.length<h){e=izd(rb(a).c,h);a=e}a.length>h&&NC(a,h,null);d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,g?g:(jGd(),YFd));NC(a,d++,f)}return a};_.Yi=function zTd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=QSd(this.a);for(b=0,d=QSd(this.a).i;b<d;){Efb(e,xfb((c=BD(qud(a,b),87).c,c?c:(jGd(),YFd))));++b<d&&(e.a+=She,e)}e.a+=']';return e.a};_.$i=function ATd(a){};_.aj=function BTd(){return 13};_.Bk=function CTd(){return true};_.bj=function DTd(){return false};_.Ck=function ETd(){return false};_.Dk=function FTd(){return false};_.Ek=function GTd(){return true};_.rk=function HTd(){return false};_.Fk=function ITd(){return true};_.wj=function JTd(a){return JD(a,138)};_.fj=function KTd(){return RSd(this.a)};_.hi=function LTd(){return true};_.ni=function MTd(){return true};var n6=mdb(qte,'EOperationImpl/1',505);bcb(1340,1964,Lie,NTd);_.Zc=function OTd(a){return ztd(this.a,a)};_.gc=function PTd(){return QSd(this.a.a).i};var m6=mdb(qte,'EOperationImpl/1/1',1340);bcb(1341,545,Pve,UTd);_.ii=function YTd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),bGd),meb(b),(d=c.c,d?d:YFd),a)),c};_.jj=function ZTd(a,b){return RTd(this,BD(a,87),b)};_.kj=function $Td(a,b){return STd(this,BD(a,87),b)};_.lj=function _Td(a,b,c){return TTd(this,BD(a,87),BD(b,87),c)};_.Zi=function VTd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function WTd(){return true};_.fj=function XTd(){return QTd(this)};_.Xj=function aUd(){Uxd(this)};var o6=mdb(qte,'EOperationImpl/2',1341);bcb(498,1,{1938:1,498:1},bUd);var q6=mdb(qte,'EPackageImpl/1',498);bcb(16,85,Pve,cUd);_.zk=function dUd(){return this.d};_.Ak=function eUd(){return this.b};_.Dk=function fUd(){return true};_.b=0;var b9=mdb(yve,'EObjectContainmentWithInverseEList',16);bcb(353,16,Pve,gUd);_.Ek=function hUd(){return true};_.li=function iUd(a,b){return ILd(this,a,BD(b,56))};var $8=mdb(yve,'EObjectContainmentWithInverseEList/Resolving',353);bcb(298,353,Pve,jUd);_.ci=function kUd(){this.a.tb=null};var r6=mdb(qte,'EPackageImpl/2',298);bcb(1228,1,{},lUd);var s6=mdb(qte,'EPackageImpl/3',1228);bcb(718,43,fke,oUd);_._b=function pUd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};var u6=mdb(qte,'EPackageRegistryImpl',718);bcb(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},rUd);_.Qg=function sUd(a){return qUd(this,a)};_._g=function tUd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,59):null;}return bid(this,a-aLd((jGd(),dGd)),XKd((d=BD(Ajd(this,16),26),!d?dGd:d),a),b,c)};_.hh=function uUd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qUd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.jh=function vUd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.lh=function wUd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,59):null);}return cid(this,a-aLd((jGd(),dGd)),XKd((b=BD(Ajd(this,16),26),!b?dGd:b),a))};_.zh=function xUd(){return jGd(),dGd};var v6=mdb(qte,'EParameterImpl',509);bcb(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},FUd);_._g=function GUd(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),g=this.t,g>1||g==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:return Bcb(),f=zUd(this),!!f&&(f.Bb&ote)!=0?true:false;case 20:return Bcb(),(this.Bb&Tje)!=0?true:false;case 21:if(b)return zUd(this);return this.b;case 22:if(b)return AUd(this);return yUd(this);case 23:return !this.a&&(this.a=new _4d(b5,this,23)),this.a;}return bid(this,a-aLd((jGd(),eGd)),XKd((d=BD(Ajd(this,16),26),!d?eGd:d),a),b,c)};_.lh=function HUd(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return d=zUd(this),!!d&&(d.Bb&ote)!=0;case 20:return (this.Bb&Tje)==0;case 21:return !!this.b;case 22:return !!yUd(this);case 23:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.sh=function IUd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:BUd(this,Ccb(DD(b)));return;case 20:EUd(this,Ccb(DD(b)));return;case 21:DUd(this,BD(b,18));return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);!this.a&&(this.a=new _4d(b5,this,23));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),eGd)),XKd((c=BD(Ajd(this,16),26),!c?eGd:c),a),b)};_.zh=function JUd(){return jGd(),eGd};_.Bh=function KUd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:CUd(this,false);JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),2);return;case 20:EUd(this,true);return;case 21:DUd(this,null);return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);return;}eid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.Gh=function LUd(){AUd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Lj=function MUd(){return zUd(this)};_.qk=function NUd(){var a;return a=zUd(this),!!a&&(a.Bb&ote)!=0};_.rk=function OUd(){return (this.Bb&ote)!=0};_.sk=function PUd(){return (this.Bb&Tje)!=0};_.nk=function QUd(a,b){this.c=null;return zId(this,a,b)};_.Ib=function RUd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (containment: ';Ffb(a,(this.Bb&ote)!=0);a.a+=', resolveProxies: ';Ffb(a,(this.Bb&Tje)!=0);a.a+=')';return a.a};var w6=mdb(qte,'EReferenceImpl',99);bcb(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},XUd);_.Fb=function bVd(a){return this===a};_.cd=function dVd(){return this.b};_.dd=function eVd(){return this.c};_.Hb=function fVd(){return FCb(this)};_.Uh=function hVd(a){SUd(this,GD(a))};_.ed=function iVd(a){return WUd(this,GD(a))};_._g=function YUd(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return bid(this,a-aLd((jGd(),fGd)),XKd((d=BD(Ajd(this,16),26),!d?fGd:d),a),b,c)};_.lh=function ZUd(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return cid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.sh=function $Ud(a,b){var c;switch(a){case 0:TUd(this,GD(b));return;case 1:VUd(this,GD(b));return;}did(this,a-aLd((jGd(),fGd)),XKd((c=BD(Ajd(this,16),26),!c?fGd:c),a),b)};_.zh=function _Ud(){return jGd(),fGd};_.Bh=function aVd(a){var b;switch(a){case 0:UUd(this,null);return;case 1:VUd(this,null);return;}eid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.Sh=function cVd(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:LCb(a)}return this.a};_.Th=function gVd(a){this.a=a};_.Ib=function jVd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (key: ';Efb(a,this.b);a.a+=', value: ';Efb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var x6=mdb(qte,'EStringToStringMapEntryImpl',548);var D9=odb(yve,'FeatureMap/Entry/Internal');bcb(565,1,Xve);_.Ok=function mVd(a){return this.Pk(BD(a,49))};_.Pk=function nVd(a){return this.Ok(a)};_.Fb=function oVd(a){var b,c;if(this===a){return true}else if(JD(a,72)){b=BD(a,72);if(b.ak()==this.c){c=this.dd();return c==null?b.dd()==null:pb(c,b.dd())}else{return false}}else{return false}};_.ak=function pVd(){return this.c};_.Hb=function qVd(){var a;a=this.dd();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function rVd(){var a,b;a=this.c;b=bKd(a.Hj()).Ph();a.ne();return (b!=null&&b.length!=0?b+':'+a.ne():a.ne())+'='+this.dd()};var y6=mdb(qte,'EStructuralFeatureImpl/BasicFeatureMapEntry',565);bcb(776,565,Xve,uVd);_.Pk=function vVd(a){return new uVd(this.c,a)};_.dd=function wVd(){return this.a};_.Qk=function xVd(a,b,c){return sVd(this,a,this.a,b,c)};_.Rk=function yVd(a,b,c){return tVd(this,a,this.a,b,c)};var z6=mdb(qte,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',776);bcb(1314,1,{},zVd);_.Pj=function AVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.nl(this.a).Wj(d)};_.Qj=function BVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.el(this.a,d,e)};_.Rj=function CVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.fl(this.a,d,e)};_.Sj=function DVd(a,b,c){var d;d=BD(gid(a,this.b),215);return d.nl(this.a).fj()};_.Tj=function EVd(a,b,c,d){var e;e=BD(gid(a,this.b),215);e.nl(this.a).Wb(d)};_.Uj=function FVd(a,b,c){return BD(gid(a,this.b),215).nl(this.a)};_.Vj=function GVd(a,b,c){var d;d=BD(gid(a,this.b),215);d.nl(this.a).Xj()};var A6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1314);bcb(89,1,{},IVd,JVd,KVd,LVd);_.Pj=function MVd(a,b,c,d,e){var f;f=b.Ch(c);f==null&&b.Dh(c,f=HVd(this,a));if(!e){switch(this.e){case 50:case 41:return BD(f,589).sj();case 40:return BD(f,215).kl();}}return f};_.Qj=function NVd(a,b,c,d,e){var f,g;g=b.Ch(c);g==null&&b.Dh(c,g=HVd(this,a));f=BD(g,69).lk(d,e);return f};_.Rj=function OVd(a,b,c,d,e){var f;f=b.Ch(c);f!=null&&(e=BD(f,69).mk(d,e));return e};_.Sj=function PVd(a,b,c){var d;d=b.Ch(c);return d!=null&&BD(d,76).fj()};_.Tj=function QVd(a,b,c,d){var e;e=BD(b.Ch(c),76);!e&&b.Dh(c,e=HVd(this,a));e.Wb(d)};_.Uj=function RVd(a,b,c){var d,e;e=b.Ch(c);e==null&&b.Dh(c,e=HVd(this,a));if(JD(e,76)){return BD(e,76)}else{d=BD(b.Ch(c),15);return new iYd(d)}};_.Vj=function SVd(a,b,c){var d;d=BD(b.Ch(c),76);!d&&b.Dh(c,d=HVd(this,a));d.Xj()};_.b=0;_.e=0;var B6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateMany',89);bcb(504,1,{});_.Qj=function WVd(a,b,c,d,e){throw vbb(new bgb)};_.Rj=function XVd(a,b,c,d,e){throw vbb(new bgb)};_.Uj=function YVd(a,b,c){return new ZVd(this,a,b,c)};var TVd;var i7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle',504);bcb(1331,1,zve,ZVd);_.Wj=function $Vd(a){return this.a.Pj(this.c,this.d,this.b,a,true)};_.fj=function _Vd(){return this.a.Sj(this.c,this.d,this.b)};_.Wb=function aWd(a){this.a.Tj(this.c,this.d,this.b,a)};_.Xj=function bWd(){this.a.Vj(this.c,this.d,this.b)};_.b=0;var C6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1331);bcb(769,504,{},cWd);_.Pj=function dWd(a,b,c,d,e){return Nid(a,a.eh(),a.Vg())==this.b?this.sk()&&d?aid(a):a.eh():null};_.Qj=function eWd(a,b,c,d,e){var f,g;!!a.eh()&&(e=(f=a.Vg(),f>=0?a.Qg(e):a.eh().ih(a,-1-f,null,e)));g=bLd(a.Tg(),this.e);return a.Sg(d,g,e)};_.Rj=function fWd(a,b,c,d,e){var f;f=bLd(a.Tg(),this.e);return a.Sg(null,f,e)};_.Sj=function gWd(a,b,c){var d;d=bLd(a.Tg(),this.e);return !!a.eh()&&a.Vg()==d};_.Tj=function hWd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}e=a.eh();g=bLd(a.Tg(),this.e);if(PD(d)!==PD(e)||a.Vg()!=g&&d!=null){if(p6d(a,BD(d,56)))throw vbb(new Wdb(ste+a.Ib()));i=null;!!e&&(i=(f=a.Vg(),f>=0?a.Qg(i):a.eh().ih(a,-1-f,null,i)));h=BD(d,49);!!h&&(i=h.gh(a,bLd(h.Tg(),this.b),null,i));i=a.Sg(h,g,i);!!i&&i.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new nSd(a,1,g,d,d))}};_.Vj=function iWd(a,b,c){var d,e,f,g;d=a.eh();if(d){g=(e=a.Vg(),e>=0?a.Qg(null):a.eh().ih(a,-1-e,null,null));f=bLd(a.Tg(),this.e);g=a.Sg(null,f,g);!!g&&g.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,1,this.e,null,null))}};_.sk=function jWd(){return false};var E6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',769);bcb(1315,769,{},kWd);_.sk=function lWd(){return true};var D6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1315);bcb(563,504,{});_.Pj=function oWd(a,b,c,d,e){var f;return f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f};_.Sj=function pWd(a,b,c){var d;d=b.Ch(c);return d!=null&&(PD(d)===PD(TVd)||!pb(d,this.b))};_.Tj=function qWd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=(f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Tk(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.Dh(c,null):this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function rWd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=(e=b.Ch(c),e==null?this.b:PD(e)===PD(TVd)?null:e);b.Eh(c);Uhd(a,this.d.Tk(a,1,this.e,d,this.b))}else{b.Eh(c)}};_.Sk=function sWd(a){throw vbb(new Bdb)};var T6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',563);bcb($ve,1,{},DWd);_.Tk=function EWd(a,b,c,d,e){return new DSd(a,b,c,d,e)};_.Uk=function FWd(a,b,c,d,e,f){return new FSd(a,b,c,d,e,f)};var tWd,uWd,vWd,wWd,xWd,yWd,zWd,AWd,BWd;var N6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',$ve);bcb(1332,$ve,{},GWd);_.Tk=function HWd(a,b,c,d,e){return new ISd(a,b,c,Ccb(DD(d)),Ccb(DD(e)))};_.Uk=function IWd(a,b,c,d,e,f){return new JSd(a,b,c,Ccb(DD(d)),Ccb(DD(e)),f)};var F6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1332);bcb(1333,$ve,{},JWd);_.Tk=function KWd(a,b,c,d,e){return new rSd(a,b,c,BD(d,217).a,BD(e,217).a)};_.Uk=function LWd(a,b,c,d,e,f){return new sSd(a,b,c,BD(d,217).a,BD(e,217).a,f)};var G6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1333);bcb(1334,$ve,{},MWd);_.Tk=function NWd(a,b,c,d,e){return new tSd(a,b,c,BD(d,172).a,BD(e,172).a)};_.Uk=function OWd(a,b,c,d,e,f){return new uSd(a,b,c,BD(d,172).a,BD(e,172).a,f)};var H6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1334);bcb(1335,$ve,{},PWd);_.Tk=function QWd(a,b,c,d,e){return new vSd(a,b,c,Edb(ED(d)),Edb(ED(e)))};_.Uk=function RWd(a,b,c,d,e,f){return new wSd(a,b,c,Edb(ED(d)),Edb(ED(e)),f)};var I6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1335);bcb(1336,$ve,{},SWd);_.Tk=function TWd(a,b,c,d,e){return new xSd(a,b,c,BD(d,155).a,BD(e,155).a)};_.Uk=function UWd(a,b,c,d,e,f){return new ySd(a,b,c,BD(d,155).a,BD(e,155).a,f)};var J6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1336);bcb(1337,$ve,{},VWd);_.Tk=function WWd(a,b,c,d,e){return new zSd(a,b,c,BD(d,19).a,BD(e,19).a)};_.Uk=function XWd(a,b,c,d,e,f){return new ASd(a,b,c,BD(d,19).a,BD(e,19).a,f)};var K6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1337);bcb(1338,$ve,{},YWd);_.Tk=function ZWd(a,b,c,d,e){return new BSd(a,b,c,BD(d,162).a,BD(e,162).a)};_.Uk=function $Wd(a,b,c,d,e,f){return new CSd(a,b,c,BD(d,162).a,BD(e,162).a,f)};var L6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1338);bcb(1339,$ve,{},_Wd);_.Tk=function aXd(a,b,c,d,e){return new GSd(a,b,c,BD(d,184).a,BD(e,184).a)};_.Uk=function bXd(a,b,c,d,e,f){return new HSd(a,b,c,BD(d,184).a,BD(e,184).a,f)};var M6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1339);bcb(1317,563,{},cXd);_.Sk=function dXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var O6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1317);bcb(1318,563,{},eXd);_.Sk=function fXd(a){};var P6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1318);bcb(770,563,{});_.Sj=function gXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function hXd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=true;f=b.Ch(c);if(f==null){e=false;f=this.b}else PD(f)===PD(TVd)&&(f=null);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else{b.Dh(c,TVd)}}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Uk(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.Dh(c,null):b.Dh(c,TVd)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function iXd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=true;e=b.Ch(c);if(e==null){d=false;e=this.b}else PD(e)===PD(TVd)&&(e=null);b.Eh(c);Uhd(a,this.d.Uk(a,2,this.e,e,this.b,d))}else{b.Eh(c)}};var S6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',770);bcb(1319,770,{},jXd);_.Sk=function kXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var Q6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1319);bcb(1320,770,{},lXd);_.Sk=function mXd(a){};var R6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1320);bcb(398,504,{},nXd);_.Pj=function pXd(a,b,c,d,e){var f,g,h,i,j;j=b.Ch(c);if(this.Kj()&&PD(j)===PD(TVd)){return null}else if(this.sk()&&d&&j!=null){h=BD(j,49);if(h.kh()){i=xid(a,h);if(h!=i){if(!fKd(this.a,i)){throw vbb(new Cdb(Yve+rb(i)+Zve+this.a+"'"))}b.Dh(c,j=i);if(this.rk()){f=BD(i,49);g=h.ih(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(h.Tg(),this.b),null,null);!f.eh()&&(g=f.gh(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(f.Tg(),this.b),null,g));!!g&&g.Fi()}a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,9,this.e,h,i))}}return j}else{return j}};_.Qj=function qXd(a,b,c,d,e){var f,g;g=b.Ch(c);PD(g)===PD(TVd)&&(g=null);b.Dh(c,d);if(this.bj()){if(PD(g)!==PD(d)&&g!=null){f=BD(g,49);e=f.ih(a,bLd(f.Tg(),this.b),null,e)}}else this.rk()&&g!=null&&(e=BD(g,49).ih(a,-1-bLd(a.Tg(),this.e),null,e));if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));e.Ei(new DSd(a,1,this.e,g,d))}return e};_.Rj=function rXd(a,b,c,d,e){var f;f=b.Ch(c);PD(f)===PD(TVd)&&(f=null);b.Eh(c);if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));this.Kj()?e.Ei(new DSd(a,2,this.e,f,null)):e.Ei(new DSd(a,1,this.e,f,null))}return e};_.Sj=function sXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function tXd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}i=b.Ch(c);h=i!=null;this.Kj()&&PD(i)===PD(TVd)&&(i=null);g=null;if(this.bj()){if(PD(i)!==PD(d)){if(i!=null){e=BD(i,49);g=e.ih(a,bLd(e.Tg(),this.b),null,g)}if(d!=null){e=BD(d,49);g=e.gh(a,bLd(e.Tg(),this.b),null,g)}}}else if(this.rk()){if(PD(i)!==PD(d)){i!=null&&(g=BD(i,49).ih(a,-1-bLd(a.Tg(),this.e),null,g));d!=null&&(g=BD(d,49).gh(a,-1-bLd(a.Tg(),this.e),null,g))}}d==null&&this.Kj()?b.Dh(c,TVd):b.Dh(c,d);if(a.Lg()&&a.Mg()){f=new FSd(a,1,this.e,i,d,this.Kj()&&!h);if(!g){Uhd(a,f)}else{g.Ei(f);g.Fi()}}else !!g&&g.Fi()};_.Vj=function uXd(a,b,c){var d,e,f,g,h;h=b.Ch(c);g=h!=null;this.Kj()&&PD(h)===PD(TVd)&&(h=null);f=null;if(h!=null){if(this.bj()){d=BD(h,49);f=d.ih(a,bLd(d.Tg(),this.b),null,f)}else this.rk()&&(f=BD(h,49).ih(a,-1-bLd(a.Tg(),this.e),null,f))}b.Eh(c);if(a.Lg()&&a.Mg()){e=new FSd(a,this.Kj()?2:1,this.e,h,null,g);if(!f){Uhd(a,e)}else{f.Ei(e);f.Fi()}}else !!f&&f.Fi()};_.bj=function vXd(){return false};_.rk=function wXd(){return false};_.sk=function xXd(){return false};_.Kj=function yXd(){return false};var h7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',398);bcb(564,398,{},zXd);_.rk=function AXd(){return true};var _6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',564);bcb(1323,564,{},BXd);_.sk=function CXd(){return true};var U6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1323);bcb(772,564,{},DXd);_.Kj=function EXd(){return true};var W6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',772);bcb(1325,772,{},FXd);_.sk=function GXd(){return true};var V6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1325);bcb(640,564,{},HXd);_.bj=function IXd(){return true};var $6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',640);bcb(1324,640,{},JXd);_.sk=function KXd(){return true};var X6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1324);bcb(773,640,{},LXd);_.Kj=function MXd(){return true};var Z6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',773);bcb(1326,773,{},NXd);_.sk=function OXd(){return true};var Y6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1326);bcb(641,398,{},PXd);_.sk=function QXd(){return true};var d7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',641);bcb(1327,641,{},RXd);_.Kj=function SXd(){return true};var a7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1327);bcb(774,641,{},TXd);_.bj=function UXd(){return true};var c7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',774);bcb(1328,774,{},VXd);_.Kj=function WXd(){return true};var b7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1328);bcb(1321,398,{},XXd);_.Kj=function YXd(){return true};var e7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1321);bcb(771,398,{},ZXd);_.bj=function $Xd(){return true};var g7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',771);bcb(1322,771,{},_Xd);_.Kj=function aYd(){return true};var f7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1322);bcb(775,565,Xve,dYd);_.Pk=function eYd(a){return new dYd(this.a,this.c,a)};_.dd=function fYd(){return this.b};_.Qk=function gYd(a,b,c){return bYd(this,a,this.b,c)};_.Rk=function hYd(a,b,c){return cYd(this,a,this.b,c)};var j7=mdb(qte,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',775);bcb(1329,1,zve,iYd);_.Wj=function jYd(a){return this.a};_.fj=function kYd(){return JD(this.a,95)?BD(this.a,95).fj():!this.a.dc()};_.Wb=function lYd(a){this.a.$b();this.a.Gc(BD(a,15))};_.Xj=function mYd(){JD(this.a,95)?BD(this.a,95).Xj():this.a.$b()};var k7=mdb(qte,'EStructuralFeatureImpl/SettingMany',1329);bcb(1330,565,Xve,nYd);_.Ok=function oYd(a){return new sYd((Q8d(),P8d),this.b.Ih(this.a,a))};_.dd=function pYd(){return null};_.Qk=function qYd(a,b,c){return c};_.Rk=function rYd(a,b,c){return c};var l7=mdb(qte,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1330);bcb(642,565,Xve,sYd);_.Ok=function tYd(a){return new sYd(this.c,a)};_.dd=function uYd(){return this.a};_.Qk=function vYd(a,b,c){return c};_.Rk=function wYd(a,b,c){return c};var m7=mdb(qte,'EStructuralFeatureImpl/SimpleFeatureMapEntry',642);bcb(391,497,oue,xYd);_.ri=function yYd(a){return KC(c5,Uhe,26,a,0,1)};_.ni=function zYd(){return false};var o7=mdb(qte,'ESuperAdapter/1',391);bcb(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},BYd);_._g=function CYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new KYd(this,j5,this)),this.a;}return bid(this,a-aLd((jGd(),iGd)),XKd((d=BD(Ajd(this,16),26),!d?iGd:d),a),b,c)};_.jh=function DYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.a&&(this.a=new KYd(this,j5,this)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),iGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),iGd)),a,c)};_.lh=function EYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};_.sh=function FYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);!this.a&&(this.a=new KYd(this,j5,this));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),iGd)),XKd((c=BD(Ajd(this,16),26),!c?iGd:c),a),b)};_.zh=function GYd(){return jGd(),iGd};_.Bh=function HYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);return;}eid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};var u7=mdb(qte,'ETypeParameterImpl',444);bcb(445,85,Pve,KYd);_.cj=function LYd(a,b){return IYd(this,BD(a,87),b)};_.dj=function MYd(a,b){return JYd(this,BD(a,87),b)};var q7=mdb(qte,'ETypeParameterImpl/1',445);bcb(634,43,fke,NYd);_.ec=function OYd(){return new RYd(this)};var t7=mdb(qte,'ETypeParameterImpl/2',634);bcb(556,eie,fie,RYd);_.Fc=function SYd(a){return PYd(this,BD(a,87))};_.Gc=function TYd(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=BD(c.Pb(),87);Rhb(this.a,b,'')==null&&(d=true)}return d};_.$b=function UYd(){Uhb(this.a)};_.Hc=function VYd(a){return Mhb(this.a,a)};_.Kc=function WYd(){var a;return a=new nib((new eib(this.a)).a),new ZYd(a)};_.Mc=function XYd(a){return QYd(this,a)};_.gc=function YYd(){return Vhb(this.a)};var s7=mdb(qte,'ETypeParameterImpl/2/1',556);bcb(557,1,aie,ZYd);_.Nb=function $Yd(a){Rrb(this,a)};_.Pb=function aZd(){return BD(lib(this.a).cd(),87)};_.Ob=function _Yd(){return this.a.b};_.Qb=function bZd(){mib(this.a)};var r7=mdb(qte,'ETypeParameterImpl/2/1/1',557);bcb(1276,43,fke,cZd);_._b=function dZd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};_.xc=function eZd(a){var b,c;b=ND(a)?Phb(this,a):Wd(irb(this.f,a));if(JD(b,837)){c=BD(b,837);b=c._j();Rhb(this,BD(a,235),b);return b}else return b!=null?b:a==null?(g5d(),f5d):null};var w7=mdb(qte,'EValidatorRegistryImpl',1276);bcb(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},mZd);_.Ih=function nZd(a,b){switch(a.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return b==null?null:fcb(b);case 25:return gZd(b);case 27:return hZd(b);case 28:return iZd(b);case 29:return b==null?null:CQd(Pmd[0],BD(b,199));case 41:return b==null?'':hdb(BD(b,290));case 42:return fcb(b);case 50:return GD(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function oZd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=bKd(a),m?HLd(m.Mh(),a):-1)),a.G){case 0:return c=new OJd,c;case 1:return b=new RHd,b;case 2:return d=new hLd,d;case 4:return e=new MPd,e;case 5:return f=new aQd,f;case 6:return g=new rQd,g;case 7:return h=new $md,h;case 10:return j=new MGd,j;case 11:return k=new SSd,k;case 12:return l=new eod,l;case 13:return n=new rUd,n;case 14:return o=new FUd,o;case 17:return p=new XUd,p;case 18:return i=new UQd,i;case 19:return q=new BYd,q;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function pZd(a,b){switch(a.yj()){case 20:return b==null?null:new tgb(b);case 21:return b==null?null:new Ygb(b);case 23:case 22:return b==null?null:fZd(b);case 26:case 24:return b==null?null:Scb(Icb(b,-128,127)<<24>>24);case 25:return Xmd(b);case 27:return jZd(b);case 28:return kZd(b);case 29:return lZd(b);case 32:case 31:return b==null?null:Hcb(b);case 38:case 37:return b==null?null:new Odb(b);case 40:case 39:return b==null?null:meb(Icb(b,Rie,Ohe));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Aeb(Jcb(b));case 49:case 48:return b==null?null:Web(Icb(b,awe,32767)<<16>>16);case 50:return b;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var x7=mdb(qte,'EcoreFactoryImpl',1313);bcb(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},AZd);_.gb=false;_.hb=false;var rZd,sZd=false;var o8=mdb(qte,'EcorePackageImpl',547);bcb(1184,1,{837:1},EZd);_._j=function FZd(){return I6d(),H6d};var I7=mdb(qte,'EcorePackageImpl/1',1184);bcb(1193,1,nwe,GZd);_.wj=function HZd(a){return JD(a,147)};_.xj=function IZd(a){return KC(k5,Uhe,147,a,0,1)};var y7=mdb(qte,'EcorePackageImpl/10',1193);bcb(1194,1,nwe,JZd);_.wj=function KZd(a){return JD(a,191)};_.xj=function LZd(a){return KC(l5,Uhe,191,a,0,1)};var z7=mdb(qte,'EcorePackageImpl/11',1194);bcb(1195,1,nwe,MZd);_.wj=function NZd(a){return JD(a,56)};_.xj=function OZd(a){return KC(m5,Uhe,56,a,0,1)};var A7=mdb(qte,'EcorePackageImpl/12',1195);bcb(1196,1,nwe,PZd);_.wj=function QZd(a){return JD(a,399)};_.xj=function RZd(a){return KC(n5,Nve,59,a,0,1)};var B7=mdb(qte,'EcorePackageImpl/13',1196);bcb(1197,1,nwe,SZd);_.wj=function TZd(a){return JD(a,235)};_.xj=function UZd(a){return KC(o5,Uhe,235,a,0,1)};var C7=mdb(qte,'EcorePackageImpl/14',1197);bcb(1198,1,nwe,VZd);_.wj=function WZd(a){return JD(a,509)};_.xj=function XZd(a){return KC(p5,Uhe,2017,a,0,1)};var D7=mdb(qte,'EcorePackageImpl/15',1198);bcb(1199,1,nwe,YZd);_.wj=function ZZd(a){return JD(a,99)};_.xj=function $Zd(a){return KC(q5,Mve,18,a,0,1)};var E7=mdb(qte,'EcorePackageImpl/16',1199);bcb(1200,1,nwe,_Zd);_.wj=function a$d(a){return JD(a,170)};_.xj=function b$d(a){return KC(t5,Mve,170,a,0,1)};var F7=mdb(qte,'EcorePackageImpl/17',1200);bcb(1201,1,nwe,c$d);_.wj=function d$d(a){return JD(a,472)};_.xj=function e$d(a){return KC(v5,Uhe,472,a,0,1)};var G7=mdb(qte,'EcorePackageImpl/18',1201);bcb(1202,1,nwe,f$d);_.wj=function g$d(a){return JD(a,548)};_.xj=function h$d(a){return KC(x6,kve,548,a,0,1)};var H7=mdb(qte,'EcorePackageImpl/19',1202);bcb(1185,1,nwe,i$d);_.wj=function j$d(a){return JD(a,322)};_.xj=function k$d(a){return KC(b5,Mve,34,a,0,1)};var T7=mdb(qte,'EcorePackageImpl/2',1185);bcb(1203,1,nwe,l$d);_.wj=function m$d(a){return JD(a,241)};_.xj=function n$d(a){return KC(j5,Tve,87,a,0,1)};var J7=mdb(qte,'EcorePackageImpl/20',1203);bcb(1204,1,nwe,o$d);_.wj=function p$d(a){return JD(a,444)};_.xj=function q$d(a){return KC(u5,Uhe,836,a,0,1)};var K7=mdb(qte,'EcorePackageImpl/21',1204);bcb(1205,1,nwe,r$d);_.wj=function s$d(a){return KD(a)};_.xj=function t$d(a){return KC(wI,nie,476,a,8,1)};var L7=mdb(qte,'EcorePackageImpl/22',1205);bcb(1206,1,nwe,u$d);_.wj=function v$d(a){return JD(a,190)};_.xj=function w$d(a){return KC(SD,nie,190,a,0,2)};var M7=mdb(qte,'EcorePackageImpl/23',1206);bcb(1207,1,nwe,x$d);_.wj=function y$d(a){return JD(a,217)};_.xj=function z$d(a){return KC(xI,nie,217,a,0,1)};var N7=mdb(qte,'EcorePackageImpl/24',1207);bcb(1208,1,nwe,A$d);_.wj=function B$d(a){return JD(a,172)};_.xj=function C$d(a){return KC(yI,nie,172,a,0,1)};var O7=mdb(qte,'EcorePackageImpl/25',1208);bcb(1209,1,nwe,D$d);_.wj=function E$d(a){return JD(a,199)};_.xj=function F$d(a){return KC($J,nie,199,a,0,1)};var P7=mdb(qte,'EcorePackageImpl/26',1209);bcb(1210,1,nwe,G$d);_.wj=function H$d(a){return false};_.xj=function I$d(a){return KC(O4,Uhe,2110,a,0,1)};var Q7=mdb(qte,'EcorePackageImpl/27',1210);bcb(1211,1,nwe,J$d);_.wj=function K$d(a){return LD(a)};_.xj=function L$d(a){return KC(BI,nie,333,a,7,1)};var R7=mdb(qte,'EcorePackageImpl/28',1211);bcb(1212,1,nwe,M$d);_.wj=function N$d(a){return JD(a,58)};_.xj=function O$d(a){return KC(T4,eme,58,a,0,1)};var S7=mdb(qte,'EcorePackageImpl/29',1212);bcb(1186,1,nwe,P$d);_.wj=function Q$d(a){return JD(a,510)};_.xj=function R$d(a){return KC(a5,{3:1,4:1,5:1,1934:1},590,a,0,1)};var c8=mdb(qte,'EcorePackageImpl/3',1186);bcb(1213,1,nwe,S$d);_.wj=function T$d(a){return JD(a,573)};_.xj=function U$d(a){return KC(U4,Uhe,1940,a,0,1)};var U7=mdb(qte,'EcorePackageImpl/30',1213);bcb(1214,1,nwe,V$d);_.wj=function W$d(a){return JD(a,153)};_.xj=function X$d(a){return KC(O9,eme,153,a,0,1)};var V7=mdb(qte,'EcorePackageImpl/31',1214);bcb(1215,1,nwe,Y$d);_.wj=function Z$d(a){return JD(a,72)};_.xj=function $$d(a){return KC(E9,owe,72,a,0,1)};var W7=mdb(qte,'EcorePackageImpl/32',1215);bcb(1216,1,nwe,_$d);_.wj=function a_d(a){return JD(a,155)};_.xj=function b_d(a){return KC(FI,nie,155,a,0,1)};var X7=mdb(qte,'EcorePackageImpl/33',1216);bcb(1217,1,nwe,c_d);_.wj=function d_d(a){return JD(a,19)};_.xj=function e_d(a){return KC(JI,nie,19,a,0,1)};var Y7=mdb(qte,'EcorePackageImpl/34',1217);bcb(1218,1,nwe,f_d);_.wj=function g_d(a){return JD(a,290)};_.xj=function h_d(a){return KC(AI,Uhe,290,a,0,1)};var Z7=mdb(qte,'EcorePackageImpl/35',1218);bcb(1219,1,nwe,i_d);_.wj=function j_d(a){return JD(a,162)};_.xj=function k_d(a){return KC(MI,nie,162,a,0,1)};var $7=mdb(qte,'EcorePackageImpl/36',1219);bcb(1220,1,nwe,l_d);_.wj=function m_d(a){return JD(a,83)};_.xj=function n_d(a){return KC(DK,Uhe,83,a,0,1)};var _7=mdb(qte,'EcorePackageImpl/37',1220);bcb(1221,1,nwe,o_d);_.wj=function p_d(a){return JD(a,591)};_.xj=function q_d(a){return KC(v8,Uhe,591,a,0,1)};var a8=mdb(qte,'EcorePackageImpl/38',1221);bcb(1222,1,nwe,r_d);_.wj=function s_d(a){return false};_.xj=function t_d(a){return KC(u8,Uhe,2111,a,0,1)};var b8=mdb(qte,'EcorePackageImpl/39',1222);bcb(1187,1,nwe,u_d);_.wj=function v_d(a){return JD(a,88)};_.xj=function w_d(a){return KC(c5,Uhe,26,a,0,1)};var i8=mdb(qte,'EcorePackageImpl/4',1187);bcb(1223,1,nwe,x_d);_.wj=function y_d(a){return JD(a,184)};_.xj=function z_d(a){return KC(UI,nie,184,a,0,1)};var d8=mdb(qte,'EcorePackageImpl/40',1223);bcb(1224,1,nwe,A_d);_.wj=function B_d(a){return ND(a)};_.xj=function C_d(a){return KC(ZI,nie,2,a,6,1)};var e8=mdb(qte,'EcorePackageImpl/41',1224);bcb(1225,1,nwe,D_d);_.wj=function E_d(a){return JD(a,588)};_.xj=function F_d(a){return KC(X4,Uhe,588,a,0,1)};var f8=mdb(qte,'EcorePackageImpl/42',1225);bcb(1226,1,nwe,G_d);_.wj=function H_d(a){return false};_.xj=function I_d(a){return KC(V4,nie,2112,a,0,1)};var g8=mdb(qte,'EcorePackageImpl/43',1226);bcb(1227,1,nwe,J_d);_.wj=function K_d(a){return JD(a,42)};_.xj=function L_d(a){return KC(CK,zie,42,a,0,1)};var h8=mdb(qte,'EcorePackageImpl/44',1227);bcb(1188,1,nwe,M_d);_.wj=function N_d(a){return JD(a,138)};_.xj=function O_d(a){return KC(d5,Uhe,138,a,0,1)};var j8=mdb(qte,'EcorePackageImpl/5',1188);bcb(1189,1,nwe,P_d);_.wj=function Q_d(a){return JD(a,148)};_.xj=function R_d(a){return KC(f5,Uhe,148,a,0,1)};var k8=mdb(qte,'EcorePackageImpl/6',1189);bcb(1190,1,nwe,S_d);_.wj=function T_d(a){return JD(a,457)};_.xj=function U_d(a){return KC(h5,Uhe,671,a,0,1)};var l8=mdb(qte,'EcorePackageImpl/7',1190);bcb(1191,1,nwe,V_d);_.wj=function W_d(a){return JD(a,573)};_.xj=function X_d(a){return KC(g5,Uhe,678,a,0,1)};var m8=mdb(qte,'EcorePackageImpl/8',1191);bcb(1192,1,nwe,Y_d);_.wj=function Z_d(a){return JD(a,471)};_.xj=function $_d(a){return KC(i5,Uhe,471,a,0,1)};var n8=mdb(qte,'EcorePackageImpl/9',1192);bcb(1025,1982,ive,c0d);_.bi=function d0d(a,b){__d(this,BD(b,415))};_.fi=function e0d(a,b){a0d(this,a,BD(b,415))};var q8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1025);bcb(1026,143,fve,f0d);_.Ai=function g0d(){return this.a.a};var p8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1026);bcb(1053,1052,{},i0d);var t8=mdb('org.eclipse.emf.ecore.plugin','EcorePlugin',1053);var v8=odb(pwe,'Resource');bcb(781,1378,qwe);_.Yk=function m0d(a){};_.Zk=function n0d(a){};_.Vk=function o0d(){return !this.a&&(this.a=new z0d(this)),this.a};_.Wk=function p0d(a){var b,c,d,e,f;d=a.length;if(d>0){BCb(0,a.length);if(a.charCodeAt(0)==47){f=new Skb(4);e=1;for(b=1;b<d;++b){BCb(b,a.length);if(a.charCodeAt(b)==47){Ekb(f,e==b?'':a.substr(e,b-e));e=b+1}}Ekb(f,a.substr(e));return j0d(this,f)}else{BCb(d-1,a.length);if(a.charCodeAt(d-1)==63){c=lfb(a,wfb(63),d-2);c>0&&(a=a.substr(0,c))}}}return k0d(this,a)};_.Xk=function q0d(){return this.c};_.Ib=function r0d(){var a;return hdb(this.gm)+'@'+(a=tb(this)>>>0,a.toString(16))+" uri='"+this.d+"'"};_.b=false;var z8=mdb(rwe,'ResourceImpl',781);bcb(1379,781,qwe,s0d);var w8=mdb(rwe,'BinaryResourceImpl',1379);bcb(1169,694,pue);_.si=function v0d(a){return JD(a,56)?t0d(this,BD(a,56)):JD(a,591)?new Fyd(BD(a,591).Vk()):PD(a)===PD(this.f)?BD(a,14).Kc():(LCd(),KCd.a)};_.Ob=function w0d(){return u0d(this)};_.a=false;var z9=mdb(yve,'EcoreUtil/ContentTreeIterator',1169);bcb(1380,1169,pue,x0d);_.si=function y0d(a){return PD(a)===PD(this.f)?BD(a,15).Kc():new C6d(BD(a,56))};var x8=mdb(rwe,'ResourceImpl/5',1380);bcb(648,1994,Ove,z0d);_.Hc=function A0d(a){return this.i<=4?pud(this,a):JD(a,49)&&BD(a,49).Zg()==this.a};_.bi=function B0d(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.di=function C0d(a,b){a==0?this.a.b||(this.a.b=true,null):Atd(this,a,b)};_.fi=function D0d(a,b){};_.gi=function E0d(a,b,c){};_.aj=function F0d(){return 2};_.Ai=function G0d(){return this.a};_.bj=function H0d(){return true};_.cj=function I0d(a,b){var c;c=BD(a,49);b=c.wh(this.a,b);return b};_.dj=function J0d(a,b){var c;c=BD(a,49);return c.wh(null,b)};_.ej=function K0d(){return false};_.hi=function L0d(){return true};_.ri=function M0d(a){return KC(m5,Uhe,56,a,0,1)};_.ni=function N0d(){return false};var y8=mdb(rwe,'ResourceImpl/ContentsEList',648);bcb(957,1964,Lie,O0d);_.Zc=function P0d(a){return this.a._h(a)};_.gc=function Q0d(){return this.a.gc()};var A8=mdb(yve,'AbstractSequentialInternalEList/1',957);var K6d,L6d,M6d,N6d;bcb(624,1,{},y1d);var R0d,S0d;var G8=mdb(yve,'BasicExtendedMetaData',624);bcb(1160,1,{},C1d);_.$k=function D1d(){return null};_._k=function E1d(){this.a==-2&&A1d(this,W0d(this.d,this.b));return this.a};_.al=function F1d(){return null};_.bl=function G1d(){return mmb(),mmb(),jmb};_.ne=function H1d(){this.c==Gwe&&B1d(this,_0d(this.d,this.b));return this.c};_.cl=function I1d(){return 0};_.a=-2;_.c=Gwe;var C8=mdb(yve,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1160);bcb(1161,1,{},O1d);_.$k=function P1d(){this.a==(T0d(),R0d)&&J1d(this,V0d(this.f,this.b));return this.a};_._k=function Q1d(){return 0};_.al=function R1d(){this.c==(T0d(),R0d)&&K1d(this,Z0d(this.f,this.b));return this.c};_.bl=function S1d(){!this.d&&L1d(this,$0d(this.f,this.b));return this.d};_.ne=function T1d(){this.e==Gwe&&M1d(this,_0d(this.f,this.b));return this.e};_.cl=function U1d(){this.g==-2&&N1d(this,c1d(this.f,this.b));return this.g};_.e=Gwe;_.g=-2;var D8=mdb(yve,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1161);bcb(1159,1,{},Y1d);_.b=false;_.c=false;var E8=mdb(yve,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1159);bcb(1162,1,{},j2d);_.c=-2;_.e=Gwe;_.f=Gwe;var F8=mdb(yve,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1162);bcb(585,622,Pve,k2d);_.aj=function l2d(){return this.c};_.Fk=function m2d(){return false};_.li=function n2d(a,b){return b};_.c=0;var T8=mdb(yve,'EDataTypeEList',585);var O9=odb(yve,'FeatureMap');bcb(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},u3d);_.Vc=function v3d(a,b){o2d(this,a,BD(b,72))};_.Fc=function w3d(a){return r2d(this,BD(a,72))};_.Yh=function B3d(a){w2d(this,BD(a,72))};_.cj=function M3d(a,b){return O2d(this,BD(a,72),b)};_.dj=function N3d(a,b){return Q2d(this,BD(a,72),b)};_.ii=function P3d(a,b){return W2d(this,a,b)};_.li=function R3d(a,b){return _2d(this,a,BD(b,72))};_._c=function T3d(a,b){return c3d(this,a,BD(b,72))};_.jj=function X3d(a,b){return i3d(this,BD(a,72),b)};_.kj=function Y3d(a,b){return k3d(this,BD(a,72),b)};_.lj=function Z3d(a,b,c){return l3d(this,BD(a,72),BD(b,72),c)};_.oi=function _3d(a,b){return t3d(this,a,BD(b,72))};_.dl=function x3d(a,b){return q2d(this,a,b)};_.Wc=function y3d(a,b){var c,d,e,f,g,h,i,j,k;j=new zud(b.gc());for(e=b.Kc();e.Ob();){d=BD(e.Pb(),72);f=d.ak();if(T6d(this.e,f)){(!f.hi()||!E2d(this,f,d.dd())&&!pud(j,d))&&wtd(j,d)}else{k=S6d(this.e.Tg(),f);c=BD(this.g,119);g=true;for(h=0;h<this.i;++h){i=c[h];if(k.rl(i.ak())){BD(Gtd(this,h,d),72);g=false;break}}g&&wtd(j,d)}}return xtd(this,a,j)};_.Gc=function z3d(a){var b,c,d,e,f,g,h,i,j;i=new zud(a.gc());for(d=a.Kc();d.Ob();){c=BD(d.Pb(),72);e=c.ak();if(T6d(this.e,e)){(!e.hi()||!E2d(this,e,c.dd())&&!pud(i,c))&&wtd(i,c)}else{j=S6d(this.e.Tg(),e);b=BD(this.g,119);f=true;for(g=0;g<this.i;++g){h=b[g];if(j.rl(h.ak())){BD(Gtd(this,g,c),72);f=false;break}}f&&wtd(i,c)}}return ytd(this,i)};_.Wh=function A3d(a){this.j=-1;return Pxd(this,this.i,a)};_.el=function C3d(a,b,c){return x2d(this,a,b,c)};_.mk=function D3d(a,b){return B2d(this,a,b)};_.fl=function E3d(a,b,c){return C2d(this,a,b,c)};_.gl=function F3d(){return this};_.hl=function G3d(a,b){return K2d(this,a,b)};_.il=function H3d(a){return BD(qud(this,a),72).ak()};_.jl=function I3d(a){return BD(qud(this,a),72).dd()};_.kl=function J3d(){return this.b};_.bj=function K3d(){return true};_.ij=function L3d(){return true};_.ll=function O3d(a){return !R2d(this,a)};_.ri=function Q3d(a){return KC(D9,owe,332,a,0,1)};_.Gk=function S3d(a){return a3d(this,a)};_.Wb=function U3d(a){d3d(this,a)};_.ml=function V3d(a,b){f3d(this,a,b)};_.nl=function W3d(a){return g3d(this,a)};_.ol=function $3d(a){s3d(this,a)};var J8=mdb(yve,'BasicFeatureMap',75);bcb(1851,1,jie);_.Nb=function f4d(a){Rrb(this,a)};_.Rb=function e4d(b){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{p2d(this.e,this.b,this.a,b);this.d=this.e.j;d4d(this)}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.Ob=function g4d(){return b4d(this)};_.Sb=function h4d(){return c4d(this)};_.Pb=function i4d(){return d4d(this)};_.Tb=function j4d(){return this.a};_.Ub=function k4d(){var a;if(c4d(this)){a4d(this);this.g=--this.a;if(this.Lk()){a=b3d(this.e,this.b,this.c,this.a,this.j);this.j=a}this.i=0;return this.j}else{throw vbb(new utb)}};_.Vb=function l4d(){return this.a-1};_.Qb=function m4d(){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{Z2d(this.e,this.b,this.g);this.d=this.e.j;if(this.g<this.a){--this.a;--this.c}--this.g}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.Lk=function n4d(){return false};_.Wb=function o4d(b){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{e3d(this.e,this.b,this.g,b);this.d=this.e.j}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.a=0;_.c=0;_.d=0;_.f=false;_.g=0;_.i=0;var G9=mdb(yve,'FeatureMapUtil/BasicFeatureEIterator',1851);bcb(410,1851,jie,p4d);_.pl=function q4d(){var a,b,c;c=this.e.i;a=BD(this.e.g,119);while(this.c<c){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=2;return true}++this.c}this.i=1;this.g=-1;return false};_.ql=function r4d(){var a,b;a=BD(this.e.g,119);while(--this.c>=0){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var H8=mdb(yve,'BasicFeatureMap/FeatureEIterator',410);bcb(662,410,jie,s4d);_.Lk=function t4d(){return true};var I8=mdb(yve,'BasicFeatureMap/ResolvingFeatureEIterator',662);bcb(955,486,Vve,u4d);_.Gi=function v4d(){return this};var M8=mdb(yve,'EContentsEList/1',955);bcb(956,486,Vve,w4d);_.Lk=function x4d(){return false};var N8=mdb(yve,'EContentsEList/2',956);bcb(954,279,Wve,y4d);_.Nk=function z4d(a){};_.Ob=function A4d(){return false};_.Sb=function B4d(){return false};var O8=mdb(yve,'EContentsEList/FeatureIteratorImpl/1',954);bcb(825,585,Pve,C4d);_.ci=function D4d(){this.a=true};_.fj=function E4d(){return this.a};_.Xj=function F4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var S8=mdb(yve,'EDataTypeEList/Unsettable',825);bcb(1849,585,Pve,G4d);_.hi=function H4d(){return true};var V8=mdb(yve,'EDataTypeUniqueEList',1849);bcb(1850,825,Pve,I4d);_.hi=function J4d(){return true};var U8=mdb(yve,'EDataTypeUniqueEList/Unsettable',1850);bcb(139,85,Pve,K4d);_.Ek=function L4d(){return true};_.li=function M4d(a,b){return ILd(this,a,BD(b,56))};var W8=mdb(yve,'EObjectContainmentEList/Resolving',139);bcb(1163,545,Pve,N4d);_.Ek=function O4d(){return true};_.li=function P4d(a,b){return ILd(this,a,BD(b,56))};var X8=mdb(yve,'EObjectContainmentEList/Unsettable/Resolving',1163);bcb(748,16,Pve,Q4d);_.ci=function R4d(){this.a=true};_.fj=function S4d(){return this.a};_.Xj=function T4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var a9=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable',748);bcb(1173,748,Pve,U4d);_.Ek=function V4d(){return true};_.li=function W4d(a,b){return ILd(this,a,BD(b,56))};var _8=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1173);bcb(743,496,Pve,X4d);_.ci=function Y4d(){this.a=true};_.fj=function Z4d(){return this.a};_.Xj=function $4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var c9=mdb(yve,'EObjectEList/Unsettable',743);bcb(328,496,Pve,_4d);_.Ek=function a5d(){return true};_.li=function b5d(a,b){return ILd(this,a,BD(b,56))};var f9=mdb(yve,'EObjectResolvingEList',328);bcb(1641,743,Pve,c5d);_.Ek=function d5d(){return true};_.li=function e5d(a,b){return ILd(this,a,BD(b,56))};var e9=mdb(yve,'EObjectResolvingEList/Unsettable',1641);bcb(1381,1,{},h5d);var f5d;var g9=mdb(yve,'EObjectValidator',1381);bcb(546,496,Pve,i5d);_.zk=function j5d(){return this.d};_.Ak=function k5d(){return this.b};_.bj=function l5d(){return true};_.Dk=function m5d(){return true};_.b=0;var k9=mdb(yve,'EObjectWithInverseEList',546);bcb(1176,546,Pve,n5d);_.Ck=function o5d(){return true};var h9=mdb(yve,'EObjectWithInverseEList/ManyInverse',1176);bcb(625,546,Pve,p5d);_.ci=function q5d(){this.a=true};_.fj=function r5d(){return this.a};_.Xj=function s5d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var j9=mdb(yve,'EObjectWithInverseEList/Unsettable',625);bcb(1175,625,Pve,t5d);_.Ck=function u5d(){return true};var i9=mdb(yve,'EObjectWithInverseEList/Unsettable/ManyInverse',1175);bcb(749,546,Pve,v5d);_.Ek=function w5d(){return true};_.li=function x5d(a,b){return ILd(this,a,BD(b,56))};var o9=mdb(yve,'EObjectWithInverseResolvingEList',749);bcb(31,749,Pve,y5d);_.Ck=function z5d(){return true};var l9=mdb(yve,'EObjectWithInverseResolvingEList/ManyInverse',31);bcb(750,625,Pve,A5d);_.Ek=function B5d(){return true};_.li=function C5d(a,b){return ILd(this,a,BD(b,56))};var n9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable',750);bcb(1174,750,Pve,D5d);_.Ck=function E5d(){return true};var m9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1174);bcb(1164,622,Pve);_.ai=function F5d(){return (this.b&1792)==0};_.ci=function G5d(){this.b|=1};_.Bk=function H5d(){return (this.b&4)!=0};_.bj=function I5d(){return (this.b&40)!=0};_.Ck=function J5d(){return (this.b&16)!=0};_.Dk=function K5d(){return (this.b&8)!=0};_.Ek=function L5d(){return (this.b&Dve)!=0};_.rk=function M5d(){return (this.b&32)!=0};_.Fk=function N5d(){return (this.b&zte)!=0};_.wj=function O5d(a){return !this.d?this.ak().Yj().wj(a):qEd(this.d,a)};_.fj=function P5d(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.hi=function Q5d(){return (this.b&128)!=0};_.Xj=function S5d(){var a;Uxd(this);if((this.b&2)!=0){if(oid(this.e)){a=(this.b&1)!=0;this.b&=-2;GLd(this,new qSd(this.e,2,bLd(this.e.Tg(),this.ak()),a,false))}else{this.b&=-2}}};_.ni=function T5d(){return (this.b&1536)==0};_.b=0;var q9=mdb(yve,'EcoreEList/Generic',1164);bcb(1165,1164,Pve,U5d);_.ak=function V5d(){return this.a};var p9=mdb(yve,'EcoreEList/Dynamic',1165);bcb(747,63,oue,W5d);_.ri=function X5d(a){return izd(this.a.a,a)};var u9=mdb(yve,'EcoreEMap/1',747);bcb(746,85,Pve,Y5d);_.bi=function Z5d(a,b){uAd(this.b,BD(b,133))};_.di=function $5d(a,b){tAd(this.b)};_.ei=function _5d(a,b,c){var d;++(d=this.b,BD(b,133),d).e};_.fi=function a6d(a,b){vAd(this.b,BD(b,133))};_.gi=function b6d(a,b,c){vAd(this.b,BD(c,133));PD(c)===PD(b)&&BD(c,133).Th(CAd(BD(b,133).cd()));uAd(this.b,BD(b,133))};var v9=mdb(yve,'EcoreEMap/DelegateEObjectContainmentEList',746);bcb(1171,151,Ave,c6d);var x9=mdb(yve,'EcoreEMap/Unsettable',1171);bcb(1172,746,Pve,d6d);_.ci=function e6d(){this.a=true};_.fj=function f6d(){return this.a};_.Xj=function g6d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var w9=mdb(yve,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1172);bcb(1168,228,fke,A6d);_.a=false;_.b=false;var A9=mdb(yve,'EcoreUtil/Copier',1168);bcb(745,1,aie,C6d);_.Nb=function D6d(a){Rrb(this,a)};_.Ob=function E6d(){return B6d(this)};_.Pb=function F6d(){var a;B6d(this);a=this.b;this.b=null;return a};_.Qb=function G6d(){this.a.Qb()};var B9=mdb(yve,'EcoreUtil/ProperContentIterator',745);bcb(1382,1381,{},J6d);var H6d;var C9=mdb(yve,'EcoreValidator',1382);var P6d;var N9=odb(yve,'FeatureMapUtil/Validator');bcb(1260,1,{1942:1},U6d);_.rl=function V6d(a){return true};var F9=mdb(yve,'FeatureMapUtil/1',1260);bcb(757,1,{1942:1},Z6d);_.rl=function $6d(a){var b;if(this.c==a)return true;b=DD(Ohb(this.a,a));if(b==null){if(Y6d(this,a)){_6d(this.a,a,(Bcb(),Acb));return true}else{_6d(this.a,a,(Bcb(),zcb));return false}}else{return b==(Bcb(),Acb)}};_.e=false;var W6d;var I9=mdb(yve,'FeatureMapUtil/BasicValidator',757);bcb(758,43,fke,a7d);var H9=mdb(yve,'FeatureMapUtil/BasicValidator/Cache',758);bcb(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},f7d);_.Vc=function g7d(a,b){p2d(this.c,this.b,a,b)};_.Fc=function h7d(a){return q2d(this.c,this.b,a)};_.Wc=function i7d(a,b){return s2d(this.c,this.b,a,b)};_.Gc=function j7d(a){return b7d(this,a)};_.Xh=function k7d(a,b){u2d(this.c,this.b,a,b)};_.lk=function l7d(a,b){return x2d(this.c,this.b,a,b)};_.pi=function m7d(a){return J2d(this.c,this.b,a,false)};_.Zh=function n7d(){return y2d(this.c,this.b)};_.$h=function o7d(){return z2d(this.c,this.b)};_._h=function p7d(a){return A2d(this.c,this.b,a)};_.mk=function q7d(a,b){return c7d(this,a,b)};_.$b=function r7d(){d7d(this)};_.Hc=function s7d(a){return E2d(this.c,this.b,a)};_.Ic=function t7d(a){return G2d(this.c,this.b,a)};_.Xb=function u7d(a){return J2d(this.c,this.b,a,true)};_.Wj=function v7d(a){return this};_.Xc=function w7d(a){return L2d(this.c,this.b,a)};_.dc=function x7d(){return e7d(this)};_.fj=function y7d(){return !R2d(this.c,this.b)};_.Kc=function z7d(){return S2d(this.c,this.b)};_.Yc=function A7d(){return U2d(this.c,this.b)};_.Zc=function B7d(a){return V2d(this.c,this.b,a)};_.ii=function C7d(a,b){return X2d(this.c,this.b,a,b)};_.ji=function D7d(a,b){Y2d(this.c,this.b,a,b)};_.$c=function E7d(a){return Z2d(this.c,this.b,a)};_.Mc=function F7d(a){return $2d(this.c,this.b,a)};_._c=function G7d(a,b){return e3d(this.c,this.b,a,b)};_.Wb=function H7d(a){D2d(this.c,this.b);b7d(this,BD(a,15))};_.gc=function I7d(){return n3d(this.c,this.b)};_.Pc=function J7d(){return o3d(this.c,this.b)};_.Qc=function K7d(a){return q3d(this.c,this.b,a)};_.Ib=function L7d(){var a,b;b=new Hfb;b.a+='[';for(a=y2d(this.c,this.b);b4d(a);){Efb(b,xfb(d4d(a)));b4d(a)&&(b.a+=She,b)}b.a+=']';return b.a};_.Xj=function M7d(){D2d(this.c,this.b)};var J9=mdb(yve,'FeatureMapUtil/FeatureEList',501);bcb(627,36,fve,O7d);_.yi=function P7d(a){return N7d(this,a)};_.Di=function Q7d(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}break}case 3:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=5;b=new zud(2);wtd(b,this.g);wtd(b,a.zi());this.g=b;return true}break}}break}case 5:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.g,14);c.Fc(a.zi());return true}break}}break}case 4:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=1;this.g=a.zi();return true}break}case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=6;h=new zud(2);wtd(h,this.n);wtd(h,a.Bi());this.n=h;g=OC(GC(WD,1),oje,25,15,[this.o,a.Ci()]);this.g=g;return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.n,14);c.Fc(a.Bi());g=BD(this.g,48);d=KC(WD,oje,25,g.length+1,15,1);$fb(g,0,d,0,g.length);d[g.length]=a.Ci();this.g=d;return true}break}}break}}return false};var K9=mdb(yve,'FeatureMapUtil/FeatureENotificationImpl',627);bcb(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},R7d);_.dl=function S7d(a,b){return q2d(this.c,a,b)};_.el=function T7d(a,b,c){return x2d(this.c,a,b,c)};_.fl=function U7d(a,b,c){return C2d(this.c,a,b,c)};_.gl=function V7d(){return this};_.hl=function W7d(a,b){return K2d(this.c,a,b)};_.il=function X7d(a){return BD(J2d(this.c,this.b,a,false),72).ak()};_.jl=function Y7d(a){return BD(J2d(this.c,this.b,a,false),72).dd()};_.kl=function Z7d(){return this.a};_.ll=function $7d(a){return !R2d(this.c,a)};_.ml=function _7d(a,b){f3d(this.c,a,b)};_.nl=function a8d(a){return g3d(this.c,a)};_.ol=function b8d(a){s3d(this.c,a)};var L9=mdb(yve,'FeatureMapUtil/FeatureFeatureMap',552);bcb(1259,1,zve,c8d);_.Wj=function d8d(a){return J2d(this.b,this.a,-1,a)};_.fj=function e8d(){return !R2d(this.b,this.a)};_.Wb=function f8d(a){f3d(this.b,this.a,a)};_.Xj=function g8d(){D2d(this.b,this.a)};var M9=mdb(yve,'FeatureMapUtil/FeatureValue',1259);var h8d,i8d,j8d,k8d,l8d;var Q9=odb(Iwe,'AnyType');bcb(666,60,Tie,n8d);var R9=mdb(Iwe,'InvalidDatatypeValueException',666);var S9=odb(Iwe,Jwe);var T9=odb(Iwe,Kwe);var U9=odb(Iwe,Lwe);var o8d;var q8d;var s8d,t8d,u8d,v8d,w8d,x8d,y8d,z8d,A8d,B8d,C8d,D8d,E8d,F8d,G8d,H8d,I8d,J8d,K8d,L8d,M8d,N8d,O8d,P8d;bcb(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},R8d);_._g=function S8d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;}return bid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function T8d(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new u3d(this,0)),B2d(this.c,a,c);case 1:return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),69)).mk(a,c);case 2:return !this.b&&(this.b=new u3d(this,2)),B2d(this.b,a,c);}return d=BD(XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd(this.zh()),a,c)};_.lh=function U8d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;}return cid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function V8d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;}did(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function W8d(){return Q8d(),s8d};_.Bh=function X8d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;}eid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function Y8d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.c);a.a+=', anyAttribute: ';Dfb(a,this.b);a.a+=')';return a.a};var V9=mdb(Mwe,'AnyTypeImpl',830);bcb(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},_8d);_._g=function a9d(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return bid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function b9d(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return cid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function c9d(a,b){switch(a){case 0:Z8d(this,GD(b));return;case 1:$8d(this,GD(b));return;}did(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function d9d(){return Q8d(),F8d};_.Bh=function e9d(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}eid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function f9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (data: ';Efb(a,this.a);a.a+=', target: ';Efb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var W9=mdb(Mwe,'ProcessingInstructionImpl',667);bcb(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},i9d);_._g=function j9d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true));case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))));case 5:return this.a;}return bid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function k9d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))!=null;case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))))!=null;case 5:return !!this.a;}return cid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function l9d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;case 3:h9d(this,GD(b));return;case 4:h9d(this,h6d(this.a,b));return;case 5:g9d(this,BD(b,148));return;}did(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function m9d(){return Q8d(),H8d};_.Bh=function n9d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;case 3:!this.c&&(this.c=new u3d(this,0));f3d(this.c,(Q8d(),I8d),null);return;case 4:h9d(this,h6d(this.a,null));return;case 5:this.a=null;return;}eid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};var X9=mdb(Mwe,'SimpleAnyTypeImpl',668);bcb(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},o9d);_._g=function p9d(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new u3d(this,0)),this.a;return !this.a&&(this.a=new u3d(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),this.b):(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),FAd(this.b));case 2:return c?(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),this.c):(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),FAd(this.c));case 3:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),L8d));case 4:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),M8d));case 5:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),O8d));case 6:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),P8d));}return bid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function q9d(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new u3d(this,0)),B2d(this.a,a,c);case 1:return !this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),bId(this.b,a,c);case 2:return !this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),bId(this.c,a,c);case 5:return !this.a&&(this.a=new u3d(this,0)),c7d(T2d(this.a,(Q8d(),O8d)),a,c);}return d=BD(XKd((this.j&2)==0?(Q8d(),K8d):(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd((Q8d(),K8d)),a,c)};_.lh=function r9d(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),L8d)));case 4:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),M8d)));case 5:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),O8d)));case 6:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),P8d)));}return cid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function s9d(a,b){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));d3d(this.a,b);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));cId(this.b,b);return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));cId(this.c,b);return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,L8d),BD(b,14));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,M8d),BD(b,14));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,O8d),BD(b,14));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,P8d),BD(b,14));return;}did(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function t9d(){return Q8d(),K8d};_.Bh=function u9d(a){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));Uxd(this.a);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));return;}eid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function v9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.a);a.a+=')';return a.a};var Y9=mdb(Mwe,'XMLTypeDocumentRootImpl',669);bcb(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},U9d);_.Ih=function V9d(a,b){switch(a.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return b==null?null:fcb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return GD(b);case 6:return C9d(BD(b,190));case 12:case 47:case 49:case 11:return Vmd(this,a,b);case 13:return b==null?null:qgb(BD(b,240));case 15:case 14:return b==null?null:D9d(Edb(ED(b)));case 17:return E9d((Q8d(),b));case 18:return E9d(b);case 21:case 20:return b==null?null:F9d(BD(b,155).a);case 27:return G9d(BD(b,190));case 30:return H9d((Q8d(),BD(b,15)));case 31:return H9d(BD(b,15));case 40:return K9d((Q8d(),b));case 42:return I9d((Q8d(),b));case 43:return I9d(b);case 59:case 48:return J9d((Q8d(),b));default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function W9d(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=bKd(a),c?HLd(c.Mh(),a):-1)),a.G){case 0:return b=new R8d,b;case 1:return d=new _8d,d;case 2:return e=new i9d,e;case 3:return f=new o9d,f;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function X9d(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.yj()){case 5:case 52:case 4:return b;case 6:return L9d(b);case 8:case 7:return b==null?null:B9d(b);case 9:return b==null?null:Scb(Icb((d=Qge(b,true),d.length>0&&(BCb(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),-128,127)<<24>>24);case 10:return b==null?null:Scb(Icb((e=Qge(b,true),e.length>0&&(BCb(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e),-128,127)<<24>>24);case 11:return GD(Wmd(this,(Q8d(),w8d),b));case 12:return GD(Wmd(this,(Q8d(),x8d),b));case 13:return b==null?null:new tgb(Qge(b,true));case 15:case 14:return M9d(b);case 16:return GD(Wmd(this,(Q8d(),y8d),b));case 17:return N9d((Q8d(),b));case 18:return N9d(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Qge(b,true);case 21:case 20:return O9d(b);case 22:return GD(Wmd(this,(Q8d(),z8d),b));case 23:return GD(Wmd(this,(Q8d(),A8d),b));case 24:return GD(Wmd(this,(Q8d(),B8d),b));case 25:return GD(Wmd(this,(Q8d(),C8d),b));case 26:return GD(Wmd(this,(Q8d(),D8d),b));case 27:return P9d(b);case 30:return Q9d((Q8d(),b));case 31:return Q9d(b);case 32:return b==null?null:meb(Icb((k=Qge(b,true),k.length>0&&(BCb(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k),Rie,Ohe));case 33:return b==null?null:new Ygb((l=Qge(b,true),l.length>0&&(BCb(0,l.length),l.charCodeAt(0)==43)?l.substr(1):l));case 34:return b==null?null:meb(Icb((m=Qge(b,true),m.length>0&&(BCb(0,m.length),m.charCodeAt(0)==43)?m.substr(1):m),Rie,Ohe));case 36:return b==null?null:Aeb(Jcb((n=Qge(b,true),n.length>0&&(BCb(0,n.length),n.charCodeAt(0)==43)?n.substr(1):n)));case 37:return b==null?null:Aeb(Jcb((o=Qge(b,true),o.length>0&&(BCb(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o)));case 40:return T9d((Q8d(),b));case 42:return R9d((Q8d(),b));case 43:return R9d(b);case 44:return b==null?null:new Ygb((p=Qge(b,true),p.length>0&&(BCb(0,p.length),p.charCodeAt(0)==43)?p.substr(1):p));case 45:return b==null?null:new Ygb((q=Qge(b,true),q.length>0&&(BCb(0,q.length),q.charCodeAt(0)==43)?q.substr(1):q));case 46:return Qge(b,false);case 47:return GD(Wmd(this,(Q8d(),E8d),b));case 59:case 48:return S9d((Q8d(),b));case 49:return GD(Wmd(this,(Q8d(),G8d),b));case 50:return b==null?null:Web(Icb((r=Qge(b,true),r.length>0&&(BCb(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),awe,32767)<<16>>16);case 51:return b==null?null:Web(Icb((f=Qge(b,true),f.length>0&&(BCb(0,f.length),f.charCodeAt(0)==43)?f.substr(1):f),awe,32767)<<16>>16);case 53:return GD(Wmd(this,(Q8d(),J8d),b));case 55:return b==null?null:Web(Icb((g=Qge(b,true),g.length>0&&(BCb(0,g.length),g.charCodeAt(0)==43)?g.substr(1):g),awe,32767)<<16>>16);case 56:return b==null?null:Web(Icb((h=Qge(b,true),h.length>0&&(BCb(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),awe,32767)<<16>>16);case 57:return b==null?null:Aeb(Jcb((i=Qge(b,true),i.length>0&&(BCb(0,i.length),i.charCodeAt(0)==43)?i.substr(1):i)));case 58:return b==null?null:Aeb(Jcb((j=Qge(b,true),j.length>0&&(BCb(0,j.length),j.charCodeAt(0)==43)?j.substr(1):j)));case 60:return b==null?null:meb(Icb((c=Qge(b,true),c.length>0&&(BCb(0,c.length),c.charCodeAt(0)==43)?c.substr(1):c),Rie,Ohe));case 61:return b==null?null:meb(Icb(Qge(b,true),Rie,Ohe));default:throw vbb(new Wdb(tte+a.ne()+ute));}};var w9d,x9d,y9d,z9d;var Z9=mdb(Mwe,'XMLTypeFactoryImpl',1919);bcb(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},cae);_.N=false;_.O=false;var Z9d=false;var Yab=mdb(Mwe,'XMLTypePackageImpl',586);bcb(1852,1,{837:1},fae);_._j=function gae(){return Uge(),Tge};var iab=mdb(Mwe,'XMLTypePackageImpl/1',1852);bcb(1861,1,nwe,hae);_.wj=function iae(a){return ND(a)};_.xj=function jae(a){return KC(ZI,nie,2,a,6,1)};var $9=mdb(Mwe,'XMLTypePackageImpl/10',1861);bcb(1862,1,nwe,kae);_.wj=function lae(a){return ND(a)};_.xj=function mae(a){return KC(ZI,nie,2,a,6,1)};var _9=mdb(Mwe,'XMLTypePackageImpl/11',1862);bcb(1863,1,nwe,nae);_.wj=function oae(a){return ND(a)};_.xj=function pae(a){return KC(ZI,nie,2,a,6,1)};var aab=mdb(Mwe,'XMLTypePackageImpl/12',1863);bcb(1864,1,nwe,qae);_.wj=function rae(a){return LD(a)};_.xj=function sae(a){return KC(BI,nie,333,a,7,1)};var bab=mdb(Mwe,'XMLTypePackageImpl/13',1864);bcb(1865,1,nwe,tae);_.wj=function uae(a){return ND(a)};_.xj=function vae(a){return KC(ZI,nie,2,a,6,1)};var cab=mdb(Mwe,'XMLTypePackageImpl/14',1865);bcb(1866,1,nwe,wae);_.wj=function xae(a){return JD(a,15)};_.xj=function yae(a){return KC(yK,eme,15,a,0,1)};var dab=mdb(Mwe,'XMLTypePackageImpl/15',1866);bcb(1867,1,nwe,zae);_.wj=function Aae(a){return JD(a,15)};_.xj=function Bae(a){return KC(yK,eme,15,a,0,1)};var eab=mdb(Mwe,'XMLTypePackageImpl/16',1867);bcb(1868,1,nwe,Cae);_.wj=function Dae(a){return ND(a)};_.xj=function Eae(a){return KC(ZI,nie,2,a,6,1)};var fab=mdb(Mwe,'XMLTypePackageImpl/17',1868);bcb(1869,1,nwe,Fae);_.wj=function Gae(a){return JD(a,155)};_.xj=function Hae(a){return KC(FI,nie,155,a,0,1)};var gab=mdb(Mwe,'XMLTypePackageImpl/18',1869);bcb(1870,1,nwe,Iae);_.wj=function Jae(a){return ND(a)};_.xj=function Kae(a){return KC(ZI,nie,2,a,6,1)};var hab=mdb(Mwe,'XMLTypePackageImpl/19',1870);bcb(1853,1,nwe,Lae);_.wj=function Mae(a){return JD(a,843)};_.xj=function Nae(a){return KC(Q9,Uhe,843,a,0,1)};var tab=mdb(Mwe,'XMLTypePackageImpl/2',1853);bcb(1871,1,nwe,Oae);_.wj=function Pae(a){return ND(a)};_.xj=function Qae(a){return KC(ZI,nie,2,a,6,1)};var jab=mdb(Mwe,'XMLTypePackageImpl/20',1871);bcb(1872,1,nwe,Rae);_.wj=function Sae(a){return ND(a)};_.xj=function Tae(a){return KC(ZI,nie,2,a,6,1)};var kab=mdb(Mwe,'XMLTypePackageImpl/21',1872);bcb(1873,1,nwe,Uae);_.wj=function Vae(a){return ND(a)};_.xj=function Wae(a){return KC(ZI,nie,2,a,6,1)};var lab=mdb(Mwe,'XMLTypePackageImpl/22',1873);bcb(1874,1,nwe,Xae);_.wj=function Yae(a){return ND(a)};_.xj=function Zae(a){return KC(ZI,nie,2,a,6,1)};var mab=mdb(Mwe,'XMLTypePackageImpl/23',1874);bcb(1875,1,nwe,$ae);_.wj=function _ae(a){return JD(a,190)};_.xj=function abe(a){return KC(SD,nie,190,a,0,2)};var nab=mdb(Mwe,'XMLTypePackageImpl/24',1875);bcb(1876,1,nwe,bbe);_.wj=function cbe(a){return ND(a)};_.xj=function dbe(a){return KC(ZI,nie,2,a,6,1)};var oab=mdb(Mwe,'XMLTypePackageImpl/25',1876);bcb(1877,1,nwe,ebe);_.wj=function fbe(a){return ND(a)};_.xj=function gbe(a){return KC(ZI,nie,2,a,6,1)};var pab=mdb(Mwe,'XMLTypePackageImpl/26',1877);bcb(1878,1,nwe,hbe);_.wj=function ibe(a){return JD(a,15)};_.xj=function jbe(a){return KC(yK,eme,15,a,0,1)};var qab=mdb(Mwe,'XMLTypePackageImpl/27',1878);bcb(1879,1,nwe,kbe);_.wj=function lbe(a){return JD(a,15)};_.xj=function mbe(a){return KC(yK,eme,15,a,0,1)};var rab=mdb(Mwe,'XMLTypePackageImpl/28',1879);bcb(1880,1,nwe,nbe);_.wj=function obe(a){return ND(a)};_.xj=function pbe(a){return KC(ZI,nie,2,a,6,1)};var sab=mdb(Mwe,'XMLTypePackageImpl/29',1880);bcb(1854,1,nwe,qbe);_.wj=function rbe(a){return JD(a,667)};_.xj=function sbe(a){return KC(S9,Uhe,2021,a,0,1)};var Eab=mdb(Mwe,'XMLTypePackageImpl/3',1854);bcb(1881,1,nwe,tbe);_.wj=function ube(a){return JD(a,19)};_.xj=function vbe(a){return KC(JI,nie,19,a,0,1)};var uab=mdb(Mwe,'XMLTypePackageImpl/30',1881);bcb(1882,1,nwe,wbe);_.wj=function xbe(a){return ND(a)};_.xj=function ybe(a){return KC(ZI,nie,2,a,6,1)};var vab=mdb(Mwe,'XMLTypePackageImpl/31',1882);bcb(1883,1,nwe,zbe);_.wj=function Abe(a){return JD(a,162)};_.xj=function Bbe(a){return KC(MI,nie,162,a,0,1)};var wab=mdb(Mwe,'XMLTypePackageImpl/32',1883);bcb(1884,1,nwe,Cbe);_.wj=function Dbe(a){return ND(a)};_.xj=function Ebe(a){return KC(ZI,nie,2,a,6,1)};var xab=mdb(Mwe,'XMLTypePackageImpl/33',1884);bcb(1885,1,nwe,Fbe);_.wj=function Gbe(a){return ND(a)};_.xj=function Hbe(a){return KC(ZI,nie,2,a,6,1)};var yab=mdb(Mwe,'XMLTypePackageImpl/34',1885);bcb(1886,1,nwe,Ibe);_.wj=function Jbe(a){return ND(a)};_.xj=function Kbe(a){return KC(ZI,nie,2,a,6,1)};var zab=mdb(Mwe,'XMLTypePackageImpl/35',1886);bcb(1887,1,nwe,Lbe);_.wj=function Mbe(a){return ND(a)};_.xj=function Nbe(a){return KC(ZI,nie,2,a,6,1)};var Aab=mdb(Mwe,'XMLTypePackageImpl/36',1887);bcb(1888,1,nwe,Obe);_.wj=function Pbe(a){return JD(a,15)};_.xj=function Qbe(a){return KC(yK,eme,15,a,0,1)};var Bab=mdb(Mwe,'XMLTypePackageImpl/37',1888);bcb(1889,1,nwe,Rbe);_.wj=function Sbe(a){return JD(a,15)};_.xj=function Tbe(a){return KC(yK,eme,15,a,0,1)};var Cab=mdb(Mwe,'XMLTypePackageImpl/38',1889);bcb(1890,1,nwe,Ube);_.wj=function Vbe(a){return ND(a)};_.xj=function Wbe(a){return KC(ZI,nie,2,a,6,1)};var Dab=mdb(Mwe,'XMLTypePackageImpl/39',1890);bcb(1855,1,nwe,Xbe);_.wj=function Ybe(a){return JD(a,668)};_.xj=function Zbe(a){return KC(T9,Uhe,2022,a,0,1)};var Pab=mdb(Mwe,'XMLTypePackageImpl/4',1855);bcb(1891,1,nwe,$be);_.wj=function _be(a){return ND(a)};_.xj=function ace(a){return KC(ZI,nie,2,a,6,1)};var Fab=mdb(Mwe,'XMLTypePackageImpl/40',1891);bcb(1892,1,nwe,bce);_.wj=function cce(a){return ND(a)};_.xj=function dce(a){return KC(ZI,nie,2,a,6,1)};var Gab=mdb(Mwe,'XMLTypePackageImpl/41',1892);bcb(1893,1,nwe,ece);_.wj=function fce(a){return ND(a)};_.xj=function gce(a){return KC(ZI,nie,2,a,6,1)};var Hab=mdb(Mwe,'XMLTypePackageImpl/42',1893);bcb(1894,1,nwe,hce);_.wj=function ice(a){return ND(a)};_.xj=function jce(a){return KC(ZI,nie,2,a,6,1)};var Iab=mdb(Mwe,'XMLTypePackageImpl/43',1894);bcb(1895,1,nwe,kce);_.wj=function lce(a){return ND(a)};_.xj=function mce(a){return KC(ZI,nie,2,a,6,1)};var Jab=mdb(Mwe,'XMLTypePackageImpl/44',1895);bcb(1896,1,nwe,nce);_.wj=function oce(a){return JD(a,184)};_.xj=function pce(a){return KC(UI,nie,184,a,0,1)};var Kab=mdb(Mwe,'XMLTypePackageImpl/45',1896);bcb(1897,1,nwe,qce);_.wj=function rce(a){return ND(a)};_.xj=function sce(a){return KC(ZI,nie,2,a,6,1)};var Lab=mdb(Mwe,'XMLTypePackageImpl/46',1897);bcb(1898,1,nwe,tce);_.wj=function uce(a){return ND(a)};_.xj=function vce(a){return KC(ZI,nie,2,a,6,1)};var Mab=mdb(Mwe,'XMLTypePackageImpl/47',1898);bcb(1899,1,nwe,wce);_.wj=function xce(a){return ND(a)};_.xj=function yce(a){return KC(ZI,nie,2,a,6,1)};var Nab=mdb(Mwe,'XMLTypePackageImpl/48',1899);bcb(nje,1,nwe,zce);_.wj=function Ace(a){return JD(a,184)};_.xj=function Bce(a){return KC(UI,nie,184,a,0,1)};var Oab=mdb(Mwe,'XMLTypePackageImpl/49',nje);bcb(1856,1,nwe,Cce);_.wj=function Dce(a){return JD(a,669)};_.xj=function Ece(a){return KC(U9,Uhe,2023,a,0,1)};var Tab=mdb(Mwe,'XMLTypePackageImpl/5',1856);bcb(1901,1,nwe,Fce);_.wj=function Gce(a){return JD(a,162)};_.xj=function Hce(a){return KC(MI,nie,162,a,0,1)};var Qab=mdb(Mwe,'XMLTypePackageImpl/50',1901);bcb(1902,1,nwe,Ice);_.wj=function Jce(a){return ND(a)};_.xj=function Kce(a){return KC(ZI,nie,2,a,6,1)};var Rab=mdb(Mwe,'XMLTypePackageImpl/51',1902);bcb(1903,1,nwe,Lce);_.wj=function Mce(a){return JD(a,19)};_.xj=function Nce(a){return KC(JI,nie,19,a,0,1)};var Sab=mdb(Mwe,'XMLTypePackageImpl/52',1903);bcb(1857,1,nwe,Oce);_.wj=function Pce(a){return ND(a)};_.xj=function Qce(a){return KC(ZI,nie,2,a,6,1)};var Uab=mdb(Mwe,'XMLTypePackageImpl/6',1857);bcb(1858,1,nwe,Rce);_.wj=function Sce(a){return JD(a,190)};_.xj=function Tce(a){return KC(SD,nie,190,a,0,2)};var Vab=mdb(Mwe,'XMLTypePackageImpl/7',1858);bcb(1859,1,nwe,Uce);_.wj=function Vce(a){return KD(a)};_.xj=function Wce(a){return KC(wI,nie,476,a,8,1)};var Wab=mdb(Mwe,'XMLTypePackageImpl/8',1859);bcb(1860,1,nwe,Xce);_.wj=function Yce(a){return JD(a,217)};_.xj=function Zce(a){return KC(xI,nie,217,a,0,1)};var Xab=mdb(Mwe,'XMLTypePackageImpl/9',1860);var $ce,_ce;var fde,gde;var kde;bcb(50,60,Tie,mde);var Zab=mdb(kxe,'RegEx/ParseException',50);bcb(820,1,{},ude);_.sl=function vde(a){return a<this.j&&bfb(this.i,a)==63};_.tl=function wde(){var a,b,c,d,e;if(this.c!=10)throw vbb(new mde(tvd((h0d(),uue))));a=this.a;switch(a){case 101:a=27;break;case 102:a=12;break;case 110:a=10;break;case 114:a=13;break;case 116:a=9;break;case 120:nde(this);if(this.c!=0)throw vbb(new mde(tvd((h0d(),Tue))));if(this.a==123){e=0;c=0;do{nde(this);if(this.c!=0)throw vbb(new mde(tvd((h0d(),Tue))));if((e=yde(this.a))<0)break;if(c>c*16)throw vbb(new mde(tvd((h0d(),Uue))));c=c*16+e}while(true);if(this.a!=125)throw vbb(new mde(tvd((h0d(),Vue))));if(c>lxe)throw vbb(new mde(tvd((h0d(),Wue))));a=c}else{e=0;if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=e;nde(this);if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=c*16+e;a=c}break;case 117:d=0;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;a=b;break;case 118:nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;if(b>lxe)throw vbb(new mde(tvd((h0d(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw vbb(new mde(tvd((h0d(),Xue))));}return a};_.ul=function xde(a){var b,c;switch(a){case 100:c=(this.e&32)==32?Kfe('Nd',true):(wfe(),cfe);break;case 68:c=(this.e&32)==32?Kfe('Nd',false):(wfe(),jfe);break;case 119:c=(this.e&32)==32?Kfe('IsWord',true):(wfe(),sfe);break;case 87:c=(this.e&32)==32?Kfe('IsWord',false):(wfe(),lfe);break;case 115:c=(this.e&32)==32?Kfe('IsSpace',true):(wfe(),nfe);break;case 83:c=(this.e&32)==32?Kfe('IsSpace',false):(wfe(),kfe);break;default:throw vbb(new hz((b=a,mxe+b.toString(16))));}return c};_.vl=function zde(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;nde(this);b=null;if(this.c==0&&this.a==94){nde(this);if(a){k=(wfe(),wfe(),++vfe,new $fe(5))}else{b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);k=(null,++vfe,new $fe(4))}}else{k=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(k,this.ul(c));d=true;break;case 105:case 73:case 99:case 67:c=this.Ll(k,c);c<0&&(d=true);break;case 112:case 80:l=tde(this,c);if(!l)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(k,l);d=true;break;default:c=this.tl();}}else if(m==20){g=gfb(this.i,58,this.d);if(g<0)throw vbb(new mde(tvd((h0d(),Jue))));h=true;if(bfb(this.i,this.d)==94){++this.d;h=false}f=qfb(this.i,this.d,g);i=Lfe(f,h,(this.e&512)==512);if(!i)throw vbb(new mde(tvd((h0d(),Lue))));Xfe(k,i);d=true;if(g+1>=this.j||bfb(this.i,g+1)!=93)throw vbb(new mde(tvd((h0d(),Jue))));this.d=g+2}nde(this);if(!d){if(this.c!=0||this.a!=45){Ufe(k,c,c)}else{nde(this);if((m=this.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(m==0&&this.a==93){Ufe(k,c,c);Ufe(k,45,45)}else{j=this.a;m==10&&(j=this.tl());nde(this);Ufe(k,c,j)}}}(this.e&zte)==zte&&this.c==0&&this.a==44&&nde(this)}if(this.c==1)throw vbb(new mde(tvd((h0d(),Kue))));if(b){Zfe(b,k);k=b}Yfe(k);Vfe(k);this.b=0;nde(this);return k};_.wl=function Ade(){var a,b,c,d;c=this.vl(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){nde(this);if(this.c!=9)throw vbb(new mde(tvd((h0d(),Que))));b=this.vl(false);if(d==4)Xfe(c,b);else if(a==45)Zfe(c,b);else if(a==38)Wfe(c,b);else throw vbb(new hz('ASSERT'))}else{throw vbb(new mde(tvd((h0d(),Rue))))}}nde(this);return c};_.xl=function Bde(){var a,b;a=this.a-48;b=(wfe(),wfe(),++vfe,new Hge(12,null,a));!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(a));nde(this);return b};_.yl=function Cde(){nde(this);return wfe(),ofe};_.zl=function Dde(){nde(this);return wfe(),mfe};_.Al=function Ede(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Bl=function Fde(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Cl=function Gde(){nde(this);return Ife()};_.Dl=function Hde(){nde(this);return wfe(),qfe};_.El=function Ide(){nde(this);return wfe(),tfe};_.Fl=function Jde(){var a;if(this.d>=this.j||((a=bfb(this.i,this.d++))&65504)!=64)throw vbb(new mde(tvd((h0d(),Eue))));nde(this);return wfe(),wfe(),++vfe,new ige(0,a-64)};_.Gl=function Kde(){nde(this);return Jfe()};_.Hl=function Lde(){nde(this);return wfe(),ufe};_.Il=function Mde(){var a;a=(wfe(),wfe(),++vfe,new ige(0,105));nde(this);return a};_.Jl=function Nde(){nde(this);return wfe(),rfe};_.Kl=function Ode(){nde(this);return wfe(),pfe};_.Ll=function Pde(a,b){return this.tl()};_.Ml=function Qde(){nde(this);return wfe(),hfe};_.Nl=function Rde(){var a,b,c,d,e;if(this.d+1>=this.j)throw vbb(new mde(tvd((h0d(),Bue))));d=-1;b=null;a=bfb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(d));++this.d;if(bfb(this.i,this.d)!=41)throw vbb(new mde(tvd((h0d(),yue))));++this.d}else{a==63&&--this.d;nde(this);b=qde(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));break;default:throw vbb(new mde(tvd((h0d(),Cue))));}}nde(this);e=rde(this);c=null;if(e.e==2){if(e.em()!=2)throw vbb(new mde(tvd((h0d(),Due))));c=e.am(1);e=e.am(0)}if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return wfe(),wfe(),++vfe,new vge(d,b,e,c)};_.Ol=function Sde(){nde(this);return wfe(),ife};_.Pl=function Tde(){var a;nde(this);a=Cfe(24,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ql=function Ude(){var a;nde(this);a=Cfe(20,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Rl=function Vde(){var a;nde(this);a=Cfe(22,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Sl=function Wde(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d<this.j){b=bfb(this.i,this.d);e=Uee(b);if(e==0)break;a|=e;++this.d}if(this.d>=this.j)throw vbb(new mde(tvd((h0d(),zue))));if(b==45){++this.d;while(this.d<this.j){b=bfb(this.i,this.d);e=Uee(b);if(e==0)break;c|=e;++this.d}if(this.d>=this.j)throw vbb(new mde(tvd((h0d(),zue))))}if(b==58){++this.d;nde(this);d=Dfe(rde(this),a,c);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this)}else if(b==41){++this.d;nde(this);d=Dfe(rde(this),a,c)}else throw vbb(new mde(tvd((h0d(),Aue))));return d};_.Tl=function Xde(){var a;nde(this);a=Cfe(21,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ul=function Yde(){var a;nde(this);a=Cfe(23,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Vl=function Zde(){var a,b;nde(this);a=this.f++;b=Efe(rde(this),a);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return b};_.Wl=function $de(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Xl=function _de(a){nde(this);if(this.c==5){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(9,a)))}else return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function aee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));if(this.c==5){nde(this);Kge(b,(null,ffe));Kge(b,a)}else{Kge(b,a);Kge(b,(null,ffe))}return b};_.Zl=function bee(a){nde(this);if(this.c==5){nde(this);return wfe(),wfe(),++vfe,new lge(9,a)}else return wfe(),wfe(),++vfe,new lge(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var bbb=mdb(kxe,'RegEx/RegexParser',820);bcb(1824,820,{},hee);_.sl=function iee(a){return false};_.tl=function jee(){return eee(this)};_.ul=function lee(a){return fee(a)};_.vl=function mee(a){return gee(this)};_.wl=function nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.xl=function oee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.yl=function pee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.zl=function qee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Al=function ree(){nde(this);return fee(67)};_.Bl=function see(){nde(this);return fee(73)};_.Cl=function tee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Dl=function uee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.El=function vee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Fl=function wee(){nde(this);return fee(99)};_.Gl=function xee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Hl=function yee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Il=function zee(){nde(this);return fee(105)};_.Jl=function Aee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Kl=function Bee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ll=function Cee(a,b){return Xfe(a,fee(b)),-1};_.Ml=function Dee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,94)};_.Nl=function Eee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ol=function Fee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,36)};_.Pl=function Gee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ql=function Hee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Rl=function Iee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Sl=function Jee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Tl=function Kee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ul=function Lee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Vl=function Mee(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Wl=function Nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Xl=function Oee(a){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function Pee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,a);Kge(b,(null,ffe));return b};_.Zl=function Qee(a){nde(this);return wfe(),wfe(),++vfe,new lge(3,a)};var cee=null,dee=null;var $ab=mdb(kxe,'RegEx/ParserForXMLSchema',1824);bcb(117,1,yxe,xfe);_.$l=function yfe(a){throw vbb(new hz('Not supported.'))};_._l=function Gfe(){return -1};_.am=function Hfe(a){return null};_.bm=function Mfe(){return null};_.cm=function Pfe(a){};_.dm=function Qfe(a){};_.em=function Rfe(){return 0};_.Ib=function Sfe(){return this.fm(0)};_.fm=function Tfe(a){return this.e==11?'.':''};_.e=0;var Yee,Zee,$ee,_ee,afe,bfe=null,cfe,dfe=null,efe,ffe,gfe=null,hfe,ife,jfe,kfe,lfe,mfe,nfe,ofe,pfe,qfe,rfe,sfe,tfe,ufe,vfe=0;var lbb=mdb(kxe,'RegEx/Token',117);bcb(136,117,{3:1,136:1,117:1},$fe);_.fm=function bge(a){var b,c,d;if(this.e==4){if(this==efe)c='.';else if(this==cfe)c='\\d';else if(this==sfe)c='\\w';else if(this==nfe)c='\\s';else{d=new Hfb;d.a+='[';for(b=0;b<this.b.length;b+=2){(a&zte)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==jfe)c='\\D';else if(this==lfe)c='\\W';else if(this==kfe)c='\\S';else{d=new Hfb;d.a+='[^';for(b=0;b<this.b.length;b+=2){(a&zte)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var _ab=mdb(kxe,'RegEx/RangeToken',136);bcb(584,1,{584:1},cge);_.a=0;var abb=mdb(kxe,'RegEx/RegexParser/ReferencePosition',584);bcb(583,1,{3:1,583:1},ege);_.Fb=function fge(a){var b;if(a==null)return false;if(!JD(a,583))return false;b=BD(a,583);return dfb(this.b,b.b)&&this.a==b.a};_.Hb=function gge(){return LCb(this.b+'/'+See(this.a))};_.Ib=function hge(){return this.c.fm(this.a)};_.a=0;var cbb=mdb(kxe,'RegEx/RegularExpression',583);bcb(223,117,yxe,ige);_._l=function jge(){return this.a};_.fm=function kge(a){var b,c,d;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:d='\\'+HD(this.a&aje);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(this.a>=Tje){c=(b=this.a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+HD(this.a&aje);}break;case 8:this==hfe||this==ife?(d=''+HD(this.a&aje)):(d='\\'+HD(this.a&aje));break;default:d=null;}return d};_.a=0;var dbb=mdb(kxe,'RegEx/Token/CharToken',223);bcb(309,117,yxe,lge);_.am=function mge(a){return this.a};_.cm=function nge(a){this.b=a};_.dm=function oge(a){this.c=a};_.em=function pge(){return 1};_.fm=function qge(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.fm(a)+'*'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}'}else throw vbb(new hz('Token#toString(): CLOSURE '+this.c+She+this.b))}else{if(this.c<0&&this.b<0){b=this.a.fm(a)+'*?'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}?'}else throw vbb(new hz('Token#toString(): NONGREEDYCLOSURE '+this.c+She+this.b))}return b};_.b=0;_.c=0;var ebb=mdb(kxe,'RegEx/Token/ClosureToken',309);bcb(821,117,yxe,rge);_.am=function sge(a){return a==0?this.a:this.b};_.em=function tge(){return 2};_.fm=function uge(a){var b;this.b.e==3&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+'):this.b.e==9&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+?'):(b=this.a.fm(a)+(''+this.b.fm(a)));return b};var fbb=mdb(kxe,'RegEx/Token/ConcatToken',821);bcb(1822,117,yxe,vge);_.am=function wge(a){if(a==0)return this.d;if(a==1)return this.b;throw vbb(new hz('Internal Error: '+a))};_.em=function xge(){return !this.b?1:2};_.fm=function yge(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var gbb=mdb(kxe,'RegEx/Token/ConditionToken',1822);bcb(1823,117,yxe,zge);_.am=function Age(a){return this.b};_.em=function Bge(){return 1};_.fm=function Cge(a){return '(?'+(this.a==0?'':See(this.a))+(this.c==0?'':See(this.c))+':'+this.b.fm(a)+')'};_.a=0;_.c=0;var hbb=mdb(kxe,'RegEx/Token/ModifierToken',1823);bcb(822,117,yxe,Dge);_.am=function Ege(a){return this.a};_.em=function Fge(){return 1};_.fm=function Gge(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.fm(a)+')'):(b='('+this.a.fm(a)+')');break;case 20:b='(?='+this.a.fm(a)+')';break;case 21:b='(?!'+this.a.fm(a)+')';break;case 22:b='(?<='+this.a.fm(a)+')';break;case 23:b='(?<!'+this.a.fm(a)+')';break;case 24:b='(?>'+this.a.fm(a)+')';}return b};_.b=0;var ibb=mdb(kxe,'RegEx/Token/ParenToken',822);bcb(521,117,{3:1,117:1,521:1},Hge);_.bm=function Ige(){return this.b};_.fm=function Jge(a){return this.e==12?'\\'+this.a:Wee(this.b)};_.a=0;var jbb=mdb(kxe,'RegEx/Token/StringToken',521);bcb(465,117,yxe,Lge);_.$l=function Mge(a){Kge(this,a)};_.am=function Nge(a){return BD(Uvb(this.a,a),117)};_.em=function Oge(){return !this.a?0:this.a.a.c.length};_.fm=function Pge(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=BD(Uvb(this.a,0),117);c=BD(Uvb(this.a,1),117);c.e==3&&c.am(0)==b?(e=b.fm(a)+'+'):c.e==9&&c.am(0)==b?(e=b.fm(a)+'+?'):(e=b.fm(a)+(''+c.fm(a)))}else{f=new Hfb;for(d=0;d<this.a.a.c.length;d++){Efb(f,BD(Uvb(this.a,d),117).fm(a))}e=f.a}return e}if(this.a.a.c.length==2&&BD(Uvb(this.a,1),117).e==7){e=BD(Uvb(this.a,0),117).fm(a)+'?'}else if(this.a.a.c.length==2&&BD(Uvb(this.a,0),117).e==7){e=BD(Uvb(this.a,1),117).fm(a)+'??'}else{f=new Hfb;Efb(f,BD(Uvb(this.a,0),117).fm(a));for(d=1;d<this.a.a.c.length;d++){f.a+='|';Efb(f,BD(Uvb(this.a,d),117).fm(a))}e=f.a}return e};var kbb=mdb(kxe,'RegEx/Token/UnionToken',465);bcb(518,1,{592:1},Rge);_.Ib=function Sge(){return this.a.b};var mbb=mdb(zxe,'XMLTypeUtil/PatternMatcherImpl',518);bcb(1622,1381,{},Vge);var Tge;var nbb=mdb(zxe,'XMLTypeValidator',1622);bcb(264,1,vie,Yge);_.Jc=function Zge(a){reb(this,a)};_.Kc=function $ge(){return (this.b-this.a)*this.c<0?Wge:new she(this)};_.a=0;_.b=0;_.c=0;var Wge;var qbb=mdb(Bxe,'ExclusiveRange',264);bcb(1068,1,jie,dhe);_.Rb=function ehe(a){BD(a,19);_ge()};_.Nb=function fhe(a){Rrb(this,a)};_.Pb=function ihe(){return ahe()};_.Ub=function khe(){return bhe()};_.Wb=function nhe(a){BD(a,19);che()};_.Ob=function ghe(){return false};_.Sb=function hhe(){return false};_.Tb=function jhe(){return -1};_.Vb=function lhe(){return -1};_.Qb=function mhe(){throw vbb(new cgb(Exe))};var obb=mdb(Bxe,'ExclusiveRange/1',1068);bcb(254,1,jie,she);_.Rb=function the(a){BD(a,19);ohe()};_.Nb=function uhe(a){Rrb(this,a)};_.Pb=function xhe(){return phe(this)};_.Ub=function zhe(){return qhe(this)};_.Wb=function Che(a){BD(a,19);rhe()};_.Ob=function vhe(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b};_.Sb=function whe(){return this.b>0};_.Tb=function yhe(){return this.b};_.Vb=function Ahe(){return this.b-1};_.Qb=function Bhe(){throw vbb(new cgb(Exe))};_.a=0;_.b=0;var pbb=mdb(Bxe,'ExclusiveRange/RangeIterator',254);var TD=pdb(Fve,'C');var WD=pdb(Ive,'I');var sbb=pdb(Khe,'Z');var XD=pdb(Jve,'J');var SD=pdb(Eve,'B');var UD=pdb(Gve,'D');var VD=pdb(Hve,'F');var rbb=pdb(Kve,'S');var h1=odb('org.eclipse.elk.core.labels','ILabelManager');var O4=odb(Tte,'DiagnosticChain');var u8=odb(pwe,'ResourceSet');var V4=mdb(Tte,'InvocationTargetException',null);var Ihe=(Az(),Dz);var gwtOnLoad=gwtOnLoad=Zbb;Xbb(hcb);$bb('permProps',[[[Fxe,Gxe],[Hxe,'gecko1_8']],[[Fxe,Gxe],[Hxe,'ie10']],[[Fxe,Gxe],[Hxe,'ie8']],[[Fxe,Gxe],[Hxe,'ie9']],[[Fxe,Gxe],[Hxe,'safari']]]); +// -------------- RUN GWT INITIALIZATION CODE -------------- +gwtOnLoad(null, 'elk', null); + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],3:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/******************************************************************************* + * Copyright (c) 2021 Kiel University and others. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = require('./elk-api.js').default; + +var ELKNode = function (_ELK) { + _inherits(ELKNode, _ELK); + + function ELKNode() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, ELKNode); + + var optionsClone = Object.assign({}, options); + + var workerThreadsExist = false; + try { + require.resolve('web-worker'); + workerThreadsExist = true; + } catch (e) {} + + // user requested a worker + if (options.workerUrl) { + if (workerThreadsExist) { + var Worker = require('web-worker'); + optionsClone.workerFactory = function (url) { + return new Worker(url); + }; + } else { + console.warn('Web worker requested but \'web-worker\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version.'); + } + } + + // unless no other workerFactory is registered, use the fake worker + if (!optionsClone.workerFactory) { + var _require = require('./elk-worker.min.js'), + _Worker = _require.Worker; + + optionsClone.workerFactory = function (url) { + return new _Worker(url); + }; + } + + return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); + } + + return ELKNode; +}(ELK); + +Object.defineProperty(module.exports, "__esModule", { + value: true +}); +module.exports = ELKNode; +ELKNode.default = ELKNode; +},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(require,module,exports){ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +module.exports = Worker; +},{}]},{},[3])(3) +}); + + +/***/ }), + +/***/ 3502: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (/* binding */ SimpleMarkdown) +/* harmony export */ }); +/* eslint-disable prefer-spread, no-regex-spaces, no-unused-vars, guard-for-in, no-console, no-var */ + +/** + * Simple-Markdown + * =============== + * + * Simple-Markdown's primary goal is to be easy to adapt. It aims + * to be compliant with John Gruber's [Markdown Syntax page][1], + * but compatiblity with other markdown implementations' edge-cases + * will be sacrificed where it conflicts with simplicity or + * extensibility. + * + * If your goal is to simply embed a standard markdown implementation + * in your website, simple-markdown is probably not the best library + * for you (although it should work). But if you have struggled to + * customize an existing library to meet your needs, simple-markdown + * might be able to help. + * + * Many of the regexes and original logic has been adapted from + * the wonderful [marked.js](https://github.com/chjj/marked) + */ +// Flow Type Definitions: +// We want to clarify our defaultRules types a little bit more so clients can +// reuse defaultRules built-ins. So we make some stronger guarantess when +// we can: +// End Flow Definitions +var CR_NEWLINE_R = /\r\n?/g; +var TAB_R = /\t/g; +var FORMFEED_R = /\f/g; +/** + * Turn various whitespace into easy-to-process whitespace + */ + +var preprocess = function preprocess(source) { + return source.replace(CR_NEWLINE_R, "\n").replace(FORMFEED_R, "").replace(TAB_R, " "); +}; + +var populateInitialState = function populateInitialState(givenState, defaultState) { + var state = givenState || {}; + + if (defaultState != null) { + for (var prop in defaultState) { + // $FlowFixMe + if (Object.prototype.hasOwnProperty.call(defaultState, prop)) { + state[prop] = defaultState[prop]; + } + } + } + + return state; +}; +/** + * Creates a parser for a given set of rules, with the precedence + * specified as a list of rules. + * + * @param {SimpleMarkdown.ParserRules} rules + * an object containing + * rule type -> {match, order, parse} objects + * (lower order is higher precedence) + * @param {SimpleMarkdown.OptionalState} [defaultState] + * + * @returns {SimpleMarkdown.Parser} + * The resulting parse function, with the following parameters: + * @source: the input source string to be parsed + * @state: an optional object to be threaded through parse + * calls. Allows clients to add stateful operations to + * parsing, such as keeping track of how many levels deep + * some nesting is. For an example use-case, see passage-ref + * parsing in src/widgets/passage/passage-markdown.jsx + */ + + +var parserFor = function parserFor(rules, defaultState) { + // Sorts rules in order of increasing order, then + // ascending rule name in case of ties. + var ruleList = Object.keys(rules).filter(function (type) { + var rule = rules[type]; + + if (rule == null || rule.match == null) { + return false; + } + + var order = rule.order; + + if ((typeof order !== "number" || !isFinite(order)) && typeof console !== "undefined") { + console.warn("simple-markdown: Invalid order for rule `" + type + "`: " + String(order)); + } + + return true; + }); + ruleList.sort(function (typeA, typeB) { + var ruleA = rules[typeA]; + var ruleB = rules[typeB]; + var orderA = ruleA.order; + var orderB = ruleB.order; // First sort based on increasing order + + if (orderA !== orderB) { + return orderA - orderB; + } + + var secondaryOrderA = ruleA.quality ? 0 : 1; + var secondaryOrderB = ruleB.quality ? 0 : 1; + + if (secondaryOrderA !== secondaryOrderB) { + return secondaryOrderA - secondaryOrderB; // Then based on increasing unicode lexicographic ordering + } else if (typeA < typeB) { + return -1; + } else if (typeA > typeB) { + return 1; + } else { + // Rules should never have the same name, + // but this is provided for completeness. + return 0; + } + }); + var latestState; + + var nestedParse = function nestedParse(source, state) { + var result = []; + state = state || latestState; + latestState = state; + + while (source) { + // store the best match, it's rule, and quality: + var ruleType = null; + var rule = null; + var capture = null; + var quality = NaN; // loop control variables: + + var i = 0; + var currRuleType = ruleList[0]; // $FlowFixMe + + var currRule = rules[currRuleType]; + + do { + var currOrder = currRule.order; + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var currCapture = currRule.match(source, state, prevCaptureStr); + + if (currCapture) { + var currQuality = currRule.quality ? currRule.quality(currCapture, state, prevCaptureStr) : 0; // This should always be true the first time because + // the initial quality is NaN (that's why there's the + // condition negation). + + if (!(currQuality <= quality)) { + ruleType = currRuleType; + rule = currRule; + capture = currCapture; + quality = currQuality; + } + } // Move on to the next item. + // Note that this makes `currRule` be the next item + + + i++; + currRuleType = ruleList[i]; // $FlowFixMe + + currRule = rules[currRuleType]; + } while ( // keep looping while we're still within the ruleList + currRule && ( // if we don't have a match yet, continue + !capture || // or if we have a match, but the next rule is + // at the same order, and has a quality measurement + // functions, then this rule must have a quality + // measurement function (since they are sorted before + // those without), and we need to check if there is + // a better quality match + currRule.order === currOrder && currRule.quality)); // TODO(aria): Write tests for these + + + if (rule == null || capture == null) { + throw new Error("Could not find a matching rule for the below " + "content. The rule with highest `order` should " + "always match content provided to it. Check " + "the definition of `match` for '" + ruleList[ruleList.length - 1] + "'. It seems to not match the following source:\n" + source); + } + + if (capture.index) { + // If present and non-zero, i.e. a non-^ regexp result: + throw new Error("`match` must return a capture starting at index 0 " + "(the current parse index). Did you forget a ^ at the " + "start of the RegExp?"); + } + + var parsed = rule.parse(capture, nestedParse, state); // We maintain the same object here so that rules can + // store references to the objects they return and + // modify them later. (oops sorry! but this adds a lot + // of power--see reflinks.) + + if (Array.isArray(parsed)) { + // $FlowFixMe + Array.prototype.push.apply(result, parsed); + } else { + if (parsed == null || typeof parsed !== "object") { + throw new Error("parse() function returned invalid parse result: '".concat(parsed, "'")); + } // We also let rules override the default type of + // their parsed node if they would like to, so that + // there can be a single output function for all links, + // even if there are several rules to parse them. + + + if (parsed.type == null) { + // $FlowFixMe + parsed.type = ruleType; + } + + result.push(parsed); + } + + state.prevCapture = capture; + source = source.substring(state.prevCapture[0].length); + } // $FlowFixMe + + + return result; + }; + + var outerParse = function outerParse(source, state) { + latestState = populateInitialState(state, defaultState); + + if (!latestState.inline && !latestState.disableAutoBlockNewlines) { + source = source + "\n\n"; + } // We store the previous capture so that match functions can + // use some limited amount of lookbehind. Lists use this to + // ensure they don't match arbitrary '- ' or '* ' in inline + // text (see the list rule for more information). This stores + // the full regex capture object, if there is one. + + + latestState.prevCapture = null; + return nestedParse(preprocess(source), latestState); + }; // $FlowFixMe + + + return outerParse; +}; // Creates a match function for an inline scoped element from a regex + + +var inlineRegex = function inlineRegex(regex) { + var match = function match(source, state, prevCapture) { + if (state.inline) { + // $FlowFixMe + return regex.exec(source); + } else { + return null; + } + }; + + match.regex = regex; + return match; +}; // Creates a match function for a block scoped element from a regex + + +var blockRegex = function blockRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + if (state.inline) { + return null; + } else { + return regex.exec(source); + } + }; + + match.regex = regex; + return match; +}; // Creates a match function from a regex, ignoring block/inline scope + + +var anyScopeRegex = function anyScopeRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + return regex.exec(source); + }; + + match.regex = regex; + return match; +}; + +var TYPE_SYMBOL = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; + +var reactElement = function reactElement(type, key, props) { + var element = { + $$typeof: TYPE_SYMBOL, + type: type, + key: key == null ? undefined : key, + ref: null, + props: props, + _owner: null + }; + return element; +}; +/** Returns a closed HTML tag. + * @param {string} tagName - Name of HTML tag (eg. "em" or "a") + * @param {string} content - Inner content of tag + * @param {{ [attr: string]: SimpleMarkdown.Attr }} [attributes] - Optional extra attributes of tag as an object of key-value pairs + * eg. { "href": "http://google.com" }. Falsey attributes are filtered out. + * @param {boolean} [isClosed] - boolean that controls whether tag is closed or not (eg. img tags). + * defaults to true + */ + + +var htmlTag = function htmlTag(tagName, content, attributes, isClosed) { + attributes = attributes || {}; + isClosed = typeof isClosed !== "undefined" ? isClosed : true; + var attributeString = ""; + + for (var attr in attributes) { + var attribute = attributes[attr]; // Removes falsey attributes + + if ( // $FlowFixMe + Object.prototype.hasOwnProperty.call(attributes, attr) && attribute) { + attributeString += " " + sanitizeText(attr) + '="' + sanitizeText(attribute) + '"'; + } + } + + var unclosedTag = "<" + tagName + attributeString + ">"; + + if (isClosed) { + return unclosedTag + content + "</" + tagName + ">"; + } else { + return unclosedTag; + } +}; + +var EMPTY_PROPS = {}; +/** + * @param {string | null | undefined} url - url to sanitize + * @returns {string | null} - url if safe, or null if a safe url could not be made + */ + +var sanitizeUrl = function sanitizeUrl(url) { + if (url == null) { + return null; + } + + try { + var prot = new URL(url, "https://localhost").protocol; + + if (prot.indexOf("javascript:") === 0 || prot.indexOf("vbscript:") === 0 || prot.indexOf("data:") === 0) { + return null; + } + } catch (e) { + // invalid URLs should throw a TypeError + // see for instance: `new URL("");` + return null; + } + + return url; +}; + +var SANITIZE_TEXT_R = /[<>&"']/g; +var SANITIZE_TEXT_CODES = { + "<": "<", + ">": ">", + "&": "&", + '"': """, + "'": "'", + "/": "/", + "`": "`" +}; + +var sanitizeText = function sanitizeText(text) { + return String(text).replace(SANITIZE_TEXT_R, function (chr) { + return SANITIZE_TEXT_CODES[chr]; + }); +}; + +var UNESCAPE_URL_R = /\\([^0-9A-Za-z\s])/g; + +var unescapeUrl = function unescapeUrl(rawUrlString) { + return rawUrlString.replace(UNESCAPE_URL_R, "$1"); +}; +/** + * Parse some content with the parser `parse`, with state.inline + * set to true. Useful for block elements; not generally necessary + * to be used by inline elements (where state.inline is already true. + */ + + +var parseInline = function parseInline(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = true; + var result = parse(content, state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseBlock = function parseBlock(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = false; + var result = parse(content + "\n\n", state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseCaptureInline = function parseCaptureInline(capture, parse, state) { + return { + content: parseInline(parse, capture[1], state) + }; +}; + +var ignoreCapture = function ignoreCapture() { + return {}; +}; // recognize a `*` `-`, `+`, `1.`, `2.`... list bullet + + +var LIST_BULLET = "(?:[*+-]|\\d+\\.)"; // recognize the start of a list item: +// leading space plus a bullet plus a space (` * `) + +var LIST_ITEM_PREFIX = "( *)(" + LIST_BULLET + ") +"; +var LIST_ITEM_PREFIX_R = new RegExp("^" + LIST_ITEM_PREFIX); // recognize an individual list item: +// * hi +// this is part of the same item +// +// as is this, which is a new paragraph in the same item +// +// * but this is not part of the same item + +var LIST_ITEM_R = new RegExp(LIST_ITEM_PREFIX + "[^\\n]*(?:\\n" + "(?!\\1" + LIST_BULLET + " )[^\\n]*)*(\n|$)", "gm"); +var BLOCK_END_R = /\n{2,}$/; +var INLINE_CODE_ESCAPE_BACKTICKS_R = /^ (?= *`)|(` *) $/g; // recognize the end of a paragraph block inside a list item: +// two or more newlines at end end of the item + +var LIST_BLOCK_END_R = BLOCK_END_R; +var LIST_ITEM_END_R = / *\n+$/; // check whether a list item has paragraphs: if it does, +// we leave the newlines at the end + +var LIST_R = new RegExp("^( *)(" + LIST_BULLET + ") " + "[\\s\\S]+?(?:\n{2,}(?! )" + "(?!\\1" + LIST_BULLET + " )\\n*" + // the \\s*$ here is so that we can parse the inside of nested +// lists, where our content might end before we receive two `\n`s +"|\\s*\n*$)"); +var LIST_LOOKBEHIND_R = /(?:^|\n)( *)$/; + +var TABLES = function () { + var TABLE_ROW_SEPARATOR_TRIM = /^ *\| *| *\| *$/g; + var TABLE_CELL_END_TRIM = / *$/; + var TABLE_RIGHT_ALIGN = /^ *-+: *$/; + var TABLE_CENTER_ALIGN = /^ *:-+: *$/; + var TABLE_LEFT_ALIGN = /^ *:-+ *$/; // TODO: This needs a real type + + var parseTableAlignCapture = function parseTableAlignCapture(alignCapture) { + if (TABLE_RIGHT_ALIGN.test(alignCapture)) { + return "right"; + } else if (TABLE_CENTER_ALIGN.test(alignCapture)) { + return "center"; + } else if (TABLE_LEFT_ALIGN.test(alignCapture)) { + return "left"; + } else { + return null; + } + }; + + var parseTableAlign = function parseTableAlign(source, parse, state, trimEndSeparators) { + if (trimEndSeparators) { + source = source.replace(TABLE_ROW_SEPARATOR_TRIM, ""); + } + + var alignText = source.trim().split("|"); + return alignText.map(parseTableAlignCapture); + }; + + var parseTableRow = function parseTableRow(source, parse, state, trimEndSeparators) { + var prevInTable = state.inTable; + state.inTable = true; + var tableRow = parse(source.trim(), state); + state.inTable = prevInTable; + var cells = [[]]; + tableRow.forEach(function (node, i) { + if (node.type === "tableSeparator") { + // Filter out empty table separators at the start/end: + if (!trimEndSeparators || i !== 0 && i !== tableRow.length - 1) { + // Split the current row: + cells.push([]); + } + } else { + if (node.type === "text" && (tableRow[i + 1] == null || tableRow[i + 1].type === "tableSeparator")) { + node.content = node.content.replace(TABLE_CELL_END_TRIM, ""); + } + + cells[cells.length - 1].push(node); + } + }); + return cells; + }; + /** + * @param {string} source + * @param {SimpleMarkdown.Parser} parse + * @param {SimpleMarkdown.State} state + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.ASTNode[][]} + */ + + + var parseTableCells = function parseTableCells(source, parse, state, trimEndSeparators) { + var rowsText = source.trim().split("\n"); + return rowsText.map(function (rowText) { + // $FlowFixMe + return parseTableRow(rowText, parse, state, trimEndSeparators); + }); + }; + /** + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.SingleNodeParseFunction} + */ + + + var parseTable = function parseTable(trimEndSeparators) { + return function (capture, parse, state) { + state.inline = true; + var header = parseTableRow(capture[1], parse, state, trimEndSeparators); + var align = parseTableAlign(capture[2], parse, state, trimEndSeparators); + var cells = parseTableCells(capture[3], parse, state, trimEndSeparators); + state.inline = false; + return { + type: "table", + header: header, + align: align, + cells: cells + }; + }; + }; + + return { + parseTable: parseTable(true), + parseNpTable: parseTable(false), + TABLE_REGEX: /^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/, + NPTABLE_REGEX: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/ + }; +}(); + +var LINK_INSIDE = "(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*"; +var LINK_HREF_AND_TITLE = "\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*"; +var AUTOLINK_MAILTO_CHECK_R = /mailto:/i; + +var parseRef = function parseRef(capture, state, refNode) { + var ref = (capture[2] || capture[1]).replace(/\s+/g, " ").toLowerCase(); // We store information about previously seen defs on + // state._defs (_ to deconflict with client-defined + // state). If the def for this reflink/refimage has + // already been seen, we can use its target/source + // and title here: + + if (state._defs && state._defs[ref]) { + var def = state._defs[ref]; // `refNode` can be a link or an image. Both use + // target and title properties. + + refNode.target = def.target; + refNode.title = def.title; + } // In case we haven't seen our def yet (or if someone + // overwrites that def later on), we add this node + // to the list of ref nodes for that def. Then, when + // we find the def, we can modify this link/image AST + // node :). + // I'm sorry. + + + state._refs = state._refs || {}; + state._refs[ref] = state._refs[ref] || []; + + state._refs[ref].push(refNode); + + return refNode; +}; + +var currOrder = 0; +var defaultRules = { + Array: { + react: function react(arr, output, state) { + var oldKey = state.key; + var result = []; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0, key = 0; i < arr.length; i++, key++) { + // `key` is our numerical `state.key`, which we increment for + // every output node, but don't change for joined text nodes. + // (i, however, must change for joined text nodes) + state.key = "" + i; + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result.push(output(node, state)); + } + + state.key = oldKey; + return result; + }, + html: function html(arr, output, state) { + var result = ""; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0; i < arr.length; i++) { + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result += output(node, state); + } + + return result; + } + }, + heading: { + order: currOrder++, + match: blockRegex(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/), + parse: function (_parse) { + function parse(_x, _x2, _x3) { + return _parse.apply(this, arguments); + } + + parse.toString = function () { + return _parse.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + level: capture[1].length, + content: parseInline(parse, capture[2].trim(), state) + }; + }), + react: function react(node, output, state) { + return reactElement("h" + node.level, state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("h" + node.level, output(node.content, state)); + } + }, + nptable: { + order: currOrder++, + match: blockRegex(TABLES.NPTABLE_REGEX), + parse: TABLES.parseNpTable, + react: null, + html: null + }, + lheading: { + order: currOrder++, + match: blockRegex(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/), + parse: function (_parse2) { + function parse(_x4, _x5, _x6) { + return _parse2.apply(this, arguments); + } + + parse.toString = function () { + return _parse2.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "heading", + level: capture[2] === "=" ? 1 : 2, + content: parseInline(parse, capture[1], state) + }; + }), + react: null, + html: null + }, + hr: { + order: currOrder++, + match: blockRegex(/^( *[-*_]){3,} *(?:\n *)+\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("hr", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<hr>"; + } + }, + codeBlock: { + order: currOrder++, + match: blockRegex(/^(?: [^\n]+\n*)+(?:\n *)+\n/), + parse: function (_parse3) { + function parse(_x7, _x8, _x9) { + return _parse3.apply(this, arguments); + } + + parse.toString = function () { + return _parse3.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ /gm, "").replace(/\n+$/, ""); + return { + lang: undefined, + content: content + }; + }), + react: function react(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + return reactElement("pre", state.key, { + children: reactElement("code", null, { + className: className, + children: node.content + }) + }); + }, + html: function html(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + var codeBlock = htmlTag("code", sanitizeText(node.content), { + class: className + }); + return htmlTag("pre", codeBlock); + } + }, + fence: { + order: currOrder++, + match: blockRegex(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/), + parse: function (_parse4) { + function parse(_x10, _x11, _x12) { + return _parse4.apply(this, arguments); + } + + parse.toString = function () { + return _parse4.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "codeBlock", + lang: capture[2] || undefined, + content: capture[3] + }; + }), + react: null, + html: null + }, + blockQuote: { + order: currOrder++, + match: blockRegex(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/), + parse: function (_parse5) { + function parse(_x13, _x14, _x15) { + return _parse5.apply(this, arguments); + } + + parse.toString = function () { + return _parse5.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ *> ?/gm, ""); + return { + content: parse(content, state) + }; + }), + react: function react(node, output, state) { + return reactElement("blockquote", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("blockquote", output(node.content, state)); + } + }, + list: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + // We only want to break into a list if we are at the start of a + // line. This is to avoid parsing "hi * there" with "* there" + // becoming a part of a list. + // You might wonder, "but that's inline, so of course it wouldn't + // start a list?". You would be correct! Except that some of our + // lists can be inline, because they might be inside another list, + // in which case we can parse with inline scope, but need to allow + // nested lists inside this inline scope. + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var isStartOfLineCapture = LIST_LOOKBEHIND_R.exec(prevCaptureStr); + var isListBlock = state._list || !state.inline; + + if (isStartOfLineCapture && isListBlock) { + source = isStartOfLineCapture[1] + source; + return LIST_R.exec(source); + } else { + return null; + } + }, + parse: function (_parse6) { + function parse(_x16, _x17, _x18) { + return _parse6.apply(this, arguments); + } + + parse.toString = function () { + return _parse6.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var bullet = capture[2]; + var ordered = bullet.length > 1; + var start = ordered ? +bullet : undefined; + var items = capture[0].replace(LIST_BLOCK_END_R, "\n").match(LIST_ITEM_R); // We know this will match here, because of how the regexes are + // defined + + var lastItemWasAParagraph = false; + var itemContent = items.map(function (item, i) { + // We need to see how far indented this item is: + var prefixCapture = LIST_ITEM_PREFIX_R.exec(item); + var space = prefixCapture ? prefixCapture[0].length : 0; // And then we construct a regex to "unindent" the subsequent + // lines of the items by that amount: + + var spaceRegex = new RegExp("^ {1," + space + "}", "gm"); // Before processing the item, we need a couple things + + var content = item // remove indents on trailing lines: + .replace(spaceRegex, "") // remove the bullet: + .replace(LIST_ITEM_PREFIX_R, ""); // I'm not sur4 why this is necessary again? + // Handling "loose" lists, like: + // + // * this is wrapped in a paragraph + // + // * as is this + // + // * as is this + + var isLastItem = i === items.length - 1; + var containsBlocks = content.indexOf("\n\n") !== -1; // Any element in a list is a block if it contains multiple + // newlines. The last element in the list can also be a block + // if the previous item in the list was a block (this is + // because non-last items in the list can end with \n\n, but + // the last item can't, so we just "inherit" this property + // from our previous element). + + var thisItemIsAParagraph = containsBlocks || isLastItem && lastItemWasAParagraph; + lastItemWasAParagraph = thisItemIsAParagraph; // backup our state for restoration afterwards. We're going to + // want to set state._list to true, and state.inline depending + // on our list's looseness. + + var oldStateInline = state.inline; + var oldStateList = state._list; + state._list = true; // Parse inline if we're in a tight list, or block if we're in + // a loose list. + + var adjustedContent; + + if (thisItemIsAParagraph) { + state.inline = false; + adjustedContent = content.replace(LIST_ITEM_END_R, "\n\n"); + } else { + state.inline = true; + adjustedContent = content.replace(LIST_ITEM_END_R, ""); + } + + var result = parse(adjustedContent, state); // Restore our state before returning + + state.inline = oldStateInline; + state._list = oldStateList; + return result; + }); + return { + ordered: ordered, + start: start, + items: itemContent + }; + }), + react: function react(node, output, state) { + var ListWrapper = node.ordered ? "ol" : "ul"; + return reactElement(ListWrapper, state.key, { + start: node.start, + children: node.items.map(function (item, i) { + return reactElement("li", "" + i, { + children: output(item, state) + }); + }) + }); + }, + html: function html(node, output, state) { + var listItems = node.items.map(function (item) { + return htmlTag("li", output(item, state)); + }).join(""); + var listTag = node.ordered ? "ol" : "ul"; + var attributes = { + start: node.start + }; + return htmlTag(listTag, listItems, attributes); + } + }, + def: { + order: currOrder++, + // TODO(aria): This will match without a blank line before the next + // block element, which is inconsistent with most of the rest of + // simple-markdown. + match: blockRegex(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/), + parse: function (_parse7) { + function parse(_x19, _x20, _x21) { + return _parse7.apply(this, arguments); + } + + parse.toString = function () { + return _parse7.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var def = capture[1].replace(/\s+/g, " ").toLowerCase(); + var target = capture[2]; + var title = capture[3]; // Look for previous links/images using this def + // If any links/images using this def have already been declared, + // they will have added themselves to the state._refs[def] list + // (_ to deconflict with client-defined state). We look through + // that list of reflinks for this def, and modify those AST nodes + // with our newly found information now. + // Sorry :(. + + if (state._refs && state._refs[def]) { + // `refNode` can be a link or an image + state._refs[def].forEach(function (refNode) { + refNode.target = target; + refNode.title = title; + }); + } // Add this def to our map of defs for any future links/images + // In case we haven't found any or all of the refs referring to + // this def yet, we add our def to the table of known defs, so + // that future reflinks can modify themselves appropriately with + // this information. + + + state._defs = state._defs || {}; + state._defs[def] = { + target: target, + title: title + }; // return the relevant parsed information + // for debugging only. + + return { + def: def, + target: target, + title: title + }; + }), + react: function react() { + return null; + }, + html: function html() { + return ""; + } + }, + table: { + order: currOrder++, + match: blockRegex(TABLES.TABLE_REGEX), + parse: TABLES.parseTable, + react: function react(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? {} : { + textAlign: node.align[colIndex] + }; + }; + + var headers = node.header.map(function (content, i) { + return reactElement("th", "" + i, { + style: getStyle(i), + scope: "col", + children: output(content, state) + }); + }); + var rows = node.cells.map(function (row, r) { + return reactElement("tr", "" + r, { + children: row.map(function (content, c) { + return reactElement("td", "" + c, { + style: getStyle(c), + children: output(content, state) + }); + }) + }); + }); + return reactElement("table", state.key, { + children: [reactElement("thead", "thead", { + children: reactElement("tr", null, { + children: headers + }) + }), reactElement("tbody", "tbody", { + children: rows + })] + }); + }, + html: function html(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? "" : "text-align:" + node.align[colIndex] + ";"; + }; + + var headers = node.header.map(function (content, i) { + return htmlTag("th", output(content, state), { + style: getStyle(i), + scope: "col" + }); + }).join(""); + var rows = node.cells.map(function (row) { + var cols = row.map(function (content, c) { + return htmlTag("td", output(content, state), { + style: getStyle(c) + }); + }).join(""); + return htmlTag("tr", cols); + }).join(""); + var thead = htmlTag("thead", htmlTag("tr", headers)); + var tbody = htmlTag("tbody", rows); + return htmlTag("table", thead + tbody); + } + }, + newline: { + order: currOrder++, + match: blockRegex(/^(?:\n *)*\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return "\n"; + }, + html: function html(node, output, state) { + return "\n"; + } + }, + paragraph: { + order: currOrder++, + match: blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("div", state.key, { + className: "paragraph", + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + class: "paragraph" + }; + return htmlTag("div", output(node.content, state), attributes); + } + }, + escape: { + order: currOrder++, + // We don't allow escaping numbers, letters, or spaces here so that + // backslashes used in plain text still get rendered. But allowing + // escaping anything else provides a very flexible escape mechanism, + // regardless of how this grammar is extended. + match: inlineRegex(/^\\([^0-9A-Za-z\s])/), + parse: function (_parse8) { + function parse(_x22, _x23, _x24) { + return _parse8.apply(this, arguments); + } + + parse.toString = function () { + return _parse8.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "text", + content: capture[1] + }; + }), + react: null, + html: null + }, + tableSeparator: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + if (!state.inTable) { + return null; + } + + return /^ *\| */.exec(source); + }, + parse: function parse() { + return { + type: "tableSeparator" + }; + }, + // These shouldn't be reached, but in case they are, be reasonable: + react: function react() { + return " | "; + }, + html: function html() { + return " | "; + } + }, + autolink: { + order: currOrder++, + match: inlineRegex(/^<([^: >]+:\/[^ >]+)>/), + parse: function (_parse9) { + function parse(_x25, _x26, _x27) { + return _parse9.apply(this, arguments); + } + + parse.toString = function () { + return _parse9.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1] + }; + }), + react: null, + html: null + }, + mailto: { + order: currOrder++, + match: inlineRegex(/^<([^ >]+@[^ >]+)>/), + parse: function (_parse10) { + function parse(_x28, _x29, _x30) { + return _parse10.apply(this, arguments); + } + + parse.toString = function () { + return _parse10.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var address = capture[1]; + var target = capture[1]; // Check for a `mailto:` already existing in the link: + + if (!AUTOLINK_MAILTO_CHECK_R.test(target)) { + target = "mailto:" + target; + } + + return { + type: "link", + content: [{ + type: "text", + content: address + }], + target: target + }; + }), + react: null, + html: null + }, + url: { + order: currOrder++, + match: inlineRegex(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/), + parse: function (_parse11) { + function parse(_x31, _x32, _x33) { + return _parse11.apply(this, arguments); + } + + parse.toString = function () { + return _parse11.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1], + title: undefined + }; + }), + react: null, + html: null + }, + link: { + order: currOrder++, + match: inlineRegex(new RegExp("^\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse12) { + function parse(_x34, _x35, _x36) { + return _parse12.apply(this, arguments); + } + + parse.toString = function () { + return _parse12.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var link = { + content: parse(capture[1], state), + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return link; + }), + react: function react(node, output, state) { + return reactElement("a", state.key, { + href: sanitizeUrl(node.target), + title: node.title, + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + href: sanitizeUrl(node.target), + title: node.title + }; + return htmlTag("a", output(node.content, state), attributes); + } + }, + image: { + order: currOrder++, + match: inlineRegex(new RegExp("^!\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse13) { + function parse(_x37, _x38, _x39) { + return _parse13.apply(this, arguments); + } + + parse.toString = function () { + return _parse13.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var image = { + alt: capture[1], + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return image; + }), + react: function react(node, output, state) { + return reactElement("img", state.key, { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }); + }, + html: function html(node, output, state) { + var attributes = { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }; + return htmlTag("img", "", attributes, false); + } + }, + reflink: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse14) { + function parse(_x40, _x41, _x42) { + return _parse14.apply(this, arguments); + } + + parse.toString = function () { + return _parse14.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "link", + content: parse(capture[1], state) + }); + }), + react: null, + html: null + }, + refimage: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^!\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse15) { + function parse(_x43, _x44, _x45) { + return _parse15.apply(this, arguments); + } + + parse.toString = function () { + return _parse15.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "image", + alt: capture[1] + }); + }), + react: null, + html: null + }, + em: { + order: currOrder + /* same as strong/u */ + , + match: inlineRegex(new RegExp( // only match _s surrounding words. + "^\\b_" + "((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_" + "\\b" + // Or match *s: + "|" + // Only match *s that are followed by a non-space: + "^\\*(?=\\S)(" + // Match at least one of: + "(?:" + // - `**`: so that bolds inside italics don't close the + // italics + "\\*\\*|" + // - escape sequence: so escaped *s don't close us + "\\\\[\\s\\S]|" + // - whitespace: followed by a non-* (we don't + // want ' *' to close an italics--it might + // start a list) + "\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|" + // - non-whitespace, non-*, non-backslash characters + "[^\\s\\*\\\\]" + ")+?" + // followed by a non-space, non-* then * + ")\\*(?!\\*)")), + quality: function quality(capture) { + // precedence by length, `em` wins ties: + return capture[0].length + 0.2; + }, + parse: function (_parse16) { + function parse(_x46, _x47, _x48) { + return _parse16.apply(this, arguments); + } + + parse.toString = function () { + return _parse16.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: parse(capture[2] || capture[1], state) + }; + }), + react: function react(node, output, state) { + return reactElement("em", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("em", output(node.content, state)); + } + }, + strong: { + order: currOrder + /* same as em */ + , + match: inlineRegex(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/), + quality: function quality(capture) { + // precedence by length, wins ties vs `u`: + return capture[0].length + 0.1; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("strong", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("strong", output(node.content, state)); + } + }, + u: { + order: currOrder++ + /* same as em&strong; increment for next rule */ + , + match: inlineRegex(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/), + quality: function quality(capture) { + // precedence by length, loses all ties + return capture[0].length; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("u", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("u", output(node.content, state)); + } + }, + del: { + order: currOrder++, + match: inlineRegex(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("del", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("del", output(node.content, state)); + } + }, + inlineCode: { + order: currOrder++, + match: inlineRegex(/^(`+)([\s\S]*?[^`])\1(?!`)/), + parse: function (_parse17) { + function parse(_x49, _x50, _x51) { + return _parse17.apply(this, arguments); + } + + parse.toString = function () { + return _parse17.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[2].replace(INLINE_CODE_ESCAPE_BACKTICKS_R, "$1") + }; + }), + react: function react(node, output, state) { + return reactElement("code", state.key, { + children: node.content + }); + }, + html: function html(node, output, state) { + return htmlTag("code", sanitizeText(node.content)); + } + }, + br: { + order: currOrder++, + match: anyScopeRegex(/^ {2,}\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("br", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<br>"; + } + }, + text: { + order: currOrder++, + // Here we look for anything followed by non-symbols, + // double newlines, or double-space-newlines + // We break on any symbol characters so that this grammar + // is easy to extend without needing to modify this regex + match: anyScopeRegex(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/), + parse: function (_parse18) { + function parse(_x52, _x53, _x54) { + return _parse18.apply(this, arguments); + } + + parse.toString = function () { + return _parse18.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[0] + }; + }), + react: function react(node, output, state) { + return node.content; + }, + html: function html(node, output, state) { + return sanitizeText(node.content); + } + } +}; +/** (deprecated) */ + +var ruleOutput = function ruleOutput( // $FlowFixMe +rules, property) { + if (!property && typeof console !== "undefined") { + console.warn("simple-markdown ruleOutput should take 'react' or " + "'html' as the second argument."); + } + + var nestedRuleOutput = function nestedRuleOutput(ast, outputFunc, state) { + return rules[ast.type][property](ast, outputFunc, state); + }; + + return nestedRuleOutput; +}; +/** (deprecated) + */ + + +var reactFor = function reactFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + var oldKey = state.key; + var result = []; // map nestedOutput over the ast, except group any text + // nodes together into a single string output. + + var lastResult = null; + + for (var i = 0; i < ast.length; i++) { + state.key = "" + i; + var nodeOut = nestedOutput(ast[i], state); + + if (typeof nodeOut === "string" && typeof lastResult === "string") { + lastResult = lastResult + nodeOut; + result[result.length - 1] = lastResult; + } else { + result.push(nodeOut); + lastResult = nodeOut; + } + } + + state.key = oldKey; + return result; + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; +/** (deprecated) + */ + + +var htmlFor = function htmlFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + return ast.map(function (node) { + return nestedOutput(node, state); + }).join(""); + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; + +var outputFor = function outputFor(rules, property) { + var defaultState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!property) { + throw new Error("simple-markdown: outputFor: `property` must be " + "defined. " + "if you just upgraded, you probably need to replace `outputFor` " + "with `reactFor`"); + } + + var latestState; // $FlowFixMe[incompatible-type] + + var arrayRule = rules.Array || defaultRules.Array; // Tricks to convince tsc that this var is not null: + + var arrayRuleCheck = arrayRule[property]; + + if (!arrayRuleCheck) { + throw new Error("simple-markdown: outputFor: to join nodes of type `" + property + "` you must provide an `Array:` joiner rule with that type, " + "Please see the docs for details on specifying an Array rule."); + } + + var arrayRuleOutput = arrayRuleCheck; + + var nestedOutput = function nestedOutput(ast, state) { + state = state || latestState; + latestState = state; + + if (Array.isArray(ast)) { + return arrayRuleOutput(ast, nestedOutput, state); + } else { + return rules[ast.type][property](ast, nestedOutput, state); + } + }; + + var outerOutput = function outerOutput(ast, state) { + latestState = populateInitialState(state, defaultState); + return nestedOutput(ast, latestState); + }; + + return outerOutput; +}; // $FlowFixMe[incompatible-call] + + +var defaultRawParse = parserFor(defaultRules); + +var defaultBlockParse = function defaultBlockParse(source, state) { + state = state || {}; + state.inline = false; + return defaultRawParse(source, state); +}; + +var defaultInlineParse = function defaultInlineParse(source, state) { + state = state || {}; + state.inline = true; + return defaultRawParse(source, state); +}; + +var defaultImplicitParse = function defaultImplicitParse(source, state) { + var isBlock = BLOCK_END_R.test(source); + state = state || {}; + state.inline = !isBlock; + return defaultRawParse(source, state); +}; // $FlowFixMe[incompatible-call] + + +var defaultReactOutput = outputFor(defaultRules, "react"); // $FlowFixMe[incompatible-call] + +var defaultHtmlOutput = outputFor(defaultRules, "html"); + +var markdownToReact = function markdownToReact(source, state) { + return defaultReactOutput(defaultBlockParse(source, state), state); +}; + +var markdownToHtml = function markdownToHtml(source, state) { + return defaultHtmlOutput(defaultBlockParse(source, state), state); +}; // TODO: This needs definition + + +var ReactMarkdown = function ReactMarkdown(props) { + var divProps = {}; + + for (var prop in props) { + if (prop !== "source" && // $FlowFixMe + Object.prototype.hasOwnProperty.call(props, prop)) { + divProps[prop] = props[prop]; + } + } + + divProps.children = markdownToReact(props.source); + return reactElement("div", null, divProps); +}; + +// $FlowFixMe +var SimpleMarkdown = { + defaultRules: defaultRules, + parserFor: parserFor, + outputFor: outputFor, + inlineRegex: inlineRegex, + blockRegex: blockRegex, + anyScopeRegex: anyScopeRegex, + parseInline: parseInline, + parseBlock: parseBlock, + // default wrappers: + markdownToReact: markdownToReact, + markdownToHtml: markdownToHtml, + ReactMarkdown: ReactMarkdown, + defaultBlockParse: defaultBlockParse, + defaultInlineParse: defaultInlineParse, + defaultImplicitParse: defaultImplicitParse, + defaultReactOutput: defaultReactOutput, + defaultHtmlOutput: defaultHtmlOutput, + preprocess: preprocess, + sanitizeText: sanitizeText, + sanitizeUrl: sanitizeUrl, + unescapeUrl: unescapeUrl, + htmlTag: htmlTag, + reactElement: reactElement, + // deprecated: + defaultRawParse: defaultRawParse, + ruleOutput: ruleOutput, + reactFor: reactFor, + htmlFor: htmlFor, + defaultParse: function defaultParse() { + if (typeof console !== "undefined") { + console.warn("defaultParse is deprecated, please use `defaultImplicitParse`"); + } + + return defaultImplicitParse.apply(null, arguments); + }, + defaultOutput: function defaultOutput() { + if (typeof console !== "undefined") { + console.warn("defaultOutput is deprecated, please use `defaultReactOutput`"); + } + + return defaultReactOutput.apply(null, arguments); + } +}; + + +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "c": () => (/* binding */ createText) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43047); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3502); + + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = withoutMultipleNewlines.replace(/^\s+/gm, ""); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(preprocessedMarkdown); + let lines = [[]]; + let currentLine = 0; + function processNode(node, parentType) { + if (node.type === "text") { + const textLines = node.content.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType || "normal" }); + } + }); + }); + } else if (node.type === "strong" || node.type === "em") { + node.content.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + syntaxTree.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.content.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(markdown); + function output(node) { + if (node.type === "text") { + return node.content.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.content.map(output).join("")}</strong>`; + } else if (node.type === "em") { + return `<em>${node.content.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.content.map(output).join("")}</p>`; + } else { + return ""; + } + } + return syntaxTree.map(output).join(""); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + `<span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + let bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = -1; + structuredText.forEach((line) => { + lineIndex++; + let tspan = createTspan(textElement, lineIndex, lineHeight); + let words = [...line].reverse(); + let currentWord; + let wrappedLine = []; + while (words.length) { + currentWord = words.pop(); + wrappedLine.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + if (tspan.node().getComputedTextLength() > width) { + wrappedLine.pop(); + words.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + wrappedLine = []; + lineIndex++; + tspan = createTspan(textElement, lineIndex, lineHeight); + } + } + }); + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "em" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width, + addSvgBackground = false +} = {}) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__.d)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlSpan(el, node, width, classes); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const special = ['"', "'", ".", ",", ":", ";", "!", "?", "(", ")", "[", "]", "{", "}"]; + let lastWord; + structuredText.forEach((line) => { + line.forEach((word) => { + if (special.includes(word.content) && lastWord) { + lastWord.content += word.content; + word.content = ""; + } + lastWord = word; + }); + }); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + +//# sourceMappingURL=createText-1f5f8f92.js.map + + +/***/ }), + +/***/ 48099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ insertMarkers$1), +/* harmony export */ "b": () => (/* binding */ clear$1), +/* harmony export */ "c": () => (/* binding */ createLabel$1), +/* harmony export */ "d": () => (/* binding */ clear), +/* harmony export */ "e": () => (/* binding */ insertNode), +/* harmony export */ "f": () => (/* binding */ insertEdgeLabel), +/* harmony export */ "g": () => (/* binding */ insertEdge), +/* harmony export */ "h": () => (/* binding */ positionEdgeLabel), +/* harmony export */ "i": () => (/* binding */ intersectRect$1), +/* harmony export */ "l": () => (/* binding */ labelHelper), +/* harmony export */ "p": () => (/* binding */ positionNode), +/* harmony export */ "s": () => (/* binding */ setNodeElem), +/* harmony export */ "u": () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(211); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); +/* harmony import */ var _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(77657); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(81188); + + + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 12 20").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(label, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), { + useHtmlLabels, + width: node.width || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(" + 0 + ", " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const question = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = (parent, node) => { + const { shapeSvg } = labelHelper(parent, node, "label", true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", " + 0 + ")" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = shapes[node.shape](newEl, node, dir); + } else { + el = shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcLabelPosition(path); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.arrowMarkerAbsolute || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + +//# sourceMappingURL=edges-2e77835f.js.map + + +/***/ }), + +/***/ 49863: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "d": () => (/* binding */ db), +/* harmony export */ "f": () => (/* binding */ flowDb), +/* harmony export */ "p": () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 9], $V1 = [1, 7], $V2 = [1, 6], $V3 = [1, 8], $V4 = [1, 20, 21, 22, 23, 38, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $V5 = [2, 10], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 30], $Vb = [1, 32], $Vc = [1, 33], $Vd = [1, 34], $Ve = [1, 62], $Vf = [1, 48], $Vg = [1, 52], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 38], $Vk = [1, 39], $Vl = [1, 40], $Vm = [1, 56], $Vn = [1, 63], $Vo = [1, 51], $Vp = [1, 53], $Vq = [1, 55], $Vr = [1, 59], $Vs = [1, 60], $Vt = [1, 41], $Vu = [1, 42], $Vv = [1, 43], $Vw = [1, 44], $Vx = [1, 61], $Vy = [1, 50], $Vz = [1, 54], $VA = [1, 57], $VB = [1, 58], $VC = [1, 49], $VD = [1, 66], $VE = [1, 71], $VF = [1, 20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $VG = [1, 75], $VH = [1, 74], $VI = [1, 76], $VJ = [20, 21, 23, 81, 82], $VK = [1, 99], $VL = [1, 104], $VM = [1, 107], $VN = [1, 108], $VO = [1, 101], $VP = [1, 106], $VQ = [1, 109], $VR = [1, 102], $VS = [1, 114], $VT = [1, 113], $VU = [1, 103], $VV = [1, 105], $VW = [1, 110], $VX = [1, 111], $VY = [1, 112], $VZ = [1, 115], $V_ = [20, 21, 22, 23, 81, 82], $V$ = [20, 21, 22, 23, 53, 81, 82], $V01 = [20, 21, 22, 23, 40, 52, 53, 55, 57, 59, 61, 63, 65, 66, 67, 69, 71, 73, 74, 76, 81, 82, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V11 = [20, 21, 23], $V21 = [20, 21, 23, 52, 66, 67, 81, 82, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V31 = [1, 12, 20, 21, 22, 23, 24, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $V41 = [52, 66, 67, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V51 = [1, 150], $V61 = [1, 158], $V71 = [1, 159], $V81 = [1, 160], $V91 = [1, 161], $Va1 = [1, 145], $Vb1 = [1, 146], $Vc1 = [1, 141], $Vd1 = [1, 142], $Ve1 = [1, 153], $Vf1 = [1, 154], $Vg1 = [1, 155], $Vh1 = [1, 156], $Vi1 = [1, 157], $Vj1 = [1, 162], $Vk1 = [1, 163], $Vl1 = [1, 148], $Vm1 = [1, 151], $Vn1 = [1, 147], $Vo1 = [1, 144], $Vp1 = [20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $Vq1 = [1, 166], $Vr1 = [20, 21, 22, 23, 26, 52, 66, 67, 92, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $Vs1 = [20, 21, 22, 23, 24, 26, 38, 40, 41, 42, 52, 56, 58, 60, 62, 64, 66, 67, 68, 70, 72, 73, 75, 77, 81, 82, 87, 88, 89, 90, 91, 92, 93, 96, 106, 107, 110, 112, 113, 114, 115, 123, 124, 125, 126, 127, 128], $Vt1 = [12, 21, 22, 24], $Vu1 = [22, 107], $Vv1 = [1, 251], $Vw1 = [1, 246], $Vx1 = [1, 247], $Vy1 = [1, 255], $Vz1 = [1, 252], $VA1 = [1, 249], $VB1 = [1, 248], $VC1 = [1, 250], $VD1 = [1, 253], $VE1 = [1, 254], $VF1 = [1, 256], $VG1 = [1, 274], $VH1 = [20, 21, 23, 107], $VI1 = [20, 21, 22, 23, 66, 67, 87, 103, 106, 107, 110, 111, 112, 113, 114]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "openDirective": 6, "typeDirective": 7, "closeDirective": 8, "separator": 9, ":": 10, "argDirective": 11, "open_directive": 12, "type_directive": 13, "arg_directive": 14, "close_directive": 15, "graphConfig": 16, "document": 17, "line": 18, "statement": 19, "SEMI": 20, "NEWLINE": 21, "SPACE": 22, "EOF": 23, "GRAPH": 24, "NODIR": 25, "DIR": 26, "FirstStmtSeperator": 27, "ending": 28, "endToken": 29, "spaceList": 30, "spaceListNewline": 31, "verticeStatement": 32, "styleStatement": 33, "linkStyleStatement": 34, "classDefStatement": 35, "classStatement": 36, "clickStatement": 37, "subgraph": 38, "text": 39, "SQS": 40, "SQE": 41, "end": 42, "direction": 43, "acc_title": 44, "acc_title_value": 45, "acc_descr": 46, "acc_descr_value": 47, "acc_descr_multiline_value": 48, "link": 49, "node": 50, "vertex": 51, "AMP": 52, "STYLE_SEPARATOR": 53, "idString": 54, "DOUBLECIRCLESTART": 55, "DOUBLECIRCLEEND": 56, "PS": 57, "PE": 58, "(-": 59, "-)": 60, "STADIUMSTART": 61, "STADIUMEND": 62, "SUBROUTINESTART": 63, "SUBROUTINEEND": 64, "VERTEX_WITH_PROPS_START": 65, "ALPHA": 66, "COLON": 67, "PIPE": 68, "CYLINDERSTART": 69, "CYLINDEREND": 70, "DIAMOND_START": 71, "DIAMOND_STOP": 72, "TAGEND": 73, "TRAPSTART": 74, "TRAPEND": 75, "INVTRAPSTART": 76, "INVTRAPEND": 77, "linkStatement": 78, "arrowText": 79, "TESTSTR": 80, "START_LINK": 81, "LINK": 82, "textToken": 83, "STR": 84, "MD_STR": 85, "keywords": 86, "STYLE": 87, "LINKSTYLE": 88, "CLASSDEF": 89, "CLASS": 90, "CLICK": 91, "DOWN": 92, "UP": 93, "textNoTags": 94, "textNoTagsToken": 95, "DEFAULT": 96, "stylesOpt": 97, "alphaNum": 98, "CALLBACKNAME": 99, "CALLBACKARGS": 100, "HREF": 101, "LINK_TARGET": 102, "HEX": 103, "numList": 104, "INTERPOLATE": 105, "NUM": 106, "COMMA": 107, "style": 108, "styleComponent": 109, "MINUS": 110, "UNIT": 111, "BRKT": 112, "DOT": 113, "PCT": 114, "TAGSTART": 115, "alphaNumToken": 116, "idStringToken": 117, "alphaNumStatement": 118, "direction_tb": 119, "direction_bt": 120, "direction_rl": 121, "direction_lr": 122, "PUNCTUATION": 123, "UNICODE_TEXT": 124, "PLUS": 125, "EQUALS": 126, "MULT": 127, "UNDERSCORE": 128, "graphCodeTokens": 129, "ARROW_CROSS": 130, "ARROW_POINT": 131, "ARROW_CIRCLE": 132, "ARROW_OPEN": 133, "QUOTE": 134, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 10: ":", 12: "open_directive", 13: "type_directive", 14: "arg_directive", 15: "close_directive", 20: "SEMI", 21: "NEWLINE", 22: "SPACE", 23: "EOF", 24: "GRAPH", 25: "NODIR", 26: "DIR", 38: "subgraph", 40: "SQS", 41: "SQE", 42: "end", 44: "acc_title", 45: "acc_title_value", 46: "acc_descr", 47: "acc_descr_value", 48: "acc_descr_multiline_value", 52: "AMP", 53: "STYLE_SEPARATOR", 55: "DOUBLECIRCLESTART", 56: "DOUBLECIRCLEEND", 57: "PS", 58: "PE", 59: "(-", 60: "-)", 61: "STADIUMSTART", 62: "STADIUMEND", 63: "SUBROUTINESTART", 64: "SUBROUTINEEND", 65: "VERTEX_WITH_PROPS_START", 66: "ALPHA", 67: "COLON", 68: "PIPE", 69: "CYLINDERSTART", 70: "CYLINDEREND", 71: "DIAMOND_START", 72: "DIAMOND_STOP", 73: "TAGEND", 74: "TRAPSTART", 75: "TRAPEND", 76: "INVTRAPSTART", 77: "INVTRAPEND", 80: "TESTSTR", 81: "START_LINK", 82: "LINK", 84: "STR", 85: "MD_STR", 87: "STYLE", 88: "LINKSTYLE", 89: "CLASSDEF", 90: "CLASS", 91: "CLICK", 92: "DOWN", 93: "UP", 96: "DEFAULT", 99: "CALLBACKNAME", 100: "CALLBACKARGS", 101: "HREF", 102: "LINK_TARGET", 103: "HEX", 105: "INTERPOLATE", 106: "NUM", 107: "COMMA", 110: "MINUS", 111: "UNIT", 112: "BRKT", 113: "DOT", 114: "PCT", 115: "TAGSTART", 119: "direction_tb", 120: "direction_bt", 121: "direction_rl", 122: "direction_lr", 123: "PUNCTUATION", 124: "UNICODE_TEXT", 125: "PLUS", 126: "EQUALS", 127: "MULT", 128: "UNDERSCORE", 130: "ARROW_CROSS", 131: "ARROW_POINT", 132: "ARROW_CIRCLE", 133: "ARROW_OPEN", 134: "QUOTE" }, + productions_: [0, [3, 1], [3, 2], [5, 4], [5, 6], [6, 1], [7, 1], [11, 1], [8, 1], [4, 2], [17, 0], [17, 2], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [16, 2], [16, 2], [16, 2], [16, 3], [28, 2], [28, 1], [29, 1], [29, 1], [29, 1], [27, 1], [27, 1], [27, 2], [31, 2], [31, 2], [31, 1], [31, 1], [30, 2], [30, 1], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 9], [19, 6], [19, 4], [19, 1], [19, 2], [19, 2], [19, 1], [9, 1], [9, 1], [9, 1], [32, 3], [32, 4], [32, 2], [32, 1], [50, 1], [50, 5], [50, 3], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 8], [51, 4], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 4], [51, 4], [51, 1], [49, 2], [49, 3], [49, 3], [49, 1], [49, 3], [78, 1], [79, 3], [39, 1], [39, 2], [39, 1], [39, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [94, 1], [94, 2], [35, 5], [35, 5], [36, 5], [37, 2], [37, 4], [37, 3], [37, 5], [37, 2], [37, 4], [37, 4], [37, 6], [37, 2], [37, 4], [37, 2], [37, 4], [37, 4], [37, 6], [33, 5], [33, 5], [34, 5], [34, 5], [34, 9], [34, 9], [34, 7], [34, 7], [104, 1], [104, 3], [97, 1], [97, 3], [108, 1], [108, 2], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [95, 1], [95, 1], [95, 1], [95, 1], [54, 1], [54, 2], [98, 1], [98, 2], [118, 1], [118, 1], [118, 1], [118, 1], [43, 1], [43, 1], [43, 1], [43, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.parseDirective("%%{", "open_directive"); + break; + case 6: + yy.parseDirective($$[$0], "type_directive"); + break; + case 7: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 8: + yy.parseDirective("}%%", "close_directive", "flowchart"); + break; + case 10: + this.$ = []; + break; + case 11: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 12: + case 97: + case 153: + case 155: + case 156: + this.$ = $$[$0]; + break; + case 19: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 20: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 35: + this.$ = $$[$0 - 1].nodes; + break; + case 36: + case 37: + case 38: + case 39: + case 40: + this.$ = []; + break; + case 41: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 42: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 43: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 45: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 46: + case 47: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 51: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 52: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 53: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 54: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 55: + this.$ = [$$[$0]]; + break; + case 56: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 57: + this.$ = [$$[$0 - 2]]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 58: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 60: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 61: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 64: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 65: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 67: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 68: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 69: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 70: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 71: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 72: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 74: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 75: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 76: + case 77: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 78: + this.$ = $$[$0]; + break; + case 79: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 80: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 81: + this.$ = $$[$0 - 1]; + break; + case 82: + this.$ = { text: $$[$0], type: "text" }; + break; + case 83: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 84: + this.$ = { text: $$[$0], type: "text" }; + break; + case 85: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 98: + case 154: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 99: + case 100: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 101: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 102: + case 110: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 103: + case 111: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 104: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 105: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 106: + case 112: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 107: + case 113: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 108: + case 114: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 109: + case 115: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 116: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 117: + case 119: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 118: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 121: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 122: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 123: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 124: + case 126: + this.$ = [$$[$0]]; + break; + case 125: + case 127: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 129: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 151: + this.$ = $$[$0]; + break; + case 152: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 157: + this.$ = "v"; + break; + case 158: + this.$ = "-"; + break; + case 159: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 160: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 161: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 162: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, { 1: [3] }, { 1: [2, 1] }, { 3: 10, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, o($V4, $V5, { 17: 11 }), { 7: 12, 13: [1, 13] }, { 16: 14, 21: $V1, 22: $V2, 24: $V3 }, { 16: 15, 21: $V1, 22: $V2, 24: $V3 }, { 25: [1, 16], 26: [1, 17] }, { 13: [2, 5] }, { 1: [2, 2] }, { 1: [2, 9], 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 8: 64, 10: [1, 65], 15: $VD }, o([10, 15], [2, 6]), o($V4, [2, 17]), o($V4, [2, 18]), o($V4, [2, 19]), { 20: [1, 68], 21: [1, 69], 22: $VE, 27: 67, 30: 70 }, o($VF, [2, 11]), o($VF, [2, 12]), o($VF, [2, 13]), o($VF, [2, 14]), o($VF, [2, 15]), o($VF, [2, 16]), { 9: 72, 20: $VG, 21: $VH, 23: $VI, 49: 73, 78: 77, 81: [1, 78], 82: [1, 79] }, { 9: 80, 20: $VG, 21: $VH, 23: $VI }, { 9: 81, 20: $VG, 21: $VH, 23: $VI }, { 9: 82, 20: $VG, 21: $VH, 23: $VI }, { 9: 83, 20: $VG, 21: $VH, 23: $VI }, { 9: 84, 20: $VG, 21: $VH, 23: $VI }, { 9: 86, 20: $VG, 21: $VH, 22: [1, 85], 23: $VI }, o($VF, [2, 44]), { 45: [1, 87] }, { 47: [1, 88] }, o($VF, [2, 47]), o($VJ, [2, 54], { 30: 89, 22: $VE }), { 22: [1, 90] }, { 22: [1, 91] }, { 22: [1, 92] }, { 22: [1, 93] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 84: [1, 97], 92: $VO, 98: 96, 99: [1, 94], 101: [1, 95], 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($VF, [2, 159]), o($VF, [2, 160]), o($VF, [2, 161]), o($VF, [2, 162]), o($V_, [2, 55], { 53: [1, 116] }), o($V$, [2, 74], { 117: 129, 40: [1, 117], 52: $Ve, 55: [1, 118], 57: [1, 119], 59: [1, 120], 61: [1, 121], 63: [1, 122], 65: [1, 123], 66: $Vf, 67: $Vg, 69: [1, 124], 71: [1, 125], 73: [1, 126], 74: [1, 127], 76: [1, 128], 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }), o($V01, [2, 151]), o($V01, [2, 176]), o($V01, [2, 177]), o($V01, [2, 178]), o($V01, [2, 179]), o($V01, [2, 180]), o($V01, [2, 181]), o($V01, [2, 182]), o($V01, [2, 183]), o($V01, [2, 184]), o($V01, [2, 185]), o($V01, [2, 186]), o($V01, [2, 187]), o($V01, [2, 188]), o($V01, [2, 189]), o($V01, [2, 190]), o($V01, [2, 191]), { 9: 130, 20: $VG, 21: $VH, 23: $VI }, { 11: 131, 14: [1, 132] }, o($V11, [2, 8]), o($V4, [2, 20]), o($V4, [2, 26]), o($V4, [2, 27]), { 21: [1, 133] }, o($V21, [2, 34], { 30: 134, 22: $VE }), o($VF, [2, 35]), { 50: 135, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, o($V31, [2, 48]), o($V31, [2, 49]), o($V31, [2, 50]), o($V41, [2, 78], { 79: 136, 68: [1, 138], 80: [1, 137] }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 139, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o([52, 66, 67, 68, 80, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], [2, 80]), o($VF, [2, 36]), o($VF, [2, 37]), o($VF, [2, 38]), o($VF, [2, 39]), o($VF, [2, 40]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 164, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vp1, $V5, { 17: 165 }), o($VF, [2, 45]), o($VF, [2, 46]), o($VJ, [2, 53], { 52: $Vq1 }), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 167, 103: [1, 168], 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 96: [1, 169], 104: 170, 106: [1, 171] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 96: [1, 172], 98: 173, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 174, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 102], { 22: [1, 175], 100: [1, 176] }), o($V11, [2, 106], { 22: [1, 177] }), o($V11, [2, 110], { 116: 100, 118: 179, 22: [1, 178], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 112], { 22: [1, 180] }), o($Vr1, [2, 153]), o($Vr1, [2, 155]), o($Vr1, [2, 156]), o($Vr1, [2, 157]), o($Vr1, [2, 158]), o($Vs1, [2, 163]), o($Vs1, [2, 164]), o($Vs1, [2, 165]), o($Vs1, [2, 166]), o($Vs1, [2, 167]), o($Vs1, [2, 168]), o($Vs1, [2, 169]), o($Vs1, [2, 170]), o($Vs1, [2, 171]), o($Vs1, [2, 172]), o($Vs1, [2, 173]), o($Vs1, [2, 174]), o($Vs1, [2, 175]), { 52: $Ve, 54: 181, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 182, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 183, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 185, 42: $V91, 52: $VL, 57: [1, 184], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 186, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 187, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 188, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 66: [1, 189] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 190, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 191, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 71: [1, 192], 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 193, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 194, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 195, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V01, [2, 152]), o($Vt1, [2, 3]), { 8: 196, 15: $VD }, { 15: [2, 7] }, o($V4, [2, 28]), o($V21, [2, 33]), o($VJ, [2, 51], { 30: 197, 22: $VE }), o($V41, [2, 75], { 22: [1, 198] }), { 22: [1, 199] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 200, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 82: [1, 201], 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vs1, [2, 82]), o($Vs1, [2, 84]), o($Vs1, [2, 85]), o($Vs1, [2, 141]), o($Vs1, [2, 142]), o($Vs1, [2, 143]), o($Vs1, [2, 144]), o($Vs1, [2, 145]), o($Vs1, [2, 146]), o($Vs1, [2, 147]), o($Vs1, [2, 148]), o($Vs1, [2, 149]), o($Vs1, [2, 150]), o($Vs1, [2, 86]), o($Vs1, [2, 87]), o($Vs1, [2, 88]), o($Vs1, [2, 89]), o($Vs1, [2, 90]), o($Vs1, [2, 91]), o($Vs1, [2, 92]), o($Vs1, [2, 93]), o($Vs1, [2, 94]), o($Vs1, [2, 95]), o($Vs1, [2, 96]), { 9: 204, 20: $VG, 21: $VH, 22: $V51, 23: $VI, 24: $V61, 26: $V71, 38: $V81, 40: [1, 203], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 205], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $VE, 30: 206 }, { 22: [1, 207], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: [1, 208] }, { 22: [1, 209] }, { 22: [1, 210], 107: [1, 211] }, o($Vu1, [2, 124]), { 22: [1, 212] }, { 22: [1, 213], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: [1, 214], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 84: [1, 215] }, o($V11, [2, 104], { 22: [1, 216] }), { 84: [1, 217], 102: [1, 218] }, { 84: [1, 219] }, o($Vr1, [2, 154]), { 84: [1, 220], 102: [1, 221] }, o($V_, [2, 57], { 117: 129, 52: $Ve, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 222], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 56: [1, 223], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 224, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 225], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 60: [1, 226], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 62: [1, 227], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 64: [1, 228], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 67: [1, 229] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 70: [1, 230], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 231], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 232, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 233], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 234], 77: [1, 235], 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 237], 77: [1, 236], 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 9: 238, 20: $VG, 21: $VH, 23: $VI }, o($VJ, [2, 52], { 52: $Vq1 }), o($V41, [2, 77]), o($V41, [2, 76]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 68: [1, 239], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V41, [2, 79]), o($Vs1, [2, 83]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 240, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vp1, $V5, { 17: 241 }), o($VF, [2, 43]), { 51: 242, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 243, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 257, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 258, 103: $Vz1, 105: [1, 259], 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 260, 103: $Vz1, 105: [1, 261], 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 106: [1, 262] }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 263, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 264, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 265, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 103]), { 84: [1, 266] }, o($V11, [2, 107], { 22: [1, 267] }), o($V11, [2, 108]), o($V11, [2, 111]), o($V11, [2, 113], { 22: [1, 268] }), o($V11, [2, 114]), o($V$, [2, 58]), o($V$, [2, 59]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 269], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 66]), o($V$, [2, 61]), o($V$, [2, 62]), o($V$, [2, 63]), { 66: [1, 270] }, o($V$, [2, 65]), o($V$, [2, 67]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 271], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 69]), o($V$, [2, 70]), o($V$, [2, 72]), o($V$, [2, 71]), o($V$, [2, 73]), o($Vt1, [2, 4]), o([22, 52, 66, 67, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], [2, 81]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 272], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 273], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, o($V_, [2, 56]), o($V11, [2, 116], { 107: $VG1 }), o($VH1, [2, 126], { 109: 275, 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }), o($VI1, [2, 128]), o($VI1, [2, 130]), o($VI1, [2, 131]), o($VI1, [2, 132]), o($VI1, [2, 133]), o($VI1, [2, 134]), o($VI1, [2, 135]), o($VI1, [2, 136]), o($VI1, [2, 137]), o($VI1, [2, 138]), o($VI1, [2, 139]), o($VI1, [2, 140]), o($V11, [2, 117], { 107: $VG1 }), o($V11, [2, 118], { 107: $VG1 }), { 22: [1, 276] }, o($V11, [2, 119], { 107: $VG1 }), { 22: [1, 277] }, o($Vu1, [2, 125]), o($V11, [2, 99], { 107: $VG1 }), o($V11, [2, 100], { 107: $VG1 }), o($V11, [2, 101], { 116: 100, 118: 179, 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 105]), { 102: [1, 278] }, { 102: [1, 279] }, { 58: [1, 280] }, { 68: [1, 281] }, { 72: [1, 282] }, { 9: 283, 20: $VG, 21: $VH, 23: $VI }, o($VF, [2, 42]), { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 108: 284, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, o($VI1, [2, 129]), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 285, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 286, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 109]), o($V11, [2, 115]), o($V$, [2, 60]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 287, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 68]), o($Vp1, $V5, { 17: 288 }), o($VH1, [2, 127], { 109: 275, 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }), o($V11, [2, 122], { 116: 100, 118: 179, 22: [1, 289], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 123], { 116: 100, 118: 179, 22: [1, 290], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 291], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 292], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 293, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 294, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, o($V$, [2, 64]), o($VF, [2, 41]), o($V11, [2, 120], { 107: $VG1 }), o($V11, [2, 121], { 107: $VG1 })], + defaultActions: { 2: [2, 1], 9: [2, 5], 10: [2, 2], 132: [2, 7] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 12; + case 1: + this.begin("type_directive"); + return 13; + case 2: + this.popState(); + this.begin("arg_directive"); + return 10; + case 3: + this.popState(); + this.popState(); + return 15; + case 4: + return 14; + case 5: + this.begin("acc_title"); + return 44; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 46; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + this.begin("md_string"); + break; + case 13: + return "MD_STR"; + case 14: + this.popState(); + break; + case 15: + this.begin("string"); + break; + case 16: + this.popState(); + break; + case 17: + return "STR"; + case 18: + return 87; + case 19: + return 96; + case 20: + return 88; + case 21: + return 105; + case 22: + return 89; + case 23: + return 90; + case 24: + this.begin("href"); + break; + case 25: + this.popState(); + break; + case 26: + return 101; + case 27: + this.begin("callbackname"); + break; + case 28: + this.popState(); + break; + case 29: + this.popState(); + this.begin("callbackargs"); + break; + case 30: + return 99; + case 31: + this.popState(); + break; + case 32: + return 100; + case 33: + this.begin("click"); + break; + case 34: + this.popState(); + break; + case 35: + return 91; + case 36: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 37: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 38: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 39: + return 38; + case 40: + return 42; + case 41: + return 102; + case 42: + return 102; + case 43: + return 102; + case 44: + return 102; + case 45: + this.popState(); + return 25; + case 46: + this.popState(); + return 26; + case 47: + this.popState(); + return 26; + case 48: + this.popState(); + return 26; + case 49: + this.popState(); + return 26; + case 50: + this.popState(); + return 26; + case 51: + this.popState(); + return 26; + case 52: + this.popState(); + return 26; + case 53: + this.popState(); + return 26; + case 54: + this.popState(); + return 26; + case 55: + this.popState(); + return 26; + case 56: + return 119; + case 57: + return 120; + case 58: + return 121; + case 59: + return 122; + case 60: + return 106; + case 61: + return 112; + case 62: + return 53; + case 63: + return 67; + case 64: + return 52; + case 65: + return 20; + case 66: + return 107; + case 67: + return 127; + case 68: + return 82; + case 69: + return 82; + case 70: + return 82; + case 71: + return 82; + case 72: + return 81; + case 73: + return 81; + case 74: + return 81; + case 75: + return 59; + case 76: + return 60; + case 77: + return 61; + case 78: + return 62; + case 79: + return 63; + case 80: + return 64; + case 81: + return 65; + case 82: + return 69; + case 83: + return 70; + case 84: + return 55; + case 85: + return 56; + case 86: + return 110; + case 87: + return 113; + case 88: + return 128; + case 89: + return 125; + case 90: + return 114; + case 91: + return 126; + case 92: + return 126; + case 93: + return 115; + case 94: + return 73; + case 95: + return 93; + case 96: + return "SEP"; + case 97: + return 92; + case 98: + return 66; + case 99: + return 75; + case 100: + return 74; + case 101: + return 77; + case 102: + return 76; + case 103: + return 123; + case 104: + return 124; + case 105: + return 68; + case 106: + return 57; + case 107: + return 58; + case 108: + return 40; + case 109: + return 41; + case 110: + return 71; + case 111: + return 72; + case 112: + return 134; + case 113: + return 21; + case 114: + return 22; + case 115: + return 23; + } + }, + rules: [/^(?:%%\{)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s]+["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*~~[\~]+\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:\(-)/, /^(?:-\))/, /^(?:\(\[)/, /^(?:\]\))/, /^(?:\[\[)/, /^(?:\]\])/, /^(?:\[\|)/, /^(?:\[\()/, /^(?:\)\])/, /^(?:\(\(\()/, /^(?:\)\)\))/, /^(?:-)/, /^(?:\.)/, /^(?:[\_])/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:[A-Za-z]+)/, /^(?:\\\])/, /^(?:\[\/)/, /^(?:\/\])/, /^(?:\[\\)/, /^(?:[!"#$%&'*+,-.`?\\_/])/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\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]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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-\u0C33\u0C35-\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\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\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\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\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])/, /^(?:\|)/, /^(?:\()/, /^(?:\))/, /^(?:\[)/, /^(?:\])/, /^(?:\{)/, /^(?:\})/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "callbackargs": { "rules": [31, 32], "inclusive": false }, "callbackname": { "rules": [28, 29, 30], "inclusive": false }, "href": { "rules": [25, 26], "inclusive": false }, "click": { "rules": [34, 35], "inclusive": false }, "vertex": { "rules": [], "inclusive": false }, "dir": { "rules": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "inclusive": false }, "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "md_string": { "rules": [13, 14], "inclusive": false }, "string": { "rules": [16, 17], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 15, 18, 19, 20, 21, 22, 23, 24, 27, 33, 36, 37, 38, 39, 40, 41, 42, 43, 44, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.m.parseDirective(this, statement, context, type); +}; +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + edges.push(edge); +}; +const addLink = function(_start, _end, type) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(id, style) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle1 = s.replace("fill", "bgFill"); + const newStyle2 = newStyle1.replace("color", "fill"); + classes[id].textStyles.push(newStyle2); + } + classes[id].styles.push(s); + }); + } +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + return tooltips[id]; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = []; + firstGraphFlag = true; + version = ver; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.y)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + parseDirective, + defaultConfig: () => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.j.flowchart, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.p, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.v, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.x +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + parseDirective, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + +//# sourceMappingURL=flowDb-52e24d17.js.map + + +/***/ }), + +/***/ 94216: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(49863); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(48099); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(81188); +/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17295); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20683); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3502); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17967); + + + + + + + + + + + + + + + + + + +const findCommonAncestor = (id1, id2, treeData) => { + const { parentById } = treeData; + const visited = /* @__PURE__ */ new Set(); + let currentId = id1; + while (currentId) { + visited.add(currentId); + if (currentId === id2) { + return currentId; + } + currentId = parentById[currentId]; + } + currentId = id2; + while (currentId) { + if (visited.has(currentId)) { + return currentId; + } + currentId = parentById[currentId]; + } + return "root"; +}; +const elk = new elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__(); +let portPos = {}; +const conf = {}; +let nodeDb = {}; +const addVertices = function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) { + const svg = root.select(`[id="${svgId}"]`); + const nodes = svg.insert("g").attr("class", "nodes"); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles2 = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.n)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + const labelData = { width: 0, height: 0 }; + const ports = [ + { + id: vertex.id + "-west", + layoutOptions: { + "port.side": "WEST" + } + }, + { + id: vertex.id + "-east", + layoutOptions: { + "port.side": "EAST" + } + }, + { + id: vertex.id + "-south", + layoutOptions: { + "port.side": "SOUTH" + } + }, + { + id: vertex.id + "-north", + layoutOptions: { + "port.side": "NORTH" + } + } + ]; + let radious = 0; + let _shape = ""; + let layoutOptions = {}; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + layoutOptions = { + portConstraints: "FIXED_SIDE" + }; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + const node = { + labelStyle: styles2.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles2.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)().flowchart.padding + }; + let boundingBox; + let nodeEl; + if (node.type !== "group") { + nodeEl = (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_8__.e)(nodes, node, vertex.dir); + boundingBox = nodeEl.node().getBBox(); + } else { + doc.createElementNS("http://www.w3.org/2000/svg", "text"); + const { shapeSvg, bbox } = (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_8__.l)(nodes, node, void 0, true); + labelData.width = bbox.width; + labelData.wrappingWidth = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)().flowchart.wrappingWidth; + labelData.height = bbox.height; + labelData.labelNode = shapeSvg.node(); + node.labelData = labelData; + } + const data = { + id: vertex.id, + ports: vertex.type === "diamond" ? ports : [], + // labelStyle: styles.labelStyle, + // shape: _shape, + layoutOptions, + labelText: vertexText, + labelData, + // labels: [{ text: vertexText }], + // rx: radius, + // ry: radius, + // class: classStr, + // style: styles.style, + // link: vertex.link, + // linkTarget: vertex.linkTarget, + // tooltip: diagObj.db.getTooltip(vertex.id) || '', + domId: diagObj.db.lookUpDomId(vertex.id), + // haveCallback: vertex.haveCallback, + width: boundingBox == null ? void 0 : boundingBox.width, + height: boundingBox == null ? void 0 : boundingBox.height, + // dir: vertex.dir, + type: vertex.type, + // props: vertex.props, + // padding: getConfig().flowchart.padding, + // boundingBox, + el: nodeEl, + parent: parentLookupDb.parentById[vertex.id] + }; + nodeDb[node.id] = data; + }); + return graph; +}; +const getNextPosition = (position, edgeDirection, graphDirection) => { + const portPos2 = { + TB: { + in: { + north: "north" + }, + out: { + south: "west", + west: "east", + east: "south" + } + }, + LR: { + in: { + west: "west" + }, + out: { + east: "south", + south: "north", + north: "east" + } + }, + RL: { + in: { + east: "east" + }, + out: { + west: "north", + north: "south", + south: "west" + } + }, + BT: { + in: { + south: "south" + }, + out: { + north: "east", + east: "west", + west: "north" + } + } + }; + portPos2.TD = portPos2.TB; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("abc88", graphDirection, edgeDirection, position); + return portPos2[graphDirection][edgeDirection][position]; +}; +const getNextPort = (node, edgeDirection, graphDirection) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("getNextPort abc88", { node, edgeDirection, graphDirection }); + if (!portPos[node]) { + switch (graphDirection) { + case "TB": + case "TD": + portPos[node] = { + inPosition: "north", + outPosition: "south" + }; + break; + case "BT": + portPos[node] = { + inPosition: "south", + outPosition: "north" + }; + break; + case "RL": + portPos[node] = { + inPosition: "east", + outPosition: "west" + }; + break; + case "LR": + portPos[node] = { + inPosition: "west", + outPosition: "east" + }; + break; + } + } + const result = edgeDirection === "in" ? portPos[node].inPosition : portPos[node].outPosition; + if (edgeDirection === "in") { + portPos[node].inPosition = getNextPosition( + portPos[node].inPosition, + edgeDirection, + graphDirection + ); + } else { + portPos[node].outPosition = getNextPosition( + portPos[node].outPosition, + edgeDirection, + graphDirection + ); + } + return result; +}; +const getEdgeStartEndPoint = (edge, dir) => { + let source = edge.start; + let target = edge.end; + const sourceId = source; + const targetId = target; + const startNode = nodeDb[source]; + const endNode = nodeDb[target]; + if (!startNode || !endNode) { + return { source, target }; + } + if (startNode.type === "diamond") { + source = `${source}-${getNextPort(source, "out", dir)}`; + } + if (endNode.type === "diamond") { + target = `${target}-${getNextPort(target, "in", dir)}`; + } + return { source, target, sourceId, targetId }; +}; +const addEdges = function(edges, diagObj, graph, svg) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("abc78 edges = ", edges); + const labelsEl = svg.insert("g").attr("class", "edgeLabels"); + let linkIdCnt = {}; + let dir = diagObj.db.getDirection(); + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.n)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + var linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + var linkNameStart = "LS-" + edge.start; + var linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles2 = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.n)(edge.style); + style = styles2.style; + labelStyle = styles2.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.o)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.o)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + const labelEl = (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_8__.f)(labelsEl, edgeData); + const { source, target, sourceId, targetId } = getEdgeStartEndPoint(edge, dir); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("abc78 source and target", source, target); + graph.edges.push({ + id: "e" + edge.start + edge.end, + sources: [source], + targets: [target], + sourceId, + targetId, + labelEl, + labels: [ + { + width: edgeData.width, + height: edgeData.height, + orgWidth: edgeData.width, + orgHeight: edgeData.height, + text: edgeData.label, + layoutOptions: { + "edgeLabels.inline": "true", + "edgeLabels.placement": "CENTER" + } + } + ], + edgeData + }); + }); + return graph; +}; +const addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute) { + let url = ""; + if (arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + switch (edgeData.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edgeData.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } +}; +const getClasses = function(text, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Extracting classes"); + diagObj.db.clear("ver-2"); + try { + diagObj.parse(text); + return diagObj.db.getClasses(); + } catch (e) { + return {}; + } +}; +const addSubGraphs = function(db2) { + const parentLookupDb = { parentById: {}, childrenById: {} }; + const subgraphs = db2.getSubGraphs(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Subgraphs - ", subgraphs); + subgraphs.forEach(function(subgraph) { + subgraph.nodes.forEach(function(node) { + parentLookupDb.parentById[node] = subgraph.id; + if (parentLookupDb.childrenById[subgraph.id] === void 0) { + parentLookupDb.childrenById[subgraph.id] = []; + } + parentLookupDb.childrenById[subgraph.id].push(node); + }); + }); + subgraphs.forEach(function(subgraph) { + ({ id: subgraph.id }); + if (parentLookupDb.parentById[subgraph.id] !== void 0) { + parentLookupDb.parentById[subgraph.id]; + } + }); + return parentLookupDb; +}; +const calcOffset = function(src, dest, parentLookupDb) { + const ancestor = findCommonAncestor(src, dest, parentLookupDb); + if (ancestor === void 0 || ancestor === "root") { + return { x: 0, y: 0 }; + } + const ancestorOffset = nodeDb[ancestor].offset; + return { x: ancestorOffset.posX, y: ancestorOffset.posY }; +}; +const insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb) { + const offset = calcOffset(edge.sourceId, edge.targetId, parentLookupDb); + const src = edge.sections[0].startPoint; + const dest = edge.sections[0].endPoint; + const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : []; + const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]); + const points = [ + [src.x + offset.x, src.y + offset.y], + ...segPoints, + [dest.x + offset.x, dest.y + offset.y] + ]; + const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + const edgePath = edgesEl.insert("path").attr("d", curve(points)).attr("class", "path").attr("fill", "none"); + const edgeG = edgesEl.insert("g").attr("class", "edgeLabel"); + const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(edgeG.node().appendChild(edge.labelEl)); + const box = edgeWithLabel.node().firstChild.getBoundingClientRect(); + edgeWithLabel.attr("width", box.width); + edgeWithLabel.attr("height", box.height); + edgeG.attr( + "transform", + `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})` + ); + addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute); +}; +const insertChildren = (nodeArray, parentLookupDb) => { + nodeArray.forEach((node) => { + if (!node.children) { + node.children = []; + } + const childIds = parentLookupDb.childrenById[node.id]; + if (childIds) { + childIds.forEach((childId) => { + node.children.push(nodeDb[childId]); + }); + } + insertChildren(node.children, parentLookupDb); + }); +}; +const draw = async function(text, id, _version, diagObj) { + var _a; + diagObj.db.clear(); + nodeDb = {}; + portPos = {}; + diagObj.db.setGen("gen-2"); + diagObj.parser.parse(text); + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("style", "height:400px").attr("id", "cy"); + let graph = { + id: "root", + layoutOptions: { + "elk.hierarchyHandling": "INCLUDE_CHILDREN", + "org.eclipse.elk.padding": "[top=100, left=100, bottom=110, right=110]", + "elk.layered.spacing.edgeNodeBetweenLayers": "30", + // 'elk.layered.mergeEdges': 'true', + "elk.direction": "DOWN" + // 'elk.ports.sameLayerEdges': true, + // 'nodePlacement.strategy': 'SIMPLE', + }, + children: [], + edges: [] + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Drawing flowchart using v3 renderer", elk); + let dir = diagObj.db.getDirection(); + switch (dir) { + case "BT": + graph.layoutOptions["elk.direction"] = "UP"; + break; + case "TB": + graph.layoutOptions["elk.direction"] = "DOWN"; + break; + case "LR": + graph.layoutOptions["elk.direction"] = "RIGHT"; + break; + case "RL": + graph.layoutOptions["elk.direction"] = "LEFT"; + break; + } + const { securityLevel, flowchart: conf2 } = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const svg = root.select(`[id="${id}"]`); + const markers = ["point", "circle", "cross"]; + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_8__.a)(svg, markers, diagObj.type, diagObj.arrowMarkerAbsolute); + const vert = diagObj.db.getVertices(); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Subgraphs - ", subGraphs); + for (let i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const subGraphsEl = svg.insert("g").attr("class", "subgraphs"); + const parentLookupDb = addSubGraphs(diagObj.db); + graph = addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph); + const edgesEl = svg.insert("g").attr("class", "edges edgePath"); + const edges = diagObj.db.getEdges(); + graph = addEdges(edges, diagObj, graph, svg); + const nodes = Object.keys(nodeDb); + nodes.forEach((nodeId) => { + const node = nodeDb[nodeId]; + if (!node.parent) { + graph.children.push(node); + } + if (parentLookupDb.childrenById[nodeId] !== void 0) { + node.labels = [ + { + text: node.labelText, + layoutOptions: { + "nodeLabels.placement": "[H_CENTER, V_TOP, INSIDE]" + }, + width: node.labelData.width, + height: node.labelData.height + // width: 100, + // height: 100, + } + ]; + delete node.x; + delete node.y; + delete node.width; + delete node.height; + } + }); + insertChildren(graph.children, parentLookupDb); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("after layout", JSON.stringify(graph, null, 2)); + const g = await elk.layout(graph); + drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("after layout", g); + (_a = g.edges) == null ? void 0 : _a.map((edge) => { + insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb); + }); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.s)({}, svg, conf2.diagramPadding, conf2.useMaxWidth); + renderEl.remove(); +}; +const drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => { + nodeArray.forEach(function(node) { + if (node) { + nodeDb[node.id].offset = { + posX: node.x + relX, + posY: node.y + relY, + x: relX, + y: relY, + depth, + width: node.width, + height: node.height + }; + if (node.type === "group") { + const subgraphEl = subgraphsEl.insert("g").attr("class", "subgraph"); + subgraphEl.insert("rect").attr("class", "subgraph subgraph-lvl-" + depth % 5 + " node").attr("x", node.x + relX).attr("y", node.y + relY).attr("width", node.width).attr("height", node.height); + const label = subgraphEl.insert("g").attr("class", "label"); + const labelCentering = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)().flowchart.htmlLabels ? node.labelData.width / 2 : 0; + label.attr( + "transform", + `translate(${node.labels[0].x + relX + node.x + labelCentering}, ${node.labels[0].y + relY + node.y + 3})` + ); + label.node().appendChild(node.labelData.labelNode); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Id (UGH)= ", node.type, node.labels); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Id (UGH)= ", node.id); + node.el.attr( + "transform", + `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})` + ); + } + } + }); + nodeArray.forEach(function(node) { + if (node && node.type === "group") { + drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1); + } + }); +}; +const renderer = { + getClasses, + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < 5; i++) { + sections += ` + .subgraph-lvl-${i} { + fill: ${options[`surface${i}`]}; + stroke: ${options[`surfacePeer${i}`]}; + } + `; + } + return sections; +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span { + color: ${options.titleColor}; + } + + .label text,span { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.85; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } + .subgraph { + stroke-width:2; + rx:3; + } + // .subgraph-lvl-1 { + // fill:#ccc; + // // stroke:black; + // } + + .flowchart-label text { + text-anchor: middle; + } + + ${genSections(options)} +`; +const styles = getStyles; +const diagram = { + db: _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_9__.d, + renderer, + parser: _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_9__.p, + styles +}; + +//# sourceMappingURL=flowchart-elk-definition-a44a74cb.js.map + + +/***/ }), + +/***/ 77657: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "p": () => (/* binding */ parseMember), +/* harmony export */ "s": () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); + + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = classDef.id; + if (classDef.type !== void 0 && classDef.type !== "") { + classTitleString += "<" + classDef.type + ">"; + } + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const drawNote = function(elem, note, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + const fieldRegEx = /^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/; + const methodRegEx = /^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/; + let fieldMatch = text.match(fieldRegEx); + let methodMatch = text.match(methodRegEx); + if (fieldMatch && !methodMatch) { + return buildFieldDisplay(fieldMatch); + } else if (methodMatch) { + return buildMethodDisplay(methodMatch); + } else { + return buildLegacyDisplay(text); + } +}; +const buildFieldDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let fieldType = parsedText[2] ? parsedText[2].trim() : ""; + let genericType = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let fieldName = parsedText[4] ? parsedText[4].trim() : ""; + let classifier = parsedText[5] ? parsedText[5].trim() : ""; + displayText = visibility + fieldType + genericType + " " + fieldName; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildMethodDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let methodName = parsedText[2] ? parsedText[2].trim() : ""; + let parameters = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let classifier = parsedText[4] ? parsedText[4].trim() : ""; + let returnType = parsedText[5] ? " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[5]).trim() : ""; + displayText = visibility + methodName + "(" + parameters + ")" + returnType; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildLegacyDisplay = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let methodStart = text.indexOf("("); + let methodEnd = text.indexOf(")"); + if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) { + let visibility = ""; + let methodName = ""; + let firstChar = text.substring(0, 1); + if (firstChar.match(/\w/)) { + methodName = text.substring(0, methodStart).trim(); + } else { + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + methodName = text.substring(1, methodStart).trim(); + } + const parameters = text.substring(methodStart + 1, methodEnd); + text.substring(methodEnd + 1, 1); + cssStyle = parseClassifier(text.substring(methodEnd + 1, methodEnd + 2)); + displayText = visibility + methodName + "(" + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + returnType = text.substring(methodEnd + 2).trim(); + if (returnType !== "") { + returnType = " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(returnType); + displayText += returnType; + } + } + } else { + displayText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + drawClass, + drawEdge, + drawNote, + parseMember +}; + +//# sourceMappingURL=svgDraw-2526cba0.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/22f0e129.44175121.js b/assets/js/22f0e129.44175121.js new file mode 100644 index 0000000000..32855f1494 --- /dev/null +++ b/assets/js/22f0e129.44175121.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6893],{2040:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));r(5657);const s={},o="MAXIMUM_DISCHARGE_PRESSURE",i={unversionedId:"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",id:"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",title:"MAXIMUM_DISCHARGE_PRESSURE",description:"MODELS /",source:"@site/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE"},next:{title:"MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS"}},l={},c=[{value:"Description",id:"description",level:2},{value:"Functionality",id:"functionality",level:2},{value:"Format",id:"format",level:2}],E={toc:c},d="wrapper";function u(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,n.Z)({},E,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"maximum_discharge_pressure"},"MAXIMUM_DISCHARGE_PRESSURE"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE"},"MAXIMUM_DISCHARGE_PRESSURE")),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"MAXIMUM_DISCHARGE_PRESSURE")," sets the highest possible discharge pressure that a compressor can deliver.\nIn reality, setting the maximum discharge pressure can be to avoid excessively high pressures which can be a safety concern on an installation."),(0,a.kt)("h2",{id:"functionality"},"Functionality"),(0,a.kt)("p",null,"This is an optional setting and is ",(0,a.kt)("strong",{parentName:"p"},"only")," supported for ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},"SINGLE SPEED COMPRESSORS"),", and ",(0,a.kt)("strong",{parentName:"p"},"only")," if the ",(0,a.kt)("inlineCode",{parentName:"p"},"PRESSURE_CONTROL")," is ",(0,a.kt)("inlineCode",{parentName:"p"},"DOWNSTREAM_CHOKE"),"."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"If ",(0,a.kt)("inlineCode",{parentName:"li"},"MAXIMUM_DISCHARGE_PRESSURE")," has been defined and if any of the inputted discharge pressures exceeds the maximum value, a ValueError message will be raised."),(0,a.kt)("li",{parentName:"ul"},"If any of the input rates and suction pressures result in a discharge pressure which is above the ",(0,a.kt)("inlineCode",{parentName:"li"},"MAXIMUM_DISCHARGE_PRESSURE"),", the suction pressure will be reduced until the calculations provide a discharge pressure below the maximum value (assuming an upstream choke can handle this)."),(0,a.kt)("li",{parentName:"ul"},"The outlet stream will then be further choked from the ",(0,a.kt)("inlineCode",{parentName:"li"},"MAXIMUM_DISCHARGE_PRESSURE")," to the target discharge pressure using the ",(0,a.kt)("inlineCode",{parentName:"li"},"DOWNSTREAM_CHOKE")," pressure control.")),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n PRESSURE_CONTROL: <DOWNSTREAM_CHOKE>\n MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model>\n ...\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/234.9ea03c85.js b/assets/js/234.9ea03c85.js new file mode 100644 index 0000000000..933608e227 --- /dev/null +++ b/assets/js/234.9ea03c85.js @@ -0,0 +1,558 @@ +"use strict"; +exports.id = 234; +exports.ids = [234]; +exports.modules = { + +/***/ 66234: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 9, 10]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "info": 4, "document": 5, "EOF": 6, "line": 7, "statement": 8, "NL": 9, "showInfo": 10, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "info", 6: "EOF", 9: "NL", 10: "showInfo" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + $$.length - 1; + switch (yystate) { + case 1: + return yy; + case 4: + break; + case 6: + yy.setInfo(true); + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: 6, 9: [1, 7], 10: [1, 8] }, { 1: [2, 1] }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6])], + defaultActions: { 4: [2, 1] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 4; + case 1: + return 9; + case 2: + return "space"; + case 3: + return 10; + case 4: + return 6; + case 5: + return "TXT"; + } + }, + rules: [/^(?:info\b)/i, /^(?:[\s\n\r]+)/i, /^(?:[\s]+)/i, /^(?:showInfo\b)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "INITIAL": { "rules": [0, 1, 2, 3, 4, 5], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +var message = ""; +var info = false; +const setMessage = (txt) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.debug("Setting message to: " + txt); + message = txt; +}; +const getMessage = () => { + return message; +}; +const setInfo = (inf) => { + info = inf; +}; +const getInfo = () => { + return info; +}; +const db = { + setMessage, + getMessage, + setInfo, + getInfo, + clear: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.y + // parseError +}; +const getStyles = () => ``; +const styles = getStyles; +const draw = (text, id, version) => { + try { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.debug("Rendering info diagram\n" + text); + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + const g = svg.append("g"); + g.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", "32px").style("text-anchor", "middle").text("v " + version); + svg.attr("height", 100); + svg.attr("width", 400); + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.error("Error while rendering info diagram"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.error(e.message); + } +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + +//# sourceMappingURL=infoDiagram-69ec1a58.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/2494.4009d11f.js b/assets/js/2494.4009d11f.js new file mode 100644 index 0000000000..8aa13b6a41 --- /dev/null +++ b/assets/js/2494.4009d11f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2494],{2494:(n,e,t)=>{t.d(e,{bK:()=>He});var r=t(870),o=t(6749),i=t(7452),u=t(2002),a=t(7961),c=t(3836),s=t(4379),f=t(5625);class d{constructor(){var n={};n._next=n._prev=n,this._sentinel=n}dequeue(){var n=this._sentinel,e=n._prev;if(e!==n)return v(e),e}enqueue(n){var e=this._sentinel;n._prev&&n._next&&v(n),n._next=e._next,e._next._prev=n,e._next=n,n._prev=e}toString(){for(var n=[],e=this._sentinel,t=e._prev;t!==e;)n.push(JSON.stringify(t,h)),t=t._prev;return"["+n.join(", ")+"]"}}function v(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function h(n,e){if("_next"!==n&&"_prev"!==n)return e}var Z=u.Z(1);function l(n,e){if(n.nodeCount()<=1)return[];var t=function(n,e){var t=new f.k,o=0,i=0;r.Z(n.nodes(),(function(n){t.setNode(n,{v:n,in:0,out:0})})),r.Z(n.edges(),(function(n){var r=t.edge(n.v,n.w)||0,u=e(n),a=r+u;t.setEdge(n.v,n.w,a),i=Math.max(i,t.node(n.v).out+=u),o=Math.max(o,t.node(n.w).in+=u)}));var u=s.Z(i+o+3).map((function(){return new d})),a=o+1;return r.Z(t.nodes(),(function(n){p(u,a,t.node(n))})),{graph:t,buckets:u,zeroIdx:a}}(n,e||Z),o=function(n,e,t){var r,o=[],i=e[e.length-1],u=e[0];for(;n.nodeCount();){for(;r=u.dequeue();)g(n,e,t,r);for(;r=i.dequeue();)g(n,e,t,r);if(n.nodeCount())for(var a=e.length-2;a>0;--a)if(r=e[a].dequeue()){o=o.concat(g(n,e,t,r,!0));break}}return o}(t.graph,t.buckets,t.zeroIdx);return a.Z(c.Z(o,(function(e){return n.outEdges(e.v,e.w)})))}function g(n,e,t,o,i){var u=i?[]:void 0;return r.Z(n.inEdges(o.v),(function(r){var o=n.edge(r),a=n.node(r.v);i&&u.push({v:r.v,w:r.w}),a.out-=o,p(e,t,a)})),r.Z(n.outEdges(o.v),(function(r){var o=n.edge(r),i=r.w,u=n.node(i);u.in-=o,p(e,t,u)})),n.removeNode(o.v),u}function p(n,e,t){t.out?t.in?n[t.out-t.in+e].enqueue(t):n[n.length-1].enqueue(t):n[0].enqueue(t)}function b(n){var e="greedy"===n.graph().acyclicer?l(n,function(n){return function(e){return n.edge(e).weight}}(n)):function(n){var e=[],t={},o={};function u(a){i.Z(o,a)||(o[a]=!0,t[a]=!0,r.Z(n.outEdges(a),(function(n){i.Z(t,n.w)?e.push(n):u(n.w)})),delete t[a])}return r.Z(n.nodes(),u),e}(n);r.Z(e,(function(e){var t=n.edge(e);n.removeEdge(e),t.forwardName=e.name,t.reversed=!0,n.setEdge(e.w,e.v,t,o.Z("rev"))}))}var w=t(1667),y=t(4752),m=t(9651);const _=function(n,e,t){(void 0!==t&&!(0,m.Z)(n[e],t)||void 0===t&&!(e in n))&&(0,y.Z)(n,e,t)};var j=t(1395),E=t(1050),k=t(2701),x=t(7215),N=t(3658),O=t(9169),I=t(7771),C=t(836),L=t(7008),M=t(3234),A=t(7226),P=t(7514),S=t(8843);const R=function(n,e){if(("constructor"!==e||"function"!=typeof n[e])&&"__proto__"!=e)return n[e]};var T=t(1899),F=t(2957);const D=function(n){return(0,T.Z)(n,(0,F.Z)(n))};const z=function(n,e,t,r,o,i,u){var a=R(n,t),c=R(e,t),s=u.get(c);if(s)_(n,t,s);else{var f=i?i(a,c,t+"",n,e,u):void 0,d=void 0===f;if(d){var v=(0,I.Z)(c),h=!v&&(0,L.Z)(c),Z=!v&&!h&&(0,S.Z)(c);f=c,v||h||Z?(0,I.Z)(a)?f=a:(0,C.Z)(a)?f=(0,x.Z)(a):h?(d=!1,f=(0,E.Z)(c,!0)):Z?(d=!1,f=(0,k.Z)(c,!0)):f=[]:(0,P.Z)(c)||(0,O.Z)(c)?(f=a,(0,O.Z)(a)?f=D(a):(0,A.Z)(a)&&!(0,M.Z)(a)||(f=(0,N.Z)(c))):d=!1}d&&(u.set(c,f),o(f,c,r,i,u),u.delete(c)),_(n,t,f)}};const B=function n(e,t,r,o,i){e!==t&&(0,j.Z)(t,(function(u,a){if(i||(i=new w.Z),(0,A.Z)(u))z(e,t,a,r,n,o,i);else{var c=o?o(R(e,a),u,a+"",e,t,i):void 0;void 0===c&&(c=u),_(e,a,c)}}),F.Z)};var G=t(9581),V=t(439);const U=function(n){return(0,G.Z)((function(e,t){var r=-1,o=t.length,i=o>1?t[o-1]:void 0,u=o>2?t[2]:void 0;for(i=n.length>3&&"function"==typeof i?(o--,i):void 0,u&&(0,V.Z)(t[0],t[1],u)&&(i=o<3?void 0:i,o=1),e=Object(e);++r<o;){var a=t[r];a&&n(e,a,r,i)}return e}))}((function(n,e,t){B(n,e,t)}));var q=t(1666),Y=t(3688),$=t(2714);const J=function(n,e,t){for(var r=-1,o=n.length;++r<o;){var i=n[r],u=e(i);if(null!=u&&(void 0===a?u==u&&!(0,$.Z)(u):t(u,a)))var a=u,c=i}return c};const K=function(n,e){return n>e};var W=t(9203);const H=function(n){return n&&n.length?J(n,W.Z,K):void 0};const Q=function(n){var e=null==n?0:n.length;return e?n[e-1]:void 0};var X=t(2693),nn=t(4765);const en=function(n,e){var t={};return e=(0,nn.Z)(e,3),(0,X.Z)(n,(function(n,r,o){(0,y.Z)(t,r,e(n,r,o))})),t};var tn=t(9360);const rn=function(n,e){return n<e};const on=function(n){return n&&n.length?J(n,W.Z,rn):void 0};var un=t(6092);const an=function(){return un.Z.Date.now()};function cn(n,e,t,r){var i;do{i=o.Z(r)}while(n.hasNode(i));return t.dummy=e,n.setNode(i,t),i}function sn(n){var e=new f.k({multigraph:n.isMultigraph()}).setGraph(n.graph());return r.Z(n.nodes(),(function(t){n.children(t).length||e.setNode(t,n.node(t))})),r.Z(n.edges(),(function(t){e.setEdge(t,n.edge(t))})),e}function fn(n,e){var t,r,o=n.x,i=n.y,u=e.x-o,a=e.y-i,c=n.width/2,s=n.height/2;if(!u&&!a)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(a)*c>Math.abs(u)*s?(a<0&&(s=-s),t=s*u/a,r=s):(u<0&&(c=-c),t=c,r=c*a/u),{x:o+t,y:i+r}}function dn(n){var e=c.Z(s.Z(hn(n)+1),(function(){return[]}));return r.Z(n.nodes(),(function(t){var r=n.node(t),o=r.rank;tn.Z(o)||(e[o][r.order]=t)})),e}function vn(n,e,t,r){var o={width:0,height:0};return arguments.length>=4&&(o.rank=t,o.order=r),cn(n,"border",o,e)}function hn(n){return H(c.Z(n.nodes(),(function(e){var t=n.node(e).rank;if(!tn.Z(t))return t})))}function Zn(n,e){var t=an();try{return e()}finally{console.log(n+" time: "+(an()-t)+"ms")}}function ln(n,e){return e()}function gn(n,e,t,r,o,i){var u={width:0,height:0,rank:i,borderType:e},a=o[e][i-1],c=cn(n,"border",u,t);o[e][i]=c,n.setParent(c,r),a&&n.setEdge(a,c,{weight:1})}function pn(n){var e=n.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(n){r.Z(n.nodes(),(function(e){yn(n.node(e))})),r.Z(n.edges(),(function(e){var t=n.edge(e);r.Z(t.points,yn),i.Z(t,"y")&&yn(t)}))}(n),"lr"!==e&&"rl"!==e||(!function(n){r.Z(n.nodes(),(function(e){mn(n.node(e))})),r.Z(n.edges(),(function(e){var t=n.edge(e);r.Z(t.points,mn),i.Z(t,"x")&&mn(t)}))}(n),bn(n))}function bn(n){r.Z(n.nodes(),(function(e){wn(n.node(e))})),r.Z(n.edges(),(function(e){wn(n.edge(e))}))}function wn(n){var e=n.width;n.width=n.height,n.height=e}function yn(n){n.y=-n.y}function mn(n){var e=n.x;n.x=n.y,n.y=e}function _n(n){n.graph().dummyChains=[],r.Z(n.edges(),(function(e){!function(n,e){var t,r,o,i=e.v,u=n.node(i).rank,a=e.w,c=n.node(a).rank,s=e.name,f=n.edge(e),d=f.labelRank;if(c===u+1)return;for(n.removeEdge(e),o=0,++u;u<c;++o,++u)f.points=[],t=cn(n,"edge",r={width:0,height:0,edgeLabel:f,edgeObj:e,rank:u},"_d"),u===d&&(r.width=f.width,r.height=f.height,r.dummy="edge-label",r.labelpos=f.labelpos),n.setEdge(i,t,{weight:f.weight},s),0===o&&n.graph().dummyChains.push(t),i=t;n.setEdge(i,a,{weight:f.weight},s)}(n,e)}))}const jn=function(n,e){return n&&n.length?J(n,(0,nn.Z)(e,2),rn):void 0};function En(n){var e={};r.Z(n.sources(),(function t(r){var o=n.node(r);if(i.Z(e,r))return o.rank;e[r]=!0;var u=on(c.Z(n.outEdges(r),(function(e){return t(e.w)-n.edge(e).minlen})));return u!==Number.POSITIVE_INFINITY&&null!=u||(u=0),o.rank=u}))}function kn(n,e){return n.node(e.w).rank-n.node(e.v).rank-n.edge(e).minlen}function xn(n){var e,t,r=new f.k({directed:!1}),o=n.nodes()[0],i=n.nodeCount();for(r.setNode(o,{});Nn(r,n)<i;)e=On(r,n),t=r.hasNode(e.v)?kn(n,e):-kn(n,e),In(r,n,t);return r}function Nn(n,e){return r.Z(n.nodes(),(function t(o){r.Z(e.nodeEdges(o),(function(r){var i=r.v,u=o===i?r.w:i;n.hasNode(u)||kn(e,r)||(n.setNode(u,{}),n.setEdge(o,u,{}),t(u))}))})),n.nodeCount()}function On(n,e){return jn(e.edges(),(function(t){if(n.hasNode(t.v)!==n.hasNode(t.w))return kn(e,t)}))}function In(n,e,t){r.Z(n.nodes(),(function(n){e.node(n).rank+=t}))}var Cn=t(585),Ln=t(7179);const Mn=function(n){return function(e,t,r){var o=Object(e);if(!(0,Cn.Z)(e)){var i=(0,nn.Z)(t,3);e=(0,Ln.Z)(e),t=function(n){return i(o[n],n,o)}}var u=n(e,t,r);return u>-1?o[i?e[u]:u]:void 0}};var An=t(1692),Pn=t(4099);const Sn=function(n){var e=(0,Pn.Z)(n),t=e%1;return e==e?t?e-t:e:0};var Rn=Math.max;const Tn=Mn((function(n,e,t){var r=null==n?0:n.length;if(!r)return-1;var o=null==t?0:Sn(t);return o<0&&(o=Rn(r+o,0)),(0,An.Z)(n,(0,nn.Z)(e,3),o)}));var Fn=t(3445);u.Z(1);u.Z(1);t(9473),t(3970),t(3589),t(8533);(0,t(3330).Z)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var Dn="\\ud800-\\udfff",zn="["+Dn+"]",Bn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Gn="\\ud83c[\\udffb-\\udfff]",Vn="[^"+Dn+"]",Un="(?:\\ud83c[\\udde6-\\uddff]){2}",qn="[\\ud800-\\udbff][\\udc00-\\udfff]",Yn="(?:"+Bn+"|"+Gn+")"+"?",$n="[\\ufe0e\\ufe0f]?",Jn=$n+Yn+("(?:\\u200d(?:"+[Vn,Un,qn].join("|")+")"+$n+Yn+")*"),Kn="(?:"+[Vn+Bn+"?",Bn,Un,qn,zn].join("|")+")";RegExp(Gn+"(?="+Gn+")|"+Kn+Jn,"g");function Wn(){}function Hn(n,e,t){I.Z(e)||(e=[e]);var o=(n.isDirected()?n.successors:n.neighbors).bind(n),i=[],u={};return r.Z(e,(function(e){if(!n.hasNode(e))throw new Error("Graph does not have node: "+e);Qn(n,e,"post"===t,u,o,i)})),i}function Qn(n,e,t,o,u,a){i.Z(o,e)||(o[e]=!0,t||a.push(e),r.Z(u(e),(function(e){Qn(n,e,t,o,u,a)})),t&&a.push(e))}Wn.prototype=new Error;t(2544);function Xn(n){n=function(n){var e=(new f.k).setGraph(n.graph());return r.Z(n.nodes(),(function(t){e.setNode(t,n.node(t))})),r.Z(n.edges(),(function(t){var r=e.edge(t.v,t.w)||{weight:0,minlen:1},o=n.edge(t);e.setEdge(t.v,t.w,{weight:r.weight+o.weight,minlen:Math.max(r.minlen,o.minlen)})})),e}(n),En(n);var e,t=xn(n);for(te(t),ne(t,n);e=oe(t);)ue(t,n,e,ie(t,n,e))}function ne(n,e){var t=function(n,e){return Hn(n,e,"post")}(n,n.nodes());t=t.slice(0,t.length-1),r.Z(t,(function(t){!function(n,e,t){var r=n.node(t),o=r.parent;n.edge(t,o).cutvalue=ee(n,e,t)}(n,e,t)}))}function ee(n,e,t){var o=n.node(t).parent,i=!0,u=e.edge(t,o),a=0;return u||(i=!1,u=e.edge(o,t)),a=u.weight,r.Z(e.nodeEdges(t),(function(r){var u,c,s=r.v===t,f=s?r.w:r.v;if(f!==o){var d=s===i,v=e.edge(r).weight;if(a+=d?v:-v,u=t,c=f,n.hasEdge(u,c)){var h=n.edge(t,f).cutvalue;a+=d?-h:h}}})),a}function te(n,e){arguments.length<2&&(e=n.nodes()[0]),re(n,{},1,e)}function re(n,e,t,o,u){var a=t,c=n.node(o);return e[o]=!0,r.Z(n.neighbors(o),(function(r){i.Z(e,r)||(t=re(n,e,t,r,o))})),c.low=a,c.lim=t++,u?c.parent=u:delete c.parent,t}function oe(n){return Tn(n.edges(),(function(e){return n.edge(e).cutvalue<0}))}function ie(n,e,t){var r=t.v,o=t.w;e.hasEdge(r,o)||(r=t.w,o=t.v);var i=n.node(r),u=n.node(o),a=i,c=!1;i.lim>u.lim&&(a=u,c=!0);var s=Fn.Z(e.edges(),(function(e){return c===ae(n,n.node(e.v),a)&&c!==ae(n,n.node(e.w),a)}));return jn(s,(function(n){return kn(e,n)}))}function ue(n,e,t,o){var i=t.v,u=t.w;n.removeEdge(i,u),n.setEdge(o.v,o.w,{}),te(n),ne(n,e),function(n,e){var t=Tn(n.nodes(),(function(n){return!e.node(n).parent})),o=function(n,e){return Hn(n,e,"pre")}(n,t);o=o.slice(1),r.Z(o,(function(t){var r=n.node(t).parent,o=e.edge(t,r),i=!1;o||(o=e.edge(r,t),i=!0),e.node(t).rank=e.node(r).rank+(i?o.minlen:-o.minlen)}))}(n,e)}function ae(n,e,t){return t.low<=e.lim&&e.lim<=t.lim}function ce(n){switch(n.graph().ranker){case"network-simplex":default:fe(n);break;case"tight-tree":!function(n){En(n),xn(n)}(n);break;case"longest-path":se(n)}}Xn.initLowLimValues=te,Xn.initCutValues=ne,Xn.calcCutValue=ee,Xn.leaveEdge=oe,Xn.enterEdge=ie,Xn.exchangeEdges=ue;var se=En;function fe(n){Xn(n)}var de=t(4148),ve=t(2344);function he(n){var e=cn(n,"root",{},"_root"),t=function(n){var e={};function t(o,i){var u=n.children(o);u&&u.length&&r.Z(u,(function(n){t(n,i+1)})),e[o]=i}return r.Z(n.children(),(function(n){t(n,1)})),e}(n),o=H(de.Z(t))-1,i=2*o+1;n.graph().nestingRoot=e,r.Z(n.edges(),(function(e){n.edge(e).minlen*=i}));var u=function(n){return ve.Z(n.edges(),(function(e,t){return e+n.edge(t).weight}),0)}(n)+1;r.Z(n.children(),(function(r){Ze(n,e,i,u,o,t,r)})),n.graph().nodeRankFactor=i}function Ze(n,e,t,o,i,u,a){var c=n.children(a);if(c.length){var s=vn(n,"_bt"),f=vn(n,"_bb"),d=n.node(a);n.setParent(s,a),d.borderTop=s,n.setParent(f,a),d.borderBottom=f,r.Z(c,(function(r){Ze(n,e,t,o,i,u,r);var c=n.node(r),d=c.borderTop?c.borderTop:r,v=c.borderBottom?c.borderBottom:r,h=c.borderTop?o:2*o,Z=d!==v?1:i-u[a]+1;n.setEdge(s,d,{weight:h,minlen:Z,nestingEdge:!0}),n.setEdge(v,f,{weight:h,minlen:Z,nestingEdge:!0})})),n.parent(a)||n.setEdge(e,s,{weight:0,minlen:i+u[a]})}else a!==e&&n.setEdge(e,a,{weight:0,minlen:t})}var le=t(8451);const ge=function(n){return(0,le.Z)(n,5)};function pe(n,e,t){var u=function(n){var e;for(;n.hasNode(e=o.Z("_root")););return e}(n),a=new f.k({compound:!0}).setGraph({root:u}).setDefaultNodeLabel((function(e){return n.node(e)}));return r.Z(n.nodes(),(function(o){var c=n.node(o),s=n.parent(o);(c.rank===e||c.minRank<=e&&e<=c.maxRank)&&(a.setNode(o),a.setParent(o,s||u),r.Z(n[t](o),(function(e){var t=e.v===o?e.w:e.v,r=a.edge(t,o),i=tn.Z(r)?0:r.weight;a.setEdge(t,o,{weight:n.edge(e).weight+i})})),i.Z(c,"minRank")&&a.setNode(o,{borderLeft:c.borderLeft[e],borderRight:c.borderRight[e]}))})),a}var be=t(2954);const we=function(n,e,t){for(var r=-1,o=n.length,i=e.length,u={};++r<o;){var a=r<i?e[r]:void 0;t(u,n[r],a)}return u};const ye=function(n,e){return we(n||[],e||[],be.Z)};var me=t(626),_e=t(4073),je=t(3317),Ee=t(1018);const ke=function(n,e){var t=n.length;for(n.sort(e);t--;)n[t]=n[t].value;return n};var xe=t(1162);const Ne=function(n,e){if(n!==e){var t=void 0!==n,r=null===n,o=n==n,i=(0,$.Z)(n),u=void 0!==e,a=null===e,c=e==e,s=(0,$.Z)(e);if(!a&&!s&&!i&&n>e||i&&u&&c&&!a&&!s||r&&u&&c||!t&&c||!o)return 1;if(!r&&!i&&!s&&n<e||s&&t&&o&&!r&&!i||a&&t&&o||!u&&o||!c)return-1}return 0};const Oe=function(n,e,t){for(var r=-1,o=n.criteria,i=e.criteria,u=o.length,a=t.length;++r<u;){var c=Ne(o[r],i[r]);if(c)return r>=a?c:c*("desc"==t[r]?-1:1)}return n.index-e.index};const Ie=function(n,e,t){e=e.length?(0,_e.Z)(e,(function(n){return(0,I.Z)(n)?function(e){return(0,je.Z)(e,1===n.length?n[0]:n)}:n})):[W.Z];var r=-1;e=(0,_e.Z)(e,(0,xe.Z)(nn.Z));var o=(0,Ee.Z)(n,(function(n,t,o){return{criteria:(0,_e.Z)(e,(function(e){return e(n)})),index:++r,value:n}}));return ke(o,(function(n,e){return Oe(n,e,t)}))};const Ce=(0,G.Z)((function(n,e){if(null==n)return[];var t=e.length;return t>1&&(0,V.Z)(n,e[0],e[1])?e=[]:t>2&&(0,V.Z)(e[0],e[1],e[2])&&(e=[e[0]]),Ie(n,(0,me.Z)(e,1),[])}));function Le(n,e){for(var t=0,r=1;r<e.length;++r)t+=Me(n,e[r-1],e[r]);return t}function Me(n,e,t){for(var o=ye(t,c.Z(t,(function(n,e){return e}))),i=a.Z(c.Z(e,(function(e){return Ce(c.Z(n.outEdges(e),(function(e){return{pos:o[e.w],weight:n.edge(e).weight}})),"pos")}))),u=1;u<t.length;)u<<=1;var s=2*u-1;u-=1;var f=c.Z(new Array(s),(function(){return 0})),d=0;return r.Z(i.forEach((function(n){var e=n.pos+u;f[e]+=n.weight;for(var t=0;e>0;)e%2&&(t+=f[e+1]),f[e=e-1>>1]+=n.weight;d+=n.weight*t}))),d}function Ae(n,e){var t={};return r.Z(n,(function(n,e){var r=t[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:e};tn.Z(n.barycenter)||(r.barycenter=n.barycenter,r.weight=n.weight)})),r.Z(e.edges(),(function(n){var e=t[n.v],r=t[n.w];tn.Z(e)||tn.Z(r)||(r.indegree++,e.out.push(t[n.w]))})),function(n){var e=[];function t(n){return function(e){e.merged||(tn.Z(e.barycenter)||tn.Z(n.barycenter)||e.barycenter>=n.barycenter)&&function(n,e){var t=0,r=0;n.weight&&(t+=n.barycenter*n.weight,r+=n.weight);e.weight&&(t+=e.barycenter*e.weight,r+=e.weight);n.vs=e.vs.concat(n.vs),n.barycenter=t/r,n.weight=r,n.i=Math.min(e.i,n.i),e.merged=!0}(n,e)}}function o(e){return function(t){t.in.push(e),0==--t.indegree&&n.push(t)}}for(;n.length;){var i=n.pop();e.push(i),r.Z(i.in.reverse(),t(i)),r.Z(i.out,o(i))}return c.Z(Fn.Z(e,(function(n){return!n.merged})),(function(n){return q.Z(n,["vs","i","barycenter","weight"])}))}(Fn.Z(t,(function(n){return!n.indegree})))}function Pe(n,e){var t,o=function(n,e){var t={lhs:[],rhs:[]};return r.Z(n,(function(n){e(n)?t.lhs.push(n):t.rhs.push(n)})),t}(n,(function(n){return i.Z(n,"barycenter")})),u=o.lhs,c=Ce(o.rhs,(function(n){return-n.i})),s=[],f=0,d=0,v=0;u.sort((t=!!e,function(n,e){return n.barycenter<e.barycenter?-1:n.barycenter>e.barycenter?1:t?e.i-n.i:n.i-e.i})),v=Se(s,c,v),r.Z(u,(function(n){v+=n.vs.length,s.push(n.vs),f+=n.barycenter*n.weight,d+=n.weight,v=Se(s,c,v)}));var h={vs:a.Z(s)};return d&&(h.barycenter=f/d,h.weight=d),h}function Se(n,e,t){for(var r;e.length&&(r=Q(e)).i<=t;)e.pop(),n.push(r.vs),t++;return t}function Re(n,e,t,o){var u=n.children(e),s=n.node(e),f=s?s.borderLeft:void 0,d=s?s.borderRight:void 0,v={};f&&(u=Fn.Z(u,(function(n){return n!==f&&n!==d})));var h=function(n,e){return c.Z(e,(function(e){var t=n.inEdges(e);if(t.length){var r=ve.Z(t,(function(e,t){var r=n.edge(t),o=n.node(t.v);return{sum:e.sum+r.weight*o.order,weight:e.weight+r.weight}}),{sum:0,weight:0});return{v:e,barycenter:r.sum/r.weight,weight:r.weight}}return{v:e}}))}(n,u);r.Z(h,(function(e){if(n.children(e.v).length){var r=Re(n,e.v,t,o);v[e.v]=r,i.Z(r,"barycenter")&&(u=e,a=r,tn.Z(u.barycenter)?(u.barycenter=a.barycenter,u.weight=a.weight):(u.barycenter=(u.barycenter*u.weight+a.barycenter*a.weight)/(u.weight+a.weight),u.weight+=a.weight))}var u,a}));var Z=Ae(h,t);!function(n,e){r.Z(n,(function(n){n.vs=a.Z(n.vs.map((function(n){return e[n]?e[n].vs:n})))}))}(Z,v);var l=Pe(Z,o);if(f&&(l.vs=a.Z([f,l.vs,d]),n.predecessors(f).length)){var g=n.node(n.predecessors(f)[0]),p=n.node(n.predecessors(d)[0]);i.Z(l,"barycenter")||(l.barycenter=0,l.weight=0),l.barycenter=(l.barycenter*l.weight+g.order+p.order)/(l.weight+2),l.weight+=2}return l}function Te(n){var e=hn(n),t=Fe(n,s.Z(1,e+1),"inEdges"),o=Fe(n,s.Z(e-1,-1,-1),"outEdges"),u=function(n){var e={},t=Fn.Z(n.nodes(),(function(e){return!n.children(e).length})),o=H(c.Z(t,(function(e){return n.node(e).rank}))),u=c.Z(s.Z(o+1),(function(){return[]})),a=Ce(t,(function(e){return n.node(e).rank}));return r.Z(a,(function t(o){if(!i.Z(e,o)){e[o]=!0;var a=n.node(o);u[a.rank].push(o),r.Z(n.successors(o),t)}})),u}(n);ze(n,u);for(var a,f=Number.POSITIVE_INFINITY,d=0,v=0;v<4;++d,++v){De(d%2?t:o,d%4>=2);var h=Le(n,u=dn(n));h<f&&(v=0,a=ge(u),f=h)}ze(n,a)}function Fe(n,e,t){return c.Z(e,(function(e){return pe(n,e,t)}))}function De(n,e){var t=new f.k;r.Z(n,(function(n){var o=n.graph().root,i=Re(n,o,t,e);r.Z(i.vs,(function(e,t){n.node(e).order=t})),function(n,e,t){var o,i={};r.Z(t,(function(t){for(var r,u,a=n.parent(t);a;){if((r=n.parent(a))?(u=i[r],i[r]=a):(u=o,o=a),u&&u!==a)return void e.setEdge(u,a);a=r}}))}(n,t,i.vs)}))}function ze(n,e){r.Z(e,(function(e){r.Z(e,(function(e,t){n.node(e).order=t}))}))}function Be(n){var e=function(n){var e={},t=0;function o(i){var u=t;r.Z(n.children(i),o),e[i]={low:u,lim:t++}}return r.Z(n.children(),o),e}(n);r.Z(n.graph().dummyChains,(function(t){for(var r=n.node(t),o=r.edgeObj,i=function(n,e,t,r){var o,i,u=[],a=[],c=Math.min(e[t].low,e[r].low),s=Math.max(e[t].lim,e[r].lim);o=t;do{o=n.parent(o),u.push(o)}while(o&&(e[o].low>c||s>e[o].lim));i=o,o=r;for(;(o=n.parent(o))!==i;)a.push(o);return{path:u.concat(a.reverse()),lca:i}}(n,e,o.v,o.w),u=i.path,a=i.lca,c=0,s=u[c],f=!0;t!==o.w;){if(r=n.node(t),f){for(;(s=u[c])!==a&&n.node(s).maxRank<r.rank;)c++;s===a&&(f=!1)}if(!f){for(;c<u.length-1&&n.node(s=u[c+1]).minRank<=r.rank;)c++;s=u[c]}n.setParent(t,s),t=n.successors(t)[0]}}))}var Ge=t(8882);const Ve=function(n,e){return n&&(0,X.Z)(n,(0,Ge.Z)(e))};const Ue=function(n,e){return null==n?n:(0,j.Z)(n,(0,Ge.Z)(e),F.Z)};function qe(n,e){var t={};return ve.Z(e,(function(e,o){var i=0,u=0,a=e.length,c=Q(o);return r.Z(o,(function(e,s){var f=function(n,e){if(n.node(e).dummy)return Tn(n.predecessors(e),(function(e){return n.node(e).dummy}))}(n,e),d=f?n.node(f).order:a;(f||e===c)&&(r.Z(o.slice(u,s+1),(function(e){r.Z(n.predecessors(e),(function(r){var o=n.node(r),u=o.order;!(u<i||d<u)||o.dummy&&n.node(e).dummy||Ye(t,r,e)}))})),u=s+1,i=d)})),o})),t}function Ye(n,e,t){if(e>t){var r=e;e=t,t=r}var o=n[e];o||(n[e]=o={}),o[t]=!0}function $e(n,e,t){if(e>t){var r=e;e=t,t=r}return i.Z(n[e],t)}function Je(n,e,t,o,u){var a={},c=function(n,e,t,o){var u=new f.k,a=n.graph(),c=function(n,e,t){return function(r,o,u){var a,c=r.node(o),s=r.node(u),f=0;if(f+=c.width/2,i.Z(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":a=-c.width/2;break;case"r":a=c.width/2}if(a&&(f+=t?a:-a),a=0,f+=(c.dummy?e:n)/2,f+=(s.dummy?e:n)/2,f+=s.width/2,i.Z(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":a=s.width/2;break;case"r":a=-s.width/2}return a&&(f+=t?a:-a),a=0,f}}(a.nodesep,a.edgesep,o);return r.Z(e,(function(e){var o;r.Z(e,(function(e){var r=t[e];if(u.setNode(r),o){var i=t[o],a=u.edge(i,r);u.setEdge(i,r,Math.max(c(n,e,o),a||0))}o=e}))})),u}(n,e,t,u),s=u?"borderLeft":"borderRight";function d(n,e){for(var t=c.nodes(),r=t.pop(),o={};r;)o[r]?n(r):(o[r]=!0,t.push(r),t=t.concat(e(r))),r=t.pop()}return d((function(n){a[n]=c.inEdges(n).reduce((function(n,e){return Math.max(n,a[e.v]+c.edge(e))}),0)}),c.predecessors.bind(c)),d((function(e){var t=c.outEdges(e).reduce((function(n,e){return Math.min(n,a[e.w]-c.edge(e))}),Number.POSITIVE_INFINITY),r=n.node(e);t!==Number.POSITIVE_INFINITY&&r.borderType!==s&&(a[e]=Math.max(a[e],t))}),c.successors.bind(c)),r.Z(o,(function(n){a[n]=a[t[n]]})),a}function Ke(n){var e,t=dn(n),o=U(qe(n,t),function(n,e){var t={};function o(e,o,i,u,a){var c;r.Z(s.Z(o,i),(function(o){c=e[o],n.node(c).dummy&&r.Z(n.predecessors(c),(function(e){var r=n.node(e);r.dummy&&(r.order<u||r.order>a)&&Ye(t,e,c)}))}))}return ve.Z(e,(function(e,t){var i,u=-1,a=0;return r.Z(t,(function(r,c){if("border"===n.node(r).dummy){var s=n.predecessors(r);s.length&&(i=n.node(s[0]).order,o(t,a,c,u,i),a=c,u=i)}o(t,a,t.length,i,e.length)})),t})),t}(n,t)),i={};r.Z(["u","d"],(function(u){e="u"===u?t:de.Z(t).reverse(),r.Z(["l","r"],(function(t){"r"===t&&(e=c.Z(e,(function(n){return de.Z(n).reverse()})));var a=("u"===u?n.predecessors:n.successors).bind(n),s=function(n,e,t,o){var i={},u={},a={};return r.Z(e,(function(n){r.Z(n,(function(n,e){i[n]=n,u[n]=n,a[n]=e}))})),r.Z(e,(function(n){var e=-1;r.Z(n,(function(n){var r=o(n);if(r.length){r=Ce(r,(function(n){return a[n]}));for(var c=(r.length-1)/2,s=Math.floor(c),f=Math.ceil(c);s<=f;++s){var d=r[s];u[n]===n&&e<a[d]&&!$e(t,n,d)&&(u[d]=n,u[n]=i[n]=i[d],e=a[d])}}}))})),{root:i,align:u}}(0,e,o,a),f=Je(n,e,s.root,s.align,"r"===t);"r"===t&&(f=en(f,(function(n){return-n}))),i[u+t]=f}))}));var u=function(n,e){return jn(de.Z(e),(function(e){var t=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY;return Ue(e,(function(e,o){var i=function(n,e){return n.node(e).width}(n,o)/2;t=Math.max(e+i,t),r=Math.min(e-i,r)})),t-r}))}(n,i);return function(n,e){var t=de.Z(e),o=on(t),i=H(t);r.Z(["u","d"],(function(t){r.Z(["l","r"],(function(r){var u,a=t+r,c=n[a];if(c!==e){var s=de.Z(c);(u="l"===r?o-on(s):i-H(s))&&(n[a]=en(c,(function(n){return n+u})))}}))}))}(i,u),function(n,e){return en(n.ul,(function(t,r){if(e)return n[e.toLowerCase()][r];var o=Ce(c.Z(n,r));return(o[1]+o[2])/2}))}(i,n.graph().align)}function We(n){(function(n){var e=dn(n),t=n.graph().ranksep,o=0;r.Z(e,(function(e){var i=H(c.Z(e,(function(e){return n.node(e).height})));r.Z(e,(function(e){n.node(e).y=o+i/2})),o+=i+t}))})(n=sn(n)),Ve(Ke(n),(function(e,t){n.node(t).x=e}))}function He(n,e){var t=e&&e.debugTiming?Zn:ln;t("layout",(function(){var e=t(" buildLayoutGraph",(function(){return function(n){var e=new f.k({multigraph:!0,compound:!0}),t=at(n.graph());return e.setGraph(U({},Xe,ut(t,Qe),q.Z(t,nt))),r.Z(n.nodes(),(function(t){var r=at(n.node(t));e.setNode(t,Y.Z(ut(r,et),tt)),e.setParent(t,n.parent(t))})),r.Z(n.edges(),(function(t){var r=at(n.edge(t));e.setEdge(t,U({},ot,ut(r,rt),q.Z(r,it)))})),e}(n)}));t(" runLayout",(function(){!function(n,e){e(" makeSpaceForEdgeLabels",(function(){!function(n){var e=n.graph();e.ranksep/=2,r.Z(n.edges(),(function(t){var r=n.edge(t);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(n)})),e(" removeSelfEdges",(function(){!function(n){r.Z(n.edges(),(function(e){if(e.v===e.w){var t=n.node(e.v);t.selfEdges||(t.selfEdges=[]),t.selfEdges.push({e:e,label:n.edge(e)}),n.removeEdge(e)}}))}(n)})),e(" acyclic",(function(){b(n)})),e(" nestingGraph.run",(function(){he(n)})),e(" rank",(function(){ce(sn(n))})),e(" injectEdgeLabelProxies",(function(){!function(n){r.Z(n.edges(),(function(e){var t=n.edge(e);if(t.width&&t.height){var r=n.node(e.v),o={rank:(n.node(e.w).rank-r.rank)/2+r.rank,e:e};cn(n,"edge-proxy",o,"_ep")}}))}(n)})),e(" removeEmptyRanks",(function(){!function(n){var e=on(c.Z(n.nodes(),(function(e){return n.node(e).rank}))),t=[];r.Z(n.nodes(),(function(r){var o=n.node(r).rank-e;t[o]||(t[o]=[]),t[o].push(r)}));var o=0,i=n.graph().nodeRankFactor;r.Z(t,(function(e,t){tn.Z(e)&&t%i!=0?--o:o&&r.Z(e,(function(e){n.node(e).rank+=o}))}))}(n)})),e(" nestingGraph.cleanup",(function(){!function(n){var e=n.graph();n.removeNode(e.nestingRoot),delete e.nestingRoot,r.Z(n.edges(),(function(e){n.edge(e).nestingEdge&&n.removeEdge(e)}))}(n)})),e(" normalizeRanks",(function(){!function(n){var e=on(c.Z(n.nodes(),(function(e){return n.node(e).rank})));r.Z(n.nodes(),(function(t){var r=n.node(t);i.Z(r,"rank")&&(r.rank-=e)}))}(n)})),e(" assignRankMinMax",(function(){!function(n){var e=0;r.Z(n.nodes(),(function(t){var r=n.node(t);r.borderTop&&(r.minRank=n.node(r.borderTop).rank,r.maxRank=n.node(r.borderBottom).rank,e=H(e,r.maxRank))})),n.graph().maxRank=e}(n)})),e(" removeEdgeLabelProxies",(function(){!function(n){r.Z(n.nodes(),(function(e){var t=n.node(e);"edge-proxy"===t.dummy&&(n.edge(t.e).labelRank=t.rank,n.removeNode(e))}))}(n)})),e(" normalize.run",(function(){_n(n)})),e(" parentDummyChains",(function(){Be(n)})),e(" addBorderSegments",(function(){!function(n){r.Z(n.children(),(function e(t){var o=n.children(t),u=n.node(t);if(o.length&&r.Z(o,e),i.Z(u,"minRank")){u.borderLeft=[],u.borderRight=[];for(var a=u.minRank,c=u.maxRank+1;a<c;++a)gn(n,"borderLeft","_bl",t,u,a),gn(n,"borderRight","_br",t,u,a)}}))}(n)})),e(" order",(function(){Te(n)})),e(" insertSelfEdges",(function(){!function(n){var e=dn(n);r.Z(e,(function(e){var t=0;r.Z(e,(function(e,o){var i=n.node(e);i.order=o+t,r.Z(i.selfEdges,(function(e){cn(n,"selfedge",{width:e.label.width,height:e.label.height,rank:i.rank,order:o+ ++t,e:e.e,label:e.label},"_se")})),delete i.selfEdges}))}))}(n)})),e(" adjustCoordinateSystem",(function(){!function(n){var e=n.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||bn(n)}(n)})),e(" position",(function(){We(n)})),e(" positionSelfEdges",(function(){!function(n){r.Z(n.nodes(),(function(e){var t=n.node(e);if("selfedge"===t.dummy){var r=n.node(t.e.v),o=r.x+r.width/2,i=r.y,u=t.x-o,a=r.height/2;n.setEdge(t.e,t.label),n.removeNode(e),t.label.points=[{x:o+2*u/3,y:i-a},{x:o+5*u/6,y:i-a},{x:o+u,y:i},{x:o+5*u/6,y:i+a},{x:o+2*u/3,y:i+a}],t.label.x=t.x,t.label.y=t.y}}))}(n)})),e(" removeBorderNodes",(function(){!function(n){r.Z(n.nodes(),(function(e){if(n.children(e).length){var t=n.node(e),r=n.node(t.borderTop),o=n.node(t.borderBottom),i=n.node(Q(t.borderLeft)),u=n.node(Q(t.borderRight));t.width=Math.abs(u.x-i.x),t.height=Math.abs(o.y-r.y),t.x=i.x+t.width/2,t.y=r.y+t.height/2}})),r.Z(n.nodes(),(function(e){"border"===n.node(e).dummy&&n.removeNode(e)}))}(n)})),e(" normalize.undo",(function(){!function(n){r.Z(n.graph().dummyChains,(function(e){var t,r=n.node(e),o=r.edgeLabel;for(n.setEdge(r.edgeObj,o);r.dummy;)t=n.successors(e)[0],n.removeNode(e),o.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(o.x=r.x,o.y=r.y,o.width=r.width,o.height=r.height),e=t,r=n.node(e)}))}(n)})),e(" fixupEdgeLabelCoords",(function(){!function(n){r.Z(n.edges(),(function(e){var t=n.edge(e);if(i.Z(t,"x"))switch("l"!==t.labelpos&&"r"!==t.labelpos||(t.width-=t.labeloffset),t.labelpos){case"l":t.x-=t.width/2+t.labeloffset;break;case"r":t.x+=t.width/2+t.labeloffset}}))}(n)})),e(" undoCoordinateSystem",(function(){pn(n)})),e(" translateGraph",(function(){!function(n){var e=Number.POSITIVE_INFINITY,t=0,o=Number.POSITIVE_INFINITY,u=0,a=n.graph(),c=a.marginx||0,s=a.marginy||0;function f(n){var r=n.x,i=n.y,a=n.width,c=n.height;e=Math.min(e,r-a/2),t=Math.max(t,r+a/2),o=Math.min(o,i-c/2),u=Math.max(u,i+c/2)}r.Z(n.nodes(),(function(e){f(n.node(e))})),r.Z(n.edges(),(function(e){var t=n.edge(e);i.Z(t,"x")&&f(t)})),e-=c,o-=s,r.Z(n.nodes(),(function(t){var r=n.node(t);r.x-=e,r.y-=o})),r.Z(n.edges(),(function(t){var u=n.edge(t);r.Z(u.points,(function(n){n.x-=e,n.y-=o})),i.Z(u,"x")&&(u.x-=e),i.Z(u,"y")&&(u.y-=o)})),a.width=t-e+c,a.height=u-o+s}(n)})),e(" assignNodeIntersects",(function(){!function(n){r.Z(n.edges(),(function(e){var t,r,o=n.edge(e),i=n.node(e.v),u=n.node(e.w);o.points?(t=o.points[0],r=o.points[o.points.length-1]):(o.points=[],t=u,r=i),o.points.unshift(fn(i,t)),o.points.push(fn(u,r))}))}(n)})),e(" reversePoints",(function(){!function(n){r.Z(n.edges(),(function(e){var t=n.edge(e);t.reversed&&t.points.reverse()}))}(n)})),e(" acyclic.undo",(function(){!function(n){r.Z(n.edges(),(function(e){var t=n.edge(e);if(t.reversed){n.removeEdge(e);var r=t.forwardName;delete t.reversed,delete t.forwardName,n.setEdge(e.w,e.v,t,r)}}))}(n)}))}(e,t)})),t(" updateInputGraph",(function(){!function(n,e){r.Z(n.nodes(),(function(t){var r=n.node(t),o=e.node(t);r&&(r.x=o.x,r.y=o.y,e.children(t).length&&(r.width=o.width,r.height=o.height))})),r.Z(n.edges(),(function(t){var r=n.edge(t),o=e.edge(t);r.points=o.points,i.Z(o,"x")&&(r.x=o.x,r.y=o.y)})),n.graph().width=e.graph().width,n.graph().height=e.graph().height}(n,e)}))}))}var Qe=["nodesep","edgesep","ranksep","marginx","marginy"],Xe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},nt=["acyclicer","ranker","rankdir","align"],et=["width","height"],tt={width:0,height:0},rt=["minlen","weight","width","height","labeloffset"],ot={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},it=["labelpos"];function ut(n,e){return en(q.Z(n,e),Number)}function at(n){var e={};return r.Z(n,(function(n,t){e[t.toLowerCase()]=n})),e}},2544:(n,e,t)=>{t.d(e,{k:()=>P});var r=t(7452),o=t(2002),i=t(3234),u=t(7179),a=t(3445),c=t(9697),s=t(870),f=t(9360),d=t(626),v=t(9581),h=t(3001),Z=t(1692);const l=function(n){return n!=n};const g=function(n,e,t){for(var r=t-1,o=n.length;++r<o;)if(n[r]===e)return r;return-1};const p=function(n,e,t){return e==e?g(n,e,t):(0,Z.Z)(n,l,t)};const b=function(n,e){return!!(null==n?0:n.length)&&p(n,e,0)>-1};const w=function(n,e,t){for(var r=-1,o=null==n?0:n.length;++r<o;)if(t(e,n[r]))return!0;return!1};var y=t(9548),m=t(3203);const _=function(){};var j=t(6545),E=m.Z&&1/(0,j.Z)(new m.Z([,-0]))[1]==1/0?function(n){return new m.Z(n)}:_;const k=E;const x=function(n,e,t){var r=-1,o=b,i=n.length,u=!0,a=[],c=a;if(t)u=!1,o=w;else if(i>=200){var s=e?null:k(n);if(s)return(0,j.Z)(s);u=!1,o=y.Z,c=new h.Z}else c=e?[]:a;n:for(;++r<i;){var f=n[r],d=e?e(f):f;if(f=t||0!==f?f:0,u&&d==d){for(var v=c.length;v--;)if(c[v]===d)continue n;e&&c.push(d),a.push(f)}else o(c,d,t)||(c!==a&&c.push(d),a.push(f))}return a};var N=t(836);const O=(0,v.Z)((function(n){return x((0,d.Z)(n,1,N.Z,!0))}));var I=t(4148),C=t(2344),L="\0",M="\0",A="\x01";class P{constructor(n={}){this._isDirected=!r.Z(n,"directed")||n.directed,this._isMultigraph=!!r.Z(n,"multigraph")&&n.multigraph,this._isCompound=!!r.Z(n,"compound")&&n.compound,this._label=void 0,this._defaultNodeLabelFn=o.Z(void 0),this._defaultEdgeLabelFn=o.Z(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[M]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(n){return this._label=n,this}graph(){return this._label}setDefaultNodeLabel(n){return i.Z(n)||(n=o.Z(n)),this._defaultNodeLabelFn=n,this}nodeCount(){return this._nodeCount}nodes(){return u.Z(this._nodes)}sources(){var n=this;return a.Z(this.nodes(),(function(e){return c.Z(n._in[e])}))}sinks(){var n=this;return a.Z(this.nodes(),(function(e){return c.Z(n._out[e])}))}setNodes(n,e){var t=arguments,r=this;return s.Z(n,(function(n){t.length>1?r.setNode(n,e):r.setNode(n)})),this}setNode(n,e){return r.Z(this._nodes,n)?(arguments.length>1&&(this._nodes[n]=e),this):(this._nodes[n]=arguments.length>1?e:this._defaultNodeLabelFn(n),this._isCompound&&(this._parent[n]=M,this._children[n]={},this._children[M][n]=!0),this._in[n]={},this._preds[n]={},this._out[n]={},this._sucs[n]={},++this._nodeCount,this)}node(n){return this._nodes[n]}hasNode(n){return r.Z(this._nodes,n)}removeNode(n){var e=this;if(r.Z(this._nodes,n)){var t=function(n){e.removeEdge(e._edgeObjs[n])};delete this._nodes[n],this._isCompound&&(this._removeFromParentsChildList(n),delete this._parent[n],s.Z(this.children(n),(function(n){e.setParent(n)})),delete this._children[n]),s.Z(u.Z(this._in[n]),t),delete this._in[n],delete this._preds[n],s.Z(u.Z(this._out[n]),t),delete this._out[n],delete this._sucs[n],--this._nodeCount}return this}setParent(n,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(f.Z(e))e=M;else{for(var t=e+="";!f.Z(t);t=this.parent(t))if(t===n)throw new Error("Setting "+e+" as parent of "+n+" would create a cycle");this.setNode(e)}return this.setNode(n),this._removeFromParentsChildList(n),this._parent[n]=e,this._children[e][n]=!0,this}_removeFromParentsChildList(n){delete this._children[this._parent[n]][n]}parent(n){if(this._isCompound){var e=this._parent[n];if(e!==M)return e}}children(n){if(f.Z(n)&&(n=M),this._isCompound){var e=this._children[n];if(e)return u.Z(e)}else{if(n===M)return this.nodes();if(this.hasNode(n))return[]}}predecessors(n){var e=this._preds[n];if(e)return u.Z(e)}successors(n){var e=this._sucs[n];if(e)return u.Z(e)}neighbors(n){var e=this.predecessors(n);if(e)return O(e,this.successors(n))}isLeaf(n){return 0===(this.isDirected()?this.successors(n):this.neighbors(n)).length}filterNodes(n){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var t=this;s.Z(this._nodes,(function(t,r){n(r)&&e.setNode(r,t)})),s.Z(this._edgeObjs,(function(n){e.hasNode(n.v)&&e.hasNode(n.w)&&e.setEdge(n,t.edge(n))}));var r={};function o(n){var i=t.parent(n);return void 0===i||e.hasNode(i)?(r[n]=i,i):i in r?r[i]:o(i)}return this._isCompound&&s.Z(e.nodes(),(function(n){e.setParent(n,o(n))})),e}setDefaultEdgeLabel(n){return i.Z(n)||(n=o.Z(n)),this._defaultEdgeLabelFn=n,this}edgeCount(){return this._edgeCount}edges(){return I.Z(this._edgeObjs)}setPath(n,e){var t=this,r=arguments;return C.Z(n,(function(n,o){return r.length>1?t.setEdge(n,o,e):t.setEdge(n,o),o})),this}setEdge(){var n,e,t,o,i=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(n=u.v,e=u.w,t=u.name,2===arguments.length&&(o=arguments[1],i=!0)):(n=u,e=arguments[1],t=arguments[3],arguments.length>2&&(o=arguments[2],i=!0)),n=""+n,e=""+e,f.Z(t)||(t=""+t);var a=T(this._isDirected,n,e,t);if(r.Z(this._edgeLabels,a))return i&&(this._edgeLabels[a]=o),this;if(!f.Z(t)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(n),this.setNode(e),this._edgeLabels[a]=i?o:this._defaultEdgeLabelFn(n,e,t);var c=function(n,e,t,r){var o=""+e,i=""+t;if(!n&&o>i){var u=o;o=i,i=u}var a={v:o,w:i};r&&(a.name=r);return a}(this._isDirected,n,e,t);return n=c.v,e=c.w,Object.freeze(c),this._edgeObjs[a]=c,S(this._preds[e],n),S(this._sucs[n],e),this._in[e][a]=c,this._out[n][a]=c,this._edgeCount++,this}edge(n,e,t){var r=1===arguments.length?F(this._isDirected,arguments[0]):T(this._isDirected,n,e,t);return this._edgeLabels[r]}hasEdge(n,e,t){var o=1===arguments.length?F(this._isDirected,arguments[0]):T(this._isDirected,n,e,t);return r.Z(this._edgeLabels,o)}removeEdge(n,e,t){var r=1===arguments.length?F(this._isDirected,arguments[0]):T(this._isDirected,n,e,t),o=this._edgeObjs[r];return o&&(n=o.v,e=o.w,delete this._edgeLabels[r],delete this._edgeObjs[r],R(this._preds[e],n),R(this._sucs[n],e),delete this._in[e][r],delete this._out[n][r],this._edgeCount--),this}inEdges(n,e){var t=this._in[n];if(t){var r=I.Z(t);return e?a.Z(r,(function(n){return n.v===e})):r}}outEdges(n,e){var t=this._out[n];if(t){var r=I.Z(t);return e?a.Z(r,(function(n){return n.w===e})):r}}nodeEdges(n,e){var t=this.inEdges(n,e);if(t)return t.concat(this.outEdges(n,e))}}function S(n,e){n[e]?n[e]++:n[e]=1}function R(n,e){--n[e]||delete n[e]}function T(n,e,t,r){var o=""+e,i=""+t;if(!n&&o>i){var u=o;o=i,i=u}return o+A+i+A+(f.Z(r)?L:r)}function F(n,e){return T(n,e.v,e.w,e.name)}P.prototype._nodeCount=0,P.prototype._edgeCount=0},5625:(n,e,t)=>{t.d(e,{k:()=>r.k});var r=t(2544)},3001:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(7834);const o=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this};const i=function(n){return this.__data__.has(n)};function u(n){var e=-1,t=null==n?0:n.length;for(this.__data__=new r.Z;++e<t;)this.add(n[e])}u.prototype.add=u.prototype.push=o,u.prototype.has=i;const a=u},1667:(n,e,t)=>{t.d(e,{Z:()=>v});var r=t(7308);const o=function(){this.__data__=new r.Z,this.size=0};const i=function(n){var e=this.__data__,t=e.delete(n);return this.size=e.size,t};const u=function(n){return this.__data__.get(n)};const a=function(n){return this.__data__.has(n)};var c=t(6183),s=t(7834);const f=function(n,e){var t=this.__data__;if(t instanceof r.Z){var o=t.__data__;if(!c.Z||o.length<199)return o.push([n,e]),this.size=++t.size,this;t=this.__data__=new s.Z(o)}return t.set(n,e),this.size=t.size,this};function d(n){var e=this.__data__=new r.Z(n);this.size=e.size}d.prototype.clear=o,d.prototype.delete=i,d.prototype.get=u,d.prototype.has=a,d.prototype.set=f;const v=d},7623:(n,e,t)=>{t.d(e,{Z:()=>r});const r=t(6092).Z.Uint8Array},6579:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n,e){for(var t=-1,r=null==n?0:n.length;++t<r&&!1!==e(n[t],t,n););return n}},8774:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n,e){for(var t=-1,r=null==n?0:n.length,o=0,i=[];++t<r;){var u=n[t];e(u,t,n)&&(i[o++]=u)}return i}},7668:(n,e,t)=>{t.d(e,{Z:()=>f});const r=function(n,e){for(var t=-1,r=Array(n);++t<n;)r[t]=e(t);return r};var o=t(9169),i=t(7771),u=t(7008),a=t(6009),c=t(8843),s=Object.prototype.hasOwnProperty;const f=function(n,e){var t=(0,i.Z)(n),f=!t&&(0,o.Z)(n),d=!t&&!f&&(0,u.Z)(n),v=!t&&!f&&!d&&(0,c.Z)(n),h=t||f||d||v,Z=h?r(n.length,String):[],l=Z.length;for(var g in n)!e&&!s.call(n,g)||h&&("length"==g||d&&("offset"==g||"parent"==g)||v&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||(0,a.Z)(g,l))||Z.push(g);return Z}},4073:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n,e){for(var t=-1,r=null==n?0:n.length,o=Array(r);++t<r;)o[t]=e(n[t],t,n);return o}},8694:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n,e){for(var t=-1,r=e.length,o=n.length;++t<r;)n[o+t]=e[t];return n}},2954:(n,e,t)=>{t.d(e,{Z:()=>u});var r=t(4752),o=t(9651),i=Object.prototype.hasOwnProperty;const u=function(n,e,t){var u=n[e];i.call(n,e)&&(0,o.Z)(u,t)&&(void 0!==t||e in n)||(0,r.Z)(n,e,t)}},4752:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(7904);const o=function(n,e,t){"__proto__"==e&&r.Z?(0,r.Z)(n,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):n[e]=t}},8451:(n,e,t)=>{t.d(e,{Z:()=>X});var r=t(1667),o=t(6579),i=t(2954),u=t(1899),a=t(7179);const c=function(n,e){return n&&(0,u.Z)(e,(0,a.Z)(e),n)};var s=t(2957);const f=function(n,e){return n&&(0,u.Z)(e,(0,s.Z)(e),n)};var d=t(1050),v=t(7215),h=t(5695);const Z=function(n,e){return(0,u.Z)(n,(0,h.Z)(n),e)};var l=t(8694),g=t(2513),p=t(532);const b=Object.getOwnPropertySymbols?function(n){for(var e=[];n;)(0,l.Z)(e,(0,h.Z)(n)),n=(0,g.Z)(n);return e}:p.Z;const w=function(n,e){return(0,u.Z)(n,b(n),e)};var y=t(1808),m=t(3327);const _=function(n){return(0,m.Z)(n,s.Z,b)};var j=t(3970),E=Object.prototype.hasOwnProperty;const k=function(n){var e=n.length,t=new n.constructor(e);return e&&"string"==typeof n[0]&&E.call(n,"index")&&(t.index=n.index,t.input=n.input),t};var x=t(1884);const N=function(n,e){var t=e?(0,x.Z)(n.buffer):n.buffer;return new n.constructor(t,n.byteOffset,n.byteLength)};var O=/\w*$/;const I=function(n){var e=new n.constructor(n.source,O.exec(n));return e.lastIndex=n.lastIndex,e};var C=t(7685),L=C.Z?C.Z.prototype:void 0,M=L?L.valueOf:void 0;const A=function(n){return M?Object(M.call(n)):{}};var P=t(2701);const S=function(n,e,t){var r=n.constructor;switch(e){case"[object ArrayBuffer]":return(0,x.Z)(n);case"[object Boolean]":case"[object Date]":return new r(+n);case"[object DataView]":return N(n,t);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,P.Z)(n,t);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(n);case"[object RegExp]":return I(n);case"[object Symbol]":return A(n)}};var R=t(3658),T=t(7771),F=t(7008),D=t(8533);const z=function(n){return(0,D.Z)(n)&&"[object Map]"==(0,j.Z)(n)};var B=t(1162),G=t(8351),V=G.Z&&G.Z.isMap;const U=V?(0,B.Z)(V):z;var q=t(7226);const Y=function(n){return(0,D.Z)(n)&&"[object Set]"==(0,j.Z)(n)};var $=G.Z&&G.Z.isSet;const J=$?(0,B.Z)($):Y;var K="[object Arguments]",W="[object Function]",H="[object Object]",Q={};Q[K]=Q["[object Array]"]=Q["[object ArrayBuffer]"]=Q["[object DataView]"]=Q["[object Boolean]"]=Q["[object Date]"]=Q["[object Float32Array]"]=Q["[object Float64Array]"]=Q["[object Int8Array]"]=Q["[object Int16Array]"]=Q["[object Int32Array]"]=Q["[object Map]"]=Q["[object Number]"]=Q[H]=Q["[object RegExp]"]=Q["[object Set]"]=Q["[object String]"]=Q["[object Symbol]"]=Q["[object Uint8Array]"]=Q["[object Uint8ClampedArray]"]=Q["[object Uint16Array]"]=Q["[object Uint32Array]"]=!0,Q["[object Error]"]=Q[W]=Q["[object WeakMap]"]=!1;const X=function n(e,t,u,h,l,g){var p,b=1&t,m=2&t,E=4&t;if(u&&(p=l?u(e,h,l,g):u(e)),void 0!==p)return p;if(!(0,q.Z)(e))return e;var x=(0,T.Z)(e);if(x){if(p=k(e),!b)return(0,v.Z)(e,p)}else{var N=(0,j.Z)(e),O=N==W||"[object GeneratorFunction]"==N;if((0,F.Z)(e))return(0,d.Z)(e,b);if(N==H||N==K||O&&!l){if(p=m||O?{}:(0,R.Z)(e),!b)return m?w(e,f(p,e)):Z(e,c(p,e))}else{if(!Q[N])return l?e:{};p=S(e,N,b)}}g||(g=new r.Z);var I=g.get(e);if(I)return I;g.set(e,p),J(e)?e.forEach((function(r){p.add(n(r,t,u,r,e,g))})):U(e)&&e.forEach((function(r,o){p.set(o,n(r,t,u,o,e,g))}));var C=E?m?_:y.Z:m?s.Z:a.Z,L=x?void 0:C(e);return(0,o.Z)(L||e,(function(r,o){L&&(r=e[o=r]),(0,i.Z)(p,o,n(r,t,u,o,e,g))})),p}},9811:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(2693),o=t(585);const i=function(n,e){return function(t,r){if(null==t)return t;if(!(0,o.Z)(t))return n(t,r);for(var i=t.length,u=e?i:-1,a=Object(t);(e?u--:++u<i)&&!1!==r(a[u],u,a););return t}}(r.Z)},1692:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n,e,t,r){for(var o=n.length,i=t+(r?1:-1);r?i--:++i<o;)if(e(n[i],i,n))return i;return-1}},626:(n,e,t)=>{t.d(e,{Z:()=>s});var r=t(8694),o=t(7685),i=t(9169),u=t(7771),a=o.Z?o.Z.isConcatSpreadable:void 0;const c=function(n){return(0,u.Z)(n)||(0,i.Z)(n)||!!(a&&n&&n[a])};const s=function n(e,t,o,i,u){var a=-1,s=e.length;for(o||(o=c),u||(u=[]);++a<s;){var f=e[a];t>0&&o(f)?t>1?n(f,t-1,o,i,u):(0,r.Z)(u,f):i||(u[u.length]=f)}return u}},1395:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){return function(e,t,r){for(var o=-1,i=Object(e),u=r(e),a=u.length;a--;){var c=u[n?a:++o];if(!1===t(i[c],c,i))break}return e}}()},2693:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(1395),o=t(7179);const i=function(n,e){return n&&(0,r.Z)(n,e,o.Z)}},3317:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(2823),o=t(2656);const i=function(n,e){for(var t=0,i=(e=(0,r.Z)(e,n)).length;null!=n&&t<i;)n=n[(0,o.Z)(e[t++])];return t&&t==i?n:void 0}},3327:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(8694),o=t(7771);const i=function(n,e,t){var i=e(n);return(0,o.Z)(n)?i:(0,r.Z)(i,t(n))}},4765:(n,e,t)=>{t.d(e,{Z:()=>$});var r=t(1667),o=t(3001);const i=function(n,e){for(var t=-1,r=null==n?0:n.length;++t<r;)if(e(n[t],t,n))return!0;return!1};var u=t(9548);const a=function(n,e,t,r,a,c){var s=1&t,f=n.length,d=e.length;if(f!=d&&!(s&&d>f))return!1;var v=c.get(n),h=c.get(e);if(v&&h)return v==e&&h==n;var Z=-1,l=!0,g=2&t?new o.Z:void 0;for(c.set(n,e),c.set(e,n);++Z<f;){var p=n[Z],b=e[Z];if(r)var w=s?r(b,p,Z,e,n,c):r(p,b,Z,n,e,c);if(void 0!==w){if(w)continue;l=!1;break}if(g){if(!i(e,(function(n,e){if(!(0,u.Z)(g,e)&&(p===n||a(p,n,t,r,c)))return g.push(e)}))){l=!1;break}}else if(p!==b&&!a(p,b,t,r,c)){l=!1;break}}return c.delete(n),c.delete(e),l};var c=t(7685),s=t(7623),f=t(9651);const d=function(n){var e=-1,t=Array(n.size);return n.forEach((function(n,r){t[++e]=[r,n]})),t};var v=t(6545),h=c.Z?c.Z.prototype:void 0,Z=h?h.valueOf:void 0;const l=function(n,e,t,r,o,i,u){switch(t){case"[object DataView]":if(n.byteLength!=e.byteLength||n.byteOffset!=e.byteOffset)return!1;n=n.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(n.byteLength!=e.byteLength||!i(new s.Z(n),new s.Z(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return(0,f.Z)(+n,+e);case"[object Error]":return n.name==e.name&&n.message==e.message;case"[object RegExp]":case"[object String]":return n==e+"";case"[object Map]":var c=d;case"[object Set]":var h=1&r;if(c||(c=v.Z),n.size!=e.size&&!h)return!1;var l=u.get(n);if(l)return l==e;r|=2,u.set(n,e);var g=a(c(n),c(e),r,o,i,u);return u.delete(n),g;case"[object Symbol]":if(Z)return Z.call(n)==Z.call(e)}return!1};var g=t(1808),p=Object.prototype.hasOwnProperty;const b=function(n,e,t,r,o,i){var u=1&t,a=(0,g.Z)(n),c=a.length;if(c!=(0,g.Z)(e).length&&!u)return!1;for(var s=c;s--;){var f=a[s];if(!(u?f in e:p.call(e,f)))return!1}var d=i.get(n),v=i.get(e);if(d&&v)return d==e&&v==n;var h=!0;i.set(n,e),i.set(e,n);for(var Z=u;++s<c;){var l=n[f=a[s]],b=e[f];if(r)var w=u?r(b,l,f,e,n,i):r(l,b,f,n,e,i);if(!(void 0===w?l===b||o(l,b,t,r,i):w)){h=!1;break}Z||(Z="constructor"==f)}if(h&&!Z){var y=n.constructor,m=e.constructor;y==m||!("constructor"in n)||!("constructor"in e)||"function"==typeof y&&y instanceof y&&"function"==typeof m&&m instanceof m||(h=!1)}return i.delete(n),i.delete(e),h};var w=t(3970),y=t(7771),m=t(7008),_=t(8843),j="[object Arguments]",E="[object Array]",k="[object Object]",x=Object.prototype.hasOwnProperty;const N=function(n,e,t,o,i,u){var c=(0,y.Z)(n),s=(0,y.Z)(e),f=c?E:(0,w.Z)(n),d=s?E:(0,w.Z)(e),v=(f=f==j?k:f)==k,h=(d=d==j?k:d)==k,Z=f==d;if(Z&&(0,m.Z)(n)){if(!(0,m.Z)(e))return!1;c=!0,v=!1}if(Z&&!v)return u||(u=new r.Z),c||(0,_.Z)(n)?a(n,e,t,o,i,u):l(n,e,f,t,o,i,u);if(!(1&t)){var g=v&&x.call(n,"__wrapped__"),p=h&&x.call(e,"__wrapped__");if(g||p){var N=g?n.value():n,O=p?e.value():e;return u||(u=new r.Z),i(N,O,t,o,u)}}return!!Z&&(u||(u=new r.Z),b(n,e,t,o,i,u))};var O=t(8533);const I=function n(e,t,r,o,i){return e===t||(null==e||null==t||!(0,O.Z)(e)&&!(0,O.Z)(t)?e!=e&&t!=t:N(e,t,r,o,n,i))};const C=function(n,e,t,o){var i=t.length,u=i,a=!o;if(null==n)return!u;for(n=Object(n);i--;){var c=t[i];if(a&&c[2]?c[1]!==n[c[0]]:!(c[0]in n))return!1}for(;++i<u;){var s=(c=t[i])[0],f=n[s],d=c[1];if(a&&c[2]){if(void 0===f&&!(s in n))return!1}else{var v=new r.Z;if(o)var h=o(f,d,s,n,e,v);if(!(void 0===h?I(d,f,3,o,v):h))return!1}}return!0};var L=t(7226);const M=function(n){return n==n&&!(0,L.Z)(n)};var A=t(7179);const P=function(n){for(var e=(0,A.Z)(n),t=e.length;t--;){var r=e[t],o=n[r];e[t]=[r,o,M(o)]}return e};const S=function(n,e){return function(t){return null!=t&&(t[n]===e&&(void 0!==e||n in Object(t)))}};const R=function(n){var e=P(n);return 1==e.length&&e[0][2]?S(e[0][0],e[0][1]):function(t){return t===n||C(t,n,e)}};var T=t(3317);const F=function(n,e,t){var r=null==n?void 0:(0,T.Z)(n,e);return void 0===r?t:r};var D=t(5487),z=t(9365),B=t(2656);const G=function(n,e){return(0,z.Z)(n)&&M(e)?S((0,B.Z)(n),e):function(t){var r=F(t,n);return void 0===r&&r===e?(0,D.Z)(t,n):I(e,r,3)}};var V=t(9203),U=t(3330);const q=function(n){return function(e){return(0,T.Z)(e,n)}};const Y=function(n){return(0,z.Z)(n)?(0,U.Z)((0,B.Z)(n)):q(n)};const $=function(n){return"function"==typeof n?n:null==n?V.Z:"object"==typeof n?(0,y.Z)(n)?G(n[0],n[1]):R(n):Y(n)}},1018:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(9811),o=t(585);const i=function(n,e){var t=-1,i=(0,o.Z)(n)?Array(n.length):[];return(0,r.Z)(n,(function(n,r,o){i[++t]=e(n,r,o)})),i}},3330:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){return function(e){return null==e?void 0:e[n]}}},9581:(n,e,t)=>{t.d(e,{Z:()=>u});var r=t(9203),o=t(1211),i=t(7227);const u=function(n,e){return(0,i.Z)((0,o.Z)(n,e,r.Z),n+"")}},9548:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n,e){return n.has(e)}},8882:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(9203);const o=function(n){return"function"==typeof n?n:r.Z}},2823:(n,e,t)=>{t.d(e,{Z:()=>f});var r=t(7771),o=t(9365),i=t(2454);var u=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g;const c=function(n){var e=(0,i.Z)(n,(function(n){return 500===t.size&&t.clear(),n})),t=e.cache;return e}((function(n){var e=[];return 46===n.charCodeAt(0)&&e.push(""),n.replace(u,(function(n,t,r,o){e.push(r?o.replace(a,"$1"):t||n)})),e}));var s=t(751);const f=function(n,e){return(0,r.Z)(n)?n:(0,o.Z)(n,e)?[n]:c((0,s.Z)(n))}},1884:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(7623);const o=function(n){var e=new n.constructor(n.byteLength);return new r.Z(e).set(new r.Z(n)),e}},1050:(n,e,t)=>{t.d(e,{Z:()=>c});var r=t(6092),o="object"==typeof exports&&exports&&!exports.nodeType&&exports,i=o&&"object"==typeof module&&module&&!module.nodeType&&module,u=i&&i.exports===o?r.Z.Buffer:void 0,a=u?u.allocUnsafe:void 0;const c=function(n,e){if(e)return n.slice();var t=n.length,r=a?a(t):new n.constructor(t);return n.copy(r),r}},2701:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(1884);const o=function(n,e){var t=e?(0,r.Z)(n.buffer):n.buffer;return new n.constructor(t,n.byteOffset,n.length)}},7215:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n,e){var t=-1,r=n.length;for(e||(e=Array(r));++t<r;)e[t]=n[t];return e}},1899:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(2954),o=t(4752);const i=function(n,e,t,i){var u=!t;t||(t={});for(var a=-1,c=e.length;++a<c;){var s=e[a],f=i?i(t[s],n[s],s,t,n):void 0;void 0===f&&(f=n[s]),u?(0,o.Z)(t,s,f):(0,r.Z)(t,s,f)}return t}},7904:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(2508);const o=function(){try{var n=(0,r.Z)(Object,"defineProperty");return n({},"",{}),n}catch(e){}}()},1808:(n,e,t)=>{t.d(e,{Z:()=>u});var r=t(3327),o=t(5695),i=t(7179);const u=function(n){return(0,r.Z)(n,i.Z,o.Z)}},2513:(n,e,t)=>{t.d(e,{Z:()=>r});const r=(0,t(1851).Z)(Object.getPrototypeOf,Object)},5695:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(8774),o=t(532),i=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols;const a=u?function(n){return null==n?[]:(n=Object(n),(0,r.Z)(u(n),(function(e){return i.call(n,e)})))}:o.Z},5196:(n,e,t)=>{t.d(e,{Z:()=>s});var r=t(2823),o=t(9169),i=t(7771),u=t(6009),a=t(1656),c=t(2656);const s=function(n,e,t){for(var s=-1,f=(e=(0,r.Z)(e,n)).length,d=!1;++s<f;){var v=(0,c.Z)(e[s]);if(!(d=null!=n&&t(n,v)))break;n=n[v]}return d||++s!=f?d:!!(f=null==n?0:n.length)&&(0,a.Z)(f)&&(0,u.Z)(v,f)&&((0,i.Z)(n)||(0,o.Z)(n))}},3658:(n,e,t)=>{t.d(e,{Z:()=>c});var r=t(7226),o=Object.create;const i=function(){function n(){}return function(e){if(!(0,r.Z)(e))return{};if(o)return o(e);n.prototype=e;var t=new n;return n.prototype=void 0,t}}();var u=t(2513),a=t(2764);const c=function(n){return"function"!=typeof n.constructor||(0,a.Z)(n)?{}:i((0,u.Z)(n))}},6009:(n,e,t)=>{t.d(e,{Z:()=>o});var r=/^(?:0|[1-9]\d*)$/;const o=function(n,e){var t=typeof n;return!!(e=null==e?9007199254740991:e)&&("number"==t||"symbol"!=t&&r.test(n))&&n>-1&&n%1==0&&n<e}},439:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(9651),o=t(585),i=t(6009),u=t(7226);const a=function(n,e,t){if(!(0,u.Z)(t))return!1;var a=typeof e;return!!("number"==a?(0,o.Z)(t)&&(0,i.Z)(e,t.length):"string"==a&&e in t)&&(0,r.Z)(t[e],n)}},9365:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(7771),o=t(2714),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;const a=function(n,e){if((0,r.Z)(n))return!1;var t=typeof n;return!("number"!=t&&"symbol"!=t&&"boolean"!=t&&null!=n&&!(0,o.Z)(n))||(u.test(n)||!i.test(n)||null!=e&&n in Object(e))}},1211:(n,e,t)=>{t.d(e,{Z:()=>i});const r=function(n,e,t){switch(t.length){case 0:return n.call(e);case 1:return n.call(e,t[0]);case 2:return n.call(e,t[0],t[1]);case 3:return n.call(e,t[0],t[1],t[2])}return n.apply(e,t)};var o=Math.max;const i=function(n,e,t){return e=o(void 0===e?n.length-1:e,0),function(){for(var i=arguments,u=-1,a=o(i.length-e,0),c=Array(a);++u<a;)c[u]=i[e+u];u=-1;for(var s=Array(e+1);++u<e;)s[u]=i[u];return s[e]=t(c),r(n,this,s)}}},6545:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){var e=-1,t=Array(n.size);return n.forEach((function(n){t[++e]=n})),t}},7227:(n,e,t)=>{t.d(e,{Z:()=>c});var r=t(2002),o=t(7904),i=t(9203);const u=o.Z?function(n,e){return(0,o.Z)(n,"toString",{configurable:!0,enumerable:!1,value:(0,r.Z)(e),writable:!0})}:i.Z;var a=Date.now;const c=function(n){var e=0,t=0;return function(){var r=a(),o=16-(r-t);if(t=r,o>0){if(++e>=800)return arguments[0]}else e=0;return n.apply(void 0,arguments)}}(u)},2656:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(2714);const o=function(n){if("string"==typeof n||(0,r.Z)(n))return n;var e=n+"";return"0"==e&&1/n==-Infinity?"-0":e}},2002:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){return function(){return n}}},3688:(n,e,t)=>{t.d(e,{Z:()=>s});var r=t(9581),o=t(9651),i=t(439),u=t(2957),a=Object.prototype,c=a.hasOwnProperty;const s=(0,r.Z)((function(n,e){n=Object(n);var t=-1,r=e.length,s=r>2?e[2]:void 0;for(s&&(0,i.Z)(e[0],e[1],s)&&(r=1);++t<r;)for(var f=e[t],d=(0,u.Z)(f),v=-1,h=d.length;++v<h;){var Z=d[v],l=n[Z];(void 0===l||(0,o.Z)(l,a[Z])&&!c.call(n,Z))&&(n[Z]=f[Z])}return n}))},3445:(n,e,t)=>{t.d(e,{Z:()=>c});var r=t(8774),o=t(9811);const i=function(n,e){var t=[];return(0,o.Z)(n,(function(n,r,o){e(n,r,o)&&t.push(n)})),t};var u=t(4765),a=t(7771);const c=function(n,e){return((0,a.Z)(n)?r.Z:i)(n,(0,u.Z)(e,3))}},7961:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(626);const o=function(n){return(null==n?0:n.length)?(0,r.Z)(n,1):[]}},870:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(6579),o=t(9811),i=t(8882),u=t(7771);const a=function(n,e){return((0,u.Z)(n)?r.Z:o.Z)(n,(0,i.Z)(e))}},7452:(n,e,t)=>{t.d(e,{Z:()=>u});var r=Object.prototype.hasOwnProperty;const o=function(n,e){return null!=n&&r.call(n,e)};var i=t(5196);const u=function(n,e){return null!=n&&(0,i.Z)(n,e,o)}},5487:(n,e,t)=>{t.d(e,{Z:()=>i});const r=function(n,e){return null!=n&&e in Object(n)};var o=t(5196);const i=function(n,e){return null!=n&&(0,o.Z)(n,e,r)}},9203:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){return n}},836:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(585),o=t(8533);const i=function(n){return(0,o.Z)(n)&&(0,r.Z)(n)}},7514:(n,e,t)=>{t.d(e,{Z:()=>d});var r=t(3589),o=t(2513),i=t(8533),u=Function.prototype,a=Object.prototype,c=u.toString,s=a.hasOwnProperty,f=c.call(Object);const d=function(n){if(!(0,i.Z)(n)||"[object Object]"!=(0,r.Z)(n))return!1;var e=(0,o.Z)(n);if(null===e)return!0;var t=s.call(e,"constructor")&&e.constructor;return"function"==typeof t&&t instanceof t&&c.call(t)==f}},2714:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(3589),o=t(8533);const i=function(n){return"symbol"==typeof n||(0,o.Z)(n)&&"[object Symbol]"==(0,r.Z)(n)}},9360:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){return void 0===n}},7179:(n,e,t)=>{t.d(e,{Z:()=>u});var r=t(7668),o=t(9473),i=t(585);const u=function(n){return(0,i.Z)(n)?(0,r.Z)(n):(0,o.Z)(n)}},2957:(n,e,t)=>{t.d(e,{Z:()=>f});var r=t(7668),o=t(7226),i=t(2764);const u=function(n){var e=[];if(null!=n)for(var t in Object(n))e.push(t);return e};var a=Object.prototype.hasOwnProperty;const c=function(n){if(!(0,o.Z)(n))return u(n);var e=(0,i.Z)(n),t=[];for(var r in n)("constructor"!=r||!e&&a.call(n,r))&&t.push(r);return t};var s=t(585);const f=function(n){return(0,s.Z)(n)?(0,r.Z)(n,!0):c(n)}},3836:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(4073),o=t(4765),i=t(1018),u=t(7771);const a=function(n,e){return((0,u.Z)(n)?r.Z:i.Z)(n,(0,o.Z)(e,3))}},1666:(n,e,t)=>{t.d(e,{Z:()=>g});var r=t(3317),o=t(2954),i=t(2823),u=t(6009),a=t(7226),c=t(2656);const s=function(n,e,t,r){if(!(0,a.Z)(n))return n;for(var s=-1,f=(e=(0,i.Z)(e,n)).length,d=f-1,v=n;null!=v&&++s<f;){var h=(0,c.Z)(e[s]),Z=t;if("__proto__"===h||"constructor"===h||"prototype"===h)return n;if(s!=d){var l=v[h];void 0===(Z=r?r(l,h,v):void 0)&&(Z=(0,a.Z)(l)?l:(0,u.Z)(e[s+1])?[]:{})}(0,o.Z)(v,h,Z),v=v[h]}return n};const f=function(n,e,t){for(var o=-1,u=e.length,a={};++o<u;){var c=e[o],f=(0,r.Z)(n,c);t(f,c)&&s(a,(0,i.Z)(c,n),f)}return a};var d=t(5487);const v=function(n,e){return f(n,e,(function(e,t){return(0,d.Z)(n,t)}))};var h=t(7961),Z=t(1211),l=t(7227);const g=function(n){return(0,l.Z)((0,Z.Z)(n,void 0,h.Z),n+"")}((function(n,e){return null==n?{}:v(n,e)}))},4379:(n,e,t)=>{t.d(e,{Z:()=>c});var r=Math.ceil,o=Math.max;const i=function(n,e,t,i){for(var u=-1,a=o(r((e-n)/(t||1)),0),c=Array(a);a--;)c[i?a:++u]=n,n+=t;return c};var u=t(439),a=t(4099);const c=function(n){return function(e,t,r){return r&&"number"!=typeof r&&(0,u.Z)(e,t,r)&&(t=r=void 0),e=(0,a.Z)(e),void 0===t?(t=e,e=0):t=(0,a.Z)(t),r=void 0===r?e<t?1:-1:(0,a.Z)(r),i(e,t,r,n)}}()},2344:(n,e,t)=>{t.d(e,{Z:()=>c});const r=function(n,e,t,r){var o=-1,i=null==n?0:n.length;for(r&&i&&(t=n[++o]);++o<i;)t=e(t,n[o],o,n);return t};var o=t(9811),i=t(4765);const u=function(n,e,t,r,o){return o(n,(function(n,o,i){t=r?(r=!1,n):e(t,n,o,i)})),t};var a=t(7771);const c=function(n,e,t){var c=(0,a.Z)(n)?r:u,s=arguments.length<3;return c(n,(0,i.Z)(e,4),t,s,o.Z)}},532:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(){return[]}},4099:(n,e,t)=>{t.d(e,{Z:()=>l});var r=/\s/;const o=function(n){for(var e=n.length;e--&&r.test(n.charAt(e)););return e};var i=/^\s+/;const u=function(n){return n?n.slice(0,o(n)+1).replace(i,""):n};var a=t(7226),c=t(2714),s=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,d=/^0o[0-7]+$/i,v=parseInt;const h=function(n){if("number"==typeof n)return n;if((0,c.Z)(n))return NaN;if((0,a.Z)(n)){var e="function"==typeof n.valueOf?n.valueOf():n;n=(0,a.Z)(e)?e+"":e}if("string"!=typeof n)return 0===n?n:+n;n=u(n);var t=f.test(n);return t||d.test(n)?v(n.slice(2),t?2:8):s.test(n)?NaN:+n};var Z=1/0;const l=function(n){return n?(n=h(n))===Z||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}},751:(n,e,t)=>{t.d(e,{Z:()=>f});var r=t(7685),o=t(4073),i=t(7771),u=t(2714),a=r.Z?r.Z.prototype:void 0,c=a?a.toString:void 0;const s=function n(e){if("string"==typeof e)return e;if((0,i.Z)(e))return(0,o.Z)(e,n)+"";if((0,u.Z)(e))return c?c.call(e):"";var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t};const f=function(n){return null==n?"":s(n)}},6749:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(751),o=0;const i=function(n){var e=++o;return(0,r.Z)(n)+e}},4148:(n,e,t)=>{t.d(e,{Z:()=>u});var r=t(4073);const o=function(n,e){return(0,r.Z)(e,(function(e){return n[e]}))};var i=t(7179);const u=function(n){return null==n?[]:o(n,(0,i.Z)(n))}}}]); \ No newline at end of file diff --git a/assets/js/2566.3eb3255f.js b/assets/js/2566.3eb3255f.js new file mode 100644 index 0000000000..475a67d139 --- /dev/null +++ b/assets/js/2566.3eb3255f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2566],{9354:(e,t,n)=>{n.d(t,{c:()=>o});var r=n(9360),i=n(8451);const d=function(e){return(0,i.Z)(e,4)};var a=n(3836);n(2544);function o(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:l(e),edges:s(e)};return r.Z(e.graph())||(t.value=d(e.graph())),t}function l(e){return a.Z(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),d={v:t};return r.Z(n)||(d.value=n),r.Z(i)||(d.parent=i),d}))}function s(e){return a.Z(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.Z(t.name)||(i.name=t.name),r.Z(n)||(i.value=n),i}))}},2566:(e,t,n)=>{n.d(t,{r:()=>E});var r=n(2494),i=n(9354),d=n(8099),a=n(44),o=n(5625),l=n(211),s=n(9373);let c={},h={},g={};const f=(e,t)=>(a.l.trace("In isDecendant",t," ",e," = ",h[t].includes(e)),!!h[t].includes(e)),u=(e,t,n,r)=>{a.l.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const i=t.children(e)||[];e!==r&&i.push(e),a.l.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach((i=>{if(t.children(i).length>0)u(i,t,n,r);else{const d=t.node(i);a.l.info("cp ",i," to ",r," with parent ",e),n.setNode(i,d),r!==t.parent(i)&&(a.l.warn("Setting parent",i,t.parent(i)),n.setParent(i,t.parent(i))),e!==r&&i!==e?(a.l.debug("Setting parent",i,e),n.setParent(i,e)):(a.l.info("In copy ",e,"root",r,"data",t.node(e),r),a.l.debug("Not Setting parent for node=",i,"cluster!==rootId",e!==r,"node!==clusterId",i!==e));const o=t.edges(i);a.l.debug("Copying Edges",o),o.forEach((i=>{a.l.info("Edge",i);const d=t.edge(i.v,i.w,i.name);a.l.info("Edge data",d,r);try{((e,t)=>(a.l.info("Decendants of ",t," is ",h[t]),a.l.info("Edge is ",e),e.v!==t&&e.w!==t&&(h[t]?h[t].includes(e.v)||f(e.v,t)||f(e.w,t)||h[t].includes(e.w):(a.l.debug("Tilt, ",t,",not in decendants"),!1))))(i,r)?(a.l.info("Copying as ",i.v,i.w,d,i.name),n.setEdge(i.v,i.w,d,i.name),a.l.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):a.l.info("Skipping copy of edge ",i.v,"--\x3e",i.w," rootId: ",r," clusterId:",e)}catch(o){a.l.error(o)}}))}a.l.debug("Removing node",i),t.removeNode(i)}))},w=(e,t)=>{const n=t.children(e);let r=[...n];for(const i of n)g[i]=e,r=[...r,...w(i,t)];return r},p=(e,t)=>{a.l.trace("Searching",e);const n=t.children(e);if(a.l.trace("Searching children of id ",e,n),n.length<1)return a.l.trace("This is a valid node",e),e;for(const r of n){const n=p(r,t);if(n)return a.l.trace("Found replacement for",e," => ",n),n}},v=e=>c[e]&&c[e].externalConnections&&c[e]?c[e].id:e,y=(e,t)=>{if(a.l.warn("extractor - ",t,i.c(e),e.children("D")),t>10)return void a.l.error("Bailing out");let n=e.nodes(),r=!1;for(const i of n){const t=e.children(i);r=r||t.length>0}if(r){a.l.debug("Nodes = ",n,t);for(const r of n)if(a.l.debug("Extracting node",r,c,c[r]&&!c[r].externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",t),c[r])if(!c[r].externalConnections&&e.children(r)&&e.children(r).length>0){a.l.warn("Cluster without external connections, without a parent and with children",r,t);let n="TB"===e.graph().rankdir?"LR":"TB";c[r]&&c[r].clusterData&&c[r].clusterData.dir&&(n=c[r].clusterData.dir,a.l.warn("Fixing dir",c[r].clusterData.dir,n));const d=new o.k({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));a.l.warn("Old graph before copy",i.c(e)),u(r,e,d,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:c[r].clusterData,labelText:c[r].labelText,graph:d}),a.l.warn("New graph after copy node: (",r,")",i.c(d)),a.l.debug("Old graph after copy",i.c(e))}else a.l.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!c[r].externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),t),a.l.debug(c);else a.l.debug("Not a cluster",r,t);n=e.nodes(),a.l.warn("New list of nodes",n);for(const r of n){const n=e.node(r);a.l.warn(" Now next level",r,n),n.clusterNode&&y(n.graph,t+1)}}else a.l.debug("Done, no node has children",e.nodes())},x=(e,t)=>{if(0===t.length)return[];let n=Object.assign(t);return t.forEach((t=>{const r=e.children(t),i=x(e,r);n=[...n,...i]})),n},m={rect:(e,t)=>{a.l.info("Creating subgraph rect for ",t.id,t);const n=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),r=n.insert("rect",":first-child"),i=(0,a.k)((0,a.g)().flowchart.htmlLabels),o=n.insert("g").attr("class","cluster-label"),c="markdown"===t.labelType?(0,l.c)(o,t.labelText,{style:t.labelStyle,useHtmlLabels:i}):o.node().appendChild((0,d.c)(t.labelText,t.labelStyle,void 0,!0));let h=c.getBBox();if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const e=c.children[0],t=(0,s.Ys)(c);h=e.getBoundingClientRect(),t.attr("width",h.width),t.attr("height",h.height)}const g=0*t.padding,f=g/2,u=t.width<=h.width+g?h.width+g:t.width;t.width<=h.width+g?t.diff=(h.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,a.l.trace("Data ",t,JSON.stringify(t)),r.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-u/2).attr("y",t.y-t.height/2-f).attr("width",u).attr("height",t.height+g),i?o.attr("transform","translate("+(t.x-h.width/2)+", "+(t.y-t.height/2)+")"):o.attr("transform","translate("+t.x+", "+(t.y-t.height/2)+")");const w=r.node().getBBox();return t.width=w.width,t.height=w.height,t.intersect=function(e){return(0,d.i)(t,e)},n},roundedWithTitle:(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),o=n.append("rect"),l=i.node().appendChild((0,d.c)(t.labelText,t.labelStyle,void 0,!0));let c=l.getBBox();if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const e=l.children[0],t=(0,s.Ys)(l);c=e.getBoundingClientRect(),t.attr("width",c.width),t.attr("height",c.height)}c=l.getBBox();const h=0*t.padding,g=h/2,f=t.width<=c.width+t.padding?c.width+t.padding:t.width;t.width<=c.width+t.padding?t.diff=(c.width+0*t.padding-t.width)/2:t.diff=-t.padding/2,r.attr("class","outer").attr("x",t.x-f/2-g).attr("y",t.y-t.height/2-g).attr("width",f+h).attr("height",t.height+h),o.attr("class","inner").attr("x",t.x-f/2-g).attr("y",t.y-t.height/2-g+c.height-1).attr("width",f+h).attr("height",t.height+h-c.height-3),i.attr("transform","translate("+(t.x-c.width/2)+", "+(t.y-t.height/2-t.padding/3+((0,a.k)((0,a.g)().flowchart.htmlLabels)?5:3))+")");const u=r.node().getBBox();return t.height=u.height,t.intersect=function(e){return(0,d.i)(t,e)},n},noteGroup:(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,a=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2-a).attr("width",t.width+i).attr("height",t.height+i).attr("fill","none");const o=r.node().getBBox();return t.width=o.width,t.height=o.height,t.intersect=function(e){return(0,d.i)(t,e)},n},divider:(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,a=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2).attr("width",t.width+i).attr("height",t.height+i);const o=r.node().getBBox();return t.width=o.width,t.height=o.height,t.diff=-t.padding/2,t.intersect=function(e){return(0,d.i)(t,e)},n}};let b={};const N=(e,t,n,o)=>{a.l.info("Graph in recursive render: XXX",i.c(t),o);const l=t.graph().rankdir;a.l.trace("Dir in recursive render - dir:",l);const s=e.insert("g").attr("class","root");t.nodes()?a.l.info("Recursive render XXX",t.nodes()):a.l.info("No nodes found for",t),t.edges().length>0&&a.l.trace("Recursive edges",t.edge(t.edges()[0]));const h=s.insert("g").attr("class","clusters"),g=s.insert("g").attr("class","edgePaths"),f=s.insert("g").attr("class","edgeLabels"),u=s.insert("g").attr("class","nodes");t.nodes().forEach((function(e){const r=t.node(e);if(void 0!==o){const n=JSON.parse(JSON.stringify(o.clusterData));a.l.info("Setting data for cluster XXX (",e,") ",n,o),t.setNode(o.id,n),t.parent(e)||(a.l.trace("Setting parent",e,o.id),t.setParent(e,o.id,n))}if(a.l.info("(Insert) Node XXX"+e+": "+JSON.stringify(t.node(e))),r&&r.clusterNode){a.l.info("Cluster identified",e,r.width,t.node(e));const i=N(u,r.graph,n,t.node(e)),o=i.elem;(0,d.u)(r,o),r.diff=i.diff||0,a.l.info("Node bounds (abc123)",e,r,r.width,r.x,r.y),(0,d.s)(o,r),a.l.warn("Recursive render complete ",o,r)}else t.children(e).length>0?(a.l.info("Cluster - the non recursive path XXX",e,r.id,r,t),a.l.info(p(r.id,t)),c[r.id]={id:p(r.id,t),node:r}):(a.l.info("Node - the non recursive path",e,r.id,r),(0,d.e)(u,t.node(e),l))})),t.edges().forEach((function(e){const n=t.edge(e.v,e.w,e.name);a.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),a.l.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(t.edge(e))),a.l.info("Fix",c,"ids:",e.v,e.w,"Translateing: ",c[e.v],c[e.w]),(0,d.f)(f,n)})),t.edges().forEach((function(e){a.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e))})),a.l.info("#############################################"),a.l.info("### Layout ###"),a.l.info("#############################################"),a.l.info(t),(0,r.bK)(t),a.l.info("Graph after layout:",i.c(t));let w=0;return(e=>x(e,e.children()))(t).forEach((function(e){const n=t.node(e);a.l.info("Position "+e+": "+JSON.stringify(t.node(e))),a.l.info("Position "+e+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?(0,d.p)(n):t.children(e).length>0?(((e,t)=>{a.l.trace("Inserting cluster");const n=t.shape||"rect";b[t.id]=m[n](e,t)})(h,n),c[n.id].node=n):(0,d.p)(n)})),t.edges().forEach((function(e){const r=t.edge(e);a.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r),r);const i=(0,d.g)(g,e,r,c,n,t);(0,d.h)(r,i)})),t.nodes().forEach((function(e){const n=t.node(e);a.l.info(e,n.type,n.diff),"group"===n.type&&(w=n.diff)})),{elem:s,diff:w}},E=(e,t,n,r,o)=>{(0,d.a)(e,n,r,o),(0,d.b)(),(0,d.d)(),b={},h={},g={},c={},a.l.warn("Graph at first:",i.c(t)),((e,t)=>{!e||t>10?a.l.debug("Opting out, no graph "):(a.l.debug("Opting in, graph "),e.nodes().forEach((function(t){e.children(t).length>0&&(a.l.warn("Cluster identified",t," Replacement id in edges: ",p(t,e)),h[t]=w(t,e),c[t]={id:p(t,e),clusterData:e.node(t)})})),e.nodes().forEach((function(t){const n=e.children(t),r=e.edges();n.length>0?(a.l.debug("Cluster identified",t,h),r.forEach((e=>{e.v!==t&&e.w!==t&&f(e.v,t)^f(e.w,t)&&(a.l.warn("Edge: ",e," leaves cluster ",t),a.l.warn("Decendants of XXX ",t,": ",h[t]),c[t].externalConnections=!0)}))):a.l.debug("Not a cluster ",t,h)})),e.edges().forEach((function(t){const n=e.edge(t);a.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),a.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let r=t.v,i=t.w;if(a.l.warn("Fix XXX",c,"ids:",t.v,t.w,"Translating: ",c[t.v]," --- ",c[t.w]),c[t.v]&&c[t.w]&&c[t.v]===c[t.w]){a.l.warn("Fixing and trixing link to self - removing XXX",t.v,t.w,t.name),a.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name);const d=t.w+"---"+t.v;e.setNode(d,{domId:d,id:d,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const o=JSON.parse(JSON.stringify(n)),l=JSON.parse(JSON.stringify(n));o.label="",o.arrowTypeEnd="none",l.label="",o.fromCluster=t.v,l.toCluster=t.v,e.setEdge(r,d,o,t.name+"-cyclic-special"),e.setEdge(d,i,l,t.name+"-cyclic-special")}else(c[t.v]||c[t.w])&&(a.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name),r!==t.v&&(n.fromCluster=t.v),i!==t.w&&(n.toCluster=t.w),a.l.warn("Fix Replacing with XXX",r,i,t.name),e.setEdge(r,i,n,t.name))})),a.l.warn("Adjusted Graph",i.c(e)),y(e,0),a.l.trace(c))})(t),a.l.warn("Graph after:",i.c(t)),N(e,t,r)}}}]); \ No newline at end of file diff --git a/assets/js/2781f0ad.eabf1c22.js b/assets/js/2781f0ad.eabf1c22.js new file mode 100644 index 0000000000..aab3e65320 --- /dev/null +++ b/assets/js/2781f0ad.eabf1c22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3787],{6866:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>E,contentTitle:()=>s,default:()=>_,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var t=a(7462),r=(a(7294),a(3905)),l=a(5657);const o={sidebar_position:2,title:"Advanced model",description:"An advanced model using consumer systems and two installations"},s="Advanced model example",i={unversionedId:"about/modelling/examples/advanced",id:"about/modelling/examples/advanced",title:"Advanced model",description:"An advanced model using consumer systems and two installations",source:"@site/docs/about/modelling/examples/advanced.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/advanced",permalink:"/ecalc/docs/about/modelling/examples/advanced",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/advanced.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Advanced model",description:"An advanced model using consumer systems and two installations"},sidebar:"about",previous:{title:"Simple model",permalink:"/ecalc/docs/about/modelling/examples/simple"},next:{title:"Drogon model",permalink:"/ecalc/docs/about/modelling/examples/drogon"}},E={},p=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"MODELS",id:"models",level:2},{value:"VARIABLES",id:"variables",level:2},{value:"INSTALLATIONS",id:"installations",level:2},{value:"Installation A",id:"installation-a",level:3},{value:"Installation B",id:"installation-b",level:3},{value:"ENERGY_USAGE_MODEL",id:"energy_usage_model",level:2},{value:"Full eCalc YAML model",id:"full-ecalc-yaml-model",level:2},{value:"Input files",id:"input-files",level:3}],d={toc:p},m="wrapper";function _(e){let{components:n,...a}=e;return(0,r.kt)(m,(0,t.Z)({},d,a,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"advanced-model-example"},"Advanced model example"),(0,r.kt)("p",null,"This is a model very similar to ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/examples/simple"},"Simple example"),". The main difference is the use of more advanced\nenergy usage models and consumer systems, and the addition of a second installation."),(0,r.kt)("p",null,"Both installations exports oil (",(0,r.kt)("inlineCode",{parentName:"p"},"OIL_PROD"),") and gas (",(0,r.kt)("inlineCode",{parentName:"p"},"GAS_PROD"),").\nThe installations emits CO",(0,r.kt)("sub",null,"2")," and CH",(0,r.kt)("sub",null,"4")," that is subject to taxation and emission quotas."),(0,r.kt)("p",null,"The following is an example with one installation called ",(0,r.kt)("inlineCode",{parentName:"p"},"Installation A")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Installation B"),"."),(0,r.kt)(l.G,{chart:"graph TD;\n Asset(Asset) --\x3e A(Installation A);\n A(Installation A) --\x3e AA(Flare);\n A --\x3e AC(Gas export compressor);\n A --\x3e AD(Generator set A);\n AD --\x3e AE(Base production load A);\n AD --\x3e AF(Gas injection compressor A);\n AD --\x3e AG(Produced water reinjection pump A);\n AD --\x3e AH(Sea water injection pump A);\n \n Asset --\x3e B(Installation B);\n B --\x3e BA(Generator set B);\n BA --\x3e BC(Base production load B);\n B --\x3e BB(Flare A);\n style A stroke:red;\n style B stroke:red;\n style BC stroke:blue;\n style AE stroke:blue;\n style AF stroke:blue;\n style AG stroke:blue;\n style AH stroke:blue;",mdxType:"Mermaid"}),(0,r.kt)("p",null,"The results of a performed characterization of the equipment are listed below:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Consumer"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Generator set A"),(0,r.kt)("td",{parentName:"tr",align:null},"Generator set"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable fuel consumer with electricity to fuel function")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Base production load A"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Production base load varying depending on a binary condition")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Gas injection compressor A"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable consumption depending on gas injection rate and lift gas rate")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Produced water reinjection pump A"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Sea water injection pump A"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable consumption depending on a complex combination on water injection rate and water production rate")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Flare A"),(0,r.kt)("td",{parentName:"tr",align:null},"Direct fuel consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Flare A")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Gas export compressor A"),(0,r.kt)("td",{parentName:"tr",align:null},"Direct fuel consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable fuel consumption depending on gas sales rate")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Generator set B"),(0,r.kt)("td",{parentName:"tr",align:null},"Generator set"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable fuel consumption with electricity to fuel function")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Base production load B"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Production base load at 7.6 MW")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Gas export compressor B"),(0,r.kt)("td",{parentName:"tr",align:null},"Direct fuel consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable fuel consumption depending on gas sales rate")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Flare B"),(0,r.kt)("td",{parentName:"tr",align:null},"Direct fuel consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Flare B")))),(0,r.kt)("h2",{id:"yaml-model-overview"},"YAML model overview"),(0,r.kt)("p",null,"The YAML model consist of these main components:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Time series inputs - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")),(0,r.kt)("li",{parentName:"ul"},"Facility characterization input - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")),(0,r.kt)("li",{parentName:"ul"},"Fuel input - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")),(0,r.kt)("li",{parentName:"ul"},"Model specifications - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")),(0,r.kt)("li",{parentName:"ul"},"Model variables - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES")),(0,r.kt)("li",{parentName:"ul"},"Installation topology - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"))),(0,r.kt)("p",null,"The YAML setup file looks like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"TIME_SERIES:\n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nVARIABLES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n")),(0,r.kt)("p",null,"We will now replace the placeholders for each of the main keywords above."),(0,r.kt)("h2",{id:"time_series"},"TIME_SERIES"),(0,r.kt)("p",null,"The reservoir variables, in this case, are found in a CSV (Comma separated file) ",(0,r.kt)("inlineCode",{parentName:"p"},"production_data.csv"),".\nWe give the time-series data a name that can be referenced as variables elsewhere in the form ",(0,r.kt)("inlineCode",{parentName:"p"},"<NAME>:<NAME OF COLUMN>"),".\nSee ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," for further details."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"TIME_SERIES:\n - NAME: SIM\n TYPE: DEFAULT\n FILE: base_profile.csv\n")),(0,r.kt)("h2",{id:"facility_inputs"},"FACILITY_INPUTS"),(0,r.kt)("p",null,"We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets,\ntabulated/sampled models and pump charts. See ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")," for further details."),(0,r.kt)("p",null,"Here we define a tabulated genset, a sampled compressor, and a single speed pump chart.\nNote that more complicated energy models are defined under the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS"),"-keyword. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"FACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: gasexp\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n")),(0,r.kt)("h2",{id:"fuel_types"},"FUEL_TYPES"),(0,r.kt)("p",null,"In this example there are two ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," - ",(0,r.kt)("inlineCode",{parentName:"p"},"fuel_gas")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"bad_fuel_gas"),".\nThese are used for Installation A and Installation B respectively.\nHere we also define emissions in CO",(0,r.kt)("sub",null,"2")," and CH",(0,r.kt)("sub",null,"4"),". Note that the two fuels have different prices,\nemissions factors and the same taxes and are defined:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"FUEL_TYPES:\n - NAME: fuel_gas\n PRICE: 1.5 # NOK/Sm3\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.20 #kg/Sm3\n TAX: 1.51 # NOK/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n TAX: 0.9 # NOK/Sm3\n - NAME: bad_fuel_gas\n PRICE: 0.5 # NOK/Sm3\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 5.0 #kg/Sm3\n TAX: 1.51 # NOK/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n TAX: 0.9 # NOK/Sm3\n")),(0,r.kt)("h2",{id:"models"},"MODELS"),(0,r.kt)("p",null,"This advanced example requires some energy usage models to be defined under the model section. See ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," for details."),(0,r.kt)("p",null,"Here we specify:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Compressor chart based on design points"),(0,r.kt)("li",{parentName:"ul"},"Compressor chart based on chart data"),(0,r.kt)("li",{parentName:"ul"},"Medium density fluid"),(0,r.kt)("li",{parentName:"ul"},"Gas turbine"),(0,r.kt)("li",{parentName:"ul"},"Simplified compressor train model")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 10000\n DESIGN_HEAD: 80\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M # M or KJ_PER_KG\n EFFICIENCY: FRACTION\n CURVES:\n FILE: compressor_chart.csv\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # [MJ/Sm3]\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," for further details."),(0,r.kt)("h2",{id:"variables"},"VARIABLES"),(0,r.kt)("p",null,"To run the model it is recommended to specify ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES"),",\ninstead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model\nby allowing descriptive variable names and avoid duplications."),(0,r.kt)("p",null,"For our model, we specify the following variables:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"VARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n water_injection_rate:\n VALUE: SIM;WATER_INJ\n gas_export_condition:\n VALUE: SIM;GAS_PROD > 0\n base_production_load_mw:\n VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)\n water_injection_condition:\n VALUE: SIM;WATER_PROD >0\n flare_a_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 5000\n 2030-01-01:\n VALUE: 2000\n flare_b_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 10000\n 2030-01-01:\n VALUE: 7000\n")),(0,r.kt)("p",null,"We reference the ",(0,r.kt)("a",{parentName:"p",href:"#time_series"},"TIME_SERIES")," ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM")," using the column names from the CSV file."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You can use boolean condition such as shown in base_production_load_mw and time varying variables such as shown in\nflare_a_fuel_rate_sm3_day and flare_b_fuel_rate_sm3_day to write simpler models with less duplicated code."),(0,r.kt)("p",{parentName:"admonition"},"The base_production_load_mw adds another 4.1 MW when the gas lift injection rate is positive."),(0,r.kt)("p",{parentName:"admonition"},"The flare rate changes in year 2030.")),(0,r.kt)("h2",{id:"installations"},"INSTALLATIONS"),(0,r.kt)("p",null,"An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form\nof generatorsets (with electric sub-consumers), and direct fuel consumers."),(0,r.kt)("p",null,"We specify:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"NAME"),": the installation name"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"HCEXPORT"),": Hydrocarbon export in Sm",(0,r.kt)("sup",null,"3"),"/day by referring to the variable $var.hydrocarbon_export_sm3_per_day specified under ",(0,r.kt)("a",{parentName:"li",href:"#variables"},"VARIABLES")," above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"FUEl"),": Default fuel specified in ",(0,r.kt)("a",{parentName:"li",href:"#fuel_types"},"FUEL_TYPES")," above. Note the different fuels used by the two installations."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CATEGORY"),": FIXED (installation) category is used to group result data for reporting. See ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")," for details.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n")),(0,r.kt)("h3",{id:"installation-a"},"Installation A"),(0,r.kt)("p",null,"There is one generator set, ",(0,r.kt)("inlineCode",{parentName:"p"},"Generator set A"),". This has a power to fuel function defined in\n",(0,r.kt)("a",{parentName:"p",href:"#facility_inputs"},"FACILITY_INPUTS")," with the name ",(0,r.kt)("inlineCode",{parentName:"p"},"genset"),". Further, the consumers getting\npower from the generator set are ",(0,r.kt)("em",{parentName:"p"},"Base production load"),", ",(0,r.kt)("em",{parentName:"p"},"Gas injection compressor"),", ",(0,r.kt)("em",{parentName:"p"},"Produced water reinjection pump"),"\nand ",(0,r.kt)("em",{parentName:"p"},"Sea-water injection pump"),"."),(0,r.kt)("p",null,"The direct fuel consumers are ",(0,r.kt)("strong",{parentName:"p"},"Flare"),"."),(0,r.kt)("p",null,"The setup for ",(0,r.kt)("inlineCode",{parentName:"p"},"Installation A")," thus becomes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set A\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL: <placeholder>\n FUELCONSUMERS:\n - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL: <placeholder>\n")),(0,r.kt)("h3",{id:"installation-b"},"Installation B"),(0,r.kt)("p",null,"There is one generator set, ",(0,r.kt)("inlineCode",{parentName:"p"},"Generator set B"),". This has a power to fuel function defined in\n",(0,r.kt)("a",{parentName:"p",href:"#facility_inputs"},"FACILITY_INPUTS")," with the name ",(0,r.kt)("inlineCode",{parentName:"p"},"genset"),". Further, the consumer getting\npower from the generator set is ",(0,r.kt)("em",{parentName:"p"},"Base production load"),"."),(0,r.kt)("p",null,"The direct fuel consumers are ",(0,r.kt)("strong",{parentName:"p"},"Flare")," and ",(0,r.kt)("strong",{parentName:"p"},"Gas export compressor"),"."),(0,r.kt)("p",null,"The setup for ",(0,r.kt)("inlineCode",{parentName:"p"},"Installation B")," thus becomes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set B\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL: <placeholder>\n FUELCONSUMERS:\n - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL: <placeholder>\n")),(0,r.kt)("h2",{id:"energy_usage_model"},"ENERGY_USAGE_MODEL"),(0,r.kt)("p",null,"We will now fill in the final placeholders with detailed ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"s."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Base production loads A")," has a load of 7.6 MW with additional 4.1 MW when the field gas injection rate is positive:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: $var.base_production_load_mw\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Gas export compressor system A")," is represented by a consumer system of two simplified compressor train models.\nThe system has defined the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"gas_export_rate_sm3_per_day")," and will run two different\nrate distributions between these two compressor trains. It will first send all rate to the first compressor train\nand nothing to the second ",(0,r.kt)("inlineCode",{parentName:"p"},"RATE_FRACTIONS: [1.0, 0.0]")," and then it will run the same input while distributing equal\nrates to the two compressor trains ",(0,r.kt)("inlineCode",{parentName:"p"},"RATE_FRACTIONS: [0.5, 0.5]"),". The final result will be composed of the first\nsetting that returns a valid result for the compressors.\nSee ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL#compressor-system"},"COMPRESSOR_SYSTEM")," for further details."),(0,r.kt)("p",null,"The model compressor model is defined:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n - NAME: train2_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1.0, 0.0]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Water injection pump system A")," is variable and its energy function is dependent on the field's water\ninjection rate (",(0,r.kt)("inlineCode",{parentName:"p"},"WATER_INJ"),") that is set in the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"water_injection_rate")," as ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM;WATER_INJ"),".\nThe pump only runs when the variables ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"water_injection_condition")," evaluates to true as ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM;WATER_PROD > 0"),".\nThis is when the water injection rate is positive. Fluid density, suction pressure and discharge pressure\nis also defined."),(0,r.kt)("p",null,"This PUMP_SYSTEM behaves much the same as the COMPRESSOR_SYSTEM above.\nSee ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL#pump-system"},"PUMP_SYSTEM")," for further details."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: pump_chart\n - NAME: pump2\n CHART: pump_chart\n - NAME: pump3\n CHART: pump_chart\n - NAME: pump4\n CHART: pump_chart\n FLUID_DENSITY: 1026\n TOTAL_SYSTEM_RATE: $var.water_injection_rate\n CONDITION: $var.water_injection_condition\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0]\n SUCTION_PRESSURES: [3, 3, 3, 3]\n DISCHARGE_PRESSURES: [200, 200, 200, 200]\n CROSSOVER: [2, 0, 0, 0]\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Single pump A")," has an energy function that is dependent on the seawater injection rate, same as the system above.\nIt uses the pump_chart defined in ",(0,r.kt)("a",{parentName:"p",href:"#facility_inputs"},"FACILITY_INPUTS")," above."),(0,r.kt)("p",null,"The pump model is then defined:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.water_injection_condition\n ENERGYFUNCTION: pump_chart\n RATE: 5000\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1026\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Flare A")," is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"flare_a_fuel_rate_sm3_day"),"."),(0,r.kt)("p",null,"The model becomes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_a_fuel_rate_sm3_day\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Base production loads B")," has a load of 7.6 :"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 7.6\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Flare B")," is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"flare_a_fuel_rate_sm3_day"),"."),(0,r.kt)("p",null,"The model becomes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_b_fuel_rate_sm3_day\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"Gas export compressors B")," is a variable fuel consumer whose energy function depends on the field gas production rate (",(0,r.kt)("inlineCode",{parentName:"p"},"GAS_PROD"),") defined\nin the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"gas_export_rate_sm3_per_day")," as ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM;GAS_PROD"),", and put to the condition ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"gas_export_condition")," as ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM;GAS_PROD > 0")),(0,r.kt)("p",null,"The model is specified:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: gasexp\n CONDITION: $var.gas_export_condition\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 200\n")),(0,r.kt)("h2",{id:"full-ecalc-yaml-model"},"Full eCalc YAML model"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"TIME_SERIES:\n - NAME: SIM\n TYPE: DEFAULT\n FILE: base_profile.csv\n\nFACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: gasexp\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n\nFUEL_TYPES:\n - NAME: fuel_gas\n PRICE: 1.5 # NOK/Sm3\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.20 #kg/Sm3\n TAX: 1.51 # NOK/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n TAX: 0.9 # NOK/Sm3\n - NAME: bad_fuel_gas\n PRICE: 0.5 # NOK/Sm3\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 5.0 #kg/Sm3\n TAX: 1.51 # NOK/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n TAX: 0.9 # NOK/Sm3\n\nMODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 10000\n DESIGN_HEAD: 80\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M # M or KJ_PER_KG\n EFFICIENCY: FRACTION\n CURVES:\n FILE: compressor_chart.csv\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n\nVARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n water_injection_rate:\n VALUE: SIM;WATER_INJ\n gas_export_condition:\n VALUE: SIM;GAS_PROD > 0\n base_production_load_mw:\n VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)\n water_injection_condition:\n VALUE: SIM;WATER_PROD >0\n flare_a_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 5000\n 2030-01-01:\n VALUE: 2000\n flare_b_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 10000\n 2030-01-01:\n VALUE: 7000\n\nINSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set A\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: $var.base_production_load_mw\n - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n - NAME: train2_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1.0, 0.0]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: pump_chart\n - NAME: pump2\n CHART: pump_chart\n - NAME: pump3\n CHART: pump_chart\n - NAME: pump4\n CHART: pump_chart\n FLUID_DENSITY: 1026\n TOTAL_SYSTEM_RATE: $var.water_injection_rate\n CONDITION: $var.water_injection_condition\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0]\n SUCTION_PRESSURES: [3, 3, 3, 3]\n DISCHARGE_PRESSURES: [200, 200, 200, 200]\n CROSSOVER: [2, 0, 0, 0]\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.water_injection_condition\n ENERGYFUNCTION: pump_chart\n RATE: 5000\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1026\n FUELCONSUMERS:\n - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_a_fuel_rate_sm3_day\n\n - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set B\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 7.6\n FUELCONSUMERS:\n - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_b_fuel_rate_sm3_day\n - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: gasexp\n CONDITION: $var.gas_export_condition\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 200\n")),(0,r.kt)("h3",{id:"input-files"},"Input files"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="compressor_chart.csv"',title:'"compressor_chart.csv"'},"RATE, HEAD, EFFICIENCY, SPEED\n# [m3/h], [m], [frac], [rpm]\n3000, 8500, 0.72, 7500\n3500, 8000, 0.75, 7500\n4000, 7500, 0.74, 7500\n4500, 6500, 0.70, 7500\n4100, 16500, 0.72, 10500\n4600, 16000, 0.73, 10500\n5000, 15500, 0.74, 10500\n5500, 14500, 0.74, 10500\n6000, 13500, 0.72, 10500\n6500, 12000, 0.70, 10500\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="compressor_sampled.csv"',title:'"compressor_sampled.csv"'},"RATE, FUEL\n0, 0\n0.01, 100\n10, 500\n20, 1200\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="genset.csv"',title:'"genset.csv"'},"POWER, FUEL\n# [MW], [Sm3/d]\n0, 0\n0.1, 75000\n10, 80000\n20, 100000\n50, 500000\n100, 1000000\n\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="pump_chart.csv"',title:'"pump_chart.csv"'},"RATE, HEAD, EFFICIENCY, SPEED\n# [m3/h], [m], [%], [rpm] \n250, 2350, 50, 10000\n300, 2300, 55, 10000\n350, 2250, 60, 10000\n400, 2200, 70, 10000\n450, 2150, 75, 10000\n500, 2100, 80, 10000\n550, 2050, 75, 10000\n600, 2000, 70, 10000\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="base_profile.csv"',title:'"base_profile.csv"'},"DATE, OIL_PROD, WATER_PROD, GAS_PROD, WATER_INJ, GAS_LIFT\n01.01.2020, 1000, 20000, 4000000, 30000, 1200000\n01.01.2021, 1000, 20000, 4000000, 30000, 1200000\n01.01.2022, 1000, 20000, 4000000, 30000, 1200000\n01.01.2023, 2500, 21000, 4000000, 30000, 1200000\n01.01.2024, 3000, 22000, 4500000, 28000, 1300000\n01.01.2025, 3500, 23000, 5000000, 26000, 1350000\n01.01.2026, 4000, 24000, 5500000, 25000, 1400000\n01.01.2027, 4000, 25000, 6000000, 24000, 1400000\n01.01.2028, 4000, 20000, 6000000, 23000, 1400000\n01.01.2029, 5000, 20000, 5500000, 22000, 1350000\n01.01.2030, 9000, 20000, 5000000, 21000, 1300000\n01.01.2031, 5000, 20000, 3000000, 22000, 1300000\n01.01.2032, 4000, 22100, 3000000, 23000, 2000000\n01.01.2034, 1200, 25000, 1000000, 21000, 2000000\n01.01.2035, 1100, 25000, 1000000, 20000, 1500000\n01.01.2036, 1000, 22000, 500000, 18000, 1400000\n01.01.2037, 900, 20000, 500000, 17000, 1400000\n01.01.2038, 800, 18000, 500000, 17000, 1400000\n01.01.2039, 700, 18000, 200000, 17000, 1400000\n01.01.2040, 600, 10000, 200000, 15000, 1400000\n01.01.2041, 0, 0, 0, 0, 0\n")))}_.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2855.9a4f1aa2.js b/assets/js/2855.9a4f1aa2.js new file mode 100644 index 0000000000..81c1e540fb --- /dev/null +++ b/assets/js/2855.9a4f1aa2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2855],{2855:(t,e,a)=>{a.d(e,{diagram:()=>h});var r=a(5001),i=a(9373),n=a(2494),d=a(5625),o=a(44),s=a(7657),l=a(1188);a(7856),a(7484),a(7967);let p={};const c=function(t){const e=Object.entries(p).find((e=>e[1].label===t));if(e)return e[0]},g={draw:function(t,e,a,r){const g=(0,o.g)().class;p={},o.l.info("Rendering diagram "+t);const h=(0,o.g)().securityLevel;let f;"sandbox"===h&&(f=(0,i.Ys)("#i"+e));const u="sandbox"===h?(0,i.Ys)(f.nodes()[0].contentDocument.body):(0,i.Ys)("body"),x=u.select(`[id='${e}']`);var y;(y=x).append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),y.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),y.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),y.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),y.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),y.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),y.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),y.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z");const m=new d.k({multigraph:!0});m.setGraph({isMultiGraph:!0}),m.setDefaultEdgeLabel((function(){return{}}));const b=r.db.getClasses(),w=Object.keys(b);for(const i of w){const t=b[i],e=s.s.drawClass(x,t,g,r);p[e.id]=e,m.setNode(e.id,e),o.l.info("Org height: "+e.height)}r.db.getRelations().forEach((function(t){o.l.info("tjoho"+c(t.id1)+c(t.id2)+JSON.stringify(t)),m.setEdge(c(t.id1),c(t.id2),{relation:t},t.title||"DEFAULT")}));r.db.getNotes().forEach((function(t){o.l.debug(`Adding note: ${JSON.stringify(t)}`);const e=s.s.drawNote(x,t,g,r);p[e.id]=e,m.setNode(e.id,e),t.class&&t.class in b&&m.setEdge(t.id,c(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,n.bK)(m),m.nodes().forEach((function(t){void 0!==t&&void 0!==m.node(t)&&(o.l.debug("Node "+t+": "+JSON.stringify(m.node(t))),u.select("#"+(r.db.lookUpDomId(t)||t)).attr("transform","translate("+(m.node(t).x-m.node(t).width/2)+","+(m.node(t).y-m.node(t).height/2)+" )"))})),m.edges().forEach((function(t){void 0!==t&&void 0!==m.edge(t)&&(o.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(m.edge(t))),s.s.drawEdge(x,m.edge(t),m.edge(t).relation,g,r))}));const k=x.node().getBBox(),v=k.width+40,E=k.height+40;(0,l.k)(x,E,v,g.useMaxWidth);const L=`${k.x-20} ${k.y-20} ${v} ${E}`;o.l.debug(`viewBox ${L}`),x.attr("viewBox",L)}},h={parser:r.p,db:r.d,renderer:g,styles:r.s,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,r.d.clear()}}},7657:(t,e,a)=>{a.d(e,{p:()=>o,s:()=>h});var r=a(9373),i=a(1188),n=a(44);let d=0;const o=function(t){let e=t.match(/^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/),a=t.match(/^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/);return e&&!a?s(e):a?l(a):p(t)},s=function(t){let e="",a="";try{let r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",d=t[3]?(0,n.z)(t[3].trim()):"",o=t[4]?t[4].trim():"",s=t[5]?t[5].trim():"";a=r+i+d+" "+o,e=g(s)}catch(r){a=t}return{displayText:a,cssStyle:e}},l=function(t){let e="",a="";try{let r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",d=t[3]?(0,n.z)(t[3].trim()):"",o=t[4]?t[4].trim():"";a=r+i+"("+d+")"+(t[5]?" : "+(0,n.z)(t[5]).trim():""),e=g(o)}catch(r){a=t}return{displayText:a,cssStyle:e}},p=function(t){let e="",a="",r="",i=t.indexOf("("),d=t.indexOf(")");if(i>1&&d>i&&d<=t.length){let o="",s="",l=t.substring(0,1);l.match(/\w/)?s=t.substring(0,i).trim():(l.match(/[#+~-]/)&&(o=l),s=t.substring(1,i).trim());const p=t.substring(i+1,d);t.substring(d+1,1),a=g(t.substring(d+1,d+2)),e=o+s+"("+(0,n.z)(p.trim())+")",d<t.length&&(r=t.substring(d+2).trim(),""!==r&&(r=" : "+(0,n.z)(r),e+=r))}else e=(0,n.z)(t);return{displayText:e,cssStyle:a}},c=function(t,e,a,r){let i=o(e);const n=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&n.attr("style",i.cssStyle),a||n.attr("dy",r.textHeight)},g=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},h={drawClass:function(t,e,a,r){n.l.debug("Rendering class ",e,a);const i=e.id,d={id:i,label:e.id,width:0,height:0},o=t.append("g").attr("id",r.db.lookUpDomId(i)).attr("class","classGroup");let s;s=e.link?o.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",a.textHeight+a.padding).attr("x",0):o.append("text").attr("y",a.textHeight+a.padding).attr("x",0);let l=!0;e.annotations.forEach((function(t){const e=s.append("tspan").text("\xab"+t+"\xbb");l||e.attr("dy",a.textHeight),l=!1}));let p=e.id;void 0!==e.type&&""!==e.type&&(p+="<"+e.type+">");const g=s.append("tspan").text(p).attr("class","title");l||g.attr("dy",a.textHeight);const h=s.node().getBBox().height,f=o.append("line").attr("x1",0).attr("y1",a.padding+h+a.dividerMargin/2).attr("y2",a.padding+h+a.dividerMargin/2),u=o.append("text").attr("x",a.padding).attr("y",h+a.dividerMargin+a.textHeight).attr("fill","white").attr("class","classText");l=!0,e.members.forEach((function(t){c(u,t,l,a),l=!1}));const x=u.node().getBBox(),y=o.append("line").attr("x1",0).attr("y1",a.padding+h+a.dividerMargin+x.height).attr("y2",a.padding+h+a.dividerMargin+x.height),m=o.append("text").attr("x",a.padding).attr("y",h+2*a.dividerMargin+x.height+a.textHeight).attr("fill","white").attr("class","classText");l=!0,e.methods.forEach((function(t){c(m,t,l,a),l=!1}));const b=o.node().getBBox();var w=" ";e.cssClasses.length>0&&(w+=e.cssClasses.join(" "));const k=o.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",b.width+2*a.padding).attr("height",b.height+a.padding+.5*a.dividerMargin).attr("class",w).node().getBBox().width;return s.node().childNodes.forEach((function(t){t.setAttribute("x",(k-t.getBBox().width)/2)})),e.tooltip&&s.insert("title").text(e.tooltip),f.attr("x2",k),y.attr("x2",k),d.width=k,d.height=b.height+a.padding+.5*a.dividerMargin,d},drawEdge:function(t,e,a,o,s){const l=function(t){switch(t){case s.db.relationType.AGGREGATION:return"aggregation";case s.db.relationType.EXTENSION:return"extension";case s.db.relationType.COMPOSITION:return"composition";case s.db.relationType.DEPENDENCY:return"dependency";case s.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const p=e.points,c=(0,r.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(r.$0Z),g=t.append("path").attr("d",c(p)).attr("id","edge"+d).attr("class","relation");let h,f,u="";o.arrowMarkerAbsolute&&(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,u=u.replace(/\(/g,"\\("),u=u.replace(/\)/g,"\\)")),1==a.relation.lineType&&g.attr("class","relation dashed-line"),10==a.relation.lineType&&g.attr("class","relation dotted-line"),"none"!==a.relation.type1&&g.attr("marker-start","url("+u+"#"+l(a.relation.type1)+"Start)"),"none"!==a.relation.type2&&g.attr("marker-end","url("+u+"#"+l(a.relation.type2)+"End)");const x=e.points.length;let y,m,b,w,k=i.u.calcLabelPosition(e.points);if(h=k.x,f=k.y,x%2!=0&&x>1){let t=i.u.calcCardinalityPosition("none"!==a.relation.type1,e.points,e.points[0]),r=i.u.calcCardinalityPosition("none"!==a.relation.type2,e.points,e.points[x-1]);n.l.debug("cardinality_1_point "+JSON.stringify(t)),n.l.debug("cardinality_2_point "+JSON.stringify(r)),y=t.x,m=t.y,b=r.x,w=r.y}if(void 0!==a.title){const e=t.append("g").attr("class","classLabel"),r=e.append("text").attr("class","label").attr("x",h).attr("y",f).attr("fill","red").attr("text-anchor","middle").text(a.title);window.label=r;const i=r.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",i.x-o.padding/2).attr("y",i.y-o.padding/2).attr("width",i.width+o.padding).attr("height",i.height+o.padding)}if(n.l.info("Rendering relation "+JSON.stringify(a)),void 0!==a.relationTitle1&&"none"!==a.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",y).attr("y",m).attr("fill","black").attr("font-size","6").text(a.relationTitle1)}if(void 0!==a.relationTitle2&&"none"!==a.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",b).attr("y",w).attr("fill","black").attr("font-size","6").text(a.relationTitle2)}d++},drawNote:function(t,e,a,r){n.l.debug("Rendering note ",e,a);const i=e.id,d={id:i,text:e.text,width:0,height:0},o=t.append("g").attr("id",i).attr("class","classGroup");let s=o.append("text").attr("y",a.textHeight+a.padding).attr("x",0);const l=JSON.parse(`"${e.text}"`).split("\n");l.forEach((function(t){n.l.debug(`Adding line: ${t}`),s.append("tspan").text(t).attr("class","title").attr("dy",a.textHeight)}));const p=o.node().getBBox(),c=o.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",p.width+2*a.padding).attr("height",p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin).node().getBBox().width;return s.node().childNodes.forEach((function(t){t.setAttribute("x",(c-t.getBBox().width)/2)})),d.width=c,d.height=p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin,d},parseMember:o}}}]); \ No newline at end of file diff --git a/assets/js/2899.8d82b451.js b/assets/js/2899.8d82b451.js new file mode 100644 index 0000000000..2f18775a6d --- /dev/null +++ b/assets/js/2899.8d82b451.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2899],{2899:(t,e,a)=>{a.d(e,{diagram:()=>st});var i=a(3047),r=a(44),n=a(9373),s=a(1188),o=a(7967),c=(a(7856),a(7484),function(){var t=function(t,e,a,i){for(a=a||{},i=t.length;i--;a[t[i]]=e);return a},e=[1,2],a=[1,3],i=[1,5],r=[1,7],n=[2,5],s=[1,15],o=[1,17],c=[1,19],l=[1,21],h=[1,22],d=[1,23],p=[1,29],u=[1,30],g=[1,31],m=[1,32],x=[1,33],y=[1,34],b=[1,35],f=[1,36],T=[1,37],E=[1,38],w=[1,39],_=[1,40],v=[1,42],k=[1,43],L=[1,45],P=[1,46],I=[1,47],N=[1,48],M=[1,49],A=[1,50],S=[1,53],O=[1,4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,52,53,54,56,57,62,63,64,65,73,83],D=[4,5,21,54,56],R=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,54,56,57,62,63,64,65,73,83],C=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,53,54,56,57,62,63,64,65,73,83],Y=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,52,54,56,57,62,63,64,65,73,83],$=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,54,56,57,62,63,64,65,73,83],B=[71,72,73],F=[1,125],V=[1,4,5,7,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,52,53,54,56,57,62,63,64,65,73,83],W={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,box_section:11,box_line:12,participant_statement:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,box:19,restOfLine:20,end:21,signal:22,autonumber:23,NUM:24,off:25,activate:26,actor:27,deactivate:28,note_statement:29,links_statement:30,link_statement:31,properties_statement:32,details_statement:33,title:34,legacy_title:35,acc_title:36,acc_title_value:37,acc_descr:38,acc_descr_value:39,acc_descr_multiline_value:40,loop:41,rect:42,opt:43,alt:44,else_sections:45,par:46,par_sections:47,critical:48,option_sections:49,break:50,option:51,and:52,else:53,participant:54,AS:55,participant_actor:56,note:57,placement:58,text2:59,over:60,actor_pair:61,links:62,link:63,properties:64,details:65,spaceList:66,",":67,left_of:68,right_of:69,signaltype:70,"+":71,"-":72,ACTOR:73,SOLID_OPEN_ARROW:74,DOTTED_OPEN_ARROW:75,SOLID_ARROW:76,DOTTED_ARROW:77,SOLID_CROSS:78,DOTTED_CROSS:79,SOLID_POINT:80,DOTTED_POINT:81,TXT:82,open_directive:83,type_directive:84,arg_directive:85,close_directive:86,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",17:":",19:"box",20:"restOfLine",21:"end",23:"autonumber",24:"NUM",25:"off",26:"activate",28:"deactivate",34:"title",35:"legacy_title",36:"acc_title",37:"acc_title_value",38:"acc_descr",39:"acc_descr_value",40:"acc_descr_multiline_value",41:"loop",42:"rect",43:"opt",44:"alt",46:"par",48:"critical",50:"break",51:"option",52:"and",53:"else",54:"participant",55:"AS",56:"participant_actor",57:"note",60:"over",62:"links",63:"link",64:"properties",65:"details",67:",",68:"left_of",69:"right_of",71:"+",72:"-",73:"ACTOR",74:"SOLID_OPEN_ARROW",75:"DOTTED_OPEN_ARROW",76:"SOLID_ARROW",77:"DOTTED_ARROW",78:"SOLID_CROSS",79:"DOTTED_CROSS",80:"SOLID_POINT",81:"DOTTED_POINT",82:"TXT",83:"open_directive",84:"type_directive",85:"arg_directive",86:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[11,0],[11,2],[12,2],[12,1],[12,1],[6,4],[6,6],[10,1],[10,4],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[49,1],[49,4],[47,1],[47,4],[45,1],[45,4],[13,5],[13,3],[13,5],[13,3],[29,4],[29,4],[30,3],[31,3],[32,3],[33,3],[66,2],[66,1],[61,3],[61,1],[58,1],[58,1],[22,5],[22,5],[22,4],[27,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[59,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(t,e,a,i,r,n,s){var o=n.length-1;switch(r){case 4:return i.apply(n[o]),n[o];case 5:case 10:case 9:case 14:this.$=[];break;case 6:case 11:n[o-1].push(n[o]),this.$=n[o-1];break;case 7:case 8:case 12:case 13:case 63:this.$=n[o];break;case 18:n[o-1].unshift({type:"boxStart",boxData:i.parseBoxData(n[o-2])}),n[o-1].push({type:"boxEnd",boxText:n[o-2]}),this.$=n[o-1];break;case 20:this.$={type:"sequenceIndex",sequenceIndex:Number(n[o-2]),sequenceIndexStep:Number(n[o-1]),sequenceVisible:!0,signalType:i.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceIndex:Number(n[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:i.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:i.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:i.LINETYPE.AUTONUMBER};break;case 24:this.$={type:"activeStart",signalType:i.LINETYPE.ACTIVE_START,actor:n[o-1]};break;case 25:this.$={type:"activeEnd",signalType:i.LINETYPE.ACTIVE_END,actor:n[o-1]};break;case 31:i.setDiagramTitle(n[o].substring(6)),this.$=n[o].substring(6);break;case 32:i.setDiagramTitle(n[o].substring(7)),this.$=n[o].substring(7);break;case 33:this.$=n[o].trim(),i.setAccTitle(this.$);break;case 34:case 35:this.$=n[o].trim(),i.setAccDescription(this.$);break;case 36:n[o-1].unshift({type:"loopStart",loopText:i.parseMessage(n[o-2]),signalType:i.LINETYPE.LOOP_START}),n[o-1].push({type:"loopEnd",loopText:n[o-2],signalType:i.LINETYPE.LOOP_END}),this.$=n[o-1];break;case 37:n[o-1].unshift({type:"rectStart",color:i.parseMessage(n[o-2]),signalType:i.LINETYPE.RECT_START}),n[o-1].push({type:"rectEnd",color:i.parseMessage(n[o-2]),signalType:i.LINETYPE.RECT_END}),this.$=n[o-1];break;case 38:n[o-1].unshift({type:"optStart",optText:i.parseMessage(n[o-2]),signalType:i.LINETYPE.OPT_START}),n[o-1].push({type:"optEnd",optText:i.parseMessage(n[o-2]),signalType:i.LINETYPE.OPT_END}),this.$=n[o-1];break;case 39:n[o-1].unshift({type:"altStart",altText:i.parseMessage(n[o-2]),signalType:i.LINETYPE.ALT_START}),n[o-1].push({type:"altEnd",signalType:i.LINETYPE.ALT_END}),this.$=n[o-1];break;case 40:n[o-1].unshift({type:"parStart",parText:i.parseMessage(n[o-2]),signalType:i.LINETYPE.PAR_START}),n[o-1].push({type:"parEnd",signalType:i.LINETYPE.PAR_END}),this.$=n[o-1];break;case 41:n[o-1].unshift({type:"criticalStart",criticalText:i.parseMessage(n[o-2]),signalType:i.LINETYPE.CRITICAL_START}),n[o-1].push({type:"criticalEnd",signalType:i.LINETYPE.CRITICAL_END}),this.$=n[o-1];break;case 42:n[o-1].unshift({type:"breakStart",breakText:i.parseMessage(n[o-2]),signalType:i.LINETYPE.BREAK_START}),n[o-1].push({type:"breakEnd",optText:i.parseMessage(n[o-2]),signalType:i.LINETYPE.BREAK_END}),this.$=n[o-1];break;case 45:this.$=n[o-3].concat([{type:"option",optionText:i.parseMessage(n[o-1]),signalType:i.LINETYPE.CRITICAL_OPTION},n[o]]);break;case 47:this.$=n[o-3].concat([{type:"and",parText:i.parseMessage(n[o-1]),signalType:i.LINETYPE.PAR_AND},n[o]]);break;case 49:this.$=n[o-3].concat([{type:"else",altText:i.parseMessage(n[o-1]),signalType:i.LINETYPE.ALT_ELSE},n[o]]);break;case 50:n[o-3].type="addParticipant",n[o-3].description=i.parseMessage(n[o-1]),this.$=n[o-3];break;case 51:n[o-1].type="addParticipant",this.$=n[o-1];break;case 52:n[o-3].type="addActor",n[o-3].description=i.parseMessage(n[o-1]),this.$=n[o-3];break;case 53:n[o-1].type="addActor",this.$=n[o-1];break;case 54:this.$=[n[o-1],{type:"addNote",placement:n[o-2],actor:n[o-1].actor,text:n[o]}];break;case 55:n[o-2]=[].concat(n[o-1],n[o-1]).slice(0,2),n[o-2][0]=n[o-2][0].actor,n[o-2][1]=n[o-2][1].actor,this.$=[n[o-1],{type:"addNote",placement:i.PLACEMENT.OVER,actor:n[o-2].slice(0,2),text:n[o]}];break;case 56:this.$=[n[o-1],{type:"addLinks",actor:n[o-1].actor,text:n[o]}];break;case 57:this.$=[n[o-1],{type:"addALink",actor:n[o-1].actor,text:n[o]}];break;case 58:this.$=[n[o-1],{type:"addProperties",actor:n[o-1].actor,text:n[o]}];break;case 59:this.$=[n[o-1],{type:"addDetails",actor:n[o-1].actor,text:n[o]}];break;case 62:this.$=[n[o-2],n[o]];break;case 64:this.$=i.PLACEMENT.LEFTOF;break;case 65:this.$=i.PLACEMENT.RIGHTOF;break;case 66:this.$=[n[o-4],n[o-1],{type:"addMessage",from:n[o-4].actor,to:n[o-1].actor,signalType:n[o-3],msg:n[o]},{type:"activeStart",signalType:i.LINETYPE.ACTIVE_START,actor:n[o-1]}];break;case 67:this.$=[n[o-4],n[o-1],{type:"addMessage",from:n[o-4].actor,to:n[o-1].actor,signalType:n[o-3],msg:n[o]},{type:"activeEnd",signalType:i.LINETYPE.ACTIVE_END,actor:n[o-4]}];break;case 68:this.$=[n[o-3],n[o-1],{type:"addMessage",from:n[o-3].actor,to:n[o-1].actor,signalType:n[o-2],msg:n[o]}];break;case 69:this.$={type:"addParticipant",actor:n[o]};break;case 70:this.$=i.LINETYPE.SOLID_OPEN;break;case 71:this.$=i.LINETYPE.DOTTED_OPEN;break;case 72:this.$=i.LINETYPE.SOLID;break;case 73:this.$=i.LINETYPE.DOTTED;break;case 74:this.$=i.LINETYPE.SOLID_CROSS;break;case 75:this.$=i.LINETYPE.DOTTED_CROSS;break;case 76:this.$=i.LINETYPE.SOLID_POINT;break;case 77:this.$=i.LINETYPE.DOTTED_POINT;break;case 78:this.$=i.parseMessage(n[o].trim().substring(1));break;case 79:i.parseDirective("%%{","open_directive");break;case 80:i.parseDirective(n[o],"type_directive");break;case 81:n[o]=n[o].trim().replace(/'/g,'"'),i.parseDirective(n[o],"arg_directive");break;case 82:i.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:e,5:a,6:4,7:i,14:6,83:r},{1:[3]},{3:8,4:e,5:a,6:4,7:i,14:6,83:r},{3:9,4:e,5:a,6:4,7:i,14:6,83:r},{3:10,4:e,5:a,6:4,7:i,14:6,83:r},t([1,4,5,19,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,54,56,57,62,63,64,65,73,83],n,{8:11}),{15:12,84:[1,13]},{84:[2,79]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:s,5:o,6:41,9:14,10:16,13:18,14:6,19:c,22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},{16:51,17:[1,52],86:S},t([17,86],[2,80]),t(O,[2,6]),{6:41,10:54,13:18,14:6,19:c,22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},t(O,[2,8]),t(O,[2,9]),t(O,[2,17]),{20:[1,55]},{5:[1,56]},{5:[1,59],24:[1,57],25:[1,58]},{27:60,73:A},{27:61,73:A},{5:[1,62]},{5:[1,63]},{5:[1,64]},{5:[1,65]},{5:[1,66]},t(O,[2,31]),t(O,[2,32]),{37:[1,67]},{39:[1,68]},t(O,[2,35]),{20:[1,69]},{20:[1,70]},{20:[1,71]},{20:[1,72]},{20:[1,73]},{20:[1,74]},{20:[1,75]},t(O,[2,43]),{27:76,73:A},{27:77,73:A},{70:78,74:[1,79],75:[1,80],76:[1,81],77:[1,82],78:[1,83],79:[1,84],80:[1,85],81:[1,86]},{58:87,60:[1,88],68:[1,89],69:[1,90]},{27:91,73:A},{27:92,73:A},{27:93,73:A},{27:94,73:A},t([5,55,67,74,75,76,77,78,79,80,81,82],[2,69]),{5:[1,95]},{18:96,85:[1,97]},{5:[2,82]},t(O,[2,7]),t(D,[2,10],{11:98}),t(O,[2,19]),{5:[1,100],24:[1,99]},{5:[1,101]},t(O,[2,23]),{5:[1,102]},{5:[1,103]},t(O,[2,26]),t(O,[2,27]),t(O,[2,28]),t(O,[2,29]),t(O,[2,30]),t(O,[2,33]),t(O,[2,34]),t(R,n,{8:104}),t(R,n,{8:105}),t(R,n,{8:106}),t(C,n,{45:107,8:108}),t(Y,n,{47:109,8:110}),t($,n,{49:111,8:112}),t(R,n,{8:113}),{5:[1,115],55:[1,114]},{5:[1,117],55:[1,116]},{27:120,71:[1,118],72:[1,119],73:A},t(B,[2,70]),t(B,[2,71]),t(B,[2,72]),t(B,[2,73]),t(B,[2,74]),t(B,[2,75]),t(B,[2,76]),t(B,[2,77]),{27:121,73:A},{27:123,61:122,73:A},{73:[2,64]},{73:[2,65]},{59:124,82:F},{59:126,82:F},{59:127,82:F},{59:128,82:F},t(V,[2,15]),{16:129,86:S},{86:[2,81]},{4:[1,132],5:[1,134],12:131,13:133,21:[1,130],54:v,56:k},{5:[1,135]},t(O,[2,21]),t(O,[2,22]),t(O,[2,24]),t(O,[2,25]),{4:s,5:o,6:41,9:14,10:16,13:18,14:6,19:c,21:[1,136],22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},{4:s,5:o,6:41,9:14,10:16,13:18,14:6,19:c,21:[1,137],22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},{4:s,5:o,6:41,9:14,10:16,13:18,14:6,19:c,21:[1,138],22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},{21:[1,139]},{4:s,5:o,6:41,9:14,10:16,13:18,14:6,19:c,21:[2,48],22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,53:[1,140],54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},{21:[1,141]},{4:s,5:o,6:41,9:14,10:16,13:18,14:6,19:c,21:[2,46],22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,52:[1,142],54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},{21:[1,143]},{4:s,5:o,6:41,9:14,10:16,13:18,14:6,19:c,21:[2,44],22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,51:[1,144],54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},{4:s,5:o,6:41,9:14,10:16,13:18,14:6,19:c,21:[1,145],22:20,23:l,26:h,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:u,36:g,38:m,40:x,41:y,42:b,43:f,44:T,46:E,48:w,50:_,54:v,56:k,57:L,62:P,63:I,64:N,65:M,73:A,83:r},{20:[1,146]},t(O,[2,51]),{20:[1,147]},t(O,[2,53]),{27:148,73:A},{27:149,73:A},{59:150,82:F},{59:151,82:F},{59:152,82:F},{67:[1,153],82:[2,63]},{5:[2,56]},{5:[2,78]},{5:[2,57]},{5:[2,58]},{5:[2,59]},{5:[1,154]},t(O,[2,18]),t(D,[2,11]),{13:155,54:v,56:k},t(D,[2,13]),t(D,[2,14]),t(O,[2,20]),t(O,[2,36]),t(O,[2,37]),t(O,[2,38]),t(O,[2,39]),{20:[1,156]},t(O,[2,40]),{20:[1,157]},t(O,[2,41]),{20:[1,158]},t(O,[2,42]),{5:[1,159]},{5:[1,160]},{59:161,82:F},{59:162,82:F},{5:[2,68]},{5:[2,54]},{5:[2,55]},{27:163,73:A},t(V,[2,16]),t(D,[2,12]),t(C,n,{8:108,45:164}),t(Y,n,{8:110,47:165}),t($,n,{8:112,49:166}),t(O,[2,50]),t(O,[2,52]),{5:[2,66]},{5:[2,67]},{82:[2,62]},{21:[2,49]},{21:[2,47]},{21:[2,45]}],defaultActions:{7:[2,79],8:[2,1],9:[2,2],10:[2,3],53:[2,82],89:[2,64],90:[2,65],97:[2,81],124:[2,56],125:[2,78],126:[2,57],127:[2,58],128:[2,59],150:[2,68],151:[2,54],152:[2,55],161:[2,66],162:[2,67],163:[2,62],164:[2,49],165:[2,47],166:[2,45]},parseError:function(t,e){if(!e.recoverable){var a=new Error(t);throw a.hash=e,a}this.trace(t)},parse:function(t){var e=this,a=[0],i=[],r=[null],n=[],s=this.table,o="",c=0,l=0,h=1,d=n.slice.call(arguments,1),p=Object.create(this.lexer),u={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(u.yy[g]=this.yy[g]);p.setInput(t,u.yy),u.yy.lexer=p,u.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;n.push(m);var x=p.options&&p.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,b,f,T,E,w,_,v,k,L={};;){if(b=a[a.length-1],this.defaultActions[b]?f=this.defaultActions[b]:(null==y&&(k=void 0,"number"!=typeof(k=i.pop()||p.lex()||h)&&(k instanceof Array&&(k=(i=k).pop()),k=e.symbols_[k]||k),y=k),f=s[b]&&s[b][y]),void 0===f||!f.length||!f[0]){var P="";for(E in v=[],s[b])this.terminals_[E]&&E>2&&v.push("'"+this.terminals_[E]+"'");P=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(c+1)+": Unexpected "+(y==h?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(P,{text:p.match,token:this.terminals_[y]||y,line:p.yylineno,loc:m,expected:v})}if(f[0]instanceof Array&&f.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+y);switch(f[0]){case 1:a.push(y),r.push(p.yytext),n.push(p.yylloc),a.push(f[1]),y=null,l=p.yyleng,o=p.yytext,c=p.yylineno,m=p.yylloc;break;case 2:if(w=this.productions_[f[1]][1],L.$=r[r.length-w],L._$={first_line:n[n.length-(w||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(w||1)].first_column,last_column:n[n.length-1].last_column},x&&(L._$.range=[n[n.length-(w||1)].range[0],n[n.length-1].range[1]]),void 0!==(T=this.performAction.apply(L,[o,l,c,u.yy,f[1],r,n].concat(d))))return T;w&&(a=a.slice(0,-1*w*2),r=r.slice(0,-1*w),n=n.slice(0,-1*w)),a.push(this.productions_[f[1]][0]),r.push(L.$),n.push(L._$),_=s[a[a.length-2]][a[a.length-1]],a.push(_);break;case 3:return!0}}return!0}},q={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,a=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===i.length?this.yylloc.first_column:0)+i[i.length-a.length].length-a[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var a,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],a=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a)return a;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,a,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;n<r.length;n++)if((a=this._input.match(this.rules[r[n]]))&&(!e||a[0].length>e[0].length)){if(e=a,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(a,r[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,a,i){switch(a){case 0:return this.begin("open_directive"),83;case 1:return this.begin("type_directive"),84;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),86;case 4:return 85;case 5:case 53:case 66:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return 24;case 12:return this.begin("LINE"),19;case 13:return this.begin("ID"),54;case 14:return this.begin("ID"),56;case 15:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),73;case 16:return this.popState(),this.popState(),this.begin("LINE"),55;case 17:return this.popState(),this.popState(),5;case 18:return this.begin("LINE"),41;case 19:return this.begin("LINE"),42;case 20:return this.begin("LINE"),43;case 21:return this.begin("LINE"),44;case 22:return this.begin("LINE"),53;case 23:return this.begin("LINE"),46;case 24:return this.begin("LINE"),52;case 25:return this.begin("LINE"),48;case 26:return this.begin("LINE"),51;case 27:return this.begin("LINE"),50;case 28:return this.popState(),20;case 29:return 21;case 30:return 68;case 31:return 69;case 32:return 62;case 33:return 63;case 34:return 64;case 35:return 65;case 36:return 60;case 37:return 57;case 38:return this.begin("ID"),26;case 39:return this.begin("ID"),28;case 40:return 34;case 41:return 35;case 42:return this.begin("acc_title"),36;case 43:return this.popState(),"acc_title_value";case 44:return this.begin("acc_descr"),38;case 45:return this.popState(),"acc_descr_value";case 46:this.begin("acc_descr_multiline");break;case 47:this.popState();break;case 48:return"acc_descr_multiline_value";case 49:return 7;case 50:return 23;case 51:return 25;case 52:return 67;case 54:return e.yytext=e.yytext.trim(),73;case 55:return 76;case 56:return 77;case 57:return 74;case 58:return 75;case 59:return 78;case 60:return 79;case 61:return 80;case 62:return 81;case 63:return 82;case 64:return 71;case 65:return 72;case 67:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[47,48],inclusive:!1},acc_descr:{rules:[45],inclusive:!1},acc_title:{rules:[43],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,15],inclusive:!1},ALIAS:{rules:[7,8,16,17],inclusive:!1},LINE:{rules:[7,8,28],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,13,14,18,19,20,21,22,23,24,25,26,27,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,46,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};function z(){this.yy={}}return W.lexer=q,z.prototype=W,W.Parser=z,new z}());c.parser=c;const l=c;let h,d,p,u={},g=[],m=[],x=!1;const y=function(t,e,a,i){let r=p;const n=u[t];if(n){if(p&&n.box&&p!==n.box)throw new Error("A same participant should only be defined in one Box: "+n.name+" can't be in '"+n.box.name+"' and in '"+p.name+"' at the same time.");if(r=n.box?n.box:p,n.box=r,n&&e===n.name&&null==a)return}null!=a&&null!=a.text||(a={text:e,wrap:null,type:i}),null!=i&&null!=a.text||(a={text:e,wrap:null,type:i}),u[t]={box:r,name:e,description:a.text,wrap:void 0===a.wrap&&T()||!!a.wrap,prevActor:h,links:{},properties:{},actorCnt:null,rectData:null,type:i||"participant"},h&&u[h]&&(u[h].nextActor=t),p&&p.actorKeys.push(t),h=t},b=function(t,e,a={text:void 0,wrap:void 0},i){if(i===E.ACTIVE_END){if((t=>{let e,a=0;for(e=0;e<m.length;e++)m[e].type===E.ACTIVE_START&&m[e].from.actor===t&&a++,m[e].type===E.ACTIVE_END&&m[e].from.actor===t&&a--;return a})(t.actor)<1){let e=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw e.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},e}}return m.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&T()||!!a.wrap,type:i}),!0},f=function(t){return u[t]},T=()=>void 0!==d?d:(0,r.g)().sequence.wrap,E={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31},w=function(t,e,a){a.text,void 0===a.wrap&&T()||a.wrap;const i=[].concat(t,t);m.push({from:i[0],to:i[1],message:a.text,wrap:void 0===a.wrap&&T()||!!a.wrap,type:E.NOTE,placement:e})},_=function(t,e){const a=f(t);try{let t=(0,r.b)(e.text,(0,r.g)());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");v(a,JSON.parse(t))}catch(i){r.l.error("error while parsing actor link text",i)}};function v(t,e){if(null==t.links)t.links=e;else for(let a in e)t.links[a]=e[a]}const k=function(t,e){const a=f(t);try{let t=(0,r.b)(e.text,(0,r.g)());L(a,JSON.parse(t))}catch(i){r.l.error("error while parsing actor properties text",i)}};function L(t,e){if(null==t.properties)t.properties=e;else for(let a in e)t.properties[a]=e[a]}const P=function(t,e){const a=f(t),i=document.getElementById(e.text);try{const t=i.innerHTML,e=JSON.parse(t);e.properties&&L(a,e.properties),e.links&&v(a,e.links)}catch(n){r.l.error("error while parsing actor details text",n)}},I=function(t){if(Array.isArray(t))t.forEach((function(t){I(t)}));else switch(t.type){case"sequenceIndex":m.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":y(t.actor,t.actor,t.description,"participant");break;case"addActor":y(t.actor,t.actor,t.description,"actor");break;case"activeStart":case"activeEnd":b(t.actor,void 0,void 0,t.signalType);break;case"addNote":w(t.actor,t.placement,t.text);break;case"addLinks":_(t.actor,t.text);break;case"addALink":!function(t,e){const a=f(t);try{const t={};let o=(0,r.b)(e.text,(0,r.g)());var i=o.indexOf("@");o=o.replace(/&/g,"&"),o=o.replace(/=/g,"=");var n=o.slice(0,i-1).trim(),s=o.slice(i+1).trim();t[n]=s,v(a,t)}catch(o){r.l.error("error while parsing actor link text",o)}}(t.actor,t.text);break;case"addProperties":k(t.actor,t.text);break;case"addDetails":P(t.actor,t.text);break;case"addMessage":b(t.from,t.to,t.msg,t.signalType);break;case"boxStart":e=t.boxData,g.push({name:e.text,wrap:void 0===e.wrap&&T()||!!e.wrap,fill:e.color,actorKeys:[]}),p=g.slice(-1)[0];break;case"boxEnd":p=void 0;break;case"loopStart":b(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":b(void 0,void 0,void 0,t.signalType);break;case"rectStart":b(void 0,void 0,t.color,t.signalType);break;case"optStart":b(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":b(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":(0,r.o)(t.text);break;case"parStart":case"and":b(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":b(void 0,void 0,t.criticalText,t.signalType);break;case"option":b(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":b(void 0,void 0,t.breakText,t.signalType)}var e},N={addActor:y,addMessage:function(t,e,a,i){m.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&T()||!!a.wrap,answer:i})},addSignal:b,addLinks:_,addDetails:P,addProperties:k,autoWrap:T,setWrap:function(t){d=t},enableSequenceNumbers:function(){x=!0},disableSequenceNumbers:function(){x=!1},showSequenceNumbers:()=>x,getMessages:function(){return m},getActors:function(){return u},getActor:f,getActorKeys:function(){return Object.keys(u)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:r.p,getBoxes:function(){return g},getDiagramTitle:r.x,setDiagramTitle:r.w,parseDirective:function(t,e,a){i.m.parseDirective(this,t,e,a)},getConfig:()=>(0,r.g)().sequence,clear:function(){u={},g=[],m=[],x=!1,(0,r.y)()},parseMessage:function(t){const e=t.trim(),a={text:e.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^:?wrap:/)||null===e.match(/^:?nowrap:/)&&void 0};return r.l.debug("parseMessage:",a),a},parseBoxData:function(t){const e=t.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let a=null!=e&&e[1]?e[1].trim():"transparent",i=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",a)||(a="transparent",i=t.trim());else{const e=(new Option).style;e.color=a,e.color!==a&&(a="transparent",i=t.trim())}return{color:a,text:void 0!==i?(0,r.b)(i.replace(/^:?(?:no)?wrap:/,""),(0,r.g)()):void 0,wrap:void 0!==i?null!==i.match(/^:?wrap:/)||null===i.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:E,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:w,setAccTitle:r.o,apply:I,setAccDescription:r.v,getAccDescription:r.q,hasAtLeastOneBox:function(){return g.length>0},hasAtLeastOneBoxWithTitle:function(){return g.some((t=>t.name))}},M=t=>`.actor {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${t.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${t.actorLineColor};\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${t.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${t.signalColor};\n }\n\n #arrowhead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .sequenceNumber {\n fill: ${t.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${t.signalColor};\n }\n\n #crosshead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .messageText {\n fill: ${t.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${t.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${t.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${t.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation1 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation2 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${t.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n stroke-width: 2px;\n }\n`,A=function(t,e){const a=t.append("rect");return a.attr("x",e.x),a.attr("y",e.y),a.attr("fill",e.fill),a.attr("stroke",e.stroke),a.attr("width",e.width),a.attr("height",e.height),a.attr("rx",e.rx),a.attr("ry",e.ry),void 0!==e.class&&a.attr("class",e.class),a},S=(t,e)=>{(0,i.a)((()=>{const a=document.querySelectorAll(t);0!==a.length&&(a[0].addEventListener("mouseover",(function(){R("actor"+e+"_popup")})),a[0].addEventListener("mouseout",(function(){C("actor"+e+"_popup")})))}))},O=function(t,e,a,i){const r=t.append("image");r.attr("x",e),r.attr("y",a);var n=(0,o.N)(i);r.attr("xlink:href",n)},D=function(t,e,a,i){const r=t.append("use");r.attr("x",e),r.attr("y",a);var n=(0,o.N)(i);r.attr("xlink:href","#"+n)},R=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="block")},C=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="none")},Y=function(t,e){let a=0,i=0;const n=e.text.split(r.e.lineBreakRegex),[o,c]=(0,s.x)(e.fontSize);let l=[],h=0,d=()=>e.y;if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":d=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":d=()=>Math.round(e.y+(a+i+e.textMargin)/2);break;case"bottom":case"end":d=()=>Math.round(e.y+(a+i+2*e.textMargin)-e.textMargin)}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle"}for(let[r,s]of n.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==o&&(h=r*o);const n=t.append("text");if(n.attr("x",e.x),n.attr("y",d()),void 0!==e.anchor&&n.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&n.style("font-family",e.fontFamily),void 0!==c&&n.style("font-size",c),void 0!==e.fontWeight&&n.style("font-weight",e.fontWeight),void 0!==e.fill&&n.attr("fill",e.fill),void 0!==e.class&&n.attr("class",e.class),void 0!==e.dy?n.attr("dy",e.dy):0!==h&&n.attr("dy",h),e.tspan){const t=n.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(s)}else n.text(s);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(i+=(n._groups||n)[0][0].getBBox().height,a=i),l.push(n)}return l},$=function(t,e){const a=t.append("polygon");var i,r,n,s,o;return a.attr("points",(i=e.x,r=e.y,n=e.width,s=e.height,i+","+r+" "+(i+n)+","+r+" "+(i+n)+","+(r+s-(o=7))+" "+(i+n-1.2*o)+","+(r+s)+" "+i+","+(r+s))),a.attr("class","labelBox"),e.y=e.y+e.height/2,Y(t,e),a};let B=-1;const F=(t,e)=>{t.selectAll&&t.selectAll(".actor-line").attr("class","200").attr("y2",e-55)},V=function(t,e){A(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"}).lower()},W=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},q=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},z=function(){function t(t,e,a,r,n,s,o){i(e.append("text").attr("x",a+n/2).attr("y",r+s/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,a,n,o,c,l,h){const{actorFontSize:d,actorFontFamily:p,actorFontWeight:u}=h,[g,m]=(0,s.x)(d),x=t.split(r.e.lineBreakRegex);for(let r=0;r<x.length;r++){const t=r*g-g*(x.length-1)/2,s=e.append("text").attr("x",a+o/2).attr("y",n).style("text-anchor","middle").style("font-size",m).style("font-weight",u).style("font-family",p);s.append("tspan").attr("x",a+o/2).attr("dy",t).text(x[r]),s.attr("y",n+c/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(s,l)}}function a(t,a,r,n,s,o,c,l){const h=a.append("switch"),d=h.append("foreignObject").attr("x",r).attr("y",n).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,r,n,s,o,c,l),i(d,c)}function i(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(i){return"fo"===i.textPlacement?a:"old"===i.textPlacement?t:e}}(),H=function(){function t(t,e,a,r,n,s,o){i(e.append("text").attr("x",a).attr("y",r).style("text-anchor","start").text(t),o)}function e(t,e,a,n,s,o,c,l){const{actorFontSize:h,actorFontFamily:d,actorFontWeight:p}=l,u=t.split(r.e.lineBreakRegex);for(let r=0;r<u.length;r++){const t=r*h-h*(u.length-1)/2,s=e.append("text").attr("x",a).attr("y",n).style("text-anchor","start").style("font-size",h).style("font-weight",p).style("font-family",d);s.append("tspan").attr("x",a).attr("dy",t).text(u[r]),s.attr("y",n+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(s,c)}}function a(t,a,r,n,s,o,c,l){const h=a.append("switch"),d=h.append("foreignObject").attr("x",r).attr("y",n).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,r,n,0,o,c,l),i(d,c)}function i(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(i){return"fo"===i.textPlacement?a:"old"===i.textPlacement?t:e}}(),U={drawRect:A,drawText:Y,drawLabel:$,drawActor:function(t,e,a,i){switch(e.type){case"actor":return function(t,e,a,i){const r=e.x+e.width/2,n=e.y+80;i||(B++,t.append("line").attr("id","actor"+B).attr("x1",r).attr("y1",n).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));const s=t.append("g");s.attr("class","actor-man");const o=q();o.x=e.x,o.y=e.y,o.fill="#eaeaea",o.width=e.width,o.height=e.height,o.class="actor",o.rx=3,o.ry=3,s.append("line").attr("id","actor-man-torso"+B).attr("x1",r).attr("y1",e.y+25).attr("x2",r).attr("y2",e.y+45),s.append("line").attr("id","actor-man-arms"+B).attr("x1",r-18).attr("y1",e.y+33).attr("x2",r+18).attr("y2",e.y+33),s.append("line").attr("x1",r-18).attr("y1",e.y+60).attr("x2",r).attr("y2",e.y+45),s.append("line").attr("x1",r).attr("y1",e.y+45).attr("x2",r+16).attr("y2",e.y+60);const c=s.append("circle");c.attr("cx",e.x+e.width/2),c.attr("cy",e.y+10),c.attr("r",15),c.attr("width",e.width),c.attr("height",e.height);const l=s.node().getBBox();return e.height=l.height,z(a)(e.description,s,o.x,o.y+35,o.width,o.height,{class:"actor"},a),e.height}(t,e,a,i);case"participant":return function(t,e,a,i){const r=e.x+e.width/2,n=e.y+5,s=t.append("g");var o=s;i||(B++,o.append("line").attr("id","actor"+B).attr("x1",r).attr("y1",n).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"),o=s.append("g"),e.actorCnt=B,null!=e.links&&(o.attr("id","root-"+B),S("#root-"+B,B)));const c=q();var l="actor";null!=e.properties&&e.properties.class?l=e.properties.class:c.fill="#eaeaea",c.x=e.x,c.y=e.y,c.width=e.width,c.height=e.height,c.class=l,c.rx=3,c.ry=3;const h=A(o,c);if(e.rectData=c,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?D(o,c.x+c.width-20,c.y+10,t.substr(1)):O(o,c.x+c.width-20,c.y+10,t)}z(a)(e.description,o,c.x,c.y,c.width,c.height,{class:"actor"},a);let d=e.height;if(h.node){const t=h.node().getBBox();e.height=t.height,d=t.height}return d}(t,e,a,i)}},drawBox:function(t,e,a){const i=t.append("g");V(i,e),e.name&&z(a)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},a),i.lower()},drawPopup:function(t,e,a,i,r){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const n=e.links,s=e.actorCnt,c=e.rectData;var l="none";r&&(l="block !important");const h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",l),S("#actor"+s+"_popup",s);var d="";void 0!==c.class&&(d=" "+c.class);let p=c.width>a?c.width:a;const u=h.append("rect");if(u.attr("class","actorPopupMenuPanel"+d),u.attr("x",c.x),u.attr("y",c.height),u.attr("fill",c.fill),u.attr("stroke",c.stroke),u.attr("width",p),u.attr("height",c.height),u.attr("rx",c.rx),u.attr("ry",c.ry),null!=n){var g=20;for(let t in n){var m=h.append("a"),x=(0,o.N)(n[t]);m.attr("xlink:href",x),m.attr("target","_blank"),H(i)(t,m,c.x+10,c.height+g,p,20,{class:"actor"},i),g+=30}}return u.attr("height",g),{height:c.height+g,width:p}},drawImage:O,drawEmbeddedImage:D,anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,a,i,r){const n=q(),s=e.anchored;n.x=e.startx,n.y=e.starty,n.class="activation"+r%3,n.width=e.stopx-e.startx,n.height=a-e.starty,A(s,n)},drawLoop:function(t,e,a,i){const{boxMargin:r,boxTextMargin:n,labelBoxHeight:s,labelBoxWidth:o,messageFontFamily:c,messageFontSize:l,messageFontWeight:h}=i,d=t.append("g"),p=function(t,e,a,i){return d.append("line").attr("x1",t).attr("y1",e).attr("x2",a).attr("y2",i).attr("class","loopLine")};p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){p(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let u=W();u.text=a,u.x=e.startx,u.y=e.starty,u.fontFamily=c,u.fontSize=l,u.fontWeight=h,u.anchor="middle",u.valign="middle",u.tspan=!1,u.width=o||50,u.height=s||20,u.textMargin=n,u.class="labelText",$(d,u),u=W(),u.text=e.title,u.x=e.startx+o/2+(e.stopx-e.startx)/2,u.y=e.starty+r+n,u.anchor="middle",u.valign="middle",u.textMargin=n,u.class="loopText",u.fontFamily=c,u.fontSize=l,u.fontWeight=h,u.wrap=!0;let g=Y(d,u);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,a){if(t.message){u.text=t.message,u.x=e.startx+(e.stopx-e.startx)/2,u.y=e.sections[a].y+r+n,u.class="loopText",u.anchor="middle",u.valign="middle",u.tspan=!1,u.fontFamily=c,u.fontSize=l,u.fontWeight=h,u.wrap=e.wrap,g=Y(d,u);let i=Math.round(g.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[a].height+=i-(r+n)}})),e.height=Math.round(e.stopy-e.starty),d},drawBackgroundRect:V,insertArrowHead:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},insertArrowFilledHead:function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},insertSequenceNumber:function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},insertArrowCrossHead:function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},insertDatabaseIcon:function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},insertComputerIcon:function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},insertClockIcon:function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},getTextObj:W,getNoteRect:q,popupMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'block'; }"},popdownMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'none'; }"},fixLifeLineHeights:F,sanitizeUrl:o.N};let j={};const K={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((t=>t.height||0)))+(0===this.loops.length?0:this.loops.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.messages.length?0:this.messages.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.notes.length?0:this.notes.map((t=>t.height||0)).reduce(((t,e)=>t+e)))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(t){this.boxes.push(t)},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,tt((0,r.g)())},updateVal:function(t,e,a,i){void 0===t[e]?t[e]=a:t[e]=i(a,t[e])},updateBounds:function(t,e,a,i){const r=this;let n=0;function s(s){return function(o){n++;const c=r.sequenceItems.length-n+1;r.updateVal(o,"starty",e-c*j.boxMargin,Math.min),r.updateVal(o,"stopy",i+c*j.boxMargin,Math.max),r.updateVal(K.data,"startx",t-c*j.boxMargin,Math.min),r.updateVal(K.data,"stopx",a+c*j.boxMargin,Math.max),"activation"!==s&&(r.updateVal(o,"startx",t-c*j.boxMargin,Math.min),r.updateVal(o,"stopx",a+c*j.boxMargin,Math.max),r.updateVal(K.data,"starty",e-c*j.boxMargin,Math.min),r.updateVal(K.data,"stopy",i+c*j.boxMargin,Math.max))}}this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},insert:function(t,e,a,i){const r=Math.min(t,a),n=Math.max(t,a),s=Math.min(e,i),o=Math.max(e,i);this.updateVal(K.data,"startx",r,Math.min),this.updateVal(K.data,"starty",s,Math.min),this.updateVal(K.data,"stopx",n,Math.max),this.updateVal(K.data,"stopy",o,Math.max),this.updateBounds(r,s,n,o)},newActivation:function(t,e,a){const i=a[t.from.actor],r=et(t.from.actor).length||0,n=i.x+i.width/2+(r-1)*j.activationWidth/2;this.activations.push({startx:n,starty:this.verticalPos+2,stopx:n+j.activationWidth,stopy:void 0,actor:t.from.actor,anchored:U.anchorElement(e)})},endActivation:function(t){const e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:K.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},X=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),G=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),J=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});const Q=function(t,e,a,i,r,n,s){if(!0===r.hideUnusedParticipants){const t=new Set;n.forEach((e=>{t.add(e.from),t.add(e.to)})),a=a.filter((e=>t.has(e)))}let o,c=0,l=0,h=0;for(const d of a){const a=e[d],r=a.box;o&&o!=r&&(s||K.models.addBox(o),l+=j.boxMargin+o.margin),r&&r!=o&&(s||(r.x=c+l,r.y=i),l+=r.margin),a.width=a.width||j.width,a.height=Math.max(a.height||j.height,j.height),a.margin=a.margin||j.actorMargin,a.x=c+l,a.y=K.getVerticalPos();const n=U.drawActor(t,a,j,s);h=Math.max(h,n),K.insert(a.x,i,a.x+a.width,a.height),c+=a.width+l,a.box&&(a.box.width=c+r.margin-a.box.x),l=a.margin,o=a.box,K.models.addActor(a)}o&&!s&&K.models.addBox(o),K.bumpVerticalPos(h)},Z=function(t,e,a,i){let r=0,n=0;for(const s of a){const a=e[s],o=rt(a),c=U.drawPopup(t,a,o,j,j.forceMenus,i);c.height>r&&(r=c.height),c.width+a.x>n&&(n=c.width+a.x)}return{maxHeight:r,maxWidth:n}},tt=function(t){(0,r.d)(j,t),t.fontFamily&&(j.actorFontFamily=j.noteFontFamily=j.messageFontFamily=t.fontFamily),t.fontSize&&(j.actorFontSize=j.noteFontSize=j.messageFontSize=t.fontSize),t.fontWeight&&(j.actorFontWeight=j.noteFontWeight=j.messageFontWeight=t.fontWeight)},et=function(t){return K.activations.filter((function(e){return e.actor===t}))},at=function(t,e){const a=e[t],i=et(t);return[i.reduce((function(t,e){return Math.min(t,e.startx)}),a.x+a.width/2),i.reduce((function(t,e){return Math.max(t,e.stopx)}),a.x+a.width/2)]};function it(t,e,a,i,n){K.bumpVerticalPos(a);let o=i;if(e.id&&e.message&&t[e.id]){const a=t[e.id].width,n=X(j);e.message=s.u.wrapLabel(`[${e.message}]`,a-2*j.wrapPadding,n),e.width=a,e.wrap=!0;const c=s.u.calculateTextDimensions(e.message,n),l=Math.max(c.height,j.labelBoxHeight);o=i+l,r.l.debug(`${l} - ${e.message}`)}n(e),K.bumpVerticalPos(o)}const rt=function(t){let e=0;const a=J(j);for(const i in t.links){const t=s.u.calculateTextDimensions(i,a).width+2*j.wrapPadding+2*j.boxMargin;e<t&&(e=t)}return e};const nt=function(t,e,a,i){const n={},o=[];let c,l,h;return t.forEach((function(t){switch(t.id=s.u.random({length:10}),t.type){case i.db.LINETYPE.LOOP_START:case i.db.LINETYPE.ALT_START:case i.db.LINETYPE.OPT_START:case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.CRITICAL_START:case i.db.LINETYPE.BREAK_START:o.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case i.db.LINETYPE.ALT_ELSE:case i.db.LINETYPE.PAR_AND:case i.db.LINETYPE.CRITICAL_OPTION:t.message&&(c=o.pop(),n[c.id]=c,n[t.id]=c,o.push(c));break;case i.db.LINETYPE.LOOP_END:case i.db.LINETYPE.ALT_END:case i.db.LINETYPE.OPT_END:case i.db.LINETYPE.PAR_END:case i.db.LINETYPE.CRITICAL_END:case i.db.LINETYPE.BREAK_END:c=o.pop(),n[c.id]=c;break;case i.db.LINETYPE.ACTIVE_START:{const a=e[t.from?t.from.actor:t.to.actor],i=et(t.from?t.from.actor:t.to.actor).length,r=a.x+a.width/2+(i-1)*j.activationWidth/2,n={startx:r,stopx:r+j.activationWidth,actor:t.from.actor,enabled:!0};K.activations.push(n)}break;case i.db.LINETYPE.ACTIVE_END:{const e=K.activations.map((t=>t.actor)).lastIndexOf(t.from.actor);delete K.activations.splice(e,1)[0]}}void 0!==t.placement?(l=function(t,e,a){const i=e[t.from].x,n=e[t.to].x,o=t.wrap&&t.message;let c=s.u.calculateTextDimensions(o?s.u.wrapLabel(t.message,j.width,G(j)):t.message,G(j));const l={width:o?j.width:Math.max(j.width,c.width+2*j.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===a.db.PLACEMENT.RIGHTOF?(l.width=o?Math.max(j.width,c.width):Math.max(e[t.from].width/2+e[t.to].width/2,c.width+2*j.noteMargin),l.startx=i+(e[t.from].width+j.actorMargin)/2):t.placement===a.db.PLACEMENT.LEFTOF?(l.width=o?Math.max(j.width,c.width+2*j.noteMargin):Math.max(e[t.from].width/2+e[t.to].width/2,c.width+2*j.noteMargin),l.startx=i-l.width+(e[t.from].width-j.actorMargin)/2):t.to===t.from?(c=s.u.calculateTextDimensions(o?s.u.wrapLabel(t.message,Math.max(j.width,e[t.from].width),G(j)):t.message,G(j)),l.width=o?Math.max(j.width,e[t.from].width):Math.max(e[t.from].width,j.width,c.width+2*j.noteMargin),l.startx=i+(e[t.from].width-l.width)/2):(l.width=Math.abs(i+e[t.from].width/2-(n+e[t.to].width/2))+j.actorMargin,l.startx=i<n?i+e[t.from].width/2-j.actorMargin/2:n+e[t.to].width/2-j.actorMargin/2),o&&(l.message=s.u.wrapLabel(t.message,l.width-2*j.wrapPadding,G(j))),r.l.debug(`NM:[${l.startx},${l.stopx},${l.starty},${l.stopy}:${l.width},${l.height}=${t.message}]`),l}(t,e,i),t.noteModel=l,o.forEach((t=>{c=t,c.from=Math.min(c.from,l.startx),c.to=Math.max(c.to,l.startx+l.width),c.width=Math.max(c.width,Math.abs(c.from-c.to))-j.labelBoxWidth}))):(h=function(t,e,a){let i=!1;if([a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN,a.db.LINETYPE.SOLID,a.db.LINETYPE.DOTTED,a.db.LINETYPE.SOLID_CROSS,a.db.LINETYPE.DOTTED_CROSS,a.db.LINETYPE.SOLID_POINT,a.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(i=!0),!i)return{};const r=at(t.from,e),n=at(t.to,e),o=r[0]<=n[0]?1:0,c=r[0]<n[0]?0:1,l=[...r,...n],h=Math.abs(n[c]-r[o]);t.wrap&&t.message&&(t.message=s.u.wrapLabel(t.message,Math.max(h+2*j.wrapPadding,j.width),X(j)));const d=s.u.calculateTextDimensions(t.message,X(j));return{width:Math.max(t.wrap?0:d.width+2*j.wrapPadding,h+2*j.wrapPadding,j.width),height:0,startx:r[o],stopx:n[c],starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,l),toBounds:Math.max.apply(null,l)}}(t,e,i),t.msgModel=h,h.startx&&h.stopx&&o.length>0&&o.forEach((a=>{if(c=a,h.startx===h.stopx){const a=e[t.from],i=e[t.to];c.from=Math.min(a.x-h.width/2,a.x-a.width/2,c.from),c.to=Math.max(i.x+h.width/2,i.x+a.width/2,c.to),c.width=Math.max(c.width,Math.abs(c.to-c.from))-j.labelBoxWidth}else c.from=Math.min(h.startx,c.from),c.to=Math.max(h.stopx,c.to),c.width=Math.max(c.width,h.width)-j.labelBoxWidth})))})),K.activations=[],r.l.debug("Loop type widths:",n),n},st={parser:l,db:N,renderer:{bounds:K,drawActors:Q,drawActorsPopup:Z,setConf:tt,draw:function(t,e,a,i){const{securityLevel:o,sequence:c}=(0,r.g)();let l;j=c,i.db.clear(),i.parser.parse(t),"sandbox"===o&&(l=(0,n.Ys)("#i"+e));const h="sandbox"===o?(0,n.Ys)(l.nodes()[0].contentDocument.body):(0,n.Ys)("body"),d="sandbox"===o?l.nodes()[0].contentDocument:document;K.init(),r.l.debug(i.db);const p="sandbox"===o?h.select(`[id="${e}"]`):(0,n.Ys)(`[id="${e}"]`),u=i.db.getActors(),g=i.db.getBoxes(),m=i.db.getActorKeys(),x=i.db.getMessages(),y=i.db.getDiagramTitle(),b=i.db.hasAtLeastOneBox(),f=i.db.hasAtLeastOneBoxWithTitle(),T=function(t,e,a){const i={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){const r=t[e.to];if(e.placement===a.db.PLACEMENT.LEFTOF&&!r.prevActor)return;if(e.placement===a.db.PLACEMENT.RIGHTOF&&!r.nextActor)return;const n=void 0!==e.placement,o=!n,c=n?G(j):X(j),l=e.wrap?s.u.wrapLabel(e.message,j.width-2*j.wrapPadding,c):e.message,h=s.u.calculateTextDimensions(l,c).width+2*j.wrapPadding;o&&e.from===r.nextActor?i[e.to]=Math.max(i[e.to]||0,h):o&&e.from===r.prevActor?i[e.from]=Math.max(i[e.from]||0,h):o&&e.from===e.to?(i[e.from]=Math.max(i[e.from]||0,h/2),i[e.to]=Math.max(i[e.to]||0,h/2)):e.placement===a.db.PLACEMENT.RIGHTOF?i[e.from]=Math.max(i[e.from]||0,h):e.placement===a.db.PLACEMENT.LEFTOF?i[r.prevActor]=Math.max(i[r.prevActor]||0,h):e.placement===a.db.PLACEMENT.OVER&&(r.prevActor&&(i[r.prevActor]=Math.max(i[r.prevActor]||0,h/2)),r.nextActor&&(i[e.from]=Math.max(i[e.from]||0,h/2)))}})),r.l.debug("maxMessageWidthPerActor:",i),i}(u,x,i);j.height=function(t,e,a){let i=0;Object.keys(t).forEach((e=>{const a=t[e];a.wrap&&(a.description=s.u.wrapLabel(a.description,j.width-2*j.wrapPadding,J(j)));const r=s.u.calculateTextDimensions(a.description,J(j));a.width=a.wrap?j.width:Math.max(j.width,r.width+2*j.wrapPadding),a.height=a.wrap?Math.max(r.height,j.height):j.height,i=Math.max(i,a.height)}));for(const n in e){const a=t[n];if(!a)continue;const i=t[a.nextActor];if(!i){const t=e[n]+j.actorMargin-a.width/2;a.margin=Math.max(t,j.actorMargin);continue}const r=e[n]+j.actorMargin-a.width/2-i.width/2;a.margin=Math.max(r,j.actorMargin)}let r=0;return a.forEach((e=>{const a=X(j);let i=e.actorKeys.reduce(((e,a)=>e+(t[a].width+(t[a].margin||0))),0);i-=2*j.boxTextMargin,e.wrap&&(e.name=s.u.wrapLabel(e.name,i-2*j.wrapPadding,a));const n=s.u.calculateTextDimensions(e.name,a);r=Math.max(n.height,r);const o=Math.max(i,n.width+2*j.wrapPadding);if(e.margin=j.boxTextMargin,i<o){const t=(o-i)/2;e.margin+=t}})),a.forEach((t=>t.textMaxHeight=r)),Math.max(i,j.height)}(u,T,g),U.insertComputerIcon(p),U.insertDatabaseIcon(p),U.insertClockIcon(p),b&&(K.bumpVerticalPos(j.boxMargin),f&&K.bumpVerticalPos(g[0].textMaxHeight)),Q(p,u,m,0,j,x,!1);const E=nt(x,u,T,i);U.insertArrowHead(p),U.insertArrowCrossHead(p),U.insertArrowFilledHead(p),U.insertSequenceNumber(p);let w=1,_=1;const v=[];x.forEach((function(t){let e,a,n;switch(t.type){case i.db.LINETYPE.NOTE:a=t.noteModel,function(t,e){K.bumpVerticalPos(j.boxMargin),e.height=j.boxMargin,e.starty=K.getVerticalPos();const a=U.getNoteRect();a.x=e.startx,a.y=e.starty,a.width=e.width||j.width,a.class="note";const i=t.append("g"),r=U.drawRect(i,a),n=U.getTextObj();n.x=e.startx,n.y=e.starty,n.width=a.width,n.dy="1em",n.text=e.message,n.class="noteText",n.fontFamily=j.noteFontFamily,n.fontSize=j.noteFontSize,n.fontWeight=j.noteFontWeight,n.anchor=j.noteAlign,n.textMargin=j.noteMargin,n.valign="center";const s=Y(i,n),o=Math.round(s.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));r.attr("height",o+2*j.noteMargin),e.height+=o+2*j.noteMargin,K.bumpVerticalPos(o+2*j.noteMargin),e.stopy=e.starty+o+2*j.noteMargin,e.stopx=e.startx+a.width,K.insert(e.startx,e.starty,e.stopx,e.stopy),K.models.addNote(e)}(p,a);break;case i.db.LINETYPE.ACTIVE_START:K.newActivation(t,p,u);break;case i.db.LINETYPE.ACTIVE_END:!function(t,e){const a=K.endActivation(t);a.starty+18>e&&(a.starty=e-6,e+=12),U.drawActivation(p,a,e,j,et(t.from.actor).length),K.insert(a.startx,e-10,a.stopx,e)}(t,K.getVerticalPos());break;case i.db.LINETYPE.LOOP_START:it(E,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case i.db.LINETYPE.LOOP_END:e=K.endLoop(),U.drawLoop(p,e,"loop",j),K.bumpVerticalPos(e.stopy-K.getVerticalPos()),K.models.addLoop(e);break;case i.db.LINETYPE.RECT_START:it(E,t,j.boxMargin,j.boxMargin,(t=>K.newLoop(void 0,t.message)));break;case i.db.LINETYPE.RECT_END:e=K.endLoop(),U.drawBackgroundRect(p,e),K.models.addLoop(e),K.bumpVerticalPos(e.stopy-K.getVerticalPos());break;case i.db.LINETYPE.OPT_START:it(E,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case i.db.LINETYPE.OPT_END:e=K.endLoop(),U.drawLoop(p,e,"opt",j),K.bumpVerticalPos(e.stopy-K.getVerticalPos()),K.models.addLoop(e);break;case i.db.LINETYPE.ALT_START:it(E,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case i.db.LINETYPE.ALT_ELSE:it(E,t,j.boxMargin+j.boxTextMargin,j.boxMargin,(t=>K.addSectionToLoop(t)));break;case i.db.LINETYPE.ALT_END:e=K.endLoop(),U.drawLoop(p,e,"alt",j),K.bumpVerticalPos(e.stopy-K.getVerticalPos()),K.models.addLoop(e);break;case i.db.LINETYPE.PAR_START:it(E,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case i.db.LINETYPE.PAR_AND:it(E,t,j.boxMargin+j.boxTextMargin,j.boxMargin,(t=>K.addSectionToLoop(t)));break;case i.db.LINETYPE.PAR_END:e=K.endLoop(),U.drawLoop(p,e,"par",j),K.bumpVerticalPos(e.stopy-K.getVerticalPos()),K.models.addLoop(e);break;case i.db.LINETYPE.AUTONUMBER:w=t.message.start||w,_=t.message.step||_,t.message.visible?i.db.enableSequenceNumbers():i.db.disableSequenceNumbers();break;case i.db.LINETYPE.CRITICAL_START:it(E,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case i.db.LINETYPE.CRITICAL_OPTION:it(E,t,j.boxMargin+j.boxTextMargin,j.boxMargin,(t=>K.addSectionToLoop(t)));break;case i.db.LINETYPE.CRITICAL_END:e=K.endLoop(),U.drawLoop(p,e,"critical",j),K.bumpVerticalPos(e.stopy-K.getVerticalPos()),K.models.addLoop(e);break;case i.db.LINETYPE.BREAK_START:it(E,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case i.db.LINETYPE.BREAK_END:e=K.endLoop(),U.drawLoop(p,e,"break",j),K.bumpVerticalPos(e.stopy-K.getVerticalPos()),K.models.addLoop(e);break;default:try{n=t.msgModel,n.starty=K.getVerticalPos(),n.sequenceIndex=w,n.sequenceVisible=i.db.showSequenceNumbers();const e=function(t,e){K.bumpVerticalPos(10);const{startx:a,stopx:i,message:n}=e,o=r.e.splitBreaks(n).length,c=s.u.calculateTextDimensions(n,X(j)),l=c.height/o;let h;e.height+=l,K.bumpVerticalPos(l);let d=c.height-10;const p=c.width;if(a===i){h=K.getVerticalPos()+d,j.rightAngles||(d+=j.boxMargin,h=K.getVerticalPos()+d),d+=30;const t=Math.max(p/2,j.width/2);K.insert(a-t,K.getVerticalPos()-10+d,i+t,K.getVerticalPos()+30+d)}else d+=j.boxMargin,h=K.getVerticalPos()+d,K.insert(a,h-10,i,h);return K.bumpVerticalPos(d),e.height+=d,e.stopy=e.starty+e.height,K.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),h}(0,n);v.push({messageModel:n,lineStartY:e}),K.models.addMessage(n)}catch(o){r.l.error("error while drawing message",o)}}[i.db.LINETYPE.SOLID_OPEN,i.db.LINETYPE.DOTTED_OPEN,i.db.LINETYPE.SOLID,i.db.LINETYPE.DOTTED,i.db.LINETYPE.SOLID_CROSS,i.db.LINETYPE.DOTTED_CROSS,i.db.LINETYPE.SOLID_POINT,i.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(w+=_)})),v.forEach((t=>function(t,e,a,i){const{startx:r,stopx:n,starty:o,message:c,type:l,sequenceIndex:h,sequenceVisible:d}=e,p=s.u.calculateTextDimensions(c,X(j)),u=U.getTextObj();u.x=r,u.y=o+10,u.width=n-r,u.class="messageText",u.dy="1em",u.text=c,u.fontFamily=j.messageFontFamily,u.fontSize=j.messageFontSize,u.fontWeight=j.messageFontWeight,u.anchor=j.messageAlign,u.valign="center",u.textMargin=j.wrapPadding,u.tspan=!1,Y(t,u);const g=p.width;let m;r===n?m=j.rightAngles?t.append("path").attr("d",`M ${r},${a} H ${r+Math.max(j.width/2,g/2)} V ${a+25} H ${r}`):t.append("path").attr("d","M "+r+","+a+" C "+(r+60)+","+(a-10)+" "+(r+60)+","+(a+30)+" "+r+","+(a+20)):(m=t.append("line"),m.attr("x1",r),m.attr("y1",a),m.attr("x2",n),m.attr("y2",a)),l===i.db.LINETYPE.DOTTED||l===i.db.LINETYPE.DOTTED_CROSS||l===i.db.LINETYPE.DOTTED_POINT||l===i.db.LINETYPE.DOTTED_OPEN?(m.style("stroke-dasharray","3, 3"),m.attr("class","messageLine1")):m.attr("class","messageLine0");let x="";j.arrowMarkerAbsolute&&(x=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,x=x.replace(/\(/g,"\\("),x=x.replace(/\)/g,"\\)")),m.attr("stroke-width",2),m.attr("stroke","none"),m.style("fill","none"),l!==i.db.LINETYPE.SOLID&&l!==i.db.LINETYPE.DOTTED||m.attr("marker-end","url("+x+"#arrowhead)"),l!==i.db.LINETYPE.SOLID_POINT&&l!==i.db.LINETYPE.DOTTED_POINT||m.attr("marker-end","url("+x+"#filled-head)"),l!==i.db.LINETYPE.SOLID_CROSS&&l!==i.db.LINETYPE.DOTTED_CROSS||m.attr("marker-end","url("+x+"#crosshead)"),(d||j.showSequenceNumbers)&&(m.attr("marker-start","url("+x+"#sequencenumber)"),t.append("text").attr("x",r).attr("y",a+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))}(p,t.messageModel,t.lineStartY,i))),j.mirrorActors&&(K.bumpVerticalPos(2*j.boxMargin),Q(p,u,m,K.getVerticalPos(),j,x,!0),K.bumpVerticalPos(j.boxMargin),F(p,K.getVerticalPos())),K.models.boxes.forEach((function(t){t.height=K.getVerticalPos()-t.y,K.insert(t.x,t.y,t.x+t.width,t.height),t.startx=t.x,t.starty=t.y,t.stopx=t.startx+t.width,t.stopy=t.starty+t.height,t.stroke="rgb(0,0,0, 0.5)",U.drawBox(p,t,j)})),b&&K.bumpVerticalPos(j.boxMargin);const k=Z(p,u,m,d),{bounds:L}=K.getBounds();r.l.debug("For line height fix Querying: #"+e+" .actor-line");(0,n.td_)("#"+e+" .actor-line").attr("y2",L.stopy);let P=L.stopy-L.starty;P<k.maxHeight&&(P=k.maxHeight);let I=P+2*j.diagramMarginY;j.mirrorActors&&(I=I-j.boxMargin+j.bottomMarginAdj);let N=L.stopx-L.startx;N<k.maxWidth&&(N=k.maxWidth);const M=N+2*j.diagramMarginX;y&&p.append("text").text(y).attr("x",(L.stopx-L.startx)/2-2*j.diagramMarginX).attr("y",-25),(0,s.k)(p,I,M,j.useMaxWidth);const A=y?40:0;p.attr("viewBox",L.startx-j.diagramMarginX+" -"+(j.diagramMarginY+A)+" "+M+" "+(I+A)),r.l.debug("models:",K.models)}},styles:M}}}]); \ No newline at end of file diff --git a/assets/js/29367e59.d8e53898.js b/assets/js/29367e59.d8e53898.js new file mode 100644 index 0000000000..cc145337d0 --- /dev/null +++ b/assets/js/29367e59.d8e53898.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3173],{106:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>E,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var a=r(7462),o=(r(7294),r(3905));r(5657);const n={},E="INFLUENCE_TIME_VECTOR",s={unversionedId:"about/references/keywords/INFLUENCE_TIME_VECTOR",id:"about/references/keywords/INFLUENCE_TIME_VECTOR",title:"INFLUENCE_TIME_VECTOR",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"},next:{title:"INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE"}},i={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],l={toc:c},d="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,a.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"influence_time_vector"},"INFLUENCE_TIME_VECTOR"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"},"INFLUENCE_TIME_VECTOR")),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"Determines if the time steps in this input source will contribute to the global time vector."),(0,o.kt)("p",null,"If not specified, this will be defaulted to ",(0,o.kt)("inlineCode",{parentName:"p"},"TRUE"),".\nIt is a requirement that at least one time vector has an ",(0,o.kt)("inlineCode",{parentName:"p"},"INFLUENCE_TIME_VECTOR")," of ",(0,o.kt)("inlineCode",{parentName:"p"},"TRUE"),"."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"\nINFLUENCE_TIME_VECTOR: <True/False>\n")),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," ",(0,o.kt)("inlineCode",{parentName:"p"},"time_series_format"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/295f424e.04a4238d.js b/assets/js/295f424e.04a4238d.js new file mode 100644 index 0000000000..3b454c1cef --- /dev/null +++ b/assets/js/295f424e.04a4238d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5133],{7478:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>E,default:()=>T,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var a=r(7462),n=(r(7294),r(3905));r(5657);const o={},E="DIRECT_EMITTERS",l={unversionedId:"about/references/keywords/DIRECT_EMITTERS",id:"about/references/keywords/DIRECT_EMITTERS",title:"DIRECT_EMITTERS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/DIRECT_EMITTERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DIRECT_EMITTERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES"},next:{title:"DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"}},s={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:d},i="wrapper";function T(e){let{components:t,...r}=e;return(0,n.kt)(i,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"direct_emitters"},"DIRECT_EMITTERS"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"},"DIRECT_EMITTERS")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Yes"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"INSTALLATIONS")),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"NAME")," ",(0,n.kt)("br",null)," ",(0,n.kt)("inlineCode",{parentName:"td"},"EMISSION_NAME")," ",(0,n.kt)("br",null)," ",(0,n.kt)("inlineCode",{parentName:"td"},"CATEGORY")," ",(0,n.kt)("br",null)," ",(0,n.kt)("inlineCode",{parentName:"td"},"EMITTER_MODEL"))))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"The ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"},"DIRECT_EMITTERS")," keyword covers the direct emissions on the installation\nthat are not consuming energy. The attributes ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME"),",\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSION_NAME"},"EMISSION_NAME"),", ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")," and\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"},"EMITTER_MODEL")," are required."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"DIRECT_EMITTER:\n - NAME: <emitter name>\n EMISSION_NAME: <emission name>\n CATEGORY: <category>\n EMITTER_MODEL: <emitter model>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"DIRECT_EMITTER:\n - NAME: SomeDirectEmitter\n EMISSION_NAME: CH4\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n <emitter model data>\n ...\n - NAME: SomeOtherDirectEmitter\n EMISSION_NAME: C2H6\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n <emitter model data>\n")))}T.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/29d00dd8.9fda4441.js b/assets/js/29d00dd8.9fda4441.js new file mode 100644 index 0000000000..40b9a5faaf --- /dev/null +++ b/assets/js/29d00dd8.9fda4441.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8084],{947:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>E,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>N});var r=n(7462),a=(n(7294),n(3905));n(5657);const o={},E="ENERGYFUNCTION",l={unversionedId:"about/references/keywords/ENERGYFUNCTION",id:"about/references/keywords/ENERGYFUNCTION",title:"ENERGYFUNCTION",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ENERGYFUNCTION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ENERGYFUNCTION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"END",permalink:"/ecalc/docs/about/references/keywords/END"},next:{title:"ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"}},s={},N=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:N},i="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(i,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"energyfunction"},"ENERGYFUNCTION"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION"},"ENERGYFUNCTION")),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Required"),(0,a.kt)("th",{parentName:"tr",align:null},"Child of"),(0,a.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"No"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"ENERGY_USAGE_MODEL")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"None"))))),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"This refers to an energy function model defined in either ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY INPUTS")," or in ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," used for ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY USAGE MODEL"),".\nThe following attributes can be utilised:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"},"COMPRESSOR MODEL")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations"},"PUMP ENERGY USAGE MODEL")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"TABULATED ENERGY USAGE MODEL"))),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: <energy usage model type>\n ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"\nFACILITY_INPUTS:\n - NAME: compressor_model_reference\n TYPE: COMPRESSOR_TABULAR\n FILE: <file path>\n\n...\n\nINSTALLATIONS:\n - NAME: InstallationA\n CATEGORY: FIXED\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: gensetA\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_model_reference\n ...\n\n FUELCONSUMERS:\n - NAME: compressor\n CATEGORY: GAS-DRIVEN-COMPRESSOR \n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_model_reference\n ...\n\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2b15d891.d448c52e.js b/assets/js/2b15d891.d448c52e.js new file mode 100644 index 0000000000..79649beff0 --- /dev/null +++ b/assets/js/2b15d891.d448c52e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2225],{4268:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>i,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=a(7462),n=(a(7294),a(3905));a(5657);const o={},s="NAME",c={unversionedId:"about/references/keywords/NAME",id:"about/references/keywords/NAME",title:"NAME",description:"[...] /",source:"@site/docs/about/references/keywords/NAME.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/NAME",permalink:"/ecalc/docs/about/references/keywords/NAME",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/NAME.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS"},next:{title:"OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"}},l={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],u={toc:d},p="wrapper";function i(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"name"},"NAME"),(0,n.kt)("p",null,"[...]"," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME")),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Name of an entity.\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")," names must be written with uppercase letters - see example below:"),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"NAME: <name>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("p",null,"Usage in ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSIONS"},"EMISSIONS"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSIONS:\n - NAME: CO2\n")),(0,n.kt)("p",null,"Usage in ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," and ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORIES"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL_TYPES:\n - NAME: diesel_turbine\n CATEGORY: DIESEL\n")))}i.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2b2be347.116a0d06.js b/assets/js/2b2be347.116a0d06.js new file mode 100644 index 0000000000..3a33adf77f --- /dev/null +++ b/assets/js/2b2be347.116a0d06.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1404],{8335:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var l=t(7462),n=(t(7294),t(3905));t(5657);const r={slug:"v7-0-release",title:"v7.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:3},i="eCalc v7.0",o={unversionedId:"changelog/v7-0",id:"changelog/v7-0",title:"v7.0",description:"Features",source:"@site/docs/changelog/v7-0.md",sourceDirName:"changelog",slug:"/changelog/v7-0-release",permalink:"/ecalc/docs/changelog/v7-0-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-0.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:3,frontMatter:{slug:"v7-0-release",title:"v7.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:3},sidebar:"changelog",previous:{title:"---",permalink:"/ecalc/docs/changelog/separator"},next:{title:"v7.1",permalink:"/ecalc/docs/changelog/v7-1-release"}},s={},p=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2},{value:"CLI",id:"cli",level:2}],m={toc:p},u="wrapper";function d(e){let{components:a,...t}=e;return(0,n.kt)(u,(0,l.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"ecalc-v70"},"eCalc v7.0"),(0,n.kt)("h2",{id:"features"},(0,n.kt)("em",{parentName:"h2"},"Features")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES compressor model. See ",(0,n.kt)("inlineCode",{parentName:"p"},"Variable speed compressor train model with multiple streams and pressures"),".")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add GERG model to FLUID model as EOS_MODEL. Now available GERG_PR and GERG_SRK.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add UNITS: EFFICIENCY to compressor charts and pump charts. Plus additional input unit support.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add support for both water and H2O in fluid composition.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add POWER_ADJUSTMENT_CONSTANT for all applicable models to adjust power/energy usage with a constant factor.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add water as allowed ",(0,n.kt)("inlineCode",{parentName:"p"},"FLUID model")," component.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Improve models documentation")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Deprecation: ",(0,n.kt)("a",{parentName:"p",href:"../about/references/keywords/CONDITION"},"CONDITION")," is now a single expression instead of list."),(0,n.kt)("p",{parentName:"li"},"If you previously had a list it is recommended to use the ",(0,n.kt)("a",{parentName:"p",href:"../about/references/keywords/CONDITIONS"},"CONDITIONS")," keyword instead. This will become a requirement in a future release."),(0,n.kt)("p",{parentName:"li"},"Alternatively you could merge the conditions to a single expression. This is what is done automatically when using the ",(0,n.kt)("a",{parentName:"p",href:"../about/references/keywords/CONDITIONS"},"CONDITIONS")," keyword."),(0,n.kt)("p",{parentName:"li"},".. code-block:: diff"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"CONDITION: expression1 {*} expression2")),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"CONDITION:"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"expression1"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"expression2")))))),(0,n.kt)("h2",{id:"fixes"},(0,n.kt)("em",{parentName:"h2"},"Fixes")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Handle date columns year as year and not timestamps"),(0,n.kt)("li",{parentName:"ul"},"Handle suppressed ecalc errors and division by zero"),(0,n.kt)("li",{parentName:"ul"},"Handle timeseries with one entry"),(0,n.kt)("li",{parentName:"ul"},"Handle poorly formatted csv data with tabs, multiple spaces and mixed float/integers."),(0,n.kt)("li",{parentName:"ul"},"Handle 0 regularity"),(0,n.kt)("li",{parentName:"ul"},"Handle emission intensity when only one timestep"),(0,n.kt)("li",{parentName:"ul"},"Changed emission intensity to NaN when hydrocarbon export is zero")),(0,n.kt)("h2",{id:"cli"},"CLI"),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"Feature")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Major revision of CLI for future development."),(0,n.kt)("li",{parentName:"ul"},"Add Flow diagram support"),(0,n.kt)("li",{parentName:"ul"},"Improve logging, warnings and error messages. DEBUG should now give a lot of information."),(0,n.kt)("li",{parentName:"ul"},"Add support for list in 'CONDITION' keyword")),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"Fix")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Fix issue when using dates in ELECTRICITY2FUEL")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2c19a041.a0ac934f.js b/assets/js/2c19a041.a0ac934f.js new file mode 100644 index 0000000000..27126c910f --- /dev/null +++ b/assets/js/2c19a041.a0ac934f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4507],{5282:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>s,default:()=>N,frontMatter:()=>m,metadata:()=>p,toc:()=>i});var r=t(7462),n=(t(7294),t(3905));t(5657);const m={},s="REGULARITY",p={unversionedId:"about/references/keywords/REGULARITY",id:"about/references/keywords/REGULARITY",title:"REGULARITY",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/REGULARITY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/REGULARITY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM"},next:{title:"STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES"}},l={},i=[{value:"Description",id:"description",level:2},{value:"Use in a <code>DIRECT ENERGY USAGE MODEL</code>",id:"use-in-a-direct-energy-usage-model",level:3},{value:"Reporting",id:"reporting",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Constant regularity",id:"constant-regularity",level:3},{value:"Regularity from time series data",id:"regularity-from-time-series-data",level:3},{value:"Special: Combining calendar and stream day rates",id:"special-combining-calendar-and-stream-day-rates",level:3}],o={toc:i},d="wrapper";function N(a){let{components:e,...m}=a;return(0,n.kt)(d,(0,r.Z)({},o,m,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"regularity"},"REGULARITY"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/REGULARITY"},"REGULARITY")),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"In eCalc\u2122, consumers in an ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY USAGE MODEL")," are evaluated with the actual rate passing through them whilst\nthey are in operation. This actual rate is referred to as ",(0,n.kt)("em",{parentName:"p"},"stream day (sd) rates"),".\nDespite the consumers being evaluated with stream day rates, input files are often given in ",(0,n.kt)("em",{parentName:"p"},"calender day (cd) rates"),". As expected from this definition, ",(0,n.kt)("inlineCode",{parentName:"p"},"REGULARITY")," is closely related to the production efficiency (PE) of a facility."),(0,n.kt)("p",null,"Stream day rates can be expressed as:"),(0,n.kt)("div",{className:"math math-display"},(0,n.kt)("span",{parentName:"div",className:"katex-display"},(0,n.kt)("span",{parentName:"span",className:"katex"},(0,n.kt)("span",{parentName:"span",className:"katex-mathml"},(0,n.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,n.kt)("semantics",{parentName:"math"},(0,n.kt)("mrow",{parentName:"semantics"},(0,n.kt)("mi",{parentName:"mrow"},"s"),(0,n.kt)("mi",{parentName:"mrow"},"t"),(0,n.kt)("mi",{parentName:"mrow"},"r"),(0,n.kt)("mi",{parentName:"mrow"},"e"),(0,n.kt)("mi",{parentName:"mrow"},"a"),(0,n.kt)("mi",{parentName:"mrow"},"m"),(0,n.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,n.kt)("mi",{parentName:"mrow"},"d"),(0,n.kt)("mi",{parentName:"mrow"},"a"),(0,n.kt)("mi",{parentName:"mrow"},"y"),(0,n.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,n.kt)("mi",{parentName:"mrow"},"r"),(0,n.kt)("mi",{parentName:"mrow"},"a"),(0,n.kt)("mi",{parentName:"mrow"},"t"),(0,n.kt)("mi",{parentName:"mrow"},"e"),(0,n.kt)("mo",{parentName:"mrow"},"="),(0,n.kt)("mfrac",{parentName:"mrow"},(0,n.kt)("mrow",{parentName:"mfrac"},(0,n.kt)("mi",{parentName:"mrow"},"c"),(0,n.kt)("mi",{parentName:"mrow"},"a"),(0,n.kt)("mi",{parentName:"mrow"},"l"),(0,n.kt)("mi",{parentName:"mrow"},"e"),(0,n.kt)("mi",{parentName:"mrow"},"n"),(0,n.kt)("mi",{parentName:"mrow"},"d"),(0,n.kt)("mi",{parentName:"mrow"},"a"),(0,n.kt)("mi",{parentName:"mrow"},"r"),(0,n.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,n.kt)("mi",{parentName:"mrow"},"d"),(0,n.kt)("mi",{parentName:"mrow"},"a"),(0,n.kt)("mi",{parentName:"mrow"},"y"),(0,n.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,n.kt)("mi",{parentName:"mrow"},"r"),(0,n.kt)("mi",{parentName:"mrow"},"a"),(0,n.kt)("mi",{parentName:"mrow"},"t"),(0,n.kt)("mi",{parentName:"mrow"},"e")),(0,n.kt)("mrow",{parentName:"mfrac"},(0,n.kt)("mi",{parentName:"mrow"},"r"),(0,n.kt)("mi",{parentName:"mrow"},"e"),(0,n.kt)("mi",{parentName:"mrow"},"g"),(0,n.kt)("mi",{parentName:"mrow"},"u"),(0,n.kt)("mi",{parentName:"mrow"},"l"),(0,n.kt)("mi",{parentName:"mrow"},"a"),(0,n.kt)("mi",{parentName:"mrow"},"r"),(0,n.kt)("mi",{parentName:"mrow"},"i"),(0,n.kt)("mi",{parentName:"mrow"},"t"),(0,n.kt)("mi",{parentName:"mrow"},"y")))),(0,n.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"stream\\ day\\ rate = \\frac{calendar\\ day\\ rate}{regularity}")))),(0,n.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"re"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"am"),(0,n.kt)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.kt)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.kt)("span",{parentName:"span",className:"mrel"},"="),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"2.2519em",verticalAlign:"-0.8804em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,n.kt)("span",{parentName:"span",className:"mfrac"},(0,n.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.3714em"}},(0,n.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"re"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"gu"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"))),(0,n.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,n.kt)("span",{parentName:"span",style:{top:"-3.677em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,n.kt)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,n.kt)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))),(0,n.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8804em"}},(0,n.kt)("span",{parentName:"span"}))))),(0,n.kt)("span",{parentName:"span",className:"mclose nulldelimiter"}))))))),(0,n.kt)("p",null,"To give an example of this, an input file may have a gas export rate for a whole year. However, this rate will take into account any downtime for the facility. So in reality, this ",(0,n.kt)("em",{parentName:"p"},"calender day rate")," is not the rate the compressor will process whilst in operation that year. This will rather be the higher ",(0,n.kt)("em",{parentName:"p"},"stream day rate"),"."),(0,n.kt)("p",null,"An example of this can be seen in the figure below:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Regularity work flow example",src:t(3173).Z,width:"1013",height:"110"})),(0,n.kt)("p",null,"For detailed modeling, it might be a better option to increase the resolution in the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES"),"\ninputs to capture down periods and variations in conditions rather than using regularity."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("ul",{parentName:"admonition"},(0,n.kt)("li",{parentName:"ul"},"Rates from reservoir simulations may be both stream day and calendar day."),(0,n.kt)("li",{parentName:"ul"},"If eCalc\u2122 is used\nwithout specifying ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/REGULARITY"},"REGULARITY"),", then regularity will default to 1."),(0,n.kt)("li",{parentName:"ul"},"All user defined input rates used in ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," are ",(0,n.kt)("strong",{parentName:"li"},"assumed to be calendar day rates"),"."))),(0,n.kt)("h3",{id:"use-in-a-direct-energy-usage-model"},"Use in a ",(0,n.kt)("inlineCode",{parentName:"h3"},"DIRECT ENERGY USAGE MODEL")),(0,n.kt)("p",null,"It should be noted that not all ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY USAGE MODELS")," are evaluated with ",(0,n.kt)("em",{parentName:"p"},"stream day rates"),".\n",(0,n.kt)("inlineCode",{parentName:"p"},"DIRECT ENERGY USAGE MODELS")," can be specified with the keyword ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"},"CONSUMPTION_RATE_TYPE")," - where either ",(0,n.kt)("inlineCode",{parentName:"p"},"CALENDAR_DAY")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"STREAM_DAY")," can be specified.\nNote that the default input rate is ",(0,n.kt)("inlineCode",{parentName:"p"},"STREAM_DAY")," rate - the opposite of the other models."),(0,n.kt)("p",null,"For further details on stream day rate vs. calendar day rate, see ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"},"CONSUMPTION_RATE_TYPE"),"."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"center"},"ENERGY_USAGE_MODEL Type"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Can use CONSUMPTION_RATE_TYPE?"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Evaluated rate type"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"DIRECT"),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2611"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Stream/calendar day")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"COMPRESSOR"),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2610"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Stream day")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"PUMP"),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2610"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Stream day")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"COMPRESSOR_SYSTEM"),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2610"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Stream day")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"PUMP_SYSTEM"),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2610"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Stream day")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"TABULATED"),(0,n.kt)("td",{parentName:"tr",align:"center"},"\u2610"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Stream day")))),(0,n.kt)("h3",{id:"reporting"},"Reporting"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"All fuel rates, tax and emission results are reported in calendar days."),(0,n.kt)("li",{parentName:"ul"},"All power and volume rates results are reported in stream day rates. Note that the volume rates are only present in the .json file.")),(0,n.kt)("p",null,"The reason for reporting calendar day rate is due to the economic interpretation, or rather the lack of economic\ninterpretation when using fuel stream day rates. If we used stream day rates, we would in essence evaluate the process\nunit as if it was running all the time. Typically all process units have some down time, and regularity is\non average something closer to 0.99 over a longer period such as a year."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"REGULARITY")," can be specified by a single number or as an expression."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n - NAME: <installation name>\n CATEGORY: <installation category>\n REGULARITY: <regularity expression>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("h3",{id:"constant-regularity"},"Constant regularity"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"REGULARITY: 0.95\n")),(0,n.kt)("h3",{id:"regularity-from-time-series-data"},"Regularity from time series data"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"REGULARITY: SIM1;REGULARITY\n")),(0,n.kt)("h3",{id:"special-combining-calendar-and-stream-day-rates"},"Special: Combining calendar and stream day rates"),(0,n.kt)("p",null,"If there is a need to combine stream day and calendar day rates in an expression,\n(or to use a stream day rate from a ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," source), one can manually do\nwhat is necessary to obtain calendar day rates by dividing by regularity."),(0,n.kt)("p",null,"For example, combining a calendar day rate (",(0,n.kt)("inlineCode",{parentName:"p"},"SIM2;GAS_PROD_A"),") with stream day rate\n(",(0,n.kt)("inlineCode",{parentName:"p"},"SIM1;GAS_PROD_B"),") on an installation with a fixed regularity of 0.95 can be done like:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"RATE: SIM2:GAS_PROD_A {+} SIM1;GAS_PROD_B {/} 0.95\n")))}N.isMDXComponent=!0},3173:(a,e,t)=>{t.d(e,{Z:()=>r});const r=t.p+"assets/images/regularity-3e43516a1e0246a2e125d4980006b137.png"}}]); \ No newline at end of file diff --git a/assets/js/2c73e373.147b2ba8.js b/assets/js/2c73e373.147b2ba8.js new file mode 100644 index 0000000000..c8d75329a3 --- /dev/null +++ b/assets/js/2c73e373.147b2ba8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2655],{212:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>m});var o=n(7462),i=(n(7294),n(3905));n(5657);const r={},s="Conventional Commits",a={unversionedId:"contribute/guides/conventional-commits",id:"contribute/guides/conventional-commits",title:"Conventional Commits",description:"Git commits are required to follow conventional commits.",source:"@site/docs/contribute/guides/02-conventional-commits.md",sourceDirName:"contribute/guides",slug:"/contribute/guides/conventional-commits",permalink:"/ecalc/docs/contribute/guides/conventional-commits",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/guides/02-conventional-commits.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Git",permalink:"/ecalc/docs/contribute/guides/git"}},c={},m=[],p={toc:m},l="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(l,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"conventional-commits"},"Conventional Commits"),(0,i.kt)("p",null,"Git commits are required to follow ",(0,i.kt)("a",{parentName:"p",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits"),"."),(0,i.kt)("p",null,"The message should be structured like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"<type>[optional scope]: <description>\n\n[optional body]\n\n[optional footer(s)]\n")),(0,i.kt)("p",null,"The type can be one of these types: ",(0,i.kt)("strong",{parentName:"p"},"feat"),", ",(0,i.kt)("strong",{parentName:"p"},"fix"),", ",(0,i.kt)("strong",{parentName:"p"},"build"),", ",(0,i.kt)("strong",{parentName:"p"},"ci"),", ",(0,i.kt)("strong",{parentName:"p"},"docs"),", ",(0,i.kt)("strong",{parentName:"p"},"style"),", ",(0,i.kt)("strong",{parentName:"p"},"refactor"),", ",(0,i.kt)("strong",{parentName:"p"},"test"),", and ",(0,i.kt)("strong",{parentName:"p"},"chore"),"."),(0,i.kt)("p",null,"The description should be lower-case for the first letter. For description of optional parts, please refer to the\n",(0,i.kt)("a",{parentName:"p",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional Commits Docs"),"."),(0,i.kt)("p",null,"Here are some simple example conventional commits:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"feat: implement new awesome feature\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"docs: add developer guidelines\n")),(0,i.kt)("p",null,"A more advanced example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"fix: prevent racing of requests\n\nIntroduce a request id and a reference to latest request. Dismiss\nincoming responses other than from latest request.\n\nRemove timeouts which were used to mitigate the racing issue but are\nobsolete now.\n\nReviewed-by: Z\nRefs: #123\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2ce3b5da.5391bc8e.js b/assets/js/2ce3b5da.5391bc8e.js new file mode 100644 index 0000000000..181f1da834 --- /dev/null +++ b/assets/js/2ce3b5da.5391bc8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9050],{7613:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>n,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>m});var t=o(7462),r=(o(7294),o(3905));o(5657);const a={title:"Variable speed compressor train",sidebar_position:3},i=void 0,l={unversionedId:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",title:"Variable speed compressor train",description:"In this model all compressors in the train have the same speed, and the model is build on a forward model of",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Variable speed compressor train",sidebar_position:3},sidebar:"about",previous:{title:"Simplified variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},next:{title:"Variable speed compressor train model with multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}},n={},m=[],d={toc:m},p="wrapper";function c(e){let{components:s,...a}=e;return(0,r.kt)(p,(0,t.Z)({},d,a,{components:s,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In this model all compressors in the train have the same speed, and the model is build on a forward model of\nthe fluid properties/state where speed is a parameter. Then the speed is iterated until the discharge pressure of the\noutlet is equal to the requested discharge pressure."),(0,r.kt)("p",null,"This model only supports ",(0,r.kt)("inlineCode",{parentName:"p"},"User defined variable speed compressor chart"),"."),(0,r.kt)("p",null,"In addition, a ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/fluid_model"},"FLUID MODEL")," must be specified."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Control mechanisms")),(0,r.kt)("p",null,"The variable speed comporessor train model has the following automatic control mechanisms:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Antisurge control:")," When the flowrate is too low, given the suction and discharge pressures, eCalc will use automatic anti-surge control. The use of the anti-surge valve (ASV) is mimicked by increasing the total flow through the compressor, until the head is at the surge line (minimum flow curve) of the compressor chart."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Speed increase below minimum speed:")," If a rate/head point is below the compressor chart (below minimum speed), the speed is automatically increased to the minimum speed curve."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Stonewall speed increase:")," When the flowrate is too high, given the suction and discharge pressures, eCalc will automatically increase the speed to meet the stonewall (maximum flow line) of the compressor chart. To achieve the requested discharge pressure, the outlet stream is choked. This control mechanism can be turned off, for cases where a downstream choke valve does not exist.")),(0,r.kt)("p",null,(0,r.kt)("img",{src:o(4117).Z,width:"730",height:"457"}),"\n",(0,r.kt)("strong",{parentName:"p"},"Format")),(0,r.kt)("p",null,"The model is defined under the main keyword ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," in the format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >\n PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>\n")))}c.isMDXComponent=!0},4117:(e,s,o)=>{o.d(s,{Z:()=>t});const t=o.p+"assets/images/control_mech_variable_speed-91a2c845dc627195fee373c1c63d952d.PNG"}}]); \ No newline at end of file diff --git a/assets/js/2cedaf2f.b313f202.js b/assets/js/2cedaf2f.b313f202.js new file mode 100644 index 0000000000..edc6415424 --- /dev/null +++ b/assets/js/2cedaf2f.b313f202.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5408],{2395:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>d,contentTitle:()=>s,default:()=>_,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var o=t(7462),a=(t(7294),t(3905)),n=t(5657);const r={title:"Generic Workflow",sidebar_position:1,description:"Generic workflow"},s=void 0,l={unversionedId:"about/modelling/workflow/generic_workflow",id:"about/modelling/workflow/generic_workflow",title:"Generic Workflow",description:"Generic workflow",source:"@site/docs/about/modelling/workflow/generic_workflow.md",sourceDirName:"about/modelling/workflow",slug:"/about/modelling/workflow/generic_workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/workflow/generic_workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Generic Workflow",sidebar_position:1,description:"Generic workflow"},sidebar:"about",previous:{title:"eCalc\u2122 Workflow",permalink:"/ecalc/docs/about/modelling/workflow/"},next:{title:"Examples",permalink:"/ecalc/docs/about/modelling/examples/"}},d={},c=[{value:"Simplified Process Flow Diagram",id:"simplified-process-flow-diagram",level:2},{value:"Workflow",id:"workflow",level:2},{value:"Workflow Explanation",id:"workflow-explanation",level:2},{value:"Required Subsurface Profiles",id:"required-subsurface-profiles",level:3},{value:"Facility Information",id:"facility-information",level:3},{value:"Constant Power Loads",id:"constant-power-loads",level:4},{value:"Additional Information",id:"additional-information",level:4},{value:"Consumer Information",id:"consumer-information",level:3},{value:"Generator Set",id:"generator-set",level:4},{value:"Compressor Curves",id:"compressor-curves",level:4},{value:"Validation",id:"validation",level:3},{value:"Calibration",id:"calibration",level:3}],m={toc:c},u="wrapper";function _(e){let{components:i,...r}=e;return(0,a.kt)(u,(0,o.Z)({},m,r,{components:i,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"simplified-process-flow-diagram"},"Simplified Process Flow Diagram"),(0,a.kt)("p",null,"The image below illustrates a simplified process flow diagram for a generic offshore oil and gas facility. Each unit included in this diagram can be modelled with the use of eCalc.\nThe ",(0,a.kt)("a",{parentName:"p",href:"#workflow"},"workflow")," below will outline what is necessary to obtain for each step. In addition, there are some accompanied ",(0,a.kt)("a",{parentName:"p",href:"#workflow-explanation"},"explanations")," to the workflow."),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(15).Z,width:"5863",height:"4444"})),(0,a.kt)("h2",{id:"workflow"},"Workflow"),(0,a.kt)(n.G,{chart:' flowchart TD;\n subgraph ide1 ["`**Required Subsurface Profiles [All in Sm3/d]**`"]\n ide1_A[Oil Produced];\n ide1_B[Gas Produced];\n ide1_C[Water Produced];\n ide1_D[Gas Injected];\n ide1_E[Water Injected];\n end\n subgraph ide2 ["`**Facility Information Needed**`"]\n\n ide2_A[[Power Generation System]] --\x3e ide2_A_1([Gas Turbines]);\n ide2_A_1 --\x3e ide2_A_2(["`Number of Gas Turbines `"]);\n ide2_A_2 --\x3e ide2_A_3(["`Maximum capacity per generator and spinning reserve`"]);\n \n ide2_B[["Water Injection System"]] --\x3e ide2_B_1(["`Suction Pressure`"]);\n ide2_B_1 --\x3e ide2_B_2(["`Discharge Pressure`"]);\n ide2_B_2 --\x3e ide2_B_3(["`Injected Water Density`"]);\n ide2_B_3 --\x3e ide2_B_4(["`Maximum capacity per pump`"]);\n \n ide2_D[[Gas Compression System]] --\x3e ide2_D_1(["`Export Compressor`"]);\n ide2_D --\x3e ide2_D_1_1(["`Re-Injection Compressor`"]);\n ide2_D_1 --\x3e ide2_D_2(["`Suction Pressure per compressor`"]);\n ide2_D_1_1 --\x3eide2_D_2\n ide2_D_2 --\x3e ide2_D_3(["`Discharge Pressure per compressor`"]);\n ide2_D_3 --\x3e ide2_D_4(["`Suction Temperature per compressor`"]);\n ide2_C[["Constant Power Loads"]] --\x3e ide2_C_1(["`Base Load`"]);\n ide2_C_1 --\x3e ide2_C_2(["`Oil Export Pumps`"]);\n ide2_C_2 --\x3e ide2_C_3(["`Gas Recompressor`"])\n \n ide2_E[[Additional Emissions]] --\x3e ide2_E_1([Flaring]);\n ide2_E_1 --\x3e ide2_E_2(["`Electrical Submersible Pumps (ESP)`"])\n ide2_E_2 --\x3e ide2_E_3(["`Drilling rigs`"])\n \n end\n\n subgraph ide3 ["`**Consumer Data Needed**`"]\n\n ide3_A[[Generator Set]]--\x3e ide3_A_1(["`Fuel vs Power relationship. Linear lines relating fuel and power`"]);\n ide3_A_1 --\x3e ide3_A_2(["`Generating switching. At max capacity of the generator, impose another generate on the existing`"]);\n \n ide3_B[[Compressors]] --\x3e ide3_B_1(["`Variable/single speed drive`"]);\n ide3_B_1 --\x3e ide3_B_2{Available charts?};\n ide3_B_2 -. yes .-> ide3_B_4(["`Use suppliers compressor chart (head vs flow, efficiency vs flow)`"]);\n ide3_B_2 -. no .-> ide3_B_3(["`Use generic chart functionality`"]);\n \n ide3_C[[Water Injectors]] --\x3e ide3_C_1(["`Variable/single speed drive`"]);\n ide3_C_1 --\x3e ide3_C_2{Available charts?};\n ide3_C_2 -. yes .-> ide3_C_4(["`Use suppliers pump chart (head vs flow, efficiency vs flow)`"]);\n ide3_C_2 -. no .-> ide3_C_3(["`Generate synthetic charts using expected head and flow ranges`"]);\n\n end\n\n subgraph ide4 ["`**Validation**`"]\n\n ide4_A{"Invalid data?"} \n\n ide4_A -. yes .-> ide4_A_1{"`Invalid Compressors?`"};\n ide4_A_1 -. yes .-> ide4_A_1_1(["`Either head or rate is too high`"]);\n ide4_A_1_1 --\x3e ide4_A_1_2(["`Plot operational points and adjust charts to fit historical data`"]);\n \n ide4_A -. yes .-> ide4_A_3{"`Invalid Pumps?`"};\n ide4_A_3 -. yes .-> ide4_A_3_1(["`Either head or rate is too high`"]);\n ide4_A_3_1 --\x3e ide4_A_3_2(["`Plot operational points and adjust charts to fit historical data`"]);\n \n ide4_A -. yes .-> ide4_A_4{"`Invalid Generator Set?`"};\n ide4_A_4 -. yes .-> ide4_A_4_1(["`Check maximum and minimum facility power consumption values are within the range of the specified generator set`"]);\n ide4_A_4_1 --\x3e ide4_A_4_2(["`Adjust generator set`"]);\n\n end\n\n subgraph ide5 ["`Calibration`"]\n\n ide5_A["`Calibration`"] --\x3e ide5_A_1(["`Compare measured power against eCalc power`"]) ;\n ide5_A_1 --\x3e ide5_A_2{"`Do they correlate`"}\n ide5_A_2 -. yes .-> ide5_A_3_1{"`Are all points valid?`"};\n ide5_A_3_1 -. yes .-> ide5_A_3_2(["`No further calibration needed`"])\n ide5_A_2 -. no .-> ide5_A_2_1(["`Consider using POWERLOSSFACTOR to adjust modelled to measured power`"])\n ide5_A_2_1 --\x3e ide5_A_3_1\n ide5_A_4_1(["`Plot operational points on the same figure as the performance chart`"]) --\x3e ide5_A_4_2(["`Alter the head vs flow curves (using fan law theory)`"])\n ide5_A_4_2 --\x3e ide5_A_1\n ide5_A_3_1 -. no .-> ide5_A_4_1\n end\n \n ide1 ~~~ ide2\n ide2 ~~~ ide3\n ide3 ~~~ ide4\n ide4 ~~~ ide5',mdxType:"Mermaid"}),(0,a.kt)("h2",{id:"workflow-explanation"},"Workflow Explanation"),(0,a.kt)("h3",{id:"required-subsurface-profiles"},"Required Subsurface Profiles"),(0,a.kt)("p",null,"All subsurface profiles must be in Sm",(0,a.kt)("sup",null,"3"),"/day. This data must be inputted as a ",(0,a.kt)("inlineCode",{parentName:"p"},"TIME-SERIES")," and references to how it is used in the facility or by a relevant consumer."),(0,a.kt)("h3",{id:"facility-information"},"Facility Information"),(0,a.kt)("h4",{id:"constant-power-loads"},"Constant Power Loads"),(0,a.kt)("p",null,"To simplify certain models, there are some common assumptions made. Here are some examples:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Base Load"),': As eCalc\u2122 is not simulating the whole facility there are often energy consumers that are not modelled.\nTypically these energy consumers relate to things such as the energy consumption of living quarters and are often constant loads.\nThese smaller constant loads are then grouped into a larger term, called the "baseload". This is assumed to be constant and independent of the production rate of the facility.'),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Recompressor"),": The main function of a recompressor is to compressor gas from separator pressures back up to the inlet separator pressure.\nThese compressors are often smaller and have little fluctuation in their load.\nThus, to simplify modelling, these recompressors are often modelled as constant loads. And at times, are included within the facility's base load"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Oil Export Pumps"),": As eCalc\u2122 does not model oil pumps, these are often modelled as constant loads or modelled with a table (that relates oil rate to power consumption). The method in which they are modelled depends from facility to facility ")),(0,a.kt)("h4",{id:"additional-information"},"Additional Information"),(0,a.kt)("p",null,"Any emissions that do not fall within the defined categories can still be considered for a given platform. For example, if there are drilling activities, an additional fuel type can be specified and related to the fuel consumption of a drilling rig. "),(0,a.kt)("h3",{id:"consumer-information"},"Consumer Information"),(0,a.kt)("h4",{id:"generator-set"},"Generator Set"),(0,a.kt)("p",null,'As eCalc\u2122 does not indepthly model gas turbine generators, alternative methods are used.\nHere, fuel consumed and power generated is related in tabular form. These are typically linear relationships, and if more than one generator is used, "generator switching" is modelled by adding another generator curve on top of the existing.'),(0,a.kt)("p",null,"This means that the facility will operate in the most efficient manner, i.e. meaning that if one generator will satisfy the power demand, only one generator will always be used. "),(0,a.kt)("h4",{id:"compressor-curves"},"Compressor Curves"),(0,a.kt)("p",null,"eCalc\u2122 has generic compressor curve functionality which can be used when compressor curves are not available.\nHowever, if a manufactor compressor chart is available, it is always recommended to use this over a generic chart.\nThe generic compressor curves, use the assumption of constant polytropic efficiency, which is only a good assumption if the compressor is running near the design points. "),(0,a.kt)("h3",{id:"validation"},"Validation"),(0,a.kt)("p",null,"Checking whether an eCalc\u2122 model is valid or not, is an essential task. If a model is not valid, this means that input requirements set by the user are not being fulfilled, or that some consumers are giving unrealistic solutions."),(0,a.kt)("p",null,"Validity can be checked by consumer, and there are often specific reasons why certain consumers are invalid. For example:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Compressors and Pumps"),": It is common that either too high a head or rate value is specified. This means that the invalid point is outside the limits of the performance chart. To determine the issue, it is recommended that the operational points (Head, and actual flowrate) are plotted together with the chart."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Generator Set"),": The most common issue here is that the amount of power required is higher than the maximum value in the utilised genset. ")),(0,a.kt)("h3",{id:"calibration"},"Calibration"),(0,a.kt)("p",null,"The term calibration in eCalc\u2122 often refers to the history matching of the facility. Essentially, real operational data is compared against the eCalc\u2122 model results. If they do not correlate various changes are made to the model."),(0,a.kt)("p",null,"The main workflow with this would be to match every individual consumer, e.g. each pump and compressor. After that, it is the recommended to compare on the facility level (e.g. total power consumed or total fuel used), then various adjustments can be made.\nThese adjustments can mean changes to the base load, shifting the compressor curves, or simply by using a ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"},"POWERLOSSFACTOR"),"."))}_.isMDXComponent=!0},15:(e,i,t)=>{t.d(i,{Z:()=>o});const o=t.p+"assets/images/simple_facility_pfd-ad59578d69ea3d3267f646b9d8141822.jpg"}}]); \ No newline at end of file diff --git a/assets/js/2df92a48.bac285c1.js b/assets/js/2df92a48.bac285c1.js new file mode 100644 index 0000000000..55db5a79b7 --- /dev/null +++ b/assets/js/2df92a48.bac285c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3596],{8373:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>n,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=s(7462),a=(s(7294),s(3905));s(5657);const o={},n="FUEL_TYPES",c={unversionedId:"about/references/keywords/FUEL_TYPES",id:"about/references/keywords/FUEL_TYPES",title:"FUEL_TYPES",description:"FUELTYPES",source:"@site/docs/about/references/keywords/FUEL_TYPES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUEL_TYPES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE"},next:{title:"GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS"}},i={},d=[{value:"Description",id:"description",level:2}],u={toc:d},l="wrapper";function p(e){let{components:t,...s}=e;return(0,a.kt)(l,(0,r.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"fuel_types"},"FUEL_TYPES"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"This part of the setup specifies the various fuel types and associated emissions\nused in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," part of the setup by its name."),(0,a.kt)("p",null,"A fuel type can have a fuel-cost ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/PRICE"},"PRICE")," associated with\nits use. The use of fuel can lead to one or more emission types, specified in ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSIONS"},"EMISSIONS"),",\nwhich in turn can have associated costs.\nYou can optionally specify a ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY"),"."),(0,a.kt)("p",null,"See ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/fuel_types"},"FUEL TYPES")," for more details about usage."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2f04f592.57768e9a.js b/assets/js/2f04f592.57768e9a.js new file mode 100644 index 0000000000..cd89b99eb9 --- /dev/null +++ b/assets/js/2f04f592.57768e9a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7495],{7826:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>n,contentTitle:()=>r,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>i});var o=t(7462),s=(t(7294),t(3905));t(5657);const c={slug:"separator",title:"---",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:2},r=void 0,l={unversionedId:"changelog/separator",id:"changelog/separator",title:"---",description:"",source:"@site/docs/changelog/separator.md",sourceDirName:"changelog",slug:"/changelog/separator",permalink:"/ecalc/docs/changelog/separator",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/separator.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:2,frontMatter:{slug:"separator",title:"---",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:2},sidebar:"changelog",previous:{title:"Next",permalink:"/ecalc/docs/changelog/latest"},next:{title:"v7.0",permalink:"/ecalc/docs/changelog/v7-0-release"}},n={},i=[],g={toc:i},d="wrapper";function p(e){let{components:a,...t}=e;return(0,s.kt)(d,(0,o.Z)({},g,t,{components:a,mdxType:"MDXLayout"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/314.17af5036.js b/assets/js/314.17af5036.js new file mode 100644 index 0000000000..6c5fa1cf64 --- /dev/null +++ b/assets/js/314.17af5036.js @@ -0,0 +1,1707 @@ +"use strict"; +exports.id = 314; +exports.ids = [314]; +exports.modules = { + +/***/ 95314: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(81188); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(43047); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 7], $V2 = [1, 5], $V3 = [1, 9], $V4 = [1, 6], $V5 = [2, 6], $V6 = [1, 16], $V7 = [6, 8, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40, 50, 55], $V8 = [8, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40], $V9 = [8, 13, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40], $Va = [1, 26], $Vb = [6, 8, 14, 50, 55], $Vc = [8, 14, 55], $Vd = [1, 53], $Ve = [1, 52], $Vf = [8, 14, 30, 33, 35, 38, 55], $Vg = [1, 67], $Vh = [1, 68], $Vi = [1, 69], $Vj = [8, 14, 33, 35, 42, 55]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "directive": 5, "GG": 6, "document": 7, "EOF": 8, ":": 9, "DIR": 10, "options": 11, "body": 12, "OPT": 13, "NL": 14, "line": 15, "statement": 16, "commitStatement": 17, "mergeStatement": 18, "cherryPickStatement": 19, "acc_title": 20, "acc_title_value": 21, "acc_descr": 22, "acc_descr_value": 23, "acc_descr_multiline_value": 24, "section": 25, "branchStatement": 26, "CHECKOUT": 27, "ref": 28, "BRANCH": 29, "ORDER": 30, "NUM": 31, "CHERRY_PICK": 32, "COMMIT_ID": 33, "STR": 34, "COMMIT_TAG": 35, "EMPTYSTR": 36, "MERGE": 37, "COMMIT_TYPE": 38, "commitType": 39, "COMMIT": 40, "commit_arg": 41, "COMMIT_MSG": 42, "NORMAL": 43, "REVERSE": 44, "HIGHLIGHT": 45, "openDirective": 46, "typeDirective": 47, "closeDirective": 48, "argDirective": 49, "open_directive": 50, "type_directive": 51, "arg_directive": 52, "close_directive": 53, "ID": 54, ";": 55, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "GG", 8: "EOF", 9: ":", 10: "DIR", 13: "OPT", 14: "NL", 20: "acc_title", 21: "acc_title_value", 22: "acc_descr", 23: "acc_descr_value", 24: "acc_descr_multiline_value", 25: "section", 27: "CHECKOUT", 29: "BRANCH", 30: "ORDER", 31: "NUM", 32: "CHERRY_PICK", 33: "COMMIT_ID", 34: "STR", 35: "COMMIT_TAG", 36: "EMPTYSTR", 37: "MERGE", 38: "COMMIT_TYPE", 40: "COMMIT", 42: "COMMIT_MSG", 43: "NORMAL", 44: "REVERSE", 45: "HIGHLIGHT", 50: "open_directive", 51: "type_directive", 52: "arg_directive", 53: "close_directive", 54: "ID", 55: ";" }, + productions_: [0, [3, 2], [3, 2], [3, 3], [3, 4], [3, 5], [7, 0], [7, 2], [11, 2], [11, 1], [12, 0], [12, 2], [15, 2], [15, 1], [16, 1], [16, 1], [16, 1], [16, 2], [16, 2], [16, 1], [16, 1], [16, 1], [16, 2], [26, 2], [26, 4], [19, 3], [19, 5], [19, 5], [19, 5], [19, 5], [18, 2], [18, 4], [18, 4], [18, 4], [18, 6], [18, 6], [18, 6], [18, 6], [18, 6], [18, 6], [18, 8], [18, 8], [18, 8], [18, 8], [18, 8], [18, 8], [17, 2], [17, 3], [17, 3], [17, 5], [17, 5], [17, 3], [17, 5], [17, 5], [17, 5], [17, 5], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 3], [17, 5], [17, 5], [17, 5], [17, 5], [17, 5], [17, 5], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [41, 0], [41, 1], [39, 1], [39, 1], [39, 1], [5, 3], [5, 5], [46, 1], [47, 1], [49, 1], [48, 1], [28, 1], [28, 1], [4, 1], [4, 1], [4, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + return $$[$0]; + case 4: + return $$[$0 - 1]; + case 5: + yy.setDirection($$[$0 - 3]); + return $$[$0 - 1]; + case 7: + yy.setOptions($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 8: + $$[$0 - 1] += $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 10: + this.$ = []; + break; + case 11: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 12: + this.$ = $$[$0 - 1]; + break; + case 17: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 18: + case 19: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 20: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 22: + yy.checkout($$[$0]); + break; + case 23: + yy.branch($$[$0]); + break; + case 24: + yy.branch($$[$0 - 2], $$[$0]); + break; + case 25: + yy.cherryPick($$[$0], "", void 0); + break; + case 26: + yy.cherryPick($$[$0 - 2], "", $$[$0]); + break; + case 27: + case 29: + yy.cherryPick($$[$0 - 2], "", ""); + break; + case 28: + yy.cherryPick($$[$0], "", $$[$0 - 2]); + break; + case 30: + yy.merge($$[$0], "", "", ""); + break; + case 31: + yy.merge($$[$0 - 2], $$[$0], "", ""); + break; + case 32: + yy.merge($$[$0 - 2], "", $$[$0], ""); + break; + case 33: + yy.merge($$[$0 - 2], "", "", $$[$0]); + break; + case 34: + yy.merge($$[$0 - 4], $$[$0], "", $$[$0 - 2]); + break; + case 35: + yy.merge($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 36: + yy.merge($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 37: + yy.merge($$[$0 - 4], $$[$0 - 2], $$[$0], ""); + break; + case 38: + yy.merge($$[$0 - 4], $$[$0 - 2], "", $$[$0]); + break; + case 39: + yy.merge($$[$0 - 4], $$[$0], $$[$0 - 2], ""); + break; + case 40: + yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 41: + yy.merge($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 42: + yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 43: + yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 44: + yy.merge($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 45: + yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 46: + yy.commit($$[$0]); + break; + case 47: + yy.commit("", "", yy.commitType.NORMAL, $$[$0]); + break; + case 48: + yy.commit("", "", $$[$0], ""); + break; + case 49: + yy.commit("", "", $$[$0], $$[$0 - 2]); + break; + case 50: + yy.commit("", "", $$[$0 - 2], $$[$0]); + break; + case 51: + yy.commit("", $$[$0], yy.commitType.NORMAL, ""); + break; + case 52: + yy.commit("", $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); + break; + case 53: + yy.commit("", $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 54: + yy.commit("", $$[$0 - 2], $$[$0], ""); + break; + case 55: + yy.commit("", $$[$0], $$[$0 - 2], ""); + break; + case 56: + yy.commit("", $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 57: + yy.commit("", $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 58: + yy.commit("", $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 59: + yy.commit("", $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 60: + yy.commit("", $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 61: + yy.commit("", $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 62: + yy.commit($$[$0], "", yy.commitType.NORMAL, ""); + break; + case 63: + yy.commit($$[$0], "", yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 64: + yy.commit($$[$0 - 2], "", yy.commitType.NORMAL, $$[$0]); + break; + case 65: + yy.commit($$[$0 - 2], "", $$[$0], ""); + break; + case 66: + yy.commit($$[$0], "", $$[$0 - 2], ""); + break; + case 67: + yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, ""); + break; + case 68: + yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, ""); + break; + case 69: + yy.commit($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 70: + yy.commit($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 71: + yy.commit($$[$0 - 2], "", $$[$0 - 4], $$[$0]); + break; + case 72: + yy.commit($$[$0], "", $$[$0 - 4], $$[$0 - 2]); + break; + case 73: + yy.commit($$[$0], "", $$[$0 - 2], $$[$0 - 4]); + break; + case 74: + yy.commit($$[$0 - 2], "", $$[$0], $$[$0 - 4]); + break; + case 75: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], ""); + break; + case 76: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], ""); + break; + case 77: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], ""); + break; + case 78: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], ""); + break; + case 79: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], ""); + break; + case 80: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], ""); + break; + case 81: + yy.commit($$[$0 - 4], $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 82: + yy.commit($$[$0 - 4], $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); + break; + case 83: + yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, $$[$0 - 4]); + break; + case 84: + yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, $$[$0 - 4]); + break; + case 85: + yy.commit($$[$0], $$[$0 - 4], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 86: + yy.commit($$[$0 - 2], $$[$0 - 4], yy.commitType.NORMAL, $$[$0]); + break; + case 87: + yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 88: + yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 89: + yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 90: + yy.commit($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 91: + yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 92: + yy.commit($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 93: + yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0 - 2], $$[$0]); + break; + case 94: + yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0], $$[$0 - 2]); + break; + case 95: + yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0 - 4], $$[$0]); + break; + case 96: + yy.commit($$[$0], $$[$0 - 6], $$[$0 - 4], $$[$0 - 2]); + break; + case 97: + yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0], $$[$0 - 4]); + break; + case 98: + yy.commit($$[$0], $$[$0 - 6], $$[$0 - 2], $$[$0 - 4]); + break; + case 99: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], $$[$0 - 6]); + break; + case 100: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], $$[$0 - 6]); + break; + case 101: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], $$[$0 - 6]); + break; + case 102: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], $$[$0 - 6]); + break; + case 103: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], $$[$0 - 6]); + break; + case 104: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 6]); + break; + case 105: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0 - 6], $$[$0]); + break; + case 106: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 6], $$[$0 - 2]); + break; + case 107: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 6], $$[$0 - 4]); + break; + case 108: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 6], $$[$0 - 4]); + break; + case 109: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0 - 6], $$[$0]); + break; + case 110: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 6], $$[$0 - 2]); + break; + case 111: + this.$ = ""; + break; + case 112: + this.$ = $$[$0]; + break; + case 113: + this.$ = yy.commitType.NORMAL; + break; + case 114: + this.$ = yy.commitType.REVERSE; + break; + case 115: + this.$ = yy.commitType.HIGHLIGHT; + break; + case 118: + yy.parseDirective("%%{", "open_directive"); + break; + case 119: + yy.parseDirective($$[$0], "type_directive"); + break; + case 120: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 121: + yy.parseDirective("}%%", "close_directive", "gitGraph"); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 3: 11, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 7: 12, 8: $V5, 9: [1, 13], 10: [1, 14], 11: 15, 14: $V6 }, o($V7, [2, 124]), o($V7, [2, 125]), o($V7, [2, 126]), { 47: 17, 51: [1, 18] }, { 51: [2, 118] }, { 1: [2, 1] }, { 1: [2, 2] }, { 8: [1, 19] }, { 7: 20, 8: $V5, 11: 15, 14: $V6 }, { 9: [1, 21] }, o($V8, [2, 10], { 12: 22, 13: [1, 23] }), o($V9, [2, 9]), { 9: [1, 25], 48: 24, 53: $Va }, o([9, 53], [2, 119]), { 1: [2, 3] }, { 8: [1, 27] }, { 7: 28, 8: $V5, 11: 15, 14: $V6 }, { 8: [2, 7], 14: [1, 31], 15: 29, 16: 30, 17: 32, 18: 33, 19: 34, 20: [1, 35], 22: [1, 36], 24: [1, 37], 25: [1, 38], 26: 39, 27: [1, 40], 29: [1, 44], 32: [1, 43], 37: [1, 42], 40: [1, 41] }, o($V9, [2, 8]), o($Vb, [2, 116]), { 49: 45, 52: [1, 46] }, o($Vb, [2, 121]), { 1: [2, 4] }, { 8: [1, 47] }, o($V8, [2, 11]), { 4: 48, 8: $V1, 14: $V2, 55: $V4 }, o($V8, [2, 13]), o($Vc, [2, 14]), o($Vc, [2, 15]), o($Vc, [2, 16]), { 21: [1, 49] }, { 23: [1, 50] }, o($Vc, [2, 19]), o($Vc, [2, 20]), o($Vc, [2, 21]), { 28: 51, 34: $Vd, 54: $Ve }, o($Vc, [2, 111], { 41: 54, 33: [1, 57], 34: [1, 59], 35: [1, 55], 38: [1, 56], 42: [1, 58] }), { 28: 60, 34: $Vd, 54: $Ve }, { 33: [1, 61], 35: [1, 62] }, { 28: 63, 34: $Vd, 54: $Ve }, { 48: 64, 53: $Va }, { 53: [2, 120] }, { 1: [2, 5] }, o($V8, [2, 12]), o($Vc, [2, 17]), o($Vc, [2, 18]), o($Vc, [2, 22]), o($Vf, [2, 122]), o($Vf, [2, 123]), o($Vc, [2, 46]), { 34: [1, 65] }, { 39: 66, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 70] }, { 34: [1, 71] }, o($Vc, [2, 112]), o($Vc, [2, 30], { 33: [1, 72], 35: [1, 74], 38: [1, 73] }), { 34: [1, 75] }, { 34: [1, 76], 36: [1, 77] }, o($Vc, [2, 23], { 30: [1, 78] }), o($Vb, [2, 117]), o($Vc, [2, 47], { 33: [1, 80], 38: [1, 79], 42: [1, 81] }), o($Vc, [2, 48], { 33: [1, 83], 35: [1, 82], 42: [1, 84] }), o($Vj, [2, 113]), o($Vj, [2, 114]), o($Vj, [2, 115]), o($Vc, [2, 51], { 35: [1, 85], 38: [1, 86], 42: [1, 87] }), o($Vc, [2, 62], { 33: [1, 90], 35: [1, 88], 38: [1, 89] }), { 34: [1, 91] }, { 39: 92, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 93] }, o($Vc, [2, 25], { 35: [1, 94] }), { 33: [1, 95] }, { 33: [1, 96] }, { 31: [1, 97] }, { 39: 98, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 99] }, { 34: [1, 100] }, { 34: [1, 101] }, { 34: [1, 102] }, { 34: [1, 103] }, { 34: [1, 104] }, { 39: 105, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 106] }, { 34: [1, 107] }, { 39: 108, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 109] }, o($Vc, [2, 31], { 35: [1, 111], 38: [1, 110] }), o($Vc, [2, 32], { 33: [1, 113], 35: [1, 112] }), o($Vc, [2, 33], { 33: [1, 114], 38: [1, 115] }), { 34: [1, 116], 36: [1, 117] }, { 34: [1, 118] }, { 34: [1, 119] }, o($Vc, [2, 24]), o($Vc, [2, 49], { 33: [1, 120], 42: [1, 121] }), o($Vc, [2, 53], { 38: [1, 122], 42: [1, 123] }), o($Vc, [2, 63], { 33: [1, 125], 38: [1, 124] }), o($Vc, [2, 50], { 33: [1, 126], 42: [1, 127] }), o($Vc, [2, 55], { 35: [1, 128], 42: [1, 129] }), o($Vc, [2, 66], { 33: [1, 131], 35: [1, 130] }), o($Vc, [2, 52], { 38: [1, 132], 42: [1, 133] }), o($Vc, [2, 54], { 35: [1, 134], 42: [1, 135] }), o($Vc, [2, 67], { 35: [1, 137], 38: [1, 136] }), o($Vc, [2, 64], { 33: [1, 139], 38: [1, 138] }), o($Vc, [2, 65], { 33: [1, 141], 35: [1, 140] }), o($Vc, [2, 68], { 35: [1, 143], 38: [1, 142] }), { 39: 144, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 145] }, { 34: [1, 146] }, { 34: [1, 147] }, { 34: [1, 148] }, { 39: 149, 43: $Vg, 44: $Vh, 45: $Vi }, o($Vc, [2, 26]), o($Vc, [2, 27]), o($Vc, [2, 28]), o($Vc, [2, 29]), { 34: [1, 150] }, { 34: [1, 151] }, { 39: 152, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 153] }, { 39: 154, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 155] }, { 34: [1, 156] }, { 34: [1, 157] }, { 34: [1, 158] }, { 34: [1, 159] }, { 34: [1, 160] }, { 34: [1, 161] }, { 39: 162, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 163] }, { 34: [1, 164] }, { 34: [1, 165] }, { 39: 166, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 167] }, { 39: 168, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 169] }, { 34: [1, 170] }, { 34: [1, 171] }, { 39: 172, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 173] }, o($Vc, [2, 37], { 35: [1, 174] }), o($Vc, [2, 38], { 38: [1, 175] }), o($Vc, [2, 36], { 33: [1, 176] }), o($Vc, [2, 39], { 35: [1, 177] }), o($Vc, [2, 34], { 38: [1, 178] }), o($Vc, [2, 35], { 33: [1, 179] }), o($Vc, [2, 60], { 42: [1, 180] }), o($Vc, [2, 73], { 33: [1, 181] }), o($Vc, [2, 61], { 42: [1, 182] }), o($Vc, [2, 84], { 38: [1, 183] }), o($Vc, [2, 74], { 33: [1, 184] }), o($Vc, [2, 83], { 38: [1, 185] }), o($Vc, [2, 59], { 42: [1, 186] }), o($Vc, [2, 72], { 33: [1, 187] }), o($Vc, [2, 58], { 42: [1, 188] }), o($Vc, [2, 78], { 35: [1, 189] }), o($Vc, [2, 71], { 33: [1, 190] }), o($Vc, [2, 77], { 35: [1, 191] }), o($Vc, [2, 57], { 42: [1, 192] }), o($Vc, [2, 85], { 38: [1, 193] }), o($Vc, [2, 56], { 42: [1, 194] }), o($Vc, [2, 79], { 35: [1, 195] }), o($Vc, [2, 80], { 35: [1, 196] }), o($Vc, [2, 86], { 38: [1, 197] }), o($Vc, [2, 70], { 33: [1, 198] }), o($Vc, [2, 81], { 38: [1, 199] }), o($Vc, [2, 69], { 33: [1, 200] }), o($Vc, [2, 75], { 35: [1, 201] }), o($Vc, [2, 76], { 35: [1, 202] }), o($Vc, [2, 82], { 38: [1, 203] }), { 34: [1, 204] }, { 39: 205, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 206] }, { 34: [1, 207] }, { 39: 208, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 209] }, { 34: [1, 210] }, { 34: [1, 211] }, { 34: [1, 212] }, { 39: 213, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 214] }, { 39: 215, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 216] }, { 34: [1, 217] }, { 34: [1, 218] }, { 34: [1, 219] }, { 34: [1, 220] }, { 34: [1, 221] }, { 34: [1, 222] }, { 39: 223, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 224] }, { 34: [1, 225] }, { 34: [1, 226] }, { 39: 227, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 228] }, { 39: 229, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 230] }, { 34: [1, 231] }, { 34: [1, 232] }, { 39: 233, 43: $Vg, 44: $Vh, 45: $Vi }, o($Vc, [2, 40]), o($Vc, [2, 42]), o($Vc, [2, 41]), o($Vc, [2, 43]), o($Vc, [2, 45]), o($Vc, [2, 44]), o($Vc, [2, 101]), o($Vc, [2, 102]), o($Vc, [2, 99]), o($Vc, [2, 100]), o($Vc, [2, 104]), o($Vc, [2, 103]), o($Vc, [2, 108]), o($Vc, [2, 107]), o($Vc, [2, 106]), o($Vc, [2, 105]), o($Vc, [2, 110]), o($Vc, [2, 109]), o($Vc, [2, 98]), o($Vc, [2, 97]), o($Vc, [2, 96]), o($Vc, [2, 95]), o($Vc, [2, 93]), o($Vc, [2, 94]), o($Vc, [2, 92]), o($Vc, [2, 91]), o($Vc, [2, 90]), o($Vc, [2, 89]), o($Vc, [2, 87]), o($Vc, [2, 88])], + defaultActions: { 9: [2, 118], 10: [2, 1], 11: [2, 2], 19: [2, 3], 27: [2, 4], 46: [2, 120], 47: [2, 5] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 50; + case 1: + this.begin("type_directive"); + return 51; + case 2: + this.popState(); + this.begin("arg_directive"); + return 9; + case 3: + this.popState(); + this.popState(); + return 53; + case 4: + return 52; + case 5: + this.begin("acc_title"); + return 20; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 22; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + return 14; + case 13: + break; + case 14: + break; + case 15: + return 6; + case 16: + return 40; + case 17: + return 33; + case 18: + return 38; + case 19: + return 42; + case 20: + return 43; + case 21: + return 44; + case 22: + return 45; + case 23: + return 35; + case 24: + return 29; + case 25: + return 30; + case 26: + return 37; + case 27: + return 32; + case 28: + return 27; + case 29: + return 10; + case 30: + return 10; + case 31: + return 9; + case 32: + return "CARET"; + case 33: + this.begin("options"); + break; + case 34: + this.popState(); + break; + case 35: + return 13; + case 36: + return 36; + case 37: + this.begin("string"); + break; + case 38: + this.popState(); + break; + case 39: + return 34; + case 40: + return 31; + case 41: + return 54; + case 42: + return 8; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gitGraph\b)/i, /^(?:commit(?=\s|$))/i, /^(?:id:)/i, /^(?:type:)/i, /^(?:msg:)/i, /^(?:NORMAL\b)/i, /^(?:REVERSE\b)/i, /^(?:HIGHLIGHT\b)/i, /^(?:tag:)/i, /^(?:branch(?=\s|$))/i, /^(?:order:)/i, /^(?:merge(?=\s|$))/i, /^(?:cherry-pick(?=\s|$))/i, /^(?:checkout(?=\s|$))/i, /^(?:LR\b)/i, /^(?:BT\b)/i, /^(?::)/i, /^(?:\^)/i, /^(?:options\r?\n)/i, /^(?:[ \r\n\t]+end\b)/i, /^(?:[\s\S]+(?=[ \r\n\t]+end))/i, /^(?:["]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[0-9]+(?=\s|$))/i, /^(?:\w([-\./\w]*[-\w])?)/i, /^(?:$)/i, /^(?:\s+)/i], + conditions: { "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "options": { "rules": [34, 35], "inclusive": false }, "string": { "rules": [38, 39], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 40, 41, 42, 43], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const gitGraphParser = parser; +let mainBranchName = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().gitGraph.mainBranchName; +let mainBranchOrder = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().gitGraph.mainBranchOrder; +let commits = {}; +let head = null; +let branchesConfig = {}; +branchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder }; +let branches = {}; +branches[mainBranchName] = head; +let curBranch = mainBranchName; +let direction = "LR"; +let seq = 0; +function getId() { + return (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.q)({ length: 7 }); +} +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_6__.m.parseDirective(this, statement, context, type); +}; +function uniqBy(list, fn) { + const recordMap = /* @__PURE__ */ Object.create(null); + return list.reduce((out, item) => { + const key = fn(item); + if (!recordMap[key]) { + recordMap[key] = true; + out.push(item); + } + return out; + }, []); +} +const setDirection = function(dir) { + direction = dir; +}; +let options = {}; +const setOptions = function(rawOptString) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("options str", rawOptString); + rawOptString = rawOptString && rawOptString.trim(); + rawOptString = rawOptString || "{}"; + try { + options = JSON.parse(rawOptString); + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing gitGraph options", e.message); + } +}; +const getOptions = function() { + return options; +}; +const commit = function(msg, id, type, tag) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering commit:", msg, id, type, tag); + id = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(id, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + msg = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(msg, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + tag = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + const commit2 = { + id: id ? id : seq + "-" + getId(), + message: msg, + seq: seq++, + type: type ? type : commitType$1.NORMAL, + tag: tag ? tag : "", + parents: head == null ? [] : [head.id], + branch: curBranch + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in pushCommit " + commit2.id); +}; +const branch = function(name, order) { + name = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(name, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + if (branches[name] === void 0) { + branches[name] = head != null ? head.id : null; + branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null }; + checkout(name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in createBranch"); + } else { + let error = new Error( + 'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ' + name + '")' + ); + error.hash = { + text: "branch " + name, + token: "branch " + name, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"checkout ' + name + '"'] + }; + throw error; + } +}; +const merge = function(otherBranch, custom_id, override_type, custom_tag) { + otherBranch = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(otherBranch, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + custom_id = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(custom_id, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + const currentCommit = commits[branches[curBranch]]; + const otherCommit = commits[branches[otherBranch]]; + if (curBranch === otherBranch) { + let error = new Error('Incorrect usage of "merge". Cannot merge a branch to itself'); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch abc"] + }; + throw error; + } else if (currentCommit === void 0 || !currentCommit) { + let error = new Error( + 'Incorrect usage of "merge". Current branch (' + curBranch + ")has no commits" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["commit"] + }; + throw error; + } else if (branches[otherBranch] === void 0) { + let error = new Error( + 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") does not exist" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch " + otherBranch] + }; + throw error; + } else if (otherCommit === void 0 || !otherCommit) { + let error = new Error( + 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") has no commits" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"commit"'] + }; + throw error; + } else if (currentCommit === otherCommit) { + let error = new Error('Incorrect usage of "merge". Both branches have same head'); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch abc"] + }; + throw error; + } else if (custom_id && commits[custom_id] !== void 0) { + let error = new Error( + 'Incorrect usage of "merge". Commit with id:' + custom_id + " already exists, use different custom Id" + ); + error.hash = { + text: "merge " + otherBranch + custom_id + override_type + custom_tag, + token: "merge " + otherBranch + custom_id + override_type + custom_tag, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: [ + "merge " + otherBranch + " " + custom_id + "_UNIQUE " + override_type + " " + custom_tag + ] + }; + throw error; + } + const commit2 = { + id: custom_id ? custom_id : seq + "-" + getId(), + message: "merged branch " + otherBranch + " into " + curBranch, + seq: seq++, + parents: [head == null ? null : head.id, branches[otherBranch]], + branch: curBranch, + type: commitType$1.MERGE, + customType: override_type, + customId: custom_id ? true : false, + tag: custom_tag ? custom_tag : "" + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in mergeBranch"); +}; +const cherryPick = function(sourceId, targetId, tag) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering cherryPick:", sourceId, targetId, tag); + sourceId = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(sourceId, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + targetId = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(targetId, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + tag = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + if (!sourceId || commits[sourceId] === void 0) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit id should exist and provided' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + let sourceCommit = commits[sourceId]; + let sourceCommitBranch = sourceCommit.branch; + if (sourceCommit.type === commitType$1.MERGE) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit should not be a merge commit' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + if (!targetId || commits[targetId] === void 0) { + if (sourceCommitBranch === curBranch) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit is already on current branch' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + const currentCommit = commits[branches[curBranch]]; + if (currentCommit === void 0 || !currentCommit) { + let error = new Error( + 'Incorrect usage of "cherry-pick". Current branch (' + curBranch + ")has no commits" + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + const commit2 = { + id: seq + "-" + getId(), + message: "cherry-picked " + sourceCommit + " into " + curBranch, + seq: seq++, + parents: [head == null ? null : head.id, sourceCommit.id], + branch: curBranch, + type: commitType$1.CHERRY_PICK, + tag: tag ?? "cherry-pick:" + sourceCommit.id + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in cherryPick"); + } +}; +const checkout = function(branch2) { + branch2 = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(branch2, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + if (branches[branch2] === void 0) { + let error = new Error( + 'Trying to checkout branch which is not yet created. (Help try using "branch ' + branch2 + '")' + ); + error.hash = { + text: "checkout " + branch2, + token: "checkout " + branch2, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"branch ' + branch2 + '"'] + }; + throw error; + } else { + curBranch = branch2; + const id = branches[curBranch]; + head = commits[id]; + } +}; +function upsert(arr, key, newVal) { + const index = arr.indexOf(key); + if (index === -1) { + arr.push(newVal); + } else { + arr.splice(index, 1, newVal); + } +} +function prettyPrintCommitHistory(commitArr) { + const commit2 = commitArr.reduce((out, commit3) => { + if (out.seq > commit3.seq) { + return out; + } + return commit3; + }, commitArr[0]); + let line = ""; + commitArr.forEach(function(c) { + if (c === commit2) { + line += " *"; + } else { + line += " |"; + } + }); + const label = [line, commit2.id, commit2.seq]; + for (let branch2 in branches) { + if (branches[branch2] === commit2.id) { + label.push(branch2); + } + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(label.join(" ")); + if (commit2.parents && commit2.parents.length == 2) { + const newCommit = commits[commit2.parents[0]]; + upsert(commitArr, commit2, newCommit); + commitArr.push(commits[commit2.parents[1]]); + } else if (commit2.parents.length == 0) { + return; + } else { + const nextCommit = commits[commit2.parents]; + upsert(commitArr, commit2, nextCommit); + } + commitArr = uniqBy(commitArr, (c) => c.id); + prettyPrintCommitHistory(commitArr); +} +const prettyPrint = function() { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(commits); + const node = getCommitsArray()[0]; + prettyPrintCommitHistory([node]); +}; +const clear$1 = function() { + commits = {}; + head = null; + let mainBranch = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().gitGraph.mainBranchName; + let mainBranchOrder2 = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().gitGraph.mainBranchOrder; + branches = {}; + branches[mainBranch] = null; + branchesConfig = {}; + branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder2 }; + curBranch = mainBranch; + seq = 0; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.y)(); +}; +const getBranchesAsObjArray = function() { + const branchesArray = Object.values(branchesConfig).map((branchConfig, i) => { + if (branchConfig.order !== null) { + return branchConfig; + } + return { + ...branchConfig, + order: parseFloat(`0.${i}`, 10) + }; + }).sort((a, b) => a.order - b.order).map(({ name }) => ({ name })); + return branchesArray; +}; +const getBranches = function() { + return branches; +}; +const getCommits = function() { + return commits; +}; +const getCommitsArray = function() { + const commitArr = Object.keys(commits).map(function(key) { + return commits[key]; + }); + commitArr.forEach(function(o) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(o.id); + }); + commitArr.sort((a, b) => a.seq - b.seq); + return commitArr; +}; +const getCurrentBranch = function() { + return curBranch; +}; +const getDirection = function() { + return direction; +}; +const getHead = function() { + return head; +}; +const commitType$1 = { + NORMAL: 0, + REVERSE: 1, + HIGHLIGHT: 2, + MERGE: 3, + CHERRY_PICK: 4 +}; +const gitGraphDb = { + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().gitGraph, + setDirection, + setOptions, + getOptions, + commit, + branch, + merge, + cherryPick, + checkout, + //reset, + prettyPrint, + clear: clear$1, + getBranchesAsObjArray, + getBranches, + getCommits, + getCommitsArray, + getCurrentBranch, + getDirection, + getHead, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.p, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.v, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.x, + commitType: commitType$1 +}; +let allCommitsDict = {}; +const commitType = { + NORMAL: 0, + REVERSE: 1, + HIGHLIGHT: 2, + MERGE: 3, + CHERRY_PICK: 4 +}; +const THEME_COLOR_LIMIT = 8; +let branchPos = {}; +let commitPos = {}; +let lanes = []; +let maxPos = 0; +const clear = () => { + branchPos = {}; + commitPos = {}; + allCommitsDict = {}; + maxPos = 0; + lanes = []; +}; +const drawText = (txt) => { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + let rows = []; + if (typeof txt === "string") { + rows = txt.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(txt)) { + rows = txt; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + tspan.setAttribute("class", "row"); + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; +}; +const drawCommits = (svg, commits2, modifyGraph) => { + const gitGraphConfig = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.t)().gitGraph; + const gBullets = svg.append("g").attr("class", "commit-bullets"); + const gLabels = svg.append("g").attr("class", "commit-labels"); + let pos = 0; + const keys = Object.keys(commits2); + const sortedKeys = keys.sort((a, b) => { + return commits2[a].seq - commits2[b].seq; + }); + sortedKeys.forEach((key) => { + const commit2 = commits2[key]; + const y = branchPos[commit2.branch].pos; + const x = pos + 10; + if (modifyGraph) { + let typeClass; + let commitSymbolType = commit2.customType !== void 0 && commit2.customType !== "" ? commit2.customType : commit2.type; + switch (commitSymbolType) { + case commitType.NORMAL: + typeClass = "commit-normal"; + break; + case commitType.REVERSE: + typeClass = "commit-reverse"; + break; + case commitType.HIGHLIGHT: + typeClass = "commit-highlight"; + break; + case commitType.MERGE: + typeClass = "commit-merge"; + break; + case commitType.CHERRY_PICK: + typeClass = "commit-cherry-pick"; + break; + default: + typeClass = "commit-normal"; + } + if (commitSymbolType === commitType.HIGHLIGHT) { + const circle = gBullets.append("rect"); + circle.attr("x", x - 10); + circle.attr("y", y - 10); + circle.attr("height", 20); + circle.attr("width", 20); + circle.attr( + "class", + `commit ${commit2.id} commit-highlight${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-outer` + ); + gBullets.append("rect").attr("x", x - 6).attr("y", y - 6).attr("height", 12).attr("width", 12).attr( + "class", + `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-inner` + ); + } else if (commitSymbolType === commitType.CHERRY_PICK) { + gBullets.append("circle").attr("cx", x).attr("cy", y).attr("r", 10).attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("circle").attr("cx", x - 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("circle").attr("cx", x + 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("line").attr("x1", x + 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("line").attr("x1", x - 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + } else { + const circle = gBullets.append("circle"); + circle.attr("cx", x); + circle.attr("cy", y); + circle.attr("r", commit2.type === commitType.MERGE ? 9 : 10); + circle.attr( + "class", + `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + if (commitSymbolType === commitType.MERGE) { + const circle2 = gBullets.append("circle"); + circle2.attr("cx", x); + circle2.attr("cy", y); + circle2.attr("r", 6); + circle2.attr( + "class", + `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + } + if (commitSymbolType === commitType.REVERSE) { + const cross = gBullets.append("path"); + cross.attr("d", `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`).attr( + "class", + `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + } + } + } + commitPos[commit2.id] = { x: pos + 10, y }; + if (modifyGraph) { + const px = 4; + const py = 2; + if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) { + const wrapper = gLabels.append("g"); + const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg"); + const text = wrapper.append("text").attr("x", pos).attr("y", y + 25).attr("class", "commit-label").text(commit2.id); + let bbox = text.node().getBBox(); + labelBkg.attr("x", pos + 10 - bbox.width / 2 - py).attr("y", y + 13.5).attr("width", bbox.width + 2 * py).attr("height", bbox.height + 2 * py); + text.attr("x", pos + 10 - bbox.width / 2); + if (gitGraphConfig.rotateCommitLabel) { + let r_x = -7.5 - (bbox.width + 10) / 25 * 9.5; + let r_y = 10 + bbox.width / 25 * 8.5; + wrapper.attr( + "transform", + "translate(" + r_x + ", " + r_y + ") rotate(" + -45 + ", " + pos + ", " + y + ")" + ); + } + } + if (commit2.tag) { + const rect = gLabels.insert("polygon"); + const hole = gLabels.append("circle"); + const tag = gLabels.append("text").attr("y", y - 16).attr("class", "tag-label").text(commit2.tag); + let tagBbox = tag.node().getBBox(); + tag.attr("x", pos + 10 - tagBbox.width / 2); + const h2 = tagBbox.height / 2; + const ly = y - 19.2; + rect.attr("class", "tag-label-bkg").attr( + "points", + ` + ${pos - tagBbox.width / 2 - px / 2},${ly + py} + ${pos - tagBbox.width / 2 - px / 2},${ly - py} + ${pos + 10 - tagBbox.width / 2 - px},${ly - h2 - py} + ${pos + 10 + tagBbox.width / 2 + px},${ly - h2 - py} + ${pos + 10 + tagBbox.width / 2 + px},${ly + h2 + py} + ${pos + 10 - tagBbox.width / 2 - px},${ly + h2 + py}` + ); + hole.attr("cx", pos - tagBbox.width / 2 + px / 2).attr("cy", ly).attr("r", 1.5).attr("class", "tag-hole"); + } + } + pos += 50; + if (pos > maxPos) { + maxPos = pos; + } + }); +}; +const hasOverlappingCommits = (commit1, commit2, allCommits) => { + const keys = Object.keys(allCommits); + const overlappingComits = keys.filter((key) => { + return allCommits[key].branch === commit2.branch && allCommits[key].seq > commit1.seq && allCommits[key].seq < commit2.seq; + }); + return overlappingComits.length > 0; +}; +const findLane = (y1, y2, depth = 0) => { + const candidate = y1 + Math.abs(y1 - y2) / 2; + if (depth > 5) { + return candidate; + } + let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10); + if (ok) { + lanes.push(candidate); + return candidate; + } + const diff = Math.abs(y1 - y2); + return findLane(y1, y2 - diff / 5, depth + 1); +}; +const drawArrow = (svg, commit1, commit2, allCommits) => { + const p1 = commitPos[commit1.id]; + const p2 = commitPos[commit2.id]; + const overlappingCommits = hasOverlappingCommits(commit1, commit2, allCommits); + let arc = ""; + let arc2 = ""; + let radius = 0; + let offset = 0; + let colorClassNum = branchPos[commit2.branch].index; + let lineDef; + if (overlappingCommits) { + arc = "A 10 10, 0, 0, 0,"; + arc2 = "A 10 10, 0, 0, 1,"; + radius = 10; + offset = 10; + colorClassNum = branchPos[commit2.branch].index; + const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y); + if (p1.y < p2.y) { + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`; + } else { + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`; + } + } else { + if (p1.y < p2.y) { + arc = "A 20 20, 0, 0, 0,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commit2.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + if (p1.y > p2.y) { + arc = "A 20 20, 0, 0, 0,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commit1.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`; + } + if (p1.y === p2.y) { + colorClassNum = branchPos[commit1.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + } + svg.append("path").attr("d", lineDef).attr("class", "arrow arrow" + colorClassNum % THEME_COLOR_LIMIT); +}; +const drawArrows = (svg, commits2) => { + const gArrows = svg.append("g").attr("class", "commit-arrows"); + Object.keys(commits2).forEach((key) => { + const commit2 = commits2[key]; + if (commit2.parents && commit2.parents.length > 0) { + commit2.parents.forEach((parent) => { + drawArrow(gArrows, commits2[parent], commit2, commits2); + }); + } + }); +}; +const drawBranches = (svg, branches2) => { + const gitGraphConfig = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.t)().gitGraph; + const g = svg.append("g"); + branches2.forEach((branch2, index) => { + const adjustIndexForTheme = index % THEME_COLOR_LIMIT; + const pos = branchPos[branch2.name].pos; + const line = g.append("line"); + line.attr("x1", 0); + line.attr("y1", pos); + line.attr("x2", maxPos); + line.attr("y2", pos); + line.attr("class", "branch branch" + adjustIndexForTheme); + lanes.push(pos); + let name = branch2.name; + const labelElement = drawText(name); + const bkg = g.insert("rect"); + const branchLabel = g.insert("g").attr("class", "branchLabel"); + const label = branchLabel.insert("g").attr("class", "label branch-label" + adjustIndexForTheme); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr("rx", 4).attr("ry", 4).attr("x", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 8).attr("width", bbox.width + 18).attr("height", bbox.height + 4); + label.attr( + "transform", + "translate(" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) + ", " + (pos - bbox.height / 2 - 1) + ")" + ); + bkg.attr("transform", "translate(" + -19 + ", " + (pos - bbox.height / 2) + ")"); + }); +}; +const draw = function(txt, id, ver, diagObj) { + clear(); + const conf = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.t)(); + const gitGraphConfig = conf.gitGraph; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in gitgraph renderer", txt + "\n", "id:", id, ver); + allCommitsDict = diagObj.db.getCommits(); + const branches2 = diagObj.db.getBranchesAsObjArray(); + let pos = 0; + branches2.forEach((branch2, index) => { + branchPos[branch2.name] = { pos, index }; + pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0); + }); + const diagram2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + drawCommits(diagram2, allCommitsDict, false); + if (gitGraphConfig.showBranches) { + drawBranches(diagram2, branches2); + } + drawArrows(diagram2, allCommitsDict); + drawCommits(diagram2, allCommitsDict, true); + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.insertTitle( + diagram2, + "gitTitleText", + gitGraphConfig.titleTopMargin, + diagObj.db.getDiagramTitle() + ); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.v)( + void 0, + diagram2, + gitGraphConfig.diagramPadding, + gitGraphConfig.useMaxWidth ?? conf.useMaxWidth + ); +}; +const gitGraphRenderer = { + draw +}; +const getStyles = (options2) => ` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0, 1, 2, 3, 4, 5, 6, 7].map( + (i) => ` + .branch-label${i} { fill: ${options2["gitBranchLabel" + i]}; } + .commit${i} { stroke: ${options2["git" + i]}; fill: ${options2["git" + i]}; } + .commit-highlight${i} { stroke: ${options2["gitInv" + i]}; fill: ${options2["gitInv" + i]}; } + .label${i} { fill: ${options2["git" + i]}; } + .arrow${i} { stroke: ${options2["git" + i]}; } + ` +).join("\n")} + + .branch { + stroke-width: 1; + stroke: ${options2.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelColor};} + .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};} + .tag-label-bkg { fill: ${options2.tagLabelBackground}; stroke: ${options2.tagLabelBorder}; } + .tag-hole { fill: ${options2.textColor}; } + + .commit-merge { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + } + .commit-reverse { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options2.textColor}; + } + } +`; +const gitGraphStyles = getStyles; +const diagram = { + parser: gitGraphParser, + db: gitGraphDb, + renderer: gitGraphRenderer, + styles: gitGraphStyles +}; + +//# sourceMappingURL=gitGraphDiagram-0a645df6.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/3261da49.5c3db358.js b/assets/js/3261da49.5c3db358.js new file mode 100644 index 0000000000..c448879851 --- /dev/null +++ b/assets/js/3261da49.5c3db358.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3091],{5244:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>T,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));n(5657);const i={},o="INTERPOLATION_TYPE",s={unversionedId:"about/references/keywords/INTERPOLATION_TYPE",id:"about/references/keywords/INTERPOLATION_TYPE",title:"INTERPOLATION_TYPE",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/INTERPOLATION_TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INTERPOLATION_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},next:{title:"INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"}},l={},p=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}],d={toc:p},c="wrapper";function T(e){let{components:t,...i}=e;return(0,r.kt)(c,(0,a.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"interpolation_type"},"INTERPOLATION_TYPE"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE")),(0,r.kt)("p",null,"New in ",(0,r.kt)("strong",{parentName:"p"},"v8.1"),", previously known as ",(0,r.kt)("inlineCode",{parentName:"p"},"RATE_INTERPOLATION_TYPE")," that was renamed to ",(0,r.kt)("inlineCode",{parentName:"p"},"INTERPOLATION_TYPE"),"."),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("admonition",{title:"Caution",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Only valid for CSV data of source ",(0,r.kt)("inlineCode",{parentName:"p"},"MISCELLANEOUS"),". For ",(0,r.kt)("inlineCode",{parentName:"p"},"TIME_SERIES")," of ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE"),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"DEFAULT")," the keyword is not allowed as input. The following applies:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"MISCELLANEOUS: Interpolation type is mandatory."),(0,r.kt)("li",{parentName:"ul"},"DEFAULT: Interpolation type not allowed. Default ",(0,r.kt)("inlineCode",{parentName:"li"},"RIGHT")," is used."))),(0,r.kt)("admonition",{title:"Caution",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Different data types may require different types of interpolation. While reservoir rates are\ntypically interpolated ",(0,r.kt)("inlineCode",{parentName:"p"},"RIGHT")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"LEFT"),", other data such as pressure is often interpolated\nlinearly (",(0,r.kt)("inlineCode",{parentName:"p"},"LINEAR"),"). Data that should be interpolated differently must be specified in\ndifferent input files, as it is not possible to have multiple interpolation types for vectors\nwithin the same file.")),(0,r.kt)("p",null,"Rates are given at defined time steps in the data source but are in essence valid for a time\ninterval. The ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE"),"\nwill determine how rates are interpolated between the given time steps."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"LEFT"),": The rate given at the current time step is defining the rate in the time interval between the current and\nprevious time step. This is in data science also known as backwards filling of missing values."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"RIGHT"),": The rate given at the current time step is defining the rate in the time interval between the current and\nnext time step. This is in data science also known as forward filling of missing values."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"LINEAR"),": The rate will be linearly interpolated between the time steps.")),(0,r.kt)("p",null,"The plot below shows how the different choices for ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE")," works in practice."),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(1856).Z,width:"512",height:"384"})),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n")),(0,r.kt)("h3",{id:"requirements"},"Requirements"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE")," has to be specified if\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"MISCELLANEOUS"),"."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE")," can not be specified if ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"DEFAULT"),"."),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("p",null,"See the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," ",(0,r.kt)("inlineCode",{parentName:"p"},"time_series_format"),"."))}T.isMDXComponent=!0},1856:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png"}}]); \ No newline at end of file diff --git a/assets/js/33498b04.ea986983.js b/assets/js/33498b04.ea986983.js new file mode 100644 index 0000000000..5ad6035f7c --- /dev/null +++ b/assets/js/33498b04.ea986983.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[381],{2594:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>i,default:()=>_,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var r=s(7462),o=(s(7294),s(3905));s(5657);const t={title:"Simplified variable speed compressor train",sidebar_position:2},i=void 0,a={unversionedId:"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",title:"Simplified variable speed compressor train",description:"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Simplified variable speed compressor train",sidebar_position:2},sidebar:"about",previous:{title:"Single speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},next:{title:"Variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"}},m={},d=[{value:"Format",id:"format",level:2},{value:"Simplified compressor train model with known compressor stages",id:"simplified-compressor-train-model-with-known-compressor-stages",level:3},{value:"Simplified compressor train model with unknown number of compressor stages",id:"simplified-compressor-train-model-with-unknown-number-of-compressor-stages",level:3},{value:"Examples",id:"examples",level:2},{value:"A (single) compressor with a user-defined variable speed compressor chart and fluid composition",id:"a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition",level:3},{value:"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition",id:"a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition",level:3},{value:"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart",id:"a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart",level:3},{value:"A compressor train where the number of stages are unknown",id:"a-compressor-train-where-the-number-of-stages-are-unknown",level:3}],l={toc:d},p="wrapper";function _(e){let{components:n,...s}=e;return(0,o.kt)(p,(0,r.Z)({},l,s,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures\nare assumed based on an assumption of equal pressure fractions for each stage. Based on this, the compressor work is\ncalculated independently for each compressor as if it was a standalone compressor, neglecting that they are in fact on\nthe same shaft and thus have a common speed."),(0,o.kt)("p",null,"This model supports both ",(0,o.kt)("inlineCode",{parentName:"p"},"user defined compressor charts")," and\n",(0,o.kt)("inlineCode",{parentName:"p"},"generic compressor charts"),". See ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"compressor charts")," for more information. "),(0,o.kt)("p",null,"In addition, a ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/fluid_model"},"FLUID MODEL")," must be specified."),(0,o.kt)("p",null,"The model comes in two versions, one where the compressor stages are known (pre defined), and one where the compressor\nstages are calculated at run-time based on input data."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS\n COMPRESSOR_TRAIN: <compressor train specification>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n CALCULATE_MAX_RATE: <Optional. compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >\n")),(0,o.kt)("h3",{id:"simplified-compressor-train-model-with-known-compressor-stages"},"Simplified compressor train model with known compressor stages"),(0,o.kt)("p",null,"When the compressor stages are known, each stage is defined with a compressor chart and an inlet temperature:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>\n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n")),(0,o.kt)("h3",{id:"simplified-compressor-train-model-with-unknown-number-of-compressor-stages"},"Simplified compressor train model with unknown number of compressor stages"),(0,o.kt)("p",null,"When the number of compressor stages are not known, one may specify the maximum pressure ratio per stage.\nWhen the maximum pressure ratio is set, the number of compressors will be determined at run time (based on input data)\nsuch that the number of compressors is large enough to ensure no pressure ratios are above a given maximum pressure\nratio per stage, but not larger."),(0,o.kt)("p",null,"This model is intended for (but not limited to) the use of a generic compressor chart. Especially one can test with the\ngeneric compressor chart which are adjusted at run time (based on input data), for example to explore future\nrebuilds/designs where no specifications/data is yet available from vendors et.c."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>\n COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>\n INLET_TEMPERATURE: <inlet temperature for all stages>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n")),(0,o.kt)("h2",{id:"examples"},"Examples"),(0,o.kt)("h3",{id:"a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition"},"A (single) compressor with a user-defined variable speed compressor chart and fluid composition"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n\n - NAME: fluid_model_1\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: SRK\n COMPOSITION:\n nitrogen: 0.74373\n CO2: 2.415619\n methane: 85.60145\n ethane: 6.707826\n propane: 2.611471\n i_butane: 0.45077\n n_butane: 0.691702\n i_pentane: 0.210714\n n_pentane: 0.197937\n n_hexane: 0.368786\n\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model_1\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n")),(0,o.kt)("h3",{id:"a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition"},"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 7000\n DESIGN_HEAD: 50\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] # fractions between 0 and 1\n\n - NAME: simplified_compressor_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: simplified_compressor_model\n TURBINE_MODEL: compressor_train_turbine\n")),(0,o.kt)("h3",{id:"a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart"},"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"}," MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n\n - NAME: dry_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: DRY\n\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: dry_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n")),(0,o.kt)("h3",{id:"a-compressor-train-where-the-number-of-stages-are-unknown"},"A compressor train where the number of stages are unknown"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"}," MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n - NAME: dry_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: DRY\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: dry_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 30\n")))}_.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3409ab5c.0e11f307.js b/assets/js/3409ab5c.0e11f307.js new file mode 100644 index 0000000000..663225c27d --- /dev/null +++ b/assets/js/3409ab5c.0e11f307.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2017],{4277:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>k,frontMatter:()=>n,metadata:()=>r,toc:()=>N});var s=t(7462),m=(t(7294),t(3905));t(5657);const n={title:"Pump modelling",sidebar_position:1,description:"Pump modelling theory"},p=void 0,r={unversionedId:"about/modelling/theory/pump_modelling",id:"about/modelling/theory/pump_modelling",title:"Pump modelling",description:"Pump modelling theory",source:"@site/docs/about/modelling/theory/pump_modelling.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/pump_modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/pump_modelling.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Pump modelling",sidebar_position:1,description:"Pump modelling theory"},sidebar:"about",previous:{title:"Theory",permalink:"/ecalc/docs/about/modelling/theory/"},next:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling"}},l={},N=[],i={toc:N},o="wrapper";function k(a){let{components:e,...n}=a;return(0,m.kt)(o,(0,s.Z)({},i,n,{components:e,mdxType:"MDXLayout"}),(0,m.kt)("p",null,"As liquid can be assumed incompressible, pump calculations are simpler compared to compressor calculations. The pumped fluid can be characterized with its density, and no fluid calculations are necessary."),(0,m.kt)("p",null,"The power demand of a pump is calculated as"),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"o"),(0,m.kt)("mi",{parentName:"mrow"},"w"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mfrac",{parentName:"mrow"},(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mo",{parentName:"mrow"},"\u2217"),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"e")),(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"f"),(0,m.kt)("mi",{parentName:"mrow"},"f"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow"},"y"))),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},".")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"power = \\frac{head * mass\\_rate}{efficiency}.")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"o"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"er"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"2.2749em",verticalAlign:"-0.8804em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.3944em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10764em"}},"ff"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"cy"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.7em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2217"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ma"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ss"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8804em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter"})),(0,m.kt)("span",{parentName:"span",className:"mord"},".")))))),(0,m.kt)("p",null,"Here, the relationship between head and pressures is given by"),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mfrac",{parentName:"mrow"},(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"q"),(0,m.kt)("mi",{parentName:"mrow"},"u"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow"},"\u2217"),(0,m.kt)("mi",{parentName:"mrow"},"g")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"head = \\frac{(P_2-P_1)}{liquid\\_density * g}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"2.423em",verticalAlign:"-0.996em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.427em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"u"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2217"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.677em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.996em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter"}))))))),(0,m.kt)("p",null,"where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," are the pump suction and discharge pressures, respectively, and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g")))))," is the gravitational constant."),(0,m.kt)("p",null,"eCalc uses the pump chart to relate liquid flow, head and efficiency for the pump, as well as defining the operational envelope for the pump."),(0,m.kt)("p",null,"For single speed pumps, eCalc does extrapolations corresponding to minflow (liquid recirculation) and choking to keep the pump operation within the operational envelope."),(0,m.kt)("p",null,(0,m.kt)("img",{src:t(4854).Z,width:"502",height:"449"})," ",(0,m.kt)("img",{src:t(9258).Z,width:"484",height:"443"})))}k.isMDXComponent=!0},4854:(a,e,t)=>{t.d(e,{Z:()=>s});const s=t.p+"assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG"},9258:(a,e,t)=>{t.d(e,{Z:()=>s});const s=t.p+"assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG"}}]); \ No newline at end of file diff --git a/assets/js/3657.99306207.js b/assets/js/3657.99306207.js new file mode 100644 index 0000000000..939fb96a16 --- /dev/null +++ b/assets/js/3657.99306207.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3657],{3657:(t,e,i)=>{i.d(e,{diagram:()=>L});var r=i(44),n=i(3047),a=i(5625),s=i(9373),o=i(2494),c=i(1188);const l=[];for(let D=0;D<256;++D)l.push((D+256).toString(16).slice(1));function h(t,e=0){return(l[t[e+0]]+l[t[e+1]]+l[t[e+2]]+l[t[e+3]]+"-"+l[t[e+4]]+l[t[e+5]]+"-"+l[t[e+6]]+l[t[e+7]]+"-"+l[t[e+8]]+l[t[e+9]]+"-"+l[t[e+10]]+l[t[e+11]]+l[t[e+12]]+l[t[e+13]]+l[t[e+14]]+l[t[e+15]]).toLowerCase()}const d=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const y=function(t){return"string"==typeof t&&d.test(t)};const u=function(t){if(!y(t))throw TypeError("Invalid UUID");let e;const i=new Uint8Array(16);return i[0]=(e=parseInt(t.slice(0,8),16))>>>24,i[1]=e>>>16&255,i[2]=e>>>8&255,i[3]=255&e,i[4]=(e=parseInt(t.slice(9,13),16))>>>8,i[5]=255&e,i[6]=(e=parseInt(t.slice(14,18),16))>>>8,i[7]=255&e,i[8]=(e=parseInt(t.slice(19,23),16))>>>8,i[9]=255&e,i[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,i[11]=e/4294967296&255,i[12]=e>>>24&255,i[13]=e>>>16&255,i[14]=e>>>8&255,i[15]=255&e,i};function p(t,e,i,r){switch(t){case 0:return e&i^~e&r;case 1:case 3:return e^i^r;case 2:return e&i^e&r^i&r}}function _(t,e){return t<<e|t>>>32-e}const f=function(t,e,i){function r(t,r,n,a){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let i=0;i<t.length;++i)e.push(t.charCodeAt(i));return e}(t)),"string"==typeof r&&(r=u(r)),16!==(null===(s=r)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+t.length);if(o.set(r),o.set(t,r.length),o=i(o),o[6]=15&o[6]|e,o[8]=63&o[8]|128,n){a=a||0;for(let t=0;t<16;++t)n[a+t]=o[t];return n}return h(o)}try{r.name=t}catch(n){}return r.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",r.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",r}("v5",80,(function(t){const e=[1518500249,1859775393,2400959708,3395469782],i=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=[];for(let i=0;i<e.length;++i)t.push(e.charCodeAt(i))}else Array.isArray(t)||(t=Array.prototype.slice.call(t));t.push(128);const r=t.length/4+2,n=Math.ceil(r/16),a=new Array(n);for(let s=0;s<n;++s){const e=new Uint32Array(16);for(let i=0;i<16;++i)e[i]=t[64*s+4*i]<<24|t[64*s+4*i+1]<<16|t[64*s+4*i+2]<<8|t[64*s+4*i+3];a[s]=e}a[n-1][14]=8*(t.length-1)/Math.pow(2,32),a[n-1][14]=Math.floor(a[n-1][14]),a[n-1][15]=8*(t.length-1)&4294967295;for(let s=0;s<n;++s){const t=new Uint32Array(80);for(let e=0;e<16;++e)t[e]=a[s][e];for(let e=16;e<80;++e)t[e]=_(t[e-3]^t[e-8]^t[e-14]^t[e-16],1);let r=i[0],n=i[1],o=i[2],c=i[3],l=i[4];for(let i=0;i<80;++i){const a=Math.floor(i/20),s=_(r,5)+p(a,n,o,c)+l+e[a]+t[i]>>>0;l=c,c=o,o=_(n,30)>>>0,n=r,r=s}i[0]=i[0]+r>>>0,i[1]=i[1]+n>>>0,i[2]=i[2]+o>>>0,i[3]=i[3]+c>>>0,i[4]=i[4]+l>>>0}return[i[0]>>24&255,i[0]>>16&255,i[0]>>8&255,255&i[0],i[1]>>24&255,i[1]>>16&255,i[1]>>8&255,255&i[1],i[2]>>24&255,i[2]>>16&255,i[2]>>8&255,255&i[2],i[3]>>24&255,i[3]>>16&255,i[3]>>8&255,255&i[3],i[4]>>24&255,i[4]>>16&255,i[4]>>8&255,255&i[4]]}));i(7856),i(7484),i(7967);var g=function(){var t=function(t,e,i,r){for(i=i||{},r=t.length;r--;i[t[r]]=e);return i},e=[1,2],i=[1,5],r=[6,9,11,23,25,27,29,30,31,51],n=[1,17],a=[1,18],s=[1,19],o=[1,20],c=[1,21],l=[1,22],h=[1,25],d=[1,30],y=[1,31],u=[1,32],p=[1,33],_=[6,9,11,15,20,23,25,27,29,30,31,44,45,46,47,51],f=[1,45],g=[30,31,48,49],m=[4,6,9,11,23,25,27,29,30,31,51],O=[44,45,46,47],E=[22,37],b=[1,65],k=[1,64],R=[22,37,39,41],N={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyTypeList:35,attributeComment:36,ATTRIBUTE_WORD:37,attributeKeyType:38,COMMA:39,ATTRIBUTE_KEY:40,COMMENT:41,cardinality:42,relType:43,ZERO_OR_ONE:44,ZERO_OR_MORE:45,ONE_OR_MORE:46,ONLY_ONE:47,NON_IDENTIFYING:48,IDENTIFYING:49,WORD:50,open_directive:51,type_directive:52,arg_directive:53,close_directive:54,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",39:"COMMA",40:"ATTRIBUTE_KEY",41:"COMMENT",44:"ZERO_OR_ONE",45:"ZERO_OR_MORE",46:"ONE_OR_MORE",47:"ONLY_ONE",48:"NON_IDENTIFYING",49:"IDENTIFYING",50:"WORD",51:"open_directive",52:"type_directive",53:"arg_directive",54:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[35,3],[38,1],[36,1],[18,3],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,i,r,n,a,s){var o=a.length-1;switch(n){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:case 20:case 43:case 28:case 29:case 32:this.$=a[o];break;case 12:r.addEntity(a[o-4]),r.addEntity(a[o-2]),r.addRelationship(a[o-4],a[o],a[o-2],a[o-3]);break;case 13:r.addEntity(a[o-3]),r.addAttributes(a[o-3],a[o-1]);break;case 14:r.addEntity(a[o-2]);break;case 15:r.addEntity(a[o]);break;case 16:case 17:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 21:case 41:case 42:case 33:this.$=a[o].replace(/"/g,"");break;case 22:case 30:this.$=[a[o]];break;case 23:a[o].push(a[o-1]),this.$=a[o];break;case 24:this.$={attributeType:a[o-1],attributeName:a[o]};break;case 25:this.$={attributeType:a[o-2],attributeName:a[o-1],attributeKeyTypeList:a[o]};break;case 26:this.$={attributeType:a[o-2],attributeName:a[o-1],attributeComment:a[o]};break;case 27:this.$={attributeType:a[o-3],attributeName:a[o-2],attributeKeyTypeList:a[o-1],attributeComment:a[o]};break;case 31:a[o-2].push(a[o]),this.$=a[o-2];break;case 34:this.$={cardA:a[o],relType:a[o-1],cardB:a[o-2]};break;case 35:this.$=r.Cardinality.ZERO_OR_ONE;break;case 36:this.$=r.Cardinality.ZERO_OR_MORE;break;case 37:this.$=r.Cardinality.ONE_OR_MORE;break;case 38:this.$=r.Cardinality.ONLY_ONE;break;case 39:this.$=r.Identification.NON_IDENTIFYING;break;case 40:this.$=r.Identification.IDENTIFYING;break;case 44:r.parseDirective("%%{","open_directive");break;case 45:r.parseDirective(a[o],"type_directive");break;case 46:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 47:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,51:i},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,51:i},{13:8,52:[1,9]},{52:[2,44]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:n,25:a,27:s,29:o,30:c,31:l,51:i},{1:[2,2]},{14:23,15:[1,24],54:h},t([15,54],[2,45]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:26,12:4,17:16,23:n,25:a,27:s,29:o,30:c,31:l,51:i},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:27,42:29,20:[1,28],44:d,45:y,46:u,47:p}),{24:[1,34]},{26:[1,35]},{28:[1,36]},t(r,[2,19]),t(_,[2,20]),t(_,[2,21]),{11:[1,37]},{16:38,53:[1,39]},{11:[2,47]},t(r,[2,5]),{17:40,30:c,31:l},{21:41,22:[1,42],32:43,33:44,37:f},{43:46,48:[1,47],49:[1,48]},t(g,[2,35]),t(g,[2,36]),t(g,[2,37]),t(g,[2,38]),t(r,[2,16]),t(r,[2,17]),t(r,[2,18]),t(m,[2,9]),{14:49,54:h},{54:[2,46]},{15:[1,50]},{22:[1,51]},t(r,[2,14]),{21:52,22:[2,22],32:43,33:44,37:f},{34:53,37:[1,54]},{37:[2,28]},{42:55,44:d,45:y,46:u,47:p},t(O,[2,39]),t(O,[2,40]),{11:[1,56]},{19:57,30:[1,60],31:[1,59],50:[1,58]},t(r,[2,13]),{22:[2,23]},t(E,[2,24],{35:61,36:62,38:63,40:b,41:k}),t([22,37,40,41],[2,29]),t([30,31],[2,34]),t(m,[2,10]),t(r,[2,12]),t(r,[2,41]),t(r,[2,42]),t(r,[2,43]),t(E,[2,25],{36:66,39:[1,67],41:k}),t(E,[2,26]),t(R,[2,30]),t(E,[2,33]),t(R,[2,32]),t(E,[2,27]),{38:68,40:b},t(R,[2,31])],defaultActions:{5:[2,44],7:[2,2],25:[2,47],39:[2,46],45:[2,28],52:[2,23]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],r=[],n=[null],a=[],s=this.table,o="",c=0,l=0,h=1,d=a.slice.call(arguments,1),y=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);y.setInput(t,u.yy),u.yy.lexer=y,u.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var _=y.yylloc;a.push(_);var f=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,m,O,E,b,k,R,N,x,T={};;){if(m=i[i.length-1],this.defaultActions[m]?O=this.defaultActions[m]:(null==g&&(x=void 0,"number"!=typeof(x=r.pop()||y.lex()||h)&&(x instanceof Array&&(x=(r=x).pop()),x=e.symbols_[x]||x),g=x),O=s[m]&&s[m][g]),void 0===O||!O.length||!O[0]){var v="";for(b in N=[],s[m])this.terminals_[b]&&b>2&&N.push("'"+this.terminals_[b]+"'");v=y.showPosition?"Parse error on line "+(c+1)+":\n"+y.showPosition()+"\nExpecting "+N.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(g==h?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(v,{text:y.match,token:this.terminals_[g]||g,line:y.yylineno,loc:_,expected:N})}if(O[0]instanceof Array&&O.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+g);switch(O[0]){case 1:i.push(g),n.push(y.yytext),a.push(y.yylloc),i.push(O[1]),g=null,l=y.yyleng,o=y.yytext,c=y.yylineno,_=y.yylloc;break;case 2:if(k=this.productions_[O[1]][1],T.$=n[n.length-k],T._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},f&&(T._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(T,[o,l,c,u.yy,O[1],n,a].concat(d))))return E;k&&(i=i.slice(0,-1*k*2),n=n.slice(0,-1*k),a=a.slice(0,-1*k)),i.push(this.productions_[O[1]][0]),n.push(T.$),a.push(T._$),R=s[i[i.length-2]][i[i.length-1]],i.push(R);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===r.length?this.yylloc.first_column:0)+r[r.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,r,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var a in n)this[a]=n[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;a<n.length;a++)if((i=this._input.match(this.rules[n[a]]))&&(!e||i[0].length>e[0].length)){if(e=i,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,n[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,r){switch(i){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.begin("open_directive"),51;case 8:return this.begin("type_directive"),52;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),54;case 11:return 53;case 12:return 11;case 13:case 20:case 25:break;case 14:return 9;case 15:return 31;case 16:return 50;case 17:return 4;case 18:return this.begin("block"),20;case 19:return 39;case 21:return 40;case 22:case 23:return 37;case 24:return 41;case 26:return this.popState(),22;case 27:case 56:return e.yytext[0];case 28:case 32:case 33:case 46:return 44;case 29:case 30:case 31:case 39:case 41:case 48:return 46;case 34:case 35:case 36:case 37:case 38:case 40:case 47:return 45;case 42:case 43:case 44:case 45:return 47;case 49:case 52:case 53:case 54:return 48;case 50:case 51:return 49;case 55:return 30;case 57:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[19,20,21,22,23,24,25,26,27],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57],inclusive:!0}}};function T(){this.yy={}}return N.lexer=x,T.prototype=N,N.Parser=T,new T}();g.parser=g;const m=g;let O={},E=[];const b=function(t){return void 0===O[t]&&(O[t]={attributes:[]},r.l.info("Added new entity :",t)),O[t]},k={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,i){n.m.parseDirective(this,t,e,i)},getConfig:()=>(0,r.g)().er,addEntity:b,addAttributes:function(t,e){let i,n=b(t);for(i=e.length-1;i>=0;i--)n.attributes.push(e[i]),r.l.debug("Added attribute ",e[i].attributeName)},getEntities:()=>O,addRelationship:function(t,e,i,n){let a={entityA:t,roleA:e,entityB:i,relSpec:n};E.push(a),r.l.debug("Added new relationship :",a)},getRelationships:()=>E,clear:function(){O={},E=[],(0,r.y)()},setAccTitle:r.o,getAccTitle:r.p,setAccDescription:r.v,getAccDescription:r.q,setDiagramTitle:r.w,getDiagramTitle:r.x},R={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"},N=R,x=function(t,e){let i;t.append("defs").append("marker").attr("id",R.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",R.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),i=t.append("defs").append("marker").attr("id",R.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),i.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),i.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),i=t.append("defs").append("marker").attr("id",R.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),i.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",R.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",R.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),i=t.append("defs").append("marker").attr("id",R.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),i.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),i.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),i=t.append("defs").append("marker").attr("id",R.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),i.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},T=/[^\dA-Za-z](\W)*/g;let v={},A=new Map;const w=function(t,e,i){let n;return Object.keys(e).forEach((function(a){const s=function(t="",e=""){const i=t.replace(T,"");return`${$(e)}${$(i)}${f(t,S)}`}(a,"entity");A.set(a,s);const o=t.append("g").attr("id",s);n=void 0===n?s:n;const c="text-"+s,l=o.append("text").classed("er entityLabel",!0).attr("id",c).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",(0,r.g)().fontFamily).style("font-size",v.fontSize+"px").text(a),{width:h,height:d}=((t,e,i)=>{const n=v.entityPadding/3,a=v.entityPadding/3,s=.85*v.fontSize,o=e.node().getBBox(),c=[];let l=!1,h=!1,d=0,y=0,u=0,p=0,_=o.height+2*n,f=1;i.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(l=!0),void 0!==t.attributeComment&&(h=!0)})),i.forEach((i=>{const a=`${e.node().id}-attr-${f}`;let o=0;const g=(0,r.z)(i.attributeType),m=t.append("text").classed("er entityLabel",!0).attr("id",`${a}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,r.g)().fontFamily).style("font-size",s+"px").text(g),O=t.append("text").classed("er entityLabel",!0).attr("id",`${a}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,r.g)().fontFamily).style("font-size",s+"px").text(i.attributeName),E={};E.tn=m,E.nn=O;const b=m.node().getBBox(),k=O.node().getBBox();if(d=Math.max(d,b.width),y=Math.max(y,k.width),o=Math.max(b.height,k.height),l){const e=void 0!==i.attributeKeyTypeList?i.attributeKeyTypeList.join(","):"",n=t.append("text").classed("er entityLabel",!0).attr("id",`${a}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,r.g)().fontFamily).style("font-size",s+"px").text(e);E.kn=n;const c=n.node().getBBox();u=Math.max(u,c.width),o=Math.max(o,c.height)}if(h){const e=t.append("text").classed("er entityLabel",!0).attr("id",`${a}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,r.g)().fontFamily).style("font-size",s+"px").text(i.attributeComment||"");E.cn=e;const n=e.node().getBBox();p=Math.max(p,n.width),o=Math.max(o,n.height)}E.height=o,c.push(E),_+=o+2*n,f+=1}));let g=4;l&&(g+=2),h&&(g+=2);const m=d+y+u+p,O={width:Math.max(v.minEntityWidth,Math.max(o.width+2*v.entityPadding,m+a*g)),height:i.length>0?_:Math.max(v.minEntityHeight,o.height+2*v.entityPadding)};if(i.length>0){const i=Math.max(0,(O.width-m-a*g)/(g/2));e.attr("transform","translate("+O.width/2+","+(n+o.height/2)+")");let r=o.height+2*n,s="attributeBoxOdd";c.forEach((e=>{const o=r+n+e.height/2;e.tn.attr("transform","translate("+a+","+o+")");const c=t.insert("rect","#"+e.tn.node().id).classed(`er ${s}`,!0).attr("x",0).attr("y",r).attr("width",d+2*a+i).attr("height",e.height+2*n),_=parseFloat(c.attr("x"))+parseFloat(c.attr("width"));e.nn.attr("transform","translate("+(_+a)+","+o+")");const f=t.insert("rect","#"+e.nn.node().id).classed(`er ${s}`,!0).attr("x",_).attr("y",r).attr("width",y+2*a+i).attr("height",e.height+2*n);let g=parseFloat(f.attr("x"))+parseFloat(f.attr("width"));if(l){e.kn.attr("transform","translate("+(g+a)+","+o+")");const c=t.insert("rect","#"+e.kn.node().id).classed(`er ${s}`,!0).attr("x",g).attr("y",r).attr("width",u+2*a+i).attr("height",e.height+2*n);g=parseFloat(c.attr("x"))+parseFloat(c.attr("width"))}h&&(e.cn.attr("transform","translate("+(g+a)+","+o+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${s}`,"true").attr("x",g).attr("y",r).attr("width",p+2*a+i).attr("height",e.height+2*n)),r+=e.height+2*n,s="attributeBoxOdd"===s?"attributeBoxEven":"attributeBoxOdd"}))}else O.height=Math.max(v.minEntityHeight,_),e.attr("transform","translate("+O.width/2+","+O.height/2+")");return O})(o,l,e[a].attributes),y=o.insert("rect","#"+c).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",h).attr("height",d).node().getBBox();i.setNode(s,{width:y.width,height:y.height,shape:"rect",id:s})})),n},M=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let I=0;const S="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function $(t=""){return t.length>0?`${t}-`:""}const L={parser:m,db:k,renderer:{setConf:function(t){const e=Object.keys(t);for(const i of e)v[i]=t[i]},draw:function(t,e,i,n){v=(0,r.g)().er,r.l.info("Drawing ER diagram");const l=(0,r.g)().securityLevel;let h;"sandbox"===l&&(h=(0,s.Ys)("#i"+e));const d=("sandbox"===l?(0,s.Ys)(h.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select(`[id='${e}']`);let y;x(d,v),y=new a.k({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:v.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const u=w(d,n.db.getEntities(),y),p=function(t,e){return t.forEach((function(t){e.setEdge(A.get(t.entityA),A.get(t.entityB),{relationship:t},M(t))})),t}(n.db.getRelationships(),y);var _,f;(0,o.bK)(y),_=d,(f=y).nodes().forEach((function(t){void 0!==t&&void 0!==f.node(t)&&_.select("#"+t).attr("transform","translate("+(f.node(t).x-f.node(t).width/2)+","+(f.node(t).y-f.node(t).height/2)+" )")})),p.forEach((function(t){!function(t,e,i,n,a){I++;const o=i.edge(A.get(e.entityA),A.get(e.entityB),M(e)),c=(0,s.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(s.$0Z),l=t.insert("path","#"+n).classed("er relationshipLine",!0).attr("d",c(o.points)).style("stroke",v.stroke).style("fill","none");e.relSpec.relType===a.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let h="";switch(v.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),e.relSpec.cardA){case a.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+h+"#"+N.ZERO_OR_ONE_END+")");break;case a.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+h+"#"+N.ZERO_OR_MORE_END+")");break;case a.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+h+"#"+N.ONE_OR_MORE_END+")");break;case a.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+h+"#"+N.ONLY_ONE_END+")")}switch(e.relSpec.cardB){case a.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+h+"#"+N.ZERO_OR_ONE_START+")");break;case a.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+h+"#"+N.ZERO_OR_MORE_START+")");break;case a.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+h+"#"+N.ONE_OR_MORE_START+")");break;case a.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+h+"#"+N.ONLY_ONE_START+")")}const d=l.node().getTotalLength(),y=l.node().getPointAtLength(.5*d),u="rel"+I,p=t.append("text").classed("er relationshipLabel",!0).attr("id",u).attr("x",y.x).attr("y",y.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",(0,r.g)().fontFamily).style("font-size",v.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+u).classed("er relationshipLabelBox",!0).attr("x",y.x-p.width/2).attr("y",y.y-p.height/2).attr("width",p.width).attr("height",p.height)}(d,t,y,u,n)}));const g=v.diagramPadding;c.u.insertTitle(d,"entityTitleText",v.titleTopMargin,n.db.getDiagramTitle());const m=d.node().getBBox(),O=m.width+2*g,E=m.height+2*g;(0,c.k)(d,E,O,v.useMaxWidth),d.attr("viewBox",`${m.x-g} ${m.y-g} ${O} ${E}`)}},styles:t=>`\n .entityBox {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${t.attributeBackgroundColorOdd};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${t.attributeBackgroundColorEven};\n stroke: ${t.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${t.tertiaryColor};\n opacity: 0.7;\n background-color: ${t.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${t.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n } \n`}}}]); \ No newline at end of file diff --git a/assets/js/3720c009.d1cf4422.js b/assets/js/3720c009.d1cf4422.js new file mode 100644 index 0000000000..26eabd6ae6 --- /dev/null +++ b/assets/js/3720c009.d1cf4422.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3751],{9861:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});var l=a(7294),n=a(6010),r=a(5999);const c=()=>(0,r.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var s=a(1944),m=a(5281),o=a(179),g=a(3008);const u={tag:"tag_Nnez"};function i(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:u.tag},l.createElement(g.Z,e))))),l.createElement("hr",null))}function E(e){let{tags:t}=e;const a=function(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(i,{key:e.letter,letterEntry:e}))))}var p=a(197);function h(e){let{tags:t}=e;const a=c();return l.createElement(s.FG,{className:(0,n.Z)(m.k.wrapper.docsPages,m.k.page.docsTagsListPage)},l.createElement(s.d,{title:a}),l.createElement(p.Z,{tag:"doc_tags_list"}),l.createElement(o.Z,null,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement("main",{className:"col col--8 col--offset-2"},l.createElement("h1",null,a),l.createElement(E,{tags:t}))))))}},3008:(e,t,a)=>{a.d(t,{Z:()=>s});var l=a(7294),n=a(6010),r=a(9960);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function s(e){let{permalink:t,label:a,count:s}=e;return l.createElement(r.Z,{href:t,className:(0,n.Z)(c.tag,s?c.tagWithCount:c.tagRegular)},a,s&&l.createElement("span",null,s))}}}]); \ No newline at end of file diff --git a/assets/js/3810e8e5.cb27da81.js b/assets/js/3810e8e5.cb27da81.js new file mode 100644 index 0000000000..d8ac1a2edc --- /dev/null +++ b/assets/js/3810e8e5.cb27da81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6887],{8766:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));a(5657);const o={},s="HCEXPORT",l={unversionedId:"about/references/keywords/HCEXPORT",id:"about/references/keywords/HCEXPORT",title:"HCEXPORT",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/HCEXPORT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HCEXPORT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS"},next:{title:"HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD"}},i={},p=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Basic usage",id:"basic-usage",level:3},{value:"With time dependency",id:"with-time-dependency",level:3},{value:"Full example",id:"full-example",level:3}],c={toc:p},d="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"hcexport"},"HCEXPORT"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/HCEXPORT"},"HCEXPORT")),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/HCEXPORT"},"HCEXPORT")," defines the export of hydrocarbons as a number of oil equivalents in Sm",(0,r.kt)("sup",null,"3"),".\nThis keyword is required for the output of emission intensity (i.e., kg CO",(0,r.kt)("sub",null,"2"),"/boe).\nThis could be a single time series variable or an ",(0,r.kt)("inlineCode",{parentName:"p"},"expression <expressions>")," containing multiple time series variables.\nTypically it would be the sum of exported oil and gas in units of oil equivalents."),(0,r.kt)("admonition",{title:"What is hydrocarbon export?",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Hydrocarbon export is the oil equivalents of what is exported for sale and only these volumes should\nbe included here. I.e., it is important to distinguish between ",(0,r.kt)("em",{parentName:"p"},"produced gas")," and ",(0,r.kt)("em",{parentName:"p"},"sales gas"),".\nSee ",(0,r.kt)("a",{parentName:"p",href:"https://docmap.equinor.com/Docmap/page/doc/dmDocIndex.html?DOCVIEW=FALSE?DOCID=1042144"},"GL0093")," in Docmap.")),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"HCEXPORT: <EXPRESSION> # [Sm3/day]\n")),(0,r.kt)("p",null,"or"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"HCEXPORT:\n <DATE>: <EXPRESSION> # [Sm3/day]\n <DATE>: <EXPRESSION> # [Sm3/day]\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("h3",{id:"basic-usage"},"Basic usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"HCEXPORT: SIM;OIL_PROD {+} SIM;GAS_SALES {/} 1000\n")),(0,r.kt)("h3",{id:"with-time-dependency"},"With time dependency"),(0,r.kt)("p",null,"In this example the gas export starts later than production start up:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"HCEXPORT:\n 2001-01-01: SIM1;OIL_PROD\n 2005-01-01: SIM2:OIL_PROD {+} SIM1;GAS_SALES {/} 1000\n")),(0,r.kt)("h3",{id:"full-example"},"Full example"),(0,r.kt)("p",null,"Example showing ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/HCEXPORT"},"HCEXPORT")," the modelling hierarchy:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n - NAME: installation_A\n FUEL: fuel_gas\n HCEXPORT: SIM;OIL_PROD:FIELD_A {+} SIM;GAS_SALES:FIELD_A {/} 1000\n GENERATORSETS:\n <Data for the generator sets to be put her>\n FUELCONSUMERS:\n <Data for the fuel consumers to be put here>\n - NAME: installation_B\n HCEXPORT: SIM;OIL_PROD:FIELD_B {+} SIM;GAS_SALES:FIELD_B{/} 1000\n GENERATORSETS:\n <Data for the generator sets to be put her>\n FUELCONSUMERS:\n <Data for the fuel consumers to be put here>\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/382d59b5.1a240746.js b/assets/js/382d59b5.1a240746.js new file mode 100644 index 0000000000..58ddfd8c1e --- /dev/null +++ b/assets/js/382d59b5.1a240746.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9306],{402:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var n=t(7462),a=(t(7294),t(3905));t(5657);const s={},o="CURVES",i={unversionedId:"about/references/keywords/CURVES",id:"about/references/keywords/CURVES",title:"CURVES",description:"Description",source:"@site/docs/about/references/keywords/CURVES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CURVES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE"},next:{title:"DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],E={toc:d},l="wrapper";function p(e){let{components:r,...t}=e;return(0,a.kt)(l,(0,n.Z)({},E,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"curves"},"CURVES"),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"When using a detailed variable speed compressor model, it is necessary to specify the variable speed ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/#user-defined-variable-speed-compressor-chart"},"COMPRESSOR CHART"),". This can be defined from a .csv file, or it can be defined directly in the YAML file.\nIn either case, the keyword ",(0,a.kt)("inlineCode",{parentName:"p"},"CURVES")," needs to be used, and curves for at least two different speeds must be defined. If a .csv file is being used, under the ",(0,a.kt)("inlineCode",{parentName:"p"},"CURVES")," keyword, ",(0,a.kt)("inlineCode",{parentName:"p"},"FILE")," must be used. If specified directly in the YAML file, ",(0,a.kt)("inlineCode",{parentName:"p"},"SPEED"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"RATE"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"HEAD")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"EFFICIENCY")," must be defined for each speed."),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ...\n CURVES:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ... \n CURVES:\n - FILE: <filepath to compressor curve>\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ...\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 9886\n RATE: [3708, 4502, 4993.6, 5507, 5924]\n HEAD: [13845, 13182, 12425, 11276, 10054]\n EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]\n\n - NAME: compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ... \n CURVES:\n - FILE: compressor_chart.csv\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/38d592cf.eca6abdd.js b/assets/js/38d592cf.eca6abdd.js new file mode 100644 index 0000000000..903a8a00b8 --- /dev/null +++ b/assets/js/38d592cf.eca6abdd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1398],{4193:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>n,metadata:()=>r,toc:()=>N});var s=t(7462),m=(t(7294),t(3905));t(5657);const n={title:"Compressor modelling",sidebar_position:2,description:"Compressor modelling theory"},p=void 0,r={unversionedId:"about/modelling/theory/compressor_modelling",id:"about/modelling/theory/compressor_modelling",title:"Compressor modelling",description:"Compressor modelling theory",source:"@site/docs/about/modelling/theory/compressor_modelling.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/compressor_modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/compressor_modelling.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor modelling",sidebar_position:2,description:"Compressor modelling theory"},sidebar:"about",previous:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling"},next:{title:"Setup an eCalc\u2122 Model",permalink:"/ecalc/docs/about/modelling/setup/"}},l={},N=[],i={toc:N},o="wrapper";function c(a){let{components:e,...n}=a;return(0,m.kt)(o,(0,s.Z)({},i,n,{components:e,mdxType:"MDXLayout"}),(0,m.kt)("p",null,"A compressor model describes what happens to a fluid going through a compressor and calculates how much power is\nrequired in the process."),(0,m.kt)("p",null,"At the suction side, one need information about the fluid (natural gas) which has a (static) specification of the\ncomposition, a specified rate, a temperature and a pressure. As the fluid is going through the compressor in a fluid\ndynamic process, the enthalpy changes, resulting in a new state and both the pressure and the\ntemperature of the fluid is increased, while the volume is decreased. This change is calculated using an\nequation-of-state (EOS) model. See ",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/fluid_model"},(0,m.kt)("inlineCode",{parentName:"a"},"Fluid model"))),(0,m.kt)("p",null,(0,m.kt)("img",{src:t(3026).Z,width:"1626",height:"738"})),(0,m.kt)("p",null,"eCalc does not perform fluid dynamic modeling. Instead, the behaviour of the compressor is described by a polytropic\ncompressor chart which specifies both the operational domain of the compressor, but also relates volume rate, head and\nefficiency for the compressor."),(0,m.kt)("p",null,"An isentropic (adiabatic) compression is the process where no heat is added or removed from a system. In a polytropic\nprocess, changes in the gas characteristics is considered. Dynamic natural gas compressors typically follow a polytropic\nprocess defined by the formula ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("msubsup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msubsup"},"V"),(0,m.kt)("mn",{parentName:"msubsup"},"1"),(0,m.kt)("mi",{parentName:"msubsup"},"n")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("msubsup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msubsup"},"V"),(0,m.kt)("mn",{parentName:"msubsup"},"2"),(0,m.kt)("mi",{parentName:"msubsup"},"n"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P_\\mathrm{1} V_\\mathrm{1}^n = P_\\mathrm{2} V_\\mathrm{2}^n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9314em",verticalAlign:"-0.2481em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.4519em",marginLeft:"-0.2222em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"1"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2481em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9314em",verticalAlign:"-0.2481em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.4519em",marginLeft:"-0.2222em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"2"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2481em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," is the\npolytropic exponent which is experimentally determined for a given compressor."),(0,m.kt)("p",null,(0,m.kt)("img",{src:t(8778).Z,width:"901",height:"762"}),"\nThe power need for compression is given by"),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"o"),(0,m.kt)("mi",{parentName:"mrow"},"w"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mfrac",{parentName:"mrow"},(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"o"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"o"),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mo",{parentName:"mrow"},"\u2217"),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"e")),(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"f"),(0,m.kt)("mi",{parentName:"mrow"},"f"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow"},"y")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"power = \\frac{polytropic\\_head * mass\\_rate}{efficiency}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"o"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"er"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"2.2749em",verticalAlign:"-0.8804em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.3944em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10764em"}},"ff"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"cy"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.7em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"o"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ro"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2217"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ma"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ss"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8804em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter"}))))))),(0,m.kt)("p",null,"and the relationship between polytropic head and the pressures are"),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"o"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"o"),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mfrac",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"mfrac"},"n"),(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"1"))),(0,m.kt)("mfrac",{parentName:"mrow"},(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"Z"),(0,m.kt)("mi",{parentName:"mrow"},"R"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"T"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"M"),(0,m.kt)("mi",{parentName:"mrow"},"W"))),(0,m.kt)("mrow",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"mrow",fence:"true"},"("),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mo",{parentName:"mrow",fence:"true"},"("),(0,m.kt)("mfrac",{parentName:"mrow"},(0,m.kt)("msub",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("msub",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("mo",{parentName:"mrow",fence:"true"},")")),(0,m.kt)("mfrac",{parentName:"msup"},(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("mi",{parentName:"mfrac"},"n"))),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"1"),(0,m.kt)("mo",{parentName:"mrow",fence:"true"},")"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"polytropic\\_head = \\frac{n}{n-1} \\frac{Z R T_1}{MW} \\left( \\left(\\frac{P_1}{P_2} \\right)^{\\frac{n-1}{n}} -1 \\right)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0044em",verticalAlign:"-0.31em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"o"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ro"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"3.044em",verticalAlign:"-1.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.1076em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.677em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.7693em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter"})),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.3603em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.677em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"ZR"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.686em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter"})),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"minner"},(0,m.kt)("span",{parentName:"span",className:"mopen delimcenter",style:{top:"0em"}},(0,m.kt)("span",{parentName:"span",className:"delimsizing size4"},"(")),(0,m.kt)("span",{parentName:"span",className:"minner"},(0,m.kt)("span",{parentName:"span",className:"minner"},(0,m.kt)("span",{parentName:"span",className:"mopen delimcenter",style:{top:"0em"}},(0,m.kt)("span",{parentName:"span",className:"delimsizing size3"},"(")),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.3603em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.677em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.836em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter"})),(0,m.kt)("span",{parentName:"span",className:"mclose delimcenter",style:{top:"0em"}},(0,m.kt)("span",{parentName:"span",className:"delimsizing size3"},")"))),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.7939em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-4.2029em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter sizing reset-size3 size6"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8443em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.656em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size3 size1 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n")))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.2255em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line mtight",style:{borderBottomWidth:"0.049em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.384em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size3 size1 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"),(0,m.kt)("span",{parentName:"span",className:"mbin mtight"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.344em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter sizing reset-size3 size6"})))))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"),(0,m.kt)("span",{parentName:"span",className:"mclose delimcenter",style:{top:"0em"}},(0,m.kt)("span",{parentName:"span",className:"delimsizing size4"},")")))))))),(0,m.kt)("p",null,"where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," is the polytropic exponent, ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"Z")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"Z")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"Z")))))," the compressibility, ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"R")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"R")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R")))))," is the gas constant, ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"T"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," is the inlet temperature and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"M"),(0,m.kt)("mi",{parentName:"mrow"},"W")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"MW")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W")))))," the molecular weight."),(0,m.kt)("p",null,"Further, the polytropic exponent is approximated as"),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mfrac",{parentName:"mrow"},(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"\u03ba"),(0,m.kt)("mo",{parentName:"mrow"},"\u2217"),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"o"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"o"),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"f"),(0,m.kt)("mi",{parentName:"mrow"},"f"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow"},"y")),(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"\u03ba"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"1")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\frac{\\kappa * polytropic\\_efficiency}{\\kappa -1}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"2.1638em",verticalAlign:"-0.7693em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.3944em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"\u03ba"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.7em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"\u03ba"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2217"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"o"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ro"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10764em"}},"ff"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"cy")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.7693em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter"}))))))),(0,m.kt)("p",null,"where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"\u03ba")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\kappa")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"\u03ba")))))," is the heat capacity ratio of the fluid."),(0,m.kt)("p",null,(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"\u03ba")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\kappa")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"\u03ba")))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"Z")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"Z")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"Z")))))," are not for inlet conditions, but average values for the fluid throughout the process, and\nthe polytropic process and the calculations are iterated until these converge."),(0,m.kt)("p",null,"If there is only one compressor, the outlet pressure for each compressor is known, and the polytropic head and\nefficiency may be calculated from directly from the above polytropic head and efficiency formulas. "),(0,m.kt)("p",null,"However, for compressor trains, the intermediate pressures are not known ahead, instead one may use the fact that all\ncompressors run with the same speed as they are mounted on the same shaft."),(0,m.kt)("p",null,"To calculate the energy usage for the compressor train using the common speed, eCalc uses a forward model to\ncalculate the outlet stream given the inlet stream and a given speed. Then, this model is iterated until the discharge pressure is equal to the requested discharge pressure for evaluation. To use this model, see\n",(0,m.kt)("inlineCode",{parentName:"p"},"Variable speed compressor train model")," An alternative is to neglect the common speed property of the train, an instead assume (incorrectly but maybe good\nenough for some purposes) that the pressure fraction is equal for all stages. With this assumption, the intermediate pressures can be calculated and each stage may be calculated independently without the speed iteration. To use this model, see\n",(0,m.kt)("inlineCode",{parentName:"p"},"Simplified variable speed compressor train model"),"."),(0,m.kt)("p",null,"In some cases, the shaft of the compressor train can only run on a single fixed speed. In these cases eCalc needs\ninformation about how the pressure should be controlled to meet the required discharge pressure. Available pressure\ncontrol options are choking and recirculating using anti-surge valves. To use this model, see ",(0,m.kt)("inlineCode",{parentName:"p"},"Single speed compressor train model"),"."),(0,m.kt)("p",null,"In other cases, the compressor trains have more complex setup and process control which needs a more flexible model. The\nfigure below shows an example where one may have two inlet streams with different pressures and potentially different\ngas compositions and one outlet stream for export gas with a pressure control. To use a model suitable for such cases,\nsee ",(0,m.kt)("inlineCode",{parentName:"p"},"Variable speed compressor train model with multiple streams and pressures"),"."),(0,m.kt)("p",null,(0,m.kt)("img",{src:t(5113).Z,width:"1475",height:"659"})))}c.isMDXComponent=!0},3026:(a,e,t)=>{t.d(e,{Z:()=>s});const s=t.p+"assets/images/process_compressor-3493b127c832898d93b5231594efa8d3.png"},8778:(a,e,t)=>{t.d(e,{Z:()=>s});const s=t.p+"assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png"},5113:(a,e,t)=>{t.d(e,{Z:()=>s});const s=t.p+"assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png"}}]); \ No newline at end of file diff --git a/assets/js/3aeef25a.7f601772.js b/assets/js/3aeef25a.7f601772.js new file mode 100644 index 0000000000..f69545858e --- /dev/null +++ b/assets/js/3aeef25a.7f601772.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7396],{6544:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=t(7462),n=(t(7294),t(3905));t(5657);const o={},i="HEAD_MARGIN",l={unversionedId:"about/references/keywords/HEAD_MARGIN",id:"about/references/keywords/HEAD_MARGIN",title:"HEAD_MARGIN",description:"FACILITYINPUTS /",source:"@site/docs/about/references/keywords/HEAD_MARGIN.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HEAD_MARGIN.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD"},next:{title:"INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"}},s={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:c},u="wrapper";function m(e){let{components:a,...t}=e;return(0,n.kt)(u,(0,r.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"head_margin"},"HEAD_MARGIN"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"},"HEAD_MARGIN")),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"When calibrating pump charts to historical data, the head values at maximum speed\ncould be put in the cloud of data to be unbiased. However, eCalc will treat all\nhead values above the maximum defined area in the chart infeasible (i.e.,\noutside pump capacity). To mitigate this when running through historical data for\npower calibration, one can adjust the head margin with this keyword."),(0,n.kt)("p",null,"Calculated head values above maximum head values from the chart will be set equal to\nmaximum head values before power calculations ",(0,n.kt)("strong",{parentName:"p"},"if")," they are within the margin given.\nCalculated head values larger than maximum + margin will still be infeasible."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("p",null,"The head margin can be specified in ",(0,n.kt)("inlineCode",{parentName:"p"},"mlc")," (meter liquid column):"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"HEAD_MARGIN: <margin>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"}," NAME: pump_name\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n FILE: <path_to_chart_file>.csv\n HEAD_MARGIN: 10.0\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3b0e82f8.8f1f64c8.js b/assets/js/3b0e82f8.8f1f64c8.js new file mode 100644 index 0000000000..a51ca8aebe --- /dev/null +++ b/assets/js/3b0e82f8.8f1f64c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[925],{771:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>E,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var t=r(7462),o=(r(7294),r(3905));r(5657);const s={},a="CURVE",i={unversionedId:"about/references/keywords/CURVE",id:"about/references/keywords/CURVE",title:"CURVE",description:"Description",source:"@site/docs/about/references/keywords/CURVE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CURVE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER"},next:{title:"CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],l={toc:d},p="wrapper";function E(e){let{components:n,...r}=e;return(0,o.kt)(p,(0,t.Z)({},l,r,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"curve"},"CURVE"),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"When using a detailed single speed compressor model, it is necessary to specify the single speed ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/#user-defined-single-speed-compressor-chart"},"COMPRESSOR CHART"),". This can be defined from a .csv file, or it can be defined directly in the YAML file.\nIn either case, the keyword ",(0,o.kt)("inlineCode",{parentName:"p"},"CURVE")," needs to be used. If a .csv file is being used, under the ",(0,o.kt)("inlineCode",{parentName:"p"},"CURVE")," keyword, ",(0,o.kt)("inlineCode",{parentName:"p"},"FILE")," must be used. If specified directly in the YAML file, ",(0,o.kt)("inlineCode",{parentName:"p"},"SPEED"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"RATE"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"HEAD")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"EFFICIENCY")," must be defined."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ...\n CURVE:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ... \n CURVE:\n - FILE: <filepath to compressor curve>\n")),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: predefined_single_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ...\n CURVE:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n\n - NAME: compressor_chart\n TYPE: COMPRESSOR_CHART\n ... \n CURVE:\n - FILE: compressor_chart.csv\n")))}E.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3e38e310.8e47d177.js b/assets/js/3e38e310.8e47d177.js new file mode 100644 index 0000000000..7371f12790 --- /dev/null +++ b/assets/js/3e38e310.8e47d177.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8094],{8955:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>r,contentTitle:()=>s,default:()=>g,frontMatter:()=>n,metadata:()=>o,toc:()=>c});var i=t(7462),l=(t(7294),t(3905));t(5657);const n={slug:"v8.3-release",title:"v8.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:13},s="eCalc v8.3",o={unversionedId:"changelog/v8-3",id:"changelog/v8-3",title:"v8.3",description:"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See",source:"@site/docs/changelog/v8-3.md",sourceDirName:"changelog",slug:"/changelog/v8.3-release",permalink:"/ecalc/docs/changelog/v8.3-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-3.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:13,frontMatter:{slug:"v8.3-release",title:"v8.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:13},sidebar:"changelog",previous:{title:"v8.2",permalink:"/ecalc/docs/changelog/v8.2-release"},next:{title:"v8.4 (Latest)",permalink:"/ecalc/docs/changelog/v8.4-release"}},r={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Input: YAML / Resource files",id:"input-yaml--resource-files",level:3}],d={toc:c},u="wrapper";function g(e){let{components:a,...t}=e;return(0,l.kt)(u,(0,i.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"ecalc-v83"},"eCalc v8.3"),(0,l.kt)("p",null,"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See\nthe migration guide for details on changes, where relevant."),(0,l.kt)("h2",{id:"new-features"},"New Features"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"To save time in calibration and help diagnose pump issues: When calibrating or seeing why a pump is invalid, the most important thing to look at is the head. Now the head is available in the JSON file.")),(0,l.kt)("h2",{id:"fixes"},"Fixes"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"A bug in the mixing of fluid-streams in compressor trains were fixed. This bug caused the density at standard conditions not to be updated, leading to the standard rates being wrong. This is expected to change the results of some eCalc Models")),(0,l.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,l.kt)("p",null,"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"),(0,l.kt)("h3",{id:"input-yaml--resource-files"},"Input: YAML / Resource files"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"It is no longer accepted to change ",(0,l.kt)("inlineCode",{parentName:"li"},"ENERGY_USAGE_MODEL TYPE")," over time, within one consumer. In case ",(0,l.kt)("inlineCode",{parentName:"li"},"TYPE")," evolution is needed, the model can be split in two consumers.")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3fbb770c.5a0ea03b.js b/assets/js/3fbb770c.5a0ea03b.js new file mode 100644 index 0000000000..6567bbce1f --- /dev/null +++ b/assets/js/3fbb770c.5a0ea03b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4838],{3758:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>p,frontMatter:()=>n,metadata:()=>c,toc:()=>i});var a=r(7462),s=(r(7294),r(3905));r(5657);const n={},o="SUCTION_PRESSURE",c={unversionedId:"about/references/keywords/SUCTION_PRESSURE",id:"about/references/keywords/SUCTION_PRESSURE",title:"SUCTION_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/SUCTION_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/SUCTION_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS"},next:{title:"TAX",permalink:"/ecalc/docs/about/references/keywords/TAX"}},u={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:i},l="wrapper";function p(e){let{components:t,...r}=e;return(0,s.kt)(l,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"suction_pressure"},"SUCTION_PRESSURE"),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n","[...]"," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"},"SUCTION_PRESSURE")),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,"Used to define the suction pressure for some ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"\ntypes and in ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},"OPERATIONAL_SETTINGS")," using\na fixed value or an expression. If an expression is used, a time series can be used so that the suction pressure of the unit can vary over the lifespan of the model. "),(0,s.kt)("p",null,"Note that pressure values ",(0,s.kt)("strong",{parentName:"p"},"must")," be inputted in ",(0,s.kt)("inlineCode",{parentName:"p"},"bar"),"."),(0,s.kt)("h2",{id:"format"},"Format"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"SUCTION_PRESSURE: <suction pressure value/expression>\n")),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"SUCTION_PRESSURE: 10 \n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/40d6382c.eade4c9d.js b/assets/js/40d6382c.eade4c9d.js new file mode 100644 index 0000000000..f1bc1060a7 --- /dev/null +++ b/assets/js/40d6382c.eade4c9d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9814],{9142:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var o=i(7462),n=(i(7294),i(3905));i(5657);const a={title:"Migrating eCalc versions",sidebar_position:1e3,description:"Getting started with eCalc"},r=void 0,s={unversionedId:"about/migration_guides/index",id:"about/migration_guides/index",title:"Migrating eCalc versions",description:"Getting started with eCalc",source:"@site/docs/about/migration_guides/index.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/",permalink:"/ecalc/docs/about/migration_guides/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/index.md",tags:[],version:"current",sidebarPosition:1e3,frontMatter:{title:"Migrating eCalc versions",sidebar_position:1e3,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"CLI",permalink:"/ecalc/docs/about/references/cli_reference"},next:{title:"v7 to v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8"}},c={},d=[],u={toc:d},g="wrapper";function l(t){let{components:e,...i}=t;return(0,n.kt)(g,(0,o.Z)({},u,i,{components:e,mdxType:"MDXLayout"}))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4147f87e.df19a38f.js b/assets/js/4147f87e.df19a38f.js new file mode 100644 index 0000000000..74e6965b9d --- /dev/null +++ b/assets/js/4147f87e.df19a38f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9786],{40:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>E,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>R});var r=n(7462),a=(n(7294),n(3905));n(5657);const s={},o="STAGES",i={unversionedId:"about/references/keywords/STAGES",id:"about/references/keywords/STAGES",title:"STAGES",description:"MODELS /",source:"@site/docs/about/references/keywords/STAGES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STAGES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY"},next:{title:"START",permalink:"/ecalc/docs/about/references/keywords/START"}},E={},R=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Use in <code>VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES</code>",id:"use-in-variable_speed_compressor_train_multiple_streams_and_pressures",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example",level:3}],S={toc:R},l="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(l,(0,r.Z)({},S,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"stages"},"STAGES"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n","[...]"," /\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STREAMS"},"STREAMS")),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"This keyword is used to define each stage in a compression train model. This is to be defined for all compressor models types."),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: <compressor type>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n ....\n")),(0,a.kt)("h2",{id:"use-in-variable_speed_compressor_train_multiple_streams_and_pressures"},"Use in ",(0,a.kt)("inlineCode",{parentName:"h2"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"STAGES")," is a list of all the stages in the compressor train."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"For each stage, a temperature in Celsius must be defined. It\nis assumed that the gas is cooled down to this temperature ahead of the compression at this stage."),(0,a.kt)("li",{parentName:"ul"},"A reference to a\ncompressor chart needs to be specified for each stage."),(0,a.kt)("li",{parentName:"ul"},"For the first stage, it is required to have ",(0,a.kt)("strong",{parentName:"li"},"at least")," one stream of INGOING type. In addition, ",(0,a.kt)("inlineCode",{parentName:"li"},"INTERSTAGE_CONTROL_PRESSURE")," cannot be used on the first stage."),(0,a.kt)("li",{parentName:"ul"},"Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream\nwill be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the\nmolar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will\nbe subtracted the rate of the outgoing stream.")),(0,a.kt)("h3",{id:"format-1"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n CONTROL_MARGIN: <Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n")),(0,a.kt)("h3",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/41d1792a.c60b77fa.js b/assets/js/41d1792a.c60b77fa.js new file mode 100644 index 0000000000..ed216e1bf9 --- /dev/null +++ b/assets/js/41d1792a.c60b77fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1748],{2977:e=>{e.exports=JSON.parse('{"label":"release","permalink":"/ecalc/docs/tags/release","allTagsPath":"/ecalc/docs/tags","count":15,"items":[{"id":"changelog/separator","title":"---","description":"","permalink":"/ecalc/docs/changelog/separator"},{"id":"changelog/next","title":"Next","description":"New Features","permalink":"/ecalc/docs/changelog/latest"},{"id":"changelog/v7-0","title":"v7.0","description":"Features","permalink":"/ecalc/docs/changelog/v7-0-release"},{"id":"changelog/v7-1","title":"v7.1","description":"Features","permalink":"/ecalc/docs/changelog/v7-1-release"},{"id":"changelog/v7-2","title":"v7.2","description":"Features","permalink":"/ecalc/docs/changelog/v7-2-release"},{"id":"changelog/v7-3","title":"v7.3","description":"Features","permalink":"/ecalc/docs/changelog/v7-3-release"},{"id":"changelog/v7-4","title":"v7.4","description":"Features","permalink":"/ecalc/docs/changelog/v7-4-release"},{"id":"changelog/v7-5","title":"v7.5","description":"Features","permalink":"/ecalc/docs/changelog/v7-5-release"},{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","permalink":"/ecalc/docs/changelog/v7-6-release"},{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","permalink":"/ecalc/docs/changelog/v8.0-release"},{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","permalink":"/ecalc/docs/changelog/v8.1-release"},{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.2-release"},{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.3-release"},{"id":"changelog/v8-4","title":"v8.4 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.4-release"},{"id":"changelog/v8-5","title":"v8.5 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.5-release"}]}')}}]); \ No newline at end of file diff --git a/assets/js/4216.1a7bbbbb.js b/assets/js/4216.1a7bbbbb.js new file mode 100644 index 0000000000..90a36c7ec9 --- /dev/null +++ b/assets/js/4216.1a7bbbbb.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4216],{7295:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,u){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var o=new Error("Cannot find module '"+a+"'");throw o.code="MODULE_NOT_FOUND",o}var s=e[a]={exports:{}};t[a][0].call(s.exports,(function(n){return r(t[a][1][n]||n)}),s,s.exports,n,t,e,i)}return e[a].exports}for(var c=void 0,a=0;a<i.length;a++)r(i[a]);return r}return n}()({1:[function(n,t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function n(n,t){for(var e=0;e<t.length;e++){var i=t[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();function r(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}var c=function(){function n(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=e.defaultLayoutOptions,c=void 0===i?{}:i,u=e.algorithms,o=void 0===u?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:u,s=e.workerFactory,h=e.workerUrl;if(r(this,n),this.defaultLayoutOptions=c,this.initialized=!1,void 0===h&&void 0===s)throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var f=s;void 0!==h&&void 0===s&&(f=function(n){return new Worker(n)});var l=f(h);if("function"!=typeof l.postMessage)throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new a(l),this.worker.postMessage({cmd:"register",algorithms:o}).then((function(n){return t.initialized=!0})).catch(console.err)}return i(n,[{key:"layout",value:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=t.layoutOptions,i=void 0===e?this.defaultLayoutOptions:e,r=t.logging,c=void 0!==r&&r,a=t.measureExecutionTime,u=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:u}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),n}();e.default=c;var a=function(){function n(t){var e=this;if(r(this,n),void 0===t)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=t,this.worker.onmessage=function(n){setTimeout((function(){e.receive(e,n)}),0)}}return i(n,[{key:"postMessage",value:function(n){var t=this.id||0;this.id=t+1,n.id=t;var e=this;return new Promise((function(i,r){e.resolvers[t]=function(n,t){n?(e.convertGwtStyleError(n),r(n)):i(t)},e.worker.postMessage(n)}))}},{key:"receive",value:function(n,t){var e=t.data,i=n.resolvers[e.id];i&&(delete n.resolvers[e.id],e.error?i(e.error):i(null,e.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(n){if(n){var t=n.__java$exception;t&&(t.cause&&t.cause.backingJsObject&&(n.cause=t.cause.backingJsObject,this.convertGwtStyleError(n.cause)),delete n.__java$exception)}}}]),n}()},{}],2:[function(n,t,i){(function(n){(function(){"use strict";var e;function r(){}function c(){}function a(){}function u(){}function o(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function v(){}function m(){}function y(){}function k(){}function j(){}function E(){}function T(){}function M(){}function S(){}function P(){}function I(){}function C(){}function O(){}function A(){}function $(){}function L(){}function N(){}function x(){}function D(){}function R(){}function K(){}function _(){}function F(){}function B(){}function H(){}function q(){}function G(){}function z(){}function U(){}function X(){}function W(){}function V(){}function Q(){}function Y(){}function J(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function un(){}function on(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function vn(){}function mn(){}function yn(){}function kn(){}function jn(){}function En(){}function Tn(){}function Mn(){}function Sn(){}function Pn(){}function In(){}function Cn(){}function On(){}function An(){}function $n(){}function Ln(){}function Nn(){}function xn(){}function Dn(){}function Rn(){}function Kn(){}function _n(){}function Fn(){}function Bn(){}function Hn(){}function qn(){}function Gn(){}function zn(){}function Un(){}function Xn(){}function Wn(){}function Vn(){}function Qn(){}function Yn(){}function Jn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ut(){}function ot(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function vt(){}function mt(){}function yt(){}function kt(){}function jt(){}function Et(){}function Tt(){}function Mt(){}function St(){}function Pt(){}function It(){}function Ct(){}function Ot(){}function At(){}function $t(){}function Lt(){}function Nt(){}function xt(){}function Dt(){}function Rt(){}function Kt(){}function _t(){}function Ft(){}function Bt(){}function Ht(){}function qt(){}function Gt(){}function zt(){}function Ut(){}function Xt(){}function Wt(){}function Vt(){}function Qt(){}function Yt(){}function Jt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function ue(){}function oe(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function ve(){}function me(){}function ye(){}function ke(){}function je(){}function Ee(){}function Te(){}function Me(){}function Se(){}function Pe(){}function Ie(){}function Ce(){}function Oe(){}function Ae(){}function $e(){}function Le(){}function Ne(){}function xe(){}function De(){}function Re(){}function Ke(){}function _e(){}function Fe(){}function Be(){}function He(){}function qe(){}function Ge(){}function ze(){}function Ue(){}function Xe(){}function We(){}function Ve(){}function Qe(){}function Ye(){}function Je(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function ui(){}function oi(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function vi(){}function mi(){}function yi(){}function ki(){}function ji(){}function Ei(){}function Ti(){}function Mi(){}function Si(){}function Pi(){}function Ii(){}function Ci(){}function Oi(){}function Ai(){}function $i(){}function Li(){}function Ni(){}function xi(){}function Di(){}function Ri(){}function Ki(){}function _i(){}function Fi(){}function Bi(){}function Hi(){}function qi(){}function Gi(){}function zi(){}function Ui(){}function Xi(){}function Wi(){}function Vi(){}function Qi(){}function Yi(){}function Ji(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function ur(){}function or(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function vr(){}function mr(){}function yr(){}function kr(){}function jr(){}function Er(){}function Tr(){}function Mr(){}function Sr(){}function Pr(){}function Ir(){}function Cr(){}function Or(){}function Ar(){}function $r(){}function Lr(){}function Nr(){}function xr(){}function Dr(){}function Rr(){}function Kr(){}function _r(){}function Fr(){}function Br(){}function Hr(){}function qr(){}function Gr(){}function zr(){}function Ur(){}function Xr(){}function Wr(){}function Vr(){}function Qr(){}function Yr(){}function Jr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function uc(){}function oc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function vc(){}function mc(){}function yc(){}function kc(){}function jc(){}function Ec(){}function Tc(){}function Mc(){}function Sc(){}function Pc(){}function Ic(){}function Cc(){}function Oc(){}function Ac(){}function $c(){}function Lc(){}function Nc(){}function xc(){}function Dc(){}function Rc(){}function Kc(){}function _c(){}function Fc(){}function Bc(){}function Hc(){}function qc(){}function Gc(){}function zc(){}function Uc(){}function Xc(){}function Wc(){}function Vc(){}function Qc(){}function Yc(){}function Jc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function ua(){}function oa(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function va(){}function ma(){}function ya(){}function ka(){}function ja(){}function Ea(){}function Ta(){}function Ma(){}function Sa(){}function Pa(){}function Ia(){}function Ca(){}function Oa(){}function Aa(){}function $a(){}function La(){}function Na(){}function xa(){}function Da(){}function Ra(){}function Ka(){}function _a(){}function Fa(){}function Ba(){}function Ha(){}function qa(){}function Ga(){}function za(){}function Ua(){}function Xa(){}function Wa(){}function Va(){}function Qa(){}function Ya(){}function Ja(){}function Za(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function uu(){}function ou(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function vu(){}function mu(){}function yu(){}function ku(){}function ju(){}function Eu(){}function Tu(){}function Mu(){}function Su(){}function Pu(){}function Iu(){}function Cu(){}function Ou(){}function Au(){}function $u(){}function Lu(){}function Nu(){}function xu(){}function Du(){}function Ru(){}function Ku(){}function _u(){}function Fu(){}function Bu(){}function Hu(){}function qu(){}function Gu(){}function zu(){}function Uu(){}function Xu(){}function Wu(){}function Vu(){}function Qu(){}function Yu(){}function Ju(){}function Zu(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function uo(){}function oo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function vo(){}function mo(){}function yo(){}function ko(){}function jo(){}function Eo(){}function To(){}function Mo(){}function So(){}function Po(){}function Io(){}function Co(){}function Oo(){}function Ao(){}function $o(){}function Lo(){}function No(){}function xo(){}function Do(){}function Ro(){}function Ko(){}function _o(){}function Fo(){}function Bo(){}function Ho(){}function qo(){}function Go(){}function zo(){}function Uo(){}function Xo(){}function Wo(){}function Vo(){}function Qo(){}function Yo(){}function Jo(){}function Zo(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function us(){}function os(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function vs(){}function ms(){}function ys(){}function ks(){}function js(){}function Es(){}function Ts(){}function Ms(){}function Ss(){}function Ps(){}function Is(){}function Cs(){}function Os(){}function As(){}function $s(){}function Ls(){}function Ns(){}function xs(){}function Ds(){}function Rs(){}function Ks(){}function _s(){}function Fs(){}function Bs(){}function Hs(){}function qs(){}function Gs(){}function zs(){}function Us(){}function Xs(){}function Ws(){}function Vs(){}function Qs(){}function Ys(){}function Js(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function uh(){}function oh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function vh(){}function mh(){}function yh(){}function kh(){}function jh(){}function Eh(){}function Th(){}function Mh(){}function Sh(){}function Ph(){}function Ih(){}function Ch(){}function Oh(){}function Ah(){}function $h(){}function Lh(){}function Nh(){}function xh(){}function Dh(){}function Rh(){}function Kh(){}function _h(n){}function Fh(n){}function Bh(){iy()}function Hh(){Gsn()}function qh(){Epn()}function Gh(){_kn()}function zh(){jSn()}function Uh(){fRn()}function Xh(){Kyn()}function Wh(){rkn()}function Vh(){EM()}function Qh(){mM()}function Yh(){q_()}function Jh(){TM()}function Zh(){Crn()}function nf(){SM()}function tf(){C6()}function ef(){Pin()}function rf(){Q8()}function cf(){_Z()}function af(){zsn()}function uf(){_Mn()}function of(){Iin()}function sf(){U2()}function hf(){fWn()}function ff(){Gyn()}function lf(){FZ()}function bf(){HXn()}function wf(){RZ()}function df(){Cin()}function gf(){Yun()}function pf(){GZ()}function vf(){I9()}function mf(){PM()}function yf(){KAn()}function kf(){Uyn()}function jf(){Fcn()}function Ef(){MMn()}function Tf(){bRn()}function Mf(){Bvn()}function Sf(){IAn()}function Pf(){Ran()}function If(){HZ()}function Cf(){s_n()}function Of(){$An()}function Af(){W$n()}function $f(){x9()}function Lf(){SMn()}function Nf(){sWn()}function xf(){Xsn()}function Df(){vdn()}function Rf(){qBn()}function Kf(){u_()}function _f(){wcn()}function Ff(){fFn()}function Bf(n){kW(n)}function Hf(n){this.a=n}function qf(n){this.a=n}function Gf(n){this.a=n}function zf(n){this.a=n}function Uf(n){this.a=n}function Xf(n){this.a=n}function Wf(n){this.a=n}function Vf(n){this.a=n}function Qf(n){this.a=n}function Yf(n){this.a=n}function Jf(n){this.a=n}function Zf(n){this.a=n}function nl(n){this.a=n}function tl(n){this.a=n}function el(n){this.a=n}function il(n){this.a=n}function rl(n){this.a=n}function cl(n){this.a=n}function al(n){this.a=n}function ul(n){this.a=n}function ol(n){this.a=n}function sl(n){this.b=n}function hl(n){this.c=n}function fl(n){this.a=n}function ll(n){this.a=n}function bl(n){this.a=n}function wl(n){this.a=n}function dl(n){this.a=n}function gl(n){this.a=n}function pl(n){this.a=n}function vl(n){this.a=n}function ml(n){this.a=n}function yl(n){this.a=n}function kl(n){this.a=n}function jl(n){this.a=n}function El(n){this.a=n}function Tl(n){this.a=n}function Ml(n){this.a=n}function Sl(n){this.a=n}function Pl(n){this.a=n}function Il(){this.a=[]}function Cl(n,t){n.a=t}function Ol(n,t){n.a=t}function Al(n,t){n.b=t}function $l(n,t){n.b=t}function Ll(n,t){n.b=t}function Nl(n,t){n.j=t}function xl(n,t){n.g=t}function Dl(n,t){n.i=t}function Rl(n,t){n.c=t}function Kl(n,t){n.d=t}function _l(n,t){n.d=t}function Fl(n,t){n.c=t}function Bl(n,t){n.k=t}function Hl(n,t){n.c=t}function ql(n,t){n.c=t}function Gl(n,t){n.a=t}function zl(n,t){n.a=t}function Ul(n,t){n.f=t}function Xl(n,t){n.a=t}function Wl(n,t){n.b=t}function Vl(n,t){n.d=t}function Ql(n,t){n.i=t}function Yl(n,t){n.o=t}function Jl(n,t){n.r=t}function Zl(n,t){n.a=t}function nb(n,t){n.b=t}function tb(n,t){n.e=t}function eb(n,t){n.f=t}function ib(n,t){n.g=t}function rb(n,t){n.e=t}function cb(n,t){n.f=t}function ab(n,t){n.f=t}function ub(n,t){n.n=t}function ob(n,t){n.a=t}function sb(n,t){n.a=t}function hb(n,t){n.c=t}function fb(n,t){n.c=t}function lb(n,t){n.d=t}function bb(n,t){n.e=t}function wb(n,t){n.g=t}function db(n,t){n.a=t}function gb(n,t){n.c=t}function pb(n,t){n.d=t}function vb(n,t){n.e=t}function mb(n,t){n.f=t}function yb(n,t){n.j=t}function kb(n,t){n.a=t}function jb(n,t){n.b=t}function Eb(n,t){n.a=t}function Tb(n){n.b=n.a}function Mb(n){n.c=n.d.d}function Sb(n){this.d=n}function Pb(n){this.a=n}function Ib(n){this.a=n}function Cb(n){this.a=n}function Ob(n){this.a=n}function Ab(n){this.a=n}function $b(n){this.a=n}function Lb(n){this.a=n}function Nb(n){this.a=n}function xb(n){this.a=n}function Db(n){this.a=n}function Rb(n){this.a=n}function Kb(n){this.a=n}function _b(n){this.a=n}function Fb(n){this.a=n}function Bb(n){this.b=n}function Hb(n){this.b=n}function qb(n){this.b=n}function Gb(n){this.a=n}function zb(n){this.a=n}function Ub(n){this.a=n}function Xb(n){this.c=n}function Wb(n){this.c=n}function Vb(n){this.c=n}function Qb(n){this.a=n}function Yb(n){this.a=n}function Jb(n){this.a=n}function Zb(n){this.a=n}function nw(n){this.a=n}function tw(n){this.a=n}function ew(n){this.a=n}function iw(n){this.a=n}function rw(n){this.a=n}function cw(n){this.a=n}function aw(n){this.a=n}function uw(n){this.a=n}function ow(n){this.a=n}function sw(n){this.a=n}function hw(n){this.a=n}function fw(n){this.a=n}function lw(n){this.a=n}function bw(n){this.a=n}function ww(n){this.a=n}function dw(n){this.a=n}function gw(n){this.a=n}function pw(n){this.a=n}function vw(n){this.a=n}function mw(n){this.a=n}function yw(n){this.a=n}function kw(n){this.a=n}function jw(n){this.a=n}function Ew(n){this.a=n}function Tw(n){this.a=n}function Mw(n){this.a=n}function Sw(n){this.a=n}function Pw(n){this.a=n}function Iw(n){this.a=n}function Cw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function $w(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function xw(n){this.a=n}function Dw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function _w(n){this.a=n}function Fw(n){this.a=n}function Bw(n){this.e=n}function Hw(n){this.a=n}function qw(n){this.a=n}function Gw(n){this.a=n}function zw(n){this.a=n}function Uw(n){this.a=n}function Xw(n){this.a=n}function Ww(n){this.a=n}function Vw(n){this.a=n}function Qw(n){this.a=n}function Yw(n){this.a=n}function Jw(n){this.a=n}function Zw(n){this.a=n}function nd(n){this.a=n}function td(n){this.a=n}function ed(n){this.a=n}function id(n){this.a=n}function rd(n){this.a=n}function cd(n){this.a=n}function ad(n){this.a=n}function ud(n){this.a=n}function od(n){this.a=n}function sd(n){this.a=n}function hd(n){this.a=n}function fd(n){this.a=n}function ld(n){this.a=n}function bd(n){this.a=n}function wd(n){this.a=n}function dd(n){this.a=n}function gd(n){this.a=n}function pd(n){this.a=n}function vd(n){this.a=n}function md(n){this.a=n}function yd(n){this.a=n}function kd(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Td(n){this.a=n}function Md(n){this.a=n}function Sd(n){this.a=n}function Pd(n){this.a=n}function Id(n){this.a=n}function Cd(n){this.a=n}function Od(n){this.a=n}function Ad(n){this.a=n}function $d(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function xd(n){this.a=n}function Dd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function _d(n){this.a=n}function Fd(n){this.a=n}function Bd(n){this.c=n}function Hd(n){this.b=n}function qd(n){this.a=n}function Gd(n){this.a=n}function zd(n){this.a=n}function Ud(n){this.a=n}function Xd(n){this.a=n}function Wd(n){this.a=n}function Vd(n){this.a=n}function Qd(n){this.a=n}function Yd(n){this.a=n}function Jd(n){this.a=n}function Zd(n){this.a=n}function ng(n){this.a=n}function tg(n){this.a=n}function eg(n){this.a=n}function ig(n){this.a=n}function rg(n){this.a=n}function cg(n){this.a=n}function ag(n){this.a=n}function ug(n){this.a=n}function og(n){this.a=n}function sg(n){this.a=n}function hg(n){this.a=n}function fg(n){this.a=n}function lg(n){this.a=n}function bg(n){this.a=n}function wg(n){this.a=n}function dg(n){this.a=n}function gg(n){this.a=n}function pg(n){this.a=n}function vg(n){this.a=n}function mg(n){this.a=n}function yg(n){this.a=n}function kg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Tg(n){this.a=n}function Mg(n){this.a=n}function Sg(n){this.a=n}function Pg(n){this.a=n}function Ig(n){this.a=n}function Cg(n){this.a=n}function Og(n){this.a=n}function Ag(n){this.a=n}function $g(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function xg(n){this.a=n}function Dg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function _g(n){this.a=n}function Fg(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function qg(n){this.a=n}function Gg(n){this.a=n}function zg(n){this.a=n}function Ug(n){this.a=n}function Xg(n){this.a=n}function Wg(n){this.a=n}function Vg(n){this.a=n}function Qg(n){this.a=n}function Yg(n){this.a=n}function Jg(n){this.a=n}function Zg(n){this.a=n}function np(n){this.a=n}function tp(n){this.a=n}function ep(n){this.a=n}function ip(n){this.a=n}function rp(n){this.a=n}function cp(n){this.a=n}function ap(n){this.a=n}function up(n){this.b=n}function op(n){this.f=n}function sp(n){this.a=n}function hp(n){this.a=n}function fp(n){this.a=n}function lp(n){this.a=n}function bp(n){this.a=n}function wp(n){this.a=n}function dp(n){this.a=n}function gp(n){this.a=n}function pp(n){this.a=n}function vp(n){this.a=n}function mp(n){this.a=n}function yp(n){this.b=n}function kp(n){this.c=n}function jp(n){this.e=n}function Ep(n){this.a=n}function Tp(n){this.a=n}function Mp(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Ip(n){this.d=n}function Cp(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.e=n}function $p(){this.a=0}function Lp(){DA(this)}function Np(){xA(this)}function xp(){$U(this)}function Dp(){wV(this)}function Rp(){_h(this)}function Kp(){this.c=L$t}function _p(n,t){t.Wb(n)}function Fp(n,t){n.b+=t}function Bp(n){n.b=new ok}function Hp(n){return n.e}function qp(n){return n.a}function Gp(n){return n.a}function zp(n){return n.a}function Up(n){return n.a}function Xp(n){return n.a}function Wp(){return null}function Vp(){return null}function Qp(){aE(),dXn()}function Yp(n){n.b.tf(n.e)}function Jp(n,t){n.b=t-n.b}function Zp(n,t){n.a=t-n.a}function nv(n,t){t.ad(n.a)}function tv(n,t){qIn(t,n)}function ev(n,t,e){n.Od(e,t)}function iv(n,t){n.e=t,t.b=n}function rv(n){s_(),this.a=n}function cv(n){s_(),this.a=n}function av(n){s_(),this.a=n}function uv(n){WX(),this.a=n}function ov(n){PY(),ett.be(n)}function sv(){gN.call(this)}function hv(){gN.call(this)}function fv(){sv.call(this)}function lv(){sv.call(this)}function bv(){sv.call(this)}function wv(){sv.call(this)}function dv(){sv.call(this)}function gv(){sv.call(this)}function pv(){sv.call(this)}function vv(){sv.call(this)}function mv(){sv.call(this)}function yv(){sv.call(this)}function kv(){sv.call(this)}function jv(){this.a=this}function Ev(){this.Bb|=256}function Tv(){this.b=new PO}function Mv(){Mv=O,new xp}function Sv(){fv.call(this)}function Pv(n,t){n.length=t}function Iv(n,t){WB(n.a,t)}function Cv(n,t){USn(n.c,t)}function Ov(n,t){TU(n.b,t)}function Av(n,t){Cvn(n.a,t)}function $v(n,t){Oln(n.a,t)}function Lv(n,t){ban(n.e,t)}function Nv(n){AOn(n.c,n.b)}function xv(n,t){n.kc().Nb(t)}function Dv(n){this.a=gbn(n)}function Rv(){this.a=new xp}function Kv(){this.a=new xp}function _v(){this.a=new Np}function Fv(){this.a=new Np}function Bv(){this.a=new Np}function Hv(){this.a=new kn}function qv(){this.a=new k6}function Gv(){this.a=new bt}function zv(){this.a=new WT}function Uv(){this.a=new D0}function Xv(){this.a=new cZ}function Wv(){this.a=new AR}function Vv(){this.a=new Np}function Qv(){this.a=new Np}function Yv(){this.a=new Np}function Jv(){this.a=new Np}function Zv(){this.d=new Np}function nm(){this.a=new Rv}function tm(){this.a=new xp}function em(){this.b=new xp}function im(){this.b=new Np}function rm(){this.e=new Np}function cm(){this.d=new Np}function am(){this.a=new uf}function um(){Np.call(this)}function om(){_v.call(this)}function sm(){NR.call(this)}function hm(){Qv.call(this)}function fm(){lm.call(this)}function lm(){Rp.call(this)}function bm(){Rp.call(this)}function wm(){bm.call(this)}function dm(){dY.call(this)}function gm(){dY.call(this)}function pm(){Wm.call(this)}function vm(){Wm.call(this)}function mm(){Wm.call(this)}function ym(){Vm.call(this)}function km(){YT.call(this)}function jm(){eo.call(this)}function Em(){eo.call(this)}function Tm(){ny.call(this)}function Mm(){ny.call(this)}function Sm(){xp.call(this)}function Pm(){xp.call(this)}function Im(){xp.call(this)}function Cm(){Rv.call(this)}function Om(){jin.call(this)}function Am(){Ev.call(this)}function $m(){OL.call(this)}function Lm(){OL.call(this)}function Nm(){xp.call(this)}function xm(){xp.call(this)}function Dm(){xp.call(this)}function Rm(){yo.call(this)}function Km(){yo.call(this)}function _m(){Rm.call(this)}function Fm(){Dh.call(this)}function Bm(n){dtn.call(this,n)}function Hm(n){dtn.call(this,n)}function qm(n){Qf.call(this,n)}function Gm(n){MT.call(this,n)}function zm(n){Gm.call(this,n)}function Um(n){MT.call(this,n)}function Xm(){this.a=new YT}function Wm(){this.a=new Rv}function Vm(){this.a=new xp}function Qm(){this.a=new Np}function Ym(){this.j=new Np}function Jm(){this.a=new Xa}function Zm(){this.a=new LE}function ny(){this.a=new mo}function ty(){ty=O,_nt=new xk}function ey(){ey=O,Knt=new Nk}function iy(){iy=O,Ont=new c}function ry(){ry=O,znt=new cN}function cy(n){Gm.call(this,n)}function ay(n){Gm.call(this,n)}function uy(n){d4.call(this,n)}function oy(n){d4.call(this,n)}function sy(n){VK.call(this,n)}function hy(n){ySn.call(this,n)}function fy(n){IT.call(this,n)}function ly(n){OT.call(this,n)}function by(n){OT.call(this,n)}function wy(n){OT.call(this,n)}function dy(n){fz.call(this,n)}function gy(n){dy.call(this,n)}function py(){Pl.call(this,{})}function vy(n){IL(),this.a=n}function my(n){n.b=null,n.c=0}function yy(n,t){n.e=t,Ixn(n,t)}function ky(n,t){n.a=t,aIn(n)}function jy(n,t,e){n.a[t.g]=e}function Ey(n,t,e){wjn(e,n,t)}function Ty(n,t){ZR(t.i,n.n)}function My(n,t){ssn(n).td(t)}function Sy(n,t){return n*n/t}function Py(n,t){return n.g-t.g}function Iy(n){return new Sl(n)}function Cy(n){return new GX(n)}function Oy(n){dy.call(this,n)}function Ay(n){dy.call(this,n)}function $y(n){dy.call(this,n)}function Ly(n){fz.call(this,n)}function Ny(n){_cn(),this.a=n}function xy(n){a_(),this.a=n}function Dy(n){FG(),this.f=n}function Ry(n){FG(),this.f=n}function Ky(n){dy.call(this,n)}function _y(n){dy.call(this,n)}function Fy(n){dy.call(this,n)}function By(n){dy.call(this,n)}function Hy(n){dy.call(this,n)}function qy(n){return kW(n),n}function Gy(n){return kW(n),n}function zy(n){return kW(n),n}function Uy(n){return kW(n),n}function Xy(n){return kW(n),n}function Wy(n){return n.b==n.c}function Vy(n){return!!n&&n.b}function Qy(n){return!!n&&n.k}function Yy(n){return!!n&&n.j}function Jy(n){kW(n),this.a=n}function Zy(n){return Zon(n),n}function nk(n){vU(n,n.length)}function tk(n){dy.call(this,n)}function ek(n){dy.call(this,n)}function ik(n){dy.call(this,n)}function rk(n){dy.call(this,n)}function ck(n){dy.call(this,n)}function ak(n){dy.call(this,n)}function uk(n){ZN.call(this,n,0)}function ok(){o1.call(this,12,3)}function sk(){sk=O,ttt=new j}function hk(){hk=O,Ynt=new r}function fk(){fk=O,rtt=new g}function lk(){lk=O,htt=new v}function bk(){throw Hp(new pv)}function wk(){throw Hp(new pv)}function dk(){throw Hp(new pv)}function gk(){throw Hp(new pv)}function pk(){throw Hp(new pv)}function vk(){throw Hp(new pv)}function mk(){this.a=SD(yX(FWn))}function yk(n){s_(),this.a=yX(n)}function kk(n,t){n.Td(t),t.Sd(n)}function jk(n,t){n.a.ec().Mc(t)}function Ek(n,t,e){n.c.lf(t,e)}function Tk(n){Ay.call(this,n)}function Mk(n){_y.call(this,n)}function Sk(){Ab.call(this,"")}function Pk(){Ab.call(this,"")}function Ik(){Ab.call(this,"")}function Ck(){Ab.call(this,"")}function Ok(n){Ay.call(this,n)}function Ak(n){Hb.call(this,n)}function $k(n){bN.call(this,n)}function Lk(n){Ak.call(this,n)}function Nk(){tl.call(this,null)}function xk(){tl.call(this,null)}function Dk(){Dk=O,PY()}function Rk(){Rk=O,ket=mEn()}function Kk(n){return n.a?n.b:0}function _k(n){return n.a?n.b:0}function Fk(n,t){return n.a-t.a}function Bk(n,t){return n.a-t.a}function Hk(n,t){return n.a-t.a}function qk(n,t){return m7(n,t)}function Gk(n,t){return gZ(n,t)}function zk(n,t){return t in n.a}function Uk(n,t){return n.f=t,n}function Xk(n,t){return n.b=t,n}function Wk(n,t){return n.c=t,n}function Vk(n,t){return n.g=t,n}function Qk(n,t){return n.a=t,n}function Yk(n,t){return n.f=t,n}function Jk(n,t){return n.k=t,n}function Zk(n,t){return n.a=t,n}function nj(n,t){return n.e=t,n}function tj(n,t){return n.e=t,n}function ej(n,t){return n.f=t,n}function ij(n,t){n.b=!0,n.d=t}function rj(n,t){n.b=new wA(t)}function cj(n,t,e){t.td(n.a[e])}function aj(n,t,e){t.we(n.a[e])}function uj(n,t){return n.b-t.b}function oj(n,t){return n.g-t.g}function sj(n,t){return n.s-t.s}function hj(n,t){return n?0:t-1}function fj(n,t){return n?0:t-1}function lj(n,t){return n?t-1:0}function bj(n,t){return t.Yf(n)}function wj(n,t){return n.b=t,n}function dj(n,t){return n.a=t,n}function gj(n,t){return n.c=t,n}function pj(n,t){return n.d=t,n}function vj(n,t){return n.e=t,n}function mj(n,t){return n.f=t,n}function yj(n,t){return n.a=t,n}function kj(n,t){return n.b=t,n}function jj(n,t){return n.c=t,n}function Ej(n,t){return n.c=t,n}function Tj(n,t){return n.b=t,n}function Mj(n,t){return n.d=t,n}function Sj(n,t){return n.e=t,n}function Pj(n,t){return n.f=t,n}function Ij(n,t){return n.g=t,n}function Cj(n,t){return n.a=t,n}function Oj(n,t){return n.i=t,n}function Aj(n,t){return n.j=t,n}function $j(n,t){return n.k=t,n}function Lj(n,t){return n.j=t,n}function Nj(n,t){_Mn(),IZ(t,n)}function xj(n,t,e){GG(n.a,t,e)}function Dj(n){BV.call(this,n)}function Rj(n){BV.call(this,n)}function Kj(n){n_.call(this,n)}function _j(n){qbn.call(this,n)}function Fj(n){gtn.call(this,n)}function Bj(n){pQ.call(this,n)}function Hj(n){pQ.call(this,n)}function qj(){O$.call(this,"")}function Gj(){this.a=0,this.b=0}function zj(){this.b=0,this.a=0}function Uj(n,t){n.b=0,Nen(n,t)}function Xj(n,t){n.c=t,n.b=!0}function Wj(n,t){return n.c._b(t)}function Vj(n){return n.e&&n.e()}function Qj(n){return n?n.d:null}function Yj(n,t){return gfn(n.b,t)}function Jj(n){return n?n.g:null}function Zj(n){return n?n.i:null}function nE(n){return ED(n),n.o}function tE(){tE=O,dOt=Xkn()}function eE(){eE=O,gOt=oTn()}function iE(){iE=O,n$t=Vkn()}function rE(){rE=O,dLt=Wkn()}function cE(){cE=O,gLt=iIn()}function aE(){aE=O,lAt=cin()}function uE(){throw Hp(new pv)}function oE(){throw Hp(new pv)}function sE(){throw Hp(new pv)}function hE(){throw Hp(new pv)}function fE(){throw Hp(new pv)}function lE(){throw Hp(new pv)}function bE(n){this.a=new XT(n)}function wE(n){lUn(),DXn(this,n)}function dE(n){this.a=new Wz(n)}function gE(n,t){for(;n.ye(t););}function pE(n,t){for(;n.sd(t););}function vE(n,t){return n.a+=t,n}function mE(n,t){return n.a+=t,n}function yE(n,t){return n.a+=t,n}function kE(n,t){return n.a+=t,n}function jE(n){return EW(n),n.a}function EE(n){return n.b!=n.d.c}function TE(n){return n.l|n.m<<22}function ME(n,t){return n.d[t.p]}function SE(n,t){return Sxn(n,t)}function PE(n,t,e){n.splice(t,e)}function IE(n){n.c?NDn(n):xDn(n)}function CE(n){this.a=0,this.b=n}function OE(){this.a=new INn(ijt)}function AE(){this.b=new INn(qyt)}function $E(){this.b=new INn(WEt)}function LE(){this.b=new INn(WEt)}function NE(){throw Hp(new pv)}function xE(){throw Hp(new pv)}function DE(){throw Hp(new pv)}function RE(){throw Hp(new pv)}function KE(){throw Hp(new pv)}function _E(){throw Hp(new pv)}function FE(){throw Hp(new pv)}function BE(){throw Hp(new pv)}function HE(){throw Hp(new pv)}function qE(){throw Hp(new pv)}function GE(){throw Hp(new yv)}function zE(){throw Hp(new yv)}function UE(n){this.a=new XE(n)}function XE(n){Gin(this,n,OEn())}function WE(n){return!n||pW(n)}function VE(n){return-1!=WLt[n]}function QE(){0!=ctt&&(ctt=0),utt=-1}function YE(){null==PWn&&(PWn=[])}function JE(n,t){tAn(QQ(n.a),t)}function ZE(n,t){tAn(QQ(n.a),t)}function nT(n,t){HL.call(this,n,t)}function tT(n,t){nT.call(this,n,t)}function eT(n,t){this.b=n,this.c=t}function iT(n,t){this.b=n,this.a=t}function rT(n,t){this.a=n,this.b=t}function cT(n,t){this.a=n,this.b=t}function aT(n,t){this.a=n,this.b=t}function uT(n,t){this.a=n,this.b=t}function oT(n,t){this.a=n,this.b=t}function sT(n,t){this.a=n,this.b=t}function hT(n,t){this.a=n,this.b=t}function fT(n,t){this.a=n,this.b=t}function lT(n,t){this.b=n,this.a=t}function bT(n,t){this.b=n,this.a=t}function wT(n,t){this.b=n,this.a=t}function dT(n,t){this.b=n,this.a=t}function gT(n,t){this.f=n,this.g=t}function pT(n,t){this.e=n,this.d=t}function vT(n,t){this.g=n,this.i=t}function mT(n,t){this.a=n,this.b=t}function yT(n,t){this.a=n,this.f=t}function kT(n,t){this.b=n,this.c=t}function jT(n,t){this.a=n,this.b=t}function ET(n,t){this.a=n,this.b=t}function TT(n,t){this.a=n,this.b=t}function MT(n){aN(n.dc()),this.c=n}function ST(n){this.b=BB(yX(n),83)}function PT(n){this.a=BB(yX(n),83)}function IT(n){this.a=BB(yX(n),15)}function CT(n){this.a=BB(yX(n),15)}function OT(n){this.b=BB(yX(n),47)}function AT(){this.q=new e.Date}function $T(){$T=O,Btt=new A}function LT(){LT=O,bet=new P}function NT(n){return n.f.c+n.g.c}function xT(n,t){return n.b.Hc(t)}function DT(n,t){return n.b.Ic(t)}function RT(n,t){return n.b.Qc(t)}function KT(n,t){return n.b.Hc(t)}function _T(n,t){return n.c.uc(t)}function FT(n,t){return n.a._b(t)}function BT(n,t){return Nfn(n.c,t)}function HT(n,t){return hU(n.b,t)}function qT(n,t){return n>t&&t<OVn}function GT(n,t){return n.Gc(t),n}function zT(n,t){return Frn(n,t),n}function UT(n){return XX(),n?stt:ott}function XT(n){non.call(this,n,0)}function WT(){Wz.call(this,null)}function VT(){B8.call(this,null)}function QT(n){this.c=n,Ann(this)}function YT(){P$(this),yQ(this)}function JT(n,t){EW(n),n.a.Nb(t)}function ZT(n,t){return n.Gc(t),n}function nM(n,t){return n.a.f=t,n}function tM(n,t){return n.a.d=t,n}function eM(n,t){return n.a.g=t,n}function iM(n,t){return n.a.j=t,n}function rM(n,t){return n.a.a=t,n}function cM(n,t){return n.a.d=t,n}function aM(n,t){return n.a.e=t,n}function uM(n,t){return n.a.g=t,n}function oM(n,t){return n.a.f=t,n}function sM(n){return n.b=!1,n}function hM(){hM=O,Pet=new IO}function fM(){fM=O,Iet=new CO}function lM(){lM=O,Het=new U}function bM(){bM=O,vut=new Kt}function wM(){wM=O,rct=new Cx}function dM(){dM=O,tit=new hn}function gM(){gM=O,kut=new _t}function pM(){pM=O,sit=new dn}function vM(){vM=O,Gat=new yt}function mM(){mM=O,Fut=new Gj}function yM(){yM=O,zat=new Pt}function kM(){kM=O,Vat=new DG}function jM(){jM=O,hut=new Mt}function EM(){EM=O,But=new be}function TM(){TM=O,nst=new Ye}function MM(){MM=O,wst=new Lr}function SM(){SM=O,Qst=new rc}function PM(){PM=O,Wkt=new B2}function IM(){IM=O,XEt=new LM}function CM(){CM=O,QEt=new vD}function OM(){OM=O,GTt=new XW}function AM(){AM=O,Wpt=new Wu}function $M(){Sin(),this.c=new ok}function LM(){gT.call(this,H1n,0)}function NM(n,t){Jgn(n.c.b,t.c,t)}function xM(n,t){Jgn(n.c.c,t.b,t)}function DM(n,t,e){mZ(n.d,t.f,e)}function RM(n,t,e,i){Jpn(n,i,t,e)}function KM(n,t,e,i){uNn(i,n,t,e)}function _M(n,t,e,i){oUn(i,n,t,e)}function FM(n,t){return n.a=t.g,n}function BM(n,t){return ekn(n.a,t)}function HM(n){return n.b?n.b:n.a}function qM(n){return(n.c+n.a)/2}function GM(){GM=O,lOt=new to}function zM(){zM=O,IOt=new ho}function UM(){UM=O,RAt=new Pm}function XM(){XM=O,UAt=new Im}function WM(){WM=O,zAt=new Nm}function VM(){VM=O,ZAt=new Dm}function QM(){QM=O,N$t=new z$}function YM(){YM=O,x$t=new U$}function JM(){JM=O,rLt=new Ns}function ZM(){ZM=O,aLt=new xs}function nS(){nS=O,mAt=new xp}function tS(){tS=O,V$t=new Np}function eS(){eS=O,MNt=new Kh}function iS(n){e.clearTimeout(n)}function rS(n){this.a=BB(yX(n),224)}function cS(n){return BB(n,42).cd()}function aS(n){return n.b<n.d.gc()}function uS(n,t){return IG(n.a,t)}function oS(n,t){return Vhn(n,t)>0}function sS(n,t){return Vhn(n,t)<0}function hS(n,t){return n.a.get(t)}function fS(n,t){return t.split(n)}function lS(n,t){return hU(n.e,t)}function bS(n){return kW(n),!1}function wS(n){w1.call(this,n,21)}function dS(n,t){_J.call(this,n,t)}function gS(n,t){gT.call(this,n,t)}function pS(n,t){gT.call(this,n,t)}function vS(n){VX(),VK.call(this,n)}function mS(n,t){jG(n,n.length,t)}function yS(n,t){QU(n,n.length,t)}function kS(n,t,e){t.ud(n.a.Ge(e))}function jS(n,t,e){t.we(n.a.Fe(e))}function ES(n,t,e){t.td(n.a.Kb(e))}function TS(n,t,e){n.Mb(e)&&t.td(e)}function MS(n,t,e){n.splice(t,0,e)}function SS(n,t){return SN(n.e,t)}function PS(n,t){this.d=n,this.e=t}function IS(n,t){this.b=n,this.a=t}function CS(n,t){this.b=n,this.a=t}function OS(n,t){this.b=n,this.a=t}function AS(n,t){this.a=n,this.b=t}function $S(n,t){this.a=n,this.b=t}function LS(n,t){this.a=n,this.b=t}function NS(n,t){this.a=n,this.b=t}function xS(n,t){this.a=n,this.b=t}function DS(n,t){this.b=n,this.a=t}function RS(n,t){this.b=n,this.a=t}function KS(n,t){gT.call(this,n,t)}function _S(n,t){gT.call(this,n,t)}function FS(n,t){gT.call(this,n,t)}function BS(n,t){gT.call(this,n,t)}function HS(n,t){gT.call(this,n,t)}function qS(n,t){gT.call(this,n,t)}function GS(n,t){gT.call(this,n,t)}function zS(n,t){gT.call(this,n,t)}function US(n,t){gT.call(this,n,t)}function XS(n,t){gT.call(this,n,t)}function WS(n,t){gT.call(this,n,t)}function VS(n,t){gT.call(this,n,t)}function QS(n,t){gT.call(this,n,t)}function YS(n,t){gT.call(this,n,t)}function JS(n,t){gT.call(this,n,t)}function ZS(n,t){gT.call(this,n,t)}function nP(n,t){gT.call(this,n,t)}function tP(n,t){gT.call(this,n,t)}function eP(n,t){this.a=n,this.b=t}function iP(n,t){this.a=n,this.b=t}function rP(n,t){this.a=n,this.b=t}function cP(n,t){this.a=n,this.b=t}function aP(n,t){this.a=n,this.b=t}function uP(n,t){this.a=n,this.b=t}function oP(n,t){this.a=n,this.b=t}function sP(n,t){this.a=n,this.b=t}function hP(n,t){this.a=n,this.b=t}function fP(n,t){this.b=n,this.a=t}function lP(n,t){this.b=n,this.a=t}function bP(n,t){this.b=n,this.a=t}function wP(n,t){this.b=n,this.a=t}function dP(n,t){this.c=n,this.d=t}function gP(n,t){this.e=n,this.d=t}function pP(n,t){this.a=n,this.b=t}function vP(n,t){this.b=t,this.c=n}function mP(n,t){gT.call(this,n,t)}function yP(n,t){gT.call(this,n,t)}function kP(n,t){gT.call(this,n,t)}function jP(n,t){gT.call(this,n,t)}function EP(n,t){gT.call(this,n,t)}function TP(n,t){gT.call(this,n,t)}function MP(n,t){gT.call(this,n,t)}function SP(n,t){gT.call(this,n,t)}function PP(n,t){gT.call(this,n,t)}function IP(n,t){gT.call(this,n,t)}function CP(n,t){gT.call(this,n,t)}function OP(n,t){gT.call(this,n,t)}function AP(n,t){gT.call(this,n,t)}function $P(n,t){gT.call(this,n,t)}function LP(n,t){gT.call(this,n,t)}function NP(n,t){gT.call(this,n,t)}function xP(n,t){gT.call(this,n,t)}function DP(n,t){gT.call(this,n,t)}function RP(n,t){gT.call(this,n,t)}function KP(n,t){gT.call(this,n,t)}function _P(n,t){gT.call(this,n,t)}function FP(n,t){gT.call(this,n,t)}function BP(n,t){gT.call(this,n,t)}function HP(n,t){gT.call(this,n,t)}function qP(n,t){gT.call(this,n,t)}function GP(n,t){gT.call(this,n,t)}function zP(n,t){gT.call(this,n,t)}function UP(n,t){gT.call(this,n,t)}function XP(n,t){gT.call(this,n,t)}function WP(n,t){gT.call(this,n,t)}function VP(n,t){gT.call(this,n,t)}function QP(n,t){gT.call(this,n,t)}function YP(n,t){gT.call(this,n,t)}function JP(n,t){gT.call(this,n,t)}function ZP(n,t){this.b=n,this.a=t}function nI(n,t){this.a=n,this.b=t}function tI(n,t){this.a=n,this.b=t}function eI(n,t){this.a=n,this.b=t}function iI(n,t){this.a=n,this.b=t}function rI(n,t){gT.call(this,n,t)}function cI(n,t){gT.call(this,n,t)}function aI(n,t){this.b=n,this.d=t}function uI(n,t){gT.call(this,n,t)}function oI(n,t){gT.call(this,n,t)}function sI(n,t){this.a=n,this.b=t}function hI(n,t){this.a=n,this.b=t}function fI(n,t){gT.call(this,n,t)}function lI(n,t){gT.call(this,n,t)}function bI(n,t){gT.call(this,n,t)}function wI(n,t){gT.call(this,n,t)}function dI(n,t){gT.call(this,n,t)}function gI(n,t){gT.call(this,n,t)}function pI(n,t){gT.call(this,n,t)}function vI(n,t){gT.call(this,n,t)}function mI(n,t){gT.call(this,n,t)}function yI(n,t){gT.call(this,n,t)}function kI(n,t){gT.call(this,n,t)}function jI(n,t){gT.call(this,n,t)}function EI(n,t){gT.call(this,n,t)}function TI(n,t){gT.call(this,n,t)}function MI(n,t){gT.call(this,n,t)}function SI(n,t){gT.call(this,n,t)}function PI(n,t){return SN(n.c,t)}function II(n,t){return SN(t.b,n)}function CI(n,t){return-n.b.Je(t)}function OI(n,t){return SN(n.g,t)}function AI(n,t){gT.call(this,n,t)}function $I(n,t){gT.call(this,n,t)}function LI(n,t){this.a=n,this.b=t}function NI(n,t){this.a=n,this.b=t}function xI(n,t){this.a=n,this.b=t}function DI(n,t){gT.call(this,n,t)}function RI(n,t){gT.call(this,n,t)}function KI(n,t){gT.call(this,n,t)}function _I(n,t){gT.call(this,n,t)}function FI(n,t){gT.call(this,n,t)}function BI(n,t){gT.call(this,n,t)}function HI(n,t){gT.call(this,n,t)}function qI(n,t){gT.call(this,n,t)}function GI(n,t){gT.call(this,n,t)}function zI(n,t){gT.call(this,n,t)}function UI(n,t){gT.call(this,n,t)}function XI(n,t){gT.call(this,n,t)}function WI(n,t){gT.call(this,n,t)}function VI(n,t){gT.call(this,n,t)}function QI(n,t){gT.call(this,n,t)}function YI(n,t){gT.call(this,n,t)}function JI(n,t){this.a=n,this.b=t}function ZI(n,t){this.a=n,this.b=t}function nC(n,t){this.a=n,this.b=t}function tC(n,t){this.a=n,this.b=t}function eC(n,t){this.a=n,this.b=t}function iC(n,t){this.a=n,this.b=t}function rC(n,t){this.a=n,this.b=t}function cC(n,t){gT.call(this,n,t)}function aC(n,t){this.a=n,this.b=t}function uC(n,t){this.a=n,this.b=t}function oC(n,t){this.a=n,this.b=t}function sC(n,t){this.a=n,this.b=t}function hC(n,t){this.a=n,this.b=t}function fC(n,t){this.a=n,this.b=t}function lC(n,t){this.b=n,this.a=t}function bC(n,t){this.b=n,this.a=t}function wC(n,t){this.b=n,this.a=t}function dC(n,t){this.b=n,this.a=t}function gC(n,t){this.a=n,this.b=t}function pC(n,t){this.a=n,this.b=t}function vC(n,t){JLn(n.a,BB(t,56))}function mC(n,t){v7(n.a,BB(t,11))}function yC(n,t){return hH(),t!=n}function kC(){return Rk(),new ket}function jC(){qZ(),this.b=new Rv}function EC(){dxn(),this.a=new Rv}function TC(){KZ(),KG.call(this)}function MC(n,t){gT.call(this,n,t)}function SC(n,t){this.a=n,this.b=t}function PC(n,t){this.a=n,this.b=t}function IC(n,t){this.a=n,this.b=t}function CC(n,t){this.a=n,this.b=t}function OC(n,t){this.a=n,this.b=t}function AC(n,t){this.a=n,this.b=t}function $C(n,t){this.d=n,this.b=t}function LC(n,t){this.d=n,this.e=t}function NC(n,t){this.f=n,this.c=t}function xC(n,t){this.b=n,this.c=t}function DC(n,t){this.i=n,this.g=t}function RC(n,t){this.e=n,this.a=t}function KC(n,t){this.a=n,this.b=t}function _C(n,t){n.i=null,arn(n,t)}function FC(n,t){n&&VW(hAt,n,t)}function BC(n,t){return rdn(n.a,t)}function HC(n){return adn(n.c,n.b)}function qC(n){return n?n.dd():null}function GC(n){return null==n?null:n}function zC(n){return typeof n===$Wn}function UC(n){return typeof n===LWn}function XC(n){return typeof n===NWn}function WC(n,t){return n.Hd().Xb(t)}function VC(n,t){return Qcn(n.Kc(),t)}function QC(n,t){return 0==Vhn(n,t)}function YC(n,t){return Vhn(n,t)>=0}function JC(n,t){return 0!=Vhn(n,t)}function ZC(n){return""+(kW(n),n)}function nO(n,t){return n.substr(t)}function tO(n){return zbn(n),n.d.gc()}function eO(n){return zOn(n,n.c),n}function iO(n){return JH(null==n),n}function rO(n,t){return n.a+=""+t,n}function cO(n,t){return n.a+=""+t,n}function aO(n,t){return n.a+=""+t,n}function uO(n,t){return n.a+=""+t,n}function oO(n,t){return n.a+=""+t,n}function sO(n,t){return n.a+=""+t,n}function hO(n,t){r5(n,t,n.a,n.a.a)}function fO(n,t){r5(n,t,n.c.b,n.c)}function lO(n,t,e){Kjn(t,RPn(n,e))}function bO(n,t,e){Kjn(t,RPn(n,e))}function wO(n,t){Tnn(new AL(n),t)}function dO(n,t){n.q.setTime(j2(t))}function gO(n,t){zz.call(this,n,t)}function pO(n,t){zz.call(this,n,t)}function vO(n,t){zz.call(this,n,t)}function mO(n){$U(this),Tcn(this,n)}function yO(n){return l1(n,0),null}function kO(n){return n.a=0,n.b=0,n}function jO(n,t){return n.a=t.g+1,n}function EO(n,t){return 2==n.j[t.p]}function TO(n){return sX(BB(n,79))}function MO(){MO=O,Art=lhn(tpn())}function SO(){SO=O,Zot=lhn(ENn())}function PO(){this.b=new XT(etn(12))}function IO(){this.b=0,this.a=!1}function CO(){this.b=0,this.a=!1}function OO(n){this.a=n,Bh.call(this)}function AO(n){this.a=n,Bh.call(this)}function $O(n,t){iR.call(this,n,t)}function LO(n,t){tK.call(this,n,t)}function NO(n,t){DC.call(this,n,t)}function xO(n,t){Aan.call(this,n,t)}function DO(n,t){QN.call(this,n,t)}function RO(n,t){nS(),VW(mAt,n,t)}function KO(n,t){return fx(n.a,0,t)}function _O(n,t){return n.a.a.a.cc(t)}function FO(n,t){return GC(n)===GC(t)}function BO(n,t){return Pln(n.a,t.a)}function HO(n,t){return E$(n.a,t.a)}function qO(n,t){return FU(n.a,t.a)}function GO(n,t){return n.indexOf(t)}function zO(n,t){return n==t?0:n?1:-1}function UO(n){return n<10?"0"+n:""+n}function XO(n){return yX(n),new OO(n)}function WO(n){return M$(n.l,n.m,n.h)}function VO(n){return IJ((kW(n),n))}function QO(n){return IJ((kW(n),n))}function YO(n,t){return E$(n.g,t.g)}function JO(n){return typeof n===LWn}function ZO(n){return n==Zat||n==eut}function nA(n){return n==Zat||n==nut}function tA(n){return E7(n.b.b,n,0)}function eA(n){this.a=kC(),this.b=n}function iA(n){this.a=kC(),this.b=n}function rA(n,t){return WB(n.a,t),t}function cA(n,t){return WB(n.c,t),n}function aA(n,t){return Jcn(n.a,t),n}function uA(n,t){return G_(),t.a+=n}function oA(n,t){return G_(),t.a+=n}function sA(n,t){return G_(),t.c+=n}function hA(n,t){z9(n,0,n.length,t)}function fA(){ew.call(this,new v4)}function lA(){uG.call(this,0,0,0,0)}function bA(){UV.call(this,0,0,0,0)}function wA(n){this.a=n.a,this.b=n.b}function dA(n){return n==_Pt||n==FPt}function gA(n){return n==HPt||n==KPt}function pA(n){return n==fvt||n==hvt}function vA(n){return n!=QIt&&n!=YIt}function mA(n){return n.Lg()&&n.Mg()}function yA(n){return mV(BB(n,118))}function kA(n){return Jcn(new B2,n)}function jA(n,t){return new Aan(t,n)}function EA(n,t){return new Aan(t,n)}function TA(n,t,e){jen(n,t),Een(n,e)}function MA(n,t,e){Sen(n,t),Men(n,e)}function SA(n,t,e){Pen(n,t),Ien(n,e)}function PA(n,t,e){Ten(n,t),Oen(n,e)}function IA(n,t,e){Cen(n,t),Aen(n,e)}function CA(n,t){Dsn(n,t),xen(n,n.D)}function OA(n){NC.call(this,n,!0)}function AA(n,t,e){ND.call(this,n,t,e)}function $A(n){ODn(),san.call(this,n)}function LA(){gS.call(this,"Head",1)}function NA(){gS.call(this,"Tail",3)}function xA(n){n.c=x8(Ant,HWn,1,0,5,1)}function DA(n){n.a=x8(Ant,HWn,1,8,5,1)}function RA(n){Otn(n.xf(),new Sw(n))}function KA(n){return null!=n?nsn(n):0}function _A(n,t){return Itn(t,WJ(n))}function FA(n,t){return Itn(t,WJ(n))}function BA(n,t){return n[n.length]=t}function HA(n,t){return n[n.length]=t}function qA(n){return FB(n.b.Kc(),n.a)}function GA(n,t){return Uin(PX(n.d),t)}function zA(n,t){return Uin(PX(n.g),t)}function UA(n,t){return Uin(PX(n.j),t)}function XA(n,t){iR.call(this,n.b,t)}function WA(n){uG.call(this,n,n,n,n)}function VA(n){return n.b&&VBn(n),n.a}function QA(n){return n.b&&VBn(n),n.c}function YA(n,t){Qet||(n.b=t)}function JA(n,t,e){return $X(n,t,e),e}function ZA(n,t,e){$X(n.c[t.g],t.g,e)}function n$(n,t,e){BB(n.c,69).Xh(t,e)}function t$(n,t,e){SA(e,e.i+n,e.j+t)}function e$(n,t){f9(a4(n.a),e1(t))}function i$(n,t){f9(H7(n.a),i1(t))}function r$(n){wWn(),Ap.call(this,n)}function c$(n){return null==n?0:nsn(n)}function a$(){a$=O,syt=new Hbn(oIt)}function u$(){u$=O,new o$,new Np}function o$(){new xp,new xp,new xp}function s$(){s$=O,Mv(),itt=new xp}function h$(){h$=O,e.Math.log(2)}function f$(){f$=O,zM(),R$t=IOt}function l$(){throw Hp(new tk(Tnt))}function b$(){throw Hp(new tk(Tnt))}function w$(){throw Hp(new tk(Mnt))}function d$(){throw Hp(new tk(Mnt))}function g$(n){this.a=n,QB.call(this,n)}function p$(n){this.a=n,ST.call(this,n)}function v$(n){this.a=n,ST.call(this,n)}function m$(n,t){yG(n.c,n.c.length,t)}function y$(n){return n.a<n.c.c.length}function k$(n){return n.a<n.c.a.length}function j$(n,t){return n.a?n.b:t.De()}function E$(n,t){return n<t?-1:n>t?1:0}function T$(n,t){return Vhn(n,t)>0?n:t}function M$(n,t,e){return{l:n,m:t,h:e}}function S$(n,t){null!=n.a&&mC(t,n.a)}function P$(n){n.a=new $,n.c=new $}function I$(n){this.b=n,this.a=new Np}function C$(n){this.b=new et,this.a=n}function O$(n){LR.call(this),this.a=n}function A$(){gS.call(this,"Range",2)}function $$(){tjn(),this.a=new INn(Uat)}function L$(n,t){yX(t),EV(n).Jc(new b)}function N$(n,t){return BZ(),t.n.b+=n}function x$(n,t,e){return VW(n.g,e,t)}function D$(n,t,e){return VW(n.k,e,t)}function R$(n,t){return VW(n.a,t.a,t)}function K$(n,t,e){return Cdn(t,e,n.c)}function _$(n){return new xI(n.c,n.d)}function F$(n){return new xI(n.c,n.d)}function B$(n){return new xI(n.a,n.b)}function H$(n,t){return tzn(n.a,t,null)}function q$(n){SZ(n,null),MZ(n,null)}function G$(n){WZ(n,null),VZ(n,null)}function z$(){QN.call(this,null,null)}function U$(){YN.call(this,null,null)}function X$(n){this.a=n,xp.call(this)}function W$(n){this.b=(SQ(),new Xb(n))}function V$(n){n.j=x8(Ftt,sVn,310,0,0,1)}function Q$(n,t,e){n.c.Vc(t,BB(e,133))}function Y$(n,t,e){n.c.ji(t,BB(e,133))}function J$(n,t){sqn(n),n.Gc(BB(t,15))}function Z$(n,t){return Bqn(n.c,n.b,t)}function nL(n,t){return new pN(n.Kc(),t)}function tL(n,t){return-1!=Fun(n.Kc(),t)}function eL(n,t){return null!=n.a.Bc(t)}function iL(n){return n.Ob()?n.Pb():null}function rL(n){return Bdn(n,0,n.length)}function cL(n,t){return null!=n&&Qpn(n,t)}function aL(n,t){n.q.setHours(t),lBn(n,t)}function uL(n,t){n.c&&(RH(t),kJ(t))}function oL(n,t,e){BB(n.Kb(e),164).Nb(t)}function sL(n,t,e){return HGn(n,t,e),e}function hL(n,t,e){n.a=1502^t,n.b=e^aYn}function fL(n,t,e){return n.a[t.g][e.g]}function lL(n,t){return n.a[t.c.p][t.p]}function bL(n,t){return n.e[t.c.p][t.p]}function wL(n,t){return n.c[t.c.p][t.p]}function dL(n,t){return n.j[t.p]=pLn(t)}function gL(n,t){return f6(n.f,t.tg())}function pL(n,t){return f6(n.b,t.tg())}function vL(n,t){return n.a<XK(t)?-1:1}function mL(n,t,e){return e?0!=t:t!=n-1}function yL(n,t,e){return n.a=t,n.b=e,n}function kL(n,t){return n.a*=t,n.b*=t,n}function jL(n,t,e){return $X(n.g,t,e),e}function EL(n,t,e,i){$X(n.a[t.g],e.g,i)}function TL(n,t){_x(t,n.a.a.a,n.a.a.b)}function ML(n){n.a=BB(yan(n.b.a,4),126)}function SL(n){n.a=BB(yan(n.b.a,4),126)}function PL(n){OY(n,i8n),HLn(n,CUn(n))}function IL(){IL=O,Set=new vy(null)}function CL(){(CL=O)(),$et=new z}function OL(){this.Bb|=256,this.Bb|=512}function AL(n){this.i=n,this.f=this.i.j}function $L(n,t,e){yH.call(this,n,t,e)}function LL(n,t,e){$L.call(this,n,t,e)}function NL(n,t,e){$L.call(this,n,t,e)}function xL(n,t,e){LL.call(this,n,t,e)}function DL(n,t,e){yH.call(this,n,t,e)}function RL(n,t,e){yH.call(this,n,t,e)}function KL(n,t,e){MH.call(this,n,t,e)}function _L(n,t,e){MH.call(this,n,t,e)}function FL(n,t,e){KL.call(this,n,t,e)}function BL(n,t,e){DL.call(this,n,t,e)}function HL(n,t){this.a=n,ST.call(this,t)}function qL(n,t){this.a=n,uk.call(this,t)}function GL(n,t){this.a=n,uk.call(this,t)}function zL(n,t){this.a=n,uk.call(this,t)}function UL(n){this.a=n,hl.call(this,n.d)}function XL(n){this.c=n,this.a=this.c.a}function WL(n,t){this.a=t,uk.call(this,n)}function VL(n,t){this.a=t,d4.call(this,n)}function QL(n,t){this.a=n,d4.call(this,t)}function YL(n,t){return wz(bz(n.c)).Xb(t)}function JL(n,t){return ebn(n,new Ik,t).a}function ZL(n,t){return yX(t),new nN(n,t)}function nN(n,t){this.a=t,OT.call(this,n)}function tN(n){this.b=n,this.a=this.b.a.e}function eN(n){n.b.Qb(),--n.d.f.d,$G(n.d)}function iN(n){tl.call(this,BB(yX(n),35))}function rN(n){tl.call(this,BB(yX(n),35))}function cN(){gT.call(this,"INSTANCE",0)}function aN(n){if(!n)throw Hp(new wv)}function uN(n){if(!n)throw Hp(new dv)}function oN(n){if(!n)throw Hp(new yv)}function sN(){sN=O,JM(),cLt=new Ff}function hN(){hN=O,ptt=!1,vtt=!0}function fN(n){Ab.call(this,(kW(n),n))}function lN(n){Ab.call(this,(kW(n),n))}function bN(n){Hb.call(this,n),this.a=n}function wN(n){qb.call(this,n),this.a=n}function dN(n){Ak.call(this,n),this.a=n}function gN(){V$(this),jQ(this),this._d()}function pN(n,t){this.a=t,OT.call(this,n)}function vN(n,t){return new KPn(n.a,n.b,t)}function mN(n,t){return n.lastIndexOf(t)}function yN(n,t,e){return n.indexOf(t,e)}function kN(n){return null==n?zWn:Bbn(n)}function jN(n){return null==n?null:n.name}function EN(n){return null!=n.a?n.a:null}function TN(n){return EE(n.a)?u1(n):null}function MN(n,t){return null!=$J(n.a,t)}function SN(n,t){return!!t&&n.b[t.g]==t}function PN(n){return n.$H||(n.$H=++cit)}function IN(n){return n.l+n.m*CQn+n.h*OQn}function CN(n,t){return WB(t.a,n.a),n.a}function ON(n,t){return WB(t.b,n.a),n.a}function AN(n,t){return WB(t.a,n.a),n.a}function $N(n){return Px(null!=n.a),n.a}function LN(n){ew.call(this,new q8(n))}function NN(n,t){Sgn.call(this,n,t,null)}function xN(n){this.a=n,Bb.call(this,n)}function DN(){DN=O,Lrt=new iR(dJn,0)}function RN(n,t){return++n.b,WB(n.a,t)}function KN(n,t){return++n.b,y7(n.a,t)}function _N(n,t){return Pln(n.n.a,t.n.a)}function FN(n,t){return Pln(n.c.d,t.c.d)}function BN(n,t){return Pln(n.c.c,t.c.c)}function HN(n,t){return BB(h6(n.b,t),15)}function qN(n,t){return n.n.b=(kW(t),t)}function GN(n,t){return n.n.b=(kW(t),t)}function zN(n){return y$(n.a)||y$(n.b)}function UN(n,t,e){return p3(n,t,e,n.b)}function XN(n,t,e){return p3(n,t,e,n.c)}function WN(n,t,e){BB(D7(n,t),21).Fc(e)}function VN(n,t,e){Oln(n.a,e),Cvn(n.a,t)}function QN(n,t){QM(),this.a=n,this.b=t}function YN(n,t){YM(),this.b=n,this.c=t}function JN(n,t){FG(),this.f=t,this.d=n}function ZN(n,t){w6(t,n),this.d=n,this.c=t}function nx(n){var t;t=n.a,n.a=n.b,n.b=t}function tx(n){return G_(),!!n&&!n.dc()}function ex(n){return new h4(3,n)}function ix(n,t){return new bK(n,n.gc(),t)}function rx(n){return ry(),Inn((DZ(),Xnt),n)}function cx(n){this.d=n,AL.call(this,n)}function ax(n){this.c=n,AL.call(this,n)}function ux(n){this.c=n,cx.call(this,n)}function ox(){MM(),this.b=new yd(this)}function sx(n){return lin(n,AVn),new J6(n)}function hx(n){return PY(),parseInt(n)||-1}function fx(n,t,e){return n.substr(t,e-t)}function lx(n,t,e){return yN(n,YTn(t),e)}function bx(n){return VU(n.c,n.c.length)}function wx(n){return null!=n.f?n.f:""+n.g}function dx(n){return null!=n.f?n.f:""+n.g}function gx(n){return Px(0!=n.b),n.a.a.c}function px(n){return Px(0!=n.b),n.c.b.c}function vx(n){cL(n,150)&&BB(n,150).Gh()}function mx(n){return n.b=BB(mQ(n.a),42)}function yx(n){hM(),this.b=n,this.a=!0}function kx(n){fM(),this.b=n,this.a=!0}function jx(n){n.d=new Ix(n),n.e=new xp}function Ex(n){if(!n)throw Hp(new vv)}function Tx(n){if(!n)throw Hp(new wv)}function Mx(n){if(!n)throw Hp(new dv)}function Sx(n){if(!n)throw Hp(new lv)}function Px(n){if(!n)throw Hp(new yv)}function Ix(n){nH.call(this,n,null,null)}function Cx(){gT.call(this,"POLYOMINO",0)}function Ox(n,t,e,i){sz.call(this,n,t,e,i)}function Ax(n,t){return _Mn(),JCn(n,t.e,t)}function $x(n,t,e){return AM(),e.qg(n,t)}function Lx(n,t){return!!n.q&&hU(n.q,t)}function Nx(n,t){return n>0?t*t/n:t*t*100}function xx(n,t){return n>0?t/(n*n):100*t}function Dx(n,t,e){return WB(t,own(n,e))}function Rx(n,t,e){x9(),n.Xe(t)&&e.td(n)}function Kx(n,t,e){n.Zc(t).Rb(e)}function _x(n,t,e){return n.a+=t,n.b+=e,n}function Fx(n,t,e){return n.a*=t,n.b*=e,n}function Bx(n,t,e){return n.a-=t,n.b-=e,n}function Hx(n,t){return n.a=t.a,n.b=t.b,n}function qx(n){return n.a=-n.a,n.b=-n.b,n}function Gx(n){this.c=n,this.a=1,this.b=1}function zx(n){this.c=n,Pen(n,0),Ien(n,0)}function Ux(n){YT.call(this),nin(this,n)}function Xx(n){RXn(),Bp(this),this.mf(n)}function Wx(n,t){QM(),QN.call(this,n,t)}function Vx(n,t){YM(),YN.call(this,n,t)}function Qx(n,t){YM(),YN.call(this,n,t)}function Yx(n,t){YM(),Vx.call(this,n,t)}function Jx(n,t,e){y9.call(this,n,t,e,2)}function Zx(n,t){f$(),cG.call(this,n,t)}function nD(n,t){f$(),Zx.call(this,n,t)}function tD(n,t){f$(),Zx.call(this,n,t)}function eD(n,t){f$(),tD.call(this,n,t)}function iD(n,t){f$(),cG.call(this,n,t)}function rD(n,t){f$(),iD.call(this,n,t)}function cD(n,t){f$(),cG.call(this,n,t)}function aD(n,t){return n.c.Fc(BB(t,133))}function uD(n,t,e){return NHn(F7(n,t),e)}function oD(n,t,e){return t.Qk(n.e,n.c,e)}function sD(n,t,e){return t.Rk(n.e,n.c,e)}function hD(n,t){return tfn(n.e,BB(t,49))}function fD(n,t,e){sln(H7(n.a),t,i1(e))}function lD(n,t,e){sln(a4(n.a),t,e1(e))}function bD(n,t){t.$modCount=n.$modCount}function wD(){wD=O,Vkt=new up("root")}function dD(){dD=O,pAt=new Tm,new Mm}function gD(){this.a=new pJ,this.b=new pJ}function pD(){jin.call(this),this.Bb|=BQn}function vD(){gT.call(this,"GROW_TREE",0)}function mD(n){return null==n?null:wUn(n)}function yD(n){return null==n?null:LSn(n)}function kD(n){return null==n?null:Bbn(n)}function jD(n){return null==n?null:Bbn(n)}function ED(n){null==n.o&&g$n(n)}function TD(n){return JH(null==n||zC(n)),n}function MD(n){return JH(null==n||UC(n)),n}function SD(n){return JH(null==n||XC(n)),n}function PD(n){this.q=new e.Date(j2(n))}function ID(n,t){this.c=n,pT.call(this,n,t)}function CD(n,t){this.a=n,ID.call(this,n,t)}function OD(n,t){this.d=n,Mb(this),this.b=t}function AD(n,t){B8.call(this,n),this.a=t}function $D(n,t){B8.call(this,n),this.a=t}function LD(n){qwn.call(this,0,0),this.f=n}function ND(n,t,e){W6.call(this,n,t,e,null)}function xD(n,t,e){W6.call(this,n,t,e,null)}function DD(n,t,e){return n.ue(t,e)<=0?e:t}function RD(n,t,e){return n.ue(t,e)<=0?t:e}function KD(n,t){return BB(lnn(n.b,t),149)}function _D(n,t){return BB(lnn(n.c,t),229)}function FD(n){return BB(xq(n.a,n.b),287)}function BD(n){return new xI(n.c,n.d+n.a)}function HD(n){return BZ(),pA(BB(n,197))}function qD(){qD=O,$rt=nbn((mdn(),_Ct))}function GD(n,t){t.a?Fxn(n,t):MN(n.a,t.b)}function zD(n,t){Qet||WB(n.a,t)}function UD(n,t){return mM(),wan(t.d.i,n)}function XD(n,t){return Crn(),new cKn(t,n)}function WD(n,t){return OY(t,uJn),n.f=t,n}function VD(n,t,e){return e=T_n(n,t,3,e)}function QD(n,t,e){return e=T_n(n,t,6,e)}function YD(n,t,e){return e=T_n(n,t,9,e)}function JD(n,t,e){++n.j,n.Ki(),L8(n,t,e)}function ZD(n,t,e){++n.j,n.Hi(t,n.oi(t,e))}function nR(n,t,e){n.Zc(t).Rb(e)}function tR(n,t,e){return ZBn(n.c,n.b,t,e)}function eR(n,t){return(t&DWn)%n.d.length}function iR(n,t){up.call(this,n),this.a=t}function rR(n,t){kp.call(this,n),this.a=t}function cR(n,t){kp.call(this,n),this.a=t}function aR(n,t){this.c=n,gtn.call(this,t)}function uR(n,t){this.a=n,yp.call(this,t)}function oR(n,t){this.a=n,yp.call(this,t)}function sR(n){this.a=(lin(n,AVn),new J6(n))}function hR(n){this.a=(lin(n,AVn),new J6(n))}function fR(n){return!n.a&&(n.a=new w),n.a}function lR(n){return n>8?0:n+1}function bR(n,t){return hN(),n==t?0:n?1:-1}function wR(n,t,e){return mG(n,BB(t,22),e)}function dR(n,t,e){return n.apply(t,e)}function gR(n,t,e){return n.a+=Bdn(t,0,e),n}function pR(n,t){var e;return e=n.e,n.e=t,e}function vR(n,t){n[iYn].call(n,t)}function mR(n,t){n[iYn].call(n,t)}function yR(n,t){n.a.Vc(n.b,t),++n.b,n.c=-1}function kR(n){$U(n.e),n.d.b=n.d,n.d.a=n.d}function jR(n){n.b?jR(n.b):n.f.c.zc(n.e,n.d)}function ER(n,t,e){dM(),Cl(n,t.Ce(n.a,e))}function TR(n,t){return Qj(Mdn(n.a,t,!0))}function MR(n,t){return Qj(Sdn(n.a,t,!0))}function SR(n,t){return qk(new Array(t),n)}function PR(n){return String.fromCharCode(n)}function IR(n){return null==n?null:n.message}function CR(){this.a=new Np,this.b=new Np}function OR(){this.a=new bt,this.b=new Tv}function AR(){this.b=new Gj,this.c=new Np}function $R(){this.d=new Gj,this.e=new Gj}function LR(){this.n=new Gj,this.o=new Gj}function NR(){this.n=new bm,this.i=new bA}function xR(){this.a=new nf,this.b=new uc}function DR(){this.a=new Np,this.d=new Np}function RR(){this.b=new Rv,this.a=new Rv}function KR(){this.b=new xp,this.a=new xp}function _R(){this.b=new AE,this.a=new da}function FR(){NR.call(this),this.a=new Gj}function BR(n){Oan.call(this,n,(Z9(),Net))}function HR(n,t,e,i){uG.call(this,n,t,e,i)}function qR(n,t,e){null!=e&&Lin(t,Amn(n,e))}function GR(n,t,e){null!=e&&Nin(t,Amn(n,e))}function zR(n,t,e){return e=T_n(n,t,11,e)}function UR(n,t){return n.a+=t.a,n.b+=t.b,n}function XR(n,t){return n.a-=t.a,n.b-=t.b,n}function WR(n,t){return n.n.a=(kW(t),t+10)}function VR(n,t){return n.n.a=(kW(t),t+10)}function QR(n,t){return t==n||Sjn(ILn(t),n)}function YR(n,t){return null==VW(n.a,t,"")}function JR(n,t){return mM(),!wan(t.d.i,n)}function ZR(n,t){dA(n.f)?c$n(n,t):CTn(n,t)}function nK(n,t){return t.Hh(n.a)}function tK(n,t){Ay.call(this,e9n+n+o8n+t)}function eK(n,t,e,i){eU.call(this,n,t,e,i)}function iK(n,t,e,i){eU.call(this,n,t,e,i)}function rK(n,t,e,i){iK.call(this,n,t,e,i)}function cK(n,t,e,i){iU.call(this,n,t,e,i)}function aK(n,t,e,i){iU.call(this,n,t,e,i)}function uK(n,t,e,i){iU.call(this,n,t,e,i)}function oK(n,t,e,i){aK.call(this,n,t,e,i)}function sK(n,t,e,i){aK.call(this,n,t,e,i)}function hK(n,t,e,i){uK.call(this,n,t,e,i)}function fK(n,t,e,i){sK.call(this,n,t,e,i)}function lK(n,t,e,i){Zz.call(this,n,t,e,i)}function bK(n,t,e){this.a=n,ZN.call(this,t,e)}function wK(n,t,e){this.c=t,this.b=e,this.a=n}function dK(n,t,e){return n.d=BB(t.Kb(e),164)}function gK(n,t){return n.Aj().Nh().Kh(n,t)}function pK(n,t){return n.Aj().Nh().Ih(n,t)}function vK(n,t){return kW(n),GC(n)===GC(t)}function mK(n,t){return kW(n),GC(n)===GC(t)}function yK(n,t){return Qj(Mdn(n.a,t,!1))}function kK(n,t){return Qj(Sdn(n.a,t,!1))}function jK(n,t){return n.b.sd(new $S(n,t))}function EK(n,t){return n.b.sd(new LS(n,t))}function TK(n,t){return n.b.sd(new NS(n,t))}function MK(n,t,e){return n.lastIndexOf(t,e)}function SK(n,t,e){return Pln(n[t.b],n[e.b])}function PK(n,t){return hon(t,(HXn(),Rdt),n)}function IK(n,t){return E$(t.a.d.p,n.a.d.p)}function CK(n,t){return E$(n.a.d.p,t.a.d.p)}function OK(n,t){return Pln(n.c-n.s,t.c-t.s)}function AK(n){return n.c?E7(n.c.a,n,0):-1}function $K(n){return n<100?null:new Fj(n)}function LK(n){return n==UIt||n==WIt||n==XIt}function NK(n,t){return cL(t,15)&&QDn(n.c,t)}function xK(n,t){Qet||t&&(n.d=t)}function DK(n,t){return!!lsn(n,t)}function RK(n,t){this.c=n,GU.call(this,n,t)}function KK(n){this.c=n,vO.call(this,bVn,0)}function _K(n,t){JB.call(this,n,n.length,t)}function FK(n,t,e){return BB(n.c,69).lk(t,e)}function BK(n,t,e){return BB(n.c,69).mk(t,e)}function HK(n,t,e){return oD(n,BB(t,332),e)}function qK(n,t,e){return sD(n,BB(t,332),e)}function GK(n,t,e){return CEn(n,BB(t,332),e)}function zK(n,t,e){return QTn(n,BB(t,332),e)}function UK(n,t){return null==t?null:lfn(n.b,t)}function XK(n){return UC(n)?(kW(n),n):n.ke()}function WK(n){return!isNaN(n)&&!isFinite(n)}function VK(n){s_(),this.a=(SQ(),new Ak(n))}function QK(n){hH(),this.d=n,this.a=new Lp}function YK(n,t,e){this.a=n,this.b=t,this.c=e}function JK(n,t,e){this.a=n,this.b=t,this.c=e}function ZK(n,t,e){this.d=n,this.b=e,this.a=t}function n_(n){P$(this),yQ(this),Frn(this,n)}function t_(n){xA(this),tH(this.c,0,n.Pc())}function e_(n){fW(n.a),z8(n.c,n.b),n.b=null}function i_(n){this.a=n,$T(),fan(Date.now())}function r_(){r_=O,iit=new r,rit=new r}function c_(){c_=O,Tet=new L,Met=new N}function a_(){a_=O,wAt=x8(Ant,HWn,1,0,5,1)}function u_(){u_=O,M$t=x8(Ant,HWn,1,0,5,1)}function o_(){o_=O,S$t=x8(Ant,HWn,1,0,5,1)}function s_(){s_=O,new rv((SQ(),SQ(),set))}function h_(n){return Z9(),Inn((n7(),_et),n)}function f_(n){return qsn(),Inn((e8(),Zet),n)}function l_(n){return hpn(),Inn((C4(),pit),n)}function b_(n){return Rnn(),Inn((O4(),kit),n)}function w_(n){return tRn(),Inn((xan(),Fit),n)}function d_(n){return Dtn(),Inn((Z6(),Wit),n)}function g_(n){return J9(),Inn((n8(),trt),n)}function p_(n){return G7(),Inn((t8(),urt),n)}function v_(n){return dWn(),Inn((MO(),Art),n)}function m_(n){return Dan(),Inn((e7(),_rt),n)}function y_(n){return Hpn(),Inn((i7(),zrt),n)}function k_(n){return qpn(),Inn((r7(),ict),n)}function j_(n){return wM(),Inn((Q2(),act),n)}function E_(n){return Knn(),Inn((A4(),_ct),n)}function T_(n){return q7(),Inn((i8(),Lat),n)}function M_(n){return yMn(),Inn((Xnn(),qat),n)}function S_(n){return Aun(),Inn((t7(),rut),n)}function P_(n){return Bfn(),Inn((r8(),gut),n)}function I_(n,t){if(!n)throw Hp(new _y(t))}function C_(n){return uSn(),Inn((hen(),Aut),n)}function O_(n){uG.call(this,n.d,n.c,n.a,n.b)}function A_(n){uG.call(this,n.d,n.c,n.a,n.b)}function $_(n,t,e){this.b=n,this.c=t,this.a=e}function L_(n,t,e){this.b=n,this.a=t,this.c=e}function N_(n,t,e){this.a=n,this.b=t,this.c=e}function x_(n,t,e){this.a=n,this.b=t,this.c=e}function D_(n,t,e){this.a=n,this.b=t,this.c=e}function R_(n,t,e){this.a=n,this.b=t,this.c=e}function K_(n,t,e){this.b=n,this.a=t,this.c=e}function __(n,t,e){this.e=t,this.b=n,this.d=e}function F_(n,t,e){return dM(),n.a.Od(t,e),t}function B_(n){var t;return(t=new jn).e=n,t}function H_(n){var t;return(t=new Zv).b=n,t}function q_(){q_=O,Uut=new Ne,Xut=new xe}function G_(){G_=O,dst=new vr,gst=new mr}function z_(n){return Cun(),Inn((a7(),ost),n)}function U_(n){return Oun(),Inn((o7(),Est),n)}function X_(n){return kDn(),Inn((Gcn(),Vst),n)}function W_(n){return $Pn(),Inn((ben(),rht),n)}function V_(n){return V8(),Inn((R4(),oht),n)}function Q_(n){return Oin(),Inn((c8(),bht),n)}function Y_(n){return LEn(),Inn((Hnn(),Ost),n)}function J_(n){return Irn(),Inn((o8(),_st),n)}function Z_(n){return uin(),Inn((a8(),vht),n)}function nF(n){return Vvn(),Inn((Fnn(),Mht),n)}function tF(n){return _nn(),Inn((L4(),Cht),n)}function eF(n){return Jun(),Inn((u8(),Nht),n)}function iF(n){return gSn(),Inn((pen(),Hht),n)}function rF(n){return g7(),Inn((N4(),Uht),n)}function cF(n){return Bjn(),Inn((den(),nft),n)}function aF(n){return JMn(),Inn((wen(),oft),n)}function uF(n){return bDn(),Inn((Vun(),yft),n)}function oF(n){return Kan(),Inn((h8(),Mft),n)}function sF(n){return z7(),Inn((s8(),Oft),n)}function hF(n){return z2(),Inn((K4(),Nft),n)}function fF(n){return Tbn(),Inn((qnn(),zlt),n)}function lF(n){return TTn(),Inn((gen(),rvt),n)}function bF(n){return Mhn(),Inn((f8(),svt),n)}function wF(n){return bvn(),Inn((s7(),dvt),n)}function dF(n){return ain(),Inn((w8(),Uvt),n)}function gF(n){return sNn(),Inn((qcn(),$vt),n)}function pF(n){return mon(),Inn((b8(),Rvt),n)}function vF(n){return U7(),Inn((D4(),Bvt),n)}function mF(n){return Hcn(),Inn((l8(),Yvt),n)}function yF(n){return Nvn(),Inn((Bnn(),jvt),n)}function kF(n){return A6(),Inn((x4(),tmt),n)}function jF(n){return Usn(),Inn((g8(),amt),n)}function EF(n){return dcn(),Inn((p8(),fmt),n)}function TF(n){return $un(),Inn((d8(),gmt),n)}function MF(n){return oin(),Inn((v8(),Nmt),n)}function SF(n){return Q4(),Inn((F4(),Gmt),n)}function PF(n){return gJ(),Inn((B4(),iyt),n)}function IF(n){return oZ(),Inn((H4(),uyt),n)}function CF(n){return O6(),Inn((_4(),Pyt),n)}function OF(n){return dJ(),Inn((q4(),Dyt),n)}function AF(n){return zyn(),Inn((c7(),Hyt),n)}function $F(n){return DPn(),Inn((ven(),Jyt),n)}function LF(n){return sZ(),Inn((U4(),Fkt),n)}function NF(n){return Prn(),Inn((z4(),Zkt),n)}function xF(n){return B0(),Inn((G4(),Gkt),n)}function DF(n){return Ibn(),Inn((m8(),rjt),n)}function RF(n){return D9(),Inn((X4(),ojt),n)}function KF(n){return Hsn(),Inn((y8(),bjt),n)}function _F(n){return Omn(),Inn((u7(),zjt),n)}function FF(n){return Bcn(),Inn((j8(),Qjt),n)}function BF(n){return Sbn(),Inn((k8(),eEt),n)}function HF(n){return YLn(),Inn((Unn(),BEt),n)}function qF(n){return Pbn(),Inn((E8(),UEt),n)}function GF(n){return IM(),Inn((W2(),VEt),n)}function zF(n){return CM(),Inn((X2(),JEt),n)}function UF(n){return $6(),Inn((V4(),eTt),n)}function XF(n){return $Sn(),Inn((Gnn(),sTt),n)}function WF(n){return OM(),Inn((V2(),UTt),n)}function VF(n){return Lun(),Inn((W4(),QTt),n)}function QF(n){return rpn(),Inn((znn(),bMt),n)}function YF(n){return PPn(),Inn((zcn(),EMt),n)}function JF(n){return wvn(),Inn((len(),xMt),n)}function ZF(n){return wEn(),Inn((fen(),tSt),n)}function nB(n){return lWn(),Inn((SO(),Zot),n)}function tB(n){return Srn(),Inn(($4(),zut),n)}function eB(n){return Ffn(),Inn((Wnn(),GPt),n)}function iB(n){return Rtn(),Inn((M8(),VPt),n)}function rB(n){return Mbn(),Inn((l7(),tIt),n)}function cB(n){return nMn(),Inn((yen(),sIt),n)}function aB(n){return ufn(),Inn((T8(),kIt),n)}function uB(n){return Xyn(),Inn((f7(),PIt),n)}function oB(n){return n$n(),Inn((Nan(),KIt),n)}function sB(n){return cpn(),Inn((Vnn(),zIt),n)}function hB(n){return QEn(),Inn((Htn(),ZIt),n)}function fB(n){return lCn(),Inn((men(),uCt),n)}function lB(n){return mdn(),Inn((w7(),BCt),n)}function bB(n){return n_n(),Inn((Qun(),JCt),n)}function wB(n){return kUn(),Inn((Qnn(),OCt),n)}function dB(n){return Fwn(),Inn((b7(),rOt),n)}function gB(n){return Bsn(),Inn((h7(),fOt),n)}function pB(n){return hAn(),Inn((Ucn(),cAt),n)}function vB(n,t){return kW(n),n+(kW(t),t)}function mB(n,t){return $T(),f9(QQ(n.a),t)}function yB(n,t){return $T(),f9(QQ(n.a),t)}function kB(n,t){this.c=n,this.a=t,this.b=t-n}function jB(n,t,e){this.a=n,this.b=t,this.c=e}function EB(n,t,e){this.a=n,this.b=t,this.c=e}function TB(n,t,e){this.a=n,this.b=t,this.c=e}function MB(n,t,e){this.a=n,this.b=t,this.c=e}function SB(n,t,e){this.a=n,this.b=t,this.c=e}function PB(n,t,e){this.e=n,this.a=t,this.c=e}function IB(n,t,e){f$(),mJ.call(this,n,t,e)}function CB(n,t,e){f$(),rW.call(this,n,t,e)}function OB(n,t,e){f$(),rW.call(this,n,t,e)}function AB(n,t,e){f$(),rW.call(this,n,t,e)}function $B(n,t,e){f$(),CB.call(this,n,t,e)}function LB(n,t,e){f$(),CB.call(this,n,t,e)}function NB(n,t,e){f$(),LB.call(this,n,t,e)}function xB(n,t,e){f$(),OB.call(this,n,t,e)}function DB(n,t,e){f$(),AB.call(this,n,t,e)}function RB(n,t){return yX(n),yX(t),new hT(n,t)}function KB(n,t){return yX(n),yX(t),new _H(n,t)}function _B(n,t){return yX(n),yX(t),new FH(n,t)}function FB(n,t){return yX(n),yX(t),new lT(n,t)}function BB(n,t){return JH(null==n||Qpn(n,t)),n}function HB(n){var t;return fnn(t=new Np,n),t}function qB(n){var t;return fnn(t=new Rv,n),t}function GB(n){var t;return qrn(t=new zv,n),t}function zB(n){var t;return qrn(t=new YT,n),t}function UB(n){return!n.e&&(n.e=new Np),n.e}function XB(n){return!n.c&&(n.c=new Bo),n.c}function WB(n,t){return n.c[n.c.length]=t,!0}function VB(n,t){this.c=n,this.b=t,this.a=!1}function QB(n){this.d=n,Mb(this),this.b=rz(n.d)}function YB(){this.a=";,;",this.b="",this.c=""}function JB(n,t,e){Uz.call(this,t,e),this.a=n}function ZB(n,t,e){this.b=n,gO.call(this,t,e)}function nH(n,t,e){this.c=n,PS.call(this,t,e)}function tH(n,t,e){_In(e,0,n,t,e.length,!1)}function eH(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function iH(n,t){t&&(n.b=t,n.a=(EW(t),t.a))}function rH(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function cH(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function aH(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function uH(n){return uan(xU(JO(n)?Pan(n):n))}function oH(n,t){return E$(oq(n.d),oq(t.d))}function sH(n,t){return t==(kUn(),ICt)?n.c:n.d}function hH(){hH=O,kUn(),Rmt=ICt,Kmt=oCt}function fH(){this.b=Gy(MD(mpn((fRn(),aat))))}function lH(n){return dM(),x8(Ant,HWn,1,n,5,1)}function bH(n){return new xI(n.c+n.b,n.d+n.a)}function wH(n,t){return SM(),E$(n.d.p,t.d.p)}function dH(n){return Px(0!=n.b),Atn(n,n.a.a)}function gH(n){return Px(0!=n.b),Atn(n,n.c.b)}function pH(n,t){if(!n)throw Hp(new $y(t))}function vH(n,t){if(!n)throw Hp(new _y(t))}function mH(n,t,e){dP.call(this,n,t),this.b=e}function yH(n,t,e){LC.call(this,n,t),this.c=e}function kH(n,t,e){btn.call(this,t,e),this.d=n}function jH(n){o_(),yo.call(this),this.th(n)}function EH(n,t,e){this.a=n,NO.call(this,t,e)}function TH(n,t,e){this.a=n,NO.call(this,t,e)}function MH(n,t,e){LC.call(this,n,t),this.c=e}function SH(){R5(),oW.call(this,(WM(),zAt))}function PH(n){return null!=n&&!Xbn(n,LAt,NAt)}function IH(n,t){return(Wfn(n)<<4|Wfn(t))&QVn}function CH(n,t){return nV(),zvn(n,t),new GW(n,t)}function OH(n,t){var e;n.n&&(e=t,WB(n.f,e))}function AH(n,t,e){rtn(n,t,new GX(e))}function $H(n,t){var e;return e=n.c,Kin(n,t),e}function LH(n,t){return n.g=t<0?-1:t,n}function NH(n,t){return ztn(n),n.a*=t,n.b*=t,n}function xH(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function DH(n,t){return r5(n,t,n.c.b,n.c),!0}function RH(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function KH(n){this.b=n,this.a=lz(this.b.a).Ed()}function _H(n,t){this.b=n,this.a=t,Bh.call(this)}function FH(n,t){this.a=n,this.b=t,Bh.call(this)}function BH(n,t){Uz.call(this,t,1040),this.a=n}function HH(n){return 0==n||isNaN(n)?n:n<0?-1:1}function qH(n){return MQ(),PMn(n)==JJ(OMn(n))}function GH(n){return MQ(),OMn(n)==JJ(PMn(n))}function zH(n,t){return Yjn(n,new dP(t.a,t.b))}function UH(n){return!b5(n)&&n.c.i.c==n.d.i.c}function XH(n){var t;return t=n.n,n.a.b+t.d+t.a}function WH(n){var t;return t=n.n,n.e.b+t.d+t.a}function VH(n){var t;return t=n.n,n.e.a+t.b+t.c}function QH(n){return wWn(),new oG(0,n)}function YH(n){return n.a?n.a:eQ(n)}function JH(n){if(!n)throw Hp(new Ky(null))}function ZH(){ZH=O,SQ(),uLt=new Gb(P7n)}function nq(){nq=O,new svn((ty(),_nt),(ey(),Knt))}function tq(){tq=O,Ctt=x8(Att,sVn,19,256,0,1)}function eq(n,t,e,i){awn.call(this,n,t,e,i,0,0)}function iq(n,t,e){return VW(n.b,BB(e.b,17),t)}function rq(n,t,e){return VW(n.b,BB(e.b,17),t)}function cq(n,t){return WB(n,new xI(t.a,t.b))}function aq(n,t){return n.c<t.c?-1:n.c==t.c?0:1}function uq(n){return n.e.c.length+n.g.c.length}function oq(n){return n.e.c.length-n.g.c.length}function sq(n){return n.b.c.length-n.e.c.length}function hq(n){return BZ(),(kUn(),bCt).Hc(n.j)}function fq(n){o_(),jH.call(this,n),this.a=-1}function lq(n,t){xC.call(this,n,t),this.a=this}function bq(n,t){var e;return(e=mX(n,t)).i=2,e}function wq(n,t){return++n.j,n.Ti(t)}function dq(n,t,e){return n.a=-1,WN(n,t.g,e),n}function gq(n,t,e){Kzn(n.a,n.b,n.c,BB(t,202),e)}function pq(n,t){Bin(n,null==t?null:(kW(t),t))}function vq(n,t){Rin(n,null==t?null:(kW(t),t))}function mq(n,t){Rin(n,null==t?null:(kW(t),t))}function yq(n,t,e){return new wK(dW(n).Ie(),e,t)}function kq(n,t,e,i,r,c){return Vjn(n,t,e,i,r,0,c)}function jq(){jq=O,jtt=x8(Ttt,sVn,217,256,0,1)}function Eq(){Eq=O,$tt=x8(Rtt,sVn,162,256,0,1)}function Tq(){Tq=O,Ktt=x8(_tt,sVn,184,256,0,1)}function Mq(){Mq=O,Mtt=x8(Stt,sVn,172,128,0,1)}function Sq(){eH(this,!1,!1,!1,!1)}function Pq(n){WX(),this.a=(SQ(),new Gb(yX(n)))}function Iq(n){for(yX(n);n.Ob();)n.Pb(),n.Qb()}function Cq(n){n.a.cd(),BB(n.a.dd(),14).gc(),wk()}function Oq(n){this.c=n,this.b=this.c.d.vc().Kc()}function Aq(n){this.c=n,this.a=new QT(this.c.a)}function $q(n){this.a=new XT(n.gc()),Frn(this,n)}function Lq(n){ew.call(this,new v4),Frn(this,n)}function Nq(n,t){return n.a+=Bdn(t,0,t.length),n}function xq(n,t){return l1(t,n.c.length),n.c[t]}function Dq(n,t){return l1(t,n.a.length),n.a[t]}function Rq(n,t){dM(),B8.call(this,n),this.a=t}function Kq(n,t){return jgn(rbn(jgn(n.a).a,t.a))}function _q(n,t){return kW(n),Ncn(n,(kW(t),t))}function Fq(n,t){return kW(t),Ncn(t,(kW(n),n))}function Bq(n,t){return $X(t,0,Hq(t[0],jgn(1)))}function Hq(n,t){return Kq(BB(n,162),BB(t,162))}function qq(n){return n.c-BB(xq(n.a,n.b),287).b}function Gq(n){return n.q?n.q:(SQ(),SQ(),het)}function zq(n){return n.e.Hd().gc()*n.c.Hd().gc()}function Uq(n,t,e){return E$(t.d[n.g],e.d[n.g])}function Xq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Wq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Vq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Qq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Yq(n,t,i){return e.Math.min(i/n,1/t)}function Jq(n,t){return n?0:e.Math.max(0,t-1)}function Zq(n,t){var e;for(e=0;e<t;++e)n[e]=-1}function nG(n){var t;return(t=uEn(n))?nG(t):n}function tG(n,t){return null==n.a&&wRn(n),n.a[t]}function eG(n){return n.c?n.c.f:n.e.b}function iG(n){return n.c?n.c.g:n.e.a}function rG(n){gtn.call(this,n.gc()),pX(this,n)}function cG(n,t){f$(),jp.call(this,t),this.a=n}function aG(n,t,e){this.a=n,$L.call(this,t,e,2)}function uG(n,t,e,i){_h(this),rH(this,n,t,e,i)}function oG(n,t){wWn(),Ap.call(this,n),this.a=t}function sG(n){this.b=new YT,this.a=n,this.c=-1}function hG(){this.d=new xI(0,0),this.e=new Rv}function fG(n){ZN.call(this,0,0),this.a=n,this.b=0}function lG(n){this.a=n,this.c=new xp,ron(this)}function bG(n){if(n.e.c!=n.b)throw Hp(new vv)}function wG(n){if(n.c.e!=n.a)throw Hp(new vv)}function dG(n){return JO(n)?0|n:TE(n)}function gG(n,t){return wWn(),new UU(n,t)}function pG(n,t){return null==n?null==t:mK(n,t)}function vG(n,t){return null==n?null==t:mgn(n,t)}function mG(n,t,e){return orn(n.a,t),EU(n,t.g,e)}function yG(n,t,e){ihn(0,t,n.length),z9(n,0,t,e)}function kG(n,t,e){LZ(t,n.c.length),MS(n.c,t,e)}function jG(n,t,e){var i;for(i=0;i<t;++i)n[i]=e}function EG(n,t){var e;return $on(e=nbn(n),t),e}function TG(n,t){return!n&&(n=[]),n[n.length]=t,n}function MG(n,t){return!(void 0===n.a.get(t))}function SG(n,t){return Xin(new nn,new uw(n),t)}function PG(n){return null==n?Set:new vy(kW(n))}function IG(n,t){return cL(t,22)&&SN(n,BB(t,22))}function CG(n,t){return cL(t,22)&&$tn(n,BB(t,22))}function OG(n){return H$n(n,26)*rYn+H$n(n,27)*cYn}function AG(n){return Array.isArray(n)&&n.im===C}function $G(n){n.b?$G(n.b):n.d.dc()&&n.f.c.Bc(n.e)}function LG(n,t){UR(n.c,t),n.b.c+=t.a,n.b.d+=t.b}function NG(n,t){LG(n,XR(new xI(t.a,t.b),n.c))}function xG(n,t){this.b=new YT,this.a=n,this.c=t}function DG(){this.b=new Ot,this.c=new lY(this)}function RG(){this.d=new mn,this.e=new fY(this)}function KG(){KZ(),this.f=new YT,this.e=new YT}function _G(){BZ(),this.k=new xp,this.d=new Rv}function FG(){FG=O,bOt=new XA((sWn(),aPt),0)}function BG(){BG=O,qnt=new fG(x8(Ant,HWn,1,0,5,1))}function HG(n,t,e){VAn(e,n,1),WB(t,new cP(e,n))}function qG(n,t,e){Fkn(e,n,1),WB(t,new bP(e,n))}function GG(n,t,e){return TU(n,new xS(t.a,e.a))}function zG(n,t,e){return-E$(n.f[t.p],n.f[e.p])}function UG(n,t,e){var i;n&&((i=n.i).c=t,i.b=e)}function XG(n,t,e){var i;n&&((i=n.i).d=t,i.a=e)}function WG(n,t,e){return n.a=-1,WN(n,t.g+1,e),n}function VG(n,t,e){return e=T_n(n,BB(t,49),7,e)}function QG(n,t,e){return e=T_n(n,BB(t,49),3,e)}function YG(n,t,e){this.a=n,LL.call(this,t,e,22)}function JG(n,t,e){this.a=n,LL.call(this,t,e,14)}function ZG(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function nz(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function tz(n,t){0!=(t.Bb&h6n)&&!n.a.o&&(n.a.o=t)}function ez(n){return null!=n&&DU(n)&&!(n.im===C)}function iz(n){return!Array.isArray(n)&&n.im===C}function rz(n){return cL(n,15)?BB(n,15).Yc():n.Kc()}function cz(n){return n.Qc(x8(Ant,HWn,1,n.gc(),5,1))}function az(n,t){return lgn(F7(n,t))?t.Qh():null}function uz(n){n?Fmn(n,($T(),Btt),""):$T()}function oz(n){this.a=(BG(),qnt),this.d=BB(yX(n),47)}function sz(n,t,e,i){this.a=n,W6.call(this,n,t,e,i)}function hz(n){eS(),this.a=0,this.b=n-1,this.c=1}function fz(n){V$(this),this.g=n,jQ(this),this._d()}function lz(n){return n.c?n.c:n.c=n.Id()}function bz(n){return n.d?n.d:n.d=n.Jd()}function wz(n){return n.c||(n.c=n.Dd())}function dz(n){return n.f||(n.f=n.Dc())}function gz(n){return n.i||(n.i=n.bc())}function pz(n){return wWn(),new vJ(10,n,0)}function vz(n){return JO(n)?""+n:GDn(n)}function mz(n){if(n.e.j!=n.d)throw Hp(new vv)}function yz(n,t){return uan(lSn(JO(n)?Pan(n):n,t))}function kz(n,t){return uan(jAn(JO(n)?Pan(n):n,t))}function jz(n,t){return uan(JSn(JO(n)?Pan(n):n,t))}function Ez(n,t){return bR((kW(n),n),(kW(t),t))}function Tz(n,t){return Pln((kW(n),n),(kW(t),t))}function Mz(n,t){return yX(t),n.a.Ad(t)&&!n.b.Ad(t)}function Sz(n,t){return M$(n.l&t.l,n.m&t.m,n.h&t.h)}function Pz(n,t){return M$(n.l|t.l,n.m|t.m,n.h|t.h)}function Iz(n,t){return M$(n.l^t.l,n.m^t.m,n.h^t.h)}function Cz(n,t){return $fn(n,(kW(t),new rw(t)))}function Oz(n,t){return $fn(n,(kW(t),new cw(t)))}function Az(n){return gcn(),0!=BB(n,11).e.c.length}function $z(n){return gcn(),0!=BB(n,11).g.c.length}function Lz(n,t){return Crn(),Pln(t.a.o.a,n.a.o.a)}function Nz(n,t,e){return TUn(n,BB(t,11),BB(e,11))}function xz(n){return n.e?D6(n.e):null}function Dz(n){n.d||(n.d=n.b.Kc(),n.c=n.b.gc())}function Rz(n,t,e){n.a.Mb(e)&&(n.b=!0,t.td(e))}function Kz(n,t){if(n<0||n>=t)throw Hp(new Sv)}function _z(n,t,e){return $X(t,0,Hq(t[0],e[0])),t}function Fz(n,t,e){t.Ye(e,Gy(MD(RX(n.b,e)))*n.a)}function Bz(n,t,e){return jDn(),Dcn(n,t)&&Dcn(n,e)}function Hz(n){return lCn(),!n.Hc(eCt)&&!n.Hc(rCt)}function qz(n){return new xI(n.c+n.b/2,n.d+n.a/2)}function Gz(n,t){return t.kh()?tfn(n.b,BB(t,49)):t}function zz(n,t){this.e=n,this.d=0!=(64&t)?t|hVn:t}function Uz(n,t){this.c=0,this.d=n,this.b=64|t|hVn}function Xz(n){this.b=new J6(11),this.a=(PQ(),n)}function Wz(n){this.b=null,this.a=(PQ(),n||wet)}function Vz(n){this.a=rvn(n.a),this.b=new t_(n.b)}function Qz(n){this.b=n,cx.call(this,n),ML(this)}function Yz(n){this.b=n,ux.call(this,n),SL(this)}function Jz(n,t,e){this.a=n,eK.call(this,t,e,5,6)}function Zz(n,t,e,i){this.b=n,$L.call(this,t,e,i)}function nU(n,t,e,i,r){k9.call(this,n,t,e,i,r,-1)}function tU(n,t,e,i,r){j9.call(this,n,t,e,i,r,-1)}function eU(n,t,e,i){$L.call(this,n,t,e),this.b=i}function iU(n,t,e,i){yH.call(this,n,t,e),this.b=i}function rU(n){NC.call(this,n,!1),this.a=!1}function cU(n,t){this.b=n,hl.call(this,n.b),this.a=t}function aU(n,t){WX(),jT.call(this,n,sfn(new Jy(t)))}function uU(n,t){return wWn(),new cW(n,t,0)}function oU(n,t){return wWn(),new cW(6,n,t)}function sU(n,t){return mK(n.substr(0,t.length),t)}function hU(n,t){return XC(t)?eY(n,t):!!AY(n.f,t)}function fU(n,t){for(kW(t);n.Ob();)t.td(n.Pb())}function lU(n,t,e){ODn(),this.e=n,this.d=t,this.a=e}function bU(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function wU(n){var t;for(t=n;t.f;)t=t.f;return t}function dU(n){var t;return Px(null!=(t=Eon(n))),t}function gU(n){var t;return Px(null!=(t=mln(n))),t}function pU(n,t){var e;return w6(t,e=n.a.gc()),e-t}function vU(n,t){var e;for(e=0;e<t;++e)n[e]=!1}function mU(n,t,e,i){var r;for(r=t;r<e;++r)n[r]=i}function yU(n,t,e,i){ihn(t,e,n.length),mU(n,t,e,i)}function kU(n,t,e){Kz(e,n.a.c.length),c5(n.a,e,t)}function jU(n,t,e){this.c=n,this.a=t,SQ(),this.b=e}function EU(n,t,e){var i;return i=n.b[t],n.b[t]=e,i}function TU(n,t){return null==n.a.zc(t,n)}function MU(n){if(!n)throw Hp(new yv);return n.d}function SU(n,t){if(null==n)throw Hp(new Hy(t))}function PU(n,t){return!!t&&Frn(n,t)}function IU(n,t,e){return ehn(n,t.g,e),orn(n.c,t),n}function CU(n){return Mzn(n,(Ffn(),_Pt)),n.d=!0,n}function OU(n){return!n.j&&yb(n,FKn(n.g,n.b)),n.j}function AU(n){Mx(-1!=n.b),s6(n.c,n.a=n.b),n.b=-1}function $U(n){n.f=new eA(n),n.g=new iA(n),oY(n)}function LU(n){return new Rq(null,qU(n,n.length))}function NU(n){return new oz(new WL(n.a.length,n.a))}function xU(n){return M$(~n.l&SQn,~n.m&SQn,~n.h&PQn)}function DU(n){return typeof n===AWn||typeof n===xWn}function RU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function KU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function _U(n,t){return n>0?e.Math.log(n/t):-100}function FU(n,t){return Vhn(n,t)<0?-1:Vhn(n,t)>0?1:0}function BU(n,t,e){return SHn(n,BB(t,46),BB(e,167))}function HU(n,t){return BB(wz(lz(n.a)).Xb(t),42).cd()}function qU(n,t){return ptn(t,n.length),new BH(n,t)}function GU(n,t){this.d=n,AL.call(this,n),this.e=t}function zU(n){this.d=(kW(n),n),this.a=0,this.c=bVn}function UU(n,t){Ap.call(this,1),this.a=n,this.b=t}function XU(n,t){return n.c?XU(n.c,t):WB(n.b,t),n}function WU(n,t,e){var i;return i=dnn(n,t),r4(n,t,e),i}function VU(n,t){return m7(n.slice(0,t),n)}function QU(n,t,e){var i;for(i=0;i<t;++i)$X(n,i,e)}function YU(n,t,e,i,r){for(;t<e;)i[r++]=fV(n,t++)}function JU(n,t){return Pln(n.c.c+n.c.b,t.c.c+t.c.b)}function ZU(n,t){return null==Mon(n.a,t,(hN(),ptt))}function nX(n,t){r5(n.d,t,n.b.b,n.b),++n.a,n.c=null}function tX(n,t){J$(n,cL(t,153)?t:BB(t,1937).gl())}function eX(n,t){JT($V(n.Oc(),new Yr),new Cd(t))}function iX(n,t,e,i,r){NEn(n,BB(h6(t.k,e),15),e,i,r)}function rX(n){n.s=NaN,n.c=NaN,ZOn(n,n.e),ZOn(n,n.j)}function cX(n){n.a=null,n.e=null,$U(n.b),n.d=0,++n.c}function aX(n){return e.Math.abs(n.d.e-n.e.e)-n.a}function uX(n,t,e){return BB(n.c._c(t,BB(e,133)),42)}function oX(){return ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])}function sX(n){return MQ(),JJ(PMn(n))==JJ(OMn(n))}function hX(n){$R.call(this),this.a=n,WB(n.a,this)}function fX(n,t){this.d=Sln(n),this.c=t,this.a=.5*t}function lX(){v4.call(this),this.a=!0,this.b=!0}function bX(n){return(null==n.i&&qFn(n),n.i).length}function wX(n){return cL(n,99)&&0!=(BB(n,18).Bb&h6n)}function dX(n,t){++n.j,sTn(n,n.i,t),zCn(n,BB(t,332))}function gX(n,t){return t=n.nk(null,t),$Tn(n,null,t)}function pX(n,t){return n.hi()&&(t=nZ(n,t)),n.Wh(t)}function vX(n,t,e){var i;return Qen(e,i=mX(n,t)),i}function mX(n,t){var e;return(e=new pon).j=n,e.d=t,e}function yX(n){if(null==n)throw Hp(new gv);return n}function kX(n){return n.j||(n.j=new wl(n))}function jX(n){return n.f||(n.f=new UL(n))}function EX(n){return n.k||(n.k=new Yf(n))}function TX(n){return n.k||(n.k=new Yf(n))}function MX(n){return n.g||(n.g=new Qf(n))}function SX(n){return n.i||(n.i=new nl(n))}function PX(n){return n.d||(n.d=new il(n))}function IX(n){return yX(n),cL(n,475)?BB(n,475):Bbn(n)}function CX(n){return cL(n,607)?n:new bJ(n)}function OX(n,t){return w2(t,n.c.b.c.gc()),new sT(n,t)}function AX(n,t,e){return wWn(),new T0(n,t,e)}function $X(n,t,e){return Sx(null==e||Q_n(n,e)),n[t]=e}function LX(n,t){var e;return w2(t,e=n.a.gc()),e-1-t}function NX(n,t){return n.a+=String.fromCharCode(t),n}function xX(n,t){return n.a+=String.fromCharCode(t),n}function DX(n,t){for(kW(t);n.c<n.d;)n.ze(t,n.c++)}function RX(n,t){return XC(t)?SJ(n,t):qC(AY(n.f,t))}function KX(n,t){return MQ(),n==PMn(t)?OMn(t):PMn(t)}function _X(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function FX(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function BX(n){this.b=new Np,this.a=new Np,this.c=n}function HX(n){this.c=new Gj,this.a=new Np,this.b=n}function qX(n){$R.call(this),this.a=new Gj,this.c=n}function GX(n){if(null==n)throw Hp(new gv);this.a=n}function zX(n){Mv(),this.b=new Np,this.a=n,vGn(this,n)}function UX(n){this.c=n,this.a=new YT,this.b=new YT}function XX(){XX=O,ott=new Ml(!1),stt=new Ml(!0)}function WX(){WX=O,s_(),Fnt=new SY((SQ(),SQ(),set))}function VX(){VX=O,s_(),Vnt=new vS((SQ(),SQ(),fet))}function QX(){QX=O,t$t=GCn(),gWn(),i$t&&Rkn()}function YX(n,t){return Crn(),BB(oV(n,t.d),15).Fc(t)}function JX(n,t,e,i){return 0==e||(e-i)/e<n.e||t>=n.g}function ZX(n,t,e){return NRn(n,yrn(n,t,e))}function nW(n,t){var e;dnn(n,e=n.a.length),r4(n,e,t)}function tW(n,t){console[n].call(console,t)}function eW(n,t){var e;++n.j,e=n.Vi(),n.Ii(n.oi(e,t))}function iW(n,t,e){BB(t.b,65),Otn(t.a,new EB(n,e,t))}function rW(n,t,e){jp.call(this,t),this.a=n,this.b=e}function cW(n,t,e){Ap.call(this,n),this.a=t,this.b=e}function aW(n,t,e){this.a=n,kp.call(this,t),this.b=e}function uW(n,t,e){this.a=n,H2.call(this,8,t,null,e)}function oW(n){this.a=(kW(_9n),_9n),this.b=n,new Nm}function sW(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function hW(n){this.c=n,this.b=n.a.d.a,bD(n.a.e,this)}function fW(n){Mx(-1!=n.c),n.d.$c(n.c),n.b=n.c,n.c=-1}function lW(n){return e.Math.sqrt(n.a*n.a+n.b*n.b)}function bW(n,t){return Kz(t,n.a.c.length),xq(n.a,t)}function wW(n,t){return GC(n)===GC(t)||null!=n&&Nfn(n,t)}function dW(n){return 0>=n?new VT:Win(n-1)}function gW(n){return!!SNt&&eY(SNt,n)}function pW(n){return n?n.dc():!n.Kc().Ob()}function vW(n){return!n.a&&n.c?n.c.b:n.a}function mW(n){return!n.a&&(n.a=new $L(LOt,n,4)),n.a}function yW(n){return!n.d&&(n.d=new $L(VAt,n,1)),n.d}function kW(n){if(null==n)throw Hp(new gv);return n}function jW(n){n.c?n.c.He():(n.d=!0,QNn(n))}function EW(n){n.c?EW(n.c):(Qln(n),n.d=!0)}function TW(n){TV(n.a),n.b=x8(Ant,HWn,1,n.b.length,5,1)}function MW(n,t){return E$(t.j.c.length,n.j.c.length)}function SW(n,t){n.c<0||n.b.b<n.c?fO(n.b,t):n.a._e(t)}function PW(n,t){var e;(e=n.Yg(t))>=0?n.Bh(e):cCn(n,t)}function IW(n){return n.c.i.c==n.d.i.c}function CW(n){if(4!=n.p)throw Hp(new dv);return n.e}function OW(n){if(3!=n.p)throw Hp(new dv);return n.e}function AW(n){if(6!=n.p)throw Hp(new dv);return n.f}function $W(n){if(6!=n.p)throw Hp(new dv);return n.k}function LW(n){if(3!=n.p)throw Hp(new dv);return n.j}function NW(n){if(4!=n.p)throw Hp(new dv);return n.j}function xW(n){return!n.b&&(n.b=new Tp(new xm)),n.b}function DW(n){return-2==n.c&&gb(n,uMn(n.g,n.b)),n.c}function RW(n,t){var e;return(e=mX("",n)).n=t,e.i=1,e}function KW(n,t){LG(BB(t.b,65),n),Otn(t.a,new Aw(n))}function _W(n,t){f9((!n.a&&(n.a=new oR(n,n)),n.a),t)}function FW(n,t){this.b=n,GU.call(this,n,t),ML(this)}function BW(n,t){this.b=n,RK.call(this,n,t),SL(this)}function HW(n,t,e,i){vT.call(this,n,t),this.d=e,this.a=i}function qW(n,t,e,i){vT.call(this,n,e),this.a=t,this.f=i}function GW(n,t){W$.call(this,Vin(yX(n),yX(t))),this.a=t}function zW(){dMn.call(this,S7n,(rE(),dLt)),Wqn(this)}function UW(){dMn.call(this,V9n,(iE(),n$t)),OHn(this)}function XW(){gT.call(this,"DELAUNAY_TRIANGULATION",0)}function WW(n){return String.fromCharCode.apply(null,n)}function VW(n,t,e){return XC(t)?mZ(n,t,e):jIn(n.f,t,e)}function QW(n){return SQ(),n?n.ve():(PQ(),PQ(),get)}function YW(n,t,e){return Nun(),e.pg(n,BB(t.cd(),146))}function JW(n,t){return nq(),new svn(new rN(n),new iN(t))}function ZW(n){return lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))}function nV(){nV=O,Bnt=new hy(Pun(Gk(Hnt,1),kVn,42,0,[]))}function tV(n){return!n.d&&(n.d=new Hb(n.c.Cc())),n.d}function eV(n){return!n.a&&(n.a=new Lk(n.c.vc())),n.a}function iV(n){return!n.b&&(n.b=new Ak(n.c.ec())),n.b}function rV(n,t){for(;t-- >0;)n=n<<1|(n<0?1:0);return n}function cV(n,t){return GC(n)===GC(t)||null!=n&&Nfn(n,t)}function aV(n,t){return hN(),BB(t.b,19).a<n}function uV(n,t){return hN(),BB(t.a,19).a<n}function oV(n,t){return IG(n.a,t)?n.b[BB(t,22).g]:null}function sV(n,t,e,i){n.a=fx(n.a,0,t)+""+i+nO(n.a,e)}function hV(n,t){n.u.Hc((lCn(),eCt))&&PCn(n,t),z6(n,t)}function fV(n,t){return b1(t,n.length),n.charCodeAt(t)}function lV(){dy.call(this,"There is no more element.")}function bV(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function wV(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function dV(n,t,e,i){return Rcn(n,t,e,!1),Zfn(n,i),n}function gV(n){return n.j.c=x8(Ant,HWn,1,0,5,1),n.a=-1,n}function pV(n){return!n.c&&(n.c=new hK(KOt,n,5,8)),n.c}function vV(n){return!n.b&&(n.b=new hK(KOt,n,4,7)),n.b}function mV(n){return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n}function yV(n){return!n.c&&(n.c=new eU(XOt,n,9,9)),n.c}function kV(n){return n.e==I7n&&vb(n,Tgn(n.g,n.b)),n.e}function jV(n){return n.f==I7n&&mb(n,pkn(n.g,n.b)),n.f}function EV(n){var t;return!(t=n.b)&&(n.b=t=new Jf(n)),t}function TV(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function MV(n){if(zbn(n.d),n.d.d!=n.c)throw Hp(new vv)}function SV(n,t){this.b=n,this.c=t,this.a=new QT(this.b)}function PV(n,t,e){this.a=XVn,this.d=n,this.b=t,this.c=e}function IV(n,t){this.d=(kW(n),n),this.a=16449,this.c=t}function CV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function OV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function AV(n,t){return Qln(n),new Rq(n,new Q9(t,n.a))}function $V(n,t){return Qln(n),new Rq(n,new M6(t,n.a))}function LV(n,t){return Qln(n),new AD(n,new E6(t,n.a))}function NV(n,t){return Qln(n),new $D(n,new T6(t,n.a))}function xV(n,t){return new pY(BB(yX(n),62),BB(yX(t),62))}function DV(n,t){return jM(),Pln((kW(n),n),(kW(t),t))}function RV(){return wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])}function KV(){return IM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])}function _V(){return CM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])}function FV(){return OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])}function BV(n){this.a=new Np,this.e=x8(ANt,sVn,48,n,0,2)}function HV(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function qV(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function GV(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function zV(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function UV(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function XV(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function WV(n,t,e,i){gT.call(this,n,t),this.a=e,this.b=i}function VV(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function QV(n,t,e){EHn(n.a,e),nun(e),AAn(n.b,e),rqn(t,e)}function YV(n,t,e){var i;return i=$Un(n),t.Kh(e,i)}function JV(n,t){var e,i;return(e=n/t)>(i=IJ(e))&&++i,i}function ZV(n){var t;return cen(t=new Kp,n),t}function nQ(n){var t;return DMn(t=new Kp,n),t}function tQ(n,t){return Kcn(t,RX(n.f,t)),null}function eQ(n){return Yin(n)||null}function iQ(n){return!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b}function rQ(n){return null!=n&&xT(jAt,n.toLowerCase())}function cQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function aQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function uQ(n,t){return Pln(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function oQ(n,t){return Pln(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function sQ(n,t,e){e.a?Ien(n,t.b-n.f/2):Pen(n,t.a-n.g/2)}function hQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function fQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function lQ(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function bQ(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function wQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function dQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function gQ(n,t){this.a=n,OD.call(this,n,BB(n.d,15).Zc(t))}function pQ(n){this.f=n,this.c=this.f.e,n.f>0&&ujn(this)}function vQ(n,t,e,i){this.b=n,this.c=i,vO.call(this,t,e)}function mQ(n){return Px(n.b<n.d.gc()),n.d.Xb(n.c=n.b++)}function yQ(n){n.a.a=n.c,n.c.b=n.a,n.a.b=n.c.a=null,n.b=0}function kQ(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function jQ(n){return n.n&&(n.e!==FVn&&n._d(),n.j=null),n}function EQ(n){return JH(null==n||DU(n)&&!(n.im===C)),n}function TQ(n){this.b=new Np,gun(this.b,this.b),this.a=n}function MQ(){MQ=O,Sct=new Np,Mct=new xp,Tct=new Np}function SQ(){SQ=O,set=new S,het=new I,fet=new M}function PQ(){PQ=O,wet=new R,det=new R,get=new K}function IQ(){IQ=O,hit=new gn,lit=new RG,fit=new pn}function CQ(){256==ait&&(iit=rit,rit=new r,ait=0),++ait}function OQ(n){return n.f||(n.f=new pT(n,n.c))}function AQ(n){return QCn(n)&&qy(TD(ZAn(n,(HXn(),dgt))))}function $Q(n,t){return JCn(n,BB(mMn(t,(HXn(),Wgt)),19),t)}function LQ(n,t){return Tfn(n.j,t.s,t.c)+Tfn(t.e,n.s,n.c)}function NQ(n,t){n.e&&!n.e.a&&(Fp(n.e,t),NQ(n.e,t))}function xQ(n,t){n.d&&!n.d.a&&(Fp(n.d,t),xQ(n.d,t))}function DQ(n,t){return-Pln(iG(n)*eG(n),iG(t)*eG(t))}function RQ(n){return BB(n.cd(),146).tg()+":"+Bbn(n.dd())}function KQ(n){var t;G_(),(t=BB(n.g,10)).n.a=n.d.c+t.d.b}function _Q(n,t,e){return MM(),xbn(BB(RX(n.e,t),522),e)}function FQ(n,t){return tsn(n),tsn(t),Py(BB(n,22),BB(t,22))}function BQ(n,t,e){n.i=0,n.e=0,t!=e&&Xon(n,t,e)}function HQ(n,t,e){n.i=0,n.e=0,t!=e&&Won(n,t,e)}function qQ(n,t,e){rtn(n,t,new Sl(XK(e)))}function GQ(n,t,e,i,r,c){j9.call(this,n,t,e,i,r,c?-2:-1)}function zQ(n,t,e,i){LC.call(this,t,e),this.b=n,this.a=i}function UQ(n,t){new YT,this.a=new km,this.b=n,this.c=t}function XQ(n,t){return BB(mMn(n,(hWn(),clt)),15).Fc(t),t}function WQ(n,t){if(null==n)throw Hp(new Hy(t));return n}function VQ(n){return!n.q&&(n.q=new eU(QAt,n,11,10)),n.q}function QQ(n){return!n.s&&(n.s=new eU(FAt,n,21,17)),n.s}function YQ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a}function JQ(n){return cL(n,14)?new $q(BB(n,14)):qB(n.Kc())}function ZQ(n){return new qL(n,n.e.Hd().gc()*n.c.Hd().gc())}function nY(n){return new GL(n,n.e.Hd().gc()*n.c.Hd().gc())}function tY(n){return n&&n.hashCode?n.hashCode():PN(n)}function eY(n,t){return null==t?!!AY(n.f,null):MG(n.g,t)}function iY(n){return yX(n),emn(new oz(ZL(n.a.Kc(),new h)))}function rY(n){return SQ(),cL(n,54)?new $k(n):new bN(n)}function cY(n,t,e){return!!n.f&&n.f.Ne(t,e)}function aY(n,t){return n.a=fx(n.a,0,t)+""+nO(n.a,t+1),n}function uY(n,t){var e;return(e=eL(n.a,t))&&(t.d=null),e}function oY(n){var t,e;t=0|(e=n).$modCount,e.$modCount=t+1}function sY(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function hY(n){this.b=n,this.a=new dE(BB(yX(new tt),62))}function fY(n){this.c=n,this.b=new dE(BB(yX(new vn),62))}function lY(n){this.c=n,this.b=new dE(BB(yX(new Ct),62))}function bY(){this.a=new Qv,this.b=new hm,this.d=new Dt}function wY(){this.a=new km,this.b=(lin(3,AVn),new J6(3))}function dY(){this.b=new Rv,this.d=new YT,this.e=new om}function gY(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function pY(n,t){zm.call(this,new Wz(n)),this.a=n,this.b=t}function vY(){iSn(this,new Rf),this.wb=(QX(),t$t),iE()}function mY(n){OTn(n,"No crossing minimization",1),HSn(n)}function yY(n){Dk(),e.setTimeout((function(){throw n}),0)}function kY(n){return n.u||(P5(n),n.u=new uR(n,n)),n.u}function jY(n){return BB(yan(n,16),26)||n.zh()}function EY(n,t){return cL(t,146)&&mK(n.b,BB(t,146).tg())}function TY(n,t){return n.a?t.Wg().Kc():BB(t.Wg(),69).Zh()}function MY(n){return n.k==(uSn(),Iut)&&Lx(n,(hWn(),zft))}function SY(n){this.a=(SQ(),cL(n,54)?new $k(n):new bN(n))}function PY(){var n,t;PY=O,t=!Ddn(),n=new d,ett=t?new E:n}function IY(n,t){var e;return e=nE(n.gm),null==t?e:e+": "+t}function CY(n,t){var e;return j4(e=n.b.Qc(t),n.b.gc()),e}function OY(n,t){if(null==n)throw Hp(new Hy(t));return n}function AY(n,t){return hhn(n,t,pZ(n,null==t?0:n.b.se(t)))}function $Y(n,t,e){return e>=0&&mK(n.substr(e,t.length),t)}function LY(n,t,e,i,r,c,a){return new b4(n.e,t,e,i,r,c,a)}function NY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function xY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function DY(n,t){this.g=n,this.d=Pun(Gk(Out,1),a1n,10,0,[t])}function RY(n,t){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t}function KY(n,t){NR.call(this),xtn(this),this.a=n,this.c=t}function _Y(n,t,e,i){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i)}function FY(n,t,e,i){$X(n.c[t.g],t.g,e),$X(n.b[t.g],t.g,i)}function BY(){return A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])}function HY(){return g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])}function qY(){return _nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])}function GY(){return V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])}function zY(){return z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])}function UY(){return U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])}function XY(){return Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])}function WY(){return O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])}function VY(){return gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])}function QY(){return oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])}function YY(){return dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])}function JY(){return B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])}function ZY(){return sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])}function nJ(){return Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])}function tJ(){return D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])}function eJ(){return Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])}function iJ(){return $6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])}function rJ(){return hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])}function cJ(){return Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])}function aJ(){return Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])}function uJ(){return Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])}function oJ(n,t,e,i){return e>=0?n.jh(t,e,i):n.Sg(null,e,i)}function sJ(n){return 0==n.b.b?n.a.$e():dH(n.b)}function hJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.f)}function fJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.k)}function lJ(n){return GC(n.a)===GC((wcn(),C$t))&&Rqn(n),n.a}function bJ(n){this.a=BB(yX(n),271),this.b=(SQ(),new dN(n))}function wJ(n,t){Zl(this,new xI(n.a,n.b)),nb(this,zB(t))}function dJ(){dJ=O,Lyt=new oI(cJn,0),Nyt=new oI(aJn,1)}function gJ(){gJ=O,tyt=new cI(aJn,0),nyt=new cI(cJn,1)}function pJ(){ay.call(this,new XT(etn(12))),aN(!0),this.a=2}function vJ(n,t,e){wWn(),Ap.call(this,n),this.b=t,this.a=e}function mJ(n,t,e){f$(),jp.call(this,t),this.a=n,this.b=e}function yJ(n){NR.call(this),xtn(this),this.a=n,this.c=!0}function kJ(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function jJ(n){pin(n.a),RA(n.a),twn(new Pw(n.a))}function EJ(n,t){oRn(n,!0),Otn(n.e.wf(),new $_(n,!0,t))}function TJ(n,t){return c4(t),Yen(n,x8(ANt,hQn,25,t,15,1),t)}function MJ(n,t){return MQ(),n==JJ(PMn(t))||n==JJ(OMn(t))}function SJ(n,t){return null==t?qC(AY(n.f,null)):hS(n.g,t)}function PJ(n){return 0==n.b?null:(Px(0!=n.b),Atn(n,n.a.a))}function IJ(n){return 0|Math.max(Math.min(n,DWn),-2147483648)}function CJ(n,t){var e=Znt[n.charCodeAt(0)];return null==e?n:e}function OJ(n,t){return WQ(n,"set1"),WQ(t,"set2"),new ET(n,t)}function AJ(n,t){return UR(qx(nen(n.f,t)),n.f.d)}function $J(n,t){var e;return YGn(n,t,e=new q),e.d}function LJ(n,t,e,i){var r;r=new FR,t.a[e.g]=r,mG(n.b,i,r)}function NJ(n,t,e){var i;(i=n.Yg(t))>=0?n.sh(i,e):TLn(n,t,e)}function xJ(n,t,e){hZ(),n&&VW(fAt,n,t),n&&VW(hAt,n,e)}function DJ(n,t,e){this.i=new Np,this.b=n,this.g=t,this.a=e}function RJ(n,t,e){this.c=new Np,this.e=n,this.f=t,this.b=e}function KJ(n,t,e){this.a=new Np,this.e=n,this.f=t,this.c=e}function _J(n,t){V$(this),this.f=t,this.g=n,jQ(this),this._d()}function FJ(n,t){var e;e=n.q.getHours(),n.q.setDate(t),lBn(n,e)}function BJ(n,t){var e;for(yX(t),e=n.a;e;e=e.c)t.Od(e.g,e.i)}function HJ(n){var t;return $on(t=new bE(etn(n.length)),n),t}function qJ(n){function t(){}return t.prototype=n||{},new t}function GJ(n,t){return!!wun(n,t)&&(ein(n),!0)}function zJ(n,t){if(null==t)throw Hp(new gv);return ugn(n,t)}function UJ(n){if(n.qe())return null;var t=n.n;return SWn[t]}function XJ(n){return n.Db>>16!=3?null:BB(n.Cb,33)}function WJ(n){return n.Db>>16!=9?null:BB(n.Cb,33)}function VJ(n){return n.Db>>16!=6?null:BB(n.Cb,79)}function QJ(n){return n.Db>>16!=7?null:BB(n.Cb,235)}function YJ(n){return n.Db>>16!=7?null:BB(n.Cb,160)}function JJ(n){return n.Db>>16!=11?null:BB(n.Cb,33)}function ZJ(n,t){var e;return(e=n.Yg(t))>=0?n.lh(e):qCn(n,t)}function nZ(n,t){var e;return oMn(e=new Lq(t),n),new t_(e)}function tZ(n){var t;return t=n.d,t=n.si(n.f),f9(n,t),t.Ob()}function eZ(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function iZ(n,t){return e.Math.abs(n)<e.Math.abs(t)?n:t}function rZ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a.i>0}function cZ(){this.a=new fA,this.e=new Rv,this.g=0,this.i=0}function aZ(n){this.a=n,this.b=x8(_mt,sVn,1944,n.e.length,0,2)}function uZ(n,t,e){var i;i=Non(n,t,e),n.b=new mrn(i.c.length)}function oZ(){oZ=O,ryt=new rI(pJn,0),cyt=new rI("UP",1)}function sZ(){sZ=O,Rkt=new bI(U3n,0),Kkt=new bI("FAN",1)}function hZ(){hZ=O,fAt=new xp,hAt=new xp,FC(yet,new wo)}function fZ(n){if(0!=n.p)throw Hp(new dv);return JC(n.f,0)}function lZ(n){if(0!=n.p)throw Hp(new dv);return JC(n.k,0)}function bZ(n){return n.Db>>16!=3?null:BB(n.Cb,147)}function wZ(n){return n.Db>>16!=6?null:BB(n.Cb,235)}function dZ(n){return n.Db>>16!=17?null:BB(n.Cb,26)}function gZ(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.le(t))}function pZ(n,t){var e;return null==(e=n.a.get(t))?new Array:e}function vZ(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),lBn(n,e)}function mZ(n,t,e){return null==t?jIn(n.f,null,e):ubn(n.g,t,e)}function yZ(n,t,e,i,r,c){return new N7(n.e,t,n.aj(),e,i,r,c)}function kZ(n,t,e){return n.a=fx(n.a,0,t)+""+e+nO(n.a,t),n}function jZ(n,t,e){return WB(n.a,(nV(),zvn(t,e),new vT(t,e))),n}function EZ(n){return oN(n.c),n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function TZ(n){return oN(n.e),n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function MZ(n,t){n.d&&y7(n.d.e,n),n.d=t,n.d&&WB(n.d.e,n)}function SZ(n,t){n.c&&y7(n.c.g,n),n.c=t,n.c&&WB(n.c.g,n)}function PZ(n,t){n.c&&y7(n.c.a,n),n.c=t,n.c&&WB(n.c.a,n)}function IZ(n,t){n.i&&y7(n.i.j,n),n.i=t,n.i&&WB(n.i.j,n)}function CZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function OZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function AZ(n,t){this.a=n,this.c=B$(this.a),this.b=new gY(t)}function $Z(n){return Qln(n),AV(n,new vw(new Rv))}function LZ(n,t){if(n<0||n>t)throw Hp(new Ay(jYn+n+EYn+t))}function NZ(n,t){return CG(n.a,t)?EU(n,BB(t,22).g,null):null}function xZ(n){return Shn(),hN(),0!=BB(n.a,81).d.e}function DZ(){DZ=O,Xnt=lhn((ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])))}function RZ(){RZ=O,pmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function KZ(){KZ=O,vmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function _Z(){_Z=O,ymt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function FZ(){FZ=O,zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function BZ(){BZ=O,Qmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function HZ(){HZ=O,Zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function qZ(){qZ=O,oyt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function GZ(){GZ=O,zkt=WG(new B2,(zyn(),Fyt),(DPn(),zyt))}function zZ(n,t,e,i){this.c=n,this.d=i,WZ(this,t),VZ(this,e)}function UZ(n){this.c=new YT,this.b=n.b,this.d=n.c,this.a=n.a}function XZ(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function WZ(n,t){n.a&&y7(n.a.k,n),n.a=t,n.a&&WB(n.a.k,n)}function VZ(n,t){n.b&&y7(n.b.f,n),n.b=t,n.b&&WB(n.b.f,n)}function QZ(n,t){iW(n,n.b,n.c),BB(n.b.b,65),t&&BB(t.b,65).b}function YZ(n,t){zln(n,t),cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),2)}function JZ(n,t){cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),4),Nrn(n,t)}function ZZ(n,t){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,t)}function n1(n,t){return ZM(),hnn(t)?new lq(t,n):new xC(t,n)}function t1(n,t){null!=t.c&&nW(n,new GX(t.c))}function e1(n){var t;return iE(),cen(t=new Kp,n),t}function i1(n){var t;return iE(),cen(t=new Kp,n),t}function r1(n,t){var e;return e=new HX(n),t.c[t.c.length]=e,e}function c1(n,t){var e;return(e=BB(lfn(OQ(n.a),t),14))?e.gc():0}function a1(n){return Qln(n),PQ(),PQ(),ytn(n,det)}function u1(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function o1(n,t){Um.call(this,new XT(etn(n))),lin(t,oVn),this.a=t}function s1(n,t,e){Hfn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function h1(n,t,e){var i;Hfn(t,e,n.c.length),i=e-t,PE(n.c,t,i)}function f1(n,t){hL(n,dG(e0(kz(t,24),sYn)),dG(e0(t,sYn)))}function l1(n,t){if(n<0||n>=t)throw Hp(new Ay(jYn+n+EYn+t))}function b1(n,t){if(n<0||n>=t)throw Hp(new Ok(jYn+n+EYn+t))}function w1(n,t){this.b=(kW(n),n),this.a=0==(t&_Qn)?64|t|hVn:t}function d1(n){DA(this),Pv(this.a,kon(e.Math.max(8,n))<<1)}function g1(n){return Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))}function p1(){return qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])}function v1(){return Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])}function m1(){return J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])}function y1(){return G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])}function k1(){return Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])}function j1(){return q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Cat,Aat])}function E1(){return Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])}function T1(){return Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])}function M1(){return uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])}function S1(){return Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])}function P1(){return Irn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])}function I1(){return z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Ift,Sft])}function C1(){return Kan(),Pun(Gk(Cft,1),$Vn,292,0,[jft,Eft,kft])}function O1(){return ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])}function A1(){return mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])}function $1(){return Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])}function L1(){return $un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])}function N1(){return Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])}function x1(){return dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])}function D1(){return oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])}function R1(){return Ibn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])}function K1(){return Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])}function _1(){return Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])}function F1(){return Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])}function B1(){return Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])}function H1(){return ufn(),Pun(Gk(SIt,1),$Vn,334,0,[vIt,pIt,mIt])}function q1(){return Rtn(),Pun(Gk(nIt,1),$Vn,272,0,[zPt,UPt,XPt])}function G1(n,t){return k$n(n,t,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z1(n,t,e){var i;return(i=cHn(n,t,!1)).b<=t&&i.a<=e}function U1(n,t,e){var i;(i=new ca).b=t,i.a=e,++t.b,WB(n.d,i)}function X1(n,t){var e;return Tx(!!(e=(kW(n),n).g)),kW(t),e(t)}function W1(n,t){var e,i;return i=pU(n,t),e=n.a.Zc(i),new kT(n,e)}function V1(n){return n.Db>>16!=6?null:BB(cAn(n),235)}function Q1(n){if(2!=n.p)throw Hp(new dv);return dG(n.f)&QVn}function Y1(n){if(2!=n.p)throw Hp(new dv);return dG(n.k)&QVn}function J1(n){return n.a==(R5(),eLt)&&db(n,eLn(n.g,n.b)),n.a}function Z1(n){return n.d==(R5(),eLt)&&pb(n,NKn(n.g,n.b)),n.d}function n0(n){return Px(n.a<n.c.c.length),n.b=n.a++,n.c.c[n.b]}function t0(n,t){n.b=n.b|t.b,n.c=n.c|t.c,n.d=n.d|t.d,n.a=n.a|t.a}function e0(n,t){return uan(Sz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function i0(n,t){return uan(Pz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function r0(n,t){return uan(Iz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function c0(n){return rbn(yz(fan(H$n(n,32)),32),fan(H$n(n,32)))}function a0(n){return yX(n),cL(n,14)?new t_(BB(n,14)):HB(n.Kc())}function u0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(n.c,t.c)}function o0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(n.c,t.c)}function s0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(t.c,n.c)}function h0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(t.c,n.c)}function f0(n,t){var e;e=Gy(MD(n.a.We((sWn(),OPt)))),VUn(n,t,e)}function l0(n,t){var e;e=BB(RX(n.g,t),57),Otn(t.d,new oP(n,e))}function b0(n,t){var e,i;return(e=oyn(n))<(i=oyn(t))?-1:e>i?1:0}function w0(n,t){var e;return e=S7(t),BB(RX(n.c,e),19).a}function d0(n,t){var e;for(e=n+"";e.length<t;)e="0"+e;return e}function g0(n){return null==n.c||0==n.c.length?"n_"+n.g:"n_"+n.c}function p0(n){return null==n.c||0==n.c.length?"n_"+n.b:"n_"+n.c}function v0(n,t){return n&&n.equals?n.equals(t):GC(n)===GC(t)}function m0(n,t){return 0==t?!!n.o&&0!=n.o.f:vpn(n,t)}function y0(n,t,e){var i;n.n&&t&&e&&(i=new Zu,WB(n.e,i))}function k0(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function j0(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function E0(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function T0(n,t,e){Ap.call(this,25),this.b=n,this.a=t,this.c=e}function M0(n){wWn(),Ap.call(this,n),this.c=!1,this.a=!1}function S0(n,t,e,i,r,c){Hen.call(this,n,t,e,i,r),c&&(this.o=-2)}function P0(n,t,e,i,r,c){qen.call(this,n,t,e,i,r),c&&(this.o=-2)}function I0(n,t,e,i,r,c){J5.call(this,n,t,e,i,r),c&&(this.o=-2)}function C0(n,t,e,i,r,c){Uen.call(this,n,t,e,i,r),c&&(this.o=-2)}function O0(n,t,e,i,r,c){Z5.call(this,n,t,e,i,r),c&&(this.o=-2)}function A0(n,t,e,i,r,c){Gen.call(this,n,t,e,i,r),c&&(this.o=-2)}function $0(n,t,e,i,r,c){zen.call(this,n,t,e,i,r),c&&(this.o=-2)}function L0(n,t,e,i,r,c){n6.call(this,n,t,e,i,r),c&&(this.o=-2)}function N0(n,t,e,i){jp.call(this,e),this.b=n,this.c=t,this.d=i}function x0(n,t){this.a=new Np,this.d=new Np,this.f=n,this.c=t}function D0(){this.c=new $$,this.a=new bY,this.b=new em,bM()}function R0(){Nun(),this.b=new xp,this.a=new xp,this.c=new Np}function K0(n,t){this.g=n,this.d=(R5(),eLt),this.a=eLt,this.b=t}function _0(n,t){this.f=n,this.a=(R5(),tLt),this.c=tLt,this.b=t}function F0(n,t){!n.c&&(n.c=new Ecn(n,0)),MHn(n.c,(Uqn(),LLt),t)}function B0(){B0=O,Hkt=new wI("DFS",0),Bkt=new wI("BFS",1)}function H0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Hc(e)}function q0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Mc(e)}function G0(n,t,e,i){return n.a+=""+fx(null==t?zWn:Bbn(t),e,i),n}function z0(n,t,e,i,r,c){return Rcn(n,t,e,c),Jfn(n,i),tln(n,r),n}function U0(n){return Px(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function X0(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function W0(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function V0(n){return!(!n.a||0==H7(n.a.a).i||n.b&&Kvn(n.b))}function Q0(n){return!(!n.u||0==a4(n.u.a).i||n.n&&Rvn(n.n))}function Y0(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),16,new zf(n))}function J0(n,t){return FU(fan(n.q.getTime()),fan(t.q.getTime()))}function Z0(n){return BB(Qgn(n,x8(yut,c1n,17,n.c.length,0,1)),474)}function n2(n){return BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193)}function t2(n){return BZ(),!(b5(n)||!b5(n)&&n.c.i.c==n.d.i.c)}function e2(n,t,e){yX(n),xyn(new CZ(new t_(n),t,e))}function i2(n,t,e){yX(n),Dyn(new OZ(new t_(n),t,e))}function r2(n,t){var e;return e=1-t,n.a[e]=wrn(n.a[e],e),wrn(n,t)}function c2(n,t){var e;n.e=new Jm,m$(e=wDn(t),n.c),CDn(n,e,0)}function a2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.a,r)}function u2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.b,r)}function o2(n){var t,e;return e=t_n(t=new lX,n),yzn(t),e}function s2(){var n,t;return n=new Kp,WB(V$t,t=n),t}function h2(n){return n.j.c=x8(Ant,HWn,1,0,5,1),TV(n.c),gV(n.a),n}function f2(n){return MM(),cL(n.g,10)?BB(n.g,10):null}function l2(n){return!EV(n).dc()&&(L$(n,new m),!0)}function b2(n){if(!("stack"in n))try{throw n}catch(t){}return n}function w2(n,t){if(n<0||n>=t)throw Hp(new Ay(LIn(n,t)));return n}function d2(n,t,e){if(n<0||t<n||t>e)throw Hp(new Ay(oPn(n,t,e)))}function g2(n,t){if(TU(n.a,t),t.d)throw Hp(new dy(CYn));t.d=n}function p2(n,t){if(t.$modCount!=n.$modCount)throw Hp(new vv)}function v2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function m2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function y2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function k2(n,t){return n.a<=n.b&&(t.ud(n.a++),!0)}function j2(n){var t;return JO(n)?-0==(t=n)?0:t:pnn(n)}function E2(n){var t;return EW(n),t=new F,gE(n.a,new gw(t)),t}function T2(n){var t;return EW(n),t=new _,gE(n.a,new dw(t)),t}function M2(n,t){this.a=n,Sb.call(this,n),LZ(t,n.gc()),this.b=t}function S2(n){this.e=n,this.b=this.e.a.entries(),this.a=new Array}function P2(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),273,new Gf(n))}function I2(n){return new J6((lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))))}function C2(n){return BB(Qgn(n,x8(Gut,u1n,11,n.c.length,0,1)),1943)}function O2(n,t,e){return e.f.c.length>0?BU(n.a,t,e):BU(n.b,t,e)}function A2(n,t,e){n.d&&y7(n.d.e,n),n.d=t,n.d&&kG(n.d.e,e,n)}function $2(n,t){vXn(t,n),aH(n.d),aH(BB(mMn(n,(HXn(),Agt)),207))}function L2(n,t){pXn(t,n),cH(n.d),cH(BB(mMn(n,(HXn(),Agt)),207))}function N2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.fe()),i}function x2(n,t){var e,i;return i=null,(e=dnn(n,t))&&(i=e.ie()),i}function D2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.ie()),i}function R2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=yPn(e)),i}function K2(n,t,e){var i;return i=Qdn(e),wKn(n.g,i,t),wKn(n.i,t,e),t}function _2(n,t,e){var i;i=Ldn();try{return dR(n,t,e)}finally{y3(i)}}function F2(n){var t;t=n.Wg(),this.a=cL(t,69)?BB(t,69).Zh():t.Kc()}function B2(){Ym.call(this),this.j.c=x8(Ant,HWn,1,0,5,1),this.a=-1}function H2(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function q2(n,t,e,i){this.e=i,this.d=null,this.c=n,this.a=t,this.b=e}function G2(n,t,e){this.d=new Fd(this),this.e=n,this.i=t,this.f=e}function z2(){z2=O,Aft=new DP(eJn,0),$ft=new DP("TOP_LEFT",1)}function U2(){U2=O,Tmt=JW(iln(1),iln(4)),Emt=JW(iln(1),iln(2))}function X2(){X2=O,JEt=lhn((CM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])))}function W2(){W2=O,VEt=lhn((IM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])))}function V2(){V2=O,UTt=lhn((OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])))}function Q2(){Q2=O,act=lhn((wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])))}function Y2(){return Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])}function J2(){return Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])}function Z2(){return qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])}function n3(){return Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])}function t3(){return Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])}function e3(){return Cun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])}function i3(n,t,e,i){return cL(e,54)?new Ox(n,t,e,i):new sz(n,t,e,i)}function r3(){return Oun(),Pun(Gk(Cst,1),$Vn,411,0,[vst,mst,yst,kst])}function c3(n){return n.j==(kUn(),SCt)&&SN(UOn(n),oCt)}function a3(n,t){var e;SZ(e=t.a,t.c.d),MZ(e,t.d.d),Ztn(e.a,n.n)}function u3(n,t){return BB($N(Cz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function o3(n,t){return BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function s3(n){return new w1(tcn(BB(n.a.dd(),14).gc(),n.a.cd()),16)}function h3(n){return cL(n,14)?BB(n,14).dc():!n.Kc().Ob()}function f3(n){return MM(),cL(n.g,145)?BB(n.g,145):null}function l3(n){if(n.e.g!=n.b)throw Hp(new vv);return!!n.c&&n.d>0}function b3(n){return Px(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function w3(n,t){kW(t),$X(n.a,n.c,t),n.c=n.c+1&n.a.length-1,wyn(n)}function d3(n,t){kW(t),n.b=n.b-1&n.a.length-1,$X(n.a,n.b,t),wyn(n)}function g3(n,t){var e;for(e=n.j.c.length;e<t;e++)WB(n.j,n.rg())}function p3(n,t,e,i){var r;return r=i[t.g][e.g],Gy(MD(mMn(n.a,r)))}function v3(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function m3(n,t,e,i,r){this.a=n,this.e=t,this.f=e,this.b=i,this.g=r}function y3(n){n&&Cnn((sk(),ttt)),--ctt,n&&-1!=utt&&(iS(utt),utt=-1)}function k3(){return bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])}function j3(){return zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])}function E3(){return Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])}function T3(){return mdn(),Pun(Gk(YCt,1),$Vn,374,0,[KCt,_Ct,RCt,DCt])}function M3(){return Xyn(),Pun(Gk(RIt,1),$Vn,285,0,[MIt,jIt,EIt,TIt])}function S3(){return Mbn(),Pun(Gk(oIt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])}function P3(){return Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZCt,tOt,nOt])}function I3(){return Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])}function C3(n){return hZ(),hU(fAt,n)?BB(RX(fAt,n),331).ug():null}function O3(n,t,e){return t<0?qCn(n,e):BB(e,66).Nj().Sj(n,n.yh(),t)}function A3(n,t,e){var i;return i=Qdn(e),wKn(n.d,i,t),VW(n.e,t,e),t}function $3(n,t,e){var i;return i=Qdn(e),wKn(n.j,i,t),VW(n.k,t,e),t}function L3(n){var t;return tE(),t=new io,n&&HLn(t,n),t}function N3(n){var t;return t=n.ri(n.i),n.i>0&&aHn(n.g,0,t,0,n.i),t}function x3(n,t){var e;return nS(),!(e=BB(RX(mAt,n),55))||e.wj(t)}function D3(n){if(1!=n.p)throw Hp(new dv);return dG(n.f)<<24>>24}function R3(n){if(1!=n.p)throw Hp(new dv);return dG(n.k)<<24>>24}function K3(n){if(7!=n.p)throw Hp(new dv);return dG(n.k)<<16>>16}function _3(n){if(7!=n.p)throw Hp(new dv);return dG(n.f)<<16>>16}function F3(n){var t;for(t=0;n.Ob();)n.Pb(),t=rbn(t,1);return ttn(t)}function B3(n,t){var e;return e=new Ck,n.xd(e),e.a+="..",t.yd(e),e.a}function H3(n,t,e){var i;i=BB(RX(n.g,e),57),WB(n.a.c,new rC(t,i))}function q3(n,t,e){return Tz(MD(qC(AY(n.f,t))),MD(qC(AY(n.f,e))))}function G3(n,t,e){return UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z3(n,t,e){return pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function U3(n,t,e){return x$n(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function X3(n,t){return n==(uSn(),Iut)&&t==Iut?4:n==Iut||t==Iut?8:32}function W3(n,t){return GC(t)===GC(n)?"(this Map)":null==t?zWn:Bbn(t)}function V3(n,t){return BB(null==t?qC(AY(n.f,null)):hS(n.g,t),281)}function Q3(n,t,e){var i;return i=Qdn(e),VW(n.b,i,t),VW(n.c,t,e),t}function Y3(n,t){var e;for(e=t;e;)_x(n,e.i,e.j),e=JJ(e);return n}function J3(n,t){var e;return e=rY(HB(new I7(n,t))),Iq(new I7(n,t)),e}function Z3(n,t){var e;return ZM(),TSn(e=BB(n,66).Mj(),t),e.Ok(t)}function n4(n,t,e,i,r){WB(t,mIn(r,X$n(r,e,i))),UMn(n,r,t)}function t4(n,t,e){n.i=0,n.e=0,t!=e&&(Won(n,t,e),Xon(n,t,e))}function e4(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+sQn),lBn(n,e)}function i4(n,t,e){if(e){var i=e.ee();n.a[t]=i(e)}else delete n.a[t]}function r4(n,t,e){if(e){var i=e.ee();e=i(e)}else e=void 0;n.a[t]=e}function c4(n){if(n<0)throw Hp(new By("Negative array size: "+n))}function a4(n){return n.n||(P5(n),n.n=new YG(n,VAt,n),kY(n)),n.n}function u4(n){return Px(n.a<n.c.a.length),n.b=n.a,Ann(n),n.c.b[n.b]}function o4(n){n.b!=n.c&&(n.a=x8(Ant,HWn,1,8,5,1),n.b=0,n.c=0)}function s4(n){this.b=new xp,this.c=new xp,this.d=new xp,this.a=n}function h4(n,t){wWn(),Ap.call(this,n),this.a=t,this.c=-1,this.b=-1}function f4(n,t,e,i){j0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function l4(n,t,e,i){E0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function b4(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),this.c=n,this.a=e}function w4(n,t,e){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t,this.d=e}function d4(n){this.e=n,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function g4(n){this.c=n,this.a=BB(Ckn(n),148),this.b=this.a.Aj().Nh()}function p4(n){this.d=n,this.b=this.d.a.entries(),this.a=this.b.next()}function v4(){xp.call(this),jx(this),this.d.b=this.d,this.d.a=this.d}function m4(n,t){$R.call(this),this.a=n,this.b=t,WB(this.a.b,this)}function y4(n,t){return iO(null!=t?SJ(n,t):qC(AY(n.f,t)))}function k4(n,t){return iO(null!=t?SJ(n,t):qC(AY(n.f,t)))}function j4(n,t){var e;for(e=0;e<t;++e)$X(n,e,new Ub(BB(n[e],42)))}function E4(n,t){var e;for(e=n.d-1;e>=0&&n.a[e]===t[e];e--);return e<0}function T4(n,t){var e;return zsn(),0!=(e=n.j.g-t.j.g)?e:0}function M4(n,t){return kW(t),null!=n.a?PG(t.Kb(n.a)):Set}function S4(n){var t;return n?new Lq(n):(qrn(t=new fA,n),t)}function P4(n,t){return t.b.Kb(T7(n,t.c.Ee(),new yw(t)))}function I4(n){yTn(),hL(this,dG(e0(kz(n,24),sYn)),dG(e0(n,sYn)))}function C4(){C4=O,pit=lhn((hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])))}function O4(){O4=O,kit=lhn((Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])))}function A4(){A4=O,_ct=lhn((Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])))}function $4(){$4=O,zut=lhn((Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])))}function L4(){L4=O,Cht=lhn((_nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])))}function N4(){N4=O,Uht=lhn((g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])))}function x4(){x4=O,tmt=lhn((A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])))}function D4(){D4=O,Bvt=lhn((U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])))}function R4(){R4=O,oht=lhn((V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])))}function K4(){K4=O,Nft=lhn((z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])))}function _4(){_4=O,Pyt=lhn((O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])))}function F4(){F4=O,Gmt=lhn((Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])))}function B4(){B4=O,iyt=lhn((gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])))}function H4(){H4=O,uyt=lhn((oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])))}function q4(){q4=O,Dyt=lhn((dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])))}function G4(){G4=O,Gkt=lhn((B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])))}function z4(){z4=O,Zkt=lhn((Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])))}function U4(){U4=O,Fkt=lhn((sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])))}function X4(){X4=O,ojt=lhn((D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])))}function W4(){W4=O,QTt=lhn((Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])))}function V4(){V4=O,eTt=lhn(($6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])))}function Q4(){Q4=O,Hmt=new JP("UPPER",0),Bmt=new JP("LOWER",1)}function Y4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function J4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function Z4(n,t){var e,i;i=!1;do{i|=e=bon(n,t)}while(e);return i}function n5(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function t5(n,t){var e;for(e=t;e;)_x(n,-e.i,-e.j),e=JJ(e);return n}function e5(n,t){var e,i;for(kW(t),i=n.Kc();i.Ob();)e=i.Pb(),t.td(e)}function i5(n,t){var e;return new vT(e=t.cd(),n.e.pc(e,BB(t.dd(),14)))}function r5(n,t,e,i){var r;(r=new $).c=t,r.b=e,r.a=i,i.b=e.a=r,++n.b}function c5(n,t,e){var i;return l1(t,n.c.length),i=n.c[t],n.c[t]=e,i}function a5(n,t,e){return BB(null==t?jIn(n.f,null,e):ubn(n.g,t,e),281)}function u5(n){return n.c&&n.d?p0(n.c)+"->"+p0(n.d):"e_"+PN(n)}function o5(n,t){return(Qln(n),jE(new Rq(n,new Q9(t,n.a)))).sd(tit)}function s5(){return yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])}function h5(){return kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])}function f5(n){return Dk(),function(){return _2(n,this,arguments)}}function l5(){return Date.now?Date.now():(new Date).getTime()}function b5(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function w5(n){if(!n.c.Sb())throw Hp(new yv);return n.a=!0,n.c.Ub()}function d5(n){n.i=0,yS(n.b,null),yS(n.c,null),n.a=null,n.e=null,++n.g}function g5(n){dS.call(this,null==n?zWn:Bbn(n),cL(n,78)?BB(n,78):null)}function p5(n){eWn(),Bp(this),this.a=new YT,dsn(this,n),DH(this.a,n)}function v5(){xA(this),this.b=new xI(RQn,RQn),this.a=new xI(KQn,KQn)}function m5(n,t){this.c=0,this.b=t,pO.call(this,n,17493),this.a=this.c}function y5(n){k5(),Qet||(this.c=n,this.e=!0,this.a=new Np)}function k5(){k5=O,Qet=!0,Wet=!1,Vet=!1,Jet=!1,Yet=!1}function j5(n,t){return!!cL(t,149)&&mK(n.c,BB(t,149).c)}function E5(n,t){var e;return e=0,n&&(e+=n.f.a/2),t&&(e+=t.f.a/2),e}function T5(n,t){return BB(lnn(n.d,t),23)||BB(lnn(n.e,t),23)}function M5(n){this.b=n,AL.call(this,n),this.a=BB(yan(this.b.a,4),126)}function S5(n){this.b=n,ax.call(this,n),this.a=BB(yan(this.b.a,4),126)}function P5(n){return n.t||(n.t=new dp(n),sln(new xy(n),0,n.t)),n.t}function I5(){return Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])}function C5(){return cpn(),Pun(Gk(JIt,1),$Vn,249,0,[BIt,qIt,_It,FIt,HIt])}function O5(){return rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])}function A5(){return $Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])}function $5(){return Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])}function L5(){return Vvn(),Pun(Gk(Iht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])}function N5(){return YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])}function x5(){return LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Ist,Sst,Tst])}function D5(){return Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])}function R5(){var n,t;R5=O,iE(),t=new Ev,tLt=t,n=new Om,eLt=n}function K5(n){var t;return n.c||cL(t=n.r,88)&&(n.c=BB(t,26)),n.c}function _5(n){return n.e=3,n.d=n.Yb(),2!=n.e&&(n.e=0,!0)}function F5(n){return M$(n&SQn,n>>22&SQn,n<0?PQn:0)}function B5(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)jW(t[e])}function H5(n,t){var e,i;(e=BB(bfn(n.c,t),14))&&(i=e.gc(),e.$b(),n.d-=i)}function q5(n,t){var e;return!!(e=lsn(n,t.cd()))&&cV(e.e,t.dd())}function G5(n,t){return 0==t||0==n.e?n:t>0?Edn(n,t):Cxn(n,-t)}function z5(n,t){return 0==t||0==n.e?n:t>0?Cxn(n,t):Edn(n,-t)}function U5(n){if(dAn(n))return n.c=n.a,n.a.Pb();throw Hp(new yv)}function X5(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(uSn(),Mut)&&e.k==Mut}function W5(n){var t;return qan(t=new wY,n),hon(t,(HXn(),vgt),null),t}function V5(n,t,e){var i;return(i=n.Yg(t))>=0?n._g(i,e,!0):cOn(n,t,e)}function Q5(n,t,e,i){var r;for(r=0;r<Zit;r++)XG(n.a[t.g][r],e,i[t.g])}function Y5(n,t,e,i){var r;for(r=0;r<nrt;r++)UG(n.a[r][t.g],e,i[t.g])}function J5(n,t,e,i,r){j0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function Z5(n,t,e,i,r){E0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function n6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function t6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.b=e}function e6(n,t,e){jp.call(this,e),this.b=n,this.c=t,this.d=(Bwn(),z$t)}function i6(n,t,e){this.d=n,this.k=t?1:0,this.f=e?1:0,this.o=-1,this.p=0}function r6(n,t,e){var i;Tcn(i=new X$(n.a),n.a.a),jIn(i.f,t,e),n.a.a=i}function c6(n,t){n.qi(n.i+1),jL(n,n.i,n.oi(n.i,t)),n.bi(n.i++,t),n.ci()}function a6(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.di(e,t),n.ci()}function u6(n){var t;return yX(n),$on(t=new J6(ZW(n.length)),n),t}function o6(n){var t;return yX(n),JPn(t=n?new t_(n):HB(n.Kc())),sfn(t)}function s6(n,t){var e;return l1(t,n.c.length),e=n.c[t],PE(n.c,t,1),e}function h6(n,t){var e;return!(e=BB(n.c.xc(t),14))&&(e=n.ic(t)),n.pc(t,e)}function f6(n,t){var e,i;return kW(n),e=n,kW(t),e==(i=t)?0:e<i?-1:1}function l6(n){var t;return t=n.e+n.f,isNaN(t)&&WK(n.d)?n.d:t}function b6(n,t){return n.a?oO(n.a,n.b):n.a=new lN(n.d),aO(n.a,t),n}function w6(n,t){if(n<0||n>t)throw Hp(new Ay(dIn(n,t,"index")));return n}function d6(n,t,e,i){var r;return vTn(r=x8(ANt,hQn,25,t,15,1),n,t,e,i),r}function g6(n,t){var e;e=n.q.getHours()+(t/60|0),n.q.setMinutes(t),lBn(n,e)}function p6(n,t){return e.Math.min(W8(t.a,n.d.d.c),W8(t.b,n.d.d.c))}function v6(n,t){return XC(t)?null==t?gAn(n.f,null):Gan(n.g,t):gAn(n.f,t)}function m6(n){this.c=n,this.a=new Wb(this.c.a),this.b=new Wb(this.c.b)}function y6(){this.e=new Np,this.c=new Np,this.d=new Np,this.b=new Np}function k6(){this.g=new Bv,this.b=new Bv,this.a=new Np,this.k=new Np}function j6(n,t,e){this.a=n,this.c=t,this.d=e,WB(t.e,this),WB(e.b,this)}function E6(n,t){gO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function T6(n,t){pO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function M6(n,t){vO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function S6(n,t,e){this.a=n,this.b=t,this.c=e,WB(n.t,this),WB(t.i,this)}function P6(){this.b=new YT,this.a=new YT,this.b=new YT,this.a=new YT}function I6(){I6=O,TMt=new up("org.eclipse.elk.labels.labelManager")}function C6(){C6=O,est=new iR("separateLayerConnections",(Cun(),ast))}function O6(){O6=O,Myt=new uI("REGULAR",0),Tyt=new uI("CRITICAL",1)}function A6(){A6=O,Zvt=new XP("STACKED",0),Jvt=new XP("SEQUENCED",1)}function $6(){$6=O,nTt=new TI("FIXED",0),ZEt=new TI("CENTER_NODE",1)}function L6(n,t){var e;return e=xGn(n,t),n.b=new mrn(e.c.length),yqn(n,e)}function N6(n,t,e){return++n.e,--n.f,BB(n.d[t].$c(e),133).dd()}function x6(n){var t;return n.a||cL(t=n.r,148)&&(n.a=BB(t,148)),n.a}function D6(n){return n.a?n.e?D6(n.e):null:n}function R6(n,t){return n.p<t.p?1:n.p>t.p?-1:0}function K6(n,t){return kW(t),n.c<n.d&&(n.ze(t,n.c++),!0)}function _6(n,t){return!!hU(n.a,t)&&(v6(n.a,t),!0)}function F6(n){var t;return t=n.cd(),RB(BB(n.dd(),14).Nc(),new Vf(t))}function B6(n){var t;return t=BB(VU(n.b,n.b.length),9),new YK(n.a,t,n.c)}function H6(n){return Qln(n),new AD(n,new ZB(n,n.a.e,4|n.a.d))}function q6(n){var t;for(EW(n),t=0;n.a.sd(new fn);)t=rbn(t,1);return t}function G6(n,t,e){var i,r;for(i=0,r=0;r<t.length;r++)i+=n.$f(t[r],i,e)}function z6(n,t){var e;n.C&&((e=BB(oV(n.b,t),124).n).d=n.C.d,e.a=n.C.a)}function U6(n,t,e){return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),n.a[t][e]}function X6(n,t){ODn(),this.e=n,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[t])}function W6(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function V6(n){var t,e,i,r;r=n.d,t=n.a,e=n.b,i=n.c,n.d=e,n.a=i,n.b=r,n.c=t}function Q6(n,t,e,i){mFn(n,t,e,pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))}function Y6(n,t){OTn(t,"Label management",1),iO(mMn(n,(I6(),TMt))),HSn(t)}function J6(n){xA(this),vH(n>=0,"Initial capacity must not be negative")}function Z6(){Z6=O,Wit=lhn((Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])))}function n8(){n8=O,trt=lhn((J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])))}function t8(){t8=O,urt=lhn((G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])))}function e8(){e8=O,Zet=lhn((qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])))}function i8(){i8=O,Lat=lhn((q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Cat,Aat])))}function r8(){r8=O,gut=lhn((Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])))}function c8(){c8=O,bht=lhn((Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])))}function a8(){a8=O,vht=lhn((uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])))}function u8(){u8=O,Nht=lhn((Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])))}function o8(){o8=O,_st=lhn((Irn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))}function s8(){s8=O,Oft=lhn((z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Ift,Sft])))}function h8(){h8=O,Mft=lhn((Kan(),Pun(Gk(Cft,1),$Vn,292,0,[jft,Eft,kft])))}function f8(){f8=O,svt=lhn((Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])))}function l8(){l8=O,Yvt=lhn((Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])))}function b8(){b8=O,Rvt=lhn((mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])))}function w8(){w8=O,Uvt=lhn((ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])))}function d8(){d8=O,gmt=lhn(($un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])))}function g8(){g8=O,amt=lhn((Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])))}function p8(){p8=O,fmt=lhn((dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])))}function v8(){v8=O,Nmt=lhn((oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])))}function m8(){m8=O,rjt=lhn((Ibn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])))}function y8(){y8=O,bjt=lhn((Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])))}function k8(){k8=O,eEt=lhn((Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])))}function j8(){j8=O,Qjt=lhn((Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])))}function E8(){E8=O,UEt=lhn((Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])))}function T8(){T8=O,kIt=lhn((ufn(),Pun(Gk(SIt,1),$Vn,334,0,[vIt,pIt,mIt])))}function M8(){M8=O,VPt=lhn((Rtn(),Pun(Gk(nIt,1),$Vn,272,0,[zPt,UPt,XPt])))}function S8(){return QEn(),Pun(Gk(aCt,1),$Vn,98,0,[YIt,QIt,VIt,UIt,WIt,XIt])}function P8(n,t){return!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),rdn(n.o,t)}function I8(n){return!n.g&&(n.g=new oo),!n.g.d&&(n.g.d=new lp(n)),n.g.d}function C8(n){return!n.g&&(n.g=new oo),!n.g.a&&(n.g.a=new bp(n)),n.g.a}function O8(n){return!n.g&&(n.g=new oo),!n.g.b&&(n.g.b=new fp(n)),n.g.b}function A8(n){return!n.g&&(n.g=new oo),!n.g.c&&(n.g.c=new wp(n)),n.g.c}function $8(n,t,e){var i,r;for(r=new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function L8(n,t,e){var i,r;if(null!=e)for(i=0;i<t;++i)r=e[i],n.fi(i,r)}function N8(n,t,e,i){var r;return AFn(r=x8(ANt,hQn,25,t+1,15,1),n,t,e,i),r}function x8(n,t,e,i,r,c){var a;return a=Bmn(r,i),10!=r&&Pun(Gk(n,c),t,e,r,a),a}function D8(n,t,e,i){return e&&(i=e.gh(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function R8(n,t,e,i){return e&&(i=e.ih(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function K8(n,t,e){BB(n.b,65),BB(n.b,65),BB(n.b,65),Otn(n.a,new N_(e,t,n))}function _8(n,t,e){if(n<0||t>e||t<n)throw Hp(new Ok(mYn+n+kYn+t+hYn+e))}function F8(n){if(!n)throw Hp(new Fy("Unable to add element to queue"))}function B8(n){n?(this.c=n,this.b=null):(this.c=null,this.b=new Np)}function H8(n,t){PS.call(this,n,t),this.a=x8(Ket,kVn,436,2,0,1),this.b=!0}function q8(n){non.call(this,n,0),jx(this),this.d.b=this.d,this.d.a=this.d}function G8(n){var t;return 0==(t=n.b).b?null:BB(Dpn(t,0),188).b}function z8(n,t){var e;return(e=new q).c=!0,e.d=t.dd(),YGn(n,t.cd(),e)}function U8(n,t){var e;e=n.q.getHours()+(t/3600|0),n.q.setSeconds(t),lBn(n,e)}function X8(n,t,e){var i;(i=n.b[e.c.p][e.p]).b+=t.b,i.c+=t.c,i.a+=t.a,++i.a}function W8(n,t){var i,r;return i=n.a-t.a,r=n.b-t.b,e.Math.sqrt(i*i+r*r)}function V8(){V8=O,cht=new EP("QUADRATIC",0),aht=new EP("SCANLINE",1)}function Q8(){Q8=O,mmt=WG(dq(new B2,(yMn(),Rat),(lWn(),kot)),Bat,qot)}function Y8(){return wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])}function J8(){return wvn(),Pun(Gk(nSt,1),$Vn,248,0,[IMt,AMt,$Mt,LMt,CMt,OMt])}function Z8(){return $Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])}function n9(){return JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])}function t9(){return Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])}function e9(){return TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])}function i9(){return gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])}function r9(){return DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])}function c9(){return lCn(),Pun(Gk(CCt,1),$Vn,273,0,[rCt,eCt,iCt,tCt,nCt,cCt])}function a9(){return nMn(),Pun(Gk(yIt,1),$Vn,312,0,[aIt,rIt,uIt,eIt,cIt,iIt])}function u9(){return uSn(),Pun(Gk($ut,1),$Vn,267,0,[Iut,Put,Mut,Cut,Sut,Tut])}function o9(n){Mx(!!n.c),p2(n.e,n),n.c.Qb(),n.c=null,n.b=dun(n),bD(n.e,n)}function s9(n){return p2(n.c.a.e,n),Px(n.b!=n.c.a.d),n.a=n.b,n.b=n.b.a,n.a}function h9(n){var t;return n.a||-1==n.b||(t=n.c.Tg(),n.a=itn(t,n.b)),n.a}function f9(n,t){return!(n.hi()&&n.Hc(t)||(n.Yh(t),0))}function l9(n,t){return OY(t,"Horizontal alignment cannot be null"),n.b=t,n}function b9(n,t,e){var i;return wWn(),i=ZUn(n,t),e&&i&&gW(n)&&(i=null),i}function w9(n,t,e){var i;for(i=n.Kc();i.Ob();)ZRn(BB(i.Pb(),37),t,e)}function d9(n,t){var e;for(e=t.Kc();e.Ob();)$Kn(n,BB(e.Pb(),37),0,0)}function g9(n,t,i){var r;n.d[t.g]=i,(r=n.g.c)[t.g]=e.Math.max(r[t.g],i+1)}function p9(n,t){var e,i,r;return r=n.r,i=n.d,(e=cHn(n,t,!0)).b!=r||e.a!=i}function v9(n,t){return lS(n.e,t)||Jgn(n.e,t,new ipn(t)),BB(lnn(n.e,t),113)}function m9(n,t,e,i){return kW(n),kW(t),kW(e),kW(i),new jU(n,t,new G)}function y9(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=new Zz(this,t,e,i)}function k9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.b=e}function j9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.a=e}function E9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function T9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function M9(n,t,e){var i;return(i=$$n(n.b,t))?NHn(F7(n,i),e):null}function S9(n,t){var e;return(e=n.Yg(t))>=0?n._g(e,!0,!0):cOn(n,t,!0)}function P9(n,t){return Pln(Gy(MD(mMn(n,(hWn(),Tlt)))),Gy(MD(mMn(t,Tlt))))}function I9(){I9=O,Ukt=ogn(ogn(FM(new B2,(zyn(),Kyt)),(DPn(),Qyt)),Uyt)}function C9(n,t,e){var i;return i=Non(n,t,e),n.b=new mrn(i.c.length),sDn(n,i)}function O9(n){if(n.b<=0)throw Hp(new yv);return--n.b,n.a-=n.c.c,iln(n.a)}function A9(n){var t;if(!n.a)throw Hp(new lV);return t=n.a,n.a=JJ(n.a),t}function $9(n){for(;!n.a;)if(!TK(n.c,new pw(n)))return!1;return!0}function L9(n){return yX(n),cL(n,198)?BB(n,198):new ol(n)}function N9(n){x9(),BB(n.We((sWn(),fPt)),174).Fc((lCn(),iCt)),n.Ye(hPt,null)}function x9(){x9=O,tMt=new bu,iMt=new wu,eMt=vsn((sWn(),hPt),tMt,qSt,iMt)}function D9(){D9=O,cjt=new pI("LEAF_NUMBER",0),ajt=new pI("NODE_SIZE",1)}function R9(n,t,e){n.a=t,n.c=e,n.b.a.$b(),yQ(n.d),n.e.a.c=x8(Ant,HWn,1,0,5,1)}function K9(n){n.a=x8(ANt,hQn,25,n.b+1,15,1),n.c=x8(ANt,hQn,25,n.b,15,1),n.d=0}function _9(n,t){n.a.ue(t.d,n.b)>0&&(WB(n.c,new mH(t.c,t.d,n.d)),n.b=t.d)}function F9(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.g[t]}function B9(n,t,e){if(xsn(n,e),null!=e&&!n.wj(e))throw Hp(new lv);return e}function H9(n){var t;if(n.Ek())for(t=n.i-1;t>=0;--t)Wtn(n,t);return N3(n)}function q9(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function G9(n,t){var e;return c4(t),(e=m7(n.slice(0,t),n)).length=t,e}function z9(n,t,e,i){PQ(),i=i||wet,gIn(n.slice(t,e),n,t,e,-t,i)}function U9(n,t,e,i,r){return t<0?cOn(n,e,i):BB(e,66).Nj().Pj(n,n.yh(),t,i,r)}function X9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function W9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function V9(n,t){if(t.a)throw Hp(new dy(CYn));TU(n.a,t),t.a=n,!n.j&&(n.j=t)}function Q9(n,t){vO.call(this,t.rd(),-16449&t.qd()),kW(n),this.a=n,this.c=t}function Y9(n,t){var e,i;return i=t/n.c.Hd().gc()|0,e=t%n.c.Hd().gc(),U6(n,i,e)}function J9(){J9=O,Yit=new GS(cJn,0),Qit=new GS(eJn,1),Jit=new GS(aJn,2)}function Z9(){Z9=O,Net=new gS("All",0),xet=new LA,Det=new A$,Ret=new NA}function n7(){n7=O,_et=lhn((Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])))}function t7(){t7=O,rut=lhn((Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])))}function e7(){e7=O,_rt=lhn((Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])))}function i7(){i7=O,zrt=lhn((Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])))}function r7(){r7=O,ict=lhn((qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])))}function c7(){c7=O,Hyt=lhn((zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])))}function a7(){a7=O,ost=lhn((Cun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])))}function u7(){u7=O,zjt=lhn((Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])))}function o7(){o7=O,Est=lhn((Oun(),Pun(Gk(Cst,1),$Vn,411,0,[vst,mst,yst,kst])))}function s7(){s7=O,dvt=lhn((bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])))}function h7(){h7=O,fOt=lhn((Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])))}function f7(){f7=O,PIt=lhn((Xyn(),Pun(Gk(RIt,1),$Vn,285,0,[MIt,jIt,EIt,TIt])))}function l7(){l7=O,tIt=lhn((Mbn(),Pun(Gk(oIt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])))}function b7(){b7=O,rOt=lhn((Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZCt,tOt,nOt])))}function w7(){w7=O,BCt=lhn((mdn(),Pun(Gk(YCt,1),$Vn,374,0,[KCt,_Ct,RCt,DCt])))}function d7(){d7=O,qBn(),HLt=RQn,BLt=KQn,GLt=new Nb(RQn),qLt=new Nb(KQn)}function g7(){g7=O,Ght=new OP(QZn,0),qht=new OP("IMPROVE_STRAIGHTNESS",1)}function p7(n,t){return hH(),WB(n,new rC(t,iln(t.e.c.length+t.g.c.length)))}function v7(n,t){return hH(),WB(n,new rC(t,iln(t.e.c.length+t.g.c.length)))}function m7(n,t){return 10!=vnn(t)&&Pun(tsn(t),t.hm,t.__elementTypeId$,vnn(t),n),n}function y7(n,t){var e;return-1!=(e=E7(n,t,0))&&(s6(n,e),!0)}function k7(n,t){var e;return(e=BB(v6(n.e,t),387))?(RH(e),e.e):null}function j7(n){var t;return JO(n)&&(t=0-n,!isNaN(t))?t:uan(aon(n))}function E7(n,t,e){for(;e<n.c.length;++e)if(cV(t,n.c[e]))return e;return-1}function T7(n,t,e){var i;return EW(n),(i=new sn).a=t,n.a.Nb(new CS(i,e)),i.a}function M7(n){var t;return EW(n),t=x8(xNt,qQn,25,0,15,1),gE(n.a,new ww(t)),t}function S7(n){var t;return t=BB(xq(n.j,0),11),BB(mMn(t,(hWn(),dlt)),11)}function P7(n){var t;if(!Zin(n))throw Hp(new yv);return n.e=1,t=n.d,n.d=null,t}function I7(n,t){var e;this.f=n,this.b=t,e=BB(RX(n.b,t),283),this.c=e?e.b:null}function C7(){G_(),this.b=new xp,this.f=new xp,this.g=new xp,this.e=new xp}function O7(n,t){this.a=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.a),this.b=t}function A7(n){var t;for(t=n.p+1;t<n.c.a.c.length;++t)--BB(xq(n.c.a,t),10).p}function $7(n){var t;null!=(t=n.Ai())&&-1!=n.d&&BB(t,92).Ng(n),n.i&&n.i.Fi()}function L7(n){V$(this),this.g=n?IY(n,n.$d()):null,this.f=n,jQ(this),this._d()}function N7(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),Fh(this),this.c=n,this.b=e}function x7(n,t,e,i,r){return kW(n),kW(t),kW(e),kW(i),kW(r),new jU(n,t,i)}function D7(n,t){if(t<0)throw Hp(new Ay(n5n+t));return g3(n,t+1),xq(n.j,t)}function R7(n,t,e,i){if(!n)throw Hp(new _y($Rn(t,Pun(Gk(Ant,1),HWn,1,5,[e,i]))))}function K7(n,t){return cV(t,xq(n.f,0))||cV(t,xq(n.f,1))||cV(t,xq(n.f,2))}function _7(n,t){LK(BB(BB(n.f,33).We((sWn(),uPt)),98))&&Qbn(yV(BB(n.f,33)),t)}function F7(n,t){var e,i;return!(i=(e=BB(t,675)).Oh())&&e.Rh(i=new RC(n,t)),i}function B7(n,t){var e,i;return!(i=(e=BB(t,677)).pk())&&e.tk(i=new K0(n,t)),i}function H7(n){return n.b||(n.b=new JG(n,VAt,n),!n.a&&(n.a=new oR(n,n))),n.b}function q7(){q7=O,Oat=new WS("XY",0),Cat=new WS("X",1),Aat=new WS("Y",2)}function G7(){G7=O,crt=new zS("TOP",0),rrt=new zS(eJn,1),irt=new zS(oJn,2)}function z7(){z7=O,Pft=new xP(QZn,0),Ift=new xP("TOP",1),Sft=new xP(oJn,2)}function U7(){U7=O,Kvt=new GP("INPUT_ORDER",0),_vt=new GP("PORT_DEGREE",1)}function X7(){X7=O,btt=M$(SQn,SQn,524287),wtt=M$(0,0,IQn),dtt=F5(1),F5(2),gtt=F5(0)}function W7(n,t,e){n.a.c=x8(Ant,HWn,1,0,5,1),Xqn(n,t,e),0==n.a.c.length||f_n(n,t)}function V7(n){var t,e;return YU(n,0,e=n.length,t=x8(ONt,WVn,25,e,15,1),0),t}function Q7(n){var t;return n.dh()||(t=bX(n.Tg())-n.Ah(),n.ph().bk(t)),n.Pg()}function Y7(n){var t;return null==(t=een(yan(n,32)))&&(fgn(n),t=een(yan(n,32))),t}function J7(n,t){var e;return(e=Awn(n.d,t))>=0?Zpn(n,e,!0,!0):cOn(n,t,!0)}function Z7(n,t){var e,i;return MM(),e=f3(n),i=f3(t),!!e&&!!i&&!Kpn(e.k,i.k)}function nnn(n,t){Pen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function tnn(n,t){Ien(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function enn(n,t){Sen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function inn(n,t){Men(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function rnn(n){(this.q?this.q:(SQ(),SQ(),het)).Ac(n.q?n.q:(SQ(),SQ(),het))}function cnn(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function ann(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function unn(n,t){Vrt=new it,ect=t,BB((Wrt=n).b,65),K8(Wrt,Vrt,null),uqn(Wrt)}function onn(n,t,e){var i;return i=n.g[t],jL(n,t,n.oi(t,e)),n.gi(t,e,i),n.ci(),i}function snn(n,t){var e;return(e=n.Xc(t))>=0&&(n.$c(e),!0)}function hnn(n){var t;return n.d!=n.r&&(t=Ckn(n),n.e=!!t&&t.Cj()==E9n,n.d=t),n.e}function fnn(n,t){var e;for(yX(n),yX(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function lnn(n,t){var e;return(e=BB(RX(n.e,t),387))?(uL(n,e),e.e):null}function bnn(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function wnn(n,t){return Qln(n),new Rq(n,new KK(new M6(t,n.a)))}function dnn(n,t){var e=n.a[t],i=(Zun(),ftt)[typeof e];return i?i(e):khn(typeof e)}function gnn(n){switch(n.g){case 0:return DWn;case 1:return-1;default:return 0}}function pnn(n){return Kkn(n,(X7(),gtt))<0?-IN(aon(n)):n.l+n.m*CQn+n.h*OQn}function vnn(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function mnn(n){var t;return null!=(t=0==n.b.c.length?null:xq(n.b,0))&&hrn(n,0),t}function ynn(n,t){for(;t[0]<n.length&&GO(" \t\r\n",YTn(fV(n,t[0])))>=0;)++t[0]}function knn(n,t){this.e=t,this.a=Van(n),this.a<54?this.f=j2(n):this.c=npn(n)}function jnn(n,t,e,i){wWn(),Ap.call(this,26),this.c=n,this.a=t,this.d=e,this.b=i}function Enn(n,t,e){var i,r;for(i=10,r=0;r<e-1;r++)t<i&&(n.a+="0"),i*=10;n.a+=t}function Tnn(n,t){var e;for(e=0;n.e!=n.i.gc();)gq(t,kpn(n),iln(e)),e!=DWn&&++e}function Mnn(n,t){var e;for(++n.d,++n.c[t],e=t+1;e<n.a.length;)++n.a[e],e+=e&-e}function Snn(n,t){var e,i,r;r=t.c.i,i=(e=BB(RX(n.f,r),57)).d.c-e.e.c,Yrn(t.a,i,0)}function Pnn(n){var t,e;return t=n+128,!(e=(jq(),jtt)[t])&&(e=jtt[t]=new $b(n)),e}function Inn(n,t){var e;return kW(t),xnn(!!(e=n[":"+t]),Pun(Gk(Ant,1),HWn,1,5,[t])),e}function Cnn(n){var t,e;if(n.b){e=null;do{t=n.b,n.b=null,e=sPn(t,e)}while(n.b);n.b=e}}function Onn(n){var t,e;if(n.a){e=null;do{t=n.a,n.a=null,e=sPn(t,e)}while(n.a);n.a=e}}function Ann(n){var t;for(++n.a,t=n.c.a.length;n.a<t;++n.a)if(n.c.b[n.a])return}function $nn(n,t){var e,i;for(e=(i=t.c)+1;e<=t.f;e++)n.a[e]>n.a[i]&&(i=e);return i}function Lnn(n,t){var e;return 0==(e=Cbn(n.e.c,t.e.c))?Pln(n.e.d,t.e.d):e}function Nnn(n,t){return 0==t.e||0==n.e?eet:($On(),ANn(n,t))}function xnn(n,t){if(!n)throw Hp(new _y(YNn("Enum constant undefined: %s",t)))}function Dnn(){Dnn=O,uut=new St,out=new Tt,cut=new At,aut=new $t,sut=new Lt}function Rnn(){Rnn=O,vit=new BS("BY_SIZE",0),mit=new BS("BY_SIZE_AND_SHAPE",1)}function Knn(){Knn=O,Dct=new XS("EADES",0),Rct=new XS("FRUCHTERMAN_REINGOLD",1)}function _nn(){_nn=O,Sht=new PP("READING_DIRECTION",0),Pht=new PP("ROTATION",1)}function Fnn(){Fnn=O,Mht=lhn((Vvn(),Pun(Gk(Iht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])))}function Bnn(){Bnn=O,jvt=lhn((Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])))}function Hnn(){Hnn=O,Ost=lhn((LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Ist,Sst,Tst])))}function qnn(){qnn=O,zlt=lhn((Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])))}function Gnn(){Gnn=O,sTt=lhn(($Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])))}function znn(){znn=O,bMt=lhn((rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])))}function Unn(){Unn=O,BEt=lhn((YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])))}function Xnn(){Xnn=O,qat=lhn((yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])))}function Wnn(){Wnn=O,GPt=lhn((Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])))}function Vnn(){Vnn=O,zIt=lhn((cpn(),Pun(Gk(JIt,1),$Vn,249,0,[BIt,qIt,_It,FIt,HIt])))}function Qnn(){Qnn=O,OCt=lhn((kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])))}function Ynn(n,t){var e;return(e=BB(RX(n.a,t),134))||(e=new Zn,VW(n.a,t,e)),e}function Jnn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.a==n}function Znn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.i==n}function ntn(n,t){return kW(t),Dz(n),!!n.d.Ob()&&(t.td(n.d.Pb()),!0)}function ttn(n){return Vhn(n,DWn)>0?DWn:Vhn(n,_Vn)<0?_Vn:dG(n)}function etn(n){return n<3?(lin(n,CVn),n+1):n<OVn?IJ(n/.75+1):DWn}function itn(n,t){var e;return null==n.i&&qFn(n),e=n.i,t>=0&&t<e.length?e[t]:null}function rtn(n,t,e){var i;if(null==t)throw Hp(new gv);return i=zJ(n,t),i4(n,t,e),i}function ctn(n){return n.a>=-.01&&n.a<=fJn&&(n.a=0),n.b>=-.01&&n.b<=fJn&&(n.b=0),n}function atn(n,t){return t==(c_(),c_(),Met)?n.toLocaleLowerCase():n.toLowerCase()}function utn(n){return(0!=(2&n.i)?"interface ":0!=(1&n.i)?"":"class ")+(ED(n),n.o)}function otn(n){var t;t=new $m,f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),t)}function stn(n,t){var e;return e=t>0?t-1:t,$j(Lj(Fen(LH(new Xm,e),n.n),n.j),n.k)}function htn(n,t,e,i){n.j=-1,qOn(n,EPn(n,t,e),(ZM(),BB(t,66).Mj().Ok(i)))}function ftn(n){this.g=n,this.f=new Np,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function ltn(n){this.b=new Np,this.a=new Np,this.c=new Np,this.d=new Np,this.e=n}function btn(n,t){this.a=new xp,this.e=new xp,this.b=(Mhn(),uvt),this.c=n,this.b=t}function wtn(n,t,e){NR.call(this),xtn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function dtn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(ry(),znt)}function gtn(n){if(n<0)throw Hp(new _y("Illegal Capacity: "+n));this.g=this.ri(n)}function ptn(n,t){if(0>n||n>t)throw Hp(new Tk("fromIndex: 0, toIndex: "+n+hYn+t))}function vtn(n){var t;if(n.a==n.b.a)throw Hp(new yv);return t=n.a,n.c=t,n.a=n.a.e,t}function mtn(n){var t;Mx(!!n.c),t=n.c.a,Atn(n.d,n.c),n.b==n.c?n.b=t:--n.a,n.c=null}function ytn(n,t){var e;return Qln(n),e=new vQ(n,n.a.rd(),4|n.a.qd(),t),new Rq(n,e)}function ktn(n,t){var e,i;return(e=BB(lfn(n.d,t),14))?(i=t,n.e.pc(i,e)):null}function jtn(n,t){var e;for(e=n.Kc();e.Ob();)hon(BB(e.Pb(),70),(hWn(),ult),t)}function Etn(n){var t;return(t=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,t=0),t}function Ttn(n,t,i){var r;Fkn(i,r=e.Math.max(0,n.b/2-.5),1),WB(t,new iP(i,r))}function Mtn(n,t,e){return IJ(HH(n.a.e[BB(t.a,10).p]-n.a.e[BB(e.a,10).p]))}function Stn(n,t,e,i,r,c){var a;SZ(a=W5(i),r),MZ(a,c),JCn(n.a,i,new L_(a,t,e.f))}function Ptn(n,t){var e;if(!(e=NNn(n.Tg(),t)))throw Hp(new _y(r6n+t+u6n));return e}function Itn(n,t){var e;for(e=n;JJ(e);)if((e=JJ(e))==t)return!0;return!1}function Ctn(n,t){var e,i,r;for(i=t.a.cd(),e=BB(t.a.dd(),14).gc(),r=0;r<e;r++)n.td(i)}function Otn(n,t){var e,i,r,c;for(kW(t),r=0,c=(i=n.c).length;r<c;++r)e=i[r],t.td(e)}function Atn(n,t){var e;return e=t.c,t.a.b=t.b,t.b.a=t.a,t.a=t.b=null,t.c=null,--n.b,e}function $tn(n,t){return!(!t||n.b[t.g]!=t||($X(n.b,t.g,null),--n.c,0))}function Ltn(n,t){return!!Zrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))}function Ntn(n,t){LK(BB(mMn(BB(n.e,10),(HXn(),ept)),98))&&(SQ(),m$(BB(n.e,10).j,t))}function xtn(n){n.b=(J9(),Qit),n.f=(G7(),rrt),n.d=(lin(2,AVn),new J6(2)),n.e=new Gj}function Dtn(){Dtn=O,Git=new qS("BEGIN",0),zit=new qS(eJn,1),Uit=new qS("END",2)}function Rtn(){Rtn=O,zPt=new _I(eJn,0),UPt=new _I("HEAD",1),XPt=new _I("TAIL",2)}function Ktn(){return hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])}function _tn(){return PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])}function Ftn(){return kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])}function Btn(){return sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Cvt,Tvt,Pvt,Mvt,Svt,Evt,Ivt,Ovt])}function Htn(){Htn=O,ZIt=lhn((QEn(),Pun(Gk(aCt,1),$Vn,98,0,[YIt,QIt,VIt,UIt,WIt,XIt])))}function qtn(){qtn=O,nrt=(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,Zit=nrt}function Gtn(n){this.b=(yX(n),new t_(n)),this.a=new Np,this.d=new Np,this.e=new Gj}function ztn(n){var t;return(t=e.Math.sqrt(n.a*n.a+n.b*n.b))>0&&(n.a/=t,n.b/=t),n}function Utn(n){var t;return n.w?n.w:((t=V1(n))&&!t.kh()&&(n.w=t),t)}function Xtn(n){var t;return null==n?null:VTn(t=BB(n,190),t.length)}function Wtn(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.li(t,n.g[t])}function Vtn(n){var t,e;for(t=n.a.d.j,e=n.c.d.j;t!=e;)orn(n.b,t),t=Mln(t);orn(n.b,t)}function Qtn(n){var t;for(t=0;t<n.c.length;t++)(l1(t,n.c.length),BB(n.c[t],11)).p=t}function Ytn(n,t,e){var i,r,c;for(r=t[e],i=0;i<r.length;i++)c=r[i],n.e[c.c.p][c.p]=i}function Jtn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r<c;++r)e=i[r],lL(n.g,e).a=t}function Ztn(n,t){var e;for(e=spn(n,0);e.b!=e.d.c;)UR(BB(b3(e),8),t);return n}function nen(n,t){return XR(B$(BB(RX(n.g,t),8)),_$(BB(RX(n.f,t),460).b))}function ten(n){var t;return p2(n.e,n),Px(n.b),n.c=n.a,t=BB(n.a.Pb(),42),n.b=dun(n),t}function een(n){var t;return JH(null==n||Array.isArray(n)&&!((t=vnn(n))>=14&&t<=16)),n}function ien(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function ren(n,t,e){var i,r;i=t;do{r=Gy(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function cen(n,t){var e,i;i=n.a,e=Qfn(n,t,null),i!=t&&!n.e&&(e=azn(n,t,e)),e&&e.Fi()}function aen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function uen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function oen(n,t){return _Mn(),E$(n.b.c.length-n.e.c.length,t.b.c.length-t.e.c.length)}function sen(n,t){return Zj(Jrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function hen(){hen=O,Aut=lhn((uSn(),Pun(Gk($ut,1),$Vn,267,0,[Iut,Put,Mut,Cut,Sut,Tut])))}function fen(){fen=O,tSt=lhn((wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])))}function len(){len=O,xMt=lhn((wvn(),Pun(Gk(nSt,1),$Vn,248,0,[IMt,AMt,$Mt,LMt,CMt,OMt])))}function ben(){ben=O,rht=lhn(($Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])))}function wen(){wen=O,oft=lhn((JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])))}function den(){den=O,nft=lhn((Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])))}function gen(){gen=O,rvt=lhn((TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])))}function pen(){pen=O,Hht=lhn((gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])))}function ven(){ven=O,Jyt=lhn((DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])))}function men(){men=O,uCt=lhn((lCn(),Pun(Gk(CCt,1),$Vn,273,0,[rCt,eCt,iCt,tCt,nCt,cCt])))}function yen(){yen=O,sIt=lhn((nMn(),Pun(Gk(yIt,1),$Vn,312,0,[aIt,rIt,uIt,eIt,cIt,iIt])))}function ken(){return n$n(),Pun(Gk(GIt,1),$Vn,93,0,[CIt,IIt,AIt,DIt,xIt,NIt,$It,LIt,OIt])}function jen(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,0,e,n.a))}function Een(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.b))}function Ten(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.b))}function Men(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.f))}function Sen(n,t){var e;e=n.g,n.g=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.g))}function Pen(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,5,e,n.i))}function Ien(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,6,e,n.j))}function Cen(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.j))}function Oen(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.c))}function Aen(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,2,e,n.k))}function $en(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,2,e,n.d))}function Len(n,t){var e;e=n.s,n.s=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,4,e,n.s))}function Nen(n,t){var e;e=n.t,n.t=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,5,e,n.t))}function xen(n,t){var e;e=n.F,n.F=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,e,t))}function Den(n,t){var e;return(e=BB(RX((nS(),mAt),n),55))?e.xj(t):x8(Ant,HWn,1,t,5,1)}function Ren(n,t){var e;return t in n.a&&(e=zJ(n,t).he())?e.a:null}function Ken(n,t){var e,i;return tE(),i=new uo,!!t&&CNn(i,t),xin(e=i,n),e}function _en(n,t,e){if(xsn(n,e),!n.Bk()&&null!=e&&!n.wj(e))throw Hp(new lv);return e}function Fen(n,t){return n.n=t,n.n?(n.f=new Np,n.e=new Np):(n.f=null,n.e=null),n}function Ben(n,t,e,i,r,c){var a;return Qen(e,a=mX(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Hen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=e}function qen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=e}function Gen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=e}function zen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=e}function Uen(n,t,e,i,r){this.d=t,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=e}function Xen(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r<c;++r)e=i[r],V9(n.a,e);return n}function Wen(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)yX(t[e]);return new AO(n)}function Ven(n){var t=/function(?:\s+([\w$]+))?\s*\(/.exec(n);return t&&t[1]||zVn}function Qen(n,t){if(n){t.n=n;var e=UJ(t);e?e.gm=t:SWn[n]=[t]}}function Yen(n,t,i){var r;return r=n.length,_In(n,0,t,0,e.Math.min(i,r),!0),t}function Jen(n,t,e){var i,r;for(r=t.Kc();r.Ob();)i=BB(r.Pb(),79),TU(n,BB(e.Kb(i),33))}function Zen(){YE();for(var n=PWn,t=0;t<arguments.length;t++)n.push(arguments[t])}function nin(n,t){var e,i,r;for(i=0,r=(e=t).length;i<r;++i)r5(n,e[i],n.c.b,n.c)}function tin(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),WB(n.a,t)}function ein(n){Mx(n.c>=0),rgn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function iin(n){return n.a<54?n.f<0?-1:n.f>0?1:0:(!n.c&&(n.c=yhn(n.f)),n.c).e}function rin(n){if(!(n>=0))throw Hp(new _y("tolerance ("+n+") must be >= 0"));return n}function cin(){return cMt||ksn(cMt=new ORn,Pun(Gk(_it,1),HWn,130,0,[new Nf])),cMt}function ain(){ain=O,Gvt=new zP(hJn,0),Hvt=new zP("INPUT",1),qvt=new zP("OUTPUT",2)}function uin(){uin=O,wht=new MP("ARD",0),ght=new MP("MSD",1),dht=new MP("MANUAL",2)}function oin(){oin=O,Omt=new YP("BARYCENTER",0),Amt=new YP(E1n,1),$mt=new YP(T1n,2)}function sin(n,t){var e;if(e=n.gc(),t<0||t>e)throw Hp(new tK(t,e));return new RK(n,t)}function hin(n,t){var e;return cL(t,42)?n.c.Mc(t):(e=rdn(n,t),Wdn(n,t),e)}function fin(n,t,e){return Chn(n,t),Nrn(n,e),Len(n,0),Nen(n,1),nln(n,!0),Yfn(n,!0),n}function lin(n,t){if(n<0)throw Hp(new _y(t+" cannot be negative but was: "+n));return n}function bin(n,t){var e,i;for(e=0,i=n.gc();e<i;++e)if(cV(t,n.Xb(e)))return e;return-1}function win(n){var t;for(t=n.c.Cc().Kc();t.Ob();)BB(t.Pb(),14).$b();n.c.$b(),n.d=0}function din(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)QU(t=e[i],t.length,null)}function gin(n){var t,e;if(0==n)return 32;for(e=0,t=1;0==(t&n);t<<=1)++e;return e}function pin(n){var t;for(t=new Wb(eyn(n));t.a<t.c.c.length;)BB(n0(t),680).Gf()}function vin(n){vM(),this.g=new xp,this.f=new xp,this.b=new xp,this.c=new pJ,this.i=n}function min(){this.f=new Gj,this.d=new wm,this.c=new Gj,this.a=new Np,this.b=new Np}function yin(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=null,this.c=new lK(this,t,e,i)}function kin(n,t,e,i,r){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1,r||(this.o=-2-i-1)}function jin(){OL.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=k6n}function Ein(){return n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GCt,UCt,qCt,XCt,WCt,QCt,VCt,zCt,HCt])}function Tin(){return tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Cit])}function Min(){Min=O,Ott=Pun(Gk(ANt,1),hQn,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function Sin(){Sin=O,kmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)}function Pin(){Pin=O,jmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)}function Iin(){Iin=O,Mmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)}function Cin(){Cin=O,Imt=WG(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat,$ot)}function Oin(){Oin=O,hht=new TP("LAYER_SWEEP",0),sht=new TP(B1n,1),fht=new TP(QZn,2)}function Ain(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?BB(xq(e.a,i-1),10):null}function $in(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.k))}function Lin(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.f))}function Nin(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,e,n.i))}function xin(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.a))}function Din(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Rin(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Kin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function _in(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function Fin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,e,n.c))}function Bin(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.d))}function Hin(n,t){var e;e=n.D,n.D=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.D))}function qin(n,t){n.r>0&&n.c<n.r&&(n.c+=t,n.i&&n.i.d>0&&0!=n.g&&qin(n.i,t/n.r*n.i.d))}function Gin(n,t,e){var i;n.b=t,n.a=e,i=512==(512&n.a)?new Fm:new Dh,n.c=MDn(i,n.b,n.a)}function zin(n,t){return $xn(n.e,t)?(ZM(),hnn(t)?new lq(t,n):new xC(t,n)):new KC(t,n)}function Uin(n,t){return Jj(Zrn(n.a,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function Xin(n,t,e){return x7(n,new fw(t),new un,new lw(e),Pun(Gk(nit,1),$Vn,132,0,[]))}function Win(n){return 0>n?new VT:new $D(null,new m5(n+1,n))}function Vin(n,t){var e;return SQ(),e=new XT(1),XC(n)?mZ(e,n,t):jIn(e.f,n,t),new Xb(e)}function Qin(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function Yin(n){var t;return cL(t=mMn(n,(hWn(),dlt)),160)?mwn(BB(t,160)):null}function Jin(n){var t;return(n=e.Math.max(n,2))>(t=kon(n))?(t<<=1)>0?t:OVn:t}function Zin(n){switch(uN(3!=n.e),n.e){case 2:return!1;case 0:return!0}return _5(n)}function nrn(n,t){var e;return!!cL(t,8)&&(e=BB(t,8),n.a==e.a&&n.b==e.b)}function trn(n,t,e){var i,r;return r=t>>5,i=31&t,e0(jz(n.n[e][r],dG(yz(i,1))),3)}function ern(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)vjn(n,(e=BB(i.Pb(),42)).cd(),e.dd())}function irn(n,t){var e;e=new it,BB(t.b,65),BB(t.b,65),BB(t.b,65),Otn(t.a,new TB(n,e,t))}function rrn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,21,e,n.b))}function crn(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,e,n.d))}function arn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,13,e,n.j))}function urn(n,t,e){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i<e;r=r+1&c,++i)$X(t,i,n.a[r])}function orn(n,t){var e;return kW(t),e=t.g,!n.b[e]&&($X(n.b,e,t),++n.c,!0)}function srn(n,t){var e;return!((e=null==t?-1:E7(n.b,t,0))<0||(hrn(n,e),0))}function hrn(n,t){var e;e=s6(n.b,n.b.c.length-1),t<n.b.c.length&&(c5(n.b,t,e),KIn(n,t))}function frn(n,t){0==(k5(),Qet?null:t.c).length&&zD(t,new X),mZ(n.a,Qet?null:t.c,t)}function lrn(n,t){OTn(t,"Hierarchical port constraint processing",1),bpn(n),YXn(n),HSn(t)}function brn(n,t){var e,i;for(i=t.Kc();i.Ob();)e=BB(i.Pb(),266),n.b=!0,TU(n.e,e),e.b=n}function wrn(n,t){var e,i;return e=1-t,i=n.a[e],n.a[e]=i.a[t],i.a[t]=n,n.b=!0,i.b=!1,i}function drn(n,t){var e,i;return e=BB(mMn(n,(HXn(),spt)),8),i=BB(mMn(t,spt),8),Pln(e.b,i.b)}function grn(n){RG.call(this),this.b=Gy(MD(mMn(n,(HXn(),ypt)))),this.a=BB(mMn(n,Zdt),218)}function prn(n,t,e){G2.call(this,n,t,e),this.a=new xp,this.b=new xp,this.d=new Wd(this)}function vrn(n){this.e=n,this.d=new bE(etn(gz(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function mrn(n){this.b=n,this.a=x8(ANt,hQn,25,n+1,15,1),this.c=x8(ANt,hQn,25,n,15,1),this.d=0}function yrn(n,t,e){var i;return jxn(n,t,i=new Np,e,!0,!0),n.b=new mrn(i.c.length),i}function krn(n,t){var e;return(e=BB(RX(n.c,t),458))||((e=new cm).c=t,VW(n.c,e.c,e)),e}function jrn(n,t){var e=n.a,i=0;for(var r in e)e.hasOwnProperty(r)&&(t[i++]=r);return t}function Ern(n){return null==n.b?(YM(),YM(),x$t):n.Lk()?n.Kk():n.Jk()}function Trn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)Pen(t=BB(kpn(e),33),0),Ien(t,0)}function Mrn(){Mrn=O,sat=new up(OZn),hat=new up(AZn),oat=new up($Zn),uat=new up(LZn)}function Srn(){Srn=O,qut=new ZS("TO_INTERNAL_LTR",0),Hut=new ZS("TO_INPUT_DIRECTION",1)}function Prn(){Prn=O,Qkt=new dI("P1_NODE_PLACEMENT",0),Ykt=new dI("P2_EDGE_ROUTING",1)}function Irn(){Irn=O,Rst=new kP("START",0),Dst=new kP("MIDDLE",1),xst=new kP("END",2)}function Crn(){Crn=O,tst=new iR("edgelabelcenterednessanalysis.includelabel",(hN(),ptt))}function Orn(n,t){JT(AV(new Rq(null,new w1(new Ib(n.b),1)),new JI(n,t)),new nC(n,t))}function Arn(){this.c=new CE(0),this.b=new CE(B3n),this.d=new CE(F3n),this.a=new CE(JJn)}function $rn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)Ul(t=BB(e.Pb(),214),new HMn(t.e))}function Lrn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)zl(t=BB(e.Pb(),214),new Vz(t.f))}function Nrn(n,t){var e;e=n.zb,n.zb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.zb))}function xrn(n,t){var e;e=n.xb,n.xb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,e,n.xb))}function Drn(n,t){var e;e=n.yb,n.yb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.yb))}function Rrn(n,t){var e;(e=new Om).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function Krn(n,t){var e;(e=new pD).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function _rn(n,t){var e,i;for(z9(e=n.Pc(),0,e.length,t),i=0;i<e.length;i++)n._c(i,e[i])}function Frn(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),e|=n.Fc(i);return e}function Brn(n){var t,e,i;for(t=0,i=n.Kc();i.Ob();)t=~~(t+=null!=(e=i.Pb())?nsn(e):0);return t}function Hrn(n){var t;return 0==n?"UTC":(n<0?(n=-n,t="UTC+"):t="UTC-",t+bnn(n))}function qrn(n,t){var e;return cL(t,14)?(e=BB(t,14),n.Gc(e)):fnn(n,BB(yX(t),20).Kc())}function Grn(n,t,e){btn.call(this,t,e),this.d=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.d)}function zrn(n){n.a=null,n.e=null,n.b.c=x8(Ant,HWn,1,0,5,1),n.f.c=x8(Ant,HWn,1,0,5,1),n.c=null}function Urn(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function Xrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new xd(n)),t))))}function Wrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new Nd(n)),t))))}function Vrn(n,t){OTn(t,k1n,1),JT(wnn(new Rq(null,new w1(n.b,16)),new Zt),new ne),HSn(t)}function Qrn(n,t){var e,i;return e=BB(ZAn(n,(Uyn(),Ljt)),19),i=BB(ZAn(t,Ljt),19),E$(e.a,i.a)}function Yrn(n,t,e){var i,r;for(r=spn(n,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a+=t,i.b+=e;return n}function Jrn(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&wW(t,i.g))return i;return null}function Zrn(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&wW(t,i.i))return i;return null}function ncn(n,t,e){var i,r,c;for(i=0,r=0;r<e;r++)c=t[r],n[r]=c<<1|i,i=c>>>31;0!=i&&(n[e]=i)}function tcn(n,t){var e,i;for(SQ(),i=new Np,e=0;e<n;++e)i.c[i.c.length]=t;return new $k(i)}function ecn(n){var t;return QC((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.b))}function icn(n){var t;return QC((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.c))}function rcn(n){var t;return QC((t=E2(n)).a,0)?(fM(),fM(),Iet):(fM(),new kx(t.b))}function ccn(n){return n.b.c.i.k==(uSn(),Mut)?BB(mMn(n.b.c.i,(hWn(),dlt)),11):n.b.c}function acn(n){return n.b.d.i.k==(uSn(),Mut)?BB(mMn(n.b.d.i,(hWn(),dlt)),11):n.b.d}function ucn(n,t,e,i,r,c,a,u,o,s,h,f,l){return bIn(n,t,e,i,r,c,a,u,o,s,h,f,l),Gln(n,!1),n}function ocn(n,t,e,i,r,c,a){gT.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=u6(a)}function scn(n,t){typeof window===AWn&&typeof window.$gwt===AWn&&(window.$gwt[n]=t)}function hcn(n,t){return Aun(),n==Zat&&t==eut||n==eut&&t==Zat||n==tut&&t==nut||n==nut&&t==tut}function fcn(n,t){return Aun(),n==Zat&&t==nut||n==Zat&&t==tut||n==eut&&t==tut||n==eut&&t==nut}function lcn(n,t){return h$(),rin(fJn),e.Math.abs(0-t)<=fJn||0==t||isNaN(0)&&isNaN(t)?0:n/t}function bcn(){return bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])}function wcn(){wcn=O,P$t=new Cm,C$t=Pun(Gk(FAt,1),N9n,170,0,[]),I$t=Pun(Gk(QAt,1),x9n,59,0,[])}function dcn(){dcn=O,smt=new VP("NO",0),umt=new VP("GREEDY",1),omt=new VP("LOOK_BACK",2)}function gcn(){gcn=O,Dut=new Ht,Nut=new Bt,xut=new qt,Lut=new Gt,Rut=new zt,Kut=new Ut}function pcn(n){var t,e;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),29).p=e,++e}function vcn(n,t){var e;return $Cn(new xI((e=_Tn(n)).c,e.d),new xI(e.b,e.a),n.rf(),t,n.Hf())}function mcn(n,t){var e;return n.b?null:(e=stn(n,n.g),DH(n.a,e),e.i=n,n.d=t,e)}function ycn(n,t,e){OTn(e,"DFS Treeifying phase",1),jdn(n,t),cxn(n,t),n.a=null,n.b=null,HSn(e)}function kcn(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Np,UIn(this),SQ(),m$(this.a,null)}function jcn(n){this.i=n.gc(),this.i>0&&(this.g=this.ri(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Ecn(n,t){MH.call(this,W$t,n,t),this.b=this,this.a=axn(n.Tg(),itn(this.e.Tg(),this.c))}function Tcn(n,t){var e,i;for(kW(t),i=t.vc().Kc();i.Ob();)e=BB(i.Pb(),42),n.zc(e.cd(),e.dd())}function Mcn(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!G3(n,t,i.Pb()))return!1;return!0}function Scn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.gh(t,-1-(-1==c?i:c),null,r)),r}function Pcn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.ih(t,-1-(-1==c?i:c),null,r)),r}function Icn(n){var t;if(-2==n.b){if(0==n.e)t=-1;else for(t=0;0==n.a[t];t++);n.b=t}return n.b}function Ccn(n){switch(n.g){case 2:return kUn(),ICt;case 4:return kUn(),oCt;default:return n}}function Ocn(n){switch(n.g){case 1:return kUn(),SCt;case 3:return kUn(),sCt;default:return n}}function Acn(n){var t,e,i;return n.j==(kUn(),sCt)&&(e=SN(t=UOn(n),oCt),(i=SN(t,ICt))||i&&e)}function $cn(n){var t;return new YK(t=BB(n.e&&n.e(),9),BB(VU(t,t.length),9),t.length)}function Lcn(n,t){OTn(t,k1n,1),twn(sM(new Pw((gM(),new HV(n,!1,!1,new Ft))))),HSn(t)}function Ncn(n,t){return hN(),XC(n)?f6(n,SD(t)):UC(n)?Tz(n,MD(t)):zC(n)?Ez(n,TD(t)):n.wd(t)}function xcn(n,t){t.q=n,n.d=e.Math.max(n.d,t.r),n.b+=t.d+(0==n.a.c.length?0:n.c),WB(n.a,t)}function Dcn(n,t){var e,i,r,c;return r=n.c,e=n.c+n.b,c=n.d,i=n.d+n.a,t.a>r&&t.a<e&&t.b>c&&t.b<i}function Rcn(n,t,e,i){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,e),t&&_Cn(n,t),i&&n.xk(!0)}function Kcn(n,t){var e;qQ(e=BB(t,183),"x",n.i),qQ(e,"y",n.j),qQ(e,I6n,n.g),qQ(e,P6n,n.f)}function _cn(){_cn=O,Cmt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Fcn(){Fcn=O,Dmt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Bcn(){Bcn=O,Xjt=new yI(QZn,0),Wjt=new yI("POLAR_COORDINATE",1),Ujt=new yI("ID",2)}function Hcn(){Hcn=O,Xvt=new UP("EQUALLY",0),Wvt=new UP(mJn,1),Vvt=new UP("NORTH_SOUTH",2)}function qcn(){qcn=O,$vt=lhn((sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Cvt,Tvt,Pvt,Mvt,Svt,Evt,Ivt,Ovt])))}function Gcn(){Gcn=O,Vst=lhn((kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])))}function zcn(){zcn=O,EMt=lhn((PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])))}function Ucn(){Ucn=O,cAt=lhn((hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])))}function Xcn(){Xcn=O,Qrt=new iR("debugSVG",(hN(),!1)),Yrt=new iR("overlapsExisted",!0)}function Wcn(n,t){return x7(new ow(n),new sw(t),new hw(t),new tn,Pun(Gk(nit,1),$Vn,132,0,[]))}function Vcn(){var n;return qet||(qet=new Kv,YA(n=new y5(""),(lM(),Het)),frn(qet,n)),qet}function Qcn(n,t){for(yX(t);n.Ob();)if(!Qan(BB(n.Pb(),10)))return!1;return!0}function Ycn(n,t){var e;return!!(e=XRn(cin(),n))&&(Ypn(t,(sWn(),mPt),e),!0)}function Jcn(n,t){var e;for(e=0;e<t.j.c.length;e++)BB(D7(n,e),21).Gc(BB(D7(t,e),14));return n}function Zcn(n,t){var e,i;for(i=new Wb(t.b);i.a<i.c.c.length;)e=BB(n0(i),29),n.a[e.p]=QMn(e)}function nan(n,t){var e,i;for(kW(t),i=n.vc().Kc();i.Ob();)e=BB(i.Pb(),42),t.Od(e.cd(),e.dd())}function tan(n,t){cL(t,83)?(BB(n.c,76).Xj(),ern(n,BB(t,83))):BB(n.c,76).Wb(t)}function ean(n){return cL(n,152)?o6(BB(n,152)):cL(n,131)?BB(n,131).a:cL(n,54)?new fy(n):new IT(n)}function ian(n,t){return t<n.b.gc()?BB(n.b.Xb(t),10):t==n.b.gc()?n.a:BB(xq(n.e,t-n.b.gc()-1),10)}function ran(n,t){n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=rbn(n.d,t)}function can(n,t){OTn(t,"Edge and layer constraint edge reversal",1),Fzn(LRn(n)),HSn(t)}function aan(n){var t;null==n.d?(++n.e,n.f=0,rfn(null)):(++n.e,t=n.d,n.d=null,n.f=0,rfn(t))}function uan(n){var t;return 0==(t=n.h)?n.l+n.m*CQn:t==PQn?n.l+n.m*CQn-OQn:n}function oan(n){return qD(),n.A.Hc((mdn(),DCt))&&!n.B.Hc((n_n(),UCt))?ndn(n):null}function san(n){if(kW(n),0==n.length)throw Hp(new Mk("Zero length BigInteger"));iKn(this,n)}function han(n){if(!n)throw Hp(new Fy("no calls to next() since the last call to remove()"))}function fan(n){return $Qn<n&&n<OQn?n<0?e.Math.ceil(n):e.Math.floor(n):uan(gNn(n))}function lan(n,t){var e,i,r;for(e=n.c.Ee(),r=t.Kc();r.Ob();)i=r.Pb(),n.a.Od(e,i);return n.b.Kb(e)}function ban(n,t){var e,i,r;if(null!=(e=n.Jg())&&n.Mg())for(i=0,r=e.length;i<r;++i)e[i].ui(t)}function wan(n,t){var e,i;for(i=vW(e=n).e;i;){if((e=i)==t)return!0;i=vW(e).e}return!1}function dan(n,t,e){var i,r;return(i=n.a.f[t.p])<(r=n.a.f[e.p])?-1:i==r?0:1}function gan(n,t,e){var i,r;return r=BB(UK(n.d,t),19),i=BB(UK(n.b,e),19),r&&i?U6(n,r.a,i.a):null}function pan(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)SA(e=BB(kpn(i),33),e.i+t.b,e.j+t.d)}function van(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),70),WB(n.d,e),KMn(n,e)}function man(n,t){var e,i;i=new Np,e=t;do{i.c[i.c.length]=e,e=BB(RX(n.k,e),17)}while(e);return i}function yan(n,t){var e;return 0!=(n.Db&t)?-1==(e=Rmn(n,t))?n.Eb:een(n.Eb)[e]:null}function kan(n,t){var e;return(e=new _f).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function jan(n,t){var e;return(e=new Ev).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function Ean(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return m0(n,t)}function Tan(n){switch(n.a.g){case 1:return new EC;case 3:return new hyn;default:return new Cf}}function Man(n){var t;if(n.g>1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw Hp(new yv)}function San(n){var t;return a$(),uS(syt,n)||((t=new ua).a=n,wR(syt,n,t)),BB(oV(syt,n),635)}function Pan(n){var t,e,i;return e=0,(i=n)<0&&(i+=OQn,e=PQn),t=IJ(i/CQn),M$(IJ(i-t*CQn),t,e)}function Ian(n){var t,e,i;for(i=0,e=new QT(n.a);e.a<e.c.a.length;)t=u4(e),n.b.Hc(t)&&++i;return i}function Can(n){var t,e,i;for(t=1,i=n.Kc();i.Ob();)t=~~(t=31*t+(null==(e=i.Pb())?0:nsn(e)));return t}function Oan(n,t){var e;this.c=n,gmn(n,e=new Np,t,n.b,null,!1,null,!1),this.a=new M2(e,0)}function Aan(n,t){this.b=n,this.e=t,this.d=t.j,this.f=(ZM(),BB(n,66).Oj()),this.k=axn(t.e.Tg(),n)}function $an(n,t,e){this.b=(kW(n),n),this.d=(kW(t),t),this.e=(kW(e),e),this.c=this.d+""+this.e}function Lan(){this.a=BB(mpn((fRn(),qct)),19).a,this.c=Gy(MD(mpn(cat))),this.b=Gy(MD(mpn(tat)))}function Nan(){Nan=O,KIt=lhn((n$n(),Pun(Gk(GIt,1),$Vn,93,0,[CIt,IIt,AIt,DIt,xIt,NIt,$It,LIt,OIt])))}function xan(){xan=O,Fit=lhn((tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Cit])))}function Dan(){Dan=O,Rrt=new US("UP",0),Nrt=new US(pJn,1),xrt=new US(cJn,2),Drt=new US(aJn,3)}function Ran(){Ran=O,sZ(),ykt=new $O(X3n,kkt=Rkt),B0(),vkt=new $O(W3n,mkt=Hkt)}function Kan(){Kan=O,jft=new NP("ONE_SIDED",0),Eft=new NP("TWO_SIDED",1),kft=new NP("OFF",2)}function _an(n){n.r=new Rv,n.w=new Rv,n.t=new Np,n.i=new Np,n.d=new Rv,n.a=new bA,n.c=new xp}function Fan(n){this.n=new Np,this.e=new YT,this.j=new YT,this.k=new Np,this.f=new Np,this.p=n}function Ban(n,t){n.c&&(JKn(n,t,!0),JT(new Rq(null,new w1(t,16)),new qd(n))),JKn(n,t,!1)}function Han(n,t,e){return n==(oin(),$mt)?new Pc:0!=H$n(t,1)?new Rj(e.length):new Dj(e.length)}function qan(n,t){var e;return t?((e=t.Ve()).dc()||(n.q?Tcn(n.q,e):n.q=new mO(e)),n):n}function Gan(n,t){var e;return void 0===(e=n.a.get(t))?++n.d:(mR(n.a,t),--n.c,oY(n.b)),e}function zan(n,t){var e;return 0==(e=t.p-n.p)?Pln(n.f.a*n.f.b,t.f.a*t.f.b):e}function Uan(n,t){var e,i;return(e=n.f.c.length)<(i=t.f.c.length)?-1:e==i?0:1}function Xan(n){return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:eQ(n)}function Wan(n){var t;if(n){if((t=n).dc())throw Hp(new yv);return t.Xb(t.gc()-1)}return u1(n.Kc())}function Van(n){var t;return Vhn(n,0)<0&&(n=uH(n)),64-(0!=(t=dG(kz(n,32)))?ZCn(t):ZCn(dG(n))+32)}function Qan(n){var t;return t=BB(mMn(n,(hWn(),Qft)),61),n.k==(uSn(),Mut)&&(t==(kUn(),ICt)||t==oCt)}function Yan(n,t,e){var i,r;(r=BB(mMn(n,(HXn(),vgt)),74))&&(Wsn(i=new km,0,r),Ztn(i,e),Frn(t,i))}function Jan(n,t,e){var i,r,c,a;i=(a=vW(n)).d,r=a.c,c=n.n,t&&(c.a=c.a-i.b-r.a),e&&(c.b=c.b-i.d-r.b)}function Zan(n,t){var e,i;return(e=n.j)!=(i=t.j)?e.g-i.g:n.p==t.p?0:e==(kUn(),sCt)?n.p-t.p:t.p-n.p}function nun(n){var t,e;for(PUn(n),e=new Wb(n.d);e.a<e.c.c.length;)(t=BB(n0(e),101)).i&&XSn(t)}function tun(n,t,e,i,r){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i),$X(n.b[t.g],e.g,r),$X(n.b[e.g],t.g,r)}function eun(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),BB(i.b,65),Otn(i.a,new EB(n,t,i))}function iun(n,t){n.d==(Ffn(),_Pt)||n.d==HPt?BB(t.a,57).c.Fc(BB(t.b,57)):BB(t.b,57).c.Fc(BB(t.a,57))}function run(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),_pn(n.n,t,i)):eSn(n,t,e,i)}function cun(n,t){var e;return Nrn(e=new Ho,t),f9((!n.A&&(n.A=new NL(O$t,n,7)),n.A),e),e}function aun(n,t,e){var i,r;return r=N2(t,A6n),pjn((i=new aC(n,e)).a,i.b,r),r}function uun(n){var t;return(!n.a||0==(1&n.Bb)&&n.a.kh())&&cL(t=Ckn(n),148)&&(n.a=BB(t,148)),n.a}function oun(n,t){var e,i;for(kW(t),i=t.Kc();i.Ob();)if(e=i.Pb(),!n.Hc(e))return!1;return!0}function sun(n,t){var e,i,r;return e=n.l+t.l,i=n.m+t.m+(e>>22),r=n.h+t.h+(i>>22),M$(e&SQn,i&SQn,r&PQn)}function hun(n,t){var e,i,r;return e=n.l-t.l,i=n.m-t.m+(e>>22),r=n.h-t.h+(i>>22),M$(e&SQn,i&SQn,r&PQn)}function fun(n){var t;return n<128?(!(t=(Mq(),Mtt)[n])&&(t=Mtt[n]=new Lb(n)),t):new Lb(n)}function lun(n){var t;return cL(n,78)?n:((t=n&&n.__java$exception)||ov(t=new jhn(n)),t)}function bun(n){if(cL(n,186))return BB(n,118);if(n)return null;throw Hp(new Hy(e8n))}function wun(n,t){if(null==t)return!1;for(;n.a!=n.b;)if(Nfn(t,_hn(n)))return!0;return!1}function dun(n){return!!n.a.Ob()||n.a==n.d&&(n.a=new S2(n.e.f),n.a.Ob())}function gun(n,t){var e;return 0!=(e=t.Pc()).length&&(tH(n.c,n.c.length,e),!0)}function pun(n,t,e){var i,r;for(r=t.vc().Kc();r.Ob();)i=BB(r.Pb(),42),n.yc(i.cd(),i.dd(),e);return n}function vun(n,t){var e;for(e=new Wb(n.b);e.a<e.c.c.length;)hon(BB(n0(e),70),(hWn(),ult),t)}function mun(n,t,e){var i,r;for(r=new Wb(n.b);r.a<r.c.c.length;)SA(i=BB(n0(r),33),i.i+t,i.j+e)}function yun(n,t){if(!n)throw Hp(new _y($Rn("value already present: %s",Pun(Gk(Ant,1),HWn,1,5,[t]))))}function kun(n,t){return!(!n||!t||n==t)&&_dn(n.d.c,t.d.c+t.d.b)&&_dn(t.d.c,n.d.c+n.d.b)}function jun(){return k5(),Qet?new y5(null):FOn(Vcn(),"com.google.common.base.Strings")}function Eun(n,t){var e;return e=sx(t.a.gc()),JT(ytn(new Rq(null,new w1(t,1)),n.i),new NI(n,e)),e}function Tun(n){var t;return Nrn(t=new Ho,"T"),f9((!n.d&&(n.d=new NL(O$t,n,11)),n.d),t),t}function Mun(n){var t,e,i,r;for(t=1,e=0,r=n.gc();e<r;++e)t=31*t+(null==(i=n.ki(e))?0:nsn(i));return t}function Sun(n,t,e,i){var r;return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),r=n.a[t][e],$X(n.a[t],e,i),r}function Pun(n,t,e,i,r){return r.gm=n,r.hm=t,r.im=C,r.__elementTypeId$=e,r.__elementTypeCategory$=i,r}function Iun(n,t,i,r,c){return jDn(),e.Math.min(zGn(n,t,i,r,c),zGn(i,r,n,t,qx(new xI(c.a,c.b))))}function Cun(){Cun=O,ast=new tP(QZn,0),rst=new tP(I1n,1),cst=new tP(C1n,2),ist=new tP("BOTH",3)}function Oun(){Oun=O,vst=new mP(eJn,0),mst=new mP(cJn,1),yst=new mP(aJn,2),kst=new mP("TOP",3)}function Aun(){Aun=O,Zat=new QS("Q1",0),eut=new QS("Q4",1),nut=new QS("Q2",2),tut=new QS("Q3",3)}function $un(){$un=O,bmt=new QP("OFF",0),wmt=new QP("SINGLE_EDGE",1),lmt=new QP("MULTI_EDGE",2)}function Lun(){Lun=O,WTt=new SI("MINIMUM_SPANNING_TREE",0),XTt=new SI("MAXIMUM_SPANNING_TREE",1)}function Nun(){Nun=O,new up("org.eclipse.elk.addLayoutConfig"),ZTt=new ou,JTt=new au,new uu}function xun(n){var t,e;for(t=new YT,e=spn(n.d,0);e.b!=e.d.c;)DH(t,BB(b3(e),188).c);return t}function Dun(n){var t,e;for(e=new Np,t=n.Kc();t.Ob();)gun(e,wDn(BB(t.Pb(),33)));return e}function Run(n){var t;tBn(n,!0),t=VVn,Lx(n,(HXn(),fpt))&&(t+=BB(mMn(n,fpt),19).a),hon(n,fpt,iln(t))}function Kun(n,t,e){var i;$U(n.a),Otn(e.i,new jg(n)),kgn(n,i=new I$(BB(RX(n.a,t.b),65)),t),e.f=i}function _un(n,t){var e,i;return e=n.c,(i=t.e[n.p])<e.a.c.length-1?BB(xq(e.a,i+1),10):null}function Fun(n,t){var e,i;for(WQ(t,"predicate"),i=0;n.Ob();i++)if(e=n.Pb(),t.Lb(e))return i;return-1}function Bun(n,t){var e,i;if(i=0,n<64&&n<=t)for(t=t<64?t:63,e=n;e<=t;e++)i=i0(i,yz(1,e));return i}function Hun(n){var t,e,i;for(SQ(),i=0,e=n.Kc();e.Ob();)i+=null!=(t=e.Pb())?nsn(t):0,i|=0;return i}function qun(n){var t;return tE(),t=new co,n&&f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),t),t}function Gun(n){var t;return(t=new p).a=n,t.b=yon(n),t.c=x8(Qtt,sVn,2,2,6,1),t.c[0]=Hrn(n),t.c[1]=Hrn(n),t}function zun(n,t){if(0===t)return!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),void n.o.c.$b();mPn(n,t)}function Uun(n,t,e){switch(e.g){case 2:n.b=t;break;case 1:n.c=t;break;case 4:n.d=t;break;case 3:n.a=t}}function Xun(n){switch(n.g){case 1:return EIt;case 2:return jIt;case 3:return TIt;default:return MIt}}function Wun(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 2:case 4:return!0;default:return!1}}function Vun(){Vun=O,yft=lhn((bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])))}function Qun(){Qun=O,JCt=lhn((n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GCt,UCt,qCt,XCt,WCt,QCt,VCt,zCt,HCt])))}function Yun(){Yun=O,Xkt=dq(ogn(ogn(FM(dq(new B2,(zyn(),Kyt),(DPn(),Qyt)),_yt),Xyt),Wyt),Fyt,Vyt)}function Jun(){Jun=O,Aht=new IP(QZn,0),Oht=new IP("INCOMING_ONLY",1),$ht=new IP("OUTGOING_ONLY",2)}function Zun(){Zun=O,ftt={boolean:UT,number:Iy,string:Cy,object:TIn,function:TIn,undefined:Wp}}function non(n,t){vH(n>=0,"Negative initial capacity"),vH(t>=0,"Non-positive load factor"),$U(this)}function ton(n,t,e){return!(n>=128)&&JC(n<64?e0(yz(1,n),e):e0(yz(1,n-64),t),0)}function eon(n,t){return!(!n||!t||n==t)&&Cbn(n.b.c,t.b.c+t.b.b)<0&&Cbn(t.b.c,n.b.c+n.b.b)<0}function ion(n){var t,e,i;return e=n.n,i=n.o,t=n.d,new UV(e.a-t.b,e.b-t.d,i.a+(t.b+t.c),i.b+(t.d+t.a))}function ron(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)Son(n,t=e[i],(kUn(),SCt)),Son(n,t,sCt)}function con(n){var t,e;for(null==n.j&&(n.j=(PY(),Cjn(ett.ce(n)))),t=0,e=n.j.length;t<e;++t);}function aon(n){var t,e;return M$(t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,~n.h+(0==t&&0==e?1:0)&PQn)}function uon(n,t){return TFn(BB(BB(RX(n.g,t.a),46).a,65),BB(BB(RX(n.g,t.b),46).a,65))}function oon(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));return n.hi()&&(e=nZ(n,e)),n.Vh(t,e)}function son(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function hon(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function fon(n){var t,e;return qan(e=new y6,n),hon(e,(Mrn(),sat),n),eBn(n,e,t=new xp),Szn(n,e,t),e}function lon(n){var t,e,i;for(jDn(),e=x8(PMt,sVn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=lmn(i,n);return e}function bon(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r<i-1;r++)e|=Pdn(n,t,r,r+1);return e}function won(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)vmn(n,c,a)||FRn(n,c,a,!0,!1)}function don(n,t){this.b=n,NO.call(this,(BB(Wtn(QQ((QX(),t$t).o),10),18),t.i),t.g),this.a=(wcn(),C$t)}function gon(n,t){this.c=n,this.d=t,this.b=this.d/this.c.c.Hd().gc()|0,this.a=this.d%this.c.c.Hd().gc()}function pon(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function von(n,t,i){this.q=new e.Date,this.q.setFullYear(n+sQn,t,i),this.q.setHours(0,0,0,0),lBn(this,0)}function mon(){mon=O,Nvt=new qP(QZn,0),Lvt=new qP("NODES_AND_EDGES",1),xvt=new qP("PREFER_EDGES",2)}function yon(n){var t;return 0==n?"Etc/GMT":(n<0?(n=-n,t="Etc/GMT-"):t="Etc/GMT+",t+bnn(n))}function kon(n){var t;if(n<0)return _Vn;if(0==n)return 0;for(t=OVn;0==(t&n);t>>=1);return t}function jon(n){var t,e;return 32==(e=ZCn(n.h))?32==(t=ZCn(n.m))?ZCn(n.l)+32:t+20-10:e-12}function Eon(n){var t;return null==(t=n.a[n.b])?null:($X(n.a,n.b,null),n.b=n.b+1&n.a.length-1,t)}function Ton(n){var t,e;return t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,e=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,t||e}function Mon(n,t,e){var i,r;return i=new H8(t,e),r=new q,n.b=Wxn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function Son(n,t,e){var i,r,c;for(c=0,r=Lfn(t,e).Kc();r.Ob();)i=BB(r.Pb(),11),VW(n.c,i,iln(c++))}function Pon(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).g.c=-t.g.c-t.g.b;kNn(n)}function Ion(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).d.c=-t.d.c-t.d.b;yNn(n)}function Con(n){var t;return(!n.c||0==(1&n.Bb)&&0!=(64&n.c.Db))&&cL(t=Ckn(n),88)&&(n.c=BB(t,26)),n.c}function Oon(n){var t,e,i;t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,i=~n.h+(0==t&&0==e?1:0)&PQn,n.l=t,n.m=e,n.h=i}function Aon(n){var t,e,i,r,c;for(t=new Gj,r=0,c=(i=n).length;r<c;++r)e=i[r],t.a+=e.a,t.b+=e.b;return t}function $on(n,t){var e,i,r,c,a;for(SQ(),a=!1,r=0,c=(i=t).length;r<c;++r)e=i[r],a|=n.Fc(e);return a}function Lon(n){var t,e;for(jDn(),e=-17976931348623157e292,t=0;t<n.length;t++)n[t]>e&&(e=n[t]);return e}function Non(n,t,e){var i;return jxn(n,t,i=new Np,(kUn(),oCt),!0,!1),jxn(n,e,i,ICt,!1,!1),i}function xon(n,t,e){var i,r;return r=N2(t,"labels"),XAn((i=new gC(n,e)).a,i.b,r),r}function Don(n,t,e,i){var r;return(r=m$n(n,t,e,i))||!(r=aln(n,e,i))||Fqn(n,t,r)?r:null}function Ron(n,t,e,i){var r;return(r=y$n(n,t,e,i))||!(r=uln(n,e,i))||Fqn(n,t,r)?r:null}function Kon(n,t){var e;for(e=0;e<n.a.a.length;e++)if(!BB(Dq(n.a,e),169).Lb(t))return!1;return!0}function _on(n,t,e){if(yX(t),e.Ob())for(sO(t,IX(e.Pb()));e.Ob();)sO(t,n.a),sO(t,IX(e.Pb()));return t}function Fon(n){var t,e,i;for(SQ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?nsn(t):0),i|=0;return i}function Bon(n,t,e,i,r){var c;return c=jAn(n,t),e&&Oon(c),r&&(n=Smn(n,t),ltt=i?aon(n):M$(n.l,n.m,n.h)),c}function Hon(n,t){var e;try{t.Vd()}catch(i){if(!cL(i=lun(i),78))throw Hp(i);e=i,n.c[n.c.length]=e}}function qon(n,t,e){var i,r;return cL(t,144)&&e?(i=BB(t,144),r=e,n.a[i.b][r.b]+n.a[r.b][i.b]):0}function Gon(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return fwn(n,t)}function zon(n,t){switch(t.g){case 0:cL(n.b,631)||(n.b=new Lan);break;case 1:cL(n.b,632)||(n.b=new fH)}}function Uon(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&BB(n.g[n.i-1],47).Ob():tZ(n);)vC(t,aLn(n))}function Xon(n,t,e){n.g=APn(n,t,(kUn(),oCt),n.b),n.d=APn(n,e,oCt,n.b),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Won(n,t,e){n.g=APn(n,t,(kUn(),ICt),n.j),n.d=APn(n,e,ICt,n.j),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Von(n,t,e){return!jE(AV(new Rq(null,new w1(n.c,16)),new aw(new ZI(t,e)))).sd((dM(),tit))}function Qon(n){var t;return EW(n),t=new sn,n.a.sd(t)?(IL(),new vy(kW(t.a))):(IL(),IL(),Set)}function Yon(n){var t;return!(n.b<=0)&&((t=GO("MLydhHmsSDkK",YTn(fV(n.c,0))))>1||t>=0&&n.b<3)}function Jon(n){var t,e;for(t=new km,e=spn(n,0);e.b!=e.d.c;)Kx(t,0,new wA(BB(b3(e),8)));return t}function Zon(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),81).f.$b();ky(n.b,n),BNn(n)}function nsn(n){return XC(n)?vvn(n):UC(n)?VO(n):zC(n)?(kW(n),n?1231:1237):iz(n)?n.Hb():AG(n)?PN(n):tY(n)}function tsn(n){return XC(n)?Qtt:UC(n)?Ptt:zC(n)?ktt:iz(n)||AG(n)?n.gm:n.gm||Array.isArray(n)&&Gk(ntt,1)||ntt}function esn(n){if(0===n.g)return new cu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function isn(n){if(0===n.g)return new iu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function rsn(n,t,e){if(0===t)return!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),void tan(n.o,e);yIn(n,t,e)}function csn(n,t,e){this.g=n,this.e=new Gj,this.f=new Gj,this.d=new YT,this.b=new YT,this.a=t,this.c=e}function asn(n,t,e,i){this.b=new Np,this.n=new Np,this.i=i,this.j=e,this.s=n,this.t=t,this.r=0,this.d=0}function usn(n){this.e=n,this.d=new p4(this.e.g),this.a=this.d,this.b=dun(this),this.$modCount=n.$modCount}function osn(n){for(;!n.d||!n.d.Ob();){if(!n.b||Wy(n.b))return null;n.d=BB(dU(n.b),47)}return n.d}function ssn(n){return WB(n.c,(Nun(),ZTt)),uen(n.a,Gy(MD(mpn((Rwn(),Vpt)))))?new qu:new Ig(n)}function hsn(n){switch(n.g){case 1:return F3n;default:case 2:return 0;case 3:return JJn;case 4:return B3n}}function fsn(){var n;return wWn(),PNt||(n=ex(ZUn("M",!0)),n=gG(ZUn("M",!1),n),PNt=n)}function lsn(n,t){var e,i,r;for(r=n.b;r;){if(0==(e=n.a.ue(t,r.d)))return r;i=e<0?0:1,r=r.a[i]}return null}function bsn(n,t,e){var i,r;hN(),i=!!TO(e),(r=BB(t.xc(i),15))||(r=new Np,t.zc(i,r)),r.Fc(e)}function wsn(n,t){var e,i;return(e=BB(ZAn(n,(W$n(),dEt)),19).a)==(i=BB(ZAn(t,dEt),19).a)||e<i?-1:e>i?1:0}function dsn(n,t){return!!bNn(n,t)&&(JCn(n.b,BB(mMn(t,(hWn(),Xft)),21),t),DH(n.a,t),!0)}function gsn(n){var t,e;(t=BB(mMn(n,(hWn(),Elt)),10))&&(y7((e=t.c).a,t),0==e.a.c.length&&y7(vW(t).b,e))}function psn(n){return Qet?x8(Get,dYn,572,0,0,1):BB(Qgn(n.a,x8(Get,dYn,572,n.a.c.length,0,1)),842)}function vsn(n,t,e,i){return nV(),new hy(Pun(Gk(Hnt,1),kVn,42,0,[(zvn(n,t),new vT(n,t)),(zvn(e,i),new vT(e,i))]))}function msn(n,t,e){var i;return fin(i=new $m,t,e),f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),i),i}function ysn(n){var t,e,i,r;for(e=(r=fS(AOt,n)).length,i=x8(Qtt,sVn,2,e,6,1),t=0;t<e;++t)i[t]=r[t];return i}function ksn(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r<c;++r)e=i[r],a=new UX(n),e.Qe(a),NBn(a);$U(n.f)}function jsn(n,t){var e;return t===n||!!cL(t,224)&&(e=BB(t,224),Nfn(n.Zb(),e.Zb()))}function Esn(n,t){var e;2*t+1>=n.b.c.length||(Esn(n,2*t+1),(e=2*t+2)<n.b.c.length&&Esn(n,e),KIn(n,t))}function Tsn(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=Jin(e),i=x8(Qnt,IVn,330,r,0,1),this.b=i}function Msn(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:sS(e0(n[i],UQn),e0(t[i],UQn))?-1:1}function Ssn(n,t){var e,i;for(i=spn(n,0);i.b!=i.d.c;)(e=BB(b3(i),214)).e.length>0&&(t.td(e),e.i&&pln(e))}function Psn(n,t){var e,i;return i=BB(yan(n.a,4),126),e=x8(dAt,i9n,415,t,0,1),null!=i&&aHn(i,0,e,0,i.length),e}function Isn(n,t){var e;return e=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Csn(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(BB(e.Pb(),14).Hc(t))return!0;return!1}function Osn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(vmn(n,c,a))return!0;return!1}function Asn(n,t,e){var i,r,c,a;for(kW(e),a=!1,c=n.Zc(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function $sn(n,t){var e;return n===t||!!cL(t,83)&&(e=BB(t,83),zSn(lz(n),e.vc()))}function Lsn(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=BB(r.Pb(),42),n.re(t,i.dd()))return!0;return!1}function Nsn(n,t,e){return n.d[t.p][e.p]||(ivn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function xsn(n,t){if(!n.ai()&&null==t)throw Hp(new _y("The 'no null' constraint is violated"));return t}function Dsn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),Hin(n,null==t?null:(kW(t),t)),n.C&&n.yk(null)}function Rsn(n,t){return!(!n||n==t||!Lx(t,(hWn(),rlt)))&&BB(mMn(t,(hWn(),rlt)),10)!=n}function Ksn(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.pl()}}function _sn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n.ql()}}function Fsn(n){_J.call(this,"The given string does not match the expected format for individual spacings.",n)}function Bsn(){Bsn=O,uOt=new cC("ELK",0),oOt=new cC("JSON",1),aOt=new cC("DOT",2),sOt=new cC("SVG",3)}function Hsn(){Hsn=O,sjt=new vI(QZn,0),hjt=new vI("RADIAL_COMPACTION",1),fjt=new vI("WEDGE_COMPACTION",2)}function qsn(){qsn=O,zet=new pS("CONCURRENT",0),Uet=new pS("IDENTITY_FINISH",1),Xet=new pS("UNORDERED",2)}function Gsn(){Gsn=O,wM(),oct=new $O(BJn,sct=rct),uct=new up(HJn),hct=new up(qJn),fct=new up(GJn)}function zsn(){zsn=O,lst=new ji,bst=new Ei,fst=new Ti,hst=new Mi,kW(new Si),sst=new D}function Usn(){Usn=O,emt=new WP("CONSERVATIVE",0),imt=new WP("CONSERVATIVE_SOFT",1),rmt=new WP("SLOPPY",2)}function Xsn(){Xsn=O,dIt=new WA(15),wIt=new XA((sWn(),XSt),dIt),gIt=gPt,hIt=aSt,fIt=KSt,bIt=BSt,lIt=FSt}function Wsn(n,t,e){var i,r;for(i=new YT,r=spn(e,0);r.b!=r.d.c;)DH(i,new wA(BB(b3(r),8)));Asn(n,t,i)}function Vsn(n){var t,e,i;for(t=0,i=x8(PMt,sVn,8,n.b,0,1),e=spn(n,0);e.b!=e.d.c;)i[t++]=BB(b3(e),8);return i}function Qsn(n){var t;return!n.a&&(n.a=new eU(WAt,n,9,5)),0!=(t=n.a).i?HM(BB(Wtn(t,0),678)):null}function Ysn(n,t){var e;return e=rbn(n,t),sS(r0(n,t),0)|YC(r0(n,e),0)?e:rbn(bVn,r0(jz(e,63),1))}function Jsn(n,t){var e;e=null!=mpn((Rwn(),Vpt))&&null!=t.wg()?Gy(MD(t.wg()))/Gy(MD(mpn(Vpt))):1,VW(n.b,t,e)}function Zsn(n,t){var e,i;return(e=BB(n.d.Bc(t),14))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function nhn(n,t){var e,i;if(0!=(i=n.c[t]))for(n.c[t]=0,n.d-=i,e=t+1;e<n.a.length;)n.a[e]-=i,e+=e&-e}function thn(n){var t;if((t=n.a.c.length)>0)return Kz(t-1,n.a.c.length),s6(n.a,t-1);throw Hp(new mv)}function ehn(n,t,e){if(t<0)throw Hp(new Ay(n5n+t));t<n.j.c.length?c5(n.j,t,e):(g3(n,t),WB(n.j,e))}function ihn(n,t,e){if(n>t)throw Hp(new _y(mYn+n+yYn+t));if(n<0||t>e)throw Hp(new Tk(mYn+n+kYn+t+hYn+e))}function rhn(n){if(!n.a||0==(8&n.a.i))throw Hp(new Fy("Enumeration class expected for layout option "+n.f))}function chn(n){var t;++n.j,0==n.i?n.g=null:n.i<n.g.length&&(t=n.g,n.g=n.ri(n.i),aHn(t,0,n.g,0,n.i))}function ahn(n,t){var e,i;for(e=n.a.length-1,n.c=n.c-1&e;t!=n.c;)i=t+1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.c,null)}function uhn(n,t){var e,i;for(e=n.a.length-1;t!=n.b;)i=t-1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.b,null),n.b=n.b+1&e}function ohn(n,t,e){var i;return LZ(t,n.c.length),0!=(i=e.Pc()).length&&(tH(n.c,t,i),!0)}function shn(n){var t,e;if(null==n)return null;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return n[t];return null}function hhn(n,t,e){var i,r,c,a;for(c=0,a=(r=e).length;c<a;++c)if(i=r[c],n.b.re(t,i.cd()))return i;return null}function fhn(n){var t,e,i,r,c;for(c=1,i=0,r=(e=n).length;i<r;++i)c=31*c+(null!=(t=e[i])?nsn(t):0),c|=0;return c}function lhn(n){var t,e,i,r,c;for(t={},r=0,c=(i=n).length;r<c;++r)t[":"+(null!=(e=i[r]).f?e.f:""+e.g)]=e;return t}function bhn(n){var t;for(yX(n),I_(!0,"numberToAdvance must be nonnegative"),t=0;t<0&&dAn(n);t++)U5(n);return t}function whn(n){var t,e,i;for(i=0,e=new oz(ZL(n.a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||++i;return i}function dhn(n,t){var e,i,r;for(e=n,r=0;;){if(e==t)return r;if(!(i=e.e))throw Hp(new wv);e=vW(i),++r}}function ghn(n,t){var e,i,r;for(r=t-n.f,i=new Wb(n.d);i.a<i.c.c.length;)kdn(e=BB(n0(i),443),e.e,e.f+r);n.f=t}function phn(n,t,i){return e.Math.abs(t-n)<_3n||e.Math.abs(i-n)<_3n||(t-n>_3n?n-i>_3n:i-n>_3n)}function vhn(n,t){return n?t&&!n.j||cL(n,124)&&0==BB(n,124).a.b?0:n.Re():0}function mhn(n,t){return n?t&&!n.k||cL(n,124)&&0==BB(n,124).a.a?0:n.Se():0}function yhn(n){return ODn(),n<0?-1!=n?new Rpn(-1,-n):Ytt:n<=10?Ztt[IJ(n)]:new Rpn(1,n)}function khn(n){throw Zun(),Hp(new gy("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function jhn(n){hk(),V$(this),jQ(this),this.e=n,Ixn(this,n),this.g=null==n?zWn:Bbn(n),this.a="",this.b=n,this.a=""}function Ehn(){this.a=new nu,this.f=new dg(this),this.b=new gg(this),this.i=new pg(this),this.e=new vg(this)}function Thn(){cy.call(this,new q8(etn(16))),lin(2,oVn),this.b=2,this.a=new HW(null,null,0,null),iv(this.a,this.a)}function Mhn(){Mhn=O,cvt=new KP("DUMMY_NODE_OVER",0),avt=new KP("DUMMY_NODE_UNDER",1),uvt=new KP("EQUAL",2)}function Shn(){Shn=O,Xat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[(Ffn(),_Pt),FPt])),Wat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[HPt,KPt]))}function Phn(n){return(kUn(),yCt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b}function Ihn(n){var t,e;for(t=n.b.a.a.ec().Kc();t.Ob();)e=new Q$n(BB(t.Pb(),561),n.e,n.f),WB(n.g,e)}function Chn(n,t){var e,i;e=n.nk(t,null),i=null,t&&(iE(),cen(i=new Kp,n.r)),(e=HTn(n,i,e))&&e.Fi()}function Ohn(n,t){var e,i;for(i=0!=H$n(n.d,1),e=!0;e;)e=!1,e=t.c.Tf(t.e,i),e|=DNn(n,t,i,!1),i=!i;$rn(n)}function Ahn(n,t){var e,i,r;return i=!1,e=t.q.d,t.d<n.b&&(r=dNn(t.q,n.b),t.q.d>r&&(aEn(t.q,r),i=e!=t.q.d)),i}function $hn(n,t){var i,r,c,a,u;return a=t.i,u=t.j,r=a-(i=n.f).i,c=u-i.j,e.Math.sqrt(r*r+c*c)}function Lhn(n,t){var e;return(e=Ydn(n))||(!$Ot&&($Ot=new Oo),RHn(),f9((e=new Ip(YPn(t))).Vk(),n)),e}function Nhn(n,t){var e,i;return(e=BB(n.c.Bc(t),14))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function xhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Dhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Rhn(n){var t,e;if(null==n)return!1;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return!1;return!0}function Khn(n){var t;if(0!=n.c)return n.c;for(t=0;t<n.a.length;t++)n.c=33*n.c+(-1&n.a[t]);return n.c=n.c*n.e,n.c}function _hn(n){var t;return Px(n.a!=n.b),t=n.d.a[n.a],Ex(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function Fhn(n){var t;if(!(n.c.c<0?n.a>=n.c.b:n.a<=n.c.b))throw Hp(new yv);return t=n.a,n.a+=n.c.c,++n.b,iln(t)}function Bhn(n){var t;return t=new ftn(n),i2(n.a,sut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[t]))),t.d&&WB(t.f,t.d),t.f}function Hhn(n){var t;return qan(t=new O$(n.a),n),hon(t,(hWn(),dlt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function qhn(n,t,e,i){var r,c;for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),70)).n.a=t.a+(i.a-r.o.a)/2,r.n.b=t.b,t.b+=r.o.b+e}function Ghn(n,t,e){var i;for(i=t.a.a.ec().Kc();i.Ob();)if(cY(n,BB(i.Pb(),57),e))return!0;return!1}function zhn(n){var t,e;for(e=new Wb(n.r);e.a<e.c.c.length;)if(t=BB(n0(e),10),n.n[t.p]<=0)return t;return null}function Uhn(n){var t,e;for(e=new Rv,t=new Wb(n);t.a<t.c.c.length;)Frn(e,dDn(BB(n0(t),33)));return e}function Xhn(n){var t;return t=kA(Imt),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),dft))&&dq(t,(yMn(),_at),(lWn(),Bot)),t}function Whn(n,t,e){var i;i=new MOn(n,t),JCn(n.r,t.Hf(),i),e&&!Hz(n.u)&&(i.c=new yJ(n.d),Otn(t.wf(),new Iw(i)))}function Vhn(n,t){var e;return JO(n)&&JO(t)&&(e=n-t,!isNaN(e))?e:Kkn(JO(n)?Pan(n):n,JO(t)?Pan(t):t)}function Qhn(n,t){return t<n.length&&(b1(t,n.length),63!=n.charCodeAt(t))&&(b1(t,n.length),35!=n.charCodeAt(t))}function Yhn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new ZSn(n.c,n.a,e,c),new uRn(e,n.a,r,n.e,n.b,n.c==(oin(),Amt)))}function Jhn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,1,r,t),e?e.Ei(i):e=i),e}function Zhn(n,t,e){var i,r;return r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,3,r,t),e?e.Ei(i):e=i),e}function nfn(n,t,e){var i,r;return r=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,0,r,t),e?e.Ei(i):e=i),e}function tfn(n,t){var e,i,r,c;return(c=kIn((i=t,(r=n?Ydn(n):null)&&r.Xk(),i)))==t&&(e=Ydn(n))&&e.Xk(),c}function efn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function ifn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function rfn(n){var t,e,i,r;if(null!=n)for(e=0;e<n.length;++e)if(t=n[e])for(BB(t.g,367),r=t.i,i=0;i<r;++i);}function cfn(n){var t,i,r;for(r=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),r=e.Math.max(r,t.g);return r}function afn(n){var t,e,i;for(i=new Wb(n.b);i.a<i.c.c.length;)(t=(e=BB(n0(i),214)).c.Rf()?e.f:e.a)&&wqn(t,e.j)}function ufn(){ufn=O,vIt=new HI("INHERIT",0),pIt=new HI("INCLUDE_CHILDREN",1),mIt=new HI("SEPARATE_CHILDREN",2)}function ofn(n,t){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),void sqn(n.n);case 2:return void $in(n,null)}zun(n,t)}function sfn(n){switch(n.gc()){case 0:return Fnt;case 1:return new Pq(yX(n.Xb(0)));default:return new SY(n)}}function hfn(n){switch(s_(),n.gc()){case 0:return VX(),Vnt;case 1:return new yk(n.Kc().Pb());default:return new vS(n)}}function ffn(n){switch(s_(),n.c){case 0:return VX(),Vnt;case 1:return new yk(JIn(new QT(n)));default:return new sy(n)}}function lfn(n,t){yX(n);try{return n.xc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function bfn(n,t){yX(n);try{return n.Bc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function wfn(n,t){yX(n);try{return n.Hc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function dfn(n,t){yX(n);try{return n.Mc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function gfn(n,t){yX(n);try{return n._b(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function pfn(n,t){n.a.c.length>0&&dsn(BB(xq(n.a,n.a.c.length-1),570),t)||WB(n.a,new p5(t))}function vfn(n){var t,e;G_(),t=n.d.c-n.e.c,Otn((e=BB(n.g,145)).b,new jd(t)),Otn(e.c,new Ed(t)),e5(e.i,new Td(t))}function mfn(n){var t;return(t=new Ik).a+="VerticalSegment ",uO(t,n.e),t.a+=" ",oO(t,JL(new mk,new Wb(n.k))),t.a}function yfn(n){var t;return(t=BB(lnn(n.c.c,""),229))||(t=new UZ(jj(kj(new pu,""),"Other")),Jgn(n.c.c,"",t)),t}function kfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (name: ",cO(t,n.zb),t.a+=")",t.a)}function jfn(n,t,e){var i,r;return r=n.sb,n.sb=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),e}function Efn(n,t){var e,i;for(e=0,i=abn(n,t).Kc();i.Ob();)e+=null!=mMn(BB(i.Pb(),11),(hWn(),Elt))?1:0;return e}function Tfn(n,t,e){var i,r,c;for(i=0,c=spn(n,0);c.b!=c.d.c&&!((r=Gy(MD(b3(c))))>e);)r>=t&&++i;return i}function Mfn(n,t,e){var i;return i=new N7(n.e,3,13,null,t.c||(gWn(),l$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function Sfn(n,t,e){var i;return i=new N7(n.e,4,13,t.c||(gWn(),l$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Pfn(n,t,e){var i,r;return r=n.r,n.r=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,8,r,n.r),e?e.Ei(i):e=i),e}function Ifn(n,t){var e,i;return!(i=(e=BB(t,676)).vk())&&e.wk(i=cL(t,88)?new $C(n,BB(t,26)):new _0(n,BB(t,148))),i}function Cfn(n,t,e){var i;n.qi(n.i+1),i=n.oi(t,e),t!=n.i&&aHn(n.g,t,n.g,t+1,n.i-t),$X(n.g,t,i),++n.i,n.bi(t,e),n.ci()}function Ofn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?oO(n.a,n.b):n.a=new lN(n.d),G0(n.a,t.a,t.d.length,e)),n}function Afn(n,t){var e,i,r;if(t.vi(n.a),null!=(r=BB(yan(n.a,8),1936)))for(e=0,i=r.length;e<i;++e)null.jm()}function $fn(n,t){var e;return e=new sn,n.a.sd(e)?(IL(),new vy(kW(T7(n,e.a,t)))):(EW(n),IL(),IL(),Set)}function Lfn(n,t){switch(t.g){case 2:case 1:return abn(n,t);case 3:case 4:return ean(abn(n,t))}return SQ(),SQ(),set}function Nfn(n,t){return XC(n)?mK(n,t):UC(n)?vK(n,t):zC(n)?(kW(n),GC(n)===GC(t)):iz(n)?n.Fb(t):AG(n)?FO(n,t):v0(n,t)}function xfn(n){return n?0!=(1&n.i)?n==$Nt?ktt:n==ANt?Att:n==DNt?Itt:n==xNt?Ptt:n==LNt?Rtt:n==RNt?_tt:n==NNt?Ttt:Stt:n:null}function Dfn(n,t,e,i,r){0!=t&&0!=i&&(1==t?r[i]=dvn(r,e,i,n[0]):1==i?r[t]=dvn(r,n,t,e[0]):YOn(n,e,r,t,i))}function Rfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Oe),eOn(e,t))}function Kfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Ae),eOn(e,t))}function _fn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n;case 2:return n.k}return Eyn(n,t,e,i)}function Ffn(){Ffn=O,BPt=new KI(hJn,0),FPt=new KI(aJn,1),_Pt=new KI(cJn,2),KPt=new KI(pJn,3),HPt=new KI("UP",4)}function Bfn(){Bfn=O,wut=new YS(QZn,0),but=new YS("INSIDE_PORT_SIDE_GROUPS",1),lut=new YS("FORCE_MODEL_ORDER",2)}function Hfn(n,t,e){if(n<0||t>e)throw Hp(new Ay(mYn+n+kYn+t+", size: "+e));if(n>t)throw Hp(new _y(mYn+n+yYn+t))}function qfn(n,t,e){if(t<0)cCn(n,e);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Vj(n,n.yh(),t)}}function Gfn(n,t,e,i,r,c,a,u){var o;for(o=e;c<a;)o>=i||t<e&&u.ue(n[t],n[o])<=0?$X(r,c++,n[t++]):$X(r,c++,n[o++])}function zfn(n,t,e,i,r,c){this.e=new Np,this.f=(ain(),Gvt),WB(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Ufn(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),26),GC(t)===GC(e))return!0;return!1}function Xfn(n){var t,e,i,r;for(dWn(),i=0,r=(e=tpn()).length;i<r;++i)if(-1!=E7((t=e[i]).a,n,0))return t;return Crt}function Wfn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function Vfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (source: ",cO(t,n.d),t.a+=")",t.a)}function Qfn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,5,r,n.a),e?KEn(e,i):e=i),e}function Yfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,2,e,t))}function Jfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function Zfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function nln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,3,e,t))}function tln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,9,e,t))}function eln(n,t){var e;return-1==n.b&&n.a&&(e=n.a.Gj(),n.b=e?n.c.Xg(n.a.aj(),e):Awn(n.c.Tg(),n.a)),n.c.Og(n.b,t)}function iln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(tq(),Ctt)[t])&&(e=Ctt[t]=new xb(n)),e):new xb(n)}function rln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(Tq(),Ktt)[t])&&(e=Ktt[t]=new Rb(n)),e):new Rb(n)}function cln(n){var t;return n.k==(uSn(),Mut)&&((t=BB(mMn(n,(hWn(),Qft)),61))==(kUn(),sCt)||t==SCt)}function aln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?m$n(n,i,t,e):null}function uln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?y$n(n,i,t,e):null}function oln(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),138),GC(t)===GC(e))return!0;return!1}function sln(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));if(n.hi()&&n.Hc(e))throw Hp(new _y(a8n));n.Xh(t,e)}function hln(n,t){var e;if(null==(e=sen(n.i,t)))throw Hp(new ek("Node did not exist in input."));return Kcn(t,e),null}function fln(n,t){var e;if(cL(e=NNn(n,t),322))return BB(e,34);throw Hp(new _y(r6n+t+"' is not a valid attribute"))}function lln(n,t,e){var i,r;for(r=cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function bln(n){var t,e,i;for(i=0,e=n.length,t=0;t<e;t++)32==n[t]||13==n[t]||10==n[t]||9==n[t]||(n[i++]=n[t]);return i}function wln(n){var t,e,i;for(t=new Np,i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),594),gun(t,BB(e.jf(),14));return t}function dln(n){var t,e;for(e=BB(mMn(n,(qqn(),lkt)),15).Kc();e.Ob();)DH((t=BB(e.Pb(),188)).b.d,t),DH(t.c.b,t)}function gln(n){switch(BB(mMn(n,(hWn(),ilt)),303).g){case 1:hon(n,ilt,(z7(),Sft));break;case 2:hon(n,ilt,(z7(),Ift))}}function pln(n){var t;n.g&&(xxn((t=n.c.Rf()?n.f:n.a).a,n.o,!0),xxn(t.a,n.o,!1),hon(n.o,(HXn(),ept),(QEn(),UIt)))}function vln(n){var t;if(!n.a)throw Hp(new Fy("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,xQ(n,t),NQ(n,t)}function mln(n){var t;return null==(t=n.a[n.c-1&n.a.length-1])?null:(n.c=n.c-1&n.a.length-1,$X(n.a,n.c,null),t)}function yln(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=BB(e.Pb(),213)).f&&n.b[t.c]<-1e-10)return t;return null}function kln(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new UV(t.d,0,t.a,t.b);default:return null}}function jln(n){switch(n.g){case 2:return FPt;case 1:return _Pt;case 4:return KPt;case 3:return HPt;default:return BPt}}function Eln(n){switch(n.g){case 1:return ICt;case 2:return sCt;case 3:return oCt;case 4:return SCt;default:return PCt}}function Tln(n){switch(n.g){case 1:return SCt;case 2:return ICt;case 3:return sCt;case 4:return oCt;default:return PCt}}function Mln(n){switch(n.g){case 1:return oCt;case 2:return SCt;case 3:return ICt;case 4:return sCt;default:return PCt}}function Sln(n){switch(n){case 0:return new mm;case 1:return new pm;case 2:return new vm;default:throw Hp(new wv)}}function Pln(n,t){return n<t?-1:n>t?1:n==t?0==n?Pln(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function Iln(n,t){OTn(t,"Sort end labels",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new we),new de),new ge),HSn(t)}function Cln(n,t,e){var i,r;return n.ej()?(r=n.fj(),i=YCn(n,t,e),n.$i(n.Zi(7,iln(e),i,t,r)),i):YCn(n,t,e)}function Oln(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.cd(),N6(n,i=((e=t.Sh())&DWn)%n.d.length,A$n(n,i,e,r)))}function Aln(n,t){var e;e=0!=(n.Bb&k6n),t?n.Bb|=k6n:n.Bb&=-1025,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,10,e,t))}function $ln(n,t){var e;e=0!=(n.Bb&_Qn),t?n.Bb|=_Qn:n.Bb&=-4097,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,12,e,t))}function Lln(n,t){var e;e=0!=(n.Bb&T9n),t?n.Bb|=T9n:n.Bb&=-8193,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,15,e,t))}function Nln(n,t){var e;e=0!=(n.Bb&M9n),t?n.Bb|=M9n:n.Bb&=-2049,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,11,e,t))}function xln(n,t){var e;return 0!=(e=Pln(n.b.c,t.b.c))||0!=(e=Pln(n.a.a,t.a.a))?e:Pln(n.a.b,t.a.b)}function Dln(n,t){var e;if(null==(e=RX(n.k,t)))throw Hp(new ek("Port did not exist in input."));return Kcn(t,e),null}function Rln(n){var t,e;for(e=G$n(Utn(n)).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return y4((UM(),RAt),t);return null}function Kln(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=0,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&++c;return c}function _ln(n,t,e){var i,r;return i=BB(t.We(n.a),35),r=BB(e.We(n.a),35),null!=i&&null!=r?Ncn(i,r):null!=i?-1:null!=r?1:0}function Fln(n,t,e){var i;if(n.c)lMn(n.c,t,e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Fln(BB(n0(i),157),t,e)}function Bln(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),y7(n.b.b,e.b),uY(BB(e.a,189),BB(e.b,81))}function Hln(n){var t,e;for(e=xX(new Ik,91),t=!0;n.Ob();)t||(e.a+=FWn),t=!1,uO(e,n.Pb());return(e.a+="]",e).a}function qln(n,t){var e;e=0!=(n.Bb&hVn),t?n.Bb|=hVn:n.Bb&=-16385,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,16,e,t))}function Gln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function zln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function Uln(n,t){var e;e=0!=(n.Bb&BQn),t?n.Bb|=BQn:n.Bb&=-65537,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,20,e,t))}function Xln(n){var t;return t=x8(ONt,WVn,25,2,15,1),n-=BQn,t[0]=(n>>10)+HQn&QVn,t[1]=56320+(1023&n)&QVn,Bdn(t,0,t.length)}function Wln(n){var t;return(t=BB(mMn(n,(HXn(),Udt)),103))==(Ffn(),BPt)?Gy(MD(mMn(n,Edt)))>=1?FPt:KPt:t}function Vln(n){switch(BB(mMn(n,(HXn(),Zdt)),218).g){case 1:return new ic;case 3:return new oc;default:return new ec}}function Qln(n){if(n.c)Qln(n.c);else if(n.d)throw Hp(new Fy("Stream already terminated, can't be modified or used"))}function Yln(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (identifier: ",cO(t,n.k),t.a+=")",t.a)}function Jln(n,t,e){var i;return tE(),jen(i=new ro,t),Een(i,e),n&&f9((!n.a&&(n.a=new $L(xOt,n,5)),n.a),i),i}function Zln(n,t,e,i){var r,c;return kW(i),kW(e),null==(c=null==(r=n.xc(t))?e:ZT(BB(r,15),BB(e,14)))?n.Bc(t):n.zc(t,c),c}function nbn(n){var t,e,i,r;return orn(e=new YK(t=BB(Vj((r=(i=n.gm).f)==Unt?i:r),9),BB(SR(t,t.length),9),0),n),e}function tbn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),10),oun(e,BB(xq(t,i.p),14)))return i;return null}function ebn(n,t,e){try{_on(n,t,e)}catch(i){throw cL(i=lun(i),597)?Hp(new g5(i)):Hp(i)}return t}function ibn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n-t)&&e<OQn?e:uan(hun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function rbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n+t)&&e<OQn?e:uan(sun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function cbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n*t)&&e<OQn?e:uan(fqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function abn(n,t){var e;return n.i||eCn(n),(e=BB(oV(n.g,t),46))?new s1(n.j,BB(e.a,19).a,BB(e.b,19).a):(SQ(),SQ(),set)}function ubn(n,t,e){var i;return i=n.a.get(t),n.a.set(t,void 0===e?null:e),void 0===i?(++n.c,oY(n.b)):++n.d,i}function obn(n,t,i){n.n=kq(LNt,[sVn,FQn],[364,25],14,[i,IJ(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function sbn(){var n,t,i;yTn(),i=Let+++Date.now(),n=IJ(e.Math.floor(i*uYn))&sYn,t=IJ(i-n*oYn),this.a=1502^n,this.b=t^aYn}function hbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).b);return yX(t),new OO(t)}function fbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).e);return yX(t),new OO(t)}function lbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).g);return yX(t),new OO(t)}function bbn(n){var t,e;for(e=t$n(Utn(dZ(n))).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return k4((XM(),UAt),t);return null}function wbn(n){var t,e;for(t=0,e=n.length;t<e;t++)if(null==n[t])throw Hp(new Hy("at index "+t));return new Jy(n)}function dbn(n,t){var e;if(cL(e=NNn(n.Tg(),t),99))return BB(e,18);throw Hp(new _y(r6n+t+"' is not a valid reference"))}function gbn(n){var t;return(t=bSn(n))>34028234663852886e22?RQn:t<-34028234663852886e22?KQn:t}function pbn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function vbn(n){var t,e,i;for(t=new hR(n.Hd().gc()),i=0,e=L9(n.Hd().Kc());e.Ob();)jZ(t,e.Pb(),iln(i++));return NSn(t.a)}function mbn(n,t){var e,i,r;for(r=new xp,i=t.vc().Kc();i.Ob();)VW(r,(e=BB(i.Pb(),42)).cd(),lan(n,BB(e.dd(),15)));return r}function ybn(n,t){0==n.n.c.length&&WB(n.n,new RJ(n.s,n.t,n.i)),WB(n.b,t),smn(BB(xq(n.n,n.n.c.length-1),211),t),BFn(n,t)}function kbn(n){return n.c==n.b.b&&n.i==n.g.b||(n.a.c=x8(Ant,HWn,1,0,5,1),gun(n.a,n.b),gun(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function jbn(n,t){var e,i;for(i=0,e=BB(t.Kb(n),20).Kc();e.Ob();)qy(TD(mMn(BB(e.Pb(),17),(hWn(),Ilt))))||++i;return i}function Ebn(n,t){var i,r;r=Gy(MD(edn(f2(t),(HXn(),ypt)))),Fkn(t,i=e.Math.max(0,r/2-.5),1),WB(n,new lP(t,i))}function Tbn(){Tbn=O,qlt=new BP(QZn,0),_lt=new BP("FIRST",1),Flt=new BP(I1n,2),Blt=new BP("LAST",3),Hlt=new BP(C1n,4)}function Mbn(){Mbn=O,ZPt=new FI(hJn,0),YPt=new FI("POLYLINE",1),QPt=new FI("ORTHOGONAL",2),JPt=new FI("SPLINES",3)}function Sbn(){Sbn=O,Zjt=new kI("ASPECT_RATIO_DRIVEN",0),nEt=new kI("MAX_SCALE_DRIVEN",1),Jjt=new kI("AREA_DRIVEN",2)}function Pbn(){Pbn=O,HEt=new EI("P1_STRUCTURE",0),qEt=new EI("P2_PROCESSING_ORDER",1),GEt=new EI("P3_EXECUTION",2)}function Ibn(){Ibn=O,ejt=new gI("OVERLAP_REMOVAL",0),njt=new gI("COMPACTION",1),tjt=new gI("GRAPH_SIZE_CALCULATION",2)}function Cbn(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t))}function Obn(n,t){var e,i;for(e=spn(n,0);e.b!=e.d.c;){if((i=zy(MD(b3(e))))==t)return;if(i>t){U0(e);break}}nX(e,t)}function Abn(n,t){var e,i,r,c,a;if(e=t.f,Jgn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;c<a;++c)i=r[c],Jgn(n.c.e,i,t)}function $bn(n,t,e,i){var r,c,a;for(r=t+1;r<e;++r)for(c=r;c>t&&i.ue(n[c-1],n[c])>0;--c)a=n[c],$X(n,c,n[c-1]),$X(n,c-1,a)}function Lbn(n,t,e,i){if(t<0)TLn(n,e,i);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Tj(n,n.yh(),t,i)}}function Nbn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw Hp(new _y("Node "+t+" not part of edge "+n))}function xbn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function Dbn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function Rbn(n,t,e,i){switch(t){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return _fn(n,t,e,i)}function Kbn(n){return n.k==(uSn(),Iut)&&o5(new Rq(null,new zU(new oz(ZL(lbn(n).a.Kc(),new h)))),new qr)}function _bn(n){return null==n.e?n:(!n.c&&(n.c=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,null)),n.c)}function Fbn(n,t){return n.h==IQn&&0==n.m&&0==n.l?(t&&(ltt=M$(0,0,0)),WO((X7(),dtt))):(t&&(ltt=M$(n.l,n.m,n.h)),M$(0,0,0))}function Bbn(n){return Array.isArray(n)&&n.im===C?nE(tsn(n))+"@"+(nsn(n)>>>0).toString(16):n.toString()}function Hbn(n){var t;this.a=new YK(t=BB(n.e&&n.e(),9),BB(SR(t,t.length),9),0),this.b=x8(Ant,HWn,1,this.a.a.length,5,1)}function qbn(n){var t,e,i;for(this.a=new fA,i=new Wb(n);i.a<i.c.c.length;)e=BB(n0(i),14),brn(t=new hG,e),TU(this.a,t)}function Gbn(n){var t,e;for(qD(),t=n.o.b,e=BB(BB(h6(n.r,(kUn(),SCt)),21),84).Kc();e.Ob();)BB(e.Pb(),111).e.b+=t}function zbn(n){var t;if(n.b){if(zbn(n.b),n.b.d!=n.c)throw Hp(new vv)}else n.d.dc()&&(t=BB(n.f.c.xc(n.e),14))&&(n.d=t)}function Ubn(n){var t;return null==n||(t=n.length)>0&&(b1(t-1,n.length),58==n.charCodeAt(t-1))&&!Xbn(n,LAt,NAt)}function Xbn(n,t,e){var i,r;for(i=0,r=n.length;i<r;i++)if(ton((b1(i,n.length),n.charCodeAt(i)),t,e))return!0;return!1}function Wbn(n,t){var e,i;for(i=n.e.a.ec().Kc();i.Ob();)if(tSn(t,(e=BB(i.Pb(),266)).d)||CIn(t,e.d))return!0;return!1}function Vbn(n,t){var e,i,r;for(r=(i=HRn(n,t))[i.length-1]/2,e=0;e<i.length;e++)if(i[e]>=r)return t.c+e;return t.c+t.b.gc()}function Qbn(n,t){var e,i,r,c;for(dD(),r=t,z9(i=H9(n),0,i.length,r),e=0;e<i.length;e++)e!=(c=gkn(n,i[e],e))&&Cln(n,e,c)}function Ybn(n,t){var e,i,r,c,a,u;for(i=0,e=0,a=0,u=(c=t).length;a<u;++a)(r=c[a])>0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Jbn(n){var t,e,i;for((i=new Sk).a+="[",t=0,e=n.gc();t<e;)cO(i,kN(n.ki(t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a}function Zbn(n){var t,e,i;return i=ATn(n),!WE(n.c)&&(rtn(i,"knownLayouters",e=new Il),t=new rp(e),e5(n.c,t)),i}function nwn(n,t){var e,i;for(kW(t),e=!1,i=new Wb(n);i.a<i.c.c.length;)ywn(t,n0(i),!1)&&(AU(i),e=!0);return e}function twn(n){var t,e;for(e=Gy(MD(n.a.We((sWn(),OPt)))),t=new Wb(n.a.xf());t.a<t.c.c.length;)VUn(n,BB(n0(t),680),e)}function ewn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),WB(n.b.b,BB(e.b,81)),g2(BB(e.a,189),BB(e.b,81))}function iwn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)kG(r,0,new HX(n.a));PZ(t,BB(xq(r,r.c.length-e),29)),n.b[t.p]=e}function rwn(n,t,e){var i;!(i=e)&&(i=LH(new Xm,0)),OTn(i,qZn,2),mvn(n.b,t,mcn(i,1)),Kqn(n,t,mcn(i,1)),qUn(t,mcn(i,1)),HSn(i)}function cwn(n,t,e,i,r){BZ(),UNn(aM(cM(rM(uM(new Hv,0),r.d.e-n),t),r.d)),UNn(aM(cM(rM(uM(new Hv,0),e-r.a.e),r.a),i))}function awn(n,t,e,i,r,c){this.a=n,this.c=t,this.b=e,this.f=i,this.d=r,this.e=c,this.c>0&&this.b>0&&Yq(this.c,this.b,this.a)}function uwn(n){Rwn(),this.c=u6(Pun(Gk(rMt,1),HWn,831,0,[Wpt])),this.b=new xp,this.a=n,VW(this.b,Vpt,1),Otn(Qpt,new Pg(this))}function own(n,t){var e;return n.d?hU(n.b,t)?BB(RX(n.b,t),51):(e=t.Kf(),VW(n.b,t,e),e):t.Kf()}function swn(n,t){var e;return GC(n)===GC(t)||!!cL(t,91)&&(e=BB(t,91),n.e==e.e&&n.d==e.d&&E4(n,e.a))}function hwn(n){switch(kUn(),n.g){case 4:return sCt;case 1:return oCt;case 3:return SCt;case 2:return ICt;default:return PCt}}function fwn(n,t){switch(t){case 3:return 0!=n.f;case 4:return 0!=n.g;case 5:return 0!=n.i;case 6:return 0!=n.j}return Ean(n,t)}function lwn(n){switch(n.g){case 0:return new Ga;case 1:return new za;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function bwn(n){switch(n.g){case 0:return new qa;case 1:return new Ua;default:throw Hp(new _y(M1n+(null!=n.f?n.f:""+n.g)))}}function wwn(n){switch(n.g){case 0:return new Vm;case 1:return new ym;default:throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}}function dwn(n){switch(n.g){case 1:return new Ra;case 2:return new gD;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function gwn(n){var t,e;if(n.b)return n.b;for(e=Qet?null:n.d;e;){if(t=Qet?null:e.b)return t;e=Qet?null:e.d}return lM(),Het}function pwn(n){var t,e;return 0==n.e?0:(t=n.d<<5,e=n.a[n.d-1],n.e<0&&Icn(n)==n.d-1&&(--e,e|=0),t-=ZCn(e))}function vwn(n){var t,e,i;return n<tet.length?tet[n]:(t=31&n,(i=x8(ANt,hQn,25,1+(e=n>>5),15,1))[e]=1<<t,new lU(1,e+1,i))}function mwn(n){var t,e,i;return(e=n.zg())?cL(t=n.Ug(),160)&&null!=(i=mwn(BB(t,160)))?i+"."+e:e:null}function ywn(n,t,e){var i,r;for(r=n.Kc();r.Ob();)if(i=r.Pb(),GC(t)===GC(i)||null!=t&&Nfn(t,i))return e&&r.Qb(),!0;return!1}function kwn(n,t,e){var i,r;if(++n.j,e.dc())return!1;for(r=e.Kc();r.Ob();)i=r.Pb(),n.Hi(t,n.oi(t,i)),++t;return!0}function jwn(n,t,e,i){var r,c;if((c=e-t)<3)for(;c<3;)n*=10,++c;else{for(r=1;c>3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function Ewn(n){return Shn(),hN(),!!(Dbn(BB(n.a,81).j,BB(n.b,103))||0!=BB(n.a,81).d.e&&Dbn(BB(n.a,81).j,BB(n.b,103)))}function Twn(n){x9(),BB(n.We((sWn(),qSt)),174).Hc((n_n(),VCt))&&(BB(n.We(fPt),174).Fc((lCn(),cCt)),BB(n.We(qSt),174).Mc(VCt))}function Mwn(n,t){var e;if(t){for(e=0;e<n.i;++e)if(BB(n.g[e],366).Di(t))return!1;return f9(n,t)}return!1}function Swn(n){var t,e,i;for(t=new Il,i=new qb(n.b.Kc());i.b.Ob();)e=VSn(BB(i.b.Pb(),686)),WU(t,t.a.length,e);return t.a}function Pwn(n){var t;return!n.c&&(n.c=new Nn),m$(n.d,new Dn),YKn(n),t=lDn(n),JT(new Rq(null,new w1(n.d,16)),new Cw(n)),t}function Iwn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (instanceClassName: ",cO(t,n.D),t.a+=")",t.a)}function Cwn(n,t){var e,i;t&&(e=Ren(t,"x"),Ten(new Zg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new np(n).a,(kW(i),i)))}function Own(n,t){var e,i;t&&(e=Ren(t,"x"),Cen(new Vg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Yg(n).a,(kW(i),i)))}function Awn(n,t){var e,i,r;if(null==n.i&&qFn(n),e=n.i,-1!=(i=t.aj()))for(r=e.length;i<r;++i)if(e[i]==t)return i;return-1}function $wn(n){var t,e,i,r;for(e=BB(n.g,674),i=n.i-1;i>=0;--i)for(t=e[i],r=0;r<i;++r)if(vFn(n,t,e[r])){Lyn(n,i);break}}function Lwn(n){var t=n.e;function e(n){return n&&0!=n.length?"\t"+n.join("\n\t"):""}return t&&(t.stack||e(n[UVn]))}function Nwn(n){var t;switch(WX(),(t=n.Pc()).length){case 0:return Fnt;case 1:return new Pq(yX(t[0]));default:return new SY(wbn(t))}}function xwn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),Nut));case 2:return KB(n.j,(gcn(),Dut));default:return SQ(),SQ(),set}}function Dwn(n,t){switch(t){case 3:return void Men(n,0);case 4:return void Sen(n,0);case 5:return void Pen(n,0);case 6:return void Ien(n,0)}ofn(n,t)}function Rwn(){Rwn=O,AM(),HXn(),Vpt=Opt,Qpt=u6(Pun(Gk(lMt,1),k3n,146,0,[mpt,ypt,jpt,Ept,Spt,Ppt,Ipt,Cpt,$pt,Npt,kpt,Tpt,Apt]))}function Kwn(n){var t,e;t=n.d==($Pn(),Jst),e=$En(n),hon(n.a,(HXn(),kdt),t&&!e||!t&&e?(wvn(),$Mt):(wvn(),AMt))}function _wn(n,t){var e;return(e=BB(P4(n,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Qc(lH(e.gc()))}function Fwn(){Fwn=O,eOt=new YI("SIMPLE",0),ZCt=new YI("GROUP_DEC",1),tOt=new YI("GROUP_MIXED",2),nOt=new YI("GROUP_INC",3)}function Bwn(){Bwn=O,z$t=new $o,K$t=new Lo,_$t=new No,F$t=new xo,B$t=new Do,H$t=new Ro,q$t=new Ko,G$t=new _o,U$t=new Fo}function Hwn(n,t,e){qtn(),sm.call(this),this.a=kq(Xit,[sVn,rJn],[595,212],0,[nrt,Zit],2),this.c=new bA,this.g=n,this.f=t,this.d=e}function qwn(n,t){this.n=kq(LNt,[sVn,FQn],[364,25],14,[t,IJ(e.Math.ceil(n/32))],2),this.o=n,this.p=t,this.j=n-1>>1,this.k=t-1>>1}function Gwn(n,t){OTn(t,"End label post-processing",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new ae),new ue),new oe),HSn(t)}function zwn(n,t,e){var i;return i=Gy(n.p[t.i.p])+Gy(n.d[t.i.p])+t.n.b+t.a.b,Gy(n.p[e.i.p])+Gy(n.d[e.i.p])+e.n.b+e.a.b-i}function Uwn(n,t,e){var i,r;for(i=e0(e,UQn),r=0;0!=Vhn(i,0)&&r<t;r++)i=rbn(i,e0(n[r],UQn)),n[r]=dG(i),i=kz(i,32);return dG(i)}function Xwn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))<64&&(r=i0(r,yz(1,t)));return r}function Wwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Vwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Qwn(n,t){return n.i>0&&(t.length<n.i&&(t=Den(tsn(t).c,n.i)),aHn(n.g,0,t,0,n.i)),t.length>n.i&&$X(t,n.i,null),t}function Ywn(n,t,e){var i,r,c;return n.ej()?(i=n.i,c=n.fj(),Cfn(n,i,t),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):Cfn(n,n.i,t),e}function Jwn(n,t,e){var i,r;return i=new N7(n.e,4,10,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Zwn(n,t,e){var i,r;return i=new N7(n.e,3,10,null,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function ndn(n){var t;return qD(),t=new wA(BB(n.e.We((sWn(),BSt)),8)),n.B.Hc((n_n(),GCt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function tdn(n){return bvn(),(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197)}function edn(n,t){var e,i;return i=null,Lx(n,(HXn(),Mpt))&&(e=BB(mMn(n,Mpt),94)).Xe(t)&&(i=e.We(t)),null==i&&(i=mMn(vW(n),t)),i}function idn(n,t){var e,i,r;return!!cL(t,42)&&(i=(e=BB(t,42)).cd(),wW(r=lfn(n.Rc(),i),e.dd())&&(null!=r||n.Rc()._b(i)))}function rdn(n,t){var e;return n.f>0&&(n.qj(),-1!=A$n(n,((e=null==t?0:nsn(t))&DWn)%n.d.length,e,t))}function cdn(n,t){var e,i;return n.f>0&&(n.qj(),e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?e.dd():null}function adn(n,t){var e,i,r,c;for(c=axn(n.e.Tg(),t),e=BB(n.g,119),r=0;r<n.i;++r)if(i=e[r],c.rl(i.ak()))return!1;return!0}function udn(n){if(null==n.b){for(;n.a.Ob();)if(n.b=n.a.Pb(),!BB(n.b,49).Zg())return!0;return n.b=null,!1}return!0}function odn(n,t){n.mj();try{n.d.Vc(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function sdn(n,t){var e,i;return s$(),i=null,t==(e=fR((fk(),fk(),rtt)))&&(i=BB(SJ(itt,n),615)),i||(i=new zX(n),t==e&&mZ(itt,n,i)),i}function hdn(n,t){var i,r;n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d+=t,i=t-n.f,r=n.e+i,n.f=r-n.e-i,n.e=r}function fdn(n,t){var e;n.c=t,n.a=pwn(t),n.a<54&&(n.f=(e=t.d>1?i0(yz(t.a[1],32),e0(t.a[0],UQn)):e0(t.a[0],UQn),j2(cbn(t.e,e))))}function ldn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n%t)&&e<OQn?e:uan((Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!0),ltt))}function bdn(n,t){var e;Dzn(t),(e=BB(mMn(n,(HXn(),Jdt)),276))&&hon(n,Jdt,Ayn(e)),nx(n.c),nx(n.f),V6(n.d),V6(BB(mMn(n,Agt),207))}function wdn(n){this.e=x8(ANt,hQn,25,n.length,15,1),this.c=x8($Nt,ZYn,25,n.length,16,1),this.b=x8($Nt,ZYn,25,n.length,16,1),this.f=0}function ddn(n){var t,e;for(n.j=x8(xNt,qQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.j[t.p]=t.o.b/n.i}function gdn(n){var t;0!=n.c&&(1==(t=BB(xq(n.a,n.b),287)).b?(++n.b,n.b<n.a.c.length&&Tb(BB(xq(n.a,n.b),287))):--t.b,--n.c)}function pdn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(lbn(t).a.Kc(),new h))),17).d.i).k==(uSn(),Put)&&WB(n.e,t)}while(t.k==(uSn(),Put))}function vdn(){vdn=O,LCt=new WA(15),$Ct=new XA((sWn(),XSt),LCt),xCt=new XA(LPt,15),NCt=new XA(vPt,iln(0)),ACt=new XA(cSt,dZn)}function mdn(){mdn=O,KCt=new VI("PORTS",0),_Ct=new VI("PORT_LABELS",1),RCt=new VI("NODE_LABELS",2),DCt=new VI("MINIMUM_SIZE",3)}function ydn(n,t){var e,i;for(i=t.length,e=0;e<i;e+=2)Yxn(n,(b1(e,t.length),t.charCodeAt(e)),(b1(e+1,t.length),t.charCodeAt(e+1)))}function kdn(n,t,e){var i,r,c,a;for(c=t-n.e,a=e-n.f,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),i.s+c,i.t+a);n.e=t,n.f=e}function jdn(n,t){var e,i,r;for(r=t.b.b,n.a=new YT,n.b=x8(ANt,hQn,25,r,15,1),e=0,i=spn(t.b,0);i.b!=i.d.c;)BB(b3(i),86).g=e++}function Edn(n,t){var e,i,r,c;return e=t>>5,t&=31,r=n.d+e+(0==t?0:1),xTn(i=x8(ANt,hQn,25,r,15,1),n.a,e,t),X0(c=new lU(n.e,r,i)),c}function Tdn(n,t,e){var i,r;i=BB(SJ(iNt,t),117),r=BB(SJ(rNt,t),117),e?(mZ(iNt,n,i),mZ(rNt,n,r)):(mZ(rNt,n,i),mZ(iNt,n,r))}function Mdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i>=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function Sdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function Pdn(n,t,e,i){var r,c,a;return r=!1,LGn(n.f,e,i)&&(xgn(n.f,n.a[t][e],n.a[t][i]),a=(c=n.a[t])[i],c[i]=c[e],c[e]=a,r=!0),r}function Idn(n,t,e,i,r){var c,a,u;for(a=r;t.b!=t.c;)c=BB(dU(t),10),u=BB(abn(c,i).Xb(0),11),n.d[u.p]=a++,e.c[e.c.length]=u;return a}function Cdn(n,t,i){var r,c,a,u,o;return u=n.k,o=t.k,c=MD(edn(n,r=i[u.g][o.g])),a=MD(edn(t,r)),e.Math.max((kW(c),c),(kW(a),a))}function Odn(n,t,e){var i,r,c,a;for(i=e/n.c.length,r=0,a=new Wb(n);a.a<a.c.c.length;)ghn(c=BB(n0(a),200),c.f+i*r),ajn(c,t,i),++r}function Adn(n,t,e){var i,r,c;for(r=BB(RX(n.b,e),177),i=0,c=new Wb(t.j);c.a<c.c.c.length;)r[BB(n0(c),113).d.p]&&++i;return i}function $dn(n){var t,e;return null!=(t=BB(yan(n.a,4),126))?(aHn(t,0,e=x8(dAt,i9n,415,t.length,0,1),0,t.length),e):wAt}function Ldn(){var n;return 0!=ctt&&(n=l5())-att>2e3&&(att=n,utt=e.setTimeout(QE,10)),0==ctt++&&(Onn((sk(),ttt)),!0)}function Ndn(n,t){var e;for(e=new oz(ZL(lbn(n).a.Kc(),new h));dAn(e);)if(BB(U5(e),17).d.i.c==t)return!1;return!0}function xdn(n,t){var e;if(cL(t,245)){e=BB(t,245);try{return 0==n.vd(e)}catch(i){if(!cL(i=lun(i),205))throw Hp(i)}}return!1}function Ddn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function Rdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))>0}function Kdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<0}function _dn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<=0}function Fdn(n,t){for(var e=0;!t[e]||""==t[e];)e++;for(var i=t[e++];e<t.length;e++)t[e]&&""!=t[e]&&(i+=n+t[e]);return i}function Bdn(n,t,i){var r,c,a,u;for(_8(t,a=t+i,n.length),u="",c=t;c<a;)r=e.Math.min(c+1e4,a),u+=WW(n.slice(c,r)),c=r;return u}function Hdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function qdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function Gdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function zdn(n,t){var e,i,r;if(n.c)Sen(n.c,t);else for(e=t-iG(n),r=new Wb(n.d);r.a<r.c.c.length;)zdn(i=BB(n0(r),157),iG(i)+e)}function Udn(n,t){var e,i,r;if(n.c)Men(n.c,t);else for(e=t-eG(n),r=new Wb(n.a);r.a<r.c.c.length;)Udn(i=BB(n0(r),157),eG(i)+e)}function Xdn(n,t){var e,i,r;for(i=new J6(t.gc()),e=t.Kc();e.Ob();)(r=t_n(n,BB(e.Pb(),56)))&&(i.c[i.c.length]=r);return i}function Wdn(n,t){var e,i;return n.qj(),(e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?(hin(n,e),e.dd()):null}function Vdn(n){var t,e;for(e=uPn(n),t=null;2==n.c;)QXn(n),t||(wWn(),wWn(),tqn(t=new r$(2),e),e=t),e.$l(uPn(n));return e}function Qdn(n){if(!(q6n in n.a))throw Hp(new ek("Every element must have an id."));return kCn(zJ(n,q6n))}function Ydn(n){var t,e,i;if(!(i=n.Zg()))for(t=0,e=n.eh();e;e=e.eh()){if(++t>GQn)return e.fh();if((i=e.Zg())||e==n)break}return i}function Jdn(n){return hZ(),cL(n,156)?BB(RX(hAt,yet),288).vg(n):hU(hAt,tsn(n))?BB(RX(hAt,tsn(n)),288).vg(n):null}function Zdn(n){if(mgn(a5n,n))return hN(),vtt;if(mgn(u5n,n))return hN(),ptt;throw Hp(new _y("Expecting true or false"))}function ngn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw Hp(new _y("Input edge is not connected to the input port."))}function tgn(n,t){return n.e>t.e?1:n.e<t.e?-1:n.d>t.d?n.e:n.d<t.d?-t.e:n.e*Msn(n.a,t.a,n.d)}function egn(n){return n>=48&&n<48+e.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function ign(n,t){var e;return GC(t)===GC(n)||!!cL(t,21)&&(e=BB(t,21)).gc()==n.gc()&&n.Ic(e)}function rgn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,Ex(e<(n.c-n.b&i)),e>=r?(ahn(n,t),-1):(uhn(n,t),1)}function cgn(n,t){var e,i;for(b1(t,n.length),e=n.charCodeAt(t),i=t+1;i<n.length&&(b1(i,n.length),n.charCodeAt(i)==e);)++i;return i-t}function agn(n){switch(n.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return!0;default:return!1}}function ugn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Zun(),ftt)[typeof e];return r?r(e):khn(typeof e)}function ogn(n,t){if(n.a<0)throw Hp(new Fy("Did not call before(...) or after(...) before calling add(...)."));return WN(n,n.a,t),n}function sgn(n,t,e,i){var r;0!=t.c.length&&(r=MLn(e,i),JT(ytn(new Rq(null,new w1(uCn(t),1)),new ja),new XV(n,e,r,i)))}function hgn(n,t,e){var i;0!=(n.Db&t)?null==e?WOn(n,t):-1==(i=Rmn(n,t))?n.Eb=e:$X(een(n.Eb),i,e):null!=e&&mxn(n,t,e)}function fgn(n){var t;return 0==(32&n.Db)&&0!=(t=bX(BB(yan(n,16),26)||n.zh())-bX(n.zh()))&&hgn(n,32,x8(Ant,HWn,1,t,5,1)),n}function lgn(n){var t;return n.b||Xj(n,!(t=nK(n.e,n.a))||!mK(u5n,cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"qualified"))),n.c}function bgn(n,t,e){var i,r;return((r=(i=BB(Wtn(H7(n.a),t),87)).c||(gWn(),l$t)).kh()?tfn(n.b,BB(r,49)):r)==e?lFn(i):cen(i,e),r}function wgn(n,t){(t||null==console.groupCollapsed?null!=console.group?console.group:console.log:console.groupCollapsed).call(console,n)}function dgn(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65).c.b,K8(i,t,n)}function ggn(n){var t,e;for(t=new Wb(n.g);t.a<t.c.c.length;)BB(n0(t),562);zzn(e=new yxn(n.g,Gy(n.a),n.c)),n.g=e.b,n.d=e.a}function pgn(n,t,i){t.b=e.Math.max(t.b,-i.a),t.c=e.Math.max(t.c,i.a-n.a),t.d=e.Math.max(t.d,-i.b),t.a=e.Math.max(t.a,i.b-n.b)}function vgn(n,t){return n.e<t.e?-1:n.e>t.e?1:n.f<t.f?-1:n.f>t.f?1:nsn(n)-nsn(t)}function mgn(n,t){return kW(n),null!=t&&(!!mK(n,t)||n.length==t.length&&mK(n.toLowerCase(),t.toLowerCase()))}function ygn(n,t){var e,i,r,c;for(i=0,r=t.gc();i<r;++i)cL(e=t.il(i),99)&&0!=(BB(e,18).Bb&h6n)&&null!=(c=t.jl(i))&&t_n(n,BB(c,56))}function kgn(n,t,e){var i,r,c;for(c=new Wb(e.a);c.a<c.c.c.length;)r=BB(n0(c),221),i=new I$(BB(RX(n.a,r.b),65)),WB(t.a,i),kgn(n,i,r)}function jgn(n){var t,e;return Vhn(n,-129)>0&&Vhn(n,128)<0?(t=dG(n)+128,!(e=(Eq(),$tt)[t])&&(e=$tt[t]=new Db(n)),e):new Db(n)}function Egn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Tgn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Mgn(n,t){var e,i;for(qZ(),i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)if((e=BB(U5(i),17)).d.i==t||e.c.i==t)return e;return null}function Sgn(n,t,e){this.c=n,this.f=new Np,this.e=new Gj,this.j=new Sq,this.n=new Sq,this.b=t,this.g=new UV(t.c,t.d,t.b,t.a),this.a=e}function Pgn(n){var t,e,i,r;for(this.a=new fA,this.d=new Rv,this.e=0,i=0,r=(e=n).length;i<r;++i)t=e[i],!this.f&&(this.f=t),g2(this,t)}function Ign(n){ODn(),0==n.length?(this.e=0,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0])):(this.e=1,this.d=n.length,this.a=n,X0(this))}function Cgn(n,t,e){sm.call(this),this.a=x8(Xit,rJn,212,(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,0,1),this.b=n,this.d=t,this.c=e}function Ogn(n){this.d=new Np,this.e=new v4,this.c=x8(ANt,hQn,25,(kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,15,1),this.b=n}function Agn(n){var t,e,i,r;for(hon(r=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),e=0,i=(t=Z0(n.e)).length;e<i;++e)MZ(t[e],r)}function $gn(n){var t,e,i,r;for(hon(t=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),i=0,r=(e=Z0(n.g)).length;i<r;++i)SZ(e[i],t)}function Lgn(n){var t,e;return!!Lx(n.d.i,(HXn(),Wgt))&&(t=BB(mMn(n.c.i,Wgt),19),e=BB(mMn(n.d.i,Wgt),19),E$(t.a,e.a)>0)}function Ngn(n){var t;GC(ZAn(n,(sWn(),ESt)))===GC((ufn(),vIt))&&(JJ(n)?(t=BB(ZAn(JJ(n),ESt),334),Ypn(n,ESt,t)):Ypn(n,ESt,mIt))}function xgn(n,t,e){var i,r;fMn(n.e,t,e,(kUn(),ICt)),fMn(n.i,t,e,oCt),n.a&&(r=BB(mMn(t,(hWn(),dlt)),11),i=BB(mMn(e,dlt),11),k0(n.g,r,i))}function Dgn(n,t,e){var i,r,c;i=t.c.p,c=t.p,n.b[i][c]=new DY(n,t),e&&(n.a[i][c]=new Bd(t),(r=BB(mMn(t,(hWn(),rlt)),10))&&JCn(n.d,r,t))}function Rgn(n,t){var e,i,r;if(WB(Sct,n),t.Fc(n),e=BB(RX(Mct,n),21))for(r=e.Kc();r.Ob();)i=BB(r.Pb(),33),-1!=E7(Sct,i,0)||Rgn(i,t)}function Kgn(n,t,e){var i;(Wet?(gwn(n),1):Vet||Jet?(lM(),1):Yet&&(lM(),0))&&((i=new i_(t)).b=e,aSn(n,i))}function _gn(n,t){var e;e=!n.A.Hc((mdn(),_Ct))||n.q==(QEn(),XIt),n.u.Hc((lCn(),eCt))?e?NUn(n,t):aUn(n,t):n.u.Hc(rCt)&&(e?Azn(n,t):JUn(n,t))}function Fgn(n,t){var e,i;++n.j,null!=t&&oOn(t,e=cL(i=n.a.Cb,97)?BB(i,97).Jg():null)?hgn(n.a,4,e):hgn(n.a,4,BB(t,126))}function Bgn(n,t,i){return new UV(e.Math.min(n.a,t.a)-i/2,e.Math.min(n.b,t.b)-i/2,e.Math.abs(n.a-t.a)+i,e.Math.abs(n.b-t.b)+i)}function Hgn(n,t){var e,i;return 0!=(e=E$(n.a.c.p,t.a.c.p))?e:0!=(i=E$(n.a.d.i.p,t.a.d.i.p))?i:E$(t.a.d.p,n.a.d.p)}function qgn(n,t,e){var i,r,c,a;return(c=t.j)!=(a=e.j)?c.g-a.g:(i=n.f[t.p],r=n.f[e.p],0==i&&0==r?0:0==i?-1:0==r?1:Pln(i,r))}function Ggn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Wb(kbn(t));i.a<i.c.c.length;)Ggn(n,Nbn(BB(n0(i),213),t),e)}function zgn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new xI(0,i);case 2:case 4:return new xI(i,0);default:return null}}function Ugn(n,t,e){var i;i=BB(sJ(t.f),209);try{i.Ze(n,e),SW(t.f,i)}catch(r){throw cL(r=lun(r),102),Hp(r)}}function Xgn(n,t,e){var i,r,c,a;return i=null,(c=pGn(cin(),t))&&(r=null,null!=(a=Zqn(c,e))&&(r=n.Ye(c,a)),i=r),i}function Wgn(n,t,e,i){var r;return r=new N7(n.e,1,13,t.c||(gWn(),l$t),e.c||(gWn(),l$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Vgn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;t<r&&!ton((b1(t,n.length),n.charCodeAt(t)),e,i);t++);return t}function Qgn(n,t){var e,i;for(i=n.c.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.c[e]);return t.length>i&&$X(t,i,null),t}function Ygn(n,t){var e,i;for(i=n.a.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.a[e]);return t.length>i&&$X(t,i,null),t}function Jgn(n,t,e){var i,r,c;return(r=BB(RX(n.e,t),387))?(c=pR(r,e),uL(n,r),c):(i=new nH(n,t,e),VW(n.e,t,i),kJ(i),null)}function Zgn(n){var t;if(null==n)return null;if(null==(t=L$n(FBn(n,!0))))throw Hp(new ik("Invalid hexBinary value: '"+n+"'"));return t}function npn(n){return ODn(),Vhn(n,0)<0?0!=Vhn(n,-1)?new vEn(-1,j7(n)):Ytt:Vhn(n,10)<=0?Ztt[dG(n)]:new vEn(1,n)}function tpn(){return dWn(),Pun(Gk(Krt,1),$Vn,159,0,[Prt,Srt,Irt,vrt,prt,mrt,jrt,krt,yrt,Mrt,Trt,Ert,drt,wrt,grt,lrt,frt,brt,srt,ort,hrt,Crt])}function epn(n){var t;this.d=new Np,this.j=new Gj,this.g=new Gj,t=n.g.b,this.f=BB(mMn(vW(t),(HXn(),Udt)),103),this.e=Gy(MD(gpn(t,Spt)))}function ipn(n){this.b=new Np,this.e=new Np,this.d=n,this.a=!jE(AV(new Rq(null,new zU(new m6(n.b))),new aw(new Gr))).sd((dM(),tit))}function rpn(){rpn=O,hMt=new AI("PARENTS",0),sMt=new AI("NODES",1),uMt=new AI("EDGES",2),fMt=new AI("PORTS",3),oMt=new AI("LABELS",4)}function cpn(){cpn=O,BIt=new zI("DISTRIBUTED",0),qIt=new zI("JUSTIFIED",1),_It=new zI("BEGIN",2),FIt=new zI(eJn,3),HIt=new zI("END",4)}function apn(n){switch(n.yi(null)){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function upn(n){switch(n.g){case 1:return Ffn(),HPt;case 4:return Ffn(),_Pt;case 2:return Ffn(),FPt;case 3:return Ffn(),KPt}return Ffn(),BPt}function opn(n,t,e){var i;switch((i=e.q.getFullYear()-sQn+sQn)<0&&(i=-i),t){case 1:n.a+=i;break;case 2:Enn(n,i%100,2);break;default:Enn(n,i,t)}}function spn(n,t){var e,i;if(LZ(t,n.b),t>=n.b>>1)for(i=n.c,e=n.b;e>t;--e)i=i.b;else for(i=n.a.a,e=0;e<t;++e)i=i.a;return new ZK(n,t,i)}function hpn(){hpn=O,dit=new FS("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),wit=new FS("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function fpn(n){var t,e,i;for(m$(e=uIn(n),But),(i=n.d).c=x8(Ant,HWn,1,0,5,1),t=new Wb(e);t.a<t.c.c.length;)gun(i,BB(n0(t),456).b)}function lpn(n){var t,e;for(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)BB(t.nj(),42).dd();return A8(e)}function bpn(n){var t;LK(BB(mMn(n,(HXn(),ept)),98))&&(fOn((l1(0,(t=n.b).c.length),BB(t.c[0],29))),fOn(BB(xq(t,t.c.length-1),29)))}function wpn(n,t){var i,r,c,a;for(i=0,c=new Wb(t.a);c.a<c.c.c.length;)a=(r=BB(n0(c),10)).o.a+r.d.c+r.d.b+n.j,i=e.Math.max(i,a);return i}function dpn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))>=64&&t<128&&(r=i0(r,yz(1,t-64)));return r}function gpn(n,t){var e,i;return i=null,Lx(n,(sWn(),IPt))&&(e=BB(mMn(n,IPt),94)).Xe(t)&&(i=e.We(t)),null==i&&vW(n)&&(i=mMn(vW(n),t)),i}function ppn(n,t){var e,i,r;(i=(r=t.d.i).k)!=(uSn(),Iut)&&i!=Tut&&dAn(e=new oz(ZL(lbn(r).a.Kc(),new h)))&&VW(n.k,t,BB(U5(e),17))}function vpn(n,t){var e,i,r;return i=itn(n.Tg(),t),(e=t-n.Ah())<0?(r=n.Yg(i))>=0?n.lh(r):qCn(n,i):e<0?qCn(n,i):BB(i,66).Nj().Sj(n,n.yh(),e)}function mpn(n){var t;if(cL(n.a,4)){if(null==(t=Jdn(n.a)))throw Hp(new Fy(o5n+n.b+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return t}return n.a}function ypn(n){var t;if(null==n)return null;if(null==(t=UUn(FBn(n,!0))))throw Hp(new ik("Invalid base64Binary value: '"+n+"'"));return t}function kpn(n){var t;try{return t=n.i.Xb(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function jpn(n){var t;try{return t=n.c.ki(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function Epn(){Epn=O,sWn(),Ect=TPt,pct=ySt,lct=cSt,vct=XSt,_kn(),kct=Mit,yct=Eit,jct=Pit,mct=jit,Gsn(),wct=oct,bct=uct,dct=hct,gct=fct}function Tpn(n){switch(jM(),this.c=new Np,this.d=n,n.g){case 0:case 2:this.a=QW(hut),this.b=RQn;break;case 3:case 1:this.a=hut,this.b=KQn}}function Mpn(n,t,e){var i;if(n.c)Pen(n.c,n.c.i+t),Ien(n.c,n.c.j+e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Mpn(BB(n0(i),157),t,e)}function Spn(n,t){var e,i;if(n.j.length!=t.j.length)return!1;for(e=0,i=n.j.length;e<i;e++)if(!mK(n.j[e],t.j[e]))return!1;return!0}function Ppn(n,t,e){var i;t.a.length>0&&(WB(n.b,new VB(t.a,e)),0<(i=t.a.length)?t.a=t.a.substr(0,0):0>i&&(t.a+=rL(x8(ONt,WVn,25,-i,15,1))))}function Ipn(n,t){var e,i,r;for(e=n.o,r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.a=dyn(i,e.a),i.e.b=e.b*Gy(MD(i.b.We(Lrt)))}function Cpn(n,t){var e,i,r,c;return r=n.k,e=Gy(MD(mMn(n,(hWn(),Tlt)))),c=t.k,i=Gy(MD(mMn(t,Tlt))),c!=(uSn(),Mut)?-1:r!=Mut?1:e==i?0:e<i?-1:1}function Opn(n,t){var e,i;return e=BB(BB(RX(n.g,t.a),46).a,65),i=BB(BB(RX(n.g,t.b),46).a,65),W8(t.a,t.b)-W8(t.a,_$(e.b))-W8(t.b,_$(i.b))}function Apn(n,t){var e;return e=BB(mMn(n,(HXn(),vgt)),74),tL(t,vut)?e?yQ(e):(e=new km,hon(n,vgt,e)):e&&hon(n,vgt,null),e}function $pn(n){var t;return(t=new Ik).a+="n",n.k!=(uSn(),Iut)&&oO(oO((t.a+="(",t),dx(n.k).toLowerCase()),")"),oO((t.a+="_",t),gyn(n)),t.a}function Lpn(n,t){OTn(t,"Self-Loop post-processing",1),JT(AV(AV(wnn(new Rq(null,new w1(n.b,16)),new xi),new Di),new Ri),new Ki),HSn(t)}function Npn(n,t,e,i){var r;return e>=0?n.hh(t,e,i):(n.eh()&&(i=(r=n.Vg())>=0?n.Qg(i):n.eh().ih(n,-1-r,null,i)),n.Sg(t,e,i))}function xpn(n,t){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),void sqn(n.e);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),void sqn(n.d)}Dwn(n,t)}function Dpn(n,t){var e;e=n.Zc(t);try{return e.Pb()}catch(i){throw cL(i=lun(i),109)?Hp(new Ay("Can't get element "+t)):Hp(i)}}function Rpn(n,t){this.e=n,t<XQn?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0|t])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[t%XQn|0,t/XQn|0]))}function Kpn(n,t){var e,i,r,c;for(SQ(),e=n,c=t,cL(n,21)&&!cL(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function _pn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=Lyn(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):Lyn(n,i)),e}function Fpn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=wq(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):wq(n,i)),e}function Bpn(n,t){var e;switch(e=BB(oV(n.b,t),124).n,t.g){case 1:n.t>=0&&(e.d=n.t);break;case 3:n.t>=0&&(e.a=n.t)}n.C&&(e.b=n.C.b,e.c=n.C.c)}function Hpn(){Hpn=O,Brt=new _S(mJn,0),Frt=new _S(yJn,1),Hrt=new _S(kJn,2),qrt=new _S(jJn,3),Brt.a=!1,Frt.a=!0,Hrt.a=!1,qrt.a=!0}function qpn(){qpn=O,Zrt=new KS(mJn,0),Jrt=new KS(yJn,1),nct=new KS(kJn,2),tct=new KS(jJn,3),Zrt.a=!1,Jrt.a=!0,nct.a=!1,tct.a=!0}function Gpn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i).k==(uSn(),Put)&&n.b.Fc(t)}while(t.k==(uSn(),Put));n.b=ean(n.b)}function zpn(n){var t,e,i;for(i=n.c.a,n.p=(yX(i),new t_(i)),e=new Wb(i);e.a<e.c.c.length;)(t=BB(n0(e),10)).p=hIn(t).a;SQ(),m$(n.p,new Oc)}function Upn(n){var t,e,i;if(e=0,0==(i=wDn(n)).c.length)return 1;for(t=new Wb(i);t.a<t.c.c.length;)e+=Upn(BB(n0(t),33));return e}function Xpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.b+e.b.rf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Wpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.d+e.b.rf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Vpn(n,t,e,i){if(t.a<i.a)return!0;if(t.a==i.a){if(t.b<i.b)return!0;if(t.b==i.b&&n.b>e.b)return!0}return!1}function Qpn(n,t){return XC(n)?!!OWn[t]:n.hm?!!n.hm[t]:UC(n)?!!CWn[t]:!!zC(n)&&!!IWn[t]}function Ypn(n,t,e){return null==e?(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),vjn(n.o,t,e)),n}function Jpn(n,t,e,i){var r;(r=Xfn(t.Xe((sWn(),DSt))?BB(t.We(DSt),21):n.j))!=(dWn(),Crt)&&(e&&!agn(r)||USn(N$n(n,r,i),t))}function Zpn(n,t,e,i){var r,c,a;return c=itn(n.Tg(),t),(r=t-n.Ah())<0?(a=n.Yg(c))>=0?n._g(a,e,!0):cOn(n,c,e):BB(c,66).Nj().Pj(n,n.yh(),r,e,i)}function nvn(n,t,e,i){var r,c;e.mh(t)&&(ZM(),hnn(t)?ygn(n,BB(e.ah(t),153)):(r=(c=t)?BB(i,49).xh(c):null)&&_p(e.ah(t),r))}function tvn(n){switch(n.g){case 1:return Dan(),Rrt;case 3:return Dan(),Nrt;case 2:return Dan(),Drt;case 4:return Dan(),xrt;default:return null}}function evn(n){switch(typeof n){case NWn:return vvn(n);case LWn:return IJ(n);case $Wn:return hN(),n?1231:1237;default:return null==n?0:PN(n)}}function ivn(n,t,e){if(n.e)switch(n.b){case 1:BQ(n.c,t,e);break;case 0:HQ(n.c,t,e)}else t4(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function rvn(n){var t,e;if(null==n)return null;for(e=x8(Out,sVn,193,n.length,0,2),t=0;t<e.length;t++)e[t]=BB(G9(n[t],n[t].length),193);return e}function cvn(n){var t;if(Ksn(n))return mz(n),n.Lk()&&(t=FCn(n.e,n.b,n.c,n.a,n.j),n.j=t),n.g=n.a,++n.a,++n.c,n.i=0,n.j;throw Hp(new yv)}function avn(n,t){var e,i,r,c;return(c=n.o)<(e=n.p)?c*=c:e*=e,i=c+e,(c=t.o)<(e=t.p)?c*=c:e*=e,i<(r=c+e)?-1:i==r?0:1}function uvn(n,t){var e,i;if((i=Wyn(n,t))>=0)return i;if(n.Fk())for(e=0;e<n.i;++e)if(GC(n.Gk(BB(n.g[e],56)))===GC(t))return e;return-1}function ovn(n,t,e){var i,r;if(t>=(r=n.gc()))throw Hp(new tK(t,r));if(n.hi()&&(i=n.Xc(e))>=0&&i!=t)throw Hp(new _y(a8n));return n.mi(t,e)}function svn(n,t){if(this.a=BB(yX(n),245),this.b=BB(yX(t),245),n.vd(t)>0||n==(ey(),Knt)||t==(ty(),_nt))throw Hp(new _y("Invalid range: "+B3(n,t)))}function hvn(n){var t,e;for(this.b=new Np,this.c=n,this.a=!1,e=new Wb(n.a);e.a<e.c.c.length;)t=BB(n0(e),10),this.a=this.a|t.k==(uSn(),Iut)}function fvn(n,t){var e,i,r;for(e=AN(new qv,n),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),121),UNn(aM(cM(uM(rM(new Hv,0),0),e),i));return e}function lvn(n,t,e){var i,r,c;for(r=new oz(ZL((t?fbn(n):lbn(n)).a.Kc(),new h));dAn(r);)i=BB(U5(r),17),(c=t?i.c.i:i.d.i).k==(uSn(),Sut)&&PZ(c,e)}function bvn(){bvn=O,lvt=new _P(QZn,0),bvt=new _P("PORT_POSITION",1),fvt=new _P("NODE_SIZE_WHERE_SPACE_PERMITS",2),hvt=new _P("NODE_SIZE",3)}function wvn(){wvn=O,IMt=new DI("AUTOMATIC",0),AMt=new DI(cJn,1),$Mt=new DI(aJn,2),LMt=new DI("TOP",3),CMt=new DI(oJn,4),OMt=new DI(eJn,5)}function dvn(n,t,e,i){var r,c;for($On(),r=0,c=0;c<e;c++)r=rbn(cbn(e0(t[c],UQn),e0(i,UQn)),e0(dG(r),UQn)),n[c]=dG(r),r=jz(r,32);return dG(r)}function gvn(n,t,i){var r,c;for(c=0,r=0;r<Zit;r++)c=e.Math.max(c,vhn(n.a[t.g][r],i));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.b)),c}function pvn(n,t){var e,i;if(Tx(t>0),(t&-t)==t)return IJ(t*H$n(n,31)*4.656612873077393e-10);do{i=(e=H$n(n,31))%t}while(e-i+(t-1)<0);return IJ(i)}function vvn(n){var t,e,i;return r_(),null!=(i=rit[e=":"+n])?IJ((kW(i),i)):(t=null==(i=iit[e])?JNn(n):IJ((kW(i),i)),CQ(),rit[e]=t,t)}function mvn(n,t,e){OTn(e,"Compound graph preprocessor",1),n.a=new pJ,Nzn(n,t,null),GHn(n,t),tNn(n),hon(t,(hWn(),Hft),n.a),n.a=null,$U(n.b),HSn(e)}function yvn(n,t,e){switch(e.g){case 1:n.a=t.a/2,n.b=0;break;case 2:n.a=t.a,n.b=t.b/2;break;case 3:n.a=t.a/2,n.b=t.b;break;case 4:n.a=0,n.b=t.b/2}}function kvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Pst)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Irn(),xst),0),iX(n,e,t[1],Rst,1)}function jvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Ist)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Irn(),xst),0),iX(n,e,t[1],Rst,1)}function Evn(n){switch(n.g){case 0:return null;case 1:return new Arn;case 2:return new Jm;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Tvn(n,t,e){var i,r;for(mun(n,t-n.s,e-n.t),r=new Wb(n.n);r.a<r.c.c.length;)rb(i=BB(n0(r),211),i.e+t-n.s),cb(i,i.f+e-n.t);n.s=t,n.t=e}function Mvn(n){var t,e,i,r;for(e=0,i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),121).d=e++;return r=null,(t=wSn(n)).c.length>1&&(r=fvn(n,t)),r}function Svn(n){var t;return n.f&&n.f.kh()&&(t=BB(n.f,49),n.f=BB(tfn(n,t),82),n.f!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.f))),n.f}function Pvn(n){var t;return n.i&&n.i.kh()&&(t=BB(n.i,49),n.i=BB(tfn(n,t),82),n.i!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,7,t,n.i))),n.i}function Ivn(n){var t;return n.b&&0!=(64&n.b.Db)&&(t=n.b,n.b=BB(tfn(n,t),18),n.b!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,21,t,n.b))),n.b}function Cvn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Sh(),fNn(n,n.f+1),r=(i&DWn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.uj()),e.Fc(t),++n.f)}function Ovn(n,t,e){var i;return!t.Kj()&&(-2!=t.Zj()?null==(i=t.zj())?null==e:Nfn(i,e):t.Hj()==n.e.Tg()&&null==e)}function Avn(){var n;lin(16,CVn),n=Jin(16),this.b=x8(Gnt,IVn,317,n,0,1),this.c=x8(Gnt,IVn,317,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function $vn(n){LR.call(this),this.k=(uSn(),Iut),this.j=(lin(6,AVn),new J6(6)),this.b=(lin(2,AVn),new J6(2)),this.d=new fm,this.f=new wm,this.a=n}function Lvn(n){var t,e;n.c.length<=1||(dPn(n,BB((t=EDn(n,(kUn(),SCt))).a,19).a,BB(t.b,19).a),dPn(n,BB((e=EDn(n,ICt)).a,19).a,BB(e.b,19).a))}function Nvn(){Nvn=O,yvt=new FP("SIMPLE",0),pvt=new FP(B1n,1),vvt=new FP("LINEAR_SEGMENTS",2),gvt=new FP("BRANDES_KOEPF",3),mvt=new FP(j3n,4)}function xvn(n,t,e){LK(BB(mMn(t,(HXn(),ept)),98))||(W7(n,t,DSn(t,e)),W7(n,t,DSn(t,(kUn(),SCt))),W7(n,t,DSn(t,sCt)),SQ(),m$(t.j,new _d(n)))}function Dvn(n,t,e,i){var r;for(r=BB(h6(i?n.a:n.b,t),21).Kc();r.Ob();)if(_Dn(n,e,BB(r.Pb(),33)))return!0;return!1}function Rvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function Kvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function _vn(n){var t,e;for(t=0,e=new Wb(n.c.a);e.a<e.c.c.length;)t+=F3(new oz(ZL(lbn(BB(n0(e),10)).a.Kc(),new h)));return t/n.c.a.c.length}function Fvn(n){var t,e;for(n.c||zqn(n),e=new km,n0(t=new Wb(n.a));t.a<t.c.c.length;)DH(e,BB(n0(t),407).a);return Px(0!=e.b),Atn(e,e.c.b),e}function Bvn(){Bvn=O,bRn(),qTt=RTt,BTt=new WA(8),new XA((sWn(),XSt),BTt),new XA(LPt,8),HTt=xTt,_Tt=MTt,FTt=STt,KTt=new XA(lSt,(hN(),!1))}function Hvn(n,t,e,i){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e;case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d}return Rbn(n,t,e,i)}function qvn(n){var t;return n.a&&n.a.kh()&&(t=BB(n.a,49),n.a=BB(tfn(n,t),138),n.a!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,5,t,n.a))),n.a}function Gvn(n){return n<48||n>102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function zvn(n,t){if(null==n)throw Hp(new Hy("null key in entry: null="+t));if(null==t)throw Hp(new Hy("null value in entry: "+n+"=null"))}function Uvn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(GC(e)===GC(i)||null!=e&&Nfn(e,i)))return!1}return!t.Ob()}function Xvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[vhn(n.a[0],t),vhn(n.a[1],t),vhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Wvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[mhn(n.a[0],t),mhn(n.a[1],t),mhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Vvn(){Vvn=O,yht=new SP("GREEDY",0),mht=new SP(H1n,1),jht=new SP(B1n,2),Eht=new SP("MODEL_ORDER",3),kht=new SP("GREEDY_MODEL_ORDER",4)}function Qvn(n,t){var e,i,r;for(n.b[t.g]=1,i=spn(t.d,0);i.b!=i.d.c;)r=(e=BB(b3(i),188)).c,1==n.b[r.g]?DH(n.a,e):2==n.b[r.g]?n.b[r.g]=1:Qvn(n,r)}function Yvn(n,t){var e,i,r;for(r=new J6(t.gc()),i=t.Kc();i.Ob();)(e=BB(i.Pb(),286)).c==e.f?hPn(n,e,e.c):rPn(n,e)||(r.c[r.c.length]=e);return r}function Jvn(n,t,e){var i,r,c,a;for(a=n.r+t,n.r+=t,n.d+=e,i=e/n.n.c.length,r=0,c=new Wb(n.n);c.a<c.c.c.length;)w$n(BB(n0(c),211),a,i,r),++r}function Zvn(n){var t,e;for(my(n.b.a),n.a=x8(bit,HWn,57,n.c.c.a.b.c.length,0,1),t=0,e=new Wb(n.c.c.a.b);e.a<e.c.c.length;)BB(n0(e),57).f=t++}function nmn(n){var t,e;for(my(n.b.a),n.a=x8(Qat,HWn,81,n.c.a.a.b.c.length,0,1),t=0,e=new Wb(n.c.a.a.b);e.a<e.c.c.length;)BB(n0(e),81).i=t++}function tmn(n,t,e){OTn(e,"Shrinking tree compaction",1),qy(TD(mMn(t,(Xcn(),Qrt))))?(irn(n,t.f),unn(t.f,t.c)):unn(t.f,t.c),HSn(e)}function emn(n){var t;if(t=bhn(n),!dAn(n))throw Hp(new Ay("position (0) must be less than the number of elements that remained ("+t+")"));return U5(n)}function imn(n,t,e){try{return vmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function rmn(n,t,e){try{return mmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function cmn(n,t,e){try{return ymn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function amn(n){switch(n.g){case 1:return kUn(),ICt;case 4:return kUn(),sCt;case 3:return kUn(),oCt;case 2:return kUn(),SCt;default:return kUn(),PCt}}function umn(n,t,e){t.k==(uSn(),Iut)&&e.k==Put&&(n.d=Efn(t,(kUn(),SCt)),n.b=Efn(t,sCt)),e.k==Iut&&t.k==Put&&(n.d=Efn(e,(kUn(),sCt)),n.b=Efn(e,SCt))}function omn(n,t){var e,i;for(i=abn(n,t).Kc();i.Ob();)if(null!=mMn(e=BB(i.Pb(),11),(hWn(),Elt))||zN(new m6(e.b)))return!0;return!1}function smn(n,t){return Pen(t,n.e+n.d+(0==n.c.c.length?0:n.b)),Ien(t,n.f),n.a=e.Math.max(n.a,t.f),n.d+=t.g+(0==n.c.c.length?0:n.b),WB(n.c,t),!0}function hmn(n,t,e){var i,r,c,a;for(a=0,i=e/n.a.c.length,c=new Wb(n.a);c.a<c.c.c.length;)Tvn(r=BB(n0(c),187),r.s,r.t+a*i),Jvn(r,n.d-r.r+t,i),++a}function fmn(n){var t,e,i;for(e=new Wb(n.b);e.a<e.c.c.length;)for(t=0,i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)BB(n0(i),10).p=t++}function lmn(n,t){var e,i,r,c,a,u;for(r=t.length-1,a=0,u=0,i=0;i<=r;i++)c=t[i],e=pSn(r,i)*efn(1-n,r-i)*efn(n,i),a+=c.a*e,u+=c.b*e;return new xI(a,u)}function bmn(n,t){var e,i,r,c,a;for(e=t.gc(),n.qi(n.i+e),c=t.Kc(),a=n.i,n.i+=e,i=a;i<n.i;++i)r=c.Pb(),jL(n,i,n.oi(i,r)),n.bi(i,r),n.ci();return 0!=e}function wmn(n,t,e){var i,r,c;return n.ej()?(i=n.Vi(),c=n.fj(),++n.j,n.Hi(i,n.oi(i,t)),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):ZD(n,n.Vi(),t),e}function dmn(n,t,e){var i,r,c;return(0!=(64&(c=cL(r=(i=BB(Wtn(a4(n.a),t),87)).c,88)?BB(r,26):(gWn(),d$t)).Db)?tfn(n.b,c):c)==e?lFn(i):cen(i,e),c}function gmn(n,t,e,i,r,c,a,u){var o,s;i&&((o=i.a[0])&&gmn(n,t,e,o,r,c,a,u),Cyn(n,e,i.d,r,c,a,u)&&t.Fc(i),(s=i.a[1])&&gmn(n,t,e,s,r,c,a,u))}function pmn(n,t){var e;return n.a||(e=x8(xNt,qQn,25,0,15,1),gE(n.b.a,new bw(e)),e.sort(ien(T.prototype.te,T,[])),n.a=new _K(e,n.d)),K6(n.a,t)}function vmn(n,t,e){try{return QC(trn(n,t,e),1)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function mmn(n,t,e){try{return QC(trn(n,t,e),0)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function ymn(n,t,e){try{return QC(trn(n,t,e),2)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function kmn(n,t){if(-1==n.g)throw Hp(new dv);n.mj();try{n.d._c(n.g,t),n.f=n.d.j}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function jmn(n,t,e){OTn(e,"Linear segments node placement",1),n.b=BB(mMn(t,(hWn(),Alt)),304),VXn(n,t),vHn(n,t),QHn(n,t),hXn(n),n.a=null,n.b=null,HSn(e)}function Emn(n,t){var e,i,r,c;for(c=n.gc(),t.length<c&&(t=qk(new Array(c),t)),r=t,i=n.Kc(),e=0;e<c;++e)$X(r,e,i.Pb());return t.length>c&&$X(t,c,null),t}function Tmn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e<i;e++)if(null==n.Xb(e))return e}else for(e=0;e<i;e++)if(Nfn(t,n.Xb(e)))return e;return-1}function Mmn(n,t){var e,i,r;return e=t.cd(),r=t.dd(),i=n.xc(e),!(!(GC(r)===GC(i)||null!=r&&Nfn(r,i))||null==i&&!n._b(e))}function Smn(n,t){var e,i,r;return t<=22?(e=n.l&(1<<t)-1,i=r=0):t<=44?(e=n.l,i=n.m&(1<<t-22)-1,r=0):(e=n.l,i=n.m,r=n.h&(1<<t-44)-1),M$(e,i,r)}function Pmn(n,t){switch(t.g){case 1:return n.f.n.d+n.t;case 3:return n.f.n.a+n.t;case 2:return n.f.n.c+n.s;case 4:return n.f.n.b+n.s;default:return 0}}function Imn(n,t){var e,i;switch(i=t.c,e=t.a,n.b.g){case 0:e.d=n.e-i.a-i.d;break;case 1:e.d+=n.e;break;case 2:e.c=n.e-i.a-i.d;break;case 3:e.c=n.e+i.d}}function Cmn(n,t,e,i){var r,c;this.a=t,this.c=i,$l(this,new xI(-(r=n.a).c,-r.d)),UR(this.b,e),c=i/2,t.a?Bx(this.b,0,c):Bx(this.b,c,0),WB(n.c,this)}function Omn(){Omn=O,qjt=new mI(QZn,0),Bjt=new mI(q1n,1),Hjt=new mI("EDGE_LENGTH_BY_POSITION",2),Fjt=new mI("CROSSING_MINIMIZATION_BY_POSITION",3)}function Amn(n,t){var e,i;if(e=BB(sen(n.g,t),33))return e;if(i=BB(sen(n.j,t),118))return i;throw Hp(new ek("Referenced shape does not exist: "+t))}function $mn(n,t){if(n.c==t)return n.d;if(n.d==t)return n.c;throw Hp(new _y("Node 'one' must be either source or target of edge 'edge'."))}function Lmn(n,t){if(n.c.i==t)return n.d.i;if(n.d.i==t)return n.c.i;throw Hp(new _y("Node "+t+" is neither source nor target of edge "+n))}function Nmn(n,t){var e;switch(t.g){case 2:case 4:e=n.a,n.c.d.n.b<e.d.n.b&&(e=n.c),bU(n,t,(Oun(),kst),e);break;case 1:case 3:bU(n,t,(Oun(),vst),null)}}function xmn(n,t,e,i,r,c){var a,u,o,s,h;for(a=ijn(t,e,c),u=e==(kUn(),sCt)||e==ICt?-1:1,s=n[e.g],h=0;h<s.length;h++)(o=s[h])>0&&(o+=r),s[h]=a,a+=u*(o+i)}function Dmn(n){var t,e,i;for(i=n.f,n.n=x8(xNt,qQn,25,i,15,1),n.d=x8(xNt,qQn,25,i,15,1),t=0;t<i;t++)e=BB(xq(n.c.b,t),29),n.n[t]=wpn(n,e),n.d[t]=VLn(n,e)}function Rmn(n,t){var e,i,r;for(r=0,i=2;i<t;i<<=1)0!=(n.Db&i)&&++r;if(0==r){for(e=t<<=1;e<=128;e<<=1)if(0!=(n.Db&e))return 0;return-1}return r}function Kmn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=null,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&(!c&&(c=new go),f9(c,i));c&&aXn(n,c)}function _mn(n){var t,e;if(!n)return null;if(n.dc())return"";for(e=new Sk,t=n.Kc();t.Ob();)cO(e,SD(t.Pb())),e.a+=" ";return KO(e,e.a.length-1)}function Fmn(n,t,e){var i,r,c,a;for(con(n),null==n.k&&(n.k=x8(Jnt,sVn,78,0,0,1)),r=0,c=(i=n.k).length;r<c;++r)Fmn(i[r],t,"\t"+e);(a=n.f)&&Fmn(a,t,e)}function Bmn(n,t){var e,i=new Array(t);switch(n){case 14:case 15:e=0;break;case 16:e=!1;break;default:return i}for(var r=0;r<t;++r)i[r]=e;return i}function Hmn(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();Otn(dA(n.d)?n.a.c:n.a.d,new Mw(n)),n.c.Me(n),_xn(n)}function qmn(n){var t,e,i;for(e=new Wb(n.e.c);e.a<e.c.c.length;){for(i=new Wb((t=BB(n0(e),282)).b);i.a<i.c.c.length;)_Bn(BB(n0(i),447));BIn(t)}}function Gmn(n){var t,i,r,c,a;for(r=0,a=0,c=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),a=e.Math.max(a,t.r),r+=t.d+(c>0?n.c:0),++c;n.b=r,n.d=a}function zmn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t);u.a<u.c.c.length;)a=BB(n0(u),200),r=e.Math.max(r,a.e),c+=a.b+(i>0?n.g:0),++i;n.c=c,n.d=r}function Umn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[gvn(n,(Dtn(),Git),t),gvn(n,zit,t),gvn(n,Uit,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Xmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function Wmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function Vmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),CIt))?(t.Mc(CIt),t.Fc(AIt)):t.Hc(AIt)&&(t.Mc(AIt),t.Fc(CIt)))}function Qmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),DIt))?(t.Mc(DIt),t.Fc(NIt)):t.Hc(NIt)&&(t.Mc(NIt),t.Fc(DIt)))}function Ymn(n,t,e){OTn(e,"Self-Loop ordering",1),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new Ci),new Oi),new Ai),new $i),new bd(n)),HSn(e)}function Jmn(n,t,e,i){var r,c;for(r=t;r<n.c.length;r++){if(l1(r,n.c.length),c=BB(n.c[r],11),!e.Mb(c))return r;i.c[i.c.length]=c}return n.c.length}function Zmn(n,t,e,i){var r,c,a;return null==n.a&&dSn(n,t),a=t.b.j.c.length,c=e.d.p,(r=i.d.p-1)<0&&(r=a-1),c<=r?n.a[r]-n.a[c]:n.a[a-1]-n.a[c]+n.a[r]}function nyn(n){var t,e;if(!n.b)for(n.b=I2(BB(n.f,33).Ag().i),e=new AL(BB(n.f,33).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function tyn(n){var t,e;if(!n.e)for(n.e=I2(yV(BB(n.f,33)).i),e=new AL(yV(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),118),WB(n.e,new op(t));return n.e}function eyn(n){var t,e;if(!n.a)for(n.a=I2(YQ(BB(n.f,33)).i),e=new AL(YQ(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),33),WB(n.a,new JN(n,t));return n.a}function iyn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=bzn(n))n.yk(t);else try{n.yk(null)}catch(e){if(!cL(e=lun(e),60))throw Hp(e)}return n.C}function ryn(n){switch(n.q.g){case 5:kjn(n,(kUn(),sCt)),kjn(n,SCt);break;case 4:cGn(n,(kUn(),sCt)),cGn(n,SCt);break;default:FPn(n,(kUn(),sCt)),FPn(n,SCt)}}function cyn(n){switch(n.q.g){case 5:jjn(n,(kUn(),oCt)),jjn(n,ICt);break;case 4:aGn(n,(kUn(),oCt)),aGn(n,ICt);break;default:BPn(n,(kUn(),oCt)),BPn(n,ICt)}}function ayn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),c.a,0),c.a+=i.f.a+t,c.b=e.Math.max(c.b,i.f.b);return c.b>0&&(c.b+=t),c}function uyn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),0,c.b),c.b+=i.f.b+t,c.a=e.Math.max(c.a,i.f.a);return c.a>0&&(c.a+=t),c}function oyn(n){var t,i,r;for(r=DWn,i=new Wb(n.a);i.a<i.c.c.length;)Lx(t=BB(n0(i),10),(hWn(),wlt))&&(r=e.Math.min(r,BB(mMn(t,wlt),19).a));return r}function syn(n,t){var e,i;if(0==t.length)return 0;for(e=ZX(n.a,t[0],(kUn(),ICt)),e+=ZX(n.a,t[t.length-1],oCt),i=0;i<t.length;i++)e+=qMn(n,i,t);return e}function hyn(){gxn(),this.c=new Np,this.i=new Np,this.e=new fA,this.f=new fA,this.g=new fA,this.j=new Np,this.a=new Np,this.b=new xp,this.k=new xp}function fyn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,5,GOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lyn(n){PY();var t=n.e;if(t&&t.stack){var e=t.stack,i=t+"\n";return e.substring(0,i.length)==i&&(e=e.substring(i.length)),e.split("\n")}return[]}function byn(n){var t;return Min(),(t=Ott)[n>>>28]|t[n>>24&15]<<4|t[n>>20&15]<<8|t[n>>16&15]<<12|t[n>>12&15]<<16|t[n>>8&15]<<20|t[n>>4&15]<<24|t[15&n]<<28}function wyn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=kon(e.Math.max(8,r))<<1,0!=n.b?(urn(n,t=SR(n.a,i),r),n.a=t,n.b=0):Pv(n.a,i),n.c=r)}function dyn(n,t){var e;return(e=n.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),ICt)?-e.rf().a-Gy(MD(e.We(aPt))):t+Gy(MD(e.We(aPt))):e.Hf()==(kUn(),ICt)?-e.rf().a:t}function gyn(n){var t;return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:null!=(t=eQ(n))?t:""+(n.c?E7(n.c.a,n,0):-1)}function pyn(n){var t;return 0!=n.f.c.length&&BB(xq(n.f,0),70).a?BB(xq(n.f,0),70).a:null!=(t=eQ(n))?t:""+(n.i?E7(n.i.j,n,0):-1)}function vyn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e<n.gc();++e)if(i=BB(n.Xb(e),128),e==n.gc()-1||!i.o)return new rC(iln(e),i);return null}function myn(n,t,e){var i,r,c,a;for(c=n.c,i=e?n:t,r=(e?t:n).p+1;r<i.p;++r)if((a=BB(xq(c.a,r),10)).k!=(uSn(),Tut)&&!Lkn(a))return!1;return!0}function yyn(n){var t,i,r,c,a;for(a=0,c=KQn,r=0,i=new Wb(n.a);i.a<i.c.c.length;)a+=(t=BB(n0(i),187)).r+(r>0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function kyn(n){var t,e;if(!n.b)for(n.b=I2(BB(n.f,118).Ag().i),e=new AL(BB(n.f,118).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function jyn(n,t){var e,i,r;if(t.dc())return dD(),dD(),pAt;for(e=new aR(n,t.gc()),r=new AL(n);r.e!=r.i.gc();)i=kpn(r),t.Hc(i)&&f9(e,i);return e}function Eyn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),n.o):(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),A8(n.o)):Zpn(n,t,e,i)}function Tyn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t<e;++t)vx(Wtn(n.rb,t));if(n.vb)for(t=0,e=n.vb.i;t<e;++t)vx(Wtn(n.vb,t));az((CPn(),Z$t),n),n.Bb|=1}function Myn(n,t,e,i,r,c,a,u,o,s,h,f,l,b){return bIn(n,t,i,null,r,c,a,u,o,s,l,!0,b),zln(n,h),cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),2),e&&rrn(n,e),Uln(n,f),n}function Syn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Pyn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Iyn(n,t){var e,i,r;return!((r=n.h-t.h)<0||(e=n.l-t.l,(r+=(i=n.m-t.m+(e>>22))>>22)<0||(n.l=e&SQn,n.m=i&SQn,n.h=r&PQn,0)))}function Cyn(n,t,e,i,r,c,a){var u,o;return!(t.Ae()&&(o=n.a.ue(e,i),o<0||!r&&0==o)||t.Be()&&(u=n.a.ue(e,c),u>0||!a&&0==u))}function Oyn(n,t){if(zsn(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return jbn(t,bst)-jbn(n,bst);case 4:return jbn(n,lst)-jbn(t,lst)}return 0}function Ayn(n){switch(n.g){case 0:return xht;case 1:return Dht;case 2:return Rht;case 3:return Kht;case 4:return _ht;case 5:return Fht;default:return null}}function $yn(n,t,e){var i,r;return Chn(r=new Lm,t),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(i=r,0),Nen(i,1),nln(i,!0),Yfn(i,!0),i}function Lyn(n,t){var e,i;if(t>=n.i)throw Hp(new LO(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&aHn(n.g,t+1,n.g,t,i),$X(n.g,--n.i,null),n.fi(t,e),n.ci(),e}function Nyn(n,t){var e;return n.Db>>16==17?n.Cb.ih(n,21,qAt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function xyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),679).Ke(e)}function Dyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),369).Ke(e)}function Ryn(n){var t,e,i,r,c;for(r=DWn,c=null,i=new Wb(n.d);i.a<i.c.c.length;)(e=BB(n0(i),213)).d.j^e.e.j&&(t=e.e.e-e.d.e-e.a)<r&&(r=t,c=e);return c}function Kyn(){Kyn=O,dat=new $O(NZn,(hN(),!1)),fat=new $O(xZn,100),q7(),lat=new $O(DZn,bat=Oat),wat=new $O(RZn,lZn),gat=new $O(KZn,iln(DWn))}function _yn(n,t,e){var i,r,c,a,u,o;for(o=0,r=0,c=(i=n.a[t]).length;r<c;++r)for(u=Lfn(i[r],e).Kc();u.Ob();)a=BB(u.Pb(),11),VW(n.f,a,iln(o++))}function Fyn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JCn(n,t,kCn(dnn(e,BB(r.Pb(),19).a)))}function Byn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JCn(n,t,kCn(dnn(e,BB(r.Pb(),19).a)))}function Hyn(n){var t;return _Mn(),z9(t=BB(Emn(gz(n.k),x8(FCt,YZn,61,2,0,1)),122),0,t.length,null),t[0]==(kUn(),sCt)&&t[1]==ICt&&($X(t,0,ICt),$X(t,1,sCt)),t}function qyn(n,t,e){var i,r,c;return c=sDn(n,r=XNn(n,t,e)),K9(n.b),k0(n,t,e),SQ(),m$(r,new Vd(n)),i=sDn(n,r),K9(n.b),k0(n,e,t),new rC(iln(c),iln(i))}function Gyn(){Gyn=O,Umt=dq(new B2,(yMn(),Bat),(lWn(),dot)),Xmt=new iR("linearSegments.inputPrio",iln(0)),Wmt=new iR("linearSegments.outputPrio",iln(0))}function zyn(){zyn=O,Ryt=new fI("P1_TREEIFICATION",0),Kyt=new fI("P2_NODE_ORDERING",1),_yt=new fI("P3_NODE_PLACEMENT",2),Fyt=new fI("P4_EDGE_ROUTING",3)}function Uyn(){Uyn=O,sWn(),xjt=gPt,Kjt=LPt,Ijt=KSt,Cjt=BSt,Ojt=qSt,Pjt=DSt,Ajt=USt,Njt=fPt,KAn(),Mjt=wjt,Sjt=djt,$jt=pjt,Ljt=mjt,Djt=yjt,Rjt=kjt,_jt=Ejt}function Xyn(){Xyn=O,MIt=new qI("UNKNOWN",0),jIt=new qI("ABOVE",1),EIt=new qI("BELOW",2),TIt=new qI("INLINE",3),new iR("org.eclipse.elk.labelSide",MIt)}function Wyn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return e}else for(e=0;e<n.i;++e)if(GC(n.g[e])===GC(t))return e;return-1}function Vyn(n,t,e){var i,r;return t.c==(ain(),qvt)&&e.c==Hvt?-1:t.c==Hvt&&e.c==qvt?1:(i=dhn(t.a,n.a),r=dhn(e.a,n.a),t.c==qvt?r-i:i-r)}function Qyn(n,t,e){if(e&&(t<0||t>e.a.c.length))throw Hp(new _y("index must be >= 0 and <= layer node count"));n.c&&y7(n.c.a,n),n.c=e,e&&kG(e.a,t,n)}function Yyn(n,t){var e,i,r;for(i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)return e=BB(U5(i),17),new qf(yX((r=BB(t.Kb(e),10)).n.b+r.o.b/2));return iy(),iy(),Ont}function Jyn(n,t){this.c=new xp,this.a=n,this.b=t,this.d=BB(mMn(n,(hWn(),Alt)),304),GC(mMn(n,(HXn(),Lgt)))===GC((g7(),qht))?this.e=new gm:this.e=new dm}function Zyn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),33),c+=e.Math.pow(i.g*i.f-t,2);return e.Math.sqrt(c/(n.c.length-1))}function nkn(n,t){var e,i;return i=null,n.Xe((sWn(),IPt))&&(e=BB(n.We(IPt),94)).Xe(t)&&(i=e.We(t)),null==i&&n.yf()&&(i=n.yf().We(t)),null==i&&(i=mpn(t)),i}function tkn(n,t){var e,i;e=n.Zc(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't remove element "+t)):Hp(r)}}function ekn(n,t){var e,i,r;if(0==(e=DBn(n,t,r=new von((i=new AT).q.getFullYear()-sQn,i.q.getMonth(),i.q.getDate())))||e<t.length)throw Hp(new _y(t));return r}function ikn(n,t){var e,i,r;for(kW(t),Tx(t!=n),r=n.b.c.length,i=t.Kc();i.Ob();)e=i.Pb(),WB(n.b,kW(e));return r!=n.b.c.length&&(Esn(n,0),!0)}function rkn(){rkn=O,sWn(),kat=ISt,new XA(dSt,(hN(),!0)),Tat=KSt,Mat=BSt,Sat=qSt,Eat=DSt,Pat=USt,Iat=fPt,Kyn(),yat=dat,vat=lat,mat=wat,jat=gat,pat=fat}function ckn(n,t){if(t==n.c)return n.d;if(t==n.d)return n.c;throw Hp(new _y("'port' must be either the source port or target port of the edge."))}function akn(n,t,e){var i,r;switch(r=n.o,i=n.d,t.g){case 1:return-i.d-e;case 3:return r.b+i.a+e;case 2:return r.a+i.c+e;case 4:return-i.b-e;default:return 0}}function ukn(n,t,e,i){var r,c,a;for(PZ(t,BB(i.Xb(0),29)),a=i.bd(1,i.gc()),c=BB(e.Kb(t),20).Kc();c.Ob();)ukn(n,(r=BB(c.Pb(),17)).c.i==t?r.d.i:r.c.i,e,a)}function okn(n){var t;return t=new xp,Lx(n,(hWn(),Dlt))?BB(mMn(n,Dlt),83):(JT(AV(new Rq(null,new w1(n.j,16)),new tr),new gd(t)),hon(n,Dlt,t),t)}function skn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,6,_Ot,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),yOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function hkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,1,DOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),jOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function fkn(n,t){var e;return n.Db>>16==9?n.Cb.ih(n,9,UOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),TOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lkn(n,t){var e;return n.Db>>16==5?n.Cb.ih(n,9,XAt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),s$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function bkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,0,BOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),e$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function wkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,6,GOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),v$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function dkn(){this.a=new lo,this.g=new Avn,this.j=new Avn,this.b=new xp,this.d=new Avn,this.i=new Avn,this.k=new xp,this.c=new xp,this.e=new xp,this.f=new xp}function gkn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;r<c;r++)if(i=Wtn(n,r),null==t){if(null==i)return r}else if(GC(t)===GC(i)||Nfn(t,i))return r;return-1}function pkn(n,t){var e,i;return(e=t.Hh(n.a))?(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),j7n)),mK(E7n,i)?az(n,Utn(t.Hj())):i):null}function vkn(n,t){var e,i;if(t){if(t==n)return!0;for(e=0,i=BB(t,49).eh();i&&i!=t;i=i.eh()){if(++e>GQn)return vkn(n,i);if(i==n)return!0}}return!1}function mkn(n){switch(DN(),n.q.g){case 5:vCn(n,(kUn(),sCt)),vCn(n,SCt);break;case 4:z$n(n,(kUn(),sCt)),z$n(n,SCt);break;default:vUn(n,(kUn(),sCt)),vUn(n,SCt)}}function ykn(n){switch(DN(),n.q.g){case 5:SOn(n,(kUn(),oCt)),SOn(n,ICt);break;case 4:Ipn(n,(kUn(),oCt)),Ipn(n,ICt);break;default:mUn(n,(kUn(),oCt)),mUn(n,ICt)}}function kkn(n){var t,e;(t=BB(mMn(n,(fRn(),nat)),19))?(e=t.a,hon(n,(Mrn(),hat),0==e?new sbn:new I4(e))):hon(n,(Mrn(),hat),new I4(1))}function jkn(n,t){var e;switch(e=n.i,t.g){case 1:return-(n.n.b+n.o.b);case 2:return n.n.a-e.o.a;case 3:return n.n.b-e.o.b;case 4:return-(n.n.a+n.o.a)}return 0}function Ekn(n,t){switch(n.g){case 0:return t==(Tbn(),Flt)?rst:cst;case 1:return t==(Tbn(),Flt)?rst:ist;case 2:return t==(Tbn(),Flt)?ist:cst;default:return ist}}function Tkn(n,t){var i,r,c;for(y7(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=n4n,r=new Wb(n.a);r.a<r.c.c.length;)i=BB(n0(r),187),c=e.Math.max(c,i.d);n.b=c}function Mkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,12,UOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),mOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Skn(n,t){var e;return n.Db>>16==11?n.Cb.ih(n,10,UOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),EOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Pkn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,11,qAt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),g$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ikn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,12,QAt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),m$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ckn(n){var t;return 0==(1&n.Bb)&&n.r&&n.r.kh()&&(t=BB(n.r,49),n.r=BB(tfn(n,t),138),n.r!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.r))),n.r}function Okn(n,t,i){var r;return r=Pun(Gk(xNt,1),qQn,25,15,[iMn(n,(Dtn(),Git),t,i),iMn(n,zit,t,i),iMn(n,Uit,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function Akn(n,t){var e,i,r;if(0!=(r=Yvn(n,t)).c.length)for(m$(r,new ti),e=r.c.length,i=0;i<e;i++)hPn(n,(l1(i,r.c.length),BB(r.c[i],286)),TDn(n,r,i))}function $kn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Tst)),15).Kc();i.Ob();)for(t=gz((e=BB(i.Pb(),101)).k).Kc();t.Ob();)iX(n,e,BB(t.Pb(),61),(Irn(),Dst),1)}function Lkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&n.c==Ajn(t,n).c)return!0;return!1}function Nkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&t.c.i.c==t.d.i.c)return!0;return!1}function xkn(n,t){var e,i;for(OTn(t,"Dull edge routing",1),i=spn(n.b,0);i.b!=i.d.c;)for(e=spn(BB(b3(i),86).d,0);e.b!=e.d.c;)yQ(BB(b3(e),188).a)}function Dkn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)(i=x2(t,BB(r.Pb(),19).a))&&O$n(n,i)}function Rkn(){var n;for(tS(),nWn((QX(),t$t)),_Xn(t$t),Tyn(t$t),gWn(),L$t=l$t,n=new Wb(V$t);n.a<n.c.c.length;)azn(BB(n0(n),241),l$t,null);return!0}function Kkn(n,t){var e,i,r,c,a,u;return(a=n.h>>19)!=(u=t.h>>19)?u-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function _kn(){_kn=O,tRn(),Pit=new $O(UYn,Iit=xit),Rnn(),Mit=new $O(XYn,Sit=mit),hpn(),Eit=new $O(WYn,Tit=dit),jit=new $O(VYn,(hN(),!0))}function Fkn(n,t,e){var i,r;i=t*e,cL(n.g,145)?(r=f3(n)).f.d?r.f.a||(n.d.a+=i+fJn):(n.d.d-=i+fJn,n.d.a+=i+fJn):cL(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function Bkn(n,t,i){var r,c,a,u,o;for(c=n[i.g],o=new Wb(t.d);o.a<o.c.c.length;)(a=(u=BB(n0(o),101)).i)&&a.i==i&&(c[r=u.d[i.g]]=e.Math.max(c[r],a.j.b))}function Hkn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t.d);u.a<u.c.c.length;)Gmn(a=BB(n0(u),443)),r=e.Math.max(r,a.b),c+=a.d+(i>0?n.g:0),++i;t.b=r,t.e=c}function qkn(n){var t,e,i;if(i=n.b,qT(n.i,i.length)){for(e=2*i.length,n.b=x8(Gnt,IVn,317,e,0,1),n.c=x8(Gnt,IVn,317,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)YIn(n,t,t);++n.g}}function Gkn(n,t,e,i){var r,c,a,u;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)u=a-t.k+i,vmn(t,r,a)?cmn(n,c,u)||Xmn(n,c,u):ymn(t,r,a)&&(imn(n,c,u)||Wmn(n,c,u))}function zkn(n,t,e){var i;(i=t.c.i).k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function Ukn(n,t,i){var r,c,a,u,o,s;return jDn(),u=t/2,a=i/2,o=1,s=1,(r=e.Math.abs(n.a))>u&&(o=u/r),(c=e.Math.abs(n.b))>a&&(s=a/c),kL(n,e.Math.min(o,s)),n}function Xkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),y6n),2014))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new ao}function Wkn(){var n,t;d7();try{if(t=BB(Xjn((WM(),zAt),S7n),2024))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new Ds}function Vkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),V9n),1941))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new qo}function Qkn(n,t,e){var i,r;return r=n.e,n.e=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),r!=t&&(e=azn(n,t?kLn(n,t):n.a,e)),e}function Ykn(){AT.call(this),this.e=-1,this.a=!1,this.p=_Vn,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=_Vn}function Jkn(n,t){var e,i,r;if(i=n.b.d.d,n.a||(i+=n.b.d.a),r=t.b.d.d,t.a||(r+=t.b.d.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function Zkn(n,t){var e,i,r;if(i=n.b.b.d,n.a||(i+=n.b.b.a),r=t.b.b.d,t.a||(r+=t.b.b.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function njn(n,t){var e,i,r;if(i=n.b.g.d,n.a||(i+=n.b.g.a),r=t.b.g.d,t.a||(r+=t.b.g.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function tjn(){tjn=O,Nat=WG(dq(dq(dq(new B2,(yMn(),Fat),(lWn(),yot)),Fat,Tot),Bat,Aot),Bat,oot),Dat=dq(dq(new B2,Fat,Jut),Fat,sot),xat=WG(new B2,Bat,fot)}function ejn(n){var t,e,i,r,c;for(t=BB(mMn(n,(hWn(),zft)),83),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=BB(i.Pb(),306)).i).c+=c.a,r.d+=c.b,e.c?NDn(e):xDn(e);hon(n,zft,null)}function ijn(n,t,e){var i,r;switch(i=(r=n.b).d,t.g){case 1:return-i.d-e;case 2:return r.o.a+i.c+e;case 3:return r.o.b+i.a+e;case 4:return-i.b-e;default:return-1}}function rjn(n){var t,e,i,r,c;if(i=0,r=ZJn,n.b)for(t=0;t<360;t++)e=.017453292519943295*t,UKn(n,n.d,0,0,Z3n,e),(c=n.b.ig(n.d))<r&&(i=e,r=c);UKn(n,n.d,0,0,Z3n,i)}function cjn(n,t){var e,i,r,c;for(c=new xp,t.e=null,t.f=null,i=new Wb(t.i);i.a<i.c.c.length;)e=BB(n0(i),65),r=BB(RX(n.g,e.a),46),e.a=qz(e.b),VW(c,e.a,r);n.g=c}function ajn(n,t,e){var i,r,c,a,u;for(r=(t-n.e)/n.d.c.length,c=0,u=new Wb(n.d);u.a<u.c.c.length;)a=BB(n0(u),443),i=n.b-a.b+e,kdn(a,a.e+c*r,a.f),hmn(a,r,i),++c}function ujn(n){var t;if(n.f.qj(),-1!=n.b){if(++n.b,t=n.f.d[n.a],n.b<t.i)return;++n.a}for(;n.a<n.f.d.length;++n.a)if((t=n.f.d[n.a])&&0!=t.i)return void(n.b=0);n.b=-1}function ojn(n,t){var e,i,r;for(e=$In(n,0==(r=t.c.length)?"":(l1(0,t.c.length),SD(t.c[0]))),i=1;i<r&&e;++i)e=BB(e,49).oh((l1(i,t.c.length),SD(t.c[i])));return e}function sjn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),10),n.c[e.c.p][e.p].a=OG(n.i),n.c[e.c.p][e.p].d=Gy(n.c[e.c.p][e.p].a),n.c[e.c.p][e.p].b=1}function hjn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),157),c+=e.Math.pow(iG(i)*eG(i)-t,2);return e.Math.sqrt(c/(n.c.length-1))}function fjn(n,t,e,i){var r,c,a;return a=NRn(n,c=qRn(n,t,e,i)),fMn(n,t,e,i),K9(n.b),SQ(),m$(c,new Qd(n)),r=NRn(n,c),fMn(n,e,t,i),K9(n.b),new rC(iln(a),iln(r))}function ljn(n,t,e){var i;for(OTn(e,"Interactive node placement",1),n.a=BB(mMn(t,(hWn(),Alt)),304),i=new Wb(t.b);i.a<i.c.c.length;)nDn(n,BB(n0(i),29));HSn(e)}function bjn(n,t){OTn(t,"General Compactor",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),dwn(BB(ZAn(n,(Uyn(),Sjt)),380)).hg(n),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function wjn(n,t,e){var i,r;for(IA(n,n.j+t,n.k+e),r=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));r.e!=r.i.gc();)TA(i=BB(kpn(r),469),i.a+t,i.b+e);PA(n,n.b+t,n.c+e)}function djn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),Ywn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),Ywn(n.d,t,i)}return FTn(n,t,e,i)}function gjn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),_pn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),_pn(n.d,t,i)}return run(n,t,e,i)}function pjn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&bCn(n,r,t)}function vjn(n,t,e){var i,r,c;return n.qj(),c=null==t?0:nsn(t),n.f>0&&(r=aOn(n,(c&DWn)%n.d.length,c,t))?r.ed(e):(i=n.tj(c,t,e),n.c.Fc(i),null)}function mjn(n,t){var e,i,r,c;switch(Ifn(n,t)._k()){case 3:case 2:for(r=0,c=(e=YBn(t)).i;r<c;++r)if(5==DW(B7(n,i=BB(Wtn(e,r),34))))return i}return null}function yjn(n){var t,e,i,r,c;if(qT(n.f,n.b.length))for(i=x8(Qnt,IVn,330,2*n.b.length,0,1),n.b=i,r=i.length-1,e=n.a;e!=n;e=e.Rd())t=(c=BB(e,330)).d&r,c.a=i[t],i[t]=c}function kjn(n,t){var i,r,c,a;for(a=0,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)r=BB(c.Pb(),111),a=e.Math.max(a,r.e.a+r.b.rf().a);(i=BB(oV(n.b,t),124)).n.b=0,i.a.a=a}function jjn(n,t){var i,r,c,a;for(i=0,a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)c=BB(a.Pb(),111),i=e.Math.max(i,c.e.b+c.b.rf().b);(r=BB(oV(n.b,t),124)).n.d=0,r.a.b=i}function Ejn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=kA(vyt),e.Hc((bDn(),gft))&&Jcn(t,kyt),e.Hc(vft)&&Jcn(t,Eyt),e.Hc(sft)&&Jcn(t,myt),e.Hc(fft)&&Jcn(t,yyt),t}function Tjn(n,t){var e;OTn(t,"Delaunay triangulation",1),e=new Np,Otn(n.i,new yg(e)),qy(TD(mMn(n,(Xcn(),Qrt)))),n.e?Frn(n.e,$Xn(e)):n.e=$Xn(e),HSn(t)}function Mjn(n){if(n<0)throw Hp(new _y("The input must be positive"));return n<MMt.length?j2(MMt[n]):e.Math.sqrt(Z3n*n)*(ifn(n,n)/efn(2.718281828459045,n))}function Sjn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return!0}else for(e=0;e<n.i;++e)if(GC(n.g[e])===GC(t))return!0;return!1}function Pjn(n,t){if(null==t){for(;n.a.Ob();)if(null==BB(n.a.Pb(),42).dd())return!0}else for(;n.a.Ob();)if(Nfn(t,BB(n.a.Pb(),42).dd()))return!0;return!1}function Ijn(n,t){var e;return t===n||!!cL(t,664)&&(e=BB(t,1947),ign(n.g||(n.g=new Zf(n)),e.g||(e.g=new Zf(e))))}function Cjn(n){var t,i,r;for(t="Sz",i="ez",r=e.Math.min(n.length,5)-1;r>=0;r--)if(mK(n[r].d,t)||mK(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function Ojn(n,t){var i;return JO(n)&&JO(t)&&$Qn<(i=n/t)&&i<OQn?i<0?e.Math.ceil(i):e.Math.floor(i):uan(Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!1))}function Ajn(n,t){if(t==n.c.i)return n.d.i;if(t==n.d.i)return n.c.i;throw Hp(new _y("'node' must either be the source node or target node of the edge."))}function $jn(n){var t,e,i,r;if(r=BB(mMn(n,(hWn(),Fft)),37)){for(i=new Gj,t=vW(n.c.i);t!=r;)t=vW(e=t.e),_x(UR(UR(i,e.n),t.c),t.d.b,t.d.d);return i}return Fut}function Ljn(n){var t;JT(wnn(new Rq(null,new w1((t=BB(mMn(n,(hWn(),Olt)),403)).d,16)),new _i),new wd(n)),JT(AV(new Rq(null,new w1(t.d,16)),new Fi),new dd(n))}function Njn(n,t){var e,i;for(e=new oz(ZL((t?lbn(n):fbn(n)).a.Kc(),new h));dAn(e);)if((i=Ajn(BB(U5(e),17),n)).k==(uSn(),Put)&&i.c!=n.c)return i;return null}function xjn(n){var t,i,r;for(i=new Wb(n.p);i.a<i.c.c.length;)(t=BB(n0(i),10)).k==(uSn(),Iut)&&(r=t.o.b,n.i=e.Math.min(n.i,r),n.g=e.Math.max(n.g,r))}function Djn(n,t,e){var i,r,c;for(c=new Wb(t);c.a<c.c.c.length;)i=BB(n0(c),10),n.c[i.c.p][i.p].e=!1;for(r=new Wb(t);r.a<r.c.c.length;)xzn(n,i=BB(n0(r),10),e)}function Rjn(n,t,i){var r,c;(r=Tfn(t.j,i.s,i.c)+Tfn(i.e,t.s,t.c))==(c=Tfn(i.j,t.s,t.c)+Tfn(t.e,i.s,i.c))?r>0&&(n.b+=2,n.a+=r):(n.b+=1,n.a+=e.Math.min(r,c))}function Kjn(n,t){var e;if(e=!1,XC(t)&&(e=!0,nW(n,new GX(SD(t)))),e||cL(t,236)&&(e=!0,nW(n,new Sl(XK(BB(t,236))))),!e)throw Hp(new Ly(H6n))}function _jn(n,t,e,i){var r,c,a;return r=new N7(n.e,1,10,cL(a=t.c,88)?BB(a,26):(gWn(),d$t),cL(c=e.c,88)?BB(c,26):(gWn(),d$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Fjn(n){var t,e;switch(BB(mMn(vW(n),(HXn(),pgt)),420).g){case 0:return t=n.n,e=n.o,new xI(t.a+e.a/2,t.b+e.b/2);case 1:return new wA(n.n);default:return null}}function Bjn(){Bjn=O,Qht=new AP(QZn,0),Vht=new AP("LEFTUP",1),Jht=new AP("RIGHTUP",2),Wht=new AP("LEFTDOWN",3),Yht=new AP("RIGHTDOWN",4),Xht=new AP("BALANCED",5)}function Hjn(n,t,e){var i,r,c;if(0==(i=Pln(n.a[t.p],n.a[e.p]))){if(r=BB(mMn(t,(hWn(),clt)),15),c=BB(mMn(e,clt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function qjn(n){switch(n.g){case 1:return new _a;case 2:return new Fa;case 3:return new Ka;case 0:return null;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Gjn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),sqn(n.n),!n.n&&(n.n=new eU(zOt,n,1,7)),void pX(n.n,BB(e,14));case 2:return void $in(n,SD(e))}rsn(n,t,e)}function zjn(n,t,e){switch(t){case 3:return void Men(n,Gy(MD(e)));case 4:return void Sen(n,Gy(MD(e)));case 5:return void Pen(n,Gy(MD(e)));case 6:return void Ien(n,Gy(MD(e)))}Gjn(n,t,e)}function Ujn(n,t,e){var i,r;(i=HTn(r=new Lm,t,null))&&i.Fi(),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(r,0),Nen(r,1),nln(r,!0),Yfn(r,!0)}function Xjn(n,t){var e,i;return cL(e=hS(n.g,t),235)?((i=BB(e,235)).Qh(),i.Nh()):cL(e,498)?i=BB(e,1938).b:null}function Wjn(n,t,e,i){var r,c;return yX(t),yX(e),R7(!!(c=BB(UK(n.d,t),19)),"Row %s not in %s",t,n.e),R7(!!(r=BB(UK(n.b,e),19)),"Column %s not in %s",e,n.c),Sun(n,c.a,r.a,i)}function Vjn(n,t,e,i,r,c,a){var u,o,s,h,f;if(f=Bmn(u=(s=c==a-1)?i:0,h=r[c]),10!=i&&Pun(Gk(n,a-c),t[c],e[c],u,f),!s)for(++c,o=0;o<h;++o)f[o]=Vjn(n,t,e,i,r,c,a);return f}function Qjn(n){if(-1==n.g)throw Hp(new dv);n.mj();try{n.i.$c(n.g),n.f=n.i.j,n.g<n.e&&--n.e,n.g=-1}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}}function Yjn(n,t){return n.b.a=e.Math.min(n.b.a,t.c),n.b.b=e.Math.min(n.b.b,t.d),n.a.a=e.Math.max(n.a.a,t.c),n.a.b=e.Math.max(n.a.b,t.d),n.c[n.c.length]=t,!0}function Jjn(n){var t,e,i;for(i=-1,e=0,t=new Wb(n);t.a<t.c.c.length;){if(BB(n0(t),243).c==(ain(),Hvt)){i=0==e?0:e-1;break}e==n.c.length-1&&(i=e),e+=1}return i}function Zjn(n){var t,i,r,c;for(c=0,t=0,r=new Wb(n.c);r.a<r.c.c.length;)Pen(i=BB(n0(r),33),n.e+c),Ien(i,n.f),c+=i.g+n.b,t=e.Math.max(t,i.f+n.b);n.d=c-n.b,n.a=t-n.b}function nEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),57)).d.c,t.d.c=t.d.d,t.d.d=i,i=t.d.b,t.d.b=t.d.a,t.d.a=i,i=t.b.a,t.b.a=t.b.b,t.b.b=i;yNn(n)}function tEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),81)).g.c,t.g.c=t.g.d,t.g.d=i,i=t.g.b,t.g.b=t.g.a,t.g.a=i,i=t.e.a,t.e.a=t.e.b,t.e.b=i;kNn(n)}function eEn(n){var t,e,i,r,c;for(c=gz(n.k),kUn(),i=0,r=(e=Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length;i<r;++i)if((t=e[i])!=PCt&&!c.Hc(t))return t;return null}function iEn(n,t){var e,i;return(i=BB(EN(Qon(AV(new Rq(null,new w1(t.j,16)),new bc))),11))&&(e=BB(xq(i.e,0),17))?BB(mMn(e,(hWn(),wlt)),19).a:gnn(n.b)}function rEn(n,t){var e,i,r;for(r=new Wb(t.a);r.a<r.c.c.length;)for(i=BB(n0(r),10),nk(n.d),e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)XOn(n,i,BB(U5(e),17).d.i)}function cEn(n,t){var e,i;for(y7(n.b,t),i=new Wb(n.n);i.a<i.c.c.length;)if(-1!=E7((e=BB(n0(i),211)).c,t,0)){y7(e.c,t),Zjn(e),0==e.c.c.length&&y7(n.n,e);break}fHn(n)}function aEn(n,t){var i,r,c,a,u;for(u=n.f,c=0,a=0,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),n.e,u),p9(i,t),a=e.Math.max(a,i.r),c=u+=i.d+n.c;n.d=a,n.b=c}function uEn(n){var t,e;return h3(e=wLn(n))?null:(yX(e),t=BB(emn(new oz(ZL(e.a.Kc(),new h))),79),PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)))}function oEn(n){return n.o||(n.Lj()?n.o=new aW(n,n,null):n.rk()?n.o=new rR(n,null):1==DW(B7((CPn(),Z$t),n))?n.o=new g4(n):n.o=new cR(n,null)),n.o}function sEn(n,t,e,i){var r,c,a,u,o;e.mh(t)&&(r=(a=t)?BB(i,49).xh(a):null)&&(o=e.ah(t),(u=t.t)>1||-1==u?(c=BB(o,15),r.Wb(Xdn(n,c))):r.Wb(t_n(n,BB(o,56))))}function hEn(n,t,e,i){YE();var r=PWn;function c(){for(var n=0;n<r.length;n++)r[n]()}if(n)try{HNt(c)()}catch(a){n(t,a)}else HNt(c)()}function fEn(n){var t,e,i,r,c;for(i=new usn(new Pb(n.b).a);i.b;)t=BB((e=ten(i)).cd(),10),c=BB(BB(e.dd(),46).a,10),r=BB(BB(e.dd(),46).b,8),UR(kO(t.n),UR(B$(c.n),r))}function lEn(n){switch(BB(mMn(n.b,(HXn(),egt)),375).g){case 1:JT($V(wnn(new Rq(null,new w1(n.d,16)),new _r),new Fr),new Br);break;case 2:vRn(n);break;case 0:IIn(n)}}function bEn(n,t,e){OTn(e,"Straight Line Edge Routing",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),mHn(n,BB(ZAn(t,(wD(),Vkt)),33)),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function wEn(){wEn=O,ZMt=new RI("V_TOP",0),JMt=new RI("V_CENTER",1),YMt=new RI("V_BOTTOM",2),VMt=new RI("H_LEFT",3),WMt=new RI("H_CENTER",4),QMt=new RI("H_RIGHT",5)}function dEn(n){var t;return 0!=(64&n.Db)?Iwn(n):((t=new fN(Iwn(n))).a+=" (abstract: ",yE(t,0!=(256&n.Bb)),t.a+=", interface: ",yE(t,0!=(512&n.Bb)),t.a+=")",t.a)}function gEn(n,t,e,i){var r,c,a;return mA(n.e)&&(a=LY(n,1,r=t.ak(),t.dd(),c=e.dd(),r.$j()?pBn(n,r,c,cL(r,99)&&0!=(BB(r,18).Bb&BQn)):-1,!0),i?i.Ei(a):i=a),i}function pEn(n){var t;null==n.c&&(t=GC(n.b)===GC(Ynt)?null:n.b,n.d=null==t?zWn:ez(t)?jN(EQ(t)):XC(t)?qVn:nE(tsn(t)),n.a=n.a+": "+(ez(t)?IR(EQ(t)):t+""),n.c="("+n.d+") "+n.a)}function vEn(n,t){this.e=n,QC(e0(t,-4294967296),0)?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t)])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t),dG(kz(t,32))]))}function mEn(){function n(){try{return(new Map).entries().next().done}catch(n){return!1}}return typeof Map===xWn&&Map.prototype.entries&&n()?Map:bUn()}function yEn(n,t){var e,i,r;for(r=new M2(n.e,0),e=0;r.b<r.d.gc();){if((i=Gy((Px(r.b<r.d.gc()),MD(r.d.Xb(r.c=r.b++))))-t)>D3n)return e;i>-1e-6&&++e}return e}function kEn(n,t){var e;t!=n.b?(e=null,n.b&&(e=oJ(n.b,n,-4,e)),t&&(e=Npn(t,n,-4,e)),(e=Zhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function jEn(n,t){var e;t!=n.f?(e=null,n.f&&(e=oJ(n.f,n,-1,e)),t&&(e=Npn(t,n,-1,e)),(e=nfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,t,t))}function EEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function TEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function MEn(n,t,e){var i,r;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?Tz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function SEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),OV(new Bg(n).a,i)}function PEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),CV(new $g(n).a,i)}function IEn(n){if(null!=n&&n.length>0&&33==fV(n,n.length-1))try{return null==YPn(fx(n,0,n.length-1)).e}catch(t){if(!cL(t=lun(t),32))throw Hp(t)}return!1}function CEn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,3,i,null,c,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,1,i,i.zj(),c,-1,!0),e?e.Ei(r):e=r,e}function OEn(){var n,t,e;for(t=0,n=0;n<1;n++){if(0==(e=QOn((b1(n,1),"X".charCodeAt(n)))))throw Hp(new ak("Unknown Option: "+"X".substr(n)));t|=e}return t}function AEn(n,t,e){var i,r;switch(i=Wln(vW(t)),IZ(r=new ISn,t),e.g){case 1:qIn(r,Tln(hwn(i)));break;case 2:qIn(r,hwn(i))}return hon(r,(HXn(),tpt),MD(mMn(n,tpt))),r}function $En(n){var t,e;return t=BB(U5(new oz(ZL(fbn(n.a).a.Kc(),new h))),17),e=BB(U5(new oz(ZL(lbn(n.a).a.Kc(),new h))),17),qy(TD(mMn(t,(hWn(),Ilt))))||qy(TD(mMn(e,Ilt)))}function LEn(){LEn=O,Mst=new yP("ONE_SIDE",0),Pst=new yP("TWO_SIDES_CORNER",1),Ist=new yP("TWO_SIDES_OPPOSING",2),Sst=new yP("THREE_SIDES",3),Tst=new yP("FOUR_SIDES",4)}function NEn(n,t,e,i,r){var c,a;c=BB(P4(AV(t.Oc(),new Zr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),a=BB(gan(n.b,e,i),15),0==r?a.Wc(0,c):a.Gc(c)}function xEn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(i),10)).a.Kc(),new h));dAn(e);)r=BB(U5(e),17).c.i.p,n.n[r]=n.n[r]-1}function DEn(n,t){var e,i,r,c;for(r=new Wb(t.d);r.a<r.c.c.length;)for(i=BB(n0(r),101),c=BB(RX(n.c,i),112).o,e=new QT(i.b);e.a<e.c.a.length;)g9(i,BB(u4(e),61),c)}function REn(n){var t;for(t=new Wb(n.e.b);t.a<t.c.c.length;)hzn(n,BB(n0(t),29));JT(AV(wnn(wnn(new Rq(null,new w1(n.e.b,16)),new Xc),new Zc),new na),new hg(n))}function KEn(n,t){return!!t&&!n.Di(t)&&(n.i?n.i.Ei(t):cL(t,143)?(n.i=BB(t,143),!0):(n.i=new po,n.i.Ei(t)))}function _En(n){if(n=FBn(n,!0),mK(a5n,n)||mK("1",n))return hN(),vtt;if(mK(u5n,n)||mK("0",n))return hN(),ptt;throw Hp(new ik("Invalid boolean value: '"+n+"'"))}function FEn(n,t,e){var i,r,c;for(r=n.vc().Kc();r.Ob();)if(c=(i=BB(r.Pb(),42)).cd(),GC(t)===GC(c)||null!=t&&Nfn(t,c))return e&&(i=new PS(i.cd(),i.dd()),r.Qb()),i;return null}function BEn(n){var t,e,i;qD(),n.B.Hc((n_n(),qCt))&&(i=n.f.i,t=new gY(n.a.c),(e=new bm).b=t.c-i.c,e.d=t.d-i.d,e.c=i.c+i.b-(t.c+t.b),e.a=i.d+i.a-(t.d+t.a),n.e.Ff(e))}function HEn(n,t,i,r){var c,a,u;for(u=e.Math.min(i,WFn(BB(n.b,65),t,i,r)),a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),221))!=t&&(u=e.Math.min(u,HEn(c,t,u,r)));return u}function qEn(n){var t,e,i;for(i=x8(Out,sVn,193,n.b.c.length,0,2),e=new M2(n.b,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),29),i[e.b-1]=n2(t.a);return i}function GEn(n,t,e,i,r){var c,a,u,o;for(a=nj(Zk(H_(tvn(e)),i),akn(n,e,r)),o=DSn(n,e).Kc();o.Ob();)t[(u=BB(o.Pb(),11)).p]&&(c=t[u.p].i,WB(a.d,new xG(c,kln(a,c))));Pwn(a)}function zEn(n,t){this.f=new xp,this.b=new xp,this.j=new xp,this.a=n,this.c=t,this.c>0&&_yn(this,this.c-1,(kUn(),oCt)),this.c<this.a.length-1&&_yn(this,this.c+1,(kUn(),ICt))}function UEn(n){n.length>0&&n[0].length>0&&(this.c=qy(TD(mMn(vW(n[0][0]),(hWn(),alt))))),this.a=x8(Pmt,sVn,2018,n.length,0,2),this.b=x8(Lmt,sVn,2019,n.length,0,2),this.d=new Thn}function XEn(n){return 0!=n.c.length&&((l1(0,n.c.length),BB(n.c[0],17)).c.i.k==(uSn(),Put)||o5($V(new Rq(null,new w1(n,16)),new Kc),new _c))}function WEn(n,t,e){return OTn(e,"Tree layout",1),h2(n.b),IU(n.b,(zyn(),Ryt),Ryt),IU(n.b,Kyt,Kyt),IU(n.b,_yt,_yt),IU(n.b,Fyt,Fyt),n.a=$qn(n.b,t),lxn(n,t,mcn(e,1)),HSn(e),t}function VEn(n,t){var i,r,c,a,u,o;for(u=wDn(t),c=t.f,o=t.g,a=e.Math.sqrt(c*c+o*o),r=0,i=new Wb(u);i.a<i.c.c.length;)r+=VEn(n,BB(n0(i),33));return e.Math.max(r,a)}function QEn(){QEn=O,YIt=new UI(hJn,0),QIt=new UI("FREE",1),VIt=new UI("FIXED_SIDE",2),UIt=new UI("FIXED_ORDER",3),WIt=new UI("FIXED_RATIO",4),XIt=new UI("FIXED_POS",5)}function YEn(n,t){var e,i,r;if(e=t.Hh(n.a))for(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),T7n)),i=1;i<(CPn(),nLt).length;++i)if(mK(nLt[i],r))return i;return 0}function JEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function ZEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function nTn(n){var t,e,i;for(i=new $an(FWn,"{","}"),e=n.vc().Kc();e.Ob();)b6(i,W3(n,(t=BB(e.Pb(),42)).cd())+"="+W3(n,t.dd()));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function tTn(n){for(var t,e,i,r;!Wy(n.o);)e=BB(dU(n.o),46),i=BB(e.a,121),r=Nbn(t=BB(e.b,213),i),t.e==i?(RN(r.g,t),i.e=r.e+t.a):(RN(r.b,t),i.e=r.e-t.a),WB(n.e.a,i)}function eTn(n,t){var e,i,r;for(e=null,r=BB(t.Kb(n),20).Kc();r.Ob();)if(i=BB(r.Pb(),17),e){if((i.c.i==n?i.d.i:i.c.i)!=e)return!1}else e=i.c.i==n?i.d.i:i.c.i;return!0}function iTn(n,t){var e,i,r;for(i=new Wb(QLn(n,!1,t));i.a<i.c.c.length;)0==(e=BB(n0(i),129)).d?(WZ(e,null),VZ(e,null)):(r=e.a,WZ(e,e.b),VZ(e,r))}function rTn(n){var t,e;return Jcn(t=new B2,Iyt),(e=BB(mMn(n,(hWn(),Zft)),21)).Hc((bDn(),vft))&&Jcn(t,$yt),e.Hc(sft)&&Jcn(t,Cyt),e.Hc(gft)&&Jcn(t,Ayt),e.Hc(fft)&&Jcn(t,Oyt),t}function cTn(n){var t,e,i,r;for(Sqn(n),e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)r=(i=(t=BB(U5(e),17)).c.i==n)?t.d:t.c,i?MZ(t,null):SZ(t,null),hon(t,(hWn(),mlt),r),uAn(n,r.i)}function aTn(n,t,e,i){var r,c;switch(r=e[(c=t.i).g][n.d[c.g]],c.g){case 1:r-=i+t.j.b,t.g.b=r;break;case 3:r+=i,t.g.b=r;break;case 4:r-=i+t.j.a,t.g.a=r;break;case 2:r+=i,t.g.a=r}}function uTn(n){var t,e;for(e=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));e.e!=e.i.gc();)if(!dAn(new oz(ZL(wLn(t=BB(kpn(e),33)).a.Kc(),new h))))return t;return null}function oTn(){var n;return WOt?BB($$n((WM(),zAt),y6n),2016):(n=BB(cL(SJ((WM(),zAt),y6n),555)?SJ(zAt,y6n):new sAn,555),WOt=!0,_Gn(n),jWn(n),Tyn(n),mZ(zAt,y6n,n),n)}function sTn(n,t,e){var i,r;if(0==n.j)return e;if(r=BB(_en(n,t,e),72),!(i=e.ak()).Ij()||!n.a.rl(i))throw Hp(new dy("Invalid entry feature '"+i.Hj().zb+"."+i.ne()+"'"));return r}function hTn(n,t){var e,i,r,c,a,u,o;for(u=0,o=(a=n.a).length;u<o;++u)for(r=0,c=(i=a[u]).length;r<c;++r)if(e=i[r],GC(t)===GC(e)||null!=t&&Nfn(t,e))return!0;return!1}function fTn(n){var t,e,i;return Vhn(n,0)>=0?(e=Ojn(n,AQn),i=ldn(n,AQn)):(e=Ojn(t=jz(n,1),5e8),i=rbn(yz(i=ldn(t,5e8),1),e0(n,1))),i0(yz(i,32),e0(e,UQn))}function lTn(n,t,e){var i;switch(Px(0!=t.b),i=BB(Atn(t,t.a.a),8),e.g){case 0:i.b=0;break;case 2:i.b=n.f;break;case 3:i.a=0;break;default:i.a=n.g}return nX(spn(t,0),i),t}function bTn(n,t,e,i){var r,c,a,u,o;switch(o=n.b,u=zgn(a=(c=t.d).j,o.d[a.g],e),r=UR(B$(c.n),c.a),c.j.g){case 1:case 3:u.a+=r.a;break;case 2:case 4:u.b+=r.b}r5(i,u,i.c.b,i.c)}function wTn(n,t,e){var i,r,c,a;for(a=E7(n.e,t,0),(c=new rm).b=e,i=new M2(n.e,a);i.b<i.d.gc();)Px(i.b<i.d.gc()),(r=BB(i.d.Xb(i.c=i.b++),10)).p=e,WB(c.e,r),fW(i);return c}function dTn(n,t,e,i){var r,c,a,u,o;for(r=null,c=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).i+a.g,n<a.j+a.f+i&&(r?e.i-o<e.i-c&&(r=a):r=a,c=r.i+r.g);return r?c+i:0}function gTn(n,t,e,i){var r,c,a,u,o;for(c=null,r=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).j+a.f,n<a.i+a.g+i&&(c?e.j-o<e.j-r&&(c=a):c=a,r=c.j+c.f);return c?r+i:0}function pTn(n){var t,e,i;for(t=!1,i=n.b.c.length,e=0;e<i;e++)Yon(BB(xq(n.b,e),434))?!t&&e+1<i&&Yon(BB(xq(n.b,e+1),434))&&(t=!0,BB(xq(n.b,e),434).a=!0):t=!1}function vTn(n,t,e,i,r){var c,a;for(c=0,a=0;a<r;a++)c=rbn(c,ibn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}function mTn(n,t){var e,i;for($On(),ODn(),i=Jtt,e=n;t>1;t>>=1)0!=(1&t)&&(i=Nnn(i,e)),e=1==e.d?Nnn(e,e):new Ign(C_n(e.a,e.d,x8(ANt,hQn,25,e.d<<1,15,1)));return i=Nnn(i,e)}function yTn(){var n,t,e,i;for(yTn=O,Oet=x8(xNt,qQn,25,25,15,1),Aet=x8(xNt,qQn,25,33,15,1),i=152587890625e-16,t=32;t>=0;t--)Aet[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)Oet[n]=e,e*=.5}function kTn(n){var t,e;if(qy(TD(ZAn(n,(HXn(),wgt)))))for(e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)if(QCn(t=BB(U5(e),79))&&qy(TD(ZAn(t,dgt))))return!0;return!1}function jTn(n,t){var e,i,r;TU(n.f,t)&&(t.b=n,i=t.c,-1!=E7(n.j,i,0)||WB(n.j,i),r=t.d,-1!=E7(n.j,r,0)||WB(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new epn(n)),van(n.i,e)))}function ETn(n){var t,e,i,r;return(e=(t=n.c.d).j)==(r=(i=n.d.d).j)?t.p<i.p?0:1:Mln(e)==r?0:Eln(e)==r?1:SN(n.b.b,Mln(e))?0:1}function TTn(){TTn=O,tvt=new RP(j3n,0),Zpt=new RP("LONGEST_PATH",1),Ypt=new RP("COFFMAN_GRAHAM",2),Jpt=new RP(B1n,3),evt=new RP("STRETCH_WIDTH",4),nvt=new RP("MIN_WIDTH",5)}function MTn(n){var t;this.d=new xp,this.c=n.c,this.e=n.d,this.b=n.b,this.f=new sG(n.e),this.a=n.a,n.f?this.g=n.f:this.g=new YK(t=BB(Vj(aAt),9),BB(SR(t,t.length),9),0)}function STn(n,t){var e,i,r,c;!(r=D2(i=n,"layoutOptions"))&&(r=D2(i,M6n)),r&&(e=null,(c=r)&&(e=new TT(c,jrn(c,x8(Qtt,sVn,2,0,6,1)))),e&&e5(e,new wC(c,t)))}function PTn(n){if(cL(n,239))return BB(n,33);if(cL(n,186))return WJ(BB(n,118));throw Hp(n?new tk("Only support nodes and ports."):new Hy(e8n))}function ITn(n,t,e,i){return t>=0&&mK(n.substr(t,3),"GMT")||t>=0&&mK(n.substr(t,3),"UTC")?(e[0]=t+3,y_n(n,e,i)):y_n(n,e,i)}function CTn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)(r=(e=BB(n0(i),70)).n).a=c,n.i==(kUn(),sCt)?r.b=a+n.j.b-e.o.b:r.b=a,UR(r,t),c+=e.o.a+n.e}function OTn(n,t,e){if(n.b)throw Hp(new Fy("The task is already done."));return null==n.p&&(n.p=t,n.r=e,n.k&&(n.o=($T(),cbn(fan(Date.now()),VVn))),!0)}function ATn(n){var t;return t=new py,null!=n.tg()&&AH(t,q6n,n.tg()),null!=n.ne()&&AH(t,t8n,n.ne()),null!=n.sg()&&AH(t,"description",n.sg()),t}function $Tn(n,t,e){var i,r,c;return c=n.q,n.q=t,0!=(4&n.Db)&&0==(1&n.Db)&&(r=new nU(n,1,9,c,t),e?e.Ei(r):e=r),t?(i=t.c)!=n.r&&(e=n.nk(i,e)):n.r&&(e=n.nk(null,e)),e}function LTn(n,t,e){var i,r;for(e=Npn(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function NTn(n,t,e){var i,r;for(e=oJ(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function xTn(n,t,e,i){var r,c,a;if(0==i)aHn(t,0,n,e,n.length-e);else for(a=32-i,n[n.length-1]=0,c=n.length-1;c>e;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<<i;for(r=0;r<e;r++)n[r]=0}function DTn(n){var t,i,r,c,a;for(t=0,i=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),t=e.Math.max(t,r.d.b),i=e.Math.max(i,r.d.c);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.b=t,r.d.c=i}function RTn(n){var t,i,r,c,a;for(i=0,t=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),i=e.Math.max(i,r.d.d),t=e.Math.max(t,r.d.a);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.d=i,r.d.a=t}function KTn(n,t){var e,i,r,c;for(c=new Np,r=0,i=t.Kc();i.Ob();){for(e=iln(BB(i.Pb(),19).a+r);e.a<n.f&&!tG(n,e.a);)e=iln(e.a+1),++r;if(e.a>=n.f)break;c.c[c.c.length]=e}return c}function _Tn(n){var t,e,i,r;for(t=null,r=new Wb(n.wf());r.a<r.c.c.length;)e=new UV((i=BB(n0(r),181)).qf().a,i.qf().b,i.rf().a,i.rf().b),t?IPn(t,e):t=e;return!t&&(t=new bA),t}function FTn(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),Ywn(n.n,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Qj(n,fgn(n),e-bX(n.zh()),t,i)}function BTn(n,t,e){var i,r,c,a,u;for(i=e.gc(),n.qi(n.i+i),(u=n.i-t)>0&&aHn(n.g,t,n.g,t+i,u),a=e.Kc(),n.i+=i,r=0;r<i;++r)c=a.Pb(),jL(n,t,n.oi(t,c)),n.bi(t,c),n.ci(),++t;return 0!=i}function HTn(n,t,e){var i;return t!=n.q?(n.q&&(e=oJ(n.q,n,-10,e)),t&&(e=Npn(t,n,-10,e)),e=$Tn(n,t,e)):0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,9,t,t),e?e.Ei(i):e=i),e}function qTn(n,t,e,i){return I_(0==(e&hVn),"flatMap does not support SUBSIZED characteristic"),I_(0==(4&e),"flatMap does not support SORTED characteristic"),yX(n),yX(t),new q2(n,e,i,t)}function GTn(n,t){SU(t,"Cannot suppress a null exception."),vH(t!=n,"Exception can not suppress itself."),n.i||(null==n.k?n.k=Pun(Gk(Jnt,1),sVn,78,0,[t]):n.k[n.k.length]=t)}function zTn(n,t,e,i){var r,c,a,u,o,s;for(a=e.length,c=0,r=-1,s=atn(n.substr(t),(c_(),Tet)),u=0;u<a;++u)(o=e[u].length)>c&&sU(s,atn(e[u],Tet))&&(r=u,c=o);return r>=0&&(i[0]=t+c),r}function UTn(n,t){var e;if(0!=(e=YO(n.b.Hf(),t.b.Hf())))return e;switch(n.b.Hf().g){case 1:case 2:return E$(n.b.sf(),t.b.sf());case 3:case 4:return E$(t.b.sf(),n.b.sf())}return 0}function XTn(n){var t,e,i;for(i=n.e.c.length,n.a=kq(ANt,[sVn,hQn],[48,25],15,[i,i],2),e=new Wb(n.c);e.a<e.c.c.length;)t=BB(n0(e),282),n.a[t.c.b][t.d.b]+=BB(mMn(t,(fRn(),Zct)),19).a}function WTn(n,t,e){OTn(e,"Grow Tree",1),n.b=t.f,qy(TD(mMn(t,(Xcn(),Qrt))))?(n.c=new it,QZ(n,null)):n.c=new it,n.a=!1,FNn(n,t.f),hon(t,Yrt,(hN(),!!n.a)),HSn(e)}function VTn(n,t){var e,i,r,c,a;if(null==n)return null;for(a=x8(ONt,WVn,25,2*t,15,1),i=0,r=0;i<t;++i)e=n[i]>>4&15,c=15&n[i],a[r++]=OOt[e],a[r++]=OOt[c];return Bdn(a,0,a.length)}function QTn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,4,i,c,null,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,i.Kj()?2:1,i,c,i.zj(),-1,!0),e?e.Ei(r):e=r,e}function YTn(n){var t,e;return n>=BQn?(t=HQn+(n-BQn>>10&1023)&QVn,e=56320+(n-BQn&1023)&QVn,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&QVn)}function JTn(n,t){var e,i,r,c;return qD(),(r=BB(BB(h6(n.r,t),21),84)).gc()>=2&&(i=BB(r.Kc().Pb(),111),e=n.u.Hc((lCn(),tCt)),c=n.u.Hc(cCt),!i.a&&!e&&(2==r.gc()||c))}function ZTn(n,t,e,i,r){var c,a,u;for(c=eDn(n,t,e,i,r),u=!1;!c;)E$n(n,r,!0),u=!0,c=eDn(n,t,e,i,r);u&&E$n(n,r,!1),0!=(a=Dun(r)).c.length&&(n.d&&n.d.lg(a),ZTn(n,r,e,i,a))}function nMn(){nMn=O,aIt=new BI(QZn,0),rIt=new BI("DIRECTED",1),uIt=new BI("UNDIRECTED",2),eIt=new BI("ASSOCIATION",3),cIt=new BI("GENERALIZATION",4),iIt=new BI("DEPENDENCY",5)}function tMn(n,t){var e;if(!WJ(n))throw Hp(new Fy(F5n));switch(e=WJ(n),t.g){case 1:return-(n.j+n.f);case 2:return n.i-e.g;case 3:return n.j-e.f;case 4:return-(n.i+n.g)}return 0}function eMn(n,t){var e,i;for(kW(t),i=n.b.c.length,WB(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.ue(xq(n.b,i),t)<=0)return c5(n.b,e,t),!0;c5(n.b,e,xq(n.b,i))}return c5(n.b,i,t),!0}function iMn(n,t,i,r){var c,a;if(c=0,i)c=mhn(n.a[i.g][t.g],r);else for(a=0;a<nrt;a++)c=e.Math.max(c,mhn(n.a[a][t.g],r));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function rMn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(kUn(),oCt)&&i.i!=(kUn(),ICt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function cMn(n,t,e,i){var r;if(r=!1,XC(i)&&(r=!0,AH(t,e,SD(i))),r||zC(i)&&(r=!0,cMn(n,t,e,i)),r||cL(i,236)&&(r=!0,qQ(t,e,BB(i,236))),!r)throw Hp(new Ly(H6n))}function aMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(CPn(),Y$t).length;++i)if(mK(Y$t[i],r))return i;return 0}function uMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(CPn(),J$t).length;++i)if(mK(J$t[i],r))return i;return 0}function oMn(n,t){var e,i,r,c;if(kW(t),(c=n.a.gc())<t.gc())for(e=n.a.ec().Kc();e.Ob();)i=e.Pb(),t.Hc(i)&&e.Qb();else for(r=t.Kc();r.Ob();)i=r.Pb(),n.a.Bc(i);return c!=n.a.gc()}function sMn(n){var t,e;switch(e=B$(Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))),t=n.i.d,n.j.g){case 1:e.b-=t.d;break;case 2:e.a+=t.c;break;case 3:e.b+=t.a;break;case 4:e.a-=t.b}return e}function hMn(n){var t;for(Crn(),t=BB(U5(new oz(ZL(fbn(n).a.Kc(),new h))),17).c.i;t.k==(uSn(),Put);)hon(t,(hWn(),olt),(hN(),!0)),t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i}function fMn(n,t,e,i){var r,c,a;for(a=Lfn(t,i).Kc();a.Ob();)r=BB(a.Pb(),11),n.d[r.p]=n.d[r.p]+n.c[e.p];for(c=Lfn(e,i).Kc();c.Ob();)r=BB(c.Pb(),11),n.d[r.p]=n.d[r.p]-n.c[t.p]}function lMn(n,t,e){var i,r;for(r=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));r.e!=r.i.gc();)SA(i=BB(kpn(r),33),i.i+t,i.j+e);e5((!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b),new tC(t,e))}function bMn(n,t,e,i){var r,c;for(r=null==(c=t).d||n.a.ue(e.d,c.d)>0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.ue(e.d,c.d)>0?1:0;c.a[r]=i,i.b=e.b,i.a[0]=e.a[0],i.a[1]=e.a[1],e.a[0]=null,e.a[1]=null}function wMn(n){return lCn(),!(Ian(OJ(EG(eCt,Pun(Gk(CCt,1),$Vn,273,0,[rCt])),n))>1||Ian(OJ(EG(tCt,Pun(Gk(CCt,1),$Vn,273,0,[nCt,cCt])),n))>1)}function dMn(n,t){cL(SJ((WM(),zAt),n),498)?mZ(zAt,n,new OC(this,t)):mZ(zAt,n,this),iSn(this,t),t==(iE(),n$t)?(this.wb=BB(this,1939),BB(t,1941)):this.wb=(QX(),t$t)}function gMn(n){var t,e;if(null==n)return null;for(t=null,e=0;e<COt.length;++e)try{return BM(COt[e],n)}catch(i){if(!cL(i=lun(i),32))throw Hp(i);t=i}throw Hp(new L7(t))}function pMn(){pMn=O,pet=Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),vet=Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function vMn(n){var t,e,i;(t=mK(typeof t,gYn)?null:new ln)&&(lM(),tW(e=(i=900)>=VVn?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&xNn(t,e,n.b,"Exception: ",!0))}function mMn(n,t){var e,i;return!n.q&&(n.q=new xp),null!=(i=RX(n.q,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e))),e)}function yMn(){yMn=O,Rat=new VS("P1_CYCLE_BREAKING",0),Kat=new VS("P2_LAYERING",1),_at=new VS("P3_NODE_ORDERING",2),Fat=new VS("P4_NODE_PLACEMENT",3),Bat=new VS("P5_EDGE_ROUTING",4)}function kMn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),y7(n.b.b,r.b),y7(n.b.a,BB(r.b,81).d)}function jMn(n,t){var e;if(Dnn(),n.c==t.c){if(n.b==t.b||hcn(n.b,t.b)){if(e=ZO(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return E$(n.b.g,t.b.g)}return Pln(n.c,t.c)}function EMn(n,t){var e;OTn(t,"Hierarchical port position processing",1),(e=n.b).c.length>0&&i_n((l1(0,e.c.length),BB(e.c[0],29)),n),e.c.length>1&&i_n(BB(xq(e,e.c.length-1),29),n),HSn(t)}function TMn(n,t){var e,i;if(NMn(n,t))return!0;for(i=new Wb(t);i.a<i.c.c.length;){if(_Dn(n,e=BB(n0(i),33),uEn(e)))return!0;if($hn(n,e)-n.g<=n.a)return!0}return!1}function MMn(){MMn=O,bRn(),kTt=RTt,vTt=LTt,pTt=ATt,dTt=PTt,gTt=CTt,wTt=new WA(8),bTt=new XA((sWn(),XSt),wTt),mTt=new XA(LPt,8),yTt=xTt,hTt=jTt,fTt=TTt,lTt=new XA(lSt,(hN(),!1))}function SMn(){SMn=O,zMt=new WA(15),GMt=new XA((sWn(),XSt),zMt),XMt=new XA(LPt,15),UMt=new XA(pPt,iln(0)),_Mt=jSt,BMt=KSt,qMt=qSt,DMt=new XA(cSt,f5n),FMt=ISt,HMt=BSt,RMt=uSt,KMt=hSt}function PMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function IMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function CMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function OMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function AMn(n,t,e){var i,r,c;if(++n.j,t>=(r=n.Vi())||t<0)throw Hp(new Ay(u8n+t+o8n+r));if(e>=r||e<0)throw Hp(new Ay(s8n+e+o8n+r));return t!=e?(c=n.Ti(e),n.Hi(t,c),i=c):i=n.Oi(e),i}function $Mn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Ug();e;e=e.Ug()){if(++t>GQn)return $Mn(e);if(i=e,e==n)throw Hp(new Fy("There is a cycle in the containment hierarchy of "+n))}return i}function LMn(n){var t,e,i;for(i=new $an(FWn,"[","]"),e=n.Kc();e.Ob();)b6(i,GC(t=e.Pb())===GC(n)?"(this Collection)":null==t?zWn:Bbn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function NMn(n,t){var e,i;if(i=!1,t.gc()<2)return!1;for(e=0;e<t.gc();e++)e<t.gc()-1?i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(e+1),33)):i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(0),33));return i}function xMn(n,t){var e;t!=n.a?(e=null,n.a&&(e=BB(n.a,49).ih(n,4,GOt,e)),t&&(e=BB(t,49).gh(n,4,GOt,e)),(e=Jhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,t,t))}function DMn(n,t){var e;t!=n.e?(n.e&&_6(xW(n.e),n),t&&(!t.b&&(t.b=new Tp(new xm)),YR(t.b,n)),(e=Qkn(n,t,null))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function RMn(n){var t,e,i;for(e=n.length,i=0;i<e&&(b1(i,n.length),n.charCodeAt(i)<=32);)++i;for(t=e;t>i&&(b1(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||t<e?n.substr(i,t-i):n}function KMn(n,t){var i;i=t.o,dA(n.f)?(n.j.a=e.Math.max(n.j.a,i.a),n.j.b+=i.b,n.d.c.length>1&&(n.j.b+=n.e)):(n.j.a+=i.a,n.j.b=e.Math.max(n.j.b,i.b),n.d.c.length>1&&(n.j.a+=n.e))}function _Mn(){_Mn=O,$st=Pun(Gk(FCt,1),YZn,61,0,[(kUn(),sCt),oCt,SCt]),Ast=Pun(Gk(FCt,1),YZn,61,0,[oCt,SCt,ICt]),Lst=Pun(Gk(FCt,1),YZn,61,0,[SCt,ICt,sCt]),Nst=Pun(Gk(FCt,1),YZn,61,0,[ICt,sCt,oCt])}function FMn(n,t,e,i){var r,c,a,u,o;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(o=n.b,r=c.j,u=null;r!=a.j;)u=0==t?Mln(r):Eln(r),DH(i,UR(zgn(r,o.d[r.g],e),zgn(u,o.d[u.g],e))),r=u}function BMn(n,t,e,i){var r,c,a,u,o;return u=BB((a=qyn(n.a,t,e)).a,19).a,c=BB(a.b,19).a,i&&(o=BB(mMn(t,(hWn(),Elt)),10),r=BB(mMn(e,Elt),10),o&&r&&(t4(n.b,o,r),u+=n.b.i,c+=n.b.e)),u>c}function HMn(n){var t,e,i,r,c,a,u,o;for(this.a=rvn(n),this.b=new Np,i=0,r=(e=n).length;i<r;++i)for(t=e[i],c=new Np,WB(this.b,c),u=0,o=(a=t).length;u<o;++u)WB(c,new t_(a[u].j))}function qMn(n,t,e){var i,r,c;return c=0,i=e[t],t<e.length-1&&(r=e[t+1],n.b[t]?(c=bWn(n.d,i,r),c+=ZX(n.a,i,(kUn(),oCt)),c+=ZX(n.a,r,ICt)):c=C9(n.a,i,r)),n.c[t]&&(c+=L6(n.a,i)),c}function GMn(n,t,e,i,r){var c,a,u,o;for(o=null,u=new Wb(i);u.a<u.c.c.length;)if((a=BB(n0(u),441))!=e&&-1!=E7(a.e,r,0)){o=a;break}SZ(c=W5(r),e.b),MZ(c,o.b),JCn(n.a,r,new L_(c,t,e.f))}function zMn(n){for(;0!=n.g.c&&0!=n.d.c;)FD(n.g).c>FD(n.d).c?(n.i+=n.g.c,gdn(n.d)):FD(n.d).c>FD(n.g).c?(n.e+=n.d.c,gdn(n.g)):(n.i+=qq(n.g),n.e+=qq(n.d),gdn(n.g),gdn(n.d))}function UMn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new zZ((O6(),Tyt),t,c,1),new zZ(Tyt,c,a,1),r=new Wb(e);r.a<r.c.c.length;)(i=BB(n0(r),112))!=c&&i!=t&&i!=a&&(gHn(n.a,i,t),gHn(n.a,i,a))}function XMn(n,t,i,r){n.a.d=e.Math.min(t,i),n.a.a=e.Math.max(t,r)-n.a.d,t<i?(n.b=.5*(t+i),n.g=K3n*n.b+.9*t,n.f=K3n*n.b+.9*i):(n.b=.5*(t+r),n.g=K3n*n.b+.9*r,n.f=K3n*n.b+.9*t)}function WMn(){function n(){return(new Date).getTime()}SWn={},!Array.isArray&&(Array.isArray=function(n){return"[object Array]"===Object.prototype.toString.call(n)}),!Date.now&&(Date.now=n)}function VMn(n,t){var e,i;i=BB(mMn(t,(HXn(),ept)),98),hon(t,(hWn(),ylt),i),(e=t.e)&&(JT(new Rq(null,new w1(e.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(e.b,16)),new mt),new Kw(n)))}function QMn(n){var t,i,r,c;if(gA(BB(mMn(n.b,(HXn(),Udt)),103)))return 0;for(t=0,r=new Wb(n.a);r.a<r.c.c.length;)(i=BB(n0(r),10)).k==(uSn(),Iut)&&(c=i.o.a,t=e.Math.max(t,c));return t}function YMn(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 1:hon(n,kgt,(Tbn(),Blt));break;case 2:hon(n,kgt,(Tbn(),Hlt));break;case 3:hon(n,kgt,(Tbn(),_lt));break;case 4:hon(n,kgt,(Tbn(),Flt))}}function JMn(){JMn=O,cft=new $P(QZn,0),eft=new $P(cJn,1),aft=new $P(aJn,2),rft=new $P("LEFT_RIGHT_CONSTRAINT_LOCKING",3),ift=new $P("LEFT_RIGHT_CONNECTION_LOCKING",4),tft=new $P(q1n,5)}function ZMn(n,t,i){var r,c,a,u,o,s,h;o=i.a/2,a=i.b/2,s=1,h=1,(r=e.Math.abs(t.a-n.a))>o&&(s=o/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),u=e.Math.min(s,h),n.a+=u*(t.a-n.a),n.b+=u*(t.b-n.b)}function nSn(n,t,e,i,r){var c,a;for(a=!1,c=BB(xq(e.b,0),33);hBn(n,t,c,i,r)&&(a=!0,cEn(e,c),0!=e.b.c.length);)c=BB(xq(e.b,0),33);return 0==e.b.c.length&&Tkn(e.j,e),a&&Gmn(t.q),a}function tSn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(cNn(n,i,r=BB(b3(c),8)))return!0;i=r}return!!cNn(n,i,e)}function eSn(n,t,e,i){return 0==e?(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),BK(n.o,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Rj(n,fgn(n),e-bX(n.zh()),t,i)}function iSn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=BB(n.sb,49).ih(n,1,HOt,e)),t&&(e=BB(t,49).gh(n,1,HOt,e)),(e=jfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function rSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need an end point."));e=Ren(t,"x"),Ten(new Kg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new _g(n).a,(kW(i),i))}function cSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need a start point."));e=Ren(t,"x"),Cen(new xg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Dg(n).a,(kW(i),i))}function aSn(n,t){var e,i,r,c,a;for(i=0,c=psn(n).length;i<c;++i)vMn(t);for(a=!Qet&&n.e?Qet?null:n.d:null;a;){for(e=0,r=psn(a).length;e<r;++e)vMn(t);a=!Qet&&a.e?Qet?null:a.d:null}}function uSn(){uSn=O,Iut=new JS("NORMAL",0),Put=new JS("LONG_EDGE",1),Mut=new JS("EXTERNAL_PORT",2),Cut=new JS("NORTH_SOUTH_PORT",3),Sut=new JS("LABEL",4),Tut=new JS("BREAKING_POINT",5)}function oSn(n){var t,e,i,r;if(t=!1,Lx(n,(hWn(),zft)))for(e=BB(mMn(n,zft),83),r=new Wb(n.j);r.a<r.c.c.length;)J$n(i=BB(n0(r),11))&&(t||(iCn(vW(n)),t=!0),fpn(BB(e.xc(i),306)))}function sSn(n,t,e){var i;OTn(e,"Self-Loop routing",1),i=Vln(t),iO(mMn(t,(I6(),TMt))),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new zi),new Ui),new Xi),new Wi),new eP(n,i)),HSn(e)}function hSn(n){var t,e,i;return i=ATn(n),null!=n.e&&AH(i,n8n,n.e),!!n.k&&AH(i,"type",dx(n.k)),!WE(n.j)&&(e=new Il,rtn(i,N6n,e),t=new cp(e),e5(n.j,t)),i}function fSn(n){var t,e,i,r;for(r=xX((lin(n.gc(),"size"),new Ck),123),i=!0,e=lz(n).Kc();e.Ob();)t=BB(e.Pb(),42),i||(r.a+=FWn),i=!1,uO(xX(uO(r,t.cd()),61),t.dd());return(r.a+="}",r).a}function lSn(n,t){var e,i,r;return(t&=63)<22?(e=n.l<<t,i=n.m<<t|n.l>>22-t,r=n.h<<t|n.m>>22-t):t<44?(e=0,i=n.l<<t-22,r=n.m<<t-22|n.l>>44-t):(e=0,i=0,r=n.l<<t-44),M$(e&SQn,i&SQn,r&PQn)}function bSn(n){if(null==ytt&&(ytt=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!ytt.test(n))throw Hp(new Mk(DQn+n+'"'));return parseFloat(n)}function wSn(n){var t,e,i,r;for(t=new Np,vU(e=x8($Nt,ZYn,25,n.a.c.length,16,1),e.length),r=new Wb(n.a);r.a<r.c.c.length;)e[(i=BB(n0(r),121)).d]||(t.c[t.c.length]=i,Ggn(n,i,e));return t}function dSn(n,t){var e,i,r,c;for(c=t.b.j,n.a=x8(ANt,hQn,25,c.c.length,15,1),r=0,i=0;i<c.c.length;i++)l1(i,c.c.length),0==(e=BB(c.c[i],11)).e.c.length&&0==e.g.c.length?r+=1:r+=3,n.a[i]=r}function gSn(){gSn=O,Dht=new CP("ALWAYS_UP",0),xht=new CP("ALWAYS_DOWN",1),Kht=new CP("DIRECTION_UP",2),Rht=new CP("DIRECTION_DOWN",3),Fht=new CP("SMART_UP",4),_ht=new CP("SMART_DOWN",5)}function pSn(n,t){if(n<0||t<0)throw Hp(new _y("k and n must be positive"));if(t>n)throw Hp(new _y("k must be smaller than n"));return 0==t||t==n?1:0==n?0:Mjn(n)/(Mjn(t)*Mjn(n-t))}function vSn(n,t){var e,i,r,c;for(e=new OA(n);null!=e.g||e.c?null==e.g||0!=e.i&&BB(e.g[e.i-1],47).Ob():tZ(e);)if(cL(c=BB(aLn(e),56),160))for(i=BB(c,160),r=0;r<t.length;r++)t[r].og(i)}function mSn(n){var t;return 0!=(64&n.Db)?Yln(n):((t=new fN(Yln(n))).a+=" (height: ",vE(t,n.f),t.a+=", width: ",vE(t,n.g),t.a+=", x: ",vE(t,n.i),t.a+=", y: ",vE(t,n.j),t.a+=")",t.a)}function ySn(n){var t,e,i,r,c,a;for(t=new v4,r=0,c=(i=n).length;r<c;++r)if(null!=Jgn(t,a=yX((e=i[r]).cd()),yX(e.dd())))throw Hp(new _y("duplicate key: "+a));this.b=(SQ(),new Xb(t))}function kSn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],b6(c,String.fromCharCode(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function jSn(){jSn=O,Knn(),Cct=new $O(oZn,Oct=Rct),iln(1),Ict=new $O(sZn,iln(300)),iln(0),Lct=new $O(hZn,iln(0)),new $p,Nct=new $O(fZn,lZn),new $p,Act=new $O(bZn,5),xct=Rct,$ct=Dct}function ESn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),WB(n.b.b,BB(r.b,81)),WB(n.b.a,BB(r.b,81).d)}function TSn(n,t){var e;if(null!=t&&!n.c.Yj().wj(t))throw e=cL(t,56)?BB(t,56).Tg().zb:nE(tsn(t)),Hp(new Ky(r6n+n.c.ne()+"'s type '"+n.c.Yj().ne()+"' does not permit a value of type '"+e+"'"))}function MSn(n,t,e){var i,r;for(r=new M2(n.b,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),GC(mMn(i=BB(r.d.Xb(r.c=r.b++),70),(hWn(),vlt)))===GC(t)&&(OPn(i.n,vW(n.c.i),e),fW(r),WB(t.b,i))}function SSn(n,t){if(t.a)switch(BB(mMn(t.b,(hWn(),ylt)),98).g){case 0:case 1:lEn(t);case 2:JT(new Rq(null,new w1(t.d,16)),new Li),oAn(n.a,t)}else JT(new Rq(null,new w1(t.d,16)),new Li)}function PSn(n){var t,i;return i=e.Math.sqrt((null==n.k&&(n.k=Wrn(n,new Ec)),Gy(n.k)/(n.b*(null==n.g&&(n.g=Xrn(n,new jc)),Gy(n.g))))),t=dG(fan(e.Math.round(i))),t=e.Math.min(t,n.f)}function ISn(){gcn(),LR.call(this),this.j=(kUn(),PCt),this.a=new Gj,new fm,this.f=(lin(2,AVn),new J6(2)),this.e=(lin(4,AVn),new J6(4)),this.g=(lin(4,AVn),new J6(4)),this.b=new hP(this.e,this.g)}function CSn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Ilt))))&&(e=t.c.i,(n!=(Tbn(),_lt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Flt)}function OSn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Ilt))))&&(e=t.d.i,(n!=(Tbn(),Blt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Hlt)}function ASn(n,t){var e,i,r,c,a,u,o;for(a=n.d,o=n.o,u=new UV(-a.b,-a.d,a.b+o.a+a.c,a.d+o.b+a.a),r=0,c=(i=t).length;r<c;++r)(e=i[r])&&IPn(u,e.i);a.b=-u.c,a.d=-u.d,a.c=u.b-a.b-o.a,a.a=u.a-a.d-o.b}function $Sn(){$Sn=O,iTt=new MI("CENTER_DISTANCE",0),rTt=new MI("CIRCLE_UNDERLAP",1),uTt=new MI("RECTANGLE_UNDERLAP",2),cTt=new MI("INVERTED_OVERLAP",3),aTt=new MI("MINIMUM_ROOT_DISTANCE",4)}function LSn(n){var t,e,i,r;if(KDn(),null==n)return null;for(i=n.length,t=x8(ONt,WVn,25,2*i,15,1),e=0;e<i;e++)(r=n[e])<0&&(r+=256),t[2*e]=YLt[r>>4],t[2*e+1]=YLt[15&r];return Bdn(t,0,t.length)}function NSn(n){var t;switch(nV(),n.c.length){case 0:return Bnt;case 1:return CH((t=BB(JIn(new Wb(n)),42)).cd(),t.dd());default:return new hy(BB(Qgn(n,x8(Hnt,kVn,42,n.c.length,0,1)),165))}}function xSn(n){var t,e,i,r,c;for(t=new Lp,e=new Lp,d3(t,n),d3(e,n);e.b!=e.c;)for(c=new Wb(BB(dU(e),37).a);c.a<c.c.c.length;)(r=BB(n0(c),10)).e&&(d3(t,i=r.e),d3(e,i));return t}function DSn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),xut));case 2:return KB(n.j,(gcn(),Lut));case 3:return KB(n.j,(gcn(),Rut));case 4:return KB(n.j,(gcn(),Kut));default:return SQ(),SQ(),set}}function RSn(n,t){var e,i,r;e=sH(t,n.e),i=BB(RX(n.g.f,e),19).a,r=n.a.c.length-1,0!=n.a.c.length&&BB(xq(n.a,r),287).c==i?(++BB(xq(n.a,r),287).a,++BB(xq(n.a,r),287).b):WB(n.a,new Gx(i))}function KSn(n,t,e){var i,r;return 0!=(i=SRn(n,t,e))?i:Lx(t,(hWn(),wlt))&&Lx(e,wlt)?((r=E$(BB(mMn(t,wlt),19).a,BB(mMn(e,wlt),19).a))<0?uKn(n,t,e):r>0&&uKn(n,e,t),r):COn(n,t,e)}function _Sn(n,t,e){var i,r,c,a;if(0!=t.b){for(i=new YT,a=spn(t,0);a.b!=a.d.c;)Frn(i,xun(c=BB(b3(a),86))),(r=c.e).a=BB(mMn(c,(qqn(),gkt)),19).a,r.b=BB(mMn(c,pkt),19).a;_Sn(n,i,mcn(e,i.b/n.a|0))}}function FSn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(z1(n,n.g,t))return n.g;for(c=n.r,i=n.g,a=n.r,r=(c-i)/2+i;i+1<c;)(e=cHn(n,r,!1)).b<=r&&e.a<=t?(a=r,c=r):i=r,r=(c-i)/2+i;return a}function BSn(n,t,e){OTn(e,"Recursive Graph Layout",hDn(n,t,!0)),vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new $f])),P8(t,(sWn(),mPt))||vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new gu])),lXn(n,t,null,e),HSn(e)}function HSn(n){var t;if(null==n.p)throw Hp(new Fy("The task has not begun yet."));n.b||(n.k&&($T(),t=cbn(fan(Date.now()),VVn),n.q=1e-9*j2(ibn(t,n.o))),n.c<n.r&&qin(n,n.r-n.c),n.b=!0)}function qSn(n){var t,e,i;for(DH(i=new km,new xI(n.j,n.k)),e=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));e.e!=e.i.gc();)DH(i,new xI((t=BB(kpn(e),469)).a,t.b));return DH(i,new xI(n.b,n.c)),i}function GSn(n,t,e,i,r){var c,a,u,o;if(r)for(o=((c=new hz(r.a.length)).b-c.a)*c.c<0?(eS(),MNt):new XL(c);o.Ob();)u=x2(r,BB(o.Pb(),19).a),D_n((a=new hQ(n,t,e,i)).a,a.b,a.c,a.d,u)}function zSn(n,t){var e;if(GC(n)===GC(t))return!0;if(cL(t,21)){e=BB(t,21);try{return n.gc()==e.gc()&&n.Ic(e)}catch(i){if(cL(i=lun(i),173)||cL(i,205))return!1;throw Hp(i)}}return!1}function USn(n,t){var i;WB(n.d,t),i=t.rf(),n.c?(n.e.a=e.Math.max(n.e.a,i.a),n.e.b+=i.b,n.d.c.length>1&&(n.e.b+=n.a)):(n.e.a+=i.a,n.e.b=e.Math.max(n.e.b,i.b),n.d.c.length>1&&(n.e.a+=n.a))}function XSn(n){var t,e,i,r;switch(t=(r=n.i).b,i=r.j,e=r.g,r.a.g){case 0:e.a=(n.g.b.o.a-i.a)/2;break;case 1:e.a=t.d.n.a+t.d.a.a;break;case 2:e.a=t.d.n.a+t.d.a.a-i.a;break;case 3:e.b=t.d.n.b+t.d.a.b}}function WSn(n,t,e,i,r){if(i<t||r<e)throw Hp(new _y("The highx must be bigger then lowx and the highy must be bigger then lowy"));return n.a<t?n.a=t:n.a>i&&(n.a=i),n.b<e?n.b=e:n.b>r&&(n.b=r),n}function VSn(n){if(cL(n,149))return MNn(BB(n,149));if(cL(n,229))return Zbn(BB(n,229));if(cL(n,23))return hSn(BB(n,23));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[n])))))}function QSn(n,t,e,i,r){var c,a,u;for(c=!0,a=0;a<i;a++)c&=0==e[a];if(0==r)aHn(e,i,n,0,t),a=t;else{for(u=32-r,c&=e[a]<<u==0,a=0;a<t-1;a++)n[a]=e[a+i]>>>r|e[a+i+1]<<u;n[a]=e[a+i]>>>r,++a}return c}function YSn(n,t,e,i){var r,c;if(t.k==(uSn(),Put))for(c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if((r=BB(U5(c),17)).c.i.k==Put&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function JSn(n,t){var e,i,r,c;return t&=63,e=n.h&PQn,t<22?(c=e>>>t,r=n.m>>t|e<<22-t,i=n.l>>t|n.m<<22-t):t<44?(c=0,r=e>>>t-22,i=n.m>>t-22|n.h<<44-t):(c=0,r=0,i=e>>>t-44),M$(i&SQn,r&SQn,c&PQn)}function ZSn(n,t,e,i){var r;this.b=i,this.e=n==(oin(),Amt),r=t[e],this.d=kq($Nt,[sVn,ZYn],[177,25],16,[r.length,r.length],2),this.a=kq(ANt,[sVn,hQn],[48,25],15,[r.length,r.length],2),this.c=new zEn(t,e)}function nPn(n){var t,e,i;for(n.k=new o1((kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,n.j.c.length),i=new Wb(n.j);i.a<i.c.c.length;)t=(e=BB(n0(i),113)).d.j,JCn(n.k,t,e);n.e=iNn(gz(n.k))}function tPn(n,t){var e,i,r;TU(n.d,t),e=new ka,VW(n.c,t,e),e.f=Phn(t.c),e.a=Phn(t.d),e.d=(gxn(),(r=t.c.i.k)==(uSn(),Iut)||r==Tut),e.e=(i=t.d.i.k)==Iut||i==Tut,e.b=t.c.j==(kUn(),ICt),e.c=t.d.j==oCt}function ePn(n){var t,e,i,r,c;for(c=DWn,r=DWn,i=new Wb(kbn(n));i.a<i.c.c.length;)t=(e=BB(n0(i),213)).e.e-e.d.e,e.e==n&&t<r?r=t:t<c&&(c=t);return r==DWn&&(r=-1),c==DWn&&(c=-1),new rC(iln(r),iln(c))}function iPn(n,t){var i,r,c;return c=ZJn,qpn(),r=Zrt,c=e.Math.abs(n.b),(i=e.Math.abs(t.f-n.b))<c&&(c=i,r=nct),(i=e.Math.abs(n.a))<c&&(c=i,r=tct),(i=e.Math.abs(t.g-n.a))<c&&(c=i,r=Jrt),r}function rPn(n,t){var e,i,r;for(e=t.a.o.a,r=new Sb(new s1(vW(t.a).b,t.c,t.f+1));r.b<r.d.gc();)if(Px(r.b<r.d.gc()),(i=BB(r.d.Xb(r.c=r.b++),29)).c.a>=e)return hPn(n,t,i.p),!0;return!1}function cPn(n){var t;return 0!=(64&n.Db)?mSn(n):(t=new lN(Z5n),!n.a||oO(oO((t.a+=' "',t),n.a),'"'),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function aPn(n,t,e){var i,r,c,a,u;for(u=axn(n.e.Tg(),t),r=BB(n.g,119),i=0,a=0;a<n.i;++a)if(c=r[a],u.rl(c.ak())){if(i==e)return fDn(n,a),ZM(),BB(t,66).Oj()?c:c.dd();++i}throw Hp(new Ay(e9n+e+o8n+i))}function uPn(n){var t,e,i;if(2==(t=n.c)||7==t||1==t)return wWn(),wWn(),sNt;for(i=OXn(n),e=null;2!=(t=n.c)&&7!=t&&1!=t;)e||(wWn(),wWn(),tqn(e=new r$(1),i),i=e),tqn(e,OXn(n));return i}function oPn(n,t,e){return n<0||n>e?dIn(n,e,"start index"):t<0||t>e?dIn(t,e,"end index"):$Rn("end index (%s) must not be less than start index (%s)",Pun(Gk(Ant,1),HWn,1,5,[iln(t),iln(n)]))}function sPn(n,t){var e,i,r,c;for(i=0,r=n.length;i<r;i++){c=n[i];try{c[1]?c[0].jm()&&(t=TG(t,c)):c[0].jm()}catch(a){if(!cL(a=lun(a),78))throw Hp(a);e=a,Dk(),yY(cL(e,477)?BB(e,477).ae():e)}}return t}function hPn(n,t,i){var r,c;for(i!=t.c+t.b.gc()&&wHn(t.a,ian(t,i-t.c)),c=t.a.c.p,n.a[c]=e.Math.max(n.a[c],t.a.o.a),r=BB(mMn(t.a,(hWn(),Plt)),15).Kc();r.Ob();)hon(BB(r.Pb(),70),tst,(hN(),!0))}function fPn(n,t){var i,r,c;c=qNn(t),hon(t,(hWn(),llt),c),c&&(r=DWn,AY(n.f,c)&&(r=BB(qC(AY(n.f,c)),19).a),qy(TD(mMn(i=BB(xq(t.g,0),17),Ilt)))||VW(n,c,iln(e.Math.min(BB(mMn(i,wlt),19).a,r))))}function lPn(n,t,e){var i,r,c,a;for(t.p=-1,a=xwn(t,(ain(),qvt)).Kc();a.Ob();)for(r=new Wb(BB(a.Pb(),11).g);r.a<r.c.c.length;)t!=(c=(i=BB(n0(r),17)).d.i)&&(c.p<0?e.Fc(i):c.p>0&&lPn(n,c,e));t.p=0}function bPn(n){var t;this.c=new YT,this.f=n.e,this.e=n.d,this.i=n.g,this.d=n.c,this.b=n.b,this.k=n.j,this.a=n.a,n.i?this.j=n.i:this.j=new YK(t=BB(Vj(jMt),9),BB(SR(t,t.length),9),0),this.g=n.f}function wPn(n){var t,e,i,r;for(t=xX(oO(new lN("Predicates."),"and"),40),e=!0,r=new Sb(n);r.b<r.d.gc();)Px(r.b<r.d.gc()),i=r.d.Xb(r.c=r.b++),e||(t.a+=","),t.a+=""+i,e=!1;return(t.a+=")",t).a}function dPn(n,t,e){var i,r,c;if(!(e<=t+2))for(r=(e-t)/2|0,i=0;i<r;++i)l1(t+i,n.c.length),c=BB(n.c[t+i],11),c5(n,t+i,(l1(e-i-1,n.c.length),BB(n.c[e-i-1],11))),l1(e-i-1,n.c.length),n.c[e-i-1]=c}function gPn(n,t,e){var i,r,c,a,u,o,s;u=(c=n.d.p).e,o=c.r,n.g=new QK(o),i=(a=n.d.o.c.p)>0?u[a-1]:x8(Out,a1n,10,0,0,1),r=u[a],s=a<u.length-1?u[a+1]:x8(Out,a1n,10,0,0,1),t==e-1?uZ(n.g,r,s):uZ(n.g,i,r)}function pPn(n){var t;this.j=new Np,this.f=new Rv,this.b=new YK(t=BB(Vj(FCt),9),BB(SR(t,t.length),9),0),this.d=x8(ANt,hQn,25,(kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,15,1),this.g=n}function vPn(n,t){var e,i,r;if(0!=t.c.length){for(e=TMn(n,t),r=!1;!e;)E$n(n,t,!0),r=!0,e=TMn(n,t);r&&E$n(n,t,!1),i=Dun(t),n.b&&n.b.lg(i),n.a=$hn(n,(l1(0,t.c.length),BB(t.c[0],33))),vPn(n,i)}}function mPn(n,t){var e,i,r;if(i=itn(n.Tg(),t),(e=t-n.Ah())<0){if(!i)throw Hp(new _y(o6n+t+s6n));if(!i.Ij())throw Hp(new _y(r6n+i.ne()+c6n));(r=n.Yg(i))>=0?n.Bh(r):cCn(n,i)}else qfn(n,e,i)}function yPn(n){var t,e;if(e=null,t=!1,cL(n,204)&&(t=!0,e=BB(n,204).a),t||cL(n,258)&&(t=!0,e=""+BB(n,258).a),t||cL(n,483)&&(t=!0,e=""+BB(n,483).a),!t)throw Hp(new Ly(H6n));return e}function kPn(n,t){var e,i;if(n.f){for(;t.Ob();)if(cL(i=(e=BB(t.Pb(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Ub(),!0;return!1}return t.Ob()}function jPn(n,t){var e,i;if(n.f){for(;t.Sb();)if(cL(i=(e=BB(t.Ub(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Pb(),!0;return!1}return t.Sb()}function EPn(n,t,e){var i,r,c,a,u,o;for(o=axn(n.e.Tg(),t),i=0,u=n.i,r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())){if(e==i)return a;++i,u=a+1}if(e==i)return u;throw Hp(new Ay(e9n+e+o8n+i))}function TPn(n,t){var i,r,c;if(0==n.f.c.length)return null;for(c=new bA,i=new Wb(n.f);i.a<i.c.c.length;)r=BB(n0(i),70).o,c.b=e.Math.max(c.b,r.a),c.a+=r.b;return c.a+=(n.f.c.length-1)*t,c}function MPn(n,t,e){var i,r,c;for(r=new oz(ZL(hbn(e).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||!b5(i)&&i.c.i.c==i.d.i.c||(c=zLn(n,i,e,new um)).c.length>1&&(t.c[t.c.length]=c)}function SPn(n){var t,e,i;for(Frn(e=new YT,n.o),i=new om;0!=e.b;)WUn(n,t=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),508),!0)&&WB(i.a,t);for(;0!=i.a.c.length;)WUn(n,t=BB(thn(i),508),!1)}function PPn(){PPn=O,kMt=new $I(hJn,0),wMt=new $I("BOOLEAN",1),vMt=new $I("INT",2),yMt=new $I("STRING",3),dMt=new $I("DOUBLE",4),gMt=new $I("ENUM",5),pMt=new $I("ENUMSET",6),mMt=new $I("OBJECT",7)}function IPn(n,t){var i,r,c,a,u;r=e.Math.min(n.c,t.c),a=e.Math.min(n.d,t.d),(c=e.Math.max(n.c+n.b,t.c+t.b))<r&&(i=r,r=c,c=i),(u=e.Math.max(n.d+n.a,t.d+t.a))<a&&(i=a,a=u,u=i),xH(n,r,a,c-r,u-a)}function CPn(){CPn=O,J$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,d7n,g7n,p7n,v7n,m7n,n8n]),Y$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"empty",d7n,K9n,"elementOnly"]),nLt=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"preserve","replace",y7n]),Z$t=new SH}function OPn(n,t,e){var i,r,c;if(t!=e){i=t;do{UR(n,i.c),(r=i.e)&&(_x(n,(c=i.d).b,c.d),UR(n,r.n),i=vW(r))}while(r);i=e;do{XR(n,i.c),(r=i.e)&&(Bx(n,(c=i.d).b,c.d),XR(n,r.n),i=vW(r))}while(r)}}function APn(n,t,e,i){var r,c,a,u,o;if(i.f.c+i.g.c==0)for(u=0,o=(a=n.a[n.c]).length;u<o;++u)VW(i,c=a[u],new kcn(n,c,e));return(r=BB(qC(AY(i.f,t)),663)).b=0,r.c=r.f,0==r.c||Tb(BB(xq(r.a,r.b),287)),r}function $Pn(){$Pn=O,Zst=new jP("MEDIAN_LAYER",0),tht=new jP("TAIL_LAYER",1),Jst=new jP("HEAD_LAYER",2),nht=new jP("SPACE_EFFICIENT_LAYER",3),eht=new jP("WIDEST_LAYER",4),Yst=new jP("CENTER_LAYER",5)}function LPn(n){switch(n.g){case 0:case 1:case 2:return kUn(),sCt;case 3:case 4:case 5:return kUn(),SCt;case 6:case 7:case 8:return kUn(),ICt;case 9:case 10:case 11:return kUn(),oCt;default:return kUn(),PCt}}function NPn(n,t){var e;return 0!=n.c.length&&(e=tdn((l1(0,n.c.length),BB(n.c[0],17)).c.i),BZ(),e==(bvn(),fvt)||e==hvt||o5($V(new Rq(null,new w1(n,16)),new Fc),new ig(t)))}function xPn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new P6),DH(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=BB(c.Pb(),188)).b!=t&&xPn(n,r.b,i),r.c!=t&&xPn(n,r.c,i),DH(i.a,r);return i}return null}function DPn(){DPn=O,Qyt=new lI("ROOT_PROC",0),Uyt=new lI("FAN_PROC",1),Wyt=new lI("NEIGHBORS_PROC",2),Xyt=new lI("LEVEL_HEIGHT",3),Vyt=new lI("NODE_POSITION_PROC",4),zyt=new lI("DETREEIFYING_PROC",5)}function RPn(n,t){if(cL(t,239))return zA(n,BB(t,33));if(cL(t,186))return UA(n,BB(t,118));if(cL(t,439))return GA(n,BB(t,202));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function KPn(n,t,e){var i,r;if(this.f=n,w6(e,r=(i=BB(RX(n.b,t),283))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++<r;)TZ(this);else for(this.c=i?i.b:null;e-- >0;)EZ(this);this.b=t,this.a=null}function _Pn(n,t){var e,i;t.a?zNn(n,t):(!!(e=BB(kK(n.b,t.b),57))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=BB(yK(n.b,t.b),57))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),MN(n.b,t.b))}function FPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).dc())return e.n.b=0,void(e.n.c=0);e.n.b=n.C.b,e.n.c=n.C.c,n.A.Hc((mdn(),_Ct))&&yRn(n,t),i=Xpn(n,t),PDn(n,t)==(cpn(),BIt)&&(i+=2*n.w),e.a.a=i}function BPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).dc())return e.n.d=0,void(e.n.a=0);e.n.d=n.C.d,e.n.a=n.C.a,n.A.Hc((mdn(),_Ct))&&kRn(n,t),i=Wpn(n,t),PDn(n,t)==(cpn(),BIt)&&(i+=2*n.w),e.a.b=i}function HPn(n,t){var e,i,r,c;for(c=new Np,i=new Wb(t);i.a<i.c.c.length;)WB(c,new RS(e=BB(n0(i),65),!0)),WB(c,new RS(e,!1));my((r=new hY(n)).a.a),e2(c,n.b,new Jy(Pun(Gk(oit,1),HWn,679,0,[r])))}function qPn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;return u=n.a,f=n.b,o=t.a,l=t.b,s=e.a,b=e.b,new xI(((c=u*l-f*o)*(s-(h=i.a))-(a=s*(w=i.b)-b*h)*(u-o))/(r=(u-o)*(b-w)-(f-l)*(s-h)),(c*(b-w)-a*(f-l))/r)}function GPn(n,t){var e,i,r;if(!n.d[t.p]){for(n.d[t.p]=!0,n.a[t.p]=!0,i=new oz(ZL(lbn(t).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||(r=e.d.i,n.a[r.p]?WB(n.b,e):GPn(n,r));n.a[t.p]=!1}}function zPn(n,t,e){var i;switch(i=0,BB(mMn(t,(HXn(),kgt)),163).g){case 2:i=2*-e+n.a,++n.a;break;case 1:i=-e;break;case 3:i=e;break;case 4:i=2*e+n.b,++n.b}return Lx(t,(hWn(),wlt))&&(i+=BB(mMn(t,wlt),19).a),i}function UPn(n,t,e){var i,r,c;for(e.zc(t,n),WB(n.n,t),c=n.p.eg(t),t.j==n.p.fg()?Obn(n.e,c):Obn(n.j,c),rX(n),r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(r);)i=BB(U5(r),11),e._b(i)||UPn(n,i,e)}function XPn(n){var t,e;return BB(ZAn(n,(sWn(),KSt)),21).Hc((mdn(),DCt))?(e=BB(ZAn(n,qSt),21),t=new wA(BB(ZAn(n,BSt),8)),e.Hc((n_n(),GCt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t):new Gj}function WPn(n){var t,e,i;if(!n.b){for(i=new Io,e=new ax(RBn(n));e.e!=e.i.gc();)0!=((t=BB(jpn(e),18)).Bb&h6n)&&f9(i,t);chn(i),n.b=new NO((BB(Wtn(QQ((QX(),t$t).o),8),18),i.i),i.g),P5(n).b&=-9}return n.b}function VPn(n,t){var e,i,r,c,a,u;a=BB(Emn(gz(t.k),x8(FCt,YZn,61,2,0,1)),122),Zmn(n,u=t.g,e=o3(t,a[0]),i=u3(t,a[1]))<=Zmn(n,u,r=o3(t,a[1]),c=u3(t,a[0]))?(t.a=e,t.c=i):(t.a=r,t.c=c)}function QPn(n,t,e){var i,r,c;for(OTn(e,"Processor set neighbors",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&LDn(n,new bg(r),e),HSn(e)}function YPn(n){var t,e,i,r;return RHn(),t=-1==(i=GO(n,YTn(35)))?n:n.substr(0,i),e=-1==i?null:n.substr(i+1),(r=V3(EAt,t))?null!=e&&(r=Isn(r,(kW(e),e))):(r=WXn(t),a5(EAt,t,r),null!=e&&(r=Isn(r,e))),r}function JPn(n){var t,e,i,r,c,a,u;if(SQ(),cL(n,54))for(c=0,r=n.gc()-1;c<r;++c,--r)t=n.Xb(c),n._c(c,n.Xb(r)),n._c(r,t);else for(e=n.Yc(),a=n.Zc(n.gc());e.Tb()<a.Vb();)i=e.Pb(),u=a.Ub(),e.Wb(u),a.Wb(i)}function ZPn(n,t){var e,i,r;OTn(t,"End label pre-processing",1),e=Gy(MD(mMn(n,(HXn(),jpt)))),i=Gy(MD(mMn(n,Spt))),r=gA(BB(mMn(n,Udt),103)),JT(wnn(new Rq(null,new w1(n.b,16)),new he),new D_(e,i,r)),HSn(t)}function nIn(n,t){var e,i,r,c,a,u;for(u=0,d3(c=new Lp,t);c.b!=c.c;)for(u+=syn((a=BB(dU(c),214)).d,a.e),r=new Wb(a.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(u+=nIn(n,e));return u}function tIn(n,t,i){var r,c;_an(this),t==(dJ(),Lyt)?TU(this.r,n.c):TU(this.w,n.c),TU(i==Lyt?this.r:this.w,n.d),tPn(this,n),XMn(this,r=Phn(n.c),c=Phn(n.d),c),this.o=(gxn(),e.Math.abs(r-c)<.2)}function eIn(n,t,e){var i,r,c,a,u;if(null!=(a=BB(yan(n.a,8),1936)))for(r=0,c=a.length;r<c;++r)null.jm();i=e,0==(1&n.a.Db)&&(u=new uW(n,e,t),i.ui(u)),cL(i,672)?BB(i,672).wi(n.a):i.ti()==n.a&&i.vi(null)}function iIn(){var n;return ZLt?BB($$n((WM(),zAt),S7n),1945):(sUn(),n=BB(cL(SJ((WM(),zAt),S7n),586)?SJ(zAt,S7n):new zW,586),ZLt=!0,gXn(n),pWn(n),VW((VM(),ZAt),n,new Ks),Tyn(n),mZ(zAt,S7n,n),n)}function rIn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function cIn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function aIn(n){var t,e,i;for(_$n(n),i=new Np,e=new Wb(n.a.a.b);e.a<e.c.c.length;)WB(i,new fP(t=BB(n0(e),81),!0)),WB(i,new fP(t,!1));nmn(n.c),i2(i,n.b,new Jy(Pun(Gk(Jat,1),HWn,369,0,[n.c]))),vAn(n)}function uIn(n){var t,e,i,r;for(e=new xp,r=new Wb(n.d);r.a<r.c.c.length;)i=BB(n0(r),181),t=BB(i.We((hWn(),Uft)),17),AY(e.f,t)||VW(e,t,new TQ(t)),WB(BB(qC(AY(e.f,t)),456).b,i);return new t_(new Ob(e))}function oIn(n,t){var e,i,r,c,a;for(i=new d1(n.j.c.length),e=null,c=new Wb(n.j);c.a<c.c.c.length;)(r=BB(n0(c),11)).j!=e&&(i.b==i.c||F$n(i,e,t),o4(i),e=r.j),(a=mAn(r))&&w3(i,a);i.b==i.c||F$n(i,e,t)}function sIn(n,t){var e,i;for(i=new M2(n.b,0);i.b<i.d.gc();)Px(i.b<i.d.gc()),e=BB(i.d.Xb(i.c=i.b++),70),BB(mMn(e,(HXn(),Ydt)),272)==(Rtn(),UPt)&&(fW(i),WB(t.b,e),Lx(e,(hWn(),Uft))||hon(e,Uft,n))}function hIn(n){var t,i,r;for(t=F3(new oz(ZL(lbn(n).a.Kc(),new h))),i=new oz(ZL(fbn(n).a.Kc(),new h));dAn(i);)r=F3(new oz(ZL(lbn(BB(U5(i),17).c.i).a.Kc(),new h))),t=e.Math.max(t,r);return iln(t)}function fIn(n,t,e){var i,r,c,a;for(OTn(e,"Processor arrange node",1),r=null,c=new YT,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(r=a);r5(c,r,c.c.b,c.c),Yzn(n,c,mcn(e,1)),HSn(e)}function lIn(n,t,e){var i,r,c;i=BB(ZAn(n,(sWn(),hSt)),21),r=0,c=0,t.a>e.a&&(i.Hc((wEn(),WMt))?r=(t.a-e.a)/2:i.Hc(QMt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((wEn(),JMt))?c=(t.b-e.b)/2:i.Hc(YMt)&&(c=t.b-e.b)),lMn(n,r,c)}function bIn(n,t,e,i,r,c,a,u,o,s,h,f,l){cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=a,$ln(n,u),Nln(n,o),Aln(n,s),Lln(n,h),nln(n,f),qln(n,l),Yfn(n,!0),Len(n,r),n.ok(c),Chn(n,t),null!=i&&(n.i=null,arn(n,i))}function wIn(n){var t,e;if(n.f){for(;n.n>0;){if(cL(e=(t=BB(n.k.Xb(n.n-1),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;--n.n}return!1}return n.n>0}function dIn(n,t,e){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,[e,iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must not be greater than size (%s)",Pun(Gk(Ant,1),HWn,1,5,[e,iln(n),iln(t)]))}function gIn(n,t,e,i,r,c){var a,u,o;if(i-e<7)$bn(t,e,i,c);else if(gIn(t,n,u=e+r,o=u+((a=i+r)-u>>1),-r,c),gIn(t,n,o,a,-r,c),c.ue(n[o-1],n[o])<=0)for(;e<i;)$X(t,e++,n[u++]);else Gfn(n,u,o,a,t,e,i,c)}function pIn(n,t){var e,i,r;for(r=new Np,i=new Wb(n.c.a.b);i.a<i.c.c.length;)e=BB(n0(i),57),t.Lb(e)&&(WB(r,new OS(e,!0)),WB(r,new OS(e,!1)));Zvn(n.e),e2(r,n.d,new Jy(Pun(Gk(oit,1),HWn,679,0,[n.e])))}function vIn(n,t){var e,i,r,c,a,u,o;for(o=t.d,r=t.b.j,u=new Wb(o);u.a<u.c.c.length;)for(a=BB(n0(u),101),c=x8($Nt,ZYn,25,r.c.length,16,1),VW(n.b,a,c),e=a.a.d.p-1,i=a.c.d.p;e!=i;)c[e=(e+1)%r.c.length]=!0}function mIn(n,t){for(n.r=new Fan(n.p),Jl(n.r,n),Frn(n.r.j,n.j),yQ(n.j),DH(n.j,t),DH(n.r.e,t),rX(n),rX(n.r);0!=n.f.c.length;)G$(BB(xq(n.f,0),129));for(;0!=n.k.c.length;)G$(BB(xq(n.k,0),129));return n.r}function yIn(n,t,e){var i,r,c;if(r=itn(n.Tg(),t),(i=t-n.Ah())<0){if(!r)throw Hp(new _y(o6n+t+s6n));if(!r.Ij())throw Hp(new _y(r6n+r.ne()+c6n));(c=n.Yg(r))>=0?n.sh(c,e):TLn(n,r,e)}else Lbn(n,i,r,e)}function kIn(n){var t,e,i,r;if(e=BB(n,49).qh())try{if(i=null,(t=$$n((WM(),zAt),M_n(_bn(e))))&&(r=t.rh())&&(i=r.Wk(Xy(e.e))),i&&i!=n)return kIn(i)}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}return n}function jIn(n,t,e){var i,r,c,a;if(a=null==t?0:n.b.se(t),0==(r=null==(i=n.a.get(a))?new Array:i).length)n.a.set(a,r);else if(c=hhn(n,t,r))return c.ed(e);return $X(r,r.length,new PS(t,e)),++n.c,oY(n.b),null}function EIn(n,t){var e;return h2(n.a),IU(n.a,(Prn(),Qkt),Qkt),IU(n.a,Ykt,Ykt),dq(e=new B2,Ykt,(Ibn(),ejt)),GC(ZAn(t,(Uyn(),Sjt)))!==GC((Hsn(),sjt))&&dq(e,Ykt,njt),dq(e,Ykt,tjt),aA(n.a,e),$qn(n.a,t)}function TIn(n){if(!n)return lk(),htt;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=ftt[typeof t];return i?i(t):khn(typeof t)}return n instanceof Array||n instanceof e.Array?new Tl(n):new Pl(n)}function MIn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SCn(r),c.a=MCn(r),c.b=e.Math.max(c.b,a.a),c.b>a.a&&!t&&(c.b=a.a),c.c=-(c.b-a.a)/2,i.g){case 1:c.d=-c.a;break;case 3:c.d=a.b}_Fn(r),GFn(r)}function SIn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SCn(r),c.a=MCn(r),c.a=e.Math.max(c.a,a.b),c.a>a.b&&!t&&(c.a=a.b),c.d=-(c.a-a.b)/2,i.g){case 4:c.c=-c.b;break;case 2:c.c=a.a}_Fn(r),GFn(r)}function PIn(n,t){var e,i,r,c,a;if(!t.dc())if(r=BB(t.Xb(0),128),1!=t.gc())for(e=1;e<t.gc();)!r.j&&r.o||(c=vyn(t,e))&&(i=BB(c.a,19).a,kxn(n,r,a=BB(c.b,128),e,i,t),e=i+1,r=a);else kxn(n,r,r,1,0,t)}function IIn(n){var t,e,i,r;for(m$(r=new t_(n.d),new zr),kDn(),t=Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst]),e=0,i=new Wb(r);i.a<i.c.c.length;)IOn(BB(n0(i),101),t[e%t.length]),++e}function CIn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(r=BB(b3(c),8),!Dcn(n,i)||!Dcn(n,r))return!1;i=r}return!(!Dcn(n,i)||!Dcn(n,e))}function OIn(n,t){var e,i,r,c,a;return e=Ren(a=n,"x"),nnn(new qg(t).a,e),i=Ren(a,"y"),tnn(new Gg(t).a,i),r=Ren(a,I6n),enn(new zg(t).a,r),c=Ren(a,P6n),inn(new Ug(t).a,c),c}function AIn(n,t){dRn(n,t),0!=(1&n.b)&&(n.a.a=null),0!=(2&n.b)&&(n.a.f=null),0!=(4&n.b)&&(n.a.g=null,n.a.i=null),0!=(16&n.b)&&(n.a.d=null,n.a.e=null),0!=(8&n.b)&&(n.a.b=null),0!=(32&n.b)&&(n.a.j=null,n.a.c=null)}function $In(n,t){var e,i;if(i=0,t.length>0)try{i=l_n(t,_Vn,DWn)}catch(r){throw cL(r=lun(r),127)?Hp(new L7(r)):Hp(r)}return!n.a&&(n.a=new Sp(n)),i<(e=n.a).i&&i>=0?BB(Wtn(e,i),56):null}function LIn(n,t){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,["index",iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must be less than size (%s)",Pun(Gk(Ant,1),HWn,1,5,["index",iln(n),iln(t)]))}function NIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function xIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function DIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function RIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function KIn(n,t){var e,i,r,c,a,u;for(e=n.b.c.length,r=xq(n.b,t);2*t+1<e&&(u=c=2*t+1,(a=c+1)<e&&n.a.ue(xq(n.b,a),xq(n.b,c))<0&&(u=a),i=u,!(n.a.ue(r,xq(n.b,i))<0));)c5(n.b,t,xq(n.b,i)),t=i;c5(n.b,t,r)}function _In(n,t,i,r,c,a){var u,o,s,h,f;for(GC(n)===GC(i)&&(n=n.slice(t,t+c),t=0),s=i,o=t,h=t+c;o<h;)c=(u=e.Math.min(o+1e4,h))-o,(f=n.slice(o,u)).splice(0,0,r,a?c:0),Array.prototype.splice.apply(s,f),o=u,r+=c}function FIn(n,t,e){var i,r;return i=e.d,r=e.e,n.g[i.d]<=n.i[t.d]&&n.i[t.d]<=n.i[i.d]&&n.g[r.d]<=n.i[t.d]&&n.i[t.d]<=n.i[r.d]?!(n.i[i.d]<n.i[r.d]):n.i[i.d]<n.i[r.d]}function BIn(n){var t,e,i,r,c,a,u;if((i=n.a.c.length)>0)for(a=n.c.d,r=kL(XR(new xI((u=n.d.d).a,u.b),a),1/(i+1)),c=new xI(a.a,a.b),e=new Wb(n.a);e.a<e.c.c.length;)(t=BB(n0(e),559)).d.a=c.a,t.d.b=c.b,UR(c,r)}function HIn(n,t,i){var r,c,a,u,o,s;for(s=RQn,a=new Wb(GLn(n.b));a.a<a.c.c.length;)for(c=BB(n0(a),168),o=new Wb(GLn(t.b));o.a<o.c.c.length;)u=BB(n0(o),168),r=Iun(c.a,c.b,u.a,u.b,i),s=e.Math.min(s,r);return s}function qIn(n,t){if(!t)throw Hp(new gv);if(n.j=t,!n.d)switch(n.j.g){case 1:n.a.a=n.o.a/2,n.a.b=0;break;case 2:n.a.a=n.o.a,n.a.b=n.o.b/2;break;case 3:n.a.a=n.o.a/2,n.a.b=n.o.b;break;case 4:n.a.a=0,n.a.b=n.o.b/2}}function GIn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function zIn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function UIn(n){var t,e,i,r;for(r=Lfn(n.d,n.e).Kc();r.Ob();)for(i=BB(r.Pb(),11),e=new Wb(n.e==(kUn(),ICt)?i.e:i.g);e.a<e.c.c.length;)b5(t=BB(n0(e),17))||t.c.i.c==t.d.i.c||(RSn(n,t),++n.f,++n.c)}function XIn(n,t){var e,i;if(t.dc())return SQ(),SQ(),set;for(WB(i=new Np,iln(_Vn)),e=1;e<n.f;++e)null==n.a&&wRn(n),n.a[e]&&WB(i,iln(e));return 1==i.c.length?(SQ(),SQ(),set):(WB(i,iln(DWn)),dBn(t,i))}function WIn(n,t){var e,i,r,c,a,u;e=ckn(t,u=t.c.i.k!=(uSn(),Iut)?t.d:t.c).i,r=BB(RX(n.k,u),121),i=n.i[e.p].a,AK(u.i)<(e.c?E7(e.c.a,e,0):-1)?(c=r,a=i):(c=i,a=r),UNn(aM(cM(uM(rM(new Hv,0),4),c),a))}function VIn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kCn(dnn(e,BB(r.Pb(),19).a))))&&(!t.b&&(t.b=new hK(KOt,t,4,7)),f9(t.b,c))}function QIn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kCn(dnn(e,BB(r.Pb(),19).a))))&&(!t.c&&(t.c=new hK(KOt,t,5,8)),f9(t.c,c))}function YIn(n,t,e){var i,r;i=t.a&n.f,t.b=n.b[i],n.b[i]=t,r=t.f&n.f,t.d=n.c[r],n.c[r]=t,e?(t.e=e.e,t.e?t.e.c=t:n.a=t,t.c=e.c,t.c?t.c.e=t:n.e=t):(t.e=n.e,t.c=null,n.e?n.e.c=t:n.a=t,n.e=t),++n.i,++n.g}function JIn(n){var t,e,i;if(t=n.Pb(),!n.Ob())return t;for(i=uO(oO(new Ik,"expected one element but was: <"),t),e=0;e<4&&n.Ob();e++)uO((i.a+=FWn,i),n.Pb());throw n.Ob()&&(i.a+=", ..."),i.a+=">",Hp(new _y(i.a))}function ZIn(n,t){var e;t.d?t.d.b=t.b:n.a=t.b,t.b?t.b.d=t.d:n.e=t.d,t.e||t.c?(--(e=BB(RX(n.b,t.a),283)).a,t.e?t.e.c=t.c:e.b=t.c,t.c?t.c.e=t.e:e.c=t.e):((e=BB(v6(n.b,t.a),283)).a=0,++n.c),--n.d}function nCn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[3]=t[3]+(e%60/10|0)&QVn,t[4]=t[4]+e%10&QVn,Bdn(t,0,t.length)}function tCn(n,t,e){var i,r;for(i=t.d,r=e.d;i.a-r.a==0&&i.b-r.b==0;)i.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,i.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5}function eCn(n){var t,e,i,r;for(n.g=new Hbn(BB(yX(FCt),290)),i=0,kUn(),e=sCt,t=0;t<n.j.c.length;t++)(r=BB(xq(n.j,t),11)).j!=e&&(i!=t&&mG(n.g,e,new rC(iln(i),iln(t))),e=r.j,i=t);mG(n.g,e,new rC(iln(i),iln(t)))}function iCn(n){var t,e,i,r,c;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)for(r=new Wb(BB(n0(t),29).a);r.a<r.c.c.length;)for((i=BB(n0(r),10)).p=e++,c=new Wb(i.j);c.a<c.c.c.length;)BB(n0(c),11).p=e++}function rCn(n,t,e,i,r){var c,a,u,o;if(t)for(a=t.Kc();a.Ob();)for(o=cRn(BB(a.Pb(),10),(ain(),qvt),e).Kc();o.Ob();)u=BB(o.Pb(),11),(c=BB(qC(AY(r.f,u)),112))||(c=new Fan(n.d),i.c[i.c.length]=c,UPn(c,u,r))}function cCn(n,t){var e,i,r;if(!(r=Fqn((CPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ol(t)}function aCn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=IJ(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):Van(fan(n))}function uCn(n){var t,e,i,r,c,a,u;for(c=new fA,e=new Wb(n);e.a<e.c.c.length;)a=(t=BB(n0(e),129)).a,u=t.b,c.a._b(a)||c.a._b(u)||(r=a,i=u,a.e.b+a.j.b>2&&u.e.b+u.j.b<=2&&(r=u,i=a),c.a.zc(r,c),r.q=i);return c}function oCn(n,t){var e,i,r;return qan(i=new $vn(n),t),hon(i,(hWn(),Vft),t),hon(i,(HXn(),ept),(QEn(),XIt)),hon(i,kdt,(wvn(),OMt)),Bl(i,(uSn(),Mut)),IZ(e=new ISn,i),qIn(e,(kUn(),ICt)),IZ(r=new ISn,i),qIn(r,oCt),i}function sCn(n){switch(n.g){case 0:return new Ny((oin(),Omt));case 1:return new df;case 2:return new jf;default:throw Hp(new _y("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function hCn(n,t){var e,i,r,c;for(n.c[t.p]=!0,WB(n.a,t),c=new Wb(t.j);c.a<c.c.c.length;)for(e=new m6((r=BB(n0(c),11)).b);y$(e.a)||y$(e.b);)i=ngn(r,BB(y$(e.a)?n0(e.a):n0(e.b),17)).i,n.c[i.p]||hCn(n,i)}function fCn(n){var t,i,r,c,a,u,o;for(u=0,i=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));i.e!=i.i.gc();)o=(t=BB(kpn(i),33)).g,c=t.f,r=e.Math.sqrt(o*o+c*c),u=e.Math.max(r,u),a=fCn(t),u=e.Math.max(a,u);return u}function lCn(){lCn=O,rCt=new XI("OUTSIDE",0),eCt=new XI("INSIDE",1),iCt=new XI("NEXT_TO_PORT_IF_POSSIBLE",2),tCt=new XI("ALWAYS_SAME_SIDE",3),nCt=new XI("ALWAYS_OTHER_SAME_SIDE",4),cCt=new XI("SPACE_EFFICIENT",5)}function bCn(n,t,e){var i,r,c,a;return $in(i=K2(n,(tE(),r=new jm,!!e&&nNn(r,e),r),t),R2(t,q6n)),STn(t,i),o$n(t,i),OIn(t,i),c=N2(t,"ports"),PLn((a=new pC(n,i)).a,a.b,c),xon(n,t,i),aun(n,t,i),i}function wCn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,58,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[4]=t[4]+(e%60/10|0)&QVn,t[5]=t[5]+e%10&QVn,Bdn(t,0,t.length)}function dCn(n){var t;return t=Pun(Gk(ONt,1),WVn,25,15,[71,77,84,45,48,48,58,48,48]),n<=0&&(t[3]=43,n=-n),t[4]=t[4]+((n/60|0)/10|0)&QVn,t[5]=t[5]+(n/60|0)%10&QVn,t[7]=t[7]+(n%60/10|0)&QVn,t[8]=t[8]+n%10&QVn,Bdn(t,0,t.length)}function gCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+vz(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function pCn(n,t){var i,r,c;for(c=DWn,r=new Wb(kbn(t));r.a<r.c.c.length;)(i=BB(n0(r),213)).f&&!n.c[i.c]&&(n.c[i.c]=!0,c=e.Math.min(c,pCn(n,Nbn(i,t))));return n.i[t.d]=n.j,n.g[t.d]=e.Math.min(c,n.j++),n.g[t.d]}function vCn(n,t){var e,i,r;for(r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.b=(e=i.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),sCt)?-e.rf().b-Gy(MD(e.We(aPt))):Gy(MD(e.We(aPt))):e.Hf()==(kUn(),sCt)?-e.rf().b:0}function mCn(n){var t,e,i,r,c,a,u;for(e=QA(n.e),c=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),t=e.a-c.a,r=e.b-c.b,u=0;u<n.c;u++){for(i=t,a=0;a<n.d;a++)Wbn(n.e,new UV(i,r,n.a,n.b))&&FRn(n,a,u,!1,!0),i+=n.a;r+=n.b}}function yCn(n){var t,e,i;if(qy(TD(ZAn(n,(sWn(),SSt))))){for(i=new Np,e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)QCn(t=BB(U5(e),79))&&qy(TD(ZAn(t,PSt)))&&(i.c[i.c.length]=t);return i}return SQ(),SQ(),set}function kCn(n){var t;if(t=!1,cL(n,204))return t=!0,BB(n,204).a;if(!t&&cL(n,258)&&BB(n,258).a%1==0)return t=!0,iln(QO(BB(n,258).a));throw Hp(new ek("Id must be a string or an integer: '"+n+"'."))}function jCn(n,t){var e,i,r,c,a,u;for(c=null,r=new rU((!n.a&&(n.a=new Sp(n)),n.a));bOn(r);)if(YBn(a=(e=BB(aLn(r),56)).Tg()),null!=(i=(u=a.o)&&e.mh(u)?pK(uun(u),e.ah(u)):null)&&mK(i,t)){c=e;break}return c}function ECn(n,t,e){var i,r,c,a,u;if(lin(e,"occurrences"),0==e)return(u=BB(lfn(OQ(n.a),t),14))?u.gc():0;if(!(a=BB(lfn(OQ(n.a),t),14)))return 0;if(e>=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i<e;i++)r.Pb(),r.Qb();return c}function TCn(n,t,e){var i,r,c;return lin(e,"oldCount"),lin(0,"newCount"),((i=BB(lfn(OQ(n.a),t),14))?i.gc():0)==e&&(lin(0,"count"),(c=-((r=BB(lfn(OQ(n.a),t),14))?r.gc():0))>0?wk():c<0&&ECn(n,t,-c),!0)}function MCn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=Xvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=Kk(ecn(LV(AV(LU(n.a),new Mn),new Sn)));return a>0?a+n.n.d+n.n.a:0}function SCn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=Kk(ecn(LV(AV(LU(n.a),new En),new Tn)));else{for(t=0,r=0,c=(i=Wvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}return a>0?a+n.n.b+n.n.c:0}function PCn(n,t){var i,r,c,a;for(i=(a=BB(oV(n.b,t),124)).a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).c&&(i.a=e.Math.max(i.a,VH(r.c)));if(i.a>0)switch(t.g){case 2:a.n.c=n.s;break;case 4:a.n.b=n.s}}function ICn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(fRn(),Zct)),19).a-BB(mMn(n,Zct),19).a)?(i=XR(B$(BB(mMn(n,(Mrn(),uat)),8)),BB(mMn(n,oat),8)),r=XR(B$(BB(mMn(t,uat),8)),BB(mMn(t,oat),8)),Pln(i.a*i.b,r.a*r.b)):e}function CCn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(IAn(),$kt)),19).a-BB(mMn(n,$kt),19).a)?(i=XR(B$(BB(mMn(n,(qqn(),Zyt)),8)),BB(mMn(n,nkt),8)),r=XR(B$(BB(mMn(t,Zyt),8)),BB(mMn(t,nkt),8)),Pln(i.a*i.b,r.a*r.b)):e}function OCn(n){var t,e;return(e=new Ik).a+="e_",null!=(t=Xan(n))&&(e.a+=""+t),n.c&&n.d&&(oO((e.a+=" ",e),pyn(n.c)),oO(uO((e.a+="[",e),n.c.i),"]"),oO((e.a+=e1n,e),pyn(n.d)),oO(uO((e.a+="[",e),n.d.i),"]")),e.a}function ACn(n){switch(n.g){case 0:return new pf;case 1:return new vf;case 2:return new gf;case 3:return new mf;default:throw Hp(new _y("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function $Cn(n,t,i,r,c){var a;switch(a=0,c.g){case 1:a=e.Math.max(0,t.b+n.b-(i.b+r));break;case 3:a=e.Math.max(0,-n.b-r);break;case 2:a=e.Math.max(0,-n.a-r);break;case 4:a=e.Math.max(0,t.a+n.a-(i.a+r))}return a}function LCn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)r=x2(e,BB(c.Pb(),19).a),L6n in r.a||N6n in r.a?sKn(n,r,t):EXn(n,r,t),PL(BB(RX(n.b,Qdn(r)),79))}function NCn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=Ckn(n))&&(ZM(),t.Cj()==E9n)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function xCn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 2:case 3:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function DCn(n,t){var e,i,r,c;if(QXn(n),0!=n.c||123!=n.a)throw Hp(new ak(kWn((u$(),P8n))));if(c=112==t,i=n.d,(e=lx(n.i,125,i))<0)throw Hp(new ak(kWn((u$(),I8n))));return r=fx(n.i,i,e),n.d=e+1,b9(r,c,512==(512&n.e))}function RCn(n){var t;if((t=BB(mMn(n,(HXn(),qdt)),314))==(Oin(),hht))throw Hp(new ck("The hierarchy aware processor "+t+" in child node "+n+" is only allowed if the root node specifies the same hierarchical processor."))}function KCn(n,t){var e,i,r,c;for(G_(),e=null,r=t.Kc();r.Ob();)(i=BB(r.Pb(),128)).o||(WB((c=new PBn(F$(i.a),bH(i.a),null,BB(i.d.a.ec().Kc().Pb(),17))).c,i.a),n.c[n.c.length]=c,e&&WB(e.d,c),e=c)}function _Cn(n,t){var e,i,r;if(t)if(0!=(4&t.i))for(i="[]",e=t.c;;e=e.c){if(0==(4&e.i)){Hin(n,r=Uy((ED(e),e.o+i))),xen(n,r);break}i+="[]"}else Hin(n,r=Uy((ED(t),t.o))),xen(n,r);else Hin(n,null),xen(n,null);n.yk(t)}function FCn(n,t,e,i,r){var c,a,u,o;return GC(o=hD(n,BB(r,56)))!==GC(r)?(u=BB(n.g[e],72),jL(n,e,sTn(n,e,c=Z3(t,o))),mA(n.e)&&(KEn(a=LY(n,9,c.ak(),r,o,i,!1),new N7(n.e,9,n.c,u,c,i,!1)),$7(a)),o):r}function BCn(n,t,e){var i,r,c,a,u,o;for(i=BB(h6(n.c,t),15),r=BB(h6(n.c,e),15),c=i.Zc(i.gc()),a=r.Zc(r.gc());c.Sb()&&a.Sb();)if((u=BB(c.Ub(),19))!=(o=BB(a.Ub(),19)))return E$(u.a,o.a);return c.Ob()||a.Ob()?c.Ob()?1:-1:0}function HCn(n,t){var e,i;try{return X1(n.a,t)}catch(r){if(cL(r=lun(r),32)){try{if(i=l_n(t,_Vn,DWn),e=Vj(n.a),i>=0&&i<e.length)return e[i]}catch(c){if(!cL(c=lun(c),127))throw Hp(c)}return null}throw Hp(r)}}function qCn(n,t){var e,i,r;if(r=Fqn((CPn(),Z$t),n.Tg(),t))return ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ll(t);throw Hp(new _y(r6n+t.ne()+u6n))}function GCn(){var n;return tS(),Q$t?BB($$n((WM(),zAt),V9n),1939):(RO(Hnt,new Is),nzn(),n=BB(cL(SJ((WM(),zAt),V9n),547)?SJ(zAt,V9n):new UW,547),Q$t=!0,oWn(n),TWn(n),VW((VM(),ZAt),n,new Go),mZ(zAt,V9n,n),n)}function zCn(n,t){var e,i,r,c;n.j=-1,mA(n.e)?(e=n.i,c=0!=n.i,c6(n,t),i=new N7(n.e,3,n.c,null,t,e,c),r=t.Qk(n.e,n.c,null),(r=CEn(n,t,r))?(r.Ei(i),r.Fi()):ban(n.e,i)):(c6(n,t),(r=t.Qk(n.e,n.c,null))&&r.Fi())}function UCn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(b1(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)b1(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function XCn(n){var t,i,r,c,a;return i=c=BB(n.a,19).a,r=a=BB(n.b,19).a,t=e.Math.max(e.Math.abs(c),e.Math.abs(a)),c<=0&&c==a?(i=0,r=a-1):c==-t&&a!=t?(i=a,r=c,a>=0&&++i):(i=-a,r=c),new rC(iln(i),iln(r))}function WCn(n,t,e,i){var r,c,a,u,o,s;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)if(o=c,s=u=a-t.k+i,o+=n.j,s+=n.k,o>=0&&s>=0&&o<n.o&&s<n.p&&(!mmn(t,r,a)&&imn(n,c,u)||vmn(t,r,a)&&!rmn(n,c,u)))return!0;return!1}function VCn(n,t,e){var i,r,c,a;c=n.c,a=n.d,r=(Aon(Pun(Gk(PMt,1),sVn,8,0,[c.i.n,c.n,c.a])).b+Aon(Pun(Gk(PMt,1),sVn,8,0,[a.i.n,a.n,a.a])).b)/2,i=null,i=c.j==(kUn(),oCt)?new xI(t+c.i.c.c.a+e,r):new xI(t-e,r),Kx(n.a,0,i)}function QCn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=i)return!1}else t=i;return!0}function YCn(n,t,e){var i;if(++n.j,t>=n.i)throw Hp(new Ay(u8n+t+o8n+n.i));if(e>=n.i)throw Hp(new Ay(s8n+e+o8n+n.i));return i=n.g[e],t!=e&&(t<e?aHn(n.g,t,n.g,t+1,e-t):aHn(n.g,e+1,n.g,e,t-e),$X(n.g,t,i),n.ei(t,i,e),n.ci()),i}function JCn(n,t,e){var i;if(i=BB(n.c.xc(t),14))return!!i.Fc(e)&&(++n.d,!0);if((i=n.ic(t)).Fc(e))return++n.d,n.c.zc(t,i),!0;throw Hp(new g5("New Collection violated the Collection spec"))}function ZCn(n){var t,e,i;return n<0?0:0==n?32:(e=16-(t=(i=-(n>>16))>>16&16),e+=t=(i=(n>>=t)-256)>>16&8,e+=t=(i=(n<<=t)-_Qn)>>16&4,(e+=t=(i=(n<<=t)-hVn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function nOn(n){var t,e,i,r;for(MQ(),Sct=new Np,Mct=new xp,Tct=new Np,!n.a&&(n.a=new eU(UOt,n,10,11)),xUn(t=n.a),r=new AL(t);r.e!=r.i.gc();)i=BB(kpn(r),33),-1==E7(Sct,i,0)&&(e=new Np,WB(Tct,e),Rgn(i,e));return Tct}function tOn(n,t,e){var i,r,c,a;n.a=e.b.d,cL(t,352)?(e5(c=qSn(r=cDn(BB(t,79),!1,!1)),i=new Nw(n)),VFn(c,r),null!=t.We((sWn(),OSt))&&e5(BB(t.We(OSt),74),i)):((a=BB(t,470)).Hg(a.Dg()+n.a.a),a.Ig(a.Eg()+n.a.b))}function eOn(n,t){var i,r,c,a,u,o,s,h;for(h=Gy(MD(mMn(t,(HXn(),Npt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,o=1;o<n.length;o++)r=n[o].n,c=n[o].o,i=n[o].d,(a=r.a-i.b-s)<0&&(r.a-=a),(u=t.f).a=e.Math.max(u.a,r.a+c.a),s=r.a+c.a+i.c+h}function iOn(n,t){var e,i,r,c,a,u;return i=BB(BB(RX(n.g,t.a),46).a,65),r=BB(BB(RX(n.g,t.b),46).a,65),(e=nqn(c=i.b,a=r.b))>=0?e:(u=lW(XR(new xI(a.c+a.b/2,a.d+a.a/2),new xI(c.c+c.b/2,c.d+c.a/2))),-(Y_n(c,a)-1)*u)}function rOn(n,t,e){var i;JT(new Rq(null,(!e.a&&(e.a=new eU(FOt,e,6,6)),new w1(e.a,16))),new eC(n,t)),JT(new Rq(null,(!e.n&&(e.n=new eU(zOt,e,1,7)),new w1(e.n,16))),new iC(n,t)),(i=BB(ZAn(e,(sWn(),OSt)),74))&&Yrn(i,n,t)}function cOn(n,t,e){var i,r,c;if(c=Fqn((CPn(),Z$t),n.Tg(),t))return ZM(),BB(c,66).Oj()||(c=Z1(B7(Z$t,c))),r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).hl(t,e);throw Hp(new _y(r6n+t.ne()+u6n))}function aOn(n,t,e,i){var r,c,a,u,o;if(r=n.d[t])if(c=r.g,o=r.i,null!=i){for(u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return a}else for(u=0;u<o;++u)if(GC((a=BB(c[u],133)).cd())===GC(i))return a;return null}function uOn(n,t){var e;if(t<0)throw Hp(new Oy("Negative exponent"));if(0==t)return Jtt;if(1==t||swn(n,Jtt)||swn(n,eet))return n;if(!fAn(n,0)){for(e=1;!fAn(n,e);)++e;return Nnn(vwn(e*t),uOn(z5(n,e),t))}return mTn(n,t)}function oOn(n,t){var e,i,r;if(GC(n)===GC(t))return!0;if(null==n||null==t)return!1;if(n.length!=t.length)return!1;for(e=0;e<n.length;++e)if(i=n[e],r=t[e],!(GC(i)===GC(r)||null!=i&&Nfn(i,r)))return!1;return!0}function sOn(n){var t,e,i;for(kM(),this.b=Vat,this.c=(Ffn(),BPt),this.f=(yM(),zat),this.a=n,tj(this,new It),kNn(this),i=new Wb(n.b);i.a<i.c.c.length;)(e=BB(n0(i),81)).d||(t=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[e])),WB(n.a,t))}function hOn(n,t,e){var i,r,c,a,u,o;if(!n||0==n.c.length)return null;for(c=new KY(t,!e),r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),70),USn(c,(gM(),new Bw(i)));return(a=c.i).a=(o=c.n,c.e.b+o.d+o.a),a.b=(u=c.n,c.e.a+u.b+u.c),c}function fOn(n){var t,e,i,r,c,a,u;for(hA(u=n2(n.a),new Pe),e=null,c=0,a=(r=u).length;c<a&&(i=r[c]).k==(uSn(),Mut);++c)(t=BB(mMn(i,(hWn(),Qft)),61))!=(kUn(),ICt)&&t!=oCt||(e&&BB(mMn(e,clt),15).Fc(i),e=i)}function lOn(n,t,e){var i,r,c,a,u,o;l1(t,n.c.length),u=BB(n.c[t],329),s6(n,t),u.b/2>=e&&(i=t,c=(o=(u.c+u.a)/2)-e,u.c<=o-e&&kG(n,i++,new kB(u.c,c)),(a=o+e)<=u.a&&(r=new kB(a,u.a),LZ(i,n.c.length),MS(n.c,i,r)))}function bOn(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=BB(n.g[n.i-1],47)}else n.d=n.si(n.f),f9(n,n.d),t=n.d;return t==n.b&&null.km>=null.jm()?(aLn(n),bOn(n)):t.Ob()}function wOn(n,t,e){var i,r,c,a;if(!(a=e)&&(a=LH(new Xm,0)),OTn(a,qZn,1),$Gn(n.c,t),1==(c=RGn(n.a,t)).gc())VHn(BB(c.Xb(0),37),a);else for(r=1/c.gc(),i=c.Kc();i.Ob();)VHn(BB(i.Pb(),37),mcn(a,r));Ek(n.a,c,t),FDn(t),HSn(a)}function dOn(n){if(this.a=n,n.c.i.k==(uSn(),Mut))this.c=n.c,this.d=BB(mMn(n.c.i,(hWn(),Qft)),61);else{if(n.d.i.k!=Mut)throw Hp(new _y("Edge "+n+" is not an external edge."));this.c=n.d,this.d=BB(mMn(n.d.i,(hWn(),Qft)),61)}}function gOn(n,t){var e,i,r;r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,r,n.b)),t?t!=n&&(Nrn(n,t.zb),$en(n,t.d),Fin(n,null==(e=null==(i=t.c)?t.zb:i)||mK(e,t.zb)?null:e)):(Nrn(n,null),$en(n,0),Fin(n,null))}function pOn(n){var t,e;if(n.f){for(;n.n<n.o;){if(cL(e=(t=BB(n.j?n.j.pi(n.n):n.k.Xb(n.n),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;++n.n}return!1}return n.n<n.o}function vOn(n,t){var e;this.e=(WX(),yX(n),WX(),Nwn(n)),this.c=(yX(t),Nwn(t)),aN(this.e.Hd().dc()==this.c.Hd().dc()),this.d=vbn(this.e),this.b=vbn(this.c),e=kq(Ant,[sVn,HWn],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2),this.a=e,din(this)}function mOn(n){var t=(!Znt&&(Znt=QUn()),Znt);return'"'+n.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,(function(n){return CJ(n,t)}))+'"'}function yOn(n){var t,e;for(IQ(),this.b=hit,this.c=lit,this.g=(pM(),sit),this.d=(Ffn(),BPt),this.a=n,yNn(this),e=new Wb(n.b);e.a<e.c.c.length;)!(t=BB(n0(e),57)).a&&CN(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),n),t.e=new gY(t.d)}function kOn(n){var t,e,i,r,c;for(r=n.e.c.length,i=x8(Rnt,nZn,15,r,0,1),c=new Wb(n.e);c.a<c.c.c.length;)i[BB(n0(c),144).b]=new YT;for(e=new Wb(n.c);e.a<e.c.c.length;)i[(t=BB(n0(e),282)).c.b].Fc(t),i[t.d.b].Fc(t);return i}function jOn(n){var t,e,i,r,c,a;for(a=sx(n.c.length),r=new Wb(n);r.a<r.c.c.length;){for(i=BB(n0(r),10),c=new Rv,e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||TU(c,t.d.i);a.c[a.c.length]=c}return a}function EOn(n,t){var e,i,r,c,a;if(t>=(a=null==(e=BB(yan(n.a,4),126))?0:e.length))throw Hp(new tK(t,a));return r=e[t],1==a?i=null:(aHn(e,0,i=x8(dAt,i9n,415,a-1,0,1),0,t),(c=a-t-1)>0&&aHn(e,t+1,i,t,c)),Fgn(n,i),eIn(n,t,r),r}function TOn(){TOn=O,lLt=BB(Wtn(QQ((cE(),gLt).qb),6),34),sLt=BB(Wtn(QQ(gLt.qb),3),34),hLt=BB(Wtn(QQ(gLt.qb),4),34),fLt=BB(Wtn(QQ(gLt.qb),5),18),oEn(lLt),oEn(sLt),oEn(hLt),oEn(fLt),bLt=new Jy(Pun(Gk(FAt,1),N9n,170,0,[lLt,sLt]))}function MOn(n,t){var e;this.d=new lm,this.b=t,this.e=new wA(t.qf()),e=n.u.Hc((lCn(),iCt)),n.u.Hc(eCt)?n.D?this.a=e&&!t.If():this.a=!0:n.u.Hc(rCt)?this.a=!!e&&!(t.zf().Kc().Ob()||t.Bf().Kc().Ob()):this.a=!1}function SOn(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),ICt)?-i.rf().a-Gy(MD(i.We(aPt))):e+Gy(MD(i.We(aPt))):i.Hf()==(kUn(),ICt)?-i.rf().a:e}function POn(n,t){var e,i,r;e=BB(mMn(n,(HXn(),Udt)),103),r=BB(ZAn(t,upt),61),(i=BB(mMn(n,ept),98))!=(QEn(),QIt)&&i!=YIt?r==(kUn(),PCt)&&(r=OFn(t,e))==PCt&&(r=hwn(e)):r=XHn(t)>0?hwn(e):Tln(hwn(e)),Ypn(t,upt,r)}function IOn(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&m$(a,new Ur),r=a.c.length/2|0,i=0;i<r;i++)l1(i,a.c.length),(c=BB(a.c[i],113)).c&&qIn(c.d,t.a);for(e=r;e<a.c.length;e++)l1(e,a.c.length),(c=BB(a.c[e],113)).c&&qIn(c.d,t.b)}function COn(n,t,e){var i,r,c;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?((c=Tz(i.a,r.a))<0?uKn(n,t,e):c>0&&uKn(n,e,t),c):null!=i.a?(uKn(n,t,e),-1):null!=r.a?(uKn(n,e,t),1):0}function OOn(n,t){var e,i,r,c;n.ej()?(e=n.Vi(),c=n.fj(),++n.j,n.Hi(e,n.oi(e,t)),i=n.Zi(3,null,t,e,c),n.bj()&&(r=n.cj(t,null))?(r.Ei(i),r.Fi()):n.$i(i)):(eW(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function AOn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),r=new go,e=BB(n.g,119),c=n.i;--c>=0;)i=e[c],a.rl(i.ak())&&f9(r,i);!aXn(n,r)&&mA(n.e)&&Lv(n,t.$j()?LY(n,6,t,(SQ(),set),null,-1,!1):LY(n,t.Kj()?2:1,t,null,null,-1,!1))}function $On(){var n,t;for($On=O,aet=x8(oet,sVn,91,32,0,1),uet=x8(oet,sVn,91,32,0,1),n=1,t=0;t<=18;t++)aet[t]=npn(n),uet[t]=npn(yz(n,t)),n=cbn(n,5);for(;t<uet.length;t++)aet[t]=Nnn(aet[t-1],aet[1]),uet[t]=Nnn(uet[t-1],(ODn(),net))}function LOn(n,t){var e,i,r,c;return n.a==(JMn(),cft)||(r=t.a.c,e=t.a.c+t.a.b,!(t.j&&(c=(i=t.A).c.c.a-i.o.a/2,r-(i.n.a+i.o.a)>c)||t.q&&(c=(i=t.C).c.c.a-i.o.a/2,i.n.a-e>c)))}function NOn(n,t){OTn(t,"Partition preprocessing",1),JT(BB(P4(AV(wnn(AV(new Rq(null,new w1(n.a,16)),new vi),new mi),new yi),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15).Oc(),new ki),HSn(t)}function xOn(n){var t,e,i,r,c,a;for(qZ(),e=new v4,i=new Wb(n.e.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)r=BB(n0(c),10),(t=BB(lnn(e,a=n.g[r.p]),15))||Jgn(e,a,t=new Np),t.Fc(r);return e}function DOn(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=x8(Rnt,nZn,15,r,0,1),n.b=x8($Nt,ZYn,25,r,16,1),a=spn(t.b,0);a.b!=a.d.c;)c=BB(b3(a),86),n.a[c.g]=new YT;for(i=spn(t.a,0);i.b!=i.d.c;)e=BB(b3(i),188),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function ROn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (startX: ",vE(t,n.j),t.a+=", startY: ",vE(t,n.k),t.a+=", endX: ",vE(t,n.b),t.a+=", endY: ",vE(t,n.c),t.a+=", identifier: ",cO(t,n.d),t.a+=")",t.a)}function KOn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (ordered: ",yE(t,0!=(256&n.Bb)),t.a+=", unique: ",yE(t,0!=(512&n.Bb)),t.a+=", lowerBound: ",mE(t,n.s),t.a+=", upperBound: ",mE(t,n.t),t.a+=")",t.a)}function _On(n,t,e,i,r,c,a,u){var o;return cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=i,$ln(n,r),Nln(n,c),Aln(n,a),Lln(n,!1),nln(n,!0),qln(n,u),Yfn(n,!0),Len(n,0),n.b=0,Nen(n,1),(o=HTn(n,t,null))&&o.Fi(),Gln(n,!1),n}function FOn(n,t){var i,r;return BB(SJ(n.a,t),512)||(i=new y5(t),k5(),xK(i,FOn(n,fx(r=Qet?null:i.c,0,e.Math.max(0,mN(r,YTn(46)))))),0==(Qet?null:i.c).length&&zD(i,new X),mZ(n.a,Qet?null:i.c,i),i)}function BOn(n,t){var e;n.b=t,n.g=new Np,e=JOn(n.b),n.e=e,n.f=e,n.c=qy(TD(mMn(n.b,(_kn(),jit)))),n.a=MD(mMn(n.b,(sWn(),cSt))),null==n.a&&(n.a=1),Gy(n.a)>1?n.e*=Gy(n.a):n.f/=Gy(n.a),Ihn(n),ggn(n),TRn(n),hon(n.b,(Epn(),gct),n.g)}function HOn(n,t,e){var i,r,c,a,u;for(i=0,u=e,t||(i=e*(n.c.length-1),u*=-1),c=new Wb(n);c.a<c.c.c.length;){for(hon(r=BB(n0(c),10),(HXn(),kdt),(wvn(),OMt)),r.o.a=i,a=DSn(r,(kUn(),oCt)).Kc();a.Ob();)BB(a.Pb(),11).n.a=i;i+=u}}function qOn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),Cfn(n,t,e),i=n.Zi(3,null,e,t,c),n.bj()?(r=n.cj(e,null),n.ij()&&(r=n.jj(e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(Cfn(n,t,e),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function GOn(n,t,e){var i,r,c,a,u,o;return(u=n.Gk(e))!=e?(a=n.g[t],o=u,jL(n,t,n.oi(t,o)),c=a,n.gi(t,o,c),n.rk()&&(i=e,r=n.dj(i,null),!BB(u,49).eh()&&(r=n.cj(o,r)),r&&r.Fi()),mA(n.e)&&Lv(n,n.Zi(9,e,u,t,!1)),u):e}function zOn(n,t){var e,i,r;for(e=new Wb(n.a.a);e.a<e.c.c.length;)BB(n0(e),189).g=!0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)(i=BB(n0(r),81)).k=qy(TD(n.e.Kb(new rC(i,t)))),i.d.g=i.d.g&qy(TD(n.e.Kb(new rC(i,t))));return n}function UOn(n){var t,e,i,r,c;if(e=new YK(t=BB(Vj(FCt),9),BB(SR(t,t.length),9),0),c=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(c.j);r.a<r.c.c.length;)GC(mMn(i=BB(n0(r),11),dlt))===GC(n)&&zN(new m6(i.b))&&orn(e,i.j);return e}function XOn(n,t,e){var i,r,c,a;if(!n.d[e.p]){for(i=new oz(ZL(lbn(e).a.Kc(),new h));dAn(i);){for(c=new oz(ZL(fbn(a=BB(U5(i),17).d.i).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).c.i==t&&(n.a[r.p]=!0);XOn(n,t,a)}n.d[e.p]=!0}}function WOn(n,t){var e,i,r,c,a,u,o;if(1==(i=pbn(254&n.Db)))n.Eb=null;else if(c=een(n.Eb),2==i)r=Rmn(n,t),n.Eb=c[0==r?1:0];else{for(a=x8(Ant,HWn,1,i-1,5,1),e=2,u=0,o=0;e<=128;e<<=1)e==t?++u:0!=(n.Db&e)&&(a[o++]=c[u++]);n.Eb=a}n.Db&=~t}function VOn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 4:case 5:case 6:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function QOn(n){var t;switch(t=0,n){case 105:t=2;break;case 109:t=8;break;case 115:t=4;break;case 120:t=16;break;case 117:t=32;break;case 119:t=64;break;case 70:t=256;break;case 72:t=128;break;case 88:t=512;break;case 44:t=k6n}return t}function YOn(n,t,e,i,r){var c,a,u,o;if(GC(n)!==GC(t)||i!=r)for(u=0;u<i;u++){for(a=0,c=n[u],o=0;o<r;o++)a=rbn(rbn(cbn(e0(c,UQn),e0(t[o],UQn)),e0(e[u+o],UQn)),e0(dG(a),UQn)),e[u+o]=dG(a),a=jz(a,32);e[u+r]=dG(a)}else C_n(n,i,e)}function JOn(n){var t,i,r,c,a,u,o,s,h,f,l;for(f=0,h=0,o=(c=n.a).a.gc(),r=c.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),561)).b&&VBn(i),f+=(l=(t=i.a).a)+(u=t.b),h+=l*u;return s=e.Math.sqrt(400*o*h-4*h+f*f)+f,0==(a=2*(100*o-1))?s:s/a}function ZOn(n,t){0!=t.b&&(isNaN(n.s)?n.s=Gy((Px(0!=t.b),MD(t.a.a.c))):n.s=e.Math.min(n.s,Gy((Px(0!=t.b),MD(t.a.a.c)))),isNaN(n.c)?n.c=Gy((Px(0!=t.b),MD(t.c.b.c))):n.c=e.Math.max(n.c,Gy((Px(0!=t.b),MD(t.c.b.c)))))}function nAn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=JJ(i))return!0}else t=JJ(i);return!1}function tAn(n,t){var e,i,r,c;n.ej()?(e=n.i,c=n.fj(),c6(n,t),i=n.Zi(3,null,t,e,c),n.bj()?(r=n.cj(t,null),n.ij()&&(r=n.jj(t,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(c6(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function eAn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),++n.j,n.Hi(t,n.oi(t,e)),i=n.Zi(3,null,e,t,c),n.bj()&&(r=n.cj(e,null))?(r.Ei(i),r.Fi()):n.$i(i)):(++n.j,n.Hi(t,n.oi(t,e)),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function iAn(n){var t,e,i,r;for(r=n.length,t=null,i=0;i<r;i++)b1(i,n.length),GO(".*+?{[()|\\^$",YTn(e=n.charCodeAt(i)))>=0?(t||(t=new Pk,i>0&&cO(t,n.substr(0,i))),t.a+="\\",NX(t,e&QVn)):t&&NX(t,e&QVn);return t?t.a:n}function rAn(n){var t;if(!n.a)throw Hp(new Fy("IDataType class expected for layout option "+n.f));if(null==(t=C3(n.a)))throw Hp(new Fy("Couldn't create new instance of property '"+n.f+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return BB(t,414)}function cAn(n){var t,e,i,r,c;return(c=n.eh())&&c.kh()&&(r=tfn(n,c))!=c?(e=n.Vg(),i=(t=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-t,null,null),n.Rg(BB(r,49),e),i&&i.Fi(),n.Lg()&&n.Mg()&&e>-1&&ban(n,new nU(n,9,e,c,r)),r):c}function aAn(n){var t,e,i,r,c,a,u;for(c=0,r=n.f.e,e=0;e<r.c.length;++e)for(l1(e,r.c.length),a=BB(r.c[e],144),i=e+1;i<r.c.length;++i)l1(i,r.c.length),u=BB(r.c[i],144),t=W8(a.d,u.d)-n.a[a.b][u.b],c+=n.i[a.b][u.b]*t*t;return c}function uAn(n,t){var e;if(!Lx(t,(HXn(),kgt))&&(e=Ekn(BB(mMn(t,est),360),BB(mMn(n,kgt),163)),hon(t,est,e),!dAn(new oz(ZL(hbn(t).a.Kc(),new h)))))switch(e.g){case 1:hon(t,kgt,(Tbn(),_lt));break;case 2:hon(t,kgt,(Tbn(),Blt))}}function oAn(n,t){var e;mRn(n),n.a=(e=new ok,JT(new Rq(null,new w1(t.d,16)),new Od(e)),e),Mxn(n,BB(mMn(t.b,(HXn(),igt)),376)),kvn(n),OAn(n),$kn(n),jvn(n),jqn(n,t),JT(wnn(new Rq(null,Y0(SX(n.b).a)),new Wr),new Vr),t.a=!1,n.a=null}function sAn(){dMn.call(this,y6n,(tE(),dOt)),this.p=null,this.a=null,this.f=null,this.n=null,this.g=null,this.c=null,this.i=null,this.j=null,this.d=null,this.b=null,this.e=null,this.k=null,this.o=null,this.s=null,this.q=!1,this.r=!1}function hAn(){hAn=O,iAt=new MC(G1n,0),nAt=new MC("INSIDE_SELF_LOOPS",1),tAt=new MC("MULTI_EDGES",2),ZOt=new MC("EDGE_LABELS",3),eAt=new MC("PORTS",4),YOt=new MC("COMPOUND",5),QOt=new MC("CLUSTERS",6),JOt=new MC("DISCONNECTED",7)}function fAn(n,t){var e,i,r;if(0==t)return 0!=(1&n.a[0]);if(t<0)throw Hp(new Oy("Negative bit address"));if((r=t>>5)>=n.d)return n.e<0;if(e=n.a[r],t=1<<(31&t),n.e<0){if(r<(i=Icn(n)))return!1;e=i==r?-e:~e}return 0!=(e&t)}function lAn(n,t,e,i){var r;BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),NH(r=XR(B$(BB(e.b,65).c),BB(i.b,65).c),HIn(BB(e.b,65),BB(i.b,65),r)),BB(i.b,65),BB(i.b,65),BB(i.b,65).c.a,r.a,BB(i.b,65).c.b,r.b,BB(i.b,65),Otn(i.a,new TB(n,t,i))}function bAn(n,t){var e,i,r,c,a,u,o;if(c=t.e)for(e=cAn(c),i=BB(n.g,674),a=0;a<n.i;++a)if(qvn(o=i[a])==e&&(!o.d&&(o.d=new $L(VAt,o,1)),r=o.d,(u=BB(e.ah(gKn(c,c.Cb,c.Db>>16)),15).Xc(c))<r.i))return bAn(n,BB(Wtn(r,u),87));return t}function wAn(n,t,e){var i,r=SWn,c=r[n],a=c instanceof Array?c[0]:null;c&&!a?MWn=c:(!(i=t&&t.prototype)&&(i=SWn[t]),(MWn=qJ(i)).hm=e,!t&&(MWn.im=C),r[n]=MWn);for(var u=3;u<arguments.length;++u)arguments[u].prototype=MWn;a&&(MWn.gm=a)}function dAn(n){for(var t;!BB(yX(n.a),47).Ob();){if(n.d=osn(n),!n.d)return!1;if(n.a=BB(n.d.Pb(),47),cL(n.a,39)){if(t=BB(n.a,39),n.a=t.a,!n.b&&(n.b=new Lp),d3(n.b,n.d),t.b)for(;!Wy(t.b);)d3(n.b,BB(gU(t.b),47));n.d=t.d}}return!0}function gAn(n,t){var e,i,r,c,a;for(c=null==t?0:n.b.se(t),i=null==(e=n.a.get(c))?new Array:e,a=0;a<i.length;a++)if(r=i[a],n.b.re(t,r.cd()))return 1==i.length?(i.length=0,vR(n.a,c)):i.splice(a,1),--n.c,oY(n.b),r.dd();return null}function pAn(n,t){var e,i,r,c;for(r=1,t.j=!0,c=null,i=new Wb(kbn(t));i.a<i.c.c.length;)e=BB(n0(i),213),n.c[e.c]||(n.c[e.c]=!0,c=Nbn(e,t),e.f?r+=pAn(n,c):c.j||e.a!=e.e.e-e.d.e||(e.f=!0,TU(n.p,e),r+=pAn(n,c)));return r}function vAn(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function mAn(n){var t,i,r,c,a;if(a=K_n(n,c=new Np),t=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(t.j);r.a<r.c.c.length;)GC(mMn(i=BB(n0(r),11),dlt))===GC(n)&&(a=e.Math.max(a,K_n(i,c)));return 0==c.c.length||hon(n,blt,a),-1!=a?c:null}function yAn(n,t,e){var i,r,c,a,u,o;r=(i=(c=BB(xq(t.e,0),17).c).i).k,u=(a=(o=BB(xq(e.g,0),17).d).i).k,r==(uSn(),Put)?hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)):hon(n,(hWn(),hlt),c),hon(n,(hWn(),flt),u==Put?BB(mMn(a,flt),11):o)}function kAn(n,t){var e,i,r,c;for(e=(c=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&wW(i.i,t))return r?r.a=i.a:n.b[e]=i.a,kk(i.c,i.f),iv(i.b,i.e),--n.f,++n.e,!0;return!1}function jAn(n,t){var e,i,r,c,a;return t&=63,(i=0!=((e=n.h)&IQn))&&(e|=-1048576),t<22?(a=e>>t,c=n.m>>t|e<<22-t,r=n.l>>t|n.m<<22-t):t<44?(a=i?PQn:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?PQn:0,c=i?SQn:0,r=e>>t-44),M$(r&SQn,c&SQn,a&PQn)}function EAn(n){var t,i,r,c,a,u;for(this.c=new Np,this.d=n,r=RQn,c=RQn,t=KQn,i=KQn,u=spn(n,0);u.b!=u.d.c;)a=BB(b3(u),8),r=e.Math.min(r,a.a),c=e.Math.min(c,a.b),t=e.Math.max(t,a.a),i=e.Math.max(i,a.b);this.a=new UV(r,c,t-r,i-c)}function TAn(n,t){var e,i,r,c;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)for((r=BB(n0(c),10)).k==(uSn(),Sut)&&hFn(r,t),e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)vun(BB(U5(e),17),t)}function MAn(n){var t,e,i;this.c=n,i=BB(mMn(n,(HXn(),Udt)),103),t=Gy(MD(mMn(n,Edt))),e=Gy(MD(mMn(n,Kpt))),i==(Ffn(),_Pt)||i==FPt||i==BPt?this.b=t*e:this.b=1/(t*e),this.j=Gy(MD(mMn(n,Apt))),this.e=Gy(MD(mMn(n,Opt))),this.f=n.b.c.length}function SAn(n){var t,e;for(n.e=x8(ANt,hQn,25,n.p.c.length,15,1),n.k=x8(ANt,hQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.e[t.p]=F3(new oz(ZL(fbn(t).a.Kc(),new h))),n.k[t.p]=F3(new oz(ZL(lbn(t).a.Kc(),new h)))}function PAn(n){var t,e,i,r,c;for(i=0,n.q=new Np,t=new Rv,c=new Wb(n.p);c.a<c.c.c.length;){for((r=BB(n0(c),10)).p=i,e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)TU(t,BB(U5(e),17).d.i);t.a.Bc(r),WB(n.q,new $q(t)),t.a.$b(),++i}}function IAn(){IAn=O,Okt=new WA(20),Ckt=new XA((sWn(),XSt),Okt),xkt=new XA(LPt,20),jkt=new XA(cSt,dZn),$kt=new XA(pPt,iln(1)),Nkt=new XA(kPt,(hN(),!0)),Ekt=lSt,Mkt=KSt,Skt=BSt,Pkt=qSt,Tkt=DSt,Ikt=USt,Akt=fPt,Ran(),Dkt=ykt,Lkt=vkt}function CAn(n,t){var e,i,r,c,a,u,o,s,h;if(n.a.f>0&&cL(t,42)&&(n.a.qj(),c=null==(o=(s=BB(t,42)).cd())?0:nsn(o),a=eR(n.a,c),e=n.a.d[a]))for(i=BB(e.g,367),h=e.i,u=0;u<h;++u)if((r=i[u]).Sh()==c&&r.Fb(s))return CAn(n,s),!0;return!1}function OAn(n){var t,e,i,r;for(r=BB(h6(n.a,(LEn(),Sst)),15).Kc();r.Ob();)iX(n,i=BB(r.Pb(),101),(e=(t=gz(i.k)).Hc((kUn(),sCt))?t.Hc(oCt)?t.Hc(SCt)?t.Hc(ICt)?null:$st:Nst:Lst:Ast)[0],(Irn(),xst),0),iX(n,i,e[1],Dst,1),iX(n,i,e[2],Rst,1)}function AAn(n,t){var e,i;Jxn(n,t,e=mKn(t)),iTn(n.a,BB(mMn(vW(t.b),(hWn(),Slt)),230)),b_n(n),DEn(n,t),i=x8(ANt,hQn,25,t.b.j.c.length,15,1),szn(n,t,(kUn(),sCt),i,e),szn(n,t,oCt,i,e),szn(n,t,SCt,i,e),szn(n,t,ICt,i,e),n.a=null,n.c=null,n.b=null}function $An(){$An=O,Sbn(),oEt=new $O(E4n,sEt=nEt),aEt=new $O(T4n,(hN(),!0)),iln(-1),iEt=new $O(M4n,iln(-1)),iln(-1),rEt=new $O(S4n,iln(-1)),uEt=new $O(P4n,!1),hEt=new $O(I4n,!0),cEt=new $O(C4n,!1),fEt=new $O(O4n,-1)}function LAn(n,t,e){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),sqn(n.e),!n.e&&(n.e=new hK(_Ot,n,7,4)),void pX(n.e,BB(e,14));case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),sqn(n.d),!n.d&&(n.d=new hK(_Ot,n,8,5)),void pX(n.d,BB(e,14))}zjn(n,t,e)}function NAn(n,t){var e,i,r,c,a;if(GC(t)===GC(n))return!0;if(!cL(t,15))return!1;if(a=BB(t,15),n.gc()!=a.gc())return!1;for(c=a.Kc(),i=n.Kc();i.Ob();)if(e=i.Pb(),r=c.Pb(),!(GC(e)===GC(r)||null!=e&&Nfn(e,r)))return!1;return!0}function xAn(n,t){var e,i,r,c;for((c=BB(P4(wnn(wnn(new Rq(null,new w1(t.b,16)),new Re),new Ke),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Jc(new _e),e=0,r=c.Kc();r.Ob();)-1==(i=BB(r.Pb(),11)).p&&FAn(n,i,e++)}function DAn(n){switch(n.g){case 0:return new If;case 1:return new lf;case 2:return new ff;case 3:return new jC;case 4:return new _G;default:throw Hp(new _y("No implementation is available for the node placer "+(null!=n.f?n.f:""+n.g)))}}function RAn(n){switch(n.g){case 0:return new KG;case 1:return new wf;case 2:return new rf;case 3:return new cf;case 4:return new TC;default:throw Hp(new _y("No implementation is available for the cycle breaker "+(null!=n.f?n.f:""+n.g)))}}function KAn(){KAn=O,mjt=new $O(u4n,iln(0)),yjt=new $O(o4n,0),Hsn(),djt=new $O(s4n,gjt=sjt),iln(0),wjt=new $O(h4n,iln(1)),Bcn(),kjt=new $O(f4n,jjt=Xjt),D9(),Ejt=new $O(l4n,Tjt=ajt),Omn(),pjt=new $O(b4n,vjt=qjt)}function _An(n,t,e){var i;i=null,t&&(i=t.d),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b+t.o.b+i.a+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b+t.o.b+i.a+e.b))}function FAn(n,t,e){var i,r,c;for(t.p=e,c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(c);)-1==(i=BB(U5(c),11)).p&&FAn(n,i,e);if(t.i.k==(uSn(),Put))for(r=new Wb(t.i.j);r.a<r.c.c.length;)(i=BB(n0(r),11))!=t&&-1==i.p&&FAn(n,i,e)}function BAn(n){var t,i,r,c,a;if(c=BB(P4($Z(a1(n)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),r=ZJn,c.gc()>=2)for(t=MD((i=c.Kc()).Pb());i.Ob();)a=t,t=MD(i.Pb()),r=e.Math.min(r,(kW(t),t-(kW(a),a)));return r}function HAn(n,t){var e,i,r,c,a;r5(i=new YT,t,i.c.b,i.c);do{for(Px(0!=i.b),e=BB(Atn(i,i.a.a),86),n.b[e.g]=1,c=spn(e.d,0);c.b!=c.d.c;)a=(r=BB(b3(c),188)).c,1==n.b[a.g]?DH(n.a,r):2==n.b[a.g]?n.b[a.g]=1:r5(i,a,i.c.b,i.c)}while(0!=i.b)}function qAn(n,t){var e,i,r;if(GC(t)===GC(yX(n)))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),(r=n.gc())!=i.gc())return!1;if(cL(i,54)){for(e=0;e<r;e++)if(!wW(n.Xb(e),i.Xb(e)))return!1;return!0}return Uvn(n.Kc(),i.Kc())}function GAn(n,t){var e;if(0!=n.c.length){if(2==n.c.length)hFn((l1(0,n.c.length),BB(n.c[0],10)),(Xyn(),jIt)),hFn((l1(1,n.c.length),BB(n.c[1],10)),EIt);else for(e=new Wb(n);e.a<e.c.c.length;)hFn(BB(n0(e),10),t);n.c=x8(Ant,HWn,1,0,5,1)}}function zAn(n){var t,e;if(2!=n.c.length)throw Hp(new Fy("Order only allowed for two paths."));l1(0,n.c.length),t=BB(n.c[0],17),l1(1,n.c.length),e=BB(n.c[1],17),t.d.i!=e.c.i&&(n.c=x8(Ant,HWn,1,0,5,1),n.c[n.c.length]=e,n.c[n.c.length]=t)}function UAn(n,t){var e,i,r,c,a;for(i=new v4,c=S4(new Jy(n.g)).a.ec().Kc();c.Ob();){if(!(r=BB(c.Pb(),10))){OH(t,"There are no classes in a balanced layout.");break}(e=BB(lnn(i,a=n.j[r.p]),15))||Jgn(i,a,e=new Np),e.Fc(r)}return i}function XAn(n,t,e){var i,r,c,a;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=x2(e,BB(r.Pb(),19).a))&&(a=Ken(R2(c,O6n),t),VW(n.f,a,c),q6n in c.a&&$in(a,R2(c,q6n)),STn(c,a),OIn(c,a))}function WAn(n,t){var e,i,r;for(OTn(t,"Port side processing",1),r=new Wb(n.a);r.a<r.c.c.length;)cBn(BB(n0(r),10));for(e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)cBn(BB(n0(i),10));HSn(t)}function VAn(n,t,e){var i,r,c,a,u;if(!(r=n.f)&&(r=BB(n.a.a.ec().Kc().Pb(),57)),Fkn(r,t,e),1!=n.a.a.gc())for(i=t*e,a=n.a.a.ec().Kc();a.Ob();)(c=BB(a.Pb(),57))!=r&&((u=f3(c)).f.d?(c.d.d+=i+fJn,c.d.a-=i+fJn):u.f.a&&(c.d.a-=i+fJn))}function QAn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w;return u=i-n,o=r-t,s=(a=e.Math.atan2(u,o))+JJn,h=a-JJn,f=c*e.Math.sin(s)+n,b=c*e.Math.cos(s)+t,l=c*e.Math.sin(h)+n,w=c*e.Math.cos(h)+t,u6(Pun(Gk(PMt,1),sVn,8,0,[new xI(f,b),new xI(l,w)]))}function YAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],o=Gy(n.p[l.p])+Gy(n.d[a.p])-a.d.d,(s=Ain(a,r))&&(h=n.g[s.p],u=Gy(n.p[h.p])+Gy(n.d[s.p])+s.o.b+s.d.a,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function JAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],u=Gy(n.p[l.p])+Gy(n.d[a.p])+a.o.b+a.d.a,(s=_un(a,r))&&(h=n.g[s.p],o=Gy(n.p[h.p])+Gy(n.d[s.p])-s.d.d,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function ZAn(n,t){var e,i;return!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),null!=(i=cdn(n.o,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),vjn(n.o,t,e))),e)}function n$n(){n$n=O,CIt=new GI("H_LEFT",0),IIt=new GI("H_CENTER",1),AIt=new GI("H_RIGHT",2),DIt=new GI("V_TOP",3),xIt=new GI("V_CENTER",4),NIt=new GI("V_BOTTOM",5),$It=new GI("INSIDE",6),LIt=new GI("OUTSIDE",7),OIt=new GI("H_PRIORITY",8)}function t$n(n){var t,e,i,r,c,a,u;if((t=n.Hh(V9n))&&null!=(u=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"settingDelegates")))){for(e=new Np,c=0,a=(r=kKn(u,"\\w+")).length;c<a;++c)i=r[c],e.c[e.c.length]=i;return e}return SQ(),SQ(),set}function e$n(n,t){var e,i,r,c,a,u,o;if(!t.f)throw Hp(new _y("The input edge is not a tree edge."));for(c=null,r=DWn,i=new Wb(n.d);i.a<i.c.c.length;)u=(e=BB(n0(i),213)).d,o=e.e,FIn(n,u,t)&&!FIn(n,o,t)&&(a=o.e-u.e-e.a)<r&&(r=a,c=e);return c}function i$n(n){var t,e,i,r,c,a;if(!(n.f.e.c.length<=1)){t=0,r=aAn(n),e=RQn;do{for(t>0&&(r=e),a=new Wb(n.f.e);a.a<a.c.c.length;)qy(TD(mMn(c=BB(n0(a),144),(rkn(),yat))))||(i=Z_n(n,c),UR(kO(c.d),i));e=aAn(n)}while(!JX(n,t++,r,e))}}function r$n(n,t){var e,i,r;for(OTn(t,"Layer constraint preprocessing",1),e=new Np,r=new M2(n.a,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),Wun(i=BB(r.d.Xb(r.c=r.b++),10))&&(cTn(i),e.c[e.c.length]=i,fW(r));0==e.c.length||hon(n,(hWn(),nlt),e),HSn(t)}function c$n(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)r=(e=BB(n0(i),70)).n,n.a==(Oun(),mst)||n.i==(kUn(),oCt)?r.a=c:n.a==yst||n.i==(kUn(),ICt)?r.a=c+n.j.a-e.o.a:r.a=c+(n.j.a-e.o.a)/2,r.b=a,UR(r,t),a+=e.o.b+n.e}function a$n(n,t,e){var i,r,c,a;for(OTn(e,"Processor set coordinates",1),n.a=0==t.b.b?1:t.b.b,c=null,i=spn(t.b,0);!c&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(c=a,(r=a.e).a=BB(mMn(a,gkt),19).a,r.b=0);_Sn(n,xun(c),mcn(e,1)),HSn(e)}function u$n(n,t,e){var i,r,c;for(OTn(e,"Processor determine the height for each level",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&Zxn(n,u6(Pun(Gk(Yyt,1),tZn,86,0,[r])),e),HSn(e)}function o$n(n,t){var e,i,r,c,a;(c=D2(n,"individualSpacings"))&&(!P8(t,(sWn(),IPt))&&(e=new Yu,Ypn(t,IPt,e)),r=BB(ZAn(t,IPt),373),i=null,(a=c)&&(i=new TT(a,jrn(a,x8(Qtt,sVn,2,0,6,1)))),i&&e5(i,new dC(a,r)))}function s$n(n,t){var e,i,r,c,a,u;return c=null,(J6n in(a=n).a||Z6n in a.a||D6n in a.a)&&(u=qun(t),i=D2(a,J6n),Own(new Hg(u).a,i),r=D2(a,Z6n),Cwn(new Jg(u).a,r),e=N2(a,D6n),PEn(new tp(u).a,e),c=e),c}function h$n(n,t){var e,i,r;if(t===n)return!0;if(cL(t,543)){if(r=BB(t,835),n.a.d!=r.a.d||EV(n).gc()!=EV(r).gc())return!1;for(i=EV(r).Kc();i.Ob();)if(c1(n,(e=BB(i.Pb(),416)).a.cd())!=BB(e.a.dd(),14).gc())return!1;return!0}return!1}function f$n(n){var t,e,i,r;return t=i=BB(n.a,19).a,e=r=BB(n.b,19).a,0==i&&0==r?e-=1:-1==i&&r<=0?(t=0,e-=2):i<=0&&r>0?(t-=1,e-=1):i>=0&&r<0?(t+=1,e+=1):i>0&&r>=0?(t-=1,e+=1):(t+=1,e-=1),new rC(iln(t),iln(e))}function l$n(n,t){return n.c<t.c?-1:n.c>t.c?1:n.b<t.b?-1:n.b>t.b?1:n.a!=t.a?nsn(n.a)-nsn(t.a):n.d==(Q4(),Hmt)&&t.d==Bmt?-1:n.d==Bmt&&t.d==Hmt?1:0}function b$n(n,t){var e,i,r,c,a;return a=(c=t.a).c.i==t.b?c.d:c.c,i=c.c.i==t.b?c.c:c.d,(r=zwn(n.a,a,i))>0&&r<ZJn?(e=YAn(n.a,i.i,r,n.c),ren(n.a,i.i,-e),e>0):r<0&&-r<ZJn&&(e=JAn(n.a,i.i,-r,n.c),ren(n.a,i.i,e),e>0)}function w$n(n,t,e,i){var r,c,a,u,o,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Wb(n.c);s.a<s.c.c.length;)u=(o=BB(n0(s),33)).g,a=o.f,Pen(o,o.i+c*r),Ien(o,o.j+i*e),Sen(o,o.g+r),Men(o,n.a),++c,lIn(o,new xI(o.g,o.f),new xI(u,a))}function d$n(n){var t,e,i,r,c,a,u;if(null==n)return null;for(u=n.length,a=x8(NNt,v6n,25,r=(u+1)/2|0,15,1),u%2!=0&&(a[--r]=ZDn((b1(u-1,n.length),n.charCodeAt(u-1)))),e=0,i=0;e<r;++e)t=ZDn(fV(n,i++)),c=ZDn(fV(n,i++)),a[e]=(t<<4|c)<<24>>24;return a}function g$n(n){if(n.pe()){var t=n.c;return t.qe()?n.o="["+t.n:t.pe()?n.o="["+t.ne():n.o="[L"+t.ne()+";",n.b=t.me()+"[]",void(n.k=t.oe()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=Fdn(".",[e,Fdn("$",i)]),n.b=Fdn(".",[e,Fdn(".",i)]),n.k=i[i.length-1]}function p$n(n,t){var e,i,r,c,a;for(a=null,c=new Wb(n.e.a);c.a<c.c.c.length;)if((r=BB(n0(c),121)).b.a.c.length==r.g.a.c.length){for(i=r.e,a=ePn(r),e=r.e-BB(a.a,19).a+1;e<r.e+BB(a.b,19).a;e++)t[e]<t[i]&&(i=e);t[i]<t[r.e]&&(--t[r.e],++t[i],r.e=i)}}function v$n(n){var t,i,r,c,a,u,o;for(r=RQn,i=KQn,t=new Wb(n.e.b);t.a<t.c.c.length;)for(a=new Wb(BB(n0(t),29).a);a.a<a.c.c.length;)c=BB(n0(a),10),u=(o=Gy(n.p[c.p]))+Gy(n.b[n.g[c.p].p]),r=e.Math.min(r,o),i=e.Math.max(i,u);return i-r}function m$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=jKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function y$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=EKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function k$n(n,t,e){var i,r,c,a,u,o;if(a=new go,u=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj())for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&f9(a,r);else for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&(o=r.dd(),f9(a,e?FCn(n,t,c,a.i,o):o));return N3(a)}function j$n(n,t){var e,i,r,c;for(e=new Hbn(uht),$Pn(),r=0,c=(i=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;r<c;++r)wR(e,i[r],new Np);return JT($V(AV(wnn(new Rq(null,new w1(n.b,16)),new Ze),new ni),new hd(t)),new fd(e)),e}function E$n(n,t,i){var r,c,a,u,o,s,h,f;for(a=t.Kc();a.Ob();)s=(c=BB(a.Pb(),33)).i+c.g/2,f=c.j+c.f/2,o=s-((u=n.f).i+u.g/2),h=f-(u.j+u.f/2),r=e.Math.sqrt(o*o+h*h),o*=n.e/r,h*=n.e/r,i?(s-=o,f-=h):(s+=o,f+=h),Pen(c,s-c.g/2),Ien(c,f-c.f/2)}function T$n(n){var t,e,i;if(!n.c&&null!=n.b){for(t=n.b.length-4;t>=0;t-=2)for(e=0;e<=t;e+=2)(n.b[e]>n.b[e+2]||n.b[e]===n.b[e+2]&&n.b[e+1]>n.b[e+3])&&(i=n.b[e+2],n.b[e+2]=n.b[e],n.b[e]=i,i=n.b[e+3],n.b[e+3]=n.b[e+1],n.b[e+1]=i);n.c=!0}}function M$n(n,t){var e,i,r,c,a,u;for(c=(1==t?Wat:Xat).a.ec().Kc();c.Ob();)for(r=BB(c.Pb(),103),u=BB(h6(n.f.c,r),21).Kc();u.Ob();)switch(a=BB(u.Pb(),46),i=BB(a.b,81),e=BB(a.a,189).c,r.g){case 2:case 1:i.g.d+=e;break;case 4:case 3:i.g.c+=e}}function S$n(n,t){var e,i,r,c,a,u,o,s,h;for(s=-1,h=0,u=0,o=(a=n).length;u<o;++u){for(c=a[u],e=new kH(-1==s?n[0]:n[s],t,(Mhn(),uvt)),i=0;i<c.length;i++)for(r=i+1;r<c.length;r++)Lx(c[i],(hWn(),wlt))&&Lx(c[r],wlt)&&fXn(e,c[i],c[r])>0&&++h;++s}return h}function P$n(n){var t;return(t=new lN(nE(n.gm))).a+="@",oO(t,(nsn(n)>>>0).toString(16)),n.kh()?(t.a+=" (eProxyURI: ",uO(t,n.qh()),n.$g()&&(t.a+=" eClass: ",uO(t,n.$g())),t.a+=")"):n.$g()&&(t.a+=" (eClass: ",uO(t,n.$g()),t.a+=")"),t.a}function I$n(n){var t,e,i;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));for(n.d==(Ffn(),BPt)&&Tzn(n,_Pt),e=new Wb(n.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).g=t.i;for(i=new Wb(n.a.b);i.a<i.c.c.length;)BB(n0(i),57).i=KQn;return n.b.Le(n),n}function C$n(n,t){var e,i,r,c,a;if(t<2*n.b)throw Hp(new _y("The knot vector must have at least two time the dimension elements."));for(n.f=1,r=0;r<n.b;r++)WB(n.e,0);for(e=a=t+1-2*n.b,c=1;c<a;c++)WB(n.e,c/e);if(n.d)for(i=0;i<n.b;i++)WB(n.e,1)}function O$n(n,t){var e,i,r,c,a;if(c=t,!(a=BB(Uin(PX(n.i),c),33)))throw Hp(new ek("Unable to find elk node for json object '"+R2(c,q6n)+"' Panic!"));i=N2(c,"edges"),LCn((e=new uC(n,a)).a,e.b,i),r=N2(c,A6n),Dkn(new Ng(n).a,r)}function A$n(n,t,e,i){var r,c,a,u,o;if(null!=i){if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return u}else if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if(GC((a=BB(c[u],133)).cd())===GC(i))return u;return-1}function $$n(n,t){var e,i;return cL(e=null==t?qC(AY(n.f,null)):hS(n.g,t),235)?((i=BB(e,235)).Qh(),i):cL(e,498)?((i=BB(e,1938).a)&&(null==i.yb||(null==t?jIn(n.f,null,i):ubn(n.g,t,i))),i):null}function L$n(n){var t,e,i,r,c,a,u;if(KDn(),null==n)return null;if((r=n.length)%2!=0)return null;for(t=V7(n),e=x8(NNt,v6n,25,c=r/2|0,15,1),i=0;i<c;i++){if(-1==(a=QLt[t[2*i]]))return null;if(-1==(u=QLt[t[2*i+1]]))return null;e[i]=(a<<4|u)<<24>>24}return e}function N$n(n,t,e){var i,r,c;if(!(r=BB(oV(n.i,t),306)))if(r=new wtn(n.d,t,e),mG(n.i,t,r),agn(t))EL(n.a,t.c,t.b,r);else switch(c=LPn(t),i=BB(oV(n.p,c),244),c.g){case 1:case 3:r.j=!0,jy(i,t.b,r);break;case 4:case 2:r.k=!0,jy(i,t.c,r)}return r}function x$n(n,t,e,i){var r,c,a,u,o,s;if(u=new go,o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj())for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&f9(u,c);else for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&(s=c.dd(),f9(u,i?FCn(n,t,a,u.i,s):s));return Qwn(u,e)}function D$n(n,t){var i,r,c,a,u,o;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Wb(t.j);a.a<a.c.c.length;)for(i=new Wb(BB(n0(a),11).g);i.a<i.c.c.length;)t!=(o=BB(n0(i),17).d.i)&&(u=D$n(n,o),c=e.Math.max(c,u+1));return iwn(n,t,c),c}function R$n(n,t,e){var i,r,c;for(i=1;i<n.c.length;i++){for(l1(i,n.c.length),c=BB(n.c[i],10),r=i;r>0&&t.ue((l1(r-1,n.c.length),BB(n.c[r-1],10)),c)>0;)c5(n,r,(l1(r-1,n.c.length),BB(n.c[r-1],10))),--r;l1(r,n.c.length),n.c[r]=c}e.a=new xp,e.b=new xp}function K$n(n,t,e){var i,r,c,a,u,o,s;for(s=new YK(i=BB(t.e&&t.e(),9),BB(SR(i,i.length),9),0),a=0,u=(c=kKn(e,"[\\[\\]\\s,]+")).length;a<u;++a)if(0!=RMn(r=c[a]).length){if(null==(o=HCn(n,r)))return null;orn(s,BB(o,22))}return s}function _$n(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function F$n(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(kUn(),sCt)||t==oCt?(jtn(BB(Eon(n),15),(Xyn(),jIt)),jtn(BB(Eon(n),15),EIt)):(jtn(BB(Eon(n),15),(Xyn(),EIt)),jtn(BB(Eon(n),15),jIt));else for(i=new bV(n);i.a!=i.b;)jtn(BB(_hn(i),15),e)}function B$n(n,t){var e,i,r,c,a,u;for(a=new M2(i=HB(new sp(n)),i.c.length),u=new M2(r=HB(new sp(t)),r.c.length),c=null;a.b>0&&u.b>0&&(Px(a.b>0),e=BB(a.a.Xb(a.c=--a.b),33),Px(u.b>0),e==BB(u.a.Xb(u.c=--u.b),33));)c=e;return c}function H$n(n,t){var i,r,c,a;return c=n.a*aYn+1502*n.b,a=n.b*aYn+11,c+=i=e.Math.floor(a*uYn),a-=i*oYn,c%=oYn,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*Oet[t]):((r=n.a*(1<<t-24)+e.Math.floor(n.b*Aet[t]))>=2147483648&&(r-=XQn),r)}function q$n(n,t,e){var i,r,c,a;w0(n,t)>w0(n,e)?(i=abn(e,(kUn(),oCt)),n.d=i.dc()?0:uq(BB(i.Xb(0),11)),a=abn(t,ICt),n.b=a.dc()?0:uq(BB(a.Xb(0),11))):(r=abn(e,(kUn(),ICt)),n.d=r.dc()?0:uq(BB(r.Xb(0),11)),c=abn(t,oCt),n.b=c.dc()?0:uq(BB(c.Xb(0),11)))}function G$n(n){var t,e,i,r,c,a,u;if(n&&(t=n.Hh(V9n))&&null!=(a=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"conversionDelegates")))){for(u=new Np,r=0,c=(i=kKn(a,"\\w+")).length;r<c;++r)e=i[r],u.c[u.c.length]=e;return u}return SQ(),SQ(),set}function z$n(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=e*Gy(MD(r.b.We(Lrt))),r.e.b=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),sCt)?-i.rf().b-Gy(MD(i.We(aPt))):Gy(MD(i.We(aPt))):i.Hf()==(kUn(),sCt)?-i.rf().b:0}function U$n(n){var t,e,i,r,c,a,u,o;t=!0,r=null,c=null;n:for(o=new Wb(n.a);o.a<o.c.c.length;)for(i=new oz(ZL(fbn(u=BB(n0(o),10)).a.Kc(),new h));dAn(i);){if(e=BB(U5(i),17),r&&r!=u){t=!1;break n}if(r=u,a=e.c.i,c&&c!=a){t=!1;break n}c=a}return t}function X$n(n,t,e){var i,r,c,a,u,o;for(c=-1,u=-1,a=0;a<t.c.length&&(l1(a,t.c.length),!((r=BB(t.c[a],329)).c>n.c));a++)r.a>=n.s&&(c<0&&(c=a),u=a);return o=(n.s+n.c)/2,c>=0&&(o=qM((l1(i=YRn(n,t,c,u),t.c.length),BB(t.c[i],329))),lOn(t,i,e)),o}function W$n(){W$n=O,lEt=new XA((sWn(),cSt),1.3),gEt=jSt,CEt=new WA(15),IEt=new XA(XSt,CEt),$Et=new XA(LPt,15),bEt=hSt,jEt=KSt,EEt=BSt,TEt=qSt,kEt=DSt,MEt=USt,OEt=fPt,$An(),PEt=oEt,yEt=aEt,SEt=uEt,AEt=hEt,pEt=cEt,vEt=ISt,mEt=CSt,dEt=rEt,wEt=iEt,LEt=fEt}function V$n(n,t,e){var i,r,c,a,u;for(Bin(r=new jo,(kW(t),t)),!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),u=r.b,a=1;a<e.length;a+=2)vjn(u,e[a-1],e[a]);for(!n.Ab&&(n.Ab=new eU(KAt,n,0,3)),i=n.Ab,c=0;c<0;++c)i=mW(BB(Wtn(i,i.i-1),590));f9(i,r)}function Q$n(n,t,e){var i,r,c;for(LD.call(this,new Np),this.a=t,this.b=e,this.e=n,n.b&&VBn(n),i=n.a,this.d=JV(i.a,this.a),this.c=JV(i.b,this.b),obn(this,this.d,this.c),mCn(this),c=this.e.e.a.ec().Kc();c.Ob();)(r=BB(c.Pb(),266)).c.c.length>0&&xqn(this,r)}function Y$n(n,t,e,i,r,c){var a,u,o;if(!r[t.b]){for(r[t.b]=!0,!(a=i)&&(a=new y6),WB(a.e,t),o=c[t.b].Kc();o.Ob();)(u=BB(o.Pb(),282)).d!=e&&u.c!=e&&(u.c!=t&&Y$n(n,u.c,t,a,r,c),u.d!=t&&Y$n(n,u.d,t,a,r,c),WB(a.c,u),gun(a.d,u.b));return a}return null}function J$n(n){var t,e,i;for(t=0,e=new Wb(n.e);e.a<e.c.c.length;)o5(new Rq(null,new w1(BB(n0(e),17).b,16)),new pe)&&++t;for(i=new Wb(n.g);i.a<i.c.c.length;)o5(new Rq(null,new w1(BB(n0(i),17).b,16)),new ve)&&++t;return t>=2}function Z$n(n,t){var e,i,r,c;for(OTn(t,"Self-Loop pre-processing",1),i=new Wb(n.a);i.a<i.c.c.length;)Kbn(e=BB(n0(i),10))&&(c=new Ogn(e),hon(e,(hWn(),Olt),c),k_n(c),JT($V(wnn(new Rq(null,new w1((r=c).d,16)),new Hi),new qi),new Gi),ixn(r));HSn(t)}function nLn(n,t,e,i,r){var c,a,u,o,s;for(c=n.c.d.j,a=BB(Dpn(e,0),8),s=1;s<e.b;s++)o=BB(Dpn(e,s),8),r5(i,a,i.c.b,i.c),u=kL(UR(new wA(a),o),.5),UR(u,kL(new XZ(hsn(c)),r)),r5(i,u,i.c.b,i.c),a=o,c=0==t?Mln(c):Eln(c);DH(i,(Px(0!=e.b),BB(e.c.b.c,8)))}function tLn(n){return n$n(),!(Ian(OJ(EG($It,Pun(Gk(GIt,1),$Vn,93,0,[LIt])),n))>1||Ian(OJ(EG(CIt,Pun(Gk(GIt,1),$Vn,93,0,[IIt,AIt])),n))>1||Ian(OJ(EG(DIt,Pun(Gk(GIt,1),$Vn,93,0,[xIt,NIt])),n))>1)}function eLn(n,t){var e,i,r;return(e=t.Hh(n.a))&&null!=(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"affiliation")))?-1==(i=mN(r,YTn(35)))?uln(n,az(n,Utn(t.Hj())),r):0==i?uln(n,null,r.substr(1)):uln(n,r.substr(0,i),r.substr(i+1)):null}function iLn(n){var t,e;try{return null==n?zWn:Bbn(n)}catch(i){if(cL(i=lun(i),102))return t=i,e=nE(tsn(n))+"@"+($T(),(evn(n)>>>0).toString(16)),Kgn(jun(),(lM(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+nE(t.gm)+">";throw Hp(i)}}function rLn(n){switch(n.g){case 0:return new of;case 1:return new ef;case 2:return new $M;case 3:return new Cc;case 4:return new RR;case 5:return new sf;default:throw Hp(new _y("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function cLn(n,t,e){var i,r,c;for(c=new Wb(n.t);c.a<c.c.c.length;)(i=BB(n0(c),268)).b.s<0&&i.c>0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&DH(t,i.b));for(r=new Wb(n.i);r.a<r.c.c.length;)(i=BB(n0(r),268)).a.s<0&&i.c>0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&DH(e,i.a))}function aLn(n){var t,e,i;if(null==n.g&&(n.d=n.si(n.f),f9(n,n.d),n.c))return n.f;if(i=(t=BB(n.g[n.i-1],47)).Pb(),n.e=t,(e=n.si(i)).Ob())n.d=e,f9(n,e);else for(n.d=null;!t.Ob()&&($X(n.g,--n.i,null),0!=n.i);)t=BB(n.g[n.i-1],47);return i}function uLn(n,t){var e,i,r,c,a,u;if(r=(i=t).ak(),$xn(n.e,r)){if(r.hi()&&G3(n,r,i.dd()))return!1}else for(u=axn(n.e.Tg(),r),e=BB(n.g,119),c=0;c<n.i;++c)if(a=e[c],u.rl(a.ak()))return!Nfn(a,i)&&(BB(ovn(n,c,t),72),!0);return f9(n,t)}function oLn(n,t,i,r){var c,a,u;for(Bl(c=new $vn(n),(uSn(),Sut)),hon(c,(hWn(),dlt),t),hon(c,Plt,r),hon(c,(HXn(),ept),(QEn(),XIt)),hon(c,hlt,t.c),hon(c,flt,t.d),zxn(t,c),u=e.Math.floor(i/2),a=new Wb(c.j);a.a<a.c.c.length;)BB(n0(a),11).n.b=u;return c}function sLn(n,t){var e,i,r,c,a,u,o,s,h;for(o=sx(n.c-n.b&n.a.length-1),s=null,h=null,c=new bV(n);c.a!=c.b;)r=BB(_hn(c),10),e=(u=BB(mMn(r,(hWn(),hlt)),11))?u.i:null,i=(a=BB(mMn(r,flt),11))?a.i:null,s==e&&h==i||(GAn(o,t),s=e,h=i),o.c[o.c.length]=r;GAn(o,t)}function hLn(n){var t,i,r,c,a,u;for(t=0,i=new Wb(n.a);i.a<i.c.c.length;)for(c=new oz(ZL(lbn(BB(n0(i),10)).a.Kc(),new h));dAn(c);)n==(r=BB(U5(c),17)).d.i.c&&r.c.j==(kUn(),ICt)&&(a=g1(r.c).b,u=g1(r.d).b,t=e.Math.max(t,e.Math.abs(u-a)));return t}function fLn(n,t,e){var i,r;OTn(e,"Remove overlaps",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),i=BB(ZAn(t,(wD(),Vkt)),33),n.f=i,n.a=Evn(BB(ZAn(t,(Uyn(),Rjt)),293)),ib(n,(kW(r=MD(ZAn(t,(sWn(),LPt)))),r)),Xzn(n,t,wDn(i),e),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function lLn(n,t,i){switch(i.g){case 1:return new xI(t.a,e.Math.min(n.d.b,t.b));case 2:return new xI(e.Math.max(n.c.a,t.a),t.b);case 3:return new xI(t.a,e.Math.max(n.c.b,t.b));case 4:return new xI(e.Math.min(t.a,n.d.a),t.b)}return new xI(t.a,t.b)}function bLn(n,t,e,i){var r,c,a,u,o,s,h,f,l;for(f=i?(kUn(),ICt):(kUn(),oCt),r=!1,s=0,h=(o=t[e]).length;s<h;++s)LK(BB(mMn(u=o[s],(HXn(),ept)),98))||(a=u.e,(l=!abn(u,f).dc()&&!!a)&&(c=qEn(a),n.b=new zEn(c,i?0:c.length-1)),r|=c_n(n,u,f,l));return r}function wLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).d&&(e.d=new hK(_Ot,e,8,5)),e.d));return yX(t),new OO(t)}function dLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).e&&(e.e=new hK(_Ot,e,7,4)),e.e));return yX(t),new OO(t)}function gLn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return HLt;if(45==t)return BLt}else if(3==e)return HLt;return bSn(i)}function pLn(n){var t,e,i,r;for(t=0,e=0,r=new Wb(n.j);r.a<r.c.c.length;)if(t=dG(rbn(t,q6(AV(new Rq(null,new w1((i=BB(n0(r),11)).e,16)),new Yc)))),e=dG(rbn(e,q6(AV(new Rq(null,new w1(i.g,16)),new Jc)))),t>1||e>1)return 2;return t+e==1?2:0}function vLn(n,t,e){var i,r,c,a;for(OTn(e,"ELK Force",1),qy(TD(ZAn(t,(fRn(),Wct))))||jJ(new Tw((GM(),new Dy(t)))),kkn(a=fon(t)),zon(n,BB(mMn(a,Gct),424)),r=(c=HFn(n.a,a)).Kc();r.Ob();)i=BB(r.Pb(),231),PKn(n.b,i,mcn(e,1/c.gc()));SUn(a=GUn(c)),HSn(e)}function mLn(n,t){var e,i,r;if(OTn(t,"Breaking Point Processor",1),Ozn(n),qy(TD(mMn(n,(HXn(),Gpt))))){for(i=new Wb(n.b);i.a<i.c.c.length;)for(e=0,r=new Wb(BB(n0(i),29).a);r.a<r.c.c.length;)BB(n0(r),10).p=e++;oHn(n),Hxn(n,!0),Hxn(n,!1)}HSn(t)}function yLn(n,t,e){var i,r,c,a,u;for(a=n.c,c=(e.q?e.q:(SQ(),SQ(),het)).vc().Kc();c.Ob();)r=BB(c.Pb(),42),!jE(AV(new Rq(null,new w1(a,16)),new aw(new LI(t,r)))).sd((dM(),tit))&&(cL(u=r.dd(),4)&&null!=(i=Jdn(u))&&(u=i),t.Ye(BB(r.cd(),146),u))}function kLn(n,t){var e,i,r,c;if(t){for(c=!(r=cL(n.Cb,88)||cL(n.Cb,99))&&cL(n.Cb,322),e=new AL((!t.a&&(t.a=new aG(t,VAt,t)),t.a));e.e!=e.i.gc();)if(i=lFn(BB(kpn(e),87)),r?cL(i,88):c?cL(i,148):i)return i;return r?(gWn(),d$t):(gWn(),l$t)}return null}function jLn(n,t){var e,i,r,c,a;for(OTn(t,"Constraints Postprocessor",1),c=0,r=new Wb(n.b);r.a<r.c.c.length;){for(a=0,i=new Wb(BB(n0(r),29).a);i.a<i.c.c.length;)(e=BB(n0(i),10)).k==(uSn(),Iut)&&(hon(e,(HXn(),jgt),iln(c)),hon(e,Bdt,iln(a)),++a);++c}HSn(t)}function ELn(n,t,e,i){var r,c,a,u,o,s;for(XR(u=new xI(e,i),BB(mMn(t,(qqn(),nkt)),8)),s=spn(t.b,0);s.b!=s.d.c;)UR((o=BB(b3(s),86)).e,u),DH(n.b,o);for(a=spn(t.a,0);a.b!=a.d.c;){for(r=spn((c=BB(b3(a),188)).a,0);r.b!=r.d.c;)UR(BB(b3(r),8),u);DH(n.a,c)}}function TLn(n,t,e){var i,r,c;if(!(c=Fqn((CPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));if(ZM(),!BB(c,66).Oj()&&!(c=Z1(B7(Z$t,c))))throw Hp(new _y(r6n+t.ne()+c6n));r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).ml(t,e)}function MLn(n,t){var e,i,r,c,a;for(e=new Np,r=wnn(new Rq(null,new w1(n,16)),new Ea),c=wnn(new Rq(null,new w1(n,16)),new Ta),a=M7(H6(LV(SNn(Pun(Gk(eit,1),HWn,833,0,[r,c])),new Ma))),i=1;i<a.length;i++)a[i]-a[i-1]>=2*t&&WB(e,new kB(a[i-1]+t,a[i]-t));return e}function SLn(n,t,e){OTn(e,"Eades radial",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),n.d=BB(ZAn(t,(wD(),Vkt)),33),n.c=Gy(MD(ZAn(t,(Uyn(),Djt)))),n.e=Evn(BB(ZAn(t,Rjt),293)),n.a=lwn(BB(ZAn(t,_jt),426)),n.b=qjn(BB(ZAn(t,$jt),340)),rjn(n),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function PLn(n,t,e){var i,r,c,a,u;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&($in(a=$3(n,(tE(),u=new Em,!!t&&BLn(u,t),u),r),R2(r,q6n)),STn(r,a),OIn(r,a),xon(n,r,a))}function ILn(n){var t,e,i,r;if(!n.j){if(r=new Co,null==(t=P$t).a.zc(n,t)){for(i=new AL(kY(n));i.e!=i.i.gc();)pX(r,ILn(e=BB(kpn(i),26))),f9(r,e);t.a.Bc(n)}chn(r),n.j=new NO((BB(Wtn(QQ((QX(),t$t).o),11),18),r.i),r.g),P5(n).b&=-33}return n.j}function CLn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return GLt;if(45==t)return qLt}else if(3==e)return GLt;return new Dv(i)}function OLn(n){var t,e,i;return 0!=((e=n.l)&e-1)||0!=((i=n.m)&i-1)||0!=((t=n.h)&t-1)||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?gin(e):0==t&&0!=i&&0==e?gin(i)+22:0!=t&&0==i&&0==e?gin(t)+44:-1}function ALn(n,t){var e,i,r,c;for(OTn(t,"Edge joining",1),e=qy(TD(mMn(n,(HXn(),Dpt)))),i=new Wb(n.b);i.a<i.c.c.length;)for(c=new M2(BB(n0(i),29).a,0);c.b<c.d.gc();)Px(c.b<c.d.gc()),(r=BB(c.d.Xb(c.c=c.b++),10)).k==(uSn(),Put)&&(rGn(r,e),fW(c));HSn(t)}function $Ln(n,t,e){var i;if(h2(n.b),IU(n.b,(Pbn(),HEt),(OM(),GTt)),IU(n.b,qEt,t.g),IU(n.b,GEt,t.a),n.a=$qn(n.b,t),OTn(e,"Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),51).pf(t,mcn(e,1));HSn(e)}function LLn(n,t){var e,i,r,c,a;for(r=t.a&n.f,c=null,i=n.b[r];;i=i.b){if(i==t){c?c.b=t.b:n.b[r]=t.b;break}c=i}for(a=t.f&n.f,c=null,e=n.c[a];;e=e.d){if(e==t){c?c.d=t.d:n.c[a]=t.d;break}c=e}t.e?t.e.c=t.c:n.a=t.c,t.c?t.c.e=t.e:n.e=t.e,--n.i,++n.g}function NLn(n){var t,i,r,c,a,u,o,s,h,f;for(i=n.o,t=n.p,u=DWn,c=_Vn,o=DWn,a=_Vn,h=0;h<i;++h)for(f=0;f<t;++f)vmn(n,h,f)&&(u=e.Math.min(u,h),c=e.Math.max(c,h),o=e.Math.min(o,f),a=e.Math.max(a,f));return s=c-u+1,r=a-o+1,new VV(iln(u),iln(o),iln(s),iln(r))}function xLn(n,t){var e,i,r,c;for(Px((c=new M2(n,0)).b<c.d.gc()),e=BB(c.d.Xb(c.c=c.b++),140);c.b<c.d.gc();)Px(c.b<c.d.gc()),r=new mH((i=BB(c.d.Xb(c.c=c.b++),140)).c,e.d,t),Px(c.b>0),c.a.Xb(c.c=--c.b),yR(c,r),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),r.a=!1,e=i}function DLn(n){var t,e,i,r,c;for(i=BB(mMn(n,(hWn(),Kft)),11),c=new Wb(n.j);c.a<c.c.c.length;){for(e=new Wb((r=BB(n0(c),11)).g);e.a<e.c.c.length;)return MZ(BB(n0(e),17),i),r;for(t=new Wb(r.e);t.a<t.c.c.length;)return SZ(BB(n0(t),17),i),r}return null}function RLn(n,t,i){var r,c;Vhn(r=fan(i.q.getTime()),0)<0?(c=VVn-dG(ldn(j7(r),VVn)))==VVn&&(c=0):c=dG(ldn(r,VVn)),1==t?xX(n,48+(c=e.Math.min((c+50)/100|0,9))&QVn):2==t?Enn(n,c=e.Math.min((c+5)/10|0,99),2):(Enn(n,c,3),t>3&&Enn(n,0,t-3))}function KLn(n){var t,e,i,r;return GC(mMn(n,(HXn(),sgt)))===GC((ufn(),pIt))?!n.e&&GC(mMn(n,Rdt))!==GC((Kan(),kft)):(i=BB(mMn(n,Kdt),292),r=qy(TD(mMn(n,Hdt)))||GC(mMn(n,qdt))===GC((Oin(),sht)),t=BB(mMn(n,Ddt),19).a,e=n.a.c.length,!r&&i!=(Kan(),kft)&&(0==t||t>e))}function _Ln(n){var t,e;for(e=0;e<n.c.length&&!(sq((l1(e,n.c.length),BB(n.c[e],113)))>0);e++);if(e>0&&e<n.c.length-1)return e;for(t=0;t<n.c.length&&!(sq((l1(t,n.c.length),BB(n.c[t],113)))>0);t++);return t>0&&e<n.c.length-1?t:n.c.length/2|0}function FLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=6&&t){if(vkn(n,t))throw Hp(new _y(w6n+ROn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,6,i)),(i=QD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,6,t,t))}function BLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(vkn(n,t))throw Hp(new _y(w6n+URn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?fkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,9,i)),(i=YD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,9,t,t))}function HLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+lHn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Mkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,12,i)),(i=VD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function qLn(n){var t,e,i,r,c;if(i=Ckn(n),null==(c=n.j)&&i)return n.$j()?null:i.zj();if(cL(i,148)){if((e=i.Aj())&&(r=e.Nh())!=n.i){if((t=BB(i,148)).Ej())try{n.g=r.Kh(t,c)}catch(a){if(!cL(a=lun(a),78))throw Hp(a);n.g=null}n.i=r}return n.g}return null}function GLn(n){var t;return WB(t=new Np,new xS(new xI(n.c,n.d),new xI(n.c+n.b,n.d))),WB(t,new xS(new xI(n.c,n.d),new xI(n.c,n.d+n.a))),WB(t,new xS(new xI(n.c+n.b,n.d+n.a),new xI(n.c+n.b,n.d))),WB(t,new xS(new xI(n.c+n.b,n.d+n.a),new xI(n.c,n.d+n.a))),t}function zLn(n,t,e,i){var r,c,a;if(a=Ajn(t,e),i.c[i.c.length]=t,-1==n.j[a.p]||2==n.j[a.p]||n.a[t.p])return i;for(n.j[a.p]=-1,c=new oz(ZL(hbn(a).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&(b5(r)||r.c.i.c!=r.d.i.c)&&r!=t)return zLn(n,r,a,i);return i}function ULn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=BB(r.Pb(),79),!BB(RX(n.b,i),266)&&(JJ(PMn(i))==JJ(OMn(i))?tDn(n,i,e):PMn(i)==JJ(OMn(i))?null==RX(n.c,i)&&null!=RX(n.b,OMn(i))&&rzn(n,i,e,!1):null==RX(n.d,i)&&null!=RX(n.b,PMn(i))&&rzn(n,i,e,!0))}function XLn(n,t){var e,i,r,c,a,u,o;for(r=n.Kc();r.Ob();)for(i=BB(r.Pb(),10),IZ(u=new ISn,i),qIn(u,(kUn(),oCt)),hon(u,(hWn(),jlt),(hN(),!0)),a=t.Kc();a.Ob();)c=BB(a.Pb(),10),IZ(o=new ISn,c),qIn(o,ICt),hon(o,jlt,!0),hon(e=new wY,jlt,!0),SZ(e,u),MZ(e,o)}function WLn(n,t,e,i){var r,c,a,u;r=Adn(n,t,e),c=Adn(n,e,t),a=BB(RX(n.c,t),112),u=BB(RX(n.c,e),112),r<c?new zZ((O6(),Myt),a,u,c-r):c<r?new zZ((O6(),Myt),u,a,r-c):(0!=r||t.i&&e.i&&i[t.i.c][e.i.c])&&(new zZ((O6(),Myt),a,u,0),new zZ(Myt,u,a,0))}function VLn(n,t){var e,i,r,c,a,u;for(r=0,a=new Wb(t.a);a.a<a.c.c.length;)for(r+=(c=BB(n0(a),10)).o.b+c.d.a+c.d.d+n.e,i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)(e=BB(U5(i),17)).c.i.k==(uSn(),Cut)&&(r+=(u=BB(mMn(e.c.i,(hWn(),dlt)),10)).o.b+u.d.a+u.d.d);return r}function QLn(n,t,e){var i,r,c,a,u,o,s;for(c=new Np,OBn(n,s=new YT,a=new YT,t),Ezn(n,s,a,t,e),o=new Wb(n);o.a<o.c.c.length;)for(r=new Wb((u=BB(n0(o),112)).k);r.a<r.c.c.length;)i=BB(n0(r),129),(!t||i.c==(O6(),Tyt))&&u.g>i.b.g&&(c.c[c.c.length]=i);return c}function YLn(){YLn=O,DEt=new jI("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),xEt=new jI("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),KEt=new jI("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),REt=new jI("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),_Et=new jI("WHOLE_DRAWING",4)}function JLn(n,t){if(cL(t,239))return hln(n,BB(t,33));if(cL(t,186))return Dln(n,BB(t,118));if(cL(t,354))return tQ(n,BB(t,137));if(cL(t,352))return JFn(n,BB(t,79));if(t)return null;throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function ZLn(n){var t,e,i,r,c,a,u;for(c=new YT,r=new Wb(n.d.a);r.a<r.c.c.length;)0==(i=BB(n0(r),121)).b.a.c.length&&r5(c,i,c.c.b,c.c);if(c.b>1)for(t=AN((e=new qv,++n.b,e),n.d),u=spn(c,0);u.b!=u.d.c;)a=BB(b3(u),121),UNn(aM(cM(uM(rM(new Hv,1),0),t),a))}function nNn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=11&&t){if(vkn(n,t))throw Hp(new _y(w6n+zRn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,10,i)),(i=zR(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,t,t))}function tNn(n){var t,e,i,r;for(i=new usn(new Pb(n.b).a);i.b;)r=BB((e=ten(i)).cd(),11),hon(t=BB(e.dd(),10),(hWn(),dlt),r),hon(r,Elt,t),hon(r,elt,(hN(),!0)),qIn(r,BB(mMn(t,Qft),61)),mMn(t,Qft),hon(r.i,(HXn(),ept),(QEn(),VIt)),BB(mMn(vW(r.i),Zft),21).Fc((bDn(),dft))}function eNn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Wb(n.d.i.j);c.a<c.c.c.length;)i+=BB(n0(c),11).e.c.length;else i=1;if(n.d)for(c=new Wb(n.c.i.j);c.a<c.c.c.length;)r+=BB(n0(c),11).g.c.length;else r=1;return(e+t)/2+.4*IJ(HH(r-i))*(e-t)}function iNn(n){var t,e;if(LEn(),n.Hc((kUn(),PCt)))throw Hp(new _y("Port sides must not contain UNDEFINED"));switch(n.gc()){case 1:return Mst;case 2:return t=n.Hc(oCt)&&n.Hc(ICt),e=n.Hc(sCt)&&n.Hc(SCt),t||e?Ist:Pst;case 3:return Sst;case 4:return Tst;default:return null}}function rNn(n,t,e){var i,r,c,a;for(OTn(e,"Breaking Point Removing",1),n.a=BB(mMn(t,(HXn(),Zdt)),218),r=new Wb(t.b);r.a<r.c.c.length;)for(a=new Wb(a0(BB(n0(r),29).a));a.a<a.c.c.length;)Jnn(c=BB(n0(a),10))&&!(i=BB(mMn(c,(hWn(),Rft)),305)).d&&zUn(n,i);HSn(e)}function cNn(n,t,e){return jDn(),(!Dcn(n,t)||!Dcn(n,e))&&(mzn(new xI(n.c,n.d),new xI(n.c+n.b,n.d),t,e)||mzn(new xI(n.c+n.b,n.d),new xI(n.c+n.b,n.d+n.a),t,e)||mzn(new xI(n.c+n.b,n.d+n.a),new xI(n.c,n.d+n.a),t,e)||mzn(new xI(n.c,n.d+n.a),new xI(n.c,n.d),t,e))}function aNn(n,t){var e,i,r,c;if(!n.dc())for(e=0,i=n.gc();e<i;++e)if(null==(c=SD(n.Xb(e)))?null==t:mK(c.substr(0,3),"!##")?null!=t&&(r=t.length,!mK(c.substr(c.length-r,r),t)||c.length!=t.length+3)&&!mK(S7n,t):mK(c,P7n)&&!mK(S7n,t)||mK(c,t))return!0;return!1}function uNn(n,t,e,i){var r,c,a,u,o,s;for(a=n.j.c.length,o=x8(art,rJn,306,a,0,1),u=0;u<a;u++)(c=BB(xq(n.j,u),11)).p=u,o[u]=hOn(mAn(c),e,i);for(VNn(n,o,e,t,i),s=new xp,r=0;r<o.length;r++)o[r]&&VW(s,BB(xq(n.j,r),11),o[r]);s.f.c+s.g.c!=0&&(hon(n,(hWn(),zft),s),ASn(n,o))}function oNn(n,t,e){var i,r;for(i=new Wb(n.a.b);i.a<i.c.c.length;)if((r=f2(BB(n0(i),57)))&&r.k==(uSn(),Mut))switch(BB(mMn(r,(hWn(),Qft)),61).g){case 4:r.n.a=t.a;break;case 2:r.n.a=e.a-(r.o.a+r.d.c);break;case 1:r.n.b=t.b;break;case 3:r.n.b=e.b-(r.o.b+r.d.a)}}function sNn(){sNn=O,Cvt=new HP(QZn,0),Tvt=new HP("NIKOLOV",1),Pvt=new HP("NIKOLOV_PIXEL",2),Mvt=new HP("NIKOLOV_IMPROVED",3),Svt=new HP("NIKOLOV_IMPROVED_PIXEL",4),Evt=new HP("DUMMYNODE_PERCENTAGE",5),Ivt=new HP("NODECOUNT_PERCENTAGE",6),Ovt=new HP("NO_BOUNDARY",7)}function hNn(n,t,e){var i,r,c;if(!(r=BB(ZAn(t,(SMn(),UMt)),19))&&(r=iln(0)),!(c=BB(ZAn(e,UMt),19))&&(c=iln(0)),r.a>c.a)return-1;if(r.a<c.a)return 1;if(n.a){if(0!=(i=Pln(t.j,e.j)))return i;if(0!=(i=Pln(t.i,e.i)))return i}return Pln(t.g*t.f,e.g*e.f)}function fNn(n,t){var e,i,r,c,a,u,o,s,h,f;if(++n.e,t>(o=null==n.d?0:n.d.length)){for(h=n.d,n.d=x8(oAt,c9n,63,2*o+4,0,1),c=0;c<o;++c)if(s=h[c])for(i=s.g,f=s.i,u=0;u<f;++u)a=eR(n,(r=BB(i[u],133)).Sh()),!(e=n.d[a])&&(e=n.d[a]=n.uj()),e.Fc(r);return!0}return!1}function lNn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak()))throw Hp(new _y(C7n));sln(n,t,e)}function bNn(n,t){var e,i,r,c,a,u;for(e=BB(mMn(t,(hWn(),Xft)),21),a=BB(h6((RXn(),fut),e),21),u=BB(h6(put,e),21),c=a.Kc();c.Ob();)if(i=BB(c.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;for(r=u.Kc();r.Ob();)if(i=BB(r.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;return!0}function wNn(n,t){var e,i,r;for(OTn(t,"Partition postprocessing",1),e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)for(r=new Wb(BB(n0(i),10).j);r.a<r.c.c.length;)qy(TD(mMn(BB(n0(r),11),(hWn(),jlt))))&&AU(r);HSn(t)}function dNn(n,t){var e,i,r,c,a,u,o;if(1==n.a.c.length)return FSn(BB(xq(n.a,0),187),t);for(r=cfn(n),a=0,u=n.d,i=r,o=n.d,c=(u-i)/2+i;i+1<u;){for(a=0,e=new Wb(n.a);e.a<e.c.c.length;)a+=cHn(BB(n0(e),187),c,!1).a;a<t?(o=c,u=c):i=c,c=(u-i)/2+i}return o}function gNn(n){var t,e,i,r;return isNaN(n)?(X7(),gtt):n<-0x8000000000000000?(X7(),wtt):n>=0x8000000000000000?(X7(),btt):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=OQn&&(n-=(e=IJ(n/OQn))*OQn),t=0,n>=CQn&&(n-=(t=IJ(n/CQn))*CQn),r=M$(IJ(n),t,e),i&&Oon(r),r)}function pNn(n,t){var e,i,r,c;for(e=!t||!n.u.Hc((lCn(),eCt)),c=0,r=new Wb(n.e.Cf());r.a<r.c.c.length;){if((i=BB(n0(r),838)).Hf()==(kUn(),PCt))throw Hp(new _y("Label and node size calculator can only be used with ports that have port sides assigned."));i.vf(c++),Whn(n,i,e)}}function vNn(n,t){var e,i,r,c;return(i=t.Hh(n.a))&&(!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),null!=(e=SD(cdn(i.b,J9n)))&&cL(c=-1==(r=e.lastIndexOf("#"))?uD(n,t.Aj(),e):0==r?M9(n,null,e.substr(1)):M9(n,e.substr(0,r),e.substr(r+1)),148))?BB(c,148):null}function mNn(n,t){var e,i,r,c;return(e=t.Hh(n.a))&&(!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),null!=(r=SD(cdn(e.b,k7n)))&&cL(c=-1==(i=r.lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148))?BB(c,148):null}function yNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),307)).j=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),57)).b),(!t.j||i.d.c<t.j.d.c)&&(t.j=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),57)).b.a=i.d.c-t.j.d.c,i.b.b=i.d.d-t.j.d.d}return n}function kNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),189)).f=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),81)).e),(!t.f||i.g.c<t.f.g.c)&&(t.f=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),81)).e.a=i.g.c-t.f.g.c,i.e.b=i.g.d-t.f.g.d}return n}function jNn(n){var t,i,r;return i=BB(n.a,19).a,r=BB(n.b,19).a,i<(t=e.Math.max(e.Math.abs(i),e.Math.abs(r)))&&r==-t?new rC(iln(i+1),iln(r)):i==t&&r<t?new rC(iln(i),iln(r+1)):i>=-t&&r==t?new rC(iln(i-1),iln(r)):new rC(iln(i),iln(r-1))}function ENn(){return lWn(),Pun(Gk(ust,1),$Vn,77,0,[rot,tot,cot,kot,Fot,Mot,Uot,Oot,Kot,got,Not,Cot,_ot,lot,Wot,Vut,Lot,Hot,jot,Bot,Qot,Dot,Qut,Rot,Yot,Got,Vot,Eot,sot,Tot,yot,Xot,Zut,uot,Pot,Jut,Iot,vot,bot,Aot,dot,eot,not,mot,wot,$ot,zot,Yut,xot,pot,Sot,hot,oot,qot,aot,fot,iot])}function TNn(n,t,e){n.d=0,n.b=0,t.k==(uSn(),Cut)&&e.k==Cut&&BB(mMn(t,(hWn(),dlt)),10)==BB(mMn(e,dlt),10)&&(S7(t).j==(kUn(),sCt)?q$n(n,t,e):q$n(n,e,t)),t.k==Cut&&e.k==Put?S7(t).j==(kUn(),sCt)?n.d=1:n.b=1:e.k==Cut&&t.k==Put&&(S7(e).j==(kUn(),sCt)?n.b=1:n.d=1),umn(n,t,e)}function MNn(n){var t,e,i,r,c;return c=ATn(n),null!=n.a&&AH(c,"category",n.a),!WE(new Ib(n.d))&&(rtn(c,"knownOptions",i=new Il),t=new ep(i),e5(new Ib(n.d),t)),!WE(n.g)&&(rtn(c,"supportedFeatures",r=new Il),e=new ip(r),e5(n.g,e)),c}function SNn(n){var t,e,i,r,c,a,u,o;for(t=336,e=0,r=new sR(n.length),u=0,o=(a=n).length;u<o;++u)Qln(c=a[u]),EW(c),i=c.a,WB(r.a,yX(i)),t&=i.qd(),e=Ysn(e,i.rd());return BB(BB(XU(new Rq(null,qTn(new w1((WX(),Nwn(r.a)),16),new k,t,e)),new El(n)),670),833)}function PNn(n,t){var e;n.d&&(t.c!=n.e.c||fcn(n.e.b,t.b))&&(WB(n.f,n.d),n.a=n.d.c+n.d.b,n.d=null,n.e=null),nA(t.b)?n.c=t:n.b=t,(t.b==(Aun(),Zat)&&!t.a||t.b==nut&&t.a||t.b==tut&&t.a||t.b==eut&&!t.a)&&n.c&&n.b&&(e=new UV(n.a,n.c.d,t.c-n.a,n.b.d-n.c.d),n.d=e,n.e=t)}function INn(n){var t;if(Ym.call(this),this.i=new lu,this.g=n,this.f=BB(n.e&&n.e(),9).length,0==this.f)throw Hp(new _y("There must be at least one phase in the phase enumeration."));this.c=new YK(t=BB(Vj(this.g),9),BB(SR(t,t.length),9),0),this.a=new B2,this.b=new xp}function CNn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=7&&t){if(vkn(n,t))throw Hp(new _y(w6n+cPn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,1,DOt,i)),(i=VG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,t,t))}function ONn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+Vfn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?bkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,0,BOt,i)),(i=QG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function ANn(n,t){var e,i,r,c,a,u,o,s,h;return $On(),t.d>n.d&&(u=n,n=t,t=u),t.d<63?Xxn(n,t):(s=z5(n,a=(-2&n.d)<<4),h=z5(t,a),i=uBn(n,G5(s,a)),r=uBn(t,G5(h,a)),o=ANn(s,h),e=ANn(i,r),c=G5(c=$Hn($Hn(c=ANn(uBn(s,i),uBn(r,h)),o),e),a),$Hn($Hn(o=G5(o,a<<1),c),e))}function $Nn(n,t,e){var i,r,c,a,u;for(a=Lfn(n,e),u=x8(Out,a1n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)qy(TD(mMn(r=BB(c.Pb(),11),(hWn(),elt))))&&(u[i++]=BB(mMn(r,Elt),10));if(i<t.length)throw Hp(new Fy("Expected "+t.length+" hierarchical ports, but found only "+i+"."));return u}function LNn(n,t){var e,i,r,c,a,u;if(!n.tb){for(!n.rb&&(n.rb=new Jz(n,HAt,n)),u=new XT((c=n.rb).i),r=new AL(c);r.e!=r.i.gc();)i=BB(kpn(r),138),(e=BB(null==(a=i.ne())?jIn(u.f,null,i):ubn(u.g,a,i),138))&&(null==a?jIn(u.f,null,e):ubn(u.g,a,e));n.tb=u}return BB(SJ(n.tb,t),138)}function NNn(n,t){var e,i,r,c,a;if((null==n.i&&qFn(n),n.i).length,!n.p){for(a=new XT(1+(3*n.g.i/2|0)),r=new ax(n.g);r.e!=r.i.gc();)i=BB(jpn(r),170),(e=BB(null==(c=i.ne())?jIn(a.f,null,i):ubn(a.g,c,i),170))&&(null==c?jIn(a.f,null,e):ubn(a.g,c,e));n.p=a}return BB(SJ(n.p,t),170)}function xNn(n,t,e,i,r){var c,a,u,o;for(wgn(i+IY(e,e.$d()),r),tW(t,Lwn(e)),(c=e.f)&&xNn(n,t,c,"Caused by: ",!1),null==e.k&&(e.k=x8(Jnt,sVn,78,0,0,1)),u=0,o=(a=e.k).length;u<o;++u)xNn(n,t,a[u],"Suppressed: ",!1);null!=console.groupEnd&&console.groupEnd.call(console)}function DNn(n,t,e,i){var r,c,a,u;for(a=(u=t.e).length,c=t.q._f(u,e?0:a-1,e),c|=gRn(n,u[e?0:a-1],e,i),r=e?1:a-2;e?r<a:r>=0;r+=e?1:-1)c|=t.c.Sf(u,r,e,i&&!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,(hWn(),Clt))))),c|=t.q._f(u,r,e),c|=gRn(n,u[r],e,i);return TU(n.c,t),c}function RNn(n,t,e){var i,r,c,a,u,o,s,h;for(s=0,h=(o=C2(n.j)).length;s<h;++s){if(u=o[s],e==(ain(),Hvt)||e==Gvt)for(c=0,a=(r=Z0(u.g)).length;c<a;++c)OSn(t,i=r[c])&&tBn(i,!0);if(e==qvt||e==Gvt)for(c=0,a=(r=Z0(u.e)).length;c<a;++c)CSn(t,i=r[c])&&tBn(i,!0)}}function KNn(n){var t,e;switch(t=null,e=null,eEn(n).g){case 1:kUn(),t=oCt,e=ICt;break;case 2:kUn(),t=SCt,e=sCt;break;case 3:kUn(),t=ICt,e=oCt;break;case 4:kUn(),t=sCt,e=SCt}Gl(n,BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)),ql(n,BB($N(Cz(BB(h6(n.k,e),15).Oc(),Qst)),113))}function _Nn(n){var t,e,i,r,c,a;if((r=BB(xq(n.j,0),11)).e.c.length+r.g.c.length==0)n.n.a=0;else{for(a=0,i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(r),new Gw(r)])));dAn(i);)a+=(e=BB(U5(i),11)).i.n.a+e.n.a+e.a.a;c=(t=BB(mMn(n,(HXn(),npt)),8))?t.a:0,n.n.a=a/(r.e.c.length+r.g.c.length)-c}}function FNn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)e=BB(n0(i),221),LG(BB(e.b,65),XR(B$(BB(t.b,65).c),BB(t.b,65).a)),(r=Y_n(BB(t.b,65).b,BB(e.b,65).b))>1&&(n.a=!0),NG(BB(e.b,65),UR(B$(BB(t.b,65).c),kL(XR(B$(BB(e.b,65).a),BB(t.b,65).a),r))),QZ(n,t),FNn(n,e)}function BNn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),189)).e=0,e.d.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),189)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),81).f.Kc();a.Ob();)(c=BB(a.Pb(),81)).d!=e&&(TU(e.d,c),++c.d.e)}function HNn(n){var t,e,i,r,c,a,u,o;for(e=0,t=o=n.j.c.length,r=2*o,u=new Wb(n.j);u.a<u.c.c.length;)switch((a=BB(n0(u),11)).j.g){case 2:case 4:a.p=-1;break;case 1:case 3:i=a.e.c.length,c=a.g.c.length,a.p=i>0&&c>0?t++:i>0?e++:c>0?r++:e++}SQ(),m$(n.j,new bi)}function qNn(n){var t,e;e=null,t=BB(xq(n.g,0),17);do{if(Lx(e=t.d.i,(hWn(),flt)))return BB(mMn(e,flt),11).i;if(e.k!=(uSn(),Iut)&&dAn(new oz(ZL(lbn(e).a.Kc(),new h))))t=BB(U5(new oz(ZL(lbn(e).a.Kc(),new h))),17);else if(e.k!=Iut)return null}while(e&&e.k!=(uSn(),Iut));return e}function GNn(n,t){var e,i,r,c,a,u,o,s,h;for(u=t.j,a=t.g,o=BB(xq(u,u.c.length-1),113),l1(0,u.c.length),s=Zmn(n,a,o,h=BB(u.c[0],113)),c=1;c<u.c.length;c++)l1(c-1,u.c.length),e=BB(u.c[c-1],113),l1(c,u.c.length),(i=Zmn(n,a,e,r=BB(u.c[c],113)))>s&&(o=e,h=r,s=i);t.a=h,t.c=o}function zNn(n,t){var e;if(!ZU(n.b,t.b))throw Hp(new Fy("Invalid hitboxes for scanline constraint calculation."));(kun(t.b,BB(MR(n.b,t.b),57))||kun(t.b,BB(TR(n.b,t.b),57)))&&($T(),t.b),n.a[t.b.f]=BB(kK(n.b,t.b),57),(e=BB(yK(n.b,t.b),57))&&(n.a[e.f]=t.b)}function UNn(n){if(!n.a.d||!n.a.e)throw Hp(new Fy((ED(Hit),Hit.k+" must have a source and target "+(ED(qit),qit.k+" specified."))));if(n.a.d==n.a.e)throw Hp(new Fy("Network simplex does not support self-loops: "+n.a+" "+n.a.d+" "+n.a.e));return RN(n.a.d.g,n.a),RN(n.a.e.b,n.a),n.a}function XNn(n,t,e){var i,r,c,a,u,o,s;for(s=new dE(new Jd(n)),u=0,o=(a=Pun(Gk(Gut,1),u1n,11,0,[t,e])).length;u<o;++u)for(c=a[u],Mon(s.a,c,(hN(),ptt)),r=new m6(c.b);y$(r.a)||y$(r.b);)(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==i.d||ZU(s,c==i.c?i.d:i.c);return yX(s),new t_(s)}function WNn(n,t,e){var i,r,c,a,u,o;if(i=0,0!=t.b&&0!=e.b){c=spn(t,0),a=spn(e,0),u=Gy(MD(b3(c))),o=Gy(MD(b3(a))),r=!0;do{if(u>o-n.b&&u<o+n.b)return-1;u>o-n.a&&u<o+n.a&&++i,u<=o&&c.b!=c.d.c?u=Gy(MD(b3(c))):o<=u&&a.b!=a.d.c?o=Gy(MD(b3(a))):r=!1}while(r)}return i}function VNn(n,t,e,i,r){var c,a,u,o;for(o=new YK(c=BB(Vj(FCt),9),BB(SR(c,c.length),9),0),u=new Wb(n.j);u.a<u.c.c.length;)t[(a=BB(n0(u),11)).p]&&(BUn(a,t[a.p],i),orn(o,a.j));r?(GEn(n,t,(kUn(),oCt),2*e,i),GEn(n,t,ICt,2*e,i)):(GEn(n,t,(kUn(),sCt),2*e,i),GEn(n,t,SCt,2*e,i))}function QNn(n){var t,e,i,r,c;if(c=new Np,Otn(n.b,new kw(c)),n.b.c=x8(Ant,HWn,1,0,5,1),0!=c.c.length){for(l1(0,c.c.length),t=BB(c.c[0],78),e=1,i=c.c.length;e<i;++e)l1(e,c.c.length),(r=BB(c.c[e],78))!=t&>n(t,r);if(cL(t,60))throw Hp(BB(t,60));if(cL(t,289))throw Hp(BB(t,289))}}function YNn(n,t){var e,i,r,c;for(n=null==n?zWn:(kW(n),n),e=new Ck,c=0,i=0;i<t.length&&-1!=(r=n.indexOf("%s",c));)oO(e,n.substr(c,r-c)),uO(e,t[i++]),c=r+2;if(oO(e,n.substr(c)),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function JNn(n){var t,e,i,r;for(t=0,r=(i=n.length)-4,e=0;e<r;)b1(e+3,n.length),t=n.charCodeAt(e+3)+(b1(e+2,n.length),31*(n.charCodeAt(e+2)+(b1(e+1,n.length),31*(n.charCodeAt(e+1)+(b1(e,n.length),31*(n.charCodeAt(e)+31*t)))))),t|=0,e+=4;for(;e<i;)t=31*t+fV(n,e++);return t|=0}function ZNn(n){var t;for(t=new oz(ZL(lbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).d.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST, but has at least one outgoing edge that does not go to a LAST_SEPARATE node. That must not happen."))}function nxn(n,t,i,r){var c,a,u,o,s,f,l;for(o=0,s=new Wb(n.a);s.a<s.c.c.length;){for(u=0,a=new oz(ZL(fbn(BB(n0(s),10)).a.Kc(),new h));dAn(a);)f=g1((c=BB(U5(a),17)).c).b,l=g1(c.d).b,u=e.Math.max(u,e.Math.abs(l-f));o=e.Math.max(o,u)}return r*e.Math.min(1,t/i)*o}function txn(n){var t;return t=new Pk,0!=(256&n)&&(t.a+="F"),0!=(128&n)&&(t.a+="H"),0!=(512&n)&&(t.a+="X"),0!=(2&n)&&(t.a+="i"),0!=(8&n)&&(t.a+="m"),0!=(4&n)&&(t.a+="s"),0!=(32&n)&&(t.a+="u"),0!=(64&n)&&(t.a+="w"),0!=(16&n)&&(t.a+="x"),0!=(n&k6n)&&(t.a+=","),Uy(t.a)}function exn(n,t){var e,i,r;for(OTn(t,"Resize child graph to fit parent.",1),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),29),gun(n.a,e.a),e.a.c=x8(Ant,HWn,1,0,5,1);for(r=new Wb(n.a);r.a<r.c.c.length;)PZ(BB(n0(r),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),Bxn(n),n.e&&S_n(n.e,n),HSn(t)}function ixn(n){var t,e,i,r,c,a,u;if(r=(i=n.b).e,c=LK(BB(mMn(i,(HXn(),ept)),98)),e=!!r&&BB(mMn(r,(hWn(),Zft)),21).Hc((bDn(),lft)),!c&&!e)for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(a=BB(t.dd(),113)).a&&(IZ(a.d,null),a.c=!0,n.a=!0)}function rxn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(f=-1,l=0,s=0,h=(o=n).length;s<h;++s){for(a=0,u=(c=o[s]).length;a<u;++a)for(r=c[a],t=new pP(-1==f?n[0]:n[f],okn(r)),e=0;e<r.j.c.length;e++)for(i=e+1;i<r.j.c.length;i++)Nz(t,BB(xq(r.j,e),11),BB(xq(r.j,i),11))>0&&++l;++f}return l}function cxn(n,t){var e,i,r,c,a;for(a=BB(mMn(t,(IAn(),Lkt)),425),c=spn(t.b,0);c.b!=c.d.c;)if(r=BB(b3(c),86),0==n.b[r.g]){switch(a.g){case 0:Qvn(n,r);break;case 1:HAn(n,r)}n.b[r.g]=2}for(i=spn(n.a,0);i.b!=i.d.c;)ywn((e=BB(b3(i),188)).b.d,e,!0),ywn(e.c.b,e,!0);hon(t,(qqn(),lkt),n.a)}function axn(n,t){var e,i,r,c;return ZM(),t?t==(Uqn(),KLt)||(t==yLt||t==vLt||t==mLt)&&n!=pLt?new cUn(n,t):((e=(i=BB(t,677)).pk())||(kV(B7((CPn(),Z$t),t)),e=i.pk()),!e.i&&(e.i=new xp),!(r=BB(qC(AY((c=e.i).f,n)),1942))&&VW(c,n,r=new cUn(n,t)),r):aLt}function uxn(n,t){var e,i,r,c,a,u,o,s;for(u=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).a,s=n.i.n.b,r=0,c=(i=Z0(n.e)).length;r<c;++r)MZ(e=i[r],u),fO(e.a,new xI(o,s)),t&&((a=BB(mMn(e,(HXn(),vgt)),74))||(a=new km,hon(e,vgt,a)),DH(a,new xI(o,s)))}function oxn(n,t){var e,i,r,c,a,u,o,s;for(i=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[i.i.n,i.n,i.a])).a,s=n.i.n.b,a=0,u=(c=Z0(n.g)).length;a<u;++a)SZ(r=c[a],i),hO(r.a,new xI(o,s)),t&&((e=BB(mMn(r,(HXn(),vgt)),74))||(e=new km,hon(r,vgt,e)),DH(e,new xI(o,s)))}function sxn(n,t){var e,i,r,c,a;for(n.b=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230),n.e=c0(n.d),c=new YT,r=u6(Pun(Gk(jut,1),JZn,37,0,[t])),a=0;a<r.c.length;)l1(a,r.c.length),(i=BB(r.c[a],37)).p=a++,gun(r,(e=new IGn(i,n.a,n.b)).b),WB(n.b,e),e.s&&nX(spn(c,0),e);return n.c=new Rv,c}function hxn(n,t){var e,i,r,c,a,u;for(a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)(e=(c=BB(a.Pb(),111)).c?VH(c.c):0)>0?c.a?e>(u=c.b.rf().a)&&(r=(e-u)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:Hz(n.u)&&((i=_Tn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.rf().a&&(c.d.c=i.c+i.b-c.b.rf().a))}function fxn(n,t){var e,i;for(OTn(t,"Semi-Interactive Crossing Minimization Processor",1),e=!1,i=new Wb(n.b);i.a<i.c.c.length;)e|=null!=$fn(ytn(AV(AV(new Rq(null,new w1(BB(n0(i),29).a,16)),new Qi),new Yi),new Ji),new Zi).a;e&&hon(n,(hWn(),alt),(hN(),!0)),HSn(t)}function lxn(n,t,e){var i,r,c;if(!(r=e)&&(r=new Xm),OTn(r,"Layout",n.a.c.length),qy(TD(mMn(t,(IAn(),Ekt)))))for($T(),i=0;i<n.a.c.length;i++)i++,nE(tsn(BB(xq(n.a,i),51)));for(c=new Wb(n.a);c.a<c.c.c.length;)BB(n0(c),51).pf(t,mcn(r,1));HSn(r)}function bxn(n){var t,i;if(t=BB(n.a,19).a,i=BB(n.b,19).a,t>=0){if(t==i)return new rC(iln(-t-1),iln(-t-1));if(t==-i)return new rC(iln(-t),iln(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new rC(iln(-t),iln(t<0?i:i+1)):new rC(iln(t+1),iln(i))}function wxn(n){var t,e;e=BB(mMn(n,(HXn(),kgt)),163),t=BB(mMn(n,(hWn(),ilt)),303),e==(Tbn(),Flt)?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Ift))):e==Hlt?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Sft))):t==(z7(),Ift)?(hon(n,kgt,Flt),hon(n,ilt,Pft)):t==Sft&&(hon(n,kgt,Hlt),hon(n,ilt,Pft))}function dxn(){dxn=O,jyt=new oa,vyt=dq(new B2,(yMn(),_at),(lWn(),jot)),kyt=WG(dq(new B2,_at,Dot),Bat,xot),Eyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),myt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Iot),Bat,Sot),yyt=WG(dq(dq(new B2,Fat,Iot),Fat,uot),Bat,aot)}function gxn(){gxn=O,Iyt=dq(WG(new B2,(yMn(),Bat),(lWn(),hot)),_at,jot),$yt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),Cyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Iot),Bat,Sot),Ayt=dq(dq(new B2,_at,Dot),Bat,xot),Oyt=WG(dq(dq(new B2,Fat,Iot),Fat,uot),Bat,aot)}function pxn(n,t,e,i,r){var c,a;(b5(t)||t.c.i.c!=t.d.i.c)&&nrn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])),e)||b5(t)||(t.c==r?Kx(t.a,0,new wA(e)):DH(t.a,new wA(e)),i&&!FT(n.a,e)&&((a=BB(mMn(t,(HXn(),vgt)),74))||(a=new km,hon(t,vgt,a)),r5(a,c=new wA(e),a.c.b,a.c),TU(n.a,c)))}function vxn(n){var t;for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).c.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function mxn(n,t,e){var i,r,c,a,u,o;if(0==(r=pbn(254&n.Db)))n.Eb=e;else{if(1==r)a=x8(Ant,HWn,1,2,5,1),0==Rmn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=x8(Ant,HWn,1,r+1,5,1),c=een(n.Eb),i=2,u=0,o=0;i<=128;i<<=1)i==t?a[o++]=e:0!=(n.Db&i)&&(a[o++]=c[u++]);n.Eb=a}n.Db|=t}function yxn(n,t,i){var r,c,a,u;for(this.b=new Np,c=0,r=0,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),167),i&&KBn(a),WB(this.b,a),c+=a.o,r+=a.p;this.b.c.length>0&&(c+=(a=BB(xq(this.b,0),167)).o,r+=a.p),c*=2,r*=2,t>1?c=IJ(e.Math.ceil(c*t)):r=IJ(e.Math.ceil(r/t)),this.a=new qwn(c,r)}function kxn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=BB(RX(n.f,t.A),57)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=BB(RX(n.f,i.C),57)).d.c,++f):s=i.a.c,w=d+(o=(s-d)/e.Math.max(2,f-h)),l=h;l<f;++l)g=(u=BB(a.Xb(l),128)).a.b,u.a.c=w-g/2,w+=o}function jxn(n,t,e,i,r,c){var a,u,o,s,h,f;for(s=e.c.length,c&&(n.c=x8(ANt,hQn,25,t.length,15,1)),a=r?0:t.length-1;r?a<t.length:a>=0;a+=r?1:-1){for(u=t[a],o=i==(kUn(),oCt)?r?abn(u,i):ean(abn(u,i)):r?ean(abn(u,i)):abn(u,i),c&&(n.c[u.p]=o.gc()),f=o.Kc();f.Ob();)h=BB(f.Pb(),11),n.d[h.p]=s++;gun(e,o)}}function Exn(n,t,e){var i,r,c,a,u,o,s,h;for(c=Gy(MD(n.b.Kc().Pb())),s=Gy(MD(Wan(t.b))),i=kL(B$(n.a),s-e),r=kL(B$(t.a),e-c),kL(h=UR(i,r),1/(s-c)),this.a=h,this.b=new Np,u=!0,(a=n.b.Kc()).Pb();a.Ob();)o=Gy(MD(a.Pb())),u&&o-e>D3n&&(this.b.Fc(e),u=!1),this.b.Fc(o);u&&this.b.Fc(e)}function Txn(n){var t,e,i,r;if(hKn(n,n.n),n.d.c.length>0){for(nk(n.c);pAn(n,BB(n0(new Wb(n.e.a)),121))<n.e.a.c.length;){for(r=(t=Ryn(n)).e.e-t.d.e-t.a,t.e.j&&(r=-r),i=new Wb(n.e.a);i.a<i.c.c.length;)(e=BB(n0(i),121)).j&&(e.e+=r);nk(n.c)}nk(n.c),pCn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}}function Mxn(n,t){var e,i,r,c,a;for(r=BB(h6(n.a,(LEn(),Mst)),15).Kc();r.Ob();)switch(i=BB(r.Pb(),101),e=BB(xq(i.j,0),113).d.j,m$(c=new t_(i.j),new Jr),t.g){case 1:NEn(n,c,e,(Irn(),Dst),1);break;case 0:NEn(n,new s1(c,0,a=_Ln(c)),e,(Irn(),Dst),0),NEn(n,new s1(c,a,c.c.length),e,Dst,1)}}function Sxn(n,t){var e,i;if(Nun(),e=T5(cin(),t.tg())){if(i=e.j,cL(n,239))return rZ(BB(n,33))?SN(i,(rpn(),sMt))||SN(i,hMt):SN(i,(rpn(),sMt));if(cL(n,352))return SN(i,(rpn(),uMt));if(cL(n,186))return SN(i,(rpn(),fMt));if(cL(n,354))return SN(i,(rpn(),oMt))}return!0}function Pxn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak())&&a!=t)throw Hp(new _y(C7n));return BB(ovn(n,t,e),72)}function Ixn(n,t){if(t instanceof Object)try{if(t.__java$exception=n,-1!=navigator.userAgent.toLowerCase().indexOf("msie")&&$doc.documentMode<9)return;var e=n;Object.defineProperties(t,{cause:{get:function(){var n=e.Zd();return n&&n.Xd()}},suppressed:{get:function(){return e.Yd()}}})}catch(i){}}function Cxn(n,t){var e,i,r,c,a;if(i=t>>5,t&=31,i>=n.d)return n.e<0?(ODn(),Ytt):(ODn(),eet);if(c=n.d-i,QSn(r=x8(ANt,hQn,25,c+1,15,1),c,n.a,i,t),n.e<0){for(e=0;e<i&&0==n.a[e];e++);if(e<i||t>0&&n.a[e]<<32-t!=0){for(e=0;e<c&&-1==r[e];e++)r[e]=0;e==c&&++c,++r[e]}}return X0(a=new lU(n.e,c,r)),a}function Oxn(n){var t,e,i,r;return e=new $w(r=WJ(n)),i=new Lw(r),gun(t=new Np,(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),gun(t,(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),BB(P4($V(AV(new Rq(null,new w1(t,16)),e),i),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)}function Axn(n,t,e,i){var r,c,a,u,o;if(ZM(),u=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),t),r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak()))throw Hp(new _y(C7n));sln(n,EPn(n,t,e),u?BB(i,72):Z3(t,i))}function $xn(n,t){var e,i,r;return ZM(),!!t.$j()||-2==t.Zj()&&(t==(TOn(),lLt)||t==sLt||t==hLt||t==fLt||!(Awn(r=n.Tg(),t)>=0)&&(!(e=Fqn((CPn(),Z$t),r,t))||((i=e.Zj())>1||-1==i)&&3!=DW(B7(Z$t,e))))}function Lxn(n,t,e,i){var r,c,a,u,o;return u=PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82)),JJ(u)==JJ(o)||Itn(o,u)?null:(a=XJ(t))==e?i:(c=BB(RX(n.a,a),10))&&(r=c.e)?r:null}function Nxn(n,t){var e;switch(OTn(t,"Label side selection ("+(e=BB(mMn(n,(HXn(),Jdt)),276))+")",1),e.g){case 0:TAn(n,(Xyn(),jIt));break;case 1:TAn(n,(Xyn(),EIt));break;case 2:sBn(n,(Xyn(),jIt));break;case 3:sBn(n,(Xyn(),EIt));break;case 4:uDn(n,(Xyn(),jIt));break;case 5:uDn(n,(Xyn(),EIt))}HSn(t)}function xxn(n,t,e){var i,r,c,a,u;if((c=n[lj(e,n.length)])[0].k==(uSn(),Mut))for(r=fj(e,c.length),u=t.j,i=0;i<u.c.length;i++)l1(i,u.c.length),a=BB(u.c[i],11),(e?a.j==(kUn(),oCt):a.j==(kUn(),ICt))&&qy(TD(mMn(a,(hWn(),elt))))&&(c5(u,i,BB(mMn(c[r],(hWn(),dlt)),11)),r+=e?1:-1)}function Dxn(n,t){var e,i,r,c,a;a=new Np,e=t;do{(c=BB(RX(n.b,e),128)).B=e.c,c.D=e.d,a.c[a.c.length]=c,e=BB(RX(n.k,e),17)}while(e);return l1(0,a.c.length),(i=BB(a.c[0],128)).j=!0,i.A=BB(i.d.a.ec().Kc().Pb(),17).c.i,(r=BB(xq(a,a.c.length-1),128)).q=!0,r.C=BB(r.d.a.ec().Kc().Pb(),17).d.i,a}function Rxn(n){if(null==n.g)switch(n.p){case 0:n.g=fZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.g=Pnn(D3(n));break;case 2:n.g=fun(Q1(n));break;case 3:n.g=OW(n);break;case 4:n.g=new Nb(CW(n));break;case 6:n.g=jgn(AW(n));break;case 5:n.g=iln(hJ(n));break;case 7:n.g=rln(_3(n))}return n.g}function Kxn(n){if(null==n.n)switch(n.p){case 0:n.n=lZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.n=Pnn(R3(n));break;case 2:n.n=fun(Y1(n));break;case 3:n.n=LW(n);break;case 4:n.n=new Nb(NW(n));break;case 6:n.n=jgn($W(n));break;case 5:n.n=iln(fJ(n));break;case 7:n.n=rln(K3(n))}return n.n}function _xn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),307)).g=0,e.i=0,e.e.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),307)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),57).c.Kc();a.Ob();)(c=BB(a.Pb(),57)).a!=e&&(TU(e.e,c),++c.a.g,++c.a.i)}function Fxn(n,t){var e,i,r;if(!ZU(n.a,t.b))throw Hp(new Fy("Invalid hitboxes for scanline overlap calculation."));for(r=!1,i=new Fb(new BR(new xN(new _b(n.a.a).a).b));aS(i.a.a);)if(e=BB(mx(i.a).cd(),65),eon(t.b,e))xj(n.b.a,t.b,e),r=!0;else if(r)break}function Bxn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xI(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DCt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GCt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),XBn(n,i,t)}function Hxn(n,t){var e,i,r,c,a,u,o,s;r=t?new pc:new vc,c=!1;do{for(c=!1,a=(t?ean(n.b):n.b).Kc();a.Ob();)for(s=a0(BB(a.Pb(),29).a),t||new fy(s),o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),r.Mb(u)&&(i=u,e=BB(mMn(u,(hWn(),Rft)),305),c=eRn(i,t?e.b:e.k,t,!1))}while(c)}function qxn(n,t,e){var i,r,c,a;for(OTn(e,"Longest path layering",1),n.a=t,a=n.a.a,n.b=x8(ANt,hQn,25,a.c.length,15,1),i=0,c=new Wb(a);c.a<c.c.c.length;)BB(n0(c),10).p=i,n.b[i]=-1,++i;for(r=new Wb(a);r.a<r.c.c.length;)D$n(n,BB(n0(r),10));a.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,HSn(e)}function Gxn(n,t){var e,i,r;t.a?(ZU(n.b,t.b),n.a[t.b.i]=BB(kK(n.b,t.b),81),(e=BB(yK(n.b,t.b),81))&&(n.a[e.i]=t.b)):(!!(i=BB(kK(n.b,t.b),81))&&i==n.a[t.b.i]&&!!i.d&&i.d!=t.b.d&&i.f.Fc(t.b),!!(r=BB(yK(n.b,t.b),81))&&n.a[r.i]==t.b&&!!r.d&&r.d!=t.b.d&&t.b.f.Fc(r),MN(n.b,t.b))}function zxn(n,t){var i,r,c,a,u,o;return a=n.d,(o=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,o=0),t.o.b=o,u=e.Math.floor(o/2),qIn(r=new ISn,(kUn(),ICt)),IZ(r,t),r.n.b=u,qIn(c=new ISn,oCt),IZ(c,t),c.n.b=u,MZ(n,r),qan(i=new wY,n),hon(i,vgt,null),SZ(i,c),MZ(i,a),jFn(t,n,i),sIn(n,i),i}function Uxn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=new B2,e.Hc((bDn(),bft))&&(Jcn(t,byt),Jcn(t,dyt)),(e.Hc(dft)||qy(TD(mMn(n,(HXn(),ugt)))))&&(Jcn(t,dyt),e.Hc(gft)&&Jcn(t,gyt)),e.Hc(lft)&&Jcn(t,lyt),e.Hc(vft)&&Jcn(t,pyt),e.Hc(wft)&&Jcn(t,wyt),e.Hc(sft)&&Jcn(t,hyt),e.Hc(fft)&&Jcn(t,fyt),t}function Xxn(n,t){var e,i,r,c,a,u,o,s,h;return c=(e=n.d)+(i=t.d),a=n.e!=t.e?-1:1,2==c?(h=dG(o=cbn(e0(n.a[0],UQn),e0(t.a[0],UQn))),0==(s=dG(jz(o,32)))?new X6(a,h):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[h,s]))):(Dfn(n.a,e,t.a,i,r=x8(ANt,hQn,25,c,15,1)),X0(u=new lU(a,c,r)),u)}function Wxn(n,t,e,i){var r,c;return t?0==(r=n.a.ue(e.d,t.d))?(i.d=pR(t,e.e),i.b=!0,t):(c=r<0?0:1,t.a[c]=Wxn(n,t.a[c],e,i),Vy(t.a[c])&&(Vy(t.a[1-c])?(t.b=!0,t.a[0].b=!1,t.a[1].b=!1):Vy(t.a[c].a[c])?t=wrn(t,1-c):Vy(t.a[c].a[1-c])&&(t=r2(t,1-c))),t):e}function Vxn(n,t,i){var r,c,a,u;c=n.i,r=n.n,Y5(n,(Dtn(),Git),c.c+r.b,i),Y5(n,Uit,c.c+c.b-r.c-i[2],i),u=c.b-r.b-r.c,i[0]>0&&(i[0]+=n.d,u-=i[0]),i[2]>0&&(i[2]+=n.d,u-=i[2]),a=e.Math.max(0,u),i[1]=e.Math.max(i[1],u),Y5(n,zit,c.c+r.b+i[0]-(i[1]-u)/2,i),t==zit&&(n.c.b=a,n.c.c=c.c+r.b+(a-u)/2)}function Qxn(){this.c=x8(xNt,qQn,25,(kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,15,1),this.b=x8(xNt,qQn,25,Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt]).length,15,1),this.a=x8(xNt,qQn,25,Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt]).length,15,1),mS(this.c,RQn),mS(this.b,KQn),mS(this.a,KQn)}function Yxn(n,t,e){var i,r,c,a;if(t<=e?(r=t,c=e):(r=e,c=t),i=0,null==n.b)n.b=x8(ANt,hQn,25,2,15,1),n.b[0]=r,n.b[1]=c,n.c=!0;else{if(i=n.b.length,n.b[i-1]+1==r)return void(n.b[i-1]=c);a=x8(ANt,hQn,25,i+2,15,1),aHn(n.b,0,a,0,i),n.b=a,n.b[i-1]>=r&&(n.c=!1,n.a=!1),n.b[i++]=r,n.b[i]=c,n.c||T$n(n)}}function Jxn(n,t,e){var i,r,c,a,u,o,s;for(s=t.d,n.a=new J6(s.c.length),n.c=new xp,u=new Wb(s);u.a<u.c.c.length;)a=BB(n0(u),101),c=new Fan(null),WB(n.a,c),VW(n.c,a,c);for(n.b=new xp,vIn(n,t),i=0;i<s.c.length-1;i++)for(o=BB(xq(t.d,i),101),r=i+1;r<s.c.length;r++)WLn(n,o,BB(xq(t.d,r),101),e)}function Zxn(n,t,e){var i,r,c,a,u,o;if(!h3(t)){for(OTn(o=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),u=new Ca,a=0,c=t.Kc();c.Ob();)i=BB(c.Pb(),86),u=Wen(Pun(Gk(xnt,1),HWn,20,0,[u,new bg(i)])),a<i.f.b&&(a=i.f.b);for(r=t.Kc();r.Ob();)hon(i=BB(r.Pb(),86),(qqn(),ukt),a);HSn(o),Zxn(n,u,e)}}function nDn(n,t){var i,r,c,a,u,o,s;for(i=KQn,uSn(),o=Iut,c=new Wb(t.a);c.a<c.c.c.length;)(a=(r=BB(n0(c),10)).k)!=Iut&&(null==(u=MD(mMn(r,(hWn(),plt))))?(i=e.Math.max(i,0),r.n.b=i+XN(n.a,a,o)):r.n.b=(kW(u),u)),s=XN(n.a,a,o),r.n.b<i+s+r.d.d&&(r.n.b=i+s+r.d.d),i=r.n.b+r.o.b+r.d.a,o=a}function tDn(n,t,e){var i,r,c;for(qan(c=new EAn(XXn(qSn(cDn(t,!1,!1)),Gy(MD(ZAn(t,(Epn(),pct))))+n.a)),t),VW(n.b,t,c),e.c[e.c.length]=c,!t.n&&(t.n=new eU(zOt,t,1,7)),r=new AL(t.n);r.e!=r.i.gc();)i=JRn(n,BB(kpn(r),137),!0,0,0),e.c[e.c.length]=i;return c}function eDn(n,t,e,i,r){var c,a,u;if(n.d&&n.d.lg(r),Dvn(n,e,BB(r.Xb(0),33),!1))return!0;if(Dvn(n,i,BB(r.Xb(r.gc()-1),33),!0))return!0;if(NMn(n,r))return!0;for(u=r.Kc();u.Ob();)for(a=BB(u.Pb(),33),c=t.Kc();c.Ob();)if(_Dn(n,a,BB(c.Pb(),33)))return!0;return!1}function iDn(n,t,e){var i,r,c,a,u,o,s,h,f;f=t.c.length;n:for(c=BB((s=n.Yg(e))>=0?n._g(s,!1,!0):cOn(n,e,!1),58).Kc();c.Ob();){for(r=BB(c.Pb(),56),h=0;h<f;++h)if(l1(h,t.c.length),o=(a=BB(t.c[h],72)).dd(),u=a.ak(),i=r.bh(u,!1),null==o?null!=i:!Nfn(o,i))continue n;return r}return null}function rDn(n,t,e,i){var r,c,a,u;for(r=BB(DSn(t,(kUn(),ICt)).Kc().Pb(),11),c=BB(DSn(t,oCt).Kc().Pb(),11),u=new Wb(n.j);u.a<u.c.c.length;){for(a=BB(n0(u),11);0!=a.e.c.length;)MZ(BB(xq(a.e,0),17),r);for(;0!=a.g.c.length;)SZ(BB(xq(a.g,0),17),c)}e||hon(t,(hWn(),hlt),null),i||hon(t,(hWn(),flt),null)}function cDn(n,t,e){var i,r;if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)return qun(n);if(i=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),t&&(sqn((!i.a&&(i.a=new $L(xOt,i,5)),i.a)),Cen(i,0),Aen(i,0),Ten(i,0),Oen(i,0)),e)for(!n.a&&(n.a=new eU(FOt,n,6,6)),r=n.a;r.i>1;)fDn(r,r.i-1);return i}function aDn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Comment post-processing",1),c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),i=new Np,u=new Wb(r.a);u.a<u.c.c.length;)a=BB(n0(u),10),o=BB(mMn(a,(hWn(),Klt)),15),e=BB(mMn(a,Dft),15),(o||e)&&(Wzn(a,o,e),o&&gun(i,o),e&&gun(i,e));gun(r.a,i)}HSn(t)}function uDn(n,t){var e,i,r,c,a,u;for(e=new Lp,r=new Wb(n.b);r.a<r.c.c.length;){for(u=!0,i=0,a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)switch((c=BB(n0(a),10)).k.g){case 4:++i;case 1:w3(e,c);break;case 0:oIn(c,t);default:e.b==e.c||p_n(e,i,u,!1,t),u=!1,i=0}e.b==e.c||p_n(e,i,u,!0,t)}}function oDn(n,t){var e,i,r,c,a,u;for(r=new Np,e=0;e<=n.i;e++)(i=new HX(t)).p=n.i-e,r.c[r.c.length]=i;for(u=new Wb(n.o);u.a<u.c.c.length;)PZ(a=BB(n0(u),10),BB(xq(r,n.i-n.f[a.p]),29));for(c=new Wb(r);c.a<c.c.c.length;)0==BB(n0(c),29).a.c.length&&AU(c);t.b.c=x8(Ant,HWn,1,0,5,1),gun(t.b,r)}function sDn(n,t){var e,i,r,c,a,u;for(e=0,u=new Wb(t);u.a<u.c.c.length;){for(a=BB(n0(u),11),nhn(n.b,n.d[a.p]),r=new m6(a.b);y$(r.a)||y$(r.b);)(c=ME(n,a==(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c?i.d:i.c))>n.d[a.p]&&(e+=n5(n.b,c),d3(n.a,iln(c)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function hDn(n,t,e){var i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)0==(!(i=BB(kpn(r),33)).a&&(i.a=new eU(UOt,i,10,11)),i.a).i||(c+=hDn(n,i,!1));if(e)for(a=JJ(t);a;)c+=(!a.a&&(a.a=new eU(UOt,a,10,11)),a.a).i,a=JJ(a);return c}function fDn(n,t){var e,i,r,c;return n.ej()?(i=null,r=n.fj(),n.ij()&&(i=n.kj(n.pi(t),null)),e=n.Zi(4,c=Lyn(n,t),null,t,r),n.bj()&&null!=c?(i=n.dj(c,i))?(i.Ei(e),i.Fi()):n.$i(e):i?(i.Ei(e),i.Fi()):n.$i(e),c):(c=Lyn(n,t),n.bj()&&null!=c&&(i=n.dj(c,null))&&i.Fi(),c)}function lDn(n){var t,i,r,c,a,u,o,s,h,f;for(h=n.a,t=new Rv,s=0,r=new Wb(n.d);r.a<r.c.c.length;){for(f=0,_rn((i=BB(n0(r),222)).b,new $n),u=spn(i.b,0);u.b!=u.d.c;)a=BB(b3(u),222),t.a._b(a)&&(c=i.c,f<(o=a.c).d+o.a+h&&f+c.a+h>o.d&&(f=o.d+o.a+h));i.c.d=f,t.a.zc(i,t),s=e.Math.max(s,i.c.d+i.c.a)}return s}function bDn(){bDn=O,hft=new LP("COMMENTS",0),lft=new LP("EXTERNAL_PORTS",1),bft=new LP("HYPEREDGES",2),wft=new LP("HYPERNODES",3),dft=new LP("NON_FREE_PORTS",4),gft=new LP("NORTH_SOUTH_PORTS",5),vft=new LP(G1n,6),sft=new LP("CENTER_LABELS",7),fft=new LP("END_LABELS",8),pft=new LP("PARTITIONS",9)}function wDn(n){var t,e,i,r,c;for(r=new Np,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||(r.c[r.c.length]=c));return r}function dDn(n){var t,e,i,r,c;for(r=new Rv,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||r.a.zc(c,r));return r}function gDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function pDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function vDn(n,t,e,i,r,c){var a,u,o;if(u=32,i<0){if(t[0]>=n.length)return!1;if(43!=(u=fV(n,t[0]))&&45!=u)return!1;if(++t[0],(i=UCn(n,t))<0)return!1;45==u&&(i=-i)}return 32==u&&t[0]-e==2&&2==r.b&&(a=(o=(new AT).q.getFullYear()-sQn+sQn-80)%100,c.a=i==a,i+=100*(o/100|0)+(i<a?100:0)),c.p=i,!0}function mDn(n,t){var i,r,c;JJ(n)&&(c=BB(mMn(t,(HXn(),Fgt)),174),GC(ZAn(n,ept))===GC((QEn(),YIt))&&Ypn(n,ept,QIt),GM(),r=qzn(new Dy(JJ(n)),new JN(JJ(n)?new Dy(JJ(n)):null,n),!1,!0),orn(c,(mdn(),DCt)),(i=BB(mMn(t,Hgt),8)).a=e.Math.max(r.a,i.a),i.b=e.Math.max(r.b,i.b))}function yDn(n,t,e){var i,r,c,a,u,o;for(a=BB(mMn(n,(hWn(),nlt)),15).Kc();a.Ob();){switch(c=BB(a.Pb(),10),BB(mMn(c,(HXn(),kgt)),163).g){case 2:PZ(c,t);break;case 4:PZ(c,e)}for(r=new oz(ZL(hbn(c).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c&&i.d||(u=!i.d,o=BB(mMn(i,mlt),11),u?MZ(i,o):SZ(i,o))}}function kDn(){kDn=O,Bst=new WV(mJn,0,(kUn(),sCt),sCt),Gst=new WV(kJn,1,SCt,SCt),Fst=new WV(yJn,2,oCt,oCt),Xst=new WV(jJn,3,ICt,ICt),qst=new WV("NORTH_WEST_CORNER",4,ICt,sCt),Hst=new WV("NORTH_EAST_CORNER",5,sCt,oCt),Ust=new WV("SOUTH_WEST_CORNER",6,SCt,ICt),zst=new WV("SOUTH_EAST_CORNER",7,oCt,SCt)}function jDn(){jDn=O,MMt=Pun(Gk(LNt,1),FQn,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368e3,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]),e.Math.pow(2,-65)}function EDn(n,t){var e,i,r,c,a;if(0==n.c.length)return new rC(iln(0),iln(0));for(e=(l1(0,n.c.length),BB(n.c[0],11)).j,a=0,c=t.g,i=t.g+1;a<n.c.length-1&&e.g<c;)e=(l1(++a,n.c.length),BB(n.c[a],11)).j;for(r=a;r<n.c.length-1&&e.g<i;)++r,e=(l1(a,n.c.length),BB(n.c[a],11)).j;return new rC(iln(a),iln(r))}function TDn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=t.c.length,l1(i,t.c.length),o=(u=BB(t.c[i],286)).a.o.a,l=u.c,b=0,h=u.c;h<=u.f;h++){if(o<=n.a[h])return h;for(f=n.a[h],s=null,c=i+1;c<a;c++)l1(c,t.c.length),(r=BB(t.c[c],286)).c<=h&&r.f>=h&&(s=r);s&&(f=e.Math.max(f,s.a.o.a)),f>b&&(l=h,b=f)}return l}function MDn(n,t,e){var i,r,c;if(n.e=e,n.d=0,n.b=0,n.f=1,n.i=t,16==(16&n.e)&&(n.i=pKn(n.i)),n.j=n.i.length,QXn(n),c=Vdn(n),n.d!=n.j)throw Hp(new ak(kWn((u$(),w8n))));if(n.g){for(i=0;i<n.g.a.c.length;i++)if(r=BB(bW(n.g,i),584),n.f<=r.a)throw Hp(new ak(kWn((u$(),d8n))));n.g.a.c=x8(Ant,HWn,1,0,5,1)}return c}function SDn(n,t){var e,i,r;if(null==t){for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(null==(null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e}else for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(mK(t,null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e;return null}function PDn(n,t){var e;switch(e=null,t.g){case 1:n.e.Xe((sWn(),ePt))&&(e=BB(n.e.We(ePt),249));break;case 3:n.e.Xe((sWn(),iPt))&&(e=BB(n.e.We(iPt),249));break;case 2:n.e.Xe((sWn(),tPt))&&(e=BB(n.e.We(tPt),249));break;case 4:n.e.Xe((sWn(),rPt))&&(e=BB(n.e.We(rPt),249))}return!e&&(e=BB(n.e.We((sWn(),ZSt)),249)),e}function IDn(n,t,e){var i,r,c,a,u,o;for(t.p=1,r=t.c,o=xwn(t,(ain(),qvt)).Kc();o.Ob();)for(i=new Wb(BB(o.Pb(),11).g);i.a<i.c.c.length;)t!=(u=BB(n0(i),17).d.i)&&u.c.p<=r.p&&((c=r.p+1)==e.b.c.length?((a=new HX(e)).p=c,WB(e.b,a),PZ(u,a)):PZ(u,a=BB(xq(e.b,c),29)),IDn(n,u,e))}function CDn(n,t,i){var r,c,a,u,o,s;for(c=i,a=0,o=new Wb(t);o.a<o.c.c.length;)Ypn(u=BB(n0(o),33),(Uyn(),Ljt),iln(c++)),s=wDn(u),r=e.Math.atan2(u.j+u.f/2,u.i+u.g/2),(r+=r<0?Z3n:0)<.7853981633974483||r>p4n?m$(s,n.b):r<=p4n&&r>v4n?m$(s,n.d):r<=v4n&&r>m4n?m$(s,n.c):r<=m4n&&m$(s,n.a),a=CDn(n,s,a);return c}function ODn(){var n;for(ODn=O,Jtt=new X6(1,1),net=new X6(1,10),eet=new X6(0,0),Ytt=new X6(-1,1),Ztt=Pun(Gk(oet,1),sVn,91,0,[eet,Jtt,new X6(1,2),new X6(1,3),new X6(1,4),new X6(1,5),new X6(1,6),new X6(1,7),new X6(1,8),new X6(1,9),net]),tet=x8(oet,sVn,91,32,0,1),n=0;n<tet.length;n++)tet[n]=npn(yz(1,n))}function ADn(n,t,e,i,r,c){var a,u,o,s;for(u=!jE(AV(n.Oc(),new aw(new Je))).sd((dM(),tit)),a=n,c==(Ffn(),HPt)&&(a=cL(a,152)?o6(BB(a,152)):cL(a,131)?BB(a,131).a:cL(a,54)?new fy(a):new IT(a)),s=a.Kc();s.Ob();)(o=BB(s.Pb(),70)).n.a=t.a,o.n.b=u?t.b+(i.b-o.o.b)/2:r?t.b:t.b+i.b-o.o.b,t.a+=o.o.a+e}function $Dn(n,t,e,i){var r,c,a,u,o;for(r=(i.c+i.a)/2,yQ(t.j),DH(t.j,r),yQ(e.e),DH(e.e,r),o=new zj,a=new Wb(n.f);a.a<a.c.c.length;)Rjn(o,t,u=BB(n0(a),129).a),Rjn(o,e,u);for(c=new Wb(n.k);c.a<c.c.c.length;)Rjn(o,t,u=BB(n0(c),129).b),Rjn(o,e,u);return o.b+=2,o.a+=LQ(t,n.q),o.a+=LQ(n.q,e),o}function LDn(n,t,e){var i,r,c,a,u;if(!h3(t)){for(OTn(u=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),a=new Aa,c=null,r=t.Kc();r.Ob();)i=BB(r.Pb(),86),a=Wen(Pun(Gk(xnt,1),HWn,20,0,[a,new bg(i)])),c&&(hon(c,(qqn(),bkt),i),hon(i,ckt,c),G8(i)==G8(c)&&(hon(c,wkt,i),hon(i,akt,c))),c=i;HSn(u),LDn(n,a,e)}}function NDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.d,n.f==(G7(),rrt)?u+=(e.a-n.e.b)/2:n.f==irt&&(u+=e.a-n.e.b),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).b=u,u+=a.b+n.a,n.b.g){case 0:c.a=e.c+t.b;break;case 1:c.a=e.c+t.b+(e.b-a.a)/2;break;case 2:c.a=e.c+e.b-t.c-a.a}i.tf(c)}}function xDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.c,n.b==(J9(),Qit)?u+=(e.b-n.e.a)/2:n.b==Jit&&(u+=e.b-n.e.a),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).a=u,u+=a.a+n.a,n.f.g){case 0:c.b=e.d+t.d;break;case 1:c.b=e.d+t.d+(e.a-a.b)/2;break;case 2:c.b=e.d+e.a-t.a-a.b}i.tf(c)}}function DDn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=new xI(s,l),h=new xI(a,b),r=s,e.p||(r+=n.c),o=new xI(r+=e.F+e.v*n.b,l),f=new xI(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xI(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function RDn(n){NM(n,new MTn(vj(wj(pj(gj(new du,_5n),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Qu))),u2(n,_5n,QJn,LCt),u2(n,_5n,vZn,15),u2(n,_5n,yZn,iln(0)),u2(n,_5n,VJn,dZn)}function KDn(){var n,t,e,i,r,c;for(KDn=O,QLt=x8(NNt,v6n,25,255,15,1),YLt=x8(ONt,WVn,25,16,15,1),t=0;t<255;t++)QLt[t]=-1;for(e=57;e>=48;e--)QLt[e]=e-48<<24>>24;for(i=70;i>=65;i--)QLt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)QLt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)YLt[c]=48+c&QVn;for(n=10;n<=15;n++)YLt[n]=65+n-10&QVn}function _Dn(n,t,e){var i,r,c,a,u,o,s,h;return u=t.i-n.g/2,o=e.i-n.g/2,s=t.j-n.g/2,h=e.j-n.g/2,c=t.g+n.g/2,a=e.g+n.g/2,i=t.f+n.g/2,r=e.f+n.g/2,u<o+a&&o<u&&s<h+r&&h<s||o<u+c&&u<o&&h<s+i&&s<h||u<o+a&&o<u&&s<h&&h<s+i||o<u+c&&u<o&&s<h+r&&h<s}function FDn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xI(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DCt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GCt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),qy(TD(mMn(n,Bgt)))||UBn(n,i,t)}function BDn(n,t){var e,i,r,c;for(c=abn(t,(kUn(),SCt)).Kc();c.Ob();)i=BB(c.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=abn(t,sCt).Kc();r.Ob();)i=BB(r.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[e.p].d),n.i[t.p].a))}function HDn(n){var t,e,i,r,c;if(!n.c){if(c=new Eo,null==(t=P$t).a.zc(n,t)){for(i=new AL(a4(n));i.e!=i.i.gc();)cL(r=lFn(e=BB(kpn(i),87)),88)&&pX(c,HDn(BB(r,26))),f9(c,e);t.a.Bc(n),t.a.gc()}$wn(c),chn(c),n.c=new NO((BB(Wtn(QQ((QX(),t$t).o),15),18),c.i),c.g),P5(n).b&=-33}return n.c}function qDn(n){var t;if(10!=n.c)throw Hp(new ak(kWn((u$(),g8n))));switch(t=n.a){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw Hp(new ak(kWn((u$(),U8n))))}return t}function GDn(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==IQn&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19!=0)return"-"+GDn(aon(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Aqn(e,F5(AQn),!0),t=""+TE(ltt),0!=e.l||0!=e.m||0!=e.h)for(r=9-t.length;r>0;r--)t="0"+t;i=t+i}return i}function zDn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var n="__proto__",t=Object.create(null);return void 0===t[n]&&0==Object.getOwnPropertyNames(t).length&&(t[n]=42,42===t[n]&&0!=Object.getOwnPropertyNames(t).length)}function UDn(n){var t,e,i,r,c,a,u;for(t=!1,e=0,r=new Wb(n.d.b);r.a<r.c.c.length;)for((i=BB(n0(r),29)).p=e++,a=new Wb(i.a);a.a<a.c.c.length;)c=BB(n0(a),10),!t&&!h3(hbn(c))&&(t=!0);u=EG((Ffn(),BPt),Pun(Gk(WPt,1),$Vn,103,0,[_Pt,FPt])),t||(orn(u,HPt),orn(u,KPt)),n.a=new ltn(u),$U(n.f),$U(n.b),$U(n.e),$U(n.g)}function XDn(n,t,e){var i,r,c,a,u,o,s,h,f;for(i=e.c,r=e.d,u=g1(t.c),o=g1(t.d),i==t.c?(u=lLn(n,u,r),o=sMn(t.d)):(u=sMn(t.c),o=lLn(n,o,r)),r5(s=new Kj(t.a),u,s.a,s.a.a),r5(s,o,s.c.b,s.c),a=t.c==i,f=new Jv,c=0;c<s.b-1;++c)h=new rC(BB(Dpn(s,c),8),BB(Dpn(s,c+1),8)),a&&0==c||!a&&c==s.b-2?f.b=h:WB(f.a,h);return f}function WDn(n,t){var e,i,r,c;if(0!=(c=n.j.g-t.j.g))return c;if(e=BB(mMn(n,(HXn(),ipt)),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function VDn(n,t,i,r){var c,a,u,o;if(F3((q_(),new oz(ZL(hbn(t).a.Kc(),new h))))>=n.a)return-1;if(!eTn(t,i))return-1;if(h3(BB(r.Kb(t),20)))return 1;for(c=0,u=BB(r.Kb(t),20).Kc();u.Ob();){if(-1==(o=VDn(n,(a=BB(u.Pb(),17)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,o))>n.c-1)return-1}return c+1}function QDn(n,t){var e,i,r,c,a,u;if(GC(t)===GC(n))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),u=n.gc(),i.gc()!=u)return!1;if(a=i.Kc(),n.ni()){for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),null==r?null!=c:!Nfn(r,c))return!1}else for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),GC(r)!==GC(c))return!1;return!0}function YDn(n,t){var e,i,r,c,a,u;if(n.f>0)if(n.qj(),null!=t){for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(Nfn(t,(r=i[a]).dd()))return!0}else for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(r=i[a],GC(t)===GC(r.dd()))return!0;return!1}function JDn(n,t,e){var i,r,c,a;OTn(e,"Orthogonally routing hierarchical port edges",1),n.a=0,NGn(t,i=UHn(t)),Qqn(n,t,i),fUn(t),r=BB(mMn(t,(HXn(),ept)),98),Izn((l1(0,(c=t.b).c.length),BB(c.c[0],29)),r,t),Izn(BB(xq(c,c.c.length-1),29),r,t),TBn((l1(0,(a=t.b).c.length),BB(a.c[0],29))),TBn(BB(xq(a,a.c.length-1),29)),HSn(e)}function ZDn(n){switch(n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n-48<<24>>24;case 97:case 98:case 99:case 100:case 101:case 102:return n-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return n-65+10<<24>>24;default:throw Hp(new Mk("Invalid hexadecimal"))}}function nRn(n,t,e){var i,r,c,a;for(OTn(e,"Processor order nodes",2),n.a=Gy(MD(mMn(t,(IAn(),xkt)))),r=new YT,a=spn(t.b,0);a.b!=a.d.c;)qy(TD(mMn(c=BB(b3(a),86),(qqn(),dkt))))&&r5(r,c,r.c.b,r.c);Px(0!=r.b),KHn(n,i=BB(r.a.a.c,86)),!e.b&&qin(e,1),BRn(n,i,0-Gy(MD(mMn(i,(qqn(),ukt))))/2,0),!e.b&&qin(e,1),HSn(e)}function tRn(){tRn=O,Rit=new HS("SPIRAL",0),$it=new HS("LINE_BY_LINE",1),Lit=new HS("MANHATTAN",2),Ait=new HS("JITTER",3),xit=new HS("QUADRANTS_LINE_BY_LINE",4),Dit=new HS("QUADRANTS_MANHATTAN",5),Nit=new HS("QUADRANTS_JITTER",6),Oit=new HS("COMBINE_LINE_BY_LINE_MANHATTAN",7),Cit=new HS("COMBINE_JITTER_MANHATTAN",8)}function eRn(n,t,e,i){var r,c,a,u,o,s;for(o=Njn(n,e),s=Njn(t,e),r=!1;o&&s&&(i||myn(o,s,e));)a=Njn(o,e),u=Njn(s,e),A7(t),A7(n),c=o.c,rGn(o,!1),rGn(s,!1),e?(Qyn(t,s.p,c),t.p=s.p,Qyn(n,o.p+1,c),n.p=o.p):(Qyn(n,o.p,c),n.p=o.p,Qyn(t,s.p+1,c),t.p=s.p),PZ(o,null),PZ(s,null),o=a,s=u,r=!0;return r}function iRn(n,t,e,i){var r,c,a,u,o;for(r=!1,c=!1,u=new Wb(i.j);u.a<u.c.c.length;)GC(mMn(a=BB(n0(u),11),(hWn(),dlt)))===GC(e)&&(0==a.g.c.length?0==a.e.c.length||(r=!0):c=!0);return o=0,r&&r^c?o=e.j==(kUn(),sCt)?-n.e[i.c.p][i.p]:t-n.e[i.c.p][i.p]:c&&r^c?o=n.e[i.c.p][i.p]+1:r&&c&&(o=e.j==(kUn(),sCt)?0:t/2),o}function rRn(n,t,e,i,r,c,a,u){var o,s,h;for(o=0,null!=t&&(o^=vvn(t.toLowerCase())),null!=e&&(o^=vvn(e)),null!=i&&(o^=vvn(i)),null!=a&&(o^=vvn(a)),null!=u&&(o^=vvn(u)),s=0,h=c.length;s<h;s++)o^=vvn(c[s]);n?o|=256:o&=-257,r?o|=16:o&=-17,this.f=o,this.i=null==t?null:(kW(t),t),this.a=e,this.d=i,this.j=c,this.g=a,this.e=u}function cRn(n,t,e){var i,r;switch(r=null,t.g){case 1:gcn(),r=Nut;break;case 2:gcn(),r=Dut}switch(i=null,e.g){case 1:gcn(),i=xut;break;case 2:gcn(),i=Lut;break;case 3:gcn(),i=Rut;break;case 4:gcn(),i=Kut}return r&&i?KB(n.j,new Hf(new Jy(Pun(Gk(Lnt,1),HWn,169,0,[BB(yX(r),169),BB(yX(i),169)])))):(SQ(),SQ(),set)}function aRn(n){var t,e,i;switch(t=BB(mMn(n,(HXn(),Hgt)),8),hon(n,Hgt,new xI(t.b,t.a)),BB(mMn(n,kdt),248).g){case 1:hon(n,kdt,(wvn(),LMt));break;case 2:hon(n,kdt,(wvn(),CMt));break;case 3:hon(n,kdt,(wvn(),AMt));break;case 4:hon(n,kdt,(wvn(),$Mt))}(n.q?n.q:(SQ(),SQ(),het))._b(spt)&&(i=(e=BB(mMn(n,spt),8)).a,e.a=e.b,e.b=i)}function uRn(n,t,e,i,r,c){if(this.b=e,this.d=r,n>=t.length)throw Hp(new Ay("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new QK(i),yrn(this.e,this.c,(kUn(),ICt)),this.i=new QK(i),yrn(this.i,this.c,oCt),this.f=new lG(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(uSn(),Mut),this.a&&gPn(this,n,t.length)}function oRn(n,t){var e,i,r,c,a,u;c=!n.B.Hc((n_n(),HCt)),a=n.B.Hc(zCt),n.a=new Hwn(a,c,n.c),n.n&&kQ(n.a.n,n.n),jy(n.g,(Dtn(),zit),n.a),t||((i=new Cgn(1,c,n.c)).n.a=n.k,mG(n.p,(kUn(),sCt),i),(r=new Cgn(1,c,n.c)).n.d=n.k,mG(n.p,SCt,r),(u=new Cgn(0,c,n.c)).n.c=n.k,mG(n.p,ICt,u),(e=new Cgn(0,c,n.c)).n.b=n.k,mG(n.p,oCt,e))}function sRn(n){var t,e,i;switch((t=BB(mMn(n.d,(HXn(),Zdt)),218)).g){case 2:e=MXn(n);break;case 3:i=new Np,JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Or),new Ar),new $r),new pr),new Id(i)),e=i;break;default:throw Hp(new Fy("Compaction not supported for "+t+" edges."))}gqn(n,e),e5(new Ib(n.g),new Sd(n))}function hRn(n,t){var e;return e=new Zn,t&&qan(e,BB(RX(n.a,DOt),94)),cL(t,470)&&qan(e,BB(RX(n.a,ROt),94)),cL(t,354)?(qan(e,BB(RX(n.a,zOt),94)),e):(cL(t,82)&&qan(e,BB(RX(n.a,KOt),94)),cL(t,239)?(qan(e,BB(RX(n.a,UOt),94)),e):cL(t,186)?(qan(e,BB(RX(n.a,XOt),94)),e):(cL(t,352)&&qan(e,BB(RX(n.a,_Ot),94)),e))}function fRn(){fRn=O,Zct=new XA((sWn(),pPt),iln(1)),cat=new XA(LPt,80),rat=new XA(SPt,5),Fct=new XA(cSt,dZn),nat=new XA(vPt,iln(1)),iat=new XA(kPt,(hN(),!0)),Qct=new WA(50),Vct=new XA(XSt,Qct),Hct=ISt,Yct=uPt,Bct=new XA(dSt,!1),Wct=USt,Xct=qSt,Uct=KSt,zct=DSt,Jct=fPt,jSn(),Gct=Cct,aat=Nct,qct=Ict,tat=Act,eat=Lct}function lRn(n){var t,e,i,r,c,a,u;for(u=new v5,a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k!=(uSn(),Mut))for(_An(u,c,new Gj),r=new oz(ZL(lbn(c).a.Kc(),new h));dAn(r);)if((i=BB(U5(r),17)).c.i.k!=Mut&&i.d.i.k!=Mut)for(e=spn(i.a,0);e.b!=e.d.c;)Yjn(u,new dP((t=BB(b3(e),8)).a,t.b));return u}function bRn(){bRn=O,RTt=new up(K4n),OM(),xTt=new $O(q4n,DTt=GTt),Lun(),LTt=new $O(_4n,NTt=WTt),$Sn(),ATt=new $O(F4n,$Tt=rTt),PTt=new $O(B4n,null),$6(),CTt=new $O(H4n,OTt=ZEt),IM(),jTt=new $O(G4n,ETt=XEt),TTt=new $O(z4n,(hN(),!1)),MTt=new $O(U4n,iln(64)),STt=new $O(X4n,!0),ITt=nTt}function wRn(n){var t,e,i,r,c;if(null==n.a)if(n.a=x8($Nt,ZYn,25,n.c.b.c.length,16,1),n.a[0]=!1,Lx(n.c,(HXn(),Upt)))for(e=BB(mMn(n.c,Upt),15).Kc();e.Ob();)(t=BB(e.Pb(),19).a)>0&&t<n.a.length&&(n.a[t]=!1);else for((c=new Wb(n.c.b)).a<c.c.c.length&&n0(c),i=1;c.a<c.c.c.length;)r=BB(n0(c),29),n.a[i++]=U$n(r)}function dRn(n,t){var e,i;switch(i=n.b,t){case 1:n.b|=1,n.b|=4,n.b|=8;break;case 2:n.b|=2,n.b|=4,n.b|=8;break;case 4:n.b|=1,n.b|=2,n.b|=4,n.b|=8;break;case 3:n.b|=16,n.b|=8;break;case 0:n.b|=32,n.b|=16,n.b|=8,n.b|=1,n.b|=2,n.b|=4}if(n.b!=i&&n.c)for(e=new AL(n.c);e.e!=e.i.gc();)AIn(P5(BB(kpn(e),473)),t)}function gRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(r=!1,u=0,o=(a=t).length;u<o;++u)c=a[u],qy((hN(),!!c.e))&&!BB(xq(n.b,c.e.p),214).s&&(r|=(s=c.e,(f=(h=BB(xq(n.b,s.p),214)).e)[l=fj(e,f.length)][0].k==(uSn(),Mut)?f[l]=$Nn(c,f[l],e?(kUn(),ICt):(kUn(),oCt)):h.c.Tf(f,e),b=DNn(n,h,e,i),xxn(h.e,h.o,e),b));return r}function pRn(n,t){var e,i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)GC(ZAn(i=BB(kpn(r),33),(sWn(),ESt)))!==GC((ufn(),mIt))&&((a=BB(ZAn(t,mPt),149))==(e=BB(ZAn(i,mPt),149))||a&&j5(a,e))&&0!=(!i.a&&(i.a=new eU(UOt,i,10,11)),i.a).i&&(c+=pRn(n,i));return c}function vRn(n){var t,e,i,r,c,a,u;for(i=0,u=0,a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),101),r=BB(P4(AV(new Rq(null,new w1(c.j,16)),new Xr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=null,i<=u?(kUn(),e=sCt,i+=r.gc()):u<i&&(kUn(),e=SCt,u+=r.gc()),t=e,JT($V(r.Oc(),new Hr),new Ad(t))}function mRn(n){var t,e,i,r,c,a,u,o;for(n.b=new vOn(new Jy((kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt]))),new Jy((Irn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))),u=0,o=(a=Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length;u<o;++u)for(c=a[u],i=0,r=(e=Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])).length;i<r;++i)t=e[i],Wjn(n.b,c,t,new Np)}function yRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lCn(),rCt)),e=n.u.Hc(tCt),i=n.u.Hc(nCt),s=n.u.Hc(cCt),f=n.B.Hc((n_n(),QCt)),h=!e&&!i&&(s||2==a.gc()),hxn(n,t),r=null,o=null,u){for(o=r=BB((c=a.Kc()).Pb(),111);c.Ob();)o=BB(c.Pb(),111);r.d.b=0,o.d.c=0,h&&!r.a&&(r.d.c=0)}f&&(DTn(a),u&&(r.d.b=0,o.d.c=0))}function kRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lCn(),rCt)),e=n.u.Hc(tCt),i=n.u.Hc(nCt),o=n.u.Hc(cCt),f=n.B.Hc((n_n(),QCt)),s=!e&&!i&&(o||2==a.gc()),V_n(n,t),h=null,r=null,u){for(r=h=BB((c=a.Kc()).Pb(),111);c.Ob();)r=BB(c.Pb(),111);h.d.d=0,r.d.a=0,s&&!h.a&&(h.d.a=0)}f&&(RTn(a),u&&(h.d.d=0,r.d.a=0))}function jRn(n,t,e){var i,r,c,a,u;if(i=t.k,t.p>=0)return!1;if(t.p=e.b,WB(e.e,t),i==(uSn(),Put)||i==Cut)for(r=new Wb(t.j);r.a<r.c.c.length;)for(u=new zw(new Wb(new Gw(BB(n0(r),11)).a.g));y$(u.a);)if(a=(c=BB(n0(u.a),17).d.i).k,t.c!=c.c&&(a==Put||a==Cut)&&jRn(n,c,e))return!0;return!0}function ERn(n){var t;return 0!=(64&n.Db)?KOn(n):((t=new fN(KOn(n))).a+=" (changeable: ",yE(t,0!=(n.Bb&k6n)),t.a+=", volatile: ",yE(t,0!=(n.Bb&M9n)),t.a+=", transient: ",yE(t,0!=(n.Bb&_Qn)),t.a+=", defaultValueLiteral: ",cO(t,n.j),t.a+=", unsettable: ",yE(t,0!=(n.Bb&T9n)),t.a+=", derived: ",yE(t,0!=(n.Bb&hVn)),t.a+=")",t.a)}function TRn(n){var t,e,i,r,c,a,u,o,s,h;for(e=NLn(n.d),c=(r=BB(mMn(n.b,(Epn(),vct)),116)).b+r.c,a=r.d+r.a,o=e.d.a*n.e+c,u=e.b.a*n.f+a,Ll(n.b,new xI(o,u)),h=new Wb(n.g);h.a<h.c.c.length;)t=UR(Fx(new xI((s=BB(n0(h),562)).g-e.a.a,s.i-e.c.a),s.a,s.b),kL(Bx(B$(VA(s.e)),s.d*s.a,s.c*s.b),-.5)),i=QA(s.e),ij(s.e,XR(t,i))}function MRn(n,t,e,i){var r,c,a,u,o;for(o=x8(xNt,sVn,104,(kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,0,2),a=0,u=(c=Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length;a<u;++a)o[(r=c[a]).g]=x8(xNt,qQn,25,n.c[r.g],15,1);return Bkn(o,n,sCt),Bkn(o,n,SCt),xmn(o,n,sCt,t,e,i),xmn(o,n,oCt,t,e,i),xmn(o,n,SCt,t,e,i),xmn(o,n,ICt,t,e,i),o}function SRn(n,t,e){if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.b,t)){if(FT(BB(RX(n.b,t),53),e))return-1}else VW(n.b,t,new Rv);if(hU(n.b,e)){if(FT(BB(RX(n.b,e),53),t))return 1}else VW(n.b,e,new Rv);return 0}function PRn(n,t,e,i){var r,c,a,u,o,s;if(null==e)for(r=BB(n.g,119),u=0;u<n.i;++u)if((a=r[u]).ak()==t)return _pn(n,a,i);return ZM(),c=BB(t,66).Oj()?BB(e,72):Z3(t,e),mA(n.e)?(s=!adn(n,t),i=Ywn(n,c,i),o=t.$j()?LY(n,3,t,null,e,pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)),s):LY(n,1,t,t.zj(),e,-1,s),i?i.Ei(o):i=o):i=Ywn(n,c,i),i}function IRn(n){var t,i,r,c,a,u;n.q!=(QEn(),WIt)&&n.q!=XIt&&(c=n.f.n.d+XH(BB(oV(n.b,(kUn(),sCt)),124))+n.c,t=n.f.n.a+XH(BB(oV(n.b,SCt),124))+n.c,r=BB(oV(n.b,oCt),124),u=BB(oV(n.b,ICt),124),a=e.Math.max(0,r.n.d-c),a=e.Math.max(a,u.n.d-c),i=e.Math.max(0,r.n.a-t),i=e.Math.max(i,u.n.a-t),r.n.d=a,u.n.d=a,r.n.a=i,u.n.a=i)}function CRn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Restoring reversed edges",1),a=new Wb(n.b);a.a<a.c.c.length;)for(u=new Wb(BB(n0(a),29).a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(r=0,c=(i=Z0(BB(n0(o),11).g)).length;r<c;++r)qy(TD(mMn(e=i[r],(hWn(),Ilt))))&&tBn(e,!1);HSn(t)}function ORn(){this.b=new v4,this.d=new v4,this.e=new v4,this.c=new v4,this.a=new xp,this.f=new xp,xJ(PMt,new mu,new yu),xJ(NMt,new Au,new $u),xJ(Eut,new Lu,new Nu),xJ(_ut,new Du,new Ru),xJ(hOt,new Ku,new _u),xJ(met,new ku,new ju),xJ(Cet,new Eu,new Tu),xJ(jet,new Mu,new Su),xJ(Eet,new Pu,new Iu),xJ(Bet,new Cu,new Ou)}function ARn(n){var t,e,i,r,c,a;return c=0,(t=Ckn(n)).Bj()&&(c|=4),0!=(n.Bb&T9n)&&(c|=2),cL(n,99)?(r=Ivn(e=BB(n,18)),0!=(e.Bb&h6n)&&(c|=32),r&&(bX(dZ(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),0!=(r.Bb&h6n)&&(c|=64)),0!=(e.Bb&BQn)&&(c|=M9n),c|=k6n):cL(t,457)?c|=512:(i=t.Bj())&&0!=(1&i.i)&&(c|=256),0!=(512&n.Bb)&&(c|=128),c}function $Rn(n,t){var e,i,r,c,a;for(n=null==n?zWn:(kW(n),n),r=0;r<t.length;r++)t[r]=iLn(t[r]);for(e=new Ck,a=0,i=0;i<t.length&&-1!=(c=n.indexOf("%s",a));)e.a+=""+fx(null==n?zWn:(kW(n),n),a,c),uO(e,t[i++]),a=c+2;if(G0(e,n,a,n.length),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function LRn(n){var t,e,i,r,c;for(c=new J6(n.a.c.length),r=new Wb(n.a);r.a<r.c.c.length;){switch(i=BB(n0(r),10),t=null,(e=BB(mMn(i,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),t=$ht;break;case 3:case 4:Jun(),t=Oht}t?(hon(i,(hWn(),Gft),(Jun(),$ht)),t==Oht?RNn(i,e,(ain(),Hvt)):t==$ht&&RNn(i,e,(ain(),qvt))):c.c[c.c.length]=i}return c}function NRn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Wb(t);o.a<o.c.c.length;){for(u=BB(n0(o),11),nhn(n.b,n.d[u.p]),a=0,r=new m6(u.b);y$(r.a)||y$(r.b);)IW(i=BB(y$(r.a)?n0(r.a):n0(r.b),17))?(c=ME(n,u==i.c?i.d:i.c))>n.d[u.p]&&(e+=n5(n.b,c),d3(n.a,iln(c))):++a;for(e+=n.b.d*a;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function xRn(n,t){var e;return n.f==uLt?(e=DW(B7((CPn(),Z$t),t)),n.e?4==e&&t!=(TOn(),lLt)&&t!=(TOn(),sLt)&&t!=(TOn(),hLt)&&t!=(TOn(),fLt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(Z1(B7((CPn(),Z$t),t)))||n.d.Hc(Fqn((CPn(),Z$t),n.b,t))))||!(!n.f||!aNn((CPn(),n.f),jV(B7(Z$t,t))))&&(e=DW(B7(Z$t,t)),n.e?4==e:2==e)}function DRn(n,t,i,r){var c,a,u,o,s,h,f,l;return s=(u=BB(ZAn(i,(sWn(),gPt)),8)).a,f=u.b+n,(c=e.Math.atan2(f,s))<0&&(c+=Z3n),(c+=t)>Z3n&&(c-=Z3n),h=(o=BB(ZAn(r,gPt),8)).a,l=o.b+n,(a=e.Math.atan2(l,h))<0&&(a+=Z3n),(a+=t)>Z3n&&(a-=Z3n),h$(),rin(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:c<a?-1:c>a?1:zO(isNaN(c),isNaN(a))}function RRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),57),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),57)).i=KQn,a=t.c.Kc();a.Ob();)c=BB(a.Pb(),57),BB(qC(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).c.$b(),t.c=BB(qC(AY(u.f,t)),15);_xn(n)}function KRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),81),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),81)).o=KQn,a=t.f.Kc();a.Ob();)c=BB(a.Pb(),81),BB(qC(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).f.$b(),t.f=BB(qC(AY(u.f,t)),15);BNn(n)}function _Rn(n,t,e,i){var r,c;for(Gkn(n,t,e,i),xl(t,n.j-t.j+e),Dl(t,n.k-t.k+i),c=new Wb(t.f);c.a<c.c.c.length;)switch((r=BB(n0(c),324)).a.g){case 0:won(n,t.g+r.b.a,0,t.g+r.c.a,t.i-1);break;case 1:won(n,t.g+t.o,t.i+r.b.a,n.o-1,t.i+r.c.a);break;case 2:won(n,t.g+r.b.a,t.i+t.p,t.g+r.c.a,n.p-1);break;default:won(n,0,t.i+r.b.a,t.g-1,t.i+r.c.a)}}function FRn(n,t,e,i,r){var c,a;try{if(t>=n.o)throw Hp(new Sv);a=t>>5,c=yz(1,dG(yz(31&t,1))),n.n[e][a]=r?i0(n.n[e][a],c):e0(n.n[e][a],uH(c)),c=yz(c,1),n.n[e][a]=i?i0(n.n[e][a],c):e0(n.n[e][a],uH(c))}catch(u){throw cL(u=lun(u),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(u)}}function BRn(n,t,i,r){var c,a;t&&(c=Gy(MD(mMn(t,(qqn(),fkt))))+r,a=i+Gy(MD(mMn(t,ukt)))/2,hon(t,gkt,iln(dG(fan(e.Math.round(c))))),hon(t,pkt,iln(dG(fan(e.Math.round(a))))),0==t.d.b||BRn(n,BB(iL(new wg(spn(new bg(t).a.d,0))),86),i+Gy(MD(mMn(t,ukt)))+n.a,r+Gy(MD(mMn(t,okt)))),null!=mMn(t,wkt)&&BRn(n,BB(mMn(t,wkt),86),i,r))}function HRn(n,t){var i,r,c,a,u,o,s,h,f,l,b;for(c=2*Gy(MD(mMn(s=vW(t.a),(HXn(),Tpt)))),f=Gy(MD(mMn(s,Apt))),h=e.Math.max(c,f),a=x8(xNt,qQn,25,t.f-t.c+1,15,1),r=-h,i=0,o=t.b.Kc();o.Ob();)u=BB(o.Pb(),10),r+=n.a[u.c.p]+h,a[i++]=r;for(r+=n.a[t.a.c.p]+h,a[i++]=r,b=new Wb(t.e);b.a<b.c.c.length;)l=BB(n0(b),10),r+=n.a[l.c.p]+h,a[i++]=r;return a}function qRn(n,t,e,i){var r,c,a,u,o,s,h,f;for(f=new dE(new Yd(n)),u=0,o=(a=Pun(Gk(Out,1),a1n,10,0,[t,e])).length;u<o;++u)for(h=Lfn(a[u],i).Kc();h.Ob();)for(c=new m6((s=BB(h.Pb(),11)).b);y$(c.a)||y$(c.b);)b5(r=BB(y$(c.a)?n0(c.a):n0(c.b),17))||(Mon(f.a,s,(hN(),ptt)),IW(r)&&ZU(f,s==r.c?r.d:r.c));return yX(f),new t_(f)}function GRn(n,t){var e,i,r,c;if(0!=(c=BB(ZAn(n,(sWn(),wPt)),61).g-BB(ZAn(t,wPt),61).g))return c;if(e=BB(ZAn(n,sPt),19),i=BB(ZAn(t,sPt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(BB(ZAn(n,wPt),61).g){case 1:return Pln(n.i,t.i);case 2:return Pln(n.j,t.j);case 3:return Pln(t.i,n.i);case 4:return Pln(t.j,n.j);default:throw Hp(new Fy(r1n))}}function zRn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(n6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function URn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(t6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function XRn(n,t){var e,i,r,c,a,u;if(null==t||0==t.length)return null;if(!(r=BB(SJ(n.a,t),149))){for(i=new Kb(new Ob(n.b).a.vc().Kc());i.a.Ob();)if(c=BB(i.a.Pb(),42),a=(e=BB(c.dd(),149)).c,u=t.length,mK(a.substr(a.length-u,u),t)&&(t.length==a.length||46==fV(a,a.length-t.length-1))){if(r)return null;r=e}r&&mZ(n.a,t,r)}return r}function WRn(n,t){var e,i,r;return e=new xn,(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())<(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?-1:i==r?0:1}function VRn(n){var t,e,i;Lx(n,(HXn(),$gt))&&((i=BB(mMn(n,$gt),21)).dc()||(e=new YK(t=BB(Vj(GIt),9),BB(SR(t,t.length),9),0),i.Hc((n$n(),$It))?orn(e,$It):orn(e,LIt),i.Hc(OIt)||orn(e,OIt),i.Hc(CIt)?orn(e,DIt):i.Hc(IIt)?orn(e,xIt):i.Hc(AIt)&&orn(e,NIt),i.Hc(DIt)?orn(e,CIt):i.Hc(xIt)?orn(e,IIt):i.Hc(NIt)&&orn(e,AIt),hon(n,$gt,e)))}function QRn(n){var t,e,i,r,c,a,u;for(r=BB(mMn(n,(hWn(),rlt)),10),l1(0,(i=n.j).c.length),e=BB(i.c[0],11),a=new Wb(r.j);a.a<a.c.c.length;)if(GC(c=BB(n0(a),11))===GC(mMn(e,dlt))){c.j==(kUn(),sCt)&&n.p>r.p?(qIn(c,SCt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=u-t)):c.j==SCt&&r.p>n.p&&(qIn(c,sCt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=-(u-t)));break}return r}function YRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;if(c=e,e<i)for(b=new Fan(n.p),w=new Fan(n.p),Frn(b.e,n.e),b.q=n.q,b.r=w,rX(b),Frn(w.j,n.j),w.r=b,rX(w),f=BB((l=new rC(b,w)).a,112),h=BB(l.b,112),l1(c,t.c.length),a=$Dn(n,f,h,r=BB(t.c[c],329)),s=e+1;s<=i;s++)l1(s,t.c.length),Vpn(u=BB(t.c[s],329),o=$Dn(n,f,h,u),r,a)&&(r=u,a=o);return c}function JRn(n,t,e,i,r){var c,a,u,o,s,h,f;if(!(cL(t,239)||cL(t,354)||cL(t,186)))throw Hp(new _y("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,o=t.i+i-a,h=t.j+r-a,s=o+t.g+n.a,f=h+t.f+n.a,DH(c=new km,new xI(o,h)),DH(c,new xI(o,f)),DH(c,new xI(s,f)),DH(c,new xI(s,h)),qan(u=new EAn(c),t),e&&VW(n.b,t,u),u}function ZRn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xI(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function nKn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xI(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function tKn(n){if(0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i)throw Hp(new ck("Edges must have a source."));if(0==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new ck("Edges must have a target."));if(!n.b&&(n.b=new hK(KOt,n,4,7)),!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)))throw Hp(new ck("Hyperedges are not supported."))}function eKn(n,t){var e,i,r,c,a,u,o,s,h,f;for(f=0,d3(c=new Lp,t);c.b!=c.c;)for(o=BB(dU(c),214),s=0,h=BB(mMn(t.j,(HXn(),Ldt)),339),a=Gy(MD(mMn(t.j,Cdt))),u=Gy(MD(mMn(t.j,Odt))),h!=(mon(),Nvt)&&(s+=a*S$n(o.e,h),s+=u*rxn(o.e)),f+=syn(o.d,o.e)+s,r=new Wb(o.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(f+=nIn(n,e));return f}function iKn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=b=t.length,b1(0,t.length),45==t.charCodeAt(0)?(f=-1,l=1,--b):(f=1,l=0),r=b/(c=(uHn(),cet)[10])|0,0!=(g=b%c)&&++r,u=x8(ANt,hQn,25,r,15,1),e=ret[8],a=0,w=l+(0==g?c:g),d=l;d<o;w=(d=w)+c)i=l_n(t.substr(d,w-d),_Vn,DWn),$On(),s=dvn(u,u,a,e),s+=Uwn(u,a,i),u[a++]=s;h=a,n.e=f,n.d=h,n.a=u,X0(n)}function rKn(n,t,e,i,r,c,a){if(n.c=i.qf().a,n.d=i.qf().b,r&&(n.c+=r.qf().a,n.d+=r.qf().b),n.b=t.rf().a,n.a=t.rf().b,r)switch(r.Hf().g){case 0:case 2:n.c+=r.rf().a+a+c.a+a;break;case 4:n.c-=a+c.a+a+t.rf().a;break;case 1:n.c+=r.rf().a+a,n.d-=a+c.b+a+t.rf().b;break;case 3:n.c+=r.rf().a+a,n.d+=r.rf().b+a+c.b+a}else e?n.c-=a+t.rf().a:n.c+=i.rf().a+a}function cKn(n,t){var e,i;for(this.b=new Np,this.e=new Np,this.a=n,this.d=t,Gpn(this),pdn(this),this.b.dc()?this.c=n.c.p:this.c=BB(this.b.Xb(0),10).c.p,0==this.e.c.length?this.f=n.c.p:this.f=BB(xq(this.e,this.e.c.length-1),10).c.p,i=BB(mMn(n,(hWn(),Plt)),15).Kc();i.Ob();)if(Lx(e=BB(i.Pb(),70),(HXn(),Vdt))){this.d=BB(mMn(e,Vdt),227);break}}function aKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.e,t),53),a=BB(RX(n.e,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.e,s),53),t),Frn(BB(RX(n.e,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function uKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.b,t),53),a=BB(RX(n.b,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.b,s),53),t),Frn(BB(RX(n.b,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function oKn(n,t){var e,i,r;switch(OTn(t,"Breaking Point Insertion",1),i=new MAn(n),BB(mMn(n,(HXn(),Bpt)),337).g){case 2:r=new Tc;case 0:r=new wc;break;default:r=new Mc}if(e=r.Vf(n,i),qy(TD(mMn(n,qpt)))&&(e=Dqn(n,e)),!r.Wf()&&Lx(n,Xpt))switch(BB(mMn(n,Xpt),338).g){case 2:e=XIn(i,e);break;case 1:e=KTn(i,e)}e.dc()||tXn(n,e),HSn(t)}function sKn(n,t,e){var i,r,c,a,u,o,s;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),a=N2(s,L6n),VIn((i=new oC(n,o)).a,i.b,a),u=N2(s,N6n),QIn((r=new sC(n,o)).a,r.b,u),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),sXn(n,s,o),xon(n,s,o)}function hKn(n,t){var i,r,c,a,u,o,s;for(c=x8(ANt,hQn,25,n.e.a.c.length,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)c[(a=BB(n0(u),121)).d]+=a.b.a.c.length;for(o=zB(t);0!=o.b;)for(r=L9(new Wb((a=BB(0==o.b?null:(Px(0!=o.b),Atn(o,o.a.a)),121)).g.a));r.Ob();)(s=(i=BB(r.Pb(),213)).e).e=e.Math.max(s.e,a.e+i.a),--c[s.d],0==c[s.d]&&r5(o,s,o.c.b,o.c)}function fKn(n){var t,i,r,c,a,u,o,s,h,f,l;for(i=_Vn,c=DWn,o=new Wb(n.e.a);o.a<o.c.c.length;)a=BB(n0(o),121),c=e.Math.min(c,a.e),i=e.Math.max(i,a.e);for(t=x8(ANt,hQn,25,i-c+1,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).e-=c,++t[a.e];if(r=0,null!=n.k)for(f=0,l=(h=n.k).length;f<l&&(s=h[f],t[r++]+=s,t.length!=r);++f);return t}function lKn(n){switch(n.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return BB(Kxn(n),19).a==n.o;case 1:case 2:if(-2==n.o)return!1;switch(n.p){case 0:case 1:case 2:case 6:case 5:case 7:return QC(n.k,n.f);case 3:case 4:return n.j==n.e;default:return null==n.n?null==n.g:Nfn(n.n,n.g)}default:return!1}}function bKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,K5n),"ELK Fixed"),"Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points."),new Vu))),u2(n,K5n,QJn,dIt),u2(n,K5n,g3n,mpn(gIt)),u2(n,K5n,g5n,mpn(hIt)),u2(n,K5n,PZn,mpn(fIt)),u2(n,K5n,BZn,mpn(bIt)),u2(n,K5n,Y2n,mpn(lIt))}function wKn(n,t,e){var i,r,c,a;if(i=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),a=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),(c=Jrn(n,t,i))&&a==c.f&&wW(e,c.i))return e;if(Zrn(n,e,a))throw Hp(new _y("value already present: "+e));return r=new qW(t,i,e,a),c?(LLn(n,c),YIn(n,r,c),c.e=null,c.c=null,c.i):(YIn(n,r,null),qkn(n),null)}function dKn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=c.b?new xI(a,l):new xI(s,l),h=c.c?new xI(s,b):new xI(a,b),r=s,e.p||(r+=n.c),o=new xI(r+=e.F+e.v*n.b,l),f=new xI(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xI(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function gKn(n,t,e){var i,r,c,a,u,o;if(t){if(e<=-1){if(cL(i=itn(t.Tg(),-1-e),99))return BB(i,18);for(u=0,o=(a=BB(t.ah(i),153)).gc();u<o;++u)if(GC(a.jl(u))===GC(n)&&cL(r=a.il(u),99)&&0!=((c=BB(r,18)).Bb&h6n))return c;throw Hp(new Fy("The containment feature could not be located"))}return Ivn(BB(itn(n.Tg(),e),18))}return null}function pKn(n){var t,e,i,r,c;for(i=n.length,t=new Pk,c=0;c<i;)if(9!=(e=fV(n,c++))&&10!=e&&12!=e&&13!=e&&32!=e)if(35!=e)92==e&&c<i?35==(b1(c,n.length),r=n.charCodeAt(c))||9==r||10==r||12==r||13==r||32==r?(NX(t,r&QVn),++c):(t.a+="\\",NX(t,r&QVn),++c):NX(t,e&QVn);else for(;c<i&&13!=(e=fV(n,c++))&&10!=e;);return t.a}function vKn(n,t){var e,i,r;for(i=new Wb(t);i.a<i.c.c.length;)if(e=BB(n0(i),33),JCn(n.a,e,e),JCn(n.b,e,e),0!=(r=wDn(e)).c.length)for(n.d&&n.d.lg(r),JCn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JCn(n.b,e,BB(xq(r,r.c.length-1),33));0!=Dun(r).c.length;)r=Dun(r),n.d&&n.d.lg(r),JCn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JCn(n.b,e,BB(xq(r,r.c.length-1),33))}function mKn(n){var t,e,i,r,c,a,u,o,s,h;for(e=0,u=new Wb(n.d);u.a<u.c.c.length;)(a=BB(n0(u),101)).i&&(a.i.c=e++);for(t=kq($Nt,[sVn,ZYn],[177,25],16,[e,e],2),h=n.d,r=0;r<h.c.length;r++)if(l1(r,h.c.length),(o=BB(h.c[r],101)).i)for(c=r+1;c<h.c.length;c++)l1(c,h.c.length),(s=BB(h.c[c],101)).i&&(i=rMn(o,s),t[o.i.c][s.i.c]=i,t[s.i.c][o.i.c]=i);return t}function yKn(n,t,e,i){var r,c,a;return a=new yT(t,e),n.a?i?(++(r=BB(RX(n.b,t),283)).a,a.d=i.d,a.e=i.e,a.b=i,a.c=i,i.e?i.e.c=a:BB(RX(n.b,t),283).b=a,i.d?i.d.b=a:n.a=a,i.d=a,i.e=a):(n.e.b=a,a.d=n.e,n.e=a,(r=BB(RX(n.b,t),283))?(++r.a,(c=r.c).c=a,a.e=c,r.c=a):(VW(n.b,t,r=new sY(a)),++n.c)):(n.a=n.e=a,VW(n.b,t,new sY(a)),++n.c),++n.d,a}function kKn(n,t){var e,i,r,c,a,u,o,s;for(e=new RegExp(t,"g"),o=x8(Qtt,sVn,2,0,6,1),i=0,s=n,c=null;;){if(null==(u=e.exec(s))||""==s){o[i]=s;break}a=u.index,o[i]=s.substr(0,a),s=fx(s,a+u[0].length,s.length),e.lastIndex=0,c==s&&(o[i]=s.substr(0,1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=o.length;r>0&&""==o[r-1];)--r;r<o.length&&(o.length=r)}return o}function jKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,r=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=jKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(r||(r=!0,u=new rG(u)),u.Gc(e)):u=e);return(i=xCn(n,t)).dc()?u||(SQ(),SQ(),set):u?(r||(u=new rG(u)),u.Gc(i),u):i}function EKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,i=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=EKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(i||(i=!0,u=new rG(u)),u.Gc(e)):u=e);return(r=VOn(n,t)).dc()?u||(SQ(),SQ(),set):u?(i||(u=new rG(u)),u.Gc(r),u):r}function TKn(n,t,e){var i,r,c,a,u,o;if(cL(t,72))return _pn(n,t,e);for(u=null,c=null,i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(t,(r=i[a]).dd())&&cL(c=r.ak(),99)&&0!=(BB(c,18).Bb&h6n)){u=r;break}return u&&(mA(n.e)&&(o=c.$j()?LY(n,4,c,t,null,pBn(n,c,t,cL(c,99)&&0!=(BB(c,18).Bb&BQn)),!0):LY(n,c.Kj()?2:1,c,t,c.zj(),-1,!0),e?e.Ei(o):e=o),e=TKn(n,u,e)),e}function MKn(n){var t,i,r,c;r=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?c=r.a:(c=SCn(n.f),n.A.Hc((mdn(),RCt))&&!n.B.Hc((n_n(),XCt))&&(c=e.Math.max(c,SCn(BB(oV(n.p,(kUn(),sCt)),244))),c=e.Math.max(c,SCn(BB(oV(n.p,SCt),244)))),(t=oan(n))&&(c=e.Math.max(c,t.a))),qy(TD(n.e.yf().We((sWn(),FSt))))?r.a=e.Math.max(r.a,c):r.a=c,(i=n.f.i).c=0,i.b=c,_Fn(n.f)}function SKn(n,t){var e,i,r,c,a,u,o,s,h;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"memberTypes")))){for(s=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)cL(h=-1==(i=(r=c[a]).lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148)&&WB(s,BB(h,148));return s}return SQ(),SQ(),set}function PKn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,aZn,1),n.bf(t),c=0;n.df(c);){for(h=new Wb(t.e);h.a<h.c.c.length;)for(o=BB(n0(h),144),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[t.e,t.d,t.b])));dAn(u);)(a=BB(U5(u),357))!=o&&(r=n.af(a,o))&&UR(o.a,r);for(s=new Wb(t.e);s.a<s.c.c.length;)WSn(i=(o=BB(n0(s),144)).a,-n.d,-n.d,n.d,n.d),UR(o.d,i),kO(i);n.cf(),++c}HSn(e)}function IKn(n,t,e){var i,r,c,a;if(a=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj()){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(r,e))return fDn(n,c),!0}else if(null!=e){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(e,r.dd()))return fDn(n,c),!0}else for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&null==r.dd())return fDn(n,c),!0;return!1}function CKn(n,t){var e,i,r,c,a;for(null==n.c||n.c.length<t.c.length?n.c=x8($Nt,ZYn,25,t.c.length,16,1):nk(n.c),n.a=new Np,i=0,a=new Wb(t);a.a<a.c.c.length;)(r=BB(n0(a),10)).p=i++;for(e=new YT,c=new Wb(t);c.a<c.c.c.length;)r=BB(n0(c),10),n.c[r.p]||(hCn(n,r),0==e.b||(Px(0!=e.b),BB(e.a.a.c,15)).gc()<n.a.c.length?hO(e,n.a):fO(e,n.a),n.a=new Np);return e}function OKn(n,t,e,i){var r,c,a,u,o,s,h;for(Pen(a=BB(Wtn(t,0),33),0),Ien(a,0),(o=new Np).c[o.c.length]=a,u=a,c=new eq(n.a,a.g,a.f,(YLn(),_Et)),s=1;s<t.i;s++)Pen(h=BB(Wtn(t,s),33),(r=aqn(n,nHn(n,DEt,h,u,c,o,e),nHn(n,xEt,h,u,c,o,e),nHn(n,KEt,h,u,c,o,e),nHn(n,REt,h,u,c,o,e),h,u,i)).d),Ien(h,r.e),ab(r,_Et),c=r,u=h,o.c[o.c.length]=h;return c}function AKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,Q4n),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new eu))),u2(n,Q4n,K4n,mpn(qTt)),u2(n,Q4n,QJn,BTt),u2(n,Q4n,vZn,8),u2(n,Q4n,q4n,mpn(HTt)),u2(n,Q4n,U4n,mpn(_Tt)),u2(n,Q4n,X4n,mpn(FTt)),u2(n,Q4n,X2n,(hN(),!1))}function $Kn(n,t,e,i){var r,c,a,u,o,s,h,f;for(a=_x(t.c,e,i),h=new Wb(t.a);h.a<h.c.c.length;){for(UR((s=BB(n0(h),10)).n,a),f=new Wb(s.j);f.a<f.c.c.length;)for(c=new Wb(BB(n0(f),11).g);c.a<c.c.c.length;)for(Ztn((r=BB(n0(c),17)).a,a),(u=BB(mMn(r,(HXn(),vgt)),74))&&Ztn(u,a),o=new Wb(r.b);o.a<o.c.c.length;)UR(BB(n0(o),70).n,a);WB(n.a,s),s.a=n}}function LKn(n,t){var e,i,r,c;if(OTn(t,"Node and Port Label Placement and Node Sizing",1),RA((gM(),new HV(n,!0,!0,new Ve))),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft)))for(i=(r=BB(mMn(n,(HXn(),cpt)),21)).Hc((lCn(),iCt)),c=qy(TD(mMn(n,apt))),e=new Wb(n.b);e.a<e.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(e),29).a,16)),new Qe),new K_(r,i,c));HSn(t)}function NKn(n,t){var e,i,r,c,a,u;if((e=t.Hh(n.a))&&null!=(u=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),n8n))))switch(r=mN(u,YTn(35)),i=t.Hj(),-1==r?(a=az(n,Utn(i)),c=u):0==r?(a=null,c=u.substr(1)):(a=u.substr(0,r),c=u.substr(r+1)),DW(B7(n,t))){case 2:case 3:return Don(n,i,a,c);case 0:case 4:case 5:case 6:return Ron(n,i,a,c)}return null}function xKn(n,t,e){var i,r,c,a,u;if(ZM(),a=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))return!1}else for(u=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c],u.rl(r.ak()))return!(a?Nfn(r,e):null==e?null==r.dd():Nfn(e,r.dd()))&&(BB(ovn(n,c,a?BB(e,72):Z3(t,e)),72),!0);return f9(n,a?BB(e,72):Z3(t,e))}function DKn(n){var t,e,i,r,c;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));for(n.c==(Ffn(),BPt)&&Mzn(n,_Pt),t=new Wb(n.a.a);t.a<t.c.c.length;)BB(n0(t),189).e=0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((i=BB(n0(r),81)).o=KQn,e=i.f.Kc();e.Ob();)++BB(e.Pb(),81).d.e;for(Gzn(n),c=new Wb(n.a.b);c.a<c.c.c.length;)BB(n0(c),81).k=!0;return n}function RKn(n,t){var e,i,r,c,a,u,o,s;for(u=new pPn(n),r5(e=new YT,t,e.c.b,e.c);0!=e.b;){for((i=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),113)).d.p=1,a=new Wb(i.e);a.a<a.c.c.length;)jTn(u,r=BB(n0(a),409)),0==(s=r.d).d.p&&r5(e,s,e.c.b,e.c);for(c=new Wb(i.b);c.a<c.c.c.length;)jTn(u,r=BB(n0(c),409)),0==(o=r.c).d.p&&r5(e,o,e.c.b,e.c)}return u}function KKn(n){var t,e,i,r,c;if(1!=(i=Gy(MD(ZAn(n,(sWn(),yPt))))))for(MA(n,i*n.g,i*n.f),e=XO(_B((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),new Bu)),c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n),(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),e])));dAn(c);)(r=BB(U5(c),470)).Gg(i*r.Dg(),i*r.Eg()),r.Fg(i*r.Cg(),i*r.Bg()),(t=BB(r.We(cPt),8))&&(t.a*=i,t.b*=i)}function _Kn(n,t,e,i,r){var c,a,u,o,s,h;for(c=new Wb(n.b);c.a<c.c.c.length;)for(s=0,h=(o=n2(BB(n0(c),29).a)).length;s<h;++s)switch(BB(mMn(u=o[s],(HXn(),kgt)),163).g){case 1:vxn(u),PZ(u,t),lvn(u,!0,i);break;case 3:ZNn(u),PZ(u,e),lvn(u,!1,r)}for(a=new M2(n.b,0);a.b<a.d.gc();)0==(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)).a.c.length&&fW(a)}function FKn(n,t){var e,i,r,c,a,u,o;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),M7n)))){for(i=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)mK(r=c[a],"##other")?WB(i,"!##"+az(n,Utn(t.Hj()))):mK(r,"##local")?i.c[i.c.length]=null:mK(r,E7n)?WB(i,az(n,Utn(t.Hj()))):i.c[i.c.length]=r;return i}return SQ(),SQ(),set}function BKn(n,t){var e,i,r;return e=new Xn,(i=1==(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())?1:0)<(r=1==(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?1:0)?-1:i==r?0:1}function HKn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(r=qy(TD(mMn(u=n.i,(HXn(),wgt)))),h=0,i=0,s=new Wb(n.g);s.a<s.c.c.length;)c=(a=b5(o=BB(n0(s),17)))&&r&&qy(TD(mMn(o,dgt))),l=o.d.i,a&&c?++i:a&&!c?++h:vW(l).e==u?++i:++h;for(e=new Wb(n.e);e.a<e.c.c.length;)c=(a=b5(t=BB(n0(e),17)))&&r&&qy(TD(mMn(t,dgt))),f=t.c.i,a&&c?++h:a&&!c?++i:vW(f).e==u?++h:++i;return h-i}function qKn(n,t,e,i){this.e=n,this.k=BB(mMn(n,(hWn(),Alt)),304),this.g=x8(Out,a1n,10,t,0,1),this.b=x8(Ptt,sVn,333,t,7,1),this.a=x8(Out,a1n,10,t,0,1),this.d=x8(Ptt,sVn,333,t,7,1),this.j=x8(Out,a1n,10,t,0,1),this.i=x8(Ptt,sVn,333,t,7,1),this.p=x8(Ptt,sVn,333,t,7,1),this.n=x8(ktt,sVn,476,t,8,1),yS(this.n,(hN(),!1)),this.f=x8(ktt,sVn,476,t,8,1),yS(this.f,!0),this.o=e,this.c=i}function GKn(n,t){var e,i,r;if(!t.dc())if(BB(t.Xb(0),286).d==($Pn(),nht))Akn(n,t);else for(i=t.Kc();i.Ob();){switch((e=BB(i.Pb(),286)).d.g){case 5:hPn(n,e,Vbn(n,e));break;case 0:hPn(n,e,(r=(e.f-e.c+1-1)/2|0,e.c+r));break;case 4:hPn(n,e,$nn(n,e));break;case 2:Kwn(e),hPn(n,e,$En(e)?e.c:e.f);break;case 1:Kwn(e),hPn(n,e,$En(e)?e.f:e.c)}hMn(e.a)}}function zKn(n,t){var e,i,r,c,a;if(!t.e){for(t.e=!0,i=t.d.a.ec().Kc();i.Ob();)e=BB(i.Pb(),17),t.o&&t.d.a.gc()<=1?(a=new xI((c=t.a.c)+(t.a.c+t.a.b-c)/2,t.b),DH(BB(t.d.a.ec().Kc().Pb(),17).a,a)):(r=BB(RX(t.c,e),459)).b||r.c?dKn(n,e,t):n.d==(Usn(),rmt)&&(r.d||r.e)&&LOn(n,t)&&t.d.a.gc()<=1?dzn(e,t):DDn(n,e,t);t.k&&e5(t.d,new Te)}}function UKn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g,p,v,m;for(o=(r+c)/2+a,g=i*e.Math.cos(o),p=i*e.Math.sin(o),v=g-t.g/2,m=p-t.f/2,Pen(t,v),Ien(t,m),l=n.a.jg(t),(d=2*e.Math.acos(i/i+n.c))<c-r?(b=d/l,u=(r+c-d)/2):(b=(c-r)/l,u=r),w=wDn(t),n.e&&(n.e.kg(n.d),n.e.lg(w)),h=new Wb(w);h.a<h.c.c.length;)s=BB(n0(h),33),f=n.a.jg(s),UKn(n,s,i+n.c,u,u+b*f,a),u+=b*f}function XKn(n,t,e){var i;switch(i=e.q.getMonth(),t){case 5:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[i]);break;case 4:oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[i]);break;case 3:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[i]);break;default:Enn(n,i+1,t)}}function WKn(n,t){var e,i,r,c;if(OTn(t,"Network simplex",1),n.e.a.c.length<1)HSn(t);else{for(r=new Wb(n.e.a);r.a<r.c.c.length;)BB(n0(r),121).e=0;for((c=n.e.a.c.length>=40)&&EFn(n),BHn(n),Txn(n),e=yln(n),i=0;e&&i<n.f;)e_n(n,e,e$n(n,e)),e=yln(n),++i;c&&tTn(n),n.a?p$n(n,fKn(n)):fKn(n),n.b=null,n.d=null,n.p=null,n.c=null,n.g=null,n.i=null,n.n=null,n.o=null,HSn(t)}}function VKn(n,t,e,i){var r,c,a,u,o,s,h,f;for(XR(u=new xI(e,i),BB(mMn(t,(Mrn(),oat)),8)),f=new Wb(t.e);f.a<f.c.c.length;)UR((h=BB(n0(f),144)).d,u),WB(n.e,h);for(a=new Wb(t.c);a.a<a.c.c.length;){for(r=new Wb((c=BB(n0(a),282)).a);r.a<r.c.c.length;)UR(BB(n0(r),559).d,u);WB(n.c,c)}for(s=new Wb(t.d);s.a<s.c.c.length;)UR((o=BB(n0(s),447)).d,u),WB(n.d,o)}function QKn(n,t){var e,i,r,c,a,u,o,s;for(o=new Wb(t.j);o.a<o.c.c.length;)for(r=new m6((u=BB(n0(o),11)).b);y$(r.a)||y$(r.b);)t!=(c=(e=(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==u?i.d:i.c).i)&&((s=BB(mMn(i,(HXn(),fpt)),19).a)<0&&(s=0),a=c.p,0==n.b[a]&&(i.d==e?(n.a[a]-=s+1,n.a[a]<=0&&n.c[a]>0&&DH(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&DH(n.e,c))))}function YKn(n){var t,e,i,r,c,a,u;for(c=new dE(BB(yX(new Rn),62)),u=KQn,e=new Wb(n.d);e.a<e.c.c.length;){for(u=(t=BB(n0(e),222)).c.c;0!=c.a.c&&(a=BB(MU(q9(c.a)),222)).c.c+a.c.b<u;)$J(c.a,a);for(r=new Fb(new BR(new xN(new _b(c.a).a).b));aS(r.a.a);)DH((i=BB(mx(r.a).cd(),222)).b,t),DH(t.b,i);Mon(c.a,t,(hN(),ptt))}}function JKn(n,t,e){var i,r,c,a,u,o,s,h,f;for(c=new J6(t.c.length),s=new Wb(t);s.a<s.c.c.length;)a=BB(n0(s),10),WB(c,n.b[a.c.p][a.p]);for(mqn(n,c,e),f=null;f=ezn(c);)rBn(n,BB(f.a,233),BB(f.b,233),c);for(t.c=x8(Ant,HWn,1,0,5,1),r=new Wb(c);r.a<r.c.c.length;)for(o=0,h=(u=(i=BB(n0(r),233)).d).length;o<h;++o)a=u[o],t.c[t.c.length]=a,n.a[a.c.p][a.p].a=lL(i.g,i.d[0]).a}function ZKn(n,t){var e,i,r,c;if(0<(cL(n,14)?BB(n,14).gc():F3(n.Kc()))){if(1<(r=t)){for(--r,c=new pa,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));return ZKn(c,r)}if(r<0){for(c=new va,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));if(0<(cL(c,14)?BB(c,14).gc():F3(c.Kc())))return ZKn(c,r)}}return BB(iL(n.Kc()),86)}function n_n(){n_n=O,GCt=new QI("DEFAULT_MINIMUM_SIZE",0),UCt=new QI("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),qCt=new QI("COMPUTE_PADDING",2),XCt=new QI("OUTSIDE_NODE_LABELS_OVERHANG",3),WCt=new QI("PORTS_OVERHANG",4),QCt=new QI("UNIFORM_PORT_SPACING",5),VCt=new QI("SPACE_EFFICIENT_PORT_LABELS",6),zCt=new QI("FORCE_TABULAR_NODE_LABELS",7),HCt=new QI("ASYMMETRICAL",8)}function t_n(n,t){var e,i,r,c,a,u,o,s;if(t){if(e=(c=t.Tg())?Utn(c).Nh().Jh(c):null){for(Jgn(n,t,e),o=0,s=(null==(r=t.Tg()).i&&qFn(r),r.i).length;o<s;++o)null==r.i&&qFn(r),i=r.i,(u=o>=0&&o<i.length?i[o]:null).Ij()&&!u.Jj()&&(cL(u,322)?nvn(n,BB(u,34),t,e):0!=((a=BB(u,18)).Bb&h6n)&&sEn(n,a,t,e));t.kh()&&BB(e,49).vh(BB(t,49).qh())}return e}return null}function e_n(n,t,e){var i,r,c;if(!t.f)throw Hp(new _y("Given leave edge is no tree edge."));if(e.f)throw Hp(new _y("Given enter edge is a tree edge already."));for(t.f=!1,eL(n.p,t),e.f=!0,TU(n.p,e),i=e.e.e-e.d.e-e.a,FIn(n,e.e,t)||(i=-i),c=new Wb(n.e.a);c.a<c.c.c.length;)FIn(n,r=BB(n0(c),121),t)||(r.e+=i);n.j=1,nk(n.c),pCn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}function i_n(n,t){var e,i,r,c,a,u;if((u=BB(mMn(t,(HXn(),ept)),98))==(QEn(),WIt)||u==XIt)for(r=new xI(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((e=BB(mMn(c,(hWn(),Qft)),61))!=(kUn(),oCt)&&e!=ICt||(i=Gy(MD(mMn(c,Tlt))),u==WIt&&(i*=r),c.n.b=i-BB(mMn(c,npt),8).b,Jan(c,!1,!0)))}function r_n(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;if(Ytn(n,t,e),c=t[e],b=i?(kUn(),ICt):(kUn(),oCt),mL(t.length,e,i)){for(G6(n,r=t[i?e-1:e+1],i?(ain(),qvt):(ain(),Hvt)),h=0,l=(o=c).length;h<l;++h)xvn(n,a=o[h],b);for(G6(n,c,i?(ain(),Hvt):(ain(),qvt)),s=0,f=(u=r).length;s<f;++s)(a=u[s]).e||xvn(n,a,Tln(b))}else for(s=0,f=(u=c).length;s<f;++s)xvn(n,a=u[s],b);return!1}function c_n(n,t,e,i){var r,c,a,u,o;u=abn(t,e),(e==(kUn(),SCt)||e==ICt)&&(u=cL(u,152)?o6(BB(u,152)):cL(u,131)?BB(u,131).a:cL(u,54)?new fy(u):new IT(u)),a=!1;do{for(r=!1,c=0;c<u.gc()-1;c++)BMn(n,BB(u.Xb(c),11),BB(u.Xb(c+1),11),i)&&(a=!0,k0(n.a,BB(u.Xb(c),11),BB(u.Xb(c+1),11)),o=BB(u.Xb(c+1),11),u._c(c+1,BB(u.Xb(c),11)),u._c(c,o),r=!0)}while(r);return a}function a_n(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;if(!mA(n.e))return BB(YCn(n,t,e),72);if(t!=e&&(a=(b=(r=BB(n.g,119))[e]).ak(),$xn(n.e,a))){for(w=axn(n.e.Tg(),a),o=-1,u=-1,i=0,s=0,f=t>e?t:e;s<=f;++s)s==e?u=i++:(c=r[s],h=w.rl(c.ak()),s==t&&(o=s!=f||h?i:i-1),h&&++i);return l=BB(Cln(n,t,e),72),u!=o&&Lv(n,new j9(n.e,7,a,iln(u),b.dd(),o)),l}return BB(Cln(n,t,e),72)}function u_n(n,t){var e,i,r,c,a,u;for(OTn(t,"Port order processing",1),u=BB(mMn(n,(HXn(),opt)),421),e=new Wb(n.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)i=BB(n0(r),10),c=BB(mMn(i,ept),98),a=i.j,c==(QEn(),UIt)||c==WIt||c==XIt?(SQ(),m$(a,sst)):c!=QIt&&c!=YIt&&(SQ(),m$(a,fst),Lvn(a),u==(U7(),_vt)&&m$(a,hst)),i.i=!0,eCn(i);HSn(t)}function o_n(n){var t,i,r,c,a,u,o,s;for(s=new xp,t=new Fv,u=n.Kc();u.Ob();)c=BB(u.Pb(),10),o=AN(oM(new qv,c),t),jIn(s.f,c,o);for(a=n.Kc();a.Ob();)for(r=new oz(ZL(lbn(c=BB(a.Pb(),10)).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||UNn(aM(cM(rM(uM(new Hv,e.Math.max(1,BB(mMn(i,(HXn(),lpt)),19).a)),1),BB(RX(s,i.c.i),121)),BB(RX(s,i.d.i),121)));return t}function s_n(){s_n=O,byt=dq(new B2,(yMn(),Fat),(lWn(),vot)),dyt=dq(new B2,_at,jot),gyt=WG(dq(new B2,_at,Dot),Bat,xot),lyt=WG(dq(dq(new B2,_at,lot),Fat,bot),Bat,wot),pyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),wyt=WG(new B2,Bat,mot),hyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Iot),Bat,Sot),fyt=WG(dq(dq(new B2,Fat,Iot),Fat,uot),Bat,aot)}function h_n(n,t,e,i,r,c){var a,u,o,s,h,f;for(a=lSn(t,o=jon(t)-jon(n)),u=M$(0,0,0);o>=0&&(!Iyn(n,a)||(o<22?u.l|=1<<o:o<44?u.m|=1<<o-22:u.h|=1<<o-44,0!=n.l||0!=n.m||0!=n.h));)s=a.m,h=a.h,f=a.l,a.h=h>>>1,a.m=s>>>1|(1&h)<<21,a.l=f>>>1|(1&s)<<21,--o;return e&&Oon(u),c&&(i?(ltt=aon(n),r&&(ltt=hun(ltt,(X7(),dtt)))):ltt=M$(n.l,n.m,n.h)),u}function f_n(n,t){var e,i,r,c,a,u,o,s,h,f;for(s=n.e[t.c.p][t.p]+1,o=t.c.a.c.length+1,u=new Wb(n.a);u.a<u.c.c.length;){for(a=BB(n0(u),11),f=0,c=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(a),new Gw(a)])));dAn(r);)(i=BB(U5(r),11)).i.c==t.c&&(f+=bL(n,i.i)+1,++c);e=f/c,(h=a.j)==(kUn(),oCt)?n.f[a.p]=e<s?n.c-e:n.b+(o-e):h==ICt&&(n.f[a.p]=e<s?n.b+e:n.c-(o-e))}}function l_n(n,t,e){var i,r,c,a;if(null==n)throw Hp(new Mk(zWn));for(i=(c=n.length)>0&&(b1(0,n.length),45==n.charCodeAt(0)||(b1(0,n.length),43==n.charCodeAt(0)))?1:0;i<c;i++)if(-1==egn((b1(i,n.length),n.charCodeAt(i))))throw Hp(new Mk(DQn+n+'"'));if(r=(a=parseInt(n,10))<t,isNaN(a))throw Hp(new Mk(DQn+n+'"'));if(r||a>e)throw Hp(new Mk(DQn+n+'"'));return a}function b_n(n){var t,i,r,c,a,u;for(a=new YT,c=new Wb(n.a);c.a<c.c.c.length;)Vl(r=BB(n0(c),112),r.f.c.length),Ql(r,r.k.c.length),0==r.i&&(r.o=0,r5(a,r,a.c.b,a.c));for(;0!=a.b;)for(i=(r=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),112)).o+1,t=new Wb(r.f);t.a<t.c.c.length;)Yl(u=BB(n0(t),129).a,e.Math.max(u.o,i)),Ql(u,u.i-1),0==u.i&&r5(a,u,a.c.b,a.c)}function w_n(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n);a.a<a.c.c.length;){for(c=BB(n0(a),79),u=(i=PTn(BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82))).i,o=i.j,IA(r=BB(Wtn((!c.a&&(c.a=new eU(FOt,c,6,6)),c.a),0),202),r.j+u,r.k+o),PA(r,r.b+u,r.c+o),e=new AL((!r.a&&(r.a=new $L(xOt,r,5)),r.a));e.e!=e.i.gc();)TA(t=BB(kpn(e),469),t.a+u,t.b+o);Yrn(BB(ZAn(c,(sWn(),OSt)),74),u,o)}}function d_n(n){switch(n){case 100:return mWn(snt,!0);case 68:return mWn(snt,!1);case 119:return mWn(hnt,!0);case 87:return mWn(hnt,!1);case 115:return mWn(fnt,!0);case 83:return mWn(fnt,!1);case 99:return mWn(lnt,!0);case 67:return mWn(lnt,!1);case 105:return mWn(bnt,!0);case 73:return mWn(bnt,!1);default:throw Hp(new dy(ont+n.toString(16)))}}function g_n(n){var t,i,r,c,a;switch(c=BB(xq(n.a,0),10),t=new $vn(n),WB(n.a,t),t.o.a=e.Math.max(1,c.o.a),t.o.b=e.Math.max(1,c.o.b),t.n.a=c.n.a,t.n.b=c.n.b,BB(mMn(c,(hWn(),Qft)),61).g){case 4:t.n.a+=2;break;case 1:t.n.b+=2;break;case 2:t.n.a-=2;break;case 3:t.n.b-=2}return IZ(r=new ISn,t),SZ(i=new wY,a=BB(xq(c.j,0),11)),MZ(i,r),UR(kO(r.n),a.n),UR(kO(r.a),a.a),t}function p_n(n,t,e,i,r){e&&(!i||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.b],10).k==(uSn(),Sut)?hFn(BB(n.a[n.b],10),(Xyn(),jIt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.c-1&n.a.length-1],10).k==(uSn(),Sut)?hFn(BB(n.a[n.c-1&n.a.length-1],10),(Xyn(),EIt)):2==(n.c-n.b&n.a.length-1)?(hFn(BB(Eon(n),10),(Xyn(),jIt)),hFn(BB(Eon(n),10),EIt)):sLn(n,r),o4(n)}function v_n(n,t,i){var r,c,a,u,o;for(a=0,c=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));c.e!=c.i.gc();)u="",0==(!(r=BB(kpn(c),33)).n&&(r.n=new eU(zOt,r,1,7)),r.n).i||(u=BB(Wtn((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n),0),137).a),qan(o=new csn(a++,t,u),r),hon(o,(qqn(),skt),r),o.e.b=r.j+r.f/2,o.f.a=e.Math.max(r.g,1),o.e.a=r.i+r.g/2,o.f.b=e.Math.max(r.f,1),DH(t.b,o),jIn(i.f,r,o)}function m_n(n){var t,e,i,r,c;i=BB(mMn(n,(hWn(),dlt)),33),c=BB(ZAn(i,(HXn(),Fgt)),174).Hc((mdn(),_Ct)),n.e||(r=BB(mMn(n,Zft),21),t=new xI(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((bDn(),lft))?(Ypn(i,ept,(QEn(),XIt)),KUn(i,t.a,t.b,!1,!0)):qy(TD(ZAn(i,Bgt)))||KUn(i,t.a,t.b,!0,!0)),Ypn(i,Fgt,c?nbn(_Ct):new YK(e=BB(Vj(YCt),9),BB(SR(e,e.length),9),0))}function y_n(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(fV(n,t[0])){case 43:r=1;break;case 45:r=-1;break;default:return e.o=0,!0}if(++t[0],c=t[0],0==(a=UCn(n,t))&&t[0]==c)return!1;if(t[0]<n.length&&58==fV(n,t[0])){if(i=60*a,++t[0],c=t[0],0==(a=UCn(n,t))&&t[0]==c)return!1;i+=a}else(i=a)<24&&t[0]-c<=2?i*=60:i=i%100+60*(i/100|0);return i*=r,e.o=-i,!0}function k_n(n){var t,e,i,r,c,a,u;for(r=new Np,i=new oz(ZL(lbn(n.b).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))&&WB(r,new j6(e,v9(n,e.c),v9(n,e.d)));for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(c=BB(t.dd(),113)).d.p=0;for(a=new Kb(new Ob(n.e).a.vc().Kc());a.a.Ob();)t=BB(a.a.Pb(),42),0==(c=BB(t.dd(),113)).d.p&&WB(n.d,RKn(n,c))}function j_n(n){var t,e,i,r,c;for(c=WJ(n),r=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));r.e!=r.i.gc();)if(i=BB(kpn(r),79),!Itn(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82)),c))return!0;for(e=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));e.e!=e.i.gc();)if(t=BB(kpn(e),79),!Itn(PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),c))return!0;return!1}function E_n(n){var t,i,r,c,a,u,o,s;for(s=new km,o=null,i=BB(b3(t=spn(n,0)),8),c=BB(b3(t),8);t.b!=t.d.c;)o=i,i=c,c=BB(b3(t),8),a=ctn(XR(new xI(o.a,o.b),i)),u=ctn(XR(new xI(c.a,c.b),i)),r=10,r=e.Math.min(r,e.Math.abs(a.a+a.b)/2),r=e.Math.min(r,e.Math.abs(u.a+u.b)/2),a.a=HH(a.a)*r,a.b=HH(a.b)*r,u.a=HH(u.a)*r,u.b=HH(u.b)*r,DH(s,UR(a,i)),DH(s,UR(u,i));return s}function T_n(n,t,e,i){var r,c,a,u,o;return a=n.eh(),r=null,(o=n.Zg())?t&&0==(gKn(n,t,e).Bb&BQn)?(i=_pn(o.Vk(),n,i),n.uh(null),r=t.fh()):o=null:(a&&(o=a.fh()),t&&(r=t.fh())),o!=r&&o&&o.Zk(n),u=n.Vg(),n.Rg(t,e),o!=r&&r&&r.Yk(n),n.Lg()&&n.Mg()&&(a&&u>=0&&u!=e&&(c=new nU(n,1,u,a,null),i?i.Ei(c):i=c),e>=0&&(c=new nU(n,1,e,u==e?a:null,t),i?i.Ei(c):i=c)),i}function M_n(n){var t,e,i;if(null==n.b){if(i=new Sk,null!=n.i&&(cO(i,n.i),i.a+=":"),0!=(256&n.f)){for(0!=(256&n.f)&&null!=n.a&&(rQ(n.i)||(i.a+="//"),cO(i,n.a)),null!=n.d&&(i.a+="/",cO(i,n.d)),0!=(16&n.f)&&(i.a+="/"),t=0,e=n.j.length;t<e;t++)0!=t&&(i.a+="/"),cO(i,n.j[t]);null!=n.g&&(i.a+="?",cO(i,n.g))}else cO(i,n.a);null!=n.e&&(i.a+="#",cO(i,n.e)),n.b=i.a}return n.b}function S_n(n,t){var e,i,r,c,a,u;for(r=new Wb(t.a);r.a<r.c.c.length;)cL(c=mMn(i=BB(n0(r),10),(hWn(),dlt)),11)&&(u=yFn(t,i,(a=BB(c,11)).o.a,a.o.b),a.n.a=u.a,a.n.b=u.b,qIn(a,BB(mMn(i,Qft),61)));e=new xI(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))?(hon(n,(HXn(),ept),(QEn(),XIt)),BB(mMn(vW(n),Zft),21).Fc(dft),bGn(n,e,!1)):bGn(n,e,!0)}function P_n(n,t,e){var i,r,c,a,u;OTn(e,"Minimize Crossings "+n.a,1),i=0==t.b.c.length||!jE(AV(new Rq(null,new w1(t.b,16)),new aw(new Ac))).sd((dM(),tit)),u=1==t.b.c.length&&1==BB(xq(t.b,0),29).a.c.length,c=GC(mMn(t,(HXn(),sgt)))===GC((ufn(),pIt)),i||u&&!c||(Ssn(r=sxn(n,t),(a=BB(Dpn(r,0),214)).c.Rf()?a.c.Lf()?new Ud(n):new Xd(n):new zd(n)),afn(n)),HSn(e)}function I_n(n,t,e,i){var r,c,a,u;if(u=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),r=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),a=Zrn(n,t,u),c=Jrn(n,e,r),a&&r==a.a&&wW(e,a.g))return e;if(c&&!i)throw Hp(new _y("key already present: "+e));return a&&LLn(n,a),c&&LLn(n,c),YIn(n,new qW(e,r,t,u),c),c&&(c.e=null,c.c=null),a&&(a.e=null,a.c=null),qkn(n),a?a.g:null}function C_n(n,t,e){var i,r,c,a,u;for(c=0;c<t;c++){for(i=0,u=c+1;u<t;u++)i=rbn(rbn(cbn(e0(n[c],UQn),e0(n[u],UQn)),e0(e[c+u],UQn)),e0(dG(i),UQn)),e[c+u]=dG(i),i=jz(i,32);e[c+t]=dG(i)}for(ncn(e,e,t<<1),i=0,r=0,a=0;r<t;++r,a++)i=rbn(rbn(cbn(e0(n[r],UQn),e0(n[r],UQn)),e0(e[a],UQn)),e0(dG(i),UQn)),e[a]=dG(i),i=rbn(i=jz(i,32),e0(e[++a],UQn)),e[a]=dG(i),i=jz(i,32);return e}function O_n(n,t,i){var r,c,a,u,o,s,h,f;if(!h3(t)){for(s=Gy(MD(edn(i.c,(HXn(),Npt)))),!(h=BB(edn(i.c,Lpt),142))&&(h=new lm),r=i.a,c=null,o=t.Kc();o.Ob();)u=BB(o.Pb(),11),f=0,c?(f=s,f+=c.o.b):f=h.d,a=AN(oM(new qv,u),n.f),VW(n.k,u,a),UNn(aM(cM(rM(uM(new Hv,0),IJ(e.Math.ceil(f))),r),a)),c=u,r=a;UNn(aM(cM(rM(uM(new Hv,0),IJ(e.Math.ceil(h.a+c.o.b))),r),i.d))}}function A_n(n,t,e,i,r,c,a,u){var o,s,h;return h=!1,s=c-e.s,o=e.t-t.f+cHn(e,s,!1).a,!(i.g+u>s)&&(o+u+cHn(i,s,!1).a<=t.b&&(p9(e,c-e.s),e.c=!0,p9(i,c-e.s),Tvn(i,e.s,e.t+e.d+u),i.k=!0,xcn(e.q,i),h=!0,r&&(tin(t,i),i.j=t,n.c.length>a&&(Tkn((l1(a,n.c.length),BB(n.c[a],200)),i),0==(l1(a,n.c.length),BB(n.c[a],200)).a.c.length&&s6(n,a)))),h)}function $_n(n,t){var e,i,r,c,a;if(OTn(t,"Partition midprocessing",1),r=new pJ,JT(AV(new Rq(null,new w1(n.a,16)),new di),new ld(r)),0!=r.d){for(a=BB(P4(a1(new Rq(null,(r.i||(r.i=new HL(r,r.c))).Nc())),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=BB((i=a.Kc()).Pb(),19);i.Ob();)c=BB(i.Pb(),19),XLn(BB(h6(r,e),21),BB(h6(r,c),21)),e=c;HSn(t)}}function L_n(n,t,e){var i,r,c,a,u;if(0==t.p){for(t.p=1,(r=e)||(r=new rC(new Np,new YK(i=BB(Vj(FCt),9),BB(SR(i,i.length),9),0))),BB(r.a,15).Fc(t),t.k==(uSn(),Mut)&&BB(r.b,21).Fc(BB(mMn(t,(hWn(),Qft)),61)),a=new Wb(t.j);a.a<a.c.c.length;)for(c=BB(n0(a),11),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(c),new Gw(c)])));dAn(u);)L_n(n,BB(U5(u),11).i,r);return r}return null}function N_n(n,t){var e,i,r,c,a;if(n.Ab)if(n.Ab){if((a=n.Ab.i)>0)if(r=BB(n.Ab.g,1934),null==t){for(c=0;c<a;++c)if(null==(e=r[c]).d)return e}else for(c=0;c<a;++c)if(mK(t,(e=r[c]).d))return e}else if(null==t){for(i=new AL(n.Ab);i.e!=i.i.gc();)if(null==(e=BB(kpn(i),590)).d)return e}else for(i=new AL(n.Ab);i.e!=i.i.gc();)if(mK(t,(e=BB(kpn(i),590)).d))return e;return null}function x_n(n,t){var e,i,r,c,a,u,o;if(null==(o=TD(mMn(t,(IAn(),Nkt))))||(kW(o),o)){for(DOn(n,t),r=new Np,u=spn(t.b,0);u.b!=u.d.c;)(e=xPn(n,BB(b3(u),86),null))&&(qan(e,t),r.c[r.c.length]=e);if(n.a=null,n.b=null,r.c.length>1)for(i=new Wb(r);i.a<i.c.c.length;)for(c=0,a=spn((e=BB(n0(i),135)).b,0);a.b!=a.d.c;)BB(b3(a),86).g=c++;return r}return u6(Pun(Gk(Gyt,1),tZn,135,0,[t]))}function D_n(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p;crn(b=A3(n,qun(t),r),R2(r,q6n)),d=D2(w=r,U6n),cSn(new Lg(b).a,d),g=D2(w,"endPoint"),rSn(new Rg(b).a,g),p=N2(w,D6n),SEn(new Fg(b).a,p),f=R2(r,K6n),qR((c=new hC(n,b)).a,c.b,f),l=R2(r,R6n),GR((a=new fC(n,b)).a,a.b,l),s=N2(r,F6n),Fyn((u=new lC(e,b)).b,u.a,s),h=N2(r,_6n),Byn((o=new bC(i,b)).b,o.a,h)}function R_n(n,t,e){var i,r,c,a,u;switch(u=null,t.g){case 1:for(r=new Wb(n.j);r.a<r.c.c.length;)if(qy(TD(mMn(i=BB(n0(r),11),(hWn(),tlt)))))return i;hon(u=new ISn,(hWn(),tlt),(hN(),!0));break;case 2:for(a=new Wb(n.j);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),11),(hWn(),klt)))))return c;hon(u=new ISn,(hWn(),klt),(hN(),!0))}return u&&(IZ(u,n),qIn(u,e),yvn(u.n,n.o,e)),u}function K_n(n,t){var i,r,c,a,u,o;for(o=-1,u=new YT,r=new m6(n.b);y$(r.a)||y$(r.b);){for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),o=e.Math.max(o,Gy(MD(mMn(i,(HXn(),agt))))),i.c==n?JT(AV(new Rq(null,new w1(i.b,16)),new fe),new nd(u)):JT(AV(new Rq(null,new w1(i.b,16)),new le),new td(u)),a=spn(u,0);a.b!=a.d.c;)Lx(c=BB(b3(a),70),(hWn(),Uft))||hon(c,Uft,i);gun(t,u),yQ(u)}return o}function __n(n,t,e,i,r){var c,a,u,o;Bl(c=new $vn(n),(uSn(),Cut)),hon(c,(HXn(),ept),(QEn(),XIt)),hon(c,(hWn(),dlt),t.c.i),hon(a=new ISn,dlt,t.c),qIn(a,r),IZ(a,c),hon(t.c,Elt,c),Bl(u=new $vn(n),Cut),hon(u,ept,XIt),hon(u,dlt,t.d.i),hon(o=new ISn,dlt,t.d),qIn(o,r),IZ(o,u),hon(t.d,Elt,u),SZ(t,a),MZ(t,o),LZ(0,e.c.length),MS(e.c,0,c),i.c[i.c.length]=u,hon(c,Bft,iln(1)),hon(u,Bft,iln(1))}function F_n(n,t,i,r,c){var a,u,o,s,h;o=c?r.b:r.a,FT(n.a,r)||(h=o>i.s&&o<i.c,s=!1,0!=i.e.b&&0!=i.j.b&&(s|=e.Math.abs(o-Gy(MD(gx(i.e))))<lZn&&e.Math.abs(o-Gy(MD(gx(i.j))))<lZn,s|=e.Math.abs(o-Gy(MD(px(i.e))))<lZn&&e.Math.abs(o-Gy(MD(px(i.j))))<lZn),(h||s)&&((u=BB(mMn(t,(HXn(),vgt)),74))||(u=new km,hon(t,vgt,u)),r5(u,a=new wA(r),u.c.b,u.c),TU(n.a,a)))}function B_n(n,t,e,i){var r,c,a,u,o,s,h;if(WCn(n,t,e,i))return!0;for(a=new Wb(t.f);a.a<a.c.c.length;){switch(c=BB(n0(a),324),u=!1,s=(o=n.j-t.j+e)+t.o,r=(h=n.k-t.k+i)+t.p,c.a.g){case 0:u=Osn(n,o+c.b.a,0,o+c.c.a,h-1);break;case 1:u=Osn(n,s,h+c.b.a,n.o-1,h+c.c.a);break;case 2:u=Osn(n,o+c.b.a,r,o+c.c.a,n.p-1);break;default:u=Osn(n,0,h+c.b.a,o-1,h+c.c.a)}if(u)return!0}return!1}function H_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(fbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rC(e.c.i,e)));SQ(),m$(s,n.c),kG(n.b,u.p,s)}}function q_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(lbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rC(e.d.i,e)));SQ(),m$(s,n.c),kG(n.f,u.p,s)}}function G_n(n){NM(n,new MTn(vj(wj(pj(gj(new du,l5n),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new xu))),u2(n,l5n,QJn,zMt),u2(n,l5n,vZn,15),u2(n,l5n,pZn,iln(0)),u2(n,l5n,A4n,mpn(_Mt)),u2(n,l5n,PZn,mpn(BMt)),u2(n,l5n,SZn,mpn(qMt)),u2(n,l5n,VJn,f5n),u2(n,l5n,jZn,mpn(FMt)),u2(n,l5n,BZn,mpn(HMt)),u2(n,l5n,b5n,mpn(RMt)),u2(n,l5n,u3n,mpn(KMt))}function z_n(n,t){var e,i,r,c,a,u,o,s,h;if(a=(r=n.i).o.a,c=r.o.b,a<=0&&c<=0)return kUn(),PCt;switch(s=n.n.a,h=n.n.b,u=n.o.a,e=n.o.b,t.g){case 2:case 1:if(s<0)return kUn(),ICt;if(s+u>a)return kUn(),oCt;break;case 4:case 3:if(h<0)return kUn(),sCt;if(h+e>c)return kUn(),SCt}return(o=(s+u/2)/a)+(i=(h+e/2)/c)<=1&&o-i<=0?(kUn(),ICt):o+i>=1&&o-i>=0?(kUn(),oCt):i<.5?(kUn(),sCt):(kUn(),SCt)}function U_n(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(e=!1,o=Gy(MD(mMn(t,(HXn(),Opt)))),l=KVn*o,r=new Wb(t.b);r.a<r.c.c.length;)for(i=BB(n0(r),29),c=BB(n0(u=new Wb(i.a)),10),s=wU(n.a[c.p]);u.a<u.c.c.length;)a=BB(n0(u),10),s!=(h=wU(n.a[a.p]))&&(f=K$(n.b,c,a),c.n.b+c.o.b+c.d.a+s.a+f>a.n.b-a.d.d+h.a+l&&(b=s.g+h.g,h.a=(h.g*h.a+s.g*s.a)/b,h.g=b,s.f=h,e=!0)),c=a,s=h;return e}function X_n(n,t,e,i,r,c,a){var u,o,s,h,f;for(f=new bA,o=t.Kc();o.Ob();)for(h=new Wb(BB(o.Pb(),839).wf());h.a<h.c.c.length;)GC((s=BB(n0(h),181)).We((sWn(),gSt)))===GC((Rtn(),XPt))&&(rKn(f,s,!1,i,r,c,a),IPn(n,f));for(u=e.Kc();u.Ob();)for(h=new Wb(BB(u.Pb(),839).wf());h.a<h.c.c.length;)GC((s=BB(n0(h),181)).We((sWn(),gSt)))===GC((Rtn(),UPt))&&(rKn(f,s,!0,i,r,c,a),IPn(n,f))}function W_n(n,t,e){var i,r,c,a,u,o,s;for(a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)for(r=new oz(ZL(dLn(c=BB(kpn(a),33)).a.Kc(),new h));dAn(r);)nAn(i=BB(U5(r),79))||nAn(i)||QCn(i)||(o=BB(qC(AY(e.f,c)),86),s=BB(RX(e,PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))),86),o&&s&&(hon(u=new UQ(o,s),(qqn(),skt),i),qan(u,i),DH(o.d,u),DH(s.b,u),DH(t.a,u)))}function V_n(n,t){var i,r,c,a,u,o,s;for(o=BB(BB(h6(n.r,t),21),84).Kc();o.Ob();)(r=(u=BB(o.Pb(),111)).c?WH(u.c):0)>0?u.a?r>(s=u.b.rf().b)&&(n.v||1==u.c.d.c.length?(a=(r-s)/2,u.d.d=a,u.d.a=a):(i=(BB(xq(u.c.d,0),181).rf().b-s)/2,u.d.d=e.Math.max(0,i),u.d.a=r-i-s)):u.d.a=n.t+r:Hz(n.u)&&((c=_Tn(u.b)).d<0&&(u.d.d=-c.d),c.d+c.a>u.b.rf().b&&(u.d.a=c.d+c.a-u.b.rf().b))}function Q_n(n,t){var e;switch(vnn(n)){case 6:return XC(t);case 7:return UC(t);case 8:return zC(t);case 3:return Array.isArray(t)&&!((e=vnn(t))>=14&&e<=16);case 11:return null!=t&&typeof t===xWn;case 12:return null!=t&&(typeof t===AWn||typeof t==xWn);case 0:return Qpn(t,n.__elementTypeId$);case 2:return DU(t)&&!(t.im===C);case 1:return DU(t)&&!(t.im===C)||Qpn(t,n.__elementTypeId$);default:return!0}}function Y_n(n,t){var i,r,c,a;return r=e.Math.min(e.Math.abs(n.c-(t.c+t.b)),e.Math.abs(n.c+n.b-t.c)),a=e.Math.min(e.Math.abs(n.d-(t.d+t.a)),e.Math.abs(n.d+n.a-t.d)),(i=e.Math.abs(n.c+n.b/2-(t.c+t.b/2)))>n.b/2+t.b/2||(c=e.Math.abs(n.d+n.a/2-(t.d+t.a/2)))>n.a/2+t.a/2?1:0==i&&0==c?0:0==i?a/c+1:0==c?r/i+1:e.Math.min(r/i,a/c)+1}function J_n(n,t){var i,r,c,a,u,o;return(c=iin(n))==(o=iin(t))?n.e==t.e&&n.a<54&&t.a<54?n.f<t.f?-1:n.f>t.f?1:0:(r=n.e-t.e,(i=(n.d>0?n.d:e.Math.floor((n.a-1)*zQn)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*zQn)+1))>r+1?c:i<r-1?-c:(!n.c&&(n.c=yhn(n.f)),a=n.c,!t.c&&(t.c=yhn(t.f)),u=t.c,r<0?a=Nnn(a,kBn(-r)):r>0&&(u=Nnn(u,kBn(r))),tgn(a,u))):c<o?-1:1}function Z_n(n,t){var e,i,r,c,a,u,o;for(c=0,u=0,o=0,r=new Wb(n.f.e);r.a<r.c.c.length;)t!=(i=BB(n0(r),144))&&(c+=a=n.i[t.b][i.b],(e=W8(t.d,i.d))>0&&n.d!=(q7(),Aat)&&(u+=a*(i.d.a+n.a[t.b][i.b]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(q7(),Cat)&&(o+=a*(i.d.b+n.a[t.b][i.b]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new xI(u/c,t.d.b);case 2:return new xI(t.d.a,o/c);default:return new xI(u/c,o/c)}}function nFn(n,t){var e,i,r,c;if(zsn(),c=BB(mMn(n.i,(HXn(),ept)),98),0!=n.j.g-t.j.g||c!=(QEn(),UIt)&&c!=WIt&&c!=XIt)return 0;if(c==(QEn(),UIt)&&(e=BB(mMn(n,ipt),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a)))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function tFn(n){var t,e,i,r,c;for(WB(c=new J6((!n.a&&(n.a=new $L(xOt,n,5)),n.a).i+2),new xI(n.j,n.k)),JT(new Rq(null,(!n.a&&(n.a=new $L(xOt,n,5)),new w1(n.a,16))),new Cg(c)),WB(c,new xI(n.b,n.c)),t=1;t<c.c.length-1;)l1(t-1,c.c.length),e=BB(c.c[t-1],8),l1(t,c.c.length),i=BB(c.c[t],8),l1(t+1,c.c.length),r=BB(c.c[t+1],8),e.a==i.a&&i.a==r.a||e.b==i.b&&i.b==r.b?s6(c,t):++t;return c}function eFn(n,t){var e,i,r,c,a,u,o;for(e=ON(iM(tM(eM(new Wv,t),new gY(t.e)),gst),n.a),0==t.j.c.length||V9(BB(xq(t.j,0),57).a,e),o=new Dp,VW(n.e,e,o),a=new Rv,u=new Rv,c=new Wb(t.k);c.a<c.c.c.length;)TU(a,(r=BB(n0(c),17)).c),TU(u,r.d);(i=a.a.gc()-u.a.gc())<0?(Uun(o,!0,(Ffn(),_Pt)),Uun(o,!1,FPt)):i>0&&(Uun(o,!1,(Ffn(),_Pt)),Uun(o,!0,FPt)),Otn(t.g,new sP(n,e)),VW(n.g,t,e)}function iFn(){var n;for(iFn=O,Ltt=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),Ntt=x8(ANt,hQn,25,37,15,1),xtt=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),Dtt=x8(LNt,FQn,25,37,14,1),n=2;n<=36;n++)Ntt[n]=IJ(e.Math.pow(n,Ltt[n])),Dtt[n]=Ojn(bVn,Ntt[n])}function rFn(n){var t;if(1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));return t=new km,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),!1)),bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),!0)),t}function cFn(n,t){var e,i,r;for(r=!1,i=new oz(ZL((t.d?n.a.c==(gJ(),tyt)?fbn(t.b):lbn(t.b):n.a.c==(gJ(),nyt)?fbn(t.b):lbn(t.b)).a.Kc(),new h));dAn(i);)if(e=BB(U5(i),17),(qy(n.a.f[n.a.g[t.b.p].p])||b5(e)||e.c.i.c!=e.d.i.c)&&!qy(n.a.n[n.a.g[t.b.p].p])&&!qy(n.a.n[n.a.g[t.b.p].p])&&(r=!0,FT(n.b,n.a.g[Lmn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function aFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(SQ(),m$(n,new Xu),u=new M2(n,0),f=new Np,c=0;u.b<u.d.gc();)Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),157),0!=f.c.length&&iG(a)*eG(a)>2*c?(h=new Gtn(f),s=iG(a)/eG(a),o=yXn(h,t,new bm,e,i,r,s),UR(kO(h.e),o),f.c=x8(Ant,HWn,1,0,5,1),c=0,f.c[f.c.length]=h,f.c[f.c.length]=a,c=iG(h)*eG(h)+iG(a)*eG(a)):(f.c[f.c.length]=a,c+=iG(a)*eG(a));return f}function uFn(n,t,e){var i,r,c,a,u,o,s;if(0==(i=e.gc()))return!1;if(n.ej())if(o=n.fj(),kwn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,o):n.Zi(5,null,e,t,o),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)s=n.Oi(r),u=n.cj(s,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(kwn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)u=n.cj(n.Oi(r),u);u&&u.Fi()}return!0}function oFn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=n.Ui(t,n.oi(t,e)),e,t,c),n.bj()&&!(n.ni()&&a?Nfn(a,e):GC(a)===GC(e))?(a&&(r=n.dj(a,r)),(r=n.cj(e,r))?(r.Ei(i),r.Fi()):n.$i(i)):r?(r.Ei(i),r.Fi()):n.$i(i),a):(a=n.Ui(t,n.oi(t,e)),n.bj()&&!(n.ni()&&a?Nfn(a,e):GC(a)===GC(e))&&(r=null,a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function sFn(n,t){var i,r,c,a,u,o,s,h;if(n.e=t,n.f=BB(mMn(t,(Mrn(),hat)),230),XTn(t),n.d=e.Math.max(16*t.e.c.length+t.c.c.length,256),!qy(TD(mMn(t,(fRn(),Hct)))))for(h=n.e.e.c.length,o=new Wb(t.e);o.a<o.c.c.length;)(s=BB(n0(o),144).d).a=OG(n.f)*h,s.b=OG(n.f)*h;for(i=t.b,a=new Wb(t.c);a.a<a.c.c.length;)if(c=BB(n0(a),282),(r=BB(mMn(c,eat),19).a)>0){for(u=0;u<r;u++)WB(i,new hX(c));BIn(c)}}function hFn(n,t){var i,r,c,a,u;if(n.k==(uSn(),Sut)&&(i=jE(AV(BB(mMn(n,(hWn(),Plt)),15).Oc(),new aw(new ri))).sd((dM(),tit))?t:(Xyn(),TIt),hon(n,ult,i),i!=(Xyn(),EIt)))for(r=BB(mMn(n,dlt),17),u=Gy(MD(mMn(r,(HXn(),agt)))),a=0,i==jIt?a=n.o.b-e.Math.ceil(u/2):i==TIt&&(n.o.b-=Gy(MD(mMn(vW(n),jpt))),a=(n.o.b-e.Math.ceil(u))/2),c=new Wb(n.j);c.a<c.c.c.length;)BB(n0(c),11).n.b=a}function fFn(){fFn=O,JM(),TNt=new Rh,Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(z7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(X7n)]),Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),new $A("-1"),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE("\\c+")])]),new $A("0"),new $A("0"),new $A("1"),new $A("0"),new $A(int)}function lFn(n){var t,e;return n.c&&n.c.kh()&&(e=BB(n.c,49),n.c=BB(tfn(n,e),138),n.c!=e&&(0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,2,e,n.c)),cL(n.Cb,399)?n.Db>>16==-15&&n.Cb.nh()&&$7(new k9(n.Cb,9,13,e,n.c,uvn(H7(BB(n.Cb,59)),n))):cL(n.Cb,88)&&n.Db>>16==-23&&n.Cb.nh()&&(cL(t=n.c,88)||(gWn(),t=d$t),cL(e,88)||(gWn(),e=d$t),$7(new k9(n.Cb,9,10,e,t,uvn(a4(BB(n.Cb,26)),n)))))),n.c}function bFn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hypernodes processing",1),i=new Wb(n.b);i.a<i.c.c.length;)for(a=new Wb(BB(n0(i),29).a);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),10),(HXn(),bgt))))&&c.j.c.length<=2){for(s=0,o=0,e=0,r=0,u=new Wb(c.j);u.a<u.c.c.length;)switch(BB(n0(u),11).j.g){case 1:++s;break;case 2:++o;break;case 3:++e;break;case 4:++r}0==s&&0==e&&jXn(n,c,r<=o)}HSn(t)}function wFn(n,t){var e,i,r,c,a,u,o,s,h;for(OTn(t,"Layer constraint edge reversal",1),a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),h=-1,e=new Np,s=n2(c.a),r=0;r<s.length;r++)i=BB(mMn(s[r],(hWn(),ilt)),303),-1==h?i!=(z7(),Ift)&&(h=r):i==(z7(),Ift)&&(PZ(s[r],null),Qyn(s[r],h++,c)),i==(z7(),Sft)&&WB(e,s[r]);for(o=new Wb(e);o.a<o.c.c.length;)PZ(u=BB(n0(o),10),null),PZ(u,c)}HSn(t)}function dFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Hyperedge merging",1),xAn(n,t),u=new M2(t.b,0);u.b<u.d.gc();)if(Px(u.b<u.d.gc()),0!=(s=BB(u.d.Xb(u.c=u.b++),29).a).c.length)for(i=null,r=null,c=null,a=null,o=0;o<s.c.length;o++)l1(o,s.c.length),(r=(i=BB(s.c[o],10)).k)==(uSn(),Put)&&a==Put&&(h=hHn(i,c)).a&&(rDn(i,c,h.b,h.c),l1(o,s.c.length),PE(s.c,o,1),--o,i=c,r=a),c=i,a=r;HSn(e)}function gFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Clt)))||GC(mMn(t.j,(HXn(),Ldt)))===GC((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Clt)))&&hon(t.j,Clt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Clt,!0)),e=eKn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=eKn(n,t)}while(r>e);return r}function pFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Clt)))||GC(mMn(t.j,(HXn(),Ldt)))===GC((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Clt)))&&hon(t.j,Clt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Clt,!0)),e=nIn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=nIn(n,t)}while(r>e);return r}function vFn(n,t,e){var i,r,c,a,u,o,s;if(t==e)return!0;if(t=bAn(n,t),e=bAn(n,e),i=qvn(t)){if((o=qvn(e))!=i)return!!o&&(a=i.Dj())==o.Dj()&&null!=a;if(!t.d&&(t.d=new $L(VAt,t,1)),r=(c=t.d).i,!e.d&&(e.d=new $L(VAt,e,1)),r==(s=e.d).i)for(u=0;u<r;++u)if(!vFn(n,BB(Wtn(c,u),87),BB(Wtn(s,u),87)))return!1;return!0}return t.e==e.e}function mFn(n,t,e,i){var r,c,a,u,o,s,h,f;if($xn(n.e,t)){for(f=axn(n.e.Tg(),t),c=BB(n.g,119),h=null,o=-1,u=-1,r=0,s=0;s<n.i;++s)a=c[s],f.rl(a.ak())&&(r==e&&(o=s),r==i&&(u=s,h=a.dd()),++r);if(-1==o)throw Hp(new Ay(u8n+e+o8n+r));if(-1==u)throw Hp(new Ay(s8n+i+o8n+r));return Cln(n,o,u),mA(n.e)&&Lv(n,LY(n,7,t,iln(i),h,e,!0)),h}throw Hp(new _y("The feature must be many-valued to support move"))}function yFn(n,t,e,i){var r,c,a,u,o;switch((o=new wA(t.n)).a+=t.o.a/2,o.b+=t.o.b/2,u=Gy(MD(mMn(t,(HXn(),tpt)))),c=n.f,a=n.d,r=n.c,BB(mMn(t,(hWn(),Qft)),61).g){case 1:o.a+=a.b+r.a-e/2,o.b=-i-u,t.n.b=-(a.d+u+r.b);break;case 2:o.a=c.a+a.b+a.c+u,o.b+=a.d+r.b-i/2,t.n.a=c.a+a.c+u-r.a;break;case 3:o.a+=a.b+r.a-e/2,o.b=c.b+a.d+a.a+u,t.n.b=c.b+a.a+u-r.b;break;case 4:o.a=-e-u,o.b+=a.d+r.b-i/2,t.n.a=-(a.b+u+r.a)}return o}function kFn(n){var t,e,i,r,c,a;return qan(i=new min,n),GC(mMn(i,(HXn(),Udt)))===GC((Ffn(),BPt))&&hon(i,Udt,Wln(i)),null==mMn(i,(I6(),TMt))&&(a=BB($Mn(n),160),hon(i,TMt,iO(a.We(TMt)))),hon(i,(hWn(),dlt),n),hon(i,Zft,new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),r=Pzn((JJ(n)&&(GM(),new Dy(JJ(n))),GM(),new JN(JJ(n)?new Dy(JJ(n)):null,n)),FPt),c=BB(mMn(i,zgt),116),eZ(e=i.d,c),eZ(e,r),i}function jFn(n,t,e){var i,r;i=t.c.i,r=e.d.i,i.k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,TD(mMn(i,slt)))):i.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,(hN(),!0))):r.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(r,hlt),11)),hon(n,flt,BB(mMn(r,flt),11)),hon(n,slt,(hN(),!0))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function EFn(n){var t,e,i,r,c,a,u;for(n.o=new Lp,i=new YT,a=new Wb(n.e.a);a.a<a.c.c.length;)1==kbn(c=BB(n0(a),121)).c.length&&r5(i,c,i.c.b,i.c);for(;0!=i.b;)0!=kbn(c=BB(0==i.b?null:(Px(0!=i.b),Atn(i,i.a.a)),121)).c.length&&(t=BB(xq(kbn(c),0),213),e=c.g.a.c.length>0,u=Nbn(t,c),KN(e?u.b:u.g,t),1==kbn(u).c.length&&r5(i,u,i.c.b,i.c),r=new rC(c,t),d3(n.o,r),y7(n.e.a,c))}function TFn(n,t){var i,r,c,a;return r=e.Math.abs(qz(n.b).a-qz(t.b).a),a=e.Math.abs(qz(n.b).b-qz(t.b).b),i=1,c=1,r>n.b.b/2+t.b.b/2&&(i=1-e.Math.min(e.Math.abs(n.b.c-(t.b.c+t.b.b)),e.Math.abs(n.b.c+n.b.b-t.b.c))/r),a>n.b.a/2+t.b.a/2&&(c=1-e.Math.min(e.Math.abs(n.b.d-(t.b.d+t.b.a)),e.Math.abs(n.b.d+n.b.a-t.b.d))/a),(1-e.Math.min(i,c))*e.Math.sqrt(r*r+a*a)}function MFn(n){var t,e,i;for(nUn(n,n.e,n.f,(dJ(),Lyt),!0,n.c,n.i),nUn(n,n.e,n.f,Lyt,!1,n.c,n.i),nUn(n,n.e,n.f,Nyt,!0,n.c,n.i),nUn(n,n.e,n.f,Nyt,!1,n.c,n.i),CFn(n,n.c,n.e,n.f,n.i),e=new M2(n.i,0);e.b<e.d.gc();)for(Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),128),i=new M2(n.i,e.b);i.b<i.d.gc();)Px(i.b<i.d.gc()),Nqn(t,BB(i.d.Xb(i.c=i.b++),128));CXn(n.i,BB(mMn(n.d,(hWn(),Slt)),230)),GGn(n.i)}function SFn(n,t){var e,i;if(null!=t)if(i=iyn(n)){if(0==(1&i.i))return nS(),!(e=BB(RX(mAt,i),55))||e.wj(t);if(i==$Nt)return zC(t);if(i==ANt)return cL(t,19);if(i==DNt)return cL(t,155);if(i==NNt)return cL(t,217);if(i==ONt)return cL(t,172);if(i==xNt)return UC(t);if(i==RNt)return cL(t,184);if(i==LNt)return cL(t,162)}else if(cL(t,56))return n.uk(BB(t,56));return!1}function PFn(){var n,t,e,i,r,c,a,u,o;for(PFn=O,WLt=x8(NNt,v6n,25,255,15,1),VLt=x8(ONt,WVn,25,64,15,1),t=0;t<255;t++)WLt[t]=-1;for(e=90;e>=65;e--)WLt[e]=e-65<<24>>24;for(i=122;i>=97;i--)WLt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)WLt[r]=r-48+52<<24>>24;for(WLt[43]=62,WLt[47]=63,c=0;c<=25;c++)VLt[c]=65+c&QVn;for(a=26,o=0;a<=51;++a,o++)VLt[a]=97+o&QVn;for(n=52,u=0;n<=61;++n,u++)VLt[n]=48+u&QVn;VLt[62]=43,VLt[63]=47}function IFn(n,t){var i,r,c,a,u,o,s,h,f,l,b;if(n.dc())return new Gj;for(s=0,f=0,r=n.Kc();r.Ob();)c=BB(r.Pb(),37).f,s=e.Math.max(s,c.a),f+=c.a*c.b;for(s=e.Math.max(s,e.Math.sqrt(f)*Gy(MD(mMn(BB(n.Kc().Pb(),37),(HXn(),Edt))))),l=0,b=0,o=0,i=t,u=n.Kc();u.Ob();)l+(h=(a=BB(u.Pb(),37)).f).a>s&&(l=0,b+=o+t,o=0),ZRn(a,l,b),i=e.Math.max(i,l+h.a),o=e.Math.max(o,h.b),l+=h.a+t;return new xI(i+t,b+o+t)}function CFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(a=new Wb(t);a.a<a.c.c.length;){if(o=(c=BB(n0(a),17)).c,e.a._b(o))dJ(),s=Lyt;else{if(!i.a._b(o))throw Hp(new _y("Source port must be in one of the port sets."));dJ(),s=Nyt}if(h=c.d,e.a._b(h))dJ(),f=Lyt;else{if(!i.a._b(h))throw Hp(new _y("Target port must be in one of the port sets."));dJ(),f=Nyt}u=new tIn(c,s,f),VW(n.b,c,u),r.c[r.c.length]=u}}function OFn(n,t){var e,i,r,c,a,u,o;if(!WJ(n))throw Hp(new Fy(F5n));if(c=(i=WJ(n)).g,r=i.f,c<=0&&r<=0)return kUn(),PCt;switch(u=n.i,o=n.j,t.g){case 2:case 1:if(u<0)return kUn(),ICt;if(u+n.g>c)return kUn(),oCt;break;case 4:case 3:if(o<0)return kUn(),sCt;if(o+n.f>r)return kUn(),SCt}return(a=(u+n.g/2)/c)+(e=(o+n.f/2)/r)<=1&&a-e<=0?(kUn(),ICt):a+e>=1&&a-e>=0?(kUn(),oCt):e<.5?(kUn(),sCt):(kUn(),SCt)}function AFn(n,t,e,i,r){var c,a;if(c=rbn(e0(t[0],UQn),e0(i[0],UQn)),n[0]=dG(c),c=kz(c,32),e>=r){for(a=1;a<r;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}else{for(a=1;a<e;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<r;a++)c=rbn(c,e0(i[a],UQn)),n[a]=dG(c),c=kz(c,32)}0!=Vhn(c,0)&&(n[a]=dG(c))}function $Fn(n){var t,e,i,r,c,a;if(wWn(),4!=n.e&&5!=n.e)throw Hp(new _y("Token#complementRanges(): must be RANGE: "+n.e));for(T$n(c=n),qHn(c),i=c.b.length+2,0==c.b[0]&&(i-=2),(e=c.b[c.b.length-1])==unt&&(i-=2),(r=new M0(4)).b=x8(ANt,hQn,25,i,15,1),a=0,c.b[0]>0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t<c.b.length-2;t+=2)r.b[a++]=c.b[t]+1,r.b[a++]=c.b[t+1]-1;return e!=unt&&(r.b[a++]=e+1,r.b[a]=unt),r.a=!0,r}function LFn(n,t,e){var i,r,c,a,u,o,s,h;if(0==(i=e.gc()))return!1;if(n.ej())if(s=n.fj(),BTn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,s):n.Zi(5,null,e,t,s),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)h=n.g[r],u=n.cj(h,u),u=n.jj(h,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(BTn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)o=n.g[r],u=n.cj(o,u);u&&u.Fi()}return!0}function NFn(n,t,e,i){var r,c,a,u,o;for(a=new Wb(n.k);a.a<a.c.c.length;)r=BB(n0(a),129),i&&r.c!=(O6(),Tyt)||(o=r.b).g<0&&r.d>0&&(Vl(o,o.d-r.d),r.c==(O6(),Tyt)&&Xl(o,o.a-r.d),o.d<=0&&o.i>0&&r5(t,o,t.c.b,t.c));for(c=new Wb(n.f);c.a<c.c.c.length;)r=BB(n0(c),129),i&&r.c!=(O6(),Tyt)||(u=r.a).g<0&&r.d>0&&(Ql(u,u.i-r.d),r.c==(O6(),Tyt)&&Wl(u,u.b-r.d),u.i<=0&&u.d>0&&r5(e,u,e.c.b,e.c))}function xFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Processor compute fanout",1),$U(n.b),$U(n.a),u=null,c=spn(t.b,0);!u&&c.b!=c.d.c;)qy(TD(mMn(s=BB(b3(c),86),(qqn(),dkt))))&&(u=s);for(r5(o=new YT,u,o.c.b,o.c),jUn(n,o),h=spn(t.b,0);h.b!=h.d.c;)a=SD(mMn(s=BB(b3(h),86),(qqn(),rkt))),r=null!=SJ(n.b,a)?BB(SJ(n.b,a),19).a:0,hon(s,ikt,iln(r)),i=1+(null!=SJ(n.a,a)?BB(SJ(n.a,a),19).a:0),hon(s,tkt,iln(i));HSn(e)}function DFn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(f=yEn(n,e),u=0;u<t;u++){for(yR(r,e),l=new Np,Px(i.b<i.d.gc()),b=BB(i.d.Xb(i.c=i.b++),407),s=f+u;s<n.b;s++)a=b,Px(i.b<i.d.gc()),WB(l,new Exn(a,b=BB(i.d.Xb(i.c=i.b++),407),e));for(h=f+u;h<n.b;h++)Px(i.b>0),i.a.Xb(i.c=--i.b),h>f+u&&fW(i);for(c=new Wb(l);c.a<c.c.c.length;)yR(i,BB(n0(c),407));if(u<t-1)for(o=f+u;o<n.b;o++)Px(i.b>0),i.a.Xb(i.c=--i.b)}}function RFn(){var n,t,e,i,r,c;if(wWn(),INt)return INt;for(sHn(n=new M0(4),ZUn(pnt,!0)),WGn(n,ZUn("M",!0)),WGn(n,ZUn("C",!0)),c=new M0(4),i=0;i<11;i++)Yxn(c,i,i);return sHn(t=new M0(4),ZUn("M",!0)),Yxn(t,4448,4607),Yxn(t,65438,65439),tqn(r=new r$(2),n),tqn(r,sNt),(e=new r$(2)).$l(gG(c,ZUn("L",!0))),e.$l(t),e=new h4(3,e),e=new UU(r,e),INt=e}function KFn(n){var t,e;if(!Ycn(t=SD(ZAn(n,(sWn(),eSt))),n)&&!P8(n,mPt)&&(0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i||qy(TD(ZAn(n,SSt))))){if(null!=t&&0!=RMn(t).length)throw gzn(n,e=oO(oO(new lN("Layout algorithm '"),t),"' not found for ")),Hp(new rk(e.a));if(!Ycn(w1n,n))throw gzn(n,e=oO(oO(new lN("Unable to load default layout algorithm "),w1n)," for unconfigured node ")),Hp(new rk(e.a))}}function _Fn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(i=n.i,t=n.n,0==n.b)for(w=i.c+t.b,b=i.b-t.b-t.c,s=0,f=(u=n.a).length;s<f;++s)UG(c=u[s],w,b);else r=Wvn(n,!1),UG(n.a[0],i.c+t.b,r[0]),UG(n.a[2],i.c+i.b-t.c-r[2],r[2]),l=i.b-t.b-t.c,r[0]>0&&(l-=r[0]+n.c,r[0]+=n.c),r[2]>0&&(l-=r[2]+n.c),r[1]=e.Math.max(r[1],l),UG(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Te()}function FFn(n){var t,e,i,r,c,a,u,o,s,h,f;for((f=new aa).d=0,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),29),f.d+=c.a.c.length;for(i=0,r=0,f.a=x8(ANt,hQn,25,n.b.c.length,15,1),s=0,h=0,f.e=x8(ANt,hQn,25,f.d,15,1),e=new Wb(n.b);e.a<e.c.c.length;)for((t=BB(n0(e),29)).p=i++,f.a[t.p]=r++,h=0,o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p=s++,f.e[u.p]=h++;return f.c=new fg(f),f.b=sx(f.d),H_n(f,n),f.f=sx(f.d),q_n(f,n),f}function BFn(n,t){var i,r,c;for(c=BB(xq(n.n,n.n.c.length-1),211).d,n.p=e.Math.min(n.p,t.g),n.r=e.Math.max(n.r,c),n.g=e.Math.max(n.g,t.g+(1==n.b.c.length?0:n.i)),n.o=e.Math.min(n.o,t.f),n.e+=t.f+(1==n.b.c.length?0:n.i),n.f=e.Math.max(n.f,t.f),r=n.n.c.length>0?(n.n.c.length-1)*n.i:0,i=new Wb(n.n);i.a<i.c.c.length;)r+=BB(n0(i),211).a;n.d=r,n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function HFn(n,t){var e,i,r,c,a,u,o,s,h;if(null==(s=TD(mMn(t,(fRn(),iat))))||(kW(s),s)){for(h=x8($Nt,ZYn,25,t.e.c.length,16,1),a=kOn(t),r=new YT,o=new Wb(t.e);o.a<o.c.c.length;)(e=Y$n(n,BB(n0(o),144),null,null,h,a))&&(qan(e,t),r5(r,e,r.c.b,r.c));if(r.b>1)for(i=spn(r,0);i.b!=i.d.c;)for(c=0,u=new Wb((e=BB(b3(i),231)).e);u.a<u.c.c.length;)BB(n0(u),144).b=c++;return r}return u6(Pun(Gk(Kct,1),tZn,231,0,[t]))}function qFn(n){var t,e,i,r,c;if(!n.g){if(c=new To,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,qFn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(i=c.i,!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();++i)ub(BB(kpn(r),449),i);pX(c,(!n.s&&(n.s=new eU(FAt,n,21,17)),n.s)),chn(c),n.g=new don(n,c),n.i=BB(c.g,247),null==n.i&&(n.i=C$t),n.p=null,P5(n).b&=-5}return n.g}function GFn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(r=n.i,i=n.n,0==n.b)t=Xvn(n,!1),XG(n.a[0],r.d+i.d,t[0]),XG(n.a[2],r.d+r.a-i.a-t[2],t[2]),l=r.a-i.d-i.a,t[0]>0&&(t[0]+=n.c,l-=t[0]),t[2]>0&&(l-=t[2]+n.c),t[1]=e.Math.max(t[1],l),XG(n.a[1],r.d+i.d+t[0]-(t[1]-l)/2,t[1]);else for(w=r.d+i.d,b=r.a-i.d-i.a,s=0,f=(u=n.a).length;s<f;++s)XG(c=u[s],w,b);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Ue()}function zFn(n){var t,e,i,r,c,a,u,o,s;for(s=x8(ANt,hQn,25,n.b.c.length+1,15,1),o=new Rv,i=0,c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),s[i++]=o.a.gc(),u=new Wb(r.a);u.a<u.c.c.length;)for(e=new oz(ZL(lbn(BB(n0(u),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.zc(t,o);for(a=new Wb(r.a);a.a<a.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(a),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.Bc(t)}return s}function UFn(n,t,e,i){var r,c,a,u,o;if(o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&Nfn(c,e))return!0}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],o.rl(c.ak())&&Nfn(e,c.dd()))return!0;if(i)for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&GC(e)===GC(hD(n,BB(c.dd(),56))))return!0}else for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&null==c.dd())return!1;return!1}function XFn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),a=BB(n.g,119),$xn(n.e,t)){if(t.hi()&&(c=pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))>=0&&c!=e)throw Hp(new _y(a8n));for(r=0,o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak())){if(r==e)return BB(ovn(n,o,(ZM(),BB(t,66).Oj()?BB(i,72):Z3(t,i))),72);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak()))return ZM(),BB(t,66).Oj()?u:u.dd();return null}function WFn(n,t,i,r){var c,a,u,o;for(o=i,u=new Wb(t.a);u.a<u.c.c.length;){if(a=BB(n0(u),221),c=BB(a.b,65),Cbn(n.b.c,c.b.c+c.b.b)<=0&&Cbn(c.b.c,n.b.c+n.b.b)<=0&&Cbn(n.b.d,c.b.d+c.b.a)<=0&&Cbn(c.b.d,n.b.d+n.b.a)<=0){if(0==Cbn(c.b.c,n.b.c+n.b.b)&&r.a<0||0==Cbn(c.b.c+c.b.b,n.b.c)&&r.a>0||0==Cbn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Cbn(c.b.d+c.b.a,n.b.d)&&r.b>0){o=0;break}}else o=e.Math.min(o,HIn(n,c,r));o=e.Math.min(o,WFn(n,a,o,r))}return o}function VFn(n,t){var e,i,r,c,a,u;if(n.b<2)throw Hp(new _y("The vector chain must contain at least a source and a target point."));for(Px(0!=n.b),IA(t,(i=BB(n.a.a.c,8)).a,i.b),u=new cx((!t.a&&(t.a=new $L(xOt,t,5)),t.a)),c=spn(n,1);c.a<n.b-1;)a=BB(b3(c),8),u.e!=u.i.gc()?e=BB(kpn(u),469):(tE(),odn(u,e=new ro)),TA(e,a.a,a.b);for(;u.e!=u.i.gc();)kpn(u),Qjn(u);Px(0!=n.b),PA(t,(r=BB(n.c.b.c,8)).a,r.b)}function QFn(n,t){var e,i,r,c,a,u,o,s;for(e=0,i=new Wb((l1(0,n.c.length),BB(n.c[0],101)).g.b.j);i.a<i.c.c.length;)BB(n0(i),11).p=e++;for(t==(kUn(),sCt)?m$(n,new nc):m$(n,new tc),a=0,s=n.c.length-1;a<s;)l1(a,n.c.length),c=BB(n.c[a],101),l1(s,n.c.length),o=BB(n.c[s],101),r=t==sCt?c.c:c.a,u=t==sCt?o.a:o.c,bU(c,t,(Oun(),yst),r),bU(o,t,mst,u),++a,--s;a==s&&bU((l1(a,n.c.length),BB(n.c[a],101)),t,(Oun(),vst),null)}function YFn(n,t,e){var i,r,c,a,u,o,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new xI(t.i+t.g/2,t.j+t.f/2),(o=BB(ZAn(t,(sWn(),gPt)),8)).a=o.a+h,o.b=o.b+f,r=(a.b-o.b)/(a.a-o.a),i=a.b-r*a.a,u=new xI(e.i+e.g/2,e.j+e.f/2),(s=BB(ZAn(e,gPt),8)).a=s.a+h,s.b=s.b+f,c=(u.b-s.b)/(u.a-s.a),l=(i-(u.b-c*u.a))/(c-r),!(o.a<l&&a.a<l||l<o.a&&l<a.a||s.a<l&&u.a<l||l<s.a&&l<u.a)}function JFn(n,t){var e,i,r,c,a,u;if(!(a=BB(RX(n.c,t),183)))throw Hp(new ek("Edge did not exist in input."));return i=Qdn(a),!WE((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a))&&(e=new MB(n,i,u=new Il),wO((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),e),rtn(a,x6n,u)),P8(t,(sWn(),OSt))&&!(!(r=BB(ZAn(t,OSt),74))||pW(r))&&(e5(r,new Qg(c=new Il)),rtn(a,"junctionPoints",c)),AH(a,"container",XJ(t).k),null}function ZFn(n,t,e){var i,r,c,a,u,o;this.a=n,this.b=t,this.c=e,this.e=u6(Pun(Gk(uit,1),HWn,168,0,[new xS(n,t),new xS(t,e),new xS(e,n)])),this.f=u6(Pun(Gk(PMt,1),sVn,8,0,[n,t,e])),this.d=(i=XR(B$(this.b),this.a),r=XR(B$(this.c),this.a),c=XR(B$(this.c),this.b),a=i.a*(this.a.a+this.b.a)+i.b*(this.a.b+this.b.b),u=r.a*(this.a.a+this.c.a)+r.b*(this.a.b+this.c.b),o=2*(i.a*c.b-i.b*c.a),new xI((r.b*a-i.b*u)/o,(i.a*u-r.a*a)/o))}function nBn(n,t,e,i){var r,c,a,u,o,s,h,f,l;if(f=new GX(n.p),rtn(t,t8n,f),e&&!(n.f?rY(n.f):null).a.dc())for(rtn(t,"logs",s=new Il),u=0,l=new qb((n.f?rY(n.f):null).b.Kc());l.b.Ob();)h=new GX(SD(l.b.Pb())),dnn(s,u),r4(s,u,h),++u;if(i&&rtn(t,"executionTime",new Sl(n.q)),!rY(n.a).a.dc())for(a=new Il,rtn(t,A6n,a),u=0,c=new qb(rY(n.a).b.Kc());c.b.Ob();)r=BB(c.b.Pb(),1949),o=new py,dnn(a,u),r4(a,u,o),nBn(r,o,e,i),++u}function tBn(n,t){var e,i,r,c,a,u;for(c=n.c,a=n.d,SZ(n,null),MZ(n,null),t&&qy(TD(mMn(a,(hWn(),tlt))))?SZ(n,R_n(a.i,(ain(),qvt),(kUn(),oCt))):SZ(n,a),t&&qy(TD(mMn(c,(hWn(),klt))))?MZ(n,R_n(c.i,(ain(),Hvt),(kUn(),ICt))):MZ(n,c),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),70),(r=BB(mMn(e,(HXn(),Ydt)),272))==(Rtn(),XPt)?hon(e,Ydt,UPt):r==UPt&&hon(e,Ydt,XPt);u=qy(TD(mMn(n,(hWn(),Ilt)))),hon(n,Ilt,(hN(),!u)),n.a=Jon(n.a)}function eBn(n,t,i){var r,c,a,u,o;for(r=0,a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)u="",0==(!(c=BB(kpn(a),33)).n&&(c.n=new eU(zOt,c,1,7)),c.n).i||(u=BB(Wtn((!c.n&&(c.n=new eU(zOt,c,1,7)),c.n),0),137).a),qan(o=new qX(u),c),hon(o,(Mrn(),sat),c),o.b=r++,o.d.a=c.i+c.g/2,o.d.b=c.j+c.f/2,o.e.a=e.Math.max(c.g,1),o.e.b=e.Math.max(c.f,1),WB(t.e,o),jIn(i.f,c,o),BB(ZAn(c,(fRn(),Yct)),98),QEn()}function iBn(n,t){var i,r,c,a,u,o,s,h,f,l,b;i=AN(new qv,n.f),o=n.i[t.c.i.p],l=n.i[t.d.i.p],u=t.c,f=t.d,a=u.a.b,h=f.a.b,o.b||(a+=u.n.b),l.b||(h+=f.n.b),s=IJ(e.Math.max(0,a-h)),c=IJ(e.Math.max(0,h-a)),b=e.Math.max(1,BB(mMn(t,(HXn(),bpt)),19).a)*X3(t.c.i.k,t.d.i.k),r=new nI(UNn(aM(cM(rM(uM(new Hv,b),c),i),BB(RX(n.k,t.c),121))),UNn(aM(cM(rM(uM(new Hv,b),s),i),BB(RX(n.k,t.d),121)))),n.c[t.p]=r}function rBn(n,t,e,i){var r,c,a,u,o,s;for(a=new uGn(n,t,e),o=new M2(i,0),r=!1;o.b<o.d.gc();)Px(o.b<o.d.gc()),(u=BB(o.d.Xb(o.c=o.b++),233))==t||u==e?fW(o):!r&&Gy(lL(u.g,u.d[0]).a)>Gy(lL(a.g,a.d[0]).a)?(Px(o.b>0),o.a.Xb(o.c=--o.b),yR(o,a),r=!0):u.e&&u.e.gc()>0&&(c=(!u.e&&(u.e=new Np),u.e).Mc(t),s=(!u.e&&(u.e=new Np),u.e).Mc(e),(c||s)&&((!u.e&&(u.e=new Np),u.e).Fc(a),++a.c));r||(i.c[i.c.length]=a)}function cBn(n){var t,e,i;if(vA(BB(mMn(n,(HXn(),ept)),98)))for(e=new Wb(n.j);e.a<e.c.c.length;)(t=BB(n0(e),11)).j==(kUn(),PCt)&&((i=BB(mMn(t,(hWn(),Elt)),10))?qIn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qIn(t,oCt):qIn(t,ICt));else{for(e=new Wb(n.j);e.a<e.c.c.length;)t=BB(n0(e),11),(i=BB(mMn(t,(hWn(),Elt)),10))?qIn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qIn(t,(kUn(),oCt)):qIn(t,(kUn(),ICt));hon(n,ept,(QEn(),VIt))}}function aBn(n){var t,e;switch(n){case 91:case 93:case 45:case 94:case 44:case 92:e="\\"+String.fromCharCode(n&QVn);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=n<32?"\\x"+fx(t="0"+(n>>>0).toString(16),t.length-2,t.length):n>=BQn?"\\v"+fx(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&QVn)}return e}function uBn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=n.e,0==(o=t.e))return n;if(0==a)return 0==t.e?t:new lU(-t.e,t.d,t.a);if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a<0&&(e=j7(e)),o<0&&(i=j7(i)),npn(ibn(e,i));if(-1==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))f=-o,h=a==o?d6(t.a,u,n.a,c):N8(t.a,u,n.a,c);else if(f=a,a==o){if(0==r)return ODn(),eet;h=d6(n.a,c,t.a,u)}else h=N8(n.a,c,t.a,u);return X0(s=new lU(f,h.length,h)),s}function oBn(n){var t,e,i,r,c,a;for(this.e=new Np,this.a=new Np,e=n.b-1;e<3;e++)Kx(n,0,BB(Dpn(n,0),8));if(n.b<4)throw Hp(new _y("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,C$n(this,n.b+this.b-1),a=new Np,c=new Wb(this.e),t=0;t<this.b-1;t++)WB(a,MD(n0(c)));for(r=spn(n,0);r.b!=r.d.c;)i=BB(b3(r),8),WB(a,MD(n0(c))),WB(this.a,new wJ(i,a)),l1(0,a.c.length),a.c.splice(0,1)}function sBn(n,t){var e,i,r,c,a,u,o;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)for((c=BB(n0(a),10)).k==(uSn(),Sut)&&(u=BB(U5(new oz(ZL(fbn(c).a.Kc(),new h))),17),o=BB(U5(new oz(ZL(lbn(c).a.Kc(),new h))),17),hFn(c,qy(TD(mMn(u,(hWn(),Ilt))))&&qy(TD(mMn(o,Ilt)))?Xun(t):t)),i=new oz(ZL(lbn(c).a.Kc(),new h));dAn(i);)vun(e=BB(U5(i),17),qy(TD(mMn(e,(hWn(),Ilt))))?Xun(t):t)}function hBn(n,t,e,i,r){var c,a;if(e.f>=t.o&&e.f<=t.f||.5*t.a<=e.f&&1.5*t.a>=e.f){if((c=BB(xq(t.n,t.n.c.length-1),211)).e+c.d+e.g+r<=i&&(BB(xq(t.n,t.n.c.length-1),211).f-n.f+e.f<=n.b||1==n.a.c.length))return ybn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return WB(t.b,e),a=BB(xq(t.n,t.n.c.length-1),211),WB(t.n,new RJ(t.s,a.f+a.a+t.i,t.i)),smn(BB(xq(t.n,t.n.c.length-1),211),e),BFn(t,e),!0}return!1}function fBn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=onn(n,t,e),e,t,c),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GC(a)===GC(e))?(null!=a&&(r=n.dj(a,r)),r=n.cj(e,r),n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):(n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)),a):(a=onn(n,t,e),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GC(a)===GC(e))&&(r=null,null!=a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function lBn(n,t){var i,r,c,a,u,o,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(u=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(o=u/60|0,s=u%60,r=n.q.getDate(),n.q.getHours()+o>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+o,n.q.getMinutes()+s,n.q.getSeconds(),n.q.getMilliseconds()),n.q.setTime(c.getTime()))),a=n.q.getTime(),n.q.setTime(a+36e5),n.q.getHours()!=t&&n.q.setTime(a)}function bBn(n,t){var e,i,r,c;if(OTn(t,"Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new MAn(n)).i&&(r.i=Wrn(r,new kc)),e=Gy(r.i)*r.f/(null==r.i&&(r.i=Wrn(r,new kc)),Gy(r.i)),r.b>e)HSn(t);else{switch(BB(mMn(n,(HXn(),Bpt)),337).g){case 2:c=new Tc;break;case 0:c=new wc;break;default:c=new Mc}if(i=c.Vf(n,r),!c.Wf())switch(BB(mMn(n,Xpt),338).g){case 2:i=XIn(r,i);break;case 1:i=KTn(r,i)}iqn(n,r,i),HSn(t)}else HSn(t)}function wBn(n,t){var e,i,r,c;if(f1(n.d,n.e),n.c.a.$b(),0!=Gy(MD(mMn(t.j,(HXn(),Cdt))))||0!=Gy(MD(mMn(t.j,Cdt))))for(e=ZJn,GC(mMn(t.j,Ldt))!==GC((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=gFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);else for(e=DWn,GC(mMn(t.j,Ldt))!==GC((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=pFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);}function dBn(n,t){var e,i,r,c,a,u;for(r=new Np,c=0,e=0,a=0;c<t.c.length-1&&e<n.gc();){for(i=BB(n.Xb(e),19).a+a;(l1(c+1,t.c.length),BB(t.c[c+1],19)).a<i;)++c;for(u=0,i-(l1(c,t.c.length),BB(t.c[c],19)).a>(l1(c+1,t.c.length),BB(t.c[c+1],19)).a-i&&++u,WB(r,(l1(c+u,t.c.length),BB(t.c[c+u],19))),a+=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a-i,++e;e<n.gc()&&BB(n.Xb(e),19).a+a<=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a;)++e;c+=1+u}return r}function gBn(n){var t,e,i,r,c;if(!n.d){if(c=new Po,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,gBn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new eU(QAt,n,11,10)),i=new AL(n.q);i.e!=i.i.gc();++r)BB(kpn(i),399);pX(c,(!n.q&&(n.q=new eU(QAt,n,11,10)),n.q)),chn(c),n.d=new NO((BB(Wtn(QQ((QX(),t$t).o),9),18),c.i),c.g),n.e=BB(c.g,673),null==n.e&&(n.e=I$t),P5(n).b&=-17}return n.d}function pBn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),o=0,r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(Nfn(c,e))return o;++o}}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],s.rl(c.ak())){if(Nfn(e,c.dd()))return o;++o}if(i)for(o=0,a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(GC(e)===GC(hD(n,BB(c.dd(),56))))return o;++o}}else for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(null==c.dd())return o;++o}return-1}function vBn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(SQ(),m$(n,new zu),a=zB(n),b=new Np,l=new Np,u=null,o=0;0!=a.b;)c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),157),!u||iG(u)*eG(u)/2<iG(c)*eG(c)?(u=c,b.c[b.c.length]=c):(o+=iG(c)*eG(c),l.c[l.c.length]=c,l.c.length>1&&(o>iG(u)*eG(u)/2||0==a.b)&&(f=new Gtn(l),h=iG(u)/eG(u),s=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),s),u=f,b.c[b.c.length]=f,o=0,l.c=x8(Ant,HWn,1,0,5,1)));return gun(b,l),b}function mBn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(e.mh(t)&&(h=(b=t)?BB(i,49).xh(b):null))if(d=e.bh(t,n.a),(w=t.t)>1||-1==w)if(f=BB(d,69),l=BB(h,69),f.dc())l.$b();else for(a=!!Ivn(t),c=0,u=n.a?f.Kc():f.Zh();u.Ob();)s=BB(u.Pb(),56),(r=BB(lnn(n,s),56))?(a?-1==(o=l.Xc(r))?l.Xh(c,r):c!=o&&l.ji(c,r):l.Xh(c,r),++c):n.b&&!a&&(l.Xh(c,s),++c);else null==d?h.Wb(null):null==(r=lnn(n,d))?n.b&&!Ivn(t)&&h.Wb(d):h.Wb(r)}function yBn(n,t){var i,r,c,a,u,o,s,f;for(i=new Le,c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&eTn(o=r.c.i,Xut)){if(-1==(f=VDn(n,o,Xut,Uut)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Np),WB(i.a,o)}for(u=new oz(ZL(lbn(t).a.Kc(),new h));dAn(u);)if(!b5(a=BB(U5(u),17))&&eTn(s=a.d.i,Uut)){if(-1==(f=VDn(n,s,Uut,Xut)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Np),WB(i.c,s)}return i}function kBn(n){var t,e,i,r;if($On(),t=IJ(n),n<uet.length)return uet[t];if(n<=50)return uOn((ODn(),net),t);if(n<=VVn)return G5(uOn(aet[1],t),t);if(n>1e6)throw Hp(new Oy("power of ten too big"));if(n<=DWn)return G5(uOn(aet[1],t),t);for(r=i=uOn(aet[1],DWn),e=fan(n-DWn),t=IJ(n%DWn);Vhn(e,DWn)>0;)r=Nnn(r,i),e=ibn(e,DWn);for(r=G5(r=Nnn(r,uOn(aet[1],t)),DWn),e=fan(n-DWn);Vhn(e,DWn)>0;)r=G5(r,DWn),e=ibn(e,DWn);return r=G5(r,t)}function jBn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hierarchical port dummy size processing",1),u=new Np,s=new Np,e=2*Gy(MD(mMn(n,(HXn(),kpt)))),r=new Wb(n.b);r.a<r.c.c.length;){for(i=BB(n0(r),29),u.c=x8(Ant,HWn,1,0,5,1),s.c=x8(Ant,HWn,1,0,5,1),a=new Wb(i.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((o=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sCt)?u.c[u.c.length]=c:o==SCt&&(s.c[s.c.length]=c));HOn(u,!0,e),HOn(s,!1,e)}HSn(t)}function EBn(n,t){var e,i,r,c,a;OTn(t,"Layer constraint postprocessing",1),0!=(a=n.b).c.length&&(l1(0,a.c.length),_Kn(n,BB(a.c[0],29),BB(xq(a,a.c.length-1),29),e=new HX(n),r=new HX(n)),0==e.a.c.length||(LZ(0,a.c.length),MS(a.c,0,e)),0==r.a.c.length||(a.c[a.c.length]=r)),Lx(n,(hWn(),nlt))&&(yDn(n,i=new HX(n),c=new HX(n)),0==i.a.c.length||(LZ(0,a.c.length),MS(a.c,0,i)),0==c.a.c.length||(a.c[a.c.length]=c)),HSn(t)}function TBn(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),oCt)||r==ICt))for(i=new oz(ZL(hbn(c).a.Kc(),new h));dAn(i);)0!=(t=(e=BB(U5(i),17)).a).b&&((u=e.c).i==c&&(Px(0!=t.b),BB(t.a.a.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).b),(o=e.d).i==c&&(Px(0!=t.b),BB(t.c.b.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).b))}function MBn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Sort By Input Model "+mMn(n,(HXn(),Ldt)),1),r=0,i=new Wb(n.b);i.a<i.c.c.length;){for(e=BB(n0(i),29),o=0==r?0:r-1,u=BB(xq(n.b,o),29),a=new Wb(e.a);a.a<a.c.c.length;)GC(mMn(c=BB(n0(a),10),ept))!==GC((QEn(),UIt))&&GC(mMn(c,ept))!==GC(XIt)&&(SQ(),m$(c.j,new O7(u,okn(c))),OH(t,"Node "+c+" ports: "+c.j));SQ(),m$(e.a,new Grn(u,BB(mMn(n,Ldt),339),BB(mMn(n,Adt),378))),OH(t,"Layer "+r+": "+e),++r}HSn(t)}function SBn(n,t){var e,i,r;if(r=kFn(t),JT(new Rq(null,(!t.c&&(t.c=new eU(XOt,t,9,9)),new w1(t.c,16))),new Uw(r)),uzn(t,i=BB(mMn(r,(hWn(),Zft)),21)),i.Hc((bDn(),lft)))for(e=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));e.e!=e.i.gc();)Qzn(n,t,r,BB(kpn(e),118));return 0!=BB(ZAn(t,(HXn(),Fgt)),174).gc()&&mDn(t,r),qy(TD(mMn(r,Xgt)))&&i.Fc(pft),Lx(r,gpt)&&My(new uwn(Gy(MD(mMn(r,gpt)))),r),GC(ZAn(t,sgt))===GC((ufn(),pIt))?cWn(n,t,r):eXn(n,t,r),r}function PBn(n,t,i,r){var c,a,u;if(this.j=new Np,this.k=new Np,this.b=new Np,this.c=new Np,this.e=new bA,this.i=new km,this.f=new Dp,this.d=new Np,this.g=new Np,WB(this.b,n),WB(this.b,t),this.e.c=e.Math.min(n.a,t.a),this.e.d=e.Math.min(n.b,t.b),this.e.b=e.Math.abs(n.a-t.a),this.e.a=e.Math.abs(n.b-t.b),c=BB(mMn(r,(HXn(),vgt)),74))for(u=spn(c,0);u.b!=u.d.c;)aen((a=BB(b3(u),8)).a,n.a)&&DH(this.i,a);i&&WB(this.j,i),WB(this.k,r)}function IBn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(h=new Xz(new xw(e)),vU(u=x8($Nt,ZYn,25,n.f.e.c.length,16,1),u.length),e[t.b]=0,s=new Wb(n.f.e);s.a<s.c.c.length;)(o=BB(n0(s),144)).b!=t.b&&(e[o.b]=DWn),F8(eMn(h,o));for(;0!=h.b.c.length;)for(u[(f=BB(mnn(h),144)).b]=!0,c=vN(new mT(n.b,f),0);c.c;)u[(l=$mn(r=BB(EZ(c),282),f)).b]||(a=Lx(r,(rkn(),pat))?Gy(MD(mMn(r,pat))):n.c,(i=e[f.b]+a)<e[l.b]&&(e[l.b]=i,srn(h,l),F8(eMn(h,l))))}function CBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(r=!0,a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),s=KQn,h=null,o=new Wb(c.a);o.a<o.c.c.length;){if(u=BB(n0(o),10),f=Gy(t.p[u.p])+Gy(t.d[u.p])-u.d.d,i=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a,!(f>s&&i>s)){r=!1,e.n&&OH(e,"bk node placement breaks on "+u+" which should have been after "+h);break}h=u,s=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a}if(!r)break}return e.n&&OH(e,t+" is feasible: "+r),r}function OBn(n,t,e,i){var r,c,a,u,o,s,h;for(u=-1,h=new Wb(n);h.a<h.c.c.length;)(s=BB(n0(h),112)).g=u--,a=r=dG(E2(NV(AV(new Rq(null,new w1(s.f,16)),new sa),new ha)).d),o=c=dG(E2(NV(AV(new Rq(null,new w1(s.k,16)),new fa),new la)).d),i||(a=dG(E2(NV(new Rq(null,new w1(s.f,16)),new ba)).d),o=dG(E2(NV(new Rq(null,new w1(s.k,16)),new wa)).d)),s.d=a,s.a=r,s.i=o,s.b=c,0==o?r5(e,s,e.c.b,e.c):0==a&&r5(t,s,t.c.b,t.c)}function ABn(n,t,e,i){var r,c,a,u,o,s,h;if(e.d.i!=t.i){for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XIt)),i.c[i.c.length]=r,IZ(a=new ISn,r),qIn(a,(kUn(),ICt)),IZ(u=new ISn,r),qIn(u,oCt),h=e.d,MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,h),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),GC(mMn(o=BB(s.d.Xb(s.c=s.b++),70),Ydt))===GC((Rtn(),UPt))&&(hon(o,Uft,e),fW(s),WB(c.b,o));yAn(r,a,u)}}function $Bn(n,t,e,i){var r,c,a,u,o,s;if(e.c.i!=t.i)for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XIt)),i.c[i.c.length]=r,IZ(a=new ISn,r),qIn(a,(kUn(),ICt)),IZ(u=new ISn,r),qIn(u,oCt),MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,t),yAn(r,a,u),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),o=BB(s.d.Xb(s.c=s.b++),70),BB(mMn(o,Ydt),272)==(Rtn(),UPt)&&(Lx(o,Uft)||hon(o,Uft,e),fW(s),WB(c.b,o))}function LBn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(l=new Np,p=S4(r),g=t*n.a,w=0,a=new Rv,u=new Rv,o=new Np,v=0,m=0,b=0,d=0,h=0,f=0;0!=p.a.gc();)(s=tbn(p,c,u))&&(p.a.Bc(s),o.c[o.c.length]=s,a.a.zc(s,a),w=n.f[s.p],v+=n.e[s.p]-w*n.b,m+=n.c[s.p]*n.b,f+=w*n.b,d+=n.e[s.p]),(!s||0==p.a.gc()||v>=g&&n.e[s.p]>w*n.b||m>=i*g)&&(l.c[l.c.length]=o,o=new Np,Frn(u,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=m,v=m,m=0,f=0,d=0);return new rC(b,l)}function NBn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(e=new Kb(new Ob(n.c.b).a.vc().Kc());e.a.Ob();)u=BB(e.a.Pb(),42),null==(r=(t=BB(u.dd(),149)).a)&&(r=""),!(i=_D(n.c,r))&&0==r.length&&(i=yfn(n)),i&&!ywn(i.c,t,!1)&&DH(i.c,t);for(a=spn(n.a,0);a.b!=a.d.c;)c=BB(b3(a),478),s=T5(n.c,c.a),l=T5(n.c,c.b),s&&l&&DH(s.c,new rC(l,c.c));for(yQ(n.a),f=spn(n.b,0);f.b!=f.d.c;)h=BB(b3(f),478),t=KD(n.c,h.a),o=T5(n.c,h.b),t&&o&&DM(t,o,h.c);yQ(n.b)}function xBn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;c=new Pl(n),d5((a=new dkn).g),d5(a.j),$U(a.b),d5(a.d),d5(a.i),$U(a.k),$U(a.c),$U(a.e),b=bCn(a,c,null),O$n(a,c),r=b,t&&(u=eHn(s=new Pl(t)),vSn(r,Pun(Gk(nMt,1),HWn,527,0,[u]))),l=!1,f=!1,e&&(s=new Pl(e),l8n in s.a&&(l=zJ(s,l8n).ge().a),b8n in s.a&&(f=zJ(s,b8n).ge().a)),h=$j(Fen(new Xm,l),f),BSn(new su,r,h),l8n in c.a&&rtn(c,l8n,null),(l||f)&&(nBn(h,o=new py,l,f),rtn(c,l8n,o)),i=new Xg(a),Uon(new OA(r),i)}function DBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(a=new Ykn,s=Pun(Gk(ANt,1),hQn,25,15,[0]),r=-1,c=0,i=0,o=0;o<n.b.c.length;++o){if(!((h=BB(xq(n.b,o),434)).b>0)){if(r=-1,32==fV(h.c,0)){if(f=s[0],ynn(t,s),s[0]>f)continue}else if($Y(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=o,c=s[0],i=0),r>=0){if(u=h.b,o==r&&0==(u-=i++))return 0;if(!LUn(t,s,h,u,a)){o=r-1,s[0]=c;continue}}else if(r=-1,!LUn(t,s,h,0,a))return 0}return dUn(a,e)?s[0]:0}function RBn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Mo,c=new Mo,null==(t=P$t).a.zc(n,t)){for(r=new AL(kY(n));r.e!=r.i.gc();)pX(a,RBn(BB(kpn(r),26)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),i=new AL(n.s);i.e!=i.i.gc();)cL(e=BB(kpn(i),170),99)&&f9(c,BB(e,18));chn(c),n.r=new TH(n,(BB(Wtn(QQ((QX(),t$t).o),6),18),c.i),c.g),pX(a,n.r),chn(a),n.f=new NO((BB(Wtn(QQ(t$t.o),5),18),a.i),a.g),P5(n).b&=-3}return n.f}function KBn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(a=n.o,i=x8(ANt,hQn,25,a,15,1),r=x8(ANt,hQn,25,a,15,1),e=n.p,t=x8(ANt,hQn,25,e,15,1),c=x8(ANt,hQn,25,e,15,1),s=0;s<a;s++){for(f=0;f<e&&!vmn(n,s,f);)++f;i[s]=f}for(h=0;h<a;h++){for(f=e-1;f>=0&&!vmn(n,h,f);)--f;r[h]=f}for(b=0;b<e;b++){for(u=0;u<a&&!vmn(n,u,b);)++u;t[b]=u}for(w=0;w<e;w++){for(u=a-1;u>=0&&!vmn(n,u,w);)--u;c[w]=u}for(o=0;o<a;o++)for(l=0;l<e;l++)o<c[l]&&o>t[l]&&l<r[o]&&l>i[o]&&FRn(n,o,l,!1,!0)}function _Bn(n){var t,e,i,r,c,a,u,o;e=qy(TD(mMn(n,(fRn(),Bct)))),c=n.a.c.d,u=n.a.d.d,e?(a=kL(XR(new xI(u.a,u.b),c),.5),o=kL(B$(n.e),.5),t=XR(UR(new xI(c.a,c.b),a),o),Hx(n.d,t)):(r=Gy(MD(mMn(n.a,rat))),i=n.d,c.a>=u.a?c.b>=u.b?(i.a=u.a+(c.a-u.a)/2+r,i.b=u.b+(c.b-u.b)/2-r-n.e.b):(i.a=u.a+(c.a-u.a)/2+r,i.b=c.b+(u.b-c.b)/2+r):c.b>=u.b?(i.a=c.a+(u.a-c.a)/2+r,i.b=u.b+(c.b-u.b)/2+r):(i.a=c.a+(u.a-c.a)/2+r,i.b=c.b+(u.b-c.b)/2-r-n.e.b))}function FBn(n,t){var e,i,r,c,a,u,o;if(null==n)return null;if(0==(c=n.length))return"";for(o=x8(ONt,WVn,25,c,15,1),_8(0,c,n.length),_8(0,c,o.length),YU(n,0,c,o,0),e=null,u=t,r=0,a=0;r<c;r++)i=o[r],EWn(),i<=32&&0!=(2&JLt[i])?u?(!e&&(e=new fN(n)),aY(e,r-a++)):(u=t,32!=i&&(!e&&(e=new fN(n)),sV(e,r-a,r-a+1,String.fromCharCode(32)))):u=!1;return u?e?(c=e.a.length)>0?fx(e.a,0,c-1):"":n.substr(0,c-1):e?e.a:n}function BBn(n){NM(n,new MTn(vj(wj(pj(gj(new du,UJn),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new at))),u2(n,UJn,XJn,mpn(Ect)),u2(n,UJn,WJn,mpn(pct)),u2(n,UJn,VJn,mpn(lct)),u2(n,UJn,QJn,mpn(vct)),u2(n,UJn,XYn,mpn(kct)),u2(n,UJn,WYn,mpn(yct)),u2(n,UJn,UYn,mpn(jct)),u2(n,UJn,VYn,mpn(mct)),u2(n,UJn,BJn,mpn(wct)),u2(n,UJn,HJn,mpn(bct)),u2(n,UJn,qJn,mpn(dct)),u2(n,UJn,GJn,mpn(gct))}function HBn(n,t,e,i){var r,c,a,u,o,s,h;if(Bl(c=new $vn(n),(uSn(),Cut)),hon(c,(HXn(),ept),(QEn(),XIt)),r=0,t){for(hon(a=new ISn,(hWn(),dlt),t),hon(c,dlt,t.i),qIn(a,(kUn(),ICt)),IZ(a,c),s=0,h=(o=Z0(t.e)).length;s<h;++s)MZ(o[s],a);hon(t,Elt,c),++r}if(e){for(u=new ISn,hon(c,(hWn(),dlt),e.i),hon(u,dlt,e),qIn(u,(kUn(),oCt)),IZ(u,c),s=0,h=(o=Z0(e.g)).length;s<h;++s)SZ(o[s],u);hon(e,Elt,c),++r}return hon(c,(hWn(),Bft),iln(r)),i.c[i.c.length]=c,c}function qBn(){qBn=O,OOt=Pun(Gk(ONt,1),WVn,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),AOt=new RegExp("[ \t\n\r\f]+");try{COt=Pun(Gk(D$t,1),HWn,2015,0,[new vp((s$(),sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",fR((fk(),fk(),rtt))))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm",fR(rtt))),new vp(sdn("yyyy-MM-dd",fR(rtt)))])}catch(n){if(!cL(n=lun(n),78))throw Hp(n)}}function GBn(n){var t,i,r,c;if(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=iin(n)<0?1:0,i=n.e,r.length,e.Math.abs(IJ(n.e)),c=new Ck,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>qtt.length;i-=qtt.length)Nq(c,qtt);gR(c,qtt,IJ(i)),oO(c,r.substr(t))}else oO(c,fx(r,t,IJ(i=t-i))),c.a+=".",oO(c,nO(r,IJ(i)));else{for(oO(c,r.substr(t));i<-qtt.length;i+=qtt.length)Nq(c,qtt);gR(c,qtt,IJ(-i))}return c.a}function zBn(n,t,i,r){var c,a,u,o,s,h,f,l,b;return h=(s=XR(new xI(i.a,i.b),n)).a*t.b-s.b*t.a,f=t.a*r.b-t.b*r.a,l=(s.a*r.b-s.b*r.a)/f,b=h/f,0==f?0==h?(a=W8(n,c=UR(new xI(i.a,i.b),kL(new xI(r.a,r.b),.5))),u=W8(UR(new xI(n.a,n.b),t),c),o=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a<u&&a<=o?new xI(n.a,n.b):u<=o?UR(new xI(n.a,n.b),t):null):null:l>=0&&l<=1&&b>=0&&b<=1?UR(new xI(n.a,n.b),kL(new xI(t.a,t.b),l)):null}function UBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(u=new Wb(n.a);u.a<u.c.c.length;)(a=BB(n0(u),10)).k==(uSn(),Mut)&&((r=BB(mMn(a,Qft),61))==(kUn(),oCt)?a.n.a+=e.a-t.a:r==SCt&&(a.n.b+=e.b-t.b));c=n.d,n.f.a=e.a-c.b-c.c,n.f.b=e.b-c.d-c.a}function XBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,Qft),61))==(kUn(),oCt)?c.n.a+=e.a-t.a:r==SCt&&(c.n.b+=e.b-t.b));u=n.d,n.f.a=e.a-u.b-u.c,n.f.b=e.b-u.d-u.a}function WBn(n){var t,i,r,c,a,u,o,s,h,f;for(s=new Cb(new Ib(xOn(n)).a.vc().Kc());s.a.Ob();){for(r=BB(s.a.Pb(),42),h=0,f=0,h=(o=BB(r.cd(),10)).d.d,f=o.o.b+o.d.a,n.d[o.p]=0,t=o;(c=n.a[t.p])!=o;)i=Mgn(t,c),u=0,u=n.c==(gJ(),nyt)?i.d.n.b+i.d.a.b-i.c.n.b-i.c.a.b:i.c.n.b+i.c.a.b-i.d.n.b-i.d.a.b,a=Gy(n.d[t.p])+u,n.d[c.p]=a,h=e.Math.max(h,c.d.d-a),f=e.Math.max(f,a+c.o.b+c.d.a),t=c;t=o;do{n.d[t.p]=Gy(n.d[t.p])+h,t=n.a[t.p]}while(t!=o);n.b[o.p]=h+f}}function VBn(n){var t,i,r,c,a,u,o,s,h,f,l;for(n.b=!1,f=RQn,o=KQn,l=RQn,s=KQn,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=BB(i.Pb(),266)).a,f=e.Math.min(f,r.c),o=e.Math.max(o,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Wb(t.c);a.a<a.c.c.length;)(c=BB(n0(a),395)).a.a?(u=(h=r.d+c.b.b)+c.c,l=e.Math.min(l,h),s=e.Math.max(s,u)):(u=(h=r.c+c.b.a)+c.c,f=e.Math.min(f,h),o=e.Math.max(o,u));n.a=new xI(o-f,s-l),n.c=new xI(f+n.d.a,l+n.d.b)}function QBn(n,t,e){var i,r,c,a,u,o,s,h;for(h=new Np,c=0,tin(s=new x0(0,e),new asn(0,0,s,e)),r=0,o=new AL(n);o.e!=o.i.gc();)u=BB(kpn(o),33),i=BB(xq(s.a,s.a.c.length-1),187),r+u.g+(0==BB(xq(s.a,0),187).b.c.length?0:e)>t&&(r=0,c+=s.b+e,h.c[h.c.length]=s,tin(s=new x0(c,e),i=new asn(0,s.f,s,e)),r=0),0==i.b.c.length||u.f>=i.o&&u.f<=i.f||.5*i.a<=u.f&&1.5*i.a>=u.f?ybn(i,u):(tin(s,a=new asn(i.s+i.r+e,s.f,s,e)),ybn(a,u)),r=u.i+u.g;return h.c[h.c.length]=s,h}function YBn(n){var t,e,i,r,c,a;if(!n.a){if(n.o=null,a=new gp(n),t=new So,null==(e=P$t).a.zc(n,e)){for(c=new AL(kY(n));c.e!=c.i.gc();)pX(a,YBn(BB(kpn(c),26)));e.a.Bc(n),e.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();)cL(i=BB(kpn(r),170),322)&&f9(t,BB(i,34));chn(t),n.k=new EH(n,(BB(Wtn(QQ((QX(),t$t).o),7),18),t.i),t.g),pX(a,n.k),chn(a),n.a=new NO((BB(Wtn(QQ(t$t.o),4),18),a.i),a.g),P5(n).b&=-2}return n.a}function JBn(n,t,e,i,r,c,a){var u,o,s,h,f;return h=!1,u=dNn(e.q,t.f+t.b-e.q.f),!((f=r-(e.q.e+u-a))<i.g)&&(o=c==n.c.length-1&&f>=(l1(c,n.c.length),BB(n.c[c],200)).e,!((s=cHn(i,f,!1).a)>t.b&&!o)&&((o||s<=t.b)&&(o&&s>t.b?(e.d=s,p9(e,FSn(e,s))):(aEn(e.q,u),e.c=!0),p9(i,r-(e.s+e.r)),Tvn(i,e.q.e+e.q.d,t.f),tin(t,i),n.c.length>c&&(Tkn((l1(c,n.c.length),BB(n.c[c],200)),i),0==(l1(c,n.c.length),BB(n.c[c],200)).a.c.length&&s6(n,c)),h=!0),h))}function ZBn(n,t,e,i){var r,c,a,u,o,s,h;if(h=axn(n.e.Tg(),t),r=0,c=BB(n.g,119),o=null,ZM(),BB(t,66).Oj()){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(a,e)){o=a;break}++r}}else if(null!=e){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(e,a.dd())){o=a;break}++r}}else for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(null==a.dd()){o=a;break}++r}return o&&(mA(n.e)&&(s=t.$j()?new b4(n.e,4,t,e,null,r,!0):LY(n,t.Kj()?2:1,t,e,t.zj(),-1,!0),i?i.Ei(s):i=s),i=TKn(n,o,i)),i}function nHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d;switch(w=0,d=0,s=c.c,o=c.b,f=i.f,b=i.g,t.g){case 0:w=r.i+r.g+u,d=n.c?gTn(w,a,r,u):r.j,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 1:d=r.j+r.f+u,w=n.c?dTn(d,a,r,u):r.i,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 2:w=s+u,d=0,l=s+u+b,h=e.Math.max(o,f);break;case 3:w=0,d=o+u,l=e.Math.max(s,b),h=o+u+f;break;default:throw Hp(new _y("IllegalPlacementOption."))}return new awn(n.a,l,h,t,w,d)}function tHn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if(o=n.d,l=BB(mMn(n,(hWn(),Klt)),15),t=BB(mMn(n,Dft),15),l||t){if(a=Gy(MD(edn(n,(HXn(),ppt)))),u=Gy(MD(edn(n,vpt))),b=0,l){for(h=0,c=l.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),b+=r.o.a;b+=a*(l.gc()-1),o.d+=h+u}if(i=0,t){for(h=0,c=t.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),i+=r.o.a;i+=a*(t.gc()-1),o.a+=h+u}(s=e.Math.max(b,i))>n.o.a&&(f=(s-n.o.a)/2,o.b=e.Math.max(o.b,f),o.c=e.Math.max(o.c,f))}}function eHn(n){var t,e,i,r,c,a;for(cA(r=new R0,(Nun(),JTt)),i=new Sb(new Jy(new TT(n,jrn(n,x8(Qtt,sVn,2,0,6,1))).b));i.b<i.d.gc();)Px(i.b<i.d.gc()),e=SD(i.d.Xb(i.c=i.b++)),(c=pGn(lAt,e))&&null!=(a=Zqn(c,(t=zJ(n,e)).je()?t.je().a:t.ge()?""+t.ge().a:t.he()?""+t.he().a:t.Ib()))&&((SN(c.j,(rpn(),sMt))||SN(c.j,hMt))&&son(Ynn(r,UOt),c,a),SN(c.j,uMt)&&son(Ynn(r,_Ot),c,a),SN(c.j,fMt)&&son(Ynn(r,XOt),c,a),SN(c.j,oMt)&&son(Ynn(r,zOt),c,a));return r}function iHn(n,t,e,i){var r,c,a,u,o,s;if(o=axn(n.e.Tg(),t),c=BB(n.g,119),$xn(n.e,t)){for(r=0,u=0;u<n.i;++u)if(a=c[u],o.rl(a.ak())){if(r==e)return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FCn(n,t,u,r,s)),s);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(r=0,u=0;u<n.i;++u){if(a=c[u],o.rl(a.ak()))return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FCn(n,t,u,r,s)),s);++r}return t.zj()}function rHn(n,t,e){var i,r,c,a,u,o,s,h;if(r=BB(n.g,119),$xn(n.e,t))return ZM(),BB(t,66).Oj()?new lq(t,n):new xC(t,n);for(s=axn(n.e.Tg(),t),i=0,u=0;u<n.i;++u){if(a=(c=r[u]).ak(),s.rl(a)){if(ZM(),BB(t,66).Oj())return c;if(a==(TOn(),lLt)||a==sLt){for(o=new lN(Bbn(c.dd()));++u<n.i;)((a=(c=r[u]).ak())==lLt||a==sLt)&&oO(o,Bbn(c.dd()));return gK(BB(t.Yj(),148),o.a)}return null!=(h=c.dd())&&e&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(h=FCn(n,t,u,i,h)),h}++i}return t.zj()}function cHn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=0,u=n.t,c=0,r=0,s=0,b=0,l=0,i&&(n.n.c=x8(Ant,HWn,1,0,5,1),WB(n.n,new RJ(n.s,n.t,n.i))),o=0,f=new Wb(n.b);f.a<f.c.c.length;)a+(h=BB(n0(f),33)).g+(o>0?n.i:0)>t&&s>0&&(a=0,u+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,WB(n.n,new RJ(n.s,u,n.i))),o=0),b+=h.g+(o>0?n.i:0),s=e.Math.max(s,h.f),i&&smn(BB(xq(n.n,l),211),h),a+=h.g+(o>0?n.i:0),++o;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,yyn(n.j)),new UV(n.s,n.t,c,r)}function aHn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;if($T(),SU(n,"src"),SU(e,"dest"),l=tsn(n),o=tsn(e),pH(0!=(4&l.i),"srcType is not an array"),pH(0!=(4&o.i),"destType is not an array"),f=l.c,a=o.c,pH(0!=(1&f.i)?f==a:0==(1&a.i),"Array types don't match"),b=n.length,s=e.length,t<0||i<0||r<0||t+r>b||i+r>s)throw Hp(new fv);if(0==(1&f.i)&&l!=o)if(h=een(n),c=een(e),GC(n)===GC(e)&&t<i)for(t+=r,u=i+r;u-- >i;)$X(c,u,h[--t]);else for(u=i+r;i<u;)$X(c,i++,h[t++]);else r>0&&_In(n,t,e,i,r,!0)}function uHn(){uHn=O,ret=Pun(Gk(ANt,1),hQn,25,15,[_Vn,1162261467,OVn,1220703125,362797056,1977326743,OVn,387420489,AQn,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,OVn,1291467969,1544804416,1838265625,60466176]),cet=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function oHn(n){var t,e,i,r,c,a,u;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(a0(BB(n0(i),29).a));c.a<c.c.c.length;)if(Znn(r=BB(n0(c),10))&&!(e=BB(mMn(r,(hWn(),Rft)),305)).g&&e.d)for(t=e,u=e.d;u;)eRn(u.i,u.k,!1,!0),A7(t.a),A7(u.i),A7(u.k),A7(u.b),MZ(u.c,t.c.d),MZ(t.c,null),PZ(t.a,null),PZ(u.i,null),PZ(u.k,null),PZ(u.b,null),(a=new v3(t.i,u.a,t.e,u.j,u.f)).k=t.k,a.n=t.n,a.b=t.b,a.c=u.c,a.g=t.g,a.d=u.d,hon(t.i,Rft,a),hon(u.a,Rft,a),u=u.d,t=a}function sHn(n,t){var e,i,r,c,a;if(a=BB(t,136),T$n(n),T$n(a),null!=a.b){if(n.c=!0,null==n.b)return n.b=x8(ANt,hQn,25,a.b.length,15,1),void aHn(a.b,0,n.b,0,a.b.length);for(c=x8(ANt,hQn,25,n.b.length+a.b.length,15,1),e=0,i=0,r=0;e<n.b.length||i<a.b.length;)e>=n.b.length?(c[r++]=a.b[i++],c[r++]=a.b[i++]):i>=a.b.length?(c[r++]=n.b[e++],c[r++]=n.b[e++]):a.b[i]<n.b[e]||a.b[i]===n.b[e]&&a.b[i+1]<n.b[e+1]?(c[r++]=a.b[i++],c[r++]=a.b[i++]):(c[r++]=n.b[e++],c[r++]=n.b[e++]);n.b=c}}function hHn(n,t){var e,i,r,c,a,u,o,s,h,f;return e=qy(TD(mMn(n,(hWn(),slt)))),u=qy(TD(mMn(t,slt))),i=BB(mMn(n,hlt),11),o=BB(mMn(t,hlt),11),r=BB(mMn(n,flt),11),s=BB(mMn(t,flt),11),h=!!i&&i==o,f=!!r&&r==s,e||u?(c=(!qy(TD(mMn(n,slt)))||qy(TD(mMn(n,olt))))&&(!qy(TD(mMn(t,slt)))||qy(TD(mMn(t,olt)))),a=!(qy(TD(mMn(n,slt)))&&qy(TD(mMn(n,olt)))||qy(TD(mMn(t,slt)))&&qy(TD(mMn(t,olt)))),new R_(h&&c||f&&a,h,f)):new R_(BB(n0(new Wb(n.j)),11).p==BB(n0(new Wb(t.j)),11).p,h,f)}function fHn(n){var t,i,r,c,a,u,o,s;for(r=0,i=0,s=new YT,t=0,o=new Wb(n.n);o.a<o.c.c.length;)0==(u=BB(n0(o),211)).c.c.length?r5(s,u,s.c.b,s.c):(r=e.Math.max(r,u.d),i+=u.a+(t>0?n.i:0)),++t;for(nwn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=RQn,n.p=RQn,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),33),n.p=e.Math.min(n.p,c.g),n.g=e.Math.max(n.g,c.g),n.f=e.Math.max(n.f,c.f),n.o=e.Math.min(n.o,c.f),n.e+=c.f+n.i;n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function lHn(n){var t,e,i,r;return 0!=(64&n.Db)?Yln(n):(t=new lN(V5n),(i=n.k)?oO(oO((t.a+=' "',t),i),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(r=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new hK(KOt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",oO(t,JL(new mk,new AL(n.b))),e&&(t.a+="]"),t.a+=e1n,e&&(t.a+="["),oO(t,JL(new mk,new AL(n.c))),e&&(t.a+="]"),t.a)}function bHn(n,t){var e,i,r,c,a,u,o;if(n.a){if(o=null,null!=(u=n.a.ne())?t.a+=""+u:null!=(a=n.a.Dj())&&(-1!=(c=GO(a,YTn(91)))?(o=a.substr(c),t.a+=""+fx(null==a?zWn:(kW(a),a),0,c)):t.a+=""+a),n.d&&0!=n.d.i){for(r=!0,t.a+="<",i=new AL(n.d);i.e!=i.i.gc();)e=BB(kpn(i),87),r?r=!1:t.a+=FWn,bHn(e,t);t.a+=">"}null!=o&&(t.a+=""+o)}else n.e?null!=(u=n.e.zb)&&(t.a+=""+u):(t.a+="?",n.b?(t.a+=" super ",bHn(n.b,t)):n.f&&(t.a+=" extends ",bHn(n.f,t)))}function wHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(y=n.c,k=t.c,e=E7(y.a,n,0),i=E7(k.a,t,0),v=BB(xwn(n,(ain(),Hvt)).Kc().Pb(),11),T=BB(xwn(n,qvt).Kc().Pb(),11),m=BB(xwn(t,Hvt).Kc().Pb(),11),M=BB(xwn(t,qvt).Kc().Pb(),11),g=Z0(v.e),j=Z0(T.g),p=Z0(m.e),E=Z0(M.g),Qyn(n,i,k),s=0,b=(c=p).length;s<b;++s)MZ(c[s],v);for(h=0,w=(a=E).length;h<w;++h)SZ(a[h],T);for(Qyn(t,e,y),f=0,d=(u=g).length;f<d;++f)MZ(u[f],m);for(o=0,l=(r=j).length;o<l;++o)SZ(r[o],M)}function dHn(n,t,e,i){var r,c,a,u,o,s;if(c=Wln(i),!qy(TD(mMn(i,(HXn(),Cgt))))&&!qy(TD(mMn(n,bgt)))||vA(BB(mMn(n,ept),98)))switch(IZ(u=new ISn,n),t?((s=u.n).a=t.a-n.n.a,s.b=t.b-n.n.b,WSn(s,0,0,n.o.a,n.o.b),qIn(u,z_n(u,c))):(r=hwn(c),qIn(u,e==(ain(),qvt)?r:Tln(r))),a=BB(mMn(i,(hWn(),Zft)),21),o=u.j,c.g){case 2:case 1:(o==(kUn(),sCt)||o==SCt)&&a.Fc((bDn(),gft));break;case 4:case 3:(o==(kUn(),oCt)||o==ICt)&&a.Fc((bDn(),gft))}else r=hwn(c),u=R_n(n,e,e==(ain(),qvt)?r:Tln(r));return u}function gHn(n,t,i){var r,c,a,u,o,s,h;return e.Math.abs(t.s-t.c)<lZn||e.Math.abs(i.s-i.c)<lZn?0:(r=WNn(n,t.j,i.e),c=WNn(n,i.j,t.e),a=0,-1==r||-1==c?(-1==r&&(new zZ((O6(),Tyt),i,t,1),++a),-1==c&&(new zZ((O6(),Tyt),t,i,1),++a)):(u=Tfn(t.j,i.s,i.c),u+=Tfn(i.e,t.s,t.c),o=Tfn(i.j,t.s,t.c),(s=r+16*u)<(h=c+16*(o+=Tfn(t.e,i.s,i.c)))?new zZ((O6(),Myt),t,i,h-s):s>h?new zZ((O6(),Myt),i,t,s-h):s>0&&h>0&&(new zZ((O6(),Myt),t,i,0),new zZ(Myt,i,t,0))),a)}function pHn(n,t){var i,r,c,a,u;for(u=new usn(new Pb(n.f.b).a);u.b;){if(c=BB((a=ten(u)).cd(),594),1==t){if(c.gf()!=(Ffn(),HPt)&&c.gf()!=KPt)continue}else if(c.gf()!=(Ffn(),_Pt)&&c.gf()!=FPt)continue;switch(r=BB(BB(a.dd(),46).b,81),i=BB(BB(a.dd(),46).a,189).c,c.gf().g){case 2:r.g.c=n.e.a,r.g.b=e.Math.max(1,r.g.b+i);break;case 1:r.g.c=r.g.c+i,r.g.b=e.Math.max(1,r.g.b-i);break;case 4:r.g.d=n.e.b,r.g.a=e.Math.max(1,r.g.a+i);break;case 3:r.g.d=r.g.d+i,r.g.a=e.Math.max(1,r.g.a-i)}}}function vHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=x8(ANt,hQn,25,t.b.c.length,15,1),h=x8($ut,$Vn,267,t.b.c.length,0,1),s=x8(Out,a1n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b<w;++b){for(g=0,u=new Wb((f=l[b]).e);u.a<u.c.c.length;)++o[r=tA((c=BB(n0(u),10)).c)],d=Gy(MD(mMn(t,(HXn(),ypt)))),o[r]>0&&s[r]&&(d=K$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Wb(f.e);a.a<a.c.c.length;)(c=BB(n0(a),10)).n.b=g+c.d.d,(i=c.c).c.b=g+c.d.d+c.o.b+c.d.a,h[E7(i.b.b,i,0)]=c.k,s[E7(i.b.b,i,0)]=c}}function mHn(n,t){var e,i,r,c,a,u,o,s,f,l,b;for(i=new oz(ZL(dLn(t).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(o=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),nAn(e)||(a=t.i+t.g/2,u=t.j+t.f/2,f=o.i+o.g/2,l=o.j+o.f/2,(b=new Gj).a=f-a,b.b=l-u,Ukn(c=new xI(b.a,b.b),t.g,t.f),b.a-=c.a,b.b-=c.b,a=f-b.a,u=l-b.b,Ukn(s=new xI(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,f=a+b.a,l=u+b.b,Cen(r=cDn(e,!0,!0),a),Aen(r,u),Ten(r,f),Oen(r,l),mHn(n,o)))}function yHn(n){NM(n,new MTn(vj(wj(pj(gj(new du,R4n),"ELK SPOrE Compaction"),"ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree."),new tu))),u2(n,R4n,K4n,mpn(kTt)),u2(n,R4n,_4n,mpn(vTt)),u2(n,R4n,F4n,mpn(pTt)),u2(n,R4n,B4n,mpn(dTt)),u2(n,R4n,H4n,mpn(gTt)),u2(n,R4n,QJn,wTt),u2(n,R4n,vZn,8),u2(n,R4n,q4n,mpn(yTt)),u2(n,R4n,G4n,mpn(hTt)),u2(n,R4n,z4n,mpn(fTt)),u2(n,R4n,X2n,(hN(),!1))}function kHn(n,t){var i,r,c,a,u,o,s,h,f,l;for(OTn(t,"Simple node placement",1),l=BB(mMn(n,(hWn(),Alt)),304),o=0,a=new Wb(n.b);a.a<a.c.c.length;){for((u=(r=BB(n0(a),29)).c).b=0,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(u.b+=Cdn(s,i,l.c)),u.b+=s.d.d+s.o.b+s.d.a,i=s;o=e.Math.max(o,u.b)}for(c=new Wb(n.b);c.a<c.c.c.length;)for(f=(o-(u=(r=BB(n0(c),29)).c).b)/2,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(f+=Cdn(s,i,l.c)),f+=s.d.d,s.n.b=f,f+=s.o.b+s.d.a,i=s;HSn(t)}function jHn(n,t,e,i){var r,c,a,u,o,s,h,f;if(0==i.gc())return!1;if(ZM(),a=(o=BB(t,66).Oj())?i:new gtn(i.gc()),$xn(n.e,t)){if(t.hi())for(h=i.Kc();h.Ob();)UFn(n,t,s=h.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(c=Z3(t,s),a.Fc(c));else if(!o)for(h=i.Kc();h.Ob();)c=Z3(t,s=h.Pb()),a.Fc(c)}else{for(f=axn(n.e.Tg(),t),r=BB(n.g,119),u=0;u<n.i;++u)if(c=r[u],f.rl(c.ak()))throw Hp(new _y(C7n));if(i.gc()>1)throw Hp(new _y(C7n));o||(c=Z3(t,i.Kc().Pb()),a.Fc(c))}return oon(n,EPn(n,t,e),a)}function EHn(n,t){var e,i,r,c;for(Qtn(t.b.j),JT($V(new Rq(null,new w1(t.d,16)),new cc),new ac),c=new Wb(t.d);c.a<c.c.c.length;){switch((r=BB(n0(c),101)).e.g){case 0:e=BB(xq(r.j,0),113).d.j,Gl(r,BB($N(Oz(BB(h6(r.k,e),15).Oc(),Qst)),113)),ql(r,BB($N(Cz(BB(h6(r.k,e),15).Oc(),Qst)),113));break;case 1:i=Hyn(r),Gl(r,BB($N(Oz(BB(h6(r.k,i[0]),15).Oc(),Qst)),113)),ql(r,BB($N(Cz(BB(h6(r.k,i[1]),15).Oc(),Qst)),113));break;case 2:VPn(n,r);break;case 3:KNn(r);break;case 4:GNn(n,r)}Vtn(r)}n.a=null}function THn(n,t,e){var i,r,c,a,u,o,s,h;return i=n.a.o==(oZ(),cyt)?RQn:KQn,!(u=cFn(n,new aI(t,e))).a&&u.c?(DH(n.d,u),i):u.a?(r=u.a.c,o=u.a.d,e?(s=n.a.c==(gJ(),tyt)?o:r,c=n.a.c==tyt?r:o,a=n.a.g[c.i.p],h=Gy(n.a.p[a.p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b):(s=n.a.c==(gJ(),nyt)?o:r,c=n.a.c==nyt?r:o,h=Gy(n.a.p[n.a.g[c.i.p].p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b),n.a.n[n.a.g[r.i.p].p]=(hN(),!0),n.a.n[n.a.g[o.i.p].p]=!0,h):i}function MHn(n,t,e){var i,r,c,a,u,o,s;if($xn(n.e,t))ZM(),AOn((u=BB(t,66).Oj()?new lq(t,n):new xC(t,n)).c,u.b),Z$(u,BB(e,14));else{for(s=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c].ak(),s.rl(r)){if(r==(TOn(),lLt)||r==sLt){for(a=c,(o=Ovn(n,t,e))?fDn(n,c):++c;c<n.i;)(r=i[c].ak())==lLt||r==sLt?fDn(n,c):++c;o||BB(ovn(n,a,Z3(t,e)),72)}else Ovn(n,t,e)?fDn(n,c):BB(ovn(n,c,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e))),72);return}Ovn(n,t,e)||f9(n,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e)))}}function SHn(n,t,e){var i,r,c,a,u,o,s,h;return Nfn(e,n.b)||(n.b=e,c=new Jn,a=BB(P4($V(new Rq(null,new w1(e.f,16)),c),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21),n.e=!0,n.f=!0,n.c=!0,n.d=!0,r=a.Hc((Hpn(),Brt)),i=a.Hc(Hrt),r&&!i&&(n.f=!1),!r&&i&&(n.d=!1),r=a.Hc(Frt),i=a.Hc(qrt),r&&!i&&(n.c=!1),!r&&i&&(n.e=!1)),h=BB(n.a.Ce(t,e),46),o=BB(h.a,19).a,s=BB(h.b,19).a,u=!1,o<0?n.c||(u=!0):n.e||(u=!0),s<0?n.d||(u=!0):n.f||(u=!0),u?SHn(n,h,e):h}function PHn(n){var t,i,r,c;c=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?t=c.b:(t=MCn(n.f),n.A.Hc((mdn(),RCt))&&!n.B.Hc((n_n(),XCt))&&(t=e.Math.max(t,MCn(BB(oV(n.p,(kUn(),oCt)),244))),t=e.Math.max(t,MCn(BB(oV(n.p,ICt),244)))),(i=oan(n))&&(t=e.Math.max(t,i.b)),n.A.Hc(KCt)&&(n.q!=(QEn(),WIt)&&n.q!=XIt||(t=e.Math.max(t,XH(BB(oV(n.b,(kUn(),oCt)),124))),t=e.Math.max(t,XH(BB(oV(n.b,ICt),124)))))),qy(TD(n.e.yf().We((sWn(),FSt))))?c.b=e.Math.max(c.b,t):c.b=t,(r=n.f.i).d=0,r.a=t,GFn(n.f)}function IHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(h=0;h<t.length;h++){for(a=n.Kc();a.Ob();)BB(a.Pb(),225).Of(h,t);for(f=0;f<t[h].length;f++){for(u=n.Kc();u.Ob();)BB(u.Pb(),225).Pf(h,f,t);for(b=t[h][f].j,l=0;l<b.c.length;l++){for(o=n.Kc();o.Ob();)BB(o.Pb(),225).Qf(h,f,l,t);for(l1(l,b.c.length),e=0,r=new m6(BB(b.c[l],11).b);y$(r.a)||y$(r.b);)for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),s=n.Kc();s.Ob();)BB(s.Pb(),225).Nf(h,f,l,e++,i,t)}}}for(c=n.Kc();c.Ob();)BB(c.Pb(),225).Mf()}function CHn(n,t){var e,i,r,c,a;for(n.b=Gy(MD(mMn(t,(HXn(),kpt)))),n.c=Gy(MD(mMn(t,Tpt))),n.d=BB(mMn(t,rgt),336),n.a=BB(mMn(t,Pdt),275),fmn(t),r=(c=BB(P4(AV(AV(wnn(wnn(new Rq(null,new w1(t.b,16)),new ye),new ke),new je),new Ee),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Kc();r.Ob();)e=BB(r.Pb(),17),BB(mMn(e,(hWn(),Nlt)),15).Jc(new ed(n)),hon(e,Nlt,null);for(i=c.Kc();i.Ob();)e=BB(i.Pb(),17),a=BB(mMn(e,(hWn(),xlt)),17),FXn(n,BB(mMn(e,$lt),15),a),hon(e,$lt,null)}function OHn(n){n.b=null,n.a=null,n.o=null,n.q=null,n.v=null,n.w=null,n.B=null,n.p=null,n.Q=null,n.R=null,n.S=null,n.T=null,n.U=null,n.V=null,n.W=null,n.bb=null,n.eb=null,n.ab=null,n.H=null,n.db=null,n.c=null,n.d=null,n.f=null,n.n=null,n.r=null,n.s=null,n.u=null,n.G=null,n.J=null,n.e=null,n.j=null,n.i=null,n.g=null,n.k=null,n.t=null,n.F=null,n.I=null,n.L=null,n.M=null,n.O=null,n.P=null,n.$=null,n.N=null,n.Z=null,n.cb=null,n.K=null,n.D=null,n.A=null,n.C=null,n._=null,n.fb=null,n.X=null,n.Y=null,n.gb=!1,n.hb=!1}function AHn(n){var t,e,i,r,c;if(n.k!=(uSn(),Iut))return!1;if(n.j.c.length<=1)return!1;if(BB(mMn(n,(HXn(),ept)),98)==(QEn(),XIt))return!1;if(bvn(),(i=(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))==lvt)return!1;if(i!=fvt&&i!=hvt){if(r=Gy(MD(edn(n,Npt))),!(t=BB(mMn(n,Lpt),142))&&(t=new HR(r,r,r,r)),c=abn(n,(kUn(),ICt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=abn(n,oCt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function $Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(a=n.e,o=t.e,0==a)return t;if(0==o)return n;if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a==o?(w=dG(h=rbn(e,i)),0==(b=dG(jz(h,32)))?new X6(a,w):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[w,b]))):npn(a<0?ibn(i,e):ibn(e,i));if(a==o)l=a,f=c>=u?N8(n.a,c,t.a,u):N8(t.a,u,n.a,c);else{if(0==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))return ODn(),eet;1==r?(l=a,f=d6(n.a,c,t.a,u)):(l=o,f=d6(t.a,u,n.a,c))}return X0(s=new lU(l,f.length,f)),s}function LHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w;return l=qy(TD(mMn(t,(HXn(),Ogt)))),b=null,a==(ain(),Hvt)&&r.c.i==i?b=r.c:a==qvt&&r.d.i==i&&(b=r.d),(h=u)&&l&&!b?(WB(h.e,r),w=e.Math.max(Gy(MD(mMn(h.d,agt))),Gy(MD(mMn(r,agt)))),hon(h.d,agt,w)):(kUn(),f=PCt,b?f=b.j:vA(BB(mMn(i,ept),98))&&(f=a==Hvt?ICt:oCt),s=xHn(n,t,i,a,f,r),o=W5((vW(i),r)),a==Hvt?(SZ(o,BB(xq(s.j,0),11)),MZ(o,c)):(SZ(o,c),MZ(o,BB(xq(s.j,0),11))),h=new zfn(r,o,s,BB(mMn(s,(hWn(),dlt)),11),a,!b)),JCn(n.a,r,new L_(h.d,t,a)),h}function NHn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=null,n.d&&(h=BB(SJ(n.d,t),138)),!h){if(f=(c=n.a.Mh()).i,!n.d||NT(n.d)!=f){for(o=new xp,n.d&&Tcn(o,n.d),u=s=o.f.c+o.g.c;u<f;++u)i=BB(Wtn(c,u),138),(e=BB(null==(r=Ifn(n.e,i).ne())?jIn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jIn(o.f,null,e):ubn(o.g,r,e));if(o.f.c+o.g.c!=f)for(a=0;a<s;++a)i=BB(Wtn(c,a),138),(e=BB(null==(r=Ifn(n.e,i).ne())?jIn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jIn(o.f,null,e):ubn(o.g,r,e));n.d=o}h=BB(SJ(n.d,t),138)}return h}function xHn(n,t,e,i,r,c){var a,u,o,s,h,f;return a=null,s=i==(ain(),Hvt)?c.c:c.d,o=Wln(t),s.i==e?(a=BB(RX(n.b,s),10))||(hon(a=bXn(s,BB(mMn(e,(HXn(),ept)),98),r,HKn(s),null,s.n,s.o,o,t),(hWn(),dlt),s),VW(n.b,s,a)):(u=AEn(a=bXn((h=new Zn,f=Gy(MD(mMn(t,(HXn(),ypt))))/2,son(h,tpt,f),h),BB(mMn(e,ept),98),r,i==Hvt?-1:1,null,new Gj,new xI(0,0),o,t),e,i),hon(a,(hWn(),dlt),u),VW(n.b,u,a)),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)),vA(BB(mMn(t,(HXn(),ept)),98))?hon(t,ept,(QEn(),VIt)):hon(t,ept,(QEn(),QIt)),a}function DHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;OTn(t,"Orthogonal edge routing",1),s=Gy(MD(mMn(n,(HXn(),Apt)))),e=Gy(MD(mMn(n,kpt))),i=Gy(MD(mMn(n,Tpt))),l=new fX(0,e),d=0,a=new M2(n.b,0),u=null,h=null,o=null,f=null;do{f=(h=a.b<a.d.gc()?(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)):null)?h.a:null,u&&(Tqn(u,d),d+=u.c.a),w=AGn(l,n,o,f,u?d+i:d),r=!u||VC(o,(dxn(),jyt)),c=!h||VC(f,(dxn(),jyt)),w>0?(b=(w-1)*e,u&&(b+=i),h&&(b+=i),b<s&&!r&&!c&&(b=s),d+=b):!r&&!c&&(d+=s),u=h,o=f}while(h);n.f.a=d,HSn(t)}function RHn(){var n;RHn=O,EAt=new Sm,kAt=x8(Qtt,sVn,2,0,6,1),SAt=i0(Bun(33,58),Bun(1,26)),PAt=i0(Bun(97,122),Bun(65,90)),IAt=Bun(48,57),TAt=i0(SAt,0),MAt=i0(PAt,IAt),CAt=i0(i0(0,Bun(1,6)),Bun(33,38)),OAt=i0(i0(IAt,Bun(65,70)),Bun(97,102)),xAt=i0(TAt,dpn("-_.!~*'()")),DAt=i0(MAt,Xwn("-_.!~*'()")),dpn(u9n),Xwn(u9n),i0(xAt,dpn(";:@&=+$,")),i0(DAt,Xwn(";:@&=+$,")),AAt=dpn(":/?#"),$At=Xwn(":/?#"),LAt=dpn("/?#"),NAt=Xwn("/?#"),(n=new Rv).a.zc("jar",n),n.a.zc("zip",n),n.a.zc("archive",n),SQ(),jAt=new Ak(n)}function KHn(n,t){var e,i,r,c,a;if(hon(t,(qqn(),okt),0),r=BB(mMn(t,akt),86),0==t.d.b)r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a)):hon(t,fkt,0);else{for(e=new wg(spn(new bg(t).a.d,0));EE(e.a);)KHn(n,BB(b3(e.a),188).c);i=BB(iL(new wg(spn(new bg(t).a.d,0))),86),c=(Gy(MD(mMn(BB(TN(new wg(spn(new bg(t).a.d,0))),86),fkt)))+Gy(MD(mMn(i,fkt))))/2,r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a),hon(t,okt,Gy(MD(mMn(t,fkt)))-c),CGn(n,t)):hon(t,fkt,c)}}function _Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;u=0,b=0,o=TJ(n.f,n.f.length),c=n.d,a=n.i,i=n.a,r=n.b;do{for(l=0,s=new Wb(n.p);s.a<s.c.c.length;)f=OGn(n,BB(n0(s),10)),e=!0,(n.q==(sNn(),Tvt)||n.q==Pvt)&&(e=qy(TD(f.b))),BB(f.a,19).a<0&&e?(++l,o=TJ(n.f,n.f.length),n.d=n.d+BB(f.a,19).a,b+=c-n.d,c=n.d+BB(f.a,19).a,a=n.i,i=a0(n.a),r=a0(n.b)):(n.f=TJ(o,o.length),n.d=c,n.a=(yX(i),i?new t_(i):HB(new Wb(i))),n.b=(yX(r),r?new t_(r):HB(new Wb(r))),n.i=a);++u,h=0!=l&&qy(TD(t.Kb(new rC(iln(b),iln(u)))))}while(h)}function FHn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return a=n.f,l=t.f,u=a==(YLn(),xEt)||a==REt,o=a==DEt||a==KEt,b=l==DEt||l==KEt,s=a==DEt||a==xEt,w=l==DEt||l==xEt,!u||l!=xEt&&l!=REt?o&&b?n.f==KEt?n:t:s&&w?(a==DEt?(f=n,h=t):(f=t,h=n),d=i.j+i.f,g=f.e+r.f,p=e.Math.max(d,g)-e.Math.min(i.j,f.e),c=(f.d+r.g-i.i)*p,v=i.i+i.g,m=h.d+r.g,c<=(e.Math.max(v,m)-e.Math.min(i.i,h.d))*(h.e+r.f-i.j)?n.f==DEt?n:t:n.f==xEt?n:t):n:n.f==REt?n:t}function BHn(n){var t,e,i,r,c,a,u,o,s,h;for(s=n.e.a.c.length,c=new Wb(n.e.a);c.a<c.c.c.length;)BB(n0(c),121).j=!1;for(n.i=x8(ANt,hQn,25,s,15,1),n.g=x8(ANt,hQn,25,s,15,1),n.n=new Np,r=0,h=new Np,u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).d=r++,0==a.b.a.c.length&&WB(n.n,a),gun(h,a.g);for(t=0,i=new Wb(h);i.a<i.c.c.length;)(e=BB(n0(i),213)).c=t++,e.f=!1;o=h.c.length,null==n.b||n.b.length<o?(n.b=x8(xNt,qQn,25,o,15,1),n.c=x8($Nt,ZYn,25,o,16,1)):nk(n.c),n.d=h,n.p=new LN(etn(n.d.c.length)),n.j=1}function HHn(n,t){var e,i,r,c,a,u,o,s,h;if(!(t.e.c.length<=1)){for(n.f=t,n.d=BB(mMn(n.f,(rkn(),vat)),379),n.g=BB(mMn(n.f,jat),19).a,n.e=Gy(MD(mMn(n.f,mat))),n.c=Gy(MD(mMn(n.f,pat))),cX(n.b),r=new Wb(n.f.c);r.a<r.c.c.length;)i=BB(n0(r),282),yKn(n.b,i.c,i,null),yKn(n.b,i.d,i,null);for(u=n.f.e.c.length,n.a=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),s=new Wb(n.f.e);s.a<s.c.c.length;)IBn(n,o=BB(n0(s),144),n.a[o.b]);for(n.i=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),c=0;c<u;++c)for(a=0;a<u;++a)h=1/((e=n.a[c][a])*e),n.i[c][a]=h}}function qHn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r<n.b.length;){for(t!=r?(n.b[t]=n.b[r++],n.b[t+1]=n.b[r++]):r+=2,e=n.b[t+1];r<n.b.length&&!(e+1<n.b[r]);)if(e+1==n.b[r])n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2;else if(e>=n.b[r+1])r+=2;else{if(!(e<n.b[r+1]))throw Hp(new dy("Token#compactRanges(): Internel Error: ["+n.b[t]+","+n.b[t+1]+"] ["+n.b[r]+","+n.b[r+1]+"]"));n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2}t+=2}t!=n.b.length&&(i=x8(ANt,hQn,25,t,15,1),aHn(n.b,0,i,0,t),n.b=i),n.a=!0}}function GHn(n,t){var e,i,r,c,a,u,o;for(a=gz(n.a).Kc();a.Ob();){if((c=BB(a.Pb(),17)).b.c.length>0)for(i=new t_(BB(h6(n.a,c),21)),SQ(),m$(i,new _w(t)),r=new M2(c.b,0);r.b<r.d.gc();){switch(Px(r.b<r.d.gc()),e=BB(r.d.Xb(r.c=r.b++),70),u=-1,BB(mMn(e,(HXn(),Ydt)),272).g){case 1:u=i.c.length-1;break;case 0:u=Jjn(i);break;case 2:u=0}-1!=u&&(l1(u,i.c.length),WB((o=BB(i.c[u],243)).b.b,e),BB(mMn(vW(o.b.c.i),(hWn(),Zft)),21).Fc((bDn(),fft)),BB(mMn(vW(o.b.c.i),Zft),21).Fc(sft),fW(r),hon(e,vlt,c))}SZ(c,null),MZ(c,null)}}function zHn(n,t){var e,i,r,c;return e=new _n,1==(r=2==(r=(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)).gc())?1:0)&&QC(ldn(BB(P4(AV(i.Lc(),new Fn),Wcn(jgn(0),new en)),162).a,2),0)&&(r=0),1==(c=2==(c=(i=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21)).gc())?1:0)&&QC(ldn(BB(P4(AV(i.Lc(),new Bn),Wcn(jgn(0),new en)),162).a,2),0)&&(c=0),r<c?-1:r==c?0:1}function UHn(n){var t,e,i,r,c,a,u,o,s,h,f;if(o=new Np,!Lx(n,(hWn(),Wft)))return o;for(i=BB(mMn(n,Wft),15).Kc();i.Ob();)dqn(t=BB(i.Pb(),10),n),o.c[o.c.length]=t;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&(u=BB(mMn(c,Vft),10))&&(IZ(s=new ISn,c),qIn(s,BB(mMn(c,Qft),61)),h=BB(xq(u.j,0),11),SZ(f=new wY,s),MZ(f,h));for(e=new Wb(o);e.a<e.c.c.length;)PZ(t=BB(n0(e),10),BB(xq(n.b,n.b.c.length-1),29));return o}function XHn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(c=qy(TD(ZAn(t=WJ(n),(HXn(),wgt)))),h=0,r=0,s=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));s.e!=s.i.gc();)a=(u=QCn(o=BB(kpn(s),79)))&&c&&qy(TD(ZAn(o,dgt))),l=PTn(BB(Wtn((!o.c&&(o.c=new hK(KOt,o,5,8)),o.c),0),82)),u&&a?++r:u&&!a?++h:JJ(l)==t||l==t?++r:++h;for(i=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));i.e!=i.i.gc();)a=(u=QCn(e=BB(kpn(i),79)))&&c&&qy(TD(ZAn(e,dgt))),f=PTn(BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),u&&a?++h:u&&!a?++r:JJ(f)==t||f==t?++h:++r;return h-r}function WHn(n,t){var e,i,r,c,a,u,o,s,h;if(OTn(t,"Edge splitting",1),n.b.c.length<=2)HSn(t);else{for(Px((c=new M2(n.b,0)).b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29);c.b<c.d.gc();)for(r=a,Px(c.b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29),u=new Wb(r.a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(i=new Wb(BB(n0(o),11).g);i.a<i.c.c.length;)(s=(e=BB(n0(i),17)).d.i.c)!=r&&s!=a&&zxn(e,(Bl(h=new $vn(n),(uSn(),Put)),hon(h,(hWn(),dlt),e),hon(h,(HXn(),ept),(QEn(),XIt)),PZ(h,a),h));HSn(t)}}function VHn(n,t){var e,i,r,c,a,u,o,s,h;if((a=null!=t.p&&!t.b)||OTn(t,aZn,1),c=1/(e=BB(mMn(n,(hWn(),Mlt)),15)).gc(),t.n)for(OH(t,"ELK Layered uses the following "+e.gc()+" modules:"),h=0,s=e.Kc();s.Ob();)OH(t," Slot "+(h<10?"0":"")+h+++": "+nE(tsn(BB(s.Pb(),51))));for(o=e.Kc();o.Ob();)BB(o.Pb(),51).pf(n,mcn(t,c));for(r=new Wb(n.b);r.a<r.c.c.length;)i=BB(n0(r),29),gun(n.a,i.a),i.a.c=x8(Ant,HWn,1,0,5,1);for(u=new Wb(n.a);u.a<u.c.c.length;)PZ(BB(n0(u),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),a||HSn(t)}function QHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;r=Gy(MD(mMn(t,(HXn(),Dgt)))),l=4,c=3,j=20/(k=BB(mMn(t,xpt),19).a),b=!1,s=0,u=DWn;do{for(a=1!=s,f=0!=s,E=0,v=0,y=(g=n.a).length;v<y;++v)(w=g[v]).f=null,Bzn(n,w,a,f,r),E+=e.Math.abs(w.a);do{o=U_n(n,t)}while(o);for(p=0,m=(d=n.a).length;p<m;++p)if(0!=(i=wU(w=d[p]).a))for(h=new Wb(w.e);h.a<h.c.c.length;)BB(n0(h),10).n.b+=i;0==s||1==s?--l<=0&&(E<u||-l>k)?(s=2,u=DWn):0==s?(s=1,u=E):(s=0,u=E):(b=E>=u||u-E<j,u=E,b&&--c)}while(!(b&&c<=0))}function YHn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(w=new xp,c=n.a.ec().Kc();c.Ob();)VW(w,i=BB(c.Pb(),168),e.Je(i));for(yX(n),m$(a=n?new t_(n):HB(n.a.ec().Kc()),new Ew(w)),u=S4(a),o=new I$(t),jIn((b=new xp).f,t,o);0!=u.a.gc();){for(s=null,h=null,f=null,r=u.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),168),Gy(MD(qC(AY(w.f,i))))<=RQn){if(hU(b,i.a)&&!hU(b,i.b)){h=i.b,f=i.a,s=i;break}if(hU(b,i.b)&&!hU(b,i.a)){h=i.a,f=i.b,s=i;break}}if(!s)break;l=new I$(h),WB(BB(qC(AY(b.f,f)),221).a,l),jIn(b.f,h,l),u.a.Bc(s)}return o}function JHn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Depth-first cycle removal",1),o=(s=t.a).c.length,n.c=new Np,n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,o,16,1),n.b=new Np,c=0,u=new Wb(s);u.a<u.c.c.length;)(a=BB(n0(u),10)).p=c,h3(fbn(a))&&WB(n.c,a),++c;for(h=new Wb(n.c);h.a<h.c.c.length;)GPn(n,BB(n0(h),10));for(r=0;r<o;r++)n.d[r]||(l1(r,s.c.length),GPn(n,BB(s.c[r],10)));for(i=new Wb(n.b);i.a<i.c.c.length;)tBn(BB(n0(i),17),!0),hon(t,(hWn(),qft),(hN(),!0));n.c=null,n.d=null,n.a=null,n.b=null,HSn(e)}function ZHn(n,t){var e,i,r,c,a,u,o;for(n.a.c=x8(Ant,HWn,1,0,5,1),i=spn(t.b,0);i.b!=i.d.c;)0==(e=BB(b3(i),86)).b.b&&(hon(e,(qqn(),dkt),(hN(),!0)),WB(n.a,e));switch(n.a.c.length){case 0:hon(r=new csn(0,t,"DUMMY_ROOT"),(qqn(),dkt),(hN(),!0)),hon(r,ekt,!0),DH(t.b,r);break;case 1:break;default:for(c=new csn(0,t,"SUPER_ROOT"),u=new Wb(n.a);u.a<u.c.c.length;)hon(o=new UQ(c,a=BB(n0(u),86)),(qqn(),ekt),(hN(),!0)),DH(c.a.a,o),DH(c.d,o),DH(a.b,o),hon(a,dkt,!1);hon(c,(qqn(),dkt),(hN(),!0)),hon(c,ekt,!0),DH(t.b,c)}}function nqn(n,t){var i,r,c,a,u,o;return jDn(),a=t.c-(n.c+n.b),c=n.c-(t.c+t.b),u=n.d-(t.d+t.a),i=t.d-(n.d+n.a),r=e.Math.max(c,a),o=e.Math.max(u,i),h$(),rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>=0^(rin(A3n),(e.Math.abs(o)<=A3n||0==o||isNaN(o)&&isNaN(0)?0:o<0?-1:o>0?1:zO(isNaN(o),isNaN(0)))>=0)?e.Math.max(o,r):(rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>0?e.Math.sqrt(o*o+r*r):-e.Math.sqrt(o*o+r*r))}function tqn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new _v),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=BB(bW(n.a,a-1),117)).e&&10!=c.e||0!=t.e&&10!=t.e?Iv(n.a,t):(0==t.e||t.bm().length,0==c.e?(e=new Pk,(i=c._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn),c=new vJ(10,null,0),kU(n.a,c,a-1)):(c.bm().length,cO(e=new Pk,c.bm())),0==t.e?(i=t._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn):cO(e,t.bm()),BB(c,521).b=e.a):Iv(n.a,t);else for(r=0;r<t.em();r++)tqn(n,t.am(r));else Iv(n.a,t)}function eqn(n){var t,e,i,r,c;return null!=n.g?n.g:n.a<32?(n.g=DUn(fan(n.f),IJ(n.e)),n.g):(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e?r:(t=(!n.c&&(n.c=yhn(n.f)),n.c).e<0?2:1,e=r.length,i=-n.e+e-t,(c=new Ik).a+=""+r,n.e>0&&i>=-6?i>=0?kZ(c,e-IJ(n.e),String.fromCharCode(46)):(c.a=fx(c.a,0,t-1)+"0."+nO(c.a,t-1),kZ(c,t+1,Bdn(qtt,0,-IJ(i)-1))):(e-t>=1&&(kZ(c,t,String.fromCharCode(46)),++e),kZ(c,e,String.fromCharCode(69)),i>0&&kZ(c,++e,String.fromCharCode(43)),kZ(c,++e,""+vz(fan(i)))),n.g=c.a,n.g))}function iqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!e.dc()){for(a=0,h=0,l=BB((i=e.Kc()).Pb(),19).a;a<t.f;){if(a==l&&(h=0,l=i.Ob()?BB(i.Pb(),19).a:t.f+1),a!=h)for(b=BB(xq(n.b,a),29),f=BB(xq(n.b,h),29),s=new Wb(a0(b.a));s.a<s.c.c.length;)if(Qyn(o=BB(n0(s),10),f.a.c.length,f),0==h)for(c=new Wb(a0(fbn(o)));c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(n,(hWn(),qft),(hN(),!0)),iGn(n,r,1);++h,++a}for(u=new M2(n.b,0);u.b<u.d.gc();)Px(u.b<u.d.gc()),0==BB(u.d.Xb(u.c=u.b++),29).a.c.length&&fW(u)}}function rqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=(a=t.b).o,o=a.d,i=Gy(MD(gpn(a,(HXn(),ypt)))),r=Gy(MD(gpn(a,jpt))),s=Gy(MD(gpn(a,$pt))),rH(u=new fm,o.d,o.c,o.a,o.b),l=MRn(t,i,r,s),p=new Wb(t.d);p.a<p.c.c.length;){for(w=(g=BB(n0(p),101)).f.a.ec().Kc();w.Ob();)c=(b=BB(w.Pb(),409)).a,f=ETn(b),v=new km,bTn(b,b.c,l,v),FMn(b,f,l,v),bTn(b,b.d,l,v),e=v,e=n.Uf(b,f,e),yQ(c.a),Frn(c.a,e),JT(new Rq(null,new w1(e,16)),new wP(h,u));(d=g.i)&&(aTn(g,d,l,r),pgn(h,u,m=new wA(d.g)),UR(m,d.j),pgn(h,u,m))}rH(o,u.d,u.c,u.a,u.b)}function cqn(n,t,e){var i,r,c;if((r=BB(mMn(t,(HXn(),Pdt)),275))!=(JMn(),cft)){switch(OTn(e,"Horizontal Compaction",1),n.a=t,Vk(i=new yOn(((c=new C7).d=t,c.c=BB(mMn(c.d,Zdt),218),UDn(c),SGn(c),sRn(c),c.a)),n.b),1===BB(mMn(t,Sdt),422).g?Wk(i,new grn(n.a)):Wk(i,(IQ(),fit)),r.g){case 1:I$n(i);break;case 2:I$n(Tzn(i,(Ffn(),FPt)));break;case 3:I$n(Uk(Tzn(I$n(i),(Ffn(),FPt)),new gr));break;case 4:I$n(Uk(Tzn(I$n(i),(Ffn(),FPt)),new kd(c)));break;case 5:I$n(Xk(i,wst))}Tzn(i,(Ffn(),_Pt)),i.e=!0,Lzn(c),HSn(e)}}function aqn(n,t,e,i,r,c,a,u){var o,s,h,f;switch(o=u6(Pun(Gk(FEt,1),HWn,220,0,[t,e,i,r])),f=null,n.b.g){case 1:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ja,new Qa,new Ya]));break;case 0:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ya,new Qa,new Ja]));break;case 2:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Qa,new Ja,new Ya]))}for(h=new Wb(f);h.a<h.c.c.length;)s=BB(n0(h),526),o.c.length>1&&(o=s.mg(o,n.a,u));return 1==o.c.length?BB(xq(o,o.c.length-1),220):2==o.c.length?FHn((l1(0,o.c.length),BB(o.c[0],220)),(l1(1,o.c.length),BB(o.c[1],220)),a,c):null}function uqn(n){var t,i,r,c,a,u;for(Otn(n.a,new nt),i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),221),r=XR(B$(BB(n.b,65).c),BB(t.b,65).c),ect?(u=BB(n.b,65).b,a=BB(t.b,65).b,e.Math.abs(r.a)>=e.Math.abs(r.b)?(r.b=0,a.d+a.a>u.d&&a.d<u.d+u.a&&NH(r,e.Math.max(u.c-(a.c+a.b),a.c-(u.c+u.b)))):(r.a=0,a.c+a.b>u.c&&a.c<u.c+u.b&&NH(r,e.Math.max(u.d-(a.d+a.a),a.d-(u.d+u.a))))):NH(r,TFn(BB(n.b,65),BB(t.b,65))),c=e.Math.sqrt(r.a*r.a+r.b*r.b),NH(r,c=HEn(Wrt,t,c,r)),LG(BB(t.b,65),r),Otn(t.a,new Aw(r)),BB(Wrt.b,65),K8(Wrt,Vrt,t)}function oqn(n){var t,i,r,c,a,u,o,s,f,l,b,w;for(n.f=new Fv,o=0,r=0,c=new Wb(n.e.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;){for((a=BB(n0(u),10)).p=o++,i=new oz(ZL(lbn(a).a.Kc(),new h));dAn(i);)BB(U5(i),17).p=r++;for(t=AHn(a),l=new Wb(a.j);l.a<l.c.c.length;)f=BB(n0(l),11),t&&(w=f.a.b)!=e.Math.floor(w)&&(s=w-j2(fan(e.Math.round(w))),f.a.b-=s),(b=f.n.b+f.a.b)!=e.Math.floor(b)&&(s=b-j2(fan(e.Math.round(b))),f.n.b-=s)}n.g=o,n.b=r,n.i=x8(eyt,HWn,401,o,0,1),n.c=x8(Jmt,HWn,649,r,0,1),n.d.a.$b()}function sqn(n){var t,e,i,r,c,a,u,o,s;if(n.ej())if(o=n.fj(),n.i>0){if(t=new DC(n.i,n.g),c=(e=n.i)<100?null:new Fj(e),n.ij())for(i=0;i<n.i;++i)a=n.g[i],c=n.kj(a,c);if(a6(n),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new ax(t);i.e!=i.i.gc();)c=n.dj(jpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r)}else a6(n),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if(n.i>0){for(u=n.g,s=n.i,a6(n),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else a6(n);else a6(n)}function hqn(n,t,i){var r,c,a,u,o,s,h,f,l;for(_an(this),i==(dJ(),Lyt)?TU(this.r,n):TU(this.w,n),f=RQn,h=KQn,u=t.a.ec().Kc();u.Ob();)c=BB(u.Pb(),46),o=BB(c.a,455),(s=(r=BB(c.b,17)).c)==n&&(s=r.d),TU(o==Lyt?this.r:this.w,s),l=(kUn(),yCt).Hc(s.j)?Gy(MD(mMn(s,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,f=e.Math.min(f,l),h=e.Math.max(h,l);for(XMn(this,(kUn(),yCt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b,f,h),a=t.a.ec().Kc();a.Ob();)c=BB(a.Pb(),46),tPn(this,BB(c.b,17));this.o=!1}function fqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return e=8191&n.l,i=n.l>>13|(15&n.m)<<9,r=n.m>>4&8191,c=n.m>>17|(255&n.h)<<5,a=(1048320&n.h)>>8,g=i*(u=8191&t.l),p=r*u,v=c*u,m=a*u,0!=(o=t.l>>13|(15&t.m)<<9)&&(g+=e*o,p+=i*o,v+=r*o,m+=c*o),0!=(s=t.m>>4&8191)&&(p+=e*s,v+=i*s,m+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(v+=e*h,m+=i*h),0!=(f=(1048320&t.h)>>8)&&(m+=e*f),b=((d=e*u)>>22)+(g>>9)+((262143&p)<<4)+((31&v)<<17),w=(p>>18)+(v>>5)+((4095&m)<<8),w+=(b+=(l=(d&SQn)+((511&g)<<13))>>22)>>22,M$(l&=SQn,b&=SQn,w&=PQn)}function lqn(n){var t,i,r,c,a,u,o;if(0!=(o=BB(xq(n.j,0),11)).g.c.length&&0!=o.e.c.length)throw Hp(new Fy("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=o.g.c.length){for(a=RQn,i=new Wb(o.g);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.d.i,(HXn(),Igt)),142),a=e.Math.min(a,u.n.a-r.b);return new qf(yX(a))}if(0!=o.e.c.length){for(c=KQn,i=new Wb(o.e);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.c.i,(HXn(),Igt)),142),c=e.Math.max(c,u.n.a+u.o.a+r.c);return new qf(yX(c))}return iy(),iy(),Ont}function bqn(n,t){var e,i,r,c,a,u;if(n.Fk()){if(n.i>4){if(!n.wj(t))return!1;if(n.rk()){if(u=(e=(i=BB(t,49)).Ug())==n.e&&(n.Dk()?i.Og(i.Vg(),n.zk())==n.Ak():-1-i.Vg()==n.aj()),n.Ek()&&!u&&!e&&i.Zg())for(r=0;r<n.i;++r)if(GC(n.Gk(BB(n.g[r],56)))===GC(t))return!0;return u}if(n.Dk()&&!n.Ck()){if(GC(c=BB(t,56).ah(Ivn(BB(n.ak(),18))))===GC(n.e))return!0;if(null==c||!BB(c,56).kh())return!1}}if(a=Sjn(n,t),n.Ek()&&!a)for(r=0;r<n.i;++r)if(GC(i=n.Gk(BB(n.g[r],56)))===GC(t))return!0;return a}return Sjn(n,t)}function wqn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(h=new Np,l=new Rv,a=t.b,r=0;r<a.c.length;r++){for(s=(l1(r,a.c.length),BB(a.c[r],29)).a,h.c=x8(Ant,HWn,1,0,5,1),c=0;c<s.c.length;c++)(u=n.a[r][c]).p=c,u.k==(uSn(),Cut)&&(h.c[h.c.length]=u),c5(BB(xq(t.b,r),29).a,c,u),u.j.c=x8(Ant,HWn,1,0,5,1),gun(u.j,BB(BB(xq(n.b,r),15).Xb(c),14)),LK(BB(mMn(u,(HXn(),ept)),98))||hon(u,ept,(QEn(),UIt));for(i=new Wb(h);i.a<i.c.c.length;)f=QRn(e=BB(n0(i),10)),l.a.zc(f,l),l.a.zc(e,l)}for(o=l.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),SQ(),m$(u.j,(zsn(),sst)),u.i=!0,eCn(u)}function dqn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=BB(mMn(n,(hWn(),Qft)),61),i=BB(xq(n.j,0),11),h==(kUn(),sCt)?qIn(i,SCt):h==SCt&&qIn(i,sCt),BB(mMn(t,(HXn(),Fgt)),174).Hc((mdn(),_Ct))){if(o=Gy(MD(mMn(n,Ipt))),s=Gy(MD(mMn(n,Cpt))),a=Gy(MD(mMn(n,Spt))),(u=BB(mMn(t,cpt),21)).Hc((lCn(),eCt)))for(e=s,f=n.o.a/2-i.n.a,c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.b=e,r.n.a=f-r.o.a/2,e+=r.o.b+a;else if(u.Hc(rCt))for(c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.a=o+n.o.a-i.n.a;f0(new Pw((gM(),new HV(t,!1,!1,new Ft))),new __(null,n,!1))}}function gqn(n,t){var i,r,c,a,u,o,s;if(0!=t.c.length){for(SQ(),yG(t.c,t.c.length,null),r=BB(n0(c=new Wb(t)),145);c.a<c.c.c.length;)i=BB(n0(c),145),!aen(r.e.c,i.e.c)||Kdn(BD(r.e).b,i.e.d)||Kdn(BD(i.e).b,r.e.d)?(eFn(n,r),r=i):(gun(r.k,i.k),gun(r.b,i.b),gun(r.c,i.c),Frn(r.i,i.i),gun(r.d,i.d),gun(r.j,i.j),a=e.Math.min(r.e.c,i.e.c),u=e.Math.min(r.e.d,i.e.d),o=e.Math.max(r.e.c+r.e.b,i.e.c+i.e.b)-a,s=e.Math.max(r.e.d+r.e.a,i.e.d+i.e.a)-u,xH(r.e,a,u,o,s),t0(r.f,i.f),!r.a&&(r.a=i.a),gun(r.g,i.g),WB(r.g,i));eFn(n,r)}}function pqn(n,t,e,i){var r,c,a,u,o,s;if((u=n.j)==(kUn(),PCt)&&t!=(QEn(),QIt)&&t!=(QEn(),YIt)&&(qIn(n,u=z_n(n,e)),!(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),tpt))&&u!=PCt&&(0!=n.n.a||0!=n.n.b)&&hon(n,tpt,jkn(n,u))),t==(QEn(),WIt)){switch(s=0,u.g){case 1:case 3:(c=n.i.o.a)>0&&(s=n.n.a/c);break;case 2:case 4:(r=n.i.o.b)>0&&(s=n.n.b/r)}hon(n,(hWn(),Tlt),s)}if(o=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=QIt&&t!=YIt&&u!=PCt)switch(u.g){case 1:a.a=o.a/2;break;case 2:a.a=o.a,a.b=o.b/2;break;case 3:a.a=o.a/2,a.b=o.b;break;case 4:a.b=o.b/2}else a.a=o.a/2,a.b=o.b/2}function vqn(n){var t,e,i,r,c,a,u,o,s,h;if(n.ej())if(h=n.Vi(),o=n.fj(),h>0)if(t=new jcn(n.Gi()),c=(e=h)<100?null:new Fj(e),JD(n,e,t.g),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new AL(t);i.e!=i.i.gc();)c=n.dj(kpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r);else JD(n,n.Vi(),n.Wi()),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if((h=n.Vi())>0){for(u=n.Wi(),s=h,JD(n,h,u),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else JD(n,n.Vi(),n.Wi());else JD(n,n.Vi(),n.Wi())}function mqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(u=new Wb(t);u.a<u.c.c.length;)(c=BB(n0(u),233)).e=null,c.c=0;for(o=null,a=new Wb(t);a.a<a.c.c.length;)if(f=(c=BB(n0(a),233)).d[0],!e||f.k==(uSn(),Iut)){for(b=BB(mMn(f,(hWn(),clt)),15).Kc();b.Ob();)l=BB(b.Pb(),10),e&&l.k!=(uSn(),Iut)||((!c.e&&(c.e=new Np),c.e).Fc(n.b[l.c.p][l.p]),++n.b[l.c.p][l.p].c);if(!e&&f.k==(uSn(),Iut)){if(o)for(h=BB(h6(n.d,o),21).Kc();h.Ob();)for(s=BB(h.Pb(),10),r=BB(h6(n.d,f),21).Kc();r.Ob();)i=BB(r.Pb(),10),UB(n.b[s.c.p][s.p]).Fc(n.b[i.c.p][i.p]),++n.b[i.c.p][i.p].c;o=f}}}function yqn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),11),nhn(n.b,n.d[r.p]),o.c=x8(Ant,HWn,1,0,5,1),r.i.k.g){case 0:Otn(BB(mMn(r,(hWn(),Elt)),10).j,new Zd(o));break;case 1:S$(Qon(AV(new Rq(null,new w1(r.i.j,16)),new ng(r))),new tg(o));break;case 3:WB(o,new rC(BB(mMn(r,(hWn(),dlt)),11),iln(r.e.c.length+r.g.c.length)))}for(u=new Wb(o);u.a<u.c.c.length;)a=BB(n0(u),46),(i=ME(n,BB(a.a,11)))>n.d[r.p]&&(e+=n5(n.b,i)*BB(a.b,19).a,d3(n.a,iln(i)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function kqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for((f=new wA(BB(ZAn(n,(SMn(),HMt)),8))).a=e.Math.max(f.a-i.b-i.c,0),f.b=e.Math.max(f.b-i.d-i.a,0),(null==(c=MD(ZAn(n,DMt)))||(kW(c),c<=0))&&(c=1.3),u=new Np,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)a=new zx(BB(kpn(l),33)),u.c[u.c.length]=a;switch(BB(ZAn(n,RMt),311).g){case 3:w=aFn(u,t,f.a,f.b,(s=r,kW(c),s));break;case 1:w=vBn(u,t,f.a,f.b,(h=r,kW(c),h));break;default:w=Mqn(u,t,f.a,f.b,(o=r,kW(c),o))}KUn(n,(b=yXn(new Gtn(w),t,i,f.a,f.b,r,(kW(c),c))).a,b.b,!1,!0)}function jqn(n,t){var e,i,r,c;c=new t_((e=t.b).j),r=0,(i=e.j).c=x8(Ant,HWn,1,0,5,1),eX(BB(gan(n.b,(kUn(),sCt),(Irn(),Rst)),15),e),r=Jmn(c,r,new xr,i),eX(BB(gan(n.b,sCt,Dst),15),e),r=Jmn(c,r,new Nr,i),eX(BB(gan(n.b,sCt,xst),15),e),eX(BB(gan(n.b,oCt,Rst),15),e),eX(BB(gan(n.b,oCt,Dst),15),e),r=Jmn(c,r,new Dr,i),eX(BB(gan(n.b,oCt,xst),15),e),eX(BB(gan(n.b,SCt,Rst),15),e),r=Jmn(c,r,new Rr,i),eX(BB(gan(n.b,SCt,Dst),15),e),r=Jmn(c,r,new Kr,i),eX(BB(gan(n.b,SCt,xst),15),e),eX(BB(gan(n.b,ICt,Rst),15),e),r=Jmn(c,r,new Qr,i),eX(BB(gan(n.b,ICt,Dst),15),e),eX(BB(gan(n.b,ICt,xst),15),e)}function Eqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Layer size calculation",1),f=RQn,h=KQn,c=!1,o=new Wb(n.b);o.a<o.c.c.length;)if((s=(u=BB(n0(o),29)).c).a=0,s.b=0,0!=u.a.c.length){for(c=!0,b=new Wb(u.a);b.a<b.c.c.length;)d=(l=BB(n0(b),10)).o,w=l.d,s.a=e.Math.max(s.a,d.a+w.b+w.c);g=(r=BB(xq(u.a,0),10)).n.b-r.d.d,r.k==(uSn(),Mut)&&(g-=BB(mMn(n,(HXn(),Lpt)),142).d),i=(a=BB(xq(u.a,u.a.c.length-1),10)).n.b+a.o.b+a.d.a,a.k==Mut&&(i+=BB(mMn(n,(HXn(),Lpt)),142).a),s.b=i-g,f=e.Math.min(f,g),h=e.Math.max(h,i)}c||(f=0,h=0),n.f.b=h-f,n.c.b-=f,HSn(t)}function Tqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(c=0,a=0,s=new Wb(n.a);s.a<s.c.c.length;)u=BB(n0(s),10),c=e.Math.max(c,u.d.b),a=e.Math.max(a,u.d.c);for(o=new Wb(n.a);o.a<o.c.c.length;){switch(u=BB(n0(o),10),BB(mMn(u,(HXn(),kdt)),248).g){case 1:w=0;break;case 2:w=1;break;case 5:w=.5;break;default:for(i=0,f=0,b=new Wb(u.j);b.a<b.c.c.length;)0==(l=BB(n0(b),11)).e.c.length||++i,0==l.g.c.length||++f;w=i+f==0?.5:f/(i+f)}g=n.c,h=u.o.a,p=(g.a-h)*w,w>.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=u.d.b)&&(p=r),d=u.d.c,p>g.a-d-h&&(p=g.a-d-h),u.n.a=t+p}}function Mqn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(u=x8(xNt,qQn,25,n.c.length,15,1),ikn(l=new Xz(new Uu),n),s=0,b=new Np;0!=l.b.c.length;)if(a=BB(0==l.b.c.length?null:xq(l.b,0),157),s>1&&iG(a)*eG(a)/2>u[0]){for(c=0;c<b.c.length-1&&iG(a)*eG(a)/2>u[c];)++c;f=new Gtn(new s1(b,0,c+1)),h=iG(a)/eG(a),o=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),o),F8(eMn(l,f)),ikn(l,new s1(b,c+1,b.c.length)),b.c=x8(Ant,HWn,1,0,5,1),s=0,jG(u,u.length,0)}else null!=(0==l.b.c.length?null:xq(l.b,0))&&hrn(l,0),s>0&&(u[s]=u[s-1]),u[s]+=iG(a)*eG(a),++s,b.c[b.c.length]=a;return b}function Sqn(n){var t,e,i;if((e=BB(mMn(n,(HXn(),kgt)),163))==(Tbn(),Flt)){for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(!X5(BB(U5(t),17)))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(e==Hlt)for(i=new oz(ZL(lbn(n).a.Kc(),new h));dAn(i);)if(!X5(BB(U5(i),17)))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}function Pqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(OTn(t,"Label dummy removal",1),i=Gy(MD(mMn(n,(HXn(),jpt)))),r=Gy(MD(mMn(n,Spt))),o=BB(mMn(n,Udt),103),u=new Wb(n.b);u.a<u.c.c.length;)for(h=new M2(BB(n0(u),29).a,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),(s=BB(h.d.Xb(h.c=h.b++),10)).k==(uSn(),Sut)&&(f=BB(mMn(s,(hWn(),dlt)),17),b=Gy(MD(mMn(f,agt))),a=GC(mMn(s,ult))===GC((Xyn(),EIt)),e=new wA(s.n),a&&(e.b+=b+i),c=new xI(s.o.a,s.o.b-b-i),l=BB(mMn(s,Plt),15),o==(Ffn(),HPt)||o==KPt?ADn(l,e,r,c,a,o):qhn(l,e,r,c),gun(f.b,l),rGn(s,GC(mMn(n,Zdt))===GC((Mbn(),YPt))),fW(h));HSn(t)}function Iqn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(u=new Np,r=new Wb(t.a);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),10).j);a.a<a.c.c.length;){for(s=null,m=0,y=(v=Z0((c=BB(n0(a),11)).g)).length;m<y;++m)wan((p=v[m]).d.i,e)||((g=LHn(n,t,e,p,p.c,(ain(),qvt),s))!=s&&(u.c[u.c.length]=g),g.c&&(s=g));for(o=null,w=0,d=(b=Z0(c.e)).length;w<d;++w)wan((l=b[w]).c.i,e)||((g=LHn(n,t,e,l,l.d,(ain(),Hvt),o))!=o&&(u.c[u.c.length]=g),g.c&&(o=g))}for(f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),441),-1!=E7(t.a,h.a,0)||WB(t.a,h.a),h.c&&(i.c[i.c.length]=h)}function Cqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Interactive cycle breaking",1),h=new Np,l=new Wb(t.a);l.a<l.c.c.length;)for((f=BB(n0(l),10)).p=1,b=Fjn(f).a,s=xwn(f,(ain(),qvt)).Kc();s.Ob();)for(c=new Wb(BB(s.Pb(),11).g);c.a<c.c.c.length;)(w=(i=BB(n0(c),17)).d.i)!=f&&Fjn(w).a<b&&(h.c[h.c.length]=i);for(a=new Wb(h);a.a<a.c.c.length;)tBn(i=BB(n0(a),17),!0);for(h.c=x8(Ant,HWn,1,0,5,1),o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p>0&&lPn(n,u,h);for(r=new Wb(h);r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0);h.c=x8(Ant,HWn,1,0,5,1),HSn(e)}function Oqn(n,t){var e,i,r,c,a,u,o,s,h;return s="",0==t.length?n.de(XVn,zVn,-1,-1):(mK((h=RMn(t)).substr(0,3),"at ")&&(h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=RMn(h.substr(a+1)),h=RMn(h.substr(0,a))):(e=h.indexOf(")",a),s=h.substr(a+1,e-(a+1)),h=RMn(h.substr(0,a))),-1!=(a=GO(h,YTn(46)))&&(h=h.substr(a+1)),(0==h.length||mK(h,"Anonymous function"))&&(h=zVn),u=mN(s,YTn(58)),r=MK(s,YTn(58),u-1),o=-1,i=-1,c=XVn,-1!=u&&-1!=r&&(c=s.substr(0,r),o=hx(s.substr(r+1,u-(r+1))),i=hx(s.substr(u+1))),n.de(c,h,o,i))}function Aqn(n,t,e){var i,r,c,a,u,o;if(0==t.l&&0==t.m&&0==t.h)throw Hp(new Oy("divide by zero"));if(0==n.l&&0==n.m&&0==n.h)return e&&(ltt=M$(0,0,0)),M$(0,0,0);if(t.h==IQn&&0==t.m&&0==t.l)return Fbn(n,e);if(o=!1,t.h>>19!=0&&(t=aon(t),o=!o),a=OLn(t),c=!1,r=!1,i=!1,n.h==IQn&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return u=jAn(n,a),o&&Oon(u),e&&(ltt=M$(0,0,0)),u;n=WO((X7(),btt)),i=!0,o=!o}else n.h>>19!=0&&(c=!0,n=aon(n),i=!0,o=!o);return-1!=a?Bon(n,a,o,c,e):Kkn(n,t)<0?(e&&(ltt=c?aon(n):M$(n.l,n.m,n.h)),M$(0,0,0)):h_n(i?n:M$(n.l,n.m,n.h),t,o,c,r,e)}function $qn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(n.e&&n.c.c<n.f)throw Hp(new Fy("Expected "+n.f+" phases to be configured; only found "+n.c.c));for(h=BB(Vj(n.g),9),b=sx(n.f),u=0,s=(c=h).length;u<s;++u)(f=BB(D7(n,(i=c[u]).g),246))?WB(b,BB(own(n,f),123)):b.c[b.c.length]=null;for(w=new B2,JT(AV($V(AV(new Rq(null,new w1(b,16)),new hu),new Eg(t)),new fu),new Tg(w)),Jcn(w,n.a),e=new Np,a=0,o=(r=h).length;a<o;++a)gun(e,Eun(n,JQ(BB(D7(w,(i=r[a]).g),20)))),(l=BB(xq(b,i.g),123))&&(e.c[e.c.length]=l);return gun(e,Eun(n,JQ(BB(D7(w,h[h.length-1].g+1),20)))),e}function Lqn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w;for(OTn(i,"Model order cycle breaking",1),n.a=0,n.b=0,l=new Np,h=t.a.c.length,s=new Wb(t.a);s.a<s.c.c.length;)Lx(o=BB(n0(s),10),(hWn(),wlt))&&(h=e.Math.max(h,BB(mMn(o,wlt),19).a+1));for(w=new Wb(t.a);w.a<w.c.c.length;)for(u=zPn(n,b=BB(n0(w),10),h),f=xwn(b,(ain(),qvt)).Kc();f.Ob();)for(a=new Wb(BB(f.Pb(),11).g);a.a<a.c.c.length;)zPn(n,(r=BB(n0(a),17)).d.i,h)<u&&(l.c[l.c.length]=r);for(c=new Wb(l);c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(t,(hWn(),qft),(hN(),!0));l.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function Nqn(n,t){var e,i,r,c,a,u,o;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=BB(a.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(u=n.r.a.ec().Kc();u.Ob();)r=BB(u.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(o=t.w.a.ec().Kc();o.Ob();)r=BB(o.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&++i;for(c=t.r.a.ec().Kc();c.Ob();)r=BB(c.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e<i?new S6(n,t,i-e):i<e?new S6(t,n,e-i):(new S6(t,n,0),new S6(n,t,0))}}function xqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(s=t.c,r=QA(n.e),f=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),e=r.a-f.a,i=r.b-f.b,e=(a=t.a).c-e,i=a.d-i,o=new Wb(s);o.a<o.c.c.length;){switch(b=e+(l=(u=BB(n0(o),395)).b).a,g=i+l.b,w=IJ(b/n.a),p=IJ(g/n.b),(c=u.a).g){case 0:Hpn(),h=Brt;break;case 1:Hpn(),h=Frt;break;case 2:Hpn(),h=Hrt;break;default:Hpn(),h=qrt}c.a?(v=IJ((g+u.c)/n.b),WB(n.f,new x_(h,iln(p),iln(v))),c==(qpn(),tct)?won(n,0,p,w,v):won(n,w,p,n.d-1,v)):(d=IJ((b+u.c)/n.a),WB(n.f,new x_(h,iln(w),iln(d))),c==(qpn(),Zrt)?won(n,w,0,d,p):won(n,w,p,d,n.c-1))}}function Dqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(l=new Np,c=new Np,d=null,u=t.Kc();u.Ob();)a=new Hd(BB(u.Pb(),19).a),c.c[c.c.length]=a,d&&(a.d=d,d.e=a),d=a;for(m=zFn(n),h=0;h<c.c.length;++h){for(b=null,g=D6((l1(0,c.c.length),BB(c.c[0],652))),i=null,r=RQn,f=1;f<n.b.c.length;++f)p=g?e.Math.abs(g.b-f):e.Math.abs(f-b.b)+1,(w=b?e.Math.abs(f-b.b):p+1)<p?(s=b,o=w):(s=g,o=p),y=Gy(MD(mMn(n,(HXn(),Hpt)))),(v=m[f]+e.Math.pow(o,y))<r&&(r=v,(i=s).c=f),g&&f==g.b&&(b=g,g=xz(g));i&&(WB(l,iln(i.c)),i.a=!0,vln(i))}return SQ(),yG(l.c,l.c.length,null),l}function Rqn(n){var t,e,i,r,c,a,u,o,s,h;for(t=new To,e=new To,s=mK(K9n,(r=N_n(n.b,_9n))?SD(cdn((!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),r.b),F9n)):null),o=0;o<n.i;++o)cL(u=BB(n.g[o],170),99)?0!=((a=BB(u,18)).Bb&h6n)?(0==(a.Bb&hVn)||!s&&null==((c=N_n(a,_9n))?SD(cdn((!c.b&&(c.b=new Jx((gWn(),k$t),X$t,c)),c.b),n8n)):null))&&f9(t,a):(h=Ivn(a))&&0!=(h.Bb&h6n)||(0==(a.Bb&hVn)||!s&&null==((i=N_n(a,_9n))?SD(cdn((!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),i.b),n8n)):null))&&f9(e,a):(ZM(),BB(u,66).Oj()&&(u.Jj()||(f9(t,u),f9(e,u))));chn(t),chn(e),n.a=BB(t.g,247),BB(e.g,247)}function Kqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(o=xSn(t),BB(mMn(t,(HXn(),qdt)),314)!=(Oin(),hht)&&e5(o,new vt),e5(o,new Dw(BB(mMn(t,Rdt),292))),b=0,s=new Np,r=new bV(o);r.a!=r.b;)i=BB(_hn(r),37),$Gn(n.c,i),b+=(f=BB(mMn(i,(hWn(),Mlt)),15)).gc(),WB(s,new rC(i,f.Kc()));for(OTn(e,"Recursive hierarchical layout",b),l=BB(BB(xq(s,s.c.length-1),46).b,47);l.Ob();)for(u=new Wb(s);u.a<u.c.c.length;)for(a=BB(n0(u),46),f=BB(a.b,47),c=BB(a.a,37);f.Ob();){if(cL(h=BB(f.Pb(),51),507)){if(c.e)break;h.pf(c,mcn(e,1));break}h.pf(c,mcn(e,1))}HSn(e)}function _qn(n,t){var e,i,r,c,a,u,o,s;if(b1(u=t.length-1,t.length),93==(a=t.charCodeAt(u))){if((c=GO(t,YTn(91)))>=0)return r=dbn(n,t.substr(1,c-1)),YUn(n,t.substr(c+1,u-(c+1)),r)}else{if(e=-1,null==Ett&&(Ett=new RegExp("\\d")),Ett.test(String.fromCharCode(a))&&(e=MK(t,YTn(46),u-1))>=0){i=BB(V5(n,Ptn(n,t.substr(1,e-1)),!1),58),o=0;try{o=l_n(t.substr(e+1),_Vn,DWn)}catch(h){throw cL(h=lun(h),127)?Hp(new L7(h)):Hp(h)}if(o<i.gc())return cL(s=i.Xb(o),72)&&(s=BB(s,72).dd()),BB(s,56)}if(e<0)return BB(V5(n,Ptn(n,t.substr(1)),!1),56)}return null}function Fqn(n,t,e){var i,r,c,a,u,o,s;if(Awn(t,e)>=0)return e;switch(DW(B7(n,e))){case 2:if(mK("",Ifn(n,e.Hj()).ne())){if(o=m$n(n,t,u=jV(B7(n,e)),kV(B7(n,e))))return o;for(a=0,s=(r=jKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(r.Xb(a),170))),u))return o}return null;case 4:if(mK("",Ifn(n,e.Hj()).ne())){for(i=e;i;i=J1(B7(n,i)))if(o=y$n(n,t,jV(B7(n,i)),kV(B7(n,i))))return o;if(u=jV(B7(n,e)),mK(S7n,u))return mjn(n,t);for(a=0,s=(c=EKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(c.Xb(a),170))),u))return o}return null;default:return null}}function Bqn(n,t,e){var i,r,c,a,u,o,s,h;if(0==e.gc())return!1;if(ZM(),c=(u=BB(t,66).Oj())?e:new gtn(e.gc()),$xn(n.e,t)){if(t.hi())for(s=e.Kc();s.Ob();)UFn(n,t,o=s.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(r=Z3(t,o),c.Hc(r)||c.Fc(r));else if(!u)for(s=e.Kc();s.Ob();)r=Z3(t,o=s.Pb()),c.Fc(r)}else{if(e.gc()>1)throw Hp(new _y(C7n));for(h=axn(n.e.Tg(),t),i=BB(n.g,119),a=0;a<n.i;++a)if(r=i[a],h.rl(r.ak())){if(e.Hc(u?r:r.dd()))return!1;for(s=e.Kc();s.Ob();)o=s.Pb(),BB(ovn(n,a,u?BB(o,72):Z3(t,o)),72);return!0}u||(r=Z3(t,e.Kc().Pb()),c.Fc(r))}return pX(n,c)}function Hqn(n,t){var i,r,c,a,u,o,s;for(s=new YT,o=new Kb(new Ob(n.c).a.vc().Kc());o.a.Ob();)c=BB(o.a.Pb(),42),0==(a=BB(c.dd(),458)).b&&r5(s,a,s.c.b,s.c);for(;0!=s.b;)for(null==(a=BB(0==s.b?null:(Px(0!=s.b),Atn(s,s.a.a)),458)).a&&(a.a=0),r=new Wb(a.d);r.a<r.c.c.length;)null==(i=BB(n0(r),654)).b.a?i.b.a=Gy(a.a)+i.a:t.o==(oZ(),ryt)?i.b.a=e.Math.min(Gy(i.b.a),Gy(a.a)+i.a):i.b.a=e.Math.max(Gy(i.b.a),Gy(a.a)+i.a),--i.b.b,0==i.b.b&&DH(s,i.b);for(u=new Kb(new Ob(n.c).a.vc().Kc());u.a.Ob();)c=BB(u.a.Pb(),42),a=BB(c.dd(),458),t.i[a.c.p]=a.a}function qqn(){qqn=O,skt=new up(OZn),new up(AZn),new iR("DEPTH",iln(0)),ikt=new iR("FAN",iln(0)),tkt=new iR(U3n,iln(0)),dkt=new iR("ROOT",(hN(),!1)),ckt=new iR("LEFTNEIGHBOR",null),bkt=new iR("RIGHTNEIGHBOR",null),akt=new iR("LEFTSIBLING",null),wkt=new iR("RIGHTSIBLING",null),ekt=new iR("DUMMY",!1),new iR("LEVEL",iln(0)),lkt=new iR("REMOVABLE_EDGES",new YT),gkt=new iR("XCOOR",iln(0)),pkt=new iR("YCOOR",iln(0)),ukt=new iR("LEVELHEIGHT",0),rkt=new iR("ID",""),hkt=new iR("POSITION",iln(0)),fkt=new iR("PRELIM",0),okt=new iR("MODIFIER",0),nkt=new up($Zn),Zyt=new up(LZn)}function Gqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(f=i+t.c.c.a,w=new Wb(t.j);w.a<w.c.c.length;){if(b=BB(n0(w),11),c=Aon(Pun(Gk(PMt,1),sVn,8,0,[b.i.n,b.n,b.a])),t.k==(uSn(),Cut)&&(o=BB(mMn(b,(hWn(),dlt)),11),c.a=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).a,t.n.a=c.a),u=new xI(0,c.b),b.j==(kUn(),oCt))u.a=f;else{if(b.j!=ICt)continue;u.a=i}if(!(e.Math.abs(c.a-u.a)<=r)||Nkn(t))for(a=b.g.c.length+b.e.c.length>1,h=new m6(b.b);y$(h.a)||y$(h.b);)l=(s=BB(y$(h.a)?n0(h.a):n0(h.b),17)).c==b?s.d:s.c,e.Math.abs(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).b-u.b)>1&&pxn(n,s,u,a,b)}}function zqn(n){var t,i,r,c,a,u;if(c=new M2(n.e,0),r=new M2(n.a,0),n.d)for(i=0;i<n.b;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++);else for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);for(t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++))));n.f-t>D3n;){for(a=t,u=0;e.Math.abs(t-a)<D3n;)++u,t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++)))),Px(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);u<n.b&&(Px(c.b>0),c.a.Xb(c.c=--c.b),DFn(n,n.b-u,a,r,c),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++)),Px(r.b>0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);n.d=!0,n.c=!0}function Uqn(){Uqn=O,pLt=(cE(),gLt).b,yLt=BB(Wtn(QQ(gLt.b),0),34),vLt=BB(Wtn(QQ(gLt.b),1),34),mLt=BB(Wtn(QQ(gLt.b),2),34),OLt=gLt.bb,BB(Wtn(QQ(gLt.bb),0),34),BB(Wtn(QQ(gLt.bb),1),34),$Lt=gLt.fb,LLt=BB(Wtn(QQ(gLt.fb),0),34),BB(Wtn(QQ(gLt.fb),1),34),BB(Wtn(QQ(gLt.fb),2),18),xLt=gLt.qb,KLt=BB(Wtn(QQ(gLt.qb),0),34),BB(Wtn(QQ(gLt.qb),1),18),BB(Wtn(QQ(gLt.qb),2),18),DLt=BB(Wtn(QQ(gLt.qb),3),34),RLt=BB(Wtn(QQ(gLt.qb),4),34),FLt=BB(Wtn(QQ(gLt.qb),6),34),_Lt=BB(Wtn(QQ(gLt.qb),5),18),kLt=gLt.j,jLt=gLt.k,ELt=gLt.q,TLt=gLt.w,MLt=gLt.B,SLt=gLt.A,PLt=gLt.C,ILt=gLt.D,CLt=gLt._,ALt=gLt.cb,NLt=gLt.hb}function Xqn(n,t,i){var r,c,a,u,o,s,h,f,l;n.c=0,n.b=0,r=2*t.c.a.c.length+1;n:for(h=i.Kc();h.Ob();){if(l=0,u=(s=BB(h.Pb(),11)).j==(kUn(),sCt)||s.j==SCt){if(!(f=BB(mMn(s,(hWn(),Elt)),10)))continue;l+=iRn(n,r,s,f)}else{for(o=new Wb(s.g);o.a<o.c.c.length;){if((c=BB(n0(o),17).d).i.c==t.c){WB(n.a,s);continue n}l+=n.g[c.p]}for(a=new Wb(s.e);a.a<a.c.c.length;){if((c=BB(n0(a),17).c).i.c==t.c){WB(n.a,s);continue n}l-=n.g[c.p]}}s.e.c.length+s.g.c.length>0?(n.f[s.p]=l/(s.e.c.length+s.g.c.length),n.c=e.Math.min(n.c,n.f[s.p]),n.b=e.Math.max(n.b,n.f[s.p])):u&&(n.f[s.p]=l)}}function Wqn(n){n.b=null,n.bb=null,n.fb=null,n.qb=null,n.a=null,n.c=null,n.d=null,n.e=null,n.f=null,n.n=null,n.M=null,n.L=null,n.Q=null,n.R=null,n.K=null,n.db=null,n.eb=null,n.g=null,n.i=null,n.j=null,n.k=null,n.gb=null,n.o=null,n.p=null,n.q=null,n.r=null,n.$=null,n.ib=null,n.S=null,n.T=null,n.t=null,n.s=null,n.u=null,n.v=null,n.w=null,n.B=null,n.A=null,n.C=null,n.D=null,n.F=null,n.G=null,n.H=null,n.I=null,n.J=null,n.P=null,n.Z=null,n.U=null,n.V=null,n.W=null,n.X=null,n.Y=null,n._=null,n.ab=null,n.cb=null,n.hb=null,n.nb=null,n.lb=null,n.mb=null,n.ob=null,n.pb=null,n.jb=null,n.kb=null,n.N=!1,n.O=!1}function Vqn(n,t,e){var i,r;for(OTn(e,"Graph transformation ("+n.a+")",1),r=a0(t.a),i=new Wb(t.b);i.a<i.c.c.length;)gun(r,BB(n0(i),29).a);if(BB(mMn(t,(HXn(),Xdt)),419)==(_nn(),Sht))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r);break;case 3:bdn(t,r);break;case 4:n.a==(Srn(),qut)?(bdn(t,r),$2(t,r)):($2(t,r),bdn(t,r))}else if(n.a==(Srn(),qut))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:bdn(t,r),L2(t,r);break;case 4:L2(t,r),bdn(t,r)}else switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:L2(t,r),bdn(t,r);break;case 4:bdn(t,r),L2(t,r)}HSn(e)}function Qqn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w;for(o=new fA,s=new fA,b=new fA,w=new fA,u=Gy(MD(mMn(t,(HXn(),Opt)))),r=Gy(MD(mMn(t,ypt))),a=new Wb(e);a.a<a.c.c.length;)if(c=BB(n0(a),10),(f=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sCt))for(s.a.zc(c,s),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(o,BB(U5(i),17).c.i);else if(f==SCt)for(w.a.zc(c,w),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(b,BB(U5(i),17).c.i);0!=o.a.gc()&&(l=AGn(new fX(2,r),t,o,s,-u-t.c.b))>0&&(n.a=u+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=AGn(new fX(1,r),t,b,w,t.f.b+u-t.c.b))>0&&(t.f.b+=u+(l-1)*r)}function Yqn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,Dsn(n,null)):(n.F=(kW(t),t),-1!=(i=GO(t,YTn(60)))?(r=t.substr(0,i),-1==GO(t,YTn(46))&&!mK(r,$Wn)&&!mK(r,S9n)&&!mK(r,P9n)&&!mK(r,I9n)&&!mK(r,C9n)&&!mK(r,O9n)&&!mK(r,A9n)&&!mK(r,$9n)&&(r=L9n),-1!=(e=mN(t,YTn(62)))&&(r+=""+t.substr(e+1)),Dsn(n,r)):(r=t,-1==GO(t,YTn(46))&&(-1!=(i=GO(t,YTn(91)))&&(r=t.substr(0,i)),mK(r,$Wn)||mK(r,S9n)||mK(r,P9n)||mK(r,I9n)||mK(r,C9n)||mK(r,O9n)||mK(r,A9n)||mK(r,$9n)?r=t:(r=L9n,-1!=i&&(r+=""+t.substr(i)))),Dsn(n,r),r==t&&(n.F=n.D))),0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,c,t))}function Jqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(!((d=t.b.c.length)<3)){for(b=x8(ANt,hQn,25,d,15,1),f=0,h=new Wb(t.b);h.a<h.c.c.length;)s=BB(n0(h),29),b[f++]=s.a.c.length;for(l=new M2(t.b,2),i=1;i<d-1;i++)for(Px(l.b<l.d.gc()),w=new Wb((e=BB(l.d.Xb(l.c=l.b++),29)).a),c=0,u=0,o=0;o<b[i+1];o++)if(m=BB(n0(w),10),o==b[i+1]-1||YSn(n,m,i+1,i)){for(a=b[i]-1,YSn(n,m,i+1,i)&&(a=n.c.e[BB(BB(BB(xq(n.c.b,m.p),15).Xb(0),46).a,10).p]);u<=o;){if(!YSn(n,v=BB(xq(e.a,u),10),i+1,i))for(p=BB(xq(n.c.b,v.p),15).Kc();p.Ob();)g=BB(p.Pb(),46),((r=n.c.e[BB(g.a,10).p])<c||r>a)&&TU(n.b,BB(g.b,17));++u}c=a}}}function Zqn(n,t){var e;if(null==t||mK(t,zWn))return null;if(0==t.length&&n.k!=(PPn(),pMt))return null;switch(n.k.g){case 1:return mgn(t,a5n)?(hN(),vtt):mgn(t,u5n)?(hN(),ptt):null;case 2:try{return iln(l_n(t,_Vn,DWn))}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 4:try{return bSn(t)}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 3:return t;case 5:return rhn(n),HCn(n,t);case 6:return rhn(n),K$n(n,n.a,t);case 7:try{return(e=rAn(n)).Jf(t),e}catch(i){if(cL(i=lun(i),32))return null;throw Hp(i)}default:throw Hp(new Fy("Invalid type set for this layout option."))}}function nGn(n){var t,e,i,r,c,a,u;for(Dnn(),u=new Vv,e=new Wb(n);e.a<e.c.c.length;)t=BB(n0(e),140),(!u.b||t.c>=u.b.c)&&(u.b=t),(!u.c||t.c<=u.c.c)&&(u.d=u.c,u.c=t),(!u.e||t.d>=u.e.d)&&(u.e=t),(!u.f||t.d<=u.f.d)&&(u.f=t);return i=new Tpn((Aun(),Zat)),i2(n,out,new Jy(Pun(Gk(Jat,1),HWn,369,0,[i]))),a=new Tpn(eut),i2(n,uut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[a]))),r=new Tpn(nut),i2(n,aut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[r]))),c=new Tpn(tut),i2(n,cut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[c]))),xLn(i.c,Zat),xLn(r.c,nut),xLn(c.c,tut),xLn(a.c,eut),u.a.c=x8(Ant,HWn,1,0,5,1),gun(u.a,i.c),gun(u.a,ean(r.c)),gun(u.a,c.c),gun(u.a,ean(a.c)),u}function tGn(n){var t;switch(n.d){case 1:if(n.hj())return-2!=n.o;break;case 2:if(n.hj())return-2==n.o;break;case 3:case 5:case 4:case 6:case 7:return n.o>-2;default:return!1}switch(t=n.gj(),n.p){case 0:return null!=t&&qy(TD(t))!=JC(n.k,0);case 1:return null!=t&&BB(t,217).a!=dG(n.k)<<24>>24;case 2:return null!=t&&BB(t,172).a!=(dG(n.k)&QVn);case 6:return null!=t&&JC(BB(t,162).a,n.k);case 5:return null!=t&&BB(t,19).a!=dG(n.k);case 7:return null!=t&&BB(t,184).a!=dG(n.k)<<16>>16;case 3:return null!=t&&Gy(MD(t))!=n.j;case 4:return null!=t&&BB(t,155).a!=n.j;default:return null==t?null!=n.n:!Nfn(t,n.n)}}function eGn(n,t,e){var i,r,c,a;return n.Fk()&&n.Ek()&&GC(a=Gz(n,BB(e,56)))!==GC(e)?(n.Oi(t),n.Ui(t,B9(n,t,a)),n.rk()&&(r=BB(e,49),c=n.Dk()?n.Bk()?r.ih(n.b,Ivn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),null):r.ih(n.b,Awn(r.Tg(),Ivn(BB(itn(jY(n.b),n.aj()),18))),null,null):r.ih(n.b,-1-n.aj(),null,null),!BB(a,49).eh()&&(i=BB(a,49),c=n.Dk()?n.Bk()?i.gh(n.b,Ivn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),c):i.gh(n.b,Awn(i.Tg(),Ivn(BB(itn(jY(n.b),n.aj()),18))),null,c):i.gh(n.b,-1-n.aj(),null,c)),c&&c.Fi()),mA(n.b)&&n.$i(n.Zi(9,e,a,t,!1)),a):e}function iGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(f=Gy(MD(mMn(n,(HXn(),Ept)))),r=Gy(MD(mMn(n,Rpt))),hon(b=new Yu,Ept,f+r),v=(h=t).d,g=h.c.i,m=h.d.i,p=tA(g.c),y=tA(m.c),c=new Np,l=p;l<=y;l++)Bl(o=new $vn(n),(uSn(),Put)),hon(o,(hWn(),dlt),h),hon(o,ept,(QEn(),XIt)),hon(o,Mpt,b),w=BB(xq(n.b,l),29),l==p?Qyn(o,w.a.c.length-i,w):PZ(o,w),(k=Gy(MD(mMn(h,agt))))<0&&hon(h,agt,k=0),o.o.b=k,d=e.Math.floor(k/2),qIn(u=new ISn,(kUn(),ICt)),IZ(u,o),u.n.b=d,qIn(s=new ISn,oCt),IZ(s,o),s.n.b=d,MZ(h,u),qan(a=new wY,h),hon(a,vgt,null),SZ(a,s),MZ(a,v),zkn(o,h,a),c.c[c.c.length]=a,h=a;return c}function rGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(u=BB(DSn(n,(kUn(),ICt)).Kc().Pb(),11).e,f=BB(DSn(n,oCt).Kc().Pb(),11).g,a=u.c.length,g=g1(BB(xq(n.j,0),11));a-- >0;){for(l1(0,u.c.length),b=BB(u.c[0],17),l1(0,f.c.length),r=E7((i=BB(f.c[0],17)).d.e,i,0),A2(b,i.d,r),SZ(i,null),MZ(i,null),l=b.a,t&&DH(l,new wA(g)),e=spn(i.a,0);e.b!=e.d.c;)DH(l,new wA(BB(b3(e),8)));for(d=b.b,h=new Wb(i.b);h.a<h.c.c.length;)s=BB(n0(h),70),d.c[d.c.length]=s;if(w=BB(mMn(b,(HXn(),vgt)),74),c=BB(mMn(i,vgt),74))for(w||(w=new km,hon(b,vgt,w)),o=spn(c,0);o.b!=o.d.c;)DH(w,new wA(BB(b3(o),8)))}}function cGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.b=0,void(i.n.c=0);for(h=n.u.Hc((lCn(),eCt)),u=0,o=s.Kc(),f=null,l=0,b=0;o.Ob();)c=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),a=r.b.rf().a,n.A.Hc((mdn(),_Ct))&&yRn(n,t),f?(w=b+f.d.c+n.w+r.d.b,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-c)<=fJn||l==c||isNaN(l)&&isNaN(c)?0:w/(c-l)))):n.C&&n.C.b>0&&(u=e.Math.max(u,lcn(n.C.b+r.d.b,c))),f=r,l=c,b=a;n.C&&n.C.c>0&&(w=b+n.C.c,h&&(w+=f.d.c),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-1)<=fJn||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=u}function aGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((lCn(),eCt)),u=0,n.A.Hc((mdn(),_Ct))&&kRn(n,t),o=s.Kc(),f=null,b=0,l=0;o.Ob();)a=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),c=r.b.rf().b,f?(w=l+f.d.a+n.w+r.d.d,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-a)<=fJn||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(u=e.Math.max(u,lcn(n.C.d+r.d.d,a))),f=r,b=a,l=c;n.C&&n.C.a>0&&(w=l+n.C.a,h&&(w+=f.d.a),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-1)<=fJn||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=u}function uGn(n,t,e){var i,r,c,a,u,o;for(this.g=n,u=t.d.length,o=e.d.length,this.d=x8(Out,a1n,10,u+o,0,1),a=0;a<u;a++)this.d[a]=t.d[a];for(c=0;c<o;c++)this.d[u+c]=e.d[c];if(t.e){if(this.e=zB(t.e),this.e.Mc(e),e.e)for(r=e.e.Kc();r.Ob();)(i=BB(r.Pb(),233))!=t&&(this.e.Hc(i)?--i.c:this.e.Fc(i))}else e.e&&(this.e=zB(e.e),this.e.Mc(t));this.f=t.f+e.f,this.a=t.a+e.a,this.a>0?Jtn(this,this.f/this.a):null!=lL(t.g,t.d[0]).a&&null!=lL(e.g,e.d[0]).a?Jtn(this,(Gy(lL(t.g,t.d[0]).a)+Gy(lL(e.g,e.d[0]).a))/2):null!=lL(t.g,t.d[0]).a?Jtn(this,lL(t.g,t.d[0]).a):null!=lL(e.g,e.d[0]).a&&Jtn(this,lL(e.g,e.d[0]).a)}function oGn(n,t){var e,i,r,c,a,u,o,s,h;for(n.a=new BX($cn(WPt)),i=new Wb(t.a);i.a<i.c.c.length;){for(e=BB(n0(i),841),a=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),WB(n.a.a,a),o=new Wb(e.d);o.a<o.c.c.length;)FGn(s=new NN(n,u=BB(n0(o),110)),BB(mMn(e.c,(hWn(),Xft)),21)),hU(n.g,e)||(VW(n.g,e,new xI(u.c,u.d)),VW(n.f,e,s)),WB(n.a.b,s),g2(a,s);for(c=new Wb(e.b);c.a<c.c.c.length;)s=new NN(n,(r=BB(n0(c),594)).kf()),VW(n.b,r,new rC(a,s)),FGn(s,BB(mMn(e.c,(hWn(),Xft)),21)),r.hf()&&(FGn(h=new Sgn(n,r.hf(),1),BB(mMn(e.c,Xft),21)),g2(new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),h),JCn(n.c,r.gf(),new rC(a,h)))}return n.a}function sGn(n){var t;this.a=n,t=(uSn(),Pun(Gk($ut,1),$Vn,267,0,[Iut,Put,Mut,Cut,Sut,Tut])).length,this.b=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),this.c=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),FY(this,Iut,(HXn(),Opt),Apt),tun(this,Iut,Put,Ept,Tpt),_Y(this,Iut,Cut,Ept),_Y(this,Iut,Mut,Ept),tun(this,Iut,Sut,Opt,Apt),FY(this,Put,ypt,kpt),_Y(this,Put,Cut,ypt),_Y(this,Put,Mut,ypt),tun(this,Put,Sut,Ept,Tpt),ZA(this,Cut,ypt),_Y(this,Cut,Mut,ypt),_Y(this,Cut,Sut,Ppt),ZA(this,Mut,Npt),tun(this,Mut,Sut,Cpt,Ipt),FY(this,Sut,ypt,ypt),FY(this,Tut,ypt,kpt),tun(this,Tut,Iut,Ept,Tpt),tun(this,Tut,Sut,Ept,Tpt),tun(this,Tut,Put,Ept,Tpt)}function hGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(cL(a=e.ak(),99)&&0!=(BB(a,18).Bb&BQn)&&(l=BB(e.dd(),49),(d=tfn(n.e,l))!=l)){if(jL(n,t,sTn(n,t,h=Z3(a,d))),f=null,mA(n.e)&&(i=Fqn((CPn(),Z$t),n.e.Tg(),a))!=itn(n.e.Tg(),n.c)){for(g=axn(n.e.Tg(),a),u=0,c=BB(n.g,119),o=0;o<t;++o)r=c[o],g.rl(r.ak())&&++u;(f=new b4(n.e,9,i,l,d,u,!1)).Ei(new N7(n.e,9,n.c,e,h,t,!1))}return(b=Ivn(w=BB(a,18)))?(f=l.ih(n.e,Awn(l.Tg(),b),null,f),f=BB(d,49).gh(n.e,Awn(d.Tg(),b),null,f)):0!=(w.Bb&h6n)&&(s=-1-Awn(n.e.Tg(),w),f=l.ih(n.e,s,null,null),!BB(d,49).eh()&&(f=BB(d,49).gh(n.e,s,null,f))),f&&f.Fi(),h}return e}function fGn(n){var t,i,r,c,a,u,o,s;for(a=new Wb(n.a.b);a.a<a.c.c.length;)(c=BB(n0(a),81)).b.c=c.g.c,c.b.d=c.g.d;for(s=new xI(RQn,RQn),t=new xI(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);for(o=TX(n.c).a.nc();o.Ob();)u=BB(o.Pb(),46),i=BB(u.b,81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);n.d=qx(new xI(s.a,s.b)),n.e=XR(new xI(t.a,t.b),s),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1)}function lGn(n){var t,e,i;for(ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Nf])),e=new Tl(n),i=0;i<e.a.length;++i)mK(t=dnn(e,i).je().a,"layered")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new hf])):mK(t,"force")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new zh])):mK(t,"stress")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Xh])):mK(t,"mrtree")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Pf])):mK(t,"radial")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new yf])):mK(t,"disco")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Gh,new Hh])):mK(t,"sporeOverlap")||mK(t,"sporeCompaction")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Tf])):mK(t,"rectpacking")&&ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Of]))}function bGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=new wA(n.o),p=t.a/l.a,u=t.b/l.b,d=t.a-l.a,c=t.b-l.b,e)for(r=GC(mMn(n,(HXn(),ept)))===GC((QEn(),XIt)),w=new Wb(n.j);w.a<w.c.c.length;)switch((b=BB(n0(w),11)).j.g){case 1:r||(b.n.a*=p);break;case 2:b.n.a+=d,r||(b.n.b*=u);break;case 3:r||(b.n.a*=p),b.n.b+=c;break;case 4:r||(b.n.b*=u)}for(s=new Wb(n.b);s.a<s.c.c.length;)h=(o=BB(n0(s),70)).n.a+o.o.a/2,f=o.n.b+o.o.b/2,(g=h/l.a)+(a=f/l.b)>=1&&(g-a>0&&f>=0?(o.n.a+=d,o.n.b+=c*a):g-a<0&&h>=0&&(o.n.a+=d*g,o.n.b+=c));n.o.a=t.a,n.o.b=t.b,hon(n,(HXn(),Fgt),(mdn(),new YK(i=BB(Vj(YCt),9),BB(SR(i,i.length),9),0)))}function wGn(n,t,e,i,r,c){if(null!=t&&Xbn(t,AAt,$At))throw Hp(new _y("invalid scheme: "+t));if(!(n||null!=e&&-1==GO(e,YTn(35))&&e.length>0&&(b1(0,e.length),47!=e.charCodeAt(0))))throw Hp(new _y("invalid opaquePart: "+e));if(n&&(null==t||!xT(jAt,t.toLowerCase()))&&null!=e&&Xbn(e,LAt,NAt))throw Hp(new _y(o9n+e));if(n&&null!=t&&xT(jAt,t.toLowerCase())&&!IEn(e))throw Hp(new _y(o9n+e));if(!Ubn(i))throw Hp(new _y("invalid device: "+i));if(!Rhn(r))throw Hp(new _y(null==r?"invalid segments: null":"invalid segment: "+shn(r)));if(null!=c&&-1!=GO(c,YTn(35)))throw Hp(new _y("invalid query: "+c))}function dGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(t,"Calculate Graph Size",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),o=ZJn,s=ZJn,a=n4n,u=n4n,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)d=(h=BB(kpn(l),33)).i,g=h.j,v=h.g,r=h.f,c=BB(ZAn(h,(sWn(),$St)),142),o=e.Math.min(o,d-c.b),s=e.Math.min(s,g-c.d),a=e.Math.max(a,d+v+c.c),u=e.Math.max(u,g+r+c.a);for(b=new xI(o-(w=BB(ZAn(n,(sWn(),XSt)),116)).b,s-w.d),f=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));f.e!=f.i.gc();)Pen(h=BB(kpn(f),33),h.i-b.a),Ien(h,h.j-b.b);p=a-o+(w.b+w.c),i=u-s+(w.d+w.a),Sen(n,p),Men(n,i),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function gGn(n){var t,e,i,r,c,a,u,o,s,h;for(i=new Np,a=new Wb(n.e.a);a.a<a.c.c.length;){for(h=0,(r=BB(n0(a),121)).k.c=x8(Ant,HWn,1,0,5,1),e=new Wb(kbn(r));e.a<e.c.c.length;)(t=BB(n0(e),213)).f&&(WB(r.k,t),++h);1==h&&(i.c[i.c.length]=r)}for(c=new Wb(i);c.a<c.c.c.length;)for(r=BB(n0(c),121);1==r.k.c.length;){for(s=BB(n0(new Wb(r.k)),213),n.b[s.c]=s.g,u=s.d,o=s.e,e=new Wb(kbn(r));e.a<e.c.c.length;)Nfn(t=BB(n0(e),213),s)||(t.f?u==t.d||o==t.e?n.b[s.c]-=n.b[t.c]-t.g:n.b[s.c]+=n.b[t.c]-t.g:r==u?t.d==r?n.b[s.c]+=t.g:n.b[s.c]-=t.g:t.d==r?n.b[s.c]-=t.g:n.b[s.c]+=t.g);y7(u.k,s),y7(o.k,s),r=u==r?s.e:s.d}}function pGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(null==t||0==t.length)return null;if(!(c=BB(SJ(n.f,t),23))){for(r=new Kb(new Ob(n.d).a.vc().Kc());r.a.Ob();)if(a=BB(r.a.Pb(),42),u=(e=BB(a.dd(),23)).f,l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}if(!c)for(i=new Kb(new Ob(n.d).a.vc().Kc());i.a.Ob();)if(a=BB(i.a.Pb(),42),null!=(f=(e=BB(a.dd(),23)).g))for(s=0,h=(o=f).length;s<h;++s)if(u=o[s],l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}c&&mZ(n.f,t,c)}return c}function vGn(n,t){var e,i,r,c,a;for(e=new Ck,a=!1,c=0;c<t.length;c++)if(b1(c,t.length),32!=(i=t.charCodeAt(c)))a?39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+=String.fromCharCode(i),++c):a=!1:e.a+=String.fromCharCode(i):GO("GyMLdkHmsSEcDahKzZv",YTn(i))>0?(Ppn(n,e,0),e.a+=String.fromCharCode(i),Ppn(n,e,r=cgn(t,c)),c+=r-1):39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+="'",++c):a=!0:e.a+=String.fromCharCode(i);else for(Ppn(n,e,0),e.a+=" ",Ppn(n,e,0);c+1<t.length&&(b1(c+1,t.length),32==t.charCodeAt(c+1));)++c;Ppn(n,e,0),pTn(n)}function mGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(OTn(i,"Network simplex layering",1),n.b=t,p=4*BB(mMn(t,(HXn(),xpt)),19).a,(g=n.b.a).c.length<1)HSn(i);else{for(d=null,c=spn(a=CKn(n,g),0);c.b!=c.d.c;){for(r=BB(b3(c),15),o=p*IJ(e.Math.sqrt(r.gc())),WKn(Qk(Jk(Yk(B_(u=o_n(r)),o),d),!0),mcn(i,1)),l=n.b.b,w=new Wb(u.a);w.a<w.c.c.length;){for(b=BB(n0(w),121);l.c.length<=b.e;)kG(l,l.c.length,new HX(n.b));PZ(BB(b.f,10),BB(xq(l,b.e),29))}if(a.b>1)for(d=x8(ANt,hQn,25,n.b.b.c.length,15,1),f=0,h=new Wb(n.b.b);h.a<h.c.c.length;)s=BB(n0(h),29),d[f++]=s.a.c.length}g.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,n.c=null,HSn(i)}}function yGn(n){var t,i,r,c,a,u,o;for(t=0,a=new Wb(n.b.a);a.a<a.c.c.length;)(r=BB(n0(a),189)).b=0,r.c=0;for(ESn(n,0),ewn(n,n.g),kNn(n.c),Zy(n.c),Ffn(),i=_Pt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Mzn(n.c,i)),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.g),kMn(n,0),pHn(n,0),M$n(n,1),ESn(n,1),ewn(n,n.d),kNn(n.c),u=new Wb(n.b.a);u.a<u.c.c.length;)r=BB(n0(u),189),t+=e.Math.abs(r.c);for(o=new Wb(n.b.a);o.a<o.c.c.length;)(r=BB(n0(o),189)).b=0,r.c=0;for(i=HPt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Zy(Mzn(n.c,i))),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.d),kMn(n,1),pHn(n,1),M$n(n,0),Zy(n.c),c=new Wb(n.b.a);c.a<c.c.c.length;)r=BB(n0(c),189),t+=e.Math.abs(r.c);return t}function kGn(n,t){var e,i,r,c,a,u,o,s,h;if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)i+=2;else if(c>=u&&r<=o)u<=r&&c<=o?(e[h++]=r,e[h++]=c,i+=2):u<=r?(e[h++]=r,e[h++]=o,n.b[i]=o+1,a+=2):c<=o?(e[h++]=u,e[h++]=c,i+=2):(e[h++]=u,e[h++]=o,n.b[i]=o+1);else{if(!(o<r))throw Hp(new dy("Token#intersectRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] & ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}function jGn(n){var t,i,r,c,a,u,o;for(t=new Np,n.g=new Np,n.d=new Np,u=new usn(new Pb(n.f.b).a);u.b;)WB(t,BB(BB((a=ten(u)).dd(),46).b,81)),dA(BB(a.cd(),594).gf())?WB(n.d,BB(a.dd(),46)):WB(n.g,BB(a.dd(),46));for(ewn(n,n.d),ewn(n,n.g),n.c=new sOn(n.b),ej(n.c,(vM(),Gat)),Bln(n,n.d),Bln(n,n.g),gun(t,n.c.a.b),n.e=new xI(RQn,RQn),n.a=new xI(KQn,KQn),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),81),n.e.a=e.Math.min(n.e.a,i.g.c),n.e.b=e.Math.min(n.e.b,i.g.d),n.a.a=e.Math.max(n.a.a,i.g.c+i.g.b),n.a.b=e.Math.max(n.a.b,i.g.d+i.g.a);tj(n.c,new jt),o=0;do{c=yGn(n),++o}while((o<2||c>KVn)&&o<10);tj(n.c,new Et),yGn(n),CU(n.c),fGn(n.f)}function EGn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(qy(TD(mMn(e,(HXn(),wgt)))))for(r=new Wb(e.j);r.a<r.c.c.length;)for(u=0,o=(a=Z0(BB(n0(r),11).g)).length;u<o;++u)(c=a[u]).d.i==e&&qy(TD(mMn(c,dgt)))&&(h=c.c,(s=BB(RX(n.b,h),10))||(hon(s=bXn(h,(QEn(),QIt),h.j,-1,null,null,h.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),h),VW(n.b,h,s),WB(t.a,s)),l=c.d,(f=BB(RX(n.b,l),10))||(hon(f=bXn(l,(QEn(),QIt),l.j,1,null,null,l.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),l),VW(n.b,l,f),WB(t.a,f)),SZ(i=W5(c),BB(xq(s.j,0),11)),MZ(i,BB(xq(f.j,0),11)),JCn(n.a,c,new L_(i,t,(ain(),qvt))),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)))}function TGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Label dummy switching",1),i=BB(mMn(t,(HXn(),Vdt)),227),pcn(t),r=j$n(t,i),n.a=x8(xNt,qQn,25,t.b.c.length,15,1),$Pn(),h=0,b=(u=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;h<b;++h)if(((c=u[h])==eht||c==Yst||c==nht)&&!BB(SN(r.a,c)?r.b[c.g]:null,15).dc()){Zcn(n,t);break}for(f=0,w=(o=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;f<w;++f)(c=o[f])==eht||c==Yst||c==nht||GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));for(s=0,l=(a=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;s<l;++s)((c=a[s])==eht||c==Yst||c==nht)&&GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));n.a=null,HSn(e)}function MGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;switch(n.k.g){case 1:if(i=BB(mMn(n,(hWn(),dlt)),17),(e=BB(mMn(i,glt),74))?qy(TD(mMn(i,Ilt)))&&(e=Jon(e)):e=new km,s=BB(mMn(n,hlt),11)){if(t<=(h=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a]))).a)return h.b;r5(e,h,e.a,e.a.a)}if(f=BB(mMn(n,flt),11)){if((l=Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))).a<=t)return l.b;r5(e,l,e.c.b,e.c)}if(e.b>=2){for(a=BB(b3(o=spn(e,0)),8),u=BB(b3(o),8);u.a<t&&o.b!=o.d.c;)a=u,u=BB(b3(o),8);return a.b+(t-a.a)/(u.a-a.a)*(u.b-a.b)}break;case 3:switch(r=(c=BB(mMn(BB(xq(n.j,0),11),(hWn(),dlt)),11)).i,c.j.g){case 1:return r.n.b;case 3:return r.n.b+r.o.b}}return Fjn(n).b}function SGn(n){var t,e,i,r,c,a,u,o,s,f;for(c=new Wb(n.d.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;)!qy(TD(mMn(a=BB(n0(u),10),(HXn(),Tdt))))||h3(hbn(a))?(r=new UV(a.n.a-a.d.b,a.n.b-a.d.d,a.o.a+a.d.b+a.d.c,a.o.b+a.d.d+a.d.a),t=ON(iM(tM(eM(new Wv,a),r),dst),n.a),CN(nM(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),t),n.a),o=new Dp,VW(n.e,t,o),(e=F3(new oz(ZL(fbn(a).a.Kc(),new h)))-F3(new oz(ZL(lbn(a).a.Kc(),new h))))<0?Uun(o,!0,(Ffn(),_Pt)):e>0&&Uun(o,!0,(Ffn(),FPt)),a.k==(uSn(),Mut)&&wV(o),VW(n.f,a,t)):((s=(i=BB(iY(hbn(a)),17)).c.i)==a&&(s=i.d.i),f=new rC(s,XR(B$(a.n),s.n)),VW(n.b,a,f))}function PGn(n,t,i){var r,c,a,u,o,s,h,f;switch(OTn(i,"Node promotion heuristic",1),n.g=t,yUn(n),n.q=BB(mMn(t,(HXn(),Sgt)),260),f=BB(mMn(n.g,Mgt),19).a,a=new hi,n.q.g){case 2:case 1:default:_Hn(n,a);break;case 3:for(n.q=(sNn(),Ovt),_Hn(n,a),s=0,o=new Wb(n.a);o.a<o.c.c.length;)u=BB(n0(o),19),s=e.Math.max(s,u.a);s>n.j&&(n.q=Tvt,_Hn(n,a));break;case 4:for(n.q=(sNn(),Ovt),_Hn(n,a),h=0,c=new Wb(n.b);c.a<c.c.c.length;)r=MD(n0(c)),h=e.Math.max(h,(kW(r),r));h>n.k&&(n.q=Pvt,_Hn(n,a));break;case 6:_Hn(n,new od(IJ(e.Math.ceil(n.f.length*f/100))));break;case 5:_Hn(n,new sd(IJ(e.Math.ceil(n.d*f/100))))}oDn(n,t),HSn(i)}function IGn(n,t,e){var i,r,c,a;this.j=n,this.e=qEn(n),this.o=this.j.e,this.i=!!this.o,this.p=this.i?BB(xq(e,vW(this.o).p),214):null,r=BB(mMn(n,(hWn(),Zft)),21),this.g=r.Hc((bDn(),lft)),this.b=new Np,this.d=new wdn(this.e),a=BB(mMn(this.j,Slt),230),this.q=Han(t,a,this.e),this.k=new aZ(this),c=u6(Pun(Gk(jst,1),HWn,225,0,[this,this.d,this.k,this.q])),t!=(oin(),Omt)||qy(TD(mMn(n,(HXn(),xdt))))?t==Omt&&qy(TD(mMn(n,(HXn(),xdt))))?(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new prn(i,a,BB(this.q,402))):this.c=new vP(t,this):(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new G2(i,a,BB(this.q,402))),WB(c,this.c),IHn(c,this.e),this.s=wXn(this.k)}function CGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=(s=BB(iL(new wg(spn(new bg(t).a.d,0))),86))?BB(mMn(s,(qqn(),ckt)),86):null,r=1;s&&l;){for(a=0,v=0,e=s,i=l,c=0;c<r;c++)e=G8(e),i=G8(i),v+=Gy(MD(mMn(e,(qqn(),okt)))),a+=Gy(MD(mMn(i,okt)));if(p=Gy(MD(mMn(l,(qqn(),fkt)))),g=Gy(MD(mMn(s,fkt))),h=E5(s,l),0<(f=p+a+n.a+h-g-v)){for(u=t,o=0;u&&u!=i;)++o,u=BB(mMn(u,akt),86);if(!u)return;for(d=f/o,u=t;u!=i;)w=Gy(MD(mMn(u,fkt)))+f,hon(u,fkt,w),b=Gy(MD(mMn(u,okt)))+f,hon(u,okt,b),f-=d,u=BB(mMn(u,akt),86)}++r,l=(s=0==s.d.b?ZKn(new bg(t),r):BB(iL(new wg(spn(new bg(s).a.d,0))),86))?BB(mMn(s,ckt),86):null}}function OGn(n,t){var e,i,r,c,a,u,o,s,f;for(u=!0,r=0,o=n.f[t.p],s=t.o.b+n.n,e=n.c[t.p][2],c5(n.a,o,iln(BB(xq(n.a,o),19).a-1+e)),c5(n.b,o,Gy(MD(xq(n.b,o)))-s+e*n.e),++o>=n.i?(++n.i,WB(n.a,iln(1)),WB(n.b,s)):(i=n.c[t.p][1],c5(n.a,o,iln(BB(xq(n.a,o),19).a+1-i)),c5(n.b,o,Gy(MD(xq(n.b,o)))+s-i*n.e)),(n.q==(sNn(),Tvt)&&(BB(xq(n.a,o),19).a>n.j||BB(xq(n.a,o-1),19).a>n.j)||n.q==Pvt&&(Gy(MD(xq(n.b,o)))>n.k||Gy(MD(xq(n.b,o-1)))>n.k))&&(u=!1),c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)a=BB(U5(c),17).c.i,n.f[a.p]==o&&(r+=BB((f=OGn(n,a)).a,19).a,u=u&&qy(TD(f.b)));return n.f[t.p]=o,new rC(iln(r+=n.c[t.p][0]),(hN(),!!u))}function AGn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=new xp,u=new Np,rCn(n,i,n.d.fg(),u,l),rCn(n,r,n.d.gg(),u,l),n.b=.2*(g=BAn(wnn(new Rq(null,new w1(u,16)),new Sa)),p=BAn(wnn(new Rq(null,new w1(u,16)),new Pa)),e.Math.min(g,p)),a=0,o=0;o<u.c.length-1;o++)for(l1(o,u.c.length),s=BB(u.c[o],112),d=o+1;d<u.c.length;d++)a+=gHn(n,s,(l1(d,u.c.length),BB(u.c[d],112)));for(b=BB(mMn(t,(hWn(),Slt)),230),a>=2&&(v=QLn(u,!0,b),!n.e&&(n.e=new lg(n)),sgn(n.e,v,u,n.b)),iTn(u,b),czn(u),w=-1,f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),112),e.Math.abs(h.s-h.c)<lZn||(w=e.Math.max(w,h.o),n.d.dg(h,c,n.c));return n.d.a.a.$b(),w+1}function $Gn(n,t){var e,i;Gy(MD(mMn(t,(HXn(),ypt))))<2&&hon(t,ypt,2),BB(mMn(t,Udt),103)==(Ffn(),BPt)&&hon(t,Udt,Wln(t)),0==(e=BB(mMn(t,wpt),19)).a?hon(t,(hWn(),Slt),new sbn):hon(t,(hWn(),Slt),new I4(e.a)),null==TD(mMn(t,xgt))&&hon(t,xgt,(hN(),GC(mMn(t,Zdt))===GC((Mbn(),QPt)))),JT(new Rq(null,new w1(t.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(t.b,16)),new mt),new Kw(n)),i=new sGn(t),hon(t,(hWn(),Alt),i),h2(n.a),IU(n.a,(yMn(),Rat),BB(mMn(t,Gdt),246)),IU(n.a,Kat,BB(mMn(t,Pgt),246)),IU(n.a,_at,BB(mMn(t,qdt),246)),IU(n.a,Fat,BB(mMn(t,_gt),246)),IU(n.a,Bat,San(BB(mMn(t,Zdt),218))),aA(n.a,LXn(t)),hon(t,Mlt,$qn(n.a,t))}function LGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;return l=n.c[t],b=n.c[e],!((w=BB(mMn(l,(hWn(),clt)),15))&&0!=w.gc()&&w.Hc(b)||(d=l.k!=(uSn(),Put)&&b.k!=Put,v=(g=BB(mMn(l,rlt),10))!=(p=BB(mMn(b,rlt),10)),m=!!g&&g!=l||!!p&&p!=b,y=omn(l,(kUn(),sCt)),k=omn(b,SCt),m|=omn(l,SCt)||omn(b,sCt),d&&(m&&v||y||k))||l.k==(uSn(),Cut)&&b.k==Iut||b.k==(uSn(),Cut)&&l.k==Iut)&&(h=n.c[t],c=n.c[e],r=fjn(n.e,h,c,(kUn(),ICt)),o=fjn(n.i,h,c,oCt),TNn(n.f,h,c),s=Nsn(n.b,h,c)+BB(r.a,19).a+BB(o.a,19).a+n.f.d,u=Nsn(n.b,c,h)+BB(r.b,19).a+BB(o.b,19).a+n.f.b,n.a&&(f=BB(mMn(h,dlt),11),a=BB(mMn(c,dlt),11),s+=BB((i=qyn(n.g,f,a)).a,19).a,u+=BB(i.b,19).a),s>u)}function NGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(i=BB(mMn(n,(HXn(),ept)),98),u=n.f,a=n.d,o=u.a+a.b+a.c,s=0-a.d-n.c.b,f=u.b+a.d+a.a-n.c.b,h=new Np,l=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),10),i.g){case 1:case 2:case 3:_Nn(r);break;case 4:w=(b=BB(mMn(r,npt),8))?b.a:0,r.n.a=o*Gy(MD(mMn(r,(hWn(),Tlt))))-w,Jan(r,!0,!1);break;case 5:g=(d=BB(mMn(r,npt),8))?d.a:0,r.n.a=Gy(MD(mMn(r,(hWn(),Tlt))))-g,Jan(r,!0,!1),u.a=e.Math.max(u.a,r.n.a+r.o.a/2)}switch(BB(mMn(r,(hWn(),Qft)),61).g){case 1:r.n.b=s,h.c[h.c.length]=r;break;case 3:r.n.b=f,l.c[l.c.length]=r}}switch(i.g){case 1:case 2:Rfn(h,n),Rfn(l,n);break;case 3:Kfn(h,n),Kfn(l,n)}}function xGn(n,t){var e,i,r,c,a,u,o,s,h,f;for(h=new Np,f=new Lp,c=null,r=0,i=0;i<t.length;++i)switch(Rsn(c,e=t[i])&&(r=Idn(n,f,h,Kmt,r)),Lx(e,(hWn(),rlt))&&(c=BB(mMn(e,rlt),10)),e.k.g){case 0:for(o=qA(KB(abn(e,(kUn(),sCt)),new xc));Zin(o);)a=BB(P7(o),11),n.d[a.p]=r++,h.c[h.c.length]=a;for(r=Idn(n,f,h,Kmt,r),s=qA(KB(abn(e,SCt),new xc));Zin(s);)a=BB(P7(s),11),n.d[a.p]=r++,h.c[h.c.length]=a;break;case 3:abn(e,Rmt).dc()||(a=BB(abn(e,Rmt).Xb(0),11),n.d[a.p]=r++,h.c[h.c.length]=a),abn(e,Kmt).dc()||d3(f,e);break;case 1:for(u=abn(e,(kUn(),ICt)).Kc();u.Ob();)a=BB(u.Pb(),11),n.d[a.p]=r++,h.c[h.c.length]=a;abn(e,oCt).Jc(new ZP(f,e))}return Idn(n,f,h,Kmt,r),h}function DGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=RQn,f=RQn,o=KQn,s=KQn,b=new Wb(t.i);b.a<b.c.c.length;)l=BB(n0(b),65),SA(c=BB(BB(RX(n.g,l.a),46).b,33),l.b.c,l.b.d),h=e.Math.min(h,c.i),f=e.Math.min(f,c.j),o=e.Math.max(o,c.i+c.g),s=e.Math.max(s,c.j+c.f);for(w=BB(ZAn(n.c,(MMn(),bTt)),116),KUn(n.c,o-h+(w.b+w.c),s-f+(w.d+w.a),!0,!0),lMn(n.c,-h+w.b,-f+w.d),r=new AL(iQ(n.c));r.e!=r.i.gc();)u=cDn(i=BB(kpn(r),79),!0,!0),d=PMn(i),p=OMn(i),g=new xI(d.i+d.g/2,d.j+d.f/2),a=new xI(p.i+p.g/2,p.j+p.f/2),Ukn(v=XR(new xI(a.a,a.b),g),d.g,d.f),UR(g,v),Ukn(m=XR(new xI(g.a,g.b),a),p.g,p.f),UR(a,m),IA(u,g.a,g.b),PA(u,a.a,a.b)}function RGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;if(n.c=n.d,l=null==(b=TD(mMn(t,(HXn(),dpt))))||(kW(b),b),c=BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft)),e=!((r=BB(mMn(t,ept),98))==(QEn(),UIt)||r==WIt||r==XIt),!l||!e&&c)f=new Jy(Pun(Gk(jut,1),JZn,37,0,[t]));else{for(h=new Wb(t.a);h.a<h.c.c.length;)BB(n0(h),10).p=0;for(f=new Np,s=new Wb(t.a);s.a<s.c.c.length;)if(i=L_n(n,BB(n0(s),10),null)){for(qan(o=new min,t),hon(o,Xft,BB(i.b,21)),kQ(o.d,t.d),hon(o,Hgt,null),u=BB(i.a,15).Kc();u.Ob();)a=BB(u.Pb(),10),WB(o.a,a),a.a=o;f.Fc(o)}c&&(GC(mMn(t,Idt))===GC((Bfn(),lut))?n.c=n.b:n.c=n.a)}return GC(mMn(t,Idt))!==GC((Bfn(),wut))&&(SQ(),f.ad(new xt)),f}function KGn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,Q3n),"ELK Mr. Tree"),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new Na),Y3n),nbn((hAn(),JOt))))),u2(n,Q3n,QJn,Okt),u2(n,Q3n,vZn,20),u2(n,Q3n,VJn,dZn),u2(n,Q3n,pZn,iln(1)),u2(n,Q3n,kZn,(hN(),!0)),u2(n,Q3n,X2n,mpn(Ekt)),u2(n,Q3n,PZn,mpn(Mkt)),u2(n,Q3n,BZn,mpn(Skt)),u2(n,Q3n,SZn,mpn(Pkt)),u2(n,Q3n,IZn,mpn(Tkt)),u2(n,Q3n,MZn,mpn(Ikt)),u2(n,Q3n,CZn,mpn(Akt)),u2(n,Q3n,X3n,mpn(Dkt)),u2(n,Q3n,W3n,mpn(Lkt))}function _Gn(n){n.q||(n.q=!0,n.p=kan(n,0),n.a=kan(n,1),Krn(n.a,0),n.f=kan(n,2),Krn(n.f,1),Rrn(n.f,2),n.n=kan(n,3),Rrn(n.n,3),Rrn(n.n,4),Rrn(n.n,5),Rrn(n.n,6),n.g=kan(n,4),Krn(n.g,7),Rrn(n.g,8),n.c=kan(n,5),Krn(n.c,7),Krn(n.c,8),n.i=kan(n,6),Krn(n.i,9),Krn(n.i,10),Krn(n.i,11),Krn(n.i,12),Rrn(n.i,13),n.j=kan(n,7),Krn(n.j,9),n.d=kan(n,8),Krn(n.d,3),Krn(n.d,4),Krn(n.d,5),Krn(n.d,6),Rrn(n.d,7),Rrn(n.d,8),Rrn(n.d,9),Rrn(n.d,10),n.b=kan(n,9),Rrn(n.b,0),Rrn(n.b,1),n.e=kan(n,10),Rrn(n.e,1),Rrn(n.e,2),Rrn(n.e,3),Rrn(n.e,4),Krn(n.e,5),Krn(n.e,6),Krn(n.e,7),Krn(n.e,8),Krn(n.e,9),Krn(n.e,10),Rrn(n.e,11),n.k=kan(n,11),Rrn(n.k,0),Rrn(n.k,1),n.o=jan(n,12),n.s=jan(n,13))}function FGn(n,t){t.dc()&&eH(n.j,!0,!0,!0,!0),Nfn(t,(kUn(),dCt))&&eH(n.j,!0,!0,!0,!1),Nfn(t,hCt)&&eH(n.j,!1,!0,!0,!0),Nfn(t,ECt)&&eH(n.j,!0,!0,!1,!0),Nfn(t,MCt)&&eH(n.j,!0,!1,!0,!0),Nfn(t,gCt)&&eH(n.j,!1,!0,!0,!1),Nfn(t,fCt)&&eH(n.j,!1,!0,!1,!0),Nfn(t,TCt)&&eH(n.j,!0,!1,!1,!0),Nfn(t,jCt)&&eH(n.j,!0,!1,!0,!1),Nfn(t,yCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,bCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,yCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,lCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,kCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,mCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,vCt)&&eH(n.j,!0,!0,!0,!0)}function BGn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(c=new Np,s=new Wb(i);s.a<s.c.c.length;)if(a=null,(u=BB(n0(s),441)).f==(ain(),qvt))for(w=new Wb(u.e);w.a<w.c.c.length;)vW(g=(b=BB(n0(w),17)).d.i)==t?Stn(n,t,u,b,u.b,b.d):!e||wan(g,e)?GMn(n,t,u,i,b):((l=LHn(n,t,e,b,u.b,qvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l));else for(f=new Wb(u.e);f.a<f.c.c.length;)if(vW(d=(h=BB(n0(f),17)).c.i)==t)Stn(n,t,u,h,h.c,u.b);else{if(!e||wan(d,e))continue;(l=LHn(n,t,e,h,u.b,Hvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l)}for(o=new Wb(c);o.a<o.c.c.length;)u=BB(n0(o),441),-1!=E7(t.a,u.a,0)||WB(t.a,u.a),u.c&&(r.c[r.c.length]=u)}function HGn(n,t,e){var i,r,c,a,u,o,s,h;for(o=new Np,u=new Wb(t.a);u.a<u.c.c.length;)for(h=abn(BB(n0(u),10),(kUn(),oCt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).g);r.a<r.c.c.length;)!b5(i=BB(n0(r),17))&&i.c.i.c==i.d.i.c||b5(i)||i.d.i.c!=e||(o.c[o.c.length]=i);for(a=ean(e.a).Kc();a.Ob();)for(h=abn(BB(a.Pb(),10),(kUn(),ICt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).e);r.a<r.c.c.length;)if((b5(i=BB(n0(r),17))||i.c.i.c!=i.d.i.c)&&!b5(i)&&i.c.i.c==t){for(Px((s=new M2(o,o.c.length)).b>0),c=BB(s.a.Xb(s.c=--s.b),17);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,Px(s.b>0),c=BB(s.a.Xb(s.c=--s.b),17);s.b>0&&fW(s)}}function qGn(n,t,e){var i,r,c,a,u,o,s,h,f;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(i=Ifn((CPn(),Z$t),t).$k())return i.Aj().Nh().Ih(i,e);if(a=Ifn(Z$t,t).al()){if(null==e)return null;if((u=BB(e,15)).dc())return"";for(f=new Sk,c=u.Kc();c.Ob();)r=c.Pb(),cO(f,a.Aj().Nh().Ih(a,r)),f.a+=" ";return KO(f,f.a.length-1)}if(!(h=Ifn(Z$t,t).bl()).dc()){for(s=h.Kc();s.Ob();)if((o=BB(s.Pb(),148)).wj(e))try{if(null!=(f=o.Aj().Nh().Ih(o,e)))return f}catch(l){if(!cL(l=lun(l),102))throw Hp(l)}throw Hp(new _y("Invalid value: '"+e+"' for datatype :"+t.ne()))}return BB(t,834).Fj(),null==e?null:cL(e,172)?""+BB(e,172).a:tsn(e)==mtt?H$(COt[0],BB(e,199)):Bbn(e)}function GGn(n){var t,i,r,c,a,u,o,s,h;for(s=new YT,u=new YT,c=new Wb(n);c.a<c.c.c.length;)(i=BB(n0(c),128)).v=0,i.n=i.i.c.length,i.u=i.t.c.length,0==i.n&&r5(s,i,s.c.b,s.c),0==i.u&&0==i.r.a.gc()&&r5(u,i,u.c.b,u.c);for(a=-1;0!=s.b;)for(t=new Wb((i=BB(tkn(s,0),128)).t);t.a<t.c.c.length;)(h=BB(n0(t),268).b).v=e.Math.max(h.v,i.v+1),a=e.Math.max(a,h.v),--h.n,0==h.n&&r5(s,h,s.c.b,s.c);if(a>-1){for(r=spn(u,0);r.b!=r.d.c;)(i=BB(b3(r),128)).v=a;for(;0!=u.b;)for(t=new Wb((i=BB(tkn(u,0),128)).i);t.a<t.c.c.length;)0==(o=BB(n0(t),268).a).r.a.gc()&&(o.v=e.Math.min(o.v,i.v-1),--o.u,0==o.u&&r5(u,o,u.c.b,u.c))}}function zGn(n,t,i,r,c){var a,u,o,s;return s=RQn,u=!1,a=!!(o=zBn(n,XR(new xI(t.a,t.b),n),UR(new xI(i.a,i.b),c),XR(new xI(r.a,r.b),i)))&&!(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n||e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n),(o=zBn(n,XR(new xI(t.a,t.b),n),i,c))&&((e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a?s=e.Math.min(s,lW(XR(o,i))):u=!0),(o=zBn(n,XR(new xI(t.a,t.b),n),r,c))&&(u||(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a)&&(s=e.Math.min(s,lW(XR(o,r)))),s}function UGn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,_Zn),FZn),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new gt),gZn))),u2(n,_Zn,jZn,mpn(kat)),u2(n,_Zn,TZn,(hN(),!0)),u2(n,_Zn,PZn,mpn(Tat)),u2(n,_Zn,BZn,mpn(Mat)),u2(n,_Zn,SZn,mpn(Sat)),u2(n,_Zn,IZn,mpn(Eat)),u2(n,_Zn,MZn,mpn(Pat)),u2(n,_Zn,CZn,mpn(Iat)),u2(n,_Zn,NZn,mpn(yat)),u2(n,_Zn,DZn,mpn(vat)),u2(n,_Zn,RZn,mpn(mat)),u2(n,_Zn,KZn,mpn(jat)),u2(n,_Zn,xZn,mpn(pat))}function XGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Interactive crossing minimization",1),a=0,c=new Wb(n.b);c.a<c.c.c.length;)(i=BB(n0(c),29)).p=a++;for(d=new Rj((l=qEn(n)).length),IHn(new Jy(Pun(Gk(jst,1),HWn,225,0,[d])),l),w=0,a=0,r=new Wb(n.b);r.a<r.c.c.length;){for(e=0,f=0,h=new Wb((i=BB(n0(r),29)).a);h.a<h.c.c.length;)for((o=BB(n0(h),10)).n.a>0&&(e+=o.n.a+o.o.a/2,++f),b=new Wb(o.j);b.a<b.c.c.length;)BB(n0(b),11).p=w++;for(f>0&&(e/=f),g=x8(xNt,qQn,25,i.a.c.length,15,1),u=0,s=new Wb(i.a);s.a<s.c.c.length;)(o=BB(n0(s),10)).p=u++,g[o.p]=MGn(o,e),o.k==(uSn(),Put)&&hon(o,(hWn(),plt),g[o.p]);SQ(),m$(i.a,new Gd(g)),r_n(d,l,a,!0),++a}HSn(t)}function WGn(n,t){var e,i,r,c,a,u,o,s,h;if(5!=t.e){if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)e[h++]=n.b[i++],e[h++]=n.b[i++];else if(c>=u&&r<=o)u<=r&&c<=o?i+=2:u<=r?(n.b[i]=o+1,a+=2):c<=o?(e[h++]=r,e[h++]=u-1,i+=2):(e[h++]=r,e[h++]=u-1,n.b[i]=o+1,a+=2);else{if(!(o<r))throw Hp(new dy("Token#subtractRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] - ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}else kGn(n,t)}function VGn(n){var t,e,i,r,c,a,u;if(!n.A.dc()){if(n.A.Hc((mdn(),KCt))&&(BB(oV(n.b,(kUn(),sCt)),124).k=!0,BB(oV(n.b,SCt),124).k=!0,t=n.q!=(QEn(),WIt)&&n.q!=XIt,Nl(BB(oV(n.b,oCt),124),t),Nl(BB(oV(n.b,ICt),124),t),Nl(n.g,t),n.A.Hc(_Ct)&&(BB(oV(n.b,sCt),124).j=!0,BB(oV(n.b,SCt),124).j=!0,BB(oV(n.b,oCt),124).k=!0,BB(oV(n.b,ICt),124).k=!0,n.g.k=!0)),n.A.Hc(RCt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,u=n.B.Hc((n_n(),XCt)),c=0,a=(r=tpn()).length;c<a;++c)i=r[c],(e=BB(oV(n.i,i),306))&&(agn(i)?(e.j=!0,e.k=!0):(e.j=!u,e.k=!u));n.A.Hc(DCt)&&n.B.Hc((n_n(),UCt))&&(n.g.j=!0,n.g.j=!0,n.a.j||(n.a.j=!0,n.a.k=!0,n.a.e=!0))}}function QGn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;for(e=new Wb(n.e.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),o=(f=n.i[i.p]).a.e,u=f.d.e,i.n.b=o,d=u-o-i.o.b,t=AHn(i),bvn(),h=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197),t&&(h==fvt||h==hvt)&&(i.o.b+=d),t&&(h==bvt||h==fvt||h==hvt)){for(b=new Wb(i.j);b.a<b.c.c.length;)l=BB(n0(b),11),(kUn(),bCt).Hc(l.j)&&(s=BB(RX(n.k,l),121),l.n.b=s.e-o);for(a=new Wb(i.b);a.a<a.c.c.length;)c=BB(n0(a),70),(w=BB(mMn(i,$gt),21)).Hc((n$n(),NIt))?c.n.b+=d:w.Hc(xIt)&&(c.n.b+=d/2);(h==fvt||h==hvt)&&abn(i,(kUn(),SCt)).Jc(new ag(d))}}function YGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(o=new H8(null,null)).a[1]=n.b,f=o;f.a[r];)s=r,u=l,l=f,f=f.a[r],r=(i=n.a.ue(t,f.d))<0?0:1,0==i&&(!e.c||cV(f.e,e.d))&&(a=f),f&&f.b||Vy(f.a[r])||(Vy(f.a[1-r])?l=l.a[s]=wrn(f,r):Vy(f.a[1-r])||(b=l.a[1-s])&&(Vy(b.a[1-s])||Vy(b.a[s])?(c=u.a[1]==l?1:0,Vy(b.a[s])?u.a[c]=r2(l,s):Vy(b.a[1-s])&&(u.a[c]=wrn(l,s)),f.b=u.a[c].b=!0,u.a[c].a[0].b=!1,u.a[c].a[1].b=!1):(l.b=!1,b.b=!0,f.b=!0)));return a&&(e.b=!0,e.d=a.e,f!=a&&(bMn(n,o,a,h=new H8(f.d,f.e)),l==a&&(l=h)),l.a[l.a[1]==f?1:0]=f.a[f.a[0]?0:1],--n.c),n.b=o.a[1],n.b&&(n.b.b=!1),e.b}function JGn(n){var t,i,r,c,a,u,o,s,h,f,l,b;for(c=new Wb(n.a.a.b);c.a<c.c.c.length;)for(s=(r=BB(n0(c),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),r.a!=o.a&&(l=dA(n.a.d)?n.a.g.Oe(r,o):n.a.g.Pe(r,o),a=r.b.a+r.d.b+l-o.b.a,a=e.Math.ceil(a),a=e.Math.max(0,a),Z7(r,o)?(u=AN(new qv,n.d),t=(h=IJ(e.Math.ceil(o.b.a-r.b.a)))-(o.b.a-r.b.a),i=r,(f=f3(r).a)||(f=f3(o).a,t=-t,i=o),f&&(i.b.a-=t,f.n.a-=t),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,h)),1),u),n.c[r.a.d])),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,-h)),1),u),n.c[o.a.d]))):(b=1,(cL(r.g,145)&&cL(o.g,10)||cL(o.g,145)&&cL(r.g,10))&&(b=2),UNn(aM(cM(uM(rM(new Hv,IJ(a)),b),n.c[r.a.d]),n.c[o.a.d]))))}function ZGn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(i)for(r=-1,f=new M2(t,0);f.b<f.d.gc();){if(Px(f.b<f.d.gc()),o=BB(f.d.Xb(f.c=f.b++),10),null==(l=n.c[o.c.p][o.p].a)){for(u=r+1,a=new M2(t,f.b);a.b<a.d.gc();)if(null!=(b=wL(n,(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),10))).a)){kW(b),u=b;break}l=(r+u)/2,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=(kW(l),l),n.c[o.c.p][o.p].b=1}kW(l),r=l}else{for(c=0,h=new Wb(t);h.a<h.c.c.length;)o=BB(n0(h),10),null!=n.c[o.c.p][o.p].a&&(c=e.Math.max(c,Gy(n.c[o.c.p][o.p].a)));for(c+=2,s=new Wb(t);s.a<s.c.c.length;)o=BB(n0(s),10),null==n.c[o.c.p][o.p].a&&(l=H$n(n.i,24)*uYn*c-1,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=l,n.c[o.c.p][o.p].b=1)}}function nzn(){RO(BAt,new ts),RO(KAt,new ls),RO(qAt,new Es),RO(HAt,new Cs),RO(GAt,new Os),RO(XAt,new As),RO(WAt,new $s),RO(HOt,new Ls),RO(BOt,new zo),RO(qOt,new Uo),RO(LOt,new Xo),RO(QAt,new Wo),RO(GOt,new Vo),RO(YAt,new Qo),RO(JAt,new Yo),RO(FAt,new Jo),RO(_At,new Zo),RO(X$t,new ns),RO(VAt,new es),RO(O$t,new is),RO(ktt,new rs),RO(Gk(NNt,1),new cs),RO(Ttt,new as),RO(Stt,new us),RO(mtt,new os),RO(_Nt,new ss),RO(Ptt,new hs),RO(uAt,new fs),RO(yAt,new bs),RO(oLt,new ws),RO($$t,new ds),RO(Itt,new gs),RO(Att,new ps),RO($nt,new vs),RO(Rtt,new ms),RO(Nnt,new ys),RO(iLt,new ks),RO(FNt,new js),RO(_tt,new Ts),RO(Qtt,new Ms),RO(sAt,new Ss),RO(BNt,new Ps)}function tzn(n,t,e){var i,r,c,a,u,o,s,h,f;for(!e&&(e=Gun(t.q.getTimezoneOffset())),r=6e4*(t.q.getTimezoneOffset()-e.a),o=u=new PD(rbn(fan(t.q.getTime()),r)),u.q.getTimezoneOffset()!=t.q.getTimezoneOffset()&&(r>0?r-=864e5:r+=864e5,o=new PD(rbn(fan(t.q.getTime()),r))),h=new Ck,s=n.a.length,c=0;c<s;)if((i=fV(n.a,c))>=97&&i<=122||i>=65&&i<=90){for(a=c+1;a<s&&fV(n.a,a)==i;++a);aWn(h,i,a-c,u,o,e),c=a}else if(39==i){if(++c<s&&39==fV(n.a,c)){h.a+="'",++c;continue}for(f=!1;!f;){for(a=c;a<s&&39!=fV(n.a,a);)++a;if(a>=s)throw Hp(new _y("Missing trailing '"));a+1<s&&39==fV(n.a,a+1)?++a:f=!0,oO(h,fx(n.a,c,a)),c=a+1}}else h.a+=String.fromCharCode(i),++c;return h.a}function ezn(n){var t,e,i,r,c,a,u,o;for(t=null,i=new Wb(n);i.a<i.c.c.length;)Gy(lL((e=BB(n0(i),233)).g,e.d[0]).a),e.b=null,e.e&&e.e.gc()>0&&0==e.c&&(!t&&(t=new Np),t.c[t.c.length]=e);if(t)for(;0!=t.c.length;){if((e=BB(s6(t,0),233)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Np),c=new Wb(e.b);c.a<c.c.c.length;)if(zy(lL((r=BB(n0(c),233)).g,r.d[0]).a)==zy(lL(e.g,e.d[0]).a)){if(E7(n,r,0)>E7(n,e,0))return new rC(r,e)}else if(Gy(lL(r.g,r.d[0]).a)>Gy(lL(e.g,e.d[0]).a))return new rC(r,e);for(u=(!e.e&&(e.e=new Np),e.e).Kc();u.Ob();)!(a=BB(u.Pb(),233)).b&&(a.b=new Np),LZ(0,(o=a.b).c.length),MS(o.c,0,e),a.c==o.c.length&&(t.c[t.c.length]=a)}return null}function izn(n,t){var e,i,r,c,a,u;if(null==n)return zWn;if(null!=t.a.zc(n,t))return"[...]";for(e=new $an(FWn,"[","]"),c=0,a=(r=n).length;c<a;++c)null!=(i=r[c])&&0!=(4&tsn(i).i)?!Array.isArray(i)||(u=vnn(i))>=14&&u<=16?cL(i,177)?b6(e,RIn(BB(i,177))):cL(i,190)?b6(e,JEn(BB(i,190))):cL(i,195)?b6(e,kSn(BB(i,195))):cL(i,2012)?b6(e,ZEn(BB(i,2012))):cL(i,48)?b6(e,DIn(BB(i,48))):cL(i,364)?b6(e,gCn(BB(i,364))):cL(i,832)?b6(e,xIn(BB(i,832))):cL(i,104)&&b6(e,NIn(BB(i,104))):t.a._b(i)?(e.a?oO(e.a,e.b):e.a=new lN(e.d),aO(e.a,"[...]")):b6(e,izn(een(i),new $q(t))):b6(e,null==i?zWn:Bbn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function rzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(w=qSn(cDn(t,!1,!1)),r&&(w=Jon(w)),g=Gy(MD(ZAn(t,(Epn(),pct)))),Px(0!=w.b),b=BB(w.a.a.c,8),h=BB(Dpn(w,1),8),w.b>2?(gun(s=new Np,new s1(w,1,w.b)),qan(d=new EAn(XXn(s,g+n.a)),t),i.c[i.c.length]=d):d=BB(RX(n.b,r?PMn(t):OMn(t)),266),u=PMn(t),r&&(u=OMn(t)),a=iPn(b,u),o=g+n.a,a.a?(o+=e.Math.abs(b.b-h.b),l=new xI(h.a,(h.b+b.b)/2)):(o+=e.Math.abs(b.a-h.a),l=new xI((h.a+b.a)/2,h.b)),VW(r?n.d:n.c,t,new Cmn(d,a,l,o)),VW(n.b,t,d),!t.n&&(t.n=new eU(zOt,t,1,7)),f=new AL(t.n);f.e!=f.i.gc();)c=JRn(n,BB(kpn(f),137),!0,0,0),i.c[i.c.length]=c}function czn(n){var t,i,r,c,a,u,o,s,h;for(s=new Np,u=new Np,a=new Wb(n);a.a<a.c.c.length;)Vl(r=BB(n0(a),112),r.f.c.length),Ql(r,r.k.c.length),0==r.d&&(s.c[s.c.length]=r),0==r.i&&0==r.e.b&&(u.c[u.c.length]=r);for(i=-1;0!=s.c.length;)for(t=new Wb((r=BB(s6(s,0),112)).k);t.a<t.c.c.length;)Yl(h=BB(n0(t),129).b,e.Math.max(h.o,r.o+1)),i=e.Math.max(i,h.o),Vl(h,h.d-1),0==h.d&&(s.c[s.c.length]=h);if(i>-1){for(c=new Wb(u);c.a<c.c.c.length;)(r=BB(n0(c),112)).o=i;for(;0!=u.c.length;)for(t=new Wb((r=BB(s6(u,0),112)).f);t.a<t.c.c.length;)(o=BB(n0(t),129).a).e.b>0||(Yl(o,e.Math.min(o.o,r.o-1)),Ql(o,o.i-1),0==o.i&&(u.c[u.c.length]=o))}}function azn(n,t,e){var i,r,c,a,u;if(u=n.c,!t&&(t=L$t),n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&(a=new nU(n,1,2,u,n.c),e?e.Ei(a):e=a),u!=t)if(cL(n.Cb,284))n.Db>>16==-10?e=BB(n.Cb,284).nk(t,e):n.Db>>16==-15&&(!t&&(gWn(),t=l$t),!u&&(gWn(),u=l$t),n.Cb.nh()&&(a=new N7(n.Cb,1,13,u,t,uvn(H7(BB(n.Cb,59)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,88))n.Db>>16==-23&&(cL(t,88)||(gWn(),t=d$t),cL(u,88)||(gWn(),u=d$t),n.Cb.nh()&&(a=new N7(n.Cb,1,10,u,t,uvn(a4(BB(n.Cb,26)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,444))for(!(c=BB(n.Cb,836)).b&&(c.b=new Tp(new xm)),r=new Mp(new usn(new Pb(c.b.a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,c),e);return e}function uzn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(a=qy(TD(ZAn(n,(HXn(),wgt)))),l=BB(ZAn(n,cpt),21),o=!1,s=!1,f=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));!(f.e==f.i.gc()||o&&s);){for(c=BB(kpn(f),118),u=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!c.d&&(c.d=new hK(_Ot,c,8,5)),c.d),(!c.e&&(c.e=new hK(_Ot,c,7,4)),c.e)])));dAn(r)&&(i=BB(U5(r),79),h=a&&QCn(i)&&qy(TD(ZAn(i,dgt))),e=bqn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),c)?n==JJ(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))):n==JJ(PTn(BB(Wtn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),0),82))),!((h||e)&&++u>1)););(u>0||l.Hc((lCn(),eCt))&&(!c.n&&(c.n=new eU(zOt,c,1,7)),c.n).i>0)&&(o=!0),u>1&&(s=!0)}o&&t.Fc((bDn(),lft)),s&&t.Fc((bDn(),bft))}function ozn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if((b=BB(ZAn(n,(sWn(),KSt)),21)).dc())return null;if(o=0,u=0,b.Hc((mdn(),KCt))){for(f=BB(ZAn(n,uPt),98),r=2,i=2,c=2,a=2,t=JJ(n)?BB(ZAn(JJ(n),bSt),103):BB(ZAn(n,bSt),103),h=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=BB(kpn(h),118),(l=BB(ZAn(s,wPt),61))==(kUn(),PCt)&&(l=OFn(s,t),Ypn(s,wPt,l)),f==(QEn(),XIt))switch(l.g){case 1:r=e.Math.max(r,s.i+s.g);break;case 2:i=e.Math.max(i,s.j+s.f);break;case 3:c=e.Math.max(c,s.i+s.g);break;case 4:a=e.Math.max(a,s.j+s.f)}else switch(l.g){case 1:r+=s.g+2;break;case 2:i+=s.f+2;break;case 3:c+=s.g+2;break;case 4:a+=s.f+2}o=e.Math.max(r,c),u=e.Math.max(i,a)}return KUn(n,o,u,!0,!0)}function szn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(m=BB(P4(ytn(AV(new Rq(null,new w1(t.d,16)),new $d(i)),new Ld(i)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),l=DWn,f=_Vn,s=new Wb(t.b.j);s.a<s.c.c.length;)(o=BB(n0(s),11)).j==i&&(l=e.Math.min(l,o.p),f=e.Math.max(f,o.p));if(l==DWn)for(u=0;u<m.gc();u++)g9(BB(m.Xb(u),101),i,u);else for(Zq(y=x8(ANt,hQn,25,c.length,15,1),y.length),v=m.Kc();v.Ob();){for(p=BB(v.Pb(),101),a=BB(RX(n.b,p),177),h=0,g=l;g<=f;g++)a[g]&&(h=e.Math.max(h,r[g]));if(p.i){for(w=p.i.c,k=new Rv,b=0;b<c.length;b++)c[w][b]&&TU(k,iln(y[b]));for(;FT(k,iln(h));)++h}for(g9(p,i,h),d=l;d<=f;d++)a[d]&&(r[d]=h+1);p.i&&(y[p.i.c]=h)}}function hzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(c=null,r=new Wb(t.a);r.a<r.c.c.length;)AHn(i=BB(n0(r),10))?(h=new GV(i,!0,o=AN(oM(new qv,i),n.f),s=AN(oM(new qv,i),n.f)),f=i.o.b,bvn(),b=1e4,(l=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197))==hvt&&(b=1),w=UNn(aM(cM(rM(uM(new Hv,b),IJ(e.Math.ceil(f))),o),s)),l==fvt&&TU(n.d,w),O_n(n,ean(abn(i,(kUn(),ICt))),h),O_n(n,abn(i,oCt),h),a=h):(d=AN(oM(new qv,i),n.f),JT(AV(new Rq(null,new w1(i.j,16)),new Bc),new tI(n,d)),a=new GV(i,!1,d,d)),n.i[i.p]=a,c&&(u=c.c.d.a+K$(n.n,c.c,i)+i.d.d,c.b||(u+=c.c.o.b),UNn(aM(cM(uM(rM(new Hv,IJ(e.Math.ceil(u))),0),c.d),a.a))),c=a}function fzn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g;for(OTn(t,"Label dummy insertions",1),b=new Np,u=Gy(MD(mMn(n,(HXn(),jpt)))),f=Gy(MD(mMn(n,Spt))),l=BB(mMn(n,Udt),103),w=new Wb(n.a);w.a<w.c.c.length;)for(a=new oz(ZL(lbn(BB(n0(w),10)).a.Kc(),new h));dAn(a);)if((c=BB(U5(a),17)).c.i!=c.d.i&&tL(c.b,nst)){for(i=oLn(n,c,g=Etn(c),d=sx(c.b.c.length)),b.c[b.c.length]=i,r=i.o,o=new M2(c.b,0);o.b<o.d.gc();)Px(o.b<o.d.gc()),GC(mMn(s=BB(o.d.Xb(o.c=o.b++),70),Ydt))===GC((Rtn(),zPt))&&(l==(Ffn(),HPt)||l==KPt?(r.a+=s.o.a+f,r.b=e.Math.max(r.b,s.o.b)):(r.a=e.Math.max(r.a,s.o.a),r.b+=s.o.b+f),d.c[d.c.length]=s,fW(o));l==(Ffn(),HPt)||l==KPt?(r.a-=f,r.b+=u+g):r.b+=u-f+g}gun(n.a,b),HSn(t)}function lzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(l=XDn(n,t,a=new dOn(t)),w=e.Math.max(Gy(MD(mMn(t,(HXn(),agt)))),1),f=new Wb(l.a);f.a<f.c.c.length;)h=BB(n0(f),46),s=Bgn(BB(h.a,8),BB(h.b,8),w),zH(i,new xI(s.c,s.d)),zH(i,_x(new xI(s.c,s.d),s.b,0)),zH(i,_x(new xI(s.c,s.d),0,s.a)),zH(i,_x(new xI(s.c,s.d),s.b,s.a));switch(b=a.d,o=Bgn(BB(l.b.a,8),BB(l.b.b,8),w),b==(kUn(),ICt)||b==oCt?(r.c[b.g]=e.Math.min(r.c[b.g],o.d),r.b[b.g]=e.Math.max(r.b[b.g],o.d+o.a)):(r.c[b.g]=e.Math.min(r.c[b.g],o.c),r.b[b.g]=e.Math.max(r.b[b.g],o.c+o.b)),c=KQn,u=a.c.i.d,b.g){case 4:c=u.c;break;case 2:c=u.b;break;case 1:c=u.a;break;case 3:c=u.d}return r.a[b.g]=e.Math.max(r.a[b.g],c),a}function bzn(n){var t,e,i,r;if(-1!=(t=GO(e=null!=n.D?n.D:n.B,YTn(91)))){i=e.substr(0,t),r=new Sk;do{r.a+="["}while(-1!=(t=lx(e,91,++t)));mK(i,$Wn)?r.a+="Z":mK(i,S9n)?r.a+="B":mK(i,P9n)?r.a+="C":mK(i,I9n)?r.a+="D":mK(i,C9n)?r.a+="F":mK(i,O9n)?r.a+="I":mK(i,A9n)?r.a+="J":mK(i,$9n)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}}else if(-1==GO(e,YTn(46))){if(mK(e,$Wn))return $Nt;if(mK(e,S9n))return NNt;if(mK(e,P9n))return ONt;if(mK(e,I9n))return xNt;if(mK(e,C9n))return DNt;if(mK(e,O9n))return ANt;if(mK(e,A9n))return LNt;if(mK(e,$9n))return RNt}return null}function wzn(n,t,e){var i,r,c,a,u,o,s,h;for(qan(s=new $vn(e),t),hon(s,(hWn(),dlt),t),s.o.a=t.g,s.o.b=t.f,s.n.a=t.i,s.n.b=t.j,WB(e.a,s),VW(n.a,t,s),(0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i||qy(TD(ZAn(t,(HXn(),wgt)))))&&hon(s,_ft,(hN(),!0)),o=BB(mMn(e,Zft),21),(h=BB(mMn(s,(HXn(),ept)),98))==(QEn(),YIt)?hon(s,ept,QIt):h!=QIt&&o.Fc((bDn(),dft)),i=BB(mMn(e,Udt),103),u=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));u.e!=u.i.gc();)qy(TD(ZAn(a=BB(kpn(u),118),Ggt)))||Zzn(n,a,s,o,i,h);for(c=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));c.e!=c.i.gc();)!qy(TD(ZAn(r=BB(kpn(c),137),Ggt)))&&r.a&&WB(s.b,Hhn(r));return qy(TD(mMn(s,Tdt)))&&o.Fc((bDn(),hft)),qy(TD(mMn(s,bgt)))&&(o.Fc((bDn(),wft)),o.Fc(bft),hon(s,ept,QIt)),s}function dzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;u=BB(RX(t.c,n),459),g=t.a.c,o=t.a.c+t.a.b,a=(E=u.f)<(T=u.a),b=new xI(g,E),p=new xI(o,T),w=new xI(r=(g+o)/2,E),v=new xI(r,T),c=eNn(n,E,T),y=g1(t.B),k=new xI(r,c),j=g1(t.D),e=lon(Pun(Gk(PMt,1),sVn,8,0,[y,k,j])),f=!1,(d=t.B.i)&&d.c&&u.d&&((s=a&&d.p<d.c.a.c.length-1||!a&&d.p>0)?s&&(h=d.p,a?++h:--h,f=!(cNn(i=ion(BB(xq(d.c.a,h),10)),y,e[0])||Bz(i,y,e[0]))):f=!0),l=!1,(m=t.D.i)&&m.c&&u.e&&(a&&m.p>0||!a&&m.p<m.c.a.c.length-1?(h=m.p,a?--h:++h,l=!(cNn(i=ion(BB(xq(m.c.a,h),10)),e[0],j)||Bz(i,e[0],j))):l=!0),f&&l&&DH(n.a,k),f||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[b,w])),l||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[v,p]))}function gzn(n,t){var e,i,r,c,a,u,o;if(cL(n.Ug(),160)?(gzn(BB(n.Ug(),160),t),t.a+=" > "):t.a+="Root ",mK((e=n.Tg().zb).substr(0,3),"Elk")?oO(t,e.substr(3)):t.a+=""+e,r=n.zg())oO((t.a+=" ",t),r);else if(cL(n,354)&&(o=BB(n,137).a))oO((t.a+=" ",t),o);else{for(c=new AL(n.Ag());c.e!=c.i.gc();)if(o=BB(kpn(c),137).a)return void oO((t.a+=" ",t),o);if(cL(n,352)&&(!(i=BB(n,79)).b&&(i.b=new hK(KOt,i,4,7)),0!=i.b.i&&(!i.c&&(i.c=new hK(KOt,i,5,8)),0!=i.c.i))){for(t.a+=" (",a=new cx((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b));a.e!=a.i.gc();)a.e>0&&(t.a+=FWn),gzn(BB(kpn(a),160),t);for(t.a+=e1n,u=new cx((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c));u.e!=u.i.gc();)u.e>0&&(t.a+=FWn),gzn(BB(kpn(u),160),t);t.a+=")"}}}function pzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(c=BB(mMn(n,(hWn(),dlt)),79)){for(i=n.a,UR(r=new wA(e),$jn(n)),wan(n.d.i,n.c.i)?(l=n.c,XR(f=Aon(Pun(Gk(PMt,1),sVn,8,0,[l.n,l.a])),e)):f=g1(n.c),r5(i,f,i.a,i.a.a),b=g1(n.d),null!=mMn(n,Rlt)&&UR(b,BB(mMn(n,Rlt),8)),r5(i,b,i.c.b,i.c),Ztn(i,r),Lin(a=cDn(c,!0,!0),BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82)),Nin(a,BB(Wtn((!c.c&&(c.c=new hK(KOt,c,5,8)),c.c),0),82)),VFn(i,a),h=new Wb(n.b);h.a<h.c.c.length;)s=BB(n0(h),70),Sen(u=BB(mMn(s,dlt),137),s.o.a),Men(u,s.o.b),SA(u,s.n.a+r.a,s.n.b+r.b),Ypn(u,(Crn(),tst),TD(mMn(s,tst)));(o=BB(mMn(n,(HXn(),vgt)),74))?(Ztn(o,r),Ypn(c,vgt,o)):Ypn(c,vgt,null),t==(Mbn(),JPt)?Ypn(c,Zdt,JPt):Ypn(c,Zdt,null)}}function vzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(b=t.c.length,l=0,f=new Wb(n.b);f.a<f.c.c.length;)if(0!=(p=(h=BB(n0(f),29)).a).c.length){for(s=0,v=null,r=BB(n0(g=new Wb(p)),10),c=null;r;){if((c=BB(xq(t,r.p),257)).c>=0){for(o=null,u=new M2(h.a,s+1);u.b<u.d.gc()&&(Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),10),!((o=BB(xq(t,a.p),257)).d==c.d&&o.c<c.c));)o=null;o&&(v&&(c5(i,r.p,iln(BB(xq(i,r.p),19).a-1)),BB(xq(e,v.p),15).Mc(c)),c=wTn(c,r,b++),t.c[t.c.length]=c,WB(e,new Np),v?(BB(xq(e,v.p),15).Fc(c),WB(i,iln(1))):WB(i,iln(0)))}w=null,g.a<g.c.c.length&&(w=BB(n0(g),10),d=BB(xq(t,w.p),257),BB(xq(e,r.p),15).Fc(d),c5(i,w.p,iln(BB(xq(i,w.p),19).a+1))),c.d=l,c.c=s++,v=r,r=w}++l}}function mzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return o=n,h=XR(new xI(t.a,t.b),n),s=i,f=XR(new xI(r.a,r.b),i),l=o.a,g=o.b,w=s.a,v=s.b,b=h.a,p=h.b,c=(d=f.a)*p-b*(m=f.b),h$(),rin(A3n),!(e.Math.abs(0-c)<=A3n||0==c||isNaN(0)&&isNaN(c))&&(a=1/c*((l-w)*p-(g-v)*b),u=1/c*-(-(l-w)*m+(g-v)*d),rin(A3n),(e.Math.abs(0-a)<=A3n||0==a||isNaN(0)&&isNaN(a)?0:0<a?-1:0>a?1:zO(isNaN(0),isNaN(a)))<0&&(rin(A3n),(e.Math.abs(a-1)<=A3n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:zO(isNaN(a),isNaN(1)))<0)&&(rin(A3n),(e.Math.abs(0-u)<=A3n||0==u||isNaN(0)&&isNaN(u)?0:0<u?-1:0>u?1:zO(isNaN(0),isNaN(u)))<0)&&(rin(A3n),(e.Math.abs(u-1)<=A3n||1==u||isNaN(u)&&isNaN(1)?0:u<1?-1:u>1?1:zO(isNaN(u),isNaN(1)))<0))}function yzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(f=new hW(new iw(n));f.b!=f.c.a.d;)for(u=BB((h=s9(f)).d,56),t=BB(h.e,56),d=0,y=(null==(a=u.Tg()).i&&qFn(a),a.i).length;d<y;++d)if(null==a.i&&qFn(a),c=a.i,(s=d>=0&&d<c.length?c[d]:null).Ij()&&!s.Jj())if(cL(s,99))0==((o=BB(s,18)).Bb&h6n)&&(!(j=Ivn(o))||0==(j.Bb&h6n))&&mBn(n,o,u,t);else if(ZM(),BB(s,66).Oj()&&(e=BB((k=s)?BB(t,49).xh(k):null,153)))for(b=BB(u.ah(s),153),i=e.gc(),g=0,w=b.gc();g<w;++g)if(cL(l=b.il(g),99)){if(null==(r=lnn(n,m=b.jl(g)))&&null!=m){if(v=BB(l,18),!n.b||0!=(v.Bb&h6n)||Ivn(v))continue;r=m}if(!e.dl(l,r))for(p=0;p<i;++p)if(e.il(p)==l&&GC(e.jl(p))===GC(r)){e.ii(e.gc()-1,p),--i;break}}else e.dl(b.il(g),b.jl(g))}function kzn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;if(p=QBn(t,i,n.g),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),n.b)for(g=0;g<p.c.length;g++)l1(g,p.c.length),f=BB(p.c[g],200),0!=g&&(l1(g-1,p.c.length),ghn(f,(b=BB(p.c[g-1],200)).f+b.b+n.g)),mXn(g,p,i,n.g),Hkn(n,f),c.n&&a&&y0(c,o2(a),(Bsn(),uOt));else for(d=new Wb(p);d.a<d.c.c.length;)for(h=new Wb((w=BB(n0(d),200)).a);h.a<h.c.c.length;)xcn(v=new KJ((s=BB(n0(h),187)).s,s.t,n.g),s),WB(w.d,v);return zmn(n,p),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),m=e.Math.max(n.d,r.a-(u.b+u.c)),o=(l=e.Math.max(n.c,r.b-(u.d+u.a)))-n.c,n.e&&n.f&&(m/l<n.a?m=l*n.a:o+=m/n.a-l),n.e&&Odn(p,m,o),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),new eq(n.a,m,n.c+o,(YLn(),_Et))}function jzn(n){var t,i,r,c,a,u,o,s,h,f;for(n.j=x8(ANt,hQn,25,n.g,15,1),n.o=new Np,JT(wnn(new Rq(null,new w1(n.e.b,16)),new Wc),new ug(n)),n.a=x8($Nt,ZYn,25,n.b,16,1),$fn(new Rq(null,new w1(n.e.b,16)),new sg(n)),f=new Np,JT(AV(wnn(new Rq(null,new w1(n.e.b,16)),new Qc),new og(n)),new eI(n,f)),o=new Wb(f);o.a<o.c.c.length;)if(!((u=BB(n0(o),508)).c.length<=1))if(2!=u.c.length){if(!XEn(u)&&!NPn(u,new Vc))for(s=new Wb(u),r=null;s.a<s.c.c.length;)t=BB(n0(s),17),i=n.c[t.p],h=!r||s.a>=s.c.c.length?X3((uSn(),Iut),Put):X3((uSn(),Put),Put),h*=2,c=i.a.g,i.a.g=e.Math.max(c,c+(h-c)),a=i.b.g,i.b.g=e.Math.max(a,a+(h-a)),r=t}else zAn(u),AHn((l1(0,u.c.length),BB(u.c[0],17)).d.i)||WB(n.o,u)}function Ezn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(m=GB(n),o=new Np,s=(c=n.c.length)-1,h=c+1;0!=m.a.c;){for(;0!=e.b;)Px(0!=e.b),p=BB(Atn(e,e.a.a),112),$J(m.a,p),p.g=s--,NFn(p,t,e,i);for(;0!=t.b;)Px(0!=t.b),v=BB(Atn(t,t.a.a),112),$J(m.a,v),v.g=h++,NFn(v,t,e,i);for(u=_Vn,d=new Fb(new BR(new xN(new _b(m.a).a).b));aS(d.a.a);){if(w=BB(mx(d.a).cd(),112),!i&&w.b>0&&w.a<=0){o.c=x8(Ant,HWn,1,0,5,1),o.c[o.c.length]=w;break}(b=w.i-w.d)>=u&&(b>u&&(o.c=x8(Ant,HWn,1,0,5,1),u=b),o.c[o.c.length]=w)}0!=o.c.length&&(a=BB(xq(o,pvn(r,o.c.length)),112),$J(m.a,a),a.g=h++,NFn(a,t,e,i),o.c=x8(Ant,HWn,1,0,5,1))}for(g=n.c.length+1,l=new Wb(n);l.a<l.c.c.length;)(f=BB(n0(l),112)).g<c&&(f.g=f.g+g)}function Tzn(n,t){var e;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));if(!SS(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.d)return n;switch(e=n.d,n.d=t,e.g){case 0:switch(t.g){case 2:Hmn(n);break;case 1:Ion(n),Hmn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Ion(n),Hmn(n)}break;case 2:switch(t.g){case 1:Ion(n),RRn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Ion(n),Hmn(n)}break;case 1:switch(t.g){case 2:Ion(n),RRn(n);break;case 4:Ion(n),nEn(n),Hmn(n);break;case 3:Ion(n),nEn(n),Ion(n),Hmn(n)}break;case 4:switch(t.g){case 2:nEn(n),Hmn(n);break;case 1:nEn(n),Ion(n),Hmn(n);break;case 3:Ion(n),RRn(n)}break;case 3:switch(t.g){case 2:Ion(n),nEn(n),Hmn(n);break;case 1:Ion(n),nEn(n),Ion(n),Hmn(n);break;case 4:Ion(n),RRn(n)}}return n}function Mzn(n,t){var e;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));if(!PI(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.c)return n;switch(e=n.c,n.c=t,e.g){case 0:switch(t.g){case 2:Zon(n);break;case 1:Pon(n),Zon(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 2:switch(t.g){case 1:Pon(n),KRn(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 1:switch(t.g){case 2:Pon(n),KRn(n);break;case 4:Pon(n),tEn(n),Zon(n);break;case 3:Pon(n),tEn(n),Pon(n),Zon(n)}break;case 4:switch(t.g){case 2:tEn(n),Zon(n);break;case 1:tEn(n),Pon(n),Zon(n);break;case 3:Pon(n),KRn(n)}break;case 3:switch(t.g){case 2:Pon(n),tEn(n),Zon(n);break;case 1:Pon(n),tEn(n),Pon(n),Zon(n);break;case 4:Pon(n),KRn(n)}}return n}function Szn(n,t,i){var r,c,a,u,o,s,f,l;for(s=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new oz(ZL(dLn(o=BB(kpn(s),33)).a.Kc(),new h));dAn(c);){if(!(r=BB(U5(c),79)).b&&(r.b=new hK(KOt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new hK(KOt,r,5,8)),r.c.i<=1)))throw Hp(new ck("Graph must not contain hyperedges."));if(!nAn(r)&&o!=PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82)))for(qan(f=new CR,r),hon(f,(Mrn(),sat),r),Rl(f,BB(qC(AY(i.f,o)),144)),Kl(f,BB(RX(i,PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82))),144)),WB(t.c,f),u=new AL((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n));u.e!=u.i.gc();)qan(l=new m4(f,(a=BB(kpn(u),137)).a),a),hon(l,sat,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),_Bn(l),WB(t.d,l)}}function Pzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(EJ(l=new eUn(n),!(t==(Ffn(),HPt)||t==KPt)),f=l.a,b=new bm,Dtn(),u=0,s=(c=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;u<s;++u)i=c[u],(h=fL(f,Git,i))&&(b.d=e.Math.max(b.d,h.Re()));for(a=0,o=(r=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;a<o;++a)i=r[a],(h=fL(f,Uit,i))&&(b.a=e.Math.max(b.a,h.Re()));for(p=0,m=(d=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;p<m;++p)(h=fL(f,d[p],Git))&&(b.b=e.Math.max(b.b,h.Se()));for(g=0,v=(w=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;g<v;++g)(h=fL(f,w[g],Uit))&&(b.c=e.Math.max(b.c,h.Se()));return b.d>0&&(b.d+=f.n.d,b.d+=f.d),b.a>0&&(b.a+=f.n.a,b.a+=f.d),b.b>0&&(b.b+=f.n.b,b.b+=f.d),b.c>0&&(b.c+=f.n.c,b.c+=f.d),b}function Izn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(b=i.d,l=i.c,u=(a=new xI(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Wb(n.a);h.a<h.c.c.length;)if((o=BB(n0(h),10)).k==(uSn(),Mut)){switch(r=BB(mMn(o,(hWn(),Qft)),61),c=BB(mMn(o,Yft),8),f=o.n,r.g){case 2:f.a=i.f.a+b.c-l.a;break;case 4:f.a=-l.a-b.b}switch(d=0,r.g){case 2:case 4:t==(QEn(),WIt)?(w=Gy(MD(mMn(o,Tlt))),f.b=a.b*w-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0)):t==XIt&&(f.b=Gy(MD(mMn(o,Tlt)))-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0))}u=e.Math.max(u,d)}for(i.f.b+=u-a.b,s=new Wb(n.a);s.a<s.c.c.length;)if((o=BB(n0(s),10)).k==(uSn(),Mut))switch(r=BB(mMn(o,(hWn(),Qft)),61),f=o.n,r.g){case 1:f.b=-l.b-b.d;break;case 3:f.b=i.f.b+b.a-l.b}}function Czn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(r=BB(mMn(n,(qqn(),skt)),33),o=DWn,s=DWn,a=_Vn,u=_Vn,k=spn(n.b,0);k.b!=k.d.c;)w=(m=BB(b3(k),86)).e,d=m.f,o=e.Math.min(o,w.a-d.a/2),s=e.Math.min(s,w.b-d.b/2),a=e.Math.max(a,w.a+d.a/2),u=e.Math.max(u,w.b+d.b/2);for(l=new xI((b=BB(ZAn(r,(IAn(),Ckt)),116)).b-o,b.d-s),y=spn(n.b,0);y.b!=y.d.c;)cL(f=mMn(m=BB(b3(y),86),skt),239)&&SA(c=BB(f,33),(h=UR(m.e,l)).a-c.g/2,h.b-c.f/2);for(v=spn(n.a,0);v.b!=v.d.c;)p=BB(b3(v),188),(i=BB(mMn(p,skt),79))&&(r5(t=p.a,g=new wA(p.b.e),t.a,t.a.a),r5(t,j=new wA(p.c.e),t.c.b,t.c),ZMn(g,BB(Dpn(t,1),8),p.b.f),ZMn(j,BB(Dpn(t,t.b-2),8),p.c.f),VFn(t,cDn(i,!0,!0)));KUn(r,a-o+(b.b+b.c),u-s+(b.d+b.a),!1,!1)}function Ozn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(yR(o=new M2(s=n.b,0),new HX(n)),g=!1,c=1;o.b<o.d.gc();){for(Px(o.b<o.d.gc()),u=BB(o.d.Xb(o.c=o.b++),29),l1(c,s.c.length),b=BB(s.c[c],29),d=(w=a0(u.a)).c.length,l=new Wb(w);l.a<l.c.c.length;)PZ(h=BB(n0(l),10),b);if(g){for(f=W1(new fy(w),0);f.c.Sb();)for(r=new Wb(a0(fbn(h=BB(w5(f),10))));r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0),hon(n,(hWn(),qft),(hN(),!0)),e=iGn(n,i,d),t=BB(mMn(h,Rft),305),p=BB(xq(e,e.c.length-1),17),t.k=p.c.i,t.n=p,t.b=i.d.i,t.c=i;g=!1}else 0!=w.c.length&&(l1(0,w.c.length),BB(w.c[0],10).k==(uSn(),Tut)&&(g=!0,c=-1));++c}for(a=new M2(n.b,0);a.b<a.d.gc();)Px(a.b<a.d.gc()),0==BB(a.d.Xb(a.c=a.b++),29).a.c.length&&fW(a)}function Azn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=BB(BB(h6(n.r,t),21),84)).gc()<=2||t==(kUn(),oCt)||t==(kUn(),ICt))JUn(n,t);else{for(g=n.u.Hc((lCn(),cCt)),i=t==(kUn(),sCt)?(Dan(),Rrt):(Dan(),Nrt),v=t==sCt?(G7(),irt):(G7(),crt),r=Zk(H_(i),n.s),p=t==sCt?RQn:KQn,h=f.Kc();h.Ob();)!(o=BB(h.Pb(),111)).c||o.c.d.c.length<=0||(d=o.b.rf(),w=o.e,(b=(l=o.c).i).b=(a=l.n,l.e.a+a.b+a.c),b.a=(u=l.n,l.e.b+u.d+u.a),g?(b.c=w.a-(c=l.n,l.e.a+c.b+c.c)-n.s,g=!1):b.c=w.a+d.a+n.s,OY(v,uJn),l.f=v,l9(l,(J9(),Jit)),WB(r.d,new xG(b,kln(r,b))),p=t==sCt?e.Math.min(p,w.b):e.Math.max(p,w.b+o.b.rf().b));for(p+=t==sCt?-n.t:n.t,Pwn((r.e=p,r)),s=f.Kc();s.Ob();)!(o=BB(s.Pb(),111)).c||o.c.d.c.length<=0||((b=o.c.i).c-=o.e.a,b.d-=o.e.b)}}function $zn(n,t,i){var r;if(OTn(i,"StretchWidth layering",1),0!=t.a.c.length){for(n.c=t,n.t=0,n.u=0,n.i=RQn,n.g=KQn,n.d=Gy(MD(mMn(t,(HXn(),ypt)))),zpn(n),PAn(n),SAn(n),xjn(n),ddn(n),n.i=e.Math.max(1,n.i),n.g=e.Math.max(1,n.g),n.d=n.d/n.i,n.f=n.g/n.i,n.s=_vn(n),r=new HX(n.c),WB(n.c.b,r),n.r=a0(n.p),n.n=TJ(n.k,n.k.length);0!=n.r.c.length;)n.o=zhn(n),!n.o||Ton(n)&&0!=n.b.a.gc()?(xEn(n,r),r=new HX(n.c),WB(n.c.b,r),Frn(n.a,n.b),n.b.a.$b(),n.t=n.u,n.u=0):Ton(n)?(n.c.b.c=x8(Ant,HWn,1,0,5,1),r=new HX(n.c),WB(n.c.b,r),n.t=0,n.u=0,n.b.a.$b(),n.a.a.$b(),++n.f,n.r=a0(n.p),n.n=TJ(n.k,n.k.length)):(PZ(n.o,r),y7(n.r,n.o),TU(n.b,n.o),n.t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p],n.u+=n.e[n.o.p]*n.d);t.a.c=x8(Ant,HWn,1,0,5,1),JPn(t.b),HSn(i)}else HSn(i)}function Lzn(n){var t,i,r,c;for(JT(AV(new Rq(null,new w1(n.a.b,16)),new yr),new kr),fEn(n),JT(AV(new Rq(null,new w1(n.a.b,16)),new jr),new Er),n.c==(Mbn(),JPt)&&(JT(AV(wnn(new Rq(null,new w1(new Ib(n.f),1)),new Tr),new Mr),new Md(n)),JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Sr),new Pr),new Ir),new Cr),new Pd(n))),c=new xI(RQn,RQn),t=new xI(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),57),c.a=e.Math.min(c.a,i.d.c),c.b=e.Math.min(c.b,i.d.d),t.a=e.Math.max(t.a,i.d.c+i.d.b),t.b=e.Math.max(t.b,i.d.d+i.d.a);UR(kO(n.d.c),qx(new xI(c.a,c.b))),UR(kO(n.d.f),XR(new xI(t.a,t.b),c)),oNn(n,c,t),$U(n.f),$U(n.b),$U(n.g),$U(n.e),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.d=null}function Nzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(i=new Np,w=new Wb(t.a);w.a<w.c.c.length;)if((l=(b=BB(n0(w),10)).e)&&(gun(i,Nzn(n,l,b)),EGn(n,l,b),BB(mMn(l,(hWn(),Zft)),21).Hc((bDn(),lft))))for(p=BB(mMn(b,(HXn(),ept)),98),f=BB(mMn(b,cpt),174).Hc((lCn(),eCt)),g=new Wb(b.j);g.a<g.c.c.length;)for(d=BB(n0(g),11),(r=BB(RX(n.b,d),10))||(hon(r=bXn(d,p,d.j,-(d.e.c.length-d.g.c.length),null,new Gj,d.o,BB(mMn(l,Udt),103),l),dlt,d),VW(n.b,d,r),WB(l.a,r)),c=BB(xq(r.j,0),11),s=new Wb(d.f);s.a<s.c.c.length;)o=BB(n0(s),70),(a=new qj).o.a=o.o.a,a.o.b=o.o.b,WB(c.f,a),f||(v=d.j,h=0,Hz(BB(mMn(b,cpt),21))&&(h=$Cn(o.n,o.o,d.o,0,v)),p==(QEn(),QIt)||(kUn(),bCt).Hc(v)?a.o.a=h:a.o.b=h);return BGn(n,t,e,i,u=new Np),e&&Iqn(n,t,e,u),u}function xzn(n,t,e){var i,r,c,a,u,o,s,h;if(!n.c[t.c.p][t.p].e){for(n.c[t.c.p][t.p].e=!0,n.c[t.c.p][t.p].b=0,n.c[t.c.p][t.p].d=0,n.c[t.c.p][t.p].a=null,h=new Wb(t.j);h.a<h.c.c.length;)for(s=BB(n0(h),11),o=(e?new Hw(s):new Gw(s)).Kc();o.Ob();)(a=(u=BB(o.Pb(),11)).i).c==t.c?a!=t&&(xzn(n,a,e),n.c[t.c.p][t.p].b+=n.c[a.c.p][a.p].b,n.c[t.c.p][t.p].d+=n.c[a.c.p][a.p].d):(n.c[t.c.p][t.p].d+=n.g[u.p],++n.c[t.c.p][t.p].b);if(c=BB(mMn(t,(hWn(),xft)),15))for(r=c.Kc();r.Ob();)i=BB(r.Pb(),10),t.c==i.c&&(xzn(n,i,e),n.c[t.c.p][t.p].b+=n.c[i.c.p][i.p].b,n.c[t.c.p][t.p].d+=n.c[i.c.p][i.p].d);n.c[t.c.p][t.p].b>0&&(n.c[t.c.p][t.p].d+=H$n(n.i,24)*uYn*.07000000029802322-.03500000014901161,n.c[t.c.p][t.p].a=n.c[t.c.p][t.p].d/n.c[t.c.p][t.p].b)}}function Dzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(l=new Wb(n);l.a<l.c.c.length;){for(nx((f=BB(n0(l),10)).n),nx(f.o),V6(f.f),VRn(f),aRn(f),w=new Wb(f.j);w.a<w.c.c.length;){for(nx((b=BB(n0(w),11)).n),nx(b.a),nx(b.o),qIn(b,amn(b.j)),(r=BB(mMn(b,(HXn(),ipt)),19))&&hon(b,ipt,iln(-r.a)),i=new Wb(b.g);i.a<i.c.c.length;){for(t=spn((e=BB(n0(i),17)).a,0);t.b!=t.d.c;)nx(BB(b3(t),8));if(a=BB(mMn(e,vgt),74))for(c=spn(a,0);c.b!=c.d.c;)nx(BB(b3(c),8));for(s=new Wb(e.b);s.a<s.c.c.length;)nx((u=BB(n0(s),70)).n),nx(u.o)}for(h=new Wb(b.f);h.a<h.c.c.length;)nx((u=BB(n0(h),70)).n),nx(u.o)}for(f.k==(uSn(),Mut)&&(hon(f,(hWn(),Qft),amn(BB(mMn(f,Qft),61))),wxn(f)),o=new Wb(f.b);o.a<o.c.c.length;)VRn(u=BB(n0(o),70)),nx(u.o),nx(u.n)}}function Rzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(n.e=t,u=nOn(t),m=new Np,i=new Wb(u);i.a<i.c.c.length;){for(e=BB(n0(i),15),y=new Np,m.c[m.c.length]=y,o=new Rv,l=e.Kc();l.Ob();){for(c=JRn(n,f=BB(l.Pb(),33),!0,0,0),y.c[y.c.length]=c,new xI(b=f.i,w=f.j),!f.n&&(f.n=new eU(zOt,f,1,7)),h=new AL(f.n);h.e!=h.i.gc();)r=JRn(n,BB(kpn(h),137),!1,b,w),y.c[y.c.length]=r;for(!f.c&&(f.c=new eU(XOt,f,9,9)),g=new AL(f.c);g.e!=g.i.gc();)for(a=JRn(n,d=BB(kpn(g),118),!1,b,w),y.c[y.c.length]=a,p=d.i+b,v=d.j+w,!d.n&&(d.n=new eU(zOt,d,1,7)),s=new AL(d.n);s.e!=s.i.gc();)r=JRn(n,BB(kpn(s),137),!1,p,v),y.c[y.c.length]=r;Frn(o,JQ(Wen(Pun(Gk(xnt,1),HWn,20,0,[dLn(f),wLn(f)]))))}ULn(n,o,y)}return n.f=new _j(m),qan(n.f,t),n.f}function Kzn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;null==(w=RX(n.e,i))&&(s=BB(w=new py,183),o=new GX(t+"_s"+r),rtn(s,q6n,o)),nW(e,b=BB(w,183)),qQ(g=new py,"x",i.j),qQ(g,"y",i.k),rtn(b,U6n,g),qQ(f=new py,"x",i.b),qQ(f,"y",i.c),rtn(b,"endPoint",f),!WE((!i.a&&(i.a=new $L(xOt,i,5)),i.a))&&(c=new Wg(h=new Il),e5((!i.a&&(i.a=new $L(xOt,i,5)),i.a),c),rtn(b,D6n,h)),!!Svn(i)&&cMn(n.a,b,K6n,RPn(n,Svn(i))),!!Pvn(i)&&cMn(n.a,b,R6n,RPn(n,Pvn(i))),!(0==(!i.e&&(i.e=new hK(FOt,i,10,9)),i.e).i)&&(a=new SC(n,l=new Il),e5((!i.e&&(i.e=new hK(FOt,i,10,9)),i.e),a),rtn(b,F6n,l)),0!=(!i.g&&(i.g=new hK(FOt,i,9,10)),i.g).i&&(u=new PC(n,d=new Il),e5((!i.g&&(i.g=new hK(FOt,i,9,10)),i.g),u),rtn(b,_6n,d))}function _zn(n){var t,i,r,c,a,u,o;for(qD(),r=n.f.n,u=EX(n.r).a.nc();u.Ob();){if(c=0,(a=BB(u.Pb(),111)).b.Xe((sWn(),aPt))&&(c=Gy(MD(a.b.We(aPt))))<0)switch(a.b.Hf().g){case 1:r.d=e.Math.max(r.d,-c);break;case 3:r.a=e.Math.max(r.a,-c);break;case 2:r.c=e.Math.max(r.c,-c);break;case 4:r.b=e.Math.max(r.b,-c)}if(Hz(n.u))switch(t=vcn(a.b,c),o=!BB(n.e.We(qSt),174).Hc((n_n(),HCt)),i=!1,a.b.Hf().g){case 1:i=t>r.d,r.d=e.Math.max(r.d,t),o&&i&&(r.d=e.Math.max(r.d,r.a),r.a=r.d+c);break;case 3:i=t>r.a,r.a=e.Math.max(r.a,t),o&&i&&(r.a=e.Math.max(r.a,r.d),r.d=r.a+c);break;case 2:i=t>r.c,r.c=e.Math.max(r.c,t),o&&i&&(r.c=e.Math.max(r.b,r.c),r.b=r.c+c);break;case 4:i=t>r.b,r.b=e.Math.max(r.b,t),o&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function Fzn(n){var t,e,i,r,c,a,u,o,s,h,f;for(s=new Wb(n);s.a<s.c.c.length;){switch(o=BB(n0(s),10),c=null,(a=BB(mMn(o,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),c=$ht;break;case 3:case 4:Jun(),c=Oht}if(c)hon(o,(hWn(),Gft),(Jun(),$ht)),c==Oht?RNn(o,a,(ain(),Hvt)):c==$ht&&RNn(o,a,(ain(),qvt));else if(vA(BB(mMn(o,ept),98))&&0!=o.j.c.length){for(t=!0,f=new Wb(o.j);f.a<f.c.c.length;){if(!((h=BB(n0(f),11)).j==(kUn(),oCt)&&h.e.c.length-h.g.c.length>0||h.j==ICt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Wb(h.g);r.a<r.c.c.length;)if(e=BB(n0(r),17),(u=BB(mMn(e.d.i,kgt),163))==(Tbn(),Blt)||u==Hlt){t=!1;break}for(i=new Wb(h.e);i.a<i.c.c.length;)if(e=BB(n0(i),17),(u=BB(mMn(e.c.i,kgt),163))==(Tbn(),_lt)||u==Flt){t=!1;break}}t&&RNn(o,a,(ain(),Gvt))}}}function Bzn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(E=0,w=0,l=new Wb(t.e);l.a<l.c.c.length;){for(f=BB(n0(l),10),b=0,o=0,s=i?BB(mMn(f,Xmt),19).a:_Vn,v=r?BB(mMn(f,Wmt),19).a:_Vn,h=e.Math.max(s,v),y=new Wb(f.j);y.a<y.c.c.length;){if(m=BB(n0(y),11),k=f.n.b+m.n.b+m.a.b,r)for(u=new Wb(m.g);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).d).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o));if(i)for(u=new Wb(m.e);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).c).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o))}o>0&&(E+=b/o,++w)}w>0?(t.a=c*E/w,t.g=w):(t.a=0,t.g=0)}function Hzn(n,t){var e,i,r,c,a,u,o,s,h,f;for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(u=new Wb(BB(n0(i),29).a);u.a<u.c.c.length;)a=BB(n0(u),10),t.j[a.p]=a,t.i[a.p]=t.o==(oZ(),cyt)?KQn:RQn;for($U(n.c),c=n.a.b,t.c==(gJ(),nyt)&&(c=cL(c,152)?o6(BB(c,152)):cL(c,131)?BB(c,131).a:cL(c,54)?new fy(c):new IT(c)),R9(n.e,t,n.b),yS(t.p,null),r=c.Kc();r.Ob();)for(o=BB(r.Pb(),29).a,t.o==(oZ(),cyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new IT(o)),f=o.Kc();f.Ob();)h=BB(f.Pb(),10),t.g[h.p]==h&&oXn(n,h,t);for(Hqn(n,t),e=c.Kc();e.Ob();)for(f=new Wb(BB(e.Pb(),29).a);f.a<f.c.c.length;)h=BB(n0(f),10),t.p[h.p]=t.p[t.g[h.p].p],h==t.g[h.p]&&(s=Gy(t.i[t.j[h.p].p]),(t.o==(oZ(),cyt)&&s>KQn||t.o==ryt&&s<RQn)&&(t.p[h.p]=Gy(t.p[h.p])+s));n.e.cg()}function qzn(n,t,e,i){var r,c,a,u,o;return pNn(u=new eUn(t),i),r=!0,n&&n.Xe((sWn(),bSt))&&(r=(c=BB(n.We((sWn(),bSt)),103))==(Ffn(),BPt)||c==_Pt||c==FPt),oRn(u,!1),Otn(u.e.wf(),new $_(u,!1,r)),LJ(u,u.f,(Dtn(),Git),(kUn(),sCt)),LJ(u,u.f,Uit,SCt),LJ(u,u.g,Git,ICt),LJ(u,u.g,Uit,oCt),Bpn(u,sCt),Bpn(u,SCt),hV(u,oCt),hV(u,ICt),qD(),(a=u.A.Hc((mdn(),DCt))&&u.B.Hc((n_n(),UCt))?ndn(u):null)&&rj(u.a,a),_zn(u),ryn(u),cyn(u),VGn(u),MKn(u),mkn(u),_gn(u,sCt),_gn(u,SCt),IRn(u),PHn(u),e?(Gbn(u),ykn(u),_gn(u,oCt),_gn(u,ICt),o=u.B.Hc((n_n(),XCt)),MIn(u,o,sCt),MIn(u,o,SCt),SIn(u,o,oCt),SIn(u,o,ICt),JT(new Rq(null,new w1(new Ob(u.i),0)),new Cn),JT(AV(new Rq(null,EX(u.r).a.oc()),new On),new An),BEn(u),u.e.uf(u.o),JT(new Rq(null,EX(u.r).a.oc()),new Ln),u.o):u.o}function Gzn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),81),h=e.Math.min(h,t.d.f.g.c+t.e.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),189)).i=h,0==a.e&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),189)).f.g.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),81),g=a.i+f.e.a,f.d.g||f.g.c<g?f.o=g:f.o=f.g.c;for(c-=a.f.o,a.b+=c,n.c==(Ffn(),FPt)||n.c==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),81)).f.Kc();s.Ob();)o=BB(s.Pb(),81),d=dA(n.c)?n.f.ef(f,o):n.f.ff(f,o),o.d.i=e.Math.max(o.d.i,f.o+f.g.b+d-o.e.a),o.k||(o.d.i=e.Math.max(o.d.i,o.g.c-o.e.a)),--o.d.e,0==o.d.e&&DH(w,o.d)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),81)).g.c=t.o}function zzn(n){var t,e,i,r,c,a,u,o;switch(u=n.b,t=n.a,0===BB(mMn(n,(_kn(),Mit)),427).g?m$(u,new nw(new Gn)):m$(u,new nw(new zn)),1===BB(mMn(n,Eit),428).g?(m$(u,new qn),m$(u,new Un),m$(u,new Kn)):(m$(u,new qn),m$(u,new Hn)),BB(mMn(n,Pit),250).g){case 0:o=new Yn;break;case 1:o=new Vn;break;case 2:o=new Qn;break;case 3:o=new Wn;break;case 5:o=new Ow(new Qn);break;case 4:o=new Ow(new Vn);break;case 7:o=new DS(new Ow(new Vn),new Ow(new Qn));break;case 8:o=new DS(new Ow(new Wn),new Ow(new Qn));break;default:o=new Ow(new Wn)}for(a=new Wb(u);a.a<a.c.c.length;){for(c=BB(n0(a),167),r=0,e=new rC(iln(i=0),iln(r));B_n(t,c,i,r);)e=BB(o.Ce(e,c),46),i=BB(e.a,19).a,r=BB(e.b,19).a;_Rn(t,c,i,r)}}function Uzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,MA(n.e,c.a,c.b),j=l/w,E=h/b,s=new AL(mV(n.e));s.e!=s.i.gc();)Pen(o=BB(kpn(s),137),o.i*j),Ien(o,o.j*E);for(v=new AL(yV(n.e));v.e!=v.i.gc();)y=(p=BB(kpn(v),118)).i,k=p.j,y>0&&Pen(p,y*j),k>0&&Ien(p,k*E);for(nan(n.b,new lt),t=new Np,u=new usn(new Pb(n.c).a);u.b;)i=BB((a=ten(u)).cd(),79),e=BB(a.dd(),395).a,r=cDn(i,!1,!1),VFn(f=lTn(PMn(i),qSn(r),e),r),(m=IMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.a.a.c,8)),e));for(g=new usn(new Pb(n.d).a);g.b;)i=BB((d=ten(g)).cd(),79),e=BB(d.dd(),395).a,r=cDn(i,!1,!1),f=lTn(OMn(i),Jon(qSn(r)),e),VFn(f=Jon(f),r),(m=CMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.c.b.c,8)),e))}function Xzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(0!=i.c.length){for(w=new Np,b=new Wb(i);b.a<b.c.c.length;)WB(w,new xI((l=BB(n0(b),33)).i,l.j));for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt));NMn(n,i);)E$n(n,i,!1);for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),u=0,o=0,c=null,0!=i.c.length&&(l1(0,i.c.length),u=(c=BB(i.c[0],33)).i-(l1(0,w.c.length),BB(w.c[0],8)).a,o=c.j-(l1(0,w.c.length),BB(w.c[0],8)).b),a=e.Math.sqrt(u*u+o*o),f=Uhn(i);0!=f.a.gc();){for(h=f.a.ec().Kc();h.Ob();)s=BB(h.Pb(),33),g=(d=n.f).i+d.g/2,p=d.j+d.f/2,v=s.i+s.g/2,y=s.j+s.f/2-p,j=(m=v-g)/(k=e.Math.sqrt(m*m+y*y)),E=y/k,Pen(s,s.i+j*a),Ien(s,s.j+E*a);r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),f=Uhn(new t_(f))}n.a&&n.a.lg(new t_(f)),r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),Xzn(n,t,new t_(f),r)}}function Wzn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(g=n.n,p=n.o,b=n.d,l=Gy(MD(edn(n,(HXn(),ppt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),o=t.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a-u.o.b,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=u.o.b,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,IZ(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),o=i.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=0,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,IZ(d,n)),c+=r}}function Vzn(n,t){var i,r,c,a,u,o;if(BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))){for(o=new Wb(t.a);o.a<o.c.c.length;)(a=BB(n0(o),10)).k==(uSn(),Iut)&&(c=BB(mMn(a,(HXn(),Igt)),142),n.c=e.Math.min(n.c,a.n.a-c.b),n.a=e.Math.max(n.a,a.n.a+a.o.a+c.c),n.d=e.Math.min(n.d,a.n.b-c.d),n.b=e.Math.max(n.b,a.n.b+a.o.b+c.a));for(u=new Wb(t.a);u.a<u.c.c.length;)if((a=BB(n0(u),10)).k!=(uSn(),Iut))switch(a.k.g){case 2:if((r=BB(mMn(a,(HXn(),kgt)),163))==(Tbn(),Flt)){a.n.a=n.c-10,Yyn(a,new Ge).Jb(new rd(a));break}if(r==Hlt){a.n.a=n.a+10,Yyn(a,new ze).Jb(new cd(a));break}if((i=BB(mMn(a,ilt),303))==(z7(),Ift)){lqn(a).Jb(new ad(a)),a.n.b=n.d-10;break}if(i==Sft){lqn(a).Jb(new ud(a)),a.n.b=n.b+10;break}break;default:throw Hp(new _y("The node type "+a.k+" is not supported by the "+Jot))}}}function Qzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(o=new xI(i.i+i.g/2,i.j+i.f/2),l=XHn(i),b=BB(ZAn(t,(HXn(),ept)),98),d=BB(ZAn(i,upt),61),BC(lpn(i),tpt)||(w=0==i.i&&0==i.j?0:tMn(i,d),Ypn(i,tpt,w)),hon(r=bXn(i,b,d,l,new xI(t.g,t.f),o,new xI(i.g,i.f),BB(mMn(e,Udt),103),e),(hWn(),dlt),i),Hl(c=BB(xq(r.j,0),11),j_n(i)),hon(r,cpt,(lCn(),nbn(rCt))),h=BB(ZAn(t,cpt),174).Hc(eCt),u=new AL((!i.n&&(i.n=new eU(zOt,i,1,7)),i.n));u.e!=u.i.gc();)if(!qy(TD(ZAn(a=BB(kpn(u),137),Ggt)))&&a.a&&(f=Hhn(a),WB(c.f,f),!h))switch(s=0,Hz(BB(ZAn(t,cpt),21))&&(s=$Cn(new xI(a.i,a.j),new xI(a.g,a.f),new xI(i.g,i.f),0,d)),d.g){case 2:case 4:f.o.a=s;break;case 1:case 3:f.o.b=s}hon(r,Ipt,MD(ZAn(JJ(t),Ipt))),hon(r,Cpt,MD(ZAn(JJ(t),Cpt))),hon(r,Spt,MD(ZAn(JJ(t),Spt))),WB(e.a,r),VW(n.a,i,r)}function Yzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(e,"Processor arrange level",1),h=0,SQ(),_rn(t,new ap((qqn(),ikt))),c=t.b,u=spn(t,t.b),s=!0;s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?--c:s=!1;if(a=new n_(new s1(t,0,c)),o=new n_(new s1(t,c,t.b)),0==a.b)for(b=spn(o,0);b.b!=b.d.c;)hon(BB(b3(b),86),hkt,iln(h++));else for(f=a.b,m=spn(a,0);m.b!=m.d.c;){for(hon(v=BB(b3(m),86),hkt,iln(h++)),Yzn(n,i=xun(v),mcn(e,1/f|0)),_rn(i,QW(new ap(hkt))),l=new YT,p=spn(i,0);p.b!=p.d.c;)for(g=BB(b3(p),86),d=spn(v.d,0);d.b!=d.d.c;)(w=BB(b3(d),188)).c==g&&r5(l,w,l.c.b,l.c);for(yQ(v.d),Frn(v.d,l),u=spn(o,o.b),r=v.d.b,s=!0;0<r&&s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?(hon(g,hkt,iln(h++)),--r,mtn(u)):s=!1}HSn(e)}function Jzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Inverted port preprocessing",1),u=new M2(n.b,0),e=null,g=new Np;u.b<u.d.gc();){for(d=e,Px(u.b<u.d.gc()),e=BB(u.d.Xb(u.c=u.b++),29),h=new Wb(g);h.a<h.c.c.length;)PZ(o=BB(n0(h),10),d);for(g.c=x8(Ant,HWn,1,0,5,1),f=new Wb(e.a);f.a<f.c.c.length;)if((o=BB(n0(f),10)).k==(uSn(),Iut)&&vA(BB(mMn(o,(HXn(),ept)),98))){for(w=cRn(o,(ain(),Hvt),(kUn(),oCt)).Kc();w.Ob();)for(l=BB(w.Pb(),11),r=0,c=(i=BB(Qgn(a=l.e,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)$Bn(n,l,i[r],g);for(b=cRn(o,qvt,ICt).Kc();b.Ob();)for(l=BB(b.Pb(),11),r=0,c=(i=BB(Qgn(a=l.g,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)ABn(n,l,i[r],g)}}for(s=new Wb(g);s.a<s.c.c.length;)PZ(o=BB(n0(s),10),e);HSn(t)}function Zzn(n,t,e,i,r,c){var a,u,o,s,h,f;for(qan(s=new ISn,t),qIn(s,BB(ZAn(t,(HXn(),upt)),61)),hon(s,(hWn(),dlt),t),IZ(s,e),(f=s.o).a=t.g,f.b=t.f,(h=s.n).a=t.i,h.b=t.j,VW(n.a,t,s),(a=o5($V(wnn(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Vt),new Xt),new Ww(t)))||(a=o5($V(wnn(new Rq(null,(!t.d&&(t.d=new hK(_Ot,t,8,5)),new w1(t.d,16))),new Qt),new Wt),new Vw(t))),a||(a=o5(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Yt)),hon(s,elt,(hN(),!!a)),pqn(s,c,r,BB(ZAn(t,npt),8)),o=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));o.e!=o.i.gc();)!qy(TD(ZAn(u=BB(kpn(o),137),Ggt)))&&u.a&&WB(s.f,Hhn(u));switch(r.g){case 2:case 1:(s.j==(kUn(),sCt)||s.j==SCt)&&i.Fc((bDn(),gft));break;case 4:case 3:(s.j==(kUn(),oCt)||s.j==ICt)&&i.Fc((bDn(),gft))}return s}function nUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;for(l=null,r==(dJ(),Lyt)?l=t:r==Nyt&&(l=i),d=l.a.ec().Kc();d.Ob();){for(w=BB(d.Pb(),11),g=Aon(Pun(Gk(PMt,1),sVn,8,0,[w.i.n,w.n,w.a])).b,m=new Rv,o=new Rv,h=new m6(w.b);y$(h.a)||y$(h.b);)if(qy(TD(mMn(s=BB(y$(h.a)?n0(h.a):n0(h.b),17),(hWn(),Ilt))))==c&&-1!=E7(a,s,0)){if(p=s.d==w?s.c:s.d,v=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).b,e.Math.abs(v-g)<.2)continue;v<g?t.a._b(p)?TU(m,new rC(Lyt,s)):TU(m,new rC(Nyt,s)):t.a._b(p)?TU(o,new rC(Lyt,s)):TU(o,new rC(Nyt,s))}if(m.a.gc()>1)for(e5(m,new sI(n,b=new hqn(w,m,r))),u.c[u.c.length]=b,f=m.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b);if(o.a.gc()>1)for(e5(o,new hI(n,b=new hqn(w,o,r))),u.c[u.c.length]=b,f=o.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b)}}function tUn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,w4n),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new Ha),w4n))),u2(n,w4n,g3n,mpn(xjt)),u2(n,w4n,vZn,mpn(Kjt)),u2(n,w4n,PZn,mpn(Ijt)),u2(n,w4n,BZn,mpn(Cjt)),u2(n,w4n,SZn,mpn(Ojt)),u2(n,w4n,IZn,mpn(Pjt)),u2(n,w4n,MZn,mpn(Ajt)),u2(n,w4n,CZn,mpn(Njt)),u2(n,w4n,h4n,mpn(Mjt)),u2(n,w4n,s4n,mpn(Sjt)),u2(n,w4n,b4n,mpn($jt)),u2(n,w4n,u4n,mpn(Ljt)),u2(n,w4n,o4n,mpn(Djt)),u2(n,w4n,f4n,mpn(Rjt)),u2(n,w4n,l4n,mpn(_jt))}function eUn(n){var t;if(this.r=xV(new Pn,new In),this.b=new Hbn(BB(yX(FCt),290)),this.p=new Hbn(BB(yX(FCt),290)),this.i=new Hbn(BB(yX(Krt),290)),this.e=n,this.o=new wA(n.rf()),this.D=n.Df()||qy(TD(n.We((sWn(),SSt)))),this.A=BB(n.We((sWn(),KSt)),21),this.B=BB(n.We(qSt),21),this.q=BB(n.We(uPt),98),this.u=BB(n.We(fPt),21),!wMn(this.u))throw Hp(new rk("Invalid port label placement: "+this.u));if(this.v=qy(TD(n.We(bPt))),this.j=BB(n.We(DSt),21),!tLn(this.j))throw Hp(new rk("Invalid node label placement: "+this.j));this.n=BB(nkn(n,NSt),116),this.k=Gy(MD(nkn(n,OPt))),this.d=Gy(MD(nkn(n,CPt))),this.w=Gy(MD(nkn(n,RPt))),this.s=Gy(MD(nkn(n,APt))),this.t=Gy(MD(nkn(n,$Pt))),this.C=BB(nkn(n,xPt),142),this.c=2*this.d,t=!this.B.Hc((n_n(),HCt)),this.f=new Cgn(0,t,0),this.g=new Cgn(1,t,0),jy(this.f,(Dtn(),zit),this.g)}function iUn(n,t,i,r,c){var a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,g=0,d=0,w=1,m=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));m.e!=m.i.gc();)w+=F3(new oz(ZL(dLn(p=BB(kpn(m),33)).a.Kc(),new h))),T=p.g,g=e.Math.max(g,T),b=p.f,d=e.Math.max(d,b),y+=T*b;for(u=y+2*r*r*w*(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i,a=e.Math.sqrt(u),s=e.Math.max(a*i,g),o=e.Math.max(a/i,d),v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();)p=BB(kpn(v),33),M=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(s-p.g),S=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(o-p.f),Pen(p,M),Ien(p,S);for(E=s+(c.b+c.c),j=o+(c.d+c.a),k=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));k.e!=k.i.gc();)for(l=new oz(ZL(dLn(BB(kpn(k),33)).a.Kc(),new h));dAn(l);)nAn(f=BB(U5(l),79))||BXn(f,t,E,j);KUn(n,E+=c.b+c.c,j+=c.d+c.a,!1,!0)}function rUn(n){var t,e,i,r,c,a,u,o,s,h,f;if(null==n)throw Hp(new Mk(zWn));if(s=n,o=!1,(c=n.length)>0&&(b1(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(n=n.substr(1),--c,o=45==t)),0==c)throw Hp(new Mk(DQn+s+'"'));for(;n.length>0&&(b1(0,n.length),48==n.charCodeAt(0));)n=n.substr(1),--c;if(c>(iFn(),xtt)[10])throw Hp(new Mk(DQn+s+'"'));for(r=0;r<c;r++)if(-1==egn((b1(r,n.length),n.charCodeAt(r))))throw Hp(new Mk(DQn+s+'"'));for(f=0,a=Ltt[10],h=Ntt[10],u=j7(Dtt[10]),e=!0,(i=c%a)>0&&(f=-parseInt(n.substr(0,i),10),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt(n.substr(0,a),10),n=n.substr(a),c-=a,e)e=!1;else{if(Vhn(f,u)<0)throw Hp(new Mk(DQn+s+'"'));f=cbn(f,h)}f=ibn(f,i)}if(Vhn(f,0)>0)throw Hp(new Mk(DQn+s+'"'));if(!o&&Vhn(f=j7(f),0)<0)throw Hp(new Mk(DQn+s+'"'));return f}function cUn(n,t){var e,i,r,c,a,u,o;if(ZH(),this.a=new X$(this),this.b=n,this.c=t,this.f=OU(B7((CPn(),Z$t),t)),this.f.dc())if((u=mjn(Z$t,n))==t)for(this.e=!0,this.d=new Np,this.f=new fo,this.f.Fc(S7n),BB(NHn(F7(Z$t,Utn(n)),""),26)==n&&this.f.Fc(az(Z$t,Utn(n))),r=EKn(Z$t,n).Kc();r.Ob();)switch(i=BB(r.Pb(),170),DW(B7(Z$t,i))){case 4:this.d.Fc(i);break;case 5:this.f.Gc(OU(B7(Z$t,i)))}else if(ZM(),BB(t,66).Oj())for(this.e=!0,this.f=null,this.d=new Np,a=0,o=(null==n.i&&qFn(n),n.i).length;a<o;++a)for(null==n.i&&qFn(n),e=n.i,i=a>=0&&a<e.length?e[a]:null,c=Z1(B7(Z$t,i));c;c=Z1(B7(Z$t,c)))c==t&&this.d.Fc(i);else 1==DW(B7(Z$t,t))&&u?(this.f=null,this.d=(TOn(),bLt)):(this.f=null,this.e=!0,this.d=(SQ(),new Gb(t)));else this.e=5==DW(B7(Z$t,t)),this.f.Fb(uLt)&&(this.f=uLt)}function aUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(i=0,r=Pmn(n,t),b=n.s,w=n.t,h=BB(BB(h6(n.r,t),21),84).Kc();h.Ob();)if((s=BB(h.Pb(),111)).c&&!(s.c.d.c.length<=0)){switch(d=s.b.rf(),o=s.b.Xe((sWn(),aPt))?Gy(MD(s.b.We(aPt))):0,(l=(f=s.c).i).b=(u=f.n,f.e.a+u.b+u.c),l.a=(a=f.n,f.e.b+a.d+a.a),t.g){case 1:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=d.b+o+r,l9(f,(J9(),Qit)),WD(f,(G7(),crt));break;case 3:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=-o-r-l.a,l9(f,(J9(),Qit)),WD(f,(G7(),irt));break;case 2:l.c=-o-r-l.b,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Jit)),WD(f,(G7(),rrt));break;case 4:l.c=d.a+o+r,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Yit)),WD(f,(G7(),rrt))}(t==(kUn(),sCt)||t==SCt)&&(i=e.Math.max(i,l.a))}i>0&&(BB(oV(n.b,t),124).a.b=i)}function uUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Comment pre-processing",1),e=0,o=new Wb(n.a);o.a<o.c.c.length;)if(qy(TD(mMn(u=BB(n0(o),10),(HXn(),Tdt))))){for(++e,r=0,i=null,s=null,w=new Wb(u.j);w.a<w.c.c.length;)r+=(l=BB(n0(w),11)).e.c.length+l.g.c.length,1==l.e.c.length&&(s=(i=BB(xq(l.e,0),17)).c),1==l.g.c.length&&(s=(i=BB(xq(l.g,0),17)).d);if(1!=r||s.e.c.length+s.g.c.length!=1||qy(TD(mMn(s.i,Tdt)))){for(g=new Np,b=new Wb(u.j);b.a<b.c.c.length;){for(f=new Wb((l=BB(n0(b),11)).g);f.a<f.c.c.length;)0==(h=BB(n0(f),17)).d.g.c.length||(g.c[g.c.length]=h);for(a=new Wb(l.e);a.a<a.c.c.length;)0==(c=BB(n0(a),17)).c.e.c.length||(g.c[g.c.length]=c)}for(d=new Wb(g);d.a<d.c.c.length;)tBn(BB(n0(d),17),!0)}else nXn(u,i,s,s.i),AU(o)}t.n&&OH(t,"Found "+e+" comment boxes"),HSn(t)}function oUn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(l=Gy(MD(mMn(n,(HXn(),Ipt)))),b=Gy(MD(mMn(n,Cpt))),f=Gy(MD(mMn(n,Spt))),u=n.o,a=(c=BB(xq(n.j,0),11)).n,d=TPn(c,f)){if(t.Hc((lCn(),eCt)))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:d.c=(u.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(u.a-d.b)/2-a.a,d.d=-b-d.a;break;case 2:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=-l-d.b;break;case 4:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=l}else if(t.Hc(rCt))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Wb(c.f);s.a<s.c.c.length;)(w=(o=BB(n0(s),70)).n).a=d.c,w.b=r,r+=o.o.b+f}}function sUn(){RO(wLt,new Vs),RO(zLt,new ah),RO(ULt,new ph),RO(XLt,new Ih),RO(Qtt,new $h),RO(Gk(NNt,1),new Lh),RO(ktt,new Nh),RO(Ttt,new xh),RO(Qtt,new _s),RO(Qtt,new Fs),RO(Qtt,new Bs),RO(Ptt,new Hs),RO(Qtt,new qs),RO(Rnt,new Gs),RO(Rnt,new zs),RO(Qtt,new Us),RO(Itt,new Xs),RO(Qtt,new Ws),RO(Qtt,new Qs),RO(Qtt,new Ys),RO(Qtt,new Js),RO(Qtt,new Zs),RO(Gk(NNt,1),new nh),RO(Qtt,new th),RO(Qtt,new eh),RO(Rnt,new ih),RO(Rnt,new rh),RO(Qtt,new ch),RO(Att,new uh),RO(Qtt,new oh),RO(Rtt,new sh),RO(Qtt,new hh),RO(Qtt,new fh),RO(Qtt,new lh),RO(Qtt,new bh),RO(Rnt,new wh),RO(Rnt,new dh),RO(Qtt,new gh),RO(Qtt,new vh),RO(Qtt,new mh),RO(Qtt,new yh),RO(Qtt,new kh),RO(Qtt,new jh),RO(_tt,new Eh),RO(Qtt,new Th),RO(Qtt,new Mh),RO(Qtt,new Sh),RO(_tt,new Ph),RO(Rtt,new Ch),RO(Qtt,new Oh),RO(Att,new Ah)}function hUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=t.length)>0&&(b1(0,t.length),64!=(u=t.charCodeAt(0)))){if(37==u&&(o=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(b1(h+1,t.length),o=46==t.charCodeAt(h+1))))){if(v=mK("%",a=t.substr(1,h-1))?null:$Un(a),i=0,o)try{i=l_n(t.substr(h+2),_Vn,DWn)}catch(m){throw cL(m=lun(m),127)?Hp(new L7(m)):Hp(m)}for(d=Ern(n.Wg());d.Ob();)if(cL(b=Man(d),510)&&(p=(r=BB(b,590)).d,(null==v?null==p:mK(v,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:t.substr(0,s),e=0,-1!=s)try{e=l_n(t.substr(s+1),_Vn,DWn)}catch(m){if(!cL(m=lun(m),127))throw Hp(m);l=t}for(l=mK("%",l)?null:$Un(l),w=Ern(n.Wg());w.Ob();)if(cL(b=Man(w),191)&&(g=(c=BB(b,191)).ne(),(null==l?null==g:mK(l,g))&&0==e--))return c;return null}return _qn(n,t)}function fUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(m=new Np,f=new Wb(n.b);f.a<f.c.c.length;)for(w=new Wb(BB(n0(f),29).a);w.a<w.c.c.length;)if((l=BB(n0(w),10)).k==(uSn(),Mut)&&Lx(l,(hWn(),Vft))){for(d=null,p=null,g=null,j=new Wb(l.j);j.a<j.c.c.length;)switch((k=BB(n0(j),11)).j.g){case 4:d=k;break;case 2:p=k;break;default:g=k}for(s=new Kj((v=BB(xq(g.g,0),17)).a),UR(o=new wA(g.n),l.n),nX(spn(s,0),o),y=Jon(v.a),UR(h=new wA(g.n),l.n),r5(y,h,y.c.b,y.c),E=BB(mMn(l,Vft),10),T=BB(xq(E.j,0),11),c=0,u=(i=BB(Qgn(d.e,x8(yut,c1n,17,0,0,1)),474)).length;c<u;++c)MZ(t=i[c],T),Wsn(t.a,t.a.b,s);for(r=0,a=(e=Z0(p.g)).length;r<a;++r)SZ(t=e[r],T),Wsn(t.a,0,y);SZ(v,null),MZ(v,null),m.c[m.c.length]=l}for(b=new Wb(m);b.a<b.c.c.length;)PZ(l=BB(n0(b),10),null)}function lUn(){var n,t,e;for(lUn=O,new knn(1,0),new knn(10,0),new knn(0,0),Htt=x8(iet,sVn,240,11,0,1),qtt=x8(ONt,WVn,25,100,15,1),Gtt=Pun(Gk(xNt,1),qQn,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),ztt=x8(ANt,hQn,25,Gtt.length,15,1),Utt=Pun(Gk(xNt,1),qQn,25,15,[1,10,100,VVn,1e4,GQn,1e6,1e7,1e8,AQn,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Xtt=x8(ANt,hQn,25,Utt.length,15,1),Wtt=x8(iet,sVn,240,11,0,1),n=0;n<Wtt.length;n++)Htt[n]=new knn(n,0),Wtt[n]=new knn(0,n),qtt[n]=48;for(;n<qtt.length;n++)qtt[n]=48;for(e=0;e<ztt.length;e++)ztt[e]=aCn(Gtt[e]);for(t=0;t<Xtt.length;t++)Xtt[t]=aCn(Utt[t]);$On()}function bUn(){function n(){this.obj=this.createObject()}return n.prototype.createObject=function(n){return Object.create(null)},n.prototype.get=function(n){return this.obj[n]},n.prototype.set=function(n,t){this.obj[n]=t},n.prototype[iYn]=function(n){delete this.obj[n]},n.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)},n.prototype.entries=function(){var n=this.keys(),t=this,e=0;return{next:function(){if(e>=n.length)return{done:!0};var i=n[e++];return{value:[i,t.get(i)],done:!1}}}},zDn()||(n.prototype.createObject=function(){return{}},n.prototype.get=function(n){return this.obj[":"+n]},n.prototype.set=function(n,t){this.obj[":"+n]=t},n.prototype[iYn]=function(n){delete this.obj[":"+n]},n.prototype.keys=function(){var n=[];for(var t in this.obj)58==t.charCodeAt(0)&&n.push(t.substring(1));return n}),n}function wUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(PFn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=x8(ONt,WVn,25,4*(0!=(u=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,o=0;o<l;o++)t=n[r++],h=(15&(e=n[r++]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,d=0==(-128&(i=n[r++]))?i>>6<<24>>24:(i>>6^252)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2|d],c[a++]=VLt[63&i];return 8==u?(s=(3&(t=n[r]))<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[s<<4],c[a++]=61,c[a++]=61):16==u&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2],c[a++]=61),Bdn(c,0,c.length)}function dUn(n,t){var i,r,c,a,u,o;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>_Vn&&e4(t,n.p-sQn),u=t.q.getDate(),FJ(t,1),n.k>=0&&vZ(t,n.k),n.c>=0?FJ(t,n.c):n.k>=0?(r=35-new von(t.q.getFullYear()-sQn,t.q.getMonth(),35).q.getDate(),FJ(t,e.Math.min(r,u))):FJ(t,u),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),aL(t,24==n.f&&n.g?0:n.f),n.j>=0&&g6(t,n.j),n.n>=0&&U8(t,n.n),n.i>=0&&dO(t,rbn(cbn(Ojn(fan(t.q.getTime()),VVn),VVn),n.i)),n.a&&(e4(c=new AT,c.q.getFullYear()-sQn-80),sS(fan(t.q.getTime()),fan(c.q.getTime()))&&e4(t,c.q.getFullYear()-sQn+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),o=t.q.getMonth(),FJ(t,t.q.getDate()+i),t.q.getMonth()!=o&&FJ(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>_Vn&&(a=t.q.getTimezoneOffset(),dO(t,rbn(fan(t.q.getTime()),60*(n.o-a)*VVn))),!0}function gUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(cL(r=mMn(t,(hWn(),dlt)),239)){for(b=BB(r,33),w=t.e,f=new wA(t.c),c=t.d,f.a+=c.b,f.b+=c.d,SN(BB(ZAn(b,(HXn(),qgt)),174),(n_n(),qCt))&&(Ol(l=BB(ZAn(b,zgt),116),c.a),_l(l,c.d),Al(l,c.b),Fl(l,c.c)),e=new Np,s=new Wb(t.a);s.a<s.c.c.length;)for(cL(mMn(u=BB(n0(s),10),dlt),239)?IUn(u,f):cL(mMn(u,dlt),186)&&!w&&SA(i=BB(mMn(u,dlt),118),(g=yFn(t,u,i.g,i.f)).a,g.b),d=new Wb(u.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Qw(u)),new Yw(e));if(w)for(d=new Wb(w.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Jw(w)),new Zw(e));for(p=BB(ZAn(b,Zdt),218),a=new Wb(e);a.a<a.c.c.length;)pzn(BB(n0(a),17),p,f);for(m_n(t),o=new Wb(t.a);o.a<o.c.c.length;)(h=(u=BB(n0(o),10)).e)&&gUn(n,h)}}function pUn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,gZn),"ELK Force"),"Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported."),new dt),gZn),EG((hAn(),tAt),Pun(Gk(aAt,1),$Vn,237,0,[ZOt]))))),u2(n,gZn,pZn,iln(1)),u2(n,gZn,vZn,80),u2(n,gZn,mZn,5),u2(n,gZn,VJn,dZn),u2(n,gZn,yZn,iln(1)),u2(n,gZn,kZn,(hN(),!0)),u2(n,gZn,QJn,Qct),u2(n,gZn,jZn,mpn(Hct)),u2(n,gZn,EZn,mpn(Yct)),u2(n,gZn,TZn,!1),u2(n,gZn,MZn,mpn(Wct)),u2(n,gZn,SZn,mpn(Xct)),u2(n,gZn,PZn,mpn(Uct)),u2(n,gZn,IZn,mpn(zct)),u2(n,gZn,CZn,mpn(Jct)),u2(n,gZn,oZn,mpn(Gct)),u2(n,gZn,fZn,mpn(aat)),u2(n,gZn,sZn,mpn(qct)),u2(n,gZn,bZn,mpn(tat)),u2(n,gZn,hZn,mpn(eat))}function vUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,f=PDn(n,t),r=s.b-o.b-o.c,c=u.a.a,a=s.c+o.b,w=n.w,f!=(cpn(),BIt)&&f!=qIt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=f==BIt?c-2*n.w:c,f=FIt),r<c&&!n.B.Hc((n_n(),WCt)))f==BIt?a+=w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=f==BIt?c-2*n.w:c,f=FIt),f.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=w+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),w+=e.Math.max(0,i)}for(b=BB(BB(h6(n.r,t),21),84).Kc();b.Ob();)(l=BB(b.Pb(),111)).e.a=a+l.d.b,l.e.b=(h=l.b).Xe((sWn(),aPt))?h.Hf()==(kUn(),sCt)?-h.rf().b-Gy(MD(h.We(aPt))):Gy(MD(h.We(aPt))):h.Hf()==(kUn(),sCt)?-h.rf().b:0,a+=l.d.b+l.b.rf().a+l.d.c+w}}function mUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,l=PDn(n,t),r=s.a-o.d-o.a,c=u.a.b,a=s.d+o.d,d=n.w,h=n.o.a,l!=(cpn(),BIt)&&l!=qIt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=l==BIt?c-2*n.w:c,l=FIt),r<c&&!n.B.Hc((n_n(),WCt)))l==BIt?a+=d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=l==BIt?c-2*n.w:c,l=FIt),l.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=d+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),d+=e.Math.max(0,i)}for(w=BB(BB(h6(n.r,t),21),84).Kc();w.Ob();)(b=BB(w.Pb(),111)).e.a=(f=b.b).Xe((sWn(),aPt))?f.Hf()==(kUn(),ICt)?-f.rf().a-Gy(MD(f.We(aPt))):h+Gy(MD(f.We(aPt))):f.Hf()==(kUn(),ICt)?-f.rf().a:h,b.e.b=a+b.d.d,a+=b.d.d+b.b.rf().b+b.d.a+d}}function yUn(n){var t,i,r,c,a,u,o,s,f,l,b,w,d,g,p;for(n.n=Gy(MD(mMn(n.g,(HXn(),Opt)))),n.e=Gy(MD(mMn(n.g,Tpt))),n.i=n.g.b.c.length,o=n.i-1,w=0,n.j=0,n.k=0,n.a=u6(x8(Att,sVn,19,n.i,0,1)),n.b=u6(x8(Ptt,sVn,333,n.i,7,1)),u=new Wb(n.g.b);u.a<u.c.c.length;){for((c=BB(n0(u),29)).p=o,b=new Wb(c.a);b.a<b.c.c.length;)(l=BB(n0(b),10)).p=w,++w;--o}for(n.f=x8(ANt,hQn,25,w,15,1),n.c=kq(ANt,[sVn,hQn],[48,25],15,[w,3],2),n.o=new Np,n.p=new Np,t=0,n.d=0,a=new Wb(n.g.b);a.a<a.c.c.length;){for(o=(c=BB(n0(a),29)).p,r=0,p=0,s=c.a.c.length,f=0,b=new Wb(c.a);b.a<b.c.c.length;)w=(l=BB(n0(b),10)).p,n.f[w]=l.c.p,f+=l.o.b+n.n,i=F3(new oz(ZL(fbn(l).a.Kc(),new h))),g=F3(new oz(ZL(lbn(l).a.Kc(),new h))),n.c[w][0]=g-i,n.c[w][1]=i,n.c[w][2]=g,r+=i,p+=g,i>0&&WB(n.p,l),WB(n.o,l);d=s+(t-=r),f+=t*n.e,c5(n.a,o,iln(d)),c5(n.b,o,f),n.j=e.Math.max(n.j,d),n.k=e.Math.max(n.k,f),n.d+=t,t+=p}}function kUn(){var n;kUn=O,PCt=new WI(hJn,0),sCt=new WI(mJn,1),oCt=new WI(yJn,2),SCt=new WI(kJn,3),ICt=new WI(jJn,4),SQ(),wCt=new Ak(new YK(n=BB(Vj(FCt),9),BB(SR(n,n.length),9),0)),dCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[]))),hCt=ffn(EG(oCt,Pun(Gk(FCt,1),YZn,61,0,[]))),ECt=ffn(EG(SCt,Pun(Gk(FCt,1),YZn,61,0,[]))),MCt=ffn(EG(ICt,Pun(Gk(FCt,1),YZn,61,0,[]))),yCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[SCt]))),bCt=ffn(EG(oCt,Pun(Gk(FCt,1),YZn,61,0,[ICt]))),jCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[ICt]))),gCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[oCt]))),TCt=ffn(EG(SCt,Pun(Gk(FCt,1),YZn,61,0,[ICt]))),fCt=ffn(EG(oCt,Pun(Gk(FCt,1),YZn,61,0,[SCt]))),mCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[oCt,ICt]))),lCt=ffn(EG(oCt,Pun(Gk(FCt,1),YZn,61,0,[SCt,ICt]))),kCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[SCt,ICt]))),pCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[oCt,SCt]))),vCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[oCt,SCt,ICt])))}function jUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(0!=t.b){for(l=new YT,a=null,b=null,i=IJ(e.Math.floor(e.Math.log(t.b)*e.Math.LOG10E)+1),u=0,v=spn(t,0);v.b!=v.d.c;)for(g=BB(b3(v),86),GC(b)!==GC(mMn(g,(qqn(),rkt)))&&(b=SD(mMn(g,rkt)),u=0),a=null!=b?b+d0(u++,i):d0(u++,i),hon(g,rkt,a),d=new wg(spn(new bg(g).a.d,0));EE(d.a);)r5(l,w=BB(b3(d.a),188).c,l.c.b,l.c),hon(w,rkt,a);for(f=new xp,c=0;c<a.length-i;c++)for(p=spn(t,0);p.b!=p.d.c;)mZ(f,o=fx(SD(mMn(g=BB(b3(p),86),(qqn(),rkt))),0,c+1),iln(null!=(null==o?qC(AY(f.f,null)):hS(f.g,o))?BB(null==o?qC(AY(f.f,null)):hS(f.g,o),19).a+1:1));for(h=new usn(new Pb(f).a);h.b;)s=ten(h),r=iln(null!=RX(n.a,s.cd())?BB(RX(n.a,s.cd()),19).a:0),mZ(n.a,SD(s.cd()),iln(BB(s.dd(),19).a+r.a)),(!(r=BB(RX(n.b,s.cd()),19))||r.a<BB(s.dd(),19).a)&&mZ(n.b,SD(s.cd()),BB(s.dd(),19));jUn(n,l)}}function EUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(i,"Interactive node layering",1),r=new Np,w=new Wb(t.a);w.a<w.c.c.length;){for(s=(h=(l=BB(n0(w),10)).n.a)+l.o.a,s=e.Math.max(h+1,s),v=new M2(r,0),c=null;v.b<v.d.gc();){if(Px(v.b<v.d.gc()),(g=BB(v.d.Xb(v.c=v.b++),569)).c>=s){Px(v.b>0),v.a.Xb(v.c=--v.b);break}g.a>h&&(c?(gun(c.b,g.b),c.a=e.Math.max(c.a,g.a),fW(v)):(WB(g.b,l),g.c=e.Math.min(g.c,h),g.a=e.Math.max(g.a,s),c=g))}c||((c=new im).c=h,c.a=s,yR(v,c),WB(c.b,l))}for(o=t.b,f=0,p=new Wb(r);p.a<p.c.c.length;)for(g=BB(n0(p),569),(a=new HX(t)).p=f++,o.c[o.c.length]=a,d=new Wb(g.b);d.a<d.c.c.length;)PZ(l=BB(n0(d),10),a),l.p=0;for(b=new Wb(t.a);b.a<b.c.c.length;)0==(l=BB(n0(b),10)).p&&IDn(n,l,t);for(u=new M2(o,0);u.b<u.d.gc();)0==(Px(u.b<u.d.gc()),BB(u.d.Xb(u.c=u.b++),29)).a.c.length&&fW(u);t.a.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function TUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(0!=t.e.c.length&&0!=e.e.c.length){if((i=BB(xq(t.e,0),17).c.i)==(a=BB(xq(e.e,0),17).c.i))return E$(BB(mMn(BB(xq(t.e,0),17),(hWn(),wlt)),19).a,BB(mMn(BB(xq(e.e,0),17),wlt),19).a);for(f=0,l=(h=n.a).length;f<l;++f){if((s=h[f])==i)return 1;if(s==a)return-1}}return 0!=t.g.c.length&&0!=e.g.c.length?(c=BB(mMn(t,(hWn(),llt)),10),o=BB(mMn(e,llt),10),r=0,u=0,Lx(BB(xq(t.g,0),17),wlt)&&(r=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),Lx(BB(xq(e.g,0),17),wlt)&&(u=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),c&&c==o?qy(TD(mMn(BB(xq(t.g,0),17),Ilt)))&&!qy(TD(mMn(BB(xq(e.g,0),17),Ilt)))?1:!qy(TD(mMn(BB(xq(t.g,0),17),Ilt)))&&qy(TD(mMn(BB(xq(e.g,0),17),Ilt)))||r<u?-1:r>u?1:0:(n.b&&(n.b._b(c)&&(r=BB(n.b.xc(c),19).a),n.b._b(o)&&(u=BB(n.b.xc(o),19).a)),r<u?-1:r>u?1:0)):0!=t.e.c.length&&0!=e.g.c.length?1:-1}function MUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(OTn(t,O1n,1),w=new Np,y=new Np,s=new Wb(n.b);s.a<s.c.c.length;)for(g=-1,l=0,b=(f=n2((o=BB(n0(s),29)).a)).length;l<b;++l)if(++g,(h=f[l]).k==(uSn(),Iut)&&vA(BB(mMn(h,(HXn(),ept)),98))){for(LK(BB(mMn(h,(HXn(),ept)),98))||HNn(h),hon(h,(hWn(),rlt),h),w.c=x8(Ant,HWn,1,0,5,1),y.c=x8(Ant,HWn,1,0,5,1),e=new Np,qrn(v=new YT,DSn(h,(kUn(),sCt))),AXn(n,v,w,y,e),u=g,k=h,c=new Wb(w);c.a<c.c.c.length;)Qyn(i=BB(n0(c),10),u,o),++g,hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(i,clt),15).Fc(k);for(yQ(v),p=DSn(h,SCt).Kc();p.Ob();)r5(v,BB(p.Pb(),11),v.a,v.a.a);for(AXn(n,v,y,null,e),m=h,r=new Wb(y);r.a<r.c.c.length;)Qyn(i=BB(n0(r),10),++g,o),hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(m,clt),15).Fc(i);0==e.c.length||hon(h,xft,e)}HSn(t)}function SUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(h=BB(mMn(n,(Mrn(),sat)),33),d=DWn,g=DWn,b=_Vn,w=_Vn,v=new Wb(n.e);v.a<v.c.c.length;)E=(p=BB(n0(v),144)).d,T=p.e,d=e.Math.min(d,E.a-T.a/2),g=e.Math.min(g,E.b-T.b/2),b=e.Math.max(b,E.a+T.a/2),w=e.Math.max(w,E.b+T.b/2);for(k=new xI((j=BB(ZAn(h,(fRn(),Vct)),116)).b-d,j.d-g),o=new Wb(n.e);o.a<o.c.c.length;)cL(y=mMn(u=BB(n0(o),144),sat),239)&&SA(f=BB(y,33),(m=UR(u.d,k)).a-f.g/2,m.b-f.f/2);for(r=new Wb(n.c);r.a<r.c.c.length;)i=BB(n0(r),282),s=cDn(BB(mMn(i,sat),79),!0,!0),Ukn(S=XR(B$(i.d.d),i.c.d),i.c.e.a,i.c.e.b),IA(s,(M=UR(S,i.c.d)).a,M.b),Ukn(P=XR(B$(i.c.d),i.d.d),i.d.e.a,i.d.e.b),PA(s,(t=UR(P,i.d.d)).a,t.b);for(a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),447),SA(BB(mMn(c,sat),137),(l=UR(c.d,k)).a,l.b);KUn(h,b-d+(j.b+j.c),w-g+(j.d+j.a),!1,!0)}function PUn(n){var t,e,i,r,c,a,u,o,s,h,f;for(e=null,u=null,(r=BB(mMn(n.b,(HXn(),igt)),376))==(A6(),Jvt)&&(e=new Np,u=new Np),a=new Wb(n.d);a.a<a.c.c.length;)if((c=BB(n0(a),101)).i)switch(c.e.g){case 0:t=BB(u4(new QT(c.b)),61),r==Jvt&&t==(kUn(),sCt)?e.c[e.c.length]=c:r==Jvt&&t==(kUn(),SCt)?u.c[u.c.length]=c:Nmn(c,t);break;case 1:o=c.a.d.j,s=c.c.d.j,o==(kUn(),sCt)?bU(c,sCt,(Oun(),mst),c.a):s==sCt?bU(c,sCt,(Oun(),yst),c.c):o==SCt?bU(c,SCt,(Oun(),yst),c.a):s==SCt&&bU(c,SCt,(Oun(),mst),c.c);break;case 2:case 3:SN(i=c.b,(kUn(),sCt))?SN(i,SCt)?SN(i,ICt)?SN(i,oCt)||bU(c,sCt,(Oun(),yst),c.c):bU(c,sCt,(Oun(),mst),c.a):bU(c,sCt,(Oun(),vst),null):bU(c,SCt,(Oun(),vst),null);break;case 4:h=c.a.d.j,f=c.a.d.j,h==(kUn(),sCt)||f==sCt?bU(c,SCt,(Oun(),vst),null):bU(c,sCt,(Oun(),vst),null)}e&&(0==e.c.length||QFn(e,(kUn(),sCt)),0==u.c.length||QFn(u,(kUn(),SCt)))}function IUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;for(i=BB(mMn(n,(hWn(),dlt)),33),b=BB(mMn(n,(HXn(),Bdt)),19).a,c=BB(mMn(n,jgt),19).a,Ypn(i,Bdt,iln(b)),Ypn(i,jgt,iln(c)),Pen(i,n.n.a+t.a),Ien(i,n.n.b+t.b),(0!=BB(ZAn(i,Fgt),174).gc()||n.e||GC(mMn(vW(n),_gt))===GC((Nvn(),mvt))&&pA((bvn(),(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))))&&(Sen(i,n.o.a),Men(i,n.o.b)),f=new Wb(n.j);f.a<f.c.c.length;)cL(w=mMn(s=BB(n0(f),11),dlt),186)&&(SA(r=BB(w,118),s.n.a,s.n.b),Ypn(r,upt,s.j));for(l=0!=BB(mMn(n,$gt),174).gc(),o=new Wb(n.b);o.a<o.c.c.length;)a=BB(n0(o),70),(l||0!=BB(mMn(a,$gt),174).gc())&&(MA(e=BB(mMn(a,dlt),137),a.o.a,a.o.b),SA(e,a.n.a,a.n.b));if(!Hz(BB(mMn(n,cpt),21)))for(h=new Wb(n.j);h.a<h.c.c.length;)for(u=new Wb((s=BB(n0(h),11)).f);u.a<u.c.c.length;)a=BB(n0(u),70),Sen(e=BB(mMn(a,dlt),137),a.o.a),Men(e,a.o.b),SA(e,a.n.a,a.n.b)}function CUn(n){var t,e,i,r,c;switch(OY(n,i8n),(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i+(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){case 0:throw Hp(new _y("The edge must have at least one source or target."));case 1:return 0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i?JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))):JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))}if(1==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i&&1==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){if(r=PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),c=PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),JJ(r)==JJ(c))return JJ(r);if(r==JJ(c))return r;if(c==JJ(r))return c}for(t=PTn(BB(U5(i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])))),82));dAn(i);)if((e=PTn(BB(U5(i),82)))!=t&&!Itn(e,t))if(JJ(e)==JJ(t))t=JJ(e);else if(!(t=B$n(t,e)))return null;return t}function OUn(n,t,i){var r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;for(OTn(i,"Polyline edge routing",1),v=Gy(MD(mMn(t,(HXn(),tgt)))),d=Gy(MD(mMn(t,Apt))),c=Gy(MD(mMn(t,kpt))),r=e.Math.min(1,c/d),k=0,s=0,0!=t.b.c.length&&(k=.4*r*(j=hLn(BB(xq(t.b,0),29)))),o=new M2(t.b,0);o.b<o.d.gc();){for(Px(o.b<o.d.gc()),(a=VC(u=BB(o.d.Xb(o.c=o.b++),29),jyt))&&k>0&&(k-=d),Tqn(u,k),l=0,w=new Wb(u.a);w.a<w.c.c.length;){for(f=0,p=new oz(ZL(lbn(b=BB(n0(w),10)).a.Kc(),new h));dAn(p);)m=g1((g=BB(U5(p),17)).c).b,y=g1(g.d).b,u!=g.d.i.c||b5(g)||(VCn(g,k,.4*r*e.Math.abs(m-y)),g.c.j==(kUn(),ICt)&&(m=0,y=0)),f=e.Math.max(f,e.Math.abs(y-m));switch(b.k.g){case 0:case 4:case 1:case 3:case 5:Gqn(n,b,k,v)}l=e.Math.max(l,f)}o.b<o.d.gc()&&(j=hLn((Px(o.b<o.d.gc()),BB(o.d.Xb(o.c=o.b++),29))),l=e.Math.max(l,j),Px(o.b>0),o.a.Xb(o.c=--o.b)),s=.4*r*l,!a&&o.b<o.d.gc()&&(s+=d),k+=u.c.a+s}n.a.a.$b(),t.f.a=k,HSn(i)}function AUn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v;for(s=new xp,u=new pJ,i=new Wb(n.a.a.b);i.a<i.c.c.length;)if(o=f2(t=BB(n0(i),57)))jIn(s.f,o,t);else if(v=f3(t))for(r=new Wb(v.k);r.a<r.c.c.length;)JCn(u,BB(n0(r),17),t);for(e=new Wb(n.a.a.b);e.a<e.c.c.length;)if(o=f2(t=BB(n0(e),57)))for(a=new oz(ZL(lbn(o).a.Kc(),new h));dAn(a);)if(!b5(c=BB(U5(a),17))&&(w=c.c,p=c.d,!(kUn(),yCt).Hc(c.c.j)||!yCt.Hc(c.d.j))){if(d=BB(RX(s,c.d.i),57),UNn(aM(cM(uM(rM(new Hv,0),100),n.c[t.a.d]),n.c[d.a.d])),w.j==ICt&&$z((gcn(),w)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c<t.d.c){if((b=n.c[f.a.d])==(g=n.c[t.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}if(p.j==oCt&&Az((gcn(),p)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c>t.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}}}function $Un(n){var t,e,i,r,c,a,u,o;if(RHn(),null==n)return null;if((r=GO(n,YTn(37)))<0)return n;for(o=new lN(n.substr(0,r)),t=x8(NNt,v6n,25,4,15,1),u=0,i=0,a=n.length;r<a;r++)if(b1(r,n.length),37==n.charCodeAt(r)&&n.length>r+2&&ton((b1(r+1,n.length),n.charCodeAt(r+1)),CAt,OAt)&&ton((b1(r+2,n.length),n.charCodeAt(r+2)),CAt,OAt))if(e=IH((b1(r+1,n.length),n.charCodeAt(r+1)),(b1(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[u++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[u++]=e<<24>>24,i=2):224==(240&e)?(t[u++]=e<<24>>24,i=3):240==(248&e)&&(t[u++]=e<<24>>24,i=4)),i>0){if(u==i){switch(u){case 2:xX(o,((31&t[0])<<6|63&t[1])&QVn);break;case 3:xX(o,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&QVn)}u=0,i=0}}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,o.a+=String.fromCharCode(e)}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,xX(o,(b1(r,n.length),n.charCodeAt(r)))}return o.a}function LUn(n,t,e,i,r){var c,a,u;if(ynn(n,t),a=t[0],c=fV(e.c,0),u=-1,Yon(e))if(i>0){if(a+i>n.length)return!1;u=UCn(n.substr(0,a+i),t)}else u=UCn(n,t);switch(c){case 71:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn]),t),r.e=u,!0;case 77:return gDn(n,t,r,u,a);case 76:return pDn(n,t,r,u,a);case 69:return rIn(n,t,a,r);case 99:return cIn(n,t,a,r);case 97:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"]),t),r.b=u,!0;case 121:return vDn(n,t,a,u,e,r);case 100:return!(u<=0||(r.c=u,0));case 83:return!(u<0)&&jwn(u,a,t[0],r);case 104:12==u&&(u=0);case 75:case 72:return!(u<0||(r.f=u,r.g=!1,0));case 107:return!(u<0||(r.f=u,r.g=!0,0));case 109:return!(u<0||(r.j=u,0));case 115:return!(u<0||(r.n=u,0));case 90:if(a<n.length&&(b1(a,n.length),90==n.charCodeAt(a)))return++t[0],r.o=0,!0;case 122:case 118:return ITn(n,a,t,r);default:return!1}}function NUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(b=BB(BB(h6(n.r,t),21),84),t!=(kUn(),oCt)&&t!=ICt){for(a=t==sCt?(Dan(),Nrt):(Dan(),Rrt),k=t==sCt?(G7(),crt):(G7(),irt),c=(r=(i=BB(oV(n.b,t),124)).i).c+Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.b,n.C.b,n.k])),v=r.c+r.b-Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.c,n.C.c,n.k])),u=Zk(H_(a),n.t),m=t==sCt?KQn:RQn,l=b.Kc();l.Ob();)!(h=BB(l.Pb(),111)).c||h.c.d.c.length<=0||(p=h.b.rf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(o=w.n,w.e.b+o.d+o.a),OY(k,uJn),w.f=k,l9(w,(J9(),Jit)),d.c=g.a-(d.b-p.a)/2,j=e.Math.min(c,g.a),E=e.Math.max(v,g.a+p.a),d.c<j?d.c=j:d.c+d.b>E&&(d.c=E-d.b),WB(u.d,new xG(d,kln(u,d))),m=t==sCt?e.Math.max(m,g.b+h.b.rf().b):e.Math.min(m,g.b));for(m+=t==sCt?n.t:-n.t,(y=Pwn((u.e=m,u)))>0&&(BB(oV(n.b,t),124).a.b=y),f=b.Kc();f.Ob();)!(h=BB(f.Pb(),111)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else aUn(n,t)}function xUn(n){var t,e,i,r,c,a,u,o,s,f;for(t=new xp,a=new AL(n);a.e!=a.i.gc();){for(c=BB(kpn(a),33),e=new Rv,VW(Mct,c,e),f=new ut,i=BB(P4(new Rq(null,new zU(new oz(ZL(wLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)])))),83),Jen(e,BB(i.xc((hN(),!0)),14),new ot),r=BB(P4(AV(BB(i.xc(!1),15).Lc(),new st),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();r.Ob();)(s=IMn(BB(r.Pb(),79)))&&((u=BB(qC(AY(t.f,s)),21))||(u=Oxn(s),jIn(t.f,s,u)),Frn(e,u));for(i=BB(P4(new Rq(null,new zU(new oz(ZL(dLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet])))),83),Jen(e,BB(i.xc(!0),14),new ht),o=BB(P4(AV(BB(i.xc(!1),15).Lc(),new ft),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();o.Ob();)(s=CMn(BB(o.Pb(),79)))&&((u=BB(qC(AY(t.f,s)),21))||(u=Oxn(s),jIn(t.f,s,u)),Frn(e,u))}}function DUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(uHn(),(o=Vhn(n,0)<0)&&(n=j7(n)),0==Vhn(n,0))switch(t){case 0:return"0";case 1:return WQn;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(b=new Ik).a+=t<0?"0E+":"0E",b.a+=t==_Vn?"2147483648":""+-t,b.a}f=x8(ONt,WVn,25,1+(h=18),15,1),e=h,d=n;do{s=d,d=Ojn(d,10),f[--e]=dG(rbn(48,ibn(s,cbn(d,10))))&QVn}while(0!=Vhn(d,0));if(r=ibn(ibn(ibn(h,e),t),1),0==t)return o&&(f[--e]=45),Bdn(f,e,h-e);if(t>0&&Vhn(r,-6)>=0){if(Vhn(r,0)>=0){for(c=e+dG(r),u=h-1;u>=c;u--)f[u+1]=f[u];return f[++c]=46,o&&(f[--e]=45),Bdn(f,e,h-e+1)}for(a=2;sS(a,rbn(j7(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,o&&(f[--e]=45),Bdn(f,e,h-e)}return w=e+1,i=h,l=new Ck,o&&(l.a+="-"),i-w>=1?(xX(l,f[e]),l.a+=".",l.a+=Bdn(f,e+1,h-e-1)):l.a+=Bdn(f,e,h-e),l.a+="E",Vhn(r,0)>0&&(l.a+="+"),l.a+=""+vz(r),l.a}function RUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(n.e.a.$b(),n.f.a.$b(),n.c.c=x8(Ant,HWn,1,0,5,1),n.i.c=x8(Ant,HWn,1,0,5,1),n.g.a.$b(),t)for(a=new Wb(t.a);a.a<a.c.c.length;)for(h=DSn(c=BB(n0(a),10),(kUn(),oCt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.e,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Iut)||u==Cut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i));if(e)for(a=new Wb(e.a);a.a<a.c.c.length;){for(o=new Wb((c=BB(n0(a),10)).j);o.a<o.c.c.length;)for(r=new Wb(BB(n0(o),11).g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))&&TU(n.g,i);for(h=DSn(c,(kUn(),ICt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.f,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Iut)||u==Cut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i))}}function KUn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(p=new xI(n.g,n.f),(g=XPn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),E=g.a/p.a,f=g.b/p.b,k=g.a-p.a,s=g.b-p.b,r)for(u=JJ(n)?BB(ZAn(JJ(n),(sWn(),bSt)),103):BB(ZAn(n,(sWn(),bSt)),103),o=GC(ZAn(n,(sWn(),uPt)))===GC((QEn(),XIt)),m=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));m.e!=m.i.gc();)switch(v=BB(kpn(m),118),(y=BB(ZAn(v,wPt),61))==(kUn(),PCt)&&(y=OFn(v,u),Ypn(v,wPt,y)),y.g){case 1:o||Pen(v,v.i*E);break;case 2:Pen(v,v.i+k),o||Ien(v,v.j*f);break;case 3:o||Pen(v,v.i*E),Ien(v,v.j+s);break;case 4:o||Ien(v,v.j*f)}if(MA(n,g.a,g.b),c)for(b=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=BB(kpn(b),137)).i+l.g/2,d=l.j+l.f/2,(j=w/p.a)+(h=d/p.b)>=1&&(j-h>0&&d>=0?(Pen(l,l.i+k),Ien(l,l.j+s*h)):j-h<0&&w>=0&&(Pen(l,l.i+k*j),Ien(l,l.j+s)));return Ypn(n,(sWn(),KSt),(mdn(),new YK(a=BB(Vj(YCt),9),BB(SR(a,a.length),9),0))),new xI(E,f)}function _Un(n){var t,i,r,c,a,u,o,s,h,f,l;if(f=JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))==JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))),u=new Gj,(t=BB(ZAn(n,(Xsn(),hIt)),74))&&t.b>=2){if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),i=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(l=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));l.e!=l.i.gc();)Qjn(l);VFn(t,BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202))}if(f)for(r=new AL((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new AL((!(i=BB(kpn(r),202)).a&&(i.a=new $L(xOt,i,5)),i.a));s.e!=s.i.gc();)o=BB(kpn(s),469),u.a=e.Math.max(u.a,o.a),u.b=e.Math.max(u.b,o.b);for(a=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));a.e!=a.i.gc();)c=BB(kpn(a),137),(h=BB(ZAn(c,gIt),8))&&SA(c,h.a,h.b),f&&(u.a=e.Math.max(u.a,c.i+c.g),u.b=e.Math.max(u.b,c.j+c.f));return u}function FUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(v=t.c.length,c=new qKn(n.a,i,null,null),E=x8(xNt,qQn,25,v,15,1),w=x8(xNt,qQn,25,v,15,1),b=x8(xNt,qQn,25,v,15,1),d=0,o=0;o<v;o++)w[o]=DWn,b[o]=_Vn;for(s=0;s<v;s++)for(l1(s,t.c.length),r=BB(t.c[s],180),E[s]=v$n(r),E[d]>E[s]&&(d=s),f=new Wb(n.a.b);f.a<f.c.c.length;)for(p=new Wb(BB(n0(f),29).a);p.a<p.c.c.length;)g=BB(n0(p),10),k=Gy(r.p[g.p])+Gy(r.d[g.p]),w[s]=e.Math.min(w[s],k),b[s]=e.Math.max(b[s],k+g.o.b);for(j=x8(xNt,qQn,25,v,15,1),h=0;h<v;h++)(l1(h,t.c.length),BB(t.c[h],180)).o==(oZ(),ryt)?j[h]=w[d]-w[h]:j[h]=b[d]-b[h];for(a=x8(xNt,qQn,25,v,15,1),l=new Wb(n.a.b);l.a<l.c.c.length;)for(y=new Wb(BB(n0(l),29).a);y.a<y.c.c.length;){for(m=BB(n0(y),10),u=0;u<v;u++)a[u]=Gy((l1(u,t.c.length),BB(t.c[u],180)).p[m.p])+Gy((l1(u,t.c.length),BB(t.c[u],180)).d[m.p])+j[u];a.sort(ien(T.prototype.te,T,[])),c.p[m.p]=(a[1]+a[2])/2,c.d[m.p]=0}return c}function BUn(n,t,e){var i,r,c,a,u;switch(i=t.i,c=n.i.o,r=n.i.d,u=n.n,a=Aon(Pun(Gk(PMt,1),sVn,8,0,[u,n.a])),n.j.g){case 1:WD(t,(G7(),irt)),i.d=-r.d-e-i.a,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jIt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 2:l9(t,(J9(),Yit)),i.c=c.a+r.c+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jIt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e);break;case 3:WD(t,(G7(),crt)),i.d=c.b+r.a+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jIt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 4:l9(t,(J9(),Jit)),i.c=-r.b-e-i.b,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jIt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e)}}function HUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O;for(w=0,S=0,s=new Wb(n);s.a<s.c.c.length;)ozn(o=BB(n0(s),33)),w=e.Math.max(w,o.g),S+=o.g*o.f;for(M=Zyn(n,S/n.c.length),S+=n.c.length*M,w=e.Math.max(w,e.Math.sqrt(S*u))+i.b,C=i.b,O=i.d,b=0,f=i.b+i.c,DH(T=new YT,iln(0)),j=new YT,h=new M2(n,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),I=(o=BB(h.d.Xb(h.c=h.b++),33)).g,l=o.f,C+I>w&&(a&&(fO(j,b),fO(T,iln(h.b-1))),C=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+I)),Pen(o,C),Ien(o,O),f=e.Math.max(f,C+I+i.c),b=e.Math.max(b,l),C+=I+t;if(f=e.Math.max(f,r),(P=O+b+i.a)<c&&(b+=c-P,P=c),a)for(C=i.b,h=new M2(n,0),fO(T,iln(n.c.length)),p=BB(b3(E=spn(T,0)),19).a,fO(j,b),k=spn(j,0),y=0;h.b<h.d.gc();)h.b==p&&(C=i.b,y=Gy(MD(b3(k))),p=BB(b3(E),19).a),Px(h.b<h.d.gc()),v=(o=BB(h.d.Xb(h.c=h.b++),33)).f,Men(o,y),d=y,h.b==p&&(g=f-C-i.c,m=o.g,Sen(o,g),lIn(o,new xI(g,d),new xI(m,v))),C+=o.g+t;return new xI(f,P)}function qUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(OTn(t,"Compound graph postprocessor",1),i=qy(TD(mMn(n,(HXn(),Dpt)))),o=BB(mMn(n,(hWn(),Hft)),224),f=new Rv,v=o.ec().Kc();v.Ob();){for(p=BB(v.Pb(),17),u=new t_(o.cc(p)),SQ(),m$(u,new _w(n)),j=ccn((l1(0,u.c.length),BB(u.c[0],243))),T=acn(BB(xq(u,u.c.length-1),243)),y=j.i,m=wan(T.i,y)?y.e:vW(y),l=Apn(p,u),yQ(p.a),b=null,a=new Wb(u);a.a<a.c.c.length;)c=BB(n0(a),243),OPn(g=new Gj,c.a,m),w=c.b,Wsn(r=new km,0,w.a),Ztn(r,g),k=new wA(g1(w.c)),E=new wA(g1(w.d)),UR(k,g),UR(E,g),b&&(0==r.b?d=E:(Px(0!=r.b),d=BB(r.a.a.c,8)),M=e.Math.abs(b.a-d.a)>lZn,S=e.Math.abs(b.b-d.b)>lZn,(!i&&M&&S||i&&(M||S))&&DH(p.a,k)),Frn(p.a,r),0==r.b?b=k:(Px(0!=r.b),b=BB(r.c.b.c,8)),Yan(w,l,g),acn(c)==T&&(vW(T.i)!=c.a&&OPn(g=new Gj,vW(T.i),m),hon(p,Rlt,g)),MSn(w,p,m),f.a.zc(w,f);SZ(p,j),MZ(p,T)}for(h=f.a.ec().Kc();h.Ob();)SZ(s=BB(h.Pb(),17),null),MZ(s,null);HSn(t)}function GUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(1==n.gc())return BB(n.Xb(0),231);if(n.gc()<=0)return new y6;for(c=n.Kc();c.Ob();){for(i=BB(c.Pb(),231),d=0,f=DWn,l=DWn,s=_Vn,h=_Vn,w=new Wb(i.e);w.a<w.c.c.length;)b=BB(n0(w),144),d+=BB(mMn(b,(fRn(),Zct)),19).a,f=e.Math.min(f,b.d.a-b.e.a/2),l=e.Math.min(l,b.d.b-b.e.b/2),s=e.Math.max(s,b.d.a+b.e.a/2),h=e.Math.max(h,b.d.b+b.e.b/2);hon(i,(fRn(),Zct),iln(d)),hon(i,(Mrn(),oat),new xI(f,l)),hon(i,uat,new xI(s,h))}for(SQ(),n.ad(new wt),qan(g=new y6,BB(n.Xb(0),94)),o=0,m=0,a=n.Kc();a.Ob();)i=BB(a.Pb(),231),p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8)),o=e.Math.max(o,p.a),m+=p.a*p.b;for(o=e.Math.max(o,e.Math.sqrt(m)*Gy(MD(mMn(g,(fRn(),Fct))))),y=0,k=0,u=0,t=v=Gy(MD(mMn(g,cat))),r=n.Kc();r.Ob();)i=BB(r.Pb(),231),y+(p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8))).a>o&&(y=0,k+=u+v,u=0),VKn(g,i,y,k),t=e.Math.max(t,y+p.a),u=e.Math.max(u,p.b),y+=p.a+v;return g}function zUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;switch(h=new km,n.a.g){case 3:l=BB(mMn(t.e,(hWn(),Nlt)),15),b=BB(mMn(t.j,Nlt),15),w=BB(mMn(t.f,Nlt),15),e=BB(mMn(t.e,$lt),15),i=BB(mMn(t.j,$lt),15),r=BB(mMn(t.f,$lt),15),gun(a=new Np,l),b.Jc(new yc),gun(a,cL(b,152)?o6(BB(b,152)):cL(b,131)?BB(b,131).a:cL(b,54)?new fy(b):new IT(b)),gun(a,w),gun(c=new Np,e),gun(c,cL(i,152)?o6(BB(i,152)):cL(i,131)?BB(i,131).a:cL(i,54)?new fy(i):new IT(i)),gun(c,r),hon(t.f,Nlt,a),hon(t.f,$lt,c),hon(t.f,xlt,t.f),hon(t.e,Nlt,null),hon(t.e,$lt,null),hon(t.j,Nlt,null),hon(t.j,$lt,null);break;case 1:Frn(h,t.e.a),DH(h,t.i.n),Frn(h,ean(t.j.a)),DH(h,t.a.n),Frn(h,t.f.a);break;default:Frn(h,t.e.a),Frn(h,ean(t.j.a)),Frn(h,t.f.a)}yQ(t.f.a),Frn(t.f.a,h),SZ(t.f,t.e.c),u=BB(mMn(t.e,(HXn(),vgt)),74),s=BB(mMn(t.j,vgt),74),o=BB(mMn(t.f,vgt),74),(u||s||o)&&(PU(f=new km,o),PU(f,s),PU(f,u),hon(t.f,vgt,f)),SZ(t.j,null),MZ(t.j,null),SZ(t.e,null),MZ(t.e,null),PZ(t.a,null),PZ(t.i,null),t.g&&zUn(n,t.g)}function UUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(PFn(),null==n)return null;if((w=bln(c=V7(n)))%4!=0)return null;if(0==(d=w/4|0))return x8(NNt,v6n,25,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,u=0,o=0,s=0,b=0,l=0,h=0,f=x8(NNt,v6n,25,3*d,15,1);b<d-1;b++){if(!(VE(a=c[h++])&&VE(u=c[h++])&&VE(o=c[h++])&&VE(s=c[h++])))return null;t=WLt[a],e=WLt[u],i=WLt[o],r=WLt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24}return VE(a=c[h++])&&VE(u=c[h++])?(t=WLt[a],e=WLt[u],o=c[h++],s=c[h++],-1==WLt[o]||-1==WLt[s]?61==o&&61==s?0!=(15&e)?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=o&&61==s?0!=(3&(i=WLt[o]))?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+2,15,1),0,3*b),g[l++]=(t<<2|e>>4)<<24>>24,g[l]=((15&e)<<4|i>>2&15)<<24>>24,g):null:(i=WLt[o],r=WLt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24,f)):null}function XUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(t,O1n,1),l=BB(mMn(n,(HXn(),Zdt)),218),i=new Wb(n.b);i.a<i.c.c.length;)for(a=0,u=(c=n2(BB(n0(i),29).a)).length;a<u;++a)if((r=c[a]).k==(uSn(),Cut)){if(l==(Mbn(),JPt))for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||Agn(o),0==o.g.c.length||$gn(o);else if(cL(mMn(r,(hWn(),dlt)),17))w=BB(mMn(r,dlt),17),d=BB(DSn(r,(kUn(),ICt)).Kc().Pb(),11),g=BB(DSn(r,oCt).Kc().Pb(),11),p=BB(mMn(d,dlt),11),SZ(w,v=BB(mMn(g,dlt),11)),MZ(w,p),(m=new wA(g.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[v.i.n,v.n,v.a])).a,DH(w.a,m),(m=new wA(d.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).a,DH(w.a,m);else{if(r.j.c.length>=2){for(b=!0,e=BB(n0(h=new Wb(r.j)),11),f=null;h.a<h.c.c.length;)if(f=e,e=BB(n0(h),11),!Nfn(mMn(f,dlt),mMn(e,dlt))){b=!1;break}}else b=!1;for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||uxn(o,b),0==o.g.c.length||oxn(o,b)}PZ(r,null)}HSn(t)}function WUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;return y=n.c[(l1(0,t.c.length),BB(t.c[0],17)).p],T=n.c[(l1(1,t.c.length),BB(t.c[1],17)).p],!(y.a.e.e-y.a.a-(y.b.e.e-y.b.a)==0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)==0||!cL(v=y.b.e.f,10)||(p=BB(v,10),j=n.i[p.p],E=p.c?E7(p.c.a,p,0):-1,a=RQn,E>0&&(c=BB(xq(p.c.a,E-1),10),u=n.i[c.p],M=e.Math.ceil(K$(n.n,c,p)),a=j.a.e-p.d.d-(u.a.e+c.o.b+c.d.a)-M),h=RQn,E<p.c.a.c.length-1&&(s=BB(xq(p.c.a,E+1),10),f=n.i[s.p],M=e.Math.ceil(K$(n.n,s,p)),h=f.a.e-s.d.d-(j.a.e+p.o.b+p.d.a)-M),!(i&&(h$(),rin(A3n),e.Math.abs(a-h)<=A3n||a==h||isNaN(a)&&isNaN(h)))&&(r=aX(y.a),o=-aX(y.b),l=-aX(T.a),m=aX(T.b),g=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)>0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)<0,d=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)<0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)>0,w=y.a.e.e+y.b.a<T.b.e.e+T.a.a,b=y.a.e.e+y.b.a>T.b.e.e+T.a.a,k=0,!g&&!d&&(b?a+l>0?k=l:h-r>0&&(k=r):w&&(a+o>0?k=o:h-m>0&&(k=m))),j.a.e+=k,j.b&&(j.d.e+=k),1)))}function VUn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(r=new UV(t.qf().a,t.qf().b,t.rf().a,t.rf().b),c=new bA,n.c)for(u=new Wb(t.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+t.qf().a,c.d=a.qf().b+t.qf().b,c.b=a.rf().a,c.a=a.rf().b,IPn(r,c);for(h=new Wb(t.Cf());h.a<h.c.c.length;){if(f=(s=BB(n0(h),838)).qf().a+t.qf().a,l=s.qf().b+t.qf().b,n.e&&(c.c=f,c.d=l,c.b=s.rf().a,c.a=s.rf().b,IPn(r,c)),n.d)for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+f,c.d=a.qf().b+l,c.b=a.rf().a,c.a=a.rf().b,IPn(r,c);if(n.b){if(b=new xI(-i,-i),BB(t.We((sWn(),fPt)),174).Hc((lCn(),rCt)))for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),b.a+=a.rf().a+i,b.b+=a.rf().b+i;b.a=e.Math.max(b.a,0),b.b=e.Math.max(b.b,0),X_n(r,s.Bf(),s.zf(),t,s,b,i)}}n.b&&X_n(r,t.Bf(),t.zf(),t,null,null,i),(o=new A_(t.Af())).d=e.Math.max(0,t.qf().b-r.d),o.a=e.Math.max(0,r.d+r.a-(t.qf().b+t.rf().b)),o.b=e.Math.max(0,t.qf().a-r.c),o.c=e.Math.max(0,r.c+r.b-(t.qf().a+t.rf().a)),t.Ef(o)}function QUn(){var n=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F"];return n[34]='\\"',n[92]="\\\\",n[173]="\\u00ad",n[1536]="\\u0600",n[1537]="\\u0601",n[1538]="\\u0602",n[1539]="\\u0603",n[1757]="\\u06dd",n[1807]="\\u070f",n[6068]="\\u17b4",n[6069]="\\u17b5",n[8203]="\\u200b",n[8204]="\\u200c",n[8205]="\\u200d",n[8206]="\\u200e",n[8207]="\\u200f",n[8232]="\\u2028",n[8233]="\\u2029",n[8234]="\\u202a",n[8235]="\\u202b",n[8236]="\\u202c",n[8237]="\\u202d",n[8238]="\\u202e",n[8288]="\\u2060",n[8289]="\\u2061",n[8290]="\\u2062",n[8291]="\\u2063",n[8292]="\\u2064",n[8298]="\\u206a",n[8299]="\\u206b",n[8300]="\\u206c",n[8301]="\\u206d",n[8302]="\\u206e",n[8303]="\\u206f",n[65279]="\\ufeff",n[65529]="\\ufff9",n[65530]="\\ufffa",n[65531]="\\ufffb",n}function YUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(o=new Np,f=t.length,a=Con(e),s=0;s<f;++s){switch(h=yN(t,YTn(61),s),c=(r=uun(i=fln(a,t.substr(s,h-s)))).Aj().Nh(),fV(t,++h)){case 39:u=lx(t,39,++h),WB(o,new IC(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 34:u=lx(t,34,++h),WB(o,new IC(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 91:WB(o,new IC(i,l=new Np));n:for(;;){switch(fV(t,++h)){case 39:u=lx(t,39,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 34:u=lx(t,34,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));l.c[l.c.length]=null,h+=3}if(!(h<f))break;switch(b1(h,t.length),t.charCodeAt(h)){case 44:break;case 93:break n;default:throw Hp(new dy("Expecting , or ]"))}}s=h+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));WB(o,new IC(i,null)),s=h+3}if(!(s<f))break;if(b1(s,t.length),44!=t.charCodeAt(s))throw Hp(new dy("Expecting ,"))}return iDn(n,o,e)}function JUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(s=BB(BB(h6(n.r,t),21),84),a=JTn(n,t),e=n.u.Hc((lCn(),nCt)),o=s.Kc();o.Ob();)if((u=BB(o.Pb(),111)).c&&!(u.c.d.c.length<=0)){switch(l=u.b.rf(),(f=(h=u.c).i).b=(c=h.n,h.e.a+c.b+c.c),f.a=(r=h.n,h.e.b+r.d+r.a),t.g){case 1:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=-f.a-n.t,WD(h,(G7(),irt));break;case 3:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=l.b+n.t,WD(h,(G7(),crt));break;case 2:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=l.a+n.s,l9(h,(J9(),Yit));break;case 4:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=-f.b-n.s,l9(h,(J9(),Jit))}a=!1}}function ZUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(wWn(),0==NT(iNt)){for(f=x8(CNt,sVn,117,cNt.length,0,1),a=0;a<f.length;a++)f[a]=new M0(4);for(i=new Pk,c=0;c<eNt.length;c++){if(h=new M0(4),c<84?(b1(u=2*c,vnt.length),l=vnt.charCodeAt(u),b1(u+1,vnt.length),Yxn(h,l,vnt.charCodeAt(u+1))):Yxn(h,aNt[u=2*(c-84)],aNt[u+1]),mK(o=eNt[c],"Specials")&&Yxn(h,65520,65533),mK(o,gnt)&&(Yxn(h,983040,1048573),Yxn(h,1048576,1114109)),mZ(iNt,o,h),mZ(rNt,o,$Fn(h)),0<(s=i.a.length)?i.a=i.a.substr(0,0):0>s&&(i.a+=rL(x8(ONt,WVn,25,-s,15,1))),i.a+="Is",GO(o,YTn(32))>=0)for(r=0;r<o.length;r++)b1(r,o.length),32!=o.charCodeAt(r)&&NX(i,(b1(r,o.length),o.charCodeAt(r)));else i.a+=""+o;Tdn(i.a,o,!0)}Tdn(pnt,"Cn",!1),Tdn(mnt,"Cn",!0),Yxn(e=new M0(4),0,unt),mZ(iNt,"ALL",e),mZ(rNt,"ALL",$Fn(e)),!SNt&&(SNt=new xp),mZ(SNt,pnt,pnt),!SNt&&(SNt=new xp),mZ(SNt,mnt,mnt),!SNt&&(SNt=new xp),mZ(SNt,"ALL","ALL")}return BB(SJ(t?iNt:rNt,n),136)}function nXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=!1,f=!1,vA(BB(mMn(i,(HXn(),ept)),98))){a=!1,u=!1;n:for(w=new Wb(i.j);w.a<w.c.c.length;)for(b=BB(n0(w),11),d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(b),new Gw(b)])));dAn(d);)if(!qy(TD(mMn(BB(U5(d),11).i,Tdt)))){if(b.j==(kUn(),sCt)){a=!0;break n}if(b.j==SCt){u=!0;break n}}l=u&&!a,f=a&&!u}if(l||f||0==i.b.c.length)p=!f;else{for(h=0,s=new Wb(i.b);s.a<s.c.c.length;)h+=(o=BB(n0(s),70)).n.b+o.o.b/2;p=(h/=i.b.c.length)>=i.o.b/2}p?(g=BB(mMn(i,(hWn(),Klt)),15))?l?c=g:(r=BB(mMn(i,Dft),15))?c=g.gc()<=r.gc()?g:r:(c=new Np,hon(i,Dft,c)):(c=new Np,hon(i,Klt,c)):(r=BB(mMn(i,(hWn(),Dft)),15))?f?c=r:(g=BB(mMn(i,Klt),15))?c=r.gc()<=g.gc()?r:g:(c=new Np,hon(i,Klt,c)):(c=new Np,hon(i,Dft,c)),c.Fc(n),hon(n,(hWn(),Kft),e),t.d==e?(MZ(t,null),e.e.c.length+e.g.c.length==0&&IZ(e,null),gsn(e)):(SZ(t,null),e.e.c.length+e.g.c.length==0&&IZ(e,null)),yQ(t.a)}function tXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C;for(v=new M2(n.b,0),d=0,s=BB((f=t.Kc()).Pb(),19).a,k=0,e=new Rv,E=new fA;v.b<v.d.gc();){for(Px(v.b<v.d.gc()),y=new Wb(BB(v.d.Xb(v.c=v.b++),29).a);y.a<y.c.c.length;){for(w=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(w);)l=BB(U5(w),17),E.a.zc(l,E);for(b=new oz(ZL(fbn(m).a.Kc(),new h));dAn(b);)l=BB(U5(b),17),E.a.Bc(l)}if(d+1==s){for(yR(v,r=new HX(n)),yR(v,c=new HX(n)),M=E.a.ec().Kc();M.Ob();)T=BB(M.Pb(),17),e.a._b(T)||(++k,e.a.zc(T,e)),hon(a=new $vn(n),(HXn(),ept),(QEn(),VIt)),PZ(a,r),Bl(a,(uSn(),Tut)),IZ(g=new ISn,a),qIn(g,(kUn(),ICt)),IZ(S=new ISn,a),qIn(S,oCt),hon(i=new $vn(n),ept,VIt),PZ(i,c),Bl(i,Tut),IZ(p=new ISn,i),qIn(p,ICt),IZ(P=new ISn,i),qIn(P,oCt),SZ(j=new wY,T.c),MZ(j,g),SZ(C=new wY,S),MZ(C,p),SZ(T,P),u=new v3(a,i,j,C,T),hon(a,(hWn(),Rft),u),hon(i,Rft,u),(I=j.c.i).k==Tut&&((o=BB(mMn(I,Rft),305)).d=u,u.g=o);if(!f.Ob())break;s=BB(f.Pb(),19).a}++d}return iln(k)}function eXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(f=0,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)qy(TD(ZAn(i=BB(kpn(r),33),(HXn(),Ggt))))||(GC(ZAn(t,Ldt))===GC((mon(),Nvt))&&GC(ZAn(t,Gdt))!==GC((Vvn(),Eht))&&GC(ZAn(t,Gdt))!==GC((Vvn(),kht))&&!qy(TD(ZAn(t,xdt)))&&GC(ZAn(t,Idt))===GC((Bfn(),wut))||qy(TD(ZAn(i,$dt)))||(Ypn(i,(hWn(),wlt),iln(f)),++f),wzn(n,i,e));for(f=0,s=new AL((!t.b&&(t.b=new eU(_Ot,t,12,3)),t.b));s.e!=s.i.gc();)u=BB(kpn(s),79),(GC(ZAn(t,(HXn(),Ldt)))!==GC((mon(),Nvt))||GC(ZAn(t,Gdt))===GC((Vvn(),Eht))||GC(ZAn(t,Gdt))===GC((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GC(ZAn(t,Idt))!==GC((Bfn(),wut)))&&(Ypn(u,(hWn(),wlt),iln(f)),++f),w=PMn(u),d=OMn(u),h=qy(TD(ZAn(w,wgt))),b=!qy(TD(ZAn(u,Ggt))),l=h&&QCn(u)&&qy(TD(ZAn(u,dgt))),c=JJ(w)==t&&JJ(w)==JJ(d),a=(JJ(w)==t&&d==t)^(JJ(d)==t&&w==t),b&&!l&&(a||c)&&uWn(n,u,t,e);if(JJ(t))for(o=new AL(iQ(JJ(t)));o.e!=o.i.gc();)(w=PMn(u=BB(kpn(o),79)))==t&&QCn(u)&&(l=qy(TD(ZAn(w,(HXn(),wgt))))&&qy(TD(ZAn(u,dgt))))&&uWn(n,u,t,e)}function iXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A;for(OTn(i,"MinWidth layering",1),w=t.b,T=t.a,A=BB(mMn(t,(HXn(),Egt)),19).a,o=BB(mMn(t,Tgt),19).a,n.b=Gy(MD(mMn(t,ypt))),n.d=RQn,k=new Wb(T);k.a<k.c.c.length;)(m=BB(n0(k),10)).k==(uSn(),Iut)&&(P=m.o.b,n.d=e.Math.min(n.d,P));for(n.d=e.Math.max(1,n.d),M=T.c.length,n.c=x8(ANt,hQn,25,M,15,1),n.f=x8(ANt,hQn,25,M,15,1),n.e=x8(xNt,qQn,25,M,15,1),h=0,n.a=0,j=new Wb(T);j.a<j.c.c.length;)(m=BB(n0(j),10)).p=h++,n.c[m.p]=whn(fbn(m)),n.f[m.p]=whn(lbn(m)),n.e[m.p]=m.o.b/n.d,n.a+=n.e[m.p];for(n.b/=n.d,n.a/=M,E=jOn(T),m$(T,QW(new Kd(n))),g=RQn,d=DWn,u=null,O=A,C=A,a=o,c=o,A<0&&(O=BB(Tmt.a.zd(),19).a,C=BB(Tmt.b.zd(),19).a),o<0&&(a=BB(Emt.a.zd(),19).a,c=BB(Emt.b.zd(),19).a),I=O;I<=C;I++)for(r=a;r<=c;r++)v=Gy(MD((S=LBn(n,I,r,T,E)).a)),p=(b=BB(S.b,15)).gc(),(v<g||v==g&&p<d)&&(g=v,d=p,u=b);for(l=u.Kc();l.Ob();){for(f=BB(l.Pb(),15),s=new HX(t),y=f.Kc();y.Ob();)PZ(m=BB(y.Pb(),10),s);w.c[w.c.length]=s}JPn(w),T.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function rXn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(n.b=t,n.a=BB(mMn(t,(HXn(),hgt)),19).a,n.c=BB(mMn(t,lgt),19).a,0==n.c&&(n.c=DWn),g=new M2(t.b,0);g.b<g.d.gc();){for(Px(g.b<g.d.gc()),d=BB(g.d.Xb(g.c=g.b++),29),o=new Np,l=-1,y=-1,m=new Wb(d.a);m.a<m.c.c.length;)v=BB(n0(m),10),F3((q_(),new oz(ZL(hbn(v).a.Kc(),new h))))>=n.a&&(r=yBn(n,v),l=e.Math.max(l,r.b),y=e.Math.max(y,r.d),WB(o,new rC(v,r)));for(E=new Np,f=0;f<l;++f)kG(E,0,(Px(g.b>0),g.a.Xb(g.c=--g.b),yR(g,T=new HX(n.b)),Px(g.b<g.d.gc()),g.d.Xb(g.c=g.b++),T));for(u=new Wb(o);u.a<u.c.c.length;)if(c=BB(n0(u),46),w=BB(c.b,571).a)for(b=new Wb(w);b.a<b.c.c.length;)ukn(n,BB(n0(b),10),Uut,E);for(i=new Np,s=0;s<y;++s)WB(i,(yR(g,M=new HX(n.b)),M));for(a=new Wb(o);a.a<a.c.c.length;)if(c=BB(n0(a),46),j=BB(c.b,571).c)for(k=new Wb(j);k.a<k.c.c.length;)ukn(n,BB(n0(k),10),Xut,i)}for(p=new M2(t.b,0);p.b<p.d.gc();)Px(p.b<p.d.gc()),0==BB(p.d.Xb(p.c=p.b++),29).a.c.length&&fW(p)}function cXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I;if(OTn(i,"Spline edge routing",1),0==t.b.c.length)return t.f.a=0,void HSn(i);v=Gy(MD(mMn(t,(HXn(),Apt)))),o=Gy(MD(mMn(t,Tpt))),u=Gy(MD(mMn(t,kpt))),T=BB(mMn(t,rgt),336)==(Usn(),rmt),E=Gy(MD(mMn(t,cgt))),n.d=t,n.j.c=x8(Ant,HWn,1,0,5,1),n.a.c=x8(Ant,HWn,1,0,5,1),$U(n.k),f=VC((s=BB(xq(t.b,0),29)).a,(dxn(),jyt)),l=VC((d=BB(xq(t.b,t.b.c.length-1),29)).a,jyt),g=new Wb(t.b),p=null,I=0;do{for(RUn(n,p,m=g.a<g.c.c.length?BB(n0(g),29):null),MFn(n),P=0,y=I,b=!p||f&&p==s,w=!m||l&&m==d,(M=_k(rcn(NV(AV(new Rq(null,new w1(n.i,16)),new ya),new ma))))>0?(h=0,p&&(h+=o),h+=(M-1)*u,m&&(h+=o),T&&m&&(h=e.Math.max(h,nxn(m,u,v,E))),h<v&&!b&&!w&&(P=(v-h)/2,h=v),y+=h):!b&&!w&&(y+=v),m&&Tqn(m,y),j=new Wb(n.i);j.a<j.c.c.length;)(k=BB(n0(j),128)).a.c=I,k.a.b=y-I,k.F=P,k.p=!p;gun(n.a,n.i),I=y,m&&(I+=m.c.a),p=m,b=w}while(m);for(c=new Wb(n.j);c.a<c.c.c.length;)a=man(n,r=BB(n0(c),17)),hon(r,(hWn(),$lt),a),S=Dxn(n,r),hon(r,Nlt,S);t.f.a=I,n.d=null,HSn(i)}function aXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(d=0!=n.i,v=!1,g=null,mA(n.e)){if((h=t.gc())>0){for(l=h<100?null:new Fj(h),w=(s=new jcn(t)).g,g=x8(ANt,hQn,25,h,15,1),i=0,m=new gtn(h),r=0;r<n.i;++r){b=u=n.g[r];n:for(p=0;p<2;++p){for(o=h;--o>=0;)if(null!=b?Nfn(b,w[o]):GC(b)===GC(w[o])){g.length<=i&&aHn(g,0,g=x8(ANt,hQn,25,2*g.length,15,1),0,i),g[i++]=r,f9(m,w[o]);break n}if(GC(b)===GC(u))break}}if(s=m,w=m.g,h=i,i>g.length&&aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i),i>0){for(v=!0,c=0;c<i;++c)l=zK(n,BB(b=w[c],72),l);for(a=i;--a>=0;)Lyn(n,g[a]);if(i!=h){for(r=h;--r>=i;)Lyn(s,r);aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i)}t=s}}}else for(t=jyn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(Lyn(n,r),v=!0);if(v){if(null!=g){for(f=1==(e=t.gc())?yZ(n,4,t.Kc().Pb(),null,g[0],d):yZ(n,6,t,g,g[0],d),l=e<100?null:new Fj(e),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l?(l.Ei(f),l.Fi()):ban(n.e,f)}else{for(l=$K(t.gc()),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l&&l.Fi()}return!0}return!1}function uXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m;for((e=new hvn(t)).a||g_n(t),s=lRn(t),o=new pJ,g=new Qxn,d=new Wb(t.a);d.a<d.c.c.length;)for(r=new oz(ZL(lbn(BB(n0(d),10)).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c.i.k!=(uSn(),Mut)&&i.d.i.k!=Mut||JCn(o,upn((f=lzn(n,i,s,g)).d),f.a);for(a=new Np,m=BB(mMn(e.c,(hWn(),Xft)),21).Kc();m.Ob();){switch(v=BB(m.Pb(),61),w=g.c[v.g],b=g.b[v.g],u=g.a[v.g],c=null,p=null,v.g){case 4:c=new UV(n.d.a,w,s.b.a-n.d.a,b-w),p=new UV(n.d.a,w,u,b-w),zH(s,new xI(c.c+c.b,c.d)),zH(s,new xI(c.c+c.b,c.d+c.a));break;case 2:c=new UV(s.a.a,w,n.c.a-s.a.a,b-w),p=new UV(n.c.a-u,w,u,b-w),zH(s,new xI(c.c,c.d)),zH(s,new xI(c.c,c.d+c.a));break;case 1:c=new UV(w,n.d.b,b-w,s.b.b-n.d.b),p=new UV(w,n.d.b,b-w,u),zH(s,new xI(c.c,c.d+c.a)),zH(s,new xI(c.c+c.b,c.d+c.a));break;case 3:c=new UV(w,s.a.b,b-w,n.c.b-s.a.b),p=new UV(w,n.c.b-u,b-w,u),zH(s,new xI(c.c,c.d)),zH(s,new xI(c.c+c.b,c.d))}c&&((l=new nm).d=v,l.b=c,l.c=p,l.a=JQ(BB(h6(o,upn(v)),21)),a.c[a.c.length]=l)}return gun(e.b,a),e.d=Bhn(nGn(s)),e}function oXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(null==i.p[t.p]){o=!0,i.p[t.p]=0,u=t,d=i.o==(oZ(),ryt)?KQn:RQn;do{c=n.b.e[u.p],a=u.c.a.c.length,i.o==ryt&&c>0||i.o==cyt&&c<a-1?(s=null,h=null,s=i.o==cyt?BB(xq(u.c.a,c+1),10):BB(xq(u.c.a,c-1),10),oXn(n,h=i.g[s.p],i),d=n.e.bg(d,t,u),i.j[t.p]==t&&(i.j[t.p]=i.j[h.p]),i.j[t.p]==i.j[h.p]?(w=K$(n.d,u,s),i.o==cyt?(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d-w-u.d.a-u.o.b-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.min(l,d)):i.p[t.p]=e.Math.min(r,e.Math.min(l,d))):(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])+s.o.b+s.d.a+w+u.d.d-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.max(l,d)):i.p[t.p]=e.Math.max(r,e.Math.max(l,d)))):(w=Gy(MD(mMn(n.a,(HXn(),Opt)))),b=krn(n,i.j[t.p]),f=krn(n,i.j[h.p]),i.o==cyt?U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])+u.o.b+u.d.a+w-(Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d)):U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])-u.d.d-Gy(i.p[h.p])-Gy(i.d[s.p])-s.o.b-s.d.a-w))):d=n.e.bg(d,t,u),u=i.a[u.p]}while(u!=t);Ov(n.e,t)}}function sXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(f=t,h=new pJ,l=new pJ,c=N2(f,x6n),GSn((i=new fQ(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new HL(h,h.c))).Kc();d.Ob();)for(w=BB(d.Pb(),202),u=BB(h6(h,w),21).Kc();u.Ob();){if(a=u.Pb(),!(b=BB(sen(n.d,a),202)))throw r=R2(f,q6n),Hp(new ek(V6n+a+Q6n+r+W6n));!w.e&&(w.e=new hK(FOt,w,10,9)),f9(w.e,b)}for(p=(l.i||(l.i=new HL(l,l.c))).Kc();p.Ob();)for(g=BB(p.Pb(),202),s=BB(h6(l,g),21).Kc();s.Ob();){if(o=s.Pb(),!(b=BB(sen(n.d,o),202)))throw r=R2(f,q6n),Hp(new ek(V6n+o+Q6n+r+W6n));!g.g&&(g.g=new hK(FOt,g,9,10)),f9(g.g,b)}!e.b&&(e.b=new hK(KOt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new hK(KOt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new hK(KOt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new hK(KOt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new eU(FOt,e,6,6)),e.a).i&&(Svn(v=BB(Wtn((!e.a&&(e.a=new eU(FOt,e,6,6)),e.a),0),202))||Pvn(v)||(Lin(v,BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),Nin(v,BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82))))}function hXn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,k=(m=n.a).length;y<k;++y){for(v=m[y],s=DWn,h=DWn,w=new Wb(v.e);w.a<w.c.c.length;)(a=(l=BB(n0(w),10)).c?E7(l.c.a,l,0):-1)>0?(f=BB(xq(l.c.a,a-1),10),T=K$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+T)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a<l.c.a.c.length-1?(f=BB(xq(l.c.a,a+1),10),T=K$(n.b,l,f),p=f.n.b-f.d.d-(l.n.b+l.o.b+l.d.a+T)):p=2*l.n.b,h=e.Math.min(p,h);for(o=DWn,c=!1,S=new Wb((r=BB(xq(v.e,0),10)).j);S.a<S.c.c.length;)for(M=BB(n0(S),11),d=r.n.b+M.n.b+M.a.b,i=new Wb(M.e);i.a<i.c.c.length;)t=(j=BB(n0(i),17).c).i.n.b+j.n.b+j.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);for(E=new Wb((u=BB(xq(v.e,v.e.c.length-1),10)).j);E.a<E.c.c.length;)for(j=BB(n0(E),11),d=u.n.b+j.n.b+j.a.b,i=new Wb(j.g);i.a<i.c.c.length;)t=(M=BB(n0(i),17).d).i.n.b+M.n.b+M.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);if(c&&0!=o)for(b=new Wb(v.e);b.a<b.c.c.length;)(l=BB(n0(b),10)).n.b+=o}}function fXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.e,t)){if(FT(BB(RX(n.e,t),53),e))return-1}else VW(n.e,t,new Rv);if(hU(n.e,e)){if(FT(BB(RX(n.a,e),53),t))return 1}else VW(n.e,e,new Rv);if(n.c==(mon(),xvt)||!Lx(t,(hWn(),wlt))||!Lx(e,(hWn(),wlt))){if(o=BB(EN(M4(Qon(AV(new Rq(null,new w1(t.j,16)),new sc)),new hc)),11),h=BB(EN(M4(Qon(AV(new Rq(null,new w1(e.j,16)),new fc)),new lc)),11),o&&h){if(u=o.i,s=h.i,u&&u==s){for(l=new Wb(u.j);l.a<l.c.c.length;){if((f=BB(n0(l),11))==o)return aKn(n,e,t),-1;if(f==h)return aKn(n,t,e),1}return E$(iEn(n,t),iEn(n,e))}for(d=0,g=(w=n.d).length;d<g;++d){if((b=w[d])==u)return aKn(n,e,t),-1;if(b==s)return aKn(n,t,e),1}}if(!Lx(t,(hWn(),wlt))||!Lx(e,wlt))return(r=iEn(n,t))>(a=iEn(n,e))?aKn(n,t,e):aKn(n,e,t),r<a?-1:r>a?1:0}return(i=BB(mMn(t,(hWn(),wlt)),19).a)>(c=BB(mMn(e,wlt),19).a)?aKn(n,t,e):aKn(n,e,t),i<c?-1:i>c?1:0}function lXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(qy(TD(ZAn(t,(sWn(),zSt)))))return SQ(),SQ(),set;if(o=0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,s=!(h=yCn(t)).dc(),o||s){if(!(r=BB(ZAn(t,mPt),149)))throw Hp(new rk("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(d=OI(r,(hAn(),nAt)),Ngn(t),!o&&s&&!d)return SQ(),SQ(),set;if(u=new Np,GC(ZAn(t,ESt))===GC((ufn(),pIt))&&(OI(r,YOt)||OI(r,QOt)))for(l=pRn(n,t),Frn(b=new YT,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=b.b;)Ngn(f=BB(0==b.b?null:(Px(0!=b.b),Atn(b,b.a.a)),33)),GC(ZAn(f,ESt))===GC(mIt)||P8(f,eSt)&&!j5(r,ZAn(f,mPt))?(gun(u,lXn(n,f,e,i)),Ypn(f,ESt,mIt),KKn(f)):Frn(b,(!f.a&&(f.a=new eU(UOt,f,10,11)),f.a));else for(l=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,a=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));a.e!=a.i.gc();)gun(u,lXn(n,c=BB(kpn(a),33),e,i)),KKn(c);for(w=new Wb(u);w.a<w.c.c.length;)Ypn(BB(n0(w),79),zSt,(hN(),!0));return Ugn(t,r,mcn(i,l)),w_n(u),s&&d?h:(SQ(),SQ(),set)}return SQ(),SQ(),set}function bXn(n,t,e,i,r,c,a,u,o){var s,h,f,l,b,w,d;switch(b=e,Bl(h=new $vn(o),(uSn(),Mut)),hon(h,(hWn(),Yft),a),hon(h,(HXn(),ept),(QEn(),XIt)),d=Gy(MD(n.We(tpt))),hon(h,tpt,d),IZ(f=new ISn,h),t!=QIt&&t!=YIt||(b=i>=0?hwn(u):Tln(hwn(u)),n.Ye(upt,b)),s=new Gj,l=!1,n.Xe(npt)?(Hx(s,BB(n.We(npt),8)),l=!0):yL(s,a.a/2,a.b/2),b.g){case 4:hon(h,kgt,(Tbn(),Flt)),hon(h,Gft,(Jun(),$ht)),h.o.b=a.b,d<0&&(h.o.a=-d),qIn(f,(kUn(),oCt)),l||(s.a=a.a),s.a-=a.a;break;case 2:hon(h,kgt,(Tbn(),Hlt)),hon(h,Gft,(Jun(),Oht)),h.o.b=a.b,d<0&&(h.o.a=-d),qIn(f,(kUn(),ICt)),l||(s.a=0);break;case 1:hon(h,ilt,(z7(),Ift)),h.o.a=a.a,d<0&&(h.o.b=-d),qIn(f,(kUn(),SCt)),l||(s.b=a.b),s.b-=a.b;break;case 3:hon(h,ilt,(z7(),Sft)),h.o.a=a.a,d<0&&(h.o.b=-d),qIn(f,(kUn(),sCt)),l||(s.b=0)}if(Hx(f.n,s),hon(h,npt,s),t==UIt||t==WIt||t==XIt){if(w=0,t==UIt&&n.Xe(ipt))switch(b.g){case 1:case 2:w=BB(n.We(ipt),19).a;break;case 3:case 4:w=-BB(n.We(ipt),19).a}else switch(b.g){case 4:case 2:w=c.b,t==WIt&&(w/=r.b);break;case 1:case 3:w=c.a,t==WIt&&(w/=r.a)}hon(h,Tlt,w)}return hon(h,Qft,b),h}function wXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E;if((e=Gy(MD(mMn(n.a.j,(HXn(),_dt)))))<-1||!n.a.i||LK(BB(mMn(n.a.o,ept),98))||abn(n.a.o,(kUn(),oCt)).gc()<2&&abn(n.a.o,ICt).gc()<2)return!0;if(n.a.c.Rf())return!1;for(y=0,m=0,v=new Np,o=0,s=(u=n.a.e).length;o<s;++o){for(b=0,d=(l=u[o]).length;b<d;++b)if((f=l[b]).k!=(uSn(),Cut)){for(i=n.b[f.c.p][f.p],f.k==Mut?(i.b=1,BB(mMn(f,(hWn(),dlt)),11).j==(kUn(),oCt)&&(m+=i.a)):(E=abn(f,(kUn(),ICt))).dc()||!tL(E,new Nc)?i.c=1:((r=abn(f,oCt)).dc()||!tL(r,new Lc))&&(y+=i.a),a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);for(j=new oz(new WL((g=Wen(Pun(Gk(xnt,1),HWn,20,0,[abn(f,(kUn(),sCt)),abn(f,SCt)]))).a.length,g.a));dAn(j);)k=BB(U5(j),11),(p=BB(mMn(k,(hWn(),Elt)),10))&&(y+=i.c,m+=i.b,X8(n,i,p))}else v.c[v.c.length]=f;for(w=new Wb(v);w.a<w.c.c.length;)for(f=BB(n0(w),10),i=n.b[f.c.p][f.p],a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);v.c=x8(Ant,HWn,1,0,5,1)}return(0==(t=y+m)?RQn:(y-m)/t)>=e}function dXn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=Swn((SQ(),new Hb(new Ob(lAt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=Swn((SQ(),new Hb(new Ob(lAt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=Swn((SQ(),new Hb(new Ob(lAt.d))));n.postMessage({id:e.id,data:c});break;case"register":lGn(e.algorithms),n.postMessage({id:e.id});break;case"layout":xBn(e.graph,e.layoutOptions||{},e.options||{}),n.postMessage({id:e.id,data:e.graph})}},this.saveDispatch=function(e){try{t.dispatch(e)}catch(i){n.postMessage({id:e.data.id,error:i})}}}function e(t){var e=this;this.dispatcher=new n({postMessage:function(n){e.onmessage({data:n})}}),this.postMessage=function(n){setTimeout((function(){e.dispatcher.saveDispatch({data:n})}),0)}}if(aE(),typeof document===gYn&&typeof self!==gYn){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==gYn&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function gXn(n){n.N||(n.N=!0,n.b=kan(n,0),Rrn(n.b,0),Rrn(n.b,1),Rrn(n.b,2),n.bb=kan(n,1),Rrn(n.bb,0),Rrn(n.bb,1),n.fb=kan(n,2),Rrn(n.fb,3),Rrn(n.fb,4),Krn(n.fb,5),n.qb=kan(n,3),Rrn(n.qb,0),Krn(n.qb,1),Krn(n.qb,2),Rrn(n.qb,3),Rrn(n.qb,4),Krn(n.qb,5),Rrn(n.qb,6),n.a=jan(n,4),n.c=jan(n,5),n.d=jan(n,6),n.e=jan(n,7),n.f=jan(n,8),n.g=jan(n,9),n.i=jan(n,10),n.j=jan(n,11),n.k=jan(n,12),n.n=jan(n,13),n.o=jan(n,14),n.p=jan(n,15),n.q=jan(n,16),n.s=jan(n,17),n.r=jan(n,18),n.t=jan(n,19),n.u=jan(n,20),n.v=jan(n,21),n.w=jan(n,22),n.B=jan(n,23),n.A=jan(n,24),n.C=jan(n,25),n.D=jan(n,26),n.F=jan(n,27),n.G=jan(n,28),n.H=jan(n,29),n.J=jan(n,30),n.I=jan(n,31),n.K=jan(n,32),n.M=jan(n,33),n.L=jan(n,34),n.P=jan(n,35),n.Q=jan(n,36),n.R=jan(n,37),n.S=jan(n,38),n.T=jan(n,39),n.U=jan(n,40),n.V=jan(n,41),n.X=jan(n,42),n.W=jan(n,43),n.Y=jan(n,44),n.Z=jan(n,45),n.$=jan(n,46),n._=jan(n,47),n.ab=jan(n,48),n.cb=jan(n,49),n.db=jan(n,50),n.eb=jan(n,51),n.gb=jan(n,52),n.hb=jan(n,53),n.ib=jan(n,54),n.jb=jan(n,55),n.kb=jan(n,56),n.lb=jan(n,57),n.mb=jan(n,58),n.nb=jan(n,59),n.ob=jan(n,60),n.pb=jan(n,61))}function pXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.a)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.a+d.o.a+d.d.c);else m=t.f.a-t.c.a;for(m-=t.c.a,g=new Wb(n);g.a<g.c.c.length;){switch(Zp((d=BB(n0(g),10)).n,m-d.o.a),cH(d.f),Vmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Zp(BB(mMn(d,spt),8),m-d.o.a),BB(mMn(d,kdt),248).g){case 1:hon(d,kdt,(wvn(),$Mt));break;case 2:hon(d,kdt,(wvn(),AMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Zp((y=BB(n0(k),11)).n,v.a-y.o.a),Zp(y.a,y.o.a),qIn(y,Ccn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a=m-i.a;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).a=m-o.a;for(b=new Wb(c.b);b.a<b.c.c.length;)Zp((f=BB(n0(b),70)).n,m-f.o.a)}for(w=new Wb(y.f);w.a<w.c.c.length;)Zp((f=BB(n0(w),70)).n,y.o.a-f.o.a)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Ccn(BB(mMn(d,Qft),61))),YMn(d)),l=new Wb(d.b);l.a<l.c.c.length;)Vmn(f=BB(n0(l),70)),Zp(f.n,v.a-f.o.a)}}function vXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.b)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.b+d.o.b+d.d.a);else m=t.f.b-t.c.b;for(m-=t.c.b,g=new Wb(n);g.a<g.c.c.length;){switch(Jp((d=BB(n0(g),10)).n,m-d.o.b),aH(d.f),Qmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Jp(BB(mMn(d,spt),8),m-d.o.b),BB(mMn(d,kdt),248).g){case 3:hon(d,kdt,(wvn(),CMt));break;case 4:hon(d,kdt,(wvn(),LMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Jp((y=BB(n0(k),11)).n,v.b-y.o.b),Jp(y.a,y.o.b),qIn(y,Ocn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).b=m-i.b;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).b=m-o.b;for(b=new Wb(c.b);b.a<b.c.c.length;)Jp((f=BB(n0(b),70)).n,m-f.o.b)}for(w=new Wb(y.f);w.a<w.c.c.length;)Jp((f=BB(n0(w),70)).n,y.o.b-f.o.b)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Ocn(BB(mMn(d,Qft),61))),gln(d)),l=new Wb(d.b);l.a<l.c.c.length;)Qmn(f=BB(n0(l),70)),Jp(f.n,v.b-f.o.b)}}function mXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(f=!1,s=n+1,l1(n,t.c.length),a=(h=BB(t.c[n],200)).a,u=null,c=0;c<h.a.c.length;c++)if(l1(c,a.c.length),!(r=BB(a.c[c],187)).c)if(0!=r.b.c.length){if(r.k||(u&&Gmn(u),Tvn(r,(u=new KJ(u?u.e+u.d+i:0,h.f,i)).e+u.d,h.f),WB(h.d,u),xcn(u,r),r.k=!0),o=null,b=null,c<h.a.c.length-1?b=BB(xq(h.a,c+1),187):s<t.c.length&&0!=(l1(s,t.c.length),BB(t.c[s],200)).a.c.length&&(b=BB(xq((l1(s,t.c.length),BB(t.c[s],200)).a,0),187)),l=!1,(o=b)&&(l=!Nfn(o.j,h)),o){if(0==o.b.c.length){Tkn(h,o);break}if(p9(r,e-r.s),Gmn(r.q),f|=nSn(h,r,o,e,i),0==o.b.c.length)for(Tkn((l1(s,t.c.length),BB(t.c[s],200)),o),o=null;t.c.length>s&&0==(l1(s,t.c.length),BB(t.c[s],200)).a.c.length;)y7(t,(l1(s,t.c.length),t.c[s]));if(!o){--c;continue}if(A_n(t,h,r,o,l,e,s,i)){f=!0;continue}if(l){if(JBn(t,h,r,o,e,s,i)){f=!0;continue}if(Ahn(h,r)){r.c=!0,f=!0;continue}}else if(Ahn(h,r)){r.c=!0,f=!0;continue}if(f)continue}Ahn(h,r)?(r.c=!0,f=!0,o&&(o.k=!1)):Gmn(r.q)}else $T(),Tkn(h,r),--c,f=!0;return f}function yXn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A;for(g=0,P=0,h=new Wb(n.b);h.a<h.c.c.length;)(s=BB(n0(h),157)).c&&ozn(s.c),g=e.Math.max(g,iG(s)),P+=iG(s)*eG(s);for(p=P/n.b.c.length,S=hjn(n.b,p),P+=n.b.c.length*S,g=e.Math.max(g,e.Math.sqrt(P*u))+i.b,O=i.b,A=i.d,w=0,l=i.b+i.c,DH(M=new YT,iln(0)),E=new YT,f=new M2(n.b,0),d=null,o=new Np;f.b<f.d.gc();)Px(f.b<f.d.gc()),C=iG(s=BB(f.d.Xb(f.c=f.b++),157)),b=eG(s),O+C>g&&(a&&(fO(E,w),fO(M,iln(f.b-1)),WB(n.d,d),o.c=x8(Ant,HWn,1,0,5,1)),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+C)),o.c[o.c.length]=s,Mpn(s,O,A),l=e.Math.max(l,O+C+i.c),w=e.Math.max(w,b),O+=C+t,d=s;if(gun(n.a,o),WB(n.d,BB(xq(o,o.c.length-1),157)),l=e.Math.max(l,r),(I=A+w+i.a)<c&&(w+=c-I,I=c),a)for(O=i.b,f=new M2(n.b,0),fO(M,iln(n.b.c.length)),m=BB(b3(T=spn(M,0)),19).a,fO(E,w),j=spn(E,0),k=0;f.b<f.d.gc();)f.b==m&&(O=i.b,k=Gy(MD(b3(j))),m=BB(b3(T),19).a),Px(f.b<f.d.gc()),Udn(s=BB(f.d.Xb(f.c=f.b++),157),k),f.b==m&&(v=l-O-i.c,y=iG(s),zdn(s,v),Fln(s,(v-y)/2,0)),O+=iG(s)+t;return new xI(l,I)}function kXn(n){var t,e,i,r;switch(r=null,n.c){case 6:return n.Vl();case 13:return n.Wl();case 23:return n.Nl();case 22:return n.Sl();case 18:return n.Pl();case 8:QXn(n),wWn(),r=oNt;break;case 9:return n.vl(!0);case 19:return n.wl();case 10:switch(n.a){case 100:case 68:case 119:case 87:case 115:case 83:return r=n.ul(n.a),QXn(n),r;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:(t=n.tl())<BQn?(wWn(),wWn(),r=new oG(0,t)):r=pz(Xln(t));break;case 99:return n.Fl();case 67:return n.Al();case 105:return n.Il();case 73:return n.Bl();case 103:return n.Gl();case 88:return n.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n.xl();case 80:case 112:if(!(r=DCn(n,n.a)))throw Hp(new ak(kWn((u$(),O8n))));break;default:r=QH(n.a)}QXn(n);break;case 0:if(93==n.a||123==n.a||125==n.a)throw Hp(new ak(kWn((u$(),C8n))));r=QH(n.a),e=n.a,QXn(n),(64512&e)==HQn&&0==n.c&&56320==(64512&n.a)&&((i=x8(ONt,WVn,25,2,15,1))[0]=e&QVn,i[1]=n.a&QVn,r=oU(pz(Bdn(i,0,i.length)),0),QXn(n));break;default:throw Hp(new ak(kWn((u$(),C8n))))}return r}function jXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(r=new Np,c=DWn,a=DWn,u=DWn,i)for(c=n.f.a,d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).g);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((f=BB(gx(o.a),8)).a<c&&(a=c-f.a,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=f.a),f.a<=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,1),8).b-f.b)))));else for(d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).e);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((b=BB(px(o.a),8)).a>c&&(a=b.a-c,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=b.a),b.a>=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,o.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&u>t.o.b/2){for(IZ(w=new ISn,t),qIn(w,(kUn(),sCt)),w.n.a=t.o.a/2,IZ(g=new ISn,t),qIn(g,SCt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Wb(r);s.a<s.c.c.length;)o=BB(n0(s),17),i?(h=BB(dH(o.a),8),(0==o.a.b?g1(o.d):BB(gx(o.a),8)).b>=h.b?SZ(o,g):SZ(o,w)):(h=BB(gH(o.a),8),(0==o.a.b?g1(o.c):BB(px(o.a),8)).b>=h.b?MZ(o,g):MZ(o,w)),(l=BB(mMn(o,(HXn(),vgt)),74))&&ywn(l,h,!0);t.n.a=c-t.o.a/2}}function EXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),h=BB(sen(n.g,kCn(zJ(s,T6n))),33),i=null,(a=zJ(s,"sourcePort"))&&(i=kCn(a)),f=BB(sen(n.j,i),118),!h)throw Hp(new ek("An edge must have a source node (edge id: '"+Qdn(s)+W6n));if(f&&!wW(WJ(f),h))throw Hp(new ek("The source port of an edge must be a port of the edge's source node (edge id: '"+R2(s,q6n)+W6n));if(!o.b&&(o.b=new hK(KOt,o,4,7)),f9(o.b,f||h),l=BB(sen(n.g,kCn(zJ(s,Y6n))),33),r=null,(u=zJ(s,"targetPort"))&&(r=kCn(u)),b=BB(sen(n.j,r),118),!l)throw Hp(new ek("An edge must have a target node (edge id: '"+Qdn(s)+W6n));if(b&&!wW(WJ(b),l))throw Hp(new ek("The target port of an edge must be a port of the edge's target node (edge id: '"+R2(s,q6n)+W6n));if(!o.c&&(o.c=new hK(KOt,o,5,8)),f9(o.c,b||l),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),s$n(s,o),xon(n,s,o)}function TXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;return f=IFn(HN(n,(kUn(),wCt)),t),w=ayn(HN(n,dCt),t),y=ayn(HN(n,ECt),t),T=uyn(HN(n,MCt),t),l=uyn(HN(n,hCt),t),v=ayn(HN(n,jCt),t),d=ayn(HN(n,gCt),t),j=ayn(HN(n,TCt),t),k=ayn(HN(n,fCt),t),M=uyn(HN(n,bCt),t),p=ayn(HN(n,yCt),t),m=ayn(HN(n,mCt),t),E=ayn(HN(n,lCt),t),S=uyn(HN(n,kCt),t),b=uyn(HN(n,pCt),t),g=ayn(HN(n,vCt),t),e=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.a,T.a,j.a,S.a])),i=Lon(Pun(Gk(xNt,1),qQn,25,15,[w.a,f.a,y.a,g.a])),r=p.a,c=Lon(Pun(Gk(xNt,1),qQn,25,15,[d.a,l.a,k.a,b.a])),s=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.b,w.b,d.b,m.b])),o=Lon(Pun(Gk(xNt,1),qQn,25,15,[T.b,f.b,l.b,g.b])),h=M.b,u=Lon(Pun(Gk(xNt,1),qQn,25,15,[j.b,y.b,k.b,E.b])),w9(HN(n,wCt),e+r,s+h),w9(HN(n,vCt),e+r,s+h),w9(HN(n,dCt),e+r,0),w9(HN(n,ECt),e+r,s+h+o),w9(HN(n,MCt),0,s+h),w9(HN(n,hCt),e+r+i,s+h),w9(HN(n,gCt),e+r+i,0),w9(HN(n,TCt),0,s+h+o),w9(HN(n,fCt),e+r+i,s+h+o),w9(HN(n,bCt),0,s),w9(HN(n,yCt),e,0),w9(HN(n,lCt),0,s+h+o),w9(HN(n,pCt),e+r+i,0),(a=new Gj).a=Lon(Pun(Gk(xNt,1),qQn,25,15,[e+i+r+c,M.a,m.a,E.a])),a.b=Lon(Pun(Gk(xNt,1),qQn,25,15,[s+o+h+u,p.b,S.b,b.b])),a}function MXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g;for(d=new Np,l=new Wb(n.d.b);l.a<l.c.c.length;)for(w=new Wb(BB(n0(l),29).a);w.a<w.c.c.length;){for(b=BB(n0(w),10),r=BB(RX(n.f,b),57),o=new oz(ZL(lbn(b).a.Kc(),new h));dAn(o);)if(s=!0,f=null,(i=spn((a=BB(U5(o),17)).a,0)).b!=i.d.c){for(t=BB(b3(i),8),e=null,a.c.j==(kUn(),sCt)&&((g=new PBn(t,new xI(t.a,r.d.d),r,a)).f.a=!0,g.a=a.c,d.c[d.c.length]=g),a.c.j==SCt&&((g=new PBn(t,new xI(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.c,d.c[d.c.length]=g);i.b!=i.d.c;)e=BB(b3(i),8),aen(t.b,e.b)||(f=new PBn(t,e,null,a),d.c[d.c.length]=f,s&&(s=!1,e.b<r.d.d?f.f.a=!0:e.b>r.d.d+r.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))),i.b!=i.d.c&&(t=e);f&&(c=BB(RX(n.f,a.d.i),57),t.b<c.d.d?f.f.a=!0:t.b>c.d.d+c.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))}for(u=new oz(ZL(fbn(b).a.Kc(),new h));dAn(u);)0!=(a=BB(U5(u),17)).a.b&&(t=BB(px(a.a),8),a.d.j==(kUn(),sCt)&&((g=new PBn(t,new xI(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,d.c[d.c.length]=g),a.d.j==SCt&&((g=new PBn(t,new xI(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,d.c[d.c.length]=g))}return d}function SXn(n,t,e){var i,r,c,a,u,o,s;if(OTn(e,"Network simplex node placement",1),n.e=t,n.n=BB(mMn(t,(hWn(),Alt)),304),oqn(n),REn(n),JT(wnn(new Rq(null,new w1(n.e.b,16)),new Hc),new cg(n)),JT(AV(wnn(AV(wnn(new Rq(null,new w1(n.e.b,16)),new ta),new ea),new ia),new ra),new rg(n)),qy(TD(mMn(n.e,(HXn(),xgt))))&&(OTn(c=mcn(e,1),"Straight Edges Pre-Processing",1),jzn(n),HSn(c)),Mvn(n.f),r=BB(mMn(t,xpt),19).a*n.f.a.c.length,WKn(Qk(Yk(B_(n.f),r),!1),mcn(e,1)),0!=n.d.a.gc()){for(OTn(c=mcn(e,1),"Flexible Where Space Processing",1),a=BB($N(Oz($V(new Rq(null,new w1(n.f.a,16)),new qc),new Dc)),19).a,u=BB($N(Cz($V(new Rq(null,new w1(n.f.a,16)),new Gc),new Rc)),19).a-a,o=AN(new qv,n.f),s=AN(new qv,n.f),UNn(aM(cM(rM(uM(new Hv,2e4),u),o),s)),JT(AV(AV(LU(n.i),new zc),new Uc),new zV(a,o,u,s)),i=n.d.a.ec().Kc();i.Ob();)BB(i.Pb(),213).g=1;WKn(Qk(Yk(B_(n.f),r),!1),mcn(c,1)),HSn(c)}qy(TD(mMn(t,xgt)))&&(OTn(c=mcn(e,1),"Straight Edges Post-Processing",1),SPn(n),HSn(c)),QGn(n),n.e=null,n.f=null,n.i=null,n.c=null,$U(n.k),n.j=null,n.a=null,n.o=null,n.d.a.$b(),HSn(e)}function PXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(u=new Wb(n.a.b);u.a<u.c.c.length;)for(m=new Wb(BB(n0(u),29).a);m.a<m.c.c.length;)v=BB(n0(m),10),t.g[v.p]=v,t.a[v.p]=v,t.d[v.p]=0;for(o=n.a.b,t.c==(gJ(),nyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new IT(o)),a=o.Kc();a.Ob();)for(b=-1,l=BB(a.Pb(),29).a,t.o==(oZ(),cyt)&&(b=DWn,l=cL(l,152)?o6(BB(l,152)):cL(l,131)?BB(l,131).a:cL(l,54)?new fy(l):new IT(l)),k=l.Kc();k.Ob();)if(y=BB(k.Pb(),10),f=null,(f=t.c==nyt?BB(xq(n.b.f,y.p),15):BB(xq(n.b.b,y.p),15)).gc()>0)if(r=f.gc(),s=IJ(e.Math.floor((r+1)/2))-1,c=IJ(e.Math.ceil((r+1)/2))-1,t.o==cyt)for(h=c;h>=s;h--)t.a[y.p]==y&&(d=BB(f.Xb(h),46),w=BB(d.a,10),!FT(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=y,t.g[y.p]=t.g[w.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[y.p]==y&&(p=BB(f.Xb(h),46),g=BB(p.a,10),!FT(i,p.b)&&b<n.b.e[g.p]&&(t.a[g.p]=y,t.g[y.p]=t.g[g.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[g.p]))}function IXn(){IXn=O,eE(),POt=gOt.a,BB(Wtn(QQ(gOt.a),0),18),kOt=gOt.f,BB(Wtn(QQ(gOt.f),0),18),BB(Wtn(QQ(gOt.f),1),34),SOt=gOt.n,BB(Wtn(QQ(gOt.n),0),34),BB(Wtn(QQ(gOt.n),1),34),BB(Wtn(QQ(gOt.n),2),34),BB(Wtn(QQ(gOt.n),3),34),jOt=gOt.g,BB(Wtn(QQ(gOt.g),0),18),BB(Wtn(QQ(gOt.g),1),34),vOt=gOt.c,BB(Wtn(QQ(gOt.c),0),18),BB(Wtn(QQ(gOt.c),1),18),EOt=gOt.i,BB(Wtn(QQ(gOt.i),0),18),BB(Wtn(QQ(gOt.i),1),18),BB(Wtn(QQ(gOt.i),2),18),BB(Wtn(QQ(gOt.i),3),18),BB(Wtn(QQ(gOt.i),4),34),TOt=gOt.j,BB(Wtn(QQ(gOt.j),0),18),mOt=gOt.d,BB(Wtn(QQ(gOt.d),0),18),BB(Wtn(QQ(gOt.d),1),18),BB(Wtn(QQ(gOt.d),2),18),BB(Wtn(QQ(gOt.d),3),18),BB(Wtn(QQ(gOt.d),4),34),BB(Wtn(QQ(gOt.d),5),34),BB(Wtn(QQ(gOt.d),6),34),BB(Wtn(QQ(gOt.d),7),34),pOt=gOt.b,BB(Wtn(QQ(gOt.b),0),34),BB(Wtn(QQ(gOt.b),1),34),yOt=gOt.e,BB(Wtn(QQ(gOt.e),0),34),BB(Wtn(QQ(gOt.e),1),34),BB(Wtn(QQ(gOt.e),2),34),BB(Wtn(QQ(gOt.e),3),34),BB(Wtn(QQ(gOt.e),4),18),BB(Wtn(QQ(gOt.e),5),18),BB(Wtn(QQ(gOt.e),6),18),BB(Wtn(QQ(gOt.e),7),18),BB(Wtn(QQ(gOt.e),8),18),BB(Wtn(QQ(gOt.e),9),18),BB(Wtn(QQ(gOt.e),10),34),MOt=gOt.k,BB(Wtn(QQ(gOt.k),0),34),BB(Wtn(QQ(gOt.k),1),34)}function CXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(M=new YT,j=new YT,g=-1,o=new Wb(n);o.a<o.c.c.length;){for((a=BB(n0(o),128)).s=g--,h=0,m=0,c=new Wb(a.t);c.a<c.c.c.length;)m+=(i=BB(n0(c),268)).c;for(r=new Wb(a.i);r.a<r.c.c.length;)h+=(i=BB(n0(r),268)).c;a.n=h,a.u=m,0==m?r5(j,a,j.c.b,j.c):0==h&&r5(M,a,M.c.b,M.c)}for(P=S4(n),d=(f=n.c.length)+1,p=f-1,b=new Np;0!=P.a.gc();){for(;0!=j.b;)Px(0!=j.b),k=BB(Atn(j,j.a.a),128),P.a.Bc(k),k.s=p--,cLn(k,M,j);for(;0!=M.b;)Px(0!=M.b),E=BB(Atn(M,M.a.a),128),P.a.Bc(E),E.s=d++,cLn(E,M,j);for(w=_Vn,s=P.a.ec().Kc();s.Ob();)(v=(a=BB(s.Pb(),128)).u-a.n)>=w&&(v>w&&(b.c=x8(Ant,HWn,1,0,5,1),w=v),b.c[b.c.length]=a);0!=b.c.length&&(l=BB(xq(b,pvn(t,b.c.length)),128),P.a.Bc(l),l.s=d++,cLn(l,M,j),b.c=x8(Ant,HWn,1,0,5,1))}for(y=n.c.length+1,u=new Wb(n);u.a<u.c.c.length;)(a=BB(n0(u),128)).s<f&&(a.s+=y);for(T=new Wb(n);T.a<T.c.c.length;)for(e=new M2((E=BB(n0(T),128)).t,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),S=(i=BB(e.d.Xb(e.c=e.b++),268)).b,E.s>S.s&&(fW(e),y7(S.i,i),i.c>0&&(i.a=S,WB(S.t,i),i.b=E,WB(E.i,i)))}function OXn(n){var t,e,i,r,c;switch(t=n.c){case 11:return n.Ml();case 12:return n.Ol();case 14:return n.Ql();case 15:return n.Tl();case 16:return n.Rl();case 17:return n.Ul();case 21:return QXn(n),wWn(),wWn(),sNt;case 10:switch(n.a){case 65:return n.yl();case 90:return n.Dl();case 122:return n.Kl();case 98:return n.El();case 66:return n.zl();case 60:return n.Jl();case 62:return n.Hl()}}switch(c=kXn(n),t=n.c){case 3:return n.Zl(c);case 4:return n.Xl(c);case 5:return n.Yl(c);case 0:if(123==n.a&&n.d<n.j){if(r=n.d,i=0,e=-1,!((t=fV(n.i,r++))>=48&&t<=57))throw Hp(new ak(kWn((u$(),X8n))));for(i=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((i=10*i+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(e=i,44==t){if(r>=n.j)throw Hp(new ak(kWn((u$(),V8n))));if((t=fV(n.i,r++))>=48&&t<=57){for(e=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((e=10*e+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(i>e)throw Hp(new ak(kWn((u$(),Q8n))))}else e=-1}if(125!=t)throw Hp(new ak(kWn((u$(),W8n))));n.sl(r)?(wWn(),wWn(),c=new h4(9,c),n.d=r+1):(wWn(),wWn(),c=new h4(3,c),n.d=r),c.dm(i),c.cm(e),QXn(n)}}return c}function AXn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(w=new J6(t.b),v=new J6(t.b),l=new J6(t.b),j=new J6(t.b),d=new J6(t.b),k=spn(t,0);k.b!=k.d.c;)for(u=new Wb((m=BB(b3(k),11)).g);u.a<u.c.c.length;)if((c=BB(n0(u),17)).c.i==c.d.i){if(m.j==c.d.j){j.c[j.c.length]=c;continue}if(m.j==(kUn(),sCt)&&c.d.j==SCt){d.c[d.c.length]=c;continue}}for(o=new Wb(d);o.a<o.c.c.length;)__n(n,c=BB(n0(o),17),e,i,(kUn(),oCt));for(a=new Wb(j);a.a<a.c.c.length;)c=BB(n0(a),17),Bl(E=new $vn(n),(uSn(),Cut)),hon(E,(HXn(),ept),(QEn(),XIt)),hon(E,(hWn(),dlt),c),hon(T=new ISn,dlt,c.d),qIn(T,(kUn(),ICt)),IZ(T,E),hon(M=new ISn,dlt,c.c),qIn(M,oCt),IZ(M,E),hon(c.c,Elt,E),hon(c.d,Elt,E),SZ(c,null),MZ(c,null),e.c[e.c.length]=E,hon(E,Bft,iln(2));for(y=spn(t,0);y.b!=y.d.c;)s=(m=BB(b3(y),11)).e.c.length>0,g=m.g.c.length>0,s&&g?l.c[l.c.length]=m:s?w.c[w.c.length]=m:g&&(v.c[v.c.length]=m);for(b=new Wb(w);b.a<b.c.c.length;)WB(r,HBn(n,BB(n0(b),11),null,e));for(p=new Wb(v);p.a<p.c.c.length;)WB(r,HBn(n,null,BB(n0(p),11),e));for(f=new Wb(l);f.a<f.c.c.length;)WB(r,HBn(n,h=BB(n0(f),11),h,e))}function $Xn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(d=new xI(RQn,RQn),t=new xI(KQn,KQn),k=new Wb(n);k.a<k.c.c.length;)y=BB(n0(k),8),d.a=e.Math.min(d.a,y.a),d.b=e.Math.min(d.b,y.b),t.a=e.Math.max(t.a,y.a),t.b=e.Math.max(t.b,y.b);for(s=new xI(t.a-d.a,t.b-d.b),h=new ZFn(new xI(d.a-50,d.b-s.a-50),new xI(d.a-50,t.b+s.a+50),new xI(t.a+s.b/2+50,d.b+s.b/2)),m=new Rv,c=new Np,i=new Np,m.a.zc(h,m),E=new Wb(n);E.a<E.c.c.length;){for(j=BB(n0(E),8),c.c=x8(Ant,HWn,1,0,5,1),v=m.a.ec().Kc();v.Ob();)W8((g=BB(v.Pb(),308)).d,g.a),Cbn(W8(g.d,j),W8(g.d,g.a))<0&&(c.c[c.c.length]=g);for(i.c=x8(Ant,HWn,1,0,5,1),p=new Wb(c);p.a<p.c.c.length;)for(b=new Wb((g=BB(n0(p),308)).e);b.a<b.c.c.length;){for(f=BB(n0(b),168),a=!0,o=new Wb(c);o.a<o.c.c.length;)(u=BB(n0(o),308))!=g&&(cV(f,xq(u.e,0))||cV(f,xq(u.e,1))||cV(f,xq(u.e,2)))&&(a=!1);a&&(i.c[i.c.length]=f)}for(oMn(m,c),e5(m,new bn),l=new Wb(i);l.a<l.c.c.length;)TU(m,new ZFn(j,(f=BB(n0(l),168)).a,f.b))}for(e5(m,new jw(w=new Rv)),r=w.a.ec().Kc();r.Ob();)(K7(h,(f=BB(r.Pb(),168)).a)||K7(h,f.b))&&r.Qb();return e5(w,new wn),w}function LXn(n){var t,e,i;switch(e=BB(mMn(n,(hWn(),Zft)),21),t=kA(Nat),BB(mMn(n,(HXn(),sgt)),334)==(ufn(),pIt)&&Jcn(t,xat),qy(TD(mMn(n,ugt)))?dq(t,(yMn(),Rat),(lWn(),Hot)):dq(t,(yMn(),_at),(lWn(),Hot)),null!=mMn(n,(I6(),TMt))&&Jcn(t,Dat),(qy(TD(mMn(n,ggt)))||qy(TD(mMn(n,ogt))))&&WG(t,(yMn(),Bat),(lWn(),eot)),BB(mMn(n,Udt),103).g){case 2:case 3:case 4:WG(dq(t,(yMn(),Rat),(lWn(),rot)),Bat,iot)}switch(e.Hc((bDn(),hft))&&WG(dq(dq(t,(yMn(),Rat),(lWn(),tot)),Fat,Zut),Bat,not),GC(mMn(n,Sgt))!==GC((sNn(),Cvt))&&dq(t,(yMn(),_at),(lWn(),Not)),e.Hc(pft)&&(dq(t,(yMn(),Rat),(lWn(),Fot)),dq(t,Kat,Kot),dq(t,_at,_ot)),GC(mMn(n,Pdt))!==GC((JMn(),cft))&&GC(mMn(n,Zdt))!==GC((Mbn(),YPt))&&WG(t,(yMn(),Bat),(lWn(),pot)),qy(TD(mMn(n,fgt)))&&dq(t,(yMn(),_at),(lWn(),got)),qy(TD(mMn(n,Hdt)))&&dq(t,(yMn(),_at),(lWn(),Wot)),KLn(n)&&(i=(GC(mMn(n,sgt))===GC(pIt)?BB(mMn(n,Rdt),292):BB(mMn(n,Kdt),292))==(Kan(),jft)?(lWn(),Rot):(lWn(),Yot),dq(t,(yMn(),Fat),i)),BB(mMn(n,zpt),377).g){case 1:dq(t,(yMn(),Fat),(lWn(),Vot));break;case 2:WG(dq(dq(t,(yMn(),_at),(lWn(),Vut)),Fat,Qut),Bat,Yut)}return GC(mMn(n,Ldt))!==GC((mon(),Nvt))&&dq(t,(yMn(),_at),(lWn(),Qot)),t}function NXn(n){NM(n,new MTn(vj(wj(pj(gj(new du,$4n),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new Za))),u2(n,$4n,VJn,1.3),u2(n,$4n,A4n,mpn(gEt)),u2(n,$4n,QJn,CEt),u2(n,$4n,vZn,15),u2(n,$4n,u3n,mpn(bEt)),u2(n,$4n,PZn,mpn(jEt)),u2(n,$4n,BZn,mpn(EEt)),u2(n,$4n,SZn,mpn(TEt)),u2(n,$4n,IZn,mpn(kEt)),u2(n,$4n,MZn,mpn(MEt)),u2(n,$4n,CZn,mpn(OEt)),u2(n,$4n,E4n,mpn(PEt)),u2(n,$4n,T4n,mpn(yEt)),u2(n,$4n,P4n,mpn(SEt)),u2(n,$4n,I4n,mpn(AEt)),u2(n,$4n,C4n,mpn(pEt)),u2(n,$4n,jZn,mpn(vEt)),u2(n,$4n,m3n,mpn(mEt)),u2(n,$4n,S4n,mpn(dEt)),u2(n,$4n,M4n,mpn(wEt)),u2(n,$4n,O4n,mpn(LEt))}function xXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(cL(t,457)){if(!(d=SDn(BB(t,671),e)))throw Hp(new _y(p6n+e+"' is not a valid enumerator of '"+t.ne()+"'"));return d}switch(Ifn((CPn(),Z$t),t).cl()){case 2:e=FBn(e,!1);break;case 3:e=FBn(e,!0)}if(i=Ifn(Z$t,t).$k())return i.Aj().Nh().Kh(i,e);if(f=Ifn(Z$t,t).al()){for(d=new Np,s=0,h=(o=ysn(e)).length;s<h;++s)u=o[s],WB(d,f.Aj().Nh().Kh(f,u));return d}if(!(w=Ifn(Z$t,t).bl()).dc()){for(b=w.Kc();b.Ob();){l=BB(b.Pb(),148);try{if(null!=(d=l.Aj().Nh().Kh(l,e)))return d}catch(g){if(!cL(g=lun(g),60))throw Hp(g)}}throw Hp(new _y(p6n+e+"' does not match any member types of the union datatype '"+t.ne()+"'"))}if(BB(t,834).Fj(),!(r=xfn(t.Bj())))return null;if(r==Stt){c=0;try{c=l_n(e,_Vn,DWn)&QVn}catch(g){if(!cL(g=lun(g),127))throw Hp(g);c=V7(e)[0]}return fun(c)}if(r==mtt){for(a=0;a<COt.length;++a)try{return BM(COt[a],e)}catch(g){if(!cL(g=lun(g),32))throw Hp(g)}throw Hp(new _y(p6n+e+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw Hp(new _y(p6n+e+"' is invalid. "))}function DXn(n,t){var e,i,r,c,a,u,o,s;if(e=0,a=0,c=t.length,u=null,s=new Ck,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&(++e,++a<c&&(b1(a,t.length),43==t.charCodeAt(a)||(b1(a,t.length),45==t.charCodeAt(a)))))throw Hp(new Mk(DQn+t+'"'));for(;a<c&&(b1(a,t.length),46!=t.charCodeAt(a))&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;if(s.a+=""+fx(null==t?zWn:(kW(t),t),e,a),a<c&&(b1(a,t.length),46==t.charCodeAt(a))){for(e=++a;a<c&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;n.e=a-e,s.a+=""+fx(null==t?zWn:(kW(t),t),e,a)}else n.e=0;if(a<c&&(b1(a,t.length),101==t.charCodeAt(a)||(b1(a,t.length),69==t.charCodeAt(a)))&&(e=++a,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&++a<c&&(b1(a,t.length),45!=t.charCodeAt(a))&&++e,u=t.substr(e,c-e),n.e=n.e-l_n(u,_Vn,DWn),n.e!=IJ(n.e)))throw Hp(new Mk("Scale out of range."));if((o=s.a).length<16){if(n.f=(null==Vtt&&(Vtt=new RegExp("^[+-]?\\d*$","i")),Vtt.test(o)?parseInt(o,10):NaN),isNaN(n.f))throw Hp(new Mk(DQn+t+'"'));n.a=aCn(n.f)}else fdn(n,new $A(o));for(n.d=s.a.length,r=0;r<s.a.length&&(45==(i=fV(s.a,r))||48==i);++r)--n.d;0==n.d&&(n.d=1)}function RXn(){RXn=O,JCn(fut=new pJ,(kUn(),wCt),vCt),JCn(fut,MCt,vCt),JCn(fut,MCt,kCt),JCn(fut,hCt,pCt),JCn(fut,hCt,vCt),JCn(fut,dCt,vCt),JCn(fut,dCt,mCt),JCn(fut,ECt,lCt),JCn(fut,ECt,vCt),JCn(fut,yCt,bCt),JCn(fut,yCt,vCt),JCn(fut,yCt,mCt),JCn(fut,yCt,lCt),JCn(fut,bCt,yCt),JCn(fut,bCt,kCt),JCn(fut,bCt,pCt),JCn(fut,bCt,vCt),JCn(fut,jCt,jCt),JCn(fut,jCt,mCt),JCn(fut,jCt,kCt),JCn(fut,gCt,gCt),JCn(fut,gCt,mCt),JCn(fut,gCt,pCt),JCn(fut,TCt,TCt),JCn(fut,TCt,lCt),JCn(fut,TCt,kCt),JCn(fut,fCt,fCt),JCn(fut,fCt,lCt),JCn(fut,fCt,pCt),JCn(fut,mCt,dCt),JCn(fut,mCt,yCt),JCn(fut,mCt,jCt),JCn(fut,mCt,gCt),JCn(fut,mCt,vCt),JCn(fut,mCt,mCt),JCn(fut,mCt,kCt),JCn(fut,mCt,pCt),JCn(fut,lCt,ECt),JCn(fut,lCt,yCt),JCn(fut,lCt,TCt),JCn(fut,lCt,fCt),JCn(fut,lCt,lCt),JCn(fut,lCt,kCt),JCn(fut,lCt,pCt),JCn(fut,lCt,vCt),JCn(fut,kCt,MCt),JCn(fut,kCt,bCt),JCn(fut,kCt,jCt),JCn(fut,kCt,TCt),JCn(fut,kCt,mCt),JCn(fut,kCt,lCt),JCn(fut,kCt,kCt),JCn(fut,kCt,vCt),JCn(fut,pCt,hCt),JCn(fut,pCt,bCt),JCn(fut,pCt,gCt),JCn(fut,pCt,fCt),JCn(fut,pCt,mCt),JCn(fut,pCt,lCt),JCn(fut,pCt,pCt),JCn(fut,pCt,vCt),JCn(fut,vCt,wCt),JCn(fut,vCt,MCt),JCn(fut,vCt,hCt),JCn(fut,vCt,dCt),JCn(fut,vCt,ECt),JCn(fut,vCt,yCt),JCn(fut,vCt,bCt),JCn(fut,vCt,mCt),JCn(fut,vCt,lCt),JCn(fut,vCt,kCt),JCn(fut,vCt,pCt),JCn(fut,vCt,vCt)}function KXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(n.d=new xI(RQn,RQn),n.c=new xI(KQn,KQn),l=t.Kc();l.Ob();)for(m=new Wb(BB(l.Pb(),37).a);m.a<m.c.c.length;)v=BB(n0(m),10),n.d.a=e.Math.min(n.d.a,v.n.a-v.d.b),n.d.b=e.Math.min(n.d.b,v.n.b-v.d.d),n.c.a=e.Math.max(n.c.a,v.n.a+v.o.a+v.d.c),n.c.b=e.Math.max(n.c.b,v.n.b+v.o.b+v.d.a);for(o=new Yv,f=t.Kc();f.Ob();)r=uXn(n,BB(f.Pb(),37)),WB(o.a,r),r.a=r.a|!BB(mMn(r.c,(hWn(),Xft)),21).dc();for(n.b=(Shn(),(T=new kt).f=new vin(i),T.b=oGn(T.f,o),T),jGn((w=n.b,new Xm,w)),n.e=new Gj,n.a=n.b.f.e,u=new Wb(o.a);u.a<u.c.c.length;)for(c=BB(n0(u),841),y=AJ(n.b,c),nKn(c.c,y.a,y.b),g=new Wb(c.c.a);g.a<g.c.c.length;)(d=BB(n0(g),10)).k==(uSn(),Mut)&&(p=lLn(n,d.n,BB(mMn(d,(hWn(),Qft)),61)),UR(kO(d.n),p));for(a=new Wb(o.a);a.a<a.c.c.length;)for(h=new Wb(wln(c=BB(n0(a),841)));h.a<h.c.c.length;)for(Kx(E=new Kj((s=BB(n0(h),17)).a),0,g1(s.c)),DH(E,g1(s.d)),b=null,j=spn(E,0);j.b!=j.d.c;)k=BB(b3(j),8),b?(uen(b.a,k.a)?(n.e.a=e.Math.min(n.e.a,b.a),n.a.a=e.Math.max(n.a.a,b.a)):uen(b.b,k.b)&&(n.e.b=e.Math.min(n.e.b,b.b),n.a.b=e.Math.max(n.a.b,b.b)),b=k):b=k;qx(n.e),UR(n.a,n.e)}function _Xn(n){V$n(n.b,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentTransient"])),V$n(n.a,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedSourceURI"])),V$n(n.o,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),V$n(n.p,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),V$n(n.v,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),V$n(n.R,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedName"])),V$n(n.T,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),V$n(n.U,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),V$n(n.W,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),V$n(n.bb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidDefaultValueLiteral"])),V$n(n.eb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),V$n(n.H,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentType ConsistentBounds ConsistentArguments"]))}function FXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(!t.dc()){if(r=new km,f=(a=e||BB(t.Xb(0),17)).c,gxn(),(s=f.i.k)!=(uSn(),Iut)&&s!=Cut&&s!=Mut&&s!=Tut)throw Hp(new _y("The target node of the edge must be a normal node or a northSouthPort."));for(fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))),(kUn(),yCt).Hc(f.j)&&(b=Gy(MD(mMn(f,(hWn(),Llt)))),r5(r,new xI(Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a])).a,b),r.c.b,r.c)),o=null,i=!1,u=t.Kc();u.Ob();)0!=(c=BB(u.Pb(),17).a).b&&(i?(r5(r,kL(UR(o,(Px(0!=c.b),BB(c.a.a.c,8))),.5),r.c.b,r.c),i=!1):i=!0,o=B$((Px(0!=c.b),BB(c.c.b.c,8))),Frn(r,c),yQ(c));l=a.d,yCt.Hc(l.j)&&(b=Gy(MD(mMn(l,(hWn(),Llt)))),r5(r,new xI(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).a,b),r.c.b,r.c)),fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a]))),n.d==(Usn(),emt)&&(Px(0!=r.b),w=BB(r.a.a.c,8),d=BB(Dpn(r,1),8),(g=new XZ(hsn(f.j))).a*=5,g.b*=5,p=XR(new xI(d.a,d.b),w),UR(v=new xI(iZ(g.a,p.a),iZ(g.b,p.b)),w),nX(spn(r,1),v),Px(0!=r.b),m=BB(r.c.b.c,8),y=BB(Dpn(r,r.b-2),8),(g=new XZ(hsn(l.j))).a*=5,g.b*=5,p=XR(new xI(y.a,y.b),m),UR(k=new xI(iZ(g.a,p.a),iZ(g.b,p.b)),m),Kx(r,r.b-1,k)),h=new oBn(r),Frn(a.a,Fvn(h))}}function BXn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A,$,L,N,x;if(y=(v=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),k=v.Eg(),m=v.Cg()/2,w=v.Bg()/2,cL(v,186)&&(y+=WJ(p=BB(v,118)).i,y+=WJ(p).i),y+=m,k+=w,I=(S=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),C=S.Eg(),P=S.Cg()/2,j=S.Bg()/2,cL(S,186)&&(I+=WJ(M=BB(S,118)).i,I+=WJ(M).i),I+=P,C+=j,0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),o=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),o);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(b=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));b.e!=b.i.gc();)Qjn(b);for(d=I,I>y+m?d=y+m:I<y-m&&(d=y-m),g=C,C>k+w?g=k+w:C<k-w&&(g=k-w),d>y-m&&d<y+m&&g>k-w&&g<k+w&&(d=y+m),Cen(u=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),d),Aen(u,g),E=y,y>I+P?E=I+P:y<I-P&&(E=I-P),T=k,k>C+j?T=C+j:k<C-j&&(T=C-j),E>I-P&&E<I+P&&T>C-j&&T<C+j&&(T=C+j),Ten(u,E),Oen(u,T),sqn((!u.a&&(u.a=new $L(xOt,u,5)),u.a)),a=pvn(t,5),v==S&&++a,A=E-d,N=T-g,h=.20000000298023224*e.Math.sqrt(A*A+N*N),$=A/(a+1),x=N/(a+1),O=d,L=g,s=0;s<a;s++)L+=x,(f=(O+=$)+H$n(t,24)*uYn*h-h/2)<0?f=1:f>i&&(f=i-1),(l=L+H$n(t,24)*uYn*h-h/2)<0?l=1:l>r&&(l=r-1),tE(),jen(c=new ro,f),Een(c,l),f9((!u.a&&(u.a=new $L(xOt,u,5)),u.a),c)}function HXn(){HXn=O,sWn(),ppt=jPt,vpt=EPt,mpt=TPt,ypt=MPt,jpt=SPt,Ept=PPt,Spt=CPt,Ipt=APt,Cpt=$Pt,Ppt=OPt,Opt=LPt,$pt=NPt,Npt=RPt,Mpt=IPt,fWn(),gpt=_wt,kpt=Fwt,Tpt=Bwt,Apt=Hwt,hpt=new XA(pPt,iln(0)),fpt=Dwt,lpt=Rwt,bpt=Kwt,zpt=ldt,Rpt=zwt,Kpt=Wwt,Bpt=edt,_pt=Ywt,Fpt=Zwt,Xpt=pdt,Upt=wdt,qpt=odt,Hpt=adt,Gpt=hdt,Rgt=Pwt,Kgt=Iwt,rgt=Kbt,cgt=Bbt,Ugt=new WA(12),zgt=new XA(XSt,Ugt),Mbn(),Zdt=new XA(vSt,ngt=QPt),tpt=new XA(aPt,0),wpt=new XA(vPt,iln(1)),Edt=new XA(cSt,dZn),Ggt=zSt,ept=uPt,upt=wPt,zdt=lSt,kdt=iSt,sgt=ESt,dpt=new XA(kPt,(hN(),!0)),wgt=SSt,dgt=PSt,Fgt=KSt,qgt=qSt,Bgt=FSt,Ffn(),Udt=new XA(bSt,Wdt=BPt),$gt=DSt,Agt=NSt,cpt=fPt,rpt=hPt,apt=bPt,cpn(),new XA(ZSt,Vgt=qIt),Ygt=ePt,Jgt=iPt,Zgt=rPt,Qgt=tPt,Dpt=Gwt,Pgt=lwt,Sgt=hwt,xpt=qwt,kgt=ewt,Gdt=Tbt,qdt=jbt,xdt=ubt,Ddt=obt,Kdt=bbt,Rdt=sbt,Hdt=ybt,Cgt=wwt,Ogt=dwt,pgt=Vbt,_gt=$wt,Ngt=mwt,ugt=Gbt,Dgt=Mwt,egt=Nbt,igt=Dbt,Ndt=hSt,Lgt=gwt,Pdt=Qlt,Sdt=Wlt,Mdt=Xlt,fgt=Xbt,hgt=Ubt,lgt=Wbt,Hgt=BSt,vgt=OSt,agt=ySt,Ydt=gSt,Qdt=dSt,_dt=gbt,ipt=sPt,Tdt=sSt,bgt=MSt,npt=cPt,Xgt=VSt,Wgt=YSt,Egt=cwt,Tgt=uwt,spt=gPt,jdt=Ult,Mgt=swt,Jdt=Obt,Vdt=Ibt,Igt=$St,mgt=Zbt,xgt=jwt,Lpt=xPt,Xdt=Sbt,opt=Nwt,tgt=$bt,ygt=twt,Fdt=vbt,ggt=CSt,jgt=rwt,Bdt=mbt,Ldt=cbt,Adt=ebt,Cdt=nbt,Odt=tbt,$dt=rbt,Idt=Jlt,ogt=zbt}function qXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I;if(uHn(),T=n.e,w=n.d,r=n.a,0==T)switch(t){case 0:return"0";case 1:return WQn;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(j=new Ik).a+=t<0?"0E+":"0E",j.a+=-t,j.a}if(y=x8(ONt,WVn,25,1+(m=10*w+1+7),15,1),e=m,1==w)if((u=r[0])<0){I=e0(u,UQn);do{d=I,I=Ojn(I,10),y[--e]=48+dG(ibn(d,cbn(I,10)))&QVn}while(0!=Vhn(I,0))}else{I=u;do{d=I,I=I/10|0,y[--e]=d-10*I+48&QVn}while(0!=I)}else{aHn(r,0,S=x8(ANt,hQn,25,w,15,1),0,P=w);n:for(;;){for(E=0,s=P-1;s>=0;s--)p=fTn(rbn(yz(E,32),e0(S[s],UQn))),S[s]=dG(p),E=dG(kz(p,32));v=dG(E),g=e;do{y[--e]=48+v%10&QVn}while(0!=(v=v/10|0)&&0!=e);for(i=9-g+e,o=0;o<i&&e>0;o++)y[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==y[e];)++e}if(b=T<0,a=m-e-t-1,0==t)return b&&(y[--e]=45),Bdn(y,e,m-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=m-1;l>=h;l--)y[l+1]=y[l];return y[++h]=46,b&&(y[--e]=45),Bdn(y,e,m-e+1)}for(f=2;f<1-a;f++)y[--e]=48;return y[--e]=46,y[--e]=48,b&&(y[--e]=45),Bdn(y,e,m-e)}return M=e+1,c=m,k=new Ck,b&&(k.a+="-"),c-M>=1?(xX(k,y[e]),k.a+=".",k.a+=Bdn(y,e+1,m-e-1)):k.a+=Bdn(y,e,m-e),k.a+="E",a>0&&(k.a+="+"),k.a+=""+a,k.a}function GXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(n.c=t,n.g=new xp,GM(),twn(new Pw(new Dy(n.c))),v=SD(ZAn(n.c,(MMn(),dTt))),u=BB(ZAn(n.c,pTt),316),y=BB(ZAn(n.c,vTt),429),c=BB(ZAn(n.c,hTt),482),m=BB(ZAn(n.c,gTt),430),n.j=Gy(MD(ZAn(n.c,mTt))),a=n.a,u.g){case 0:a=n.a;break;case 1:a=n.b;break;case 2:a=n.i;break;case 3:a=n.e;break;case 4:a=n.f;break;default:throw Hp(new _y(N4n+(null!=u.f?u.f:""+u.g)))}if(n.d=new DJ(a,y,c),hon(n.d,(Xcn(),Qrt),TD(ZAn(n.c,lTt))),n.d.c=qy(TD(ZAn(n.c,fTt))),0==YQ(n.c).i)return n.d;for(h=new AL(YQ(n.c));h.e!=h.i.gc();){for(l=(s=BB(kpn(h),33)).g/2,f=s.f/2,k=new xI(s.i+l,s.j+f);hU(n.g,k);)_x(k,(e.Math.random()-.5)*lZn,(e.Math.random()-.5)*lZn);w=BB(ZAn(s,(sWn(),$St)),142),d=new AZ(k,new UV(k.a-l-n.j/2-w.b,k.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),WB(n.d.i,d),VW(n.g,k,new rC(d,s))}switch(m.g){case 0:if(null==v)n.d.d=BB(xq(n.d.i,0),65);else for(p=new Wb(n.d.i);p.a<p.c.c.length;)d=BB(n0(p),65),null!=(b=BB(BB(RX(n.g,d.a),46).b,33).zg())&&mK(b,v)&&(n.d.d=d);break;case 1:for((i=new xI(n.c.g,n.c.f)).a*=.5,i.b*=.5,_x(i,n.c.i,n.c.j),r=RQn,g=new Wb(n.d.i);g.a<g.c.c.length;)(o=W8((d=BB(n0(g),65)).a,i))<r&&(r=o,n.d.d=d);break;default:throw Hp(new _y(N4n+(null!=m.f?m.f:""+m.g)))}return n.d}function zXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(j=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),f=new km,k=new xp,E=tFn(j),jIn(k.f,j,E),b=new xp,r=new YT,d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!t.d&&(t.d=new hK(_Ot,t,8,5)),t.d),(!t.e&&(t.e=new hK(_Ot,t,7,4)),t.e)])));dAn(d);){if(w=BB(U5(d),79),1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));w!=n&&(r5(r,p=BB(Wtn((!w.a&&(w.a=new eU(FOt,w,6,6)),w.a),0),202),r.c.b,r.c),(g=BB(qC(AY(k.f,p)),12))||(g=tFn(p),jIn(k.f,p,g)),l=i?XR(new wA(BB(xq(E,E.c.length-1),8)),BB(xq(g,g.c.length-1),8)):XR(new wA((l1(0,E.c.length),BB(E.c[0],8))),(l1(0,g.c.length),BB(g.c[0],8))),jIn(b.f,p,l))}if(0!=r.b)for(v=BB(xq(E,i?E.c.length-1:0),8),h=1;h<E.c.length;h++){for(m=BB(xq(E,i?E.c.length-1-h:h),8),c=spn(r,0);c.b!=c.d.c;)p=BB(b3(c),202),(g=BB(qC(AY(k.f,p)),12)).c.length<=h?mtn(c):(y=UR(new wA(BB(xq(g,i?g.c.length-1-h:h),8)),BB(qC(AY(b.f,p)),8)),m.a==y.a&&m.b==y.b||(a=m.a-v.a,o=m.b-v.b,(u=y.a-v.a)*o==(s=y.b-v.b)*a&&(0==a||isNaN(a)?a:a<0?-1:1)==(0==u||isNaN(u)?u:u<0?-1:1)&&(0==o||isNaN(o)?o:o<0?-1:1)==(0==s||isNaN(s)?s:s<0?-1:1)?(e.Math.abs(a)<e.Math.abs(u)||e.Math.abs(o)<e.Math.abs(s))&&r5(f,m,f.c.b,f.c):h>1&&r5(f,v,f.c.b,f.c),mtn(c)));v=m}return f}function UXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A;for(OTn(e,"Greedy cycle removal",1),A=(m=t.a).c.length,n.a=x8(ANt,hQn,25,A,15,1),n.c=x8(ANt,hQn,25,A,15,1),n.b=x8(ANt,hQn,25,A,15,1),s=0,p=new Wb(m);p.a<p.c.c.length;){for((d=BB(n0(p),10)).p=s,T=new Wb(d.j);T.a<T.c.c.length;){for(u=new Wb((k=BB(n0(T),11)).e);u.a<u.c.c.length;)(i=BB(n0(u),17)).c.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.a[s]+=S>0?S+1:1);for(a=new Wb(k.g);a.a<a.c.c.length;)(i=BB(n0(a),17)).d.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.c[s]+=S>0?S+1:1)}0==n.c[s]?DH(n.e,d):0==n.a[s]&&DH(n.f,d),++s}for(w=-1,b=1,f=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230);A>0;){for(;0!=n.e.b;)I=BB(dH(n.e),10),n.b[I.p]=w--,QKn(n,I),--A;for(;0!=n.f.b;)C=BB(dH(n.f),10),n.b[C.p]=b++,QKn(n,C),--A;if(A>0){for(l=_Vn,v=new Wb(m);v.a<v.c.c.length;)d=BB(n0(v),10),0==n.b[d.p]&&(y=n.c[d.p]-n.a[d.p])>=l&&(y>l&&(f.c=x8(Ant,HWn,1,0,5,1),l=y),f.c[f.c.length]=d);h=n.Zf(f),n.b[h.p]=b++,QKn(n,h),--A}}for(P=m.c.length+1,s=0;s<m.c.length;s++)n.b[s]<0&&(n.b[s]+=P);for(g=new Wb(m);g.a<g.c.c.length;)for(E=0,M=(j=C2((d=BB(n0(g),10)).j)).length;E<M;++E)for(c=0,o=(r=Z0((k=j[E]).g)).length;c<o;++c)O=(i=r[c]).d.i.p,n.b[d.p]>n.b[O]&&(tBn(i,!0),hon(t,qft,(hN(),!0)));n.a=null,n.c=null,n.b=null,yQ(n.f),yQ(n.e),HSn(e)}function XXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(i=new Np,u=new Np,g=t/2,b=n.gc(),r=BB(n.Xb(0),8),p=BB(n.Xb(1),8),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8))),s=2;s<b;s++)d=r,r=p,p=BB(n.Xb(s),8),WB(i,(l1(1,(w=QAn(r.a,r.b,d.a,d.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8)));for(WB(i,(l1(1,(w=QAn(p.a,p.b,r.a,r.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),e=new km,a=new Np,DH(e,(l1(0,i.c.length),BB(i.c[0],8))),h=1;h<i.c.length-2;h+=2)l1(h,i.c.length),c=BB(i.c[h],8),l=qPn((l1(h-1,i.c.length),BB(i.c[h-1],8)),c,(l1(h+1,i.c.length),BB(i.c[h+1],8)),(l1(h+2,i.c.length),BB(i.c[h+2],8))),isFinite(l.a)&&isFinite(l.b)?r5(e,l,e.c.b,e.c):r5(e,c,e.c.b,e.c);for(DH(e,BB(xq(i,i.c.length-1),8)),WB(a,(l1(0,u.c.length),BB(u.c[0],8))),f=1;f<u.c.length-2;f+=2)l1(f,u.c.length),c=BB(u.c[f],8),l=qPn((l1(f-1,u.c.length),BB(u.c[f-1],8)),c,(l1(f+1,u.c.length),BB(u.c[f+1],8)),(l1(f+2,u.c.length),BB(u.c[f+2],8))),isFinite(l.a)&&isFinite(l.b)?a.c[a.c.length]=l:a.c[a.c.length]=c;for(WB(a,BB(xq(u,u.c.length-1),8)),o=a.c.length-1;o>=0;o--)DH(e,(l1(o,a.c.length),BB(a.c[o],8)));return e}function WXn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=kAt,s=null,c=null,(o=Vgn(n,u=0,AAt,$At))<n.length&&(b1(o,n.length),58==n.charCodeAt(o))&&(f=n.substr(u,o-u),u=o+1),e=null!=f&&xT(jAt,f.toLowerCase())){if(-1==(o=n.lastIndexOf("!/")))throw Hp(new _y("no archive separator"));a=!0,i=fx(n,u,++o),u=o}else u>=0&&mK(n.substr(u,2),"//")?(o=Vgn(n,u+=2,LAt,NAt),i=n.substr(u,o-u),u=o):null==f||u!=n.length&&(b1(u,n.length),47==n.charCodeAt(u))||(a=!1,-1==(o=yN(n,YTn(35),u))&&(o=n.length),i=n.substr(u,o-u),u=o);if(!e&&u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(o=Vgn(n,u+1,LAt,NAt),(h=n.substr(u+1,o-(u+1))).length>0&&58==fV(h,h.length-1)&&(r=h,u=o)),u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(++u,t=!0),u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u))){for(l=new Np;u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u));)o=Vgn(n,u,LAt,NAt),WB(l,n.substr(u,o-u)),(u=o)<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(Qhn(n,++u)||(l.c[l.c.length]=""));Qgn(l,b=x8(Qtt,sVn,2,l.c.length,6,1))}return u<n.length&&(b1(u,n.length),63==n.charCodeAt(u))&&(-1==(o=lx(n,35,++u))&&(o=n.length),s=n.substr(u,o-u),u=o),u<n.length&&(c=nO(n,++u)),wGn(a,f,i,r,b,s),new rRn(a,f,i,r,t,b,s,c)}function VXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A,$;for(O=new Np,w=new Wb(t.b);w.a<w.c.c.length;)for(k=new Wb(BB(n0(w),29).a);k.a<k.c.c.length;){for((y=BB(n0(k),10)).p=-1,l=_Vn,T=_Vn,S=new Wb(y.j);S.a<S.c.c.length;){for(c=new Wb((M=BB(n0(S),11)).e);c.a<c.c.c.length;)i=BB(n0(c),17),P=BB(mMn(i,(HXn(),bpt)),19).a,l=e.Math.max(l,P);for(r=new Wb(M.g);r.a<r.c.c.length;)i=BB(n0(r),17),P=BB(mMn(i,(HXn(),bpt)),19).a,T=e.Math.max(T,P)}hon(y,Xmt,iln(l)),hon(y,Wmt,iln(T))}for(p=0,b=new Wb(t.b);b.a<b.c.c.length;)for(k=new Wb(BB(n0(b),29).a);k.a<k.c.c.length;)(y=BB(n0(k),10)).p<0&&((C=new rm).b=p++,jRn(n,y,C),O.c[O.c.length]=C);for(E=sx(O.c.length),f=sx(O.c.length),u=0;u<O.c.length;u++)WB(E,new Np),WB(f,iln(0));for(vzn(t,O,E,f),A=BB(Qgn(O,x8(Ymt,O3n,257,O.c.length,0,1)),840),j=BB(Qgn(E,x8(Rnt,nZn,15,E.c.length,0,1)),192),h=x8(ANt,hQn,25,f.c.length,15,1),o=0;o<h.length;o++)h[o]=(l1(o,f.c.length),BB(f.c[o],19)).a;for(v=0,m=new Np,s=0;s<A.length;s++)0==h[s]&&WB(m,A[s]);for(g=x8(ANt,hQn,25,A.length,15,1);0!=m.c.length;)for(g[(C=BB(s6(m,0),257)).b]=v++;!j[C.b].dc();)--h[($=BB(j[C.b].$c(0),257)).b],0==h[$.b]&&(m.c[m.c.length]=$);for(n.a=x8(Ymt,O3n,257,A.length,0,1),a=0;a<A.length;a++)for(d=A[a],I=g[a],n.a[I]=d,d.b=I,k=new Wb(d.e);k.a<k.c.c.length;)(y=BB(n0(k),10)).p=I;return n.a}function QXn(n){var t,e,i;if(n.d>=n.j)return n.a=-1,void(n.c=1);if(t=fV(n.i,n.d++),n.a=t,1!=n.b){switch(t){case 124:i=2;break;case 42:i=3;break;case 43:i=4;break;case 63:i=5;break;case 41:i=7;break;case 46:i=8;break;case 91:i=9;break;case 94:i=11;break;case 36:i=12;break;case 40:if(i=6,n.d>=n.j)break;if(63!=fV(n.i,n.d))break;if(++n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));switch(t=fV(n.i,n.d++)){case 58:i=13;break;case 61:i=14;break;case 33:i=15;break;case 91:i=19;break;case 62:i=18;break;case 60:if(n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));if(61==(t=fV(n.i,n.d++)))i=16;else{if(33!=t)throw Hp(new ak(kWn((u$(),v8n))));i=17}break;case 35:for(;n.d<n.j&&41!=(t=fV(n.i,n.d++)););if(41!=t)throw Hp(new ak(kWn((u$(),m8n))));i=21;break;default:if(45==t||97<=t&&t<=122||65<=t&&t<=90){--n.d,i=22;break}if(40==t){i=23;break}throw Hp(new ak(kWn((u$(),p8n))))}break;case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;case 45:512==(512&n.e)&&n.d<n.j&&91==fV(n.i,n.d)?(++n.d,i=24):i=0;break;case 91:if(512!=(512&n.e)&&n.d<n.j&&58==fV(n.i,n.d)){++n.d,i=20;break}default:(64512&t)==HQn&&n.d<n.j&&56320==(64512&(e=fV(n.i,n.d)))&&(n.a=BQn+(t-HQn<<10)+e-56320,++n.d),i=0}n.c=i}}function YXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;if((j=BB(mMn(n,(HXn(),ept)),98))!=(QEn(),QIt)&&j!=YIt){for(s=new J6((lin((b=(w=n.b).c.length)+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),d=new J6((lin(b+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),WB(s,new xp),WB(s,new xp),WB(d,new Np),WB(d,new Np),k=new Np,t=0;t<b;t++)for(l1(t,w.c.length),e=BB(w.c[t],29),l1(t,s.c.length),E=BB(s.c[t],83),g=new xp,s.c[s.c.length]=g,l1(t,d.c.length),M=BB(d.c[t],15),v=new Np,d.c[d.c.length]=v,r=new Wb(e.a);r.a<r.c.c.length;)if(cln(i=BB(n0(r),10)))k.c[k.c.length]=i;else{for(o=new oz(ZL(fbn(i).a.Kc(),new h));dAn(o);)cln(S=(a=BB(U5(o),17)).c.i)&&((T=BB(E.xc(mMn(S,(hWn(),dlt))),10))||(T=oCn(n,S),E.zc(mMn(S,dlt),T),M.Fc(T)),SZ(a,BB(xq(T.j,1),11)));for(u=new oz(ZL(lbn(i).a.Kc(),new h));dAn(u);)cln(P=(a=BB(U5(u),17)).d.i)&&((p=BB(RX(g,mMn(P,(hWn(),dlt))),10))||(p=oCn(n,P),VW(g,mMn(P,dlt),p),v.c[v.c.length]=p),MZ(a,BB(xq(p.j,0),11)))}for(f=0;f<d.c.length;f++)if(l1(f,d.c.length),!(m=BB(d.c[f],15)).dc())for(l=null,0==f?(l=new HX(n),LZ(0,w.c.length),MS(w.c,0,l)):f==s.c.length-1?(l=new HX(n),w.c[w.c.length]=l):(l1(f-1,w.c.length),l=BB(w.c[f-1],29)),c=m.Kc();c.Ob();)PZ(BB(c.Pb(),10),l);for(y=new Wb(k);y.a<y.c.c.length;)PZ(BB(n0(y),10),null);hon(n,(hWn(),Wft),k)}}function JXn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;if(OTn(e,"Coffman-Graham Layering",1),0!=t.a.c.length){for(j=BB(mMn(t,(HXn(),mgt)),19).a,o=0,a=0,b=new Wb(t.a);b.a<b.c.c.length;)for((l=BB(n0(b),10)).p=o++,c=new oz(ZL(lbn(l).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).p=a++;for(n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,a,16,1),n.b=x8(ANt,hQn,25,o,15,1),n.e=x8(ANt,hQn,25,o,15,1),n.f=x8(ANt,hQn,25,o,15,1),win(n.c),rEn(n,t),d=new Xz(new Dd(n)),k=new Wb(t.a);k.a<k.c.c.length;){for(c=new oz(ZL(fbn(m=BB(n0(k),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.b[m.p];0==n.b[m.p]&&F8(eMn(d,m))}for(u=0;0!=d.b.c.length;)for(m=BB(mnn(d),10),n.f[m.p]=u++,c=new oz(ZL(lbn(m).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(p=r.d.i,--n.b[p.p],JCn(n.c,p,iln(n.f[m.p])),0==n.b[p.p]&&F8(eMn(d,p)));for(w=new Xz(new Rd(n)),y=new Wb(t.a);y.a<y.c.c.length;){for(c=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.e[m.p];0==n.e[m.p]&&F8(eMn(w,m))}for(i=r1(t,f=new Np);0!=w.b.c.length;)for(v=BB(mnn(w),10),(i.a.c.length>=j||!Ndn(v,i))&&(i=r1(t,f)),PZ(v,i),c=new oz(ZL(fbn(v).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&F8(eMn(w,g)));for(s=f.c.length-1;s>=0;--s)WB(t.b,(l1(s,f.c.length),BB(f.c[s],29)));t.a.c=x8(Ant,HWn,1,0,5,1),HSn(e)}else HSn(e)}function ZXn(n){var t,e,i,r,c,a,u,o;for(n.b=1,QXn(n),t=null,0==n.c&&94==n.a?(QXn(n),wWn(),wWn(),Yxn(t=new M0(4),0,unt),a=new M0(4)):(wWn(),wWn(),a=new M0(4)),r=!0;1!=(o=n.c);){if(0==o&&93==n.a&&!r){t&&(WGn(t,a),a=t);break}if(e=n.a,i=!1,10==o)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(a,d_n(e)),i=!0;break;case 105:case 73:case 99:case 67:sHn(a,d_n(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(u=DCn(n,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(a,u),i=!0;break;default:e=qDn(n)}else if(24==o&&!r){if(t&&(WGn(t,a),a=t),WGn(a,ZXn(n)),0!=n.c||93!=n.a)throw Hp(new ak(kWn((u$(),N8n))));break}if(QXn(n),!i){if(0==o){if(91==e)throw Hp(new ak(kWn((u$(),x8n))));if(93==e)throw Hp(new ak(kWn((u$(),D8n))));if(45==e&&!r&&93!=n.a)throw Hp(new ak(kWn((u$(),R8n))))}if(0!=n.c||45!=n.a||45==e&&r)Yxn(a,e,e);else{if(QXn(n),1==(o=n.c))throw Hp(new ak(kWn((u$(),$8n))));if(0==o&&93==n.a)Yxn(a,e,e),Yxn(a,45,45);else{if(0==o&&93==n.a||24==o)throw Hp(new ak(kWn((u$(),R8n))));if(c=n.a,0==o){if(91==c)throw Hp(new ak(kWn((u$(),x8n))));if(93==c)throw Hp(new ak(kWn((u$(),D8n))));if(45==c)throw Hp(new ak(kWn((u$(),R8n))))}else 10==o&&(c=qDn(n));if(QXn(n),e>c)throw Hp(new ak(kWn((u$(),F8n))));Yxn(a,e,c)}}}r=!1}if(1==n.c)throw Hp(new ak(kWn((u$(),$8n))));return T$n(a),qHn(a),n.b=0,QXn(n),a}function nWn(n){V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#decimal"])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#integer"])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#boolean"])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EBoolean",t8n,"EBoolean:Object"])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#byte"])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#hexBinary"])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EByte",t8n,"EByte:Object"])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EChar",t8n,"EChar:Object"])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#double"])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EDouble",t8n,"EDouble:Object"])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#float"])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EFloat",t8n,"EFloat:Object"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#int"])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EInt",t8n,"EInt:Object"])),V$n(n.N,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#long"])),V$n(n.O,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"ELong",t8n,"ELong:Object"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#short"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EShort",t8n,"EShort:Object"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#string"]))}function tWn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I;if(1==n.c.length)return l1(0,n.c.length),BB(n.c[0],135);if(n.c.length<=0)return new P6;for(s=new Wb(n);s.a<s.c.c.length;){for(u=BB(n0(s),135),m=0,d=DWn,g=DWn,b=_Vn,w=_Vn,v=spn(u.b,0);v.b!=v.d.c;)p=BB(b3(v),86),m+=BB(mMn(p,(IAn(),$kt)),19).a,d=e.Math.min(d,p.e.a),g=e.Math.min(g,p.e.b),b=e.Math.max(b,p.e.a+p.f.a),w=e.Math.max(w,p.e.b+p.f.b);hon(u,(IAn(),$kt),iln(m)),hon(u,(qqn(),nkt),new xI(d,g)),hon(u,Zyt,new xI(b,w))}for(SQ(),m$(n,new ga),qan(k=new P6,(l1(0,n.c.length),BB(n.c[0],94))),l=0,S=0,h=new Wb(n);h.a<h.c.c.length;)u=BB(n0(h),135),j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8)),l=e.Math.max(l,j.a),S+=j.a*j.b;for(l=e.Math.max(l,e.Math.sqrt(S)*Gy(MD(mMn(k,(IAn(),jkt))))),P=0,I=0,f=0,t=E=Gy(MD(mMn(k,xkt))),o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),135),P+(j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8))).a>l&&(P=0,I+=f+E,f=0),ELn(k,u,P,I),t=e.Math.max(t,P+j.a),f=e.Math.max(f,j.b),P+=j.a+E;for(y=new xp,i=new xp,M=new Wb(n);M.a<M.c.c.length;)for(r=qy(TD(mMn(T=BB(n0(M),135),(sWn(),lSt)))),a=(T.q?T.q:het).vc().Kc();a.Ob();)hU(y,(c=BB(a.Pb(),42)).cd())?GC(BB(c.cd(),146).wg())!==GC(c.dd())&&(r&&hU(i,c.cd())?($T(),BB(c.cd(),146).tg()):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()),r&&VW(i,BB(c.cd(),146),c.dd()))):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()));return k}function eWn(){eWn=O,RXn(),JCn(put=new pJ,(kUn(),dCt),wCt),JCn(put,MCt,wCt),JCn(put,gCt,wCt),JCn(put,jCt,wCt),JCn(put,kCt,wCt),JCn(put,mCt,wCt),JCn(put,jCt,dCt),JCn(put,wCt,hCt),JCn(put,dCt,hCt),JCn(put,MCt,hCt),JCn(put,gCt,hCt),JCn(put,yCt,hCt),JCn(put,jCt,hCt),JCn(put,kCt,hCt),JCn(put,mCt,hCt),JCn(put,bCt,hCt),JCn(put,wCt,ECt),JCn(put,dCt,ECt),JCn(put,hCt,ECt),JCn(put,MCt,ECt),JCn(put,gCt,ECt),JCn(put,yCt,ECt),JCn(put,jCt,ECt),JCn(put,bCt,ECt),JCn(put,TCt,ECt),JCn(put,kCt,ECt),JCn(put,pCt,ECt),JCn(put,mCt,ECt),JCn(put,dCt,MCt),JCn(put,gCt,MCt),JCn(put,jCt,MCt),JCn(put,mCt,MCt),JCn(put,dCt,gCt),JCn(put,MCt,gCt),JCn(put,jCt,gCt),JCn(put,gCt,gCt),JCn(put,kCt,gCt),JCn(put,wCt,fCt),JCn(put,dCt,fCt),JCn(put,hCt,fCt),JCn(put,ECt,fCt),JCn(put,MCt,fCt),JCn(put,gCt,fCt),JCn(put,yCt,fCt),JCn(put,jCt,fCt),JCn(put,TCt,fCt),JCn(put,bCt,fCt),JCn(put,mCt,fCt),JCn(put,kCt,fCt),JCn(put,vCt,fCt),JCn(put,wCt,TCt),JCn(put,dCt,TCt),JCn(put,hCt,TCt),JCn(put,MCt,TCt),JCn(put,gCt,TCt),JCn(put,yCt,TCt),JCn(put,jCt,TCt),JCn(put,bCt,TCt),JCn(put,mCt,TCt),JCn(put,pCt,TCt),JCn(put,vCt,TCt),JCn(put,dCt,bCt),JCn(put,MCt,bCt),JCn(put,gCt,bCt),JCn(put,jCt,bCt),JCn(put,TCt,bCt),JCn(put,mCt,bCt),JCn(put,kCt,bCt),JCn(put,wCt,lCt),JCn(put,dCt,lCt),JCn(put,hCt,lCt),JCn(put,MCt,lCt),JCn(put,gCt,lCt),JCn(put,yCt,lCt),JCn(put,jCt,lCt),JCn(put,bCt,lCt),JCn(put,mCt,lCt),JCn(put,dCt,kCt),JCn(put,hCt,kCt),JCn(put,ECt,kCt),JCn(put,gCt,kCt),JCn(put,wCt,pCt),JCn(put,dCt,pCt),JCn(put,ECt,pCt),JCn(put,MCt,pCt),JCn(put,gCt,pCt),JCn(put,yCt,pCt),JCn(put,jCt,pCt),JCn(put,jCt,vCt),JCn(put,gCt,vCt),JCn(put,bCt,wCt),JCn(put,bCt,MCt),JCn(put,bCt,hCt),JCn(put,yCt,wCt),JCn(put,yCt,dCt),JCn(put,yCt,ECt)}function iWn(n,t){switch(n.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new zQ(n.b,n.a,t,n.c);case 1:return new LL(n.a,t,Awn(t.Tg(),n.c));case 43:return new xL(n.a,t,Awn(t.Tg(),n.c));case 3:return new $L(n.a,t,Awn(t.Tg(),n.c));case 45:return new NL(n.a,t,Awn(t.Tg(),n.c));case 41:return new y9(BB(Ckn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 50:return new yin(BB(Ckn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 5:return new iK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 47:return new rK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 7:return new eU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 49:return new eK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 9:return new FL(n.a,t,Awn(t.Tg(),n.c));case 11:return new _L(n.a,t,Awn(t.Tg(),n.c));case 13:return new KL(n.a,t,Awn(t.Tg(),n.c));case 15:return new MH(n.a,t,Awn(t.Tg(),n.c));case 17:return new BL(n.a,t,Awn(t.Tg(),n.c));case 19:return new RL(n.a,t,Awn(t.Tg(),n.c));case 21:return new DL(n.a,t,Awn(t.Tg(),n.c));case 23:return new yH(n.a,t,Awn(t.Tg(),n.c));case 25:return new fK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 27:return new hK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 29:return new oK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 31:return new cK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 33:return new sK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 35:return new uK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 37:return new aK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 39:return new iU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 40:return new Ecn(t,Awn(t.Tg(),n.c));default:throw Hp(new dy("Unknown feature style: "+n.e))}}function rWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(OTn(e,"Brandes & Koepf node placement",1),n.a=t,n.c=FFn(t),i=BB(mMn(t,(HXn(),Ngt)),274),b=qy(TD(mMn(t,xgt))),n.d=i==(Bjn(),Qht)&&!b||i==Xht,Jqn(n,t),y=null,k=null,g=null,p=null,lin(4,AVn),d=new J6(4),BB(mMn(t,Ngt),274).g){case 3:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),d.c[d.c.length]=g;break;case 1:p=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),nyt)),d.c[d.c.length]=p;break;case 4:y=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),tyt)),d.c[d.c.length]=y;break;case 2:k=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),tyt)),d.c[d.c.length]=k;break;default:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),p=new qKn(t,n.c.d,cyt,nyt),y=new qKn(t,n.c.d,ryt,tyt),k=new qKn(t,n.c.d,cyt,tyt),d.c[d.c.length]=y,d.c[d.c.length]=k,d.c[d.c.length]=g,d.c[d.c.length]=p}for(r=new iI(t,n.c),u=new Wb(d);u.a<u.c.c.length;)PXn(r,c=BB(n0(u),180),n.b),WBn(c);for(l=new Jyn(t,n.c),o=new Wb(d);o.a<o.c.c.length;)Hzn(l,c=BB(n0(o),180));if(e.n)for(s=new Wb(d);s.a<s.c.c.length;)OH(e,(c=BB(n0(s),180))+" size is "+v$n(c));if(f=null,n.d&&CBn(t,h=FUn(n,d,n.c.d),e)&&(f=h),!f)for(s=new Wb(d);s.a<s.c.c.length;)CBn(t,c=BB(n0(s),180),e)&&(!f||v$n(f)>v$n(c))&&(f=c);for(!f&&(l1(0,d.c.length),f=BB(d.c[0],180)),w=new Wb(t.b);w.a<w.c.c.length;)for(m=new Wb(BB(n0(w),29).a);m.a<m.c.c.length;)(v=BB(n0(m),10)).n.b=Gy(f.p[v.p])+Gy(f.d[v.p]);for(e.n&&(OH(e,"Chosen node placement: "+f),OH(e,"Blocks: "+xOn(f)),OH(e,"Classes: "+UAn(f,e)),OH(e,"Marked edges: "+n.b)),a=new Wb(d);a.a<a.c.c.length;)(c=BB(n0(a),180)).g=null,c.b=null,c.a=null,c.d=null,c.j=null,c.i=null,c.p=null;zrn(n.c),n.b.a.$b(),HSn(e)}function cWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(a=new YT,v=BB(mMn(e,(HXn(),Udt)),103),w=0,Frn(a,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=a.b;)s=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33),(GC(ZAn(t,Ldt))!==GC((mon(),Nvt))||GC(ZAn(t,Gdt))===GC((Vvn(),Eht))||GC(ZAn(t,Gdt))===GC((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GC(ZAn(t,Idt))!==GC((Bfn(),wut)))&&!qy(TD(ZAn(s,$dt)))&&Ypn(s,(hWn(),wlt),iln(w++)),!qy(TD(ZAn(s,Ggt)))&&(f=0!=(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a).i,b=kTn(s),l=GC(ZAn(s,sgt))===GC((ufn(),pIt)),g=null,(T=!P8(s,(sWn(),eSt))||mK(SD(ZAn(s,eSt)),w1n))&&l&&(f||b)&&(hon(g=kFn(s),Udt,v),Lx(g,gpt)&&My(new uwn(Gy(MD(mMn(g,gpt)))),g),0!=BB(ZAn(s,Fgt),174).gc()&&(h=g,JT(new Rq(null,(!s.c&&(s.c=new eU(XOt,s,9,9)),new w1(s.c,16))),new Xw(h)),mDn(s,g))),m=e,(y=BB(RX(n.a,JJ(s)),10))&&(m=y.e),d=wzn(n,s,m),g&&(d.e=g,g.e=d,Frn(a,(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a))));for(w=0,r5(a,t,a.c.b,a.c);0!=a.b;){for(o=new AL((!(c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33)).b&&(c.b=new eU(_Ot,c,12,3)),c.b));o.e!=o.i.gc();)tKn(u=BB(kpn(o),79)),(GC(ZAn(t,Ldt))!==GC((mon(),Nvt))||GC(ZAn(t,Gdt))===GC((Vvn(),Eht))||GC(ZAn(t,Gdt))===GC((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GC(ZAn(t,Idt))!==GC((Bfn(),wut)))&&Ypn(u,(hWn(),wlt),iln(w++)),j=PTn(BB(Wtn((!u.b&&(u.b=new hK(KOt,u,4,7)),u.b),0),82)),E=PTn(BB(Wtn((!u.c&&(u.c=new hK(KOt,u,5,8)),u.c),0),82)),qy(TD(ZAn(u,Ggt)))||qy(TD(ZAn(j,Ggt)))||qy(TD(ZAn(E,Ggt)))||(p=c,QCn(u)&&qy(TD(ZAn(j,wgt)))&&qy(TD(ZAn(u,dgt)))||Itn(E,j)?p=j:Itn(j,E)&&(p=E),m=e,(y=BB(RX(n.a,p),10))&&(m=y.e),hon(uWn(n,u,p,m),(hWn(),Fft),Lxn(n,u,t,e)));if(l=GC(ZAn(c,sgt))===GC((ufn(),pIt)))for(r=new AL((!c.a&&(c.a=new eU(UOt,c,10,11)),c.a));r.e!=r.i.gc();)T=!P8(i=BB(kpn(r),33),(sWn(),eSt))||mK(SD(ZAn(i,eSt)),w1n),k=GC(ZAn(i,sgt))===GC(pIt),T&&k&&r5(a,i,a.c.b,a.c)}}function aWn(n,t,e,i,r,c){var a,u,o,s,h,f,l;switch(t){case 71:a=i.q.getFullYear()-sQn>=-1900?1:0,oO(n,e>=4?Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn])[a]:Pun(Gk(Qtt,1),sVn,2,6,["BC","AD"])[a]);break;case 121:opn(n,e,i);break;case 77:XKn(n,e,i);break;case 107:Enn(n,0==(u=r.q.getHours())?24:u,e);break;case 83:RLn(n,e,r);break;case 69:o=i.q.getDay(),oO(n,5==e?Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[o]:4==e?Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[o]:Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[o]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[1]):oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[0]);break;case 104:Enn(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Enn(n,r.q.getHours()%12,e);break;case 72:Enn(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[h]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Enn(n,h,1);break;case 76:f=i.q.getMonth(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[f]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Enn(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,oO(n,e<4?Pun(Gk(Qtt,1),sVn,2,6,["Q1","Q2","Q3","Q4"])[l]:Pun(Gk(Qtt,1),sVn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Enn(n,i.q.getDate(),e);break;case 109:Enn(n,r.q.getMinutes(),e);break;case 115:Enn(n,r.q.getSeconds(),e);break;case 122:oO(n,e<4?c.c[0]:c.c[1]);break;case 118:oO(n,c.b);break;case 90:oO(n,e<3?nCn(c):3==e?wCn(c):dCn(c.a));break;default:return!1}return!0}function uWn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I;if(tKn(t),o=BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82),h=BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82),u=PTn(o),s=PTn(h),a=0==(!t.a&&(t.a=new eU(FOt,t,6,6)),t.a).i?null:BB(Wtn((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),0),202),j=BB(RX(n.a,u),10),S=BB(RX(n.a,s),10),E=null,P=null,cL(o,186)&&(cL(k=BB(RX(n.a,o),299),11)?E=BB(k,11):cL(k,10)&&(j=BB(k,10),E=BB(xq(j.j,0),11))),cL(h,186)&&(cL(M=BB(RX(n.a,h),299),11)?P=BB(M,11):cL(M,10)&&(S=BB(M,10),P=BB(xq(S.j,0),11))),!j||!S)throw Hp(new ck("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(qan(d=new wY,t),hon(d,(hWn(),dlt),t),hon(d,(HXn(),vgt),null),b=BB(mMn(i,Zft),21),j==S&&b.Fc((bDn(),vft)),E||(ain(),y=qvt,T=null,a&&vA(BB(mMn(j,ept),98))&&(Y3(T=new xI(a.j,a.k),XJ(t)),t5(T,e),Itn(s,u)&&(y=Hvt,UR(T,j.n))),E=dHn(j,T,y,i)),P||(ain(),y=Hvt,I=null,a&&vA(BB(mMn(S,ept),98))&&(Y3(I=new xI(a.b,a.c),XJ(t)),t5(I,e)),P=dHn(S,I,y,vW(S))),SZ(d,E),MZ(d,P),(E.e.c.length>1||E.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((bDn(),bft)),l=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));l.e!=l.i.gc();)if(!qy(TD(ZAn(f=BB(kpn(l),137),Ggt)))&&f.a)switch(g=Hhn(f),WB(d.b,g),BB(mMn(g,Ydt),272).g){case 1:case 2:b.Fc((bDn(),fft));break;case 0:b.Fc((bDn(),sft)),hon(g,Ydt,(Rtn(),zPt))}if(c=BB(mMn(i,qdt),314),p=BB(mMn(i,_gt),315),r=c==(Oin(),sht)||p==(Nvn(),pvt),a&&0!=(!a.a&&(a.a=new $L(xOt,a,5)),a.a).i&&r){for(v=qSn(a),w=new km,m=spn(v,0);m.b!=m.d.c;)DH(w,new wA(BB(b3(m),8)));hon(d,glt,w)}return d}function oWn(n){n.gb||(n.gb=!0,n.b=kan(n,0),Rrn(n.b,18),Krn(n.b,19),n.a=kan(n,1),Rrn(n.a,1),Krn(n.a,2),Krn(n.a,3),Krn(n.a,4),Krn(n.a,5),n.o=kan(n,2),Rrn(n.o,8),Rrn(n.o,9),Krn(n.o,10),Krn(n.o,11),Krn(n.o,12),Krn(n.o,13),Krn(n.o,14),Krn(n.o,15),Krn(n.o,16),Krn(n.o,17),Krn(n.o,18),Krn(n.o,19),Krn(n.o,20),Krn(n.o,21),Krn(n.o,22),Krn(n.o,23),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),n.p=kan(n,3),Rrn(n.p,2),Rrn(n.p,3),Rrn(n.p,4),Rrn(n.p,5),Krn(n.p,6),Krn(n.p,7),otn(n.p),otn(n.p),n.q=kan(n,4),Rrn(n.q,8),n.v=kan(n,5),Krn(n.v,9),otn(n.v),otn(n.v),otn(n.v),n.w=kan(n,6),Rrn(n.w,2),Rrn(n.w,3),Rrn(n.w,4),Krn(n.w,5),n.B=kan(n,7),Krn(n.B,1),otn(n.B),otn(n.B),otn(n.B),n.Q=kan(n,8),Krn(n.Q,0),otn(n.Q),n.R=kan(n,9),Rrn(n.R,1),n.S=kan(n,10),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),n.T=kan(n,11),Krn(n.T,10),Krn(n.T,11),Krn(n.T,12),Krn(n.T,13),Krn(n.T,14),otn(n.T),otn(n.T),n.U=kan(n,12),Rrn(n.U,2),Rrn(n.U,3),Krn(n.U,4),Krn(n.U,5),Krn(n.U,6),Krn(n.U,7),otn(n.U),n.V=kan(n,13),Krn(n.V,10),n.W=kan(n,14),Rrn(n.W,18),Rrn(n.W,19),Rrn(n.W,20),Krn(n.W,21),Krn(n.W,22),Krn(n.W,23),n.bb=kan(n,15),Rrn(n.bb,10),Rrn(n.bb,11),Rrn(n.bb,12),Rrn(n.bb,13),Rrn(n.bb,14),Rrn(n.bb,15),Rrn(n.bb,16),Krn(n.bb,17),otn(n.bb),otn(n.bb),n.eb=kan(n,16),Rrn(n.eb,2),Rrn(n.eb,3),Rrn(n.eb,4),Rrn(n.eb,5),Rrn(n.eb,6),Rrn(n.eb,7),Krn(n.eb,8),Krn(n.eb,9),n.ab=kan(n,17),Rrn(n.ab,0),Rrn(n.ab,1),n.H=kan(n,18),Krn(n.H,0),Krn(n.H,1),Krn(n.H,2),Krn(n.H,3),Krn(n.H,4),Krn(n.H,5),otn(n.H),n.db=kan(n,19),Krn(n.db,2),n.c=jan(n,20),n.d=jan(n,21),n.e=jan(n,22),n.f=jan(n,23),n.i=jan(n,24),n.g=jan(n,25),n.j=jan(n,26),n.k=jan(n,27),n.n=jan(n,28),n.r=jan(n,29),n.s=jan(n,30),n.t=jan(n,31),n.u=jan(n,32),n.fb=jan(n,33),n.A=jan(n,34),n.C=jan(n,35),n.D=jan(n,36),n.F=jan(n,37),n.G=jan(n,38),n.I=jan(n,39),n.J=jan(n,40),n.L=jan(n,41),n.M=jan(n,42),n.N=jan(n,43),n.O=jan(n,44),n.P=jan(n,45),n.X=jan(n,46),n.Y=jan(n,47),n.Z=jan(n,48),n.$=jan(n,49),n._=jan(n,50),n.cb=jan(n,51),n.K=jan(n,52))}function sWn(){var n,t;sWn=O,eSt=new up(w5n),mPt=new up(d5n),wvn(),iSt=new $O(W2n,rSt=IMt),new $p,cSt=new $O(VJn,null),aSt=new up(g5n),wEn(),fSt=EG(ZMt,Pun(Gk(qPt,1),$Vn,291,0,[VMt])),hSt=new $O(u3n,fSt),lSt=new $O(X2n,(hN(),!1)),Ffn(),bSt=new $O(J2n,wSt=BPt),Mbn(),vSt=new $O(y2n,mSt=ZPt),jSt=new $O(A4n,!1),ufn(),ESt=new $O(d2n,TSt=vIt),WSt=new WA(12),XSt=new $O(QJn,WSt),ISt=new $O(jZn,!1),CSt=new $O(m3n,!1),USt=new $O(MZn,!1),QEn(),uPt=new $O(EZn,oPt=YIt),gPt=new up(g3n),pPt=new up(pZn),vPt=new up(yZn),kPt=new up(kZn),ASt=new km,OSt=new $O(o3n,ASt),sSt=new $O(f3n,!1),MSt=new $O(l3n,!1),new up(p5n),LSt=new lm,$St=new $O(p3n,LSt),zSt=new $O(z2n,!1),new $p,yPt=new $O(v5n,1),new $O(m5n,!0),iln(0),new $O(y5n,iln(100)),new $O(k5n,!1),iln(0),new $O(j5n,iln(4e3)),iln(0),new $O(E5n,iln(400)),new $O(T5n,!1),new $O(M5n,!1),new $O(S5n,!0),new $O(P5n,!1),Fwn(),uSt=new $O(b5n,oSt=eOt),jPt=new $O(L2n,10),EPt=new $O(N2n,10),TPt=new $O(XJn,20),MPt=new $O(x2n,10),SPt=new $O(mZn,2),PPt=new $O(D2n,10),CPt=new $O(R2n,0),OPt=new $O(F2n,5),APt=new $O(K2n,1),$Pt=new $O(_2n,1),LPt=new $O(vZn,20),NPt=new $O(B2n,10),RPt=new $O(H2n,10),IPt=new up(q2n),DPt=new lA,xPt=new $O(v3n,DPt),YSt=new up(d3n),VSt=new $O(w3n,QSt=!1),xSt=new WA(5),NSt=new $O(Z2n,xSt),n$n(),t=BB(Vj(GIt),9),RSt=new YK(t,BB(SR(t,t.length),9),0),DSt=new $O(IZn,RSt),cpn(),ZSt=new $O(e3n,nPt=BIt),ePt=new up(i3n),iPt=new up(r3n),rPt=new up(c3n),tPt=new up(a3n),n=BB(Vj(YCt),9),_St=new YK(n,BB(SR(n,n.length),9),0),KSt=new $O(PZn,_St),GSt=nbn((n_n(),GCt)),qSt=new $O(SZn,GSt),HSt=new xI(0,0),BSt=new $O(BZn,HSt),FSt=new $O(Y2n,!1),Rtn(),gSt=new $O(s3n,pSt=zPt),dSt=new $O(TZn,!1),new up(I5n),iln(1),new $O(C5n,null),cPt=new up(b3n),sPt=new up(h3n),kUn(),wPt=new $O(U2n,dPt=PCt),aPt=new up(G2n),lCn(),lPt=nbn(rCt),fPt=new $O(CZn,lPt),hPt=new $O(n3n,!1),bPt=new $O(t3n,!0),SSt=new $O(V2n,!1),PSt=new $O(Q2n,!1),ySt=new $O(WJn,1),nMn(),new $O(O5n,kSt=aIt),JSt=!0}function hWn(){var n,t;hWn=O,dlt=new up(OZn),Fft=new up("coordinateOrigin"),Mlt=new up("processors"),_ft=new iR("compoundNode",(hN(),!1)),elt=new iR("insideConnections",!1),glt=new up("originalBendpoints"),plt=new up("originalDummyNodePosition"),vlt=new up("originalLabelEdge"),Plt=new up("representedLabels"),zft=new up("endLabels"),Uft=new up("endLabel.origin"),ult=new iR("labelSide",(Xyn(),MIt)),blt=new iR("maxEdgeThickness",0),Ilt=new iR("reversed",!1),Slt=new up(AZn),hlt=new iR("longEdgeSource",null),flt=new iR("longEdgeTarget",null),slt=new iR("longEdgeHasLabelDummies",!1),olt=new iR("longEdgeBeforeLabelDummy",!1),Gft=new iR("edgeConstraint",(Jun(),Aht)),rlt=new up("inLayerLayoutUnit"),ilt=new iR("inLayerConstraint",(z7(),Pft)),clt=new iR("inLayerSuccessorConstraint",new Np),alt=new iR("inLayerSuccessorConstraintBetweenNonDummies",!1),Elt=new up("portDummy"),Bft=new iR("crossingHint",iln(0)),Zft=new iR("graphProperties",new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),Qft=new iR("externalPortSide",(kUn(),PCt)),Yft=new iR("externalPortSize",new Gj),Wft=new up("externalPortReplacedDummies"),Vft=new up("externalPortReplacedDummy"),Xft=new iR("externalPortConnections",new YK(n=BB(Vj(FCt),9),BB(SR(n,n.length),9),0)),Tlt=new iR(dJn,0),xft=new up("barycenterAssociates"),Klt=new up("TopSideComments"),Dft=new up("BottomSideComments"),Kft=new up("CommentConnectionPort"),tlt=new iR("inputCollect",!1),klt=new iR("outputCollect",!1),qft=new iR("cyclic",!1),Hft=new up("crossHierarchyMap"),Rlt=new up("targetOffset"),new iR("splineLabelSize",new Gj),Alt=new up("spacings"),jlt=new iR("partitionConstraint",!1),Rft=new up("breakingPoint.info"),xlt=new up("splines.survivingEdge"),Nlt=new up("splines.route.start"),$lt=new up("splines.edgeChain"),ylt=new up("originalPortConstraints"),Olt=new up("selfLoopHolder"),Llt=new up("splines.nsPortY"),wlt=new up("modelOrder"),llt=new up("longEdgeTargetNode"),Jft=new iR(z1n,!1),Clt=new iR(z1n,!1),nlt=new up("layerConstraints.hiddenNodes"),mlt=new up("layerConstraints.opposidePort"),Dlt=new up("targetNode.modelOrder")}function fWn(){fWn=O,_nn(),Sbt=new $O(U1n,Pbt=Sht),Gbt=new $O(X1n,(hN(),!1)),z2(),Vbt=new $O(W1n,Qbt=Aft),wwt=new $O(V1n,!1),dwt=new $O(Q1n,!0),Ult=new $O(Y1n,!1),U7(),Nwt=new $O(J1n,xwt=Kvt),iln(1),qwt=new $O(Z1n,iln(7)),Gwt=new $O(n0n,!1),zbt=new $O(t0n,!1),Vvn(),Tbt=new $O(e0n,Mbt=yht),TTn(),lwt=new $O(i0n,bwt=tvt),Tbn(),ewt=new $O(r0n,iwt=qlt),iln(-1),twt=new $O(c0n,iln(-1)),iln(-1),rwt=new $O(a0n,iln(-1)),iln(-1),cwt=new $O(u0n,iln(4)),iln(-1),uwt=new $O(o0n,iln(2)),sNn(),hwt=new $O(s0n,fwt=Cvt),iln(0),swt=new $O(h0n,iln(0)),Zbt=new $O(f0n,iln(DWn)),Oin(),jbt=new $O(l0n,Ebt=hht),ubt=new $O(b0n,!1),gbt=new $O(w0n,.1),ybt=new $O(d0n,!1),iln(-1),vbt=new $O(g0n,iln(-1)),iln(-1),mbt=new $O(p0n,iln(-1)),iln(0),obt=new $O(v0n,iln(40)),Kan(),bbt=new $O(m0n,wbt=Eft),sbt=new $O(y0n,hbt=kft),Nvn(),$wt=new $O(k0n,Lwt=gvt),jwt=new up(j0n),g7(),gwt=new $O(E0n,pwt=qht),Bjn(),mwt=new $O(T0n,ywt=Qht),new $p,Mwt=new $O(M0n,.3),Pwt=new up(S0n),bvn(),Iwt=new $O(P0n,Cwt=lvt),Hcn(),Nbt=new $O(I0n,xbt=Wvt),A6(),Dbt=new $O(C0n,Rbt=Zvt),Usn(),Kbt=new $O(O0n,_bt=rmt),Bbt=new $O(A0n,.2),$bt=new $O($0n,2),_wt=new $O(L0n,null),Bwt=new $O(N0n,10),Fwt=new $O(x0n,10),Hwt=new $O(D0n,20),iln(0),Dwt=new $O(R0n,iln(0)),iln(0),Rwt=new $O(K0n,iln(0)),iln(0),Kwt=new $O(_0n,iln(0)),Xlt=new $O(F0n,!1),JMn(),Qlt=new $O(B0n,Ylt=cft),V8(),Wlt=new $O(H0n,Vlt=aht),Xbt=new $O(q0n,!1),iln(0),Ubt=new $O(G0n,iln(16)),iln(0),Wbt=new $O(z0n,iln(5)),$un(),ldt=new $O(U0n,bdt=bmt),zwt=new $O(X0n,10),Wwt=new $O(W0n,1),uin(),edt=new $O(V0n,idt=ght),Ywt=new up(Q0n),ndt=iln(1),iln(0),Zwt=new $O(Y0n,ndt),dcn(),pdt=new $O(J0n,vdt=umt),wdt=new up(Z0n),odt=new $O(n2n,!0),adt=new $O(t2n,2),hdt=new $O(e2n,!0),gSn(),Obt=new $O(i2n,Abt=_ht),$Pn(),Ibt=new $O(r2n,Cbt=Zst),mon(),cbt=new $O(c2n,abt=Nvt),rbt=new $O(a2n,!1),Bfn(),Jlt=new $O(u2n,Zlt=wut),Mhn(),ebt=new $O(o2n,ibt=cvt),nbt=new $O(s2n,0),tbt=new $O(h2n,0),Jbt=jht,Ybt=sht,awt=nvt,owt=nvt,nwt=Ypt,ufn(),pbt=pIt,kbt=hht,dbt=hht,fbt=hht,lbt=pIt,Ewt=mvt,Twt=gvt,vwt=gvt,kwt=gvt,Swt=vvt,Awt=mvt,Owt=mvt,Mbn(),Fbt=JPt,Hbt=JPt,qbt=rmt,Lbt=YPt,Uwt=wmt,Xwt=lmt,Vwt=wmt,Qwt=lmt,rdt=wmt,cdt=lmt,Jwt=dht,tdt=ght,mdt=wmt,ydt=lmt,ddt=wmt,gdt=lmt,sdt=lmt,udt=lmt,fdt=lmt}function lWn(){lWn=O,rot=new nP("DIRECTION_PREPROCESSOR",0),tot=new nP("COMMENT_PREPROCESSOR",1),cot=new nP("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),kot=new nP("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Fot=new nP("PARTITION_PREPROCESSOR",4),Mot=new nP("LABEL_DUMMY_INSERTER",5),Uot=new nP("SELF_LOOP_PREPROCESSOR",6),Oot=new nP("LAYER_CONSTRAINT_PREPROCESSOR",7),Kot=new nP("PARTITION_MIDPROCESSOR",8),got=new nP("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),Not=new nP("NODE_PROMOTION",10),Cot=new nP("LAYER_CONSTRAINT_POSTPROCESSOR",11),_ot=new nP("PARTITION_POSTPROCESSOR",12),lot=new nP("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Wot=new nP("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),Vut=new nP("BREAKING_POINT_INSERTER",15),Lot=new nP("LONG_EDGE_SPLITTER",16),Hot=new nP("PORT_SIDE_PROCESSOR",17),jot=new nP("INVERTED_PORT_PROCESSOR",18),Bot=new nP("PORT_LIST_SORTER",19),Qot=new nP("SORT_BY_INPUT_ORDER_OF_MODEL",20),Dot=new nP("NORTH_SOUTH_PORT_PREPROCESSOR",21),Qut=new nP("BREAKING_POINT_PROCESSOR",22),Rot=new nP(E1n,23),Yot=new nP(T1n,24),Got=new nP("SELF_LOOP_PORT_RESTORER",25),Vot=new nP("SINGLE_EDGE_GRAPH_WRAPPER",26),Eot=new nP("IN_LAYER_CONSTRAINT_PROCESSOR",27),sot=new nP("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),Tot=new nP("LABEL_AND_NODE_SIZE_PROCESSOR",29),yot=new nP("INNERMOST_NODE_MARGIN_CALCULATOR",30),Xot=new nP("SELF_LOOP_ROUTER",31),Zut=new nP("COMMENT_NODE_MARGIN_CALCULATOR",32),uot=new nP("END_LABEL_PREPROCESSOR",33),Pot=new nP("LABEL_DUMMY_SWITCHER",34),Jut=new nP("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),Iot=new nP("LABEL_SIDE_SELECTOR",36),vot=new nP("HYPEREDGE_DUMMY_MERGER",37),bot=new nP("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),Aot=new nP("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),dot=new nP("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),eot=new nP("CONSTRAINTS_POSTPROCESSOR",41),not=new nP("COMMENT_POSTPROCESSOR",42),mot=new nP("HYPERNODE_PROCESSOR",43),wot=new nP("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),$ot=new nP("LONG_EDGE_JOINER",45),zot=new nP("SELF_LOOP_POSTPROCESSOR",46),Yut=new nP("BREAKING_POINT_REMOVER",47),xot=new nP("NORTH_SOUTH_PORT_POSTPROCESSOR",48),pot=new nP("HORIZONTAL_COMPACTOR",49),Sot=new nP("LABEL_DUMMY_REMOVER",50),hot=new nP("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),oot=new nP("END_LABEL_SORTER",52),qot=new nP("REVERSED_EDGE_RESTORER",53),aot=new nP("END_LABEL_POSTPROCESSOR",54),fot=new nP("HIERARCHICAL_NODE_RESIZER",55),iot=new nP("DIRECTION_POSTPROCESSOR",56)}function bWn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A,$,L,N,x,D,R,K,_,F,B,H,q,G,z,U,X,W,V,Q,Y,J,Z,nn,tn,en,rn,cn,an,un,on;for(J=0,L=0,D=(O=t).length;L<D;++L)for(G=new Wb((I=O[L]).j);G.a<G.c.c.length;){for(U=0,o=new Wb((q=BB(n0(G),11)).g);o.a<o.c.c.length;)u=BB(n0(o),17),I.c!=u.d.i.c&&++U;U>0&&(n.a[q.p]=J++)}for(rn=0,N=0,R=(A=i).length;N<R;++N){for(K=0,G=new Wb((I=A[N]).j);G.a<G.c.c.length&&(q=BB(n0(G),11)).j==(kUn(),sCt);)for(o=new Wb(q.e);o.a<o.c.c.length;)if(u=BB(n0(o),17),I.c!=u.c.i.c){++K;break}for(F=0,X=new M2(I.j,I.j.c.length);X.b>0;){for(Px(X.b>0),U=0,o=new Wb((q=BB(X.a.Xb(X.c=--X.b),11)).e);o.a<o.c.c.length;)u=BB(n0(o),17),I.c!=u.c.i.c&&++U;U>0&&(q.j==(kUn(),sCt)?(n.a[q.p]=rn,++rn):(n.a[q.p]=rn+K+F,++F))}rn+=F}for(z=new xp,d=new fA,$=0,x=(C=t).length;$<x;++$)for(tn=new Wb((I=C[$]).j);tn.a<tn.c.c.length;)for(o=new Wb((nn=BB(n0(tn),11)).g);o.a<o.c.c.length;)if(an=(u=BB(n0(o),17)).d,I.c!=an.i.c)if(Z=BB(qC(AY(z.f,nn)),467),cn=BB(qC(AY(z.f,an)),467),Z||cn)if(Z)if(cn)if(Z==cn)WB(Z.a,u);else{for(WB(Z.a,u),H=new Wb(cn.d);H.a<H.c.c.length;)B=BB(n0(H),11),jIn(z.f,B,Z);gun(Z.a,cn.a),gun(Z.d,cn.d),d.a.Bc(cn)}else WB(Z.a,u),WB(Z.d,an),jIn(z.f,an,Z);else WB(cn.a,u),WB(cn.d,nn),jIn(z.f,nn,cn);else w=new DR,d.a.zc(w,d),WB(w.a,u),WB(w.d,nn),jIn(z.f,nn,w),WB(w.d,an),jIn(z.f,an,w);for(g=BB(Emn(d,x8(Fmt,{3:1,4:1,5:1,1946:1},467,d.a.gc(),0,1)),1946),P=t[0].c,Y=i[0].c,l=0,b=(f=g).length;l<b;++l)for((h=f[l]).e=J,h.f=rn,G=new Wb(h.d);G.a<G.c.c.length;)q=BB(n0(G),11),W=n.a[q.p],q.i.c==P?(W<h.e&&(h.e=W),W>h.b&&(h.b=W)):q.i.c==Y&&(W<h.f&&(h.f=W),W>h.c&&(h.c=W));for(z9(g,0,g.length,null),en=x8(ANt,hQn,25,g.length,15,1),r=x8(ANt,hQn,25,rn+1,15,1),v=0;v<g.length;v++)en[v]=g[v].f,r[en[v]]=1;for(a=0,m=0;m<r.length;m++)1==r[m]?r[m]=a:--a;for(V=0,y=0;y<en.length;y++)en[y]+=r[en[y]],V=e.Math.max(V,en[y]+1);for(s=1;s<V;)s*=2;for(on=2*s-1,s-=1,un=x8(ANt,hQn,25,on,15,1),c=0,M=0;M<en.length;M++)for(++un[T=en[M]+s];T>0;)T%2>0&&(c+=un[T+1]),++un[T=(T-1)/2|0];for(S=x8(qmt,HWn,362,2*g.length,0,1),k=0;k<g.length;k++)S[2*k]=new qV(g[k],g[k].e,g[k].b,(Q4(),Hmt)),S[2*k+1]=new qV(g[k],g[k].b,g[k].e,Bmt);for(z9(S,0,S.length,null),_=0,j=0;j<S.length;j++)switch(S[j].d.g){case 0:++_;break;case 1:c+=--_}for(Q=x8(qmt,HWn,362,2*g.length,0,1),E=0;E<g.length;E++)Q[2*E]=new qV(g[E],g[E].f,g[E].c,(Q4(),Hmt)),Q[2*E+1]=new qV(g[E],g[E].c,g[E].f,Bmt);for(z9(Q,0,Q.length,null),_=0,p=0;p<Q.length;p++)switch(Q[p].d.g){case 0:++_;break;case 1:c+=--_}return c}function wWn(){wWn=O,sNt=new Ap(7),hNt=new oG(8,94),new oG(8,64),fNt=new oG(8,36),pNt=new oG(8,65),vNt=new oG(8,122),mNt=new oG(8,90),jNt=new oG(8,98),dNt=new oG(8,66),yNt=new oG(8,60),ENt=new oG(8,62),oNt=new Ap(11),Yxn(uNt=new M0(4),48,57),Yxn(kNt=new M0(4),48,57),Yxn(kNt,65,90),Yxn(kNt,95,95),Yxn(kNt,97,122),Yxn(gNt=new M0(4),9,9),Yxn(gNt,10,10),Yxn(gNt,12,12),Yxn(gNt,13,13),Yxn(gNt,32,32),lNt=$Fn(uNt),wNt=$Fn(kNt),bNt=$Fn(gNt),iNt=new xp,rNt=new xp,cNt=Pun(Gk(Qtt,1),sVn,2,6,["Cn","Lu","Ll","Lt","Lm","Lo","Mn","Me","Mc","Nd","Nl","No","Zs","Zl","Zp","Cc","Cf",null,"Co","Cs","Pd","Ps","Pe","Pc","Po","Sm","Sc","Sk","So","Pi","Pf","L","M","N","Z","C","P","S"]),eNt=Pun(Gk(Qtt,1),sVn,2,6,["Basic Latin","Latin-1 Supplement","Latin Extended-A","Latin Extended-B","IPA Extensions","Spacing Modifier Letters","Combining Diacritical Marks","Greek","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul Jamo","Ethiopic","Cherokee","Unified Canadian Aboriginal Syllabics","Ogham","Runic","Khmer","Mongolian","Latin Extended Additional","Greek Extended","General Punctuation","Superscripts and Subscripts","Currency Symbols","Combining Marks for Symbols","Letterlike Symbols","Number Forms","Arrows","Mathematical Operators","Miscellaneous Technical","Control Pictures","Optical Character Recognition","Enclosed Alphanumerics","Box Drawing","Block Elements","Geometric Shapes","Miscellaneous Symbols","Dingbats","Braille Patterns","CJK Radicals Supplement","Kangxi Radicals","Ideographic Description Characters","CJK Symbols and Punctuation","Hiragana","Katakana","Bopomofo","Hangul Compatibility Jamo","Kanbun","Bopomofo Extended","Enclosed CJK Letters and Months","CJK Compatibility","CJK Unified Ideographs Extension A","CJK Unified Ideographs","Yi Syllables","Yi Radicals","Hangul Syllables",gnt,"CJK Compatibility Ideographs","Alphabetic Presentation Forms","Arabic Presentation Forms-A","Combining Half Marks","CJK Compatibility Forms","Small Form Variants","Arabic Presentation Forms-B","Specials","Halfwidth and Fullwidth Forms","Old Italic","Gothic","Deseret","Byzantine Musical Symbols","Musical Symbols","Mathematical Alphanumeric Symbols","CJK Unified Ideographs Extension B","CJK Compatibility Ideographs Supplement","Tags"]),aNt=Pun(Gk(ANt,1),hQn,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function dWn(){dWn=O,Prt=new ocn("OUT_T_L",0,(J9(),Yit),(G7(),irt),(Dtn(),Git),Git,Pun(Gk(Dnt,1),HWn,21,0,[EG((n$n(),LIt),Pun(Gk(GIt,1),$Vn,93,0,[DIt,CIt]))])),Srt=new ocn("OUT_T_C",1,Qit,irt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[DIt,IIt])),EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[DIt,IIt,OIt]))])),Irt=new ocn("OUT_T_R",2,Jit,irt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[DIt,AIt]))])),vrt=new ocn("OUT_B_L",3,Yit,crt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[NIt,CIt]))])),prt=new ocn("OUT_B_C",4,Qit,crt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[NIt,IIt])),EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[NIt,IIt,OIt]))])),mrt=new ocn("OUT_B_R",5,Jit,crt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[NIt,AIt]))])),jrt=new ocn("OUT_L_T",6,Jit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[CIt,DIt,OIt]))])),krt=new ocn("OUT_L_C",7,Jit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[CIt,xIt])),EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[CIt,xIt,OIt]))])),yrt=new ocn("OUT_L_B",8,Jit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[CIt,NIt,OIt]))])),Mrt=new ocn("OUT_R_T",9,Yit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[AIt,DIt,OIt]))])),Trt=new ocn("OUT_R_C",10,Yit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[AIt,xIt])),EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[AIt,xIt,OIt]))])),Ert=new ocn("OUT_R_B",11,Yit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[AIt,NIt,OIt]))])),drt=new ocn("IN_T_L",12,Yit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,CIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,CIt,OIt]))])),wrt=new ocn("IN_T_C",13,Qit,crt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,IIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,IIt,OIt]))])),grt=new ocn("IN_T_R",14,Jit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,AIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,AIt,OIt]))])),lrt=new ocn("IN_C_L",15,Yit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,CIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,CIt,OIt]))])),frt=new ocn("IN_C_C",16,Qit,rrt,zit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,IIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,IIt,OIt]))])),brt=new ocn("IN_C_R",17,Jit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,AIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,AIt,OIt]))])),srt=new ocn("IN_B_L",18,Yit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,CIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,CIt,OIt]))])),ort=new ocn("IN_B_C",19,Qit,irt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,IIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,IIt,OIt]))])),hrt=new ocn("IN_B_R",20,Jit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,AIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,AIt,OIt]))])),Crt=new ocn(hJn,21,null,null,null,null,Pun(Gk(Dnt,1),HWn,21,0,[]))}function gWn(){gWn=O,i$t=(QX(),t$t).b,BB(Wtn(QQ(t$t.b),0),34),BB(Wtn(QQ(t$t.b),1),18),e$t=t$t.a,BB(Wtn(QQ(t$t.a),0),34),BB(Wtn(QQ(t$t.a),1),18),BB(Wtn(QQ(t$t.a),2),18),BB(Wtn(QQ(t$t.a),3),18),BB(Wtn(QQ(t$t.a),4),18),r$t=t$t.o,BB(Wtn(QQ(t$t.o),0),34),BB(Wtn(QQ(t$t.o),1),34),a$t=BB(Wtn(QQ(t$t.o),2),18),BB(Wtn(QQ(t$t.o),3),18),BB(Wtn(QQ(t$t.o),4),18),BB(Wtn(QQ(t$t.o),5),18),BB(Wtn(QQ(t$t.o),6),18),BB(Wtn(QQ(t$t.o),7),18),BB(Wtn(QQ(t$t.o),8),18),BB(Wtn(QQ(t$t.o),9),18),BB(Wtn(QQ(t$t.o),10),18),BB(Wtn(QQ(t$t.o),11),18),BB(Wtn(QQ(t$t.o),12),18),BB(Wtn(QQ(t$t.o),13),18),BB(Wtn(QQ(t$t.o),14),18),BB(Wtn(QQ(t$t.o),15),18),BB(Wtn(VQ(t$t.o),0),59),BB(Wtn(VQ(t$t.o),1),59),BB(Wtn(VQ(t$t.o),2),59),BB(Wtn(VQ(t$t.o),3),59),BB(Wtn(VQ(t$t.o),4),59),BB(Wtn(VQ(t$t.o),5),59),BB(Wtn(VQ(t$t.o),6),59),BB(Wtn(VQ(t$t.o),7),59),BB(Wtn(VQ(t$t.o),8),59),BB(Wtn(VQ(t$t.o),9),59),c$t=t$t.p,BB(Wtn(QQ(t$t.p),0),34),BB(Wtn(QQ(t$t.p),1),34),BB(Wtn(QQ(t$t.p),2),34),BB(Wtn(QQ(t$t.p),3),34),BB(Wtn(QQ(t$t.p),4),18),BB(Wtn(QQ(t$t.p),5),18),BB(Wtn(VQ(t$t.p),0),59),BB(Wtn(VQ(t$t.p),1),59),u$t=t$t.q,BB(Wtn(QQ(t$t.q),0),34),o$t=t$t.v,BB(Wtn(QQ(t$t.v),0),18),BB(Wtn(VQ(t$t.v),0),59),BB(Wtn(VQ(t$t.v),1),59),BB(Wtn(VQ(t$t.v),2),59),s$t=t$t.w,BB(Wtn(QQ(t$t.w),0),34),BB(Wtn(QQ(t$t.w),1),34),BB(Wtn(QQ(t$t.w),2),34),BB(Wtn(QQ(t$t.w),3),18),h$t=t$t.B,BB(Wtn(QQ(t$t.B),0),18),BB(Wtn(VQ(t$t.B),0),59),BB(Wtn(VQ(t$t.B),1),59),BB(Wtn(VQ(t$t.B),2),59),b$t=t$t.Q,BB(Wtn(QQ(t$t.Q),0),18),BB(Wtn(VQ(t$t.Q),0),59),w$t=t$t.R,BB(Wtn(QQ(t$t.R),0),34),d$t=t$t.S,BB(Wtn(VQ(t$t.S),0),59),BB(Wtn(VQ(t$t.S),1),59),BB(Wtn(VQ(t$t.S),2),59),BB(Wtn(VQ(t$t.S),3),59),BB(Wtn(VQ(t$t.S),4),59),BB(Wtn(VQ(t$t.S),5),59),BB(Wtn(VQ(t$t.S),6),59),BB(Wtn(VQ(t$t.S),7),59),BB(Wtn(VQ(t$t.S),8),59),BB(Wtn(VQ(t$t.S),9),59),BB(Wtn(VQ(t$t.S),10),59),BB(Wtn(VQ(t$t.S),11),59),BB(Wtn(VQ(t$t.S),12),59),BB(Wtn(VQ(t$t.S),13),59),BB(Wtn(VQ(t$t.S),14),59),g$t=t$t.T,BB(Wtn(QQ(t$t.T),0),18),BB(Wtn(QQ(t$t.T),2),18),p$t=BB(Wtn(QQ(t$t.T),3),18),BB(Wtn(QQ(t$t.T),4),18),BB(Wtn(VQ(t$t.T),0),59),BB(Wtn(VQ(t$t.T),1),59),BB(Wtn(QQ(t$t.T),1),18),v$t=t$t.U,BB(Wtn(QQ(t$t.U),0),34),BB(Wtn(QQ(t$t.U),1),34),BB(Wtn(QQ(t$t.U),2),18),BB(Wtn(QQ(t$t.U),3),18),BB(Wtn(QQ(t$t.U),4),18),BB(Wtn(QQ(t$t.U),5),18),BB(Wtn(VQ(t$t.U),0),59),m$t=t$t.V,BB(Wtn(QQ(t$t.V),0),18),y$t=t$t.W,BB(Wtn(QQ(t$t.W),0),34),BB(Wtn(QQ(t$t.W),1),34),BB(Wtn(QQ(t$t.W),2),34),BB(Wtn(QQ(t$t.W),3),18),BB(Wtn(QQ(t$t.W),4),18),BB(Wtn(QQ(t$t.W),5),18),j$t=t$t.bb,BB(Wtn(QQ(t$t.bb),0),34),BB(Wtn(QQ(t$t.bb),1),34),BB(Wtn(QQ(t$t.bb),2),34),BB(Wtn(QQ(t$t.bb),3),34),BB(Wtn(QQ(t$t.bb),4),34),BB(Wtn(QQ(t$t.bb),5),34),BB(Wtn(QQ(t$t.bb),6),34),BB(Wtn(QQ(t$t.bb),7),18),BB(Wtn(VQ(t$t.bb),0),59),BB(Wtn(VQ(t$t.bb),1),59),E$t=t$t.eb,BB(Wtn(QQ(t$t.eb),0),34),BB(Wtn(QQ(t$t.eb),1),34),BB(Wtn(QQ(t$t.eb),2),34),BB(Wtn(QQ(t$t.eb),3),34),BB(Wtn(QQ(t$t.eb),4),34),BB(Wtn(QQ(t$t.eb),5),34),BB(Wtn(QQ(t$t.eb),6),18),BB(Wtn(QQ(t$t.eb),7),18),k$t=t$t.ab,BB(Wtn(QQ(t$t.ab),0),34),BB(Wtn(QQ(t$t.ab),1),34),f$t=t$t.H,BB(Wtn(QQ(t$t.H),0),18),BB(Wtn(QQ(t$t.H),1),18),BB(Wtn(QQ(t$t.H),2),18),BB(Wtn(QQ(t$t.H),3),18),BB(Wtn(QQ(t$t.H),4),18),BB(Wtn(QQ(t$t.H),5),18),BB(Wtn(VQ(t$t.H),0),59),T$t=t$t.db,BB(Wtn(QQ(t$t.db),0),18),l$t=t$t.M}function pWn(n){var t;n.O||(n.O=!0,Nrn(n,"type"),xrn(n,"ecore.xml.type"),Drn(n,S7n),t=BB($$n((WM(),zAt),S7n),1945),f9(kY(n.fb),n.b),z0(n.b,wLt,"AnyType",!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.D,K9n,null,0,-1,wLt,!1,!1,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.D,"any",null,0,-1,wLt,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),2),34),n.wb.D,"anyAttribute",null,0,-1,wLt,!1,!1,!0,!1,!1,!1),z0(n.bb,zLt,A7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.gb,"data",null,0,1,zLt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.gb,Y6n,null,1,1,zLt,!1,!1,!0,!1,!0,!1),z0(n.fb,ULt,$7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.fb),0),34),t.gb,"rawValue",null,0,1,ULt,!0,!0,!0,!1,!0,!0),ucn(BB(Wtn(QQ(n.fb),1),34),t.a,E6n,null,0,1,ULt,!0,!0,!0,!1,!0,!0),Myn(BB(Wtn(QQ(n.fb),2),18),n.wb.q,null,"instanceType",1,1,ULt,!1,!1,!0,!1,!1,!1,!1),z0(n.qb,XLt,L7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),0),34),n.wb.D,K9n,null,0,-1,null,!1,!1,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),1),18),n.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),2),18),n.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.qb),3),34),n.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),4),34),n.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),Myn(BB(Wtn(QQ(n.qb),5),18),n.bb,null,cnt,0,-2,null,!0,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),6),34),n.gb,O6n,null,0,-2,null,!0,!0,!0,!1,!1,!0),dV(n.a,Ant,"AnySimpleType",!0),dV(n.c,Qtt,"AnyURI",!0),dV(n.d,Gk(NNt,1),"Base64Binary",!0),dV(n.e,$Nt,"Boolean",!0),dV(n.f,ktt,"BooleanObject",!0),dV(n.g,NNt,"Byte",!0),dV(n.i,Ttt,"ByteObject",!0),dV(n.j,Qtt,"Date",!0),dV(n.k,Qtt,"DateTime",!0),dV(n.n,iet,"Decimal",!0),dV(n.o,xNt,"Double",!0),dV(n.p,Ptt,"DoubleObject",!0),dV(n.q,Qtt,"Duration",!0),dV(n.s,Rnt,"ENTITIES",!0),dV(n.r,Rnt,"ENTITIESBase",!0),dV(n.t,Qtt,_7n,!0),dV(n.u,DNt,"Float",!0),dV(n.v,Itt,"FloatObject",!0),dV(n.w,Qtt,"GDay",!0),dV(n.B,Qtt,"GMonth",!0),dV(n.A,Qtt,"GMonthDay",!0),dV(n.C,Qtt,"GYear",!0),dV(n.D,Qtt,"GYearMonth",!0),dV(n.F,Gk(NNt,1),"HexBinary",!0),dV(n.G,Qtt,"ID",!0),dV(n.H,Qtt,"IDREF",!0),dV(n.J,Rnt,"IDREFS",!0),dV(n.I,Rnt,"IDREFSBase",!0),dV(n.K,ANt,"Int",!0),dV(n.M,oet,"Integer",!0),dV(n.L,Att,"IntObject",!0),dV(n.P,Qtt,"Language",!0),dV(n.Q,LNt,"Long",!0),dV(n.R,Rtt,"LongObject",!0),dV(n.S,Qtt,"Name",!0),dV(n.T,Qtt,F7n,!0),dV(n.U,oet,"NegativeInteger",!0),dV(n.V,Qtt,Q7n,!0),dV(n.X,Rnt,"NMTOKENS",!0),dV(n.W,Rnt,"NMTOKENSBase",!0),dV(n.Y,oet,"NonNegativeInteger",!0),dV(n.Z,oet,"NonPositiveInteger",!0),dV(n.$,Qtt,"NormalizedString",!0),dV(n._,Qtt,"NOTATION",!0),dV(n.ab,Qtt,"PositiveInteger",!0),dV(n.cb,Qtt,"QName",!0),dV(n.db,RNt,"Short",!0),dV(n.eb,_tt,"ShortObject",!0),dV(n.gb,Qtt,qVn,!0),dV(n.hb,Qtt,"Time",!0),dV(n.ib,Qtt,"Token",!0),dV(n.jb,RNt,"UnsignedByte",!0),dV(n.kb,_tt,"UnsignedByteObject",!0),dV(n.lb,LNt,"UnsignedInt",!0),dV(n.mb,Rtt,"UnsignedIntObject",!0),dV(n.nb,oet,"UnsignedLong",!0),dV(n.ob,ANt,"UnsignedShort",!0),dV(n.pb,Att,"UnsignedShortObject",!0),Lhn(n,S7n),yWn(n))}function vWn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,w1n),"ELK Layered"),"Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level."),new Ic),w1n),EG((hAn(),iAt),Pun(Gk(aAt,1),$Vn,237,0,[nAt,tAt,ZOt,eAt,YOt,QOt]))))),u2(n,w1n,L2n,mpn(ppt)),u2(n,w1n,N2n,mpn(vpt)),u2(n,w1n,XJn,mpn(mpt)),u2(n,w1n,x2n,mpn(ypt)),u2(n,w1n,mZn,mpn(jpt)),u2(n,w1n,D2n,mpn(Ept)),u2(n,w1n,R2n,mpn(Spt)),u2(n,w1n,K2n,mpn(Ipt)),u2(n,w1n,_2n,mpn(Cpt)),u2(n,w1n,F2n,mpn(Ppt)),u2(n,w1n,vZn,mpn(Opt)),u2(n,w1n,B2n,mpn($pt)),u2(n,w1n,H2n,mpn(Npt)),u2(n,w1n,q2n,mpn(Mpt)),u2(n,w1n,L0n,mpn(gpt)),u2(n,w1n,x0n,mpn(kpt)),u2(n,w1n,N0n,mpn(Tpt)),u2(n,w1n,D0n,mpn(Apt)),u2(n,w1n,pZn,iln(0)),u2(n,w1n,R0n,mpn(fpt)),u2(n,w1n,K0n,mpn(lpt)),u2(n,w1n,_0n,mpn(bpt)),u2(n,w1n,U0n,mpn(zpt)),u2(n,w1n,X0n,mpn(Rpt)),u2(n,w1n,W0n,mpn(Kpt)),u2(n,w1n,V0n,mpn(Bpt)),u2(n,w1n,Q0n,mpn(_pt)),u2(n,w1n,Y0n,mpn(Fpt)),u2(n,w1n,J0n,mpn(Xpt)),u2(n,w1n,Z0n,mpn(Upt)),u2(n,w1n,n2n,mpn(qpt)),u2(n,w1n,t2n,mpn(Hpt)),u2(n,w1n,e2n,mpn(Gpt)),u2(n,w1n,S0n,mpn(Rgt)),u2(n,w1n,P0n,mpn(Kgt)),u2(n,w1n,O0n,mpn(rgt)),u2(n,w1n,A0n,mpn(cgt)),u2(n,w1n,QJn,Ugt),u2(n,w1n,y2n,ngt),u2(n,w1n,G2n,0),u2(n,w1n,yZn,iln(1)),u2(n,w1n,VJn,dZn),u2(n,w1n,z2n,mpn(Ggt)),u2(n,w1n,EZn,mpn(ept)),u2(n,w1n,U2n,mpn(upt)),u2(n,w1n,X2n,mpn(zdt)),u2(n,w1n,W2n,mpn(kdt)),u2(n,w1n,d2n,mpn(sgt)),u2(n,w1n,kZn,(hN(),!0)),u2(n,w1n,V2n,mpn(wgt)),u2(n,w1n,Q2n,mpn(dgt)),u2(n,w1n,PZn,mpn(Fgt)),u2(n,w1n,SZn,mpn(qgt)),u2(n,w1n,Y2n,mpn(Bgt)),u2(n,w1n,J2n,Wdt),u2(n,w1n,IZn,mpn($gt)),u2(n,w1n,Z2n,mpn(Agt)),u2(n,w1n,CZn,mpn(cpt)),u2(n,w1n,n3n,mpn(rpt)),u2(n,w1n,t3n,mpn(apt)),u2(n,w1n,e3n,Vgt),u2(n,w1n,i3n,mpn(Ygt)),u2(n,w1n,r3n,mpn(Jgt)),u2(n,w1n,c3n,mpn(Zgt)),u2(n,w1n,a3n,mpn(Qgt)),u2(n,w1n,n0n,mpn(Dpt)),u2(n,w1n,i0n,mpn(Pgt)),u2(n,w1n,s0n,mpn(Sgt)),u2(n,w1n,Z1n,mpn(xpt)),u2(n,w1n,r0n,mpn(kgt)),u2(n,w1n,e0n,mpn(Gdt)),u2(n,w1n,l0n,mpn(qdt)),u2(n,w1n,b0n,mpn(xdt)),u2(n,w1n,v0n,mpn(Ddt)),u2(n,w1n,m0n,mpn(Kdt)),u2(n,w1n,y0n,mpn(Rdt)),u2(n,w1n,d0n,mpn(Hdt)),u2(n,w1n,V1n,mpn(Cgt)),u2(n,w1n,Q1n,mpn(Ogt)),u2(n,w1n,W1n,mpn(pgt)),u2(n,w1n,k0n,mpn(_gt)),u2(n,w1n,T0n,mpn(Ngt)),u2(n,w1n,X1n,mpn(ugt)),u2(n,w1n,M0n,mpn(Dgt)),u2(n,w1n,I0n,mpn(egt)),u2(n,w1n,C0n,mpn(igt)),u2(n,w1n,u3n,mpn(Ndt)),u2(n,w1n,E0n,mpn(Lgt)),u2(n,w1n,B0n,mpn(Pdt)),u2(n,w1n,H0n,mpn(Sdt)),u2(n,w1n,F0n,mpn(Mdt)),u2(n,w1n,q0n,mpn(fgt)),u2(n,w1n,G0n,mpn(hgt)),u2(n,w1n,z0n,mpn(lgt)),u2(n,w1n,BZn,mpn(Hgt)),u2(n,w1n,o3n,mpn(vgt)),u2(n,w1n,WJn,mpn(agt)),u2(n,w1n,s3n,mpn(Ydt)),u2(n,w1n,TZn,mpn(Qdt)),u2(n,w1n,w0n,mpn(_dt)),u2(n,w1n,h3n,mpn(ipt)),u2(n,w1n,f3n,mpn(Tdt)),u2(n,w1n,l3n,mpn(bgt)),u2(n,w1n,b3n,mpn(npt)),u2(n,w1n,w3n,mpn(Xgt)),u2(n,w1n,d3n,mpn(Wgt)),u2(n,w1n,u0n,mpn(Egt)),u2(n,w1n,o0n,mpn(Tgt)),u2(n,w1n,g3n,mpn(spt)),u2(n,w1n,Y1n,mpn(jdt)),u2(n,w1n,h0n,mpn(Mgt)),u2(n,w1n,i2n,mpn(Jdt)),u2(n,w1n,r2n,mpn(Vdt)),u2(n,w1n,p3n,mpn(Igt)),u2(n,w1n,f0n,mpn(mgt)),u2(n,w1n,j0n,mpn(xgt)),u2(n,w1n,v3n,mpn(Lpt)),u2(n,w1n,U1n,mpn(Xdt)),u2(n,w1n,J1n,mpn(opt)),u2(n,w1n,$0n,mpn(tgt)),u2(n,w1n,c0n,mpn(ygt)),u2(n,w1n,g0n,mpn(Fdt)),u2(n,w1n,m3n,mpn(ggt)),u2(n,w1n,a0n,mpn(jgt)),u2(n,w1n,p0n,mpn(Bdt)),u2(n,w1n,c2n,mpn(Ldt)),u2(n,w1n,o2n,mpn(Adt)),u2(n,w1n,s2n,mpn(Cdt)),u2(n,w1n,h2n,mpn(Odt)),u2(n,w1n,a2n,mpn($dt)),u2(n,w1n,u2n,mpn(Idt)),u2(n,w1n,t0n,mpn(ogt))}function mWn(n,t){var e;return nNt||(nNt=new xp,tNt=new xp,wWn(),wWn(),ydn(e=new M0(4),"\t\n\r\r "),mZ(nNt,fnt,e),mZ(tNt,fnt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),dnt),sHn(e,BB(SJ(nNt,snt),117)),mZ(nNt,hnt,e),mZ(tNt,hnt,$Fn(e)),ydn(e=new M0(4),"-.0:AZ__az\xb7\xb7\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u02d0\u02d1\u0300\u0345\u0360\u0361\u0386\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0483\u0486\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05a1\u05a3\u05b9\u05bb\u05bd\u05bf\u05bf\u05c1\u05c2\u05c4\u05c4\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0640\u0652\u0660\u0669\u0670\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06e8\u06ea\u06ed\u06f0\u06f9\u0901\u0903\u0905\u0939\u093c\u094d\u0951\u0954\u0958\u0963\u0966\u096f\u0981\u0983\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bc\u09bc\u09be\u09c4\u09c7\u09c8\u09cb\u09cd\u09d7\u09d7\u09dc\u09dd\u09df\u09e3\u09e6\u09f1\u0a02\u0a02\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3c\u0a3e\u0a42\u0a47\u0a48\u0a4b\u0a4d\u0a59\u0a5c\u0a5e\u0a5e\u0a66\u0a74\u0a81\u0a83\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abc\u0ac5\u0ac7\u0ac9\u0acb\u0acd\u0ae0\u0ae0\u0ae6\u0aef\u0b01\u0b03\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3c\u0b43\u0b47\u0b48\u0b4b\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f\u0b61\u0b66\u0b6f\u0b82\u0b83\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0bbe\u0bc2\u0bc6\u0bc8\u0bca\u0bcd\u0bd7\u0bd7\u0be7\u0bef\u0c01\u0c03\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c3e\u0c44\u0c46\u0c48\u0c4a\u0c4d\u0c55\u0c56\u0c60\u0c61\u0c66\u0c6f\u0c82\u0c83\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cbe\u0cc4\u0cc6\u0cc8\u0cca\u0ccd\u0cd5\u0cd6\u0cde\u0cde\u0ce0\u0ce1\u0ce6\u0cef\u0d02\u0d03\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d3e\u0d43\u0d46\u0d48\u0d4a\u0d4d\u0d57\u0d57\u0d60\u0d61\u0d66\u0d6f\u0e01\u0e2e\u0e30\u0e3a\u0e40\u0e4e\u0e50\u0e59\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb9\u0ebb\u0ebd\u0ec0\u0ec4\u0ec6\u0ec6\u0ec8\u0ecd\u0ed0\u0ed9\u0f18\u0f19\u0f20\u0f29\u0f35\u0f35\u0f37\u0f37\u0f39\u0f39\u0f3e\u0f47\u0f49\u0f69\u0f71\u0f84\u0f86\u0f8b\u0f90\u0f95\u0f97\u0f97\u0f99\u0fad\u0fb1\u0fb7\u0fb9\u0fb9\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u20d0\u20dc\u20e1\u20e1\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302f\u3031\u3035\u3041\u3094\u3099\u309a\u309d\u309e\u30a1\u30fa\u30fc\u30fe\u3105\u312c\u4e00\u9fa5\uac00\ud7a3"),mZ(nNt,lnt,e),mZ(tNt,lnt,$Fn(e)),ydn(e=new M0(4),dnt),Yxn(e,95,95),Yxn(e,58,58),mZ(nNt,bnt,e),mZ(tNt,bnt,$Fn(e))),BB(SJ(t?nNt:tNt,n),136)}function yWn(n){V$n(n.a,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anySimpleType"])),V$n(n.b,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyType",F9n,K9n])),V$n(BB(Wtn(QQ(n.b),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.b),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,M7n,P7n,t8n,":1",D7n,"lax"])),V$n(BB(Wtn(QQ(n.b),2),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,p7n,M7n,P7n,t8n,":2",D7n,"lax"])),V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyURI",T7n,y7n])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"base64Binary",T7n,y7n])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$Wn,T7n,y7n])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"boolean:Object",J9n,$Wn])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,S9n])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"byte:Object",J9n,S9n])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"date",T7n,y7n])),V$n(n.k,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"dateTime",T7n,y7n])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"decimal",T7n,y7n])),V$n(n.o,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,I9n,T7n,y7n])),V$n(n.p,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"double:Object",J9n,I9n])),V$n(n.q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"duration",T7n,y7n])),V$n(n.s,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ENTITIES",J9n,R7n,K7n,"1"])),V$n(n.r,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,R7n,k7n,_7n])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,_7n,J9n,F7n])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,C9n,T7n,y7n])),V$n(n.v,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"float:Object",J9n,C9n])),V$n(n.w,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gDay",T7n,y7n])),V$n(n.B,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonth",T7n,y7n])),V$n(n.A,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonthDay",T7n,y7n])),V$n(n.C,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYear",T7n,y7n])),V$n(n.D,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYearMonth",T7n,y7n])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"hexBinary",T7n,y7n])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ID",J9n,F7n])),V$n(n.H,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREF",J9n,F7n])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREFS",J9n,B7n,K7n,"1"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,B7n,k7n,"IDREF"])),V$n(n.K,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,O9n])),V$n(n.M,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,H7n])),V$n(n.L,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"int:Object",J9n,O9n])),V$n(n.P,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"language",J9n,q7n,G7n,z7n])),V$n(n.Q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,A9n])),V$n(n.R,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"long:Object",J9n,A9n])),V$n(n.S,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"Name",J9n,q7n,G7n,U7n])),V$n(n.T,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,F7n,J9n,"Name",G7n,X7n])),V$n(n.U,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"negativeInteger",J9n,W7n,V7n,"-1"])),V$n(n.V,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Q7n,J9n,q7n,G7n,"\\c+"])),V$n(n.X,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NMTOKENS",J9n,Y7n,K7n,"1"])),V$n(n.W,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Y7n,k7n,Q7n])),V$n(n.Y,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,J7n,J9n,H7n,Z7n,"0"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,W7n,J9n,H7n,V7n,"0"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,nnt,J9n,NWn,T7n,"replace"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NOTATION",T7n,y7n])),V$n(n.ab,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"positiveInteger",J9n,J7n,Z7n,"1"])),V$n(n.bb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"processingInstruction_._type",F9n,"empty"])),V$n(BB(Wtn(QQ(n.bb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"data"])),V$n(BB(Wtn(QQ(n.bb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,Y6n])),V$n(n.cb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"QName",T7n,y7n])),V$n(n.db,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$9n])),V$n(n.eb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"short:Object",J9n,$9n])),V$n(n.fb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"simpleAnyType",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":3",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":4",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":5",F9n,d7n])),V$n(n.gb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,NWn,T7n,"preserve"])),V$n(n.hb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"time",T7n,y7n])),V$n(n.ib,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,q7n,J9n,nnt,T7n,y7n])),V$n(n.jb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,tnt,V7n,"255",Z7n,"0"])),V$n(n.kb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedByte:Object",J9n,tnt])),V$n(n.lb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,ent,V7n,"4294967295",Z7n,"0"])),V$n(n.mb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedInt:Object",J9n,ent])),V$n(n.nb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedLong",J9n,J7n,V7n,int,Z7n,"0"])),V$n(n.ob,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,rnt,V7n,"65535",Z7n,"0"])),V$n(n.pb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedShort:Object",J9n,rnt])),V$n(n.qb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"",F9n,K9n])),V$n(BB(Wtn(QQ(n.qb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.qb),1),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xmlns:prefix"])),V$n(BB(Wtn(QQ(n.qb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xsi:schemaLocation"])),V$n(BB(Wtn(QQ(n.qb),3),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"cDATA",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),4),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"comment",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),5),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,cnt,j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),6),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,O6n,j7n,E7n]))}function kWn(n){return mK("_UI_EMFDiagnostic_marker",n)?"EMF Problem":mK("_UI_CircularContainment_diagnostic",n)?"An object may not circularly contain itself":mK(w8n,n)?"Wrong character.":mK(d8n,n)?"Invalid reference number.":mK(g8n,n)?"A character is required after \\.":mK(p8n,n)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":mK(v8n,n)?"'(?<' or '(?<!' is expected.":mK(m8n,n)?"A comment is not terminated.":mK(y8n,n)?"')' is expected.":mK(k8n,n)?"Unexpected end of the pattern in a modifier group.":mK(j8n,n)?"':' is expected.":mK(E8n,n)?"Unexpected end of the pattern in a conditional group.":mK(T8n,n)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":mK(M8n,n)?"There are more than three choices in a conditional group.":mK(S8n,n)?"A character in U+0040-U+005f must follow \\c.":mK(P8n,n)?"A '{' is required before a character category.":mK(I8n,n)?"A property name is not closed by '}'.":mK(C8n,n)?"Unexpected meta character.":mK(O8n,n)?"Unknown property.":mK(A8n,n)?"A POSIX character class must be closed by ':]'.":mK($8n,n)?"Unexpected end of the pattern in a character class.":mK(L8n,n)?"Unknown name for a POSIX character class.":mK("parser.cc.4",n)?"'-' is invalid here.":mK(N8n,n)?"']' is expected.":mK(x8n,n)?"'[' is invalid in a character class. Write '\\['.":mK(D8n,n)?"']' is invalid in a character class. Write '\\]'.":mK(R8n,n)?"'-' is an invalid character range. Write '\\-'.":mK(K8n,n)?"'[' is expected.":mK(_8n,n)?"')' or '-[' or '+[' or '&[' is expected.":mK(F8n,n)?"The range end code point is less than the start code point.":mK(B8n,n)?"Invalid Unicode hex notation.":mK(H8n,n)?"Overflow in a hex notation.":mK(q8n,n)?"'\\x{' must be closed by '}'.":mK(G8n,n)?"Invalid Unicode code point.":mK(z8n,n)?"An anchor must not be here.":mK(U8n,n)?"This expression is not supported in the current option setting.":mK(X8n,n)?"Invalid quantifier. A digit is expected.":mK(W8n,n)?"Invalid quantifier. Invalid quantity or a '}' is missing.":mK(V8n,n)?"Invalid quantifier. A digit or '}' is expected.":mK(Q8n,n)?"Invalid quantifier. A min quantity must be <= a max quantity.":mK(Y8n,n)?"Invalid quantifier. A quantity value overflow.":mK("_UI_PackageRegistry_extensionpoint",n)?"Ecore Package Registry for Generated Packages":mK("_UI_DynamicPackageRegistry_extensionpoint",n)?"Ecore Package Registry for Dynamic Packages":mK("_UI_FactoryRegistry_extensionpoint",n)?"Ecore Factory Override Registry":mK("_UI_URIExtensionParserRegistry_extensionpoint",n)?"URI Extension Parser Registry":mK("_UI_URIProtocolParserRegistry_extensionpoint",n)?"URI Protocol Parser Registry":mK("_UI_URIContentParserRegistry_extensionpoint",n)?"URI Content Parser Registry":mK("_UI_ContentHandlerRegistry_extensionpoint",n)?"Content Handler Registry":mK("_UI_URIMappingRegistry_extensionpoint",n)?"URI Converter Mapping Registry":mK("_UI_PackageRegistryImplementation_extensionpoint",n)?"Ecore Package Registry Implementation":mK("_UI_ValidationDelegateRegistry_extensionpoint",n)?"Validation Delegate Registry":mK("_UI_SettingDelegateRegistry_extensionpoint",n)?"Feature Setting Delegate Factory Registry":mK("_UI_InvocationDelegateRegistry_extensionpoint",n)?"Operation Invocation Delegate Factory Registry":mK("_UI_EClassInterfaceNotAbstract_diagnostic",n)?"A class that is an interface must also be abstract":mK("_UI_EClassNoCircularSuperTypes_diagnostic",n)?"A class may not be a super type of itself":mK("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",n)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":mK("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",n)?"The opposite of the opposite may not be a reference different from this one":mK("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",n)?"The opposite must be a feature of the reference's type":mK("_UI_EReferenceTransientOppositeNotTransient_diagnostic",n)?"The opposite of a transient reference must be transient if it is proxy resolving":mK("_UI_EReferenceOppositeBothContainment_diagnostic",n)?"The opposite of a containment reference must not be a containment reference":mK("_UI_EReferenceConsistentUnique_diagnostic",n)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":mK("_UI_ETypedElementNoType_diagnostic",n)?"The typed element must have a type":mK("_UI_EAttributeNoDataType_diagnostic",n)?"The generic attribute type must not refer to a class":mK("_UI_EReferenceNoClass_diagnostic",n)?"The generic reference type must not refer to a data type":mK("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",n)?"A generic type can't refer to both a type parameter and a classifier":mK("_UI_EGenericTypeNoClass_diagnostic",n)?"A generic super type must refer to a class":mK("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",n)?"A generic type in this context must refer to a classifier or a type parameter":mK("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",n)?"A generic type may have bounds only when used as a type argument":mK("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",n)?"A generic type must not have both a lower and an upper bound":mK("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",n)?"A generic type with bounds must not also refer to a type parameter or classifier":mK("_UI_EGenericTypeNoArguments_diagnostic",n)?"A generic type may have arguments only if it refers to a classifier":mK("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",n)?"A generic type may only refer to a type parameter that is in scope":n}function jWn(n){var t,e,i,r,c,a,u;n.r||(n.r=!0,Nrn(n,"graph"),xrn(n,"graph"),Drn(n,y6n),cun(n.o,"T"),f9(kY(n.a),n.p),f9(kY(n.f),n.a),f9(kY(n.n),n.f),f9(kY(n.g),n.n),f9(kY(n.c),n.n),f9(kY(n.i),n.c),f9(kY(n.j),n.c),f9(kY(n.d),n.f),f9(kY(n.e),n.a),z0(n.p,Xrt,OJn,!0,!0,!1),u=Tun(a=msn(n.p,n.p,"setProperty")),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),kEn(e,i=nQ(u)),Ujn(a,t,j6n),Ujn(a,t=nQ(u),E6n),u=Tun(a=msn(n.p,null,"getProperty")),t=ZV(n.o),e=nQ(u),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),(c=HTn(a,t=nQ(u),null))&&c.Fi(),a=msn(n.p,n.wb.e,"hasProperty"),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),$yn(a=msn(n.p,n.p,"copyProperties"),n.p,T6n),a=msn(n.p,null,"getAllProperties"),t=ZV(n.wb.P),e=ZV(n.o),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),i=new Kp,f9((!e.d&&(e.d=new $L(VAt,e,1)),e.d),i),e=ZV(n.wb.M),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(a,t,null))&&r.Fi(),z0(n.a,NOt,z5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.a),0),18),n.k,null,M6n,0,-1,NOt,!1,!1,!0,!0,!1,!1,!1),z0(n.f,DOt,X5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.f),0),18),n.g,BB(Wtn(QQ(n.g),0),18),"labels",0,-1,DOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.f),1),34),n.wb._,S6n,null,0,1,DOt,!1,!1,!0,!1,!0,!1),z0(n.n,ROt,"ElkShape",!0,!1,!0),ucn(BB(Wtn(QQ(n.n),0),34),n.wb.t,P6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),1),34),n.wb.t,I6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),2),34),n.wb.t,"x",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),3),34),n.wb.t,"y",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.n,null,"setDimensions"),n.wb.t,I6n),$yn(a,n.wb.t,P6n),$yn(a=msn(n.n,null,"setLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.g,zOt,Z5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.g),0),18),n.f,BB(Wtn(QQ(n.f),0),18),C6n,0,1,zOt,!1,!1,!0,!1,!1,!1,!1),ucn(BB(Wtn(QQ(n.g),1),34),n.wb._,O6n,"",0,1,zOt,!1,!1,!0,!1,!0,!1),z0(n.c,KOt,W5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.c),0),18),n.d,BB(Wtn(QQ(n.d),1),18),"outgoingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.c),1),18),n.d,BB(Wtn(QQ(n.d),2),18),"incomingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),z0(n.i,UOt,n6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.i),0),18),n.j,BB(Wtn(QQ(n.j),0),18),"ports",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),1),18),n.i,BB(Wtn(QQ(n.i),2),18),A6n,0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),2),18),n.i,BB(Wtn(QQ(n.i),1),18),C6n,0,1,UOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),3),18),n.d,BB(Wtn(QQ(n.d),0),18),"containedEdges",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.i),4),34),n.wb.e,$6n,null,0,1,UOt,!0,!0,!1,!1,!0,!0),z0(n.j,XOt,t6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.j),0),18),n.i,BB(Wtn(QQ(n.i),0),18),C6n,0,1,XOt,!1,!1,!0,!1,!1,!1,!1),z0(n.d,_Ot,V5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.d),0),18),n.i,BB(Wtn(QQ(n.i),3),18),"containingNode",0,1,_Ot,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.d),1),18),n.c,BB(Wtn(QQ(n.c),0),18),L6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),2),18),n.c,BB(Wtn(QQ(n.c),1),18),N6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),3),18),n.e,BB(Wtn(QQ(n.e),5),18),x6n,0,-1,_Ot,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.d),4),34),n.wb.e,"hyperedge",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),5),34),n.wb.e,$6n,null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),6),34),n.wb.e,"selfloop",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),7),34),n.wb.e,"connected",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),z0(n.b,xOt,U5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.t,"x",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.t,"y",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.b,null,"set"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.e,FOt,Q5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.e),0),34),n.wb.t,"startX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),1),34),n.wb.t,"startY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),2),34),n.wb.t,"endX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),3),34),n.wb.t,"endY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.e),4),18),n.b,null,D6n,0,-1,FOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),5),18),n.d,BB(Wtn(QQ(n.d),3),18),C6n,0,1,FOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),6),18),n.c,null,R6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),7),18),n.c,null,K6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),8),18),n.e,BB(Wtn(QQ(n.e),9),18),_6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),9),18),n.e,BB(Wtn(QQ(n.e),8),18),F6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),ucn(BB(Wtn(QQ(n.e),10),34),n.wb._,S6n,null,0,1,FOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.e,null,"setStartLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),$yn(a=msn(n.e,null,"setEndLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.k,Hnt,"ElkPropertyToValueMapEntry",!1,!1,!1),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.k),0),34),t,"key",Hnt,!1,!1,!0,!1),ucn(BB(Wtn(QQ(n.k),1),34),n.s,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),dV(n.o,lMt,"IProperty",!0),dV(n.s,Ant,"PropertyValue",!0),Lhn(n,y6n))}function EWn(){EWn=O,(JLt=x8(NNt,v6n,25,BQn,15,1))[9]=35,JLt[10]=19,JLt[13]=19,JLt[32]=51,JLt[33]=49,JLt[34]=33,yU(JLt,35,38,49),JLt[38]=1,yU(JLt,39,45,49),yU(JLt,45,47,-71),JLt[47]=49,yU(JLt,48,58,-71),JLt[58]=61,JLt[59]=49,JLt[60]=1,JLt[61]=49,JLt[62]=33,yU(JLt,63,65,49),yU(JLt,65,91,-3),yU(JLt,91,93,33),JLt[93]=1,JLt[94]=33,JLt[95]=-3,JLt[96]=33,yU(JLt,97,123,-3),yU(JLt,123,183,33),JLt[183]=-87,yU(JLt,184,192,33),yU(JLt,192,215,-19),JLt[215]=33,yU(JLt,216,247,-19),JLt[247]=33,yU(JLt,248,306,-19),yU(JLt,306,308,33),yU(JLt,308,319,-19),yU(JLt,319,321,33),yU(JLt,321,329,-19),JLt[329]=33,yU(JLt,330,383,-19),JLt[383]=33,yU(JLt,384,452,-19),yU(JLt,452,461,33),yU(JLt,461,497,-19),yU(JLt,497,500,33),yU(JLt,500,502,-19),yU(JLt,502,506,33),yU(JLt,506,536,-19),yU(JLt,536,592,33),yU(JLt,592,681,-19),yU(JLt,681,699,33),yU(JLt,699,706,-19),yU(JLt,706,720,33),yU(JLt,720,722,-87),yU(JLt,722,768,33),yU(JLt,768,838,-87),yU(JLt,838,864,33),yU(JLt,864,866,-87),yU(JLt,866,902,33),JLt[902]=-19,JLt[903]=-87,yU(JLt,904,907,-19),JLt[907]=33,JLt[908]=-19,JLt[909]=33,yU(JLt,910,930,-19),JLt[930]=33,yU(JLt,931,975,-19),JLt[975]=33,yU(JLt,976,983,-19),yU(JLt,983,986,33),JLt[986]=-19,JLt[987]=33,JLt[988]=-19,JLt[989]=33,JLt[990]=-19,JLt[991]=33,JLt[992]=-19,JLt[993]=33,yU(JLt,994,1012,-19),yU(JLt,1012,1025,33),yU(JLt,1025,1037,-19),JLt[1037]=33,yU(JLt,1038,1104,-19),JLt[1104]=33,yU(JLt,1105,1117,-19),JLt[1117]=33,yU(JLt,1118,1154,-19),JLt[1154]=33,yU(JLt,1155,1159,-87),yU(JLt,1159,1168,33),yU(JLt,1168,1221,-19),yU(JLt,1221,1223,33),yU(JLt,1223,1225,-19),yU(JLt,1225,1227,33),yU(JLt,1227,1229,-19),yU(JLt,1229,1232,33),yU(JLt,1232,1260,-19),yU(JLt,1260,1262,33),yU(JLt,1262,1270,-19),yU(JLt,1270,1272,33),yU(JLt,1272,1274,-19),yU(JLt,1274,1329,33),yU(JLt,1329,1367,-19),yU(JLt,1367,1369,33),JLt[1369]=-19,yU(JLt,1370,1377,33),yU(JLt,1377,1415,-19),yU(JLt,1415,1425,33),yU(JLt,1425,1442,-87),JLt[1442]=33,yU(JLt,1443,1466,-87),JLt[1466]=33,yU(JLt,1467,1470,-87),JLt[1470]=33,JLt[1471]=-87,JLt[1472]=33,yU(JLt,1473,1475,-87),JLt[1475]=33,JLt[1476]=-87,yU(JLt,1477,1488,33),yU(JLt,1488,1515,-19),yU(JLt,1515,1520,33),yU(JLt,1520,1523,-19),yU(JLt,1523,1569,33),yU(JLt,1569,1595,-19),yU(JLt,1595,1600,33),JLt[1600]=-87,yU(JLt,1601,1611,-19),yU(JLt,1611,1619,-87),yU(JLt,1619,1632,33),yU(JLt,1632,1642,-87),yU(JLt,1642,1648,33),JLt[1648]=-87,yU(JLt,1649,1720,-19),yU(JLt,1720,1722,33),yU(JLt,1722,1727,-19),JLt[1727]=33,yU(JLt,1728,1743,-19),JLt[1743]=33,yU(JLt,1744,1748,-19),JLt[1748]=33,JLt[1749]=-19,yU(JLt,1750,1765,-87),yU(JLt,1765,1767,-19),yU(JLt,1767,1769,-87),JLt[1769]=33,yU(JLt,1770,1774,-87),yU(JLt,1774,1776,33),yU(JLt,1776,1786,-87),yU(JLt,1786,2305,33),yU(JLt,2305,2308,-87),JLt[2308]=33,yU(JLt,2309,2362,-19),yU(JLt,2362,2364,33),JLt[2364]=-87,JLt[2365]=-19,yU(JLt,2366,2382,-87),yU(JLt,2382,2385,33),yU(JLt,2385,2389,-87),yU(JLt,2389,2392,33),yU(JLt,2392,2402,-19),yU(JLt,2402,2404,-87),yU(JLt,2404,2406,33),yU(JLt,2406,2416,-87),yU(JLt,2416,2433,33),yU(JLt,2433,2436,-87),JLt[2436]=33,yU(JLt,2437,2445,-19),yU(JLt,2445,2447,33),yU(JLt,2447,2449,-19),yU(JLt,2449,2451,33),yU(JLt,2451,2473,-19),JLt[2473]=33,yU(JLt,2474,2481,-19),JLt[2481]=33,JLt[2482]=-19,yU(JLt,2483,2486,33),yU(JLt,2486,2490,-19),yU(JLt,2490,2492,33),JLt[2492]=-87,JLt[2493]=33,yU(JLt,2494,2501,-87),yU(JLt,2501,2503,33),yU(JLt,2503,2505,-87),yU(JLt,2505,2507,33),yU(JLt,2507,2510,-87),yU(JLt,2510,2519,33),JLt[2519]=-87,yU(JLt,2520,2524,33),yU(JLt,2524,2526,-19),JLt[2526]=33,yU(JLt,2527,2530,-19),yU(JLt,2530,2532,-87),yU(JLt,2532,2534,33),yU(JLt,2534,2544,-87),yU(JLt,2544,2546,-19),yU(JLt,2546,2562,33),JLt[2562]=-87,yU(JLt,2563,2565,33),yU(JLt,2565,2571,-19),yU(JLt,2571,2575,33),yU(JLt,2575,2577,-19),yU(JLt,2577,2579,33),yU(JLt,2579,2601,-19),JLt[2601]=33,yU(JLt,2602,2609,-19),JLt[2609]=33,yU(JLt,2610,2612,-19),JLt[2612]=33,yU(JLt,2613,2615,-19),JLt[2615]=33,yU(JLt,2616,2618,-19),yU(JLt,2618,2620,33),JLt[2620]=-87,JLt[2621]=33,yU(JLt,2622,2627,-87),yU(JLt,2627,2631,33),yU(JLt,2631,2633,-87),yU(JLt,2633,2635,33),yU(JLt,2635,2638,-87),yU(JLt,2638,2649,33),yU(JLt,2649,2653,-19),JLt[2653]=33,JLt[2654]=-19,yU(JLt,2655,2662,33),yU(JLt,2662,2674,-87),yU(JLt,2674,2677,-19),yU(JLt,2677,2689,33),yU(JLt,2689,2692,-87),JLt[2692]=33,yU(JLt,2693,2700,-19),JLt[2700]=33,JLt[2701]=-19,JLt[2702]=33,yU(JLt,2703,2706,-19),JLt[2706]=33,yU(JLt,2707,2729,-19),JLt[2729]=33,yU(JLt,2730,2737,-19),JLt[2737]=33,yU(JLt,2738,2740,-19),JLt[2740]=33,yU(JLt,2741,2746,-19),yU(JLt,2746,2748,33),JLt[2748]=-87,JLt[2749]=-19,yU(JLt,2750,2758,-87),JLt[2758]=33,yU(JLt,2759,2762,-87),JLt[2762]=33,yU(JLt,2763,2766,-87),yU(JLt,2766,2784,33),JLt[2784]=-19,yU(JLt,2785,2790,33),yU(JLt,2790,2800,-87),yU(JLt,2800,2817,33),yU(JLt,2817,2820,-87),JLt[2820]=33,yU(JLt,2821,2829,-19),yU(JLt,2829,2831,33),yU(JLt,2831,2833,-19),yU(JLt,2833,2835,33),yU(JLt,2835,2857,-19),JLt[2857]=33,yU(JLt,2858,2865,-19),JLt[2865]=33,yU(JLt,2866,2868,-19),yU(JLt,2868,2870,33),yU(JLt,2870,2874,-19),yU(JLt,2874,2876,33),JLt[2876]=-87,JLt[2877]=-19,yU(JLt,2878,2884,-87),yU(JLt,2884,2887,33),yU(JLt,2887,2889,-87),yU(JLt,2889,2891,33),yU(JLt,2891,2894,-87),yU(JLt,2894,2902,33),yU(JLt,2902,2904,-87),yU(JLt,2904,2908,33),yU(JLt,2908,2910,-19),JLt[2910]=33,yU(JLt,2911,2914,-19),yU(JLt,2914,2918,33),yU(JLt,2918,2928,-87),yU(JLt,2928,2946,33),yU(JLt,2946,2948,-87),JLt[2948]=33,yU(JLt,2949,2955,-19),yU(JLt,2955,2958,33),yU(JLt,2958,2961,-19),JLt[2961]=33,yU(JLt,2962,2966,-19),yU(JLt,2966,2969,33),yU(JLt,2969,2971,-19),JLt[2971]=33,JLt[2972]=-19,JLt[2973]=33,yU(JLt,2974,2976,-19),yU(JLt,2976,2979,33),yU(JLt,2979,2981,-19),yU(JLt,2981,2984,33),yU(JLt,2984,2987,-19),yU(JLt,2987,2990,33),yU(JLt,2990,2998,-19),JLt[2998]=33,yU(JLt,2999,3002,-19),yU(JLt,3002,3006,33),yU(JLt,3006,3011,-87),yU(JLt,3011,3014,33),yU(JLt,3014,3017,-87),JLt[3017]=33,yU(JLt,3018,3022,-87),yU(JLt,3022,3031,33),JLt[3031]=-87,yU(JLt,3032,3047,33),yU(JLt,3047,3056,-87),yU(JLt,3056,3073,33),yU(JLt,3073,3076,-87),JLt[3076]=33,yU(JLt,3077,3085,-19),JLt[3085]=33,yU(JLt,3086,3089,-19),JLt[3089]=33,yU(JLt,3090,3113,-19),JLt[3113]=33,yU(JLt,3114,3124,-19),JLt[3124]=33,yU(JLt,3125,3130,-19),yU(JLt,3130,3134,33),yU(JLt,3134,3141,-87),JLt[3141]=33,yU(JLt,3142,3145,-87),JLt[3145]=33,yU(JLt,3146,3150,-87),yU(JLt,3150,3157,33),yU(JLt,3157,3159,-87),yU(JLt,3159,3168,33),yU(JLt,3168,3170,-19),yU(JLt,3170,3174,33),yU(JLt,3174,3184,-87),yU(JLt,3184,3202,33),yU(JLt,3202,3204,-87),JLt[3204]=33,yU(JLt,3205,3213,-19),JLt[3213]=33,yU(JLt,3214,3217,-19),JLt[3217]=33,yU(JLt,3218,3241,-19),JLt[3241]=33,yU(JLt,3242,3252,-19),JLt[3252]=33,yU(JLt,3253,3258,-19),yU(JLt,3258,3262,33),yU(JLt,3262,3269,-87),JLt[3269]=33,yU(JLt,3270,3273,-87),JLt[3273]=33,yU(JLt,3274,3278,-87),yU(JLt,3278,3285,33),yU(JLt,3285,3287,-87),yU(JLt,3287,3294,33),JLt[3294]=-19,JLt[3295]=33,yU(JLt,3296,3298,-19),yU(JLt,3298,3302,33),yU(JLt,3302,3312,-87),yU(JLt,3312,3330,33),yU(JLt,3330,3332,-87),JLt[3332]=33,yU(JLt,3333,3341,-19),JLt[3341]=33,yU(JLt,3342,3345,-19),JLt[3345]=33,yU(JLt,3346,3369,-19),JLt[3369]=33,yU(JLt,3370,3386,-19),yU(JLt,3386,3390,33),yU(JLt,3390,3396,-87),yU(JLt,3396,3398,33),yU(JLt,3398,3401,-87),JLt[3401]=33,yU(JLt,3402,3406,-87),yU(JLt,3406,3415,33),JLt[3415]=-87,yU(JLt,3416,3424,33),yU(JLt,3424,3426,-19),yU(JLt,3426,3430,33),yU(JLt,3430,3440,-87),yU(JLt,3440,3585,33),yU(JLt,3585,3631,-19),JLt[3631]=33,JLt[3632]=-19,JLt[3633]=-87,yU(JLt,3634,3636,-19),yU(JLt,3636,3643,-87),yU(JLt,3643,3648,33),yU(JLt,3648,3654,-19),yU(JLt,3654,3663,-87),JLt[3663]=33,yU(JLt,3664,3674,-87),yU(JLt,3674,3713,33),yU(JLt,3713,3715,-19),JLt[3715]=33,JLt[3716]=-19,yU(JLt,3717,3719,33),yU(JLt,3719,3721,-19),JLt[3721]=33,JLt[3722]=-19,yU(JLt,3723,3725,33),JLt[3725]=-19,yU(JLt,3726,3732,33),yU(JLt,3732,3736,-19),JLt[3736]=33,yU(JLt,3737,3744,-19),JLt[3744]=33,yU(JLt,3745,3748,-19),JLt[3748]=33,JLt[3749]=-19,JLt[3750]=33,JLt[3751]=-19,yU(JLt,3752,3754,33),yU(JLt,3754,3756,-19),JLt[3756]=33,yU(JLt,3757,3759,-19),JLt[3759]=33,JLt[3760]=-19,JLt[3761]=-87,yU(JLt,3762,3764,-19),yU(JLt,3764,3770,-87),JLt[3770]=33,yU(JLt,3771,3773,-87),JLt[3773]=-19,yU(JLt,3774,3776,33),yU(JLt,3776,3781,-19),JLt[3781]=33,JLt[3782]=-87,JLt[3783]=33,yU(JLt,3784,3790,-87),yU(JLt,3790,3792,33),yU(JLt,3792,3802,-87),yU(JLt,3802,3864,33),yU(JLt,3864,3866,-87),yU(JLt,3866,3872,33),yU(JLt,3872,3882,-87),yU(JLt,3882,3893,33),JLt[3893]=-87,JLt[3894]=33,JLt[3895]=-87,JLt[3896]=33,JLt[3897]=-87,yU(JLt,3898,3902,33),yU(JLt,3902,3904,-87),yU(JLt,3904,3912,-19),JLt[3912]=33,yU(JLt,3913,3946,-19),yU(JLt,3946,3953,33),yU(JLt,3953,3973,-87),JLt[3973]=33,yU(JLt,3974,3980,-87),yU(JLt,3980,3984,33),yU(JLt,3984,3990,-87),JLt[3990]=33,JLt[3991]=-87,JLt[3992]=33,yU(JLt,3993,4014,-87),yU(JLt,4014,4017,33),yU(JLt,4017,4024,-87),JLt[4024]=33,JLt[4025]=-87,yU(JLt,4026,4256,33),yU(JLt,4256,4294,-19),yU(JLt,4294,4304,33),yU(JLt,4304,4343,-19),yU(JLt,4343,4352,33),JLt[4352]=-19,JLt[4353]=33,yU(JLt,4354,4356,-19),JLt[4356]=33,yU(JLt,4357,4360,-19),JLt[4360]=33,JLt[4361]=-19,JLt[4362]=33,yU(JLt,4363,4365,-19),JLt[4365]=33,yU(JLt,4366,4371,-19),yU(JLt,4371,4412,33),JLt[4412]=-19,JLt[4413]=33,JLt[4414]=-19,JLt[4415]=33,JLt[4416]=-19,yU(JLt,4417,4428,33),JLt[4428]=-19,JLt[4429]=33,JLt[4430]=-19,JLt[4431]=33,JLt[4432]=-19,yU(JLt,4433,4436,33),yU(JLt,4436,4438,-19),yU(JLt,4438,4441,33),JLt[4441]=-19,yU(JLt,4442,4447,33),yU(JLt,4447,4450,-19),JLt[4450]=33,JLt[4451]=-19,JLt[4452]=33,JLt[4453]=-19,JLt[4454]=33,JLt[4455]=-19,JLt[4456]=33,JLt[4457]=-19,yU(JLt,4458,4461,33),yU(JLt,4461,4463,-19),yU(JLt,4463,4466,33),yU(JLt,4466,4468,-19),JLt[4468]=33,JLt[4469]=-19,yU(JLt,4470,4510,33),JLt[4510]=-19,yU(JLt,4511,4520,33),JLt[4520]=-19,yU(JLt,4521,4523,33),JLt[4523]=-19,yU(JLt,4524,4526,33),yU(JLt,4526,4528,-19),yU(JLt,4528,4535,33),yU(JLt,4535,4537,-19),JLt[4537]=33,JLt[4538]=-19,JLt[4539]=33,yU(JLt,4540,4547,-19),yU(JLt,4547,4587,33),JLt[4587]=-19,yU(JLt,4588,4592,33),JLt[4592]=-19,yU(JLt,4593,4601,33),JLt[4601]=-19,yU(JLt,4602,7680,33),yU(JLt,7680,7836,-19),yU(JLt,7836,7840,33),yU(JLt,7840,7930,-19),yU(JLt,7930,7936,33),yU(JLt,7936,7958,-19),yU(JLt,7958,7960,33),yU(JLt,7960,7966,-19),yU(JLt,7966,7968,33),yU(JLt,7968,8006,-19),yU(JLt,8006,8008,33),yU(JLt,8008,8014,-19),yU(JLt,8014,8016,33),yU(JLt,8016,8024,-19),JLt[8024]=33,JLt[8025]=-19,JLt[8026]=33,JLt[8027]=-19,JLt[8028]=33,JLt[8029]=-19,JLt[8030]=33,yU(JLt,8031,8062,-19),yU(JLt,8062,8064,33),yU(JLt,8064,8117,-19),JLt[8117]=33,yU(JLt,8118,8125,-19),JLt[8125]=33,JLt[8126]=-19,yU(JLt,8127,8130,33),yU(JLt,8130,8133,-19),JLt[8133]=33,yU(JLt,8134,8141,-19),yU(JLt,8141,8144,33),yU(JLt,8144,8148,-19),yU(JLt,8148,8150,33),yU(JLt,8150,8156,-19),yU(JLt,8156,8160,33),yU(JLt,8160,8173,-19),yU(JLt,8173,8178,33),yU(JLt,8178,8181,-19),JLt[8181]=33,yU(JLt,8182,8189,-19),yU(JLt,8189,8400,33),yU(JLt,8400,8413,-87),yU(JLt,8413,8417,33),JLt[8417]=-87,yU(JLt,8418,8486,33),JLt[8486]=-19,yU(JLt,8487,8490,33),yU(JLt,8490,8492,-19),yU(JLt,8492,8494,33),JLt[8494]=-19,yU(JLt,8495,8576,33),yU(JLt,8576,8579,-19),yU(JLt,8579,12293,33),JLt[12293]=-87,JLt[12294]=33,JLt[12295]=-19,yU(JLt,12296,12321,33),yU(JLt,12321,12330,-19),yU(JLt,12330,12336,-87),JLt[12336]=33,yU(JLt,12337,12342,-87),yU(JLt,12342,12353,33),yU(JLt,12353,12437,-19),yU(JLt,12437,12441,33),yU(JLt,12441,12443,-87),yU(JLt,12443,12445,33),yU(JLt,12445,12447,-87),yU(JLt,12447,12449,33),yU(JLt,12449,12539,-19),JLt[12539]=33,yU(JLt,12540,12543,-87),yU(JLt,12543,12549,33),yU(JLt,12549,12589,-19),yU(JLt,12589,19968,33),yU(JLt,19968,40870,-19),yU(JLt,40870,44032,33),yU(JLt,44032,55204,-19),yU(JLt,55204,HQn,33),yU(JLt,57344,65534,33)}function TWn(n){var t,e,i,r,c,a,u;n.hb||(n.hb=!0,Nrn(n,"ecore"),xrn(n,"ecore"),Drn(n,V9n),cun(n.fb,"E"),cun(n.L,"T"),cun(n.P,"K"),cun(n.P,"V"),cun(n.cb,"E"),f9(kY(n.b),n.bb),f9(kY(n.a),n.Q),f9(kY(n.o),n.p),f9(kY(n.p),n.R),f9(kY(n.q),n.p),f9(kY(n.v),n.q),f9(kY(n.w),n.R),f9(kY(n.B),n.Q),f9(kY(n.R),n.Q),f9(kY(n.T),n.eb),f9(kY(n.U),n.R),f9(kY(n.V),n.eb),f9(kY(n.W),n.bb),f9(kY(n.bb),n.eb),f9(kY(n.eb),n.R),f9(kY(n.db),n.R),z0(n.b,BAt,l9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.e,"iD",null,0,1,BAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.b),1),18),n.q,null,"eAttributeType",1,1,BAt,!0,!0,!1,!1,!0,!1,!0),z0(n.a,KAt,s9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.a),0),34),n._,T6n,null,0,1,KAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.a),1),18),n.ab,null,"details",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),2),18),n.Q,BB(Wtn(QQ(n.Q),0),18),"eModelElement",0,1,KAt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),3),18),n.S,null,"contents",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),4),18),n.S,null,"references",0,-1,KAt,!1,!1,!0,!1,!0,!1,!1),z0(n.o,qAt,"EClass",!1,!1,!0),ucn(BB(Wtn(QQ(n.o),0),34),n.e,"abstract",null,0,1,qAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.o),1),34),n.e,"interface",null,0,1,qAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),2),18),n.o,null,"eSuperTypes",0,-1,qAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.o),3),18),n.T,BB(Wtn(QQ(n.T),0),18),"eOperations",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),4),18),n.b,null,"eAllAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),5),18),n.W,null,"eAllReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),6),18),n.W,null,"eReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),7),18),n.b,null,"eAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),8),18),n.W,null,"eAllContainments",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),9),18),n.T,null,"eAllOperations",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),10),18),n.bb,null,"eAllStructuralFeatures",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),11),18),n.o,null,"eAllSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),12),18),n.b,null,"eIDAttribute",0,1,qAt,!0,!0,!1,!1,!1,!1,!0),Myn(BB(Wtn(QQ(n.o),13),18),n.bb,BB(Wtn(QQ(n.bb),7),18),"eStructuralFeatures",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),14),18),n.H,null,"eGenericSuperTypes",0,-1,qAt,!1,!1,!0,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),15),18),n.H,null,"eAllGenericSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),$yn(u=fin(BB(Wtn(VQ(n.o),0),59),n.e,"isSuperTypeOf"),n.o,"someClass"),fin(BB(Wtn(VQ(n.o),1),59),n.I,"getFeatureCount"),$yn(u=fin(BB(Wtn(VQ(n.o),2),59),n.bb,Z9n),n.I,"featureID"),$yn(u=fin(BB(Wtn(VQ(n.o),3),59),n.I,n7n),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.o),4),59),n.bb,Z9n),n._,"featureName"),fin(BB(Wtn(VQ(n.o),5),59),n.I,"getOperationCount"),$yn(u=fin(BB(Wtn(VQ(n.o),6),59),n.T,"getEOperation"),n.I,"operationID"),$yn(u=fin(BB(Wtn(VQ(n.o),7),59),n.I,e7n),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),8),59),n.T,"getOverride"),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),9),59),n.H,"getFeatureType"),n.bb,t7n),z0(n.p,HAt,b9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),0),34),n._,"instanceClassName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.p),1),34),t,"instanceClass",HAt,!0,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),2),34),n.M,r7n,null,0,1,HAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.p),3),34),n._,"instanceTypeName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),Myn(BB(Wtn(QQ(n.p),4),18),n.U,BB(Wtn(QQ(n.U),3),18),"ePackage",0,1,HAt,!0,!1,!1,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.p),5),18),n.db,null,c7n,0,-1,HAt,!1,!1,!0,!0,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.p),0),59),n.e,a7n),n.M,AWn),fin(BB(Wtn(VQ(n.p),1),59),n.I,"getClassifierID"),z0(n.q,GAt,"EDataType",!1,!1,!0),ucn(BB(Wtn(QQ(n.q),0),34),n.e,"serializable",a5n,0,1,GAt,!1,!1,!0,!1,!0,!1),z0(n.v,XAt,"EEnum",!1,!1,!0),Myn(BB(Wtn(QQ(n.v),0),18),n.w,BB(Wtn(QQ(n.w),3),18),"eLiterals",0,-1,XAt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.v),0),59),n.w,u7n),n._,t8n),$yn(u=fin(BB(Wtn(VQ(n.v),1),59),n.w,u7n),n.I,E6n),$yn(u=fin(BB(Wtn(VQ(n.v),2),59),n.w,"getEEnumLiteralByLiteral"),n._,"literal"),z0(n.w,WAt,w9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.w),0),34),n.I,E6n,null,0,1,WAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),1),34),n.A,"instance",null,0,1,WAt,!0,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),2),34),n._,"literal",null,0,1,WAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.w),3),18),n.v,BB(Wtn(QQ(n.v),0),18),"eEnum",0,1,WAt,!0,!1,!1,!1,!1,!1,!1),z0(n.B,HOt,"EFactory",!1,!1,!0),Myn(BB(Wtn(QQ(n.B),0),18),n.U,BB(Wtn(QQ(n.U),2),18),"ePackage",1,1,HOt,!0,!1,!0,!1,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.B),0),59),n.S,"create"),n.o,"eClass"),$yn(u=fin(BB(Wtn(VQ(n.B),1),59),n.M,"createFromString"),n.q,"eDataType"),$yn(u,n._,"literalValue"),$yn(u=fin(BB(Wtn(VQ(n.B),2),59),n._,"convertToString"),n.q,"eDataType"),$yn(u,n.M,"instanceValue"),z0(n.Q,BOt,Y5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.Q),0),18),n.a,BB(Wtn(QQ(n.a),2),18),"eAnnotations",0,-1,BOt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.Q),0),59),n.a,"getEAnnotation"),n._,T6n),z0(n.R,qOt,J5n,!0,!1,!0),ucn(BB(Wtn(QQ(n.R),0),34),n._,t8n,null,0,1,qOt,!1,!1,!0,!1,!0,!1),z0(n.S,LOt,"EObject",!1,!1,!0),fin(BB(Wtn(VQ(n.S),0),59),n.o,"eClass"),fin(BB(Wtn(VQ(n.S),1),59),n.e,"eIsProxy"),fin(BB(Wtn(VQ(n.S),2),59),n.X,"eResource"),fin(BB(Wtn(VQ(n.S),3),59),n.S,"eContainer"),fin(BB(Wtn(VQ(n.S),4),59),n.bb,"eContainingFeature"),fin(BB(Wtn(VQ(n.S),5),59),n.W,"eContainmentFeature"),u=fin(BB(Wtn(VQ(n.S),6),59),null,"eContents"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(u,t,null))&&r.Fi(),u=fin(BB(Wtn(VQ(n.S),7),59),null,"eAllContents"),t=ZV(n.cb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(c=HTn(u,t,null))&&c.Fi(),u=fin(BB(Wtn(VQ(n.S),8),59),null,"eCrossReferences"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(a=HTn(u,t,null))&&a.Fi(),$yn(u=fin(BB(Wtn(VQ(n.S),9),59),n.M,"eGet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),10),59),n.M,"eGet"),n.bb,t7n),$yn(u,n.e,"resolve"),$yn(u=fin(BB(Wtn(VQ(n.S),11),59),null,"eSet"),n.bb,t7n),$yn(u,n.M,"newValue"),$yn(u=fin(BB(Wtn(VQ(n.S),12),59),n.e,"eIsSet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),13),59),null,"eUnset"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),14),59),n.M,"eInvoke"),n.T,i7n),t=ZV(n.fb),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(u,t,"arguments"),_W(u,n.K),z0(n.T,QAt,g9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.T),0),18),n.o,BB(Wtn(QQ(n.o),3),18),o7n,0,1,QAt,!0,!1,!1,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),1),18),n.db,null,c7n,0,-1,QAt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.T),2),18),n.V,BB(Wtn(QQ(n.V),0),18),"eParameters",0,-1,QAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),3),18),n.p,null,"eExceptions",0,-1,QAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.T),4),18),n.H,null,"eGenericExceptions",0,-1,QAt,!1,!1,!0,!0,!1,!0,!1),fin(BB(Wtn(VQ(n.T),0),59),n.I,e7n),$yn(u=fin(BB(Wtn(VQ(n.T),1),59),n.e,"isOverrideOf"),n.T,"someOperation"),z0(n.U,GOt,"EPackage",!1,!1,!0),ucn(BB(Wtn(QQ(n.U),0),34),n._,"nsURI",null,0,1,GOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.U),1),34),n._,"nsPrefix",null,0,1,GOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.U),2),18),n.B,BB(Wtn(QQ(n.B),0),18),"eFactoryInstance",1,1,GOt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.U),3),18),n.p,BB(Wtn(QQ(n.p),4),18),"eClassifiers",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),4),18),n.U,BB(Wtn(QQ(n.U),5),18),"eSubpackages",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),5),18),n.U,BB(Wtn(QQ(n.U),4),18),"eSuperPackage",0,1,GOt,!0,!1,!1,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.U),0),59),n.p,"getEClassifier"),n._,t8n),z0(n.V,YAt,p9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.V),0),18),n.T,BB(Wtn(QQ(n.T),2),18),"eOperation",0,1,YAt,!0,!1,!1,!1,!1,!1,!1),z0(n.W,JAt,v9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.W),0),34),n.e,"containment",null,0,1,JAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.W),1),34),n.e,"container",null,0,1,JAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.W),2),34),n.e,"resolveProxies",a5n,0,1,JAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.W),3),18),n.W,null,"eOpposite",0,1,JAt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.W),4),18),n.o,null,"eReferenceType",1,1,JAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.W),5),18),n.b,null,"eKeys",0,-1,JAt,!1,!1,!0,!1,!0,!1,!1),z0(n.bb,FAt,f9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.e,"changeable",a5n,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.e,"volatile",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),2),34),n.e,"transient",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),3),34),n._,"defaultValueLiteral",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),4),34),n.M,r7n,null,0,1,FAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.bb),5),34),n.e,"unsettable",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),6),34),n.e,"derived",null,0,1,FAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.bb),7),18),n.o,BB(Wtn(QQ(n.o),13),18),o7n,0,1,FAt,!0,!1,!1,!1,!1,!1,!1),fin(BB(Wtn(VQ(n.bb),0),59),n.I,n7n),u=fin(BB(Wtn(VQ(n.bb),1),59),null,"getContainerClass"),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(i=HTn(u,t,null))&&i.Fi(),z0(n.eb,_At,h9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.eb),0),34),n.e,"ordered",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),1),34),n.e,"unique",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),2),34),n.I,"lowerBound",null,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),3),34),n.I,"upperBound","1",0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),4),34),n.e,"many",null,0,1,_At,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.eb),5),34),n.e,"required",null,0,1,_At,!0,!0,!1,!1,!0,!0),Myn(BB(Wtn(QQ(n.eb),6),18),n.p,null,"eType",0,1,_At,!1,!0,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.eb),7),18),n.H,null,"eGenericType",0,1,_At,!1,!0,!0,!0,!1,!0,!1),z0(n.ab,Hnt,"EStringToStringMapEntry",!1,!1,!1),ucn(BB(Wtn(QQ(n.ab),0),34),n._,"key",null,0,1,Hnt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.ab),1),34),n._,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),z0(n.H,VAt,d9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.H),0),18),n.H,null,"eUpperBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),1),18),n.H,null,"eTypeArguments",0,-1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),2),18),n.p,null,"eRawType",1,1,VAt,!0,!1,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.H),3),18),n.H,null,"eLowerBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),4),18),n.db,null,"eTypeParameter",0,1,VAt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),5),18),n.p,null,"eClassifier",0,1,VAt,!1,!1,!0,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.H),0),59),n.e,a7n),n.M,AWn),z0(n.db,O$t,m9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.db),0),18),n.H,null,"eBounds",0,-1,O$t,!1,!1,!0,!0,!1,!1,!1),dV(n.c,iet,"EBigDecimal",!0),dV(n.d,oet,"EBigInteger",!0),dV(n.e,$Nt,"EBoolean",!0),dV(n.f,ktt,"EBooleanObject",!0),dV(n.i,NNt,"EByte",!0),dV(n.g,Gk(NNt,1),"EByteArray",!0),dV(n.j,Ttt,"EByteObject",!0),dV(n.k,ONt,"EChar",!0),dV(n.n,Stt,"ECharacterObject",!0),dV(n.r,mtt,"EDate",!0),dV(n.s,_Nt,"EDiagnosticChain",!1),dV(n.t,xNt,"EDouble",!0),dV(n.u,Ptt,"EDoubleObject",!0),dV(n.fb,uAt,"EEList",!1),dV(n.A,yAt,"EEnumerator",!1),dV(n.C,oLt,"EFeatureMap",!1),dV(n.D,$$t,"EFeatureMapEntry",!1),dV(n.F,DNt,"EFloat",!0),dV(n.G,Itt,"EFloatObject",!0),dV(n.I,ANt,"EInt",!0),dV(n.J,Att,"EIntegerObject",!0),dV(n.L,$nt,"EJavaClass",!0),dV(n.M,Ant,"EJavaObject",!0),dV(n.N,LNt,"ELong",!0),dV(n.O,Rtt,"ELongObject",!0),dV(n.P,Nnt,"EMap",!1),dV(n.X,iLt,"EResource",!1),dV(n.Y,FNt,"EResourceSet",!1),dV(n.Z,RNt,"EShort",!0),dV(n.$,_tt,"EShortObject",!0),dV(n._,Qtt,"EString",!0),dV(n.cb,sAt,"ETreeIterator",!1),dV(n.K,BNt,"EInvocationTargetException",!1),Lhn(n,V9n))}"undefined"!=typeof window?e=window:void 0!==n?e=n:"undefined"!=typeof self&&(e=self);var MWn,SWn,PWn,IWn,CWn,OWn,AWn="object",$Wn="boolean",LWn="number",NWn="string",xWn="function",DWn=2147483647,RWn="java.lang",KWn={3:1},_Wn="com.google.common.base",FWn=", ",BWn="%s (%s) must not be negative",HWn={3:1,4:1,5:1},qWn="negative size: ",GWn="Optional.of(",zWn="null",UWn={198:1,47:1},XWn="com.google.common.collect",WWn={198:1,47:1,125:1},VWn={224:1,3:1},QWn={47:1},YWn="java.util",JWn={83:1},ZWn={20:1,28:1,14:1},nVn=1965,tVn={20:1,28:1,14:1,21:1},eVn={83:1,171:1,161:1},iVn={20:1,28:1,14:1,21:1,84:1},rVn={20:1,28:1,14:1,271:1,21:1,84:1},cVn={47:1,125:1},aVn={345:1,42:1},uVn="AbstractMapEntry",oVn="expectedValuesPerKey",sVn={3:1,6:1,4:1,5:1},hVn=16384,fVn={164:1},lVn={38:1},bVn={l:4194303,m:4194303,h:524287},wVn={196:1},dVn={245:1,3:1,35:1},gVn="range unbounded on this side",pVn={20:1},vVn={20:1,14:1},mVn={3:1,20:1,28:1,14:1},yVn={152:1,3:1,20:1,28:1,14:1,15:1,54:1},kVn={3:1,4:1,5:1,165:1},jVn={3:1,83:1},EVn={20:1,14:1,21:1},TVn={3:1,20:1,28:1,14:1,21:1},MVn={20:1,14:1,21:1,84:1},SVn=461845907,PVn=-862048943,IVn={3:1,6:1,4:1,5:1,165:1},CVn="expectedSize",OVn=1073741824,AVn="initialArraySize",$Vn={3:1,6:1,4:1,9:1,5:1},LVn={20:1,28:1,52:1,14:1,15:1},NVn="arraySize",xVn={20:1,28:1,52:1,14:1,15:1,54:1},DVn={45:1},RVn={365:1},KVn=1e-4,_Vn=-2147483648,FVn="__noinit__",BVn={3:1,102:1,60:1,78:1},HVn="com.google.gwt.core.client.impl",qVn="String",GVn="com.google.gwt.core.client",zVn="anonymous",UVn="fnStack",XVn="Unknown",WVn={195:1,3:1,4:1},VVn=1e3,QVn=65535,YVn="January",JVn="February",ZVn="March",nQn="April",tQn="May",eQn="June",iQn="July",rQn="August",cQn="September",aQn="October",uQn="November",oQn="December",sQn=1900,hQn={48:1,3:1,4:1},fQn="Before Christ",lQn="Anno Domini",bQn="Sunday",wQn="Monday",dQn="Tuesday",gQn="Wednesday",pQn="Thursday",vQn="Friday",mQn="Saturday",yQn="com.google.gwt.i18n.shared",kQn="DateTimeFormat",jQn="com.google.gwt.i18n.client",EQn="DefaultDateTimeFormatInfo",TQn={3:1,4:1,35:1,199:1},MQn="com.google.gwt.json.client",SQn=4194303,PQn=1048575,IQn=524288,CQn=4194304,OQn=17592186044416,AQn=1e9,$Qn=-17592186044416,LQn="java.io",NQn={3:1,102:1,73:1,60:1,78:1},xQn={3:1,289:1,78:1},DQn='For input string: "',RQn=1/0,KQn=-1/0,_Qn=4096,FQn={3:1,4:1,364:1},BQn=65536,HQn=55296,qQn={104:1,3:1,4:1},GQn=1e5,zQn=.3010299956639812,UQn=4294967295,XQn=4294967296,WQn="0.0",VQn={42:1},QQn={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},YQn={3:1,20:1,28:1,52:1,14:1,15:1,54:1},JQn={20:1,14:1,15:1},ZQn={3:1,62:1},nYn={182:1},tYn={3:1,4:1,83:1},eYn={3:1,4:1,20:1,28:1,14:1,53:1,21:1},iYn="delete",rYn=1.4901161193847656e-8,cYn=11102230246251565e-32,aYn=15525485,uYn=5.960464477539063e-8,oYn=16777216,sYn=16777215,hYn=", length: ",fYn={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},lYn={3:1,35:1,22:1,297:1},bYn="java.util.function",wYn="java.util.logging",dYn={3:1,4:1,5:1,842:1},gYn="undefined",pYn="java.util.stream",vYn={525:1,670:1},mYn="fromIndex: ",yYn=" > toIndex: ",kYn=", toIndex: ",jYn="Index: ",EYn=", Size: ",TYn="org.eclipse.elk.alg.common",MYn={62:1},SYn="org.eclipse.elk.alg.common.compaction",PYn="Scanline/EventHandler",IYn="org.eclipse.elk.alg.common.compaction.oned",CYn="CNode belongs to another CGroup.",OYn="ISpacingsHandler/1",AYn="The ",$Yn=" instance has been finished already.",LYn="The direction ",NYn=" is not supported by the CGraph instance.",xYn="OneDimensionalCompactor",DYn="OneDimensionalCompactor/lambda$0$Type",RYn="Quadruplet",KYn="ScanlineConstraintCalculator",_Yn="ScanlineConstraintCalculator/ConstraintsScanlineHandler",FYn="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",BYn="ScanlineConstraintCalculator/Timestamp",HYn="ScanlineConstraintCalculator/lambda$0$Type",qYn={169:1,45:1},GYn="org.eclipse.elk.alg.common.compaction.options",zYn="org.eclipse.elk.core.data",UYn="org.eclipse.elk.polyomino.traversalStrategy",XYn="org.eclipse.elk.polyomino.lowLevelSort",WYn="org.eclipse.elk.polyomino.highLevelSort",VYn="org.eclipse.elk.polyomino.fill",QYn={130:1},YYn="polyomino",JYn="org.eclipse.elk.alg.common.networksimplex",ZYn={177:1,3:1,4:1},nJn="org.eclipse.elk.alg.common.nodespacing",tJn="org.eclipse.elk.alg.common.nodespacing.cellsystem",eJn="CENTER",iJn={212:1,326:1},rJn={3:1,4:1,5:1,595:1},cJn="LEFT",aJn="RIGHT",uJn="Vertical alignment cannot be null",oJn="BOTTOM",sJn="org.eclipse.elk.alg.common.nodespacing.internal",hJn="UNDEFINED",fJn=.01,lJn="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",bJn="LabelPlacer/lambda$0$Type",wJn="LabelPlacer/lambda$1$Type",dJn="portRatioOrPosition",gJn="org.eclipse.elk.alg.common.overlaps",pJn="DOWN",vJn="org.eclipse.elk.alg.common.polyomino",mJn="NORTH",yJn="EAST",kJn="SOUTH",jJn="WEST",EJn="org.eclipse.elk.alg.common.polyomino.structures",TJn="Direction",MJn="Grid is only of size ",SJn=". Requested point (",PJn=") is out of bounds.",IJn=" Given center based coordinates were (",CJn="org.eclipse.elk.graph.properties",OJn="IPropertyHolder",AJn={3:1,94:1,134:1},$Jn="org.eclipse.elk.alg.common.spore",LJn="org.eclipse.elk.alg.common.utils",NJn={209:1},xJn="org.eclipse.elk.core",DJn="Connected Components Compaction",RJn="org.eclipse.elk.alg.disco",KJn="org.eclipse.elk.alg.disco.graph",_Jn="org.eclipse.elk.alg.disco.options",FJn="CompactionStrategy",BJn="org.eclipse.elk.disco.componentCompaction.strategy",HJn="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",qJn="org.eclipse.elk.disco.debug.discoGraph",GJn="org.eclipse.elk.disco.debug.discoPolys",zJn="componentCompaction",UJn="org.eclipse.elk.disco",XJn="org.eclipse.elk.spacing.componentComponent",WJn="org.eclipse.elk.edge.thickness",VJn="org.eclipse.elk.aspectRatio",QJn="org.eclipse.elk.padding",YJn="org.eclipse.elk.alg.disco.transform",JJn=1.5707963267948966,ZJn=17976931348623157e292,nZn={3:1,4:1,5:1,192:1},tZn={3:1,6:1,4:1,5:1,106:1,120:1},eZn="org.eclipse.elk.alg.force",iZn="ComponentsProcessor",rZn="ComponentsProcessor/1",cZn="org.eclipse.elk.alg.force.graph",aZn="Component Layout",uZn="org.eclipse.elk.alg.force.model",oZn="org.eclipse.elk.force.model",sZn="org.eclipse.elk.force.iterations",hZn="org.eclipse.elk.force.repulsivePower",fZn="org.eclipse.elk.force.temperature",lZn=.001,bZn="org.eclipse.elk.force.repulsion",wZn="org.eclipse.elk.alg.force.options",dZn=1.600000023841858,gZn="org.eclipse.elk.force",pZn="org.eclipse.elk.priority",vZn="org.eclipse.elk.spacing.nodeNode",mZn="org.eclipse.elk.spacing.edgeLabel",yZn="org.eclipse.elk.randomSeed",kZn="org.eclipse.elk.separateConnectedComponents",jZn="org.eclipse.elk.interactive",EZn="org.eclipse.elk.portConstraints",TZn="org.eclipse.elk.edgeLabels.inline",MZn="org.eclipse.elk.omitNodeMicroLayout",SZn="org.eclipse.elk.nodeSize.options",PZn="org.eclipse.elk.nodeSize.constraints",IZn="org.eclipse.elk.nodeLabels.placement",CZn="org.eclipse.elk.portLabels.placement",OZn="origin",AZn="random",$Zn="boundingBox.upLeft",LZn="boundingBox.lowRight",NZn="org.eclipse.elk.stress.fixed",xZn="org.eclipse.elk.stress.desiredEdgeLength",DZn="org.eclipse.elk.stress.dimension",RZn="org.eclipse.elk.stress.epsilon",KZn="org.eclipse.elk.stress.iterationLimit",_Zn="org.eclipse.elk.stress",FZn="ELK Stress",BZn="org.eclipse.elk.nodeSize.minimum",HZn="org.eclipse.elk.alg.force.stress",qZn="Layered layout",GZn="org.eclipse.elk.alg.layered",zZn="org.eclipse.elk.alg.layered.compaction.components",UZn="org.eclipse.elk.alg.layered.compaction.oned",XZn="org.eclipse.elk.alg.layered.compaction.oned.algs",WZn="org.eclipse.elk.alg.layered.compaction.recthull",VZn="org.eclipse.elk.alg.layered.components",QZn="NONE",YZn={3:1,6:1,4:1,9:1,5:1,122:1},JZn={3:1,6:1,4:1,5:1,141:1,106:1,120:1},ZZn="org.eclipse.elk.alg.layered.compound",n1n={51:1},t1n="org.eclipse.elk.alg.layered.graph",e1n=" -> ",i1n="Not supported by LGraph",r1n="Port side is undefined",c1n={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},a1n={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},u1n={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},o1n="([{\"' \t\r\n",s1n=")]}\"' \t\r\n",h1n="The given string contains parts that cannot be parsed as numbers.",f1n="org.eclipse.elk.core.math",l1n={3:1,4:1,142:1,207:1,414:1},b1n={3:1,4:1,116:1,207:1,414:1},w1n="org.eclipse.elk.layered",d1n="org.eclipse.elk.alg.layered.graph.transform",g1n="ElkGraphImporter",p1n="ElkGraphImporter/lambda$0$Type",v1n="ElkGraphImporter/lambda$1$Type",m1n="ElkGraphImporter/lambda$2$Type",y1n="ElkGraphImporter/lambda$4$Type",k1n="Node margin calculation",j1n="org.eclipse.elk.alg.layered.intermediate",E1n="ONE_SIDED_GREEDY_SWITCH",T1n="TWO_SIDED_GREEDY_SWITCH",M1n="No implementation is available for the layout processor ",S1n="IntermediateProcessorStrategy",P1n="Node '",I1n="FIRST_SEPARATE",C1n="LAST_SEPARATE",O1n="Odd port side processing",A1n="org.eclipse.elk.alg.layered.intermediate.compaction",$1n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",L1n="org.eclipse.elk.alg.layered.p3order.counting",N1n={225:1},x1n="org.eclipse.elk.alg.layered.intermediate.loops",D1n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",R1n="org.eclipse.elk.alg.layered.intermediate.loops.routing",K1n="org.eclipse.elk.alg.layered.intermediate.preserveorder",_1n="org.eclipse.elk.alg.layered.intermediate.wrapping",F1n="org.eclipse.elk.alg.layered.options",B1n="INTERACTIVE",H1n="DEPTH_FIRST",q1n="EDGE_LENGTH",G1n="SELF_LOOPS",z1n="firstTryWithInitialOrder",U1n="org.eclipse.elk.layered.directionCongruency",X1n="org.eclipse.elk.layered.feedbackEdges",W1n="org.eclipse.elk.layered.interactiveReferencePoint",V1n="org.eclipse.elk.layered.mergeEdges",Q1n="org.eclipse.elk.layered.mergeHierarchyEdges",Y1n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",J1n="org.eclipse.elk.layered.portSortingStrategy",Z1n="org.eclipse.elk.layered.thoroughness",n0n="org.eclipse.elk.layered.unnecessaryBendpoints",t0n="org.eclipse.elk.layered.generatePositionAndLayerIds",e0n="org.eclipse.elk.layered.cycleBreaking.strategy",i0n="org.eclipse.elk.layered.layering.strategy",r0n="org.eclipse.elk.layered.layering.layerConstraint",c0n="org.eclipse.elk.layered.layering.layerChoiceConstraint",a0n="org.eclipse.elk.layered.layering.layerId",u0n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",o0n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",s0n="org.eclipse.elk.layered.layering.nodePromotion.strategy",h0n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",f0n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",l0n="org.eclipse.elk.layered.crossingMinimization.strategy",b0n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",w0n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",d0n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",g0n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",p0n="org.eclipse.elk.layered.crossingMinimization.positionId",v0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",m0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",y0n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",k0n="org.eclipse.elk.layered.nodePlacement.strategy",j0n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",E0n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",T0n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M0n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",S0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",P0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",I0n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",C0n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",O0n="org.eclipse.elk.layered.edgeRouting.splines.mode",A0n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",$0n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",L0n="org.eclipse.elk.layered.spacing.baseValue",N0n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",x0n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",D0n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",R0n="org.eclipse.elk.layered.priority.direction",K0n="org.eclipse.elk.layered.priority.shortness",_0n="org.eclipse.elk.layered.priority.straightness",F0n="org.eclipse.elk.layered.compaction.connectedComponents",B0n="org.eclipse.elk.layered.compaction.postCompaction.strategy",H0n="org.eclipse.elk.layered.compaction.postCompaction.constraints",q0n="org.eclipse.elk.layered.highDegreeNodes.treatment",G0n="org.eclipse.elk.layered.highDegreeNodes.threshold",z0n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U0n="org.eclipse.elk.layered.wrapping.strategy",X0n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",W0n="org.eclipse.elk.layered.wrapping.correctionFactor",V0n="org.eclipse.elk.layered.wrapping.cutting.strategy",Q0n="org.eclipse.elk.layered.wrapping.cutting.cuts",Y0n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",J0n="org.eclipse.elk.layered.wrapping.validify.strategy",Z0n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",n2n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",t2n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",e2n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",i2n="org.eclipse.elk.layered.edgeLabels.sideSelection",r2n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",c2n="org.eclipse.elk.layered.considerModelOrder.strategy",a2n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",u2n="org.eclipse.elk.layered.considerModelOrder.components",o2n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",s2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",h2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",f2n="layering",l2n="layering.minWidth",b2n="layering.nodePromotion",w2n="crossingMinimization",d2n="org.eclipse.elk.hierarchyHandling",g2n="crossingMinimization.greedySwitch",p2n="nodePlacement",v2n="nodePlacement.bk",m2n="edgeRouting",y2n="org.eclipse.elk.edgeRouting",k2n="spacing",j2n="priority",E2n="compaction",T2n="compaction.postCompaction",M2n="Specifies whether and how post-process compaction is applied.",S2n="highDegreeNodes",P2n="wrapping",I2n="wrapping.cutting",C2n="wrapping.validify",O2n="wrapping.multiEdge",A2n="edgeLabels",$2n="considerModelOrder",L2n="org.eclipse.elk.spacing.commentComment",N2n="org.eclipse.elk.spacing.commentNode",x2n="org.eclipse.elk.spacing.edgeEdge",D2n="org.eclipse.elk.spacing.edgeNode",R2n="org.eclipse.elk.spacing.labelLabel",K2n="org.eclipse.elk.spacing.labelPortHorizontal",_2n="org.eclipse.elk.spacing.labelPortVertical",F2n="org.eclipse.elk.spacing.labelNode",B2n="org.eclipse.elk.spacing.nodeSelfLoop",H2n="org.eclipse.elk.spacing.portPort",q2n="org.eclipse.elk.spacing.individual",G2n="org.eclipse.elk.port.borderOffset",z2n="org.eclipse.elk.noLayout",U2n="org.eclipse.elk.port.side",X2n="org.eclipse.elk.debugMode",W2n="org.eclipse.elk.alignment",V2n="org.eclipse.elk.insideSelfLoops.activate",Q2n="org.eclipse.elk.insideSelfLoops.yo",Y2n="org.eclipse.elk.nodeSize.fixedGraphSize",J2n="org.eclipse.elk.direction",Z2n="org.eclipse.elk.nodeLabels.padding",n3n="org.eclipse.elk.portLabels.nextToPortIfPossible",t3n="org.eclipse.elk.portLabels.treatAsGroup",e3n="org.eclipse.elk.portAlignment.default",i3n="org.eclipse.elk.portAlignment.north",r3n="org.eclipse.elk.portAlignment.south",c3n="org.eclipse.elk.portAlignment.west",a3n="org.eclipse.elk.portAlignment.east",u3n="org.eclipse.elk.contentAlignment",o3n="org.eclipse.elk.junctionPoints",s3n="org.eclipse.elk.edgeLabels.placement",h3n="org.eclipse.elk.port.index",f3n="org.eclipse.elk.commentBox",l3n="org.eclipse.elk.hypernode",b3n="org.eclipse.elk.port.anchor",w3n="org.eclipse.elk.partitioning.activate",d3n="org.eclipse.elk.partitioning.partition",g3n="org.eclipse.elk.position",p3n="org.eclipse.elk.margins",v3n="org.eclipse.elk.spacing.portsSurrounding",m3n="org.eclipse.elk.interactiveLayout",y3n="org.eclipse.elk.core.util",k3n={3:1,4:1,5:1,593:1},j3n="NETWORK_SIMPLEX",E3n={123:1,51:1},T3n="org.eclipse.elk.alg.layered.p1cycles",M3n="org.eclipse.elk.alg.layered.p2layers",S3n={402:1,225:1},P3n={832:1,3:1,4:1},I3n="org.eclipse.elk.alg.layered.p3order",C3n="org.eclipse.elk.alg.layered.p4nodes",O3n={3:1,4:1,5:1,840:1},A3n=1e-5,$3n="org.eclipse.elk.alg.layered.p4nodes.bk",L3n="org.eclipse.elk.alg.layered.p5edges",N3n="org.eclipse.elk.alg.layered.p5edges.orthogonal",x3n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",D3n=1e-6,R3n="org.eclipse.elk.alg.layered.p5edges.splines",K3n=.09999999999999998,_3n=1e-8,F3n=4.71238898038469,B3n=3.141592653589793,H3n="org.eclipse.elk.alg.mrtree",q3n="org.eclipse.elk.alg.mrtree.graph",G3n="org.eclipse.elk.alg.mrtree.intermediate",z3n="Set neighbors in level",U3n="DESCENDANTS",X3n="org.eclipse.elk.mrtree.weighting",W3n="org.eclipse.elk.mrtree.searchOrder",V3n="org.eclipse.elk.alg.mrtree.options",Q3n="org.eclipse.elk.mrtree",Y3n="org.eclipse.elk.tree",J3n="org.eclipse.elk.alg.radial",Z3n=6.283185307179586,n4n=5e-324,t4n="org.eclipse.elk.alg.radial.intermediate",e4n="org.eclipse.elk.alg.radial.intermediate.compaction",i4n={3:1,4:1,5:1,106:1},r4n="org.eclipse.elk.alg.radial.intermediate.optimization",c4n="No implementation is available for the layout option ",a4n="org.eclipse.elk.alg.radial.options",u4n="org.eclipse.elk.radial.orderId",o4n="org.eclipse.elk.radial.radius",s4n="org.eclipse.elk.radial.compactor",h4n="org.eclipse.elk.radial.compactionStepSize",f4n="org.eclipse.elk.radial.sorter",l4n="org.eclipse.elk.radial.wedgeCriteria",b4n="org.eclipse.elk.radial.optimizationCriteria",w4n="org.eclipse.elk.radial",d4n="org.eclipse.elk.alg.radial.p1position.wedge",g4n="org.eclipse.elk.alg.radial.sorting",p4n=5.497787143782138,v4n=3.9269908169872414,m4n=2.356194490192345,y4n="org.eclipse.elk.alg.rectpacking",k4n="org.eclipse.elk.alg.rectpacking.firstiteration",j4n="org.eclipse.elk.alg.rectpacking.options",E4n="org.eclipse.elk.rectpacking.optimizationGoal",T4n="org.eclipse.elk.rectpacking.lastPlaceShift",M4n="org.eclipse.elk.rectpacking.currentPosition",S4n="org.eclipse.elk.rectpacking.desiredPosition",P4n="org.eclipse.elk.rectpacking.onlyFirstIteration",I4n="org.eclipse.elk.rectpacking.rowCompaction",C4n="org.eclipse.elk.rectpacking.expandToAspectRatio",O4n="org.eclipse.elk.rectpacking.targetWidth",A4n="org.eclipse.elk.expandNodes",$4n="org.eclipse.elk.rectpacking",L4n="org.eclipse.elk.alg.rectpacking.util",N4n="No implementation available for ",x4n="org.eclipse.elk.alg.spore",D4n="org.eclipse.elk.alg.spore.options",R4n="org.eclipse.elk.sporeCompaction",K4n="org.eclipse.elk.underlyingLayoutAlgorithm",_4n="org.eclipse.elk.processingOrder.treeConstruction",F4n="org.eclipse.elk.processingOrder.spanningTreeCostFunction",B4n="org.eclipse.elk.processingOrder.preferredRoot",H4n="org.eclipse.elk.processingOrder.rootSelection",q4n="org.eclipse.elk.structure.structureExtractionStrategy",G4n="org.eclipse.elk.compaction.compactionStrategy",z4n="org.eclipse.elk.compaction.orthogonal",U4n="org.eclipse.elk.overlapRemoval.maxIterations",X4n="org.eclipse.elk.overlapRemoval.runScanline",W4n="processingOrder",V4n="overlapRemoval",Q4n="org.eclipse.elk.sporeOverlap",Y4n="org.eclipse.elk.alg.spore.p1structure",J4n="org.eclipse.elk.alg.spore.p2processingorder",Z4n="org.eclipse.elk.alg.spore.p3execution",n5n="Invalid index: ",t5n="org.eclipse.elk.core.alg",e5n={331:1},i5n={288:1},r5n="Make sure its type is registered with the ",c5n=" utility class.",a5n="true",u5n="false",o5n="Couldn't clone property '",s5n=.05,h5n="org.eclipse.elk.core.options",f5n=1.2999999523162842,l5n="org.eclipse.elk.box",b5n="org.eclipse.elk.box.packingMode",w5n="org.eclipse.elk.algorithm",d5n="org.eclipse.elk.resolvedAlgorithm",g5n="org.eclipse.elk.bendPoints",p5n="org.eclipse.elk.labelManager",v5n="org.eclipse.elk.scaleFactor",m5n="org.eclipse.elk.animate",y5n="org.eclipse.elk.animTimeFactor",k5n="org.eclipse.elk.layoutAncestors",j5n="org.eclipse.elk.maxAnimTime",E5n="org.eclipse.elk.minAnimTime",T5n="org.eclipse.elk.progressBar",M5n="org.eclipse.elk.validateGraph",S5n="org.eclipse.elk.validateOptions",P5n="org.eclipse.elk.zoomToFit",I5n="org.eclipse.elk.font.name",C5n="org.eclipse.elk.font.size",O5n="org.eclipse.elk.edge.type",A5n="partitioning",$5n="nodeLabels",L5n="portAlignment",N5n="nodeSize",x5n="port",D5n="portLabels",R5n="insideSelfLoops",K5n="org.eclipse.elk.fixed",_5n="org.eclipse.elk.random",F5n="port must have a parent node to calculate the port side",B5n="The edge needs to have exactly one edge section. Found: ",H5n="org.eclipse.elk.core.util.adapters",q5n="org.eclipse.emf.ecore",G5n="org.eclipse.elk.graph",z5n="EMapPropertyHolder",U5n="ElkBendPoint",X5n="ElkGraphElement",W5n="ElkConnectableShape",V5n="ElkEdge",Q5n="ElkEdgeSection",Y5n="EModelElement",J5n="ENamedElement",Z5n="ElkLabel",n6n="ElkNode",t6n="ElkPort",e6n={92:1,90:1},i6n="org.eclipse.emf.common.notify.impl",r6n="The feature '",c6n="' is not a valid changeable feature",a6n="Expecting null",u6n="' is not a valid feature",o6n="The feature ID",s6n=" is not a valid feature ID",h6n=32768,f6n={105:1,92:1,90:1,56:1,49:1,97:1},l6n="org.eclipse.emf.ecore.impl",b6n="org.eclipse.elk.graph.impl",w6n="Recursive containment not allowed for ",d6n="The datatype '",g6n="' is not a valid classifier",p6n="The value '",v6n={190:1,3:1,4:1},m6n="The class '",y6n="http://www.eclipse.org/elk/ElkGraph",k6n=1024,j6n="property",E6n="value",T6n="source",M6n="properties",S6n="identifier",P6n="height",I6n="width",C6n="parent",O6n="text",A6n="children",$6n="hierarchical",L6n="sources",N6n="targets",x6n="sections",D6n="bendPoints",R6n="outgoingShape",K6n="incomingShape",_6n="outgoingSections",F6n="incomingSections",B6n="org.eclipse.emf.common.util",H6n="Severe implementation error in the Json to ElkGraph importer.",q6n="id",G6n="org.eclipse.elk.graph.json",z6n="Unhandled parameter types: ",U6n="startPoint",X6n="An edge must have at least one source and one target (edge id: '",W6n="').",V6n="Referenced edge section does not exist: ",Q6n=" (edge id: '",Y6n="target",J6n="sourcePoint",Z6n="targetPoint",n8n="group",t8n="name",e8n="connectableShape cannot be null",i8n="edge cannot be null",r8n="Passed edge is not 'simple'.",c8n="org.eclipse.elk.graph.util",a8n="The 'no duplicates' constraint is violated",u8n="targetIndex=",o8n=", size=",s8n="sourceIndex=",h8n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},f8n={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},l8n="logging",b8n="measureExecutionTime",w8n="parser.parse.1",d8n="parser.parse.2",g8n="parser.next.1",p8n="parser.next.2",v8n="parser.next.3",m8n="parser.next.4",y8n="parser.factor.1",k8n="parser.factor.2",j8n="parser.factor.3",E8n="parser.factor.4",T8n="parser.factor.5",M8n="parser.factor.6",S8n="parser.atom.1",P8n="parser.atom.2",I8n="parser.atom.3",C8n="parser.atom.4",O8n="parser.atom.5",A8n="parser.cc.1",$8n="parser.cc.2",L8n="parser.cc.3",N8n="parser.cc.5",x8n="parser.cc.6",D8n="parser.cc.7",R8n="parser.cc.8",K8n="parser.ope.1",_8n="parser.ope.2",F8n="parser.ope.3",B8n="parser.descape.1",H8n="parser.descape.2",q8n="parser.descape.3",G8n="parser.descape.4",z8n="parser.descape.5",U8n="parser.process.1",X8n="parser.quantifier.1",W8n="parser.quantifier.2",V8n="parser.quantifier.3",Q8n="parser.quantifier.4",Y8n="parser.quantifier.5",J8n="org.eclipse.emf.common.notify",Z8n={415:1,672:1},n9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},t9n={366:1,143:1},e9n="index=",i9n={3:1,4:1,5:1,126:1},r9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},c9n={3:1,6:1,4:1,5:1,192:1},a9n={3:1,4:1,5:1,165:1,367:1},u9n=";/?:@&=+$,",o9n="invalid authority: ",s9n="EAnnotation",h9n="ETypedElement",f9n="EStructuralFeature",l9n="EAttribute",b9n="EClassifier",w9n="EEnumLiteral",d9n="EGenericType",g9n="EOperation",p9n="EParameter",v9n="EReference",m9n="ETypeParameter",y9n="org.eclipse.emf.ecore.util",k9n={76:1},j9n={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},E9n="org.eclipse.emf.ecore.util.FeatureMap$Entry",T9n=8192,M9n=2048,S9n="byte",P9n="char",I9n="double",C9n="float",O9n="int",A9n="long",$9n="short",L9n="java.lang.Object",N9n={3:1,4:1,5:1,247:1},x9n={3:1,4:1,5:1,673:1},D9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},R9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},K9n="mixed",_9n="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",F9n="kind",B9n={3:1,4:1,5:1,674:1},H9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},q9n={20:1,28:1,52:1,14:1,15:1,58:1,69:1},G9n={47:1,125:1,279:1},z9n={72:1,332:1},U9n="The value of type '",X9n="' must be of type '",W9n=1316,V9n="http://www.eclipse.org/emf/2002/Ecore",Q9n=-32768,Y9n="constraints",J9n="baseType",Z9n="getEStructuralFeature",n7n="getFeatureID",t7n="feature",e7n="getOperationID",i7n="operation",r7n="defaultValue",c7n="eTypeParameters",a7n="isInstance",u7n="getEEnumLiteral",o7n="eContainingClass",s7n={55:1},h7n={3:1,4:1,5:1,119:1},f7n="org.eclipse.emf.ecore.resource",l7n={92:1,90:1,591:1,1935:1},b7n="org.eclipse.emf.ecore.resource.impl",w7n="unspecified",d7n="simple",g7n="attribute",p7n="attributeWildcard",v7n="element",m7n="elementWildcard",y7n="collapse",k7n="itemType",j7n="namespace",E7n="##targetNamespace",T7n="whiteSpace",M7n="wildcards",S7n="http://www.eclipse.org/emf/2003/XMLType",P7n="##any",I7n="uninitialized",C7n="The multiplicity constraint is violated",O7n="org.eclipse.emf.ecore.xml.type",A7n="ProcessingInstruction",$7n="SimpleAnyType",L7n="XMLTypeDocumentRoot",N7n="org.eclipse.emf.ecore.xml.type.impl",x7n="INF",D7n="processing",R7n="ENTITIES_._base",K7n="minLength",_7n="ENTITY",F7n="NCName",B7n="IDREFS_._base",H7n="integer",q7n="token",G7n="pattern",z7n="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",U7n="\\i\\c*",X7n="[\\i-[:]][\\c-[:]]*",W7n="nonPositiveInteger",V7n="maxInclusive",Q7n="NMTOKEN",Y7n="NMTOKENS_._base",J7n="nonNegativeInteger",Z7n="minInclusive",nnt="normalizedString",tnt="unsignedByte",ent="unsignedInt",int="18446744073709551615",rnt="unsignedShort",cnt="processingInstruction",ant="org.eclipse.emf.ecore.xml.type.internal",unt=1114111,ont="Internal Error: shorthands: \\u",snt="xml:isDigit",hnt="xml:isWord",fnt="xml:isSpace",lnt="xml:isNameChar",bnt="xml:isInitialNameChar",wnt="09\u0660\u0669\u06f0\u06f9\u0966\u096f\u09e6\u09ef\u0a66\u0a6f\u0ae6\u0aef\u0b66\u0b6f\u0be7\u0bef\u0c66\u0c6f\u0ce6\u0cef\u0d66\u0d6f\u0e50\u0e59\u0ed0\u0ed9\u0f20\u0f29",dnt="AZaz\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0641\u064a\u0671\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06d5\u06e5\u06e6\u0905\u0939\u093d\u093d\u0958\u0961\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09dc\u09dd\u09df\u09e1\u09f0\u09f1\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5c\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ae0\u0ae0\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c60\u0c61\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cde\u0cde\u0ce0\u0ce1\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d60\u0d61\u0e01\u0e2e\u0e30\u0e30\u0e32\u0e33\u0e40\u0e45\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4\u0f40\u0f47\u0f49\u0f69\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30a1\u30fa\u3105\u312c\u4e00\u9fa5\uac00\ud7a3",gnt="Private Use",pnt="ASSIGNED",vnt="\0\x7f\x80\xff\u0100\u017f\u0180\u024f\u0250\u02af\u02b0\u02ff\u0300\u036f\u0370\u03ff\u0400\u04ff\u0530\u058f\u0590\u05ff\u0600\u06ff\u0700\u074f\u0780\u07bf\u0900\u097f\u0980\u09ff\u0a00\u0a7f\u0a80\u0aff\u0b00\u0b7f\u0b80\u0bff\u0c00\u0c7f\u0c80\u0cff\u0d00\u0d7f\u0d80\u0dff\u0e00\u0e7f\u0e80\u0eff\u0f00\u0fff\u1000\u109f\u10a0\u10ff\u1100\u11ff\u1200\u137f\u13a0\u13ff\u1400\u167f\u1680\u169f\u16a0\u16ff\u1780\u17ff\u1800\u18af\u1e00\u1eff\u1f00\u1fff\u2000\u206f\u2070\u209f\u20a0\u20cf\u20d0\u20ff\u2100\u214f\u2150\u218f\u2190\u21ff\u2200\u22ff\u2300\u23ff\u2400\u243f\u2440\u245f\u2460\u24ff\u2500\u257f\u2580\u259f\u25a0\u25ff\u2600\u26ff\u2700\u27bf\u2800\u28ff\u2e80\u2eff\u2f00\u2fdf\u2ff0\u2fff\u3000\u303f\u3040\u309f\u30a0\u30ff\u3100\u312f\u3130\u318f\u3190\u319f\u31a0\u31bf\u3200\u32ff\u3300\u33ff\u3400\u4db5\u4e00\u9fff\ua000\ua48f\ua490\ua4cf\uac00\ud7a3\ue000\uf8ff\uf900\ufaff\ufb00\ufb4f\ufb50\ufdff\ufe20\ufe2f\ufe30\ufe4f\ufe50\ufe6f\ufe70\ufefe\ufeff\ufeff\uff00\uffef",mnt="UNASSIGNED",ynt={3:1,117:1},knt="org.eclipse.emf.ecore.xml.type.util",jnt={3:1,4:1,5:1,368:1},Ent="org.eclipse.xtext.xbase.lib",Tnt="Cannot add elements to a Range",Mnt="Cannot set elements in a Range",Snt="Cannot remove elements from a Range",Pnt="locale",Int="default",Cnt="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,WMn(),wAn(1,null,{},r),MWn.Fb=function(n){return FO(this,n)},MWn.Gb=function(){return this.gm},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return nE(tsn(this))+"@"+(nsn(this)>>>0).toString(16)},MWn.equals=function(n){return this.Fb(n)},MWn.hashCode=function(){return this.Hb()},MWn.toString=function(){return this.Ib()},wAn(290,1,{290:1,2026:1},pon),MWn.le=function(n){var t;return(t=new pon).i=4,t.c=n>1?gZ(this,n-1):this,t},MWn.me=function(){return ED(this),this.b},MWn.ne=function(){return nE(this)},MWn.oe=function(){return ED(this),this.k},MWn.pe=function(){return 0!=(4&this.i)},MWn.qe=function(){return 0!=(1&this.i)},MWn.Ib=function(){return utn(this)},MWn.i=0;var Ont,Ant=vX(RWn,"Object",1),$nt=vX(RWn,"Class",290);wAn(1998,1,KWn),vX(_Wn,"Optional",1998),wAn(1170,1998,KWn,c),MWn.Fb=function(n){return n===this},MWn.Hb=function(){return 2040732332},MWn.Ib=function(){return"Optional.absent()"},MWn.Jb=function(n){return yX(n),iy(),Ont},vX(_Wn,"Absent",1170),wAn(628,1,{},mk),vX(_Wn,"Joiner",628);var Lnt=bq(_Wn,"Predicate");wAn(582,1,{169:1,582:1,3:1,45:1},Hf),MWn.Mb=function(n){return Kon(this,n)},MWn.Lb=function(n){return Kon(this,n)},MWn.Fb=function(n){var t;return!!cL(n,582)&&(t=BB(n,582),NAn(this.a,t.a))},MWn.Hb=function(){return Fon(this.a)+306654252},MWn.Ib=function(){return wPn(this.a)},vX(_Wn,"Predicates/AndPredicate",582),wAn(408,1998,{408:1,3:1},qf),MWn.Fb=function(n){var t;return!!cL(n,408)&&(t=BB(n,408),Nfn(this.a,t.a))},MWn.Hb=function(){return 1502476572+nsn(this.a)},MWn.Ib=function(){return GWn+this.a+")"},MWn.Jb=function(n){return new qf(WQ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},vX(_Wn,"Present",408),wAn(198,1,UWn),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){bk()},vX(XWn,"UnmodifiableIterator",198),wAn(1978,198,WWn),MWn.Qb=function(){bk()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(XWn,"UnmodifiableListIterator",1978),wAn(386,1978,WWn),MWn.Ob=function(){return this.c<this.d},MWn.Sb=function(){return this.c>0},MWn.Pb=function(){if(this.c>=this.d)throw Hp(new yv);return this.Xb(this.c++)},MWn.Tb=function(){return this.c},MWn.Ub=function(){if(this.c<=0)throw Hp(new yv);return this.Xb(--this.c)},MWn.Vb=function(){return this.c-1},MWn.c=0,MWn.d=0,vX(XWn,"AbstractIndexedListIterator",386),wAn(699,198,UWn),MWn.Ob=function(){return Zin(this)},MWn.Pb=function(){return P7(this)},MWn.e=1,vX(XWn,"AbstractIterator",699),wAn(1986,1,{224:1}),MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.Fb=function(n){return jsn(this,n)},MWn.Hb=function(){return nsn(this.Zb())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return gz(this)},MWn.Ib=function(){return Bbn(this.Zb())},vX(XWn,"AbstractMultimap",1986),wAn(726,1986,VWn),MWn.$b=function(){win(this)},MWn._b=function(n){return Wj(this,n)},MWn.ac=function(){return new pT(this,this.c)},MWn.ic=function(n){return this.hc()},MWn.bc=function(){return new HL(this,this.c)},MWn.jc=function(){return this.mc(this.hc())},MWn.kc=function(){return new Hm(this)},MWn.lc=function(){return qTn(this.c.vc().Nc(),new u,64,this.d)},MWn.cc=function(n){return h6(this,n)},MWn.fc=function(n){return Nhn(this,n)},MWn.gc=function(){return this.d},MWn.mc=function(n){return SQ(),new Hb(n)},MWn.nc=function(){return new Bm(this)},MWn.oc=function(){return qTn(this.c.Cc().Nc(),new a,64,this.d)},MWn.pc=function(n,t){return new W6(this,n,t,null)},MWn.d=0,vX(XWn,"AbstractMapBasedMultimap",726),wAn(1631,726,VWn),MWn.hc=function(){return new J6(this.a)},MWn.jc=function(){return SQ(),SQ(),set},MWn.cc=function(n){return BB(h6(this,n),15)},MWn.fc=function(n){return BB(Nhn(this,n),15)},MWn.Zb=function(){return OQ(this)},MWn.Fb=function(n){return jsn(this,n)},MWn.qc=function(n){return BB(h6(this,n),15)},MWn.rc=function(n){return BB(Nhn(this,n),15)},MWn.mc=function(n){return rY(BB(n,15))},MWn.pc=function(n,t){return i3(this,n,BB(t,15),null)},vX(XWn,"AbstractListMultimap",1631),wAn(732,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()||this.e.Ob()},MWn.Pb=function(){var n;return this.e.Ob()||(n=BB(this.c.Pb(),42),this.b=n.cd(),this.a=BB(n.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},MWn.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},vX(XWn,"AbstractMapBasedMultimap/Itr",732),wAn(1099,732,QWn,Bm),MWn.sc=function(n,t){return t},vX(XWn,"AbstractMapBasedMultimap/1",1099),wAn(1100,1,{},a),MWn.Kb=function(n){return BB(n,14).Nc()},vX(XWn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),wAn(1101,732,QWn,Hm),MWn.sc=function(n,t){return new vT(n,t)},vX(XWn,"AbstractMapBasedMultimap/2",1101);var Nnt=bq(YWn,"Map");wAn(1967,1,JWn),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.vc().$b()},MWn.tc=function(n){return Mmn(this,n)},MWn._b=function(n){return!!FEn(this,n,!1)},MWn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=BB(t.Pb(),42).dd(),GC(n)===GC(e)||null!=n&&Nfn(n,e))return!0;return!1},MWn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!cL(n,83))return!1;if(i=BB(n,83),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=BB(e.Pb(),42),!this.tc(t))return!1;return!0},MWn.xc=function(n){return qC(FEn(this,n,!1))},MWn.Hb=function(){return Hun(this.vc())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return new Ib(this)},MWn.zc=function(n,t){throw Hp(new tk("Put not supported on this map"))},MWn.Ac=function(n){Tcn(this,n)},MWn.Bc=function(n){return qC(FEn(this,n,!0))},MWn.gc=function(){return this.vc().gc()},MWn.Ib=function(){return nTn(this)},MWn.Cc=function(){return new Ob(this)},vX(YWn,"AbstractMap",1967),wAn(1987,1967,JWn),MWn.bc=function(){return new ST(this)},MWn.vc=function(){return dz(this)},MWn.ec=function(){return this.g||(this.g=this.bc())},MWn.Cc=function(){return this.i||(this.i=new PT(this))},vX(XWn,"Maps/ViewCachingAbstractMap",1987),wAn(389,1987,JWn,pT),MWn.xc=function(n){return ktn(this,n)},MWn.Bc=function(n){return Zsn(this,n)},MWn.$b=function(){this.d==this.e.c?this.e.$b():Iq(new Oq(this))},MWn._b=function(n){return gfn(this.d,n)},MWn.Ec=function(){return new Xf(this)},MWn.Dc=function(){return this.Ec()},MWn.Fb=function(n){return this===n||Nfn(this.d,n)},MWn.Hb=function(){return nsn(this.d)},MWn.ec=function(){return this.e.ec()},MWn.gc=function(){return this.d.gc()},MWn.Ib=function(){return Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/AsMap",389);var xnt=bq(RWn,"Iterable");wAn(28,1,ZWn),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){throw Hp(new tk("Add not supported on this collection"))},MWn.Gc=function(n){return Frn(this,n)},MWn.$b=function(){TV(this)},MWn.Hc=function(n){return ywn(this,n,!1)},MWn.Ic=function(n){return oun(this,n)},MWn.dc=function(){return 0==this.gc()},MWn.Mc=function(n){return ywn(this,n,!0)},MWn.Pc=function(){return cz(this)},MWn.Qc=function(n){return Emn(this,n)},MWn.Ib=function(){return LMn(this)},vX(YWn,"AbstractCollection",28);var Dnt=bq(YWn,"Set");wAn(nVn,28,tVn),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return ign(this,n)},MWn.Hb=function(){return Hun(this)},vX(YWn,"AbstractSet",nVn),wAn(1970,nVn,tVn),vX(XWn,"Sets/ImprovedAbstractSet",1970),wAn(1971,1970,tVn),MWn.$b=function(){this.Rc().$b()},MWn.Hc=function(n){return idn(this,n)},MWn.dc=function(){return this.Rc().dc()},MWn.Mc=function(n){var t;return!!this.Hc(n)&&(t=BB(n,42),this.Rc().ec().Mc(t.cd()))},MWn.gc=function(){return this.Rc().gc()},vX(XWn,"Maps/EntrySet",1971),wAn(1097,1971,tVn,Xf),MWn.Hc=function(n){return wfn(this.a.d.vc(),n)},MWn.Kc=function(){return new Oq(this.a)},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!wfn(this.a.d.vc(),n)&&(t=BB(n,42),H5(this.a.e,t.cd()),!0)},MWn.Nc=function(){return RB(this.a.d.vc().Nc(),new Wf(this.a))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),wAn(1098,1,{},Wf),MWn.Kb=function(n){return i5(this.a,BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),wAn(730,1,QWn,Oq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){var n;return n=BB(this.b.Pb(),42),this.a=BB(n.dd(),14),i5(this.c,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Qb=function(){han(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),wAn(532,1970,tVn,ST),MWn.$b=function(){this.b.$b()},MWn.Hc=function(n){return this.b._b(n)},MWn.Jc=function(n){yX(n),this.b.wc(new vl(n))},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new ly(this.b.vc().Kc())},MWn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},MWn.gc=function(){return this.b.gc()},vX(XWn,"Maps/KeySet",532),wAn(318,532,tVn,HL),MWn.$b=function(){Iq(new eT(this,this.b.vc().Kc()))},MWn.Ic=function(n){return this.b.ec().Ic(n)},MWn.Fb=function(n){return this===n||Nfn(this.b.ec(),n)},MWn.Hb=function(){return nsn(this.b.ec())},MWn.Kc=function(){return new eT(this,this.b.vc().Kc())},MWn.Mc=function(n){var t,e;return e=0,(t=BB(this.b.Bc(n),14))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/KeySet",318),wAn(731,1,QWn,eT),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()},MWn.Pb=function(){return this.a=BB(this.c.Pb(),42),this.a.cd()},MWn.Qb=function(){var n;han(!!this.a),n=BB(this.a.dd(),14),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/KeySet/1",731),wAn(491,389,{83:1,161:1},ID),MWn.bc=function(){return this.Sc()},MWn.ec=function(){return this.Tc()},MWn.Sc=function(){return new nT(this.c,this.Uc())},MWn.Tc=function(){return this.b||(this.b=this.Sc())},MWn.Uc=function(){return BB(this.d,161)},vX(XWn,"AbstractMapBasedMultimap/SortedAsMap",491),wAn(542,491,eVn,CD),MWn.bc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.Sc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.ec=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Tc=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Uc=function(){return BB(BB(this.d,161),171)},vX(XWn,"AbstractMapBasedMultimap/NavigableAsMap",542),wAn(490,318,iVn,nT),MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/SortedKeySet",490),wAn(388,490,rVn,tT),vX(XWn,"AbstractMapBasedMultimap/NavigableKeySet",388),wAn(541,28,ZWn,W6),MWn.Fc=function(n){var t,e;return zbn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&jR(this)),t},MWn.Gc=function(n){var t,e,i;return!n.dc()&&(zbn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&jR(this)),t)},MWn.$b=function(){var n;zbn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,$G(this))},MWn.Hc=function(n){return zbn(this),this.d.Hc(n)},MWn.Ic=function(n){return zbn(this),this.d.Ic(n)},MWn.Fb=function(n){return n===this||(zbn(this),Nfn(this.d,n))},MWn.Hb=function(){return zbn(this),nsn(this.d)},MWn.Kc=function(){return zbn(this),new QB(this)},MWn.Mc=function(n){var t;return zbn(this),(t=this.d.Mc(n))&&(--this.f.d,$G(this)),t},MWn.gc=function(){return tO(this)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Ib=function(){return zbn(this),Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection",541);var Rnt=bq(YWn,"List");wAn(728,541,{20:1,28:1,14:1,15:1},sz),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Vc=function(n,t){var e;zbn(this),e=this.d.dc(),BB(this.d,15).Vc(n,t),++this.a.d,e&&jR(this)},MWn.Wc=function(n,t){var e,i,r;return!t.dc()&&(zbn(this),r=this.d.gc(),(e=BB(this.d,15).Wc(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&jR(this)),e)},MWn.Xb=function(n){return zbn(this),BB(this.d,15).Xb(n)},MWn.Xc=function(n){return zbn(this),BB(this.d,15).Xc(n)},MWn.Yc=function(){return zbn(this),new g$(this)},MWn.Zc=function(n){return zbn(this),new gQ(this,n)},MWn.$c=function(n){var t;return zbn(this),t=BB(this.d,15).$c(n),--this.a.d,$G(this),t},MWn._c=function(n,t){return zbn(this),BB(this.d,15)._c(n,t)},MWn.bd=function(n,t){return zbn(this),i3(this.a,this.e,BB(this.d,15).bd(n,t),this.b?this.b:this)},vX(XWn,"AbstractMapBasedMultimap/WrappedList",728),wAn(1096,728,{20:1,28:1,14:1,15:1,54:1},Ox),vX(XWn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),wAn(620,1,QWn,QB),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return MV(this),this.b.Ob()},MWn.Pb=function(){return MV(this),this.b.Pb()},MWn.Qb=function(){eN(this)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),wAn(729,620,cVn,g$,gQ),MWn.Qb=function(){eN(this)},MWn.Rb=function(n){var t;t=0==tO(this.a),(MV(this),BB(this.b,125)).Rb(n),++this.a.a.d,t&&jR(this.a)},MWn.Sb=function(){return(MV(this),BB(this.b,125)).Sb()},MWn.Tb=function(){return(MV(this),BB(this.b,125)).Tb()},MWn.Ub=function(){return(MV(this),BB(this.b,125)).Ub()},MWn.Vb=function(){return(MV(this),BB(this.b,125)).Vb()},MWn.Wb=function(n){(MV(this),BB(this.b,125)).Wb(n)},vX(XWn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),wAn(727,541,iVn,ND),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSortedSet",727),wAn(1095,727,rVn,AA),vX(XWn,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),wAn(1094,541,tVn,xD),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSet",1094),wAn(1103,1,{},u),MWn.Kb=function(n){return F6(BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/lambda$1$Type",1103),wAn(1102,1,{},Vf),MWn.Kb=function(n){return new vT(this.a,n)},vX(XWn,"AbstractMapBasedMultimap/lambda$2$Type",1102);var Knt,_nt,Fnt,Bnt,Hnt=bq(YWn,"Map/Entry");wAn(345,1,aVn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),wW(this.cd(),t.cd())&&wW(this.dd(),t.dd()))},MWn.Hb=function(){var n,t;return n=this.cd(),t=this.dd(),(null==n?0:nsn(n))^(null==t?0:nsn(t))},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(XWn,uVn,345),wAn(1988,28,ZWn),MWn.$b=function(){this.fd().$b()},MWn.Hc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),H0(this.fd(),t.cd(),t.dd()))},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),q0(this.fd(),t.cd(),t.dd()))},MWn.gc=function(){return this.fd().d},vX(XWn,"Multimaps/Entries",1988),wAn(733,1988,ZWn,Qf),MWn.Kc=function(){return this.a.kc()},MWn.fd=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"AbstractMultimap/Entries",733),wAn(734,733,tVn,qm),MWn.Nc=function(){return this.a.lc()},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"AbstractMultimap/EntrySet",734),wAn(735,28,ZWn,Yf),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return Csn(this.a,n)},MWn.Kc=function(){return this.a.nc()},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return this.a.oc()},vX(XWn,"AbstractMultimap/Values",735),wAn(1989,28,{835:1,20:1,28:1,14:1}),MWn.Jc=function(n){yX(n),EV(this).Jc(new pl(n))},MWn.Nc=function(){var n;return qTn(n=EV(this).Nc(),new y,64|1296&n.qd(),this.a.d)},MWn.Fc=function(n){return wk(),!0},MWn.Gc=function(n){return yX(this),yX(n),cL(n,543)?l2(BB(n,835)):!n.dc()&&fnn(this,n.Kc())},MWn.Hc=function(n){var t;return((t=BB(lfn(OQ(this.a),n),14))?t.gc():0)>0},MWn.Fb=function(n){return h$n(this,n)},MWn.Hb=function(){return nsn(EV(this))},MWn.dc=function(){return EV(this).dc()},MWn.Mc=function(n){return ECn(this,n,1)>0},MWn.Ib=function(){return Bbn(EV(this))},vX(XWn,"AbstractMultiset",1989),wAn(1991,1970,tVn),MWn.$b=function(){win(this.a.a)},MWn.Hc=function(n){var t;return!(!cL(n,492)||(t=BB(n,416),BB(t.a.dd(),14).gc()<=0||c1(this.a,t.a.cd())!=BB(t.a.dd(),14).gc()))},MWn.Mc=function(n){var t,e,i;return!(!cL(n,492)||(t=(e=BB(n,416)).a.cd(),0==(i=BB(e.a.dd(),14).gc())))&&TCn(this.a,t,i)},vX(XWn,"Multisets/EntrySet",1991),wAn(1109,1991,tVn,Jf),MWn.Kc=function(){return new wy(dz(OQ(this.a.a)).Kc())},MWn.gc=function(){return OQ(this.a.a).gc()},vX(XWn,"AbstractMultiset/EntrySet",1109),wAn(619,726,VWn),MWn.hc=function(){return this.gd()},MWn.jc=function(){return this.hd()},MWn.cc=function(n){return this.jd(n)},MWn.fc=function(n){return this.kd(n)},MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.hd=function(){return SQ(),SQ(),fet},MWn.Fb=function(n){return jsn(this,n)},MWn.jd=function(n){return BB(h6(this,n),21)},MWn.kd=function(n){return BB(Nhn(this,n),21)},MWn.mc=function(n){return SQ(),new Ak(BB(n,21))},MWn.pc=function(n,t){return new xD(this,n,BB(t,21))},vX(XWn,"AbstractSetMultimap",619),wAn(1657,619,VWn),MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.jc=function(){return CX(new dE(this.b))},MWn.hd=function(){return CX(new dE(this.b))},MWn.cc=function(n){return BB(BB(h6(this,n),21),84)},MWn.jd=function(n){return BB(BB(h6(this,n),21),84)},MWn.fc=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.kd=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.mc=function(n){return cL(n,271)?CX(BB(n,271)):(SQ(),new dN(BB(n,84)))},MWn.Zb=function(){return this.f||(this.f=cL(this.c,171)?new CD(this,BB(this.c,171)):cL(this.c,161)?new ID(this,BB(this.c,161)):new pT(this,this.c))},MWn.pc=function(n,t){return cL(t,271)?new AA(this,n,BB(t,271)):new ND(this,n,BB(t,84))},vX(XWn,"AbstractSortedSetMultimap",1657),wAn(1658,1657,VWn),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new CD(this,BB(this.c,171)):cL(this.c,161)?new ID(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.bc=function(){return cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)},vX(XWn,"AbstractSortedKeySortedSetMultimap",1658),wAn(2010,1,{1947:1}),MWn.Fb=function(n){return Ijn(this,n)},MWn.Hb=function(){return Hun(this.g||(this.g=new Zf(this)))},MWn.Ib=function(){return nTn(this.f||(this.f=new UL(this)))},vX(XWn,"AbstractTable",2010),wAn(665,nVn,tVn,Zf),MWn.$b=function(){dk()},MWn.Hc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WC(t.c.e,t.b)),83))&&wfn(e.vc(),new vT(WC(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.Kc=function(){return ZQ(this.a)},MWn.Mc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WC(t.c.e,t.b)),83))&&dfn(e.vc(),new vT(WC(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return P2(this.a)},vX(XWn,"AbstractTable/CellSet",665),wAn(1928,28,ZWn,nl),MWn.$b=function(){dk()},MWn.Hc=function(n){return hTn(this.a,n)},MWn.Kc=function(){return nY(this.a)},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return Y0(this.a)},vX(XWn,"AbstractTable/Values",1928),wAn(1632,1631,VWn),vX(XWn,"ArrayListMultimapGwtSerializationDependencies",1632),wAn(513,1632,VWn,ok,o1),MWn.hc=function(){return new J6(this.a)},MWn.a=0,vX(XWn,"ArrayListMultimap",513),wAn(664,2010,{664:1,1947:1,3:1},vOn),vX(XWn,"ArrayTable",664),wAn(1924,386,WWn,qL),MWn.Xb=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1",1924),wAn(1925,1,{},Gf),MWn.ld=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1methodref$getCell$Type",1925),wAn(2011,1,{682:1}),MWn.Fb=function(n){var t;return n===this||!!cL(n,468)&&(t=BB(n,682),wW(WC(this.c.e,this.b),WC(t.c.e,t.b))&&wW(WC(this.c.c,this.a),WC(t.c.c,t.a))&&wW(U6(this.c,this.b,this.a),U6(t.c,t.b,t.a)))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[WC(this.c.e,this.b),WC(this.c.c,this.a),U6(this.c,this.b,this.a)]))},MWn.Ib=function(){return"("+WC(this.c.e,this.b)+","+WC(this.c.c,this.a)+")="+U6(this.c,this.b,this.a)},vX(XWn,"Tables/AbstractCell",2011),wAn(468,2011,{468:1,682:1},gon),MWn.a=0,MWn.b=0,MWn.d=0,vX(XWn,"ArrayTable/2",468),wAn(1927,1,{},zf),MWn.ld=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/2methodref$getValue$Type",1927),wAn(1926,386,WWn,GL),MWn.Xb=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/3",1926),wAn(1979,1967,JWn),MWn.$b=function(){Iq(this.kc())},MWn.vc=function(){return new ml(this)},MWn.lc=function(){return new IV(this.kc(),this.gc())},vX(XWn,"Maps/IteratorBasedAbstractMap",1979),wAn(828,1979,JWn),MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return Yj(this.c,n)},MWn.kc=function(){return new zL(this,this.c.b.c.gc())},MWn.lc=function(){return yq(this.c.b.c.gc(),16,new Uf(this))},MWn.xc=function(n){var t;return(t=BB(UK(this.c,n),19))?this.nd(t.a):null},MWn.dc=function(){return this.c.b.c.dc()},MWn.ec=function(){return bz(this.c)},MWn.zc=function(n,t){var e;if(!(e=BB(UK(this.c,n),19)))throw Hp(new _y(this.md()+" "+n+" not in "+bz(this.c)));return this.od(e.a,t)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.b.c.gc()},vX(XWn,"ArrayTable/ArrayMap",828),wAn(1923,1,{},Uf),MWn.ld=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),wAn(1921,345,aVn,sT),MWn.cd=function(){return YL(this.a,this.b)},MWn.dd=function(){return this.a.nd(this.b)},MWn.ed=function(n){return this.a.od(this.b,n)},MWn.b=0,vX(XWn,"ArrayTable/ArrayMap/1",1921),wAn(1922,386,WWn,zL),MWn.Xb=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/2",1922),wAn(1920,828,JWn,cU),MWn.md=function(){return"Column"},MWn.nd=function(n){return U6(this.b,this.a,n)},MWn.od=function(n,t){return Sun(this.b,this.a,n,t)},MWn.a=0,vX(XWn,"ArrayTable/Row",1920),wAn(829,828,JWn,UL),MWn.nd=function(n){return new cU(this.a,n)},MWn.zc=function(n,t){return BB(t,83),gk()},MWn.od=function(n,t){return BB(t,83),pk()},MWn.md=function(){return"Row"},vX(XWn,"ArrayTable/RowMap",829),wAn(1120,1,fVn,hT),MWn.qd=function(){return-262&this.a.qd()},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.Nb(new cT(n,this.b))},MWn.sd=function(n){return this.a.sd(new rT(n,this.b))},vX(XWn,"CollectSpliterators/1",1120),wAn(1121,1,lVn,rT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$0$Type",1121),wAn(1122,1,lVn,cT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$1$Type",1122),wAn(1123,1,fVn,q2),MWn.qd=function(){return this.a},MWn.rd=function(){return this.d&&(this.b=T$(this.b,this.d.rd())),T$(this.b,0)},MWn.Nb=function(n){this.d&&(this.d.Nb(n),this.d=null),this.c.Nb(new iT(this.e,n)),this.b=0},MWn.sd=function(n){for(;;){if(this.d&&this.d.sd(n))return JC(this.b,bVn)&&(this.b=ibn(this.b,1)),!0;if(this.d=null,!this.c.sd(new aT(this,this.e)))return!1}},MWn.a=0,MWn.b=0,vX(XWn,"CollectSpliterators/1FlatMapSpliterator",1123),wAn(1124,1,lVn,aT),MWn.td=function(n){dK(this.a,this.b,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),wAn(1125,1,lVn,iT),MWn.td=function(n){oL(this.b,this.a,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),wAn(1117,1,fVn,wK),MWn.qd=function(){return 16464|this.b},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.xe(new oT(n,this.c))},MWn.sd=function(n){return this.a.ye(new uT(n,this.c))},MWn.b=0,vX(XWn,"CollectSpliterators/1WithCharacteristics",1117),wAn(1118,1,wVn,uT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),wAn(1119,1,wVn,oT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),wAn(245,1,dVn),MWn.wd=function(n){return this.vd(BB(n,245))},MWn.vd=function(n){var t;return n==(ty(),_nt)?1:n==(ey(),Knt)?-1:(nq(),0!=(t=Ncn(this.a,n.a))?t:cL(this,519)==cL(n,519)?0:cL(this,519)?1:-1)},MWn.zd=function(){return this.a},MWn.Fb=function(n){return xdn(this,n)},vX(XWn,"Cut",245),wAn(1761,245,dVn,Nk),MWn.vd=function(n){return n==this?0:1},MWn.xd=function(n){throw Hp(new hv)},MWn.yd=function(n){n.a+="+\u221e)"},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!1},MWn.Ib=function(){return"+\u221e"},vX(XWn,"Cut/AboveAll",1761),wAn(519,245,{245:1,519:1,3:1,35:1},iN),MWn.xd=function(n){uO((n.a+="(",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),93)},MWn.Hb=function(){return~nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<0},MWn.Ib=function(){return"/"+this.a+"\\"},vX(XWn,"Cut/AboveValue",519),wAn(1760,245,dVn,xk),MWn.vd=function(n){return n==this?0:-1},MWn.xd=function(n){n.a+="(-\u221e"},MWn.yd=function(n){throw Hp(new hv)},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!0},MWn.Ib=function(){return"-\u221e"},vX(XWn,"Cut/BelowAll",1760),wAn(1762,245,dVn,rN),MWn.xd=function(n){uO((n.a+="[",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),41)},MWn.Hb=function(){return nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<=0},MWn.Ib=function(){return"\\"+this.a+"/"},vX(XWn,"Cut/BelowValue",1762),wAn(537,1,pVn),MWn.Jc=function(n){e5(this,n)},MWn.Ib=function(){return Hln(BB(WQ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},vX(XWn,"FluentIterable",537),wAn(433,537,pVn,OO),MWn.Kc=function(){return new oz(ZL(this.a.Kc(),new h))},vX(XWn,"FluentIterable/2",433),wAn(1046,537,pVn,AO),MWn.Kc=function(){return NU(this)},vX(XWn,"FluentIterable/3",1046),wAn(708,386,WWn,WL),MWn.Xb=function(n){return this.a[n].Kc()},vX(XWn,"FluentIterable/3/1",708),wAn(1972,1,{}),MWn.Ib=function(){return Bbn(this.Bd().b)},vX(XWn,"ForwardingObject",1972),wAn(1973,1972,vVn),MWn.Bd=function(){return this.Cd()},MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return this.Cd(),oE()},MWn.Gc=function(n){return this.Cd(),sE()},MWn.$b=function(){this.Cd(),hE()},MWn.Hc=function(n){return this.Cd().Hc(n)},MWn.Ic=function(n){return this.Cd().Ic(n)},MWn.dc=function(){return this.Cd().b.dc()},MWn.Kc=function(){return this.Cd().Kc()},MWn.Mc=function(n){return this.Cd(),fE()},MWn.gc=function(){return this.Cd().b.gc()},MWn.Pc=function(){return this.Cd().Pc()},MWn.Qc=function(n){return this.Cd().Qc(n)},vX(XWn,"ForwardingCollection",1973),wAn(1980,28,mVn),MWn.Kc=function(){return this.Ed()},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Hc=function(n){return null!=n&&ywn(this,n,!1)},MWn.Dd=function(){switch(this.gc()){case 0:return WX(),WX(),Fnt;case 1:return WX(),new Pq(yX(this.Ed().Pb()));default:return new aU(this,this.Pc())}},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"ImmutableCollection",1980),wAn(712,1980,mVn,rv),MWn.Kc=function(){return L9(this.a.Kc())},MWn.Hc=function(n){return null!=n&&this.a.Hc(n)},MWn.Ic=function(n){return this.a.Ic(n)},MWn.dc=function(){return this.a.dc()},MWn.Ed=function(){return L9(this.a.Kc())},MWn.gc=function(){return this.a.gc()},MWn.Pc=function(){return this.a.Pc()},MWn.Qc=function(n){return this.a.Qc(n)},MWn.Ib=function(){return Bbn(this.a)},vX(XWn,"ForwardingImmutableCollection",712),wAn(152,1980,yVn),MWn.Kc=function(){return this.Ed()},MWn.Yc=function(){return this.Fd(0)},MWn.Zc=function(n){return this.Fd(n)},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.bd=function(n,t){return this.Gd(n,t)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return qAn(this,n)},MWn.Hb=function(){return Can(this)},MWn.Xc=function(n){return null==n?-1:Tmn(this,n)},MWn.Ed=function(){return this.Fd(0)},MWn.Fd=function(n){return ix(this,n)},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.Gd=function(n,t){return sfn(new s1(new CT(this),n,t))},vX(XWn,"ImmutableList",152),wAn(2006,152,yVn),MWn.Kc=function(){return L9(this.Hd().Kc())},MWn.bd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Hc=function(n){return null!=n&&this.Hd().Hc(n)},MWn.Ic=function(n){return this.Hd().Ic(n)},MWn.Fb=function(n){return Nfn(this.Hd(),n)},MWn.Xb=function(n){return WC(this,n)},MWn.Hb=function(){return nsn(this.Hd())},MWn.Xc=function(n){return this.Hd().Xc(n)},MWn.dc=function(){return this.Hd().dc()},MWn.Ed=function(){return L9(this.Hd().Kc())},MWn.gc=function(){return this.Hd().gc()},MWn.Gd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Pc=function(){return this.Hd().Qc(x8(Ant,HWn,1,this.Hd().gc(),5,1))},MWn.Qc=function(n){return this.Hd().Qc(n)},MWn.Ib=function(){return Bbn(this.Hd())},vX(XWn,"ForwardingImmutableList",2006),wAn(714,1,jVn),MWn.vc=function(){return lz(this)},MWn.wc=function(n){nan(this,n)},MWn.ec=function(){return bz(this)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.Cc=function(){return this.Ld()},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return null!=this.xc(n)},MWn.uc=function(n){return this.Ld().Hc(n)},MWn.Jd=function(){return new cv(this)},MWn.Kd=function(){return new av(this)},MWn.Fb=function(n){return $sn(this,n)},MWn.Hb=function(){return lz(this).Hb()},MWn.dc=function(){return 0==this.gc()},MWn.zc=function(n,t){return vk()},MWn.Bc=function(n){throw Hp(new pv)},MWn.Ib=function(){return fSn(this)},MWn.Ld=function(){return this.e?this.e:this.e=this.Kd()},MWn.c=null,MWn.d=null,MWn.e=null,vX(XWn,"ImmutableMap",714),wAn(715,714,jVn),MWn._b=function(n){return Yj(this,n)},MWn.uc=function(n){return _T(this.b,n)},MWn.Id=function(){return hfn(new el(this))},MWn.Jd=function(){return hfn(iV(this.b))},MWn.Kd=function(){return s_(),new rv(tV(this.b))},MWn.Fb=function(n){return BT(this.b,n)},MWn.xc=function(n){return UK(this,n)},MWn.Hb=function(){return nsn(this.b.c)},MWn.dc=function(){return this.b.c.dc()},MWn.gc=function(){return this.b.c.gc()},MWn.Ib=function(){return Bbn(this.b.c)},vX(XWn,"ForwardingImmutableMap",715),wAn(1974,1973,EVn),MWn.Bd=function(){return this.Md()},MWn.Cd=function(){return this.Md()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return n===this||this.Md().Fb(n)},MWn.Hb=function(){return this.Md().Hb()},vX(XWn,"ForwardingSet",1974),wAn(1069,1974,EVn,el),MWn.Bd=function(){return eV(this.a.b)},MWn.Cd=function(){return eV(this.a.b)},MWn.Hc=function(n){if(cL(n,42)&&null==BB(n,42).cd())return!1;try{return KT(eV(this.a.b),n)}catch(t){if(cL(t=lun(t),205))return!1;throw Hp(t)}},MWn.Md=function(){return eV(this.a.b)},MWn.Qc=function(n){var t;return t=CY(eV(this.a.b),n),eV(this.a.b).b.gc()<t.length&&$X(t,eV(this.a.b).b.gc(),null),t},vX(XWn,"ForwardingImmutableMap/1",1069),wAn(1981,1980,TVn),MWn.Kc=function(){return this.Ed()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"ImmutableSet",1981),wAn(703,1981,TVn),MWn.Kc=function(){return L9(new qb(this.a.b.Kc()))},MWn.Hc=function(n){return null!=n&&xT(this.a,n)},MWn.Ic=function(n){return DT(this.a,n)},MWn.Hb=function(){return nsn(this.a.b)},MWn.dc=function(){return this.a.b.dc()},MWn.Ed=function(){return L9(new qb(this.a.b.Kc()))},MWn.gc=function(){return this.a.b.gc()},MWn.Pc=function(){return this.a.b.Pc()},MWn.Qc=function(n){return RT(this.a,n)},MWn.Ib=function(){return Bbn(this.a.b)},vX(XWn,"ForwardingImmutableSet",703),wAn(1975,1974,MVn),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Nc=function(){return new wS(this)},vX(XWn,"ForwardingSortedSet",1975),wAn(533,1979,jVn,Avn),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new p$(this.d||(this.d=new il(this)))},MWn.$b=function(){d5(this)},MWn._b=function(n){return!!Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))},MWn.uc=function(n){return Ltn(this,n)},MWn.kc=function(){return new VL(this,this)},MWn.wc=function(n){BJ(this,n)},MWn.xc=function(n){return sen(this,n)},MWn.ec=function(){return new v$(this)},MWn.zc=function(n,t){return wKn(this,n,t)},MWn.Bc=function(n){var t;return(t=Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this,t),t.e=null,t.c=null,t.i):null},MWn.gc=function(){return this.i},MWn.pd=function(){return new p$(this.d||(this.d=new il(this)))},MWn.f=0,MWn.g=0,MWn.i=0,vX(XWn,"HashBiMap",533),wAn(534,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return l3(this)},MWn.Pb=function(){var n;if(!l3(this))throw Hp(new yv);return n=this.c,this.c=n.c,this.f=n,--this.d,this.Nd(n)},MWn.Qb=function(){if(this.e.g!=this.b)throw Hp(new vv);han(!!this.f),LLn(this.e,this.f),this.b=this.e.g,this.f=null},MWn.b=0,MWn.d=0,MWn.f=null,vX(XWn,"HashBiMap/Itr",534),wAn(1011,534,QWn,VL),MWn.Nd=function(n){return new bT(this,n)},vX(XWn,"HashBiMap/1",1011),wAn(1012,345,aVn,bT),MWn.cd=function(){return this.a.g},MWn.dd=function(){return this.a.i},MWn.ed=function(n){var t,e,i;return e=this.a.i,(i=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.f&&(GC(n)===GC(e)||null!=n&&Nfn(n,e))?n:(yun(!Zrn(this.b.a,n,i),n),LLn(this.b.a,this.a),t=new qW(this.a.g,this.a.a,n,i),YIn(this.b.a,t,this.a),this.a.e=null,this.a.c=null,this.b.b=this.b.a.g,this.b.f==this.a&&(this.b.f=t),this.a=t,e)},vX(XWn,"HashBiMap/1/MapEntry",1012),wAn(238,345,{345:1,238:1,3:1,42:1},vT),MWn.cd=function(){return this.g},MWn.dd=function(){return this.i},MWn.ed=function(n){throw Hp(new pv)},vX(XWn,"ImmutableEntry",238),wAn(317,238,{345:1,317:1,238:1,3:1,42:1},qW),MWn.a=0,MWn.f=0;var qnt,Gnt=vX(XWn,"HashBiMap/BiEntry",317);wAn(610,1979,jVn,il),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new v$(this.a)},MWn.$b=function(){d5(this.a)},MWn._b=function(n){return Ltn(this.a,n)},MWn.kc=function(){return new QL(this,this.a)},MWn.wc=function(n){yX(n),BJ(this.a,new rl(n))},MWn.xc=function(n){return Uin(this,n)},MWn.ec=function(){return new p$(this)},MWn.zc=function(n,t){return I_n(this.a,n,t,!1)},MWn.Bc=function(n){var t;return(t=Zrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this.a,t),t.e=null,t.c=null,t.g):null},MWn.gc=function(){return this.a.i},MWn.pd=function(){return new v$(this.a)},vX(XWn,"HashBiMap/Inverse",610),wAn(1008,534,QWn,QL),MWn.Nd=function(n){return new wT(this,n)},vX(XWn,"HashBiMap/Inverse/1",1008),wAn(1009,345,aVn,wT),MWn.cd=function(){return this.a.i},MWn.dd=function(){return this.a.g},MWn.ed=function(n){var t,e,i;return i=this.a.g,(t=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.a&&(GC(n)===GC(i)||null!=n&&Nfn(n,i))?n:(yun(!Jrn(this.b.a.a,n,t),n),LLn(this.b.a.a,this.a),e=new qW(n,t,this.a.i,this.a.f),this.a=e,YIn(this.b.a.a,e,null),this.b.b=this.b.a.a.g,i)},vX(XWn,"HashBiMap/Inverse/1/InverseEntry",1009),wAn(611,532,tVn,p$),MWn.Kc=function(){return new uy(this.a.a)},MWn.Mc=function(n){var t;return!!(t=Zrn(this.a.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a.a,t),!0)},vX(XWn,"HashBiMap/Inverse/InverseKeySet",611),wAn(1007,534,QWn,uy),MWn.Nd=function(n){return n.i},vX(XWn,"HashBiMap/Inverse/InverseKeySet/1",1007),wAn(1010,1,{},rl),MWn.Od=function(n,t){ev(this.a,n,t)},vX(XWn,"HashBiMap/Inverse/lambda$0$Type",1010),wAn(609,532,tVn,v$),MWn.Kc=function(){return new oy(this.a)},MWn.Mc=function(n){var t;return!!(t=Jrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a,t),t.e=null,t.c=null,!0)},vX(XWn,"HashBiMap/KeySet",609),wAn(1006,534,QWn,oy),MWn.Nd=function(n){return n.g},vX(XWn,"HashBiMap/KeySet/1",1006),wAn(1093,619,VWn),vX(XWn,"HashMultimapGwtSerializationDependencies",1093),wAn(265,1093,VWn,pJ),MWn.hc=function(){return new bE(etn(this.a))},MWn.gd=function(){return new bE(etn(this.a))},MWn.a=2,vX(XWn,"HashMultimap",265),wAn(1999,152,yVn),MWn.Hc=function(n){return this.Pd().Hc(n)},MWn.dc=function(){return this.Pd().dc()},MWn.gc=function(){return this.Pd().gc()},vX(XWn,"ImmutableAsList",1999),wAn(1931,715,jVn),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"ImmutableBiMap",1931),wAn(1977,1,{}),vX(XWn,"ImmutableCollection/Builder",1977),wAn(1022,703,TVn,sy),vX(XWn,"ImmutableEnumSet",1022),wAn(969,386,WWn,bK),MWn.Xb=function(n){return this.a.Xb(n)},vX(XWn,"ImmutableList/1",969),wAn(968,1977,{},sR),vX(XWn,"ImmutableList/Builder",968),wAn(614,198,UWn,cl),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},vX(XWn,"ImmutableMap/1",614),wAn(1041,1,{},o),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"ImmutableMap/2methodref$getKey$Type",1041),wAn(1040,1,{},hR),vX(XWn,"ImmutableMap/Builder",1040),wAn(2e3,1981,TVn),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Dd=function(){return new uv(this)},MWn.Jc=function(n){var t,e;for(yX(n),e=this.gc(),t=0;t<e;t++)n.td(BB(wz(lz(this.a)).Xb(t),42).cd())},MWn.Ed=function(){var n;return(n=this.c,n||(this.c=new uv(this))).Ed()},MWn.Nc=function(){return yq(this.gc(),1296,new ul(this))},vX(XWn,"IndexedImmutableSet",2e3),wAn(1180,2e3,TVn,cv),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Hc=function(n){return this.a._b(n)},MWn.Jc=function(n){yX(n),nan(this.a,new al(n))},MWn.Ed=function(){return new cl(lz(this.a).Ed())},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new o)},vX(XWn,"ImmutableMapKeySet",1180),wAn(1181,1,{},al),MWn.Od=function(n,t){s_(),this.a.td(n)},vX(XWn,"ImmutableMapKeySet/lambda$0$Type",1181),wAn(1178,1980,mVn,av),MWn.Kc=function(){return new KH(this)},MWn.Hc=function(n){return null!=n&&Pjn(new KH(this),n)},MWn.Ed=function(){return new KH(this)},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new s)},vX(XWn,"ImmutableMapValues",1178),wAn(1179,1,{},s),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"ImmutableMapValues/0methodref$getValue$Type",1179),wAn(626,198,UWn,KH),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},vX(XWn,"ImmutableMapValues/1",626),wAn(1182,1,{},ul),MWn.ld=function(n){return HU(this.a,n)},vX(XWn,"IndexedImmutableSet/0methodref$get$Type",1182),wAn(752,1999,yVn,uv),MWn.Pd=function(){return this.a},MWn.Xb=function(n){return HU(this.a,n)},MWn.gc=function(){return this.a.a.gc()},vX(XWn,"IndexedImmutableSet/1",752),wAn(44,1,{},h),MWn.Kb=function(n){return BB(n,20).Kc()},MWn.Fb=function(n){return this===n},vX(XWn,"Iterables/10",44),wAn(1042,537,pVn,_H),MWn.Jc=function(n){yX(n),this.b.Jc(new dT(this.a,n))},MWn.Kc=function(){return qA(this)},vX(XWn,"Iterables/4",1042),wAn(1043,1,lVn,dT),MWn.td=function(n){TS(this.b,this.a,n)},vX(XWn,"Iterables/4/lambda$0$Type",1043),wAn(1044,537,pVn,FH),MWn.Jc=function(n){yX(n),e5(this.a,new fT(n,this.b))},MWn.Kc=function(){return ZL(new AL(this.a),this.b)},vX(XWn,"Iterables/5",1044),wAn(1045,1,lVn,fT),MWn.td=function(n){this.a.td(yA(n))},vX(XWn,"Iterables/5/lambda$0$Type",1045),wAn(1071,198,UWn,ol),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return this.a.Pb()},vX(XWn,"Iterators/1",1071),wAn(1072,699,UWn,lT),MWn.Yb=function(){for(var n;this.b.Ob();)if(n=this.b.Pb(),this.a.Lb(n))return n;return this.e=2,null},vX(XWn,"Iterators/5",1072),wAn(487,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.Qd(this.b.Pb())},MWn.Qb=function(){this.b.Qb()},vX(XWn,"TransformedIterator",487),wAn(1073,487,QWn,nN),MWn.Qd=function(n){return this.a.Kb(n)},vX(XWn,"Iterators/6",1073),wAn(717,198,UWn,sl),MWn.Ob=function(){return!this.a},MWn.Pb=function(){if(this.a)throw Hp(new yv);return this.a=!0,this.b},MWn.a=!1,vX(XWn,"Iterators/9",717),wAn(1070,386,WWn,fG),MWn.Xb=function(n){return this.a[this.b+n]},MWn.b=0,vX(XWn,"Iterators/ArrayItr",1070),wAn(39,1,{39:1,47:1},oz),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return dAn(this)},MWn.Pb=function(){return U5(this)},MWn.Qb=function(){han(!!this.c),this.c.Qb(),this.c=null},vX(XWn,"Iterators/ConcatenatedIterator",39),wAn(22,1,{3:1,35:1,22:1}),MWn.wd=function(n){return Py(this,BB(n,22))},MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return dx(this)},MWn.g=0;var znt,Unt=vX(RWn,"Enum",22);wAn(538,22,{538:1,3:1,35:1,22:1,47:1},cN),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Qb=function(){han(!1)};var Xnt,Wnt=Ben(XWn,"Iterators/EmptyModifiableIterator",538,Unt,oX,rx);wAn(1834,619,VWn),vX(XWn,"LinkedHashMultimapGwtSerializationDependencies",1834),wAn(1835,1834,VWn,Thn),MWn.hc=function(){return new LN(etn(this.b))},MWn.$b=function(){win(this),iv(this.a,this.a)},MWn.gd=function(){return new LN(etn(this.b))},MWn.ic=function(n){return new Tsn(this,n,this.b)},MWn.kc=function(){return new tN(this)},MWn.lc=function(){return new w1(BB(this.g||(this.g=new qm(this)),21),17)},MWn.ec=function(){return this.i||(this.i=new HL(this,this.c))},MWn.nc=function(){return new by(new tN(this))},MWn.oc=function(){return RB(new w1(BB(this.g||(this.g=new qm(this)),21),17),new f)},MWn.b=2,vX(XWn,"LinkedHashMultimap",1835),wAn(1838,1,{},f),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"LinkedHashMultimap/0methodref$getValue$Type",1838),wAn(824,1,QWn,tN),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return vtn(this)},MWn.Ob=function(){return this.a!=this.b.a},MWn.Qb=function(){han(!!this.c),q0(this.b,this.c.g,this.c.i),this.c=null},vX(XWn,"LinkedHashMultimap/1",824),wAn(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},HW),MWn.Rd=function(){return this.f},MWn.Sd=function(n){this.c=n},MWn.Td=function(n){this.f=n},MWn.d=0;var Vnt,Qnt=vX(XWn,"LinkedHashMultimap/ValueEntry",330);wAn(1836,1970,{2020:1,20:1,28:1,14:1,21:1},Tsn),MWn.Fc=function(n){var t,e,i,r,c;for(t=(c=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))&this.b.length-1,e=r=this.b[t];e;e=e.a)if(e.d==c&&wW(e.i,n))return!1;return i=new HW(this.c,n,c,r),kk(this.d,i),i.f=this,this.d=i,iv(this.g.a.b,i),iv(i,this.g.a),this.b[t]=i,++this.f,++this.e,yjn(this),!0},MWn.$b=function(){var n,t;for(yS(this.b,null),this.f=0,n=this.a;n!=this;n=n.Rd())iv((t=BB(n,330)).b,t.e);this.a=this,this.d=this,++this.e},MWn.Hc=function(n){var t,e;for(e=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))),t=this.b[e&this.b.length-1];t;t=t.a)if(t.d==e&&wW(t.i,n))return!0;return!1},MWn.Jc=function(n){var t;for(yX(n),t=this.a;t!=this;t=t.Rd())n.td(BB(t,330).i)},MWn.Rd=function(){return this.a},MWn.Kc=function(){return new sW(this)},MWn.Mc=function(n){return kAn(this,n)},MWn.Sd=function(n){this.d=n},MWn.Td=function(n){this.a=n},MWn.gc=function(){return this.f},MWn.e=0,MWn.f=0,vX(XWn,"LinkedHashMultimap/ValueSet",1836),wAn(1837,1,QWn,sW),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return wG(this),this.b!=this.c},MWn.Pb=function(){var n,t;if(wG(this),this.b==this.c)throw Hp(new yv);return t=(n=BB(this.b,330)).i,this.d=n,this.b=n.f,t},MWn.Qb=function(){wG(this),han(!!this.d),kAn(this.c,this.d.i),this.a=this.c.e,this.d=null},MWn.a=0,vX(XWn,"LinkedHashMultimap/ValueSet/1",1837),wAn(766,1986,VWn,PO),MWn.Zb=function(){return this.f||(this.f=new rS(this))},MWn.Fb=function(n){return jsn(this,n)},MWn.cc=function(n){return new mT(this,n)},MWn.fc=function(n){return J3(this,n)},MWn.$b=function(){cX(this)},MWn._b=function(n){return HT(this,n)},MWn.ac=function(){return new rS(this)},MWn.bc=function(){return new yl(this)},MWn.qc=function(n){return new mT(this,n)},MWn.dc=function(){return!this.a},MWn.rc=function(n){return J3(this,n)},MWn.gc=function(){return this.d},MWn.c=0,MWn.d=0,vX(XWn,"LinkedListMultimap",766),wAn(52,28,LVn),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new tk("Add not supported on this list"))},MWn.Fc=function(n){return this.Vc(this.gc(),n),!0},MWn.Wc=function(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),this.Vc(n++,i),e=!0;return e},MWn.$b=function(){this.Ud(0,this.gc())},MWn.Fb=function(n){return NAn(this,n)},MWn.Hb=function(){return Fon(this)},MWn.Xc=function(n){return bin(this,n)},MWn.Kc=function(){return new Sb(this)},MWn.Yc=function(){return this.Zc(0)},MWn.Zc=function(n){return new M2(this,n)},MWn.$c=function(n){throw Hp(new tk("Remove not supported on this list"))},MWn.Ud=function(n,t){var e,i;for(i=this.Zc(n),e=n;e<t;++e)i.Pb(),i.Qb()},MWn._c=function(n,t){throw Hp(new tk("Set not supported on this list"))},MWn.bd=function(n,t){return new s1(this,n,t)},MWn.j=0,vX(YWn,"AbstractList",52),wAn(1964,52,LVn),MWn.Vc=function(n,t){Kx(this,n,t)},MWn.Wc=function(n,t){return Asn(this,n,t)},MWn.Xb=function(n){return Dpn(this,n)},MWn.Kc=function(){return this.Zc(0)},MWn.$c=function(n){return tkn(this,n)},MWn._c=function(n,t){var e,i;e=this.Zc(n);try{return i=e.Pb(),e.Wb(t),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't set element "+n)):Hp(r)}},vX(YWn,"AbstractSequentialList",1964),wAn(636,1964,LVn,mT),MWn.Zc=function(n){return vN(this,n)},MWn.gc=function(){var n;return(n=BB(RX(this.a.b,this.b),283))?n.a:0},vX(XWn,"LinkedListMultimap/1",636),wAn(1297,1970,tVn,yl),MWn.Hc=function(n){return HT(this.a,n)},MWn.Kc=function(){return new vrn(this.a)},MWn.Mc=function(n){return!J3(this.a,n).a.dc()},MWn.gc=function(){return NT(this.a.b)},vX(XWn,"LinkedListMultimap/1KeySetImpl",1297),wAn(1296,1,QWn,vrn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return bG(this),!!this.c},MWn.Pb=function(){bG(this),oN(this.c),this.a=this.c,TU(this.d,this.a.a);do{this.c=this.c.b}while(this.c&&!TU(this.d,this.c.a));return this.a.a},MWn.Qb=function(){bG(this),han(!!this.a),Iq(new I7(this.e,this.a.a)),this.a=null,this.b=this.e.c},MWn.b=0,vX(XWn,"LinkedListMultimap/DistinctKeyIterator",1296),wAn(283,1,{283:1},sY),MWn.a=0,vX(XWn,"LinkedListMultimap/KeyList",283),wAn(1295,345,aVn,yT),MWn.cd=function(){return this.a},MWn.dd=function(){return this.f},MWn.ed=function(n){var t;return t=this.f,this.f=n,t},vX(XWn,"LinkedListMultimap/Node",1295),wAn(560,1,cVn,I7,KPn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.e=yKn(this.f,this.b,n,this.c),++this.d,this.a=null},MWn.Ob=function(){return!!this.c},MWn.Sb=function(){return!!this.e},MWn.Pb=function(){return EZ(this)},MWn.Tb=function(){return this.d},MWn.Ub=function(){return TZ(this)},MWn.Vb=function(){return this.d-1},MWn.Qb=function(){han(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,ZIn(this.f,this.a),this.a=null},MWn.Wb=function(n){uN(!!this.a),this.a.f=n},MWn.d=0,vX(XWn,"LinkedListMultimap/ValueForKeyIterator",560),wAn(1018,52,LVn),MWn.Vc=function(n,t){this.a.Vc(n,t)},MWn.Wc=function(n,t){return this.a.Wc(n,t)},MWn.Hc=function(n){return this.a.Hc(n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.$c=function(n){return this.a.$c(n)},MWn._c=function(n,t){return this.a._c(n,t)},MWn.gc=function(){return this.a.gc()},vX(XWn,"Lists/AbstractListWrapper",1018),wAn(1019,1018,xVn),vX(XWn,"Lists/RandomAccessListWrapper",1019),wAn(1021,1019,xVn,CT),MWn.Zc=function(n){return this.a.Zc(n)},vX(XWn,"Lists/1",1021),wAn(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},IT),MWn.Vc=function(n,t){this.a.Vc(pU(this,n),t)},MWn.$b=function(){this.a.$b()},MWn.Xb=function(n){return this.a.Xb(LX(this,n))},MWn.Kc=function(){return W1(this,0)},MWn.Zc=function(n){return W1(this,n)},MWn.$c=function(n){return this.a.$c(LX(this,n))},MWn.Ud=function(n,t){(d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))).$b()},MWn._c=function(n,t){return this.a._c(LX(this,n),t)},MWn.gc=function(){return this.a.gc()},MWn.bd=function(n,t){return d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))},vX(XWn,"Lists/ReverseList",131),wAn(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},fy),vX(XWn,"Lists/RandomAccessReverseList",280),wAn(1020,1,cVn,kT),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.c.Rb(n),this.c.Ub(),this.a=!1},MWn.Ob=function(){return this.c.Sb()},MWn.Sb=function(){return this.c.Ob()},MWn.Pb=function(){return w5(this)},MWn.Tb=function(){return pU(this.b,this.c.Tb())},MWn.Ub=function(){if(!this.c.Ob())throw Hp(new yv);return this.a=!0,this.c.Pb()},MWn.Vb=function(){return pU(this.b,this.c.Tb())-1},MWn.Qb=function(){han(this.a),this.c.Qb(),this.a=!1},MWn.Wb=function(n){uN(this.a),this.c.Wb(n)},MWn.a=!1,vX(XWn,"Lists/ReverseList/1",1020),wAn(432,487,QWn,ly),MWn.Qd=function(n){return cS(n)},vX(XWn,"Maps/1",432),wAn(698,487,QWn,by),MWn.Qd=function(n){return BB(n,42).dd()},vX(XWn,"Maps/2",698),wAn(962,487,QWn,pN),MWn.Qd=function(n){return new vT(n,_O(this.a,n))},vX(XWn,"Maps/3",962),wAn(959,1971,tVn,ml),MWn.Jc=function(n){xv(this.a,n)},MWn.Kc=function(){return this.a.kc()},MWn.Rc=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"Maps/IteratorBasedAbstractMap/1",959),wAn(960,1,{},vl),MWn.Od=function(n,t){this.a.td(n)},vX(XWn,"Maps/KeySet/lambda$0$Type",960),wAn(958,28,ZWn,PT),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Jc=function(n){yX(n),this.a.wc(new ll(n))},MWn.dc=function(){return this.a.dc()},MWn.Kc=function(){return new by(this.a.vc().Kc())},MWn.Mc=function(n){var t,e;try{return ywn(this,n,!0)}catch(i){if(cL(i=lun(i),41)){for(e=this.a.vc().Kc();e.Ob();)if(wW(n,(t=BB(e.Pb(),42)).dd()))return this.a.Bc(t.cd()),!0;return!1}throw Hp(i)}},MWn.gc=function(){return this.a.gc()},vX(XWn,"Maps/Values",958),wAn(961,1,{},ll),MWn.Od=function(n,t){this.a.td(t)},vX(XWn,"Maps/Values/lambda$0$Type",961),wAn(736,1987,JWn,rS),MWn.xc=function(n){return this.a._b(n)?this.a.cc(n):null},MWn.Bc=function(n){return this.a._b(n)?this.a.fc(n):null},MWn.$b=function(){this.a.$b()},MWn._b=function(n){return this.a._b(n)},MWn.Ec=function(){return new fl(this)},MWn.Dc=function(){return this.Ec()},MWn.dc=function(){return this.a.dc()},MWn.ec=function(){return this.a.ec()},MWn.gc=function(){return this.a.ec().gc()},vX(XWn,"Multimaps/AsMap",736),wAn(1104,1971,tVn,fl),MWn.Kc=function(){return nL(this.a.a.ec(),new bl(this))},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!idn(this,n)&&(t=BB(n,42),jk(this.a,t.cd()),!0)},vX(XWn,"Multimaps/AsMap/EntrySet",1104),wAn(1108,1,{},bl),MWn.Kb=function(n){return _O(this,n)},MWn.Fb=function(n){return this===n},vX(XWn,"Multimaps/AsMap/EntrySet/1",1108),wAn(543,1989,{543:1,835:1,20:1,28:1,14:1},wl),MWn.$b=function(){win(this.a)},MWn.Hc=function(n){return Wj(this.a,n)},MWn.Jc=function(n){yX(n),e5(MX(this.a),new gl(n))},MWn.Kc=function(){return new ly(MX(this.a).a.kc())},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return RB(MX(this.a).Nc(),new l)},vX(XWn,"Multimaps/Keys",543),wAn(1106,1,{},l),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"Multimaps/Keys/0methodref$getKey$Type",1106),wAn(1105,487,QWn,wy),MWn.Qd=function(n){return new dl(BB(n,42))},vX(XWn,"Multimaps/Keys/1",1105),wAn(1990,1,{416:1}),MWn.Fb=function(n){var t;return!!cL(n,492)&&(t=BB(n,416),BB(this.a.dd(),14).gc()==BB(t.a.dd(),14).gc()&&wW(this.a.cd(),t.a.cd()))},MWn.Hb=function(){var n;return(null==(n=this.a.cd())?0:nsn(n))^BB(this.a.dd(),14).gc()},MWn.Ib=function(){var n,t;return t=kN(this.a.cd()),1==(n=BB(this.a.dd(),14).gc())?t:t+" x "+n},vX(XWn,"Multisets/AbstractEntry",1990),wAn(492,1990,{492:1,416:1},dl),vX(XWn,"Multimaps/Keys/1/1",492),wAn(1107,1,lVn,gl),MWn.td=function(n){this.a.td(BB(n,42).cd())},vX(XWn,"Multimaps/Keys/lambda$1$Type",1107),wAn(1110,1,lVn,b),MWn.td=function(n){Cq(BB(n,416))},vX(XWn,"Multiset/lambda$0$Type",1110),wAn(737,1,lVn,pl),MWn.td=function(n){Ctn(this.a,BB(n,416))},vX(XWn,"Multiset/lambda$1$Type",737),wAn(1111,1,{},m),vX(XWn,"Multisets/0methodref$add$Type",1111),wAn(738,1,{},y),MWn.Kb=function(n){return s3(BB(n,416))},vX(XWn,"Multisets/lambda$3$Type",738),wAn(2008,1,KWn),vX(XWn,"RangeGwtSerializationDependencies",2008),wAn(514,2008,{169:1,514:1,3:1,45:1},svn),MWn.Lb=function(n){return Mz(this,BB(n,35))},MWn.Mb=function(n){return Mz(this,BB(n,35))},MWn.Fb=function(n){var t;return!!cL(n,514)&&(t=BB(n,514),xdn(this.a,t.a)&&xdn(this.b,t.b))},MWn.Hb=function(){return 31*this.a.Hb()+this.b.Hb()},MWn.Ib=function(){return B3(this.a,this.b)},vX(XWn,"Range",514),wAn(778,1999,yVn,aU),MWn.Zc=function(n){return ix(this.b,n)},MWn.Pd=function(){return this.a},MWn.Xb=function(n){return WC(this.b,n)},MWn.Fd=function(n){return ix(this.b,n)},vX(XWn,"RegularImmutableAsList",778),wAn(646,2006,yVn,SY),MWn.Hd=function(){return this.a},vX(XWn,"RegularImmutableList",646),wAn(616,715,jVn,hy),vX(XWn,"RegularImmutableMap",616),wAn(716,703,TVn,vS),vX(XWn,"RegularImmutableSet",716),wAn(1976,nVn,tVn),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"Sets/SetView",1976),wAn(963,1976,tVn,ET),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Hc=function(n){return IG(this.a,n)&&this.b.Hc(n)},MWn.Ic=function(n){return oun(this.a,n)&&this.b.Ic(n)},MWn.dc=function(){return Kpn(this.b,this.a)},MWn.Lc=function(){return AV(new Rq(null,new w1(this.a,1)),new jl(this.b))},MWn.gc=function(){return Ian(this)},MWn.Oc=function(){return AV(new Rq(null,new w1(this.a,1)),new kl(this.b))},vX(XWn,"Sets/2",963),wAn(700,699,UWn,SV),MWn.Yb=function(){for(var n;k$(this.a);)if(n=u4(this.a),this.c.Hc(n))return n;return this.e=2,null},vX(XWn,"Sets/2/1",700),wAn(964,1,DVn,kl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/4methodref$contains$Type",964),wAn(965,1,DVn,jl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/5methodref$contains$Type",965),wAn(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},bJ),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Jc=function(n){this.a.Jc(n)},MWn.Lc=function(){return this.a.Lc()},MWn.Oc=function(){return this.a.Oc()},vX(XWn,"Sets/UnmodifiableNavigableSet",607),wAn(1932,1931,jVn,GW),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"SingletonImmutableBiMap",1932),wAn(647,2006,yVn,Pq),MWn.Hd=function(){return this.a},vX(XWn,"SingletonImmutableList",647),wAn(350,1981,TVn,yk),MWn.Kc=function(){return new sl(this.a)},MWn.Hc=function(n){return Nfn(this.a,n)},MWn.Ed=function(){return new sl(this.a)},MWn.gc=function(){return 1},vX(XWn,"SingletonImmutableSet",350),wAn(1115,1,{},k),MWn.Kb=function(n){return BB(n,164)},vX(XWn,"Streams/lambda$0$Type",1115),wAn(1116,1,RVn,El),MWn.Vd=function(){B5(this.a)},vX(XWn,"Streams/lambda$1$Type",1116),wAn(1659,1658,VWn,pY),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new CD(this,BB(this.c,171)):cL(this.c,161)?new ID(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.ac=function(){return cL(this.c,171)?new CD(this,BB(this.c,171)):cL(this.c,161)?new ID(this,BB(this.c,161)):new pT(this,this.c)},MWn.ic=function(n){return null==n&&this.a.ue(n,n),new dE(this.b)},vX(XWn,"TreeMultimap",1659),wAn(78,1,{3:1,78:1}),MWn.Wd=function(n){return new Error(n)},MWn.Xd=function(){return this.e},MWn.Yd=function(){return _wn($V(LU((null==this.k&&(this.k=x8(Jnt,sVn,78,0,0,1)),this.k)),new x),new on)},MWn.Zd=function(){return this.f},MWn.$d=function(){return this.g},MWn._d=function(){yy(this,b2(this.Wd(IY(this,this.g)))),ov(this)},MWn.Ib=function(){return IY(this,this.$d())},MWn.e=FVn,MWn.i=!1,MWn.n=!0;var Ynt,Jnt=vX(RWn,"Throwable",78);wAn(102,78,{3:1,102:1,78:1}),vX(RWn,"Exception",102),wAn(60,102,BVn,sv,dy),vX(RWn,"RuntimeException",60),wAn(598,60,BVn),vX(RWn,"JsException",598),wAn(863,598,BVn),vX(HVn,"JavaScriptExceptionBase",863),wAn(477,863,{477:1,3:1,102:1,60:1,78:1},jhn),MWn.$d=function(){return pEn(this),this.c},MWn.ae=function(){return GC(this.b)===GC(Ynt)?null:this.b},vX(GVn,"JavaScriptException",477);var Znt,ntt=vX(GVn,"JavaScriptObject$",0);wAn(1948,1,{}),vX(GVn,"Scheduler",1948);var ttt,ett,itt,rtt,ctt=0,att=0,utt=-1;wAn(890,1948,{},j),vX(HVn,"SchedulerImpl",890),wAn(1960,1,{}),vX(HVn,"StackTraceCreator/Collector",1960),wAn(864,1960,{},E),MWn.be=function(n){var t={},e=[];n[UVn]=e;for(var i=arguments.callee.caller;i;){var r=(PY(),i.name||(i.name=Ven(i.toString())));e.push(r);var c,a,u=":"+r,o=t[u];if(o)for(c=0,a=o.length;c<a;c++)if(o[c]===i)return;(o||(t[u]=[])).push(i),i=i.caller}},MWn.ce=function(n){var t,e,i,r;for(PY(),e=(i=n&&n[UVn]?n[UVn]:[]).length,r=x8(Ftt,sVn,310,e,0,1),t=0;t<e;t++)r[t]=new PV(i[t],null,-1);return r},vX(HVn,"StackTraceCreator/CollectorLegacy",864),wAn(1961,1960,{}),MWn.be=function(n){},MWn.de=function(n,t,e,i){return new PV(t,n+"@"+i,e<0?-1:e)},MWn.ce=function(n){var t,e,i,r,c,a;if(r=lyn(n),c=x8(Ftt,sVn,310,0,0,1),t=0,0==(i=r.length))return c;for(mK((a=Oqn(this,r[0])).d,zVn)||(c[t++]=a),e=1;e<i;e++)c[t++]=Oqn(this,r[e]);return c},vX(HVn,"StackTraceCreator/CollectorModern",1961),wAn(865,1961,{},d),MWn.de=function(n,t,e,i){return new PV(t,n,-1)},vX(HVn,"StackTraceCreator/CollectorModernNoSourceMap",865),wAn(1050,1,{}),vX(yQn,kQn,1050),wAn(615,1050,{615:1},zX),vX(jQn,kQn,615),wAn(2001,1,{}),vX(yQn,EQn,2001),wAn(2002,2001,{}),vX(jQn,EQn,2002),wAn(1090,1,{},g),vX(jQn,"LocaleInfo",1090),wAn(1918,1,{},p),MWn.a=0,vX(jQn,"TimeZone",1918),wAn(1258,2002,{},w),vX("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1258),wAn(434,1,{434:1},VB),MWn.a=!1,MWn.b=0,vX(yQn,"DateTimeFormat/PatternPart",434),wAn(199,1,TQn,AT,von,PD),MWn.wd=function(n){return J0(this,BB(n,199))},MWn.Fb=function(n){return cL(n,199)&&QC(fan(this.q.getTime()),fan(BB(n,199).q.getTime()))},MWn.Hb=function(){var n;return dG(r0(n=fan(this.q.getTime()),jz(n,32)))},MWn.Ib=function(){var n,t,i;return n=((i=-this.q.getTimezoneOffset())>=0?"+":"")+(i/60|0),t=UO(e.Math.abs(i)%60),(pMn(),pet)[this.q.getDay()]+" "+vet[this.q.getMonth()]+" "+UO(this.q.getDate())+" "+UO(this.q.getHours())+":"+UO(this.q.getMinutes())+":"+UO(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var ott,stt,htt,ftt,ltt,btt,wtt,dtt,gtt,ptt,vtt,mtt=vX(YWn,"Date",199);wAn(1915,199,TQn,Ykn),MWn.a=!1,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=!1,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,MWn.o=0,MWn.p=0,vX("com.google.gwt.i18n.shared.impl","DateRecord",1915),wAn(1966,1,{}),MWn.fe=function(){return null},MWn.ge=function(){return null},MWn.he=function(){return null},MWn.ie=function(){return null},MWn.je=function(){return null},vX(MQn,"JSONValue",1966),wAn(216,1966,{216:1},Il,Tl),MWn.Fb=function(n){return!!cL(n,216)&&v0(this.a,BB(n,216).a)},MWn.ee=function(){return qp},MWn.Hb=function(){return tY(this.a)},MWn.fe=function(){return this},MWn.Ib=function(){var n,t,e;for(e=new lN("["),t=0,n=this.a.length;t<n;t++)t>0&&(e.a+=","),uO(e,dnn(this,t));return e.a+="]",e.a},vX(MQn,"JSONArray",216),wAn(483,1966,{483:1},Ml),MWn.ee=function(){return Gp},MWn.ge=function(){return this},MWn.Ib=function(){return hN(),""+this.a},MWn.a=!1,vX(MQn,"JSONBoolean",483),wAn(985,60,BVn,gy),vX(MQn,"JSONException",985),wAn(1023,1966,{},v),MWn.ee=function(){return Vp},MWn.Ib=function(){return zWn},vX(MQn,"JSONNull",1023),wAn(258,1966,{258:1},Sl),MWn.Fb=function(n){return!!cL(n,258)&&this.a==BB(n,258).a},MWn.ee=function(){return zp},MWn.Hb=function(){return VO(this.a)},MWn.he=function(){return this},MWn.Ib=function(){return this.a+""},MWn.a=0,vX(MQn,"JSONNumber",258),wAn(183,1966,{183:1},py,Pl),MWn.Fb=function(n){return!!cL(n,183)&&v0(this.a,BB(n,183).a)},MWn.ee=function(){return Up},MWn.Hb=function(){return tY(this.a)},MWn.ie=function(){return this},MWn.Ib=function(){var n,t,e,i,r,c;for(c=new lN("{"),n=!0,i=0,r=(e=jrn(this,x8(Qtt,sVn,2,0,6,1))).length;i<r;++i)t=e[i],n?n=!1:c.a+=FWn,oO(c,mOn(t)),c.a+=":",uO(c,zJ(this,t));return c.a+="}",c.a},vX(MQn,"JSONObject",183),wAn(596,nVn,tVn,TT),MWn.Hc=function(n){return XC(n)&&zk(this.a,SD(n))},MWn.Kc=function(){return new Sb(new Jy(this.b))},MWn.gc=function(){return this.b.length},vX(MQn,"JSONObject/1",596),wAn(204,1966,{204:1},GX),MWn.Fb=function(n){return!!cL(n,204)&&mK(this.a,BB(n,204).a)},MWn.ee=function(){return Xp},MWn.Hb=function(){return vvn(this.a)},MWn.je=function(){return this},MWn.Ib=function(){return mOn(this.a)},vX(MQn,"JSONString",204),wAn(1962,1,{525:1}),vX(LQn,"OutputStream",1962),wAn(1963,1962,{525:1}),vX(LQn,"FilterOutputStream",1963),wAn(866,1963,{525:1},A),vX(LQn,"PrintStream",866),wAn(418,1,{475:1}),MWn.Ib=function(){return this.a},vX(RWn,"AbstractStringBuilder",418),wAn(529,60,BVn,Oy),vX(RWn,"ArithmeticException",529),wAn(73,60,NQn,fv,Ay),vX(RWn,"IndexOutOfBoundsException",73),wAn(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},Sv,Tk),vX(RWn,"ArrayIndexOutOfBoundsException",320),wAn(528,60,BVn,lv,$y),vX(RWn,"ArrayStoreException",528),wAn(289,78,xQn,Ly),vX(RWn,"Error",289),wAn(194,289,xQn,hv,g5),vX(RWn,"AssertionError",194),IWn={3:1,476:1,35:1};var ytt,ktt=vX(RWn,"Boolean",476);wAn(236,1,{3:1,236:1}),vX(RWn,"Number",236),wAn(217,236,{3:1,217:1,35:1,236:1},$b),MWn.wd=function(n){return Fk(this,BB(n,217))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,217)&&BB(n,217).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var jtt,Ett,Ttt=vX(RWn,"Byte",217);wAn(172,1,{3:1,172:1,35:1},Lb),MWn.wd=function(n){return Bk(this,BB(n,172))},MWn.Fb=function(n){return cL(n,172)&&BB(n,172).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return String.fromCharCode(this.a)},MWn.a=0;var Mtt,Stt=vX(RWn,"Character",172);wAn(205,60,{3:1,205:1,102:1,60:1,78:1},bv,Ky),vX(RWn,"ClassCastException",205),CWn={3:1,35:1,333:1,236:1};var Ptt=vX(RWn,"Double",333);wAn(155,236,{3:1,35:1,155:1,236:1},Nb,Dv),MWn.wd=function(n){return BO(this,BB(n,155))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,155)&&vK(this.a,BB(n,155).a)},MWn.Hb=function(){return IJ(this.a)},MWn.Ib=function(){return""+this.a},MWn.a=0;var Itt=vX(RWn,"Float",155);wAn(32,60,{3:1,102:1,32:1,60:1,78:1},wv,_y,Fsn),vX(RWn,"IllegalArgumentException",32),wAn(71,60,BVn,dv,Fy),vX(RWn,"IllegalStateException",71),wAn(19,236,{3:1,35:1,19:1,236:1},xb),MWn.wd=function(n){return HO(this,BB(n,19))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,19)&&BB(n,19).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ctt,Ott,Att=vX(RWn,"Integer",19);wAn(162,236,{3:1,35:1,162:1,236:1},Db),MWn.wd=function(n){return qO(this,BB(n,162))},MWn.ke=function(){return j2(this.a)},MWn.Fb=function(n){return cL(n,162)&&QC(BB(n,162).a,this.a)},MWn.Hb=function(){return dG(this.a)},MWn.Ib=function(){return""+vz(this.a)},MWn.a=0;var $tt,Ltt,Ntt,xtt,Dtt,Rtt=vX(RWn,"Long",162);wAn(2039,1,{}),wAn(1831,60,BVn,By),vX(RWn,"NegativeArraySizeException",1831),wAn(173,598,{3:1,102:1,173:1,60:1,78:1},gv,Hy),MWn.Wd=function(n){return new TypeError(n)},vX(RWn,"NullPointerException",173),wAn(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},Mk),vX(RWn,"NumberFormatException",127),wAn(184,236,{3:1,35:1,236:1,184:1},Rb),MWn.wd=function(n){return Hk(this,BB(n,184))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,184)&&BB(n,184).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ktt,_tt=vX(RWn,"Short",184);wAn(310,1,{3:1,310:1},PV),MWn.Fb=function(n){var t;return!!cL(n,310)&&(t=BB(n,310),this.c==t.c&&this.d==t.d&&this.a==t.a&&this.b==t.b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[iln(this.c),this.a,this.d,this.b]))},MWn.Ib=function(){return this.a+"."+this.d+"("+(null!=this.b?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},MWn.c=0;var Ftt=vX(RWn,"StackTraceElement",310);OWn={3:1,475:1,35:1,2:1};var Btt,Htt,qtt,Gtt,ztt,Utt,Xtt,Wtt,Vtt,Qtt=vX(RWn,qVn,2);wAn(107,418,{475:1},Sk,Pk,fN),vX(RWn,"StringBuffer",107),wAn(100,418,{475:1},Ik,Ck,lN),vX(RWn,"StringBuilder",100),wAn(687,73,NQn,Ok),vX(RWn,"StringIndexOutOfBoundsException",687),wAn(2043,1,{}),wAn(844,1,{},x),MWn.Kb=function(n){return BB(n,78).e},vX(RWn,"Throwable/lambda$0$Type",844),wAn(41,60,{3:1,102:1,60:1,78:1,41:1},pv,tk),vX(RWn,"UnsupportedOperationException",41),wAn(240,236,{3:1,35:1,236:1,240:1},knn,wE),MWn.wd=function(n){return J_n(this,BB(n,240))},MWn.ke=function(){return bSn(eqn(this))},MWn.Fb=function(n){var t;return this===n||!!cL(n,240)&&(t=BB(n,240),this.e==t.e&&0==J_n(this,t))},MWn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=fan(this.f),this.b=dG(e0(n,-1)),this.b=33*this.b+dG(e0(kz(n,32),-1)),this.b=17*this.b+IJ(this.e),this.b):(this.b=17*Khn(this.c)+IJ(this.e),this.b)},MWn.Ib=function(){return eqn(this)},MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0;var Ytt,Jtt,Ztt,net,tet,eet,iet=vX("java.math","BigDecimal",240);wAn(91,236,{3:1,35:1,236:1,91:1},Rpn,X6,lU,vEn,Ign,$A),MWn.wd=function(n){return tgn(this,BB(n,91))},MWn.ke=function(){return bSn(qXn(this,0))},MWn.Fb=function(n){return swn(this,n)},MWn.Hb=function(){return Khn(this)},MWn.Ib=function(){return qXn(this,0)},MWn.b=-2,MWn.c=0,MWn.d=0,MWn.e=0;var ret,cet,aet,uet,oet=vX("java.math","BigInteger",91);wAn(488,1967,JWn),MWn.$b=function(){$U(this)},MWn._b=function(n){return hU(this,n)},MWn.uc=function(n){return Lsn(this,n,this.g)||Lsn(this,n,this.f)},MWn.vc=function(){return new Pb(this)},MWn.xc=function(n){return RX(this,n)},MWn.zc=function(n,t){return VW(this,n,t)},MWn.Bc=function(n){return v6(this,n)},MWn.gc=function(){return NT(this)},vX(YWn,"AbstractHashMap",488),wAn(261,nVn,tVn,Pb),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return m2(this,n)},MWn.Kc=function(){return new usn(this.a)},MWn.Mc=function(n){var t;return!!m2(this,n)&&(t=BB(n,42).cd(),this.a.Bc(t),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractHashMap/EntrySet",261),wAn(262,1,QWn,usn),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return ten(this)},MWn.Ob=function(){return this.b},MWn.Qb=function(){o9(this)},MWn.b=!1,vX(YWn,"AbstractHashMap/EntrySetIterator",262),wAn(417,1,QWn,Sb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this)},MWn.Pb=function(){return mQ(this)},MWn.Qb=function(){fW(this)},MWn.b=0,MWn.c=-1,vX(YWn,"AbstractList/IteratorImpl",417),wAn(96,417,cVn,M2),MWn.Qb=function(){fW(this)},MWn.Rb=function(n){yR(this,n)},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Ub=function(){return Px(this.b>0),this.a.Xb(this.c=--this.b)},MWn.Vb=function(){return this.b-1},MWn.Wb=function(n){Mx(-1!=this.c),this.a._c(this.c,n)},vX(YWn,"AbstractList/ListIteratorImpl",96),wAn(219,52,LVn,s1),MWn.Vc=function(n,t){LZ(n,this.b),this.c.Vc(this.a+n,t),++this.b},MWn.Xb=function(n){return l1(n,this.b),this.c.Xb(this.a+n)},MWn.$c=function(n){var t;return l1(n,this.b),t=this.c.$c(this.a+n),--this.b,t},MWn._c=function(n,t){return l1(n,this.b),this.c._c(this.a+n,t)},MWn.gc=function(){return this.b},MWn.a=0,MWn.b=0,vX(YWn,"AbstractList/SubList",219),wAn(384,nVn,tVn,Ib),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a._b(n)},MWn.Kc=function(){return new Cb(this.a.vc().Kc())},MWn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/1",384),wAn(691,1,QWn,Cb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/1/1",691),wAn(226,28,ZWn,Ob),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Kc=function(){return new Kb(this.a.vc().Kc())},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/2",226),wAn(294,1,QWn,Kb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/2/1",294),wAn(484,1,{484:1,42:1}),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.d,t.cd())&&cV(this.e,t.dd()))},MWn.cd=function(){return this.d},MWn.dd=function(){return this.e},MWn.Hb=function(){return KA(this.d)^KA(this.e)},MWn.ed=function(n){return pR(this,n)},MWn.Ib=function(){return this.d+"="+this.e},vX(YWn,"AbstractMap/AbstractEntry",484),wAn(383,484,{484:1,383:1,42:1},PS),vX(YWn,"AbstractMap/SimpleEntry",383),wAn(1984,1,VQn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.cd(),t.cd())&&cV(this.dd(),t.dd()))},MWn.Hb=function(){return KA(this.cd())^KA(this.dd())},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(YWn,uVn,1984),wAn(1992,1967,eVn),MWn.tc=function(n){return q5(this,n)},MWn._b=function(n){return DK(this,n)},MWn.vc=function(){return new Bb(this)},MWn.xc=function(n){return qC(lsn(this,n))},MWn.ec=function(){return new _b(this)},vX(YWn,"AbstractNavigableMap",1992),wAn(739,nVn,tVn,Bb),MWn.Hc=function(n){return cL(n,42)&&q5(this.b,BB(n,42))},MWn.Kc=function(){return new BR(this.b)},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),z8(this.b,t))},MWn.gc=function(){return this.b.c},vX(YWn,"AbstractNavigableMap/EntrySet",739),wAn(493,nVn,rVn,_b),MWn.Nc=function(){return new wS(this)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(this.a).b))},MWn.Mc=function(n){return!!DK(this.a,n)&&($J(this.a,n),!0)},MWn.gc=function(){return this.a.c},vX(YWn,"AbstractNavigableMap/NavigableKeySet",493),wAn(494,1,QWn,Fb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this.a.a)},MWn.Pb=function(){return mx(this.a).cd()},MWn.Qb=function(){e_(this.a)},vX(YWn,"AbstractNavigableMap/NavigableKeySet/1",494),wAn(2004,28,ZWn),MWn.Fc=function(n){return F8(eMn(this,n)),!0},MWn.Gc=function(n){return kW(n),vH(n!=this,"Can't add a queue to itself"),Frn(this,n)},MWn.$b=function(){for(;null!=mnn(this););},vX(YWn,"AbstractQueue",2004),wAn(302,28,{4:1,20:1,28:1,14:1},Lp,d1),MWn.Fc=function(n){return w3(this,n),!0},MWn.$b=function(){o4(this)},MWn.Hc=function(n){return wun(new bV(this),n)},MWn.dc=function(){return Wy(this)},MWn.Kc=function(){return new bV(this)},MWn.Mc=function(n){return GJ(new bV(this),n)},MWn.gc=function(){return this.c-this.b&this.a.length-1},MWn.Nc=function(){return new w1(this,272)},MWn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.length<t&&(n=qk(new Array(t),n)),urn(this,n,t),n.length>t&&$X(n,t,null),n},MWn.b=0,MWn.c=0,vX(YWn,"ArrayDeque",302),wAn(446,1,QWn,bV),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a!=this.b},MWn.Pb=function(){return _hn(this)},MWn.Qb=function(){ein(this)},MWn.a=0,MWn.b=0,MWn.c=-1,vX(YWn,"ArrayDeque/IteratorImpl",446),wAn(12,52,QQn,Np,J6,t_),MWn.Vc=function(n,t){kG(this,n,t)},MWn.Fc=function(n){return WB(this,n)},MWn.Wc=function(n,t){return ohn(this,n,t)},MWn.Gc=function(n){return gun(this,n)},MWn.$b=function(){this.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this,n,0)},MWn.Jc=function(n){Otn(this,n)},MWn.Xb=function(n){return xq(this,n)},MWn.Xc=function(n){return E7(this,n,0)},MWn.dc=function(){return 0==this.c.length},MWn.Kc=function(){return new Wb(this)},MWn.$c=function(n){return s6(this,n)},MWn.Mc=function(n){return y7(this,n)},MWn.Ud=function(n,t){h1(this,n,t)},MWn._c=function(n,t){return c5(this,n,t)},MWn.gc=function(){return this.c.length},MWn.ad=function(n){m$(this,n)},MWn.Pc=function(){return bx(this)},MWn.Qc=function(n){return Qgn(this,n)};var set,het,fet,bet,wet,det,get,pet,vet,met=vX(YWn,"ArrayList",12);wAn(7,1,QWn,Wb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return y$(this)},MWn.Pb=function(){return n0(this)},MWn.Qb=function(){AU(this)},MWn.a=0,MWn.b=-1,vX(YWn,"ArrayList/1",7),wAn(2013,e.Function,{},T),MWn.te=function(n,t){return Pln(n,t)},wAn(154,52,YQn,Jy),MWn.Hc=function(n){return-1!=bin(this,n)},MWn.Jc=function(n){var t,e,i,r;for(kW(n),i=0,r=(e=this.a).length;i<r;++i)t=e[i],n.td(t)},MWn.Xb=function(n){return Dq(this,n)},MWn._c=function(n,t){var e;return l1(n,this.a.length),e=this.a[n],$X(this.a,n,t),e},MWn.gc=function(){return this.a.length},MWn.ad=function(n){yG(this.a,this.a.length,n)},MWn.Pc=function(){return Ygn(this,x8(Ant,HWn,1,this.a.length,5,1))},MWn.Qc=function(n){return Ygn(this,n)},vX(YWn,"Arrays/ArrayList",154),wAn(940,52,YQn,S),MWn.Hc=function(n){return!1},MWn.Xb=function(n){return yO(n)},MWn.Kc=function(){return SQ(),LT(),bet},MWn.Yc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptyList",940),wAn(941,1,cVn,P),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new dv)},MWn.Wb=function(n){throw Hp(new dv)},vX(YWn,"Collections/EmptyListIterator",941),wAn(943,1967,jVn,I),MWn._b=function(n){return!1},MWn.uc=function(n){return!1},MWn.vc=function(){return SQ(),fet},MWn.xc=function(n){return null},MWn.ec=function(){return SQ(),fet},MWn.gc=function(){return 0},MWn.Cc=function(){return SQ(),set},vX(YWn,"Collections/EmptyMap",943),wAn(942,nVn,TVn,M),MWn.Hc=function(n){return!1},MWn.Kc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptySet",942),wAn(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},Gb),MWn.Hc=function(n){return cV(this.a,n)},MWn.Xb=function(n){return l1(n,1),this.a},MWn.gc=function(){return 1},vX(YWn,"Collections/SingletonList",599),wAn(372,1,vVn,Hb),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,this.Nc())},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return oE()},MWn.Gc=function(n){return sE()},MWn.$b=function(){hE()},MWn.Hc=function(n){return xT(this,n)},MWn.Ic=function(n){return DT(this,n)},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new qb(this.b.Kc())},MWn.Mc=function(n){return fE()},MWn.gc=function(){return this.b.gc()},MWn.Pc=function(){return this.b.Pc()},MWn.Qc=function(n){return RT(this,n)},MWn.Ib=function(){return Bbn(this.b)},vX(YWn,"Collections/UnmodifiableCollection",372),wAn(371,1,QWn,qb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.b.Pb()},MWn.Qb=function(){lE()},vX(YWn,"Collections/UnmodifiableCollectionIterator",371),wAn(531,372,JQn,bN),MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.Hb=function(){return nsn(this.a)},MWn.Xc=function(n){return this.a.Xc(n)},MWn.dc=function(){return this.a.dc()},MWn.Yc=function(){return new wN(this.a.Zc(0))},MWn.Zc=function(n){return new wN(this.a.Zc(n))},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.ad=function(n){throw Hp(new pv)},MWn.bd=function(n,t){return new bN(this.a.bd(n,t))},vX(YWn,"Collections/UnmodifiableList",531),wAn(690,371,cVn,wN),MWn.Qb=function(){lE()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Sb=function(){return this.a.Sb()},MWn.Tb=function(){return this.a.Tb()},MWn.Ub=function(){return this.a.Ub()},MWn.Vb=function(){return this.a.Vb()},MWn.Wb=function(n){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableListIterator",690),wAn(600,1,JWn,Xb),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return this.c._b(n)},MWn.uc=function(n){return _T(this,n)},MWn.vc=function(){return eV(this)},MWn.Fb=function(n){return BT(this,n)},MWn.xc=function(n){return this.c.xc(n)},MWn.Hb=function(){return nsn(this.c)},MWn.dc=function(){return this.c.dc()},MWn.ec=function(){return iV(this)},MWn.zc=function(n,t){throw Hp(new pv)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.gc()},MWn.Ib=function(){return Bbn(this.c)},MWn.Cc=function(){return tV(this)},vX(YWn,"Collections/UnmodifiableMap",600),wAn(382,372,EVn,Ak),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return Nfn(this.b,n)},MWn.Hb=function(){return nsn(this.b)},vX(YWn,"Collections/UnmodifiableSet",382),wAn(944,382,EVn,Lk),MWn.Hc=function(n){return KT(this,n)},MWn.Ic=function(n){return this.b.Ic(n)},MWn.Kc=function(){return new zb(this.b.Kc())},MWn.Pc=function(){var n;return j4(n=this.b.Pc(),n.length),n},MWn.Qc=function(n){return CY(this,n)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet",944),wAn(945,1,QWn,zb),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return new Ub(BB(this.a.Pb(),42))},MWn.Ob=function(){return this.a.Ob()},MWn.Qb=function(){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",945),wAn(688,1,VQn,Ub),MWn.Fb=function(n){return this.a.Fb(n)},MWn.cd=function(){return this.a.cd()},MWn.dd=function(){return this.a.dd()},MWn.Hb=function(){return this.a.Hb()},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return Bbn(this.a)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",688),wAn(601,531,{20:1,14:1,15:1,54:1},$k),vX(YWn,"Collections/UnmodifiableRandomAccessList",601),wAn(689,382,MVn,dN),MWn.Nc=function(){return new wS(this)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Hb=function(){return nsn(this.a)},vX(YWn,"Collections/UnmodifiableSortedSet",689),wAn(847,1,ZQn,D),MWn.ue=function(n,t){var e;return 0!=(e=T4(BB(n,11),BB(t,11)))?e:nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(YWn,"Comparator/lambda$0$Type",847),wAn(751,1,ZQn,R),MWn.ue=function(n,t){return _q(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),get},vX(YWn,"Comparators/NaturalOrderComparator",751),wAn(1177,1,ZQn,K),MWn.ue=function(n,t){return Fq(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),det},vX(YWn,"Comparators/ReverseNaturalOrderComparator",1177),wAn(64,1,ZQn,nw),MWn.Fb=function(n){return this===n},MWn.ue=function(n,t){return this.a.ue(t,n)},MWn.ve=function(){return this.a},vX(YWn,"Comparators/ReversedComparator",64),wAn(166,60,BVn,vv),vX(YWn,"ConcurrentModificationException",166),wAn(1904,1,nYn,_),MWn.we=function(n){hdn(this,n)},MWn.Ib=function(){return"DoubleSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?l6(this)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+l6(this)+"]"},MWn.a=0,MWn.b=KQn,MWn.c=RQn,MWn.d=0,MWn.e=0,MWn.f=0,vX(YWn,"DoubleSummaryStatistics",1904),wAn(1805,60,BVn,mv),vX(YWn,"EmptyStackException",1805),wAn(451,1967,JWn,Hbn),MWn.zc=function(n,t){return wR(this,n,t)},MWn.$b=function(){TW(this)},MWn._b=function(n){return uS(this,n)},MWn.uc=function(n){var t,e;for(e=new QT(this.a);e.a<e.c.a.length;)if(t=u4(e),cV(n,this.b[t.g]))return!0;return!1},MWn.vc=function(){return new tw(this)},MWn.xc=function(n){return oV(this,n)},MWn.Bc=function(n){return NZ(this,n)},MWn.gc=function(){return this.a.c},vX(YWn,"EnumMap",451),wAn(1352,nVn,tVn,tw),MWn.$b=function(){TW(this.a)},MWn.Hc=function(n){return v2(this,n)},MWn.Kc=function(){return new Aq(this.a)},MWn.Mc=function(n){var t;return!!v2(this,n)&&(t=BB(n,42).cd(),NZ(this.a,t),!0)},MWn.gc=function(){return this.a.a.c},vX(YWn,"EnumMap/EntrySet",1352),wAn(1353,1,QWn,Aq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.b=u4(this.a),new IS(this.c,this.b)},MWn.Ob=function(){return k$(this.a)},MWn.Qb=function(){Mx(!!this.b),NZ(this.c,this.b),this.b=null},vX(YWn,"EnumMap/EntrySetIterator",1353),wAn(1354,1984,VQn,IS),MWn.cd=function(){return this.a},MWn.dd=function(){return this.b.b[this.a.g]},MWn.ed=function(n){return EU(this.b,this.a.g,n)},vX(YWn,"EnumMap/MapEntry",1354),wAn(174,nVn,{20:1,28:1,14:1,174:1,21:1});var yet=vX(YWn,"EnumSet",174);wAn(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},YK),MWn.Fc=function(n){return orn(this,BB(n,22))},MWn.Hc=function(n){return IG(this,n)},MWn.Kc=function(){return new QT(this)},MWn.Mc=function(n){return CG(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"EnumSet/EnumSetImpl",156),wAn(343,1,QWn,QT),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return u4(this)},MWn.Ob=function(){return k$(this)},MWn.Qb=function(){Mx(-1!=this.b),$X(this.c.b,this.b,null),--this.c.c,this.b=-1},MWn.a=-1,MWn.b=-1,vX(YWn,"EnumSet/EnumSetImpl/IteratorImpl",343),wAn(43,488,tYn,xp,XT,mO),MWn.re=function(n,t){return GC(n)===GC(t)||null!=n&&Nfn(n,t)},MWn.se=function(n){return 0|nsn(n)},vX(YWn,"HashMap",43),wAn(53,nVn,eYn,Rv,bE,$q),MWn.Fc=function(n){return TU(this,n)},MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return FT(this,n)},MWn.dc=function(){return 0==this.a.gc()},MWn.Kc=function(){return this.a.ec().Kc()},MWn.Mc=function(n){return eL(this,n)},MWn.gc=function(){return this.a.gc()};var ket,jet=vX(YWn,"HashSet",53);wAn(1781,1,wVn,F),MWn.ud=function(n){ran(this,n)},MWn.Ib=function(){return"IntSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?j2(this.d)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+vz(this.d)+"]"},MWn.a=0,MWn.b=_Vn,MWn.c=DWn,MWn.d=0,vX(YWn,"IntSummaryStatistics",1781),wAn(1049,1,pVn,eA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new S2(this)},MWn.c=0,vX(YWn,"InternalHashCodeMap",1049),wAn(711,1,QWn,S2),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.d=this.a[this.c++],this.d},MWn.Ob=function(){var n;return this.c<this.a.length||!(n=this.b.next()).done&&(this.a=n.value[1],this.c=0,!0)},MWn.Qb=function(){gAn(this.e,this.d.cd()),0!=this.c&&--this.c},MWn.c=0,MWn.d=null,vX(YWn,"InternalHashCodeMap/1",711),wAn(1047,1,pVn,iA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new p4(this)},MWn.c=0,MWn.d=0,vX(YWn,"InternalStringMap",1047),wAn(710,1,QWn,p4),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.c=this.a,this.a=this.b.next(),new JK(this.d,this.c,this.d.d)},MWn.Ob=function(){return!this.a.done},MWn.Qb=function(){Gan(this.d,this.c.value[0])},vX(YWn,"InternalStringMap/1",710),wAn(1048,1984,VQn,JK),MWn.cd=function(){return this.b.value[0]},MWn.dd=function(){return this.a.d!=this.c?hS(this.a,this.b.value[0]):this.b.value[1]},MWn.ed=function(n){return ubn(this.a,this.b.value[0],n)},MWn.c=0,vX(YWn,"InternalStringMap/2",1048),wAn(228,43,tYn,v4,q8),MWn.$b=function(){kR(this)},MWn._b=function(n){return lS(this,n)},MWn.uc=function(n){var t;for(t=this.d.a;t!=this.d;){if(cV(t.e,n))return!0;t=t.a}return!1},MWn.vc=function(){return new iw(this)},MWn.xc=function(n){return lnn(this,n)},MWn.zc=function(n,t){return Jgn(this,n,t)},MWn.Bc=function(n){return k7(this,n)},MWn.gc=function(){return NT(this.e)},MWn.c=!1,vX(YWn,"LinkedHashMap",228),wAn(387,383,{484:1,383:1,387:1,42:1},Ix,nH),vX(YWn,"LinkedHashMap/ChainEntry",387),wAn(701,nVn,tVn,iw),MWn.$b=function(){kR(this.a)},MWn.Hc=function(n){return y2(this,n)},MWn.Kc=function(){return new hW(this)},MWn.Mc=function(n){var t;return!!y2(this,n)&&(t=BB(n,42).cd(),k7(this.a,t),!0)},MWn.gc=function(){return NT(this.a.e)},vX(YWn,"LinkedHashMap/EntrySet",701),wAn(702,1,QWn,hW),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return s9(this)},MWn.Ob=function(){return this.b!=this.c.a.d},MWn.Qb=function(){Mx(!!this.a),p2(this.c.a.e,this),RH(this.a),v6(this.c.a.e,this.a.d),bD(this.c.a.e,this),this.a=null},vX(YWn,"LinkedHashMap/EntrySet/EntryIterator",702),wAn(178,53,eYn,fA,LN,Lq);var Eet=vX(YWn,"LinkedHashSet",178);wAn(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},YT,n_),MWn.Fc=function(n){return DH(this,n)},MWn.$b=function(){yQ(this)},MWn.Zc=function(n){return spn(this,n)},MWn.gc=function(){return this.b},MWn.b=0;var Tet,Met,Set,Pet,Iet,Cet=vX(YWn,"LinkedList",68);wAn(970,1,cVn,ZK),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){nX(this,n)},MWn.Ob=function(){return EE(this)},MWn.Sb=function(){return this.b.b!=this.d.a},MWn.Pb=function(){return b3(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){return U0(this)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){mtn(this)},MWn.Wb=function(n){Mx(!!this.c),this.c.c=n},MWn.a=0,MWn.c=null,vX(YWn,"LinkedList/ListIteratorImpl",970),wAn(608,1,{},$),vX(YWn,"LinkedList/Node",608),wAn(1959,1,{}),vX(YWn,"Locale",1959),wAn(861,1959,{},L),MWn.Ib=function(){return""},vX(YWn,"Locale/1",861),wAn(862,1959,{},N),MWn.Ib=function(){return"unknown"},vX(YWn,"Locale/4",862),wAn(109,60,{3:1,102:1,60:1,78:1,109:1},yv,lV),vX(YWn,"NoSuchElementException",109),wAn(404,1,{404:1},vy),MWn.Fb=function(n){var t;return n===this||!!cL(n,404)&&(t=BB(n,404),cV(this.a,t.a))},MWn.Hb=function(){return KA(this.a)},MWn.Ib=function(){return null!=this.a?GWn+kN(this.a)+")":"Optional.empty()"},vX(YWn,"Optional",404),wAn(463,1,{463:1},IO,yx),MWn.Fb=function(n){var t;return n===this||!!cL(n,463)&&(t=BB(n,463),this.a==t.a&&0==Pln(this.b,t.b))},MWn.Hb=function(){return this.a?IJ(this.b):0},MWn.Ib=function(){return this.a?"OptionalDouble.of("+this.b+")":"OptionalDouble.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalDouble",463),wAn(517,1,{517:1},CO,kx),MWn.Fb=function(n){var t;return n===this||!!cL(n,517)&&(t=BB(n,517),this.a==t.a&&0==E$(this.b,t.b))},MWn.Hb=function(){return this.a?this.b:0},MWn.Ib=function(){return this.a?"OptionalInt.of("+this.b+")":"OptionalInt.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalInt",517),wAn(503,2004,ZWn,Xz),MWn.Gc=function(n){return ikn(this,n)},MWn.$b=function(){this.b.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=(null==n?-1:E7(this.b,n,0))},MWn.Kc=function(){return new Vb(this)},MWn.Mc=function(n){return srn(this,n)},MWn.gc=function(){return this.b.c.length},MWn.Nc=function(){return new w1(this,256)},MWn.Pc=function(){return bx(this.b)},MWn.Qc=function(n){return Qgn(this.b,n)},vX(YWn,"PriorityQueue",503),wAn(1277,1,QWn,Vb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a<this.c.b.c.length},MWn.Pb=function(){return Px(this.a<this.c.b.c.length),this.b=this.a++,xq(this.c.b,this.b)},MWn.Qb=function(){Mx(-1!=this.b),hrn(this.c,this.a=this.b),this.b=-1},MWn.a=0,MWn.b=-1,vX(YWn,"PriorityQueue/1",1277),wAn(230,1,{230:1},sbn,I4),MWn.a=0,MWn.b=0;var Oet,Aet,$et,Let=0;vX(YWn,"Random",230),wAn(27,1,fVn,w1,zU,IV),MWn.qd=function(){return this.a},MWn.rd=function(){return Dz(this),this.c},MWn.Nb=function(n){Dz(this),this.d.Nb(n)},MWn.sd=function(n){return ntn(this,n)},MWn.a=0,MWn.c=0,vX(YWn,"Spliterators/IteratorSpliterator",27),wAn(485,27,fVn,wS),vX(YWn,"SortedSet/1",485),wAn(602,1,nYn,Qb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/0methodref$accept$Type",602),wAn(603,1,nYn,Yb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/1methodref$accept$Type",603),wAn(604,1,wVn,Jb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/2methodref$accept$Type",604),wAn(605,1,wVn,Zb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/3methodref$accept$Type",605),wAn(617,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.d},MWn.rd=function(){return this.e},MWn.d=0,MWn.e=0,vX(YWn,"Spliterators/BaseSpliterator",617),wAn(721,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,182)?gE(this,BB(n,182)):gE(this,new Yb(n))},MWn.sd=function(n){return cL(n,182)?this.ye(BB(n,182)):this.ye(new Qb(n))},vX(YWn,"Spliterators/AbstractDoubleSpliterator",721),wAn(720,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,196)?gE(this,BB(n,196)):gE(this,new Zb(n))},MWn.sd=function(n){return cL(n,196)?this.ye(BB(n,196)):this.ye(new Jb(n))},vX(YWn,"Spliterators/AbstractIntSpliterator",720),wAn(540,617,fVn),vX(YWn,"Spliterators/AbstractSpliterator",540),wAn(692,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.b},MWn.rd=function(){return this.d-this.c},MWn.b=0,MWn.c=0,MWn.d=0,vX(YWn,"Spliterators/BaseArraySpliterator",692),wAn(947,692,fVn,BH),MWn.ze=function(n,t){cj(this,BB(n,38),t)},MWn.Nb=function(n){DX(this,n)},MWn.sd=function(n){return K6(this,n)},vX(YWn,"Spliterators/ArraySpliterator",947),wAn(693,692,fVn,_K),MWn.ze=function(n,t){aj(this,BB(n,182),t)},MWn.xe=function(n){DX(this,n)},MWn.Nb=function(n){cL(n,182)?DX(this,BB(n,182)):DX(this,new Yb(n))},MWn.ye=function(n){return K6(this,n)},MWn.sd=function(n){return cL(n,182)?K6(this,BB(n,182)):K6(this,new Qb(n))},vX(YWn,"Spliterators/DoubleArraySpliterator",693),wAn(1968,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return 16448},MWn.rd=function(){return 0},vX(YWn,"Spliterators/EmptySpliterator",1968),wAn(946,1968,fVn,z),MWn.xe=function(n){Bf(n)},MWn.Nb=function(n){cL(n,196)?Bf(BB(n,196)):Bf(new Zb(n))},MWn.ye=function(n){return bS(n)},MWn.sd=function(n){return cL(n,196)?bS(BB(n,196)):bS(new Jb(n))},vX(YWn,"Spliterators/EmptySpliterator/OfInt",946),wAn(580,52,fYn,_v),MWn.Vc=function(n,t){Kz(n,this.a.c.length+1),kG(this.a,n,t)},MWn.Fc=function(n){return WB(this.a,n)},MWn.Wc=function(n,t){return Kz(n,this.a.c.length+1),ohn(this.a,n,t)},MWn.Gc=function(n){return gun(this.a,n)},MWn.$b=function(){this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Jc=function(n){Otn(this.a,n)},MWn.Xb=function(n){return Kz(n,this.a.c.length),xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return new Wb(this.a)},MWn.$c=function(n){return Kz(n,this.a.c.length),s6(this.a,n)},MWn.Ud=function(n,t){h1(this.a,n,t)},MWn._c=function(n,t){return Kz(n,this.a.c.length),c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.ad=function(n){m$(this.a,n)},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.Ib=function(){return LMn(this.a)},vX(YWn,"Vector",580),wAn(809,580,fYn,om),vX(YWn,"Stack",809),wAn(206,1,{206:1},$an),MWn.Ib=function(){return W0(this)},vX(YWn,"StringJoiner",206),wAn(544,1992,{3:1,83:1,171:1,161:1},WT,Wz),MWn.$b=function(){my(this)},MWn.vc=function(){return new xN(this)},MWn.zc=function(n,t){return Mon(this,n,t)},MWn.Bc=function(n){return $J(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"TreeMap",544),wAn(390,1,QWn,BR),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return mx(this)},MWn.Ob=function(){return aS(this.a)},MWn.Qb=function(){e_(this)},vX(YWn,"TreeMap/EntryIterator",390),wAn(435,739,tVn,xN),MWn.$b=function(){my(this.a)},vX(YWn,"TreeMap/EntrySet",435),wAn(436,383,{484:1,383:1,42:1,436:1},H8),MWn.b=!1;var Net,xet,Det,Ret,Ket=vX(YWn,"TreeMap/Node",436);wAn(621,1,{},q),MWn.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(YWn,"TreeMap/State",621),wAn(297,22,lYn,gS),MWn.Ae=function(){return!1},MWn.Be=function(){return!1};var _et,Fet=Ben(YWn,"TreeMap/SubMapType",297,Unt,J2,h_);wAn(1112,297,lYn,LA),MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/1",1112,Fet,null,null),wAn(1113,297,lYn,A$),MWn.Ae=function(){return!0},MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/2",1113,Fet,null,null),wAn(1114,297,lYn,NA),MWn.Ae=function(){return!0},Ben(YWn,"TreeMap/SubMapType/3",1114,Fet,null,null),wAn(208,nVn,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},zv,dE),MWn.Nc=function(){return new wS(this)},MWn.Fc=function(n){return ZU(this,n)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(new _b(this.a).a).b))},MWn.Mc=function(n){return MN(this,n)},MWn.gc=function(){return this.a.c};var Bet=vX(YWn,"TreeSet",208);wAn(966,1,{},rw),MWn.Ce=function(n,t){return DD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$0$Type",966),wAn(967,1,{},cw),MWn.Ce=function(n,t){return RD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$1$Type",967),wAn(846,1,{},G),MWn.Kb=function(n){return n},vX(bYn,"Function/lambda$0$Type",846),wAn(431,1,DVn,aw),MWn.Mb=function(n){return!this.a.Mb(n)},vX(bYn,"Predicate/lambda$2$Type",431),wAn(572,1,{572:1});var Het,qet,Get=vX(wYn,"Handler",572);wAn(2007,1,KWn),MWn.ne=function(){return"DUMMY"},MWn.Ib=function(){return this.ne()},vX(wYn,"Level",2007),wAn(1621,2007,KWn,U),MWn.ne=function(){return"INFO"},vX(wYn,"Level/LevelInfo",1621),wAn(1640,1,{},Kv),vX(wYn,"LogManager",1640),wAn(1780,1,KWn,i_),MWn.b=null,vX(wYn,"LogRecord",1780),wAn(512,1,{512:1},y5),MWn.e=!1;var zet,Uet,Xet,Wet=!1,Vet=!1,Qet=!1,Yet=!1,Jet=!1;vX(wYn,"Logger",512),wAn(819,572,{572:1},X),vX(wYn,"SimpleConsoleLogHandler",819),wAn(132,22,{3:1,35:1,22:1,132:1},pS);var Zet,nit=Ben(pYn,"Collector/Characteristics",132,Unt,p1,f_);wAn(744,1,{},jU),vX(pYn,"CollectorImpl",744),wAn(1060,1,{},W),MWn.Ce=function(n,t){return Ofn(BB(n,206),BB(t,206))},vX(pYn,"Collectors/10methodref$merge$Type",1060),wAn(1061,1,{},V),MWn.Kb=function(n){return W0(BB(n,206))},vX(pYn,"Collectors/11methodref$toString$Type",1061),wAn(1062,1,{},uw),MWn.Kb=function(n){return hN(),!!TO(n)},vX(pYn,"Collectors/12methodref$test$Type",1062),wAn(251,1,{},B),MWn.Od=function(n,t){BB(n,14).Fc(t)},vX(pYn,"Collectors/20methodref$add$Type",251),wAn(253,1,{},H),MWn.Ee=function(){return new Np},vX(pYn,"Collectors/21methodref$ctor$Type",253),wAn(346,1,{},Q),MWn.Ee=function(){return new Rv},vX(pYn,"Collectors/23methodref$ctor$Type",346),wAn(347,1,{},Y),MWn.Od=function(n,t){TU(BB(n,53),t)},vX(pYn,"Collectors/24methodref$add$Type",347),wAn(1055,1,{},J),MWn.Ce=function(n,t){return ZT(BB(n,15),BB(t,14))},vX(pYn,"Collectors/4methodref$addAll$Type",1055),wAn(1059,1,{},Z),MWn.Od=function(n,t){b6(BB(n,206),BB(t,475))},vX(pYn,"Collectors/9methodref$add$Type",1059),wAn(1058,1,{},YB),MWn.Ee=function(){return new $an(this.a,this.b,this.c)},vX(pYn,"Collectors/lambda$15$Type",1058),wAn(1063,1,{},nn),MWn.Ee=function(){var n;return Jgn(n=new v4,(hN(),!1),new Np),Jgn(n,!0,new Np),n},vX(pYn,"Collectors/lambda$22$Type",1063),wAn(1064,1,{},ow),MWn.Ee=function(){return Pun(Gk(Ant,1),HWn,1,5,[this.a])},vX(pYn,"Collectors/lambda$25$Type",1064),wAn(1065,1,{},sw),MWn.Od=function(n,t){Bq(this.a,een(n))},vX(pYn,"Collectors/lambda$26$Type",1065),wAn(1066,1,{},hw),MWn.Ce=function(n,t){return _z(this.a,een(n),een(t))},vX(pYn,"Collectors/lambda$27$Type",1066),wAn(1067,1,{},tn),MWn.Kb=function(n){return een(n)[0]},vX(pYn,"Collectors/lambda$28$Type",1067),wAn(713,1,{},en),MWn.Ce=function(n,t){return Hq(n,t)},vX(pYn,"Collectors/lambda$4$Type",713),wAn(252,1,{},rn),MWn.Ce=function(n,t){return GT(BB(n,14),BB(t,14))},vX(pYn,"Collectors/lambda$42$Type",252),wAn(348,1,{},cn),MWn.Ce=function(n,t){return zT(BB(n,53),BB(t,53))},vX(pYn,"Collectors/lambda$50$Type",348),wAn(349,1,{},an),MWn.Kb=function(n){return BB(n,53)},vX(pYn,"Collectors/lambda$51$Type",349),wAn(1054,1,{},fw),MWn.Od=function(n,t){bsn(this.a,BB(n,83),t)},vX(pYn,"Collectors/lambda$7$Type",1054),wAn(1056,1,{},un),MWn.Ce=function(n,t){return pun(BB(n,83),BB(t,83),new J)},vX(pYn,"Collectors/lambda$8$Type",1056),wAn(1057,1,{},lw),MWn.Kb=function(n){return mbn(this.a,BB(n,83))},vX(pYn,"Collectors/lambda$9$Type",1057),wAn(539,1,{}),MWn.He=function(){jW(this)},MWn.d=!1,vX(pYn,"TerminatableStream",539),wAn(812,539,vYn,AD),MWn.He=function(){jW(this)},vX(pYn,"DoubleStreamImpl",812),wAn(1784,721,fVn,ZB),MWn.ye=function(n){return pmn(this,BB(n,182))},MWn.a=null,vX(pYn,"DoubleStreamImpl/2",1784),wAn(1785,1,nYn,bw),MWn.we=function(n){HA(this.a,n)},vX(pYn,"DoubleStreamImpl/2/lambda$0$Type",1785),wAn(1782,1,nYn,ww),MWn.we=function(n){BA(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$0$Type",1782),wAn(1783,1,nYn,dw),MWn.we=function(n){hdn(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$2$Type",1783),wAn(1358,720,fVn,m5),MWn.ye=function(n){return k2(this,BB(n,196))},MWn.a=0,MWn.b=0,MWn.c=0,vX(pYn,"IntStream/5",1358),wAn(787,539,vYn,$D),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),this.a},vX(pYn,"IntStreamImpl",787),wAn(788,539,vYn,VT),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),CL(),$et},vX(pYn,"IntStreamImpl/Empty",788),wAn(1463,1,wVn,gw),MWn.ud=function(n){ran(this.a,n)},vX(pYn,"IntStreamImpl/lambda$4$Type",1463);var tit,eit=bq(pYn,"Stream");wAn(30,539,{525:1,670:1,833:1},Rq),MWn.He=function(){jW(this)},vX(pYn,"StreamImpl",30),wAn(845,1,{},on),MWn.ld=function(n){return lH(n)},vX(pYn,"StreamImpl/0methodref$lambda$2$Type",845),wAn(1084,540,fVn,KK),MWn.sd=function(n){for(;$9(this);){if(this.a.sd(n))return!0;jW(this.b),this.b=null,this.a=null}return!1},vX(pYn,"StreamImpl/1",1084),wAn(1085,1,lVn,pw),MWn.td=function(n){iH(this.a,BB(n,833))},vX(pYn,"StreamImpl/1/lambda$0$Type",1085),wAn(1086,1,DVn,vw),MWn.Mb=function(n){return TU(this.a,n)},vX(pYn,"StreamImpl/1methodref$add$Type",1086),wAn(1087,540,fVn,vQ),MWn.sd=function(n){var t;return this.a||(t=new Np,this.b.a.Nb(new mw(t)),SQ(),m$(t,this.c),this.a=new w1(t,16)),ntn(this.a,n)},MWn.a=null,vX(pYn,"StreamImpl/5",1087),wAn(1088,1,lVn,mw),MWn.td=function(n){WB(this.a,n)},vX(pYn,"StreamImpl/5/2methodref$add$Type",1088),wAn(722,540,fVn,Q9),MWn.sd=function(n){for(this.b=!1;!this.b&&this.c.sd(new AS(this,n)););return this.b},MWn.b=!1,vX(pYn,"StreamImpl/FilterSpliterator",722),wAn(1079,1,lVn,AS),MWn.td=function(n){Rz(this.a,this.b,n)},vX(pYn,"StreamImpl/FilterSpliterator/lambda$0$Type",1079),wAn(1075,721,fVn,E6),MWn.ye=function(n){return jK(this,BB(n,182))},vX(pYn,"StreamImpl/MapToDoubleSpliterator",1075),wAn(1078,1,lVn,$S),MWn.td=function(n){jS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1078),wAn(1074,720,fVn,T6),MWn.ye=function(n){return EK(this,BB(n,196))},vX(pYn,"StreamImpl/MapToIntSpliterator",1074),wAn(1077,1,lVn,LS),MWn.td=function(n){kS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1077),wAn(719,540,fVn,M6),MWn.sd=function(n){return TK(this,n)},vX(pYn,"StreamImpl/MapToObjSpliterator",719),wAn(1076,1,lVn,NS),MWn.td=function(n){ES(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1076),wAn(618,1,lVn,sn),MWn.td=function(n){Cl(this,n)},vX(pYn,"StreamImpl/ValueConsumer",618),wAn(1080,1,lVn,hn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$0$Type",1080),wAn(1081,1,lVn,fn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$1$Type",1081),wAn(1082,1,{},yw),MWn.Ce=function(n,t){return F_(this.a,n,t)},vX(pYn,"StreamImpl/lambda$4$Type",1082),wAn(1083,1,lVn,CS),MWn.td=function(n){ER(this.b,this.a,n)},vX(pYn,"StreamImpl/lambda$5$Type",1083),wAn(1089,1,lVn,kw),MWn.td=function(n){Hon(this.a,BB(n,365))},vX(pYn,"TerminatableStream/lambda$0$Type",1089),wAn(2041,1,{}),wAn(1914,1,{},ln),vX("javaemul.internal","ConsoleLogger",1914),wAn(2038,1,{});var iit,rit,cit=0,ait=0;wAn(1768,1,lVn,bn),MWn.td=function(n){BB(n,308)},vX(TYn,"BowyerWatsonTriangulation/lambda$0$Type",1768),wAn(1769,1,lVn,jw),MWn.td=function(n){Frn(this.a,BB(n,308).e)},vX(TYn,"BowyerWatsonTriangulation/lambda$1$Type",1769),wAn(1770,1,lVn,wn),MWn.td=function(n){BB(n,168)},vX(TYn,"BowyerWatsonTriangulation/lambda$2$Type",1770),wAn(1765,1,MYn,Ew),MWn.ue=function(n,t){return q3(this.a,BB(n,168),BB(t,168))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(TYn,"NaiveMinST/lambda$0$Type",1765),wAn(499,1,{},Tw),vX(TYn,"NodeMicroLayout",499),wAn(168,1,{168:1},xS),MWn.Fb=function(n){var t;return!!cL(n,168)&&(t=BB(n,168),cV(this.a,t.a)&&cV(this.b,t.b)||cV(this.a,t.b)&&cV(this.b,t.a))},MWn.Hb=function(){return KA(this.a)+KA(this.b)};var uit=vX(TYn,"TEdge",168);wAn(308,1,{308:1},ZFn),MWn.Fb=function(n){var t;return!!cL(n,308)&&K7(this,(t=BB(n,308)).a)&&K7(this,t.b)&&K7(this,t.c)},MWn.Hb=function(){return KA(this.a)+KA(this.b)+KA(this.c)},vX(TYn,"TTriangle",308),wAn(221,1,{221:1},I$),vX(TYn,"Tree",221),wAn(1254,1,{},CZ),vX(SYn,"Scanline",1254);var oit=bq(SYn,PYn);wAn(1692,1,{},ltn),vX(IYn,"CGraph",1692),wAn(307,1,{307:1},cZ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.g=0,MWn.i=0,MWn.k=KQn,vX(IYn,"CGroup",307),wAn(815,1,{},Xv),vX(IYn,"CGroup/CGroupBuilder",815),wAn(57,1,{57:1},AR),MWn.Ib=function(){return this.j?SD(this.j.Kb(this)):(ED(bit),bit.o+"@"+(PN(this)>>>0).toString(16))},MWn.f=0,MWn.i=KQn;var sit,hit,fit,lit,bit=vX(IYn,"CNode",57);wAn(814,1,{},Wv),vX(IYn,"CNode/CNodeBuilder",814),wAn(1525,1,{},dn),MWn.Oe=function(n,t){return 0},MWn.Pe=function(n,t){return 0},vX(IYn,OYn,1525),wAn(1790,1,{},gn),MWn.Le=function(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),57),h=e.Math.min(h,t.a.j.d.c+t.b.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),307)).k=h,0==a.g&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),307)).j.d.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),57),g=a.k+f.b.a,!Ghn(n,a,n.d)||f.d.c<g?f.i=g:f.i=f.d.c;for(c-=a.j.i,a.b+=c,n.d==(Ffn(),FPt)||n.d==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),d=dA(n.d)?n.g.Oe(f,o):n.g.Pe(f,o),o.a.k=e.Math.max(o.a.k,f.i+f.d.b+d-o.b.a),cY(n,o,n.d)&&(o.a.k=e.Math.max(o.a.k,o.d.c-o.b.a)),--o.a.g,0==o.a.g&&DH(w,o.a)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),57)).d.c=t.i},vX(IYn,"LongestPathCompaction",1790),wAn(1690,1,{},yOn),MWn.e=!1;var wit,dit,git=vX(IYn,xYn,1690);wAn(1691,1,lVn,Mw),MWn.td=function(n){iun(this.a,BB(n,46))},vX(IYn,DYn,1691),wAn(1791,1,{},pn),MWn.Me=function(n){var t,e,i,r,c,a;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(e=BB(n0(i),57),c=new Wb(n.a.b);c.a<c.c.c.length;)e!=(r=BB(n0(c),57))&&(e.a&&e.a==r.a||(a=dA(n.d)?n.g.Pe(e,r):n.g.Oe(e,r),(r.d.c>e.d.c||e.d.c==r.d.c&&e.d.b<r.d.b)&&Rdn(r.d.d+r.d.a+a,e.d.d)&&Kdn(r.d.d,e.d.d+e.d.a+a)&&e.c.Fc(r)))},vX(IYn,"QuadraticConstraintCalculation",1791),wAn(522,1,{522:1},Dp),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(IYn,RYn,522),wAn(803,1,{},RG),MWn.Me=function(n){this.c=n,pIn(this,new yn)},vX(IYn,KYn,803),wAn(1718,1,{679:1},fY),MWn.Ke=function(n){_Pn(this,BB(n,464))},vX(IYn,_Yn,1718),wAn(1719,1,MYn,vn),MWn.ue=function(n,t){return uQ(BB(n,57),BB(t,57))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(IYn,FYn,1719),wAn(464,1,{464:1},OS),MWn.a=!1,vX(IYn,BYn,464),wAn(1720,1,MYn,mn),MWn.ue=function(n,t){return Jkn(BB(n,464),BB(t,464))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(IYn,HYn,1720),wAn(1721,1,qYn,yn),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(IYn,"ScanlineConstraintCalculator/lambda$1$Type",1721),wAn(428,22,{3:1,35:1,22:1,428:1},FS);var pit,vit,mit,yit=Ben(GYn,"HighLevelSortingCriterion",428,Unt,rJ,l_);wAn(427,22,{3:1,35:1,22:1,427:1},BS);var kit,jit,Eit,Tit,Mit,Sit,Pit,Iit,Cit,Oit,Ait,$it,Lit,Nit,xit,Dit,Rit,Kit=Ben(GYn,"LowLevelSortingCriterion",427,Unt,cJ,b_),_it=bq(zYn,"ILayoutMetaDataProvider");wAn(853,1,QYn,Gh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,UYn),YYn),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),Iit),(PPn(),gMt)),Bit),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,XYn),YYn),"Polyomino Secondary Sorting Criterion"),"Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion."),Sit),gMt),Kit),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,WYn),YYn),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),Tit),gMt),yit),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,VYn),YYn),"Fill Polyominoes"),"Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area."),(hN(),!0)),wMt),ktt),nbn(hMt))))},vX(GYn,"PolyominoOptions",853),wAn(250,22,{3:1,35:1,22:1,250:1},HS);var Fit,Bit=Ben(GYn,"TraversalStrategy",250,Unt,Tin,w_);wAn(213,1,{213:1},kn),MWn.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},MWn.a=1,MWn.b=0,MWn.c=0,MWn.f=!1,MWn.g=0;var Hit=vX(JYn,"NEdge",213);wAn(176,1,{},Hv),vX(JYn,"NEdge/NEdgeBuilder",176),wAn(653,1,{},Fv),vX(JYn,"NGraph",653),wAn(121,1,{121:1},k6),MWn.c=-1,MWn.d=0,MWn.e=0,MWn.i=-1,MWn.j=!1;var qit=vX(JYn,"NNode",121);wAn(795,1,JQn,Bv),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Vc=function(n,t){++this.b,kG(this.a,n,t)},MWn.Fc=function(n){return RN(this,n)},MWn.Wc=function(n,t){return++this.b,ohn(this.a,n,t)},MWn.Gc=function(n){return++this.b,gun(this.a,n)},MWn.$b=function(){++this.b,this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Xb=function(n){return xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return L9(new Wb(this.a))},MWn.Yc=function(){throw Hp(new pv)},MWn.Zc=function(n){throw Hp(new pv)},MWn.$c=function(n){return++this.b,s6(this.a,n)},MWn.Mc=function(n){return KN(this,n)},MWn._c=function(n,t){return++this.b,c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.b=0,vX(JYn,"NNode/ChangeAwareArrayList",795),wAn(269,1,{},qv),vX(JYn,"NNode/NNodeBuilder",269),wAn(1630,1,{},jn),MWn.a=!1,MWn.f=DWn,MWn.j=0,vX(JYn,"NetworkSimplex",1630),wAn(1294,1,lVn,Sw),MWn.td=function(n){qzn(this.a,BB(n,680),!0,!1)},vX(nJn,"NodeLabelAndSizeCalculator/lambda$0$Type",1294),wAn(558,1,{},Pw),MWn.b=!0,MWn.c=!0,MWn.d=!0,MWn.e=!0,vX(nJn,"NodeMarginCalculator",558),wAn(212,1,{212:1}),MWn.j=!1,MWn.k=!1;var Git,zit,Uit,Xit=vX(tJn,"Cell",212);wAn(124,212,{124:1,212:1},FR),MWn.Re=function(){return XH(this)},MWn.Se=function(){var n;return n=this.n,this.a.a+n.b+n.c},vX(tJn,"AtomicCell",124),wAn(232,22,{3:1,35:1,22:1,232:1},qS);var Wit,Vit=Ben(tJn,"ContainerArea",232,Unt,v1,d_);wAn(326,212,iJn),vX(tJn,"ContainerCell",326),wAn(1473,326,iJn,Hwn),MWn.Re=function(){var n;return n=0,this.e?this.b?n=this.b.b:this.a[1][1]&&(n=this.a[1][1].Re()):n=Ybn(this,Umn(this,!0)),n>0?n+this.n.d+this.n.a:0},MWn.Se=function(){var n,t,i,r,c;if(c=0,this.e)this.b?c=this.b.a:this.a[1][1]&&(c=this.a[1][1].Se());else if(this.g)c=Ybn(this,Okn(this,null,!0));else for(Dtn(),i=0,r=(t=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)n=t[i],c=e.Math.max(c,Ybn(this,Okn(this,n,!0)));return c>0?c+this.n.b+this.n.c:0},MWn.Te=function(){var n,t,e,i,r;if(this.g)for(n=Okn(this,null,!1),Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n);else for(Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n=Okn(this,t,!1))},MWn.Ue=function(){var n,t,i,r;t=this.i,n=this.n,r=Umn(this,!1),Q5(this,(Dtn(),Git),t.d+n.d,r),Q5(this,Uit,t.d+t.a-n.a-r[2],r),i=t.a-n.d-n.a,r[0]>0&&(r[0]+=this.d,i-=r[0]),r[2]>0&&(r[2]+=this.d,i-=r[2]),this.c.a=e.Math.max(0,i),this.c.d=t.d+n.d+(this.c.a-i)/2,r[1]=e.Math.max(r[1],i),Q5(this,zit,t.d+n.d+r[0]-(r[1]-i)/2,r)},MWn.b=null,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=!1;var Qit,Yit,Jit,Zit=0,nrt=0;vX(tJn,"GridContainerCell",1473),wAn(461,22,{3:1,35:1,22:1,461:1},GS);var trt,ert=Ben(tJn,"HorizontalLabelAlignment",461,Unt,m1,g_);wAn(306,212,{212:1,306:1},yJ,wtn,KY),MWn.Re=function(){return WH(this)},MWn.Se=function(){return VH(this)},MWn.a=0,MWn.c=!1;var irt,rrt,crt,art=vX(tJn,"LabelCell",306);wAn(244,326,{212:1,326:1,244:1},Cgn),MWn.Re=function(){return MCn(this)},MWn.Se=function(){return SCn(this)},MWn.Te=function(){_Fn(this)},MWn.Ue=function(){GFn(this)},MWn.b=0,MWn.c=0,MWn.d=!1,vX(tJn,"StripContainerCell",244),wAn(1626,1,DVn,En),MWn.Mb=function(n){return Qy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$0$Type",1626),wAn(1627,1,{},Tn),MWn.Fe=function(n){return BB(n,212).Se()},vX(tJn,"StripContainerCell/lambda$1$Type",1627),wAn(1628,1,DVn,Mn),MWn.Mb=function(n){return Yy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$2$Type",1628),wAn(1629,1,{},Sn),MWn.Fe=function(n){return BB(n,212).Re()},vX(tJn,"StripContainerCell/lambda$3$Type",1629),wAn(462,22,{3:1,35:1,22:1,462:1},zS);var urt,ort,srt,hrt,frt,lrt,brt,wrt,drt,grt,prt,vrt,mrt,yrt,krt,jrt,Ert,Trt,Mrt,Srt,Prt,Irt,Crt,Ort=Ben(tJn,"VerticalLabelAlignment",462,Unt,y1,p_);wAn(789,1,{},eUn),MWn.c=0,MWn.d=0,MWn.k=0,MWn.s=0,MWn.t=0,MWn.v=!1,MWn.w=0,MWn.D=!1,vX(sJn,"NodeContext",789),wAn(1471,1,MYn,Pn),MWn.ue=function(n,t){return YO(BB(n,61),BB(t,61))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/0methodref$comparePortSides$Type",1471),wAn(1472,1,MYn,In),MWn.ue=function(n,t){return UTn(BB(n,111),BB(t,111))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/1methodref$comparePortContexts$Type",1472),wAn(159,22,{3:1,35:1,22:1,159:1},ocn);var Art,$rt,Lrt,Nrt,xrt,Drt,Rrt,Krt=Ben(sJn,"NodeLabelLocation",159,Unt,tpn,v_);wAn(111,1,{111:1},MOn),MWn.a=!1,vX(sJn,"PortContext",111),wAn(1476,1,lVn,Cn),MWn.td=function(n){IE(BB(n,306))},vX(lJn,bJn,1476),wAn(1477,1,DVn,On),MWn.Mb=function(n){return!!BB(n,111).c},vX(lJn,wJn,1477),wAn(1478,1,lVn,An),MWn.td=function(n){IE(BB(n,111).c)},vX(lJn,"LabelPlacer/lambda$2$Type",1478),wAn(1475,1,lVn,Ln),MWn.td=function(n){qD(),Yp(BB(n,111))},vX(lJn,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),wAn(790,1,lVn,$_),MWn.td=function(n){RM(this.b,this.c,this.a,BB(n,181))},MWn.a=!1,MWn.c=!1,vX(lJn,"NodeLabelCellCreator/lambda$0$Type",790),wAn(1474,1,lVn,Iw),MWn.td=function(n){Cv(this.a,BB(n,181))},vX(lJn,"PortContextCreator/lambda$0$Type",1474),wAn(1829,1,{},Nn),vX(gJn,"GreedyRectangleStripOverlapRemover",1829),wAn(1830,1,MYn,$n),MWn.ue=function(n,t){return FN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),wAn(1786,1,{},Zv),MWn.a=5,MWn.e=0,vX(gJn,"RectangleStripOverlapRemover",1786),wAn(1787,1,MYn,Dn),MWn.ue=function(n,t){return BN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),wAn(1789,1,MYn,Rn),MWn.ue=function(n,t){return JU(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),wAn(406,22,{3:1,35:1,22:1,406:1},US);var _rt,Frt,Brt,Hrt,qrt,Grt=Ben(gJn,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Unt,Y2,m_);wAn(222,1,{222:1},xG),vX(gJn,"RectangleStripOverlapRemover/RectangleNode",222),wAn(1788,1,lVn,Cw),MWn.td=function(n){Imn(this.a,BB(n,222))},vX(gJn,"RectangleStripOverlapRemover/lambda$1$Type",1788),wAn(1304,1,MYn,Kn),MWn.ue=function(n,t){return zHn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),wAn(1307,1,{},_n),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),wAn(1308,1,DVn,Fn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),wAn(1309,1,DVn,Bn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),wAn(1302,1,MYn,Hn),MWn.ue=function(n,t){return WRn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),wAn(1305,1,{},xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),wAn(767,1,MYn,qn),MWn.ue=function(n,t){return Uan(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionsComparator",767),wAn(1300,1,MYn,Gn),MWn.ue=function(n,t){return Qin(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparator",1300),wAn(1301,1,MYn,zn),MWn.ue=function(n,t){return avn(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),wAn(1303,1,MYn,Un),MWn.ue=function(n,t){return BKn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),wAn(1306,1,{},Xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),wAn(777,1,{},DS),MWn.Ce=function(n,t){return O2(this,BB(n,46),BB(t,167))},vX(vJn,"SuccessorCombination",777),wAn(644,1,{},Wn),MWn.Ce=function(n,t){var e;return XCn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorJitter",644),wAn(643,1,{},Vn),MWn.Ce=function(n,t){var e;return bxn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorLineByLine",643),wAn(568,1,{},Qn),MWn.Ce=function(n,t){var e;return f$n((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorManhattan",568),wAn(1356,1,{},Yn),MWn.Ce=function(n,t){var e;return jNn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorMaxNormWindingInMathPosSense",1356),wAn(400,1,{},Ow),MWn.Ce=function(n,t){return BU(this,n,t)},MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=!1,vX(vJn,"SuccessorQuadrantsGeneric",400),wAn(1357,1,{},Jn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),wAn(323,22,{3:1,35:1,22:1,323:1},_S),MWn.a=!1;var zrt,Urt=Ben(EJn,TJn,323,Unt,n3,y_);wAn(1298,1,{}),MWn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=iln(0),r=0;r<this.o;r++)e+=""+n.a,n=iln(lR(n.a));for(e+="\n",n=iln(0),c=0;c<this.p;c++){for(e+=""+n.a,n=iln(lR(n.a)),i=0;i<this.o;i++)0==Vhn(t=trn(this,i,c),0)?e+="_":0==Vhn(t,1)?e+="X":e+="0";e+="\n"}return fx(e,0,e.length-1)},MWn.o=0,MWn.p=0,vX(EJn,"TwoBitGrid",1298),wAn(321,1298,{321:1},qwn),MWn.j=0,MWn.k=0,vX(EJn,"PlanarGrid",321),wAn(167,321,{321:1,167:1}),MWn.g=0,MWn.i=0,vX(EJn,"Polyomino",167);var Xrt=bq(CJn,OJn);wAn(134,1,AJn,Zn),MWn.Ye=function(n,t){return son(this,n,t)},MWn.Ve=function(){return Gq(this)},MWn.We=function(n){return mMn(this,n)},MWn.Xe=function(n){return Lx(this,n)},vX(CJn,"MapPropertyHolder",134),wAn(1299,134,AJn,yxn),vX(EJn,"Polyominoes",1299);var Wrt,Vrt,Qrt,Yrt,Jrt,Zrt,nct,tct,ect=!1;wAn(1766,1,lVn,nt),MWn.td=function(n){uqn(BB(n,221))},vX($Jn,"DepthFirstCompaction/0methodref$compactTree$Type",1766),wAn(810,1,lVn,Aw),MWn.td=function(n){KW(this.a,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$1$Type",810),wAn(1767,1,lVn,N_),MWn.td=function(n){dgn(this.a,this.b,this.c,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$2$Type",1767),wAn(65,1,{65:1},AZ),vX($Jn,"Node",65),wAn(1250,1,{},C$),vX($Jn,"ScanlineOverlapCheck",1250),wAn(1251,1,{679:1},hY),MWn.Ke=function(n){GD(this,BB(n,440))},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler",1251),wAn(1252,1,MYn,tt),MWn.ue=function(n,t){return xln(BB(n,65),BB(t,65))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1252),wAn(440,1,{440:1},RS),MWn.a=!1,vX($Jn,"ScanlineOverlapCheck/Timestamp",440),wAn(1253,1,MYn,et),MWn.ue=function(n,t){return Zkn(BB(n,440),BB(t,440))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/lambda$0$Type",1253),wAn(550,1,{},it),vX(LJn,"SVGImage",550),wAn(324,1,{324:1},x_),MWn.Ib=function(){return"("+this.a+FWn+this.b+FWn+this.c+")"},vX(LJn,"UniqueTriple",324),wAn(209,1,NJn),vX(xJn,"AbstractLayoutProvider",209),wAn(1132,209,NJn,rt),MWn.Ze=function(n,t){var e,i,r;OTn(t,DJn,1),this.a=Gy(MD(ZAn(n,(Epn(),Ect)))),P8(n,bct)&&(i=SD(ZAn(n,bct)),(e=XRn(cin(),i))&&BB(sJ(e.f),209).Ze(n,mcn(t,1))),r=new s4(this.a),this.b=Rzn(r,n),0===BB(ZAn(n,(Gsn(),oct)),481).g?(BOn(new ct,this.b),Ypn(n,gct,mMn(this.b,gct))):$T(),Uzn(r),Ypn(n,dct,this.b),HSn(t)},MWn.a=0,vX(RJn,"DisCoLayoutProvider",1132),wAn(1244,1,{},ct),MWn.c=!1,MWn.e=0,MWn.f=0,vX(RJn,"DisCoPolyominoCompactor",1244),wAn(561,1,{561:1},hG),MWn.b=!0,vX(KJn,"DCComponent",561),wAn(394,22,{3:1,35:1,22:1,394:1},KS),MWn.a=!1;var ict,rct,cct=Ben(KJn,"DCDirection",394,Unt,Z2,k_);wAn(266,134,{3:1,266:1,94:1,134:1},EAn),vX(KJn,"DCElement",266),wAn(395,1,{395:1},Cmn),MWn.c=0,vX(KJn,"DCExtension",395),wAn(755,134,AJn,_j),vX(KJn,"DCGraph",755),wAn(481,22,{3:1,35:1,22:1,481:1},Cx);var act,uct,oct,sct,hct,fct,lct,bct,wct,dct,gct,pct,vct,mct,yct,kct,jct,Ect,Tct,Mct,Sct,Pct=Ben(_Jn,FJn,481,Unt,RV,j_);wAn(854,1,QYn,Hh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,BJn),zJn),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),sct),(PPn(),gMt)),Pct),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,HJn),zJn),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),yMt),Qtt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,qJn),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),mMt),Ant),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,GJn),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),mMt),Ant),nbn(hMt)))),BBn((new qh,n))},vX(_Jn,"DisCoMetaDataProvider",854),wAn(998,1,QYn,qh),MWn.Qe=function(n){BBn(n)},vX(_Jn,"DisCoOptions",998),wAn(999,1,{},at),MWn.$e=function(){return new rt},MWn._e=function(n){},vX(_Jn,"DisCoOptions/DiscoFactory",999),wAn(562,167,{321:1,167:1,562:1},Q$n),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX("org.eclipse.elk.alg.disco.structures","DCPolyomino",562),wAn(1268,1,DVn,ut),MWn.Mb=function(n){return TO(n)},vX(YJn,"ElkGraphComponentsProcessor/lambda$0$Type",1268),wAn(1269,1,{},ot),MWn.Kb=function(n){return MQ(),PMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$1$Type",1269),wAn(1270,1,DVn,st),MWn.Mb=function(n){return qH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$2$Type",1270),wAn(1271,1,{},ht),MWn.Kb=function(n){return MQ(),OMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$3$Type",1271),wAn(1272,1,DVn,ft),MWn.Mb=function(n){return GH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$4$Type",1272),wAn(1273,1,DVn,$w),MWn.Mb=function(n){return MJ(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$5$Type",1273),wAn(1274,1,{},Lw),MWn.Kb=function(n){return KX(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$6$Type",1274),wAn(1241,1,{},s4),MWn.a=0,vX(YJn,"ElkGraphTransformer",1241),wAn(1242,1,{},lt),MWn.Od=function(n,t){tOn(this,BB(n,160),BB(t,266))},vX(YJn,"ElkGraphTransformer/OffsetApplier",1242),wAn(1243,1,lVn,Nw),MWn.td=function(n){TL(this,BB(n,8))},vX(YJn,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1243),wAn(753,1,{},bt),vX(eZn,iZn,753),wAn(1232,1,MYn,wt),MWn.ue=function(n,t){return ICn(BB(n,231),BB(t,231))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(eZn,rZn,1232),wAn(740,209,NJn,Gv),MWn.Ze=function(n,t){vLn(this,n,t)},vX(eZn,"ForceLayoutProvider",740),wAn(357,134,{3:1,357:1,94:1,134:1}),vX(cZn,"FParticle",357),wAn(559,357,{3:1,559:1,357:1,94:1,134:1},hX),MWn.Ib=function(){var n;return this.a?(n=E7(this.a.a,this,0))>=0?"b"+n+"["+u5(this.a)+"]":"b["+u5(this.a)+"]":"b_"+PN(this)},vX(cZn,"FBendpoint",559),wAn(282,134,{3:1,282:1,94:1,134:1},CR),MWn.Ib=function(){return u5(this)},vX(cZn,"FEdge",282),wAn(231,134,{3:1,231:1,94:1,134:1},y6);var Ict,Cct,Oct,Act,$ct,Lct,Nct,xct,Dct,Rct,Kct=vX(cZn,"FGraph",231);wAn(447,357,{3:1,447:1,357:1,94:1,134:1},m4),MWn.Ib=function(){return null==this.b||0==this.b.length?"l["+u5(this.a)+"]":"l_"+this.b},vX(cZn,"FLabel",447),wAn(144,357,{3:1,144:1,357:1,94:1,134:1},qX),MWn.Ib=function(){return p0(this)},MWn.b=0,vX(cZn,"FNode",144),wAn(2003,1,{}),MWn.bf=function(n){sFn(this,n)},MWn.cf=function(){qmn(this)},MWn.d=0,vX(uZn,"AbstractForceModel",2003),wAn(631,2003,{631:1},Lan),MWn.af=function(n,t){var i,r,c,a;return tCn(this.f,n,t),c=XR(B$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-lW(n.e)/2-lW(t.e)/2),kL(c,((i=qon(this.e,n,t))>0?-_U(r,this.c)*i:xx(r,this.b)*BB(mMn(n,(fRn(),Zct)),19).a)/a),c},MWn.bf=function(n){sFn(this,n),this.a=BB(mMn(n,(fRn(),qct)),19).a,this.c=Gy(MD(mMn(n,cat))),this.b=Gy(MD(mMn(n,tat)))},MWn.df=function(n){return n<this.a},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"EadesModel",631),wAn(632,2003,{632:1},fH),MWn.af=function(n,t){var i,r,c,a,u;return tCn(this.f,n,t),c=XR(B$(t.d),n.d),u=e.Math.sqrt(c.a*c.a+c.b*c.b),a=Nx(r=e.Math.max(0,u-lW(n.e)/2-lW(t.e)/2),this.a)*BB(mMn(n,(fRn(),Zct)),19).a,(i=qon(this.e,n,t))>0&&(a-=Sy(r,this.a)*i),kL(c,a*this.b/u),c},MWn.bf=function(n){var t,i,r,c,a,u,o;for(sFn(this,n),this.b=Gy(MD(mMn(n,(fRn(),aat)))),this.c=this.b/BB(mMn(n,qct),19).a,r=n.e.c.length,a=0,c=0,o=new Wb(n.e);o.a<o.c.c.length;)a+=(u=BB(n0(o),144)).e.a,c+=u.e.b;t=a*c,i=Gy(MD(mMn(n,cat)))*fJn,this.a=e.Math.sqrt(t/(2*r))*i},MWn.cf=function(){qmn(this),this.b-=this.c},MWn.df=function(n){return this.b>0},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"FruchtermanReingoldModel",632),wAn(849,1,QYn,zh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,oZn),""),"Force Model"),"Determines the model for force calculation."),Oct),(PPn(),gMt)),$at),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,sZn),""),"Iterations"),"The number of iterations on the force model."),iln(300)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,hZn),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,fZn),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),lZn),dMt),Ptt),nbn(hMt)))),a2(n,fZn,oZn,xct),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,bZn),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dMt),Ptt),nbn(hMt)))),a2(n,bZn,oZn,$ct),pUn((new Uh,n))},vX(wZn,"ForceMetaDataProvider",849),wAn(424,22,{3:1,35:1,22:1,424:1},XS);var _ct,Fct,Bct,Hct,qct,Gct,zct,Uct,Xct,Wct,Vct,Qct,Yct,Jct,Zct,nat,tat,eat,iat,rat,cat,aat,uat,oat,sat,hat,fat,lat,bat,wat,dat,gat,pat,vat,mat,yat,kat,jat,Eat,Tat,Mat,Sat,Pat,Iat,Cat,Oat,Aat,$at=Ben(wZn,"ForceModelStrategy",424,Unt,aJ,E_);wAn(988,1,QYn,Uh),MWn.Qe=function(n){pUn(n)},vX(wZn,"ForceOptions",988),wAn(989,1,{},dt),MWn.$e=function(){return new Gv},MWn._e=function(n){},vX(wZn,"ForceOptions/ForceFactory",989),wAn(850,1,QYn,Xh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,NZn),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(hN(),!1)),(PPn(),wMt)),ktt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,xZn),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,DZn),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),bat),gMt),Hat),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,RZn),""),"Stress Epsilon"),"Termination criterion for the iterative process."),lZn),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,KZn),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),iln(DWn)),vMt),Att),nbn(hMt)))),UGn((new Wh,n))},vX(wZn,"StressMetaDataProvider",850),wAn(992,1,QYn,Wh),MWn.Qe=function(n){UGn(n)},vX(wZn,"StressOptions",992),wAn(993,1,{},gt),MWn.$e=function(){return new OR},MWn._e=function(n){},vX(wZn,"StressOptions/StressFactory",993),wAn(1128,209,NJn,OR),MWn.Ze=function(n,t){var e,i,r,c;for(OTn(t,FZn,1),qy(TD(ZAn(n,(rkn(),kat))))?qy(TD(ZAn(n,Pat)))||jJ(new Tw((GM(),new Dy(n)))):vLn(new Gv,n,mcn(t,1)),i=fon(n),c=(e=HFn(this.a,i)).Kc();c.Ob();)(r=BB(c.Pb(),231)).e.c.length<=1||(HHn(this.b,r),i$n(this.b),Otn(r.d,new pt));SUn(i=GUn(e)),HSn(t)},vX(HZn,"StressLayoutProvider",1128),wAn(1129,1,lVn,pt),MWn.td=function(n){_Bn(BB(n,447))},vX(HZn,"StressLayoutProvider/lambda$0$Type",1129),wAn(990,1,{},Tv),MWn.c=0,MWn.e=0,MWn.g=0,vX(HZn,"StressMajorization",990),wAn(379,22,{3:1,35:1,22:1,379:1},WS);var Lat,Nat,xat,Dat,Rat,Kat,_at,Fat,Bat,Hat=Ben(HZn,"StressMajorization/Dimension",379,Unt,j1,T_);wAn(991,1,MYn,xw),MWn.ue=function(n,t){return SK(this.a,BB(n,144),BB(t,144))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(HZn,"StressMajorization/lambda$0$Type",991),wAn(1229,1,{},D0),vX(GZn,"ElkLayered",1229),wAn(1230,1,lVn,vt),MWn.td=function(n){RCn(BB(n,37))},vX(GZn,"ElkLayered/lambda$0$Type",1230),wAn(1231,1,lVn,Dw),MWn.td=function(n){PK(this.a,BB(n,37))},vX(GZn,"ElkLayered/lambda$1$Type",1231),wAn(1263,1,{},$$),vX(GZn,"GraphConfigurator",1263),wAn(759,1,lVn,Rw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$0$Type",759),wAn(760,1,{},mt),MWn.Kb=function(n){return tjn(),new Rq(null,new w1(BB(n,29).a,16))},vX(GZn,"GraphConfigurator/lambda$1$Type",760),wAn(761,1,lVn,Kw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$2$Type",761),wAn(1127,209,NJn,Uv),MWn.Ze=function(n,t){var e;e=SBn(new tm,n),GC(ZAn(n,(HXn(),sgt)))===GC((ufn(),pIt))?rwn(this.a,e,t):wOn(this.a,e,t),gUn(new Qh,e)},vX(GZn,"LayeredLayoutProvider",1127),wAn(356,22,{3:1,35:1,22:1,356:1},VS);var qat,Gat,zat,Uat=Ben(GZn,"LayeredPhases",356,Unt,s5,M_);wAn(1651,1,{},vin),MWn.i=0,vX(zZn,"ComponentsToCGraphTransformer",1651),wAn(1652,1,{},yt),MWn.ef=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(zZn,"ComponentsToCGraphTransformer/1",1652),wAn(81,1,{81:1}),MWn.i=0,MWn.k=!0,MWn.o=KQn;var Xat,Wat,Vat,Qat=vX(UZn,"CNode",81);wAn(460,81,{460:1,81:1},NN,Sgn),MWn.Ib=function(){return""},vX(zZn,"ComponentsToCGraphTransformer/CRectNode",460),wAn(1623,1,{},kt),vX(zZn,"OneDimensionalComponentsCompaction",1623),wAn(1624,1,{},jt),MWn.Kb=function(n){return xZ(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),wAn(1625,1,{},Et),MWn.Kb=function(n){return Ewn(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),wAn(1654,1,{},BX),vX(UZn,"CGraph",1654),wAn(189,1,{189:1},Pgn),MWn.b=0,MWn.c=0,MWn.e=0,MWn.g=!0,MWn.i=KQn,vX(UZn,"CGroup",189),wAn(1653,1,{},Pt),MWn.ef=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(UZn,OYn,1653),wAn(1655,1,{},sOn),MWn.d=!1;var Yat=vX(UZn,xYn,1655);wAn(1656,1,{},It),MWn.Kb=function(n){return kM(),hN(),0!=BB(BB(n,46).a,81).d.e},MWn.Fb=function(n){return this===n},vX(UZn,DYn,1656),wAn(823,1,{},Sq),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(UZn,RYn,823),wAn(1825,1,{},DG),vX(XZn,KYn,1825);var Jat=bq(WZn,PYn);wAn(1826,1,{369:1},lY),MWn.Ke=function(n){Gxn(this,BB(n,466))},vX(XZn,_Yn,1826),wAn(1827,1,MYn,Ct),MWn.ue=function(n,t){return oQ(BB(n,81),BB(t,81))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,FYn,1827),wAn(466,1,{466:1},fP),MWn.a=!1,vX(XZn,BYn,466),wAn(1828,1,MYn,Ot),MWn.ue=function(n,t){return njn(BB(n,466),BB(t,466))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,HYn,1828),wAn(140,1,{140:1},dP,mH),MWn.Fb=function(n){var t;return null!=n&&iut==tsn(n)&&(t=BB(n,140),cV(this.c,t.c)&&cV(this.d,t.d))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d]))},MWn.Ib=function(){return"("+this.c+FWn+this.d+(this.a?"cx":"")+this.b+")"},MWn.a=!0,MWn.c=0,MWn.d=0;var Zat,nut,tut,eut,iut=vX(WZn,"Point",140);wAn(405,22,{3:1,35:1,22:1,405:1},QS);var rut,cut,aut,uut,out,sut,hut,fut,lut,but,wut,dut=Ben(WZn,"Point/Quadrant",405,Unt,t3,S_);wAn(1642,1,{},Vv),MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,MWn.f=null,vX(WZn,"RectilinearConvexHull",1642),wAn(574,1,{369:1},Tpn),MWn.Ke=function(n){_9(this,BB(n,140))},MWn.b=0,vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler",574),wAn(1644,1,MYn,Mt),MWn.ue=function(n,t){return DV(MD(n),MD(t))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),wAn(1643,1,{369:1},ftn),MWn.Ke=function(n){PNn(this,BB(n,140))},MWn.a=0,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(WZn,"RectilinearConvexHull/RectangleEventHandler",1643),wAn(1645,1,MYn,St),MWn.ue=function(n,t){return u0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$0$Type",1645),wAn(1646,1,MYn,Tt),MWn.ue=function(n,t){return o0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$1$Type",1646),wAn(1647,1,MYn,At),MWn.ue=function(n,t){return h0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$2$Type",1647),wAn(1648,1,MYn,$t),MWn.ue=function(n,t){return s0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$3$Type",1648),wAn(1649,1,MYn,Lt),MWn.ue=function(n,t){return jMn(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$4$Type",1649),wAn(1650,1,{},OZ),vX(WZn,"Scanline",1650),wAn(2005,1,{}),vX(VZn,"AbstractGraphPlacer",2005),wAn(325,1,{325:1},Xx),MWn.mf=function(n){return!!this.nf(n)&&(JCn(this.b,BB(mMn(n,(hWn(),Xft)),21),n),!0)},MWn.nf=function(n){var t,e,i;for(t=BB(mMn(n,(hWn(),Xft)),21),i=BB(h6(fut,t),21).Kc();i.Ob();)if(e=BB(i.Pb(),21),!BB(h6(this.b,e),15).dc())return!1;return!0},vX(VZn,"ComponentGroup",325),wAn(765,2005,{},Qv),MWn.of=function(n){var t;for(t=new Wb(this.a);t.a<t.c.c.length;)if(BB(n0(t),325).mf(n))return;WB(this.a,new Xx(n))},MWn.lf=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)i=BB(r.Pb(),37),this.of(i);for(w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;)h=TXn(u=BB(n0(s),325),c),w9(TX(u.b),w.a,w.b),w.a+=h.a,w.b+=h.b;if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GC(mMn(a,Zdt))===GC((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(e=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),e.e);UR(kO(t.f),e.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupGraphPlacer",765),wAn(1293,765,{},hm),MWn.of=function(n){pfn(this,n)},MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)pfn(this,BB(r.Pb(),37));for(v=new Gj,p=new Gj,d=new Gj,w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;){if(u=BB(n0(s),325),dA(BB(mMn(t,(sWn(),bSt)),103))){for(d.a=v.a,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),sCt))){d.a=p.a;break}}else if(gA(BB(mMn(t,bSt),103)))for(d.b=v.b,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),ICt))){d.b=p.b;break}if(h=TXn(BB(u,570),c),w9(TX(u.b),d.a,d.b),dA(BB(mMn(t,bSt),103))){for(p.a=d.a+h.a,w.a=e.Math.max(w.a,p.a),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),SCt))){v.a=d.a+h.a;break}p.b=d.b+h.b,d.b=p.b,w.b=e.Math.max(w.b,d.b)}else if(gA(BB(mMn(t,bSt),103))){for(p.b=d.b+h.b,w.b=e.Math.max(w.b,p.b),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),oCt))){v.b=d.b+h.b;break}p.a=d.a+h.a,d.a=p.a,w.a=e.Math.max(w.a,d.a)}}if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GC(mMn(a,Zdt))===GC((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(i=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),i.e);UR(kO(t.f),i.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupModelOrderGraphPlacer",1293),wAn(423,22,{3:1,35:1,22:1,423:1},YS);var gut,put,vut,mut=Ben(VZn,"ComponentOrderingStrategy",423,Unt,k1,P_);wAn(650,1,{},Nt),vX(VZn,"ComponentsCompactor",650),wAn(1468,12,QQn,v5),MWn.Fc=function(n){return Yjn(this,BB(n,140))},vX(VZn,"ComponentsCompactor/Hullpoints",1468),wAn(1465,1,{841:1},hvn),MWn.a=!1,vX(VZn,"ComponentsCompactor/InternalComponent",1465),wAn(1464,1,pVn,Yv),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},vX(VZn,"ComponentsCompactor/InternalConnectedComponents",1464),wAn(1467,1,{594:1},dOn),MWn.hf=function(){return null},MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalExternalExtension",1467),wAn(1466,1,{594:1},nm),MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.hf=function(){return this.c},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalUnionExternalExtension",1466),wAn(1470,1,{},Qxn),vX(VZn,"ComponentsCompactor/OuterSegments",1470),wAn(1469,1,{},Jv),vX(VZn,"ComponentsCompactor/Segments",1469),wAn(1264,1,{},bY),vX(VZn,iZn,1264),wAn(1265,1,MYn,xt),MWn.ue=function(n,t){return b0(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"ComponentsProcessor/lambda$0$Type",1265),wAn(570,325,{325:1,570:1},p5),MWn.mf=function(n){return dsn(this,n)},MWn.nf=function(n){return bNn(this,n)},vX(VZn,"ModelOrderComponentGroup",570),wAn(1291,2005,{},Dt),MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;if(1!=n.gc()){if(n.dc())return t.a.c=x8(Ant,HWn,1,0,5,1),t.f.a=0,void(t.f.b=0);if(GC(mMn(t,(HXn(),Idt)))===GC((Bfn(),wut))){for(s=n.Kc();s.Ob();){for(p=0,d=new Wb((u=BB(s.Pb(),37)).a);d.a<d.c.c.length;)w=BB(n0(d),10),p+=BB(mMn(w,hpt),19).a;u.p=p}SQ(),n.ad(new Rt)}for(a=BB(n.Xb(0),37),t.a.c=x8(Ant,HWn,1,0,5,1),qan(t,a),b=0,y=0,h=n.Kc();h.Ob();)v=(u=BB(h.Pb(),37)).f,b=e.Math.max(b,v.a),y+=v.a*v.b;for(b=e.Math.max(b,e.Math.sqrt(y)*Gy(MD(mMn(t,Edt)))),k=0,j=0,l=0,i=c=Gy(MD(mMn(t,mpt))),o=n.Kc();o.Ob();)k+(v=(u=BB(o.Pb(),37)).f).a>b&&(k=0,j+=l+c,l=0),ZRn(u,k+(g=u.c).a,j+g.b),kO(g),i=e.Math.max(i,k+v.a),l=e.Math.max(l,v.b),k+=v.a+c;if(t.f.a=i,t.f.b=j+l,qy(TD(mMn(a,Mdt)))){for(KXn(r=new Nt,n,c),f=n.Kc();f.Ob();)UR(kO(BB(f.Pb(),37).c),r.e);UR(kO(t.f),r.a)}d9(t,n)}else(m=BB(n.Xb(0),37))!=t&&(t.a.c=x8(Ant,HWn,1,0,5,1),$Kn(t,m,0,0),qan(t,m),kQ(t.d,m.d),t.f.a=m.f.a,t.f.b=m.f.b)},vX(VZn,"SimpleRowGraphPlacer",1291),wAn(1292,1,MYn,Rt),MWn.ue=function(n,t){return zan(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"SimpleRowGraphPlacer/1",1292),wAn(1262,1,qYn,Kt),MWn.Lb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},vX(ZZn,"CompoundGraphPostprocessor/1",1262),wAn(1261,1,n1n,em),MWn.pf=function(n,t){mvn(this,BB(n,37),t)},vX(ZZn,"CompoundGraphPreprocessor",1261),wAn(441,1,{441:1},zfn),MWn.c=!1,vX(ZZn,"CompoundGraphPreprocessor/ExternalPort",441),wAn(243,1,{243:1},L_),MWn.Ib=function(){return dx(this.c)+":"+OCn(this.b)},vX(ZZn,"CrossHierarchyEdge",243),wAn(763,1,MYn,_w),MWn.ue=function(n,t){return Vyn(this,BB(n,243),BB(t,243))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(ZZn,"CrossHierarchyEdgeComparator",763),wAn(299,134,{3:1,299:1,94:1,134:1}),MWn.p=0,vX(t1n,"LGraphElement",299),wAn(17,299,{3:1,17:1,299:1,94:1,134:1},wY),MWn.Ib=function(){return OCn(this)};var yut=vX(t1n,"LEdge",17);wAn(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},min),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.b)},MWn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+LMn(this.a):0==this.a.c.length?"G-layered"+LMn(this.b):"G[layerless"+LMn(this.a)+", layers"+LMn(this.b)+"]"};var kut,jut=vX(t1n,"LGraph",37);wAn(657,1,{}),MWn.qf=function(){return this.e.n},MWn.We=function(n){return mMn(this.e,n)},MWn.rf=function(){return this.e.o},MWn.sf=function(){return this.e.p},MWn.Xe=function(n){return Lx(this.e,n)},MWn.tf=function(n){this.e.n.a=n.a,this.e.n.b=n.b},MWn.uf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},MWn.vf=function(n){this.e.p=n},vX(t1n,"LGraphAdapters/AbstractLShapeAdapter",657),wAn(577,1,{839:1},Fw),MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(this.a.b.c.length),t=new Wb(this.a.b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.b=null,vX(t1n,"LGraphAdapters/LEdgeAdapter",577),wAn(656,1,{},HV),MWn.xf=function(){var n,t,e,i,r;if(!this.b)for(this.b=new Np,e=new Wb(this.a.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),this.c.Mb(i)&&(WB(this.b,new __(this,i,this.e)),this.d)){if(Lx(i,(hWn(),Klt)))for(t=BB(mMn(i,Klt),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1));if(Lx(i,Dft))for(t=BB(mMn(i,Dft),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1))}return this.b},MWn.qf=function(){throw Hp(new tk(i1n))},MWn.We=function(n){return mMn(this.a,n)},MWn.rf=function(){return this.a.f},MWn.sf=function(){return this.a.p},MWn.Xe=function(n){return Lx(this.a,n)},MWn.tf=function(n){throw Hp(new tk(i1n))},MWn.uf=function(n){this.a.f.a=n.a,this.a.f.b=n.b},MWn.vf=function(n){this.a.p=n},MWn.b=null,MWn.d=!1,MWn.e=!1,vX(t1n,"LGraphAdapters/LGraphAdapter",656),wAn(576,657,{181:1},Bw),vX(t1n,"LGraphAdapters/LLabelAdapter",576),wAn(575,657,{680:1},__),MWn.yf=function(){return this.b},MWn.zf=function(){return SQ(),SQ(),set},MWn.wf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.e,10).b.c.length),t=new Wb(BB(this.e,10).b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.a,new Bw(n));return this.a},MWn.Af=function(){var n;return new HR((n=BB(this.e,10).d).d,n.c,n.a,n.b)},MWn.Bf=function(){return SQ(),SQ(),set},MWn.Cf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.e,10).j.c.length),t=new Wb(BB(this.e,10).j);t.a<t.c.c.length;)n=BB(n0(t),11),WB(this.c,new gP(n,this.d));return this.c},MWn.Df=function(){return qy(TD(mMn(BB(this.e,10),(hWn(),_ft))))},MWn.Ef=function(n){BB(this.e,10).d.b=n.b,BB(this.e,10).d.d=n.d,BB(this.e,10).d.c=n.c,BB(this.e,10).d.a=n.a},MWn.Ff=function(n){BB(this.e,10).f.b=n.b,BB(this.e,10).f.d=n.d,BB(this.e,10).f.c=n.c,BB(this.e,10).f.a=n.a},MWn.Gf=function(){Ntn(this,(gM(),kut))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LNodeAdapter",575),wAn(1722,657,{838:1},gP),MWn.zf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Cut))return SQ(),SQ(),set;if(!this.a){for(this.a=new Np,e=new Wb(BB(this.e,11).e);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.a,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(fbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.a,new Fw(n))}return this.a},MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(BB(this.e,11).f.c.length),t=new Wb(BB(this.e,11).f);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.Bf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Cut))return SQ(),SQ(),set;if(!this.c){for(this.c=new Np,e=new Wb(BB(this.e,11).g);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.c,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(lbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.c,new Fw(n))}return this.c},MWn.Hf=function(){return BB(this.e,11).j},MWn.If=function(){return qy(TD(mMn(BB(this.e,11),(hWn(),elt))))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LPortAdapter",1722),wAn(1723,1,MYn,_t),MWn.ue=function(n,t){return WDn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t1n,"LGraphAdapters/PortComparator",1723),wAn(804,1,DVn,Ft),MWn.Mb=function(n){return BB(n,10),gM(),!0},vX(t1n,"LGraphAdapters/lambda$0$Type",804),wAn(392,299,{3:1,299:1,392:1,94:1,134:1}),vX(t1n,"LShape",392),wAn(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},qj,O$),MWn.Ib=function(){var n;return null==(n=YH(this))?"label":"l_"+n},vX(t1n,"LLabel",70),wAn(207,1,{3:1,4:1,207:1,414:1}),MWn.Fb=function(n){var t;return!!cL(n,207)&&(t=BB(n,207),this.d==t.d&&this.a==t.a&&this.b==t.b&&this.c==t.c)},MWn.Hb=function(){var n,t;return n=VO(this.b)<<16,n|=VO(this.a)&QVn,t=VO(this.c)<<16,n^(t|=VO(this.d)&QVn)},MWn.Jf=function(n){var t,e,i,r,c,a,u,o,s;for(r=0;r<n.length&&Dhn((b1(r,n.length),n.charCodeAt(r)),o1n);)++r;for(t=n.length;t>0&&Dhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(r<t){o=kKn(n.substr(r,t-r),",|;");try{for(a=0,u=(c=o).length;a<u;++a){if(2!=(i=kKn(c[a],"=")).length)throw Hp(new _y("Expecting a list of key-value pairs."));e=RMn(i[0]),s=bSn(RMn(i[1])),mK(e,"top")?this.d=s:mK(e,"left")?this.b=s:mK(e,"bottom")?this.a=s:mK(e,"right")&&(this.c=s)}}catch(h){throw cL(h=lun(h),127)?Hp(new _y(h1n+h)):Hp(h)}}},MWn.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"Spacing",207),wAn(142,207,l1n,lm,lA,HR,A_);var Eut=vX(f1n,"ElkMargin",142);wAn(651,142,l1n,fm),vX(t1n,"LMargin",651),wAn(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},$vn),MWn.Ib=function(){return $pn(this)},MWn.i=!1;var Tut,Mut,Sut,Put,Iut,Cut,Out=vX(t1n,"LNode",10);wAn(267,22,{3:1,35:1,22:1,267:1},JS);var Aut,$ut=Ben(t1n,"LNode/NodeType",267,Unt,u9,C_);wAn(116,207,b1n,bm,WA,O_);var Lut,Nut,xut,Dut,Rut,Kut,_ut=vX(f1n,"ElkPadding",116);wAn(764,116,b1n,wm),vX(t1n,"LPadding",764),wAn(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},ISn),MWn.Ib=function(){var n,t,e;return oO(((n=new Ik).a+="p_",n),pyn(this)),this.i&&oO(uO((n.a+="[",n),this.i),"]"),1==this.e.c.length&&0==this.g.c.length&&BB(xq(this.e,0),17).c!=this&&(t=BB(xq(this.e,0),17).c,oO((n.a+=" << ",n),pyn(t)),oO(uO((n.a+="[",n),t.i),"]")),0==this.e.c.length&&1==this.g.c.length&&BB(xq(this.g,0),17).d!=this&&(e=BB(xq(this.g,0),17).d,oO((n.a+=" >> ",n),pyn(e)),oO(uO((n.a+="[",n),e.i),"]")),n.a},MWn.c=!0,MWn.d=!1;var Fut,But,Hut,qut,Gut=vX(t1n,"LPort",11);wAn(397,1,pVn,Hw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new qw(new Wb(this.a.e))},vX(t1n,"LPort/1",397),wAn(1290,1,QWn,qw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).c},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/1/1",1290),wAn(359,1,pVn,Gw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new zw(new Wb(this.a.g))},vX(t1n,"LPort/2",359),wAn(762,1,QWn,zw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).d},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/2/1",762),wAn(1283,1,pVn,hP),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new m6(this)},vX(t1n,"LPort/CombineIter",1283),wAn(201,1,QWn,m6),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){uE()},MWn.Ob=function(){return zN(this)},MWn.Pb=function(){return y$(this.a)?n0(this.a):n0(this.b)},vX(t1n,"LPort/CombineIter/1",201),wAn(1285,1,qYn,Bt),MWn.Lb=function(n){return Az(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).e.c.length},vX(t1n,"LPort/lambda$0$Type",1285),wAn(1284,1,qYn,Ht),MWn.Lb=function(n){return $z(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).g.c.length},vX(t1n,"LPort/lambda$1$Type",1284),wAn(1286,1,qYn,qt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),sCt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),sCt)},vX(t1n,"LPort/lambda$2$Type",1286),wAn(1287,1,qYn,Gt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),oCt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),oCt)},vX(t1n,"LPort/lambda$3$Type",1287),wAn(1288,1,qYn,zt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),SCt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),SCt)},vX(t1n,"LPort/lambda$4$Type",1288),wAn(1289,1,qYn,Ut),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),ICt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),ICt)},vX(t1n,"LPort/lambda$5$Type",1289),wAn(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},HX),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},MWn.Ib=function(){return"L_"+E7(this.b.b,this,0)+LMn(this.a)},vX(t1n,"Layer",29),wAn(1342,1,{},tm),vX(d1n,g1n,1342),wAn(1346,1,{},Xt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),wAn(1349,1,{},Wt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),wAn(1343,1,lVn,Uw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,p1n,1343),wAn(1344,1,lVn,Xw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,v1n,1344),wAn(1345,1,{},Vt),MWn.Kb=function(n){return new Rq(null,new w1(pV(BB(n,79)),16))},vX(d1n,m1n,1345),wAn(1347,1,DVn,Ww),MWn.Mb=function(n){return _A(this.a,BB(n,33))},vX(d1n,y1n,1347),wAn(1348,1,{},Qt),MWn.Kb=function(n){return new Rq(null,new w1(vV(BB(n,79)),16))},vX(d1n,"ElkGraphImporter/lambda$5$Type",1348),wAn(1350,1,DVn,Vw),MWn.Mb=function(n){return FA(this.a,BB(n,33))},vX(d1n,"ElkGraphImporter/lambda$7$Type",1350),wAn(1351,1,DVn,Yt),MWn.Mb=function(n){return AQ(BB(n,79))},vX(d1n,"ElkGraphImporter/lambda$8$Type",1351),wAn(1278,1,{},Qh),vX(d1n,"ElkGraphLayoutTransferrer",1278),wAn(1279,1,DVn,Qw),MWn.Mb=function(n){return JR(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),wAn(1280,1,lVn,Yw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),wAn(1281,1,DVn,Jw),MWn.Mb=function(n){return UD(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),wAn(1282,1,lVn,Zw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),wAn(1485,1,n1n,Jt),MWn.pf=function(n,t){Vrn(BB(n,37),t)},vX(j1n,"CommentNodeMarginCalculator",1485),wAn(1486,1,{},Zt),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"CommentNodeMarginCalculator/lambda$0$Type",1486),wAn(1487,1,lVn,ne),MWn.td=function(n){tHn(BB(n,10))},vX(j1n,"CommentNodeMarginCalculator/lambda$1$Type",1487),wAn(1488,1,n1n,te),MWn.pf=function(n,t){aDn(BB(n,37),t)},vX(j1n,"CommentPostprocessor",1488),wAn(1489,1,n1n,ee),MWn.pf=function(n,t){uUn(BB(n,37),t)},vX(j1n,"CommentPreprocessor",1489),wAn(1490,1,n1n,ie),MWn.pf=function(n,t){jLn(BB(n,37),t)},vX(j1n,"ConstraintsPostprocessor",1490),wAn(1491,1,n1n,re),MWn.pf=function(n,t){can(BB(n,37),t)},vX(j1n,"EdgeAndLayerConstraintEdgeReverser",1491),wAn(1492,1,n1n,ce),MWn.pf=function(n,t){Gwn(BB(n,37),t)},vX(j1n,"EndLabelPostprocessor",1492),wAn(1493,1,{},ae),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPostprocessor/lambda$0$Type",1493),wAn(1494,1,DVn,ue),MWn.Mb=function(n){return MY(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$1$Type",1494),wAn(1495,1,lVn,oe),MWn.td=function(n){ejn(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$2$Type",1495),wAn(1496,1,n1n,se),MWn.pf=function(n,t){ZPn(BB(n,37),t)},vX(j1n,"EndLabelPreprocessor",1496),wAn(1497,1,{},he),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPreprocessor/lambda$0$Type",1497),wAn(1498,1,lVn,D_),MWn.td=function(n){KM(this.a,this.b,this.c,BB(n,10))},MWn.a=0,MWn.b=0,MWn.c=!1,vX(j1n,"EndLabelPreprocessor/lambda$1$Type",1498),wAn(1499,1,DVn,fe),MWn.Mb=function(n){return GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),XPt))},vX(j1n,"EndLabelPreprocessor/lambda$2$Type",1499),wAn(1500,1,lVn,nd),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$3$Type",1500),wAn(1501,1,DVn,le),MWn.Mb=function(n){return GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),UPt))},vX(j1n,"EndLabelPreprocessor/lambda$4$Type",1501),wAn(1502,1,lVn,td),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$5$Type",1502),wAn(1551,1,n1n,Vh),MWn.pf=function(n,t){Iln(BB(n,37),t)},vX(j1n,"EndLabelSorter",1551),wAn(1552,1,MYn,be),MWn.ue=function(n,t){return Hgn(BB(n,456),BB(t,456))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"EndLabelSorter/1",1552),wAn(456,1,{456:1},TQ),vX(j1n,"EndLabelSorter/LabelGroup",456),wAn(1553,1,{},we),MWn.Kb=function(n){return EM(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelSorter/lambda$0$Type",1553),wAn(1554,1,DVn,de),MWn.Mb=function(n){return EM(),BB(n,10).k==(uSn(),Iut)},vX(j1n,"EndLabelSorter/lambda$1$Type",1554),wAn(1555,1,lVn,ge),MWn.td=function(n){oSn(BB(n,10))},vX(j1n,"EndLabelSorter/lambda$2$Type",1555),wAn(1556,1,DVn,pe),MWn.Mb=function(n){return EM(),GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),UPt))},vX(j1n,"EndLabelSorter/lambda$3$Type",1556),wAn(1557,1,DVn,ve),MWn.Mb=function(n){return EM(),GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),XPt))},vX(j1n,"EndLabelSorter/lambda$4$Type",1557),wAn(1503,1,n1n,me),MWn.pf=function(n,t){CHn(this,BB(n,37))},MWn.b=0,MWn.c=0,vX(j1n,"FinalSplineBendpointsCalculator",1503),wAn(1504,1,{},ye),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),wAn(1505,1,{},ke),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),wAn(1506,1,DVn,je),MWn.Mb=function(n){return!b5(BB(n,17))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),wAn(1507,1,DVn,Ee),MWn.Mb=function(n){return Lx(BB(n,17),(hWn(),Nlt))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),wAn(1508,1,lVn,ed),MWn.td=function(n){zKn(this.a,BB(n,128))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),wAn(1509,1,lVn,Te),MWn.td=function(n){JPn(BB(n,17).a)},vX(j1n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),wAn(792,1,n1n,id),MWn.pf=function(n,t){Vqn(this,BB(n,37),t)},vX(j1n,"GraphTransformer",792),wAn(511,22,{3:1,35:1,22:1,511:1},ZS);var zut,Uut,Xut,Wut=Ben(j1n,"GraphTransformer/Mode",511,Unt,uJ,tB);wAn(1510,1,n1n,Me),MWn.pf=function(n,t){exn(BB(n,37),t)},vX(j1n,"HierarchicalNodeResizingProcessor",1510),wAn(1511,1,n1n,Se),MWn.pf=function(n,t){lrn(BB(n,37),t)},vX(j1n,"HierarchicalPortConstraintProcessor",1511),wAn(1512,1,MYn,Pe),MWn.ue=function(n,t){return Cpn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),wAn(1513,1,n1n,Ie),MWn.pf=function(n,t){jBn(BB(n,37),t)},vX(j1n,"HierarchicalPortDummySizeProcessor",1513),wAn(1514,1,n1n,Ce),MWn.pf=function(n,t){JDn(this,BB(n,37),t)},MWn.a=0,vX(j1n,"HierarchicalPortOrthogonalEdgeRouter",1514),wAn(1515,1,MYn,Oe),MWn.ue=function(n,t){return _N(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),wAn(1516,1,MYn,Ae),MWn.ue=function(n,t){return P9(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),wAn(1517,1,n1n,$e),MWn.pf=function(n,t){EMn(BB(n,37),t)},vX(j1n,"HierarchicalPortPositionProcessor",1517),wAn(1518,1,n1n,Yh),MWn.pf=function(n,t){rXn(this,BB(n,37))},MWn.a=0,MWn.c=0,vX(j1n,"HighDegreeNodeLayeringProcessor",1518),wAn(571,1,{571:1},Le),MWn.b=-1,MWn.d=-1,vX(j1n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),wAn(1519,1,{},Ne),MWn.Kb=function(n){return q_(),fbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),wAn(1520,1,{},xe),MWn.Kb=function(n){return q_(),lbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),wAn(1526,1,n1n,De),MWn.pf=function(n,t){dFn(this,BB(n,37),t)},vX(j1n,"HyperedgeDummyMerger",1526),wAn(793,1,{},R_),MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(j1n,"HyperedgeDummyMerger/MergeState",793),wAn(1527,1,{},Re),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"HyperedgeDummyMerger/lambda$0$Type",1527),wAn(1528,1,{},Ke),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,10).j,16))},vX(j1n,"HyperedgeDummyMerger/lambda$1$Type",1528),wAn(1529,1,lVn,_e),MWn.td=function(n){BB(n,11).p=-1},vX(j1n,"HyperedgeDummyMerger/lambda$2$Type",1529),wAn(1530,1,n1n,Fe),MWn.pf=function(n,t){bFn(BB(n,37),t)},vX(j1n,"HypernodesProcessor",1530),wAn(1531,1,n1n,Be),MWn.pf=function(n,t){wFn(BB(n,37),t)},vX(j1n,"InLayerConstraintProcessor",1531),wAn(1532,1,n1n,He),MWn.pf=function(n,t){Lcn(BB(n,37),t)},vX(j1n,"InnermostNodeMarginCalculator",1532),wAn(1533,1,n1n,qe),MWn.pf=function(n,t){Vzn(this,BB(n,37))},MWn.a=KQn,MWn.b=KQn,MWn.c=RQn,MWn.d=RQn;var Vut,Qut,Yut,Jut,Zut,not,tot,eot,iot,rot,cot,aot,uot,oot,sot,hot,fot,lot,bot,wot,dot,got,pot,vot,mot,yot,kot,jot,Eot,Tot,Mot,Sot,Pot,Iot,Cot,Oot,Aot,$ot,Lot,Not,xot,Dot,Rot,Kot,_ot,Fot,Bot,Hot,qot,Got,zot,Uot,Xot,Wot,Vot,Qot,Yot,Jot=vX(j1n,"InteractiveExternalPortPositioner",1533);wAn(1534,1,{},Ge),MWn.Kb=function(n){return BB(n,17).d.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),wAn(1535,1,{},rd),MWn.Kb=function(n){return qN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),wAn(1536,1,{},ze),MWn.Kb=function(n){return BB(n,17).c.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),wAn(1537,1,{},cd),MWn.Kb=function(n){return GN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),wAn(1538,1,{},ad),MWn.Kb=function(n){return WR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),wAn(1539,1,{},ud),MWn.Kb=function(n){return VR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),wAn(77,22,{3:1,35:1,22:1,77:1,234:1},nP),MWn.Kf=function(){switch(this.g){case 15:return new dc;case 22:return new gc;case 47:return new mc;case 28:case 35:return new ei;case 32:return new Jt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new id((Srn(),qut));case 0:return new id((Srn(),Hut));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new me;case 55:return new Me;case 13:return new Se;case 38:return new Ie;case 44:return new Ce;case 40:return new $e;case 9:return new Yh;case 49:return new ox;case 37:return new De;case 43:return new Fe;case 27:return new Be;case 30:return new He;case 3:return new qe;case 18:return new Xe;case 29:return new We;case 5:return new Jh;case 50:return new Ue;case 34:return new Zh;case 36:return new ii;case 52:return new Vh;case 11:return new ci;case 7:return new tf;case 39:return new ai;case 45:return new ui;case 16:return new oi;case 10:return new si;case 48:return new fi;case 21:return new li;case 23:return new Ny((oin(),Amt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new af;case 17:return new Pi;case 53:return new Ii;case 6:return new Bi;case 25:return new am;case 46:return new Ni;case 31:return new xR;case 14:return new Vi;case 26:return new Sc;case 20:return new nr;case 24:return new Ny((oin(),$mt));default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Zot,nst,tst,est,ist,rst,cst,ast,ust=Ben(j1n,S1n,77,Unt,ENn,nB);wAn(1540,1,n1n,Xe),MWn.pf=function(n,t){Jzn(BB(n,37),t)},vX(j1n,"InvertedPortProcessor",1540),wAn(1541,1,n1n,We),MWn.pf=function(n,t){LKn(BB(n,37),t)},vX(j1n,"LabelAndNodeSizeProcessor",1541),wAn(1542,1,DVn,Ve),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),wAn(1543,1,DVn,Qe),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Mut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),wAn(1544,1,lVn,K_),MWn.td=function(n){_M(this.b,this.a,this.c,BB(n,10))},MWn.a=!1,MWn.c=!1,vX(j1n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),wAn(1545,1,n1n,Jh),MWn.pf=function(n,t){fzn(BB(n,37),t)},vX(j1n,"LabelDummyInserter",1545),wAn(1546,1,qYn,Ye),MWn.Lb=function(n){return GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),zPt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),zPt))},vX(j1n,"LabelDummyInserter/1",1546),wAn(1547,1,n1n,Ue),MWn.pf=function(n,t){Pqn(BB(n,37),t)},vX(j1n,"LabelDummyRemover",1547),wAn(1548,1,DVn,Je),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelDummyRemover/lambda$0$Type",1548),wAn(1359,1,n1n,Zh),MWn.pf=function(n,t){TGn(this,BB(n,37),t)},MWn.a=null,vX(j1n,"LabelDummySwitcher",1359),wAn(286,1,{286:1},cKn),MWn.c=0,MWn.d=null,MWn.f=0,vX(j1n,"LabelDummySwitcher/LabelDummyInfo",286),wAn(1360,1,{},Ze),MWn.Kb=function(n){return Crn(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"LabelDummySwitcher/lambda$0$Type",1360),wAn(1361,1,DVn,ni),MWn.Mb=function(n){return Crn(),BB(n,10).k==(uSn(),Sut)},vX(j1n,"LabelDummySwitcher/lambda$1$Type",1361),wAn(1362,1,{},hd),MWn.Kb=function(n){return XD(this.a,BB(n,10))},vX(j1n,"LabelDummySwitcher/lambda$2$Type",1362),wAn(1363,1,lVn,fd),MWn.td=function(n){YX(this.a,BB(n,286))},vX(j1n,"LabelDummySwitcher/lambda$3$Type",1363),wAn(1364,1,MYn,ti),MWn.ue=function(n,t){return Lz(BB(n,286),BB(t,286))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"LabelDummySwitcher/lambda$4$Type",1364),wAn(791,1,n1n,ei),MWn.pf=function(n,t){Y6(BB(n,37),t)},vX(j1n,"LabelManagementProcessor",791),wAn(1549,1,n1n,ii),MWn.pf=function(n,t){Nxn(BB(n,37),t)},vX(j1n,"LabelSideSelector",1549),wAn(1550,1,DVn,ri),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelSideSelector/lambda$0$Type",1550),wAn(1558,1,n1n,ci),MWn.pf=function(n,t){EBn(BB(n,37),t)},vX(j1n,"LayerConstraintPostprocessor",1558),wAn(1559,1,n1n,tf),MWn.pf=function(n,t){r$n(BB(n,37),t)},vX(j1n,"LayerConstraintPreprocessor",1559),wAn(360,22,{3:1,35:1,22:1,360:1},tP);var ost,sst,hst,fst,lst,bst,wst,dst,gst,pst=Ben(j1n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Unt,e3,z_);wAn(1560,1,n1n,ai),MWn.pf=function(n,t){Eqn(BB(n,37),t)},vX(j1n,"LayerSizeAndGraphHeightCalculator",1560),wAn(1561,1,n1n,ui),MWn.pf=function(n,t){ALn(BB(n,37),t)},vX(j1n,"LongEdgeJoiner",1561),wAn(1562,1,n1n,oi),MWn.pf=function(n,t){WHn(BB(n,37),t)},vX(j1n,"LongEdgeSplitter",1562),wAn(1563,1,n1n,si),MWn.pf=function(n,t){PGn(this,BB(n,37),t)},MWn.d=0,MWn.e=0,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,vX(j1n,"NodePromotion",1563),wAn(1564,1,{},hi),MWn.Kb=function(n){return BB(n,46),hN(),!0},MWn.Fb=function(n){return this===n},vX(j1n,"NodePromotion/lambda$0$Type",1564),wAn(1565,1,{},od),MWn.Kb=function(n){return aV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$1$Type",1565),wAn(1566,1,{},sd),MWn.Kb=function(n){return uV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$2$Type",1566),wAn(1567,1,n1n,fi),MWn.pf=function(n,t){XUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPostprocessor",1567),wAn(1568,1,n1n,li),MWn.pf=function(n,t){MUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPreprocessor",1568),wAn(1569,1,MYn,bi),MWn.ue=function(n,t){return Zan(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),wAn(1570,1,n1n,wi),MWn.pf=function(n,t){$_n(BB(n,37),t)},vX(j1n,"PartitionMidprocessor",1570),wAn(1571,1,DVn,di),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionMidprocessor/lambda$0$Type",1571),wAn(1572,1,lVn,ld),MWn.td=function(n){$Q(this.a,BB(n,10))},vX(j1n,"PartitionMidprocessor/lambda$1$Type",1572),wAn(1573,1,n1n,gi),MWn.pf=function(n,t){wNn(BB(n,37),t)},vX(j1n,"PartitionPostprocessor",1573),wAn(1574,1,n1n,pi),MWn.pf=function(n,t){NOn(BB(n,37),t)},vX(j1n,"PartitionPreprocessor",1574),wAn(1575,1,DVn,vi),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionPreprocessor/lambda$0$Type",1575),wAn(1576,1,{},mi),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"PartitionPreprocessor/lambda$1$Type",1576),wAn(1577,1,DVn,yi),MWn.Mb=function(n){return Lgn(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$2$Type",1577),wAn(1578,1,lVn,ki),MWn.td=function(n){Run(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$3$Type",1578),wAn(1579,1,n1n,af),MWn.pf=function(n,t){u_n(BB(n,37),t)},vX(j1n,"PortListSorter",1579),wAn(1580,1,{},ji),MWn.Kb=function(n){return zsn(),BB(n,11).e},vX(j1n,"PortListSorter/lambda$0$Type",1580),wAn(1581,1,{},Ei),MWn.Kb=function(n){return zsn(),BB(n,11).g},vX(j1n,"PortListSorter/lambda$1$Type",1581),wAn(1582,1,MYn,Ti),MWn.ue=function(n,t){return T4(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$2$Type",1582),wAn(1583,1,MYn,Mi),MWn.ue=function(n,t){return Oyn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$3$Type",1583),wAn(1584,1,MYn,Si),MWn.ue=function(n,t){return nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$4$Type",1584),wAn(1585,1,n1n,Pi),MWn.pf=function(n,t){WAn(BB(n,37),t)},vX(j1n,"PortSideProcessor",1585),wAn(1586,1,n1n,Ii),MWn.pf=function(n,t){CRn(BB(n,37),t)},vX(j1n,"ReversedEdgeRestorer",1586),wAn(1591,1,n1n,am),MWn.pf=function(n,t){Ymn(this,BB(n,37),t)},vX(j1n,"SelfLoopPortRestorer",1591),wAn(1592,1,{},Ci),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPortRestorer/lambda$0$Type",1592),wAn(1593,1,DVn,Oi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"SelfLoopPortRestorer/lambda$1$Type",1593),wAn(1594,1,DVn,Ai),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPortRestorer/lambda$2$Type",1594),wAn(1595,1,{},$i),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopPortRestorer/lambda$3$Type",1595),wAn(1596,1,lVn,bd),MWn.td=function(n){SSn(this.a,BB(n,403))},vX(j1n,"SelfLoopPortRestorer/lambda$4$Type",1596),wAn(794,1,lVn,Li),MWn.td=function(n){nPn(BB(n,101))},vX(j1n,"SelfLoopPortRestorer/lambda$5$Type",794),wAn(1597,1,n1n,Ni),MWn.pf=function(n,t){Lpn(BB(n,37),t)},vX(j1n,"SelfLoopPostProcessor",1597),wAn(1598,1,{},xi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPostProcessor/lambda$0$Type",1598),wAn(1599,1,DVn,Di),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"SelfLoopPostProcessor/lambda$1$Type",1599),wAn(1600,1,DVn,Ri),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPostProcessor/lambda$2$Type",1600),wAn(1601,1,lVn,Ki),MWn.td=function(n){Ljn(BB(n,10))},vX(j1n,"SelfLoopPostProcessor/lambda$3$Type",1601),wAn(1602,1,{},_i),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPostProcessor/lambda$4$Type",1602),wAn(1603,1,lVn,wd),MWn.td=function(n){a3(this.a,BB(n,409))},vX(j1n,"SelfLoopPostProcessor/lambda$5$Type",1603),wAn(1604,1,DVn,Fi),MWn.Mb=function(n){return!!BB(n,101).i},vX(j1n,"SelfLoopPostProcessor/lambda$6$Type",1604),wAn(1605,1,lVn,dd),MWn.td=function(n){Ty(this.a,BB(n,101))},vX(j1n,"SelfLoopPostProcessor/lambda$7$Type",1605),wAn(1587,1,n1n,Bi),MWn.pf=function(n,t){Z$n(BB(n,37),t)},vX(j1n,"SelfLoopPreProcessor",1587),wAn(1588,1,{},Hi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPreProcessor/lambda$0$Type",1588),wAn(1589,1,{},qi),MWn.Kb=function(n){return BB(n,409).a},vX(j1n,"SelfLoopPreProcessor/lambda$1$Type",1589),wAn(1590,1,lVn,Gi),MWn.td=function(n){q$(BB(n,17))},vX(j1n,"SelfLoopPreProcessor/lambda$2$Type",1590),wAn(1606,1,n1n,xR),MWn.pf=function(n,t){sSn(this,BB(n,37),t)},vX(j1n,"SelfLoopRouter",1606),wAn(1607,1,{},zi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopRouter/lambda$0$Type",1607),wAn(1608,1,DVn,Ui),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"SelfLoopRouter/lambda$1$Type",1608),wAn(1609,1,DVn,Xi),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopRouter/lambda$2$Type",1609),wAn(1610,1,{},Wi),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopRouter/lambda$3$Type",1610),wAn(1611,1,lVn,eP),MWn.td=function(n){QV(this.a,this.b,BB(n,403))},vX(j1n,"SelfLoopRouter/lambda$4$Type",1611),wAn(1612,1,n1n,Vi),MWn.pf=function(n,t){fxn(BB(n,37),t)},vX(j1n,"SemiInteractiveCrossMinProcessor",1612),wAn(1613,1,DVn,Qi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),wAn(1614,1,DVn,Yi),MWn.Mb=function(n){return Gq(BB(n,10))._b((HXn(),spt))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),wAn(1615,1,MYn,Ji),MWn.ue=function(n,t){return drn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),wAn(1616,1,{},Zi),MWn.Ce=function(n,t){return XQ(BB(n,10),BB(t,10))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),wAn(1618,1,n1n,nr),MWn.pf=function(n,t){MBn(BB(n,37),t)},vX(j1n,"SortByInputModelProcessor",1618),wAn(1619,1,DVn,tr),MWn.Mb=function(n){return 0!=BB(n,11).g.c.length},vX(j1n,"SortByInputModelProcessor/lambda$0$Type",1619),wAn(1620,1,lVn,gd),MWn.td=function(n){fPn(this.a,BB(n,11))},vX(j1n,"SortByInputModelProcessor/lambda$1$Type",1620),wAn(1693,803,{},grn),MWn.Me=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Np,JT(AV(new Rq(null,new w1(this.c.a.b,16)),new dr),new uP(this,t)),pIn(this,new rr),Otn(t,new cr),t.c=x8(Ant,HWn,1,0,5,1),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new ar),new vd(t)),pIn(this,new ur),Otn(t,new or),t.c=x8(Ant,HWn,1,0,5,1),e=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new md(this))),new sr),JT(new Rq(null,new w1(this.c.a.a,16)),new rP(e,t)),pIn(this,new fr),Otn(t,new er),t.c=x8(Ant,HWn,1,0,5,1);break;case 3:i=new Np,pIn(this,new ir),r=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new pd(this))),new hr),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new lr),new aP(r,i)),pIn(this,new br),Otn(i,new wr),i.c=x8(Ant,HWn,1,0,5,1);break;default:throw Hp(new kv)}},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation",1693),wAn(1694,1,qYn,ir),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),wAn(1695,1,{},pd),MWn.Fe=function(n){return GIn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),wAn(1703,1,RVn,iP),MWn.Vd=function(){Fkn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),wAn(1705,1,qYn,rr),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),wAn(1706,1,lVn,cr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),wAn(1707,1,DVn,ar),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),wAn(1709,1,lVn,vd),MWn.td=function(n){Ebn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),wAn(1708,1,RVn,lP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),wAn(1710,1,qYn,ur),MWn.Lb=function(n){return cL(BB(n,57).g,10)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),wAn(1711,1,lVn,or),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),wAn(1712,1,{},md),MWn.Fe=function(n){return zIn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),wAn(1713,1,{},sr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),wAn(1696,1,{},hr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),wAn(1715,1,lVn,rP),MWn.td=function(n){HG(this.a,this.b,BB(n,307))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),wAn(1714,1,RVn,cP),MWn.Vd=function(){VAn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),wAn(1716,1,qYn,fr),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),wAn(1717,1,lVn,er),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),wAn(1697,1,DVn,lr),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),wAn(1699,1,lVn,aP),MWn.td=function(n){qG(this.a,this.b,BB(n,57))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),wAn(1698,1,RVn,bP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),wAn(1700,1,qYn,br),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),wAn(1701,1,lVn,wr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),wAn(1702,1,DVn,dr),MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),wAn(1704,1,lVn,uP),MWn.td=function(n){Ttn(this.a,this.b,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),wAn(1521,1,n1n,ox),MWn.pf=function(n,t){cqn(this,BB(n,37),t)},vX(A1n,"HorizontalGraphCompactor",1521),wAn(1522,1,{},yd),MWn.Oe=function(n,t){var e,i;return Z7(n,t)?0:(e=f2(n),i=f2(t),e&&e.k==(uSn(),Mut)||i&&i.k==(uSn(),Mut)?0:UN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},MWn.Pe=function(n,t){var e,i;return Z7(n,t)?1:(e=f2(n),i=f2(t),XN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},vX(A1n,"HorizontalGraphCompactor/1",1522),wAn(1523,1,{},gr),MWn.Ne=function(n,t){return MM(),0==n.a.i},vX(A1n,"HorizontalGraphCompactor/lambda$0$Type",1523),wAn(1524,1,{},kd),MWn.Ne=function(n,t){return _Q(this.a,n,t)},vX(A1n,"HorizontalGraphCompactor/lambda$1$Type",1524),wAn(1664,1,{},C7),vX(A1n,"LGraphToCGraphTransformer",1664),wAn(1672,1,DVn,pr),MWn.Mb=function(n){return null!=n},vX(A1n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),wAn(1665,1,{},vr),MWn.Kb=function(n){return G_(),Bbn(mMn(BB(BB(n,57).g,10),(hWn(),dlt)))},vX(A1n,"LGraphToCGraphTransformer/lambda$0$Type",1665),wAn(1666,1,{},mr),MWn.Kb=function(n){return G_(),mfn(BB(BB(n,57).g,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$1$Type",1666),wAn(1675,1,DVn,yr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,10)},vX(A1n,"LGraphToCGraphTransformer/lambda$10$Type",1675),wAn(1676,1,lVn,kr),MWn.td=function(n){KQ(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$11$Type",1676),wAn(1677,1,DVn,jr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,145)},vX(A1n,"LGraphToCGraphTransformer/lambda$12$Type",1677),wAn(1681,1,lVn,Er),MWn.td=function(n){vfn(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$13$Type",1681),wAn(1678,1,lVn,jd),MWn.td=function(n){uA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$14$Type",1678),wAn(1679,1,lVn,Ed),MWn.td=function(n){sA(this.a,BB(n,110))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$15$Type",1679),wAn(1680,1,lVn,Td),MWn.td=function(n){oA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$16$Type",1680),wAn(1682,1,{},Tr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$17$Type",1682),wAn(1683,1,DVn,Mr),MWn.Mb=function(n){return G_(),b5(BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$18$Type",1683),wAn(1684,1,lVn,Md),MWn.td=function(n){Snn(this.a,BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$19$Type",1684),wAn(1668,1,lVn,Sd),MWn.td=function(n){l0(this.a,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$2$Type",1668),wAn(1685,1,{},Sr),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$20$Type",1685),wAn(1686,1,{},Pr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$21$Type",1686),wAn(1687,1,{},Ir),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$22$Type",1687),wAn(1688,1,DVn,Cr),MWn.Mb=function(n){return tx(BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$23$Type",1688),wAn(1689,1,lVn,Pd),MWn.td=function(n){PIn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$24$Type",1689),wAn(1667,1,lVn,oP),MWn.td=function(n){H3(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$3$Type",1667),wAn(1669,1,{},Or),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$4$Type",1669),wAn(1670,1,{},Ar),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$5$Type",1670),wAn(1671,1,{},$r),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$6$Type",1671),wAn(1673,1,lVn,Id),MWn.td=function(n){KCn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$8$Type",1673),wAn(1674,1,lVn,sP),MWn.td=function(n){x$(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$9$Type",1674),wAn(1663,1,{},Lr),MWn.Le=function(n){var t,e,i,r,c;for(this.a=n,this.d=new Fv,this.c=x8(qit,HWn,121,this.a.a.a.c.length,0,1),this.b=0,e=new Wb(this.a.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).d=this.b,c=AN(oM(new qv,t),this.d),this.c[this.b]=c,++this.b;for(JGn(this),AUn(this),ZLn(this),WKn(B_(this.d),new Xm),r=new Wb(this.a.a.b);r.a<r.c.c.length;)(i=BB(n0(r),57)).d.c=this.c[i.a.d].e+i.b.a},MWn.b=0,vX(A1n,"NetworkSimplexCompaction",1663),wAn(145,1,{35:1,145:1},PBn),MWn.wd=function(n){return Lnn(this,BB(n,145))},MWn.Ib=function(){return mfn(this)},vX(A1n,"VerticalSegment",145),wAn(827,1,{},zEn),MWn.c=0,MWn.e=0,MWn.i=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter",827),wAn(663,1,{663:1},kcn),MWn.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},MWn.b=0,MWn.c=0,MWn.f=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",663),wAn(287,1,{35:1,287:1},Gx),MWn.wd=function(n){return aq(this,BB(n,287))},MWn.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},MWn.a=0,MWn.b=0,MWn.c=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",287),wAn(1929,1,{},ZSn),MWn.b=0,MWn.e=!1,vX($1n,"CrossingMatrixFiller",1929);var vst,mst,yst,kst,jst=bq(L1n,"IInitializable");wAn(1804,1,N1n,vP),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Lf=function(){return this.c!=(oin(),Amt)},MWn.Mf=function(){this.e=x8(ANt,hQn,25,this.d,15,1)},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Qf=function(n,t,e,i){++this.d},MWn.Rf=function(){return!0},MWn.Sf=function(n,t,e,i){return Yhn(this,n,t,e),Z4(this,t)},MWn.Tf=function(n,t){var e;return Yhn(this,n,e=hj(t,n.length),t),bon(this,e)},MWn.d=0,vX($1n,"GreedySwitchHeuristic",1804),wAn(1930,1,{},lG),MWn.b=0,MWn.d=0,vX($1n,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",1930),wAn(1917,1,{},uRn),MWn.a=!1,vX($1n,"SwitchDecider",1917),wAn(101,1,{101:1},pPn),MWn.a=null,MWn.c=null,MWn.i=null,vX(x1n,"SelfHyperLoop",101),wAn(1916,1,{},epn),MWn.c=0,MWn.e=0,vX(x1n,"SelfHyperLoopLabels",1916),wAn(411,22,{3:1,35:1,22:1,411:1},mP);var Est,Tst,Mst,Sst,Pst,Ist,Cst=Ben(x1n,"SelfHyperLoopLabels/Alignment",411,Unt,r3,U_);wAn(409,1,{409:1},j6),vX(x1n,"SelfLoopEdge",409),wAn(403,1,{403:1},Ogn),MWn.a=!1,vX(x1n,"SelfLoopHolder",403),wAn(1724,1,DVn,qr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopHolder/lambda$0$Type",1724),wAn(113,1,{113:1},ipn),MWn.a=!1,MWn.c=!1,vX(x1n,"SelfLoopPort",113),wAn(1792,1,DVn,Gr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopPort/lambda$0$Type",1792),wAn(363,22,{3:1,35:1,22:1,363:1},yP);var Ost,Ast,$st,Lst,Nst,xst,Dst,Rst,Kst=Ben(x1n,"SelfLoopType",363,Unt,x5,Y_);wAn(1732,1,{},uf),vX(D1n,"PortRestorer",1732),wAn(361,22,{3:1,35:1,22:1,361:1},kP);var _st,Fst,Bst,Hst,qst,Gst,zst,Ust,Xst,Wst=Ben(D1n,"PortRestorer/PortSideArea",361,Unt,P1,J_);wAn(1733,1,{},Wr),MWn.Kb=function(n){return _Mn(),BB(n,15).Oc()},vX(D1n,"PortRestorer/lambda$0$Type",1733),wAn(1734,1,lVn,Vr),MWn.td=function(n){_Mn(),BB(n,113).c=!1},vX(D1n,"PortRestorer/lambda$1$Type",1734),wAn(1743,1,DVn,Qr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),ICt)},vX(D1n,"PortRestorer/lambda$10$Type",1743),wAn(1744,1,{},Yr),MWn.Kb=function(n){return _Mn(),BB(n,113).d},vX(D1n,"PortRestorer/lambda$11$Type",1744),wAn(1745,1,lVn,Cd),MWn.td=function(n){Nj(this.a,BB(n,11))},vX(D1n,"PortRestorer/lambda$12$Type",1745),wAn(1735,1,lVn,Od),MWn.td=function(n){Ax(this.a,BB(n,101))},vX(D1n,"PortRestorer/lambda$2$Type",1735),wAn(1736,1,MYn,Jr),MWn.ue=function(n,t){return oen(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortRestorer/lambda$3$Type",1736),wAn(1737,1,DVn,Zr),MWn.Mb=function(n){return _Mn(),BB(n,113).c},vX(D1n,"PortRestorer/lambda$4$Type",1737),wAn(1738,1,DVn,xr),MWn.Mb=function(n){return Acn(BB(n,11))},vX(D1n,"PortRestorer/lambda$5$Type",1738),wAn(1739,1,DVn,Nr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),sCt)},vX(D1n,"PortRestorer/lambda$6$Type",1739),wAn(1740,1,DVn,Dr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),oCt)},vX(D1n,"PortRestorer/lambda$7$Type",1740),wAn(1741,1,DVn,Rr),MWn.Mb=function(n){return c3(BB(n,11))},vX(D1n,"PortRestorer/lambda$8$Type",1741),wAn(1742,1,DVn,Kr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),SCt)},vX(D1n,"PortRestorer/lambda$9$Type",1742),wAn(270,22,{3:1,35:1,22:1,270:1},WV);var Vst,Qst,Yst,Jst,Zst,nht,tht,eht,iht=Ben(D1n,"PortSideAssigner/Target",270,Unt,Ftn,X_);wAn(1725,1,{},_r),MWn.Kb=function(n){return AV(new Rq(null,new w1(BB(n,101).j,16)),new Xr)},vX(D1n,"PortSideAssigner/lambda$1$Type",1725),wAn(1726,1,{},Fr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$2$Type",1726),wAn(1727,1,lVn,Br),MWn.td=function(n){qIn(BB(n,11),(kUn(),sCt))},vX(D1n,"PortSideAssigner/lambda$3$Type",1727),wAn(1728,1,{},Hr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$4$Type",1728),wAn(1729,1,lVn,Ad),MWn.td=function(n){tv(this.a,BB(n,11))},vX(D1n,"PortSideAssigner/lambda$5$Type",1729),wAn(1730,1,MYn,zr),MWn.ue=function(n,t){return MW(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$6$Type",1730),wAn(1731,1,MYn,Ur),MWn.ue=function(n,t){return oH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$7$Type",1731),wAn(805,1,DVn,Xr),MWn.Mb=function(n){return BB(n,113).c},vX(D1n,"PortSideAssigner/lambda$8$Type",805),wAn(2009,1,{}),vX(R1n,"AbstractSelfLoopRouter",2009),wAn(1750,1,MYn,nc),MWn.ue=function(n,t){return CK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,bJn,1750),wAn(1751,1,MYn,tc),MWn.ue=function(n,t){return IK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,wJn,1751),wAn(1793,2009,{},ec),MWn.Uf=function(n,t,e){return e},vX(R1n,"OrthogonalSelfLoopRouter",1793),wAn(1795,1,lVn,wP),MWn.td=function(n){pgn(this.b,this.a,BB(n,8))},vX(R1n,"OrthogonalSelfLoopRouter/lambda$0$Type",1795),wAn(1794,1793,{},ic),MWn.Uf=function(n,t,e){var i,r;return Kx(e,0,UR(B$((i=n.c.d).n),i.a)),DH(e,UR(B$((r=n.d.d).n),r.a)),E_n(e)},vX(R1n,"PolylineSelfLoopRouter",1794),wAn(1746,1,{},nf),MWn.a=null,vX(R1n,"RoutingDirector",1746),wAn(1747,1,MYn,rc),MWn.ue=function(n,t){return wH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingDirector/lambda$0$Type",1747),wAn(1748,1,{},cc),MWn.Kb=function(n){return SM(),BB(n,101).j},vX(R1n,"RoutingDirector/lambda$1$Type",1748),wAn(1749,1,lVn,ac),MWn.td=function(n){SM(),BB(n,15).ad(Qst)},vX(R1n,"RoutingDirector/lambda$2$Type",1749),wAn(1752,1,{},uc),vX(R1n,"RoutingSlotAssigner",1752),wAn(1753,1,DVn,$d),MWn.Mb=function(n){return II(this.a,BB(n,101))},vX(R1n,"RoutingSlotAssigner/lambda$0$Type",1753),wAn(1754,1,MYn,Ld),MWn.ue=function(n,t){return Uq(this.a,BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingSlotAssigner/lambda$1$Type",1754),wAn(1796,1793,{},oc),MWn.Uf=function(n,t,e){var i,r,c,a;return i=Gy(MD(gpn(n.b.g.b,(HXn(),jpt)))),nLn(n,t,e,a=new Ux(Pun(Gk(PMt,1),sVn,8,0,[(c=n.c.d,UR(new wA(c.n),c.a))])),i),DH(a,UR(new wA((r=n.d.d).n),r.a)),Fvn(new oBn(a))},vX(R1n,"SplineSelfLoopRouter",1796),wAn(578,1,MYn,Grn,kH),MWn.ue=function(n,t){return fXn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderNodeComparator",578),wAn(1755,1,DVn,sc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$0$Type",1755),wAn(1756,1,{},hc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$1$Type",1756),wAn(1757,1,DVn,fc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$2$Type",1757),wAn(1758,1,{},lc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$3$Type",1758),wAn(1759,1,DVn,bc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$4$Type",1759),wAn(806,1,MYn,O7,pP),MWn.ue=function(n,t){return Nz(this,n,t)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderPortComparator",806),wAn(801,1,{},wc),MWn.Vf=function(n,t){var i,r,c,a;for(c=PSn(t),i=new Np,a=t.f/c,r=1;r<c;++r)WB(i,iln(dG(fan(e.Math.round(r*a)))));return i},MWn.Wf=function(){return!1},vX(_1n,"ARDCutIndexHeuristic",801),wAn(1479,1,n1n,dc),MWn.pf=function(n,t){oKn(BB(n,37),t)},vX(_1n,"BreakingPointInserter",1479),wAn(305,1,{305:1},v3),MWn.Ib=function(){var n;return(n=new Ik).a+="BPInfo[",n.a+="\n\tstart=",uO(n,this.i),n.a+="\n\tend=",uO(n,this.a),n.a+="\n\tnodeStartEdge=",uO(n,this.e),n.a+="\n\tstartEndEdge=",uO(n,this.j),n.a+="\n\toriginalEdge=",uO(n,this.f),n.a+="\n\tstartInLayerDummy=",uO(n,this.k),n.a+="\n\tstartInLayerEdge=",uO(n,this.n),n.a+="\n\tendInLayerDummy=",uO(n,this.b),n.a+="\n\tendInLayerEdge=",uO(n,this.c),n.a},vX(_1n,"BreakingPointInserter/BPInfo",305),wAn(652,1,{652:1},Hd),MWn.a=!1,MWn.b=0,MWn.c=0,vX(_1n,"BreakingPointInserter/Cut",652),wAn(1480,1,n1n,gc),MWn.pf=function(n,t){mLn(BB(n,37),t)},vX(_1n,"BreakingPointProcessor",1480),wAn(1481,1,DVn,pc),MWn.Mb=function(n){return Jnn(BB(n,10))},vX(_1n,"BreakingPointProcessor/0methodref$isEnd$Type",1481),wAn(1482,1,DVn,vc),MWn.Mb=function(n){return Znn(BB(n,10))},vX(_1n,"BreakingPointProcessor/1methodref$isStart$Type",1482),wAn(1483,1,n1n,mc),MWn.pf=function(n,t){rNn(this,BB(n,37),t)},vX(_1n,"BreakingPointRemover",1483),wAn(1484,1,lVn,yc),MWn.td=function(n){BB(n,128).k=!0},vX(_1n,"BreakingPointRemover/lambda$0$Type",1484),wAn(797,1,{},MAn),MWn.b=0,MWn.e=0,MWn.f=0,MWn.j=0,vX(_1n,"GraphStats",797),wAn(798,1,{},kc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/0methodref$max$Type",798),wAn(799,1,{},jc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/2methodref$max$Type",799),wAn(1660,1,{},Ec),MWn.Ce=function(n,t){return vB(MD(n),MD(t))},vX(_1n,"GraphStats/lambda$1$Type",1660),wAn(1661,1,{},Nd),MWn.Kb=function(n){return wpn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$2$Type",1661),wAn(1662,1,{},xd),MWn.Kb=function(n){return VLn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$6$Type",1662),wAn(800,1,{},Tc),MWn.Vf=function(n,t){return BB(mMn(n,(HXn(),_pt)),15)||(SQ(),SQ(),set)},MWn.Wf=function(){return!1},vX(_1n,"ICutIndexCalculator/ManualCutIndexCalculator",800),wAn(802,1,{},Mc),MWn.Vf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(null==t.n&&Dmn(t),k=t.n,null==t.d&&Dmn(t),s=t.d,(y=x8(xNt,qQn,25,k.length,15,1))[0]=k[0],v=k[0],h=1;h<k.length;h++)y[h]=y[h-1]+k[h],v+=k[h];for(c=PSn(t)-1,u=BB(mMn(n,(HXn(),Fpt)),19).a,r=KQn,i=new Np,b=e.Math.max(0,c-u);b<=e.Math.min(t.f-1,c+u);b++){if(g=v/(b+1),p=0,f=1,a=new Np,m=KQn,l=0,o=0,d=s[0],0==b)m=v,null==t.g&&(t.g=Xrn(t,new jc)),o=Gy(t.g);else{for(;f<t.f;)y[f-1]-p>=g&&(WB(a,iln(f)),m=e.Math.max(m,y[f-1]-l),o+=d,p+=y[f-1]-p,l=y[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;o+=d}(w=e.Math.min(1/m,1/t.b/o))>r&&(r=w,i=a)}return i},MWn.Wf=function(){return!1},vX(_1n,"MSDCutIndexHeuristic",802),wAn(1617,1,n1n,Sc),MWn.pf=function(n,t){bBn(BB(n,37),t)},vX(_1n,"SingleEdgeGraphWrapper",1617),wAn(227,22,{3:1,35:1,22:1,227:1},jP);var rht,cht,aht,uht=Ben(F1n,"CenterEdgeLabelPlacementStrategy",227,Unt,Z8,W_);wAn(422,22,{3:1,35:1,22:1,422:1},EP);var oht,sht,hht,fht,lht=Ben(F1n,"ConstraintCalculationStrategy",422,Unt,GY,V_);wAn(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},TP),MWn.Kf=function(){return sCn(this)},MWn.Xf=function(){return sCn(this)};var bht,wht,dht,ght,pht=Ben(F1n,"CrossingMinimizationStrategy",314,Unt,T1,Q_);wAn(337,22,{3:1,35:1,22:1,337:1},MP);var vht,mht,yht,kht,jht,Eht,Tht=Ben(F1n,"CuttingStrategy",337,Unt,M1,Z_);wAn(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},SP),MWn.Kf=function(){return RAn(this)},MWn.Xf=function(){return RAn(this)};var Mht,Sht,Pht,Iht=Ben(F1n,"CycleBreakingStrategy",335,Unt,L5,nF);wAn(419,22,{3:1,35:1,22:1,419:1},PP);var Cht,Oht,Aht,$ht,Lht=Ben(F1n,"DirectionCongruency",419,Unt,qY,tF);wAn(450,22,{3:1,35:1,22:1,450:1},IP);var Nht,xht,Dht,Rht,Kht,_ht,Fht,Bht=Ben(F1n,"EdgeConstraint",450,Unt,S1,eF);wAn(276,22,{3:1,35:1,22:1,276:1},CP);var Hht,qht,Ght,zht=Ben(F1n,"EdgeLabelSideSelection",276,Unt,i9,iF);wAn(479,22,{3:1,35:1,22:1,479:1},OP);var Uht,Xht,Wht,Vht,Qht,Yht,Jht,Zht=Ben(F1n,"EdgeStraighteningStrategy",479,Unt,HY,rF);wAn(274,22,{3:1,35:1,22:1,274:1},AP);var nft,tft,eft,ift,rft,cft,aft,uft=Ben(F1n,"FixedAlignment",274,Unt,t9,cF);wAn(275,22,{3:1,35:1,22:1,275:1},$P);var oft,sft,hft,fft,lft,bft,wft,dft,gft,pft,vft,mft=Ben(F1n,"GraphCompactionStrategy",275,Unt,n9,aF);wAn(256,22,{3:1,35:1,22:1,256:1},LP);var yft,kft,jft,Eft,Tft=Ben(F1n,"GraphProperties",256,Unt,bcn,uF);wAn(292,22,{3:1,35:1,22:1,292:1},NP);var Mft,Sft,Pft,Ift,Cft=Ben(F1n,"GreedySwitchType",292,Unt,C1,oF);wAn(303,22,{3:1,35:1,22:1,303:1},xP);var Oft,Aft,$ft,Lft=Ben(F1n,"InLayerConstraint",303,Unt,I1,sF);wAn(420,22,{3:1,35:1,22:1,420:1},DP);var Nft,xft,Dft,Rft,Kft,_ft,Fft,Bft,Hft,qft,Gft,zft,Uft,Xft,Wft,Vft,Qft,Yft,Jft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,ult,olt,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,vlt,mlt,ylt,klt,jlt,Elt,Tlt,Mlt,Slt,Plt,Ilt,Clt,Olt,Alt,$lt,Llt,Nlt,xlt,Dlt,Rlt,Klt,_lt,Flt,Blt,Hlt,qlt,Glt=Ben(F1n,"InteractiveReferencePoint",420,Unt,zY,hF);wAn(163,22,{3:1,35:1,22:1,163:1},BP);var zlt,Ult,Xlt,Wlt,Vlt,Qlt,Ylt,Jlt,Zlt,nbt,tbt,ebt,ibt,rbt,cbt,abt,ubt,obt,sbt,hbt,fbt,lbt,bbt,wbt,dbt,gbt,pbt,vbt,mbt,ybt,kbt,jbt,Ebt,Tbt,Mbt,Sbt,Pbt,Ibt,Cbt,Obt,Abt,$bt,Lbt,Nbt,xbt,Dbt,Rbt,Kbt,_bt,Fbt,Bbt,Hbt,qbt,Gbt,zbt,Ubt,Xbt,Wbt,Vbt,Qbt,Ybt,Jbt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,uwt,owt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,vwt,mwt,ywt,kwt,jwt,Ewt,Twt,Mwt,Swt,Pwt,Iwt,Cwt,Owt,Awt,$wt,Lwt,Nwt,xwt,Dwt,Rwt,Kwt,_wt,Fwt,Bwt,Hwt,qwt,Gwt,zwt,Uwt,Xwt,Wwt,Vwt,Qwt,Ywt,Jwt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt,udt,odt,sdt,hdt,fdt,ldt,bdt,wdt,ddt,gdt,pdt,vdt,mdt,ydt,kdt,jdt,Edt,Tdt,Mdt,Sdt,Pdt,Idt,Cdt,Odt,Adt,$dt,Ldt,Ndt,xdt,Ddt,Rdt,Kdt,_dt,Fdt,Bdt,Hdt,qdt,Gdt,zdt,Udt,Xdt,Wdt,Vdt,Qdt,Ydt,Jdt,Zdt,ngt,tgt,egt,igt,rgt,cgt,agt,ugt,ogt,sgt,hgt,fgt,lgt,bgt,wgt,dgt,ggt,pgt,vgt,mgt,ygt,kgt,jgt,Egt,Tgt,Mgt,Sgt,Pgt,Igt,Cgt,Ogt,Agt,$gt,Lgt,Ngt,xgt,Dgt,Rgt,Kgt,_gt,Fgt,Bgt,Hgt,qgt,Ggt,zgt,Ugt,Xgt,Wgt,Vgt,Qgt,Ygt,Jgt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,upt,opt,spt,hpt,fpt,lpt,bpt,wpt,dpt,gpt,ppt,vpt,mpt,ypt,kpt,jpt,Ept,Tpt,Mpt,Spt,Ppt,Ipt,Cpt,Opt,Apt,$pt,Lpt,Npt,xpt,Dpt,Rpt,Kpt,_pt,Fpt,Bpt,Hpt,qpt,Gpt,zpt,Upt,Xpt,Wpt,Vpt,Qpt,Ypt,Jpt,Zpt,nvt,tvt,evt,ivt=Ben(F1n,"LayerConstraint",163,Unt,D5,fF);wAn(848,1,QYn,hf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,U1n),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),Pbt),(PPn(),gMt)),Lht),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X1n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,W1n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Qbt),gMt),Glt),nbn(hMt)))),a2(n,W1n,e0n,Jbt),a2(n,W1n,l0n,Ybt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,V1n),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Q1n),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Pj(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Y1n),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),wMt),ktt),nbn(fMt)),Pun(Gk(Qtt,1),sVn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,J1n),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),xwt),gMt),zvt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Z1n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),iln(7)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,n0n),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,t0n),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,e0n),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),Mbt),gMt),Iht),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,i0n),f2n),"Node Layering Strategy"),"Strategy for node layering."),bwt),gMt),ovt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,r0n),f2n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),iwt),gMt),ivt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,c0n),f2n),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,a0n),f2n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,u0n),l2n),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),iln(4)),vMt),Att),nbn(hMt)))),a2(n,u0n,i0n,awt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,o0n),l2n),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),iln(2)),vMt),Att),nbn(hMt)))),a2(n,o0n,i0n,owt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,s0n),b2n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),fwt),gMt),Dvt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,h0n),b2n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),iln(0)),vMt),Att),nbn(hMt)))),a2(n,h0n,s0n,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,f0n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),iln(DWn)),vMt),Att),nbn(hMt)))),a2(n,f0n,i0n,nwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,l0n),w2n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),Ebt),gMt),pht),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,b0n),w2n),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,w0n),w2n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dMt),Ptt),nbn(hMt)))),a2(n,w0n,d2n,pbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,d0n),w2n),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),wMt),ktt),nbn(hMt)))),a2(n,d0n,l0n,kbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,g0n),w2n),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,p0n),w2n),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,v0n),g2n),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),iln(40)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,m0n),g2n),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),wbt),gMt),Cft),nbn(hMt)))),a2(n,m0n,l0n,dbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,y0n),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),hbt),gMt),Cft),nbn(hMt)))),a2(n,y0n,l0n,fbt),a2(n,y0n,d2n,lbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,k0n),p2n),"Node Placement Strategy"),"Strategy for node placement."),Lwt),gMt),Avt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,j0n),p2n),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),wMt),ktt),nbn(hMt)))),a2(n,j0n,k0n,Ewt),a2(n,j0n,k0n,Twt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,E0n),v2n),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),pwt),gMt),Zht),nbn(hMt)))),a2(n,E0n,k0n,vwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,T0n),v2n),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),ywt),gMt),uft),nbn(hMt)))),a2(n,T0n,k0n,kwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,M0n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dMt),Ptt),nbn(hMt)))),a2(n,M0n,k0n,Swt),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,S0n),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),gMt),kvt),nbn(sMt)))),a2(n,S0n,k0n,Awt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,P0n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),Cwt),gMt),kvt),nbn(hMt)))),a2(n,P0n,k0n,Owt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,I0n),m2n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),xbt),gMt),nmt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,C0n),m2n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Rbt),gMt),cmt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,O0n),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),_bt),gMt),hmt),nbn(hMt)))),a2(n,O0n,y2n,Fbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,A0n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dMt),Ptt),nbn(hMt)))),a2(n,A0n,y2n,Hbt),a2(n,A0n,O0n,qbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,$0n),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),dMt),Ptt),nbn(hMt)))),a2(n,$0n,y2n,Lbt),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,L0n),k2n),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,N0n),k2n),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,x0n),k2n),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,D0n),k2n),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,R0n),j2n),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,K0n),j2n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,_0n),j2n),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,F0n),E2n),DJn),"Tries to further compact components (disconnected sub-graphs)."),!1),wMt),ktt),nbn(hMt)))),a2(n,F0n,kZn,!0),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,B0n),T2n),"Post Compaction Strategy"),M2n),Ylt),gMt),mft),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,H0n),T2n),"Post Compaction Constraint Calculation"),M2n),Vlt),gMt),lht),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,q0n),S2n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,G0n),S2n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),iln(16)),vMt),Att),nbn(hMt)))),a2(n,G0n,q0n,!0),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,z0n),S2n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),iln(5)),vMt),Att),nbn(hMt)))),a2(n,z0n,q0n,!0),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,U0n),P2n),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),bdt),gMt),Smt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X0n),P2n),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),dMt),Ptt),nbn(hMt)))),a2(n,X0n,U0n,Uwt),a2(n,X0n,U0n,Xwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,W0n),P2n),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),dMt),Ptt),nbn(hMt)))),a2(n,W0n,U0n,Vwt),a2(n,W0n,U0n,Qwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,V0n),I2n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),idt),gMt),Tht),nbn(hMt)))),a2(n,V0n,U0n,rdt),a2(n,V0n,U0n,cdt),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,Q0n),I2n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),mMt),Rnt),nbn(hMt)))),a2(n,Q0n,V0n,Jwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Y0n),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),ndt),vMt),Att),nbn(hMt)))),a2(n,Y0n,V0n,tdt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,J0n),C2n),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),vdt),gMt),dmt),nbn(hMt)))),a2(n,J0n,U0n,mdt),a2(n,J0n,U0n,ydt),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,Z0n),C2n),"Valid Indices for Wrapping"),null),mMt),Rnt),nbn(hMt)))),a2(n,Z0n,U0n,ddt),a2(n,Z0n,U0n,gdt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,n2n),O2n),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),wMt),ktt),nbn(hMt)))),a2(n,n2n,U0n,sdt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,t2n),O2n),"Distance Penalty When Improving Cuts"),null),2),dMt),Ptt),nbn(hMt)))),a2(n,t2n,U0n,udt),a2(n,t2n,n2n,!0),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,e2n),O2n),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),wMt),ktt),nbn(hMt)))),a2(n,e2n,U0n,fdt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,i2n),A2n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Abt),gMt),zht),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,r2n),A2n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),Cbt),gMt),uht),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,c2n),$2n),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),abt),gMt),Fvt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,a2n),$2n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,u2n),$2n),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),Zlt),gMt),mut),nbn(hMt)))),a2(n,u2n,kZn,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,o2n),$2n),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),ibt),gMt),wvt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,s2n),$2n),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),dMt),Ptt),nbn(hMt)))),a2(n,s2n,c2n,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,h2n),$2n),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),dMt),Ptt),nbn(hMt)))),a2(n,h2n,c2n,null),vWn((new bf,n))},vX(F1n,"LayeredMetaDataProvider",848),wAn(986,1,QYn,bf),MWn.Qe=function(n){vWn(n)},vX(F1n,"LayeredOptions",986),wAn(987,1,{},Ic),MWn.$e=function(){return new Uv},MWn._e=function(n){},vX(F1n,"LayeredOptions/LayeredFactory",987),wAn(1372,1,{}),MWn.a=0,vX(y3n,"ElkSpacings/AbstractSpacingsBuilder",1372),wAn(779,1372,{},uwn),vX(F1n,"LayeredSpacings/LayeredSpacingsBuilder",779),wAn(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},RP),MWn.Kf=function(){return rLn(this)},MWn.Xf=function(){return rLn(this)};var rvt,cvt,avt,uvt,ovt=Ben(F1n,"LayeringStrategy",313,Unt,e9,lF);wAn(378,22,{3:1,35:1,22:1,378:1},KP);var svt,hvt,fvt,lvt,bvt,wvt=Ben(F1n,"LongEdgeOrderingStrategy",378,Unt,E1,bF);wAn(197,22,{3:1,35:1,22:1,197:1},_P);var dvt,gvt,pvt,vvt,mvt,yvt,kvt=Ben(F1n,"NodeFlexibility",197,Unt,k3,wF);wAn(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},FP),MWn.Kf=function(){return DAn(this)},MWn.Xf=function(){return DAn(this)};var jvt,Evt,Tvt,Mvt,Svt,Pvt,Ivt,Cvt,Ovt,Avt=Ben(F1n,"NodePlacementStrategy",315,Unt,$5,yF);wAn(260,22,{3:1,35:1,22:1,260:1},HP);var $vt,Lvt,Nvt,xvt,Dvt=Ben(F1n,"NodePromotionStrategy",260,Unt,Btn,gF);wAn(339,22,{3:1,35:1,22:1,339:1},qP);var Rvt,Kvt,_vt,Fvt=Ben(F1n,"OrderingStrategy",339,Unt,A1,pF);wAn(421,22,{3:1,35:1,22:1,421:1},GP);var Bvt,Hvt,qvt,Gvt,zvt=Ben(F1n,"PortSortingStrategy",421,Unt,UY,vF);wAn(452,22,{3:1,35:1,22:1,452:1},zP);var Uvt,Xvt,Wvt,Vvt,Qvt=Ben(F1n,"PortType",452,Unt,O1,dF);wAn(375,22,{3:1,35:1,22:1,375:1},UP);var Yvt,Jvt,Zvt,nmt=Ben(F1n,"SelfLoopDistributionStrategy",375,Unt,$1,mF);wAn(376,22,{3:1,35:1,22:1,376:1},XP);var tmt,emt,imt,rmt,cmt=Ben(F1n,"SelfLoopOrderingStrategy",376,Unt,BY,kF);wAn(304,1,{304:1},sGn),vX(F1n,"Spacings",304),wAn(336,22,{3:1,35:1,22:1,336:1},WP);var amt,umt,omt,smt,hmt=Ben(F1n,"SplineRoutingMode",336,Unt,N1,jF);wAn(338,22,{3:1,35:1,22:1,338:1},VP);var fmt,lmt,bmt,wmt,dmt=Ben(F1n,"ValidifyStrategy",338,Unt,x1,EF);wAn(377,22,{3:1,35:1,22:1,377:1},QP);var gmt,pmt,vmt,mmt,ymt,kmt,jmt,Emt,Tmt,Mmt,Smt=Ben(F1n,"WrappingStrategy",377,Unt,L1,TF);wAn(1383,1,E3n,wf),MWn.Yf=function(n){return BB(n,37),pmt},MWn.pf=function(n,t){JHn(this,BB(n,37),t)},vX(T3n,"DepthFirstCycleBreaker",1383),wAn(782,1,E3n,KG),MWn.Yf=function(n){return BB(n,37),vmt},MWn.pf=function(n,t){UXn(this,BB(n,37),t)},MWn.Zf=function(n){return BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyCycleBreaker",782),wAn(1386,782,E3n,TC),MWn.Zf=function(n){var t,e,i,r;for(r=null,t=DWn,i=new Wb(n);i.a<i.c.c.length;)Lx(e=BB(n0(i),10),(hWn(),wlt))&&BB(mMn(e,wlt),19).a<t&&(t=BB(mMn(e,wlt),19).a,r=e);return r||BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyModelOrderCycleBreaker",1386),wAn(1384,1,E3n,rf),MWn.Yf=function(n){return BB(n,37),mmt},MWn.pf=function(n,t){Cqn(this,BB(n,37),t)},vX(T3n,"InteractiveCycleBreaker",1384),wAn(1385,1,E3n,cf),MWn.Yf=function(n){return BB(n,37),ymt},MWn.pf=function(n,t){Lqn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,vX(T3n,"ModelOrderCycleBreaker",1385),wAn(1389,1,E3n,$M),MWn.Yf=function(n){return BB(n,37),kmt},MWn.pf=function(n,t){JXn(this,BB(n,37),t)},vX(M3n,"CoffmanGrahamLayerer",1389),wAn(1390,1,MYn,Dd),MWn.ue=function(n,t){return BCn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1390),wAn(1391,1,MYn,Rd),MWn.ue=function(n,t){return zG(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/lambda$1$Type",1391),wAn(1392,1,E3n,Cc),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),kot)),Kat,Oot),_at,Cot)},MWn.pf=function(n,t){EUn(this,BB(n,37),t)},vX(M3n,"InteractiveLayerer",1392),wAn(569,1,{569:1},im),MWn.a=0,MWn.c=0,vX(M3n,"InteractiveLayerer/LayerSpan",569),wAn(1388,1,E3n,ef),MWn.Yf=function(n){return BB(n,37),jmt},MWn.pf=function(n,t){qxn(this,BB(n,37),t)},vX(M3n,"LongestPathLayerer",1388),wAn(1395,1,E3n,sf),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)},MWn.pf=function(n,t){iXn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,MWn.d=0,vX(M3n,"MinWidthLayerer",1395),wAn(1396,1,MYn,Kd),MWn.ue=function(n,t){return dan(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"MinWidthLayerer/MinOutgoingEdgesComparator",1396),wAn(1387,1,E3n,of),MWn.Yf=function(n){return BB(n,37),Mmt},MWn.pf=function(n,t){mGn(this,BB(n,37),t)},vX(M3n,"NetworkSimplexLayerer",1387),wAn(1393,1,E3n,RR),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)},MWn.pf=function(n,t){$zn(this,BB(n,37),t)},MWn.d=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.s=0,MWn.t=0,MWn.u=0,vX(M3n,"StretchWidthLayerer",1393),wAn(1394,1,MYn,Oc),MWn.ue=function(n,t){return R6(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"StretchWidthLayerer/1",1394),wAn(402,1,S3n),MWn.Nf=function(n,t,e,i,r,c){},MWn._f=function(n,t,e){return r_n(this,n,t,e)},MWn.Mf=function(){this.g=x8(DNt,P3n,25,this.d,15,1),this.f=x8(DNt,P3n,25,this.d,15,1)},MWn.Of=function(n,t){this.e[n]=x8(ANt,hQn,25,t[n].length,15,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,this.e[n][t]=t},MWn.Qf=function(n,t,e,i){BB(xq(i[n][t].j,e),11).p=this.d++},MWn.b=0,MWn.c=0,MWn.d=0,vX(I3n,"AbstractBarycenterPortDistributor",402),wAn(1633,1,MYn,_d),MWn.ue=function(n,t){return qgn(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"AbstractBarycenterPortDistributor/lambda$0$Type",1633),wAn(817,1,N1n,G2),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Qf=function(n,t,e,i){},MWn.Lf=function(){return!1},MWn.Mf=function(){this.c=this.e.a,this.g=this.f.g},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Rf=function(){return!1},MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,BB(this,660)):(SQ(),m$(n,this.d)),Ban(this.e,n))},MWn.Sf=function(n,t,e,i){var r,c,a,u,o,s,h;for(t!=Jq(e,n.length)&&(c=n[t-(e?1:-1)],G6(this.f,c,e?(ain(),qvt):(ain(),Hvt))),r=n[t][0],h=!i||r.k==(uSn(),Mut),s=u6(n[t]),this.ag(s,h,!1,e),a=0,o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),n[t][a++]=u;return!1},MWn.Tf=function(n,t){var e,i,r,c,a;for(c=u6(n[a=Jq(t,n.length)]),this.ag(c,!1,!0,t),e=0,r=new Wb(c);r.a<r.c.c.length;)i=BB(n0(r),10),n[a][e++]=i;return!1},vX(I3n,"BarycenterHeuristic",817),wAn(658,1,{658:1},Bd),MWn.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},MWn.b=0,MWn.d=0,MWn.e=!1;var Pmt=vX(I3n,"BarycenterHeuristic/BarycenterState",658);wAn(1802,1,MYn,Fd),MWn.ue=function(n,t){return MEn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"BarycenterHeuristic/lambda$0$Type",1802),wAn(816,1,N1n,UEn),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){this.a[n]=x8(Pmt,{3:1,4:1,5:1,2018:1},658,t[n].length,0,1),this.b[n]=x8(Lmt,{3:1,4:1,5:1,2019:1},233,t[n].length,0,1)},MWn.Pf=function(n,t,e){Dgn(this,e[n][t],!0)},MWn.c=!1,vX(I3n,"ForsterConstraintResolver",816),wAn(233,1,{233:1},DY,uGn),MWn.Ib=function(){var n,t;for((t=new Ik).a+="[",n=0;n<this.d.length;n++)oO(t,$pn(this.d[n])),null!=lL(this.g,this.d[0]).a&&oO(oO((t.a+="<",t),ZC(lL(this.g,this.d[0]).a)),">"),n<this.d.length-1&&(t.a+=FWn);return(t.a+="]",t).a},MWn.a=0,MWn.c=0,MWn.f=0;var Imt,Cmt,Omt,Amt,$mt,Lmt=vX(I3n,"ForsterConstraintResolver/ConstraintGroup",233);wAn(1797,1,lVn,qd),MWn.td=function(n){Dgn(this.a,BB(n,10),!1)},vX(I3n,"ForsterConstraintResolver/lambda$0$Type",1797),wAn(214,1,{214:1,225:1},IGn),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Mf=function(){this.r=x8(ANt,hQn,25,this.n,15,1)},MWn.Pf=function(n,t,e){var i;(i=e[n][t].e)&&WB(this.b,i)},MWn.Qf=function(n,t,e,i){++this.n},MWn.Ib=function(){return izn(this.e,new Rv)},MWn.g=!1,MWn.i=!1,MWn.n=0,MWn.s=!1,vX(I3n,"GraphInfoHolder",214),wAn(1832,1,N1n,Pc),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Qf=function(n,t,e,i){},MWn._f=function(n,t,e){return e&&t>0?uZ(this.a,n[t-1],n[t]):!e&&t<n.length-1?uZ(this.a,n[t],n[t+1]):yrn(this.a,n[t],e?(kUn(),ICt):(kUn(),oCt)),bLn(this,n,t,e)},MWn.Mf=function(){this.d=x8(ANt,hQn,25,this.c,15,1),this.a=new QK(this.d)},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c+=i.j.c.length},MWn.c=0,vX(I3n,"GreedyPortDistributor",1832),wAn(1401,1,E3n,df),MWn.Yf=function(n){return Xhn(BB(n,37))},MWn.pf=function(n,t){XGn(BB(n,37),t)},vX(I3n,"InteractiveCrossingMinimizer",1401),wAn(1402,1,MYn,Gd),MWn.ue=function(n,t){return Hjn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"InteractiveCrossingMinimizer/1",1402),wAn(507,1,{507:1,123:1,51:1},Ny),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Cmt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){P_n(this,BB(n,37),t)},MWn.e=0,vX(I3n,"LayerSweepCrossingMinimizer",507),wAn(1398,1,lVn,zd),MWn.td=function(n){wBn(this.a,BB(n,214))},vX(I3n,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1398),wAn(1399,1,lVn,Ud),MWn.td=function(n){Ohn(this.a,BB(n,214))},vX(I3n,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1399),wAn(1400,1,lVn,Xd),MWn.td=function(n){pFn(this.a,BB(n,214))},vX(I3n,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1400),wAn(454,22,{3:1,35:1,22:1,454:1},YP);var Nmt,xmt=Ben(I3n,"LayerSweepCrossingMinimizer/CrossMinType",454,Unt,D1,MF);wAn(1397,1,DVn,Ac),MWn.Mb=function(n){return _cn(),0==BB(n,29).a.c.length},vX(I3n,"LayerSweepCrossingMinimizer/lambda$0$Type",1397),wAn(1799,1,N1n,aZ),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){t[n][0].c.p=n,this.b[n]=x8(_mt,{3:1,4:1,5:1,1944:1},659,t[n].length,0,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,$X(this.b[n],t,new $c)},vX(I3n,"LayerSweepTypeDecider",1799),wAn(659,1,{659:1},$c),MWn.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0;var Dmt,Rmt,Kmt,_mt=vX(I3n,"LayerSweepTypeDecider/NodeInfo",659);wAn(1800,1,qYn,Lc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(I3n,"LayerSweepTypeDecider/lambda$0$Type",1800),wAn(1801,1,qYn,Nc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(I3n,"LayerSweepTypeDecider/lambda$1$Type",1801),wAn(1833,402,S3n,Dj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f;switch(s=this.g,e.g){case 1:for(i=0,r=0,o=new Wb(n.j);o.a<o.c.c.length;)0!=(a=BB(n0(o),11)).e.c.length&&(++i,a.j==(kUn(),sCt)&&++r);for(c=t+r,f=t+i,u=xwn(n,(ain(),Hvt)).Kc();u.Ob();)(a=BB(u.Pb(),11)).j==(kUn(),sCt)?(s[a.p]=c,--c):(s[a.p]=f,--f);return i;case 2:for(h=0,u=xwn(n,(ain(),qvt)).Kc();u.Ob();)++h,s[(a=BB(u.Pb(),11)).p]=t+h;return h;default:throw Hp(new wv)}},vX(I3n,"LayerTotalPortDistributor",1833),wAn(660,817,{660:1,225:1},prn),MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,this):(SQ(),m$(n,this.d)),qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),xdt)))||Ban(this.e,n))},vX(I3n,"ModelOrderBarycenterHeuristic",660),wAn(1803,1,MYn,Wd),MWn.ue=function(n,t){return KSn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),wAn(1403,1,E3n,jf),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Dmt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){mY((BB(n,37),t))},vX(I3n,"NoCrossingMinimizer",1403),wAn(796,402,S3n,Rj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Wb(n.j);h.a<h.c.c.length;)0!=(o=BB(n0(h),11)).e.c.length&&(++r,o.j==(kUn(),sCt)&&++c);for(a=t+c*(i=1/(r+1)),b=t+1-i,s=xwn(n,(ain(),Hvt)).Kc();s.Ob();)(o=BB(s.Pb(),11)).j==(kUn(),sCt)?(f[o.p]=a,a-=i):(f[o.p]=b,b-=i);break;case 2:for(u=0,h=new Wb(n.j);h.a<h.c.c.length;)0==(o=BB(n0(h),11)).g.c.length||++u;for(l=t+(i=1/(u+1)),s=xwn(n,(ain(),qvt)).Kc();s.Ob();)f[(o=BB(s.Pb(),11)).p]=l,l+=i;break;default:throw Hp(new _y("Port type is undefined"))}return 1},vX(I3n,"NodeRelativePortDistributor",796),wAn(807,1,{},Vz,HMn),vX(I3n,"SweepCopy",807),wAn(1798,1,N1n,wdn),MWn.Of=function(n,t){},MWn.Mf=function(){var n;n=x8(ANt,hQn,25,this.f,15,1),this.d=new eg(n),this.a=new QK(n)},MWn.Nf=function(n,t,e,i,r,c){var a;a=BB(xq(c[n][t].j,e),11),r.c==a&&r.c.i.c==r.d.i.c&&++this.e[n]},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c[n]=this.c[n]|i.k==(uSn(),Cut)},MWn.Qf=function(n,t,e,i){var r;(r=BB(xq(i[n][t].j,e),11)).p=this.f++,r.g.c.length+r.e.c.length>1&&(r.j==(kUn(),oCt)?this.b[n]=!0:r.j==ICt&&n>0&&(this.b[n-1]=!0))},MWn.f=0,vX(L1n,"AllCrossingsCounter",1798),wAn(587,1,{},mrn),MWn.b=0,MWn.d=0,vX(L1n,"BinaryIndexedTree",587),wAn(524,1,{},QK),vX(L1n,"CrossingsCounter",524),wAn(1906,1,MYn,Vd),MWn.ue=function(n,t){return Xq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$0$Type",1906),wAn(1907,1,MYn,Qd),MWn.ue=function(n,t){return Wq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$1$Type",1907),wAn(1908,1,MYn,Yd),MWn.ue=function(n,t){return Vq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$2$Type",1908),wAn(1909,1,MYn,Jd),MWn.ue=function(n,t){return Qq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$3$Type",1909),wAn(1910,1,lVn,Zd),MWn.td=function(n){p7(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$4$Type",1910),wAn(1911,1,DVn,ng),MWn.Mb=function(n){return yC(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$5$Type",1911),wAn(1912,1,lVn,tg),MWn.td=function(n){mC(this,n)},vX(L1n,"CrossingsCounter/lambda$6$Type",1912),wAn(1913,1,lVn,ZP),MWn.td=function(n){var t;hH(),d3(this.b,(t=this.a,BB(n,11),t))},vX(L1n,"CrossingsCounter/lambda$7$Type",1913),wAn(826,1,qYn,xc),MWn.Lb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},vX(L1n,"CrossingsCounter/lambda$8$Type",826),wAn(1905,1,{},eg),vX(L1n,"HyperedgeCrossingsCounter",1905),wAn(467,1,{35:1,467:1},DR),MWn.wd=function(n){return vgn(this,BB(n,467))},MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0;var Fmt=vX(L1n,"HyperedgeCrossingsCounter/Hyperedge",467);wAn(362,1,{35:1,362:1},qV),MWn.wd=function(n){return l$n(this,BB(n,362))},MWn.b=0,MWn.c=0;var Bmt,Hmt,qmt=vX(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner",362);wAn(523,22,{3:1,35:1,22:1,523:1},JP);var Gmt,zmt,Umt,Xmt,Wmt,Vmt=Ben(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Unt,XY,SF);wAn(1405,1,E3n,lf),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?zmt:null},MWn.pf=function(n,t){ljn(this,BB(n,37),t)},vX(C3n,"InteractiveNodePlacer",1405),wAn(1406,1,E3n,ff),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Umt:null},MWn.pf=function(n,t){jmn(this,BB(n,37),t)},vX(C3n,"LinearSegmentsNodePlacer",1406),wAn(257,1,{35:1,257:1},rm),MWn.wd=function(n){return uj(this,BB(n,257))},MWn.Fb=function(n){var t;return!!cL(n,257)&&(t=BB(n,257),this.b==t.b)},MWn.Hb=function(){return this.b},MWn.Ib=function(){return"ls"+LMn(this.e)},MWn.a=0,MWn.b=0,MWn.c=-1,MWn.d=-1,MWn.g=0;var Qmt,Ymt=vX(C3n,"LinearSegmentsNodePlacer/LinearSegment",257);wAn(1408,1,E3n,_G),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Qmt:null},MWn.pf=function(n,t){SXn(this,BB(n,37),t)},MWn.b=0,MWn.g=0,vX(C3n,"NetworkSimplexPlacer",1408),wAn(1427,1,MYn,Dc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"NetworkSimplexPlacer/0methodref$compare$Type",1427),wAn(1429,1,MYn,Rc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"NetworkSimplexPlacer/1methodref$compare$Type",1429),wAn(649,1,{649:1},nI);var Jmt=vX(C3n,"NetworkSimplexPlacer/EdgeRep",649);wAn(401,1,{401:1},GV),MWn.b=!1;var Zmt,nyt,tyt,eyt=vX(C3n,"NetworkSimplexPlacer/NodeRep",401);wAn(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},um),vX(C3n,"NetworkSimplexPlacer/Path",508),wAn(1409,1,{},Kc),MWn.Kb=function(n){return BB(n,17).d.i.k},vX(C3n,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),wAn(1410,1,DVn,_c),MWn.Mb=function(n){return BB(n,267)==(uSn(),Put)},vX(C3n,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),wAn(1411,1,{},Fc),MWn.Kb=function(n){return BB(n,17).d.i},vX(C3n,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),wAn(1412,1,DVn,ig),MWn.Mb=function(n){return HD(tdn(BB(n,10)))},vX(C3n,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),wAn(1413,1,DVn,Bc),MWn.Mb=function(n){return hq(BB(n,11))},vX(C3n,"NetworkSimplexPlacer/lambda$0$Type",1413),wAn(1414,1,lVn,tI),MWn.td=function(n){D$(this.a,this.b,BB(n,11))},vX(C3n,"NetworkSimplexPlacer/lambda$1$Type",1414),wAn(1423,1,lVn,rg),MWn.td=function(n){WIn(this.a,BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$10$Type",1423),wAn(1424,1,{},Hc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$11$Type",1424),wAn(1425,1,lVn,cg),MWn.td=function(n){BDn(this.a,BB(n,10))},vX(C3n,"NetworkSimplexPlacer/lambda$12$Type",1425),wAn(1426,1,{},qc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(C3n,"NetworkSimplexPlacer/lambda$13$Type",1426),wAn(1428,1,{},Gc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(C3n,"NetworkSimplexPlacer/lambda$15$Type",1428),wAn(1430,1,DVn,zc),MWn.Mb=function(n){return BZ(),BB(n,401).c.k==(uSn(),Iut)},vX(C3n,"NetworkSimplexPlacer/lambda$17$Type",1430),wAn(1431,1,DVn,Uc),MWn.Mb=function(n){return BZ(),BB(n,401).c.j.c.length>1},vX(C3n,"NetworkSimplexPlacer/lambda$18$Type",1431),wAn(1432,1,lVn,zV),MWn.td=function(n){cwn(this.c,this.b,this.d,this.a,BB(n,401))},MWn.c=0,MWn.d=0,vX(C3n,"NetworkSimplexPlacer/lambda$19$Type",1432),wAn(1415,1,{},Xc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$2$Type",1415),wAn(1433,1,lVn,ag),MWn.td=function(n){N$(this.a,BB(n,11))},MWn.a=0,vX(C3n,"NetworkSimplexPlacer/lambda$20$Type",1433),wAn(1434,1,{},Wc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$21$Type",1434),wAn(1435,1,lVn,ug),MWn.td=function(n){dL(this.a,BB(n,10))},vX(C3n,"NetworkSimplexPlacer/lambda$22$Type",1435),wAn(1436,1,DVn,Vc),MWn.Mb=function(n){return HD(n)},vX(C3n,"NetworkSimplexPlacer/lambda$23$Type",1436),wAn(1437,1,{},Qc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$24$Type",1437),wAn(1438,1,DVn,og),MWn.Mb=function(n){return EO(this.a,BB(n,10))},vX(C3n,"NetworkSimplexPlacer/lambda$25$Type",1438),wAn(1439,1,lVn,eI),MWn.td=function(n){MPn(this.a,this.b,BB(n,10))},vX(C3n,"NetworkSimplexPlacer/lambda$26$Type",1439),wAn(1440,1,DVn,Yc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$27$Type",1440),wAn(1441,1,DVn,Jc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$28$Type",1441),wAn(1442,1,{},sg),MWn.Ce=function(n,t){return sL(this.a,BB(n,29),BB(t,29))},vX(C3n,"NetworkSimplexPlacer/lambda$29$Type",1442),wAn(1416,1,{},Zc),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(C3n,"NetworkSimplexPlacer/lambda$3$Type",1416),wAn(1417,1,DVn,na),MWn.Mb=function(n){return BZ(),t2(BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$4$Type",1417),wAn(1418,1,lVn,hg),MWn.td=function(n){iBn(this.a,BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$5$Type",1418),wAn(1419,1,{},ta),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$6$Type",1419),wAn(1420,1,DVn,ea),MWn.Mb=function(n){return BZ(),BB(n,10).k==(uSn(),Iut)},vX(C3n,"NetworkSimplexPlacer/lambda$7$Type",1420),wAn(1421,1,{},ia),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(hbn(BB(n,10)).a.Kc(),new h))))},vX(C3n,"NetworkSimplexPlacer/lambda$8$Type",1421),wAn(1422,1,DVn,ra),MWn.Mb=function(n){return BZ(),UH(BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$9$Type",1422),wAn(1404,1,E3n,If),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Zmt:null},MWn.pf=function(n,t){kHn(BB(n,37),t)},vX(C3n,"SimpleNodePlacer",1404),wAn(180,1,{180:1},qKn),MWn.Ib=function(){var n;return n="",this.c==(gJ(),tyt)?n+=aJn:this.c==nyt&&(n+=cJn),this.o==(oZ(),ryt)?n+=pJn:this.o==cyt?n+="UP":n+="BALANCED",n},vX($3n,"BKAlignedLayout",180),wAn(516,22,{3:1,35:1,22:1,516:1},cI);var iyt,ryt,cyt,ayt=Ben($3n,"BKAlignedLayout/HDirection",516,Unt,VY,PF);wAn(515,22,{3:1,35:1,22:1,515:1},rI);var uyt,oyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,vyt,myt,yyt,kyt,jyt,Eyt,Tyt,Myt,Syt=Ben($3n,"BKAlignedLayout/VDirection",515,Unt,QY,IF);wAn(1634,1,{},iI),vX($3n,"BKAligner",1634),wAn(1637,1,{},Jyn),vX($3n,"BKCompactor",1637),wAn(654,1,{654:1},ca),MWn.a=0,vX($3n,"BKCompactor/ClassEdge",654),wAn(458,1,{458:1},cm),MWn.a=null,MWn.b=0,vX($3n,"BKCompactor/ClassNode",458),wAn(1407,1,E3n,jC),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?oyt:null},MWn.pf=function(n,t){rWn(this,BB(n,37),t)},MWn.d=!1,vX($3n,"BKNodePlacer",1407),wAn(1635,1,{},aa),MWn.d=0,vX($3n,"NeighborhoodInformation",1635),wAn(1636,1,MYn,fg),MWn.ue=function(n,t){return Mtn(this,BB(n,46),BB(t,46))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($3n,"NeighborhoodInformation/NeighborComparator",1636),wAn(808,1,{}),vX($3n,"ThresholdStrategy",808),wAn(1763,808,{},dm),MWn.bg=function(n,t,e){return this.a.o==(oZ(),cyt)?RQn:KQn},MWn.cg=function(){},vX($3n,"ThresholdStrategy/NullThresholdStrategy",1763),wAn(579,1,{579:1},aI),MWn.c=!1,MWn.d=!1,vX($3n,"ThresholdStrategy/Postprocessable",579),wAn(1764,808,{},gm),MWn.bg=function(n,t,e){var i,r,c;return r=t==e,i=this.a.a[e.p]==t,r||i?(c=n,this.a.c,gJ(),r&&(c=THn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=THn(this,e,!1)),c):n},MWn.cg=function(){for(var n,t,e;0!=this.d.b;)(t=cFn(this,e=BB(PJ(this.d),579))).a&&(n=t.a,(qy(this.a.f[this.a.g[e.b.p].p])||b5(n)||n.c.i.c!=n.d.i.c)&&(b$n(this,e)||rA(this.e,e)));for(;0!=this.e.a.c.length;)b$n(this,BB(thn(this.e),579))},vX($3n,"ThresholdStrategy/SimpleThresholdStrategy",1764),wAn(635,1,{635:1,246:1,234:1},ua),MWn.Kf=function(){return Tan(this)},MWn.Xf=function(){return Tan(this)},vX(L3n,"EdgeRouterFactory",635),wAn(1458,1,E3n,Cf),MWn.Yf=function(n){return Uxn(BB(n,37))},MWn.pf=function(n,t){DHn(BB(n,37),t)},vX(L3n,"OrthogonalEdgeRouter",1458),wAn(1451,1,E3n,EC),MWn.Yf=function(n){return Ejn(BB(n,37))},MWn.pf=function(n,t){OUn(this,BB(n,37),t)},vX(L3n,"PolylineEdgeRouter",1451),wAn(1452,1,qYn,oa),MWn.Lb=function(n){return Qan(BB(n,10))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return Qan(BB(n,10))},vX(L3n,"PolylineEdgeRouter/1",1452),wAn(1809,1,DVn,sa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$0$Type",1809),wAn(1810,1,{},ha),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$1$Type",1810),wAn(1811,1,DVn,fa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$2$Type",1811),wAn(1812,1,{},la),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$3$Type",1812),wAn(1813,1,{},ba),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$4$Type",1813),wAn(1814,1,{},wa),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$5$Type",1814),wAn(112,1,{35:1,112:1},Fan),MWn.wd=function(n){return oj(this,BB(n,112))},MWn.Fb=function(n){var t;return!!cL(n,112)&&(t=BB(n,112),this.g==t.g)},MWn.Hb=function(){return this.g},MWn.Ib=function(){var n,t,e,i;for(n=new lN("{"),i=new Wb(this.n);i.a<i.c.c.length;)null==(t=gyn((e=BB(n0(i),11)).i))&&(t="n"+AK(e.i)),n.a+=""+t,i.a<i.c.c.length&&(n.a+=",");return n.a+="}",n.a},MWn.a=0,MWn.b=0,MWn.c=NaN,MWn.d=0,MWn.g=0,MWn.i=0,MWn.o=0,MWn.s=NaN,vX(N3n,"HyperEdgeSegment",112),wAn(129,1,{129:1},zZ),MWn.Ib=function(){return this.a+"->"+this.b+" ("+wx(this.c)+")"},MWn.d=0,vX(N3n,"HyperEdgeSegmentDependency",129),wAn(520,22,{3:1,35:1,22:1,520:1},uI);var Pyt,Iyt,Cyt,Oyt,Ayt,$yt,Lyt,Nyt,xyt=Ben(N3n,"HyperEdgeSegmentDependency/DependencyType",520,Unt,WY,CF);wAn(1815,1,{},lg),vX(N3n,"HyperEdgeSegmentSplitter",1815),wAn(1816,1,{},zj),MWn.a=0,MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/AreaRating",1816),wAn(329,1,{329:1},kB),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"HyperEdgeSegmentSplitter/FreeArea",329),wAn(1817,1,MYn,ja),MWn.ue=function(n,t){return OK(BB(n,112),BB(t,112))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(N3n,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),wAn(1818,1,lVn,XV),MWn.td=function(n){n4(this.a,this.d,this.c,this.b,BB(n,112))},MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),wAn(1819,1,{},Ea),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),wAn(1820,1,{},Ta),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),wAn(1821,1,{},Ma),MWn.Fe=function(n){return Gy(MD(n))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),wAn(655,1,{},fX),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"OrthogonalRoutingGenerator",655),wAn(1638,1,{},Sa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$0$Type",1638),wAn(1639,1,{},Pa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$1$Type",1639),wAn(661,1,{}),vX(x3n,"BaseRoutingDirectionStrategy",661),wAn(1807,661,{},pm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xI(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xI(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xI(w,a=t+b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xI(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),SCt},MWn.gg=function(){return kUn(),sCt},vX(x3n,"NorthToSouthRoutingStrategy",1807),wAn(1808,661,{},vm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xI(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xI(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xI(w,a=t-b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xI(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),sCt},MWn.gg=function(){return kUn(),SCt},vX(x3n,"SouthToNorthRoutingStrategy",1808),wAn(1806,661,{},mm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).b,e.Math.abs(l-g)>lZn&&(c=n,r=new xI(a=f,l),DH(u.a,r),F_n(this,u,c,r,!0),(b=n.r)&&(r=new xI(a,w=Gy(MD(Dpn(b.e,0)))),DH(u.a,r),F_n(this,u,c,r,!0),c=b,r=new xI(a=t+b.o*i,w),DH(u.a,r),F_n(this,u,c,r,!0)),r=new xI(a,g),DH(u.a,r),F_n(this,u,c,r,!0)))},MWn.eg=function(n){return n.i.n.b+n.n.b+n.a.b},MWn.fg=function(){return kUn(),oCt},MWn.gg=function(){return kUn(),ICt},vX(x3n,"WestToEastRoutingStrategy",1806),wAn(813,1,{},oBn),MWn.Ib=function(){return LMn(this.a)},MWn.b=0,MWn.c=!1,MWn.d=!1,MWn.f=0,vX(R3n,"NubSpline",813),wAn(407,1,{407:1},Exn,wJ),vX(R3n,"NubSpline/PolarCP",407),wAn(1453,1,E3n,hyn),MWn.Yf=function(n){return rTn(BB(n,37))},MWn.pf=function(n,t){cXn(this,BB(n,37),t)},vX(R3n,"SplineEdgeRouter",1453),wAn(268,1,{268:1},S6),MWn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},MWn.c=0,vX(R3n,"SplineEdgeRouter/Dependency",268),wAn(455,22,{3:1,35:1,22:1,455:1},oI);var Dyt,Ryt,Kyt,_yt,Fyt,Byt=Ben(R3n,"SplineEdgeRouter/SideToProcess",455,Unt,YY,OF);wAn(1454,1,DVn,ya),MWn.Mb=function(n){return gxn(),!BB(n,128).o},vX(R3n,"SplineEdgeRouter/lambda$0$Type",1454),wAn(1455,1,{},ma),MWn.Ge=function(n){return gxn(),BB(n,128).v+1},vX(R3n,"SplineEdgeRouter/lambda$1$Type",1455),wAn(1456,1,lVn,sI),MWn.td=function(n){iq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$2$Type",1456),wAn(1457,1,lVn,hI),MWn.td=function(n){rq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$3$Type",1457),wAn(128,1,{35:1,128:1},tIn,hqn),MWn.wd=function(n){return sj(this,BB(n,128))},MWn.b=0,MWn.e=!1,MWn.f=0,MWn.g=0,MWn.j=!1,MWn.k=!1,MWn.n=0,MWn.o=!1,MWn.p=!1,MWn.q=!1,MWn.s=0,MWn.u=0,MWn.v=0,MWn.F=0,vX(R3n,"SplineSegment",128),wAn(459,1,{459:1},ka),MWn.a=0,MWn.b=!1,MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=0,vX(R3n,"SplineSegment/EdgeInformation",459),wAn(1234,1,{},da),vX(H3n,iZn,1234),wAn(1235,1,MYn,ga),MWn.ue=function(n,t){return CCn(BB(n,135),BB(t,135))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H3n,rZn,1235),wAn(1233,1,{},AE),vX(H3n,"MrTree",1233),wAn(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},fI),MWn.Kf=function(){return ACn(this)},MWn.Xf=function(){return ACn(this)};var Hyt,qyt=Ben(H3n,"TreeLayoutPhases",393,Unt,j3,AF);wAn(1130,209,NJn,_R),MWn.Ze=function(n,t){var e,i,r,c,a,u;for(qy(TD(ZAn(n,(IAn(),Ikt))))||jJ(new Tw((GM(),new Dy(n)))),qan(a=new P6,n),hon(a,(qqn(),skt),n),v_n(n,a,u=new xp),W_n(n,a,u),c=a,i=new Wb(r=x_n(this.a,c));i.a<i.c.c.length;)e=BB(n0(i),135),WEn(this.b,e,mcn(t,1/r.c.length));Czn(c=tWn(r))},vX(H3n,"TreeLayoutProvider",1130),wAn(1847,1,pVn,pa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/1",1847),wAn(1848,1,pVn,va),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/2",1848),wAn(502,134,{3:1,502:1,94:1,134:1}),MWn.g=0,vX(q3n,"TGraphElement",502),wAn(188,502,{3:1,188:1,502:1,94:1,134:1},UQ),MWn.Ib=function(){return this.b&&this.c?g0(this.b)+"->"+g0(this.c):"e_"+nsn(this)},vX(q3n,"TEdge",188),wAn(135,134,{3:1,135:1,94:1,134:1},P6),MWn.Ib=function(){var n,t,e,i,r;for(r=null,i=spn(this.b,0);i.b!=i.d.c;)r+=(null==(e=BB(b3(i),86)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=spn(this.a,0);t.b!=t.d.c;)r+=((n=BB(b3(t),188)).b&&n.c?g0(n.b)+"->"+g0(n.c):"e_"+nsn(n))+"\n";return r};var Gyt=vX(q3n,"TGraph",135);wAn(633,502,{3:1,502:1,633:1,94:1,134:1}),vX(q3n,"TShape",633),wAn(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},csn),MWn.Ib=function(){return g0(this)};var zyt,Uyt,Xyt,Wyt,Vyt,Qyt,Yyt=vX(q3n,"TNode",86);wAn(255,1,pVn,bg),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new wg(spn(this.a.d,0))},vX(q3n,"TNode/2",255),wAn(358,1,QWn,wg),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(b3(this.a),188).c},MWn.Ob=function(){return EE(this.a)},MWn.Qb=function(){mtn(this.a)},vX(q3n,"TNode/2/1",358),wAn(1840,1,n1n,KR),MWn.pf=function(n,t){xFn(this,BB(n,135),t)},vX(G3n,"FanProcessor",1840),wAn(327,22,{3:1,35:1,22:1,327:1,234:1},lI),MWn.Kf=function(){switch(this.g){case 0:return new Qm;case 1:return new KR;case 2:return new Oa;case 3:return new Ia;case 4:return new $a;case 5:return new La;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Jyt,Zyt,nkt,tkt,ekt,ikt,rkt,ckt,akt,ukt,okt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,vkt,mkt,ykt,kkt,jkt,Ekt,Tkt,Mkt,Skt,Pkt,Ikt,Ckt,Okt,Akt,$kt,Lkt,Nkt,xkt,Dkt,Rkt,Kkt,_kt=Ben(G3n,S1n,327,Unt,r9,$F);wAn(1843,1,n1n,Ia),MWn.pf=function(n,t){u$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"LevelHeightProcessor",1843),wAn(1844,1,pVn,Ca),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"LevelHeightProcessor/1",1844),wAn(1841,1,n1n,Oa),MWn.pf=function(n,t){QPn(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NeighborsProcessor",1841),wAn(1842,1,pVn,Aa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"NeighborsProcessor/1",1842),wAn(1845,1,n1n,$a),MWn.pf=function(n,t){a$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NodePositionProcessor",1845),wAn(1839,1,n1n,Qm),MWn.pf=function(n,t){ZHn(this,BB(n,135))},vX(G3n,"RootProcessor",1839),wAn(1846,1,n1n,La),MWn.pf=function(n,t){dln(BB(n,135))},vX(G3n,"Untreeifyer",1846),wAn(851,1,QYn,Pf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X3n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),kkt),(PPn(),gMt)),qkt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,W3n),""),"Search Order"),"Which search order to use when computing a spanning tree."),mkt),gMt),Jkt),nbn(hMt)))),KGn((new Sf,n))},vX(V3n,"MrTreeMetaDataProvider",851),wAn(994,1,QYn,Sf),MWn.Qe=function(n){KGn(n)},vX(V3n,"MrTreeOptions",994),wAn(995,1,{},Na),MWn.$e=function(){return new _R},MWn._e=function(n){},vX(V3n,"MrTreeOptions/MrtreeFactory",995),wAn(480,22,{3:1,35:1,22:1,480:1},bI);var Fkt,Bkt,Hkt,qkt=Ben(V3n,"OrderWeighting",480,Unt,ZY,LF);wAn(425,22,{3:1,35:1,22:1,425:1},wI);var Gkt,zkt,Ukt,Xkt,Wkt,Vkt,Qkt,Ykt,Jkt=Ben(V3n,"TreeifyingOrder",425,Unt,JY,xF);wAn(1459,1,E3n,pf),MWn.Yf=function(n){return BB(n,135),zkt},MWn.pf=function(n,t){ycn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),wAn(1460,1,E3n,vf),MWn.Yf=function(n){return BB(n,135),Ukt},MWn.pf=function(n,t){fIn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),wAn(1461,1,E3n,gf),MWn.Yf=function(n){return BB(n,135),Xkt},MWn.pf=function(n,t){nRn(this,BB(n,135),t)},MWn.a=0,vX("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),wAn(1462,1,E3n,mf),MWn.Yf=function(n){return BB(n,135),Wkt},MWn.pf=function(n,t){xkn(BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462),wAn(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},dI),MWn.Kf=function(){return bwn(this)},MWn.Xf=function(){return bwn(this)};var Zkt,njt,tjt,ejt,ijt=Ben(J3n,"RadialLayoutPhases",495,Unt,nJ,NF);wAn(1131,209,NJn,OE),MWn.Ze=function(n,t){var e,i,r;if(OTn(t,"Radial layout",EIn(this,n).c.length),qy(TD(ZAn(n,(Uyn(),Ajt))))||jJ(new Tw((GM(),new Dy(n)))),r=uTn(n),Ypn(n,(wD(),Vkt),r),!r)throw Hp(new _y("The given graph is not a tree!"));for(0==(e=Gy(MD(ZAn(n,Djt))))&&(e=fCn(n)),Ypn(n,Djt,e),i=new Wb(EIn(this,n));i.a<i.c.c.length;)BB(n0(i),51).pf(n,mcn(t,1));HSn(t)},vX(J3n,"RadialLayoutProvider",1131),wAn(549,1,MYn,CE),MWn.ue=function(n,t){return DRn(this.a,this.b,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=0,MWn.b=0,vX(J3n,"RadialUtil/lambda$0$Type",549),wAn(1375,1,n1n,Da),MWn.pf=function(n,t){dGn(BB(n,33),t)},vX(t4n,"CalculateGraphSize",1375),wAn(442,22,{3:1,35:1,22:1,442:1,234:1},gI),MWn.Kf=function(){switch(this.g){case 0:return new Ba;case 1:return new xa;case 2:return new Da;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var rjt,cjt,ajt,ujt=Ben(t4n,S1n,442,Unt,R1,DF);wAn(645,1,{}),MWn.e=1,MWn.g=0,vX(e4n,"AbstractRadiusExtensionCompaction",645),wAn(1772,645,{},gD),MWn.hg=function(n){var t,e,i,r,c,a,u,o,s;for(this.c=BB(ZAn(n,(wD(),Vkt)),33),eb(this,this.c),this.d=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(o=BB(ZAn(n,Mjt),19))&&tb(this,o.a),ib(this,(kW(u=MD(ZAn(n,(sWn(),LPt)))),u)),s=wDn(this.c),this.d&&this.d.lg(s),vKn(this,s),a=new Jy(Pun(Gk(UOt,1),i4n,33,0,[this.c])),e=0;e<2;e++)for(t=0;t<s.c.length;t++)r=new Jy(Pun(Gk(UOt,1),i4n,33,0,[(l1(t,s.c.length),BB(s.c[t],33))])),c=t<s.c.length-1?(l1(t+1,s.c.length),BB(s.c[t+1],33)):(l1(0,s.c.length),BB(s.c[0],33)),i=0==t?BB(xq(s,s.c.length-1),33):(l1(t-1,s.c.length),BB(s.c[t-1],33)),ZTn(this,(l1(t,s.c.length),BB(s.c[t],33),a),i,c,r)},vX(e4n,"AnnulusWedgeCompaction",1772),wAn(1374,1,n1n,xa),MWn.pf=function(n,t){bjn(BB(n,33),t)},vX(e4n,"GeneralCompactor",1374),wAn(1771,645,{},Ra),MWn.hg=function(n){var t,e,i,r;e=BB(ZAn(n,(wD(),Vkt)),33),this.f=e,this.b=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(r=BB(ZAn(n,Mjt),19))&&tb(this,r.a),ib(this,(kW(i=MD(ZAn(n,(sWn(),LPt)))),i)),t=wDn(e),this.b&&this.b.lg(t),vPn(this,t)},MWn.a=0,vX(e4n,"RadialCompaction",1771),wAn(1779,1,{},Ka),MWn.ig=function(n){var t,e,i,r,c,a;for(this.a=n,t=0,i=0,c=new Wb(a=wDn(n));c.a<c.c.c.length;)for(r=BB(n0(c),33),e=++i;e<a.c.length;e++)YFn(this,r,(l1(e,a.c.length),BB(a.c[e],33)))&&(t+=1);return t},vX(r4n,"CrossingMinimizationPosition",1779),wAn(1777,1,{},_a),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f,l,b,w,d;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),f=(o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+o.g/2,l=o.j+o.f/2,c=n.i+n.g/2,a=n.j+n.f/2,(b=new Gj).a=f-c,b.b=l-a,Ukn(u=new xI(b.a,b.b),n.g,n.f),b.a-=u.a,b.b-=u.b,c=f-b.a,a=l-b.b,Ukn(s=new xI(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,w=(f=c+b.a)-c,d=(l=a+b.b)-a,r+=e.Math.sqrt(w*w+d*d);return r},vX(r4n,"EdgeLengthOptimization",1777),wAn(1778,1,{},Fa),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),u=(a=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+a.g/2,o=a.j+a.f/2,c=BB(ZAn(a,(sWn(),gPt)),8),s=u-(n.i+c.a+n.g/2),f=o-(n.j+c.b+n.f),r+=e.Math.sqrt(s*s+f*f);return r},vX(r4n,"EdgeLengthPositionOptimization",1778),wAn(1373,645,n1n,Ba),MWn.pf=function(n,t){fLn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1373),wAn(426,22,{3:1,35:1,22:1,426:1},pI);var ojt,sjt,hjt,fjt,ljt=Ben(a4n,"AnnulusWedgeCriteria",426,Unt,tJ,RF);wAn(380,22,{3:1,35:1,22:1,380:1},vI);var bjt,wjt,djt,gjt,pjt,vjt,mjt,yjt,kjt,jjt,Ejt,Tjt,Mjt,Sjt,Pjt,Ijt,Cjt,Ojt,Ajt,$jt,Ljt,Njt,xjt,Djt,Rjt,Kjt,_jt,Fjt,Bjt,Hjt,qjt,Gjt=Ben(a4n,FJn,380,Unt,K1,KF);wAn(852,1,QYn,yf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,u4n),""),"Order ID"),"The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly."),iln(0)),(PPn(),vMt)),Att),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,o4n),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,s4n),""),"Compaction"),"With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately."),gjt),gMt),Gjt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,h4n),""),"Compaction Step Size"),"Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration."),iln(1)),vMt),Att),nbn(hMt)))),a2(n,h4n,s4n,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,f4n),""),"Sorter"),"Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates."),jjt),gMt),Yjt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,l4n),""),"Annulus Wedge Criteria"),"Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals."),Tjt),gMt),ljt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,b4n),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),vjt),gMt),Vjt),nbn(hMt)))),tUn((new kf,n))},vX(a4n,"RadialMetaDataProvider",852),wAn(996,1,QYn,kf),MWn.Qe=function(n){tUn(n)},vX(a4n,"RadialOptions",996),wAn(997,1,{},Ha),MWn.$e=function(){return new OE},MWn._e=function(n){},vX(a4n,"RadialOptions/RadialFactory",997),wAn(340,22,{3:1,35:1,22:1,340:1},mI);var zjt,Ujt,Xjt,Wjt,Vjt=Ben(a4n,"RadialTranslationStrategy",340,Unt,E3,_F);wAn(293,22,{3:1,35:1,22:1,293:1},yI);var Qjt,Yjt=Ben(a4n,"SortingStrategy",293,Unt,F1,FF);wAn(1449,1,E3n,qa),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){SLn(this,BB(n,33),t)},MWn.c=0,vX("org.eclipse.elk.alg.radial.p1position","EadesRadial",1449),wAn(1775,1,{},Ga),MWn.jg=function(n){return Upn(n)},vX(d4n,"AnnulusWedgeByLeafs",1775),wAn(1776,1,{},za),MWn.jg=function(n){return VEn(this,n)},vX(d4n,"AnnulusWedgeByNodeSpace",1776),wAn(1450,1,E3n,Ua),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){bEn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1450),wAn(811,1,{},Jm),MWn.kg=function(n){},MWn.lg=function(n){nv(this,n)},vX(g4n,"IDSorter",811),wAn(1774,1,MYn,Xa),MWn.ue=function(n,t){return Qrn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(g4n,"IDSorter/lambda$0$Type",1774),wAn(1773,1,{},Arn),MWn.kg=function(n){c2(this,n)},MWn.lg=function(n){n.dc()||(this.e||c2(this,nG(BB(n.Xb(0),33))),nv(this.e,n))},vX(g4n,"PolarCoordinateSorter",1773),wAn(1136,209,NJn,Wa),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;if(OTn(t,"Rectangle Packing",1),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),i=Gy(MD(ZAn(n,(W$n(),lEt)))),w=BB(ZAn(n,PEt),381),p=qy(TD(ZAn(n,yEt))),y=qy(TD(ZAn(n,SEt))),f=qy(TD(ZAn(n,gEt))),k=BB(ZAn(n,IEt),116),m=Gy(MD(ZAn(n,$Et))),r=qy(TD(ZAn(n,AEt))),l=qy(TD(ZAn(n,pEt))),g=qy(TD(ZAn(n,vEt))),T=Gy(MD(ZAn(n,LEt))),!n.a&&(n.a=new eU(UOt,n,10,11)),Trn(E=n.a),g){for(b=new Np,o=new AL(E);o.e!=o.i.gc();)P8(a=BB(kpn(o),33),dEt)&&(b.c[b.c.length]=a);for(s=new Wb(b);s.a<s.c.c.length;)snn(E,a=BB(n0(s),33));for(SQ(),m$(b,new Va),h=new Wb(b);h.a<h.c.c.length;)a=BB(n0(h),33),j=BB(ZAn(a,dEt),19).a,sln(E,j=e.Math.min(j,E.i),a);for(d=0,u=new AL(E);u.e!=u.i.gc();)Ypn(a=BB(kpn(u),33),wEt,iln(d)),++d}(v=XPn(n)).a-=k.b+k.c,v.b-=k.d+k.a,v.a,T<0||T<v.a?(c=OKn(new jB(i,w,p),E,m,k),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt))):c=new eq(i,T,0,(YLn(),_Et)),v.a+=k.b+k.c,v.b+=k.d+k.a,y||(Trn(E),c=kzn(new m3(i,f,l,r,m),E,e.Math.max(v.a,c.c),v,t,n,k)),pan(E,k),KUn(n,c.c+(k.b+k.c),c.b+(k.d+k.a),!1,!0),qy(TD(ZAn(n,MEt)))||jJ(new Tw((GM(),new Dy(n)))),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),HSn(t)},vX(y4n,"RectPackingLayoutProvider",1136),wAn(1137,1,MYn,Va),MWn.ue=function(n,t){return wsn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y4n,"RectPackingLayoutProvider/lambda$0$Type",1137),wAn(1256,1,{},jB),MWn.a=0,MWn.c=!1,vX(k4n,"AreaApproximation",1256);var Jjt,Zjt,nEt,tEt=bq(k4n,"BestCandidateFilter");wAn(638,1,{526:1},Qa),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=RQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.min(a,(u.c+(i.b+i.c))*(u.b+(i.d+i.a)));for(c=new Wb(n);c.a<c.c.c.length;)((r=BB(n0(c),220)).c+(i.b+i.c))*(r.b+(i.d+i.a))==a&&(s.c[s.c.length]=r);return s},vX(k4n,"AreaFilter",638),wAn(639,1,{526:1},Ya),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(o=new Np,s=RQn,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),220),s=e.Math.min(s,e.Math.abs((a.c+(i.b+i.c))/(a.b+(i.d+i.a))-t));for(c=new Wb(n);c.a<c.c.c.length;)r=BB(n0(c),220),e.Math.abs((r.c+(i.b+i.c))/(r.b+(i.d+i.a))-t)==s&&(o.c[o.c.length]=r);return o},vX(k4n,"AspectRatioFilter",639),wAn(637,1,{526:1},Ja),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=KQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.max(a,Yq(u.c+(i.b+i.c),u.b+(i.d+i.a),u.a));for(c=new Wb(n);c.a<c.c.c.length;)Yq((r=BB(n0(c),220)).c+(i.b+i.c),r.b+(i.d+i.a),r.a)==a&&(s.c[s.c.length]=r);return s},vX(k4n,"ScaleMeasureFilter",637),wAn(381,22,{3:1,35:1,22:1,381:1},kI);var eEt,iEt,rEt,cEt,aEt,uEt,oEt,sEt,hEt,fEt,lEt,bEt,wEt,dEt,gEt,pEt,vEt,mEt,yEt,kEt,jEt,EEt,TEt,MEt,SEt,PEt,IEt,CEt,OEt,AEt,$Et,LEt,NEt=Ben(j4n,"OptimizationGoal",381,Unt,_1,BF);wAn(856,1,QYn,Of),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,E4n),""),"Optimization Goal"),"Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored."),sEt),(PPn(),gMt)),NEt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,T4n),""),"Shift Last Placed."),"When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces."),(hN(),!0)),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,M4n),""),"Current position of a node in the order of nodes"),"The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,S4n),""),"Desired index of node"),"The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,P4n),""),"Only Area Approximation"),"If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,I4n),""),"Compact Rows"),"Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,C4n),""),"Fit Aspect Ratio"),"Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion."),!1),wMt),ktt),nbn(sMt)))),a2(n,C4n,A4n,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,O4n),""),"Target Width"),"Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding."),-1),dMt),Ptt),nbn(sMt)))),NXn((new Af,n))},vX(j4n,"RectPackingMetaDataProvider",856),wAn(1004,1,QYn,Af),MWn.Qe=function(n){NXn(n)},vX(j4n,"RectPackingOptions",1004),wAn(1005,1,{},Za),MWn.$e=function(){return new Wa},MWn._e=function(n){},vX(j4n,"RectPackingOptions/RectpackingFactory",1005),wAn(1257,1,{},m3),MWn.a=0,MWn.b=!1,MWn.c=0,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=0,vX("org.eclipse.elk.alg.rectpacking.seconditeration","RowFillingAndCompaction",1257),wAn(187,1,{187:1},asn),MWn.a=0,MWn.c=!1,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.k=!1,MWn.o=RQn,MWn.p=RQn,MWn.r=0,MWn.s=0,MWn.t=0,vX(L4n,"Block",187),wAn(211,1,{211:1},RJ),MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockRow",211),wAn(443,1,{443:1},KJ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockStack",443),wAn(220,1,{220:1},eq,awn),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0;var xEt,DEt,REt,KEt,_Et,FEt=vX(L4n,"DrawingData",220);wAn(355,22,{3:1,35:1,22:1,355:1},jI);var BEt,HEt,qEt,GEt,zEt=Ben(L4n,"DrawingDataDescriptor",355,Unt,N5,HF);wAn(200,1,{200:1},x0),MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0,vX(L4n,"RectRow",200),wAn(756,1,{},Ehn),MWn.j=0,vX(x4n,g1n,756),wAn(1245,1,{},nu),MWn.Je=function(n){return W8(n.a,n.b)},vX(x4n,p1n,1245),wAn(1246,1,{},dg),MWn.Je=function(n){return p6(this.a,n)},vX(x4n,v1n,1246),wAn(1247,1,{},gg),MWn.Je=function(n){return Opn(this.a,n)},vX(x4n,m1n,1247),wAn(1248,1,{},pg),MWn.Je=function(n){return uon(this.a,n)},vX(x4n,"ElkGraphImporter/lambda$3$Type",1248),wAn(1249,1,{},vg),MWn.Je=function(n){return iOn(this.a,n)},vX(x4n,y1n,1249),wAn(1133,209,NJn,$E),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h,f;for(P8(n,(MMn(),kTt))&&(f=SD(ZAn(n,(Bvn(),qTt))),(c=XRn(cin(),f))&&BB(sJ(c.f),209).Ze(n,mcn(t,1))),Ypn(n,gTt,($6(),ZEt)),Ypn(n,pTt,($Sn(),cTt)),Ypn(n,vTt,(Lun(),WTt)),a=BB(ZAn(n,(Bvn(),_Tt)),19).a,OTn(t,"Overlap removal",1),qy(TD(ZAn(n,KTt))),o=new mg(u=new Rv),e=GXn(i=new Ehn,n),s=!0,r=0;r<a&&s;){if(qy(TD(ZAn(n,FTt)))){if(u.a.$b(),HPn(new C$(o),e.i),0==u.a.gc())break;e.e=u}for(h2(this.b),IU(this.b,(Pbn(),HEt),(OM(),GTt)),IU(this.b,qEt,e.g),IU(this.b,GEt,(CM(),QEt)),this.a=$qn(this.b,e),h=new Wb(this.a);h.a<h.c.c.length;)BB(n0(h),51).pf(e,mcn(t,1));cjn(i,e),s=qy(TD(mMn(e,(Xcn(),Yrt)))),++r}DGn(i,e),HSn(t)},vX(x4n,"OverlapRemovalLayoutProvider",1133),wAn(1134,1,{},mg),vX(x4n,"OverlapRemovalLayoutProvider/lambda$0$Type",1134),wAn(437,22,{3:1,35:1,22:1,437:1},EI);var UEt,XEt,WEt=Ben(x4n,"SPOrEPhases",437,Unt,B1,qF);wAn(1255,1,{},LE),vX(x4n,"ShrinkTree",1255),wAn(1135,209,NJn,Zm),MWn.Ze=function(n,t){var e,i,r,c;P8(n,(MMn(),kTt))&&(c=SD(ZAn(n,kTt)),(r=XRn(cin(),c))&&BB(sJ(r.f),209).Ze(n,mcn(t,1))),e=GXn(i=new Ehn,n),$Ln(this.a,e,mcn(t,1)),DGn(i,e)},vX(x4n,"ShrinkTreeLayoutProvider",1135),wAn(300,134,{3:1,300:1,94:1,134:1},DJ),MWn.c=!1,vX("org.eclipse.elk.alg.spore.graph","Graph",300),wAn(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},LM),MWn.Kf=function(){return esn(this)},MWn.Xf=function(){return esn(this)};var VEt,QEt,YEt=Ben(D4n,FJn,482,Unt,KV,GF);wAn(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},vD),MWn.Kf=function(){return new ru},MWn.Xf=function(){return new ru};var JEt,ZEt,nTt,tTt=Ben(D4n,"OverlapRemovalStrategy",551,Unt,_V,zF);wAn(430,22,{3:1,35:1,22:1,430:1},TI);var eTt,iTt,rTt,cTt,aTt,uTt,oTt=Ben(D4n,"RootSelection",430,Unt,iJ,UF);wAn(316,22,{3:1,35:1,22:1,316:1},MI);var sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,vTt,mTt,yTt,kTt,jTt,ETt,TTt,MTt,STt,PTt,ITt,CTt,OTt,ATt,$Tt,LTt,NTt,xTt,DTt,RTt,KTt,_Tt,FTt,BTt,HTt,qTt,GTt,zTt=Ben(D4n,"SpanningTreeCostFunction",316,Unt,A5,XF);wAn(1002,1,QYn,Ef),MWn.Qe=function(n){yHn(n)},vX(D4n,"SporeCompactionOptions",1002),wAn(1003,1,{},tu),MWn.$e=function(){return new Zm},MWn._e=function(n){},vX(D4n,"SporeCompactionOptions/SporeCompactionFactory",1003),wAn(855,1,QYn,Tf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,K4n),""),"Underlying Layout Algorithm"),"A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,q4n),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),DTt),gMt),VTt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,_4n),W4n),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),NTt),gMt),YTt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,F4n),W4n),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),$Tt),gMt),zTt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,B4n),W4n),"Root node for spanning tree construction"),"The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen."),null),yMt),Qtt),nbn(hMt)))),a2(n,B4n,H4n,ITt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,H4n),W4n),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),OTt),gMt),oTt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,G4n),E2n),"Compaction Strategy"),"This option defines how the compaction is applied."),ETt),gMt),YEt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,z4n),E2n),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,U4n),V4n),"Upper limit for iterations of overlap removal"),null),iln(64)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X4n),V4n),"Whether to run a supplementary scanline overlap check."),null),!0),wMt),ktt),nbn(hMt)))),AKn((new Mf,n)),yHn((new Ef,n))},vX(D4n,"SporeMetaDataProvider",855),wAn(VVn,1,QYn,Mf),MWn.Qe=function(n){AKn(n)},vX(D4n,"SporeOverlapRemovalOptions",VVn),wAn(1001,1,{},eu),MWn.$e=function(){return new $E},MWn._e=function(n){},vX(D4n,"SporeOverlapRemovalOptions/SporeOverlapFactory",1001),wAn(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},XW),MWn.Kf=function(){return isn(this)},MWn.Xf=function(){return isn(this)};var UTt,XTt,WTt,VTt=Ben(D4n,"StructureExtractionStrategy",530,Unt,FV,WF);wAn(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},SI),MWn.Kf=function(){return wwn(this)},MWn.Xf=function(){return wwn(this)};var QTt,YTt=Ben(D4n,"TreeConstructionStrategy",429,Unt,eJ,VF);wAn(1443,1,E3n,iu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){Tjn(BB(n,300),t)},vX(Y4n,"DelaunayTriangulationPhase",1443),wAn(1444,1,lVn,yg),MWn.td=function(n){WB(this.a,BB(n,65).a)},vX(Y4n,"DelaunayTriangulationPhase/lambda$0$Type",1444),wAn(783,1,E3n,Vm),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){this.ng(BB(n,300),t)},MWn.ng=function(n,t){var e;OTn(t,"Minimum spanning tree construction",1),e=n.d?n.d.a:BB(xq(n.i,0),65).a,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,e,n.b)),n),HSn(t)},vX(J4n,"MinSTPhase",783),wAn(1446,783,E3n,ym),MWn.ng=function(n,t){var e,i;OTn(t,"Maximum spanning tree construction",1),e=new kg(n),i=n.d?n.d.c:BB(xq(n.i,0),65).c,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,i,e)),n),HSn(t)},vX(J4n,"MaxSTPhase",1446),wAn(1447,1,{},kg),MWn.Je=function(n){return CI(this.a,n)},vX(J4n,"MaxSTPhase/lambda$0$Type",1447),wAn(1445,1,lVn,jg),MWn.td=function(n){R$(this.a,BB(n,65))},vX(J4n,"MinSTPhase/lambda$0$Type",1445),wAn(785,1,E3n,ru),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){WTn(this,BB(n,300),t)},MWn.a=!1,vX(Z4n,"GrowTreePhase",785),wAn(786,1,lVn,EB),MWn.td=function(n){eun(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"GrowTreePhase/lambda$0$Type",786),wAn(1448,1,E3n,cu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){tmn(this,BB(n,300),t)},vX(Z4n,"ShrinkTreeCompactionPhase",1448),wAn(784,1,lVn,TB),MWn.td=function(n){lAn(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"ShrinkTreeCompactionPhase/lambda$0$Type",784);var JTt,ZTt,nMt=bq(y3n,"IGraphElementVisitor");wAn(860,1,{527:1},R0),MWn.og=function(n){var t;qan(t=hRn(this,n),BB(RX(this.b,n),94)),yLn(this,n,t)},vX(xJn,"LayoutConfigurator",860);var tMt,eMt,iMt,rMt=bq(xJn,"LayoutConfigurator/IPropertyHolderOptionFilter");wAn(932,1,{1933:1},au),MWn.pg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$0$Type",932),wAn(933,1,{1933:1},uu),MWn.pg=function(n,t){return SE(n,t)},vX(xJn,"LayoutConfigurator/lambda$1$Type",933),wAn(931,1,{831:1},ou),MWn.qg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$2$Type",931),wAn(934,1,DVn,LI),MWn.Mb=function(n){return YW(this.a,this.b,BB(n,1933))},vX(xJn,"LayoutConfigurator/lambda$3$Type",934),wAn(858,1,{},su),vX(xJn,"RecursiveGraphLayoutEngine",858),wAn(296,60,BVn,kv,rk),vX(xJn,"UnsupportedConfigurationException",296),wAn(453,60,BVn,ck),vX(xJn,"UnsupportedGraphException",453),wAn(754,1,{}),vX(y3n,"AbstractRandomListAccessor",754),wAn(500,754,{},INn),MWn.rg=function(){return null},MWn.d=!0,MWn.e=!0,MWn.f=0,vX(t5n,"AlgorithmAssembler",500),wAn(1236,1,DVn,hu),MWn.Mb=function(n){return!!BB(n,123)},vX(t5n,"AlgorithmAssembler/lambda$0$Type",1236),wAn(1237,1,{},Eg),MWn.Kb=function(n){return bj(this.a,BB(n,123))},vX(t5n,"AlgorithmAssembler/lambda$1$Type",1237),wAn(1238,1,DVn,fu),MWn.Mb=function(n){return!!BB(n,80)},vX(t5n,"AlgorithmAssembler/lambda$2$Type",1238),wAn(1239,1,lVn,Tg),MWn.td=function(n){Jcn(this.a,BB(n,80))},vX(t5n,"AlgorithmAssembler/lambda$3$Type",1239),wAn(1240,1,lVn,NI),MWn.td=function(n){Dx(this.a,this.b,BB(n,234))},vX(t5n,"AlgorithmAssembler/lambda$4$Type",1240),wAn(1355,1,MYn,lu),MWn.ue=function(n,t){return FQ(BB(n,234),BB(t,234))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t5n,"EnumBasedFactoryComparator",1355),wAn(80,754,{80:1},B2),MWn.rg=function(){return new Rv},MWn.a=0,vX(t5n,"LayoutProcessorConfiguration",80),wAn(1013,1,{527:1},$f),MWn.og=function(n){nan(eMt,new Mg(n))},vX(zYn,"DeprecatedLayoutOptionReplacer",1013),wAn(1014,1,lVn,bu),MWn.td=function(n){N9(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1014),wAn(1015,1,lVn,wu),MWn.td=function(n){Twn(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1015),wAn(1016,1,{},Mg),MWn.Od=function(n,t){Rx(this.a,BB(n,146),BB(t,38))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1016),wAn(149,1,{686:1,149:1},MTn),MWn.Fb=function(n){return j5(this,n)},MWn.sg=function(){return this.b},MWn.tg=function(){return this.c},MWn.ne=function(){return this.e},MWn.Hb=function(){return vvn(this.c)},MWn.Ib=function(){return"Layout Algorithm: "+this.c};var cMt,aMt=vX(zYn,"LayoutAlgorithmData",149);wAn(263,1,{},du),vX(zYn,"LayoutAlgorithmData/Builder",263),wAn(1017,1,{527:1},gu),MWn.og=function(n){cL(n,239)&&!qy(TD(n.We((sWn(),zSt))))&&KFn(BB(n,33))},vX(zYn,"LayoutAlgorithmResolver",1017),wAn(229,1,{686:1,229:1},UZ),MWn.Fb=function(n){return!!cL(n,229)&&mK(this.b,BB(n,229).b)},MWn.sg=function(){return this.a},MWn.tg=function(){return this.b},MWn.ne=function(){return this.d},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return"Layout Type: "+this.b},vX(zYn,"LayoutCategoryData",229),wAn(344,1,{},pu),vX(zYn,"LayoutCategoryData/Builder",344),wAn(867,1,{},ORn),vX(zYn,"LayoutMetaDataService",867),wAn(868,1,{},UX),vX(zYn,"LayoutMetaDataService/Registry",868),wAn(478,1,{478:1},vu),vX(zYn,"LayoutMetaDataService/Registry/Triple",478),wAn(869,1,e5n,mu),MWn.ug=function(){return new Gj},vX(zYn,"LayoutMetaDataService/lambda$0$Type",869),wAn(870,1,i5n,yu),MWn.vg=function(n){return B$(BB(n,8))},vX(zYn,"LayoutMetaDataService/lambda$1$Type",870),wAn(879,1,e5n,ku),MWn.ug=function(){return new Np},vX(zYn,"LayoutMetaDataService/lambda$10$Type",879),wAn(880,1,i5n,ju),MWn.vg=function(n){return new t_(BB(n,12))},vX(zYn,"LayoutMetaDataService/lambda$11$Type",880),wAn(881,1,e5n,Eu),MWn.ug=function(){return new YT},vX(zYn,"LayoutMetaDataService/lambda$12$Type",881),wAn(882,1,i5n,Tu),MWn.vg=function(n){return zB(BB(n,68))},vX(zYn,"LayoutMetaDataService/lambda$13$Type",882),wAn(883,1,e5n,Mu),MWn.ug=function(){return new Rv},vX(zYn,"LayoutMetaDataService/lambda$14$Type",883),wAn(884,1,i5n,Su),MWn.vg=function(n){return JQ(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$15$Type",884),wAn(885,1,e5n,Pu),MWn.ug=function(){return new fA},vX(zYn,"LayoutMetaDataService/lambda$16$Type",885),wAn(886,1,i5n,Iu),MWn.vg=function(n){return S4(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$17$Type",886),wAn(887,1,e5n,Cu),MWn.ug=function(){return new zv},vX(zYn,"LayoutMetaDataService/lambda$18$Type",887),wAn(888,1,i5n,Ou),MWn.vg=function(n){return GB(BB(n,208))},vX(zYn,"LayoutMetaDataService/lambda$19$Type",888),wAn(871,1,e5n,Au),MWn.ug=function(){return new km},vX(zYn,"LayoutMetaDataService/lambda$2$Type",871),wAn(872,1,i5n,$u),MWn.vg=function(n){return new Kj(BB(n,74))},vX(zYn,"LayoutMetaDataService/lambda$3$Type",872),wAn(873,1,e5n,Lu),MWn.ug=function(){return new lm},vX(zYn,"LayoutMetaDataService/lambda$4$Type",873),wAn(874,1,i5n,Nu),MWn.vg=function(n){return new A_(BB(n,142))},vX(zYn,"LayoutMetaDataService/lambda$5$Type",874),wAn(875,1,e5n,Du),MWn.ug=function(){return new bm},vX(zYn,"LayoutMetaDataService/lambda$6$Type",875),wAn(876,1,i5n,Ru),MWn.vg=function(n){return new O_(BB(n,116))},vX(zYn,"LayoutMetaDataService/lambda$7$Type",876),wAn(877,1,e5n,Ku),MWn.ug=function(){return new Yu},vX(zYn,"LayoutMetaDataService/lambda$8$Type",877),wAn(878,1,i5n,_u),MWn.vg=function(n){return new rnn(BB(n,373))},vX(zYn,"LayoutMetaDataService/lambda$9$Type",878);var uMt,oMt,sMt,hMt,fMt,lMt=bq(CJn,"IProperty");wAn(23,1,{35:1,686:1,23:1,146:1},bPn),MWn.wd=function(n){return gL(this,BB(n,146))},MWn.Fb=function(n){return cL(n,23)?mK(this.f,BB(n,23).f):cL(n,146)&&mK(this.f,BB(n,146).tg())},MWn.wg=function(){var n;if(cL(this.b,4)){if(null==(n=Jdn(this.b)))throw Hp(new Fy(o5n+this.f+"'. Make sure it's type is registered with the "+(ED(bAt),bAt.k)+c5n));return n}return this.b},MWn.sg=function(){return this.d},MWn.tg=function(){return this.f},MWn.ne=function(){return this.i},MWn.Hb=function(){return vvn(this.f)},MWn.Ib=function(){return"Layout Option: "+this.f},vX(zYn,"LayoutOptionData",23),wAn(24,1,{},Fu),vX(zYn,"LayoutOptionData/Builder",24),wAn(175,22,{3:1,35:1,22:1,175:1},AI);var bMt,wMt,dMt,gMt,pMt,vMt,mMt,yMt,kMt,jMt=Ben(zYn,"LayoutOptionData/Target",175,Unt,O5,QF);wAn(277,22,{3:1,35:1,22:1,277:1},$I);var EMt,TMt,MMt,SMt=Ben(zYn,"LayoutOptionData/Type",277,Unt,_tn,YF);wAn(110,1,{110:1},bA,UV,gY),MWn.Fb=function(n){var t;return!(null==n||!cL(n,110))&&(t=BB(n,110),cV(this.c,t.c)&&cV(this.d,t.d)&&cV(this.b,t.b)&&cV(this.a,t.a))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d,this.b,this.a]))},MWn.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"ElkRectangle",110),wAn(8,1,{3:1,4:1,8:1,414:1},Gj,XZ,xI,wA),MWn.Fb=function(n){return nrn(this,n)},MWn.Hb=function(){return VO(this.a)+byn(VO(this.b))},MWn.Jf=function(n){var t,e,i;for(e=0;e<n.length&&xhn((b1(e,n.length),n.charCodeAt(e)),o1n);)++e;for(t=n.length;t>0&&xhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(e>=t)throw Hp(new _y("The given string does not contain any numbers."));if(2!=(i=kKn(n.substr(e,t-e),",|;|\r|\n")).length)throw Hp(new _y("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=bSn(RMn(i[0])),this.b=bSn(RMn(i[1]))}catch(r){throw cL(r=lun(r),127)?Hp(new _y(h1n+r)):Hp(r)}},MWn.Ib=function(){return"("+this.a+","+this.b+")"},MWn.a=0,MWn.b=0;var PMt=vX(f1n,"KVector",8);wAn(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},km,Kj,Ux),MWn.Pc=function(){return Vsn(this)},MWn.Jf=function(n){var t,e,i,r,c;e=kKn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),yQ(this);try{for(t=0,r=0,i=0,c=0;t<e.length;)null!=e[t]&&RMn(e[t]).length>0&&(r%2==0?i=bSn(e[t]):c=bSn(e[t]),r>0&&r%2!=0&&DH(this,new xI(i,c)),++r),++t}catch(a){throw cL(a=lun(a),127)?Hp(new _y("The given string does not match the expected format for vectors."+a)):Hp(a)}},MWn.Ib=function(){var n,t,e;for(n=new lN("("),t=spn(this,0);t.b!=t.d.c;)oO(n,(e=BB(b3(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var IMt,CMt,OMt,AMt,$Mt,LMt,NMt=vX(f1n,"KVectorChain",74);wAn(248,22,{3:1,35:1,22:1,248:1},DI);var xMt,DMt,RMt,KMt,_Mt,FMt,BMt,HMt,qMt,GMt,zMt,UMt,XMt,WMt,VMt,QMt,YMt,JMt,ZMt,nSt=Ben(h5n,"Alignment",248,Unt,J8,JF);wAn(979,1,QYn,Lf),MWn.Qe=function(n){G_n(n)},vX(h5n,"BoxLayouterOptions",979),wAn(980,1,{},xu),MWn.$e=function(){return new Gu},MWn._e=function(n){},vX(h5n,"BoxLayouterOptions/BoxFactory",980),wAn(291,22,{3:1,35:1,22:1,291:1},RI);var tSt,eSt,iSt,rSt,cSt,aSt,uSt,oSt,sSt,hSt,fSt,lSt,bSt,wSt,dSt,gSt,pSt,vSt,mSt,ySt,kSt,jSt,ESt,TSt,MSt,SSt,PSt,ISt,CSt,OSt,ASt,$St,LSt,NSt,xSt,DSt,RSt,KSt,_St,FSt,BSt,HSt,qSt,GSt,zSt,USt,XSt,WSt,VSt,QSt,YSt,JSt,ZSt,nPt,tPt,ePt,iPt,rPt,cPt,aPt,uPt,oPt,sPt,hPt,fPt,lPt,bPt,wPt,dPt,gPt,pPt,vPt,mPt,yPt,kPt,jPt,EPt,TPt,MPt,SPt,PPt,IPt,CPt,OPt,APt,$Pt,LPt,NPt,xPt,DPt,RPt,KPt,_Pt,FPt,BPt,HPt,qPt=Ben(h5n,"ContentAlignment",291,Unt,Y8,ZF);wAn(684,1,QYn,Nf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,w5n),""),"Layout Algorithm"),"Select a specific layout algorithm."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,d5n),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),mMt),aMt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,W2n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),rSt),gMt),nSt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,VJn),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,g5n),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,u3n),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),fSt),pMt),qPt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X2n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,J2n),""),TJn),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),wSt),gMt),WPt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,y2n),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),mSt),gMt),oIt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,A4n),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,d2n),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),TSt),gMt),SIt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,QJn),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),WSt),mMt),_ut),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,jZn),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,m3n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,MZn),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,EZn),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),oPt),gMt),aCt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,g3n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),mMt),PMt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[fMt,oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,pZn),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),vMt),Att),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,yZn),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,kZn),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,o3n),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),ASt),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,f3n),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,l3n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,p5n),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),mMt),KNt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,p3n),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),LSt),mMt),Eut),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,z2n),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),wMt),ktt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,v5n),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),dMt),Ptt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,m5n),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,y5n),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),iln(100)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,k5n),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,j5n),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),iln(4e3)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,E5n),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),iln(400)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,T5n),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,M5n),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,S5n),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,P5n),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,b5n),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),oSt),gMt),cOt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,L2n),k2n),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,N2n),k2n),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,XJn),k2n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,x2n),k2n),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,mZn),k2n),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,D2n),k2n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,R2n),k2n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,F2n),k2n),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,K2n),k2n),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,_2n),k2n),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,vZn),k2n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,B2n),k2n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,H2n),k2n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,q2n),k2n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),mMt),hOt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,v3n),k2n),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),DPt),mMt),Eut),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,d3n),A5n),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),vMt),Att),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),a2(n,d3n,w3n,JSt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,w3n),A5n),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),QSt),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Z2n),$5n),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),xSt),mMt),_ut),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,IZn),$5n),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),RSt),pMt),GIt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,e3n),L5n),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),nPt),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,i3n),L5n),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,r3n),L5n),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,c3n),L5n),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,a3n),L5n),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,PZn),N5n),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),_St),pMt),YCt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,SZn),N5n),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),GSt),pMt),iOt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,BZn),N5n),"Node Size Minimum"),"The minimal size to which a node can be reduced."),HSt),mMt),PMt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Y2n),N5n),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,s3n),A2n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),pSt),gMt),nIt),nbn(oMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,TZn),A2n),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),wMt),ktt),nbn(oMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,I5n),"font"),"Font Name"),"Font name used for a label."),yMt),Qtt),nbn(oMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,C5n),"font"),"Font Size"),"Font size used for a label."),vMt),Att),nbn(oMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,b3n),x5n),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),mMt),PMt),nbn(fMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,h3n),x5n),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),vMt),Att),nbn(fMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,U2n),x5n),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),dPt),gMt),FCt),nbn(fMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,G2n),x5n),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),dMt),Ptt),nbn(fMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,CZn),D5n),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),lPt),pMt),CCt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,n3n),D5n),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,t3n),D5n),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,V2n),R5n),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Q2n),R5n),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wMt),ktt),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,WJn),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),dMt),Ptt),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,O5n),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),kSt),gMt),yIt),nbn(uMt)))),xM(n,new UZ(yj(jj(kj(new pu,w1n),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.orthogonal"),"Orthogonal"),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.'))),xM(n,new UZ(yj(jj(kj(new pu,gZn),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),xM(n,new UZ(yj(jj(kj(new pu,Y3n),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),xM(n,new UZ(yj(jj(kj(new pu,w4n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),bKn((new xf,n)),G_n((new Lf,n)),RDn((new Df,n))},vX(h5n,"CoreOptions",684),wAn(103,22,{3:1,35:1,22:1,103:1},KI);var GPt,zPt,UPt,XPt,WPt=Ben(h5n,TJn,103,Unt,I5,eB);wAn(272,22,{3:1,35:1,22:1,272:1},_I);var VPt,QPt,YPt,JPt,ZPt,nIt=Ben(h5n,"EdgeLabelPlacement",272,Unt,q1,iB);wAn(218,22,{3:1,35:1,22:1,218:1},FI);var tIt,eIt,iIt,rIt,cIt,aIt,uIt,oIt=Ben(h5n,"EdgeRouting",218,Unt,S3,rB);wAn(312,22,{3:1,35:1,22:1,312:1},BI);var sIt,hIt,fIt,lIt,bIt,wIt,dIt,gIt,pIt,vIt,mIt,yIt=Ben(h5n,"EdgeType",312,Unt,a9,cB);wAn(977,1,QYn,xf),MWn.Qe=function(n){bKn(n)},vX(h5n,"FixedLayouterOptions",977),wAn(978,1,{},Vu),MWn.$e=function(){return new Hu},MWn._e=function(n){},vX(h5n,"FixedLayouterOptions/FixedFactory",978),wAn(334,22,{3:1,35:1,22:1,334:1},HI);var kIt,jIt,EIt,TIt,MIt,SIt=Ben(h5n,"HierarchyHandling",334,Unt,H1,aB);wAn(285,22,{3:1,35:1,22:1,285:1},qI);var PIt,IIt,CIt,OIt,AIt,$It,LIt,NIt,xIt,DIt,RIt=Ben(h5n,"LabelSide",285,Unt,M3,uB);wAn(93,22,{3:1,35:1,22:1,93:1},GI);var KIt,_It,FIt,BIt,HIt,qIt,GIt=Ben(h5n,"NodeLabelPlacement",93,Unt,ken,oB);wAn(249,22,{3:1,35:1,22:1,249:1},zI);var zIt,UIt,XIt,WIt,VIt,QIt,YIt,JIt=Ben(h5n,"PortAlignment",249,Unt,C5,sB);wAn(98,22,{3:1,35:1,22:1,98:1},UI);var ZIt,nCt,tCt,eCt,iCt,rCt,cCt,aCt=Ben(h5n,"PortConstraints",98,Unt,S8,hB);wAn(273,22,{3:1,35:1,22:1,273:1},XI);var uCt,oCt,sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,vCt,mCt,yCt,kCt,jCt,ECt,TCt,MCt,SCt,PCt,ICt,CCt=Ben(h5n,"PortLabelPlacement",273,Unt,c9,fB);wAn(61,22,{3:1,35:1,22:1,61:1},WI);var OCt,ACt,$Ct,LCt,NCt,xCt,DCt,RCt,KCt,_Ct,FCt=Ben(h5n,"PortSide",61,Unt,h5,wB);wAn(981,1,QYn,Df),MWn.Qe=function(n){RDn(n)},vX(h5n,"RandomLayouterOptions",981),wAn(982,1,{},Qu),MWn.$e=function(){return new no},MWn._e=function(n){},vX(h5n,"RandomLayouterOptions/RandomFactory",982),wAn(374,22,{3:1,35:1,22:1,374:1},VI);var BCt,HCt,qCt,GCt,zCt,UCt,XCt,WCt,VCt,QCt,YCt=Ben(h5n,"SizeConstraint",374,Unt,T3,lB);wAn(259,22,{3:1,35:1,22:1,259:1},QI);var JCt,ZCt,nOt,tOt,eOt,iOt=Ben(h5n,"SizeOptions",259,Unt,Ein,bB);wAn(370,1,{1949:1},Xm),MWn.b=!1,MWn.c=0,MWn.d=-1,MWn.e=null,MWn.f=null,MWn.g=-1,MWn.j=!1,MWn.k=!1,MWn.n=!1,MWn.o=0,MWn.q=0,MWn.r=0,vX(y3n,"BasicProgressMonitor",370),wAn(972,209,NJn,Gu),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h;OTn(t,"Box layout",2),r=zy(MD(ZAn(n,(SMn(),XMt)))),c=BB(ZAn(n,GMt),116),e=qy(TD(ZAn(n,_Mt))),i=qy(TD(ZAn(n,FMt))),0===BB(ZAn(n,RMt),311).g?(u=new t_((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),SQ(),m$(u,new Sg(i)),a=u,o=XPn(n),(null==(s=MD(ZAn(n,DMt)))||(kW(s),s<=0))&&(s=1.3),KUn(n,(h=HUn(a,r,c,o.a,o.b,e,(kW(s),s))).a,h.b,!1,!0)):kqn(n,r,c,e),HSn(t)},vX(y3n,"BoxLayoutProvider",972),wAn(973,1,MYn,Sg),MWn.ue=function(n,t){return hNn(this,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=!1,vX(y3n,"BoxLayoutProvider/1",973),wAn(157,1,{157:1},Gtn,zx),MWn.Ib=function(){return this.c?zRn(this.c):LMn(this.b)},vX(y3n,"BoxLayoutProvider/Group",157),wAn(311,22,{3:1,35:1,22:1,311:1},YI);var rOt,cOt=Ben(y3n,"BoxLayoutProvider/PackingMode",311,Unt,P3,dB);wAn(974,1,MYn,zu),MWn.ue=function(n,t){return DQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$0$Type",974),wAn(975,1,MYn,Uu),MWn.ue=function(n,t){return cQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$1$Type",975),wAn(976,1,MYn,Xu),MWn.ue=function(n,t){return aQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$2$Type",976),wAn(1365,1,{831:1},Wu),MWn.qg=function(n,t){return AM(),!cL(t,160)||SE((Nun(),BB(n,160)),t)},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),wAn(1366,1,lVn,Pg),MWn.td=function(n){Jsn(this.a,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),wAn(1367,1,lVn,qu),MWn.td=function(n){BB(n,94),AM()},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),wAn(1371,1,lVn,Ig),MWn.td=function(n){Orn(this.a,BB(n,94))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),wAn(1369,1,DVn,JI),MWn.Mb=function(n){return Von(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),wAn(1368,1,DVn,ZI),MWn.Mb=function(n){return $x(this.a,this.b,BB(n,831))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),wAn(1370,1,lVn,nC),MWn.td=function(n){Fz(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),wAn(935,1,{},Bu),MWn.Kb=function(n){return yA(n)},MWn.Fb=function(n){return this===n},vX(y3n,"ElkUtil/lambda$0$Type",935),wAn(936,1,lVn,tC),MWn.td=function(n){rOn(this.a,this.b,BB(n,79))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$1$Type",936),wAn(937,1,lVn,eC),MWn.td=function(n){Ey(this.a,this.b,BB(n,202))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$2$Type",937),wAn(938,1,lVn,iC),MWn.td=function(n){t$(this.a,this.b,BB(n,137))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$3$Type",938),wAn(939,1,lVn,Cg),MWn.td=function(n){cq(this.a,BB(n,469))},vX(y3n,"ElkUtil/lambda$4$Type",939),wAn(342,1,{35:1,342:1},$p),MWn.wd=function(n){return vL(this,BB(n,236))},MWn.Fb=function(n){var t;return!!cL(n,342)&&(t=BB(n,342),this.a==t.a)},MWn.Hb=function(){return IJ(this.a)},MWn.Ib=function(){return this.a+" (exclusive)"},MWn.a=0,vX(y3n,"ExclusiveBounds/ExclusiveLowerBound",342),wAn(1138,209,NJn,Hu),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(OTn(t,"Fixed Layout",1),a=BB(ZAn(n,(sWn(),vSt)),218),b=0,w=0,v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();){for(g=BB(kpn(v),33),(T=BB(ZAn(g,(Xsn(),gIt)),8))&&(SA(g,T.a,T.b),BB(ZAn(g,fIt),174).Hc((mdn(),DCt))&&(d=BB(ZAn(g,bIt),8)).a>0&&d.b>0&&KUn(g,d.a,d.b,!0,!0)),b=e.Math.max(b,g.i+g.g),w=e.Math.max(w,g.j+g.f),f=new AL((!g.n&&(g.n=new eU(zOt,g,1,7)),g.n));f.e!=f.i.gc();)o=BB(kpn(f),137),(T=BB(ZAn(o,gIt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,g.i+o.i+o.g),w=e.Math.max(w,g.j+o.j+o.f);for(k=new AL((!g.c&&(g.c=new eU(XOt,g,9,9)),g.c));k.e!=k.i.gc();)for(y=BB(kpn(k),118),(T=BB(ZAn(y,gIt),8))&&SA(y,T.a,T.b),j=g.i+y.i,E=g.j+y.j,b=e.Math.max(b,j+y.g),w=e.Math.max(w,E+y.f),s=new AL((!y.n&&(y.n=new eU(zOt,y,1,7)),y.n));s.e!=s.i.gc();)o=BB(kpn(s),137),(T=BB(ZAn(o,gIt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,j+o.i+o.g),w=e.Math.max(w,E+o.j+o.f);for(c=new oz(ZL(dLn(g).a.Kc(),new h));dAn(c);)l=_Un(i=BB(U5(c),79)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new oz(ZL(wLn(g).a.Kc(),new h));dAn(r);)JJ(PMn(i=BB(U5(r),79)))!=n&&(l=_Un(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(Mbn(),QPt))for(p=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new oz(ZL(dLn(g=BB(kpn(p),33)).a.Kc(),new h));dAn(r);)0==(u=rFn(i=BB(U5(r),79))).b?Ypn(i,OSt,null):Ypn(i,OSt,u);qy(TD(ZAn(n,(Xsn(),lIt))))||KUn(n,b+(m=BB(ZAn(n,wIt),116)).b+m.c,w+m.d+m.a,!0,!0),HSn(t)},vX(y3n,"FixedLayoutProvider",1138),wAn(373,134,{3:1,414:1,373:1,94:1,134:1},Yu,rnn),MWn.Jf=function(n){var t,e,i,r,c,a,u;if(n)try{for(a=kKn(n,";,;"),r=0,c=(i=a).length;r<c;++r){if(t=kKn(i[r],"\\:"),!(e=pGn(cin(),t[0])))throw Hp(new _y("Invalid option id: "+t[0]));if(null==(u=Zqn(e,t[1])))throw Hp(new _y("Invalid option value: "+t[1]));null==u?(!this.q&&(this.q=new xp),v6(this.q,e)):(!this.q&&(this.q=new xp),VW(this.q,e,u))}}catch(o){throw cL(o=lun(o),102)?Hp(new Fsn(o)):Hp(o)}},MWn.Ib=function(){return SD(P4($V((this.q?this.q:(SQ(),SQ(),het)).vc().Oc(),new Ju),x7(new YB,new Z,new W,new V,Pun(Gk(nit,1),$Vn,132,0,[]))))};var aOt,uOt,oOt,sOt,hOt=vX(y3n,"IndividualSpacings",373);wAn(971,1,{},Ju),MWn.Kb=function(n){return RQ(BB(n,42))},vX(y3n,"IndividualSpacings/lambda$0$Type",971),wAn(709,1,{},sG),MWn.c=0,vX(y3n,"InstancePool",709),wAn(1275,1,{},Zu),vX(y3n,"LoggedGraph",1275),wAn(396,22,{3:1,35:1,22:1,396:1},cC);var fOt,lOt,bOt,wOt=Ben(y3n,"LoggedGraph/Type",396,Unt,I3,gB);wAn(46,1,{20:1,46:1},rC),MWn.Jc=function(n){e5(this,n)},MWn.Fb=function(n){var t,e,i;return!!cL(n,46)&&(e=BB(n,46),t=null==this.a?null==e.a:Nfn(this.a,e.a),i=null==this.b?null==e.b:Nfn(this.b,e.b),t&&i)},MWn.Hb=function(){var n,t,e;return n=-65536&(t=null==this.a?0:nsn(this.a)),t&QVn^(-65536&(e=null==this.b?0:nsn(this.b)))>>16&QVn|n^(e&QVn)<<16},MWn.Kc=function(){return new Og(this)},MWn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+Bbn(this.b)+")":null==this.b?"pair("+Bbn(this.a)+",null)":"pair("+Bbn(this.a)+","+Bbn(this.b)+")"},vX(y3n,"Pair",46),wAn(983,1,QWn,Og),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},MWn.Pb=function(){if(!this.c&&!this.b&&null!=this.a.a)return this.b=!0,this.a.a;if(!this.c&&null!=this.a.b)return this.c=!0,this.a.b;throw Hp(new yv)},MWn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),Hp(new dv)},MWn.b=!1,MWn.c=!1,vX(y3n,"Pair/1",983),wAn(448,1,{448:1},VV),MWn.Fb=function(n){return cV(this.a,BB(n,448).a)&&cV(this.c,BB(n,448).c)&&cV(this.d,BB(n,448).d)&&cV(this.b,BB(n,448).b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.a,this.c,this.d,this.b]))},MWn.Ib=function(){return"("+this.a+FWn+this.c+FWn+this.d+FWn+this.b+")"},vX(y3n,"Quadruple",448),wAn(1126,209,NJn,no),MWn.Ze=function(n,t){var e;OTn(t,"Random Layout",1),0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i?(iUn(n,(e=BB(ZAn(n,(vdn(),NCt)),19))&&0!=e.a?new I4(e.a):new sbn,zy(MD(ZAn(n,ACt))),zy(MD(ZAn(n,xCt))),BB(ZAn(n,$Ct),116)),HSn(t)):HSn(t)},vX(y3n,"RandomLayoutProvider",1126),wAn(553,1,{}),MWn.qf=function(){return new xI(this.f.i,this.f.j)},MWn.We=function(n){return EY(n,(sWn(),aPt))?ZAn(this.f,bOt):ZAn(this.f,n)},MWn.rf=function(){return new xI(this.f.g,this.f.f)},MWn.sf=function(){return this.g},MWn.Xe=function(n){return P8(this.f,n)},MWn.tf=function(n){Pen(this.f,n.a),Ien(this.f,n.b)},MWn.uf=function(n){Sen(this.f,n.a),Men(this.f,n.b)},MWn.vf=function(n){this.g=n},MWn.g=0,vX(H5n,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),wAn(554,1,{839:1},Ag),MWn.wf=function(){var n,t;if(!this.b)for(this.b=I2(mV(this.a).i),t=new AL(mV(this.a));t.e!=t.i.gc();)n=BB(kpn(t),137),WB(this.b,new Ry(n));return this.b},MWn.b=null,vX(H5n,"ElkGraphAdapters/ElkEdgeAdapter",554),wAn(301,553,{},Dy),MWn.xf=function(){return eyn(this)},MWn.a=null,vX(H5n,"ElkGraphAdapters/ElkGraphAdapter",301),wAn(630,553,{181:1},Ry),vX(H5n,"ElkGraphAdapters/ElkLabelAdapter",630),wAn(629,553,{680:1},JN),MWn.wf=function(){return nyn(this)},MWn.Af=function(){var n;return!(n=BB(ZAn(this.f,(sWn(),$St)),142))&&(n=new lm),n},MWn.Cf=function(){return tyn(this)},MWn.Ef=function(n){var t;t=new A_(n),Ypn(this.f,(sWn(),$St),t)},MWn.Ff=function(n){Ypn(this.f,(sWn(),XSt),new O_(n))},MWn.yf=function(){return this.d},MWn.zf=function(){var n,t;if(!this.a)for(this.a=new Np,t=new oz(ZL(wLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=new Np,t=new oz(ZL(dLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.c,new Ag(n));return this.c},MWn.Df=function(){return 0!=YQ(BB(this.f,33)).i||qy(TD(BB(this.f,33).We((sWn(),SSt))))},MWn.Gf=function(){_7(this,(GM(),lOt))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(H5n,"ElkGraphAdapters/ElkNodeAdapter",629),wAn(1266,553,{838:1},op),MWn.wf=function(){return kyn(this)},MWn.zf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.f,118).xg().i),t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.f,118).yg().i),t=new AL(BB(this.f,118).yg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.c,new Ag(n));return this.c},MWn.Hf=function(){return BB(BB(this.f,118).We((sWn(),wPt)),61)},MWn.If=function(){var n,t,e,i,r,c,a;for(i=WJ(BB(this.f,118)),e=new AL(BB(this.f,118).yg());e.e!=e.i.gc();)for(a=new AL((!(n=BB(kpn(e),79)).c&&(n.c=new hK(KOt,n,5,8)),n.c));a.e!=a.i.gc();){if(Itn(PTn(c=BB(kpn(a),82)),i))return!0;if(PTn(c)==i&&qy(TD(ZAn(n,(sWn(),PSt)))))return!0}for(t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)for(r=new AL((!(n=BB(kpn(t),79)).b&&(n.b=new hK(KOt,n,4,7)),n.b));r.e!=r.i.gc();)if(Itn(PTn(BB(kpn(r),82)),i))return!0;return!1},MWn.a=null,MWn.b=null,MWn.c=null,vX(H5n,"ElkGraphAdapters/ElkPortAdapter",1266),wAn(1267,1,MYn,to),MWn.ue=function(n,t){return GRn(BB(n,118),BB(t,118))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H5n,"ElkGraphAdapters/PortComparator",1267);var dOt,gOt,pOt,vOt,mOt,yOt,kOt,jOt,EOt,TOt,MOt,SOt,POt,IOt,COt,OOt,AOt,$Ot,LOt=bq(q5n,"EObject"),NOt=bq(G5n,z5n),xOt=bq(G5n,U5n),DOt=bq(G5n,X5n),ROt=bq(G5n,"ElkShape"),KOt=bq(G5n,W5n),_Ot=bq(G5n,V5n),FOt=bq(G5n,Q5n),BOt=bq(q5n,Y5n),HOt=bq(q5n,"EFactory"),qOt=bq(q5n,J5n),GOt=bq(q5n,"EPackage"),zOt=bq(G5n,Z5n),UOt=bq(G5n,n6n),XOt=bq(G5n,t6n);wAn(90,1,e6n),MWn.Jg=function(){return this.Kg(),null},MWn.Kg=function(){return null},MWn.Lg=function(){return this.Kg(),!1},MWn.Mg=function(){return!1},MWn.Ng=function(n){ban(this,n)},vX(i6n,"BasicNotifierImpl",90),wAn(97,90,f6n),MWn.nh=function(){return mA(this)},MWn.Og=function(n,t){return n},MWn.Pg=function(){throw Hp(new pv)},MWn.Qg=function(n){var t;return t=Ivn(BB(itn(this.Tg(),this.Vg()),18)),this.eh().ih(this,t.n,t.f,n)},MWn.Rg=function(n,t){throw Hp(new pv)},MWn.Sg=function(n,t,e){return T_n(this,n,t,e)},MWn.Tg=function(){var n;return this.Pg()&&(n=this.Pg().ck())?n:this.zh()},MWn.Ug=function(){return cAn(this)},MWn.Vg=function(){throw Hp(new pv)},MWn.Wg=function(){var n,t;return!(t=this.ph().dk())&&this.Pg().ik((QM(),t=null==(n=lJ(qFn(this.Tg())))?N$t:new QN(this,n))),t},MWn.Xg=function(n,t){return n},MWn.Yg=function(n){return n.Gj()?n.aj():Awn(this.Tg(),n)},MWn.Zg=function(){var n;return(n=this.Pg())?n.fk():null},MWn.$g=function(){return this.Pg()?this.Pg().ck():null},MWn._g=function(n,t,e){return Zpn(this,n,t,e)},MWn.ah=function(n){return S9(this,n)},MWn.bh=function(n,t){return V5(this,n,t)},MWn.dh=function(){var n;return!!(n=this.Pg())&&n.gk()},MWn.eh=function(){throw Hp(new pv)},MWn.fh=function(){return Ydn(this)},MWn.gh=function(n,t,e,i){return Npn(this,n,t,i)},MWn.hh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Qj(this,this.yh(),t-this.Ah(),n,e)},MWn.ih=function(n,t,e,i){return oJ(this,n,t,i)},MWn.jh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Rj(this,this.yh(),t-this.Ah(),n,e)},MWn.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},MWn.lh=function(n){return vpn(this,n)},MWn.mh=function(n){return ZJ(this,n)},MWn.oh=function(n){return _qn(this,n)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return this.Pg()?this.Pg().ek():null},MWn.rh=function(){return Ydn(this)},MWn.sh=function(n,t){yIn(this,n,t)},MWn.th=function(n){this.ph().hk(n)},MWn.uh=function(n){this.ph().kk(n)},MWn.vh=function(n){this.ph().jk(n)},MWn.wh=function(n,t){var e,i,r,c;return(c=this.Zg())&&n&&(t=_pn(c.Vk(),this,t),c.Zk(this)),(i=this.eh())&&(0!=(gKn(this,this.eh(),this.Vg()).Bb&BQn)?(r=i.fh())&&(n?!c&&r.Zk(this):r.Yk(this)):(t=(e=this.Vg())>=0?this.Qg(t):this.eh().ih(this,-1-e,null,t),t=this.Sg(null,-1,t))),this.uh(n),t},MWn.xh=function(n){var t,e,i,r,c,a,u;if((c=Awn(e=this.Tg(),n))>=(t=this.Ah()))return BB(n,66).Nj().Uj(this,this.yh(),c-t);if(c<=-1){if(!(a=Fqn((CPn(),Z$t),e,n)))throw Hp(new _y(r6n+n.ne()+u6n));if(ZM(),BB(a,66).Oj()||(a=Z1(B7(Z$t,a))),r=BB((i=this.Yg(a))>=0?this._g(i,!0,!0):cOn(this,a,!0),153),(u=a.Zj())>1||-1==u)return BB(BB(r,215).hl(n,!1),76)}else if(n.$j())return BB((i=this.Yg(n))>=0?this._g(i,!1,!0):cOn(this,n,!1),76);return new CC(this,n)},MWn.yh=function(){return Q7(this)},MWn.zh=function(){return(QX(),t$t).S},MWn.Ah=function(){return bX(this.zh())},MWn.Bh=function(n){mPn(this,n)},MWn.Ib=function(){return P$n(this)},vX(l6n,"BasicEObjectImpl",97),wAn(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),MWn.Ch=function(n){return Y7(this)[n]},MWn.Dh=function(n,t){$X(Y7(this),n,t)},MWn.Eh=function(n){$X(Y7(this),n,null)},MWn.Jg=function(){return BB(yan(this,4),126)},MWn.Kg=function(){throw Hp(new pv)},MWn.Lg=function(){return 0!=(4&this.Db)},MWn.Pg=function(){throw Hp(new pv)},MWn.Fh=function(n){hgn(this,2,n)},MWn.Rg=function(n,t){this.Db=t<<16|255&this.Db,this.Fh(n)},MWn.Tg=function(){return jY(this)},MWn.Vg=function(){return this.Db>>16},MWn.Wg=function(){var n;return QM(),null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?N$t:new QN(this,n)},MWn.Mg=function(){return 0==(1&this.Db)},MWn.Zg=function(){return BB(yan(this,128),1935)},MWn.$g=function(){return BB(yan(this,16),26)},MWn.dh=function(){return 0!=(32&this.Db)},MWn.eh=function(){return BB(yan(this,2),49)},MWn.kh=function(){return 0!=(64&this.Db)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return BB(yan(this,64),281)},MWn.th=function(n){hgn(this,16,n)},MWn.uh=function(n){hgn(this,128,n)},MWn.vh=function(n){hgn(this,64,n)},MWn.yh=function(){return fgn(this)},MWn.Db=0,vX(l6n,"MinimalEObjectImpl",114),wAn(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn.Fh=function(n){this.Cb=n},MWn.eh=function(){return this.Cb},vX(l6n,"MinimalEObjectImpl/Container",115),wAn(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Eyn(this,n,t,e)},MWn.jh=function(n,t,e){return eSn(this,n,t,e)},MWn.lh=function(n){return m0(this,n)},MWn.sh=function(n,t){rsn(this,n,t)},MWn.zh=function(){return IXn(),POt},MWn.Bh=function(n){zun(this,n)},MWn.Ve=function(){return lpn(this)},MWn.We=function(n){return ZAn(this,n)},MWn.Xe=function(n){return P8(this,n)},MWn.Ye=function(n,t){return Ypn(this,n,t)},vX(b6n,"EMapPropertyHolderImpl",1985),wAn(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ro),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void jen(this,Gy(MD(t)));case 1:return void Een(this,Gy(MD(t)))}yIn(this,n,t)},MWn.zh=function(){return IXn(),pOt},MWn.Bh=function(n){switch(n){case 0:return void jen(this,0);case 1:return void Een(this,0)}mPn(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (x: ",vE(n,this.a),n.a+=", y: ",vE(n,this.b),n.a+=")",n.a)},MWn.a=0,MWn.b=0,vX(b6n,"ElkBendPointImpl",567),wAn(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return _fn(this,n,t,e)},MWn.hh=function(n,t,e){return FTn(this,n,t,e)},MWn.jh=function(n,t,e){return run(this,n,t,e)},MWn.lh=function(n){return Ean(this,n)},MWn.sh=function(n,t){Gjn(this,n,t)},MWn.zh=function(){return IXn(),kOt},MWn.Bh=function(n){ofn(this,n)},MWn.zg=function(){return this.k},MWn.Ag=function(){return mV(this)},MWn.Ib=function(){return Yln(this)},MWn.k=null,vX(b6n,"ElkGraphElementImpl",723),wAn(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Rbn(this,n,t,e)},MWn.lh=function(n){return fwn(this,n)},MWn.sh=function(n,t){zjn(this,n,t)},MWn.zh=function(){return IXn(),SOt},MWn.Bh=function(n){Dwn(this,n)},MWn.Bg=function(){return this.f},MWn.Cg=function(){return this.g},MWn.Dg=function(){return this.i},MWn.Eg=function(){return this.j},MWn.Fg=function(n,t){MA(this,n,t)},MWn.Gg=function(n,t){SA(this,n,t)},MWn.Hg=function(n){Pen(this,n)},MWn.Ig=function(n){Ien(this,n)},MWn.Ib=function(){return mSn(this)},MWn.f=0,MWn.g=0,MWn.i=0,MWn.j=0,vX(b6n,"ElkShapeImpl",724),wAn(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){return djn(this,n,t,e)},MWn.jh=function(n,t,e){return gjn(this,n,t,e)},MWn.lh=function(n){return Gon(this,n)},MWn.sh=function(n,t){LAn(this,n,t)},MWn.zh=function(){return IXn(),vOt},MWn.Bh=function(n){xpn(this,n)},MWn.xg=function(){return!this.d&&(this.d=new hK(_Ot,this,8,5)),this.d},MWn.yg=function(){return!this.e&&(this.e=new hK(_Ot,this,7,4)),this.e},vX(b6n,"ElkConnectableShapeImpl",725),wAn(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},io),MWn.Qg=function(n){return Mkn(this,n)},MWn._g=function(n,t,e){switch(n){case 3:return XJ(this);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),this.a;case 7:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return hN(),!!nAn(this);case 9:return hN(),!!QCn(this);case 10:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return _fn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Mkn(this,e):this.Cb.ih(this,-1-i,null,e)),VD(this,BB(n,33),e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),Ywn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),Ywn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),Ywn(this.a,n,e)}return FTn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 3:return VD(this,null,e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),_pn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),_pn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),_pn(this.a,n,e)}return run(this,n,t,e)},MWn.lh=function(n){switch(n){case 3:return!!XJ(this);case 4:return!!this.b&&0!=this.b.i;case 5:return!!this.c&&0!=this.c.i;case 6:return!!this.a&&0!=this.a.i;case 7:return!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return nAn(this);case 9:return QCn(this);case 10:return!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return Ean(this,n)},MWn.sh=function(n,t){switch(n){case 3:return void HLn(this,BB(t,33));case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),sqn(this.b),!this.b&&(this.b=new hK(KOt,this,4,7)),void pX(this.b,BB(t,14));case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),sqn(this.c),!this.c&&(this.c=new hK(KOt,this,5,8)),void pX(this.c,BB(t,14));case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),sqn(this.a),!this.a&&(this.a=new eU(FOt,this,6,6)),void pX(this.a,BB(t,14))}Gjn(this,n,t)},MWn.zh=function(){return IXn(),mOt},MWn.Bh=function(n){switch(n){case 3:return void HLn(this,null);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),void sqn(this.b);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),void sqn(this.c);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),void sqn(this.a)}ofn(this,n)},MWn.Ib=function(){return lHn(this)},vX(b6n,"ElkEdgeImpl",352),wAn(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},co),MWn.Qg=function(n){return skn(this,n)},MWn._g=function(n,t,e){switch(n){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new $L(xOt,this,5)),this.a;case 6:return VJ(this);case 7:return t?Pvn(this):this.i;case 8:return t?Svn(this):this.f;case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),this.e;case 11:return this.d}return Eyn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?skn(this,e):this.Cb.ih(this,-1-i,null,e)),QD(this,BB(n,79),e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),Ywn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),Ywn(this.e,n,e)}return BB(itn(BB(yan(this,16),26)||(IXn(),yOt),t),66).Nj().Qj(this,fgn(this),t-bX((IXn(),yOt)),n,e)},MWn.jh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new $L(xOt,this,5)),_pn(this.a,n,e);case 6:return QD(this,null,e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),_pn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),_pn(this.e,n,e)}return eSn(this,n,t,e)},MWn.lh=function(n){switch(n){case 1:return 0!=this.j;case 2:return 0!=this.k;case 3:return 0!=this.b;case 4:return 0!=this.c;case 5:return!!this.a&&0!=this.a.i;case 6:return!!VJ(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&0!=this.g.i;case 10:return!!this.e&&0!=this.e.i;case 11:return null!=this.d}return m0(this,n)},MWn.sh=function(n,t){switch(n){case 1:return void Cen(this,Gy(MD(t)));case 2:return void Aen(this,Gy(MD(t)));case 3:return void Ten(this,Gy(MD(t)));case 4:return void Oen(this,Gy(MD(t)));case 5:return!this.a&&(this.a=new $L(xOt,this,5)),sqn(this.a),!this.a&&(this.a=new $L(xOt,this,5)),void pX(this.a,BB(t,14));case 6:return void FLn(this,BB(t,79));case 7:return void Nin(this,BB(t,82));case 8:return void Lin(this,BB(t,82));case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),sqn(this.g),!this.g&&(this.g=new hK(FOt,this,9,10)),void pX(this.g,BB(t,14));case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),sqn(this.e),!this.e&&(this.e=new hK(FOt,this,10,9)),void pX(this.e,BB(t,14));case 11:return void crn(this,SD(t))}rsn(this,n,t)},MWn.zh=function(){return IXn(),yOt},MWn.Bh=function(n){switch(n){case 1:return void Cen(this,0);case 2:return void Aen(this,0);case 3:return void Ten(this,0);case 4:return void Oen(this,0);case 5:return!this.a&&(this.a=new $L(xOt,this,5)),void sqn(this.a);case 6:return void FLn(this,null);case 7:return void Nin(this,null);case 8:return void Lin(this,null);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),void sqn(this.g);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),void sqn(this.e);case 11:return void crn(this,null)}zun(this,n)},MWn.Ib=function(){return ROn(this)},MWn.b=0,MWn.c=0,MWn.d=null,MWn.j=0,MWn.k=0,vX(b6n,"ElkEdgeSectionImpl",439),wAn(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn._g=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab):U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.oh=function(n){return hUn(this,n)},MWn.sh=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.uh=function(n){hgn(this,128,n)},MWn.zh=function(){return gWn(),b$t},MWn.Bh=function(n){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){this.Bb|=1},MWn.Hh=function(n){return N_n(this,n)},MWn.Bb=0,vX(l6n,"EModelElementImpl",150),wAn(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},Rf),MWn.Ih=function(n,t){return qGn(this,n,t)},MWn.Jh=function(n){var t,e,i,r;if(this.a!=Utn(n)||0!=(256&n.Bb))throw Hp(new _y(m6n+n.zb+g6n));for(e=kY(n);0!=a4(e.a).i;){if(iyn(t=BB(eGn(e,0,cL(r=BB(Wtn(a4(e.a),0),87).c,88)?BB(r,26):(gWn(),d$t)),26)))return BB(i=Utn(t).Nh().Jh(t),49).th(n),i;e=kY(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new fq(n):new jH(n)},MWn.Kh=function(n,t){return xXn(this,n,t)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.a}return U9(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t,e)},MWn.hh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 1:return this.a&&(e=BB(this.a,49).ih(this,4,GOt,e)),Jhn(this,BB(n,235),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 1:return Jhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return O3(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void xMn(this,BB(t,235))}Lbn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t)},MWn.zh=function(){return gWn(),h$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void xMn(this,null)}qfn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},vX(l6n,"EFactoryImpl",704),wAn(k6n,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},ao),MWn.Ih=function(n,t){switch(n.yj()){case 12:return BB(t,146).tg();case 13:return Bbn(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 4:return new uo;case 6:return new jm;case 7:return new Em;case 8:return new io;case 9:return new ro;case 10:return new co;case 11:return new so;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 13:case 12:return null;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(b6n,"ElkGraphFactoryImpl",k6n),wAn(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn.Wg=function(){var n;return null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?(QM(),QM(),N$t):new Wx(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.ne()}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),w$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.ne=function(){return this.zb},MWn.Lh=function(n){Nrn(this,n)},MWn.Ib=function(){return kfn(this)},MWn.zb=null,vX(l6n,"ENamedElementImpl",438),wAn(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},vY),MWn.Qg=function(n){return wkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb;case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?BB(this.Cb,235):null:QJ(this)}return U9(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 4:return this.sb&&(e=BB(this.sb,49).ih(this,1,HOt,e)),jfn(this,BB(n,471),e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),Ywn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),Ywn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?wkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 4:return jfn(this,null,e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),_pn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),_pn(this.vb,n,e);case 7:return T_n(this,null,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.yb;case 3:return null!=this.xb;case 4:return!!this.sb;case 5:return!!this.rb&&0!=this.rb.i;case 6:return!!this.vb&&0!=this.vb.i;case 7:return!!QJ(this)}return O3(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.oh=function(n){return LNn(this,n)||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Drn(this,SD(t));case 3:return void xrn(this,SD(t));case 4:return void iSn(this,BB(t,471));case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),sqn(this.rb),!this.rb&&(this.rb=new Jz(this,HAt,this)),void pX(this.rb,BB(t,14));case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),sqn(this.vb),!this.vb&&(this.vb=new eK(GOt,this,6,7)),void pX(this.vb,BB(t,14))}Lbn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t)},MWn.vh=function(n){var t,e;if(n&&this.rb)for(e=new AL(this.rb);e.e!=e.i.gc();)cL(t=kpn(e),351)&&(BB(t,351).w=null);hgn(this,64,n)},MWn.zh=function(){return gWn(),v$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Drn(this,null);case 3:return void xrn(this,null);case 4:return void iSn(this,null);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),void sqn(this.rb);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),void sqn(this.vb)}qfn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.Gh=function(){Tyn(this)},MWn.Mh=function(){return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb},MWn.Nh=function(){return this.sb},MWn.Oh=function(){return this.ub},MWn.Ph=function(){return this.xb},MWn.Qh=function(){return this.yb},MWn.Rh=function(n){this.ub=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?kfn(this):((n=new fN(kfn(this))).a+=" (nsURI: ",cO(n,this.yb),n.a+=", nsPrefix: ",cO(n,this.xb),n.a+=")",n.a)},MWn.xb=null,MWn.yb=null,vX(l6n,"EPackageImpl",179),wAn(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},sAn),MWn.q=!1,MWn.r=!1;var WOt=!1;vX(b6n,"ElkGraphPackageImpl",555),wAn(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},uo),MWn.Qg=function(n){return hkn(this,n)},MWn._g=function(n,t,e){switch(n){case 7:return YJ(this);case 8:return this.a}return Rbn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?hkn(this,e):this.Cb.ih(this,-1-i,null,e)),VG(this,BB(n,160),e)):FTn(this,n,t,e)},MWn.jh=function(n,t,e){return 7==t?VG(this,null,e):run(this,n,t,e)},MWn.lh=function(n){switch(n){case 7:return!!YJ(this);case 8:return!mK("",this.a)}return fwn(this,n)},MWn.sh=function(n,t){switch(n){case 7:return void CNn(this,BB(t,160));case 8:return void xin(this,SD(t))}zjn(this,n,t)},MWn.zh=function(){return IXn(),jOt},MWn.Bh=function(n){switch(n){case 7:return void CNn(this,null);case 8:return void xin(this,"")}Dwn(this,n)},MWn.Ib=function(){return cPn(this)},MWn.a="",vX(b6n,"ElkLabelImpl",354),wAn(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},jm),MWn.Qg=function(n){return Skn(this,n)},MWn._g=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a;case 11:return JJ(this);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),this.b;case 13:return hN(),!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),Ywn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),Ywn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?Skn(this,e):this.Cb.ih(this,-1-i,null,e)),zR(this,BB(n,33),e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),Ywn(this.b,n,e)}return djn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),_pn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),_pn(this.a,n,e);case 11:return zR(this,null,e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),_pn(this.b,n,e)}return gjn(this,n,t,e)},MWn.lh=function(n){switch(n){case 9:return!!this.c&&0!=this.c.i;case 10:return!!this.a&&0!=this.a.i;case 11:return!!JJ(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Gon(this,n)},MWn.sh=function(n,t){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),sqn(this.c),!this.c&&(this.c=new eU(XOt,this,9,9)),void pX(this.c,BB(t,14));case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),sqn(this.a),!this.a&&(this.a=new eU(UOt,this,10,11)),void pX(this.a,BB(t,14));case 11:return void nNn(this,BB(t,33));case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),sqn(this.b),!this.b&&(this.b=new eU(_Ot,this,12,3)),void pX(this.b,BB(t,14))}LAn(this,n,t)},MWn.zh=function(){return IXn(),EOt},MWn.Bh=function(n){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),void sqn(this.c);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),void sqn(this.a);case 11:return void nNn(this,null);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),void sqn(this.b)}xpn(this,n)},MWn.Ib=function(){return zRn(this)},vX(b6n,"ElkNodeImpl",239),wAn(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Em),MWn.Qg=function(n){return fkn(this,n)},MWn._g=function(n,t,e){return 9==n?WJ(this):Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?fkn(this,e):this.Cb.ih(this,-1-i,null,e)),YD(this,BB(n,33),e)):djn(this,n,t,e)},MWn.jh=function(n,t,e){return 9==t?YD(this,null,e):gjn(this,n,t,e)},MWn.lh=function(n){return 9==n?!!WJ(this):Gon(this,n)},MWn.sh=function(n,t){9!==n?LAn(this,n,t):BLn(this,BB(t,33))},MWn.zh=function(){return IXn(),TOt},MWn.Bh=function(n){9!==n?xpn(this,n):BLn(this,null)},MWn.Ib=function(){return URn(this)},vX(b6n,"ElkPortImpl",186);var VOt=bq(B6n,"BasicEMap/Entry");wAn(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},so),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){Din(this,BB(n,146))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void Din(this,BB(t,146));case 1:return void _in(this,t)}yIn(this,n,t)},MWn.zh=function(){return IXn(),MOt},MWn.Bh=function(n){switch(n){case 0:return void Din(this,null);case 1:return void _in(this,null)}mPn(this,n)},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=n?nsn(n):0),this.a},MWn.dd=function(){return this.c},MWn.Th=function(n){this.a=n},MWn.ed=function(n){var t;return t=this.c,_in(this,n),t},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):(oO(oO(oO(n=new Ik,this.b?this.b.tg():zWn),e1n),kN(this.c)),n.a)},MWn.a=-1,MWn.c=null;var QOt,YOt,JOt,ZOt,nAt,tAt,eAt,iAt,rAt=vX(b6n,"ElkPropertyToValueMapEntryImpl",1092);wAn(984,1,{},lo),vX(G6n,"JsonAdapter",984),wAn(210,60,BVn,ek),vX(G6n,"JsonImportException",210),wAn(857,1,{},dkn),vX(G6n,"JsonImporter",857),wAn(891,1,{},aC),vX(G6n,"JsonImporter/lambda$0$Type",891),wAn(892,1,{},uC),vX(G6n,"JsonImporter/lambda$1$Type",892),wAn(900,1,{},$g),vX(G6n,"JsonImporter/lambda$10$Type",900),wAn(902,1,{},oC),vX(G6n,"JsonImporter/lambda$11$Type",902),wAn(903,1,{},sC),vX(G6n,"JsonImporter/lambda$12$Type",903),wAn(909,1,{},fQ),vX(G6n,"JsonImporter/lambda$13$Type",909),wAn(908,1,{},hQ),vX(G6n,"JsonImporter/lambda$14$Type",908),wAn(904,1,{},hC),vX(G6n,"JsonImporter/lambda$15$Type",904),wAn(905,1,{},fC),vX(G6n,"JsonImporter/lambda$16$Type",905),wAn(906,1,{},lC),vX(G6n,"JsonImporter/lambda$17$Type",906),wAn(907,1,{},bC),vX(G6n,"JsonImporter/lambda$18$Type",907),wAn(912,1,{},Lg),vX(G6n,"JsonImporter/lambda$19$Type",912),wAn(893,1,{},Ng),vX(G6n,"JsonImporter/lambda$2$Type",893),wAn(910,1,{},xg),vX(G6n,"JsonImporter/lambda$20$Type",910),wAn(911,1,{},Dg),vX(G6n,"JsonImporter/lambda$21$Type",911),wAn(915,1,{},Rg),vX(G6n,"JsonImporter/lambda$22$Type",915),wAn(913,1,{},Kg),vX(G6n,"JsonImporter/lambda$23$Type",913),wAn(914,1,{},_g),vX(G6n,"JsonImporter/lambda$24$Type",914),wAn(917,1,{},Fg),vX(G6n,"JsonImporter/lambda$25$Type",917),wAn(916,1,{},Bg),vX(G6n,"JsonImporter/lambda$26$Type",916),wAn(918,1,lVn,wC),MWn.td=function(n){E9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$27$Type",918),wAn(919,1,lVn,dC),MWn.td=function(n){T9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$28$Type",919),wAn(920,1,{},gC),vX(G6n,"JsonImporter/lambda$29$Type",920),wAn(896,1,{},Hg),vX(G6n,"JsonImporter/lambda$3$Type",896),wAn(921,1,{},pC),vX(G6n,"JsonImporter/lambda$30$Type",921),wAn(922,1,{},qg),vX(G6n,"JsonImporter/lambda$31$Type",922),wAn(923,1,{},Gg),vX(G6n,"JsonImporter/lambda$32$Type",923),wAn(924,1,{},zg),vX(G6n,"JsonImporter/lambda$33$Type",924),wAn(925,1,{},Ug),vX(G6n,"JsonImporter/lambda$34$Type",925),wAn(859,1,{},Xg),vX(G6n,"JsonImporter/lambda$35$Type",859),wAn(929,1,{},MB),vX(G6n,"JsonImporter/lambda$36$Type",929),wAn(926,1,lVn,Wg),MWn.td=function(n){Y4(this.a,BB(n,469))},vX(G6n,"JsonImporter/lambda$37$Type",926),wAn(927,1,lVn,SC),MWn.td=function(n){lO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$38$Type",927),wAn(928,1,lVn,PC),MWn.td=function(n){bO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$39$Type",928),wAn(894,1,{},Vg),vX(G6n,"JsonImporter/lambda$4$Type",894),wAn(930,1,lVn,Qg),MWn.td=function(n){J4(this.a,BB(n,8))},vX(G6n,"JsonImporter/lambda$40$Type",930),wAn(895,1,{},Yg),vX(G6n,"JsonImporter/lambda$5$Type",895),wAn(899,1,{},Jg),vX(G6n,"JsonImporter/lambda$6$Type",899),wAn(897,1,{},Zg),vX(G6n,"JsonImporter/lambda$7$Type",897),wAn(898,1,{},np),vX(G6n,"JsonImporter/lambda$8$Type",898),wAn(901,1,{},tp),vX(G6n,"JsonImporter/lambda$9$Type",901),wAn(948,1,lVn,ep),MWn.td=function(n){nW(this.a,new GX(SD(n)))},vX(G6n,"JsonMetaDataConverter/lambda$0$Type",948),wAn(949,1,lVn,ip),MWn.td=function(n){_X(this.a,BB(n,237))},vX(G6n,"JsonMetaDataConverter/lambda$1$Type",949),wAn(950,1,lVn,rp),MWn.td=function(n){t1(this.a,BB(n,149))},vX(G6n,"JsonMetaDataConverter/lambda$2$Type",950),wAn(951,1,lVn,cp),MWn.td=function(n){FX(this.a,BB(n,175))},vX(G6n,"JsonMetaDataConverter/lambda$3$Type",951),wAn(237,22,{3:1,35:1,22:1,237:1},MC);var cAt,aAt=Ben(CJn,"GraphFeature",237,Unt,Ktn,pB);wAn(13,1,{35:1,146:1},up,iR,$O,XA),MWn.wd=function(n){return pL(this,BB(n,146))},MWn.Fb=function(n){return EY(this,n)},MWn.wg=function(){return mpn(this)},MWn.tg=function(){return this.b},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return this.b},vX(CJn,"Property",13),wAn(818,1,MYn,ap),MWn.ue=function(n,t){return _ln(this,BB(n,94),BB(t,94))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(CJn,"PropertyHolderComparator",818),wAn(695,1,QWn,sp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return A9(this)},MWn.Qb=function(){uE()},MWn.Ob=function(){return!!this.a},vX(c8n,"ElkGraphUtil/AncestorIterator",695);var uAt=bq(B6n,"EList");wAn(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),MWn.Vc=function(n,t){sln(this,n,t)},MWn.Fc=function(n){return f9(this,n)},MWn.Wc=function(n,t){return oon(this,n,t)},MWn.Gc=function(n){return pX(this,n)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.ai=function(){return!0},MWn.bi=function(n,t){},MWn.ci=function(){},MWn.di=function(n,t){L8(this,n,t)},MWn.ei=function(n,t,e){},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.Fb=function(n){return QDn(this,n)},MWn.Hb=function(){return Mun(this)},MWn.hi=function(){return!1},MWn.Kc=function(){return new AL(this)},MWn.Yc=function(){return new cx(this)},MWn.Zc=function(n){var t;if(t=this.gc(),n<0||n>t)throw Hp(new tK(n,t));return new GU(this,n)},MWn.ji=function(n,t){this.ii(n,this.Xc(t))},MWn.Mc=function(n){return snn(this,n)},MWn.li=function(n,t){return t},MWn._c=function(n,t){return ovn(this,n,t)},MWn.Ib=function(){return Jbn(this)},MWn.ni=function(){return!0},MWn.oi=function(n,t){return xsn(this,t)},vX(B6n,"AbstractEList",67),wAn(63,67,h8n,go,gtn,jcn),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Cfn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.$b=function(){a6(this)},MWn.Hc=function(n){return Sjn(this,n)},MWn.Xb=function(n){return Wtn(this,n)},MWn.qi=function(n){var t,e,i;++this.j,n>(e=null==this.g?0:this.g.length)&&(i=this.g,(t=e+(e/2|0)+4)<n&&(t=n),this.g=this.ri(t),null!=i&&aHn(i,0,this.g,0,this.i))},MWn.Xc=function(n){return Wyn(this,n)},MWn.dc=function(){return 0==this.i},MWn.ii=function(n,t){return YCn(this,n,t)},MWn.ri=function(n){return x8(Ant,HWn,1,n,5,1)},MWn.ki=function(n){return this.g[n]},MWn.$c=function(n){return Lyn(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.gc=function(){return this.i},MWn.Pc=function(){return N3(this)},MWn.Qc=function(n){return Qwn(this,n)},MWn.i=0;var oAt=vX(B6n,"BasicEList",63),sAt=bq(B6n,"TreeIterator");wAn(694,63,f8n),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return null!=this.g||this.c?null==this.g||0!=this.i&&BB(this.g[this.i-1],47).Ob():tZ(this)},MWn.Pb=function(){return aLn(this)},MWn.Qb=function(){if(!this.e)throw Hp(new Fy("There is no valid object to remove."));this.e.Qb()},MWn.c=!1,vX(B6n,"AbstractTreeIterator",694),wAn(685,694,f8n,OA),MWn.si=function(n){var t;return cL(t=BB(n,56).Wg().Kc(),279)&&BB(t,279).Nk(new bo),t},vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator",685),wAn(952,1,{},bo),vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",952);var hAt,fAt,lAt,bAt=vX(c8n,"ElkReflect",null);wAn(889,1,i5n,wo),MWn.vg=function(n){return hZ(),B6(BB(n,174))},vX(c8n,"ElkReflect/lambda$0$Type",889),bq(B6n,"ResourceLocator"),wAn(1051,1,{}),vX(B6n,"DelegatingResourceLocator",1051),wAn(1052,1051,{}),vX("org.eclipse.emf.common","EMFPlugin",1052);var wAt,dAt=bq(J8n,"Adapter"),gAt=bq(J8n,"Notification");wAn(1153,1,Z8n),MWn.ti=function(){return this.d},MWn.ui=function(n){},MWn.vi=function(n){this.d=n},MWn.wi=function(n){this.d==n&&(this.d=null)},MWn.d=null,vX(i6n,"AdapterImpl",1153),wAn(1995,67,n9n),MWn.Vh=function(n,t){return kwn(this,n,t)},MWn.Wh=function(n){var t,e,i;if(++this.j,n.dc())return!1;for(t=this.Vi(),i=n.Kc();i.Ob();)e=i.Pb(),this.Ii(this.oi(t,e)),++t;return!0},MWn.Xh=function(n,t){ZD(this,n,t)},MWn.Yh=function(n){eW(this,n)},MWn.Gi=function(){return this.Ji()},MWn.$b=function(){JD(this,this.Vi(),this.Wi())},MWn.Hc=function(n){return this.Li(n)},MWn.Ic=function(n){return this.Mi(n)},MWn.Hi=function(n,t){this.Si().jm()},MWn.Ii=function(n){this.Si().jm()},MWn.Ji=function(){return this.Si()},MWn.Ki=function(){this.Si().jm()},MWn.Li=function(n){return this.Si().jm()},MWn.Mi=function(n){return this.Si().jm()},MWn.Ni=function(n){return this.Si().jm()},MWn.Oi=function(n){return this.Si().jm()},MWn.Pi=function(){return this.Si().jm()},MWn.Qi=function(n){return this.Si().jm()},MWn.Ri=function(){return this.Si().jm()},MWn.Ti=function(n){return this.Si().jm()},MWn.Ui=function(n,t){return this.Si().jm()},MWn.Vi=function(){return this.Si().jm()},MWn.Wi=function(){return this.Si().jm()},MWn.Xi=function(n){return this.Si().jm()},MWn.Yi=function(){return this.Si().jm()},MWn.Fb=function(n){return this.Ni(n)},MWn.Xb=function(n){return this.li(n,this.Oi(n))},MWn.Hb=function(){return this.Pi()},MWn.Xc=function(n){return this.Qi(n)},MWn.dc=function(){return this.Ri()},MWn.ii=function(n,t){return AMn(this,n,t)},MWn.ki=function(n){return this.Oi(n)},MWn.$c=function(n){return wq(this,n)},MWn.Mc=function(n){var t;return(t=this.Xc(n))>=0&&(this.$c(t),!0)},MWn.mi=function(n,t){return this.Ui(n,this.oi(n,t))},MWn.gc=function(){return this.Vi()},MWn.Pc=function(){return this.Wi()},MWn.Qc=function(n){return this.Xi(n)},MWn.Ib=function(){return this.Yi()},vX(B6n,"DelegatingEList",1995),wAn(1996,1995,n9n),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){vqn(this)},MWn.Zi=function(n,t,e,i,r){return new NY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return!this.Ri()},MWn.ii=function(n,t){var e,i;return this.ej()?(i=this.fj(),e=AMn(this,n,t),this.$i(this.Zi(7,iln(t),e,n,i)),e):AMn(this,n,t)},MWn.$c=function(n){var t,e,i,r;return this.ej()?(e=null,i=this.fj(),t=this.Zi(4,r=wq(this,n),null,n,i),this.bj()&&r?(e=this.dj(r,e))?(e.Ei(t),e.Fi()):this.$i(t):e?(e.Ei(t),e.Fi()):this.$i(t),r):(r=wq(this,n),this.bj()&&r&&(e=this.dj(r,null))&&e.Fi(),r)},MWn.mi=function(n,t){return oFn(this,n,t)},vX(i6n,"DelegatingNotifyingListImpl",1996),wAn(143,1,t9n),MWn.Ei=function(n){return KEn(this,n)},MWn.Fi=function(){$7(this)},MWn.xi=function(){return this.d},MWn._i=function(){return null},MWn.gj=function(){return null},MWn.yi=function(n){return-1},MWn.zi=function(){return Rxn(this)},MWn.Ai=function(){return null},MWn.Bi=function(){return Kxn(this)},MWn.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},MWn.hj=function(){return!1},MWn.Di=function(n){var t,e,i,r,c,a,u,o;switch(this.d){case 1:case 2:switch(n.xi()){case 1:case 2:if(GC(n.Ai())===GC(this.Ai())&&this.yi(null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0}case 4:if(4===n.xi()&&GC(n.Ai())===GC(this.Ai())&&this.yi(null)==n.yi(null))return a=tGn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.Ci(),this.d=6,o=new gtn(2),c<=i?(f9(o,this.n),f9(o,n.Bi()),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=c,i+1])):(f9(o,n.Bi()),f9(o,this.n),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=i,c])),this.n=o,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.xi()&&GC(n.Ai())===GC(this.Ai())&&this.yi(null)==n.yi(null)){for(a=tGn(this),i=n.Ci(),u=BB(this.g,48),e=x8(ANt,hQn,25,u.length+1,15,1),t=0;t<u.length&&(r=u[t])<=i;)e[t++]=r,++i;for(BB(this.n,15).Vc(t,n.Bi()),e[t]=i;++t<e.length;)e[t]=u[t-1];return this.g=e,a||(this.o=-2-e[0]),!0}}return!1},MWn.Ib=function(){var n,t,e;switch((e=new fN(nE(this.gm)+"@"+(nsn(this)>>>0).toString(16))).a+=" (eventType: ",this.d){case 1:e.a+="SET";break;case 2:e.a+="UNSET";break;case 3:e.a+="ADD";break;case 5:e.a+="ADD_MANY";break;case 4:e.a+="REMOVE";break;case 6:e.a+="REMOVE_MANY";break;case 7:e.a+="MOVE";break;case 8:e.a+="REMOVING_ADAPTER";break;case 9:e.a+="RESOLVE";break;default:mE(e,this.d)}if(lKn(this)&&(e.a+=", touch: true"),e.a+=", position: ",mE(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",rO(e,this.Ai()),e.a+=", feature: ",rO(e,this._i()),e.a+=", oldValue: ",rO(e,Kxn(this)),e.a+=", newValue: ",6==this.d&&cL(this.g,48)){for(t=BB(this.g,48),e.a+="[",n=0;n<t.length;)e.a+=t[n],++n<t.length&&(e.a+=FWn);e.a+="]"}else rO(e,Rxn(this));return e.a+=", isTouch: ",yE(e,lKn(this)),e.a+=", wasSet: ",yE(e,tGn(this)),e.a+=")",e.a},MWn.d=0,MWn.e=0,MWn.f=0,MWn.j=0,MWn.k=0,MWn.o=0,MWn.p=0,vX(i6n,"NotificationImpl",143),wAn(1167,143,t9n,NY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"DelegatingNotifyingListImpl/1",1167),wAn(242,63,h8n,po,Fj),MWn.Fc=function(n){return Mwn(this,BB(n,366))},MWn.Ei=function(n){return Mwn(this,n)},MWn.Fi=function(){var n,t,e;for(n=0;n<this.i;++n)null!=(e=(t=BB(this.g[n],366)).Ai())&&-1!=t.xi()&&BB(e,92).Ng(t)},MWn.ri=function(n){return x8(gAt,HWn,366,n,0,1)},vX(i6n,"NotificationChainImpl",242),wAn(1378,90,e6n),MWn.Kg=function(){return this.e},MWn.Mg=function(){return 0!=(1&this.f)},MWn.f=1,vX(i6n,"NotifierImpl",1378),wAn(1993,63,h8n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){sqn(this)},MWn.Zi=function(n,t,e,i,r){return new xY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.ij=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return 0!=this.i},MWn.ii=function(n,t){return Cln(this,n,t)},MWn.$c=function(n){return fDn(this,n)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.jj=function(n,t){return t},MWn.kj=function(n,t){return t},MWn.lj=function(n,t,e){return e},vX(i6n,"NotifyingListImpl",1993),wAn(1166,143,t9n,xY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"NotifyingListImpl/1",1166),wAn(953,63,h8n,aR),MWn.Hc=function(n){return this.i>10?(this.b&&this.c.j==this.a||(this.b=new $q(this),this.a=this.j),FT(this.b,n)):Sjn(this,n)},MWn.ni=function(){return!0},MWn.a=0,vX(B6n,"AbstractEList/1",953),wAn(295,73,NQn,tK),vX(B6n,"AbstractEList/BasicIndexOutOfBoundsException",295),wAn(40,1,QWn,AL),MWn.Nb=function(n){fU(this,n)},MWn.mj=function(){if(this.i.j!=this.f)throw Hp(new vv)},MWn.nj=function(){return kpn(this)},MWn.Ob=function(){return this.e!=this.i.gc()},MWn.Pb=function(){return this.nj()},MWn.Qb=function(){Qjn(this)},MWn.e=0,MWn.f=0,MWn.g=-1,vX(B6n,"AbstractEList/EIterator",40),wAn(278,40,cVn,cx,GU),MWn.Qb=function(){Qjn(this)},MWn.Rb=function(n){odn(this,n)},MWn.oj=function(){var n;try{return n=this.d.Xb(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.pj=function(n){kmn(this,n)},MWn.Sb=function(){return 0!=this.e},MWn.Tb=function(){return this.e},MWn.Ub=function(){return this.oj()},MWn.Vb=function(){return this.e-1},MWn.Wb=function(n){this.pj(n)},vX(B6n,"AbstractEList/EListIterator",278),wAn(341,40,QWn,ax),MWn.nj=function(){return jpn(this)},MWn.Qb=function(){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEIterator",341),wAn(385,278,cVn,ux,RK),MWn.Rb=function(n){throw Hp(new pv)},MWn.nj=function(){var n;try{return n=this.c.ki(this.e),this.mj(),this.g=this.e++,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.oj=function(){var n;try{return n=this.c.ki(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEListIterator",385),wAn(1982,67,r9n),MWn.Vh=function(n,t){var e,i,r,c,a,u,o,s,h;if(0!=(i=t.gc())){for(e=Psn(this,(s=null==(o=BB(yan(this.a,4),126))?0:o.length)+i),(h=s-n)>0&&aHn(o,n,e,n+i,h),u=t.Kc(),c=0;c<i;++c)JA(e,n+c,xsn(this,a=u.Pb()));for(Fgn(this,e),r=0;r<i;++r)a=e[n],this.bi(n,a),++n;return!0}return++this.j,!1},MWn.Wh=function(n){var t,e,i,r,c,a,u,o,s;if(0!=(i=n.gc())){for(t=Psn(this,s=(o=null==(e=BB(yan(this.a,4),126))?0:e.length)+i),u=n.Kc(),c=o;c<s;++c)JA(t,c,xsn(this,a=u.Pb()));for(Fgn(this,t),r=o;r<s;++r)a=t[r],this.bi(r,a);return!0}return++this.j,!1},MWn.Xh=function(n,t){var e,i,r,c;e=Psn(this,(r=null==(i=BB(yan(this.a,4),126))?0:i.length)+1),c=xsn(this,t),n!=r&&aHn(i,n,e,n+1,r-n),$X(e,n,c),Fgn(this,e),this.bi(n,t)},MWn.Yh=function(n){var t,e,i;JA(t=Psn(this,(i=null==(e=BB(yan(this.a,4),126))?0:e.length)+1),i,xsn(this,n)),Fgn(this,t),this.bi(i,n)},MWn.Zh=function(){return new S5(this)},MWn.$h=function(){return new Yz(this)},MWn._h=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new BW(this,n)},MWn.$b=function(){var n,t;++this.j,t=null==(n=BB(yan(this.a,4),126))?0:n.length,Fgn(this,null),L8(this,t,n)},MWn.Hc=function(n){var t,e,i,r;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(i=0,r=(e=t).length;i<r;++i)if(Nfn(n,e[i]))return!0}else for(i=0,r=(e=t).length;i<r;++i)if(GC(e[i])===GC(n))return!0;return!1},MWn.Xb=function(n){var t,e;if(n>=(e=null==(t=BB(yan(this.a,4),126))?0:t.length))throw Hp(new tK(n,e));return t[n]},MWn.Xc=function(n){var t,e,i;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(e=0,i=t.length;e<i;++e)if(Nfn(n,t[e]))return e}else for(e=0,i=t.length;e<i;++e)if(GC(t[e])===GC(n))return e;return-1},MWn.dc=function(){return null==BB(yan(this.a,4),126)},MWn.Kc=function(){return new M5(this)},MWn.Yc=function(){return new Qz(this)},MWn.Zc=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new FW(this,n)},MWn.ii=function(n,t){var e,i,r;if(n>=(r=null==(e=$dn(this))?0:e.length))throw Hp(new Ay(u8n+n+o8n+r));if(t>=r)throw Hp(new Ay(s8n+t+o8n+r));return i=e[t],n!=t&&(n<t?aHn(e,n,e,n+1,t-n):aHn(e,t+1,e,t,n-t),$X(e,n,i),Fgn(this,e)),i},MWn.ki=function(n){return BB(yan(this.a,4),126)[n]},MWn.$c=function(n){return EOn(this,n)},MWn.mi=function(n,t){var e,i;return i=(e=$dn(this))[n],JA(e,n,xsn(this,t)),Fgn(this,e),i},MWn.gc=function(){var n;return null==(n=BB(yan(this.a,4),126))?0:n.length},MWn.Pc=function(){var n,t,e;return e=null==(n=BB(yan(this.a,4),126))?0:n.length,t=x8(dAt,i9n,415,e,0,1),e>0&&aHn(n,0,t,0,e),t},MWn.Qc=function(n){var t,e;return(e=null==(t=BB(yan(this.a,4),126))?0:t.length)>0&&(n.length<e&&(n=Den(tsn(n).c,e)),aHn(t,0,n,0,e)),n.length>e&&$X(n,e,null),n},vX(B6n,"ArrayDelegatingEList",1982),wAn(1038,40,QWn,M5),MWn.mj=function(){if(this.b.j!=this.f||GC(BB(yan(this.b.a,4),126))!==GC(this.a))throw Hp(new vv)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EIterator",1038),wAn(706,278,cVn,Qz,FW),MWn.mj=function(){if(this.b.j!=this.f||GC(BB(yan(this.b.a,4),126))!==GC(this.a))throw Hp(new vv)},MWn.pj=function(n){kmn(this,n),this.a=BB(yan(this.b.a,4),126)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EListIterator",706),wAn(1039,341,QWn,S5),MWn.mj=function(){if(this.b.j!=this.f||GC(BB(yan(this.b.a,4),126))!==GC(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEIterator",1039),wAn(707,385,cVn,Yz,BW),MWn.mj=function(){if(this.b.j!=this.f||GC(BB(yan(this.b.a,4),126))!==GC(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEListIterator",707),wAn(606,295,NQn,LO),vX(B6n,"BasicEList/BasicIndexOutOfBoundsException",606),wAn(696,63,h8n,DC),MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.qi=function(n){throw Hp(new pv)},MWn.Kc=function(){return this.Zh()},MWn.Yc=function(){return this.$h()},MWn.Zc=function(n){return this._h(n)},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.$c=function(n){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},vX(B6n,"BasicEList/UnmodifiableEList",696),wAn(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),MWn.Vc=function(n,t){Q$(this,n,BB(t,42))},MWn.Fc=function(n){return aD(this,BB(n,42))},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return BB(Wtn(this.c,n),133)},MWn.ii=function(n,t){return BB(this.c.ii(n,t),42)},MWn.ji=function(n,t){Y$(this,n,BB(t,42))},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BB(this.c.$c(n),42)},MWn._c=function(n,t){return uX(this,n,BB(t,42))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Wc=function(n,t){return this.c.Wc(n,t)},MWn.Gc=function(n){return this.c.Gc(n)},MWn.$b=function(){this.c.$b()},MWn.Hc=function(n){return this.c.Hc(n)},MWn.Ic=function(n){return oun(this.c,n)},MWn.qj=function(){var n,t;if(null==this.d){for(this.d=x8(oAt,c9n,63,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)Cvn(this,BB(n.nj(),133));this.e=t}},MWn.Fb=function(n){return NK(this,n)},MWn.Hb=function(){return Mun(this.c)},MWn.Xc=function(n){return this.c.Xc(n)},MWn.rj=function(){this.c=new hp(this)},MWn.dc=function(){return 0==this.f},MWn.Kc=function(){return this.c.Kc()},MWn.Yc=function(){return this.c.Yc()},MWn.Zc=function(n){return this.c.Zc(n)},MWn.sj=function(){return A8(this)},MWn.tj=function(n,t,e){return new SB(n,t,e)},MWn.uj=function(){return new vo},MWn.Mc=function(n){return hin(this,n)},MWn.gc=function(){return this.f},MWn.bd=function(n,t){return new s1(this.c,n,t)},MWn.Pc=function(){return this.c.Pc()},MWn.Qc=function(n){return this.c.Qc(n)},MWn.Ib=function(){return Jbn(this.c)},MWn.e=0,MWn.f=0,vX(B6n,"BasicEMap",705),wAn(1033,63,h8n,hp),MWn.bi=function(n,t){Av(this,BB(t,133))},MWn.ei=function(n,t,e){var i;++(i=this,BB(t,133),i).a.e},MWn.fi=function(n,t){$v(this,BB(t,133))},MWn.gi=function(n,t,e){VN(this,BB(t,133),BB(e,133))},MWn.di=function(n,t){aan(this.a)},vX(B6n,"BasicEMap/1",1033),wAn(1034,63,h8n,vo),MWn.ri=function(n){return x8(vAt,a9n,612,n,0,1)},vX(B6n,"BasicEMap/2",1034),wAn(1035,nVn,tVn,fp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return rdn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Bj(this.a)},MWn.Mc=function(n){var t;return t=this.a.f,Wdn(this.a,n),this.a.f!=t},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/3",1035),wAn(1036,28,ZWn,lp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return YDn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Hj(this.a)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/4",1036),wAn(1037,nVn,tVn,bp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){var t,e,i,r,c,a,u,o,s;if(this.a.f>0&&cL(n,42)&&(this.a.qj(),r=null==(u=(o=BB(n,42)).cd())?0:nsn(u),c=eR(this.a,r),t=this.a.d[c]))for(e=BB(t.g,367),s=t.i,a=0;a<s;++a)if((i=e[a]).Sh()==r&&i.Fb(o))return!0;return!1},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new pQ(this.a)},MWn.Mc=function(n){return CAn(this,n)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/5",1037),wAn(613,1,QWn,pQ),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return-1!=this.b},MWn.Pb=function(){var n;if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.b)throw Hp(new yv);return this.d=this.a,this.e=this.b,ujn(this),n=BB(this.f.d[this.d].g[this.e],133),this.vj(n)},MWn.Qb=function(){if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.e)throw Hp(new dv);this.f.c.Mc(Wtn(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&-1!=this.b&&--this.b},MWn.vj=function(n){return n},MWn.a=0,MWn.b=-1,MWn.c=0,MWn.d=0,MWn.e=0,vX(B6n,"BasicEMap/BasicEMapIterator",613),wAn(1031,613,QWn,Bj),MWn.vj=function(n){return n.cd()},vX(B6n,"BasicEMap/BasicEMapKeyIterator",1031),wAn(1032,613,QWn,Hj),MWn.vj=function(n){return n.dd()},vX(B6n,"BasicEMap/BasicEMapValueIterator",1032),wAn(1030,1,JWn,wp),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.a.c.$b()},MWn._b=function(n){return BC(this,n)},MWn.uc=function(n){return YDn(this.a,n)},MWn.vc=function(){return C8(this.a)},MWn.Fb=function(n){return NK(this.a,n)},MWn.xc=function(n){return cdn(this.a,n)},MWn.Hb=function(){return Mun(this.a.c)},MWn.dc=function(){return 0==this.a.f},MWn.ec=function(){return O8(this.a)},MWn.zc=function(n,t){return vjn(this.a,n,t)},MWn.Bc=function(n){return Wdn(this.a,n)},MWn.gc=function(){return this.a.f},MWn.Ib=function(){return Jbn(this.a.c)},MWn.Cc=function(){return I8(this.a)},vX(B6n,"BasicEMap/DelegatingMap",1030),wAn(612,1,{42:1,133:1,612:1},SB),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),(null!=this.b?Nfn(this.b,t.cd()):GC(this.b)===GC(t.cd()))&&(null!=this.c?Nfn(this.c,t.dd()):GC(this.c)===GC(t.dd())))},MWn.Sh=function(){return this.a},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return this.a^(null==this.c?0:nsn(this.c))},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){throw Hp(new sv)},MWn.ed=function(n){var t;return t=this.c,this.c=n,t},MWn.Ib=function(){return this.b+"->"+this.c},MWn.a=0;var pAt,vAt=vX(B6n,"BasicEMap/EntryImpl",612);wAn(536,1,{},oo),vX(B6n,"BasicEMap/View",536),wAn(768,1,{}),MWn.Fb=function(n){return NAn((SQ(),set),n)},MWn.Hb=function(){return Fon((SQ(),set))},MWn.Ib=function(){return LMn((SQ(),set))},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList",768),wAn(1312,1,cVn,mo),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList/1",1312),wAn(1310,768,{20:1,14:1,15:1,58:1},Tm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},vX(B6n,"ECollections/EmptyUnmodifiableEList",1310),wAn(1311,768,{20:1,14:1,15:1,58:1,589:1},Mm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},MWn.sj=function(){return SQ(),SQ(),het},vX(B6n,"ECollections/EmptyUnmodifiableEMap",1311);var mAt,yAt=bq(B6n,"Enumerator");wAn(281,1,{281:1},rRn),MWn.Fb=function(n){var t;return this===n||!!cL(n,281)&&(t=BB(n,281),this.f==t.f&&vG(this.i,t.i)&&pG(this.a,0!=(256&this.f)?0!=(256&t.f)?t.a:null:0!=(256&t.f)?null:t.a)&&pG(this.d,t.d)&&pG(this.g,t.g)&&pG(this.e,t.e)&&Spn(this,t))},MWn.Hb=function(){return this.f},MWn.Ib=function(){return M_n(this)},MWn.f=0;var kAt,jAt,EAt,TAt=0,MAt=0,SAt=0,PAt=0,IAt=0,CAt=0,OAt=0,AAt=0,$At=0,LAt=0,NAt=0,xAt=0,DAt=0;vX(B6n,"URI",281),wAn(1091,43,tYn,Sm),MWn.zc=function(n,t){return BB(mZ(this,SD(n),BB(t,281)),281)},vX(B6n,"URI/URICache",1091),wAn(497,63,h8n,fo,rG),MWn.hi=function(){return!0},vX(B6n,"UniqueEList",497),wAn(581,60,BVn,L7),vX(B6n,"WrappedException",581);var RAt,KAt=bq(q5n,s9n),_At=bq(q5n,h9n),FAt=bq(q5n,f9n),BAt=bq(q5n,l9n),HAt=bq(q5n,b9n),qAt=bq(q5n,"EClass"),GAt=bq(q5n,"EDataType");wAn(1183,43,tYn,Pm),MWn.xc=function(n){return XC(n)?SJ(this,n):qC(AY(this.f,n))},vX(q5n,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var zAt,UAt,XAt=bq(q5n,"EEnum"),WAt=bq(q5n,w9n),VAt=bq(q5n,d9n),QAt=bq(q5n,g9n),YAt=bq(q5n,p9n),JAt=bq(q5n,v9n);wAn(1029,1,{},ho),MWn.Ib=function(){return"NIL"},vX(q5n,"EStructuralFeature/Internal/DynamicValueHolder/1",1029),wAn(1028,43,tYn,Im),MWn.xc=function(n){return XC(n)?SJ(this,n):qC(AY(this.f,n))},vX(q5n,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var ZAt,n$t,t$t,e$t,i$t,r$t,c$t,a$t,u$t,o$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,v$t,m$t,y$t,k$t,j$t,E$t,T$t,M$t,S$t,P$t,I$t,C$t,O$t=bq(q5n,m9n),A$t=bq(q5n,"EValidator/PatternMatcher"),$$t=bq(y9n,"FeatureMap/Entry");wAn(535,1,{72:1},IC),MWn.ak=function(){return this.a},MWn.dd=function(){return this.b},vX(l6n,"BasicEObjectImpl/1",535),wAn(1027,1,k9n,CC),MWn.Wj=function(n){return V5(this.a,this.b,n)},MWn.fj=function(){return ZJ(this.a,this.b)},MWn.Wb=function(n){NJ(this.a,this.b,n)},MWn.Xj=function(){PW(this.a,this.b)},vX(l6n,"BasicEObjectImpl/4",1027),wAn(1983,1,{108:1}),MWn.bk=function(n){this.e=0==n?M$t:x8(Ant,HWn,1,n,5,1)},MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.ck=function(){return this.c},MWn.dk=function(){throw Hp(new pv)},MWn.ek=function(){throw Hp(new pv)},MWn.fk=function(){return this.d},MWn.gk=function(){return null!=this.e},MWn.hk=function(n){this.c=n},MWn.ik=function(n){throw Hp(new pv)},MWn.jk=function(n){throw Hp(new pv)},MWn.kk=function(n){this.d=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),wAn(185,1983,{108:1},Kf),MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderImpl",185),wAn(506,97,f6n,yo),MWn.Kg=function(){return this.f},MWn.Pg=function(){return this.k},MWn.Rg=function(n,t){this.g=n,this.i=t},MWn.Tg=function(){return 0==(2&this.j)?this.zh():this.ph().ck()},MWn.Vg=function(){return this.i},MWn.Mg=function(){return 0!=(1&this.j)},MWn.eh=function(){return this.g},MWn.kh=function(){return 0!=(4&this.j)},MWn.ph=function(){return!this.k&&(this.k=new Kf),this.k},MWn.th=function(n){this.ph().hk(n),n?this.j|=2:this.j&=-3},MWn.vh=function(n){this.ph().jk(n),n?this.j|=4:this.j&=-5},MWn.zh=function(){return(QX(),t$t).S},MWn.i=0,MWn.j=1,vX(l6n,"EObjectImpl",506),wAn(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},jH),MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.Tg=function(){return this.d},MWn.Yg=function(n){return Awn(this.d,n)},MWn.$g=function(){return this.d},MWn.dh=function(){return null!=this.e},MWn.ph=function(){return!this.k&&(this.k=new ko),this.k},MWn.th=function(n){this.d=n},MWn.yh=function(){var n;return null==this.e&&(n=bX(this.d),this.e=0==n?S$t:x8(Ant,HWn,1,n,5,1)),this},MWn.Ah=function(){return 0},vX(l6n,"DynamicEObjectImpl",780),wAn(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},fq),MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.th=function(n){this.d=n,this.b=NNn(n,"key"),this.c=NNn(n,E6n)},MWn.Sh=function(){var n;return-1==this.a&&(n=J7(this,this.b),this.a=null==n?0:nsn(n)),this.a},MWn.cd=function(){return J7(this,this.b)},MWn.dd=function(){return J7(this,this.c)},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){NJ(this,this.b,n)},MWn.ed=function(n){var t;return t=J7(this,this.c),NJ(this,this.c,n),t},MWn.a=0,vX(l6n,"DynamicEObjectImpl/BasicEMapEntry",1376),wAn(1377,1,{108:1},ko),MWn.bk=function(n){throw Hp(new pv)},MWn.Ch=function(n){throw Hp(new pv)},MWn.Dh=function(n,t){throw Hp(new pv)},MWn.Eh=function(n){throw Hp(new pv)},MWn.ck=function(){throw Hp(new pv)},MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.fk=function(){return this.c},MWn.gk=function(){throw Hp(new pv)},MWn.hk=function(n){throw Hp(new pv)},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},MWn.kk=function(n){this.c=n},vX(l6n,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),wAn(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},jo),MWn.Qg=function(n){return bkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),this.b):(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),A8(this.b));case 3:return bZ(this);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),this.a;case 5:return!this.c&&(this.c=new RL(LOt,this,5)),this.c}return U9(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?bkn(this,e):this.Cb.ih(this,-1-i,null,e)),QG(this,BB(n,147),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),BK(this.b,n,e);case 3:return QG(this,null,e);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.d;case 2:return!!this.b&&0!=this.b.f;case 3:return!!bZ(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return O3(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void pq(this,SD(t));case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void tan(this.b,t);case 3:return void ONn(this,BB(t,147));case 4:return!this.a&&(this.a=new $L(LOt,this,4)),sqn(this.a),!this.a&&(this.a=new $L(LOt,this,4)),void pX(this.a,BB(t,14));case 5:return!this.c&&(this.c=new RL(LOt,this,5)),sqn(this.c),!this.c&&(this.c=new RL(LOt,this,5)),void pX(this.c,BB(t,14))}Lbn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t)},MWn.zh=function(){return gWn(),e$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Bin(this,null);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void this.b.c.$b();case 3:return void ONn(this,null);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),void sqn(this.a);case 5:return!this.c&&(this.c=new RL(LOt,this,5)),void sqn(this.c)}qfn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.Ib=function(){return Vfn(this)},MWn.d=null,vX(l6n,"EAnnotationImpl",510),wAn(151,705,j9n,y9),MWn.Xh=function(n,t){n$(this,n,BB(t,42))},MWn.lk=function(n,t){return FK(this,BB(n,42),t)},MWn.pi=function(n){return BB(BB(this.c,69).pi(n),133)},MWn.Zh=function(){return BB(this.c,69).Zh()},MWn.$h=function(){return BB(this.c,69).$h()},MWn._h=function(n){return BB(this.c,69)._h(n)},MWn.mk=function(n,t){return BK(this,n,t)},MWn.Wj=function(n){return BB(this.c,76).Wj(n)},MWn.rj=function(){},MWn.fj=function(){return BB(this.c,76).fj()},MWn.tj=function(n,t,e){var i;return(i=BB(Utn(this.b).Nh().Jh(this.b),133)).Th(n),i.Uh(t),i.ed(e),i},MWn.uj=function(){return new Cp(this)},MWn.Wb=function(n){tan(this,n)},MWn.Xj=function(){BB(this.c,76).Xj()},vX(y9n,"EcoreEMap",151),wAn(158,151,j9n,Jx),MWn.qj=function(){var n,t,e,i,r;if(null==this.d){for(r=x8(oAt,c9n,63,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=BB(e.nj(),133)).Sh()&DWn)%r.length])&&(n=r[i]=new Cp(this)),n.Fc(t);this.d=r}},vX(l6n,"EAnnotationImpl/1",158),wAn(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi())}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),E$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi())}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Ckn(this),this.Bb|=1},MWn.Yj=function(){return Ckn(this)},MWn.Zj=function(){return this.t},MWn.$j=function(){var n;return(n=this.t)>1||-1==n},MWn.hi=function(){return 0!=(512&this.Bb)},MWn.nk=function(n,t){return Pfn(this,n,t)},MWn.ok=function(n){Nen(this,n)},MWn.Ib=function(){return KOn(this)},MWn.s=0,MWn.t=1,vX(l6n,"ETypedElementImpl",284),wAn(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),MWn.Qg=function(n){return Nyn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?Nyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 17:return T_n(this,null,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _C(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),j$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&AIn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){kV(B7((CPn(),Z$t),this)),Ckn(this),this.Bb|=1},MWn.Gj=function(){return this.f},MWn.zj=function(){return qLn(this)},MWn.Hj=function(){return dZ(this)},MWn.Lj=function(){return null},MWn.pk=function(){return this.k},MWn.aj=function(){return this.n},MWn.Mj=function(){return oEn(this)},MWn.Nj=function(){var n,t,e,i,r,c,a,u,o;return this.p||((null==(e=dZ(this)).i&&qFn(e),e.i).length,(i=this.Lj())&&bX(dZ(i)),n=(a=(r=Ckn(this)).Bj())?0!=(1&a.i)?a==$Nt?ktt:a==ANt?Att:a==DNt?Itt:a==xNt?Ptt:a==LNt?Rtt:a==RNt?_tt:a==NNt?Ttt:Stt:a:null,t=qLn(this),u=r.zj(),bbn(this),0!=(this.Bb&hVn)&&((c=mjn((CPn(),Z$t),e))&&c!=this||(c=Z1(B7(Z$t,this))))?this.p=new AC(this,c):this.$j()?this.rk()?i?0!=(this.Bb&T9n)?n?this.sk()?this.p=new lQ(47,n,this,i):this.p=new lQ(5,n,this,i):this.sk()?this.p=new w4(46,this,i):this.p=new w4(4,this,i):n?this.sk()?this.p=new lQ(49,n,this,i):this.p=new lQ(7,n,this,i):this.sk()?this.p=new w4(48,this,i):this.p=new w4(6,this,i):0!=(this.Bb&T9n)?n?n==Hnt?this.p=new PB(50,VOt,this):this.sk()?this.p=new PB(43,n,this):this.p=new PB(1,n,this):this.sk()?this.p=new RY(42,this):this.p=new RY(0,this):n?n==Hnt?this.p=new PB(41,VOt,this):this.sk()?this.p=new PB(45,n,this):this.p=new PB(3,n,this):this.sk()?this.p=new RY(44,this):this.p=new RY(2,this):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(512&this.Bb)?0!=(this.Bb&T9n)?this.p=n?new PB(9,n,this):new RY(8,this):this.p=n?new PB(11,n,this):new RY(10,this):0!=(this.Bb&T9n)?this.p=n?new PB(13,n,this):new RY(12,this):this.p=n?new PB(15,n,this):new RY(14,this):i?(o=i.t)>1||-1==o?this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(25,n,this,i):new w4(24,this,i):this.p=n?new lQ(27,n,this,i):new w4(26,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(29,n,this,i):new w4(28,this,i):this.p=n?new lQ(31,n,this,i):new w4(30,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(33,n,this,i):new w4(32,this,i):this.p=n?new lQ(35,n,this,i):new w4(34,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(37,n,this,i):new w4(36,this,i):this.p=n?new lQ(39,n,this,i):new w4(38,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new PB(17,n,this):new RY(16,this):this.p=n?new PB(19,n,this):new RY(18,this):0!=(this.Bb&T9n)?this.p=n?new PB(21,n,this):new RY(20,this):this.p=n?new PB(23,n,this):new RY(22,this):this.qk()?this.sk()?this.p=new IB(BB(r,26),this,i):this.p=new mJ(BB(r,26),this,i):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(this.Bb&T9n)?this.p=n?new nz(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new dQ(BB(r,148),t,u,this):this.p=n?new ZG(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new wQ(BB(r,148),t,u,this):this.rk()?i?0!=(this.Bb&T9n)?this.sk()?this.p=new NB(BB(r,26),this,i):this.p=new LB(BB(r,26),this,i):this.sk()?this.p=new $B(BB(r,26),this,i):this.p=new CB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.sk()?this.p=new eD(BB(r,26),this):this.p=new tD(BB(r,26),this):this.sk()?this.p=new nD(BB(r,26),this):this.p=new Zx(BB(r,26),this):this.sk()?i?0!=(this.Bb&T9n)?this.p=new xB(BB(r,26),this,i):this.p=new OB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new rD(BB(r,26),this):this.p=new iD(BB(r,26),this):i?0!=(this.Bb&T9n)?this.p=new DB(BB(r,26),this,i):this.p=new AB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new cD(BB(r,26),this):this.p=new cG(BB(r,26),this)),this.p},MWn.Ij=function(){return 0!=(this.Bb&k6n)},MWn.qk=function(){return!1},MWn.rk=function(){return!1},MWn.Jj=function(){return 0!=(this.Bb&hVn)},MWn.Oj=function(){return hnn(this)},MWn.sk=function(){return!1},MWn.Kj=function(){return 0!=(this.Bb&T9n)},MWn.tk=function(n){this.k=n},MWn.Lh=function(n){JZ(this,n)},MWn.Ib=function(){return ERn(this)},MWn.e=!1,MWn.n=0,vX(l6n,"EStructuralFeatureImpl",449),wAn(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},Om),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!NCn(this);case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return t?uun(this):x6(this)}return U9(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return NCn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!x6(this)}return O3(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Uj(this,BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _C(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void Gln(this,qy(TD(t)))}Lbn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t)},MWn.zh=function(){return gWn(),i$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&AIn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return this.b=0,void Nen(this,1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return void Gln(this,!1)}qfn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.Gh=function(){uun(this),kV(B7((CPn(),Z$t),this)),Ckn(this),this.Bb|=1},MWn.$j=function(){return NCn(this)},MWn.nk=function(n,t){return this.b=0,this.a=null,Pfn(this,n,t)},MWn.ok=function(n){Uj(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (iD: ",yE(n,0!=(this.Bb&h6n)),n.a+=")",n.a)},MWn.b=0,vX(l6n,"EAttributeImpl",322),wAn(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),MWn.uk=function(n){return n.Tg()==this},MWn.Qg=function(n){return fyn(this,n)},MWn.Rg=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void CA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),c$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.yj=function(){var n;return-1==this.G&&(this.G=(n=Utn(this))?uvn(n.Mh(),this):-1),this.G},MWn.zj=function(){return null},MWn.Aj=function(){return Utn(this)},MWn.vk=function(){return this.v},MWn.Bj=function(){return iyn(this)},MWn.Cj=function(){return null!=this.D?this.D:this.B},MWn.Dj=function(){return this.F},MWn.wj=function(n){return SFn(this,n)},MWn.wk=function(n){this.v=n},MWn.xk=function(n){Urn(this,n)},MWn.yk=function(n){this.C=n},MWn.Lh=function(n){ZZ(this,n)},MWn.Ib=function(){return Iwn(this)},MWn.C=null,MWn.D=null,MWn.G=-1,vX(l6n,"EClassifierImpl",351),wAn(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},_f),MWn.uk=function(n){return QR(this,n.Tg())},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return null;case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return hN(),0!=(512&this.Bb);case 10:return kY(this);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),this.q;case 12:return YBn(this);case 13:return RBn(this);case 14:return RBn(this),this.r;case 15:return YBn(this),this.k;case 16:return WPn(this);case 17:return gBn(this);case 18:return qFn(this);case 19:return ILn(this);case 20:return YBn(this),this.o;case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),this.s;case 22:return a4(this);case 23:return HDn(this)}return U9(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),Ywn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),Ywn(this.s,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),_pn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),_pn(this.s,n,e);case 22:return _pn(a4(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0!=(256&this.Bb);case 9:return 0!=(512&this.Bb);case 10:return!(!this.u||0==a4(this.u.a).i||this.n&&Rvn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=YBn(this).i;case 13:return 0!=RBn(this).i;case 14:return RBn(this),0!=this.r.i;case 15:return YBn(this),0!=this.k.i;case 16:return 0!=WPn(this).i;case 17:return 0!=gBn(this).i;case 18:return 0!=qFn(this).i;case 19:return 0!=ILn(this).i;case 20:return YBn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&Rvn(this.n);case 23:return 0!=HDn(this).i}return O3(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.oh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:NNn(this,n))||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void CA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Jfn(this,qy(TD(t)));case 9:return void tln(this,qy(TD(t)));case 10:return vqn(kY(this)),void pX(kY(this),BB(t,14));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),sqn(this.q),!this.q&&(this.q=new eU(QAt,this,11,10)),void pX(this.q,BB(t,14));case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),sqn(this.s),!this.s&&(this.s=new eU(FAt,this,21,17)),void pX(this.s,BB(t,14));case 22:return sqn(a4(this)),void pX(a4(this),BB(t,14))}Lbn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t)},MWn.zh=function(){return gWn(),r$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Jfn(this,!1);case 9:return void tln(this,!1);case 10:return void(this.u&&vqn(this.u));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),void sqn(this.q);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),void sqn(this.s);case 22:return void(this.n&&sqn(this.n))}qfn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.Gh=function(){var n,t;if(YBn(this),RBn(this),WPn(this),gBn(this),qFn(this),ILn(this),HDn(this),a6(XB(P5(this))),this.s)for(n=0,t=this.s.i;n<t;++n)vx(Wtn(this.s,n));if(this.q)for(n=0,t=this.q.i;n<t;++n)vx(Wtn(this.q,n));Ifn((CPn(),Z$t),this).ne(),this.Bb|=1},MWn.Ib=function(){return dEn(this)},MWn.k=null,MWn.r=null,vX(l6n,"EClassImpl",88),wAn(1994,1993,D9n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return LFn(this,this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.lk=function(n,t){return Ywn(this,n,t)},MWn.pi=function(n){return F9(this,n)},MWn.mk=function(n,t){return _pn(this,n,t)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"NotifyingInternalEListImpl",1994),wAn(622,1994,R9n),MWn.Hc=function(n){return bqn(this,n)},MWn.Zi=function(n,t,e,i,r){return yZ(this,n,t,e,i,r)},MWn.$i=function(n){Lv(this,n)},MWn.Wj=function(n){return this},MWn.ak=function(){return itn(this.e.Tg(),this.aj())},MWn._i=function(){return this.ak()},MWn.aj=function(){return Awn(this.e.Tg(),this.ak())},MWn.zk=function(){return BB(this.ak().Yj(),26).Bj()},MWn.Ak=function(){return Ivn(BB(this.ak(),18)).n},MWn.Ai=function(){return this.e},MWn.Bk=function(){return!0},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!1},MWn.Xc=function(n){return uvn(this,n)},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.e,this.Ak(),this.zk(),t):e.gh(this.e,Awn(e.Tg(),Ivn(BB(this.ak(),18))),null,t):e.gh(this.e,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.e,this.Ak(),this.zk(),t):e.ih(this.e,Awn(e.Tg(),Ivn(BB(this.ak(),18))),null,t):e.ih(this.e,-1-this.aj(),null,t)},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return x3(this.d,n)},MWn.ej=function(){return mA(this.e)},MWn.fj=function(){return 0!=this.i},MWn.ri=function(n){return Den(this.d,n)},MWn.li=function(n,t){return this.Fk()&&this.Ek()?GOn(this,n,BB(t,56)):t},MWn.Gk=function(n){return n.kh()?tfn(this.e,BB(n,49)):n},MWn.Wb=function(n){J$(this,n)},MWn.Pc=function(){return H9(this)},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.i-1;t>=0;--t)Wtn(this,t);return Qwn(this,n)},MWn.Xj=function(){sqn(this)},MWn.oi=function(n,t){return _en(this,n,t)},vX(y9n,"EcoreEList",622),wAn(496,622,R9n,yH),MWn.ai=function(){return!1},MWn.aj=function(){return this.c},MWn.bj=function(){return!1},MWn.Fk=function(){return!0},MWn.hi=function(){return!0},MWn.li=function(n,t){return t},MWn.ni=function(){return!1},MWn.c=0,vX(y9n,"EObjectEList",496),wAn(85,496,R9n,$L),MWn.bj=function(){return!0},MWn.Dk=function(){return!1},MWn.rk=function(){return!0},vX(y9n,"EObjectContainmentEList",85),wAn(545,85,R9n,LL),MWn.ci=function(){this.b=!0},MWn.fj=function(){return this.b},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.b,this.b=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.b=!1},MWn.b=!1,vX(y9n,"EObjectContainmentEList/Unsettable",545),wAn(1140,545,R9n,YG),MWn.ii=function(n,t){var e,i;return e=BB(Cln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),a$t),iln(t),cL(i=e.c,88)?BB(i,26):d$t,n)),e},MWn.jj=function(n,t){return Zwn(this,BB(n,87),t)},MWn.kj=function(n,t){return Jwn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return _jn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Rvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EClassImpl/1",1140),wAn(1154,1153,Z8n),MWn.ui=function(n){var t,e,i,r,c,a,u;if(8!=(e=n.xi())){if(0==(i=apn(n)))switch(e){case 1:case 9:null!=(u=n.Bi())&&(!(t=P5(BB(u,473))).c&&(t.c=new Bo),snn(t.c,n.Ai())),null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 3:null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 5:if(null!=(a=n.zi()))for(c=BB(a,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 4:null!=(u=n.Bi())&&0==(1&(r=BB(u,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()));break;case 6:if(null!=(u=n.Bi()))for(c=BB(u,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()))}this.Hk(i)}},MWn.Hk=function(n){dRn(this,n)},MWn.b=63,vX(l6n,"ESuperAdapter",1154),wAn(1155,1154,Z8n,dp),MWn.Hk=function(n){AIn(this,n)},vX(l6n,"EClassImpl/10",1155),wAn(1144,696,R9n),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Cfn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.lk=function(n,t){throw Hp(new pv)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.mk=function(n,t){throw Hp(new pv)},MWn.Wj=function(n){return this},MWn.fj=function(){return 0!=this.i},MWn.Wb=function(n){throw Hp(new pv)},MWn.Xj=function(){throw Hp(new pv)},vX(y9n,"EcoreEList/UnmodifiableEList",1144),wAn(319,1144,R9n,NO),MWn.ni=function(){return!1},vX(y9n,"EcoreEList/UnmodifiableEList/FastCompare",319),wAn(1147,319,R9n,don),MWn.Xc=function(n){var t,e;if(cL(n,170)&&-1!=(t=BB(n,170).aj()))for(e=this.i;t<e;++t)if(GC(this.g[t])===GC(n))return t;return-1},vX(l6n,"EClassImpl/1EAllStructuralFeaturesList",1147),wAn(1141,497,h8n,Eo),MWn.ri=function(n){return x8(VAt,B9n,87,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EGenericSuperTypeEList",1141),wAn(623,497,h8n,To),MWn.ri=function(n){return x8(FAt,N9n,170,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EStructuralFeatureUniqueEList",623),wAn(741,497,h8n,Mo),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1ReferenceList",741),wAn(1142,497,h8n,gp),MWn.bi=function(n,t){tz(this,BB(t,34))},MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/2",1142),wAn(1143,497,h8n,So),MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/3",1143),wAn(1145,319,R9n,EH),MWn.Fc=function(n){return mB(this,BB(n,34))},MWn.Yh=function(n){JE(this,BB(n,34))},vX(l6n,"EClassImpl/4",1145),wAn(1146,319,R9n,TH),MWn.Fc=function(n){return yB(this,BB(n,18))},MWn.Yh=function(n){ZE(this,BB(n,18))},vX(l6n,"EClassImpl/5",1146),wAn(1148,497,h8n,Po),MWn.ri=function(n){return x8(QAt,x9n,59,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/6",1148),wAn(1149,497,h8n,Io),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/7",1149),wAn(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1}),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return uFn(this,this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.lk=function(n,t){return wmn(this,n,t)},MWn.mk=function(n,t){return Fpn(this,n,t)},MWn.mi=function(n,t){return oFn(this,n,t)},MWn.pi=function(n){return this.Oi(n)},MWn.Zh=function(){return new ax(this)},MWn.Gi=function(){return this.Ji()},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"DelegatingNotifyingInternalEListImpl",1997),wAn(742,1997,H9n),MWn.ai=function(){var n;return cL(n=itn(jY(this.b),this.aj()).Yj(),148)&&!cL(n,457)&&0==(1&n.Bj().i)},MWn.Hc=function(n){var t,e,i,r,c,a,u;if(this.Fk()){if((u=this.Vi())>4){if(!this.wj(n))return!1;if(this.rk()){if(a=(t=(e=BB(n,49)).Ug())==this.b&&(this.Dk()?e.Og(e.Vg(),BB(itn(jY(this.b),this.aj()).Yj(),26).Bj())==Ivn(BB(itn(jY(this.b),this.aj()),18)).n:-1-e.Vg()==this.aj()),this.Ek()&&!a&&!t&&e.Zg())for(i=0;i<u;++i)if(GC(Gz(this,this.Oi(i)))===GC(n))return!0;return a}if(this.Dk()&&!this.Ck()){if(GC(r=BB(n,56).ah(Ivn(BB(itn(jY(this.b),this.aj()),18))))===GC(this.b))return!0;if(null==r||!BB(r,56).kh())return!1}}if(c=this.Li(n),this.Ek()&&!c)for(i=0;i<u;++i)if(GC(e=Gz(this,this.Oi(i)))===GC(n))return!0;return c}return this.Li(n)},MWn.Zi=function(n,t,e,i,r){return new N7(this.b,n,this.aj(),t,e,i,r)},MWn.$i=function(n){ban(this.b,n)},MWn.Wj=function(n){return this},MWn._i=function(){return itn(jY(this.b),this.aj())},MWn.aj=function(){return Awn(jY(this.b),itn(jY(this.b),this.aj()))},MWn.Ai=function(){return this.b},MWn.Bk=function(){return!!itn(jY(this.b),this.aj()).Yj().Bj()},MWn.bj=function(){var n;return!(!cL(n=itn(jY(this.b),this.aj()),99)||0==(BB(n,18).Bb&h6n)&&!Ivn(BB(n,18)))},MWn.Ck=function(){var n,t,e;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!(t=Ivn(BB(n,18)))&&((e=t.t)>1||-1==e)},MWn.Dk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!Ivn(BB(n,18))},MWn.Ek=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&BQn)},MWn.Xc=function(n){var t,e,i;if((e=this.Qi(n))>=0)return e;if(this.Fk())for(t=0,i=this.Vi();t<i;++t)if(GC(Gz(this,this.Oi(t)))===GC(n))return t;return-1},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.b,Ivn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.gh(this.b,Awn(e.Tg(),Ivn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.gh(this.b,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.b,Ivn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.ih(this.b,Awn(e.Tg(),Ivn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.ih(this.b,-1-this.aj(),null,t)},MWn.rk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&h6n)},MWn.Fk=function(){return cL(itn(jY(this.b),this.aj()).Yj(),88)},MWn.wj=function(n){return itn(jY(this.b),this.aj()).Yj().wj(n)},MWn.ej=function(){return mA(this.b)},MWn.fj=function(){return!this.Ri()},MWn.hi=function(){return itn(jY(this.b),this.aj()).hi()},MWn.li=function(n,t){return eGn(this,n,t)},MWn.Wb=function(n){vqn(this),pX(this,BB(n,15))},MWn.Pc=function(){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)eGn(this,n,this.Oi(n));return this.Wi()},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.Vi()-1;t>=0;--t)eGn(this,t,this.Oi(t));return this.Xi(n)},MWn.Xj=function(){vqn(this)},MWn.oi=function(n,t){return B9(this,n,t)},vX(y9n,"DelegatingEcoreEList",742),wAn(1150,742,H9n,uR),MWn.Hi=function(n,t){lD(this,n,BB(t,26))},MWn.Ii=function(n){e$(this,BB(n,26))},MWn.Oi=function(n){var t;return cL(t=BB(Wtn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ti=function(n){var t;return cL(t=BB(fDn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ui=function(n,t){return dmn(this,n,BB(t,26))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new pp(this)},MWn.Ki=function(){sqn(a4(this.a))},MWn.Li=function(n){return Ufn(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!Ufn(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==a4(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GC(t.Pb())!==GC(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e,i;for(t=1,n=new AL(a4(this.a));n.e!=n.i.gc();)t=31*t+((e=cL(i=BB(kpn(n),87).c,88)?BB(i,26):(gWn(),d$t))?PN(e):0);return t},MWn.Qi=function(n){var t,e,i,r;for(i=0,e=new AL(a4(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GC(n)===GC(cL(r=t.c,88)?BB(r,26):(gWn(),d$t)))return i;++i}return-1},MWn.Ri=function(){return 0==a4(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return a4(this.a).i},MWn.Wi=function(){var n,t,e,i,r,c;for(c=a4(this.a).i,r=x8(Ant,HWn,1,c,5,1),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),r[e++]=cL(i=n.c,88)?BB(i,26):(gWn(),d$t);return r},MWn.Xi=function(n){var t,e,i,r;for(r=a4(this.a).i,n.length<r&&(n=Den(tsn(n).c,r)),n.length>r&&$X(n,r,null),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)$X(n,e++,cL(i=BB(kpn(t),87).c,88)?BB(i,26):(gWn(),d$t));return n},MWn.Yi=function(){var n,t,e,i,r;for((r=new Sk).a+="[",n=a4(this.a),t=0,i=a4(this.a).i;t<i;)cO(r,kN(cL(e=BB(Wtn(n,t),87).c,88)?BB(e,26):(gWn(),d$t))),++t<i&&(r.a+=FWn);return r.a+="]",r.a},MWn.$i=function(n){},MWn.aj=function(){return 10},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,88)},MWn.fj=function(){return Q0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EClassImpl/8",1150),wAn(1151,1964,LVn,pp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return a4(this.a.a).i},vX(l6n,"EClassImpl/8/1",1151),wAn(1152,497,h8n,Co),MWn.ri=function(n){return x8(HAt,HWn,138,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/9",1152),wAn(1139,53,eYn,Cm),vX(l6n,"EClassImpl/MyHashSet",1139),wAn(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},Ev),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void CA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),u$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Ifn((CPn(),Z$t),this).ne(),this.Bb|=1},MWn.Fj=function(){var n,t;if(!this.c&&!(n=G$n(Utn(this))).dc())for(t=n.Kc();t.Ob();)N_n(this,SD(t.Pb()))&&Rln(this);return this.b},MWn.zj=function(){var n;if(!this.e){n=null;try{n=iyn(this)}catch(t){if(!cL(t=lun(t),102))throw Hp(t)}this.d=null,n&&0!=(1&n.i)&&(this.d=n==$Nt?(hN(),ptt):n==ANt?iln(0):n==DNt?new Nb(0):n==xNt?0:n==LNt?jgn(0):n==RNt?rln(0):n==NNt?Pnn(0):fun(0)),this.e=!0}return this.d},MWn.Ej=function(){return 0!=(256&this.Bb)},MWn.Ik=function(n){n&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},MWn.xk=function(n){Urn(this,n),this.Ik(n)},MWn.yk=function(n){this.C=n,this.e=!1},MWn.Ib=function(){var n;return 0!=(64&this.Db)?Iwn(this):((n=new fN(Iwn(this))).a+=" (serializable: ",yE(n,0!=(256&this.Bb)),n.a+=")",n.a)},MWn.c=!1,MWn.d=null,MWn.e=!1,vX(l6n,"EDataTypeImpl",566),wAn(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},Am),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return Qsn(this);case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),this.a}return U9(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),Ywn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return!!Qsn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void CA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)));case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),sqn(this.a),!this.a&&(this.a=new eU(WAt,this,9,5)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t)},MWn.zh=function(){return gWn(),o$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),void sqn(this.a)}qfn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.Gh=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n<t;++n)vx(Wtn(this.a,n));Ifn((CPn(),Z$t),this).ne(),this.Bb|=1},MWn.zj=function(){return Qsn(this)},MWn.wj=function(n){return null!=n},MWn.Ik=function(n){},vX(l6n,"EEnumImpl",457),wAn(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},jv),MWn.ne=function(){return this.zb},MWn.Qg=function(n){return lkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return iln(this.d);case 3:return this.b?this.b:this.a;case 4:return null==(i=this.c)?this.zb:i;case 5:return this.Db>>16==5?BB(this.Cb,671):null}return U9(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?lkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 5:return T_n(this,null,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0!=this.d;case 3:return!!this.b;case 4:return null!=this.c;case 5:return!(this.Db>>16!=5||!BB(this.Cb,671))}return O3(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void $en(this,BB(t,19).a);case 3:return void gOn(this,BB(t,1940));case 4:return void Fin(this,SD(t))}Lbn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t)},MWn.zh=function(){return gWn(),s$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void $en(this,0);case 3:return void gOn(this,null);case 4:return void Fin(this,null)}qfn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},MWn.b=null,MWn.c=null,MWn.d=0,vX(l6n,"EEnumLiteralImpl",573);var L$t,N$t,x$t,D$t=bq(l6n,"EFactoryImpl/InternalEDateTimeFormat");wAn(489,1,{2015:1},vp),vX(l6n,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),wAn(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},Kp),MWn.Sg=function(n,t,e){var i;return e=T_n(this,n,t,e),this.e&&cL(n,170)&&(i=kLn(this,this.e))!=this.c&&(e=azn(this,i,e)),e},MWn._g=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new $L(VAt,this,1)),this.d;case 2:return t?lFn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?qvn(this):this.a}return U9(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return nfn(this,null,e);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),_pn(this.d,n,e);case 3:return Zhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),f$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),f$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.f;case 1:return!!this.d&&0!=this.d.i;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return O3(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void jEn(this,BB(t,87));case 1:return!this.d&&(this.d=new $L(VAt,this,1)),sqn(this.d),!this.d&&(this.d=new $L(VAt,this,1)),void pX(this.d,BB(t,14));case 3:return void kEn(this,BB(t,87));case 4:return void DMn(this,BB(t,836));case 5:return void cen(this,BB(t,138))}Lbn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t)},MWn.zh=function(){return gWn(),f$t},MWn.Bh=function(n){switch(n){case 0:return void jEn(this,null);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),void sqn(this.d);case 3:return void kEn(this,null);case 4:return void DMn(this,null);case 5:return void cen(this,null)}qfn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.Ib=function(){var n;return(n=new lN(P$n(this))).a+=" (expression: ",bHn(this,n),n.a+=")",n.a},vX(l6n,"EGenericTypeImpl",241),wAn(1969,1964,q9n),MWn.Xh=function(n,t){nR(this,n,t)},MWn.lk=function(n,t){return nR(this,this.gc(),n),t},MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return this.$h()},MWn.Gi=function(){return new Pp(this)},MWn.$h=function(){return this._h(0)},MWn._h=function(n){return this.Gi().Zc(n)},MWn.mk=function(n,t){return ywn(this,n,!0),t},MWn.ii=function(n,t){var e;return e=tkn(this,t),this.Zc(n).Rb(e),e},MWn.ji=function(n,t){ywn(this,t,!0),this.Zc(n).Rb(t)},vX(y9n,"AbstractSequentialInternalEList",1969),wAn(486,1969,q9n,QN),MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn.Gi=function(){return new DO(this.a,this.b)},MWn.$h=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn._h=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.dc=function(){var n,t,e,i,r,c;if(null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(c=this.a.bh(n,!1),ZM(),BB(n,66).Oj()){for(i=0,r=(t=BB(c,153)).gc();i<r;++i)if(wX(t.il(i))&&null!=t.jl(i))return!1}else if(n.$j()){if(!BB(c,14).dc())return!1}else if(null!=c)return!1;return!0},MWn.Kc=function(){return Ern(this)},MWn.Zc=function(n){var t,e;if(null==this.b){if(0!=n)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Lk()?this.Kk():this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.Jk=function(){return new YN(this.a,this.b)},MWn.Kk=function(){return new Vx(this.a,this.b)},MWn.Lk=function(){return!0},MWn.gc=function(){var n,t,e,i,r,c,a;if(r=0,null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(a=this.a.bh(n,!1),ZM(),BB(n,66).Oj())for(i=0,c=(t=BB(a,153)).gc();i<c;++i)wX(t.il(i))&&null!=t.jl(i)&&++r;else n.$j()?r+=BB(a,14).gc():null!=a&&++r;return r},MWn.Mk=function(){return!0},vX(y9n,"EContentsEList",486),wAn(1156,486,q9n,Wx),MWn.Jk=function(){return new Qx(this.a,this.b)},MWn.Kk=function(){return new Yx(this.a,this.b)},MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1",1156),wAn(279,1,G9n,YN),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Nk=function(n){if(0!=this.g||this.e)throw Hp(new Fy("Iterator already in use or already filtered"));this.e=n},MWn.Ob=function(){var n,t,e,i,r,c;switch(this.g){case 3:case 2:return!0;case 1:return!1;case-3:this.p?this.p.Pb():++this.n;default:if(this.k&&(this.p?kPn(this,this.p):pOn(this)))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0;for(;this.d<this.c.length;)if(t=this.c[this.d++],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.$h():this.k.Yc(),this.p?kPn(this,this.p):pOn(this))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=2,!0;return this.k=null,this.p=null,this.f=!1,this.g=1,!1}},MWn.Sb=function(){var n,t,e,i,r,c;switch(this.g){case-3:case-2:return!0;case-1:return!1;case 3:this.p?this.p.Ub():--this.n;default:if(this.k&&(this.p?jPn(this,this.p):wIn(this)))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0;for(;this.d>0;)if(t=this.c[--this.d],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?jPn(this,this.p):wIn(this))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=-2,!0;return this.k=null,this.p=null,this.g=-1,!1}},MWn.Pb=function(){return Man(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Lk=function(){return!1},MWn.Wb=function(n){throw Hp(new pv)},MWn.Mk=function(){return!0},MWn.a=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.n=0,MWn.o=0,vX(y9n,"EContentsEList/FeatureIteratorImpl",279),wAn(697,279,G9n,Vx),MWn.Lk=function(){return!0},vX(y9n,"EContentsEList/ResolvingFeatureIteratorImpl",697),wAn(1157,697,G9n,Yx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/1",1157),wAn(1158,279,G9n,Qx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/2",1158),wAn(36,143,t9n,f4,l4,nU,k9,N7,t6,Hen,S0,qen,P0,J5,I0,Uen,C0,Z5,O0,Gen,A0,tU,j9,GQ,zen,$0,n6,L0),MWn._i=function(){return h9(this)},MWn.gj=function(){var n;return(n=h9(this))?n.zj():null},MWn.yi=function(n){return-1==this.b&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,n)},MWn.Ai=function(){return this.c},MWn.hj=function(){var n;return!!(n=h9(this))&&n.Kj()},MWn.b=-1,vX(l6n,"ENotificationImpl",36),wAn(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},$m),MWn.Qg=function(n){return Pkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,26):null;case 11:return!this.d&&(this.d=new NL(O$t,this,11)),this.d;case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oR(this,this)),this.a;case 14:return H7(this)}return U9(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Pkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),Ywn(this.c,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e);case 11:return!this.d&&(this.d=new NL(O$t,this,11)),_pn(this.d,n,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),_pn(this.c,n,e);case 14:return _pn(H7(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,26));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==H7(this.a.a).i||this.b&&Kvn(this.b));case 14:return!!this.b&&Kvn(this.b)}return O3(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),sqn(this.d),!this.d&&(this.d=new NL(O$t,this,11)),void pX(this.d,BB(t,14));case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),sqn(this.c),!this.c&&(this.c=new eU(YAt,this,12,10)),void pX(this.c,BB(t,14));case 13:return!this.a&&(this.a=new oR(this,this)),vqn(this.a),!this.a&&(this.a=new oR(this,this)),void pX(this.a,BB(t,14));case 14:return sqn(H7(this)),void pX(H7(this),BB(t,14))}Lbn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t)},MWn.zh=function(){return gWn(),g$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),void sqn(this.d);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),void sqn(this.c);case 13:return void(this.a&&vqn(this.a));case 14:return void(this.b&&sqn(this.b))}qfn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.Gh=function(){var n,t;if(this.c)for(n=0,t=this.c.i;n<t;++n)vx(Wtn(this.c,n));Ckn(this),this.Bb|=1},vX(l6n,"EOperationImpl",399),wAn(505,742,H9n,oR),MWn.Hi=function(n,t){fD(this,n,BB(t,138))},MWn.Ii=function(n){i$(this,BB(n,138))},MWn.Oi=function(n){return BB(Wtn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ti=function(n){return BB(fDn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ui=function(n,t){return bgn(this,n,BB(t,138))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new mp(this)},MWn.Ki=function(){sqn(H7(this.a))},MWn.Li=function(n){return oln(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!oln(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==H7(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GC(t.Pb())!==GC(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e;for(t=1,n=new AL(H7(this.a));n.e!=n.i.gc();)t=31*t+((e=BB(kpn(n),87).c||(gWn(),l$t))?nsn(e):0);return t},MWn.Qi=function(n){var t,e,i;for(i=0,e=new AL(H7(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GC(n)===GC(t.c||(gWn(),l$t)))return i;++i}return-1},MWn.Ri=function(){return 0==H7(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return H7(this.a).i},MWn.Wi=function(){var n,t,e,i,r;for(r=H7(this.a).i,i=x8(Ant,HWn,1,r,5,1),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),i[e++]=n.c||(gWn(),l$t);return i},MWn.Xi=function(n){var t,e,i;for(i=H7(this.a).i,n.length<i&&(n=Den(tsn(n).c,i)),n.length>i&&$X(n,i,null),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)$X(n,e++,BB(kpn(t),87).c||(gWn(),l$t));return n},MWn.Yi=function(){var n,t,e,i;for((i=new Sk).a+="[",n=H7(this.a),t=0,e=H7(this.a).i;t<e;)cO(i,kN(BB(Wtn(n,t),87).c||(gWn(),l$t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a},MWn.$i=function(n){},MWn.aj=function(){return 13},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,138)},MWn.fj=function(){return V0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EOperationImpl/1",505),wAn(1340,1964,LVn,mp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return H7(this.a.a).i},vX(l6n,"EOperationImpl/1/1",1340),wAn(1341,545,R9n,JG),MWn.ii=function(n,t){var e;return e=BB(Cln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),p$t),iln(t),e.c||l$t,n)),e},MWn.jj=function(n,t){return Mfn(this,BB(n,87),t)},MWn.kj=function(n,t){return Sfn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return Wgn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Kvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EOperationImpl/2",1341),wAn(498,1,{1938:1,498:1},OC),vX(l6n,"EPackageImpl/1",498),wAn(16,85,R9n,eU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectContainmentWithInverseEList",16),wAn(353,16,R9n,eK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Resolving",353),wAn(298,353,R9n,Jz),MWn.ci=function(){this.a.tb=null},vX(l6n,"EPackageImpl/2",298),wAn(1228,1,{},Oo),vX(l6n,"EPackageImpl/3",1228),wAn(718,43,tYn,Nm),MWn._b=function(n){return XC(n)?eY(this,n):!!AY(this.f,n)},vX(l6n,"EPackageRegistryImpl",718),wAn(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},Lm),MWn.Qg=function(n){return Ikn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,59):null}return U9(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Ikn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,59))}return O3(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n))},MWn.zh=function(){return gWn(),m$t},vX(l6n,"EParameterImpl",509),wAn(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},pD),MWn._g=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(r=this.t)>1||-1==r;case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return hN(),!(!(i=Ivn(this))||0==(i.Bb&h6n));case 20:return hN(),0!=(this.Bb&BQn);case 21:return t?Ivn(this):this.b;case 22:return t?Con(this):K5(this);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),this.a}return U9(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t,e)},MWn.lh=function(n){var t,e;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(e=this.t)>1||-1==e;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!(t=Ivn(this))&&0!=(t.Bb&h6n);case 20:return 0==(this.Bb&BQn);case 21:return!!this.b;case 22:return!!K5(this);case 23:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _C(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void YZ(this,qy(TD(t)));case 20:return void Uln(this,qy(TD(t)));case 21:return void rrn(this,BB(t,18));case 23:return!this.a&&(this.a=new RL(BAt,this,23)),sqn(this.a),!this.a&&(this.a=new RL(BAt,this,23)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t)},MWn.zh=function(){return gWn(),y$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&AIn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return zln(this,!1),void(cL(this.Cb,88)&&AIn(P5(BB(this.Cb,88)),2));case 20:return void Uln(this,!0);case 21:return void rrn(this,null);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),void sqn(this.a)}qfn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.Gh=function(){Con(this),kV(B7((CPn(),Z$t),this)),Ckn(this),this.Bb|=1},MWn.Lj=function(){return Ivn(this)},MWn.qk=function(){var n;return!!(n=Ivn(this))&&0!=(n.Bb&h6n)},MWn.rk=function(){return 0!=(this.Bb&h6n)},MWn.sk=function(){return 0!=(this.Bb&BQn)},MWn.nk=function(n,t){return this.c=null,Pfn(this,n,t)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (containment: ",yE(n,0!=(this.Bb&h6n)),n.a+=", resolveProxies: ",yE(n,0!=(this.Bb&BQn)),n.a+=")",n.a)},vX(l6n,"EReferenceImpl",99),wAn(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},Ao),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){vq(this,SD(n))},MWn.ed=function(n){return $H(this,SD(n))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return U9(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return O3(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void mq(this,SD(t));case 1:return void Kin(this,SD(t))}Lbn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t)},MWn.zh=function(){return gWn(),k$t},MWn.Bh=function(n){switch(n){case 0:return void Rin(this,null);case 1:return void Kin(this,null)}qfn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:vvn(n)),this.a},MWn.Th=function(n){this.a=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (key: ",cO(n,this.b),n.a+=", value: ",cO(n,this.c),n.a+=")",n.a)},MWn.a=-1,MWn.b=null,MWn.c=null;var R$t,K$t,_$t,F$t,B$t,H$t,q$t,G$t,z$t,U$t,X$t=vX(l6n,"EStringToStringMapEntryImpl",548),W$t=bq(y9n,"FeatureMap/Entry/Internal");wAn(565,1,z9n),MWn.Ok=function(n){return this.Pk(BB(n,49))},MWn.Pk=function(n){return this.Ok(n)},MWn.Fb=function(n){var t,e;return this===n||!!cL(n,72)&&(t=BB(n,72)).ak()==this.c&&(null==(e=this.dd())?null==t.dd():Nfn(e,t.dd()))},MWn.ak=function(){return this.c},MWn.Hb=function(){var n;return n=this.dd(),nsn(this.c)^(null==n?0:nsn(n))},MWn.Ib=function(){var n,t;return t=Utn((n=this.c).Hj()).Ph(),n.ne(),(null!=t&&0!=t.length?t+":"+n.ne():n.ne())+"="+this.dd()},vX(l6n,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),wAn(776,565,z9n,rR),MWn.Pk=function(n){return new rR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return Scn(this,n,this.a,t,e)},MWn.Rk=function(n,t,e){return Pcn(this,n,this.a,t,e)},vX(l6n,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),wAn(1314,1,{},AC),MWn.Pj=function(n,t,e,i,r){return BB(S9(n,this.b),215).nl(this.a).Wj(i)},MWn.Qj=function(n,t,e,i,r){return BB(S9(n,this.b),215).el(this.a,i,r)},MWn.Rj=function(n,t,e,i,r){return BB(S9(n,this.b),215).fl(this.a,i,r)},MWn.Sj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a).fj()},MWn.Tj=function(n,t,e,i){BB(S9(n,this.b),215).nl(this.a).Wb(i)},MWn.Uj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a)},MWn.Vj=function(n,t,e){BB(S9(n,this.b),215).nl(this.a).Xj()},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),wAn(89,1,{},PB,lQ,RY,w4),MWn.Pj=function(n,t,e,i,r){var c;if(null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),!r)switch(this.e){case 50:case 41:return BB(c,589).sj();case 40:return BB(c,215).kl()}return c},MWn.Qj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),BB(c,69).lk(i,r)},MWn.Rj=function(n,t,e,i,r){var c;return null!=(c=t.Ch(e))&&(r=BB(c,69).mk(i,r)),r},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&BB(i,76).fj()},MWn.Tj=function(n,t,e,i){var r;!(r=BB(t.Ch(e),76))&&t.Dh(e,r=iWn(this,n)),r.Wb(i)},MWn.Uj=function(n,t,e){var i;return null==(i=t.Ch(e))&&t.Dh(e,i=iWn(this,n)),cL(i,76)?BB(i,76):new Ep(BB(t.Ch(e),15))},MWn.Vj=function(n,t,e){var i;!(i=BB(t.Ch(e),76))&&t.Dh(e,i=iWn(this,n)),i.Xj()},MWn.b=0,MWn.e=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),wAn(504,1,{}),MWn.Qj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Rj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Uj=function(n,t,e){return new bQ(this,n,t,e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),wAn(1331,1,k9n,bQ),MWn.Wj=function(n){return this.a.Pj(this.c,this.d,this.b,n,!0)},MWn.fj=function(){return this.a.Sj(this.c,this.d,this.b)},MWn.Wb=function(n){this.a.Tj(this.c,this.d,this.b,n)},MWn.Xj=function(){this.a.Vj(this.c,this.d,this.b)},MWn.b=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),wAn(769,504,{},mJ),MWn.Pj=function(n,t,e,i,r){return gKn(n,n.eh(),n.Vg())==this.b?this.sk()&&i?cAn(n):n.eh():null},MWn.Qj=function(n,t,e,i,r){var c,a;return n.eh()&&(r=(c=n.Vg())>=0?n.Qg(r):n.eh().ih(n,-1-c,null,r)),a=Awn(n.Tg(),this.e),n.Sg(i,a,r)},MWn.Rj=function(n,t,e,i,r){var c;return c=Awn(n.Tg(),this.e),n.Sg(null,c,r)},MWn.Sj=function(n,t,e){var i;return i=Awn(n.Tg(),this.e),!!n.eh()&&n.Vg()==i},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));if(r=n.eh(),a=Awn(n.Tg(),this.e),GC(i)!==GC(r)||n.Vg()!=a&&null!=i){if(vkn(n,BB(i,56)))throw Hp(new _y(w6n+n.Ib()));o=null,r&&(o=(c=n.Vg())>=0?n.Qg(o):n.eh().ih(n,-1-c,null,o)),(u=BB(i,49))&&(o=u.gh(n,Awn(u.Tg(),this.b),null,o)),(o=n.Sg(u,a,o))&&o.Fi()}else n.Lg()&&n.Mg()&&ban(n,new nU(n,1,a,i,i))},MWn.Vj=function(n,t,e){var i,r,c;n.eh()?(c=(i=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-i,null,null),r=Awn(n.Tg(),this.e),(c=n.Sg(null,r,c))&&c.Fi()):n.Lg()&&n.Mg()&&ban(n,new tU(n,1,this.e,null,null))},MWn.sk=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),wAn(1315,769,{},IB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),wAn(563,504,{}),MWn.Pj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))?this.b:GC(c)===GC(R$t)?null:c},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&(GC(i)===GC(R$t)||!Nfn(i,this.b))},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=null==(c=t.Ch(e))?this.b:GC(c)===GC(R$t)?null:c,null==i?null!=this.c?(t.Dh(e,null),i=this.b):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Tk(n,1,this.e,r,i))):null==i?null!=this.c?t.Dh(e,null):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=null==(r=t.Ch(e))?this.b:GC(r)===GC(R$t)?null:r,t.Eh(e),ban(n,this.d.Tk(n,1,this.e,i,this.b))):t.Eh(e)},MWn.Sk=function(n){throw Hp(new bv)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),wAn(W9n,1,{},$o),MWn.Tk=function(n,t,e,i,r){return new tU(n,t,e,i,r)},MWn.Uk=function(n,t,e,i,r,c){return new GQ(n,t,e,i,r,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",W9n),wAn(1332,W9n,{},Lo),MWn.Tk=function(n,t,e,i,r){return new n6(n,t,e,qy(TD(i)),qy(TD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new L0(n,t,e,qy(TD(i)),qy(TD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),wAn(1333,W9n,{},No),MWn.Tk=function(n,t,e,i,r){return new Hen(n,t,e,BB(i,217).a,BB(r,217).a)},MWn.Uk=function(n,t,e,i,r,c){return new S0(n,t,e,BB(i,217).a,BB(r,217).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),wAn(1334,W9n,{},xo),MWn.Tk=function(n,t,e,i,r){return new qen(n,t,e,BB(i,172).a,BB(r,172).a)},MWn.Uk=function(n,t,e,i,r,c){return new P0(n,t,e,BB(i,172).a,BB(r,172).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),wAn(1335,W9n,{},Do),MWn.Tk=function(n,t,e,i,r){return new J5(n,t,e,Gy(MD(i)),Gy(MD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new I0(n,t,e,Gy(MD(i)),Gy(MD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),wAn(1336,W9n,{},Ro),MWn.Tk=function(n,t,e,i,r){return new Uen(n,t,e,BB(i,155).a,BB(r,155).a)},MWn.Uk=function(n,t,e,i,r,c){return new C0(n,t,e,BB(i,155).a,BB(r,155).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),wAn(1337,W9n,{},Ko),MWn.Tk=function(n,t,e,i,r){return new Z5(n,t,e,BB(i,19).a,BB(r,19).a)},MWn.Uk=function(n,t,e,i,r,c){return new O0(n,t,e,BB(i,19).a,BB(r,19).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),wAn(1338,W9n,{},_o),MWn.Tk=function(n,t,e,i,r){return new Gen(n,t,e,BB(i,162).a,BB(r,162).a)},MWn.Uk=function(n,t,e,i,r,c){return new A0(n,t,e,BB(i,162).a,BB(r,162).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),wAn(1339,W9n,{},Fo),MWn.Tk=function(n,t,e,i,r){return new zen(n,t,e,BB(i,184).a,BB(r,184).a)},MWn.Uk=function(n,t,e,i,r,c){return new $0(n,t,e,BB(i,184).a,BB(r,184).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),wAn(1317,563,{},wQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),wAn(1318,563,{},ZG),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),wAn(770,563,{}),MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=!0,null==(c=t.Ch(e))?(r=!1,c=this.b):GC(c)===GC(R$t)&&(c=null),null==i?null!=this.c?(t.Dh(e,null),i=this.b):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Uk(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.Dh(e,null):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=!0,null==(r=t.Ch(e))?(i=!1,r=this.b):GC(r)===GC(R$t)&&(r=null),t.Eh(e),ban(n,this.d.Uk(n,2,this.e,r,this.b,i))):t.Eh(e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),wAn(1319,770,{},dQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),wAn(1320,770,{},nz),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),wAn(398,504,{},cG),MWn.Pj=function(n,t,e,i,r){var c,a,u,o,s;if(s=t.Ch(e),this.Kj()&&GC(s)===GC(R$t))return null;if(this.sk()&&i&&null!=s){if((u=BB(s,49)).kh()&&u!=(o=tfn(n,u))){if(!SFn(this.a,o))throw Hp(new Ky(U9n+tsn(o)+X9n+this.a+"'"));t.Dh(e,s=o),this.rk()&&(c=BB(o,49),a=u.ih(n,this.b?Awn(u.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,null),!c.eh()&&(a=c.gh(n,this.b?Awn(c.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,a)),a&&a.Fi()),n.Lg()&&n.Mg()&&ban(n,new tU(n,9,this.e,u,o))}return s}return s},MWn.Qj=function(n,t,e,i,r){var c,a;return GC(a=t.Ch(e))===GC(R$t)&&(a=null),t.Dh(e,i),this.bj()?GC(a)!==GC(i)&&null!=a&&(r=(c=BB(a,49)).ih(n,Awn(c.Tg(),this.b),null,r)):this.rk()&&null!=a&&(r=BB(a,49).ih(n,-1-Awn(n.Tg(),this.e),null,r)),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),r.Ei(new tU(n,1,this.e,a,i))),r},MWn.Rj=function(n,t,e,i,r){var c;return GC(c=t.Ch(e))===GC(R$t)&&(c=null),t.Eh(e),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),this.Kj()?r.Ei(new tU(n,2,this.e,c,null)):r.Ei(new tU(n,1,this.e,c,null))),r},MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));u=null!=(o=t.Ch(e)),this.Kj()&&GC(o)===GC(R$t)&&(o=null),a=null,this.bj()?GC(o)!==GC(i)&&(null!=o&&(a=(r=BB(o,49)).ih(n,Awn(r.Tg(),this.b),null,a)),null!=i&&(a=(r=BB(i,49)).gh(n,Awn(r.Tg(),this.b),null,a))):this.rk()&&GC(o)!==GC(i)&&(null!=o&&(a=BB(o,49).ih(n,-1-Awn(n.Tg(),this.e),null,a)),null!=i&&(a=BB(i,49).gh(n,-1-Awn(n.Tg(),this.e),null,a))),null==i&&this.Kj()?t.Dh(e,R$t):t.Dh(e,i),n.Lg()&&n.Mg()?(c=new GQ(n,1,this.e,o,i,this.Kj()&&!u),a?(a.Ei(c),a.Fi()):ban(n,c)):a&&a.Fi()},MWn.Vj=function(n,t,e){var i,r,c,a,u;a=null!=(u=t.Ch(e)),this.Kj()&&GC(u)===GC(R$t)&&(u=null),c=null,null!=u&&(this.bj()?c=(i=BB(u,49)).ih(n,Awn(i.Tg(),this.b),null,c):this.rk()&&(c=BB(u,49).ih(n,-1-Awn(n.Tg(),this.e),null,c))),t.Eh(e),n.Lg()&&n.Mg()?(r=new GQ(n,this.Kj()?2:1,this.e,u,null,a),c?(c.Ei(r),c.Fi()):ban(n,r)):c&&c.Fi()},MWn.bj=function(){return!1},MWn.rk=function(){return!1},MWn.sk=function(){return!1},MWn.Kj=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),wAn(564,398,{},Zx),MWn.rk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),wAn(1323,564,{},nD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),wAn(772,564,{},tD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),wAn(1325,772,{},eD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),wAn(640,564,{},CB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),wAn(1324,640,{},$B),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),wAn(773,640,{},LB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),wAn(1326,773,{},NB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),wAn(641,398,{},iD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),wAn(1327,641,{},rD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),wAn(774,641,{},OB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),wAn(1328,774,{},xB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),wAn(1321,398,{},cD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),wAn(771,398,{},AB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),wAn(1322,771,{},DB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),wAn(775,565,z9n,aW),MWn.Pk=function(n){return new aW(this.a,this.c,n)},MWn.dd=function(){return this.b},MWn.Qk=function(n,t,e){return D8(this,n,this.b,e)},MWn.Rk=function(n,t,e){return R8(this,n,this.b,e)},vX(l6n,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),wAn(1329,1,k9n,Ep),MWn.Wj=function(n){return this.a},MWn.fj=function(){return cL(this.a,95)?BB(this.a,95).fj():!this.a.dc()},MWn.Wb=function(n){this.a.$b(),this.a.Gc(BB(n,15))},MWn.Xj=function(){cL(this.a,95)?BB(this.a,95).Xj():this.a.$b()},vX(l6n,"EStructuralFeatureImpl/SettingMany",1329),wAn(1330,565,z9n,g4),MWn.Ok=function(n){return new cR((Uqn(),FLt),this.b.Ih(this.a,n))},MWn.dd=function(){return null},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),wAn(642,565,z9n,cR),MWn.Ok=function(n){return new cR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),wAn(391,497,h8n,Bo),MWn.ri=function(n){return x8(qAt,HWn,26,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"ESuperAdapter/1",391),wAn(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},Ho),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new aG(this,VAt,this)),this.a}return U9(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),T$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),T$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return!this.a&&(this.a=new aG(this,VAt,this)),sqn(this.a),!this.a&&(this.a=new aG(this,VAt,this)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t)},MWn.zh=function(){return gWn(),T$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),void sqn(this.a)}qfn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},vX(l6n,"ETypeParameterImpl",444),wAn(445,85,R9n,aG),MWn.cj=function(n,t){return LTn(this,BB(n,87),t)},MWn.dj=function(n,t){return NTn(this,BB(n,87),t)},vX(l6n,"ETypeParameterImpl/1",445),wAn(634,43,tYn,xm),MWn.ec=function(){return new Tp(this)},vX(l6n,"ETypeParameterImpl/2",634),wAn(556,nVn,tVn,Tp),MWn.Fc=function(n){return YR(this,BB(n,87))},MWn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=BB(e.Pb(),87),null==VW(this.a,t,"")&&(i=!0);return i},MWn.$b=function(){$U(this.a)},MWn.Hc=function(n){return hU(this.a,n)},MWn.Kc=function(){return new Mp(new usn(new Pb(this.a).a))},MWn.Mc=function(n){return _6(this,n)},MWn.gc=function(){return NT(this.a)},vX(l6n,"ETypeParameterImpl/2/1",556),wAn(557,1,QWn,Mp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(ten(this.a).cd(),87)},MWn.Ob=function(){return this.a.b},MWn.Qb=function(){o9(this.a)},vX(l6n,"ETypeParameterImpl/2/1/1",557),wAn(1276,43,tYn,Dm),MWn._b=function(n){return XC(n)?eY(this,n):!!AY(this.f,n)},MWn.xc=function(n){var t;return cL(t=XC(n)?SJ(this,n):qC(AY(this.f,n)),837)?(t=BB(t,837)._j(),VW(this,BB(n,235),t),t):null!=t?t:null==n?(JM(),rLt):null},vX(l6n,"EValidatorRegistryImpl",1276),wAn(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},qo),MWn.Ih=function(n,t){switch(n.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return null==t?null:Bbn(t);case 25:return Xtn(t);case 27:return X9(t);case 28:return W9(t);case 29:return null==t?null:H$(COt[0],BB(t,199));case 41:return null==t?"":nE(BB(t,290));case 42:return Bbn(t);case 50:return SD(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Om;case 1:return new jo;case 2:return new _f;case 4:return new Ev;case 5:return new Am;case 6:return new jv;case 7:return new Rf;case 10:return new yo;case 11:return new $m;case 12:return new vY;case 13:return new Lm;case 14:return new pD;case 17:return new Ao;case 18:return new Kp;case 19:return new Ho;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 20:return null==t?null:new wE(t);case 21:return null==t?null:new $A(t);case 23:case 22:return null==t?null:Zdn(t);case 26:case 24:return null==t?null:Pnn(l_n(t,-128,127)<<24>>24);case 25:return d$n(t);case 27:return Syn(t);case 28:return Pyn(t);case 29:return gMn(t);case 32:case 31:return null==t?null:bSn(t);case 38:case 37:return null==t?null:new Dv(t);case 40:case 39:return null==t?null:iln(l_n(t,_Vn,DWn));case 41:case 42:return null;case 44:case 43:return null==t?null:jgn(rUn(t));case 49:case 48:return null==t?null:rln(l_n(t,Q9n,32767)<<16>>16);case 50:return t;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(l6n,"EcoreFactoryImpl",1313),wAn(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},UW),MWn.gb=!1,MWn.hb=!1;var V$t,Q$t=!1;vX(l6n,"EcorePackageImpl",547),wAn(1184,1,{837:1},Go),MWn._j=function(){return sN(),cLt},vX(l6n,"EcorePackageImpl/1",1184),wAn(1193,1,s7n,zo),MWn.wj=function(n){return cL(n,147)},MWn.xj=function(n){return x8(BOt,HWn,147,n,0,1)},vX(l6n,"EcorePackageImpl/10",1193),wAn(1194,1,s7n,Uo),MWn.wj=function(n){return cL(n,191)},MWn.xj=function(n){return x8(qOt,HWn,191,n,0,1)},vX(l6n,"EcorePackageImpl/11",1194),wAn(1195,1,s7n,Xo),MWn.wj=function(n){return cL(n,56)},MWn.xj=function(n){return x8(LOt,HWn,56,n,0,1)},vX(l6n,"EcorePackageImpl/12",1195),wAn(1196,1,s7n,Wo),MWn.wj=function(n){return cL(n,399)},MWn.xj=function(n){return x8(QAt,x9n,59,n,0,1)},vX(l6n,"EcorePackageImpl/13",1196),wAn(1197,1,s7n,Vo),MWn.wj=function(n){return cL(n,235)},MWn.xj=function(n){return x8(GOt,HWn,235,n,0,1)},vX(l6n,"EcorePackageImpl/14",1197),wAn(1198,1,s7n,Qo),MWn.wj=function(n){return cL(n,509)},MWn.xj=function(n){return x8(YAt,HWn,2017,n,0,1)},vX(l6n,"EcorePackageImpl/15",1198),wAn(1199,1,s7n,Yo),MWn.wj=function(n){return cL(n,99)},MWn.xj=function(n){return x8(JAt,N9n,18,n,0,1)},vX(l6n,"EcorePackageImpl/16",1199),wAn(1200,1,s7n,Jo),MWn.wj=function(n){return cL(n,170)},MWn.xj=function(n){return x8(FAt,N9n,170,n,0,1)},vX(l6n,"EcorePackageImpl/17",1200),wAn(1201,1,s7n,Zo),MWn.wj=function(n){return cL(n,472)},MWn.xj=function(n){return x8(_At,HWn,472,n,0,1)},vX(l6n,"EcorePackageImpl/18",1201),wAn(1202,1,s7n,ns),MWn.wj=function(n){return cL(n,548)},MWn.xj=function(n){return x8(X$t,a9n,548,n,0,1)},vX(l6n,"EcorePackageImpl/19",1202),wAn(1185,1,s7n,ts),MWn.wj=function(n){return cL(n,322)},MWn.xj=function(n){return x8(BAt,N9n,34,n,0,1)},vX(l6n,"EcorePackageImpl/2",1185),wAn(1203,1,s7n,es),MWn.wj=function(n){return cL(n,241)},MWn.xj=function(n){return x8(VAt,B9n,87,n,0,1)},vX(l6n,"EcorePackageImpl/20",1203),wAn(1204,1,s7n,is),MWn.wj=function(n){return cL(n,444)},MWn.xj=function(n){return x8(O$t,HWn,836,n,0,1)},vX(l6n,"EcorePackageImpl/21",1204),wAn(1205,1,s7n,rs),MWn.wj=function(n){return zC(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(l6n,"EcorePackageImpl/22",1205),wAn(1206,1,s7n,cs),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(l6n,"EcorePackageImpl/23",1206),wAn(1207,1,s7n,as),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(l6n,"EcorePackageImpl/24",1207),wAn(1208,1,s7n,us),MWn.wj=function(n){return cL(n,172)},MWn.xj=function(n){return x8(Stt,sVn,172,n,0,1)},vX(l6n,"EcorePackageImpl/25",1208),wAn(1209,1,s7n,os),MWn.wj=function(n){return cL(n,199)},MWn.xj=function(n){return x8(mtt,sVn,199,n,0,1)},vX(l6n,"EcorePackageImpl/26",1209),wAn(1210,1,s7n,ss),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(_Nt,HWn,2110,n,0,1)},vX(l6n,"EcorePackageImpl/27",1210),wAn(1211,1,s7n,hs),MWn.wj=function(n){return UC(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(l6n,"EcorePackageImpl/28",1211),wAn(1212,1,s7n,fs),MWn.wj=function(n){return cL(n,58)},MWn.xj=function(n){return x8(uAt,nZn,58,n,0,1)},vX(l6n,"EcorePackageImpl/29",1212),wAn(1186,1,s7n,ls),MWn.wj=function(n){return cL(n,510)},MWn.xj=function(n){return x8(KAt,{3:1,4:1,5:1,1934:1},590,n,0,1)},vX(l6n,"EcorePackageImpl/3",1186),wAn(1213,1,s7n,bs),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(yAt,HWn,1940,n,0,1)},vX(l6n,"EcorePackageImpl/30",1213),wAn(1214,1,s7n,ws),MWn.wj=function(n){return cL(n,153)},MWn.xj=function(n){return x8(oLt,nZn,153,n,0,1)},vX(l6n,"EcorePackageImpl/31",1214),wAn(1215,1,s7n,ds),MWn.wj=function(n){return cL(n,72)},MWn.xj=function(n){return x8($$t,h7n,72,n,0,1)},vX(l6n,"EcorePackageImpl/32",1215),wAn(1216,1,s7n,gs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Itt,sVn,155,n,0,1)},vX(l6n,"EcorePackageImpl/33",1216),wAn(1217,1,s7n,ps),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(l6n,"EcorePackageImpl/34",1217),wAn(1218,1,s7n,vs),MWn.wj=function(n){return cL(n,290)},MWn.xj=function(n){return x8($nt,HWn,290,n,0,1)},vX(l6n,"EcorePackageImpl/35",1218),wAn(1219,1,s7n,ms),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(l6n,"EcorePackageImpl/36",1219),wAn(1220,1,s7n,ys),MWn.wj=function(n){return cL(n,83)},MWn.xj=function(n){return x8(Nnt,HWn,83,n,0,1)},vX(l6n,"EcorePackageImpl/37",1220),wAn(1221,1,s7n,ks),MWn.wj=function(n){return cL(n,591)},MWn.xj=function(n){return x8(iLt,HWn,591,n,0,1)},vX(l6n,"EcorePackageImpl/38",1221),wAn(1222,1,s7n,js),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(FNt,HWn,2111,n,0,1)},vX(l6n,"EcorePackageImpl/39",1222),wAn(1187,1,s7n,Es),MWn.wj=function(n){return cL(n,88)},MWn.xj=function(n){return x8(qAt,HWn,26,n,0,1)},vX(l6n,"EcorePackageImpl/4",1187),wAn(1223,1,s7n,Ts),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(l6n,"EcorePackageImpl/40",1223),wAn(1224,1,s7n,Ms),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(l6n,"EcorePackageImpl/41",1224),wAn(1225,1,s7n,Ss),MWn.wj=function(n){return cL(n,588)},MWn.xj=function(n){return x8(sAt,HWn,588,n,0,1)},vX(l6n,"EcorePackageImpl/42",1225),wAn(1226,1,s7n,Ps),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(BNt,sVn,2112,n,0,1)},vX(l6n,"EcorePackageImpl/43",1226),wAn(1227,1,s7n,Is),MWn.wj=function(n){return cL(n,42)},MWn.xj=function(n){return x8(Hnt,kVn,42,n,0,1)},vX(l6n,"EcorePackageImpl/44",1227),wAn(1188,1,s7n,Cs),MWn.wj=function(n){return cL(n,138)},MWn.xj=function(n){return x8(HAt,HWn,138,n,0,1)},vX(l6n,"EcorePackageImpl/5",1188),wAn(1189,1,s7n,Os),MWn.wj=function(n){return cL(n,148)},MWn.xj=function(n){return x8(GAt,HWn,148,n,0,1)},vX(l6n,"EcorePackageImpl/6",1189),wAn(1190,1,s7n,As),MWn.wj=function(n){return cL(n,457)},MWn.xj=function(n){return x8(XAt,HWn,671,n,0,1)},vX(l6n,"EcorePackageImpl/7",1190),wAn(1191,1,s7n,$s),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(WAt,HWn,678,n,0,1)},vX(l6n,"EcorePackageImpl/8",1191),wAn(1192,1,s7n,Ls),MWn.wj=function(n){return cL(n,471)},MWn.xj=function(n){return x8(HOt,HWn,471,n,0,1)},vX(l6n,"EcorePackageImpl/9",1192),wAn(1025,1982,r9n,xy),MWn.bi=function(n,t){Afn(this,BB(t,415))},MWn.fi=function(n,t){eIn(this,n,BB(t,415))},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),wAn(1026,143,t9n,uW),MWn.Ai=function(){return this.a.a},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),wAn(1053,1052,{},o$),vX("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var Y$t,J$t,Z$t,nLt,tLt,eLt,iLt=bq(f7n,"Resource");wAn(781,1378,l7n),MWn.Yk=function(n){},MWn.Zk=function(n){},MWn.Vk=function(){return!this.a&&(this.a=new Sp(this)),this.a},MWn.Wk=function(n){var t,e,i,r,c;if((i=n.length)>0){if(b1(0,n.length),47==n.charCodeAt(0)){for(c=new J6(4),r=1,t=1;t<i;++t)b1(t,n.length),47==n.charCodeAt(t)&&(WB(c,r==t?"":n.substr(r,t-r)),r=t+1);return WB(c,n.substr(r)),ojn(this,c)}b1(i-1,n.length),63==n.charCodeAt(i-1)&&(e=MK(n,YTn(63),i-2))>0&&(n=n.substr(0,e))}return jCn(this,n)},MWn.Xk=function(){return this.c},MWn.Ib=function(){return nE(this.gm)+"@"+(nsn(this)>>>0).toString(16)+" uri='"+this.d+"'"},MWn.b=!1,vX(b7n,"ResourceImpl",781),wAn(1379,781,l7n,Ip),vX(b7n,"BinaryResourceImpl",1379),wAn(1169,694,f8n),MWn.si=function(n){return cL(n,56)?TY(this,BB(n,56)):cL(n,591)?new AL(BB(n,591).Vk()):GC(n)===GC(this.f)?BB(n,14).Kc():(dD(),pAt.a)},MWn.Ob=function(){return bOn(this)},MWn.a=!1,vX(y9n,"EcoreUtil/ContentTreeIterator",1169),wAn(1380,1169,f8n,rU),MWn.si=function(n){return GC(n)===GC(this.f)?BB(n,15).Kc():new F2(BB(n,56))},vX(b7n,"ResourceImpl/5",1380),wAn(648,1994,D9n,Sp),MWn.Hc=function(n){return this.i<=4?Sjn(this,n):cL(n,49)&&BB(n,49).Zg()==this.a},MWn.bi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},MWn.di=function(n,t){0==n?this.a.b||(this.a.b=!0):L8(this,n,t)},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.aj=function(){return 2},MWn.Ai=function(){return this.a},MWn.bj=function(){return!0},MWn.cj=function(n,t){return t=BB(n,49).wh(this.a,t)},MWn.dj=function(n,t){return BB(n,49).wh(null,t)},MWn.ej=function(){return!1},MWn.hi=function(){return!0},MWn.ri=function(n){return x8(LOt,HWn,56,n,0,1)},MWn.ni=function(){return!1},vX(b7n,"ResourceImpl/ContentsEList",648),wAn(957,1964,LVn,Pp),MWn.Zc=function(n){return this.a._h(n)},MWn.gc=function(){return this.a.gc()},vX(y9n,"AbstractSequentialInternalEList/1",957),wAn(624,1,{},SH),vX(y9n,"BasicExtendedMetaData",624),wAn(1160,1,{},$C),MWn.$k=function(){return null},MWn._k=function(){return-2==this.a&&ob(this,aMn(this.d,this.b)),this.a},MWn.al=function(){return null},MWn.bl=function(){return SQ(),SQ(),set},MWn.ne=function(){return this.c==I7n&&hb(this,Egn(this.d,this.b)),this.c},MWn.cl=function(){return 0},MWn.a=-2,MWn.c=I7n,vX(y9n,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),wAn(1161,1,{},_0),MWn.$k=function(){return this.a==(R5(),tLt)&&sb(this,vNn(this.f,this.b)),this.a},MWn._k=function(){return 0},MWn.al=function(){return this.c==(R5(),tLt)&&fb(this,mNn(this.f,this.b)),this.c},MWn.bl=function(){return!this.d&&lb(this,SKn(this.f,this.b)),this.d},MWn.ne=function(){return this.e==I7n&&bb(this,Egn(this.f,this.b)),this.e},MWn.cl=function(){return-2==this.g&&wb(this,YEn(this.f,this.b)),this.g},MWn.e=I7n,MWn.g=-2,vX(y9n,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),wAn(1159,1,{},RC),MWn.b=!1,MWn.c=!1,vX(y9n,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),wAn(1162,1,{},K0),MWn.c=-2,MWn.e=I7n,MWn.f=I7n,vX(y9n,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),wAn(585,622,R9n,MH),MWn.aj=function(){return this.c},MWn.Fk=function(){return!1},MWn.li=function(n,t){return t},MWn.c=0,vX(y9n,"EDataTypeEList",585);var rLt,cLt,aLt,uLt,oLt=bq(y9n,"FeatureMap");wAn(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},Ecn),MWn.Vc=function(n,t){lNn(this,n,BB(t,72))},MWn.Fc=function(n){return uLn(this,BB(n,72))},MWn.Yh=function(n){dX(this,BB(n,72))},MWn.cj=function(n,t){return HK(this,BB(n,72),t)},MWn.dj=function(n,t){return qK(this,BB(n,72),t)},MWn.ii=function(n,t){return a_n(this,n,t)},MWn.li=function(n,t){return hGn(this,n,BB(t,72))},MWn._c=function(n,t){return Pxn(this,n,BB(t,72))},MWn.jj=function(n,t){return GK(this,BB(n,72),t)},MWn.kj=function(n,t){return zK(this,BB(n,72),t)},MWn.lj=function(n,t,e){return gEn(this,BB(n,72),BB(t,72),e)},MWn.oi=function(n,t){return sTn(this,n,BB(t,72))},MWn.dl=function(n,t){return xKn(this,n,t)},MWn.Wc=function(n,t){var e,i,r,c,a,u,o,s,h;for(s=new gtn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=BB(r.Pb(),72)).ak(),$xn(this.e,c))(!c.hi()||!G3(this,c,i.dd())&&!Sjn(s,i))&&f9(s,i);else{for(h=axn(this.e.Tg(),c),e=BB(this.g,119),a=!0,u=0;u<this.i;++u)if(o=e[u],h.rl(o.ak())){BB(ovn(this,u,i),72),a=!1;break}a&&f9(s,i)}return oon(this,n,s)},MWn.Gc=function(n){var t,e,i,r,c,a,u,o,s;for(o=new gtn(n.gc()),i=n.Kc();i.Ob();)if(r=(e=BB(i.Pb(),72)).ak(),$xn(this.e,r))(!r.hi()||!G3(this,r,e.dd())&&!Sjn(o,e))&&f9(o,e);else{for(s=axn(this.e.Tg(),r),t=BB(this.g,119),c=!0,a=0;a<this.i;++a)if(u=t[a],s.rl(u.ak())){BB(ovn(this,a,e),72),c=!1;break}c&&f9(o,e)}return pX(this,o)},MWn.Wh=function(n){return this.j=-1,LFn(this,this.i,n)},MWn.el=function(n,t,e){return PRn(this,n,t,e)},MWn.mk=function(n,t){return TKn(this,n,t)},MWn.fl=function(n,t,e){return ZBn(this,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this,n,t)},MWn.il=function(n){return BB(Wtn(this,n),72).ak()},MWn.jl=function(n){return BB(Wtn(this,n),72).dd()},MWn.kl=function(){return this.b},MWn.bj=function(){return!0},MWn.ij=function(){return!0},MWn.ll=function(n){return!adn(this,n)},MWn.ri=function(n){return x8(W$t,h7n,332,n,0,1)},MWn.Gk=function(n){return hD(this,n)},MWn.Wb=function(n){tX(this,n)},MWn.ml=function(n,t){MHn(this,n,t)},MWn.nl=function(n){return zin(this,n)},MWn.ol=function(n){Kmn(this,n)},vX(y9n,"BasicFeatureMap",75),wAn(1851,1,cVn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{Axn(this.e,this.b,this.a,n),this.d=this.e.j,cvn(this)}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.Ob=function(){return Ksn(this)},MWn.Sb=function(){return _sn(this)},MWn.Pb=function(){return cvn(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(_sn(this))return mz(this),this.g=--this.a,this.Lk()&&(n=FCn(this.e,this.b,this.c,this.a,this.j),this.j=n),this.i=0,this.j;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){if(-1==this.g)throw Hp(new dv);mz(this);try{aPn(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(n){throw cL(n=lun(n),73)?Hp(new vv):Hp(n)}},MWn.Lk=function(){return!1},MWn.Wb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{XFn(this.e,this.b,this.g,n),this.d=this.e.j}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.a=0,MWn.c=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.i=0,vX(y9n,"FeatureMapUtil/BasicFeatureEIterator",1851),wAn(410,1851,cVn,Aan),MWn.pl=function(){var n,t,e;for(e=this.e.i,n=BB(this.e.g,119);this.c<e;){if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},MWn.ql=function(){var n,t;for(n=BB(this.e.g,119);--this.c>=0;)if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},vX(y9n,"BasicFeatureMap/FeatureEIterator",410),wAn(662,410,cVn,xO),MWn.Lk=function(){return!0},vX(y9n,"BasicFeatureMap/ResolvingFeatureEIterator",662),wAn(955,486,q9n,z$),MWn.Gi=function(){return this},vX(y9n,"EContentsEList/1",955),wAn(956,486,q9n,DO),MWn.Lk=function(){return!1},vX(y9n,"EContentsEList/2",956),wAn(954,279,G9n,U$),MWn.Nk=function(n){},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},vX(y9n,"EContentsEList/FeatureIteratorImpl/1",954),wAn(825,585,R9n,KL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EDataTypeEList/Unsettable",825),wAn(1849,585,R9n,_L),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList",1849),wAn(1850,825,R9n,FL),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList/Unsettable",1850),wAn(139,85,R9n,NL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Resolving",139),wAn(1163,545,R9n,xL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Unsettable/Resolving",1163),wAn(748,16,R9n,iK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectContainmentWithInverseEList/Unsettable",748),wAn(1173,748,R9n,rK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),wAn(743,496,R9n,DL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectEList/Unsettable",743),wAn(328,496,R9n,RL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList",328),wAn(1641,743,R9n,BL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList/Unsettable",1641),wAn(1381,1,{},Ns),vX(y9n,"EObjectValidator",1381),wAn(546,496,R9n,iU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.bj=function(){return!0},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectWithInverseEList",546),wAn(1176,546,R9n,cK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/ManyInverse",1176),wAn(625,546,R9n,aK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectWithInverseEList/Unsettable",625),wAn(1175,625,R9n,oK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),wAn(749,546,R9n,uK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList",749),wAn(31,749,R9n,hK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/ManyInverse",31),wAn(750,625,R9n,sK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable",750),wAn(1174,750,R9n,fK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),wAn(1164,622,R9n),MWn.ai=function(){return 0==(1792&this.b)},MWn.ci=function(){this.b|=1},MWn.Bk=function(){return 0!=(4&this.b)},MWn.bj=function(){return 0!=(40&this.b)},MWn.Ck=function(){return 0!=(16&this.b)},MWn.Dk=function(){return 0!=(8&this.b)},MWn.Ek=function(){return 0!=(this.b&M9n)},MWn.rk=function(){return 0!=(32&this.b)},MWn.Fk=function(){return 0!=(this.b&k6n)},MWn.wj=function(n){return this.d?x3(this.d,n):this.ak().Yj().wj(n)},MWn.fj=function(){return 0!=(2&this.b)?0!=(1&this.b):0!=this.i},MWn.hi=function(){return 0!=(128&this.b)},MWn.Xj=function(){var n;sqn(this),0!=(2&this.b)&&(mA(this.e)?(n=0!=(1&this.b),this.b&=-2,Lv(this,new t6(this.e,2,Awn(this.e.Tg(),this.ak()),n,!1))):this.b&=-2)},MWn.ni=function(){return 0==(1536&this.b)},MWn.b=0,vX(y9n,"EcoreEList/Generic",1164),wAn(1165,1164,R9n,zQ),MWn.ak=function(){return this.a},vX(y9n,"EcoreEList/Dynamic",1165),wAn(747,63,h8n,Cp),MWn.ri=function(n){return Den(this.a.a,n)},vX(y9n,"EcoreEMap/1",747),wAn(746,85,R9n,Zz),MWn.bi=function(n,t){Cvn(this.b,BB(t,133))},MWn.di=function(n,t){aan(this.b)},MWn.ei=function(n,t,e){var i;++(i=this.b,BB(t,133),i).e},MWn.fi=function(n,t){Oln(this.b,BB(t,133))},MWn.gi=function(n,t,e){Oln(this.b,BB(e,133)),GC(e)===GC(t)&&BB(e,133).Th(c$(BB(t,133).cd())),Cvn(this.b,BB(t,133))},vX(y9n,"EcoreEMap/DelegateEObjectContainmentEList",746),wAn(1171,151,j9n,yin),vX(y9n,"EcoreEMap/Unsettable",1171),wAn(1172,746,R9n,lK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),wAn(1168,228,tYn,lX),MWn.a=!1,MWn.b=!1,vX(y9n,"EcoreUtil/Copier",1168),wAn(745,1,QWn,F2),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return udn(this)},MWn.Pb=function(){var n;return udn(this),n=this.b,this.b=null,n},MWn.Qb=function(){this.a.Qb()},vX(y9n,"EcoreUtil/ProperContentIterator",745),wAn(1382,1381,{},Ff),vX(y9n,"EcoreValidator",1382),bq(y9n,"FeatureMapUtil/Validator"),wAn(1260,1,{1942:1},xs),MWn.rl=function(n){return!0},vX(y9n,"FeatureMapUtil/1",1260),wAn(757,1,{1942:1},cUn),MWn.rl=function(n){var t;return this.c==n||(null==(t=TD(RX(this.a,n)))?xRn(this,n)?(r6(this.a,n,(hN(),vtt)),!0):(r6(this.a,n,(hN(),ptt)),!1):t==(hN(),vtt))},MWn.e=!1,vX(y9n,"FeatureMapUtil/BasicValidator",757),wAn(758,43,tYn,X$),vX(y9n,"FeatureMapUtil/BasicValidator/Cache",758),wAn(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},xC),MWn.Vc=function(n,t){Axn(this.c,this.b,n,t)},MWn.Fc=function(n){return xKn(this.c,this.b,n)},MWn.Wc=function(n,t){return jHn(this.c,this.b,n,t)},MWn.Gc=function(n){return Z$(this,n)},MWn.Xh=function(n,t){htn(this.c,this.b,n,t)},MWn.lk=function(n,t){return PRn(this.c,this.b,n,t)},MWn.pi=function(n){return iHn(this.c,this.b,n,!1)},MWn.Zh=function(){return jA(this.c,this.b)},MWn.$h=function(){return EA(this.c,this.b)},MWn._h=function(n){return $8(this.c,this.b,n)},MWn.mk=function(n,t){return tR(this,n,t)},MWn.$b=function(){Nv(this)},MWn.Hc=function(n){return G3(this.c,this.b,n)},MWn.Ic=function(n){return Mcn(this.c,this.b,n)},MWn.Xb=function(n){return iHn(this.c,this.b,n,!0)},MWn.Wj=function(n){return this},MWn.Xc=function(n){return z3(this.c,this.b,n)},MWn.dc=function(){return HC(this)},MWn.fj=function(){return!adn(this.c,this.b)},MWn.Kc=function(){return cnn(this.c,this.b)},MWn.Yc=function(){return ann(this.c,this.b)},MWn.Zc=function(n){return lln(this.c,this.b,n)},MWn.ii=function(n,t){return mFn(this.c,this.b,n,t)},MWn.ji=function(n,t){Q6(this.c,this.b,n,t)},MWn.$c=function(n){return aPn(this.c,this.b,n)},MWn.Mc=function(n){return IKn(this.c,this.b,n)},MWn._c=function(n,t){return XFn(this.c,this.b,n,t)},MWn.Wb=function(n){AOn(this.c,this.b),Z$(this,BB(n,15))},MWn.gc=function(){return Kln(this.c,this.b)},MWn.Pc=function(){return G1(this.c,this.b)},MWn.Qc=function(n){return U3(this.c,this.b,n)},MWn.Ib=function(){var n,t;for((t=new Sk).a+="[",n=jA(this.c,this.b);Ksn(n);)cO(t,kN(cvn(n))),Ksn(n)&&(t.a+=FWn);return t.a+="]",t.a},MWn.Xj=function(){AOn(this.c,this.b)},vX(y9n,"FeatureMapUtil/FeatureEList",501),wAn(627,36,t9n,b4),MWn.yi=function(n){return eln(this,n)},MWn.Di=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0;break;case 3:if(3===n.xi()&&GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return this.d=5,f9(t=new gtn(2),this.g),f9(t,n.zi()),this.g=t,!0;break;case 5:if(3===n.xi()&&GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return BB(this.g,14).Fc(n.zi()),!0;break;case 4:switch(n.xi()){case 3:if(GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return this.d=1,this.g=n.zi(),!0;break;case 4:if(GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return this.d=6,f9(r=new gtn(2),this.n),f9(r,n.Bi()),this.n=r,i=Pun(Gk(ANt,1),hQn,25,15,[this.o,n.Ci()]),this.g=i,!0}break;case 6:if(4===n.xi()&&GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return BB(this.n,14).Fc(n.Bi()),aHn(i=BB(this.g,48),0,e=x8(ANt,hQn,25,i.length+1,15,1),0,i.length),e[i.length]=n.Ci(),this.g=e,!0}return!1},vX(y9n,"FeatureMapUtil/FeatureENotificationImpl",627),wAn(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},lq),MWn.dl=function(n,t){return xKn(this.c,n,t)},MWn.el=function(n,t,e){return PRn(this.c,n,t,e)},MWn.fl=function(n,t,e){return ZBn(this.c,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this.c,n,t)},MWn.il=function(n){return BB(iHn(this.c,this.b,n,!1),72).ak()},MWn.jl=function(n){return BB(iHn(this.c,this.b,n,!1),72).dd()},MWn.kl=function(){return this.a},MWn.ll=function(n){return!adn(this.c,n)},MWn.ml=function(n,t){MHn(this.c,n,t)},MWn.nl=function(n){return zin(this.c,n)},MWn.ol=function(n){Kmn(this.c,n)},vX(y9n,"FeatureMapUtil/FeatureFeatureMap",552),wAn(1259,1,k9n,KC),MWn.Wj=function(n){return iHn(this.b,this.a,-1,n)},MWn.fj=function(){return!adn(this.b,this.a)},MWn.Wb=function(n){MHn(this.b,this.a,n)},MWn.Xj=function(){AOn(this.b,this.a)},vX(y9n,"FeatureMapUtil/FeatureValue",1259);var sLt,hLt,fLt,lLt,bLt,wLt=bq(O7n,"AnyType");wAn(666,60,BVn,ik),vX(O7n,"InvalidDatatypeValueException",666);var dLt,gLt,pLt,vLt,mLt,yLt,kLt,jLt,ELt,TLt,MLt,SLt,PLt,ILt,CLt,OLt,ALt,$Lt,LLt,NLt,xLt,DLt,RLt,KLt,_Lt,FLt,BLt,HLt,qLt,GLt,zLt=bq(O7n,A7n),ULt=bq(O7n,$7n),XLt=bq(O7n,L7n);wAn(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},Rm),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b)}return U9(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new Ecn(this,0)),TKn(this.c,n,e);case 1:return(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),69)).mk(n,e);case 2:return!this.b&&(this.b=new Ecn(this,2)),TKn(this.b,n,e)}return BB(itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i}return O3(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t)}Lbn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),pLt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b)}qfn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.c),n.a+=", anyAttribute: ",rO(n,this.b),n.a+=")",n.a)},vX(N7n,"AnyTypeImpl",830),wAn(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},Rs),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return U9(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return O3(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return void kb(this,SD(t));case 1:return void jb(this,SD(t))}Lbn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),OLt},MWn.Bh=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}qfn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (data: ",cO(n,this.a),n.a+=", target: ",cO(n,this.b),n.a+=")",n.a)},MWn.a=null,MWn.b=null,vX(N7n,"ProcessingInstructionImpl",667),wAn(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},_m),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return this.a}return U9(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new Ecn(this,0)),null!=SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return null!=gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return!!this.a}return O3(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t);case 3:return void F0(this,SD(t));case 4:return void F0(this,pK(this.a,t));case 5:return void Eb(this,BB(t,148))}Lbn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),$Lt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),void MHn(this.c,(Uqn(),LLt),null);case 4:return void F0(this,pK(this.a,null));case 5:return void(this.a=null)}qfn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},vX(N7n,"SimpleAnyTypeImpl",668),wAn(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},Km),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new Ecn(this,0)),this.a):(!this.a&&(this.a=new Ecn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),this.b):(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),A8(this.b));case 2:return e?(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),this.c):(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),A8(this.c));case 3:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),DLt));case 4:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),RLt));case 5:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),_Lt));case 6:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),FLt))}return U9(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new Ecn(this,0)),TKn(this.a,n,e);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),BK(this.b,n,e);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),BK(this.c,n,e);case 5:return!this.a&&(this.a=new Ecn(this,0)),tR(n1(this.a,(Uqn(),_Lt)),n,e)}return BB(itn(0==(2&this.j)?(Uqn(),xLt):(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX((Uqn(),xLt)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.a&&0!=this.a.i;case 1:return!!this.b&&0!=this.b.f;case 2:return!!this.c&&0!=this.c.f;case 3:return!this.a&&(this.a=new Ecn(this,0)),!HC(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),!HC(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),!HC(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),!HC(n1(this.a,(Uqn(),FLt)))}return O3(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void tX(this.a,t);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void tan(this.b,t);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void tan(this.c,t);case 3:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),DLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,DLt),BB(t,14));case 4:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),RLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,RLt),BB(t,14));case 5:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),_Lt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,_Lt),BB(t,14));case 6:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),FLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,FLt),BB(t,14))}Lbn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),xLt},MWn.Bh=function(n){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void sqn(this.a);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),FLt)))}qfn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.a),n.a+=")",n.a)},vX(N7n,"XMLTypeDocumentRootImpl",669),wAn(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},Ds),MWn.Ih=function(n,t){switch(n.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return null==t?null:Bbn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return SD(t);case 6:return mD(BB(t,190));case 12:case 47:case 49:case 11:return qGn(this,n,t);case 13:return null==t?null:GBn(BB(t,240));case 15:case 14:return null==t?null:RU(Gy(MD(t)));case 17:return EEn((Uqn(),t));case 18:return EEn(t);case 21:case 20:return null==t?null:KU(BB(t,155).a);case 27:return yD(BB(t,190));case 30:return _mn((Uqn(),BB(t,15)));case 31:return _mn(BB(t,15));case 40:return jD((Uqn(),t));case 42:return TEn((Uqn(),t));case 43:return TEn(t);case 59:case 48:return kD((Uqn(),t));default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Rm;case 1:return new Rs;case 2:return new _m;case 3:return new Km;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;switch(n.yj()){case 5:case 52:case 4:return t;case 6:return ypn(t);case 8:case 7:return null==t?null:_En(t);case 9:return null==t?null:Pnn(l_n((i=FBn(t,!0)).length>0&&(b1(0,i.length),43==i.charCodeAt(0))?i.substr(1):i,-128,127)<<24>>24);case 10:return null==t?null:Pnn(l_n((r=FBn(t,!0)).length>0&&(b1(0,r.length),43==r.charCodeAt(0))?r.substr(1):r,-128,127)<<24>>24);case 11:return SD(xXn(this,(Uqn(),kLt),t));case 12:return SD(xXn(this,(Uqn(),jLt),t));case 13:return null==t?null:new wE(FBn(t,!0));case 15:case 14:return gLn(t);case 16:return SD(xXn(this,(Uqn(),ELt),t));case 17:return Hdn((Uqn(),t));case 18:return Hdn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return FBn(t,!0);case 21:case 20:return CLn(t);case 22:return SD(xXn(this,(Uqn(),TLt),t));case 23:return SD(xXn(this,(Uqn(),MLt),t));case 24:return SD(xXn(this,(Uqn(),SLt),t));case 25:return SD(xXn(this,(Uqn(),PLt),t));case 26:return SD(xXn(this,(Uqn(),ILt),t));case 27:return Zgn(t);case 30:return qdn((Uqn(),t));case 31:return qdn(t);case 32:return null==t?null:iln(l_n((h=FBn(t,!0)).length>0&&(b1(0,h.length),43==h.charCodeAt(0))?h.substr(1):h,_Vn,DWn));case 33:return null==t?null:new $A((f=FBn(t,!0)).length>0&&(b1(0,f.length),43==f.charCodeAt(0))?f.substr(1):f);case 34:return null==t?null:iln(l_n((l=FBn(t,!0)).length>0&&(b1(0,l.length),43==l.charCodeAt(0))?l.substr(1):l,_Vn,DWn));case 36:return null==t?null:jgn(rUn((b=FBn(t,!0)).length>0&&(b1(0,b.length),43==b.charCodeAt(0))?b.substr(1):b));case 37:return null==t?null:jgn(rUn((w=FBn(t,!0)).length>0&&(b1(0,w.length),43==w.charCodeAt(0))?w.substr(1):w));case 40:return Vwn((Uqn(),t));case 42:return Gdn((Uqn(),t));case 43:return Gdn(t);case 44:return null==t?null:new $A((d=FBn(t,!0)).length>0&&(b1(0,d.length),43==d.charCodeAt(0))?d.substr(1):d);case 45:return null==t?null:new $A((g=FBn(t,!0)).length>0&&(b1(0,g.length),43==g.charCodeAt(0))?g.substr(1):g);case 46:return FBn(t,!1);case 47:return SD(xXn(this,(Uqn(),CLt),t));case 59:case 48:return Wwn((Uqn(),t));case 49:return SD(xXn(this,(Uqn(),ALt),t));case 50:return null==t?null:rln(l_n((p=FBn(t,!0)).length>0&&(b1(0,p.length),43==p.charCodeAt(0))?p.substr(1):p,Q9n,32767)<<16>>16);case 51:return null==t?null:rln(l_n((c=FBn(t,!0)).length>0&&(b1(0,c.length),43==c.charCodeAt(0))?c.substr(1):c,Q9n,32767)<<16>>16);case 53:return SD(xXn(this,(Uqn(),NLt),t));case 55:return null==t?null:rln(l_n((a=FBn(t,!0)).length>0&&(b1(0,a.length),43==a.charCodeAt(0))?a.substr(1):a,Q9n,32767)<<16>>16);case 56:return null==t?null:rln(l_n((u=FBn(t,!0)).length>0&&(b1(0,u.length),43==u.charCodeAt(0))?u.substr(1):u,Q9n,32767)<<16>>16);case 57:return null==t?null:jgn(rUn((o=FBn(t,!0)).length>0&&(b1(0,o.length),43==o.charCodeAt(0))?o.substr(1):o));case 58:return null==t?null:jgn(rUn((s=FBn(t,!0)).length>0&&(b1(0,s.length),43==s.charCodeAt(0))?s.substr(1):s));case 60:return null==t?null:iln(l_n((e=FBn(t,!0)).length>0&&(b1(0,e.length),43==e.charCodeAt(0))?e.substr(1):e,_Vn,DWn));case 61:return null==t?null:iln(l_n(FBn(t,!0),_Vn,DWn));default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(N7n,"XMLTypeFactoryImpl",1919),wAn(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},zW),MWn.N=!1,MWn.O=!1;var WLt,VLt,QLt,YLt,JLt,ZLt=!1;vX(N7n,"XMLTypePackageImpl",586),wAn(1852,1,{837:1},Ks),MWn._j=function(){return fFn(),TNt},vX(N7n,"XMLTypePackageImpl/1",1852),wAn(1861,1,s7n,_s),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/10",1861),wAn(1862,1,s7n,Fs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/11",1862),wAn(1863,1,s7n,Bs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/12",1863),wAn(1864,1,s7n,Hs),MWn.wj=function(n){return UC(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(N7n,"XMLTypePackageImpl/13",1864),wAn(1865,1,s7n,qs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/14",1865),wAn(1866,1,s7n,Gs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/15",1866),wAn(1867,1,s7n,zs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/16",1867),wAn(1868,1,s7n,Us),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/17",1868),wAn(1869,1,s7n,Xs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Itt,sVn,155,n,0,1)},vX(N7n,"XMLTypePackageImpl/18",1869),wAn(1870,1,s7n,Ws),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/19",1870),wAn(1853,1,s7n,Vs),MWn.wj=function(n){return cL(n,843)},MWn.xj=function(n){return x8(wLt,HWn,843,n,0,1)},vX(N7n,"XMLTypePackageImpl/2",1853),wAn(1871,1,s7n,Qs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/20",1871),wAn(1872,1,s7n,Ys),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/21",1872),wAn(1873,1,s7n,Js),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/22",1873),wAn(1874,1,s7n,Zs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/23",1874),wAn(1875,1,s7n,nh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/24",1875),wAn(1876,1,s7n,th),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/25",1876),wAn(1877,1,s7n,eh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/26",1877),wAn(1878,1,s7n,ih),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/27",1878),wAn(1879,1,s7n,rh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/28",1879),wAn(1880,1,s7n,ch),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/29",1880),wAn(1854,1,s7n,ah),MWn.wj=function(n){return cL(n,667)},MWn.xj=function(n){return x8(zLt,HWn,2021,n,0,1)},vX(N7n,"XMLTypePackageImpl/3",1854),wAn(1881,1,s7n,uh),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/30",1881),wAn(1882,1,s7n,oh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/31",1882),wAn(1883,1,s7n,sh),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/32",1883),wAn(1884,1,s7n,hh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/33",1884),wAn(1885,1,s7n,fh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/34",1885),wAn(1886,1,s7n,lh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/35",1886),wAn(1887,1,s7n,bh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/36",1887),wAn(1888,1,s7n,wh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/37",1888),wAn(1889,1,s7n,dh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/38",1889),wAn(1890,1,s7n,gh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/39",1890),wAn(1855,1,s7n,ph),MWn.wj=function(n){return cL(n,668)},MWn.xj=function(n){return x8(ULt,HWn,2022,n,0,1)},vX(N7n,"XMLTypePackageImpl/4",1855),wAn(1891,1,s7n,vh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/40",1891),wAn(1892,1,s7n,mh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/41",1892),wAn(1893,1,s7n,yh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/42",1893),wAn(1894,1,s7n,kh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/43",1894),wAn(1895,1,s7n,jh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/44",1895),wAn(1896,1,s7n,Eh),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/45",1896),wAn(1897,1,s7n,Th),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/46",1897),wAn(1898,1,s7n,Mh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/47",1898),wAn(1899,1,s7n,Sh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/48",1899),wAn(sQn,1,s7n,Ph),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/49",sQn),wAn(1856,1,s7n,Ih),MWn.wj=function(n){return cL(n,669)},MWn.xj=function(n){return x8(XLt,HWn,2023,n,0,1)},vX(N7n,"XMLTypePackageImpl/5",1856),wAn(1901,1,s7n,Ch),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/50",1901),wAn(1902,1,s7n,Oh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/51",1902),wAn(1903,1,s7n,Ah),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/52",1903),wAn(1857,1,s7n,$h),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/6",1857),wAn(1858,1,s7n,Lh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/7",1858),wAn(1859,1,s7n,Nh),MWn.wj=function(n){return zC(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(N7n,"XMLTypePackageImpl/8",1859),wAn(1860,1,s7n,xh),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(N7n,"XMLTypePackageImpl/9",1860),wAn(50,60,BVn,ak),vX(ant,"RegEx/ParseException",50),wAn(820,1,{},Dh),MWn.sl=function(n){return n<this.j&&63==fV(this.i,n)},MWn.tl=function(){var n,t,e,i,r;if(10!=this.c)throw Hp(new ak(kWn((u$(),g8n))));switch(n=this.a){case 101:n=27;break;case 102:n=12;break;case 110:n=10;break;case 114:n=13;break;case 116:n=9;break;case 120:if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if(123==this.a){for(r=0,e=0;;){if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if((r=Gvn(this.a))<0)break;if(e>16*e)throw Hp(new ak(kWn((u$(),H8n))));e=16*e+r}if(125!=this.a)throw Hp(new ak(kWn((u$(),q8n))));if(e>unt)throw Hp(new ak(kWn((u$(),G8n))));n=e}else{if(r=0,0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(e=r,QXn(this),0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=e=16*e+r}break;case 117:if(i=0,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=t=16*t+i;break;case 118:if(QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if((t=16*t+i)>unt)throw Hp(new ak(kWn((u$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw Hp(new ak(kWn((u$(),z8n))))}return n},MWn.ul=function(n){var t;switch(n){case 100:t=32==(32&this.e)?ZUn("Nd",!0):(wWn(),uNt);break;case 68:t=32==(32&this.e)?ZUn("Nd",!1):(wWn(),lNt);break;case 119:t=32==(32&this.e)?ZUn("IsWord",!0):(wWn(),kNt);break;case 87:t=32==(32&this.e)?ZUn("IsWord",!1):(wWn(),wNt);break;case 115:t=32==(32&this.e)?ZUn("IsSpace",!0):(wWn(),gNt);break;case 83:t=32==(32&this.e)?ZUn("IsSpace",!1):(wWn(),bNt);break;default:throw Hp(new dy(ont+n.toString(16)))}return t},MWn.vl=function(n){var t,e,i,r,c,a,u,o,s,h,f;for(this.b=1,QXn(this),t=null,0==this.c&&94==this.a?(QXn(this),n?(wWn(),wWn(),s=new M0(5)):(wWn(),wWn(),Yxn(t=new M0(4),0,unt),s=new M0(4))):(wWn(),wWn(),s=new M0(4)),r=!0;1!=(f=this.c)&&(0!=f||93!=this.a||r);){if(r=!1,e=this.a,i=!1,10==f)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(s,this.ul(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.Ll(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=DCn(this,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(s,h),i=!0;break;default:e=this.tl()}else if(20==f){if((c=lx(this.i,58,this.d))<0)throw Hp(new ak(kWn((u$(),A8n))));if(a=!0,94==fV(this.i,this.d)&&(++this.d,a=!1),!(u=b9(fx(this.i,this.d,c),a,512==(512&this.e))))throw Hp(new ak(kWn((u$(),L8n))));if(sHn(s,u),i=!0,c+1>=this.j||93!=fV(this.i,c+1))throw Hp(new ak(kWn((u$(),A8n))));this.d=c+2}if(QXn(this),!i)if(0!=this.c||45!=this.a)Yxn(s,e,e);else{if(QXn(this),1==(f=this.c))throw Hp(new ak(kWn((u$(),$8n))));0==f&&93==this.a?(Yxn(s,e,e),Yxn(s,45,45)):(o=this.a,10==f&&(o=this.tl()),QXn(this),Yxn(s,e,o))}(this.e&k6n)==k6n&&0==this.c&&44==this.a&&QXn(this)}if(1==this.c)throw Hp(new ak(kWn((u$(),$8n))));return t&&(WGn(t,s),s=t),T$n(s),qHn(s),this.b=0,QXn(this),s},MWn.wl=function(){var n,t,e,i;for(e=this.vl(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw Hp(new ak(kWn((u$(),_8n))));if(QXn(this),9!=this.c)throw Hp(new ak(kWn((u$(),K8n))));if(t=this.vl(!1),4==i)sHn(e,t);else if(45==n)WGn(e,t);else{if(38!=n)throw Hp(new dy("ASSERT"));kGn(e,t)}}return QXn(this),e},MWn.xl=function(){var n,t;return n=this.a-48,wWn(),wWn(),t=new vJ(12,null,n),!this.g&&(this.g=new _v),Iv(this.g,new Op(n)),QXn(this),t},MWn.yl=function(){return QXn(this),wWn(),pNt},MWn.zl=function(){return QXn(this),wWn(),dNt},MWn.Al=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Bl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Cl=function(){return QXn(this),fsn()},MWn.Dl=function(){return QXn(this),wWn(),mNt},MWn.El=function(){return QXn(this),wWn(),jNt},MWn.Fl=function(){var n;if(this.d>=this.j||64!=(65504&(n=fV(this.i,this.d++))))throw Hp(new ak(kWn((u$(),S8n))));return QXn(this),wWn(),wWn(),new oG(0,n-64)},MWn.Gl=function(){return QXn(this),RFn()},MWn.Hl=function(){return QXn(this),wWn(),ENt},MWn.Il=function(){var n;return wWn(),wWn(),n=new oG(0,105),QXn(this),n},MWn.Jl=function(){return QXn(this),wWn(),yNt},MWn.Kl=function(){return QXn(this),wWn(),vNt},MWn.Ll=function(n,t){return this.tl()},MWn.Ml=function(){return QXn(this),wWn(),hNt},MWn.Nl=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw Hp(new ak(kWn((u$(),E8n))));if(i=-1,t=null,49<=(n=fV(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new _v),Iv(this.g,new Op(i)),++this.d,41!=fV(this.i,this.d))throw Hp(new ak(kWn((u$(),y8n))));++this.d}else switch(63==n&&--this.d,QXn(this),(t=OXn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));break;default:throw Hp(new ak(kWn((u$(),T8n))))}if(QXn(this),e=null,2==(r=Vdn(this)).e){if(2!=r.em())throw Hp(new ak(kWn((u$(),M8n))));e=r.am(1),r=r.am(0)}if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),wWn(),wWn(),new jnn(i,t,r,e)},MWn.Ol=function(){return QXn(this),wWn(),fNt},MWn.Pl=function(){var n;if(QXn(this),n=uU(24,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ql=function(){var n;if(QXn(this),n=uU(20,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Rl=function(){var n;if(QXn(this),n=uU(22,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Sl=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)n|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))));if(45==t){for(++this.d;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)e|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))))}if(58==t){if(++this.d,QXn(this),i=AX(Vdn(this),n,e),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));QXn(this)}else{if(41!=t)throw Hp(new ak(kWn((u$(),j8n))));++this.d,QXn(this),i=AX(Vdn(this),n,e)}return i},MWn.Tl=function(){var n;if(QXn(this),n=uU(21,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ul=function(){var n;if(QXn(this),n=uU(23,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Vl=function(){var n,t;if(QXn(this),n=this.f++,t=oU(Vdn(this),n),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),t},MWn.Wl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Xl=function(n){return QXn(this),5==this.c?(QXn(this),gG(n,(wWn(),wWn(),new h4(9,n)))):gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),t=new r$(2),5==this.c?(QXn(this),tqn(t,sNt),tqn(t,n)):(tqn(t,n),tqn(t,sNt)),t},MWn.Zl=function(n){return QXn(this),5==this.c?(QXn(this),wWn(),wWn(),new h4(9,n)):(wWn(),wWn(),new h4(3,n))},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=1,MWn.g=null,MWn.j=0,vX(ant,"RegEx/RegexParser",820),wAn(1824,820,{},Fm),MWn.sl=function(n){return!1},MWn.tl=function(){return qDn(this)},MWn.ul=function(n){return d_n(n)},MWn.vl=function(n){return ZXn(this)},MWn.wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.xl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.yl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.zl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Al=function(){return QXn(this),d_n(67)},MWn.Bl=function(){return QXn(this),d_n(73)},MWn.Cl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Dl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.El=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Fl=function(){return QXn(this),d_n(99)},MWn.Gl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Hl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Il=function(){return QXn(this),d_n(105)},MWn.Jl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Kl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ll=function(n,t){return sHn(n,d_n(t)),-1},MWn.Ml=function(){return QXn(this),wWn(),wWn(),new oG(0,94)},MWn.Nl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ol=function(){return QXn(this),wWn(),wWn(),new oG(0,36)},MWn.Pl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ql=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Rl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Sl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Tl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ul=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Vl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Xl=function(n){return QXn(this),gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),tqn(t=new r$(2),n),tqn(t,sNt),t},MWn.Zl=function(n){return QXn(this),wWn(),wWn(),new h4(3,n)};var nNt=null,tNt=null;vX(ant,"RegEx/ParserForXMLSchema",1824),wAn(117,1,ynt,Ap),MWn.$l=function(n){throw Hp(new dy("Not supported."))},MWn._l=function(){return-1},MWn.am=function(n){return null},MWn.bm=function(){return null},MWn.cm=function(n){},MWn.dm=function(n){},MWn.em=function(){return 0},MWn.Ib=function(){return this.fm(0)},MWn.fm=function(n){return 11==this.e?".":""},MWn.e=0;var eNt,iNt,rNt,cNt,aNt,uNt,oNt,sNt,hNt,fNt,lNt,bNt,wNt,dNt,gNt,pNt,vNt,mNt,yNt,kNt,jNt,ENt,TNt,MNt,SNt=null,PNt=null,INt=null,CNt=vX(ant,"RegEx/Token",117);wAn(136,117,{3:1,136:1,117:1},M0),MWn.fm=function(n){var t,e,i;if(4==this.e)if(this==oNt)e=".";else if(this==uNt)e="\\d";else if(this==kNt)e="\\w";else if(this==gNt)e="\\s";else{for((i=new Sk).a+="[",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}else if(this==lNt)e="\\D";else if(this==wNt)e="\\W";else if(this==bNt)e="\\S";else{for((i=new Sk).a+="[^",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}return e},MWn.a=!1,MWn.c=!1,vX(ant,"RegEx/RangeToken",136),wAn(584,1,{584:1},Op),MWn.a=0,vX(ant,"RegEx/RegexParser/ReferencePosition",584),wAn(583,1,{3:1,583:1},XE),MWn.Fb=function(n){var t;return null!=n&&!!cL(n,583)&&(t=BB(n,583),mK(this.b,t.b)&&this.a==t.a)},MWn.Hb=function(){return vvn(this.b+"/"+txn(this.a))},MWn.Ib=function(){return this.c.fm(this.a)},MWn.a=0,vX(ant,"RegEx/RegularExpression",583),wAn(223,117,ynt,oG),MWn._l=function(){return this.a},MWn.fm=function(n){var t,e;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:e="\\"+PR(this.a&QVn);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=this.a>=BQn?"\\v"+fx(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+PR(this.a&QVn)}break;case 8:e=this==hNt||this==fNt?""+PR(this.a&QVn):"\\"+PR(this.a&QVn);break;default:e=null}return e},MWn.a=0,vX(ant,"RegEx/Token/CharToken",223),wAn(309,117,ynt,h4),MWn.am=function(n){return this.a},MWn.cm=function(n){this.b=n},MWn.dm=function(n){this.c=n},MWn.em=function(){return 1},MWn.fm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.fm(n)+"*";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): CLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.fm(n)+"*?";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): NONGREEDYCLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}?"}return t},MWn.b=0,MWn.c=0,vX(ant,"RegEx/Token/ClosureToken",309),wAn(821,117,ynt,UU),MWn.am=function(n){return 0==n?this.a:this.b},MWn.em=function(){return 2},MWn.fm=function(n){return 3==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+":9==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+?":this.a.fm(n)+""+this.b.fm(n)},vX(ant,"RegEx/Token/ConcatToken",821),wAn(1822,117,ynt,jnn),MWn.am=function(n){if(0==n)return this.d;if(1==n)return this.b;throw Hp(new dy("Internal Error: "+n))},MWn.em=function(){return this.b?2:1},MWn.fm=function(n){var t;return t=this.c>0?"(?("+this.c+")":8==this.a.e?"(?("+this.a+")":"(?"+this.a,this.b?t+=this.d+"|"+this.b+")":t+=this.d+")",t},MWn.c=0,vX(ant,"RegEx/Token/ConditionToken",1822),wAn(1823,117,ynt,T0),MWn.am=function(n){return this.b},MWn.em=function(){return 1},MWn.fm=function(n){return"(?"+(0==this.a?"":txn(this.a))+(0==this.c?"":txn(this.c))+":"+this.b.fm(n)+")"},MWn.a=0,MWn.c=0,vX(ant,"RegEx/Token/ModifierToken",1823),wAn(822,117,ynt,cW),MWn.am=function(n){return this.a},MWn.em=function(){return 1},MWn.fm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.fm(n)+")":"("+this.a.fm(n)+")";break;case 20:t="(?="+this.a.fm(n)+")";break;case 21:t="(?!"+this.a.fm(n)+")";break;case 22:t="(?<="+this.a.fm(n)+")";break;case 23:t="(?<!"+this.a.fm(n)+")";break;case 24:t="(?>"+this.a.fm(n)+")"}return t},MWn.b=0,vX(ant,"RegEx/Token/ParenToken",822),wAn(521,117,{3:1,117:1,521:1},vJ),MWn.bm=function(){return this.b},MWn.fm=function(n){return 12==this.e?"\\"+this.a:iAn(this.b)},MWn.a=0,vX(ant,"RegEx/Token/StringToken",521),wAn(465,117,ynt,r$),MWn.$l=function(n){tqn(this,n)},MWn.am=function(n){return BB(bW(this.a,n),117)},MWn.em=function(){return this.a?this.a.a.c.length:0},MWn.fm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=BB(bW(this.a,0),117),r=3==(e=BB(bW(this.a,1),117)).e&&e.am(0)==t?t.fm(n)+"+":9==e.e&&e.am(0)==t?t.fm(n)+"+?":t.fm(n)+""+e.fm(n);else{for(c=new Sk,i=0;i<this.a.a.c.length;i++)cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r}if(2==this.a.a.c.length&&7==BB(bW(this.a,1),117).e)r=BB(bW(this.a,0),117).fm(n)+"?";else if(2==this.a.a.c.length&&7==BB(bW(this.a,0),117).e)r=BB(bW(this.a,1),117).fm(n)+"??";else{for(cO(c=new Sk,BB(bW(this.a,0),117).fm(n)),i=1;i<this.a.a.c.length;i++)c.a+="|",cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r},vX(ant,"RegEx/Token/UnionToken",465),wAn(518,1,{592:1},UE),MWn.Ib=function(){return this.a.b},vX(knt,"XMLTypeUtil/PatternMatcherImpl",518),wAn(1622,1381,{},Rh),vX(knt,"XMLTypeValidator",1622),wAn(264,1,pVn,hz),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return(this.b-this.a)*this.c<0?MNt:new XL(this)},MWn.a=0,MWn.b=0,MWn.c=0,vX(Ent,"ExclusiveRange",264),wAn(1068,1,cVn,Kh),MWn.Rb=function(n){BB(n,19),l$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return GE()},MWn.Ub=function(){return zE()},MWn.Wb=function(n){BB(n,19),w$()},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Tb=function(){return-1},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new tk(Snt))},vX(Ent,"ExclusiveRange/1",1068),wAn(254,1,cVn,XL),MWn.Rb=function(n){BB(n,19),b$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return Fhn(this)},MWn.Ub=function(){return O9(this)},MWn.Wb=function(n){BB(n,19),d$()},MWn.Ob=function(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Vb=function(){return this.b-1},MWn.Qb=function(){throw Hp(new tk(Snt))},MWn.a=0,MWn.b=0,vX(Ent,"ExclusiveRange/RangeIterator",254);var ONt=RW(P9n,"C"),ANt=RW(O9n,"I"),$Nt=RW($Wn,"Z"),LNt=RW(A9n,"J"),NNt=RW(S9n,"B"),xNt=RW(I9n,"D"),DNt=RW(C9n,"F"),RNt=RW($9n,"S"),KNt=bq("org.eclipse.elk.core.labels","ILabelManager"),_Nt=bq(B6n,"DiagnosticChain"),FNt=bq(f7n,"ResourceSet"),BNt=vX(B6n,"InvocationTargetException",null),HNt=(Dk(),f5),qNt=qNt=hEn;Zen(Qp),scn("permProps",[[[Pnt,Int],[Cnt,"gecko1_8"]],[[Pnt,Int],[Cnt,"ie10"]],[[Pnt,Int],[Cnt,"ie8"]],[[Pnt,Int],[Cnt,"ie9"]],[[Pnt,Int],[Cnt,"safari"]]]),qNt(null,"elk",null)}).call(this)}).call(this,void 0!==e.g?e.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(n,t,e){"use strict";function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function r(n,t){if(!n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?n:t}function c(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(n,t):n.__proto__=t)}var a=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e);var c=Object.assign({},t),a=!1;try{n.resolve("web-worker"),a=!0}catch(s){}if(t.workerUrl)if(a){var u=n("web-worker");c.workerFactory=function(n){return new u(n)}}else console.warn("Web worker requested but 'web-worker' package not installed. \nConsider installing the package or pass your own 'workerFactory' to ELK's constructor.\n... Falling back to non-web worker version.");if(!c.workerFactory){var o=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new o(n)}}return r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,c))}return c(e,t),e}(n("./elk-api.js").default);Object.defineProperty(t.exports,"__esModule",{value:!0}),t.exports=a,a.default=a},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(n,t,e){t.exports=Worker},{}]},{},[3])(3)},4216:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>j});var i=e(9863),r=e(9373),c=e(8099),a=e(44),u=e(1188),o=e(7295);e(7856),e(3502),e(7484),e(7967);const s=new o;let h={};const f={};let l={};const b=(n,t,e)=>{const i={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return i.TD=i.TB,a.l.info("abc88",e,t,n),i[e][t][n]},w=(n,t,e)=>{if(a.l.info("getNextPort abc88",{node:n,edgeDirection:t,graphDirection:e}),!h[n])switch(e){case"TB":case"TD":h[n]={inPosition:"north",outPosition:"south"};break;case"BT":h[n]={inPosition:"south",outPosition:"north"};break;case"RL":h[n]={inPosition:"east",outPosition:"west"};break;case"LR":h[n]={inPosition:"west",outPosition:"east"}}const i="in"===t?h[n].inPosition:h[n].outPosition;return"in"===t?h[n].inPosition=b(h[n].inPosition,t,e):h[n].outPosition=b(h[n].outPosition,t,e),i},d=function(n,t,e,i){a.l.info("abc78 edges = ",n);const o=i.insert("g").attr("class","edgeLabels");let s,h,b={},d=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,u.n)(n.defaultStyle);s=t.style,h=t.labelStyle}return n.forEach((function(t){var i="L-"+t.start+"-"+t.end;void 0===b[i]?(b[i]=0,a.l.info("abc78 new entry",i,b[i])):(b[i]++,a.l.info("abc78 new entry",i,b[i]));let g=i+"-"+b[i];a.l.info("abc78 new link id to be used is",i,g,b[i]);var p="LS-"+t.start,v="LE-"+t.end;const m={style:"",labelStyle:""};switch(m.minlen=t.length||1,"arrow_open"===t.type?m.arrowhead="none":m.arrowhead="normal",m.arrowTypeStart="arrow_open",m.arrowTypeEnd="arrow_open",t.type){case"double_arrow_cross":m.arrowTypeStart="arrow_cross";case"arrow_cross":m.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":m.arrowTypeStart="arrow_point";case"arrow_point":m.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":m.arrowTypeStart="arrow_circle";case"arrow_circle":m.arrowTypeEnd="arrow_circle"}let y="",k="";switch(t.stroke){case"normal":y="fill:none;",void 0!==s&&(y=s),void 0!==h&&(k=h),m.thickness="normal",m.pattern="solid";break;case"dotted":m.thickness="normal",m.pattern="dotted",m.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":m.thickness="thick",m.pattern="solid",m.style="stroke-width: 3.5px;fill:none;"}if(void 0!==t.style){const n=(0,u.n)(t.style);y=n.style,k=n.labelStyle}m.style=m.style+=y,m.labelStyle=m.labelStyle+=k,void 0!==t.interpolate?m.curve=(0,u.o)(t.interpolate,r.c_6):void 0!==n.defaultInterpolate?m.curve=(0,u.o)(n.defaultInterpolate,r.c_6):m.curve=(0,u.o)(f.curve,r.c_6),void 0===t.text?void 0!==t.style&&(m.arrowheadStyle="fill: #333"):(m.arrowheadStyle="fill: #333",m.labelpos="c"),m.labelType=t.labelType,m.label=t.text.replace(a.e.lineBreakRegex,"\n"),void 0===t.style&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),m.labelStyle=m.labelStyle.replace("color:","fill:"),m.id=g,m.classes="flowchart-link "+p+" "+v;const j=(0,c.f)(o,m),{source:E,target:T,sourceId:M,targetId:S}=((n,t)=>{let e=n.start,i=n.end;const r=e,c=i,a=l[e],u=l[i];return a&&u?("diamond"===a.type&&(e=`${e}-${w(e,"out",t)}`),"diamond"===u.type&&(i=`${i}-${w(i,"in",t)}`),{source:e,target:i,sourceId:r,targetId:c}):{source:e,target:i}})(t,d);a.l.debug("abc78 source and target",E,T),e.edges.push({id:"e"+t.start+t.end,sources:[E],targets:[T],sourceId:M,targetId:S,labelEl:j,labels:[{width:m.width,height:m.height,orgWidth:m.width,orgHeight:m.height,text:m.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:m})})),e},g=function(n,t,e){const i=((n,t,e)=>{const{parentById:i}=e,r=new Set;let c=n;for(;c;){if(r.add(c),c===t)return c;c=i[c]}for(c=t;c;){if(r.has(c))return c;c=i[c]}return"root"})(n,t,e);if(void 0===i||"root"===i)return{x:0,y:0};const r=l[i].offset;return{x:r.posX,y:r.posY}},p=function(n,t,e,i,c){const a=g(t.sourceId,t.targetId,c),u=t.sections[0].startPoint,o=t.sections[0].endPoint,s=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+a.x,n.y+a.y])),h=[[u.x+a.x,u.y+a.y],...s,[o.x+a.x,o.y+a.y]],f=(0,r.jvg)().curve(r.c_6),l=n.insert("path").attr("d",f(h)).attr("class","path").attr("fill","none"),b=n.insert("g").attr("class","edgeLabel"),w=(0,r.Ys)(b.node().appendChild(t.labelEl)),d=w.node().firstChild.getBoundingClientRect();w.attr("width",d.width),w.attr("height",d.height),b.attr("transform",`translate(${t.labels[0].x+a.x}, ${t.labels[0].y+a.y})`),function(n,t,e,i){let r="";switch(i&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.arrowTypeStart){case"arrow_cross":n.attr("marker-start","url("+r+"#"+e+"-crossStart)");break;case"arrow_point":n.attr("marker-start","url("+r+"#"+e+"-pointStart)");break;case"arrow_barb":n.attr("marker-start","url("+r+"#"+e+"-barbStart)");break;case"arrow_circle":n.attr("marker-start","url("+r+"#"+e+"-circleStart)");break;case"aggregation":n.attr("marker-start","url("+r+"#"+e+"-aggregationStart)");break;case"extension":n.attr("marker-start","url("+r+"#"+e+"-extensionStart)");break;case"composition":n.attr("marker-start","url("+r+"#"+e+"-compositionStart)");break;case"dependency":n.attr("marker-start","url("+r+"#"+e+"-dependencyStart)");break;case"lollipop":n.attr("marker-start","url("+r+"#"+e+"-lollipopStart)")}switch(t.arrowTypeEnd){case"arrow_cross":n.attr("marker-end","url("+r+"#"+e+"-crossEnd)");break;case"arrow_point":n.attr("marker-end","url("+r+"#"+e+"-pointEnd)");break;case"arrow_barb":n.attr("marker-end","url("+r+"#"+e+"-barbEnd)");break;case"arrow_circle":n.attr("marker-end","url("+r+"#"+e+"-circleEnd)");break;case"aggregation":n.attr("marker-end","url("+r+"#"+e+"-aggregationEnd)");break;case"extension":n.attr("marker-end","url("+r+"#"+e+"-extensionEnd)");break;case"composition":n.attr("marker-end","url("+r+"#"+e+"-compositionEnd)");break;case"dependency":n.attr("marker-end","url("+r+"#"+e+"-dependencyEnd)");break;case"lollipop":n.attr("marker-end","url("+r+"#"+e+"-lollipopEnd)")}}(l,e,i.type,i.arrowMarkerAbsolute)},v=(n,t)=>{n.forEach((n=>{n.children||(n.children=[]);const e=t.childrenById[n.id];e&&e.forEach((t=>{n.children.push(l[t])})),v(n.children,t)}))},m=(n,t,e,i,r,c,u)=>{e.forEach((function(e){if(e)if(l[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:u,width:e.width,height:e.height},"group"===e.type){const i=r.insert("g").attr("class","subgraph");i.insert("rect").attr("class","subgraph subgraph-lvl-"+u%5+" node").attr("x",e.x+n).attr("y",e.y+t).attr("width",e.width).attr("height",e.height);const c=i.insert("g").attr("class","label"),o=(0,a.g)().flowchart.htmlLabels?e.labelData.width/2:0;c.attr("transform",`translate(${e.labels[0].x+n+e.x+o}, ${e.labels[0].y+t+e.y+3})`),c.node().appendChild(e.labelData.labelNode),a.l.info("Id (UGH)= ",e.type,e.labels)}else a.l.info("Id (UGH)= ",e.id),e.el.attr("transform",`translate(${e.x+n+e.width/2}, ${e.y+t+e.height/2})`)})),e.forEach((function(e){e&&"group"===e.type&&m(n+e.x,t+e.y,e.children,i,r,c,u+1)}))},y={getClasses:function(n,t){a.l.info("Extracting classes"),t.db.clear("ver-2");try{return t.parse(n),t.db.getClasses()}catch(e){return{}}},draw:async function(n,t,e,i){var o;i.db.clear(),l={},h={},i.db.setGen("gen-2"),i.parser.parse(n);const f=(0,r.Ys)("body").append("div").attr("style","height:400px").attr("id","cy");let b={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(a.l.info("Drawing flowchart using v3 renderer",s),i.db.getDirection()){case"BT":b.layoutOptions["elk.direction"]="UP";break;case"TB":b.layoutOptions["elk.direction"]="DOWN";break;case"LR":b.layoutOptions["elk.direction"]="RIGHT";break;case"RL":b.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:w,flowchart:g}=(0,a.g)();let y;"sandbox"===w&&(y=(0,r.Ys)("#i"+t));const k="sandbox"===w?(0,r.Ys)(y.nodes()[0].contentDocument.body):(0,r.Ys)("body"),j="sandbox"===w?y.nodes()[0].contentDocument:document,E=k.select(`[id="${t}"]`);(0,c.a)(E,["point","circle","cross"],i.type,i.arrowMarkerAbsolute);const T=i.db.getVertices();let M;const S=i.db.getSubGraphs();a.l.info("Subgraphs - ",S);for(let r=S.length-1;r>=0;r--)M=S[r],i.db.addVertex(M.id,{text:M.title,type:M.labelType},"group",void 0,M.classes,M.dir);const P=E.insert("g").attr("class","subgraphs"),I=function(n){const t={parentById:{},childrenById:{}},e=n.getSubGraphs();return a.l.info("Subgraphs - ",e),e.forEach((function(n){n.nodes.forEach((function(e){t.parentById[e]=n.id,void 0===t.childrenById[n.id]&&(t.childrenById[n.id]=[]),t.childrenById[n.id].push(e)}))})),e.forEach((function(n){n.id,void 0!==t.parentById[n.id]&&t.parentById[n.id]})),t}(i.db);b=function(n,t,e,i,r,o,s){const h=e.select(`[id="${t}"]`).insert("g").attr("class","nodes");return Object.keys(n).forEach((function(t){const e=n[t];let s="default";e.classes.length>0&&(s=e.classes.join(" ")),s+=" flowchart-label";const f=(0,u.n)(e.styles);let b=void 0!==e.text?e.text:e.id;const w={width:0,height:0},d=[{id:e.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:e.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:e.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:e.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let g=0,p="",v={};switch(e.type){case"round":g=5,p="rect";break;case"square":case"group":default:p="rect";break;case"diamond":p="question",v={portConstraints:"FIXED_SIDE"};break;case"hexagon":p="hexagon";break;case"odd":case"odd_right":p="rect_left_inv_arrow";break;case"lean_right":p="lean_right";break;case"lean_left":p="lean_left";break;case"trapezoid":p="trapezoid";break;case"inv_trapezoid":p="inv_trapezoid";break;case"circle":p="circle";break;case"ellipse":p="ellipse";break;case"stadium":p="stadium";break;case"subroutine":p="subroutine";break;case"cylinder":p="cylinder";break;case"doublecircle":p="doublecircle"}const m={labelStyle:f.labelStyle,shape:p,labelText:b,labelType:e.labelType,rx:g,ry:g,class:s,style:f.style,id:e.id,link:e.link,linkTarget:e.linkTarget,tooltip:r.db.getTooltip(e.id)||"",domId:r.db.lookUpDomId(e.id),haveCallback:e.haveCallback,width:"group"===e.type?500:void 0,dir:e.dir,type:e.type,props:e.props,padding:(0,a.g)().flowchart.padding};let y,k;if("group"!==m.type)k=(0,c.e)(h,m,e.dir),y=k.node().getBBox();else{i.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:n,bbox:t}=(0,c.l)(h,m,void 0,!0);w.width=t.width,w.wrappingWidth=(0,a.g)().flowchart.wrappingWidth,w.height=t.height,w.labelNode=n.node(),m.labelData=w}const j={id:e.id,ports:"diamond"===e.type?d:[],layoutOptions:v,labelText:b,labelData:w,domId:r.db.lookUpDomId(e.id),width:null==y?void 0:y.width,height:null==y?void 0:y.height,type:e.type,el:k,parent:o.parentById[e.id]};l[m.id]=j})),s}(T,t,k,j,i,I,b);const C=E.insert("g").attr("class","edges edgePath"),O=i.db.getEdges();b=d(O,i,b,E);Object.keys(l).forEach((n=>{const t=l[n];t.parent||b.children.push(t),void 0!==I.childrenById[n]&&(t.labels=[{text:t.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:t.labelData.width,height:t.labelData.height}],delete t.x,delete t.y,delete t.width,delete t.height)})),v(b.children,I),a.l.info("after layout",JSON.stringify(b,null,2));const A=await s.layout(b);m(0,0,A.children,E,P,i,0),a.l.info("after layout",A),null==(o=A.edges)||o.map((n=>{p(C,n,n.edgeData,i,I)})),(0,u.s)({},E,g.diagramPadding,g.useMaxWidth),f.remove()}},k=n=>`.label {\n font-family: ${n.fontFamily};\n color: ${n.nodeTextColor||n.textColor};\n }\n .cluster-label text {\n fill: ${n.titleColor};\n }\n .cluster-label span {\n color: ${n.titleColor};\n }\n\n .label text,span {\n fill: ${n.nodeTextColor||n.textColor};\n color: ${n.nodeTextColor||n.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${n.mainBkg};\n stroke: ${n.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${n.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${n.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${n.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${n.edgeLabelBackground};\n rect {\n opacity: 0.85;\n background-color: ${n.edgeLabelBackground};\n fill: ${n.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${n.clusterBkg};\n stroke: ${n.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${n.titleColor};\n }\n\n .cluster span {\n color: ${n.titleColor};\n }\n /* .cluster div {\n color: ${n.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${n.fontFamily};\n font-size: 12px;\n background: ${n.tertiaryColor};\n border: 1px solid ${n.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${n.textColor};\n }\n .subgraph {\n stroke-width:2;\n rx:3;\n }\n // .subgraph-lvl-1 {\n // fill:#ccc;\n // // stroke:black;\n // }\n\n .flowchart-label text {\n text-anchor: middle;\n }\n\n ${(n=>{let t="";for(let e=0;e<5;e++)t+=`\n .subgraph-lvl-${e} {\n fill: ${n[`surface${e}`]};\n stroke: ${n[`surfacePeer${e}`]};\n }\n `;return t})(n)}\n`,j={db:i.d,renderer:y,parser:i.p,styles:k}}}]); \ No newline at end of file diff --git a/assets/js/428320b6.a9e82ac0.js b/assets/js/428320b6.a9e82ac0.js new file mode 100644 index 0000000000..16aada42c8 --- /dev/null +++ b/assets/js/428320b6.a9e82ac0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6193],{2213:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>m,toc:()=>n});var c=a(7462),i=(a(7294),a(3905));a(5657);const r={},o="Changelog",m={unversionedId:"changelog/changelog",id:"changelog/changelog",title:"Changelog",description:"8.5.0 (2023-10-30)",source:"@site/docs/changelog/changelog.md",sourceDirName:"changelog",slug:"/changelog/",permalink:"/ecalc/docs/changelog/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/changelog.md",tags:[],version:"current",frontMatter:{},sidebar:"changelog",previous:{title:"v8.4 (Latest)",permalink:"/ecalc/docs/changelog/v8.4-release"}},l={},n=[{value:"8.5.0 (2023-10-30)",id:"850-2023-10-30",level:2},{value:"Features",id:"features",level:3},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"Documentation",id:"documentation",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores",level:3},{value:"Code Refactoring",id:"code-refactoring",level:3},{value:"8.4.0 (2023-09-25)",id:"840-2023-09-25",level:2},{value:"Features",id:"features-1",level:3},{value:"Bug Fixes",id:"bug-fixes-1",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-1",level:3},{value:"Code Refactoring",id:"code-refactoring-1",level:3},{value:"8.3.0 (2023-08-11)",id:"830-2023-08-11",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes",level:3},{value:"Features",id:"features-2",level:3},{value:"Bug Fixes",id:"bug-fixes-2",level:3},{value:"Documentation",id:"documentation-2",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-2",level:3},{value:"Code Refactoring",id:"code-refactoring-2",level:3},{value:"Tests",id:"tests",level:3},{value:"Continuous Integration",id:"continuous-integration",level:3},{value:"8.2.2 (2023-05-28)",id:"822-2023-05-28",level:2},{value:"Bug Fixes",id:"bug-fixes-3",level:3},{value:"Continuous Integration",id:"continuous-integration-1",level:3},{value:"Tests",id:"tests-1",level:3},{value:"Code Refactoring",id:"code-refactoring-3",level:3},{value:"Documentation",id:"documentation-3",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-3",level:3},{value:"8.2.1 (2023-05-09)",id:"821-2023-05-09",level:2},{value:"Miscellaneous Chores",id:"miscellaneous-chores-4",level:3},{value:"Continuous Integration",id:"continuous-integration-2",level:3}],u={toc:n},s="wrapper";function h(e){let{components:t,...a}=e;return(0,i.kt)(s,(0,c.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"changelog"},"Changelog"),(0,i.kt)("h2",{id:"850-2023-10-30"},(0,i.kt)("a",{parentName:"h2",href:"https://github.com/equinor/ecalc/compare/v8.4.0...v8.5.0"},"8.5.0")," (2023-10-30)"),(0,i.kt)("h3",{id:"features"},"Features"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add pump results to system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/8cf9e1b0d3ab8438291303663fc83092de1c808a"},"8cf9e1b"),")"),(0,i.kt)("li",{parentName:"ul"},"add stream conditions to compressor v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/194"},"#194"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/232f83bf91044b706ba4c7715ceddf71f9456644"},"232f83b"),")"),(0,i.kt)("li",{parentName:"ul"},"multiple streams in system (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/242"},"#242"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/419c2e9cef6f6bb768b5e140a5092650cacd245b"},"419c2e9"),")"),(0,i.kt)("li",{parentName:"ul"},"support name for crossover streams (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/236"},"#236"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c801f3f0fa4b967c15c5122ac8997695f38bae12"},"c801f3f"),")")),(0,i.kt)("h3",{id:"bug-fixes"},"Bug Fixes"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"don't require HCEXPORT in editor (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/254"},"#254"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e497245c9ec4e6d10e9def5999d24c5e0ba58134"},"e497245"),")"),(0,i.kt)("li",{parentName:"ul"},"ensure unique names in system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/238"},"#238"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/3634a9e1a4f2a4181ea1679fa1edcce0bb57a06e"},"3634a9e"),")"),(0,i.kt)("li",{parentName:"ul"},"rate when multiple streams model (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/214"},"#214"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/892720e781978be0210b7488ad6c68466db51700"},"892720e"),")"),(0,i.kt)("li",{parentName:"ul"},"set_regularity fixture (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/213"},"#213"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e9ea04f74c2262343fbde5d5aed46ffc15404e29"},"e9ea04f"),")"),(0,i.kt)("li",{parentName:"ul"},"update ecalc validation for yaml file in web (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/243"},"#243"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2981f2c71b7aba0271f72c8ec5f1d764a0d36387"},"2981f2c"),")"),(0,i.kt)("li",{parentName:"ul"},"use file reference instead of urls in docs (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/216"},"#216"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/35c4f6853c9452d1963daf321cce3e2ebe087f9e"},"35c4f68"),")"),(0,i.kt)("li",{parentName:"ul"},"wrong data for boilers and heaters in ltp-results (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/237"},"#237"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/851e83141c1971a8fc1fdec47e05b4e5a26d0861"},"851e831"),")")),(0,i.kt)("h3",{id:"documentation"},"Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add missing keywords surge control margin (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/239"},"#239"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/8b97673b001231b6960bda817d50241135df65df"},"8b97673"),")"),(0,i.kt)("li",{parentName:"ul"},"update changelog for upcoming release v8.4 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/203"},"#203"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/66671e07ce678f4444f6428b776b60c607d35957"},"66671e0"),")")),(0,i.kt)("h3",{id:"miscellaneous-chores"},"Miscellaneous Chores"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add ",(0,i.kt)("strong",{parentName:"li"},"init")," file to ecalc_cli (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/af6bee96ae3ac69137f38117013a305f474acd87"},"af6bee9"),")"),(0,i.kt)("li",{parentName:"ul"},"add chart area flag to test of full recirculation (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7"},"0c45251"),")"),(0,i.kt)("li",{parentName:"ul"},"add check for zero efficiency in stage (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/3ea3035c659ee922a41c70b157f9d6a1a1f8214d"},"3ea3035"),")"),(0,i.kt)("li",{parentName:"ul"},"add dependabot actions monitoring (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/219"},"#219"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d5f5dfd12103fb60104057fd2f3b5ce4484e3494"},"d5f5dfd"),")"),(0,i.kt)("li",{parentName:"ul"},"add ModelInputFailureStatus (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e"},"6b0c728"),")"),(0,i.kt)("li",{parentName:"ul"},"add NO_FLOW ChartAreaFlag (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7"},"0c45251"),")"),(0,i.kt)("li",{parentName:"ul"},"add rate type to pump model result (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/209"},"#209"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/21deeb7a70cd64f47db87494314a0119ee4598d5"},"21deeb7"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"cli:")," add all energy usage models load_results test (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/220"},"#220"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e09febb517a62d27e2d794946d016f1ba0af8fd1"},"e09febb"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"deps:")," bump actions/cache from 3.0.11 to 3.3.2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/223"},"#223"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/087867c19fc087702ae7829b3d6cddfc1ac62f9d"},"087867c"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"deps:")," bump actions/checkout from 2 to 4 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/221"},"#221"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/bcc2f81d9eed20f3021c1e13fead3f8c8d009267"},"bcc2f81"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"deps:")," bump actions/setup-node from 3 to 4 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/cb7e816932e73d091cfa4211abe086620ab320fd"},"cb7e816"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"deps:")," bump snok/install-poetry from 1.3.3 to 1.3.4 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/222"},"#222"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/80dab720f352995121a1cd470e14eef9779a45fb"},"80dab72"),")"),(0,i.kt)("li",{parentName:"ul"},"fix tests (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e"},"6b0c728"),")"),(0,i.kt)("li",{parentName:"ul"},"handle requested pressures correct for compressors without system (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/233"},"#233"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/445fc9d856db729181e48f04d58cf05d324a8c50"},"445fc9d"),")"),(0,i.kt)("li",{parentName:"ul"},"handle requested pressures for compressor systems (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/215"},"#215"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6b054390fe86fe5067a908854f0dd6d48ba114ff"},"6b05439"),")"),(0,i.kt)("li",{parentName:"ul"},"more robust surge control margin calculation (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/229"},"#229"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/74b4e599ff2336567e7a86e57bb4287030ccea08"},"74b4e59"),")"),(0,i.kt)("li",{parentName:"ul"},"move feature experimental to main method for requested pressures (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/230"},"#230"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/00ad854cc23822690e662338f6592142344a59f3"},"00ad854"),")"),(0,i.kt)("li",{parentName:"ul"},"pre-commit (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a310df21ebb9dc27e9999b577cc7ae7a106aa68c"},"a310df2"),")"),(0,i.kt)("li",{parentName:"ul"},"show correct version (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/211"},"#211"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/f8de992b6d2621a604f9b31b6eea0ff644df30dd"},"f8de992"),")"),(0,i.kt)("li",{parentName:"ul"},"update dependencies (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/212"},"#212"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c9b850672357fd48a0b1f40f5b429ae615fbd914"},"c9b8506"),")"),(0,i.kt)("li",{parentName:"ul"},"update dependencies (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/259"},"#259"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e7f031f73dc3320352cd6087e32b281dbf01e6bc"},"e7f031f"),")"),(0,i.kt)("li",{parentName:"ul"},"update python deps (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/247"},"#247"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/514da161158200bc18a8963cb10be141c9847fb8"},"514da16"),")"),(0,i.kt)("li",{parentName:"ul"},"update system v2 tests to only use one crossover (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/205"},"#205"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/aa6516367fd217b3868af2c1b56119ec548c77ad"},"aa65163"),")"),(0,i.kt)("li",{parentName:"ul"},"update zero efficiency error message (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/258"},"#258"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/5be6fe433791bee1f25dfcc265ffb94c87633836"},"5be6fe4"),")"),(0,i.kt)("li",{parentName:"ul"},"upgrade packages (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/255"},"#255"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/035aad15b41bb16676ec33d33dcb78d139e2bc6c"},"035aad1"),")"),(0,i.kt)("li",{parentName:"ul"},"version must be updated in version.py (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/63eb672ff5a28c5c4b14294c8d9dcc38a3481089"},"63eb672"),")"),(0,i.kt)("li",{parentName:"ul"},"warn user about full recirculation of fluids in a compressor stage in a multiple streams and pressures compressor train (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/196"},"#196"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7"},"0c45251"),")")),(0,i.kt)("h3",{id:"code-refactoring"},"Code Refactoring"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"implement evaluate streams in models (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/232"},"#232"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/df6b6b01099fe87738594544512c28d0bceb0d07"},"df6b6b0"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"libecalc.core:")," stream as input (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/224"},"#224"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e06f970147e5539fa2c8db0ca53675d24c56ae33"},"e06f970"),")"),(0,i.kt)("li",{parentName:"ul"},"move crossover to component_conditions for system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/204"},"#204"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/018b47291cbfd5b8b92bbff9c79846b32696d316"},"018b472"),")"),(0,i.kt)("li",{parentName:"ul"},"move RateType into common module (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/253"},"#253"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c7f5a9955c55fdc970f60b6aade8a0793acab27a"},"c7f5a99"),")"),(0,i.kt)("li",{parentName:"ul"},"move validate operational conditions from compressor train, rename to validate model input (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/256"},"#256"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e"},"6b0c728"),")"),(0,i.kt)("li",{parentName:"ul"},"remove regularity our of core/domain (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/246"},"#246"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/714888bfa69460174c1b3917470018e8e688b3e1"},"714888b"),")"),(0,i.kt)("li",{parentName:"ul"},"remove temporal operational settings system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/244"},"#244"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a1d2ce62c4cfde50665bd1fdfa41402a64548672"},"a1d2ce6"),")"),(0,i.kt)("li",{parentName:"ul"},"rename streamCondition to stream (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/32885b5b054008cbfb682454daaa29d443fd561f"},"32885b5"),")"),(0,i.kt)("li",{parentName:"ul"},"separate optimization from system (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/245"},"#245"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/b580e3d80ab5392410c438f6ff355fdf1326f121"},"b580e3d"),")"),(0,i.kt)("li",{parentName:"ul"},"use Graph object to build graph (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/250"},"#250"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/ce65dbad024fc9afae74a2c533767152ce2efa20"},"ce65dba"),")")),(0,i.kt)("h2",{id:"840-2023-09-25"},(0,i.kt)("a",{parentName:"h2",href:"https://github.com/equinor/ecalc/compare/v8.3.0...v8.4.0"},"8.4.0")," (2023-09-25)"),(0,i.kt)("h3",{id:"features-1"},"Features"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add compressor inlet- and outlet pressures to models/train level (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/152"},"#152"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9b95ee50fd78d77c59dfe2533c10dbcdc41461a7"},"9b95ee5"),")"),(0,i.kt)("li",{parentName:"ul"},"add input compressor pressures to output (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/140"},"#140"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/74e3e5673bad36bf30d8b217609819a79d7e76bb"},"74e3e56"),")"),(0,i.kt)("li",{parentName:"ul"},"add support for system v2 in FDE (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e6d1f938d62d68479835f90932bc09b49203a6c9"},"e6d1f93"),")"),(0,i.kt)("li",{parentName:"ul"},"add support for temporal operational settings in v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/f2b217acaaf445df03fba077cd7407a4c37375d2"},"f2b217a"),")")),(0,i.kt)("h3",{id:"bug-fixes-1"},"Bug Fixes"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add system v2 subcomponents to components list (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/b61a0feba9d28c27992128a2e02262c58dedcbdb"},"b61a0fe"),")"),(0,i.kt)("li",{parentName:"ul"},"add system v2 to generator set consumers (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/166"},"#166"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d40558eb0c727723ba1cf952dfbd58b73dca0cd0"},"d40558e"),")"),(0,i.kt)("li",{parentName:"ul"},"avoid name conflicts with ecalc cli package (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/197"},"#197"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/140c4481b8a860b203b338b51a883c41bd6b4dc6"},"140c448"),")"),(0,i.kt)("li",{parentName:"ul"},"bug in asset_result_dto (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/170"},"#170"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c45a7acfb4bf3c89f8c89e71561a90e2831ccb17"},"c45a7ac"),")"),(0,i.kt)("li",{parentName:"ul"},"correct type for total system rate in pump system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/167"},"#167"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/5559cdd478511b050a3f344da33110621f221b76"},"5559cdd"),")"),(0,i.kt)("li",{parentName:"ul"},"do not return actual rate in results for compressor sampled since it can not be calculated (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/190"},"#190"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/74fcfd8ffc4835d6ddec442374f1389f24df66d7"},"74fcfd8"),")"),(0,i.kt)("li",{parentName:"ul"},"expression type in system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/5318fb536945cd2aeb82f03cb922fa1a4ed950e1"},"5318fb5"),")"),(0,i.kt)("li",{parentName:"ul"},"forbid extra attributes in TimeSeries (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/195"},"#195"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/24c27bb0d3f9ee5570dc76e6d6cf3a45bc006e27"},"24c27bb"),")"),(0,i.kt)("li",{parentName:"ul"},"full run with system v2 components (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/147"},"#147"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2279ef430f04673bc91926316663cdbd97cfc61d"},"2279ef4"),")"),(0,i.kt)("li",{parentName:"ul"},"generate system v2 schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/161"},"#161"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a27c39253d91a3f1c7cc559164874c2d5f9443d3"},"a27c392"),")"),(0,i.kt)("li",{parentName:"ul"},"handle all situations where zero mass rate is entering a compressor stage in a multiple streams compressor train (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/164"},"#164"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b"},"ba9235e"),")"),(0,i.kt)("li",{parentName:"ul"},"handle dates in yaml correctly (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e9c28d057413aa801ec9af86b89f3c4d5b3de8e5"},"e9c28d0"),")"),(0,i.kt)("li",{parentName:"ul"},"issue with crossover rate calculation in system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/188"},"#188"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/623a1cfa1e9ee888d69543dc2050cf4c25945baf"},"623a1cf"),")"),(0,i.kt)("li",{parentName:"ul"},"make ecalc installable again (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/58693debf2cdb774a7b9659214ba9aa9453af8d0"},"58693de"),")"),(0,i.kt)("li",{parentName:"ul"},"rate_type was snake_case in json output (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/172"},"#172"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/dc82a88930e158fc5b6a762cd1fe7d75534d86d7"},"dc82a88"),")"),(0,i.kt)("li",{parentName:"ul"},"requested pressures not always an attribute (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/155"},"#155"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0078405e3ad2d254b320239fc8636c3c2bdfbebf"},"0078405"),")"),(0,i.kt)("li",{parentName:"ul"},"system v2 evaluation (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6494257c5d67f8a19582b2c152d73ec550289196"},"6494257"),")"),(0,i.kt)("li",{parentName:"ul"},"use results base (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/199"},"#199"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/cebde330135210bcc25a5950a2416a8fcf747b09"},"cebde33"),")"),(0,i.kt)("li",{parentName:"ul"},"wrongly accessed rate in pump system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/56da4b2a07188200589795ab8a2e7f1ebfe3fe95"},"56da4b2"),")")),(0,i.kt)("h3",{id:"documentation-1"},"Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add further explanation to generic workflow (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/ddcb462ba1eda072df2abfd40e95fa677832ef91"},"ddcb462"),")"),(0,i.kt)("li",{parentName:"ul"},"add generic workflow (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/30553e0e7282ef35e616d2f3629de57e104d7e42"},"30553e0"),")"),(0,i.kt)("li",{parentName:"ul"},"add powerlossfactor in generic workflow (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/3d152c880b9d8b33e3ac496ddc96eb2b2f588fb1"},"3d152c8"),")"),(0,i.kt)("li",{parentName:"ul"},"changelog v8.4 add input compressor pressures to output (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/150"},"#150"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/46e308fba1c1f4001bd1eaa340880c8409c8841b"},"46e308f"),")"),(0,i.kt)("li",{parentName:"ul"},"correct order of diagrams (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/71a07f5315a28d053557db25209d543d4a570307"},"71a07f5"),")"),(0,i.kt)("li",{parentName:"ul"},"make mermaid diagram of workflow render correctly (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/b1c5b233907fa705832e55621e6917efb8620df7"},"b1c5b23"),")"),(0,i.kt)("li",{parentName:"ul"},"make mermaid workflow diagram render correctly (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/7a99b5b062804b0f0661ac4d6a62f8d6f32a2fdb"},"7a99b5b"),")"),(0,i.kt)("li",{parentName:"ul"},"update changelog for v8.3 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/b424176c1dad13f4a29ba7c84cc2354e37b75c2a"},"b424176"),")"),(0,i.kt)("li",{parentName:"ul"},"update workflow with comments (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a71abfe32f02a056a0253ec7e4596b0b10fb94b2"},"a71abfe"),")")),(0,i.kt)("h3",{id:"miscellaneous-chores-1"},"Miscellaneous Chores"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add pressure drop ahead of stage to inlet pressure before choking (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/146"},"#146"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e5368de941febf44f7e5e13c11b1fc3509c2e95d"},"e5368de"),")"),(0,i.kt)("li",{parentName:"ul"},"add rate type to compressor model results and convert to time series (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/187"},"#187"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c86bf3f940224ca765f5705f10df676eb6e5d557"},"c86bf3f"),")"),(0,i.kt)("li",{parentName:"ul"},"add validation for missing headers in csv resource file (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/191"},"#191"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/60e84032d932deaf0591c6f5d5d68d70d23dc753"},"60e8403"),")"),(0,i.kt)("li",{parentName:"ul"},"adding test of full recirculation in multiple streams compressor trains (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b"},"ba9235e"),")"),(0,i.kt)("li",{parentName:"ul"},"calculate correct standard condition density when mixing two streams (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b"},"ba9235e"),")"),(0,i.kt)("li",{parentName:"ul"},"clarify neqsim depenedency in ecalc (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/198"},"#198"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d6635a988de18799563c09c51ae7f3f7944c8915"},"d6635a9"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"docs:")," fix equations showing twice (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/141"},"#141"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2455e34cbaf047bc416a287052c12d9fbbdc963e"},"2455e34"),")"),(0,i.kt)("li",{parentName:"ul"},"enable mypy for cli (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/189"},"#189"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/da713fcdac9d2c32ed6b60b788de31a765c1644a"},"da713fc"),")"),(0,i.kt)("li",{parentName:"ul"},"fix spelling errors in changelog (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/de3c2eb0cf74068dd6c04e7710eaeb1d2dd27a77"},"de3c2eb"),")"),(0,i.kt)("li",{parentName:"ul"},"remove unnecessary folders (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/186"},"#186"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e861d8782aa2d3280a7e3e5c24f757558e5656f5"},"e861d87"),")"),(0,i.kt)("li",{parentName:"ul"},"rename conflicting file names (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/153"},"#153"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/654175e9be0e40b521c6c68871b8a0b85906605c"},"654175e"),")"),(0,i.kt)("li",{parentName:"ul"},"revert nan to num in expressions (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/202"},"#202"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2f95c2966ebfc906ebeda2f12ad1fe72ec0a59b4"},"2f95c29"),")"),(0,i.kt)("li",{parentName:"ul"},"update archive (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/181"},"#181"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/03abf64e9267374b8cd641c09d870631200a2ec5"},"03abf64"),")"),(0,i.kt)("li",{parentName:"ul"},"update deps to latest (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0f30f49db6febd033cfd139727c85c31c4676fd2"},"0f30f49"),")")),(0,i.kt)("h3",{id:"code-refactoring-1"},"Code Refactoring"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"change typ to rate_type for TimeSeriesRate (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/89"},"#89"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/8be87ddff732592e16ff337fe9927ead438d5928"},"8be87dd"),")"),(0,i.kt)("li",{parentName:"ul"},"generate asset/ecalc model schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/157"},"#157"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6818848afa5f9c390d9214597b8ea938eeb43037"},"6818848"),")"),(0,i.kt)("li",{parentName:"ul"},"generate direct emitter schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/180"},"#180"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/924526ad7958cfce6e75aa43791224edbcf6db70"},"924526a"),")"),(0,i.kt)("li",{parentName:"ul"},"generate facility type schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/182"},"#182"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/942897921d8f38115878bdd95349c43c449240b7"},"9428979"),")"),(0,i.kt)("li",{parentName:"ul"},"generate fuel consumer schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/160"},"#160"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9f580c16f6f25e22d30e8d36dd05536303ec6929"},"9f580c1"),")"),(0,i.kt)("li",{parentName:"ul"},"generate fuel types schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/179"},"#179"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e17ef3be779921e029db5c7ca10ed86a2e71f797"},"e17ef3b"),")"),(0,i.kt)("li",{parentName:"ul"},"generate generator set schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/165"},"#165"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/ab25e055de634a4ecc59ae580834ee2e537fd991"},"ab25e05"),")"),(0,i.kt)("li",{parentName:"ul"},"generate installation schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/159"},"#159"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/030a44baf61719a8de6ed48b772a47eccd7d923c"},"030a44b"),")"),(0,i.kt)("li",{parentName:"ul"},"generate time series schema (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/176"},"#176"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/b02d68dbc615b9802c54d6e9806430aceee1b354"},"b02d68d"),")"),(0,i.kt)("li",{parentName:"ul"},"improve error message when wrong CURVE-keyword input to single speed compressor (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/173"},"#173"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9502bcc8ee504d490e293f4bada839e96e011092"},"9502bcc"),")"),(0,i.kt)("li",{parentName:"ul"},"improve error message when wrong CURVES-keyword input to variable speed compressor (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/175"},"#175"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/714e867f7593527078480e4d9c7bca62da163d7a"},"714e867"),")"),(0,i.kt)("li",{parentName:"ul"},"merge functionality for results (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/193"},"#193"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/db1e9b1d52d9dfce48d54dfa6cd77ac4a1bbf92f"},"db1e9b1"),")"),(0,i.kt)("li",{parentName:"ul"},"move common properties for system v2 operational settings (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/10b5e07915d52ce6b08f508dd87d31c4d8dc8778"},"10b5e07"),")"),(0,i.kt)("li",{parentName:"ul"},"move yaml system into package (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/b477b159cc60df96c5ec230cd8d8db519f721f85"},"b477b15"),")"),(0,i.kt)("li",{parentName:"ul"},"remove condition and power_loss_factor from system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2507bb92730cd4e9b5bd35d2f7e429d493fb5478"},"2507bb9"),")"),(0,i.kt)("li",{parentName:"ul"},"remove rate_fractions from system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/ba788fdd8dff754c3ca16315d098e00911d91fa0"},"ba788fd"),")"),(0,i.kt)("li",{parentName:"ul"},"use common Period,Periods classes (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/76366cec64da5c7585635db69adf457fbb36775e"},"76366ce"),")"),(0,i.kt)("li",{parentName:"ul"},"use common to_camel_case function (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/171"},"#171"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/f5f0c2f8da6e07ad666f8fc203876eece646e6e8"},"f5f0c2f"),")"),(0,i.kt)("li",{parentName:"ul"},"use yaml prefix for yaml klasses/modules (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/174"},"#174"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e91ac2a77345556d8a53c10a4be049eb8ec2c7ce"},"e91ac2a"),")")),(0,i.kt)("h2",{id:"830-2023-08-11"},(0,i.kt)("a",{parentName:"h2",href:"https://github.com/equinor/ecalc/compare/v8.2.2...v8.3.0"},"8.3.0")," (2023-08-11)"),(0,i.kt)("h3",{id:"-breaking-changes"},"\u26a0 BREAKING CHANGES"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"energy model type not allowed to change over time (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/131"},"#131"),")")),(0,i.kt)("h3",{id:"features-2"},"Features"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"output pump head to json-file (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/49"},"#49"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/60720f429cb5da82cd839740eca8d3039c9d5969"},"60720f4"),")")),(0,i.kt)("h3",{id:"bug-fixes-2"},"Bug Fixes"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"avoid zero discharge pressure after validation of operational conditions (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/830c75e27a29549157658c606e618da381c24e81"},"830c75e"),")"),(0,i.kt)("li",{parentName:"ul"},"bug fix to joining results from different temporal models with compressor train models having multiple inlet or outlet streams (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/63"},"#63"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/da3144a0cbb3e6121809c8eeee86e62a2a3ed5e1"},"da3144a"),")"),(0,i.kt)("li",{parentName:"ul"},"json schema accepts MAXIMUM_DISCHARGE_PRESSURE for single speed train (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/86"},"#86"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a18de1eae60085211b640b67a4f372346382fdc8"},"a18de1e"),")"),(0,i.kt)("li",{parentName:"ul"},"json schema allow stages to have control_margin and control_margin_unit (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/90"},"#90"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2415534053df4e50496fd2ae4504cff76ab14346"},"2415534"),")"),(0,i.kt)("li",{parentName:"ul"},"make apply_condition work for 2D numpy arrays also (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/78"},"#78"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/bce91cb0b6b821e1b1a579c40f19311e847577b3"},"bce91cb"),")"),(0,i.kt)("li",{parentName:"ul"},"make sure that suction pressure is less than or equal to discharge pressure for compressor train (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/104"},"#104"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d2182730c2fdcd98e54fef8625cd289dc206b2bf"},"d218273"),")"),(0,i.kt)("li",{parentName:"ul"},"parse scientific notation numbers in expression (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/85"},"#85"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/fdf322bafa9a3379b6481e57ca1e761475f42b25"},"fdf322b"),")"),(0,i.kt)("li",{parentName:"ul"},"parse spaces as thousand separators from excel (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/107"},"#107"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/5a3bd6a2b8e85dcc248435b30677e278d64c7f93"},"5a3bd6a"),")"),(0,i.kt)("li",{parentName:"ul"},"pump results wrong when resampled (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/71"},"#71"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/daffdb3d969add106bbbfd782cfae418cfd8650d"},"daffdb3"),")"),(0,i.kt)("li",{parentName:"ul"},"resample emissions correctly to create valid json (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/3c9b52e40c1c88a11db3d088c0fbb320a4920daa"},"3c9b52e"),")"),(0,i.kt)("li",{parentName:"ul"},"result of validation of operational conditions when rate is zero should always be valid (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9de403c8b92895fafabea875d970fc1901a4ba89"},"9de403c"),")"),(0,i.kt)("li",{parentName:"ul"},"validate time steps where rate is different from zero, not only when larger than zero (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6ce07c41e82b397d9512566a42fd8fd2017c14d1"},"6ce07c4"),")"),(0,i.kt)("li",{parentName:"ul"},"wrong standard_conditions_density when mixing two fluids (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a16a695736125dc4b662ab31ab9a83186b14f369"},"a16a695"),")")),(0,i.kt)("h3",{id:"documentation-2"},"Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"fix generic compressor example (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/38870a3f735e7397502345dda69f646240328490"},"38870a3"),")"),(0,i.kt)("li",{parentName:"ul"},"fix links (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/116"},"#116"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/62cadfcf581b101d7bb33b3772ffb65eefbf670b"},"62cadfc"),")"),(0,i.kt)("li",{parentName:"ul"},"how to migrate from 8.1 to 8.2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/4d3be58f5af44cbdee4158017b163361371dc23c"},"4d3be58"),")"),(0,i.kt)("li",{parentName:"ul"},"remove unnecessary information from migration guide (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/47305386db82d826245c67e6c10a8597a36bfc09"},"4730538"),")"),(0,i.kt)("li",{parentName:"ul"},"specify only gensets for boiler/heater (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/53"},"#53"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2df3bdf299bcb6cf47289259e4fedd21c2de141c"},"2df3bdf"),")"),(0,i.kt)("li",{parentName:"ul"},"update changelog 8.2 with changes for ltp- and stp (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/43"},"#43"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6fe4b773a156d01eec67e8e70b764d4e18d374ce"},"6fe4b77"),")"),(0,i.kt)("li",{parentName:"ul"},"update changelog for 8.2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/3ccea743332f0d1950ff61ca6747bb507ea37bd4"},"3ccea74"),")"),(0,i.kt)("li",{parentName:"ul"},"update docs and changelog for energy models (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/133"},"#133"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/8f0d71633d80a99da369dffa05f386e554f3c0bb"},"8f0d716"),")"),(0,i.kt)("li",{parentName:"ul"},"update documentation for heaters and boilers (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/52"},"#52"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2bef70731be94ace7d0a2269f2ebf07bd01e82b2"},"2bef707"),")"),(0,i.kt)("li",{parentName:"ul"},"update migration guide with ltp- and stp changes (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/42"},"#42"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/4b0b23011a9d2161741dd52031070307fc6c1b68"},"4b0b230"),")")),(0,i.kt)("h3",{id:"miscellaneous-chores-2"},"Miscellaneous Chores"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add 8.3 changelog (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9f4a4af545126922a38807c51268bd84dfb868db"},"9f4a4af"),")"),(0,i.kt)("li",{parentName:"ul"},"add fluid mixing checks (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/53c1626ebf10edc71c0ba4ef5fcdbe1cd6a32ac0"},"53c1626"),")"),(0,i.kt)("li",{parentName:"ul"},"add fluid mixing checks (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0f3ddcaca1164acad3f5d213b2e8daac05333042"},"0f3ddca"),")"),(0,i.kt)("li",{parentName:"ul"},"add installation filter to flare nmvoc (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/87"},"#87"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/f37b76d0b3c2f6941585299998205c3a907b41a8"},"f37b76d"),")"),(0,i.kt)("li",{parentName:"ul"},"add installation filter to remaining ltp-columns (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/91"},"#91"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/39df7923d79a393981285986016311e9f1b0848f"},"39df792"),")"),(0,i.kt)("li",{parentName:"ul"},"add power adjustment constant also for compressor trains with interstage pressure (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/136"},"#136"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d"},"c8a4861"),")"),(0,i.kt)("li",{parentName:"ul"},"add test for adjust energy usage on multiple streams and pressures compressor trains (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d"},"c8a4861"),")"),(0,i.kt)("li",{parentName:"ul"},"add test of count_parentheses (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0d1ce6feff7a6aaeecab57fd9a661122b691d3b5"},"0d1ce6f"),")"),(0,i.kt)("li",{parentName:"ul"},"add test of validation of operational conditions when suction pressure exceeds discharge pressure (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d2182730c2fdcd98e54fef8625cd289dc206b2bf"},"d218273"),")"),(0,i.kt)("li",{parentName:"ul"},"added changelog entry about interstage pressure fix (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/95"},"#95"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2a1e8b085ed87dcbb8da874b64f737721f0ceaae"},"2a1e8b0"),")"),(0,i.kt)("li",{parentName:"ul"},"count parentheses in list of tokens only among the elements that are strings (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/94"},"#94"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0d1ce6feff7a6aaeecab57fd9a661122b691d3b5"},"0d1ce6f"),")"),(0,i.kt)("li",{parentName:"ul"},"energy model type not allowed to change over time (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/131"},"#131"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/670cff2154e2881aea25903557a7f187bdab05ee"},"670cff2"),")"),(0,i.kt)("li",{parentName:"ul"},"enforce unique fuel type names, and unique emission names within one fuel type (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/84"},"#84"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/4ea9c630510015e2030f0840b933ea399cc0734b"},"4ea9c63"),")"),(0,i.kt)("li",{parentName:"ul"},"fix broken link in documentation of GENERATORSETS keyword (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/103"},"#103"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/329c8e993c217e7685c082b7671a12c4115bba87"},"329c8e9"),")"),(0,i.kt)("li",{parentName:"ul"},"fix typing of fluid composition (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c0d98b3a6f4dfb411edfa9bdd8be3c887b28f6da"},"c0d98b3"),")"),(0,i.kt)("li",{parentName:"ul"},"improve documentation on defining compressor charts using CURVE and CURVES (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/97"},"#97"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/1bde68a38e75255c8f2d6cd88fb5b6ba1ddb97c9"},"1bde68a"),")"),(0,i.kt)("li",{parentName:"ul"},"improve error message when bad yaml file name (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/77"},"#77"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d2eb733264b2d5b2114a785096c9d6abbffea21b"},"d2eb733"),")"),(0,i.kt)("li",{parentName:"ul"},"merge queue (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d4489c604b807c07a7e41a038cbdfeca9720ade1"},"d4489c6"),")"),(0,i.kt)("li",{parentName:"ul"},"numpy ndarray typing (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/46"},"#46"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9b7b308ea6ce5c0aee5acdf8226cd94b90b448aa"},"9b7b308"),")"),(0,i.kt)("li",{parentName:"ul"},"pin numpy to compatible numpy version (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/35a3640a96c376f4d37e74fd62aec0f0a0bf458b"},"35a3640"),")"),(0,i.kt)("li",{parentName:"ul"},"remove limiting dependency typer-cli (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/820844475c29460f29a44bb7917ed5bd37d4ad45"},"8208444"),")"),(0,i.kt)("li",{parentName:"ul"},"simplify dependencies for use with komodo (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/39c5c365aea85ba333a5a509fe5cfbee1be5d9d0"},"39c5c36"),")"),(0,i.kt)("li",{parentName:"ul"},"update dependencies to be aligned with external requirements (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/fbfbfeb4292011c04d9107218a5b4188e052f7ff"},"fbfbfeb"),")"),(0,i.kt)("li",{parentName:"ul"},"update snapshots after power adjustment constant fix for compressor trains with interstage pressure (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d"},"c8a4861"),")")),(0,i.kt)("h3",{id:"code-refactoring-2"},"Code Refactoring"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"consumer system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/248dabb595a12ed6ca9a0f8ef519f5439a3b0964"},"248dabb"),")"),(0,i.kt)("li",{parentName:"ul"},"ensure neqsim fluid is contained to FluidStream object (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/118"},"#118"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d1d6ad6fa1c6cfdf4eee428477995c6f163fa11a"},"d1d6ad6"),")"),(0,i.kt)("li",{parentName:"ul"},"enthalpy calculations (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/109"},"#109"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a01a2153fe904d191150c4ced09257dc45484194"},"a01a215"),")"),(0,i.kt)("li",{parentName:"ul"},"enthalpy calculations (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/110"},"#110"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/cf7d1a9e975fece41b98f4ab6c7bbb3edb562735"},"cf7d1a9"),")"),(0,i.kt)("li",{parentName:"ul"},"improve naming and documentation (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/94be7fa714a0db20944e9b35d1867d11a0748e7f"},"94be7fa"),")"),(0,i.kt)("li",{parentName:"ul"},"molar_mass_kg_per_mol is not used in the code (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/3ea535ef68ead2b600b33319c1ed70907e7ba681"},"3ea535e"),")"),(0,i.kt)("li",{parentName:"ul"},"move NeqSimfluid creation into NeqSim wrapper (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/57c4b244d6449c6b43bcea75a1f7ed1f82ccfc8c"},"57c4b24"),")"),(0,i.kt)("li",{parentName:"ul"},"NeqSim mapping (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/120"},"#120"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0a0b2fea564c1695bb920145086f23bccac91528"},"0a0b2fe"),")"),(0,i.kt)("li",{parentName:"ul"},"remove FluidStream copy (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/119"},"#119"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0e30ab288b18fecbde62067564ac235d6c58dae1"},"0e30ab2"),")"),(0,i.kt)("li",{parentName:"ul"},"Use a list comprehension to create a transformed list (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/112"},"#112"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/5d7292bdafd16bc74b2e9b8bc13e97cf279fd9f7"},"5d7292b"),")")),(0,i.kt)("h3",{id:"tests"},"Tests"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add test for fluid stream mixing (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/0ba8f8fff9503b791b6edaf16c45cb3d922d6c2b"},"0ba8f8f"),")")),(0,i.kt)("h3",{id:"continuous-integration"},"Continuous Integration"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"create release-please pr against correct branch (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/be9426a774b8704b2f22e9a83544e07bd92a8808"},"be9426a"),")"),(0,i.kt)("li",{parentName:"ul"},"fix issue with api reference docs generation (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/44"},"#44"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/42c140269a9e8a6d5f09e9354d14ae51d02f3e81"},"42c1402"),")"),(0,i.kt)("li",{parentName:"ul"},"fix syntax for gh action workflow (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d8700dd9bccd40cb4b3bdb75119e0bd47baf3985"},"d8700dd"),")"),(0,i.kt)("li",{parentName:"ul"},"Lock pydantic version in CI and update hooks (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/106"},"#106"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2ea517e79a34195e561a4897798bd24ef9cae6ae"},"2ea517e"),")"),(0,i.kt)("li",{parentName:"ul"},"remove duplicate build of docs (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/62"},"#62"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e5b896b9f46a7e13c6d806237c4d4bef44833b77"},"e5b896b"),")"),(0,i.kt)("li",{parentName:"ul"},"set default ownership for source (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/16d54f1a30368d92ead377baceef98820754c25f"},"16d54f1"),")"),(0,i.kt)("li",{parentName:"ul"},"support hotfix releases (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/03469295d20526e391938a5830d1513088a8803f"},"0346929"),")"),(0,i.kt)("li",{parentName:"ul"},"update pre-commit settings (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6092255da9ca373537b162b21190bfe9f138a027"},"6092255"),")")),(0,i.kt)("h2",{id:"822-2023-05-28"},(0,i.kt)("a",{parentName:"h2",href:"https://github.com/equinor/ecalc/compare/v8.2.1...v8.2.2"},"8.2.2")," (2023-05-28)"),(0,i.kt)("h3",{id:"bug-fixes-3"},"Bug Fixes"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"allow electrical driven consumers in consumer system v2 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/92cb4faa7bfa525af6527892eab2dd38606b2033"},"92cb4fa"),")"),(0,i.kt)("li",{parentName:"ul"},"cast float to numpy array in function call (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/39"},"#39"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/250928c2b573f6148129ec32bc54932cbb2cb4a0"},"250928c"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"NeqSim Wrapper:")," inconsistent return type (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/94824210b4c2da666d9280ee581e3a98463e4742"},"9482421"),")"),(0,i.kt)("li",{parentName:"ul"},"output emissions in fixed and predicted order (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/059dab592bf396eb20d4b825b8358fc10793ca5d"},"059dab5"),")")),(0,i.kt)("h3",{id:"continuous-integration-1"},"Continuous Integration"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"enable mypy for neqsim wrapper (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/871c038c756ba40fc1c43bfbee7f83b0f4fd5390"},"871c038"),")"),(0,i.kt)("li",{parentName:"ul"},"parallelize tests in docker (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/4e73b680147c558e4e7cb0d44a78cfaa0e1a357f"},"4e73b68"),")"),(0,i.kt)("li",{parentName:"ul"},"remove docker tests (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a2b5c1a7158d81094982724a63748ca4798f14ca"},"a2b5c1a"),")"),(0,i.kt)("li",{parentName:"ul"},"use xdist to parallelize test suite (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/2895ae7361878ea94d0d5be4a04a6ffbe0067b3d"},"2895ae7"),")")),(0,i.kt)("h3",{id:"tests-1"},"Tests"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"compare consumer system v1 vs v2 both fuel and power consumers (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/74fafce276b93c9495bcfa1c2800c2a866bfa388"},"74fafce"),")")),(0,i.kt)("h3",{id:"code-refactoring-3"},"Code Refactoring"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"even more typing! (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/a7b22e23fa73d4e0cd35750f7ea6cea5e52f8abd"},"a7b22e2"),")"),(0,i.kt)("li",{parentName:"ul"},"fix more typing (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/08394a3ce3969976674532ccf8c3876265315035"},"08394a3"),")"),(0,i.kt)("li",{parentName:"ul"},"make units lowercase in function names (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/272f0d7274986bc54c0717e7964d5a48c9a06723"},"272f0d7"),")"),(0,i.kt)("li",{parentName:"ul"},"raise exceptions from error (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/ee6e4742da1c3201abe8969d2dfedb1c2d4b369b"},"ee6e474"),")"),(0,i.kt)("li",{parentName:"ul"},"remove duplicate function for converting to standard rate (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/93de4f4d10b10763428d933e7afc3dea277a31ac"},"93de4f4"),")"),(0,i.kt)("li",{parentName:"ul"},"remove unused code (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/7ccf2c1dfd6d51242032d1b7bf45c52f6b7e90f5"},"7ccf2c1"),")"),(0,i.kt)("li",{parentName:"ul"},"rename function variables (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/c56693a9e982c7e2275cc277939624c7812e9b65"},"c56693a"),")"),(0,i.kt)("li",{parentName:"ul"},"typing and typos (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/936b9417da0723871d6c46f258d256a8967f934c"},"936b941"),")")),(0,i.kt)("h3",{id:"documentation-3"},"Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add docstrings to undocumented functions (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/064adfa204c2c9f21588c30dc2c2cf3d2375c8a7"},"064adfa"),")"),(0,i.kt)("li",{parentName:"ul"},"update compressor pressure control (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/14"},"#14"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/1da1999ac4dfaf21abd50e9d9ecc94102a0427e2"},"1da1999"),")")),(0,i.kt)("h3",{id:"miscellaneous-chores-3"},"Miscellaneous Chores"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"add consumer function utils (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"add consumer system v2 sub results (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/b78b03504c4a46114062aded6661f00400c6ca06"},"b78b035"),")"),(0,i.kt)("li",{parentName:"ul"},"add testing of condition in consumer system consumer function (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"capture return values from a decorated function (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/09ef23e92bf2755c7b83c7de5e9cbe9ee862db05"},"09ef23e"),"), closes ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/4489"},"#4489")),(0,i.kt)("li",{parentName:"ul"},"capture valid neqsim states (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/f9c8b09f36d1f9a965b94cd32ef2d7b47c910a75"},"f9c8b09"),")"),(0,i.kt)("li",{parentName:"ul"},"change to absolute image links in readme (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/16"},"#16"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9a54f516613509bd6d5595f8afc1e5dce7ac860a"},"9a54f51"),")"),(0,i.kt)("li",{parentName:"ul"},"conditions in tabular consumer function (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"correct link to documentation from README.md (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/f185a7f8c389d4f9f5e087b68bfc83cc4fddad74"},"f185a7f"),")"),(0,i.kt)("li",{parentName:"ul"},"coverage from coverage.py is not directly supported (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/8e76c8ab90d455613868e4343d6a2f61ccfb2a68"},"8e76c8a"),")"),(0,i.kt)("li",{parentName:"ul"},"enable B904 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/65ac18ba23178c57886c1a77b74b2ee52c6d7a60"},"65ac18b"),")"),(0,i.kt)("li",{parentName:"ul"},"evaluate consumer system v2 consumers according to input order (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/00882321d823f74cf37f0b42e9771775b8eb34db"},"0088232"),")"),(0,i.kt)("li",{parentName:"ul"},"fix badges (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/dd2fd6be194d306ae1ef969b13c43aea7352db58"},"dd2fd6b"),")"),(0,i.kt)("li",{parentName:"ul"},"migration guide changed resampling method (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/38"},"#38"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/d4f11dc49ce5eef29f6982f9514f6664ef18c764"},"d4f11dc"),")"),(0,i.kt)("li",{parentName:"ul"},"move conditioning for consumer system consumer function (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"move conditions for compressor consumer function (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"move conditions for direct consumer function (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"move conditions in pump consumer function (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"move evaluation of conditions before calculations (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/24"},"#24"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"remove energy usage before conditioning from tests (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"remove energy_usage_before_conditioning from results (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703"},"50e2d66"),")"),(0,i.kt)("li",{parentName:"ul"},"set power to zero when rate (and fuel consumption) is zero (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/27"},"#27"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/1ee5bfd2af30482683698172cd2a9c512f793b77"},"1ee5bfd"),")"),(0,i.kt)("li",{parentName:"ul"},"typo (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9c3af00b4bcf5e3e57a99c97d3cc9028faeca307"},"9c3af00"),")"),(0,i.kt)("li",{parentName:"ul"},"typo (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/389db6f29e7a7ff9044b7bac5fb0e6fddba1687d"},"389db6f"),")"),(0,i.kt)("li",{parentName:"ul"},"update dependencies to latest compatible (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/58098624c64693d20591bc96d79c2cbc61e3b5a6"},"5809862"),")"),(0,i.kt)("li",{parentName:"ul"},"update description etc in readme (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/f37dbb7b97ade6c358b89e288ba644b06d546187"},"f37dbb7"),")"),(0,i.kt)("li",{parentName:"ul"},"update docstring for numeric_methods (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/be435c3c96bc378614c4f761410c005be77025a4"},"be435c3"),")"),(0,i.kt)("li",{parentName:"ul"},"update test snapshots (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/1ee5bfd2af30482683698172cd2a9c512f793b77"},"1ee5bfd"),")")),(0,i.kt)("h2",{id:"821-2023-05-09"},"8.2.1 (2023-05-09)"),(0,i.kt)("h3",{id:"miscellaneous-chores-4"},"Miscellaneous Chores"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"initial commit (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/e4a59f03f716c7ceb1d3df50af6ef3cc76c405cd"},"e4a59f0"),")"),(0,i.kt)("li",{parentName:"ul"},"release 8.2.1 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/9d66de6199b35d3bfd279fd1fe96806b05e6d594"},"9d66de6"),")"),(0,i.kt)("li",{parentName:"ul"},"update documentation url (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/6443ecf7324e6ee33d02bfa1a3f7b9168f19a612"},"6443ecf"),")")),(0,i.kt)("h3",{id:"continuous-integration-2"},"Continuous Integration"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"enable publish to pypi (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/15"},"#15"),") (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/commit/fe6f069b12119b62d054a635eb038b37a4394415"},"fe6f069"),")")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/43a1031a.7f53b24f.js b/assets/js/43a1031a.7f53b24f.js new file mode 100644 index 0000000000..b261646afc --- /dev/null +++ b/assets/js/43a1031a.7f53b24f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8010],{6370:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>r,toc:()=>p});var i=a(7462),n=(a(7294),a(3905));a(5657);const l={title:"Facility inputs",sidebar_position:3,description:"Guide on how to use facility inputs"},o=void 0,r={unversionedId:"about/modelling/setup/facility_inputs/index",id:"about/modelling/setup/facility_inputs/index",title:"Facility inputs",description:"Guide on how to use facility inputs",source:"@site/docs/about/modelling/setup/facility_inputs/index.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Facility inputs",sidebar_position:3,description:"Guide on how to use facility inputs"},sidebar:"about",previous:{title:"Time series",permalink:"/ecalc/docs/about/modelling/setup/time_series"},next:{title:"Generator modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"}},s={},p=[{value:"Format",id:"format",level:2},{value:"Supported types",id:"supported-types",level:3}],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,n.kt)(c,(0,i.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"The ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")," keyword is ",(0,n.kt)("strong",{parentName:"p"},"mandatory")," within the eCalc\u2122 YAML file.")),(0,n.kt)("p",null,"This part of the setup defines input files that characterize various facility elements. Each facility element is\nspecified in a list. These are later used as input in the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," part of the setup by referencing their ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME"),". "),(0,n.kt)("p",null,"All facility inputs are in essence a ",(0,n.kt)("inlineCode",{parentName:"p"},"CSV")," (Comma separated file) file that specifies input data to a model that\ncalculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple\n",(0,n.kt)("a",{parentName:"p",href:"#supported-types"},"supported types"),"."),(0,n.kt)("p",null,"There are four categories of data that can be used here:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Files describing the performance of a ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"},"generator set")),(0,n.kt)("li",{parentName:"ul"},"Files describing the performance of pumps ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},"(pump charts)")),(0,n.kt)("li",{parentName:"ul"},"Files describing the performance of ",(0,n.kt)("strong",{parentName:"li"},"only")," tabular compressors ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"},"(sampled compressor data)")),(0,n.kt)("li",{parentName:"ul"},"Other energy consuming equipment modeled variable w.r.t. reservoir management\n(tabulated relationship between variables and consumption)")),(0,n.kt)("p",null,"eCalc\u2122 supports making simple adjustments to a table by using the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ADJUSTMENT"},"ADJUSTMENT"),"\nkeyword as well as modification of the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"},"HEAD_MARGIN"),"\nwhich can be used while calibrating pump charts."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("p",null,"Each facility input has the skeleton as seen below. However, some inputs require further information. For example, ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},"pump models")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: <reference name>\n FILE: <file_path.csv>\n TYPE: <consumer type>\n")),(0,n.kt)("h3",{id:"supported-types"},"Supported types"),(0,n.kt)("p",null,"The facility input type is defined using the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," keyword and defines the type of model applied\nto the data in this file. The input files are in ",(0,n.kt)("inlineCode",{parentName:"p"},"CSV")," (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file."),(0,n.kt)("p",null,"The supported types are:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"ELECTRICITY2FUEL")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"TABULAR")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_TABULAR")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"PUMP_CHART_SINGLE_SPEED")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"PUMP_CHART_VARIABLE_SPEED"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/43a26e71.2c8343da.js b/assets/js/43a26e71.2c8343da.js new file mode 100644 index 0000000000..8c2a99b7f9 --- /dev/null +++ b/assets/js/43a26e71.2c8343da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4845],{6689:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>r,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var n=i(7462),o=(i(7294),i(3905));i(5657);const l={sidebar_position:2,description:"Pump modelling"},p="Pump modelling",a={unversionedId:"about/modelling/setup/facility_inputs/pump_modelling/index",id:"about/modelling/setup/facility_inputs/pump_modelling/index",title:"Pump modelling",description:"Pump modelling",source:"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",sourceDirName:"about/modelling/setup/facility_inputs/pump_modelling",slug:"/about/modelling/setup/facility_inputs/pump_modelling/",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Pump modelling"},sidebar:"about",previous:{title:"Generator modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"},next:{title:"Pump chart",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"}},u={},d=[],s={toc:d},m="wrapper";function r(e){let{components:t,...i}=e;return(0,o.kt)(m,(0,n.Z)({},s,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"pump-modelling"},"Pump modelling"),(0,o.kt)("h1",{id:"attention"},"Attention"),(0,o.kt)("p",null,"Pumps can both be single speed and variable speed. Often, the pumping capacity on an installation is filled with a system of several pumps in parallel."),(0,o.kt)("admonition",{title:"Attention",type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"The pump models in eCalc\u2122 are intended for water, i.e., there is no friction dependency.\nThus, for usage in other types of pumps (e.g., where the\nfluid viscosity changes with the fluid mixture), the results might not be as intended.")),(0,o.kt)("p",null,"Core theory behind the modelling of pumps in eCalc\u2122 can be found ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/theory/pump_modelling"},"here"),"."))}r.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/45c974ba.ef9a1068.js b/assets/js/45c974ba.ef9a1068.js new file mode 100644 index 0000000000..3001202167 --- /dev/null +++ b/assets/js/45c974ba.ef9a1068.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2459],{2098:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));a(5657);const r={slug:"v7-2-release",title:"v7.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:5},s="eCalc v7.2",l={unversionedId:"changelog/v7-2",id:"changelog/v7-2",title:"v7.2",description:"Features",source:"@site/docs/changelog/v7-2.md",sourceDirName:"changelog",slug:"/changelog/v7-2-release",permalink:"/ecalc/docs/changelog/v7-2-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-2.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:5,frontMatter:{slug:"v7-2-release",title:"v7.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:5},sidebar:"changelog",previous:{title:"v7.1",permalink:"/ecalc/docs/changelog/v7-1-release"},next:{title:"v7.3",permalink:"/ecalc/docs/changelog/v7-3-release"}},i={},c=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}],m={toc:c},p="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ecalc-v72"},"eCalc v7.2"),(0,o.kt)("h2",{id:"features"},(0,o.kt)("em",{parentName:"h2"},"Features")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Add :code:",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc show yaml model.yaml")," command."),(0,o.kt)("p",{parentName:"li"},"The command will only read the yaml file, include the files that should be included, then show the resulting yaml.\nThere is no need to run the model beforehand."),(0,o.kt)("p",{parentName:"li"},"This should help figure out problems with :code:",(0,o.kt)("inlineCode",{parentName:"p"},"!include"),"."))),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"BREAKING CHANGE!: ",(0,o.kt)("a",{parentName:"p",href:"../about/references/keywords/CATEGORY"},"CATEGORY")," is MANDATORY for Generator Sets. To be able to handle this, the ",(0,o.kt)("inlineCode",{parentName:"p"},"MISCELLANEOUS")," category\nhas been introduced for Generator sets for users to be able to set this to generator sets that do not apply to other categories,\nand to e.g. except for LTP output."),(0,o.kt)("p",{parentName:"li"},".. code-block:: yaml"),(0,o.kt)("p",{parentName:"li"}," GENERATORSETS:"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"- NAME: genset\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: A_genset\n ...\n ...\n- NAME: power_from_shore\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: onshore_power\n ...\n"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"EXPERIMENTAL: Add show results command to cli."),(0,o.kt)("p",{parentName:"li"},"When running ecalc, either by ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc run model.yaml")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc model.yaml")," we will store the results in your\nhome-directory. You don't have to specify any specific arguments for this to happen."),(0,o.kt)("p",{parentName:"li"},"A new command ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc show results")," is introduced. This command can be used to display all the results, or you can use\nthe argument ",(0,o.kt)("inlineCode",{parentName:"p"},"--name")," to only show results for a specific component."),(0,o.kt)("p",{parentName:"li"},"What is a component? Currently the supported component names are the name of the model (filename without the yaml ending),\ninstallation names, generator set names, electricity consumer names and fuel consumer names."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},'ecalc show results --name "component name"')," will give a json file with only the specified component results."),(0,o.kt)("p",{parentName:"li"},"The output format can be changed to csv by specifying ",(0,o.kt)("inlineCode",{parentName:"p"},"--output-format csv"),". This will try to give all the data represented\nin the json output, but some of it will be filtered as it does not fit the tabular csv format."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Examples")),(0,o.kt)("p",{parentName:"li"},"Show all results in json format: ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc show results")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc show results --output-format json"),"\nShow model results (totals) in json format ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc show results --name model")," (if using the model.yaml file as shown above)\nShow model results (totals) in csv format ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc show results --name model --output-format csv")),(0,o.kt)("p",{parentName:"li"},"Deprecation warning: Running ecalc without the 'run' argument is deprecated. Use 'ecalc run arg1 ... argN' instead.\nAs this is an experimental feature ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc run")," might see breaking changes in future releases, you are free to ignore\nthe deprecation warning for a while if you don't want to be exposed to those changes. ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc show")," will still work as\nexpected."))),(0,o.kt)("h2",{id:"fixes"},(0,o.kt)("em",{parentName:"h2"},"Fixes")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Deprecate json_v2 output, json_v3 should be used instead. json_v2 (and json_v1) will be removed in the next release."),(0,o.kt)("li",{parentName:"ul"},"Allow Single and Variable Speed Compressor Trains to run regardless of non-convergence in numeric root finding algorithms. This is a rate situation and caused by numeric instability. If this happens there will be logged an error in the log together with relevant data. Use result with caution."),(0,o.kt)("li",{parentName:"ul"},"Use Brent's method instead of secant method to find roots used in numeric iterations for compressor models. Faster and more robust compared to old secant method."),(0,o.kt)("li",{parentName:"ul"},"Correct prioritazion of compressor system when the compressor system is more complex than only splitting rates on more and more duplicate compressor trains."),(0,o.kt)("li",{parentName:"ul"},"Added warning both in documentation and code about using ",(0,o.kt)("inlineCode",{parentName:"li"},"Generic compressor chart with design point calculated from input data")," in a ",(0,o.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_SYSTEM energy usage model")),(0,o.kt)("li",{parentName:"ul"},"Improved units and results mapping. The consumed energy is now reported under energy_usage, and power_rate is included if relevant regardless of energy_usage."),(0,o.kt)("li",{parentName:"ul"},"Suction pressures were not correctly set, and defaulting to 0, in some cases when a list of pressures were given."),(0,o.kt)("li",{parentName:"ul"},"In cases when only one timestep was evaluated in a consumer system, and the first prioritized operational setting was outside capacity, it was nevertheless chosen.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4706.4bbb5beb.js b/assets/js/4706.4bbb5beb.js new file mode 100644 index 0000000000..d3028345bf --- /dev/null +++ b/assets/js/4706.4bbb5beb.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4706],{8734:function(t){t.exports=function(){"use strict";return function(t,e){var n=e.prototype,i=n.format;n.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return i.bind(this)(t);var s=this.$utils(),r=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return n.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWeekYear();case"wo":return n.ordinal(e.week(),"W");case"w":case"ww":return s.s(e.week(),"w"===t?1:2,"0");case"W":case"WW":return s.s(e.isoWeek(),"W"===t?1:2,"0");case"k":case"kk":return s.s(String(0===e.$H?24:e.$H),"k"===t?1:2,"0");case"X":return Math.floor(e.$d.getTime()/1e3);case"x":return e.$d.getTime();case"z":return"["+e.offsetName()+"]";case"zzz":return"["+e.offsetName("long")+"]";default:return t}}));return i.bind(this)(r)}}}()},285:function(t){t.exports=function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,i=/\d\d?/,s=/\d*[^-_:/,()\s\d]+/,r={},a=function(t){return(t=+t)+(t>68?1900:2e3)},o=function(t){return function(e){this[t]=+e}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if("Z"===t)return 0;var e=t.match(/([+-]|\d\d)/g),n=60*e[1]+(+e[2]||0);return 0===n?0:"+"===e[0]?-n:n}(t)}],l=function(t){var e=r[t];return e&&(e.indexOf?e:e.s.concat(e.f))},u=function(t,e){var n,i=r.meridiem;if(i){for(var s=1;s<=24;s+=1)if(t.indexOf(i(s,0,e))>-1){n=s>12;break}}else n=t===(e?"pm":"PM");return n},d={A:[s,function(t){this.afternoon=u(t,!1)}],a:[s,function(t){this.afternoon=u(t,!0)}],S:[/\d/,function(t){this.milliseconds=100*+t}],SS:[n,function(t){this.milliseconds=10*+t}],SSS:[/\d{3}/,function(t){this.milliseconds=+t}],s:[i,o("seconds")],ss:[i,o("seconds")],m:[i,o("minutes")],mm:[i,o("minutes")],H:[i,o("hours")],h:[i,o("hours")],HH:[i,o("hours")],hh:[i,o("hours")],D:[i,o("day")],DD:[n,o("day")],Do:[s,function(t){var e=r.ordinal,n=t.match(/\d+/);if(this.day=n[0],e)for(var i=1;i<=31;i+=1)e(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],M:[i,o("month")],MM:[n,o("month")],MMM:[s,function(t){var e=l("months"),n=(l("monthsShort")||e.map((function(t){return t.slice(0,3)}))).indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[s,function(t){var e=l("months").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\d+/,o("year")],YY:[n,function(t){this.year=a(t)}],YYYY:[/\d{4}/,o("year")],Z:c,ZZ:c};function h(n){var i,s;i=n,s=r&&r.formats;for(var a=(n=i.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(e,n,i){var r=i&&i.toUpperCase();return n||s[i]||t[i]||s[r].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(t,e,n){return e||n.slice(1)}))}))).match(e),o=a.length,c=0;c<o;c+=1){var l=a[c],u=d[l],h=u&&u[0],f=u&&u[1];a[c]=f?{regex:h,parser:f}:l.replace(/^\[|\]$/g,"")}return function(t){for(var e={},n=0,i=0;n<o;n+=1){var s=a[n];if("string"==typeof s)i+=s.length;else{var r=s.regex,c=s.parser,l=t.slice(i),u=r.exec(l)[0];c.call(e,u),t=t.replace(u,"")}}return function(t){var e=t.afternoon;if(void 0!==e){var n=t.hours;e?n<12&&(t.hours+=12):12===n&&(t.hours=0),delete t.afternoon}}(e),e}}return function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(a=t.parseTwoDigitYear);var i=e.prototype,s=i.parse;i.parse=function(t){var e=t.date,i=t.utc,a=t.args;this.$u=i;var o=a[1];if("string"==typeof o){var c=!0===a[2],l=!0===a[3],u=c||l,d=a[2];l&&(d=a[2]),r=this.$locale(),!c&&d&&(r=n.Ls[d]),this.$d=function(t,e,n){try{if(["x","X"].indexOf(e)>-1)return new Date(("X"===e?1e3:1)*t);var i=h(e)(t),s=i.year,r=i.month,a=i.day,o=i.hours,c=i.minutes,l=i.seconds,u=i.milliseconds,d=i.zone,f=new Date,m=a||(s||r?1:f.getDate()),p=s||f.getFullYear(),y=0;s&&!r||(y=r>0?r-1:f.getMonth());var k=o||0,g=c||0,v=l||0,b=u||0;return d?new Date(Date.UTC(p,y,m,k,g,v,b+60*d.offset*1e3)):n?new Date(Date.UTC(p,y,m,k,g,v,b)):new Date(p,y,m,k,g,v,b)}catch(t){return new Date("")}}(e,o,i),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&e!=this.format(o)&&(this.$d=new Date("")),r={}}else if(o instanceof Array)for(var f=o.length,m=1;m<=f;m+=1){a[1]=o[m-1];var p=n.apply(this,a);if(p.isValid()){this.$d=p.$d,this.$L=p.$L,this.init();break}m===f&&(this.$d=new Date(""))}else s.call(this,t)}}}()},9542:function(t){t.exports=function(){"use strict";var t="day";return function(e,n,i){var s=function(e){return e.add(4-e.isoWeekday(),t)},r=n.prototype;r.isoWeekYear=function(){return s(this).year()},r.isoWeek=function(e){if(!this.$utils().u(e))return this.add(7*(e-this.isoWeek()),t);var n,r,a,o=s(this),c=(n=this.isoWeekYear(),a=4-(r=(this.$u?i.utc:i)().year(n).startOf("year")).isoWeekday(),r.isoWeekday()>4&&(a+=7),r.add(a,t));return o.diff(c,"week")+1},r.isoWeekday=function(t){return this.$utils().u(t)?this.day()||7:this.day(this.day()%7?t:t-7)};var a=r.startOf;r.startOf=function(t,e){var n=this.$utils(),i=!!n.u(e)||e;return"isoweek"===n.p(t)?i?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(t,e)}}}()},4706:(t,e,n)=>{"use strict";n.d(e,{diagram:()=>X});var i=n(7967),s=n(7484),r=n(9542),a=n(285),o=n(8734),c=n(44),l=n(1188),u=n(3047),d=n(9373),h=(n(7856),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,3],n=[1,5],i=[7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],s=[1,15],r=[1,16],a=[1,17],o=[1,18],c=[1,19],l=[1,20],u=[1,21],d=[1,22],h=[1,23],f=[1,24],m=[1,25],p=[1,26],y=[1,27],k=[1,29],g=[1,31],v=[1,34],b=[5,7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],x={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,tickInterval:16,excludes:17,includes:18,todayMarker:19,title:20,acc_title:21,acc_title_value:22,acc_descr:23,acc_descr_value:24,acc_descr_multiline_value:25,section:26,clickStatement:27,taskTxt:28,taskData:29,openDirective:30,typeDirective:31,closeDirective:32,":":33,argDirective:34,click:35,callbackname:36,callbackargs:37,href:38,clickStatementDebug:39,open_directive:40,type_directive:41,arg_directive:42,close_directive:43,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"tickInterval",17:"excludes",18:"includes",19:"todayMarker",20:"title",21:"acc_title",22:"acc_title_value",23:"acc_descr",24:"acc_descr_value",25:"acc_descr_multiline_value",26:"section",28:"taskTxt",29:"taskData",33:":",35:"click",36:"callbackname",37:"callbackargs",38:"href",40:"open_directive",41:"type_directive",42:"arg_directive",43:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[27,2],[27,3],[27,3],[27,4],[27,3],[27,4],[27,2],[39,2],[39,3],[39,3],[39,4],[39,3],[39,4],[39,2],[30,1],[31,1],[34,1],[32,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 2:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 9:i.setDateFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 10:i.enableInclusiveEndDates(),this.$=r[o].substr(18);break;case 11:i.TopAxis(),this.$=r[o].substr(8);break;case 12:i.setAxisFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 13:i.setTickInterval(r[o].substr(13)),this.$=r[o].substr(13);break;case 14:i.setExcludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 15:i.setIncludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 16:i.setTodayMarker(r[o].substr(12)),this.$=r[o].substr(12);break;case 17:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 18:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 19:case 20:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 21:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 23:i.addTask(r[o-1],r[o]),this.$="task";break;case 27:this.$=r[o-1],i.setClickEvent(r[o-1],r[o],null);break;case 28:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],r[o]);break;case 29:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],null),i.setLink(r[o-2],r[o]);break;case 30:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-2],r[o-1]),i.setLink(r[o-3],r[o]);break;case 31:this.$=r[o-2],i.setClickEvent(r[o-2],r[o],null),i.setLink(r[o-2],r[o-1]);break;case 32:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-1],r[o]),i.setLink(r[o-3],r[o-2]);break;case 33:this.$=r[o-1],i.setLink(r[o-1],r[o]);break;case 34:case 40:this.$=r[o-1]+" "+r[o];break;case 35:case 36:case 38:this.$=r[o-2]+" "+r[o-1]+" "+r[o];break;case 37:case 39:this.$=r[o-3]+" "+r[o-2]+" "+r[o-1]+" "+r[o];break;case 41:i.parseDirective("%%{","open_directive");break;case 42:i.parseDirective(r[o],"type_directive");break;case 43:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 44:i.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,30:4,40:n},{1:[3]},{3:6,4:2,5:e,30:4,40:n},t(i,[2,3],{6:7}),{31:8,41:[1,9]},{41:[2,41]},{1:[2,1]},{4:30,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:s,13:r,14:a,15:o,16:c,17:l,18:u,19:d,20:h,21:f,23:m,25:p,26:y,27:28,28:k,30:4,35:g,40:n},{32:32,33:[1,33],43:v},t([33,43],[2,42]),t(i,[2,8],{1:[2,2]}),t(i,[2,4]),{4:30,10:35,12:s,13:r,14:a,15:o,16:c,17:l,18:u,19:d,20:h,21:f,23:m,25:p,26:y,27:28,28:k,30:4,35:g,40:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),t(i,[2,12]),t(i,[2,13]),t(i,[2,14]),t(i,[2,15]),t(i,[2,16]),t(i,[2,17]),{22:[1,36]},{24:[1,37]},t(i,[2,20]),t(i,[2,21]),t(i,[2,22]),{29:[1,38]},t(i,[2,24]),{36:[1,39],38:[1,40]},{11:[1,41]},{34:42,42:[1,43]},{11:[2,44]},t(i,[2,5]),t(i,[2,18]),t(i,[2,19]),t(i,[2,23]),t(i,[2,27],{37:[1,44],38:[1,45]}),t(i,[2,33],{36:[1,46]}),t(b,[2,25]),{32:47,43:v},{43:[2,43]},t(i,[2,28],{38:[1,48]}),t(i,[2,29]),t(i,[2,31],{37:[1,49]}),{11:[1,50]},t(i,[2,30]),t(i,[2,32]),t(b,[2,26])],defaultActions:{5:[2,41],6:[2,1],34:[2,44],43:[2,43]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,u=1,d=r.slice.call(arguments,1),h=Object.create(this.lexer),f={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(f.yy[m]=this.yy[m]);h.setInput(t,f.yy),f.yy.lexer=h,f.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;r.push(p);var y=h.options&&h.options.ranges;"function"==typeof f.yy.parseError?this.parseError=f.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var k,g,v,b,x,T,_,$,w,D={};;){if(g=n[n.length-1],this.defaultActions[g]?v=this.defaultActions[g]:(null==k&&(w=void 0,"number"!=typeof(w=i.pop()||h.lex()||u)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),k=w),v=a[g]&&a[g][k]),void 0===v||!v.length||!v[0]){var S="";for(x in $=[],a[g])this.terminals_[x]&&x>2&&$.push("'"+this.terminals_[x]+"'");S=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+$.join(", ")+", got '"+(this.terminals_[k]||k)+"'":"Parse error on line "+(c+1)+": Unexpected "+(k==u?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(S,{text:h.match,token:this.terminals_[k]||k,line:h.yylineno,loc:p,expected:$})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+k);switch(v[0]){case 1:n.push(k),s.push(h.yytext),r.push(h.yylloc),n.push(v[1]),k=null,l=h.yyleng,o=h.yytext,c=h.yylineno,p=h.yylloc;break;case 2:if(T=this.productions_[v[1]][1],D.$=s[s.length-T],D._$={first_line:r[r.length-(T||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(T||1)].first_column,last_column:r[r.length-1].last_column},y&&(D._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply(D,[o,l,c,f.yy,v[1],s,r].concat(d))))return b;T&&(n=n.slice(0,-1*T*2),s=s.slice(0,-1*T),r=r.slice(0,-1*T)),n.push(this.productions_[v[1]][0]),s.push(D.$),r.push(D._$),_=a[n[n.length-2]][n[n.length-1]],n.push(_);break;case 3:return!0}}return!0}},T={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),40;case 1:return this.begin("type_directive"),41;case 2:return this.popState(),this.begin("arg_directive"),33;case 3:return this.popState(),this.popState(),43;case 4:return 42;case 5:return this.begin("acc_title"),21;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),23;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 20:case 23:case 26:case 29:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:case 13:case 14:case 16:case 17:case 18:break;case 15:return 11;case 19:this.begin("href");break;case 21:return 38;case 22:this.begin("callbackname");break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 36;case 27:return 37;case 28:this.begin("click");break;case 30:return 35;case 31:return 5;case 32:return 12;case 33:return 13;case 34:return 14;case 35:return 15;case 36:return 16;case 37:return 18;case 38:return 17;case 39:return 19;case 40:return"date";case 41:return 20;case 42:return"accDescription";case 43:return 26;case 44:return 28;case 45:return 29;case 46:return 33;case 47:return 7;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function _(){this.yy={}}return x.lexer=T,_.prototype=x,x.Parser=_,new _}());h.parser=h;const f=h;s.extend(r),s.extend(a),s.extend(o);let m,p="",y="",k="",g=[],v=[],b={},x=[],T=[],_="",$="";const w=["active","done","crit","milestone"];let D=[],S=!1,C=!1,E=0;const M=function(t,e,n,i){return!i.includes(t.format(e.trim()))&&(!!(t.isoWeekday()>=6&&n.includes("weekends"))||(!!n.includes(t.format("dddd").toLowerCase())||n.includes(t.format(e.trim()))))},A=function(t,e,n,i){if(!n.length||t.manualEndTime)return;let r,a;r=t.startTime instanceof Date?s(t.startTime):s(t.startTime,e,!0),r=r.add(1,"d"),a=t.endTime instanceof Date?s(t.endTime):s(t.endTime,e,!0);const[o,c]=Y(r,a,e,n,i);t.endTime=o.toDate(),t.renderEndTime=c},Y=function(t,e,n,i,s){let r=!1,a=null;for(;t<=e;)r||(a=e.toDate()),r=M(t,n,i,s),r&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,a]},L=function(t,e,n){n=n.trim();const i=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==i){let t=null;if(i[1].split(" ").forEach((function(e){let n=H(e);void 0!==n&&(t?n.endTime>t.endTime&&(t=n):t=n)})),t)return t.endTime;{const t=new Date;return t.setHours(0,0,0,0),t}}let r=s(n,e.trim(),!0);if(r.isValid())return r.toDate();{c.l.debug("Invalid date:"+n),c.l.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime()))throw new Error("Invalid date:"+n);return t}},I=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},F=function(t,e,n,i=!1){n=n.trim();let r=s(n,e.trim(),!0);if(r.isValid())return i&&(r=r.add(1,"d")),r.toDate();let a=s(t);const[o,c]=I(n);if(!Number.isNaN(o)){const t=a.add(o,c);t.isValid()&&(a=t)}return a.toDate()};let O=0;const z=function(t){return void 0===t?(O+=1,"task"+O):t};let B,P,W=[];const N={},H=function(t){const e=N[t];return W[e]},G=function(){const t=function(t){const e=W[t];let n="";switch(W[t].raw.startTime.type){case"prevTaskEnd":{const t=H(e.prevTaskId);e.startTime=t.endTime;break}case"getStartDate":n=L(0,p,W[t].raw.startTime.startData),n&&(W[t].startTime=n)}return W[t].startTime&&(W[t].endTime=F(W[t].startTime,p,W[t].raw.endTime.data,S),W[t].endTime&&(W[t].processed=!0,W[t].manualEndTime=s(W[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),A(W[t],p,v,g))),W[t].processed};let e=!0;for(const[n,i]of W.entries())t(n),e=e&&i.processed;return e},j=function(t,e){t.split(",").forEach((function(t){let n=H(t);void 0!==n&&n.classes.push(e)}))},Z=function(t,e){D.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){e()}))}),(function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",(function(){e()}))}))},V={parseDirective:function(t,e,n){u.m.parseDirective(this,t,e,n)},getConfig:()=>(0,c.g)().gantt,clear:function(){x=[],T=[],_="",D=[],O=0,B=void 0,P=void 0,W=[],p="",y="",$="",m=void 0,k="",g=[],v=[],S=!1,C=!1,E=0,b={},(0,c.y)()},setDateFormat:function(t){p=t},getDateFormat:function(){return p},enableInclusiveEndDates:function(){S=!0},endDatesAreInclusive:function(){return S},enableTopAxis:function(){C=!0},topAxisEnabled:function(){return C},setAxisFormat:function(t){y=t},getAxisFormat:function(){return y},setTickInterval:function(t){m=t},getTickInterval:function(){return m},setTodayMarker:function(t){k=t},getTodayMarker:function(){return k},setAccTitle:c.o,getAccTitle:c.p,setDiagramTitle:c.w,getDiagramTitle:c.x,setDisplayMode:function(t){$=t},getDisplayMode:function(){return $},setAccDescription:c.v,getAccDescription:c.q,addSection:function(t){_=t,x.push(t)},getSections:function(){return x},getTasks:function(){let t=G();let e=0;for(;!t&&e<10;)t=G(),e++;return T=W,T},addTask:function(t,e){const n={section:_,type:_,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),s={};R(i,s,w);for(let r=0;r<i.length;r++)i[r]=i[r].trim();switch(i.length){case 1:s.id=z(),s.startTime={type:"prevTaskEnd",id:t},s.endTime={data:i[0]};break;case 2:s.id=z(),s.startTime={type:"getStartDate",startData:i[0]},s.endTime={data:i[1]};break;case 3:s.id=z(i[0]),s.startTime={type:"getStartDate",startData:i[1]},s.endTime={data:i[2]}}return s}(P,e);n.raw.startTime=i.startTime,n.raw.endTime=i.endTime,n.id=i.id,n.prevTaskId=P,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,n.order=E,E++;const s=W.push(n);P=n.id,N[n.id]=s-1},findTaskById:H,addTaskOrg:function(t,e){const n={section:_,type:_,description:t,task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),r={};R(i,r,w);for(let s=0;s<i.length;s++)i[s]=i[s].trim();let a="";switch(i.length){case 1:r.id=z(),r.startTime=t.endTime,a=i[0];break;case 2:r.id=z(),r.startTime=L(0,p,i[0]),a=i[1];break;case 3:r.id=z(i[0]),r.startTime=L(0,p,i[1]),a=i[2]}return a&&(r.endTime=F(r.startTime,p,a,S),r.manualEndTime=s(a,"YYYY-MM-DD",!0).isValid(),A(r,p,v,g)),r}(B,e);n.startTime=i.startTime,n.endTime=i.endTime,n.id=i.id,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,B=n,T.push(n)},setIncludes:function(t){g=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return g},setExcludes:function(t){v=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return v},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"!==(0,c.g)().securityLevel)return;if(void 0===e)return;let i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<i.length;t++){let e=i[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),i[t]=e}}0===i.length&&i.push(t),void 0!==H(t)&&Z(t,(()=>{l.u.runFunc(e,...i)}))}(t,e,n)})),j(t,"clickable")},setLink:function(t,e){let n=e;"loose"!==(0,c.g)().securityLevel&&(n=(0,i.N)(e)),t.split(",").forEach((function(t){void 0!==H(t)&&(Z(t,(()=>{window.open(n,"_self")})),b[t]=n)})),j(t,"clickable")},getLinks:function(){return b},bindFunctions:function(t){D.forEach((function(e){e(t)}))},parseDuration:I,isInvalidDate:M};function R(t,e,n){let i=!0;for(;i;)i=!1,n.forEach((function(n){const s=new RegExp("^\\s*"+n+"\\s*$");t[0].match(s)&&(e[n]=!0,t.shift(1),i=!0)}))}const q=(t,e)=>{let n=[...t].map((()=>-1/0)),i=[...t].sort(((t,e)=>t.startTime-e.startTime||t.order-e.order)),s=0;for(const r of i)for(let t=0;t<n.length;t++)if(r.startTime>=n[t]){n[t]=r.endTime,r.order=t+e,t>s&&(s=t);break}return s};let U;const X={parser:f,db:V,renderer:{setConf:function(){c.l.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,i){const r=(0,c.g)().gantt,a=(0,c.g)().securityLevel;let o;"sandbox"===a&&(o=(0,d.Ys)("#i"+e));const u="sandbox"===a?(0,d.Ys)(o.nodes()[0].contentDocument.body):(0,d.Ys)("body"),h="sandbox"===a?o.nodes()[0].contentDocument:document,f=h.getElementById(e);U=f.parentElement.offsetWidth,void 0===U&&(U=1200),void 0!==r.useWidth&&(U=r.useWidth);const m=i.db.getTasks();let p=[];for(const s of m)p.push(s.type);p=function(t){const e={},n=[];for(let i=0,s=t.length;i<s;++i)Object.prototype.hasOwnProperty.call(e,t[i])||(e[t[i]]=!0,n.push(t[i]));return n}(p);const y={};let k=2*r.topPadding;if("compact"===i.db.getDisplayMode()||"compact"===r.displayMode){const t={};for(const n of m)void 0===t[n.section]?t[n.section]=[n]:t[n.section].push(n);let e=0;for(const n of Object.keys(t)){const i=q(t[n],e)+1;e+=i,k+=i*(r.barHeight+r.barGap),y[n]=i}}else{k+=m.length*(r.barHeight+r.barGap);for(const t of p)y[t]=m.filter((e=>e.type===t)).length}f.setAttribute("viewBox","0 0 "+U+" "+k);const g=u.select(`[id="${e}"]`),v=(0,d.Xf)().domain([(0,d.VV$)(m,(function(t){return t.startTime})),(0,d.Fp7)(m,(function(t){return t.endTime}))]).rangeRound([0,U-r.leftPadding-r.rightPadding]);m.sort((function(t,e){const n=t.startTime,i=e.startTime;let s=0;return n>i?s=1:n<i&&(s=-1),s})),function(t,n,a){const o=r.barHeight,l=o+r.barGap,u=r.topPadding,f=r.leftPadding;(0,d.BYU)().domain([0,p.length]).range(["#00B9FA","#F95002"]).interpolate(d.JHv);(function(t,e,n,a,o,c,l,u){const d=c.reduce(((t,{startTime:e})=>t?Math.min(t,e):e),0),h=c.reduce(((t,{endTime:e})=>t?Math.max(t,e):e),0),f=i.db.getDateFormat();if(!d||!h)return;const m=[];let p=null,y=s(d);for(;y.valueOf()<=h;)i.db.isInvalidDate(y,f,l,u)?p?p.end=y:p={start:y,end:y}:p&&(m.push(p),p=null),y=y.add(1,"d");g.append("g").selectAll("rect").data(m).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return v(t.start)+n})).attr("y",r.gridLineStartPadding).attr("width",(function(t){const e=t.end.add(1,"day");return v(e)-v(t.start)})).attr("height",o-e-r.gridLineStartPadding).attr("transform-origin",(function(e,i){return(v(e.start)+n+.5*(v(e.end)-v(e.start))).toString()+"px "+(i*t+.5*o).toString()+"px"})).attr("class","exclude-range")})(l,u,f,0,a,t,i.db.getExcludes(),i.db.getIncludes()),function(t,e,n,s){let a=(0,d.LLu)(v).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,d.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));const o=/^([1-9]\d*)(minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||r.tickInterval);if(null!==o){const t=o[1];switch(o[2]){case"minute":a.ticks(d.Z_i.every(t));break;case"hour":a.ticks(d.WQD.every(t));break;case"day":a.ticks(d.rr1.every(t));break;case"week":a.ticks(d.NGh.every(t));break;case"month":a.ticks(d.F0B.every(t))}}if(g.append("g").attr("class","grid").attr("transform","translate("+t+", "+(s-50)+")").call(a).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||r.topAxis){let n=(0,d.F5q)(v).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,d.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));if(null!==o){const t=o[1];switch(o[2]){case"minute":n.ticks(d.Z_i.every(t));break;case"hour":n.ticks(d.WQD.every(t));break;case"day":n.ticks(d.rr1.every(t));break;case"week":n.ticks(d.NGh.every(t));break;case"month":n.ticks(d.F0B.every(t))}}g.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(f,u,0,a),function(t,n,s,a,o,l,u){const h=[...new Set(t.map((t=>t.order)))].map((e=>t.find((t=>t.order===e))));g.append("g").selectAll("rect").data(h).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+s-2})).attr("width",(function(){return u-r.rightPadding/2})).attr("height",n).attr("class",(function(t){for(const[e,n]of p.entries())if(t.type===n)return"section section"+e%r.numberSectionStyles;return"section section0"}));const f=g.append("g").selectAll("rect").data(t).enter(),m=i.db.getLinks();f.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?v(t.startTime)+a+.5*(v(t.endTime)-v(t.startTime))-.5*o:v(t.startTime)+a})).attr("y",(function(t,e){return t.order*n+s})).attr("width",(function(t){return t.milestone?o:v(t.renderEndTime||t.endTime)-v(t.startTime)})).attr("height",o).attr("transform-origin",(function(t,e){return e=t.order,(v(t.startTime)+a+.5*(v(t.endTime)-v(t.startTime))).toString()+"px "+(e*n+s+.5*o).toString()+"px"})).attr("class",(function(t){const e="task";let n="";t.classes.length>0&&(n=t.classes.join(" "));let i=0;for(const[a,o]of p.entries())t.type===o&&(i=a%r.numberSectionStyles);let s="";return t.active?t.crit?s+=" activeCrit":s=" active":t.done?s=t.crit?" doneCrit":" done":t.crit&&(s+=" crit"),0===s.length&&(s=" task"),t.milestone&&(s=" milestone "+s),s+=i,s+=" "+n,e+s})),f.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",r.fontSize).attr("x",(function(t){let e=v(t.startTime),n=v(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(v(t.endTime)-v(t.startTime))-.5*o),t.milestone&&(n=e+o);const i=this.getBBox().width;return i>n-e?n+i+1.5*r.leftPadding>u?e+a-5:n+a+5:(n-e)/2+e+a})).attr("y",(function(t,e){return t.order*n+r.barHeight/2+(r.fontSize/2-2)+s})).attr("text-height",o).attr("class",(function(t){const e=v(t.startTime);let n=v(t.endTime);t.milestone&&(n=e+o);const i=this.getBBox().width;let s="";t.classes.length>0&&(s=t.classes.join(" "));let a=0;for(const[o,l]of p.entries())t.type===l&&(a=o%r.numberSectionStyles);let c="";return t.active&&(c=t.crit?"activeCritText"+a:"activeText"+a),t.done?c=t.crit?c+" doneCritText"+a:c+" doneText"+a:t.crit&&(c=c+" critText"+a),t.milestone&&(c+=" milestoneText"),i>n-e?n+i+1.5*r.leftPadding>u?s+" taskTextOutsideLeft taskTextOutside"+a+" "+c:s+" taskTextOutsideRight taskTextOutside"+a+" "+c+" width-"+i:s+" taskText taskText"+a+" "+c+" width-"+i}));if("sandbox"===(0,c.g)().securityLevel){let t;t=(0,d.Ys)("#i"+e);const n=t.nodes()[0].contentDocument;f.filter((function(t){return void 0!==m[t.id]})).each((function(t){var e=n.querySelector("#"+t.id),i=n.querySelector("#"+t.id+"-text");const s=e.parentNode;var r=n.createElement("a");r.setAttribute("xlink:href",m[t.id]),r.setAttribute("target","_top"),s.appendChild(r),r.appendChild(e),r.appendChild(i)}))}}(t,l,u,f,o,0,n),function(t,e){let n=0;const i=Object.keys(y).map((t=>[t,y[t]]));g.append("g").selectAll("text").data(i).enter().append((function(t){const e=t[0].split(c.e.lineBreakRegex),n=-(e.length-1)/2,i=h.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("dy",n+"em");for(const[s,r]of e.entries()){const t=h.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),s>0&&t.setAttribute("dy","1em"),t.textContent=r,i.appendChild(t)}return i})).attr("x",10).attr("y",(function(s,r){if(!(r>0))return s[1]*t/2+e;for(let a=0;a<r;a++)return n+=i[r-1][1],s[1]*t/2+n*t+e})).attr("font-size",r.sectionFontSize).attr("class",(function(t){for(const[e,n]of p.entries())if(t[0]===n)return"sectionTitle sectionTitle"+e%r.numberSectionStyles;return"sectionTitle"}))}(l,u),function(t,e,n,s){const a=i.db.getTodayMarker();if("off"===a)return;const o=g.append("g").attr("class","today"),c=new Date,l=o.append("line");l.attr("x1",v(c)+t).attr("x2",v(c)+t).attr("y1",r.titleTopMargin).attr("y2",s-r.titleTopMargin).attr("class","today"),""!==a&&l.attr("style",a.replace(/,/g,";"))}(f,0,0,a)}(m,U,k),(0,l.k)(g,k,U,r.useMaxWidth),g.append("text").text(i.db.getDiagramTitle()).attr("x",U/2).attr("y",r.titleTopMargin).attr("class","titleText")}},styles:t=>`\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ${t.ganttFontSize};\n // }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n // font-size: ${t.ganttFontSize};\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor} ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/478.049cc5ce.js b/assets/js/478.049cc5ce.js new file mode 100644 index 0000000000..e14d111c75 --- /dev/null +++ b/assets/js/478.049cc5ce.js @@ -0,0 +1,17300 @@ +"use strict"; +exports.id = 478; +exports.ids = [478]; +exports.modules = { + +/***/ 3502: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (/* binding */ SimpleMarkdown) +/* harmony export */ }); +/* eslint-disable prefer-spread, no-regex-spaces, no-unused-vars, guard-for-in, no-console, no-var */ + +/** + * Simple-Markdown + * =============== + * + * Simple-Markdown's primary goal is to be easy to adapt. It aims + * to be compliant with John Gruber's [Markdown Syntax page][1], + * but compatiblity with other markdown implementations' edge-cases + * will be sacrificed where it conflicts with simplicity or + * extensibility. + * + * If your goal is to simply embed a standard markdown implementation + * in your website, simple-markdown is probably not the best library + * for you (although it should work). But if you have struggled to + * customize an existing library to meet your needs, simple-markdown + * might be able to help. + * + * Many of the regexes and original logic has been adapted from + * the wonderful [marked.js](https://github.com/chjj/marked) + */ +// Flow Type Definitions: +// We want to clarify our defaultRules types a little bit more so clients can +// reuse defaultRules built-ins. So we make some stronger guarantess when +// we can: +// End Flow Definitions +var CR_NEWLINE_R = /\r\n?/g; +var TAB_R = /\t/g; +var FORMFEED_R = /\f/g; +/** + * Turn various whitespace into easy-to-process whitespace + */ + +var preprocess = function preprocess(source) { + return source.replace(CR_NEWLINE_R, "\n").replace(FORMFEED_R, "").replace(TAB_R, " "); +}; + +var populateInitialState = function populateInitialState(givenState, defaultState) { + var state = givenState || {}; + + if (defaultState != null) { + for (var prop in defaultState) { + // $FlowFixMe + if (Object.prototype.hasOwnProperty.call(defaultState, prop)) { + state[prop] = defaultState[prop]; + } + } + } + + return state; +}; +/** + * Creates a parser for a given set of rules, with the precedence + * specified as a list of rules. + * + * @param {SimpleMarkdown.ParserRules} rules + * an object containing + * rule type -> {match, order, parse} objects + * (lower order is higher precedence) + * @param {SimpleMarkdown.OptionalState} [defaultState] + * + * @returns {SimpleMarkdown.Parser} + * The resulting parse function, with the following parameters: + * @source: the input source string to be parsed + * @state: an optional object to be threaded through parse + * calls. Allows clients to add stateful operations to + * parsing, such as keeping track of how many levels deep + * some nesting is. For an example use-case, see passage-ref + * parsing in src/widgets/passage/passage-markdown.jsx + */ + + +var parserFor = function parserFor(rules, defaultState) { + // Sorts rules in order of increasing order, then + // ascending rule name in case of ties. + var ruleList = Object.keys(rules).filter(function (type) { + var rule = rules[type]; + + if (rule == null || rule.match == null) { + return false; + } + + var order = rule.order; + + if ((typeof order !== "number" || !isFinite(order)) && typeof console !== "undefined") { + console.warn("simple-markdown: Invalid order for rule `" + type + "`: " + String(order)); + } + + return true; + }); + ruleList.sort(function (typeA, typeB) { + var ruleA = rules[typeA]; + var ruleB = rules[typeB]; + var orderA = ruleA.order; + var orderB = ruleB.order; // First sort based on increasing order + + if (orderA !== orderB) { + return orderA - orderB; + } + + var secondaryOrderA = ruleA.quality ? 0 : 1; + var secondaryOrderB = ruleB.quality ? 0 : 1; + + if (secondaryOrderA !== secondaryOrderB) { + return secondaryOrderA - secondaryOrderB; // Then based on increasing unicode lexicographic ordering + } else if (typeA < typeB) { + return -1; + } else if (typeA > typeB) { + return 1; + } else { + // Rules should never have the same name, + // but this is provided for completeness. + return 0; + } + }); + var latestState; + + var nestedParse = function nestedParse(source, state) { + var result = []; + state = state || latestState; + latestState = state; + + while (source) { + // store the best match, it's rule, and quality: + var ruleType = null; + var rule = null; + var capture = null; + var quality = NaN; // loop control variables: + + var i = 0; + var currRuleType = ruleList[0]; // $FlowFixMe + + var currRule = rules[currRuleType]; + + do { + var currOrder = currRule.order; + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var currCapture = currRule.match(source, state, prevCaptureStr); + + if (currCapture) { + var currQuality = currRule.quality ? currRule.quality(currCapture, state, prevCaptureStr) : 0; // This should always be true the first time because + // the initial quality is NaN (that's why there's the + // condition negation). + + if (!(currQuality <= quality)) { + ruleType = currRuleType; + rule = currRule; + capture = currCapture; + quality = currQuality; + } + } // Move on to the next item. + // Note that this makes `currRule` be the next item + + + i++; + currRuleType = ruleList[i]; // $FlowFixMe + + currRule = rules[currRuleType]; + } while ( // keep looping while we're still within the ruleList + currRule && ( // if we don't have a match yet, continue + !capture || // or if we have a match, but the next rule is + // at the same order, and has a quality measurement + // functions, then this rule must have a quality + // measurement function (since they are sorted before + // those without), and we need to check if there is + // a better quality match + currRule.order === currOrder && currRule.quality)); // TODO(aria): Write tests for these + + + if (rule == null || capture == null) { + throw new Error("Could not find a matching rule for the below " + "content. The rule with highest `order` should " + "always match content provided to it. Check " + "the definition of `match` for '" + ruleList[ruleList.length - 1] + "'. It seems to not match the following source:\n" + source); + } + + if (capture.index) { + // If present and non-zero, i.e. a non-^ regexp result: + throw new Error("`match` must return a capture starting at index 0 " + "(the current parse index). Did you forget a ^ at the " + "start of the RegExp?"); + } + + var parsed = rule.parse(capture, nestedParse, state); // We maintain the same object here so that rules can + // store references to the objects they return and + // modify them later. (oops sorry! but this adds a lot + // of power--see reflinks.) + + if (Array.isArray(parsed)) { + // $FlowFixMe + Array.prototype.push.apply(result, parsed); + } else { + if (parsed == null || typeof parsed !== "object") { + throw new Error("parse() function returned invalid parse result: '".concat(parsed, "'")); + } // We also let rules override the default type of + // their parsed node if they would like to, so that + // there can be a single output function for all links, + // even if there are several rules to parse them. + + + if (parsed.type == null) { + // $FlowFixMe + parsed.type = ruleType; + } + + result.push(parsed); + } + + state.prevCapture = capture; + source = source.substring(state.prevCapture[0].length); + } // $FlowFixMe + + + return result; + }; + + var outerParse = function outerParse(source, state) { + latestState = populateInitialState(state, defaultState); + + if (!latestState.inline && !latestState.disableAutoBlockNewlines) { + source = source + "\n\n"; + } // We store the previous capture so that match functions can + // use some limited amount of lookbehind. Lists use this to + // ensure they don't match arbitrary '- ' or '* ' in inline + // text (see the list rule for more information). This stores + // the full regex capture object, if there is one. + + + latestState.prevCapture = null; + return nestedParse(preprocess(source), latestState); + }; // $FlowFixMe + + + return outerParse; +}; // Creates a match function for an inline scoped element from a regex + + +var inlineRegex = function inlineRegex(regex) { + var match = function match(source, state, prevCapture) { + if (state.inline) { + // $FlowFixMe + return regex.exec(source); + } else { + return null; + } + }; + + match.regex = regex; + return match; +}; // Creates a match function for a block scoped element from a regex + + +var blockRegex = function blockRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + if (state.inline) { + return null; + } else { + return regex.exec(source); + } + }; + + match.regex = regex; + return match; +}; // Creates a match function from a regex, ignoring block/inline scope + + +var anyScopeRegex = function anyScopeRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + return regex.exec(source); + }; + + match.regex = regex; + return match; +}; + +var TYPE_SYMBOL = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; + +var reactElement = function reactElement(type, key, props) { + var element = { + $$typeof: TYPE_SYMBOL, + type: type, + key: key == null ? undefined : key, + ref: null, + props: props, + _owner: null + }; + return element; +}; +/** Returns a closed HTML tag. + * @param {string} tagName - Name of HTML tag (eg. "em" or "a") + * @param {string} content - Inner content of tag + * @param {{ [attr: string]: SimpleMarkdown.Attr }} [attributes] - Optional extra attributes of tag as an object of key-value pairs + * eg. { "href": "http://google.com" }. Falsey attributes are filtered out. + * @param {boolean} [isClosed] - boolean that controls whether tag is closed or not (eg. img tags). + * defaults to true + */ + + +var htmlTag = function htmlTag(tagName, content, attributes, isClosed) { + attributes = attributes || {}; + isClosed = typeof isClosed !== "undefined" ? isClosed : true; + var attributeString = ""; + + for (var attr in attributes) { + var attribute = attributes[attr]; // Removes falsey attributes + + if ( // $FlowFixMe + Object.prototype.hasOwnProperty.call(attributes, attr) && attribute) { + attributeString += " " + sanitizeText(attr) + '="' + sanitizeText(attribute) + '"'; + } + } + + var unclosedTag = "<" + tagName + attributeString + ">"; + + if (isClosed) { + return unclosedTag + content + "</" + tagName + ">"; + } else { + return unclosedTag; + } +}; + +var EMPTY_PROPS = {}; +/** + * @param {string | null | undefined} url - url to sanitize + * @returns {string | null} - url if safe, or null if a safe url could not be made + */ + +var sanitizeUrl = function sanitizeUrl(url) { + if (url == null) { + return null; + } + + try { + var prot = new URL(url, "https://localhost").protocol; + + if (prot.indexOf("javascript:") === 0 || prot.indexOf("vbscript:") === 0 || prot.indexOf("data:") === 0) { + return null; + } + } catch (e) { + // invalid URLs should throw a TypeError + // see for instance: `new URL("");` + return null; + } + + return url; +}; + +var SANITIZE_TEXT_R = /[<>&"']/g; +var SANITIZE_TEXT_CODES = { + "<": "<", + ">": ">", + "&": "&", + '"': """, + "'": "'", + "/": "/", + "`": "`" +}; + +var sanitizeText = function sanitizeText(text) { + return String(text).replace(SANITIZE_TEXT_R, function (chr) { + return SANITIZE_TEXT_CODES[chr]; + }); +}; + +var UNESCAPE_URL_R = /\\([^0-9A-Za-z\s])/g; + +var unescapeUrl = function unescapeUrl(rawUrlString) { + return rawUrlString.replace(UNESCAPE_URL_R, "$1"); +}; +/** + * Parse some content with the parser `parse`, with state.inline + * set to true. Useful for block elements; not generally necessary + * to be used by inline elements (where state.inline is already true. + */ + + +var parseInline = function parseInline(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = true; + var result = parse(content, state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseBlock = function parseBlock(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = false; + var result = parse(content + "\n\n", state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseCaptureInline = function parseCaptureInline(capture, parse, state) { + return { + content: parseInline(parse, capture[1], state) + }; +}; + +var ignoreCapture = function ignoreCapture() { + return {}; +}; // recognize a `*` `-`, `+`, `1.`, `2.`... list bullet + + +var LIST_BULLET = "(?:[*+-]|\\d+\\.)"; // recognize the start of a list item: +// leading space plus a bullet plus a space (` * `) + +var LIST_ITEM_PREFIX = "( *)(" + LIST_BULLET + ") +"; +var LIST_ITEM_PREFIX_R = new RegExp("^" + LIST_ITEM_PREFIX); // recognize an individual list item: +// * hi +// this is part of the same item +// +// as is this, which is a new paragraph in the same item +// +// * but this is not part of the same item + +var LIST_ITEM_R = new RegExp(LIST_ITEM_PREFIX + "[^\\n]*(?:\\n" + "(?!\\1" + LIST_BULLET + " )[^\\n]*)*(\n|$)", "gm"); +var BLOCK_END_R = /\n{2,}$/; +var INLINE_CODE_ESCAPE_BACKTICKS_R = /^ (?= *`)|(` *) $/g; // recognize the end of a paragraph block inside a list item: +// two or more newlines at end end of the item + +var LIST_BLOCK_END_R = BLOCK_END_R; +var LIST_ITEM_END_R = / *\n+$/; // check whether a list item has paragraphs: if it does, +// we leave the newlines at the end + +var LIST_R = new RegExp("^( *)(" + LIST_BULLET + ") " + "[\\s\\S]+?(?:\n{2,}(?! )" + "(?!\\1" + LIST_BULLET + " )\\n*" + // the \\s*$ here is so that we can parse the inside of nested +// lists, where our content might end before we receive two `\n`s +"|\\s*\n*$)"); +var LIST_LOOKBEHIND_R = /(?:^|\n)( *)$/; + +var TABLES = function () { + var TABLE_ROW_SEPARATOR_TRIM = /^ *\| *| *\| *$/g; + var TABLE_CELL_END_TRIM = / *$/; + var TABLE_RIGHT_ALIGN = /^ *-+: *$/; + var TABLE_CENTER_ALIGN = /^ *:-+: *$/; + var TABLE_LEFT_ALIGN = /^ *:-+ *$/; // TODO: This needs a real type + + var parseTableAlignCapture = function parseTableAlignCapture(alignCapture) { + if (TABLE_RIGHT_ALIGN.test(alignCapture)) { + return "right"; + } else if (TABLE_CENTER_ALIGN.test(alignCapture)) { + return "center"; + } else if (TABLE_LEFT_ALIGN.test(alignCapture)) { + return "left"; + } else { + return null; + } + }; + + var parseTableAlign = function parseTableAlign(source, parse, state, trimEndSeparators) { + if (trimEndSeparators) { + source = source.replace(TABLE_ROW_SEPARATOR_TRIM, ""); + } + + var alignText = source.trim().split("|"); + return alignText.map(parseTableAlignCapture); + }; + + var parseTableRow = function parseTableRow(source, parse, state, trimEndSeparators) { + var prevInTable = state.inTable; + state.inTable = true; + var tableRow = parse(source.trim(), state); + state.inTable = prevInTable; + var cells = [[]]; + tableRow.forEach(function (node, i) { + if (node.type === "tableSeparator") { + // Filter out empty table separators at the start/end: + if (!trimEndSeparators || i !== 0 && i !== tableRow.length - 1) { + // Split the current row: + cells.push([]); + } + } else { + if (node.type === "text" && (tableRow[i + 1] == null || tableRow[i + 1].type === "tableSeparator")) { + node.content = node.content.replace(TABLE_CELL_END_TRIM, ""); + } + + cells[cells.length - 1].push(node); + } + }); + return cells; + }; + /** + * @param {string} source + * @param {SimpleMarkdown.Parser} parse + * @param {SimpleMarkdown.State} state + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.ASTNode[][]} + */ + + + var parseTableCells = function parseTableCells(source, parse, state, trimEndSeparators) { + var rowsText = source.trim().split("\n"); + return rowsText.map(function (rowText) { + // $FlowFixMe + return parseTableRow(rowText, parse, state, trimEndSeparators); + }); + }; + /** + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.SingleNodeParseFunction} + */ + + + var parseTable = function parseTable(trimEndSeparators) { + return function (capture, parse, state) { + state.inline = true; + var header = parseTableRow(capture[1], parse, state, trimEndSeparators); + var align = parseTableAlign(capture[2], parse, state, trimEndSeparators); + var cells = parseTableCells(capture[3], parse, state, trimEndSeparators); + state.inline = false; + return { + type: "table", + header: header, + align: align, + cells: cells + }; + }; + }; + + return { + parseTable: parseTable(true), + parseNpTable: parseTable(false), + TABLE_REGEX: /^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/, + NPTABLE_REGEX: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/ + }; +}(); + +var LINK_INSIDE = "(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*"; +var LINK_HREF_AND_TITLE = "\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*"; +var AUTOLINK_MAILTO_CHECK_R = /mailto:/i; + +var parseRef = function parseRef(capture, state, refNode) { + var ref = (capture[2] || capture[1]).replace(/\s+/g, " ").toLowerCase(); // We store information about previously seen defs on + // state._defs (_ to deconflict with client-defined + // state). If the def for this reflink/refimage has + // already been seen, we can use its target/source + // and title here: + + if (state._defs && state._defs[ref]) { + var def = state._defs[ref]; // `refNode` can be a link or an image. Both use + // target and title properties. + + refNode.target = def.target; + refNode.title = def.title; + } // In case we haven't seen our def yet (or if someone + // overwrites that def later on), we add this node + // to the list of ref nodes for that def. Then, when + // we find the def, we can modify this link/image AST + // node :). + // I'm sorry. + + + state._refs = state._refs || {}; + state._refs[ref] = state._refs[ref] || []; + + state._refs[ref].push(refNode); + + return refNode; +}; + +var currOrder = 0; +var defaultRules = { + Array: { + react: function react(arr, output, state) { + var oldKey = state.key; + var result = []; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0, key = 0; i < arr.length; i++, key++) { + // `key` is our numerical `state.key`, which we increment for + // every output node, but don't change for joined text nodes. + // (i, however, must change for joined text nodes) + state.key = "" + i; + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result.push(output(node, state)); + } + + state.key = oldKey; + return result; + }, + html: function html(arr, output, state) { + var result = ""; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0; i < arr.length; i++) { + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result += output(node, state); + } + + return result; + } + }, + heading: { + order: currOrder++, + match: blockRegex(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/), + parse: function (_parse) { + function parse(_x, _x2, _x3) { + return _parse.apply(this, arguments); + } + + parse.toString = function () { + return _parse.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + level: capture[1].length, + content: parseInline(parse, capture[2].trim(), state) + }; + }), + react: function react(node, output, state) { + return reactElement("h" + node.level, state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("h" + node.level, output(node.content, state)); + } + }, + nptable: { + order: currOrder++, + match: blockRegex(TABLES.NPTABLE_REGEX), + parse: TABLES.parseNpTable, + react: null, + html: null + }, + lheading: { + order: currOrder++, + match: blockRegex(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/), + parse: function (_parse2) { + function parse(_x4, _x5, _x6) { + return _parse2.apply(this, arguments); + } + + parse.toString = function () { + return _parse2.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "heading", + level: capture[2] === "=" ? 1 : 2, + content: parseInline(parse, capture[1], state) + }; + }), + react: null, + html: null + }, + hr: { + order: currOrder++, + match: blockRegex(/^( *[-*_]){3,} *(?:\n *)+\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("hr", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<hr>"; + } + }, + codeBlock: { + order: currOrder++, + match: blockRegex(/^(?: [^\n]+\n*)+(?:\n *)+\n/), + parse: function (_parse3) { + function parse(_x7, _x8, _x9) { + return _parse3.apply(this, arguments); + } + + parse.toString = function () { + return _parse3.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ /gm, "").replace(/\n+$/, ""); + return { + lang: undefined, + content: content + }; + }), + react: function react(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + return reactElement("pre", state.key, { + children: reactElement("code", null, { + className: className, + children: node.content + }) + }); + }, + html: function html(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + var codeBlock = htmlTag("code", sanitizeText(node.content), { + class: className + }); + return htmlTag("pre", codeBlock); + } + }, + fence: { + order: currOrder++, + match: blockRegex(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/), + parse: function (_parse4) { + function parse(_x10, _x11, _x12) { + return _parse4.apply(this, arguments); + } + + parse.toString = function () { + return _parse4.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "codeBlock", + lang: capture[2] || undefined, + content: capture[3] + }; + }), + react: null, + html: null + }, + blockQuote: { + order: currOrder++, + match: blockRegex(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/), + parse: function (_parse5) { + function parse(_x13, _x14, _x15) { + return _parse5.apply(this, arguments); + } + + parse.toString = function () { + return _parse5.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ *> ?/gm, ""); + return { + content: parse(content, state) + }; + }), + react: function react(node, output, state) { + return reactElement("blockquote", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("blockquote", output(node.content, state)); + } + }, + list: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + // We only want to break into a list if we are at the start of a + // line. This is to avoid parsing "hi * there" with "* there" + // becoming a part of a list. + // You might wonder, "but that's inline, so of course it wouldn't + // start a list?". You would be correct! Except that some of our + // lists can be inline, because they might be inside another list, + // in which case we can parse with inline scope, but need to allow + // nested lists inside this inline scope. + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var isStartOfLineCapture = LIST_LOOKBEHIND_R.exec(prevCaptureStr); + var isListBlock = state._list || !state.inline; + + if (isStartOfLineCapture && isListBlock) { + source = isStartOfLineCapture[1] + source; + return LIST_R.exec(source); + } else { + return null; + } + }, + parse: function (_parse6) { + function parse(_x16, _x17, _x18) { + return _parse6.apply(this, arguments); + } + + parse.toString = function () { + return _parse6.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var bullet = capture[2]; + var ordered = bullet.length > 1; + var start = ordered ? +bullet : undefined; + var items = capture[0].replace(LIST_BLOCK_END_R, "\n").match(LIST_ITEM_R); // We know this will match here, because of how the regexes are + // defined + + var lastItemWasAParagraph = false; + var itemContent = items.map(function (item, i) { + // We need to see how far indented this item is: + var prefixCapture = LIST_ITEM_PREFIX_R.exec(item); + var space = prefixCapture ? prefixCapture[0].length : 0; // And then we construct a regex to "unindent" the subsequent + // lines of the items by that amount: + + var spaceRegex = new RegExp("^ {1," + space + "}", "gm"); // Before processing the item, we need a couple things + + var content = item // remove indents on trailing lines: + .replace(spaceRegex, "") // remove the bullet: + .replace(LIST_ITEM_PREFIX_R, ""); // I'm not sur4 why this is necessary again? + // Handling "loose" lists, like: + // + // * this is wrapped in a paragraph + // + // * as is this + // + // * as is this + + var isLastItem = i === items.length - 1; + var containsBlocks = content.indexOf("\n\n") !== -1; // Any element in a list is a block if it contains multiple + // newlines. The last element in the list can also be a block + // if the previous item in the list was a block (this is + // because non-last items in the list can end with \n\n, but + // the last item can't, so we just "inherit" this property + // from our previous element). + + var thisItemIsAParagraph = containsBlocks || isLastItem && lastItemWasAParagraph; + lastItemWasAParagraph = thisItemIsAParagraph; // backup our state for restoration afterwards. We're going to + // want to set state._list to true, and state.inline depending + // on our list's looseness. + + var oldStateInline = state.inline; + var oldStateList = state._list; + state._list = true; // Parse inline if we're in a tight list, or block if we're in + // a loose list. + + var adjustedContent; + + if (thisItemIsAParagraph) { + state.inline = false; + adjustedContent = content.replace(LIST_ITEM_END_R, "\n\n"); + } else { + state.inline = true; + adjustedContent = content.replace(LIST_ITEM_END_R, ""); + } + + var result = parse(adjustedContent, state); // Restore our state before returning + + state.inline = oldStateInline; + state._list = oldStateList; + return result; + }); + return { + ordered: ordered, + start: start, + items: itemContent + }; + }), + react: function react(node, output, state) { + var ListWrapper = node.ordered ? "ol" : "ul"; + return reactElement(ListWrapper, state.key, { + start: node.start, + children: node.items.map(function (item, i) { + return reactElement("li", "" + i, { + children: output(item, state) + }); + }) + }); + }, + html: function html(node, output, state) { + var listItems = node.items.map(function (item) { + return htmlTag("li", output(item, state)); + }).join(""); + var listTag = node.ordered ? "ol" : "ul"; + var attributes = { + start: node.start + }; + return htmlTag(listTag, listItems, attributes); + } + }, + def: { + order: currOrder++, + // TODO(aria): This will match without a blank line before the next + // block element, which is inconsistent with most of the rest of + // simple-markdown. + match: blockRegex(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/), + parse: function (_parse7) { + function parse(_x19, _x20, _x21) { + return _parse7.apply(this, arguments); + } + + parse.toString = function () { + return _parse7.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var def = capture[1].replace(/\s+/g, " ").toLowerCase(); + var target = capture[2]; + var title = capture[3]; // Look for previous links/images using this def + // If any links/images using this def have already been declared, + // they will have added themselves to the state._refs[def] list + // (_ to deconflict with client-defined state). We look through + // that list of reflinks for this def, and modify those AST nodes + // with our newly found information now. + // Sorry :(. + + if (state._refs && state._refs[def]) { + // `refNode` can be a link or an image + state._refs[def].forEach(function (refNode) { + refNode.target = target; + refNode.title = title; + }); + } // Add this def to our map of defs for any future links/images + // In case we haven't found any or all of the refs referring to + // this def yet, we add our def to the table of known defs, so + // that future reflinks can modify themselves appropriately with + // this information. + + + state._defs = state._defs || {}; + state._defs[def] = { + target: target, + title: title + }; // return the relevant parsed information + // for debugging only. + + return { + def: def, + target: target, + title: title + }; + }), + react: function react() { + return null; + }, + html: function html() { + return ""; + } + }, + table: { + order: currOrder++, + match: blockRegex(TABLES.TABLE_REGEX), + parse: TABLES.parseTable, + react: function react(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? {} : { + textAlign: node.align[colIndex] + }; + }; + + var headers = node.header.map(function (content, i) { + return reactElement("th", "" + i, { + style: getStyle(i), + scope: "col", + children: output(content, state) + }); + }); + var rows = node.cells.map(function (row, r) { + return reactElement("tr", "" + r, { + children: row.map(function (content, c) { + return reactElement("td", "" + c, { + style: getStyle(c), + children: output(content, state) + }); + }) + }); + }); + return reactElement("table", state.key, { + children: [reactElement("thead", "thead", { + children: reactElement("tr", null, { + children: headers + }) + }), reactElement("tbody", "tbody", { + children: rows + })] + }); + }, + html: function html(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? "" : "text-align:" + node.align[colIndex] + ";"; + }; + + var headers = node.header.map(function (content, i) { + return htmlTag("th", output(content, state), { + style: getStyle(i), + scope: "col" + }); + }).join(""); + var rows = node.cells.map(function (row) { + var cols = row.map(function (content, c) { + return htmlTag("td", output(content, state), { + style: getStyle(c) + }); + }).join(""); + return htmlTag("tr", cols); + }).join(""); + var thead = htmlTag("thead", htmlTag("tr", headers)); + var tbody = htmlTag("tbody", rows); + return htmlTag("table", thead + tbody); + } + }, + newline: { + order: currOrder++, + match: blockRegex(/^(?:\n *)*\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return "\n"; + }, + html: function html(node, output, state) { + return "\n"; + } + }, + paragraph: { + order: currOrder++, + match: blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("div", state.key, { + className: "paragraph", + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + class: "paragraph" + }; + return htmlTag("div", output(node.content, state), attributes); + } + }, + escape: { + order: currOrder++, + // We don't allow escaping numbers, letters, or spaces here so that + // backslashes used in plain text still get rendered. But allowing + // escaping anything else provides a very flexible escape mechanism, + // regardless of how this grammar is extended. + match: inlineRegex(/^\\([^0-9A-Za-z\s])/), + parse: function (_parse8) { + function parse(_x22, _x23, _x24) { + return _parse8.apply(this, arguments); + } + + parse.toString = function () { + return _parse8.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "text", + content: capture[1] + }; + }), + react: null, + html: null + }, + tableSeparator: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + if (!state.inTable) { + return null; + } + + return /^ *\| */.exec(source); + }, + parse: function parse() { + return { + type: "tableSeparator" + }; + }, + // These shouldn't be reached, but in case they are, be reasonable: + react: function react() { + return " | "; + }, + html: function html() { + return " | "; + } + }, + autolink: { + order: currOrder++, + match: inlineRegex(/^<([^: >]+:\/[^ >]+)>/), + parse: function (_parse9) { + function parse(_x25, _x26, _x27) { + return _parse9.apply(this, arguments); + } + + parse.toString = function () { + return _parse9.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1] + }; + }), + react: null, + html: null + }, + mailto: { + order: currOrder++, + match: inlineRegex(/^<([^ >]+@[^ >]+)>/), + parse: function (_parse10) { + function parse(_x28, _x29, _x30) { + return _parse10.apply(this, arguments); + } + + parse.toString = function () { + return _parse10.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var address = capture[1]; + var target = capture[1]; // Check for a `mailto:` already existing in the link: + + if (!AUTOLINK_MAILTO_CHECK_R.test(target)) { + target = "mailto:" + target; + } + + return { + type: "link", + content: [{ + type: "text", + content: address + }], + target: target + }; + }), + react: null, + html: null + }, + url: { + order: currOrder++, + match: inlineRegex(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/), + parse: function (_parse11) { + function parse(_x31, _x32, _x33) { + return _parse11.apply(this, arguments); + } + + parse.toString = function () { + return _parse11.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1], + title: undefined + }; + }), + react: null, + html: null + }, + link: { + order: currOrder++, + match: inlineRegex(new RegExp("^\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse12) { + function parse(_x34, _x35, _x36) { + return _parse12.apply(this, arguments); + } + + parse.toString = function () { + return _parse12.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var link = { + content: parse(capture[1], state), + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return link; + }), + react: function react(node, output, state) { + return reactElement("a", state.key, { + href: sanitizeUrl(node.target), + title: node.title, + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + href: sanitizeUrl(node.target), + title: node.title + }; + return htmlTag("a", output(node.content, state), attributes); + } + }, + image: { + order: currOrder++, + match: inlineRegex(new RegExp("^!\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse13) { + function parse(_x37, _x38, _x39) { + return _parse13.apply(this, arguments); + } + + parse.toString = function () { + return _parse13.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var image = { + alt: capture[1], + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return image; + }), + react: function react(node, output, state) { + return reactElement("img", state.key, { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }); + }, + html: function html(node, output, state) { + var attributes = { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }; + return htmlTag("img", "", attributes, false); + } + }, + reflink: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse14) { + function parse(_x40, _x41, _x42) { + return _parse14.apply(this, arguments); + } + + parse.toString = function () { + return _parse14.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "link", + content: parse(capture[1], state) + }); + }), + react: null, + html: null + }, + refimage: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^!\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse15) { + function parse(_x43, _x44, _x45) { + return _parse15.apply(this, arguments); + } + + parse.toString = function () { + return _parse15.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "image", + alt: capture[1] + }); + }), + react: null, + html: null + }, + em: { + order: currOrder + /* same as strong/u */ + , + match: inlineRegex(new RegExp( // only match _s surrounding words. + "^\\b_" + "((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_" + "\\b" + // Or match *s: + "|" + // Only match *s that are followed by a non-space: + "^\\*(?=\\S)(" + // Match at least one of: + "(?:" + // - `**`: so that bolds inside italics don't close the + // italics + "\\*\\*|" + // - escape sequence: so escaped *s don't close us + "\\\\[\\s\\S]|" + // - whitespace: followed by a non-* (we don't + // want ' *' to close an italics--it might + // start a list) + "\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|" + // - non-whitespace, non-*, non-backslash characters + "[^\\s\\*\\\\]" + ")+?" + // followed by a non-space, non-* then * + ")\\*(?!\\*)")), + quality: function quality(capture) { + // precedence by length, `em` wins ties: + return capture[0].length + 0.2; + }, + parse: function (_parse16) { + function parse(_x46, _x47, _x48) { + return _parse16.apply(this, arguments); + } + + parse.toString = function () { + return _parse16.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: parse(capture[2] || capture[1], state) + }; + }), + react: function react(node, output, state) { + return reactElement("em", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("em", output(node.content, state)); + } + }, + strong: { + order: currOrder + /* same as em */ + , + match: inlineRegex(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/), + quality: function quality(capture) { + // precedence by length, wins ties vs `u`: + return capture[0].length + 0.1; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("strong", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("strong", output(node.content, state)); + } + }, + u: { + order: currOrder++ + /* same as em&strong; increment for next rule */ + , + match: inlineRegex(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/), + quality: function quality(capture) { + // precedence by length, loses all ties + return capture[0].length; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("u", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("u", output(node.content, state)); + } + }, + del: { + order: currOrder++, + match: inlineRegex(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("del", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("del", output(node.content, state)); + } + }, + inlineCode: { + order: currOrder++, + match: inlineRegex(/^(`+)([\s\S]*?[^`])\1(?!`)/), + parse: function (_parse17) { + function parse(_x49, _x50, _x51) { + return _parse17.apply(this, arguments); + } + + parse.toString = function () { + return _parse17.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[2].replace(INLINE_CODE_ESCAPE_BACKTICKS_R, "$1") + }; + }), + react: function react(node, output, state) { + return reactElement("code", state.key, { + children: node.content + }); + }, + html: function html(node, output, state) { + return htmlTag("code", sanitizeText(node.content)); + } + }, + br: { + order: currOrder++, + match: anyScopeRegex(/^ {2,}\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("br", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<br>"; + } + }, + text: { + order: currOrder++, + // Here we look for anything followed by non-symbols, + // double newlines, or double-space-newlines + // We break on any symbol characters so that this grammar + // is easy to extend without needing to modify this regex + match: anyScopeRegex(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/), + parse: function (_parse18) { + function parse(_x52, _x53, _x54) { + return _parse18.apply(this, arguments); + } + + parse.toString = function () { + return _parse18.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[0] + }; + }), + react: function react(node, output, state) { + return node.content; + }, + html: function html(node, output, state) { + return sanitizeText(node.content); + } + } +}; +/** (deprecated) */ + +var ruleOutput = function ruleOutput( // $FlowFixMe +rules, property) { + if (!property && typeof console !== "undefined") { + console.warn("simple-markdown ruleOutput should take 'react' or " + "'html' as the second argument."); + } + + var nestedRuleOutput = function nestedRuleOutput(ast, outputFunc, state) { + return rules[ast.type][property](ast, outputFunc, state); + }; + + return nestedRuleOutput; +}; +/** (deprecated) + */ + + +var reactFor = function reactFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + var oldKey = state.key; + var result = []; // map nestedOutput over the ast, except group any text + // nodes together into a single string output. + + var lastResult = null; + + for (var i = 0; i < ast.length; i++) { + state.key = "" + i; + var nodeOut = nestedOutput(ast[i], state); + + if (typeof nodeOut === "string" && typeof lastResult === "string") { + lastResult = lastResult + nodeOut; + result[result.length - 1] = lastResult; + } else { + result.push(nodeOut); + lastResult = nodeOut; + } + } + + state.key = oldKey; + return result; + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; +/** (deprecated) + */ + + +var htmlFor = function htmlFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + return ast.map(function (node) { + return nestedOutput(node, state); + }).join(""); + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; + +var outputFor = function outputFor(rules, property) { + var defaultState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!property) { + throw new Error("simple-markdown: outputFor: `property` must be " + "defined. " + "if you just upgraded, you probably need to replace `outputFor` " + "with `reactFor`"); + } + + var latestState; // $FlowFixMe[incompatible-type] + + var arrayRule = rules.Array || defaultRules.Array; // Tricks to convince tsc that this var is not null: + + var arrayRuleCheck = arrayRule[property]; + + if (!arrayRuleCheck) { + throw new Error("simple-markdown: outputFor: to join nodes of type `" + property + "` you must provide an `Array:` joiner rule with that type, " + "Please see the docs for details on specifying an Array rule."); + } + + var arrayRuleOutput = arrayRuleCheck; + + var nestedOutput = function nestedOutput(ast, state) { + state = state || latestState; + latestState = state; + + if (Array.isArray(ast)) { + return arrayRuleOutput(ast, nestedOutput, state); + } else { + return rules[ast.type][property](ast, nestedOutput, state); + } + }; + + var outerOutput = function outerOutput(ast, state) { + latestState = populateInitialState(state, defaultState); + return nestedOutput(ast, latestState); + }; + + return outerOutput; +}; // $FlowFixMe[incompatible-call] + + +var defaultRawParse = parserFor(defaultRules); + +var defaultBlockParse = function defaultBlockParse(source, state) { + state = state || {}; + state.inline = false; + return defaultRawParse(source, state); +}; + +var defaultInlineParse = function defaultInlineParse(source, state) { + state = state || {}; + state.inline = true; + return defaultRawParse(source, state); +}; + +var defaultImplicitParse = function defaultImplicitParse(source, state) { + var isBlock = BLOCK_END_R.test(source); + state = state || {}; + state.inline = !isBlock; + return defaultRawParse(source, state); +}; // $FlowFixMe[incompatible-call] + + +var defaultReactOutput = outputFor(defaultRules, "react"); // $FlowFixMe[incompatible-call] + +var defaultHtmlOutput = outputFor(defaultRules, "html"); + +var markdownToReact = function markdownToReact(source, state) { + return defaultReactOutput(defaultBlockParse(source, state), state); +}; + +var markdownToHtml = function markdownToHtml(source, state) { + return defaultHtmlOutput(defaultBlockParse(source, state), state); +}; // TODO: This needs definition + + +var ReactMarkdown = function ReactMarkdown(props) { + var divProps = {}; + + for (var prop in props) { + if (prop !== "source" && // $FlowFixMe + Object.prototype.hasOwnProperty.call(props, prop)) { + divProps[prop] = props[prop]; + } + } + + divProps.children = markdownToReact(props.source); + return reactElement("div", null, divProps); +}; + +// $FlowFixMe +var SimpleMarkdown = { + defaultRules: defaultRules, + parserFor: parserFor, + outputFor: outputFor, + inlineRegex: inlineRegex, + blockRegex: blockRegex, + anyScopeRegex: anyScopeRegex, + parseInline: parseInline, + parseBlock: parseBlock, + // default wrappers: + markdownToReact: markdownToReact, + markdownToHtml: markdownToHtml, + ReactMarkdown: ReactMarkdown, + defaultBlockParse: defaultBlockParse, + defaultInlineParse: defaultInlineParse, + defaultImplicitParse: defaultImplicitParse, + defaultReactOutput: defaultReactOutput, + defaultHtmlOutput: defaultHtmlOutput, + preprocess: preprocess, + sanitizeText: sanitizeText, + sanitizeUrl: sanitizeUrl, + unescapeUrl: unescapeUrl, + htmlTag: htmlTag, + reactElement: reactElement, + // deprecated: + defaultRawParse: defaultRawParse, + ruleOutput: ruleOutput, + reactFor: reactFor, + htmlFor: htmlFor, + defaultParse: function defaultParse() { + if (typeof console !== "undefined") { + console.warn("defaultParse is deprecated, please use `defaultImplicitParse`"); + } + + return defaultImplicitParse.apply(null, arguments); + }, + defaultOutput: function defaultOutput() { + if (typeof console !== "undefined") { + console.warn("defaultOutput is deprecated, please use `defaultReactOutput`"); + } + + return defaultReactOutput.apply(null, arguments); + } +}; + + +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 43349: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96225); + + + + +function addHtmlLabel(root, node) { + var fo = root.append('foreignObject').attr('width', '100000'); + + var div = fo.append('xhtml:div'); + div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); + + var label = node.label; + switch (typeof label) { + case 'function': + div.insert(label); + break; + case 'object': + // Currently we assume this is a DOM object. + div.insert(function () { + return label; + }); + break; + default: + div.html(label); + } + + _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .bg(div, node.labelStyle); + div.style('display', 'inline-block'); + // Fix for firefox + div.style('white-space', 'nowrap'); + + var client = div.node().getBoundingClientRect(); + fo.attr('width', client.width).attr('height', client.height); + + return fo; +} + + +/***/ }), + +/***/ 96225: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "$p": () => (/* binding */ applyClass), +/* harmony export */ "O1": () => (/* binding */ edgeToId), +/* harmony export */ "WR": () => (/* binding */ applyTransition), +/* harmony export */ "bF": () => (/* binding */ isSubgraph), +/* harmony export */ "bg": () => (/* binding */ applyStyle) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37514); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73234); + + +// Public utility functions + + +/* + * Returns true if the specified node in the graph is a subgraph node. A + * subgraph node is one that contains other nodes. + */ +function isSubgraph(g, v) { + return !!g.children(v).length; +} + +function edgeToId(e) { + return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); +} + +var ID_DELIM = /:/g; +function escapeId(str) { + return str ? String(str).replace(ID_DELIM, '\\:') : ''; +} + +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr('style', styleFn); + } +} + +function applyClass(dom, classFn, otherClasses) { + if (classFn) { + dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); + } +} + +function applyTransition(selection, g) { + var graph = g.graph(); + + if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 42494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "bK": () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js + + + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue/* default */.Z)(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js +var isPlainObject = __webpack_require__(37514); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = (0,isArray/* default */.Z)(srcValue), + isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue), + isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if ((0,isArray/* default */.Z)(objValue)) { + newValue = objValue; + } + else if ((0,isArrayLikeObject/* default */.Z)(objValue)) { + newValue = (0,_copyArray/* default */.Z)(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true); + } + else { + newValue = []; + } + } + else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) { + newValue = objValue; + if ((0,isArguments/* default */.Z)(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) { + newValue = (0,_initCloneObject/* default */.Z)(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + (0,_baseFor/* default */.Z)(source, function(srcValue, key) { + stack || (stack = new _Stack/* default */.Z); + if ((0,isObject/* default */.Z)(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, keysIn/* default */.Z); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return (0,_baseRest/* default */.Z)(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default.Date.now */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "k": () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 39354: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "c": () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/clone.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 31667: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _Stack) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules +var _ListCache = __webpack_require__(67308); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache/* default */.Z; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js +var _Map = __webpack_require__(86183); +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache/* default */.Z) { + var pairs = data.__data__; + if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache/* default */.Z(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache/* default */.Z(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + + +/***/ }), + +/***/ 84073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Built-in value references. */ +var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 87668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _arrayLikeKeys) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = (0,isArray/* default */.Z)(value), + isArg = !isArr && (0,isArguments/* default */.Z)(value), + isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value), + isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + (0,_isIndex/* default */.Z)(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 72954: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value); + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue); + + +/***/ }), + +/***/ 74752: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904); + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) { + (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 61395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFor) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 69581: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203); +/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211); +/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227); + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + ''); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 41884: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073); + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer)); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer); + + +/***/ }), + +/***/ 91050: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer); + + +/***/ }), + +/***/ 12701: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884); + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray); + + +/***/ }), + +/***/ 87215: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray); + + +/***/ }), + +/***/ 31899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752); + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue); + } else { + (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject); + + +/***/ }), + +/***/ 77904: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508); + + +var defineProperty = (function() { + try { + var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 12513: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851); + + +/** Built-in value references. */ +var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 73658: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _initCloneObject) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!(0,isObject/* default */.Z)(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object)) + ? _baseCreate((0,_getPrototype/* default */.Z)(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + + +/***/ }), + +/***/ 56009: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex); + + +/***/ }), + +/***/ 50439: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226); + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length)) + : (type == 'string' && index in object) + ) { + return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value); + } + return false; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 81211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _overRest) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 27227: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _setToString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js +var _defineProperty = __webpack_require__(77904); +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) { + return (0,_defineProperty/* default */.Z)(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': (0,constant/* default */.Z)(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 62002: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 69203: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity); + + +/***/ }), + +/***/ 836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject); + + +/***/ }), + +/***/ 37514: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) { + return false; + } + var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 32957: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_keysIn) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules +var _arrayLikeKeys = __webpack_require__(87668); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!(0,isObject/* default */.Z)(object)) { + return _nativeKeysIn(object); + } + var isProto = (0,_isPrototype/* default */.Z)(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "c": () => (/* binding */ createText) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43047); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3502); + + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = withoutMultipleNewlines.replace(/^\s+/gm, ""); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(preprocessedMarkdown); + let lines = [[]]; + let currentLine = 0; + function processNode(node, parentType) { + if (node.type === "text") { + const textLines = node.content.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType || "normal" }); + } + }); + }); + } else if (node.type === "strong" || node.type === "em") { + node.content.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + syntaxTree.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.content.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(markdown); + function output(node) { + if (node.type === "text") { + return node.content.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.content.map(output).join("")}</strong>`; + } else if (node.type === "em") { + return `<em>${node.content.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.content.map(output).join("")}</p>`; + } else { + return ""; + } + } + return syntaxTree.map(output).join(""); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + `<span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + let bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = -1; + structuredText.forEach((line) => { + lineIndex++; + let tspan = createTspan(textElement, lineIndex, lineHeight); + let words = [...line].reverse(); + let currentWord; + let wrappedLine = []; + while (words.length) { + currentWord = words.pop(); + wrappedLine.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + if (tspan.node().getComputedTextLength() > width) { + wrappedLine.pop(); + words.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + wrappedLine = []; + lineIndex++; + tspan = createTspan(textElement, lineIndex, lineHeight); + } + } + }); + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "em" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width, + addSvgBackground = false +} = {}) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__.d)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlSpan(el, node, width, classes); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const special = ['"', "'", ".", ",", ":", ";", "!", "?", "(", ")", "[", "]", "{", "}"]; + let lastWord; + structuredText.forEach((line) => { + line.forEach((word) => { + if (special.includes(word.content) && lastWord) { + lastWord.content += word.content; + word.content = ""; + } + lastWord = word; + }); + }); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + +//# sourceMappingURL=createText-1f5f8f92.js.map + + +/***/ }), + +/***/ 48099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ insertMarkers$1), +/* harmony export */ "b": () => (/* binding */ clear$1), +/* harmony export */ "c": () => (/* binding */ createLabel$1), +/* harmony export */ "d": () => (/* binding */ clear), +/* harmony export */ "e": () => (/* binding */ insertNode), +/* harmony export */ "f": () => (/* binding */ insertEdgeLabel), +/* harmony export */ "g": () => (/* binding */ insertEdge), +/* harmony export */ "h": () => (/* binding */ positionEdgeLabel), +/* harmony export */ "i": () => (/* binding */ intersectRect$1), +/* harmony export */ "l": () => (/* binding */ labelHelper), +/* harmony export */ "p": () => (/* binding */ positionNode), +/* harmony export */ "s": () => (/* binding */ setNodeElem), +/* harmony export */ "u": () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(211); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); +/* harmony import */ var _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(77657); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(81188); + + + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 12 20").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(label, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), { + useHtmlLabels, + width: node.width || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(" + 0 + ", " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const question = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = (parent, node) => { + const { shapeSvg } = labelHelper(parent, node, "label", true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", " + 0 + ")" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = shapes[node.shape](newEl, node, dir); + } else { + el = shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcLabelPosition(path); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.arrowMarkerAbsolute || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + +//# sourceMappingURL=edges-2e77835f.js.map + + +/***/ }), + +/***/ 49863: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "d": () => (/* binding */ db), +/* harmony export */ "f": () => (/* binding */ flowDb), +/* harmony export */ "p": () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 9], $V1 = [1, 7], $V2 = [1, 6], $V3 = [1, 8], $V4 = [1, 20, 21, 22, 23, 38, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $V5 = [2, 10], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 30], $Vb = [1, 32], $Vc = [1, 33], $Vd = [1, 34], $Ve = [1, 62], $Vf = [1, 48], $Vg = [1, 52], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 38], $Vk = [1, 39], $Vl = [1, 40], $Vm = [1, 56], $Vn = [1, 63], $Vo = [1, 51], $Vp = [1, 53], $Vq = [1, 55], $Vr = [1, 59], $Vs = [1, 60], $Vt = [1, 41], $Vu = [1, 42], $Vv = [1, 43], $Vw = [1, 44], $Vx = [1, 61], $Vy = [1, 50], $Vz = [1, 54], $VA = [1, 57], $VB = [1, 58], $VC = [1, 49], $VD = [1, 66], $VE = [1, 71], $VF = [1, 20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $VG = [1, 75], $VH = [1, 74], $VI = [1, 76], $VJ = [20, 21, 23, 81, 82], $VK = [1, 99], $VL = [1, 104], $VM = [1, 107], $VN = [1, 108], $VO = [1, 101], $VP = [1, 106], $VQ = [1, 109], $VR = [1, 102], $VS = [1, 114], $VT = [1, 113], $VU = [1, 103], $VV = [1, 105], $VW = [1, 110], $VX = [1, 111], $VY = [1, 112], $VZ = [1, 115], $V_ = [20, 21, 22, 23, 81, 82], $V$ = [20, 21, 22, 23, 53, 81, 82], $V01 = [20, 21, 22, 23, 40, 52, 53, 55, 57, 59, 61, 63, 65, 66, 67, 69, 71, 73, 74, 76, 81, 82, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V11 = [20, 21, 23], $V21 = [20, 21, 23, 52, 66, 67, 81, 82, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V31 = [1, 12, 20, 21, 22, 23, 24, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $V41 = [52, 66, 67, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V51 = [1, 150], $V61 = [1, 158], $V71 = [1, 159], $V81 = [1, 160], $V91 = [1, 161], $Va1 = [1, 145], $Vb1 = [1, 146], $Vc1 = [1, 141], $Vd1 = [1, 142], $Ve1 = [1, 153], $Vf1 = [1, 154], $Vg1 = [1, 155], $Vh1 = [1, 156], $Vi1 = [1, 157], $Vj1 = [1, 162], $Vk1 = [1, 163], $Vl1 = [1, 148], $Vm1 = [1, 151], $Vn1 = [1, 147], $Vo1 = [1, 144], $Vp1 = [20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $Vq1 = [1, 166], $Vr1 = [20, 21, 22, 23, 26, 52, 66, 67, 92, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $Vs1 = [20, 21, 22, 23, 24, 26, 38, 40, 41, 42, 52, 56, 58, 60, 62, 64, 66, 67, 68, 70, 72, 73, 75, 77, 81, 82, 87, 88, 89, 90, 91, 92, 93, 96, 106, 107, 110, 112, 113, 114, 115, 123, 124, 125, 126, 127, 128], $Vt1 = [12, 21, 22, 24], $Vu1 = [22, 107], $Vv1 = [1, 251], $Vw1 = [1, 246], $Vx1 = [1, 247], $Vy1 = [1, 255], $Vz1 = [1, 252], $VA1 = [1, 249], $VB1 = [1, 248], $VC1 = [1, 250], $VD1 = [1, 253], $VE1 = [1, 254], $VF1 = [1, 256], $VG1 = [1, 274], $VH1 = [20, 21, 23, 107], $VI1 = [20, 21, 22, 23, 66, 67, 87, 103, 106, 107, 110, 111, 112, 113, 114]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "openDirective": 6, "typeDirective": 7, "closeDirective": 8, "separator": 9, ":": 10, "argDirective": 11, "open_directive": 12, "type_directive": 13, "arg_directive": 14, "close_directive": 15, "graphConfig": 16, "document": 17, "line": 18, "statement": 19, "SEMI": 20, "NEWLINE": 21, "SPACE": 22, "EOF": 23, "GRAPH": 24, "NODIR": 25, "DIR": 26, "FirstStmtSeperator": 27, "ending": 28, "endToken": 29, "spaceList": 30, "spaceListNewline": 31, "verticeStatement": 32, "styleStatement": 33, "linkStyleStatement": 34, "classDefStatement": 35, "classStatement": 36, "clickStatement": 37, "subgraph": 38, "text": 39, "SQS": 40, "SQE": 41, "end": 42, "direction": 43, "acc_title": 44, "acc_title_value": 45, "acc_descr": 46, "acc_descr_value": 47, "acc_descr_multiline_value": 48, "link": 49, "node": 50, "vertex": 51, "AMP": 52, "STYLE_SEPARATOR": 53, "idString": 54, "DOUBLECIRCLESTART": 55, "DOUBLECIRCLEEND": 56, "PS": 57, "PE": 58, "(-": 59, "-)": 60, "STADIUMSTART": 61, "STADIUMEND": 62, "SUBROUTINESTART": 63, "SUBROUTINEEND": 64, "VERTEX_WITH_PROPS_START": 65, "ALPHA": 66, "COLON": 67, "PIPE": 68, "CYLINDERSTART": 69, "CYLINDEREND": 70, "DIAMOND_START": 71, "DIAMOND_STOP": 72, "TAGEND": 73, "TRAPSTART": 74, "TRAPEND": 75, "INVTRAPSTART": 76, "INVTRAPEND": 77, "linkStatement": 78, "arrowText": 79, "TESTSTR": 80, "START_LINK": 81, "LINK": 82, "textToken": 83, "STR": 84, "MD_STR": 85, "keywords": 86, "STYLE": 87, "LINKSTYLE": 88, "CLASSDEF": 89, "CLASS": 90, "CLICK": 91, "DOWN": 92, "UP": 93, "textNoTags": 94, "textNoTagsToken": 95, "DEFAULT": 96, "stylesOpt": 97, "alphaNum": 98, "CALLBACKNAME": 99, "CALLBACKARGS": 100, "HREF": 101, "LINK_TARGET": 102, "HEX": 103, "numList": 104, "INTERPOLATE": 105, "NUM": 106, "COMMA": 107, "style": 108, "styleComponent": 109, "MINUS": 110, "UNIT": 111, "BRKT": 112, "DOT": 113, "PCT": 114, "TAGSTART": 115, "alphaNumToken": 116, "idStringToken": 117, "alphaNumStatement": 118, "direction_tb": 119, "direction_bt": 120, "direction_rl": 121, "direction_lr": 122, "PUNCTUATION": 123, "UNICODE_TEXT": 124, "PLUS": 125, "EQUALS": 126, "MULT": 127, "UNDERSCORE": 128, "graphCodeTokens": 129, "ARROW_CROSS": 130, "ARROW_POINT": 131, "ARROW_CIRCLE": 132, "ARROW_OPEN": 133, "QUOTE": 134, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 10: ":", 12: "open_directive", 13: "type_directive", 14: "arg_directive", 15: "close_directive", 20: "SEMI", 21: "NEWLINE", 22: "SPACE", 23: "EOF", 24: "GRAPH", 25: "NODIR", 26: "DIR", 38: "subgraph", 40: "SQS", 41: "SQE", 42: "end", 44: "acc_title", 45: "acc_title_value", 46: "acc_descr", 47: "acc_descr_value", 48: "acc_descr_multiline_value", 52: "AMP", 53: "STYLE_SEPARATOR", 55: "DOUBLECIRCLESTART", 56: "DOUBLECIRCLEEND", 57: "PS", 58: "PE", 59: "(-", 60: "-)", 61: "STADIUMSTART", 62: "STADIUMEND", 63: "SUBROUTINESTART", 64: "SUBROUTINEEND", 65: "VERTEX_WITH_PROPS_START", 66: "ALPHA", 67: "COLON", 68: "PIPE", 69: "CYLINDERSTART", 70: "CYLINDEREND", 71: "DIAMOND_START", 72: "DIAMOND_STOP", 73: "TAGEND", 74: "TRAPSTART", 75: "TRAPEND", 76: "INVTRAPSTART", 77: "INVTRAPEND", 80: "TESTSTR", 81: "START_LINK", 82: "LINK", 84: "STR", 85: "MD_STR", 87: "STYLE", 88: "LINKSTYLE", 89: "CLASSDEF", 90: "CLASS", 91: "CLICK", 92: "DOWN", 93: "UP", 96: "DEFAULT", 99: "CALLBACKNAME", 100: "CALLBACKARGS", 101: "HREF", 102: "LINK_TARGET", 103: "HEX", 105: "INTERPOLATE", 106: "NUM", 107: "COMMA", 110: "MINUS", 111: "UNIT", 112: "BRKT", 113: "DOT", 114: "PCT", 115: "TAGSTART", 119: "direction_tb", 120: "direction_bt", 121: "direction_rl", 122: "direction_lr", 123: "PUNCTUATION", 124: "UNICODE_TEXT", 125: "PLUS", 126: "EQUALS", 127: "MULT", 128: "UNDERSCORE", 130: "ARROW_CROSS", 131: "ARROW_POINT", 132: "ARROW_CIRCLE", 133: "ARROW_OPEN", 134: "QUOTE" }, + productions_: [0, [3, 1], [3, 2], [5, 4], [5, 6], [6, 1], [7, 1], [11, 1], [8, 1], [4, 2], [17, 0], [17, 2], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [16, 2], [16, 2], [16, 2], [16, 3], [28, 2], [28, 1], [29, 1], [29, 1], [29, 1], [27, 1], [27, 1], [27, 2], [31, 2], [31, 2], [31, 1], [31, 1], [30, 2], [30, 1], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 9], [19, 6], [19, 4], [19, 1], [19, 2], [19, 2], [19, 1], [9, 1], [9, 1], [9, 1], [32, 3], [32, 4], [32, 2], [32, 1], [50, 1], [50, 5], [50, 3], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 8], [51, 4], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 4], [51, 4], [51, 1], [49, 2], [49, 3], [49, 3], [49, 1], [49, 3], [78, 1], [79, 3], [39, 1], [39, 2], [39, 1], [39, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [94, 1], [94, 2], [35, 5], [35, 5], [36, 5], [37, 2], [37, 4], [37, 3], [37, 5], [37, 2], [37, 4], [37, 4], [37, 6], [37, 2], [37, 4], [37, 2], [37, 4], [37, 4], [37, 6], [33, 5], [33, 5], [34, 5], [34, 5], [34, 9], [34, 9], [34, 7], [34, 7], [104, 1], [104, 3], [97, 1], [97, 3], [108, 1], [108, 2], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [95, 1], [95, 1], [95, 1], [95, 1], [54, 1], [54, 2], [98, 1], [98, 2], [118, 1], [118, 1], [118, 1], [118, 1], [43, 1], [43, 1], [43, 1], [43, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.parseDirective("%%{", "open_directive"); + break; + case 6: + yy.parseDirective($$[$0], "type_directive"); + break; + case 7: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 8: + yy.parseDirective("}%%", "close_directive", "flowchart"); + break; + case 10: + this.$ = []; + break; + case 11: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 12: + case 97: + case 153: + case 155: + case 156: + this.$ = $$[$0]; + break; + case 19: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 20: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 35: + this.$ = $$[$0 - 1].nodes; + break; + case 36: + case 37: + case 38: + case 39: + case 40: + this.$ = []; + break; + case 41: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 42: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 43: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 45: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 46: + case 47: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 51: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 52: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 53: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 54: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 55: + this.$ = [$$[$0]]; + break; + case 56: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 57: + this.$ = [$$[$0 - 2]]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 58: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 60: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 61: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 64: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 65: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 67: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 68: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 69: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 70: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 71: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 72: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 74: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 75: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 76: + case 77: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 78: + this.$ = $$[$0]; + break; + case 79: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 80: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 81: + this.$ = $$[$0 - 1]; + break; + case 82: + this.$ = { text: $$[$0], type: "text" }; + break; + case 83: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 84: + this.$ = { text: $$[$0], type: "text" }; + break; + case 85: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 98: + case 154: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 99: + case 100: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 101: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 102: + case 110: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 103: + case 111: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 104: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 105: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 106: + case 112: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 107: + case 113: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 108: + case 114: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 109: + case 115: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 116: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 117: + case 119: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 118: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 121: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 122: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 123: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 124: + case 126: + this.$ = [$$[$0]]; + break; + case 125: + case 127: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 129: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 151: + this.$ = $$[$0]; + break; + case 152: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 157: + this.$ = "v"; + break; + case 158: + this.$ = "-"; + break; + case 159: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 160: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 161: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 162: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, { 1: [3] }, { 1: [2, 1] }, { 3: 10, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, o($V4, $V5, { 17: 11 }), { 7: 12, 13: [1, 13] }, { 16: 14, 21: $V1, 22: $V2, 24: $V3 }, { 16: 15, 21: $V1, 22: $V2, 24: $V3 }, { 25: [1, 16], 26: [1, 17] }, { 13: [2, 5] }, { 1: [2, 2] }, { 1: [2, 9], 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 8: 64, 10: [1, 65], 15: $VD }, o([10, 15], [2, 6]), o($V4, [2, 17]), o($V4, [2, 18]), o($V4, [2, 19]), { 20: [1, 68], 21: [1, 69], 22: $VE, 27: 67, 30: 70 }, o($VF, [2, 11]), o($VF, [2, 12]), o($VF, [2, 13]), o($VF, [2, 14]), o($VF, [2, 15]), o($VF, [2, 16]), { 9: 72, 20: $VG, 21: $VH, 23: $VI, 49: 73, 78: 77, 81: [1, 78], 82: [1, 79] }, { 9: 80, 20: $VG, 21: $VH, 23: $VI }, { 9: 81, 20: $VG, 21: $VH, 23: $VI }, { 9: 82, 20: $VG, 21: $VH, 23: $VI }, { 9: 83, 20: $VG, 21: $VH, 23: $VI }, { 9: 84, 20: $VG, 21: $VH, 23: $VI }, { 9: 86, 20: $VG, 21: $VH, 22: [1, 85], 23: $VI }, o($VF, [2, 44]), { 45: [1, 87] }, { 47: [1, 88] }, o($VF, [2, 47]), o($VJ, [2, 54], { 30: 89, 22: $VE }), { 22: [1, 90] }, { 22: [1, 91] }, { 22: [1, 92] }, { 22: [1, 93] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 84: [1, 97], 92: $VO, 98: 96, 99: [1, 94], 101: [1, 95], 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($VF, [2, 159]), o($VF, [2, 160]), o($VF, [2, 161]), o($VF, [2, 162]), o($V_, [2, 55], { 53: [1, 116] }), o($V$, [2, 74], { 117: 129, 40: [1, 117], 52: $Ve, 55: [1, 118], 57: [1, 119], 59: [1, 120], 61: [1, 121], 63: [1, 122], 65: [1, 123], 66: $Vf, 67: $Vg, 69: [1, 124], 71: [1, 125], 73: [1, 126], 74: [1, 127], 76: [1, 128], 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }), o($V01, [2, 151]), o($V01, [2, 176]), o($V01, [2, 177]), o($V01, [2, 178]), o($V01, [2, 179]), o($V01, [2, 180]), o($V01, [2, 181]), o($V01, [2, 182]), o($V01, [2, 183]), o($V01, [2, 184]), o($V01, [2, 185]), o($V01, [2, 186]), o($V01, [2, 187]), o($V01, [2, 188]), o($V01, [2, 189]), o($V01, [2, 190]), o($V01, [2, 191]), { 9: 130, 20: $VG, 21: $VH, 23: $VI }, { 11: 131, 14: [1, 132] }, o($V11, [2, 8]), o($V4, [2, 20]), o($V4, [2, 26]), o($V4, [2, 27]), { 21: [1, 133] }, o($V21, [2, 34], { 30: 134, 22: $VE }), o($VF, [2, 35]), { 50: 135, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, o($V31, [2, 48]), o($V31, [2, 49]), o($V31, [2, 50]), o($V41, [2, 78], { 79: 136, 68: [1, 138], 80: [1, 137] }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 139, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o([52, 66, 67, 68, 80, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], [2, 80]), o($VF, [2, 36]), o($VF, [2, 37]), o($VF, [2, 38]), o($VF, [2, 39]), o($VF, [2, 40]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 164, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vp1, $V5, { 17: 165 }), o($VF, [2, 45]), o($VF, [2, 46]), o($VJ, [2, 53], { 52: $Vq1 }), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 167, 103: [1, 168], 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 96: [1, 169], 104: 170, 106: [1, 171] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 96: [1, 172], 98: 173, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 174, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 102], { 22: [1, 175], 100: [1, 176] }), o($V11, [2, 106], { 22: [1, 177] }), o($V11, [2, 110], { 116: 100, 118: 179, 22: [1, 178], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 112], { 22: [1, 180] }), o($Vr1, [2, 153]), o($Vr1, [2, 155]), o($Vr1, [2, 156]), o($Vr1, [2, 157]), o($Vr1, [2, 158]), o($Vs1, [2, 163]), o($Vs1, [2, 164]), o($Vs1, [2, 165]), o($Vs1, [2, 166]), o($Vs1, [2, 167]), o($Vs1, [2, 168]), o($Vs1, [2, 169]), o($Vs1, [2, 170]), o($Vs1, [2, 171]), o($Vs1, [2, 172]), o($Vs1, [2, 173]), o($Vs1, [2, 174]), o($Vs1, [2, 175]), { 52: $Ve, 54: 181, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 182, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 183, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 185, 42: $V91, 52: $VL, 57: [1, 184], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 186, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 187, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 188, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 66: [1, 189] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 190, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 191, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 71: [1, 192], 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 193, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 194, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 195, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V01, [2, 152]), o($Vt1, [2, 3]), { 8: 196, 15: $VD }, { 15: [2, 7] }, o($V4, [2, 28]), o($V21, [2, 33]), o($VJ, [2, 51], { 30: 197, 22: $VE }), o($V41, [2, 75], { 22: [1, 198] }), { 22: [1, 199] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 200, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 82: [1, 201], 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vs1, [2, 82]), o($Vs1, [2, 84]), o($Vs1, [2, 85]), o($Vs1, [2, 141]), o($Vs1, [2, 142]), o($Vs1, [2, 143]), o($Vs1, [2, 144]), o($Vs1, [2, 145]), o($Vs1, [2, 146]), o($Vs1, [2, 147]), o($Vs1, [2, 148]), o($Vs1, [2, 149]), o($Vs1, [2, 150]), o($Vs1, [2, 86]), o($Vs1, [2, 87]), o($Vs1, [2, 88]), o($Vs1, [2, 89]), o($Vs1, [2, 90]), o($Vs1, [2, 91]), o($Vs1, [2, 92]), o($Vs1, [2, 93]), o($Vs1, [2, 94]), o($Vs1, [2, 95]), o($Vs1, [2, 96]), { 9: 204, 20: $VG, 21: $VH, 22: $V51, 23: $VI, 24: $V61, 26: $V71, 38: $V81, 40: [1, 203], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 205], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $VE, 30: 206 }, { 22: [1, 207], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: [1, 208] }, { 22: [1, 209] }, { 22: [1, 210], 107: [1, 211] }, o($Vu1, [2, 124]), { 22: [1, 212] }, { 22: [1, 213], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: [1, 214], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 84: [1, 215] }, o($V11, [2, 104], { 22: [1, 216] }), { 84: [1, 217], 102: [1, 218] }, { 84: [1, 219] }, o($Vr1, [2, 154]), { 84: [1, 220], 102: [1, 221] }, o($V_, [2, 57], { 117: 129, 52: $Ve, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 222], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 56: [1, 223], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 224, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 225], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 60: [1, 226], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 62: [1, 227], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 64: [1, 228], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 67: [1, 229] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 70: [1, 230], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 231], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 232, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 233], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 234], 77: [1, 235], 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 237], 77: [1, 236], 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 9: 238, 20: $VG, 21: $VH, 23: $VI }, o($VJ, [2, 52], { 52: $Vq1 }), o($V41, [2, 77]), o($V41, [2, 76]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 68: [1, 239], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V41, [2, 79]), o($Vs1, [2, 83]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 240, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vp1, $V5, { 17: 241 }), o($VF, [2, 43]), { 51: 242, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 243, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 257, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 258, 103: $Vz1, 105: [1, 259], 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 260, 103: $Vz1, 105: [1, 261], 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 106: [1, 262] }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 263, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 264, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 265, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 103]), { 84: [1, 266] }, o($V11, [2, 107], { 22: [1, 267] }), o($V11, [2, 108]), o($V11, [2, 111]), o($V11, [2, 113], { 22: [1, 268] }), o($V11, [2, 114]), o($V$, [2, 58]), o($V$, [2, 59]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 269], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 66]), o($V$, [2, 61]), o($V$, [2, 62]), o($V$, [2, 63]), { 66: [1, 270] }, o($V$, [2, 65]), o($V$, [2, 67]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 271], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 69]), o($V$, [2, 70]), o($V$, [2, 72]), o($V$, [2, 71]), o($V$, [2, 73]), o($Vt1, [2, 4]), o([22, 52, 66, 67, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], [2, 81]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 272], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 273], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, o($V_, [2, 56]), o($V11, [2, 116], { 107: $VG1 }), o($VH1, [2, 126], { 109: 275, 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }), o($VI1, [2, 128]), o($VI1, [2, 130]), o($VI1, [2, 131]), o($VI1, [2, 132]), o($VI1, [2, 133]), o($VI1, [2, 134]), o($VI1, [2, 135]), o($VI1, [2, 136]), o($VI1, [2, 137]), o($VI1, [2, 138]), o($VI1, [2, 139]), o($VI1, [2, 140]), o($V11, [2, 117], { 107: $VG1 }), o($V11, [2, 118], { 107: $VG1 }), { 22: [1, 276] }, o($V11, [2, 119], { 107: $VG1 }), { 22: [1, 277] }, o($Vu1, [2, 125]), o($V11, [2, 99], { 107: $VG1 }), o($V11, [2, 100], { 107: $VG1 }), o($V11, [2, 101], { 116: 100, 118: 179, 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 105]), { 102: [1, 278] }, { 102: [1, 279] }, { 58: [1, 280] }, { 68: [1, 281] }, { 72: [1, 282] }, { 9: 283, 20: $VG, 21: $VH, 23: $VI }, o($VF, [2, 42]), { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 108: 284, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, o($VI1, [2, 129]), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 285, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 286, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 109]), o($V11, [2, 115]), o($V$, [2, 60]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 287, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 68]), o($Vp1, $V5, { 17: 288 }), o($VH1, [2, 127], { 109: 275, 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }), o($V11, [2, 122], { 116: 100, 118: 179, 22: [1, 289], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 123], { 116: 100, 118: 179, 22: [1, 290], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 291], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 292], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 293, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 294, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, o($V$, [2, 64]), o($VF, [2, 41]), o($V11, [2, 120], { 107: $VG1 }), o($V11, [2, 121], { 107: $VG1 })], + defaultActions: { 2: [2, 1], 9: [2, 5], 10: [2, 2], 132: [2, 7] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 12; + case 1: + this.begin("type_directive"); + return 13; + case 2: + this.popState(); + this.begin("arg_directive"); + return 10; + case 3: + this.popState(); + this.popState(); + return 15; + case 4: + return 14; + case 5: + this.begin("acc_title"); + return 44; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 46; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + this.begin("md_string"); + break; + case 13: + return "MD_STR"; + case 14: + this.popState(); + break; + case 15: + this.begin("string"); + break; + case 16: + this.popState(); + break; + case 17: + return "STR"; + case 18: + return 87; + case 19: + return 96; + case 20: + return 88; + case 21: + return 105; + case 22: + return 89; + case 23: + return 90; + case 24: + this.begin("href"); + break; + case 25: + this.popState(); + break; + case 26: + return 101; + case 27: + this.begin("callbackname"); + break; + case 28: + this.popState(); + break; + case 29: + this.popState(); + this.begin("callbackargs"); + break; + case 30: + return 99; + case 31: + this.popState(); + break; + case 32: + return 100; + case 33: + this.begin("click"); + break; + case 34: + this.popState(); + break; + case 35: + return 91; + case 36: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 37: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 38: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 39: + return 38; + case 40: + return 42; + case 41: + return 102; + case 42: + return 102; + case 43: + return 102; + case 44: + return 102; + case 45: + this.popState(); + return 25; + case 46: + this.popState(); + return 26; + case 47: + this.popState(); + return 26; + case 48: + this.popState(); + return 26; + case 49: + this.popState(); + return 26; + case 50: + this.popState(); + return 26; + case 51: + this.popState(); + return 26; + case 52: + this.popState(); + return 26; + case 53: + this.popState(); + return 26; + case 54: + this.popState(); + return 26; + case 55: + this.popState(); + return 26; + case 56: + return 119; + case 57: + return 120; + case 58: + return 121; + case 59: + return 122; + case 60: + return 106; + case 61: + return 112; + case 62: + return 53; + case 63: + return 67; + case 64: + return 52; + case 65: + return 20; + case 66: + return 107; + case 67: + return 127; + case 68: + return 82; + case 69: + return 82; + case 70: + return 82; + case 71: + return 82; + case 72: + return 81; + case 73: + return 81; + case 74: + return 81; + case 75: + return 59; + case 76: + return 60; + case 77: + return 61; + case 78: + return 62; + case 79: + return 63; + case 80: + return 64; + case 81: + return 65; + case 82: + return 69; + case 83: + return 70; + case 84: + return 55; + case 85: + return 56; + case 86: + return 110; + case 87: + return 113; + case 88: + return 128; + case 89: + return 125; + case 90: + return 114; + case 91: + return 126; + case 92: + return 126; + case 93: + return 115; + case 94: + return 73; + case 95: + return 93; + case 96: + return "SEP"; + case 97: + return 92; + case 98: + return 66; + case 99: + return 75; + case 100: + return 74; + case 101: + return 77; + case 102: + return 76; + case 103: + return 123; + case 104: + return 124; + case 105: + return 68; + case 106: + return 57; + case 107: + return 58; + case 108: + return 40; + case 109: + return 41; + case 110: + return 71; + case 111: + return 72; + case 112: + return 134; + case 113: + return 21; + case 114: + return 22; + case 115: + return 23; + } + }, + rules: [/^(?:%%\{)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s]+["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*~~[\~]+\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:\(-)/, /^(?:-\))/, /^(?:\(\[)/, /^(?:\]\))/, /^(?:\[\[)/, /^(?:\]\])/, /^(?:\[\|)/, /^(?:\[\()/, /^(?:\)\])/, /^(?:\(\(\()/, /^(?:\)\)\))/, /^(?:-)/, /^(?:\.)/, /^(?:[\_])/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:[A-Za-z]+)/, /^(?:\\\])/, /^(?:\[\/)/, /^(?:\/\])/, /^(?:\[\\)/, /^(?:[!"#$%&'*+,-.`?\\_/])/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\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]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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-\u0C33\u0C35-\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\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\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\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\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])/, /^(?:\|)/, /^(?:\()/, /^(?:\))/, /^(?:\[)/, /^(?:\])/, /^(?:\{)/, /^(?:\})/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "callbackargs": { "rules": [31, 32], "inclusive": false }, "callbackname": { "rules": [28, 29, 30], "inclusive": false }, "href": { "rules": [25, 26], "inclusive": false }, "click": { "rules": [34, 35], "inclusive": false }, "vertex": { "rules": [], "inclusive": false }, "dir": { "rules": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "inclusive": false }, "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "md_string": { "rules": [13, 14], "inclusive": false }, "string": { "rules": [16, 17], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 15, 18, 19, 20, 21, 22, 23, 24, 27, 33, 36, 37, 38, 39, 40, 41, 42, 43, 44, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.m.parseDirective(this, statement, context, type); +}; +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + edges.push(edge); +}; +const addLink = function(_start, _end, type) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(id, style) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle1 = s.replace("fill", "bgFill"); + const newStyle2 = newStyle1.replace("color", "fill"); + classes[id].textStyles.push(newStyle2); + } + classes[id].styles.push(s); + }); + } +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + return tooltips[id]; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = []; + firstGraphFlag = true; + version = ver; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.y)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + parseDirective, + defaultConfig: () => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.j.flowchart, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.p, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.v, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.x +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + parseDirective, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + +//# sourceMappingURL=flowDb-52e24d17.js.map + + +/***/ }), + +/***/ 9478: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(49863); +/* harmony import */ var _styles_26373982_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(60755); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20683); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39354); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3502); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(27484); + + + + + + + + + + + + + + + + + + + + + + +const diagram = { + parser: _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_8__.p, + db: _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_8__.f, + renderer: _styles_26373982_js__WEBPACK_IMPORTED_MODULE_9__.f, + styles: _styles_26373982_js__WEBPACK_IMPORTED_MODULE_9__.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_10__.h)({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); + _styles_26373982_js__WEBPACK_IMPORTED_MODULE_9__.f.setConf(cnf.flowchart); + _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_8__.f.clear(); + _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_8__.f.setGen("gen-2"); + } +}; + +//# sourceMappingURL=flowDiagram-v2-8e52592d.js.map + + +/***/ }), + +/***/ 12566: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "r": () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39354); +/* harmony import */ var _edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(48099); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70044); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(211); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(59373); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = JSON.parse(JSON.stringify(edge)); + const edge2 = JSON.parse(JSON.stringify(edge)); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = (_elem, graph, diagramtype, parentCluster) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + graph.nodes().forEach(function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); + const newEl = o.elem; + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = (elem, graph, markers, diagramtype, id) => { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + adjustClustersAndEdges(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + recursiveRender(elem, graph, diagramtype); +}; + +//# sourceMappingURL=index-5219d011.js.map + + +/***/ }), + +/***/ 60755: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ flowStyles), +/* harmony export */ "f": () => (/* binding */ flowRendererV2) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45625); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59373); +/* harmony import */ var _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(49863); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(81188); +/* harmony import */ var _index_5219d011_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12566); +/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(43349); + + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.n)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_4__/* .addHtmlLabel */ .a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)().flowchart.padding + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + domId: diagObj.db.lookUpDomId(vertex.id), + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + dir: vertex.dir, + props: vertex.props, + padding: (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)().flowchart.padding + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.n)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + var linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + var linkNameStart = "LS-" + edge.start; + var linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + case "invisible": + edgeData.thickness = "invisible"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 0;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.n)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.o)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.o)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + g.setEdge(edge.start, edge.end, edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Extracting classes"); + diagObj.db.clear(); + try { + diagObj.parse(text); + return diagObj.db.getClasses(); + } catch (e) { + return; + } +}; +const draw = function(text, id, _version, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Drawing flowchart"); + diagObj.db.clear(); + _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_5__.f.setGen("gen-2"); + diagObj.parser.parse(text); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 0, + marginy: 0 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Subgraph - ", subG); + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const vert = diagObj.db.getVertices(); + const edges = diagObj.db.getEdges(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .selectAll */ .td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + (0,_index_5219d011_js__WEBPACK_IMPORTED_MODULE_6__.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.s)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + diagObj.db.indexNodes("subGraph" + i); + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#" + id + ' [id="' + key + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRendererV2 = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; + +//# sourceMappingURL=styles-26373982.js.map + + +/***/ }), + +/***/ 77657: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "p": () => (/* binding */ parseMember), +/* harmony export */ "s": () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); + + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = classDef.id; + if (classDef.type !== void 0 && classDef.type !== "") { + classTitleString += "<" + classDef.type + ">"; + } + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const drawNote = function(elem, note, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + const fieldRegEx = /^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/; + const methodRegEx = /^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/; + let fieldMatch = text.match(fieldRegEx); + let methodMatch = text.match(methodRegEx); + if (fieldMatch && !methodMatch) { + return buildFieldDisplay(fieldMatch); + } else if (methodMatch) { + return buildMethodDisplay(methodMatch); + } else { + return buildLegacyDisplay(text); + } +}; +const buildFieldDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let fieldType = parsedText[2] ? parsedText[2].trim() : ""; + let genericType = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let fieldName = parsedText[4] ? parsedText[4].trim() : ""; + let classifier = parsedText[5] ? parsedText[5].trim() : ""; + displayText = visibility + fieldType + genericType + " " + fieldName; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildMethodDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let methodName = parsedText[2] ? parsedText[2].trim() : ""; + let parameters = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let classifier = parsedText[4] ? parsedText[4].trim() : ""; + let returnType = parsedText[5] ? " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[5]).trim() : ""; + displayText = visibility + methodName + "(" + parameters + ")" + returnType; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildLegacyDisplay = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let methodStart = text.indexOf("("); + let methodEnd = text.indexOf(")"); + if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) { + let visibility = ""; + let methodName = ""; + let firstChar = text.substring(0, 1); + if (firstChar.match(/\w/)) { + methodName = text.substring(0, methodStart).trim(); + } else { + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + methodName = text.substring(1, methodStart).trim(); + } + const parameters = text.substring(methodStart + 1, methodEnd); + text.substring(methodEnd + 1, 1); + cssStyle = parseClassifier(text.substring(methodEnd + 1, methodEnd + 2)); + displayText = visibility + methodName + "(" + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + returnType = text.substring(methodEnd + 2).trim(); + if (returnType !== "") { + returnType = " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(returnType); + displayText += returnType; + } + } + } else { + displayText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + drawClass, + drawEdge, + drawNote, + parseMember +}; + +//# sourceMappingURL=svgDraw-2526cba0.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/47daf389.761a5874.js b/assets/js/47daf389.761a5874.js new file mode 100644 index 0000000000..f956358b97 --- /dev/null +++ b/assets/js/47daf389.761a5874.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8082],{7342:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>p,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var r=t(7462),n=(t(7294),t(3905));t(5657);const l={slug:"v8.4-release",title:"v8.4 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:14},s="eCalc",i={unversionedId:"changelog/v8-4",id:"changelog/v8-4",title:"v8.4 (Latest)",description:"New Features",source:"@site/docs/changelog/v8-4.md",sourceDirName:"changelog",slug:"/changelog/v8.4-release",permalink:"/ecalc/docs/changelog/v8.4-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-4.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:14,frontMatter:{slug:"v8.4-release",title:"v8.4 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:14},sidebar:"changelog",previous:{title:"v8.3",permalink:"/ecalc/docs/changelog/v8.3-release"},next:{title:"Changelog",permalink:"/ecalc/docs/changelog/"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}],d={toc:c},u="wrapper";function p(e){let{components:a,...t}=e;return(0,n.kt)(u,(0,r.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"ecalc"},"eCalc"),(0,n.kt)("h2",{id:"new-features"},"New Features"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Add ",(0,n.kt)("inlineCode",{parentName:"li"},"requested inlet- and outlet compressor pressures")," from input data to results. In cases where active pressure control mechanisms are active, requested inlet- and outlet pressures may differ from ",(0,n.kt)("inlineCode",{parentName:"li"},"calculated pressures"),". It is now possible to analyse both requested- and calculated pressures."),(0,n.kt)("li",{parentName:"ul"},"Specify ",(0,n.kt)("inlineCode",{parentName:"li"},"rate type")," for majority of output ",(0,n.kt)("inlineCode",{parentName:"li"},"rate")," results as either ",(0,n.kt)("inlineCode",{parentName:"li"},"stream day")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"calendar day"),"."),(0,n.kt)("li",{parentName:"ul"},"Improved error messages")),(0,n.kt)("h2",{id:"fixes"},"Fixes"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"Actual rate")," was incorrectly returned for ",(0,n.kt)("inlineCode",{parentName:"li"},"compressor sampled"),". Actual rate cannot be known for ",(0,n.kt)("inlineCode",{parentName:"li"},"compressor sampled")," since we need to know ",(0,n.kt)("inlineCode",{parentName:"li"},"fluid properties")," in order to do that. ",(0,n.kt)("inlineCode",{parentName:"li"},"Actual rate")," has therefore been removed from ",(0,n.kt)("inlineCode",{parentName:"li"},"compressor sampled"),"."),(0,n.kt)("li",{parentName:"ul"},"Handle bug in ",(0,n.kt)("inlineCode",{parentName:"li"},"Variable Speed Compressor Train With Multiple Streams And Pressures")," when no rate is entering a compressor stage wrt. recirculation. "),(0,n.kt)("li",{parentName:"ul"},"Other minor fixes")),(0,n.kt)("h2",{id:"breaking-changes"},"Breaking changes"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/492.5969b5d6.js b/assets/js/492.5969b5d6.js new file mode 100644 index 0000000000..2f87acccbe --- /dev/null +++ b/assets/js/492.5969b5d6.js @@ -0,0 +1,1306 @@ +"use strict"; +exports.id = 492; +exports.ids = [492]; +exports.modules = { + +/***/ 70492: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(43047); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(81188); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 24, 26], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 20], $V9 = [1, 24], $Va = [4, 6, 9, 11, 17, 18, 20, 22, 23, 24, 26]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "journey": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "title": 17, "acc_title": 18, "acc_title_value": 19, "acc_descr": 20, "acc_descr_value": 21, "acc_descr_multiline_value": 22, "section": 23, "taskName": 24, "taskData": 25, "open_directive": 26, "type_directive": 27, "arg_directive": 28, "close_directive": 29, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "journey", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 17: "title", 18: "acc_title", 19: "acc_title_value", 20: "acc_descr", 21: "acc_descr_value", 22: "acc_descr_multiline_value", 23: "section", 24: "taskName", 25: "taskData", 26: "open_directive", 27: "type_directive", 28: "arg_directive", 29: "close_directive" }, + productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 2], [10, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 11: + yy.setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 12: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 13: + case 14: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 15: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 16: + yy.addTask($$[$0 - 1], $$[$0]); + this.$ = "task"; + break; + case 18: + yy.parseDirective("%%{", "open_directive"); + break; + case 19: + yy.parseDirective($$[$0], "type_directive"); + break; + case 20: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 21: + yy.parseDirective("}%%", "close_directive", "journey"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 26: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 26: $V1 }, { 13: 8, 27: [1, 9] }, { 27: [2, 18] }, { 6: [1, 10], 7: 21, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: $V8, 26: $V1 }, { 1: [2, 2] }, { 14: 22, 15: [1, 23], 29: $V9 }, o([15, 29], [2, 19]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 21, 10: 25, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: $V8, 26: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 26] }, { 21: [1, 27] }, o($V2, [2, 14]), o($V2, [2, 15]), { 25: [1, 28] }, o($V2, [2, 17]), { 11: [1, 29] }, { 16: 30, 28: [1, 31] }, { 11: [2, 21] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($V2, [2, 16]), o($Va, [2, 9]), { 14: 32, 29: $V9 }, { 29: [2, 20] }, { 11: [1, 33] }, o($Va, [2, 10])], + defaultActions: { 5: [2, 18], 7: [2, 2], 24: [2, 21], 31: [2, 20] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 26; + case 1: + this.begin("type_directive"); + return 27; + case 2: + this.popState(); + this.begin("arg_directive"); + return 15; + case 3: + this.popState(); + this.popState(); + return 29; + case 4: + return 28; + case 5: + break; + case 6: + break; + case 7: + return 11; + case 8: + break; + case 9: + break; + case 10: + return 4; + case 11: + return 17; + case 12: + this.begin("acc_title"); + return 18; + case 13: + this.popState(); + return "acc_title_value"; + case 14: + this.begin("acc_descr"); + return 20; + case 15: + this.popState(); + return "acc_descr_value"; + case 16: + this.begin("acc_descr_multiline"); + break; + case 17: + this.popState(); + break; + case 18: + return "acc_descr_multiline_value"; + case 19: + return 23; + case 20: + return 24; + case 21: + return 25; + case 22: + return 15; + case 23: + return 6; + case 24: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "open_directive": { "rules": [1], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23, 24], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +const sections = []; +const tasks = []; +const rawTasks = []; +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_4__.m.parseDirective(this, statement, context, type); +}; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.y)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const updateActors = function() { + const tempActors = []; + tasks.forEach((task) => { + if (task.people) { + tempActors.push(...task.people); + } + }); + const unique = new Set(tempActors); + return [...unique].sort(); +}; +const addTask = function(descr, taskData) { + const pieces = taskData.substr(1).split(":"); + let score = 0; + let peeps = []; + if (pieces.length === 1) { + score = Number(pieces[0]); + peeps = []; + } else { + score = Number(pieces[0]); + peeps = pieces[1].split(","); + } + const peopleList = peeps.map((s) => s.trim()); + const rawTask = { + section: currentSection, + type: currentSection, + people: peopleList, + task: descr, + score + }; + rawTasks.push(rawTask); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const getActors = function() { + return updateActors(); +}; +const db = { + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().journey, + clear, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.x, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.p, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.v, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.q, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + getActors +}; +const getStyles = (options) => `.label { + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + color: ${options.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${options.textColor} + } + + .legend { + fill: ${options.textColor}; + } + + .label text { + fill: #333; + } + .label { + color: ${options.textColor} + } + + .face { + ${options.faceColor ? `fill: ${options.faceColor}` : "fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${options.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${options.fillType0 ? `fill: ${options.fillType0}` : ""}; + } + .task-type-1, .section-type-1 { + ${options.fillType0 ? `fill: ${options.fillType1}` : ""}; + } + .task-type-2, .section-type-2 { + ${options.fillType0 ? `fill: ${options.fillType2}` : ""}; + } + .task-type-3, .section-type-3 { + ${options.fillType0 ? `fill: ${options.fillType3}` : ""}; + } + .task-type-4, .section-type-4 { + ${options.fillType0 ? `fill: ${options.fillType4}` : ""}; + } + .task-type-5, .section-type-5 { + ${options.fillType0 ? `fill: ${options.fillType5}` : ""}; + } + .task-type-6, .section-type-6 { + ${options.fillType0 ? `fill: ${options.fillType6}` : ""}; + } + .task-type-7, .section-type-7 { + ${options.fillType0 ? `fill: ${options.fillType7}` : ""}; + } + + .actor-0 { + ${options.actor0 ? `fill: ${options.actor0}` : ""}; + } + .actor-1 { + ${options.actor1 ? `fill: ${options.actor1}` : ""}; + } + .actor-2 { + ${options.actor2 ? `fill: ${options.actor2}` : ""}; + } + .actor-3 { + ${options.actor3 ? `fill: ${options.actor3}` : ""}; + } + .actor-4 { + ${options.actor4 ? `fill: ${options.actor4}` : ""}; + } + .actor-5 { + ${options.actor5 ? `fill: ${options.actor5}` : ""}; + } +`; +const styles = getStyles; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.class !== void 0) { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + const nText = textData.text.replace(/<br\s*\/?>/gi, " "); + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + const span = textElem.append("tspan"); + span.attr("x", textData.x + textData.textMargin * 2); + span.text(nText); + return textElem; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf2) { + const g = elem.append("g"); + const rect = getNoteRect(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf2.width * section.taskCount + // width of the tasks + conf2.diagramMarginX * (section.taskCount - 1); + rect.height = conf2.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf2)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf2, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf2) { + const center = task.x + conf2.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = getNoteRect(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf2.width; + rect.height = conf2.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + let xPos = task.x + 14; + task.people.forEach((person) => { + const colour = task.actors[person].color; + const circle = { + cx: xPos, + cy: task.y, + r: 7, + fill: colour, + stroke: "#000", + title: person, + pos: task.actors[person].position + }; + drawCircle(g, circle); + xPos += 10; + }); + _drawTextCandidateFunc(conf2)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf2, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds2) { + const rectElem = drawRect(elem, { + x: bounds2.startx, + y: bounds2.starty, + width: bounds2.stopx - bounds2.startx, + height: bounds2.stopy - bounds2.starty, + fill: bounds2.fill, + class: "rect" + }); + rectElem.lower(); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + "text-anchor": "start", + width: 100, + height: 100, + textMargin: 0, + rx: 0, + ry: 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2, colour) { + const { taskFontSize, taskFontFamily } = conf2; + const lines = content.split(/<br\s*\/?>/gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + getTextObj, + getNoteRect, + initGraphics +}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + keys.forEach(function(key) { + conf[key] = cnf[key]; + }); +}; +const actors = {}; +function drawActorLegend(diagram2) { + const conf2 = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().journey; + let yPos = 60; + Object.keys(actors).forEach((person) => { + const colour = actors[person].color; + const circleData = { + cx: 20, + cy: yPos, + r: 7, + fill: colour, + stroke: "#000", + pos: actors[person].position + }; + svgDraw.drawCircle(diagram2, circleData); + const labelData = { + x: 40, + y: yPos + 7, + fill: "#666", + text: person, + textMargin: conf2.boxTextMargin | 5 + }; + svgDraw.drawText(diagram2, labelData); + yPos += 20; + }); +} +const conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().journey; +const LEFT_MARGIN = conf.leftMargin; +const draw = function(text, id, version, diagObj) { + const conf2 = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().journey; + diagObj.db.clear(); + diagObj.parser.parse(text + "\n"); + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + bounds.init(); + const diagram2 = root.select("#" + id); + svgDraw.initGraphics(diagram2); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getDiagramTitle(); + const actorNames = diagObj.db.getActors(); + for (const member in actors) { + delete actors[member]; + } + let actorPos = 0; + actorNames.forEach((actorName) => { + actors[actorName] = { + color: conf2.actorColours[actorPos % conf2.actorColours.length], + position: actorPos + }; + actorPos++; + }); + drawActorLegend(diagram2); + bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50); + drawTasks(diagram2, tasks2, 0); + const box = bounds.getBounds(); + if (title) { + diagram2.append("text").text(title).attr("x", LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 25); + } + const height = box.stopy - box.starty + 2 * conf2.diagramMarginY; + const width = LEFT_MARGIN + box.stopx + 2 * conf2.diagramMarginX; + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.k)(diagram2, height, width, conf2.useMaxWidth); + diagram2.append("line").attr("x1", LEFT_MARGIN).attr("y1", conf2.height * 4).attr("x2", width - LEFT_MARGIN - 4).attr("y2", conf2.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + const extraVertForTitle = title ? 70 : 0; + diagram2.attr("viewBox", `${box.startx} -25 ${width} ${height + extraVertForTitle}`); + diagram2.attr("preserveAspectRatio", "xMinYMin meet"); + diagram2.attr("height", height + extraVertForTitle + 25); +}; +const bounds = { + data: { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }, + verticalPos: 0, + sequenceItems: [], + init: function() { + this.sequenceItems = []; + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }; + this.verticalPos = 0; + }, + updateVal: function(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + }, + updateBounds: function(startx, starty, stopx, stopy) { + const conf2 = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().journey; + const _self = this; + let cnt = 0; + function updateFn(type) { + return function updateItemBounds(item) { + cnt++; + const n = _self.sequenceItems.length - cnt + 1; + _self.updateVal(item, "starty", starty - n * conf2.boxMargin, Math.min); + _self.updateVal(item, "stopy", stopy + n * conf2.boxMargin, Math.max); + _self.updateVal(bounds.data, "startx", startx - n * conf2.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopx", stopx + n * conf2.boxMargin, Math.max); + if (!(type === "activation")) { + _self.updateVal(item, "startx", startx - n * conf2.boxMargin, Math.min); + _self.updateVal(item, "stopx", stopx + n * conf2.boxMargin, Math.max); + _self.updateVal(bounds.data, "starty", starty - n * conf2.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopy", stopy + n * conf2.boxMargin, Math.max); + } + }; + } + this.sequenceItems.forEach(updateFn()); + }, + insert: function(startx, starty, stopx, stopy) { + const _startx = Math.min(startx, stopx); + const _stopx = Math.max(startx, stopx); + const _starty = Math.min(starty, stopy); + const _stopy = Math.max(starty, stopy); + this.updateVal(bounds.data, "startx", _startx, Math.min); + this.updateVal(bounds.data, "starty", _starty, Math.min); + this.updateVal(bounds.data, "stopx", _stopx, Math.max); + this.updateVal(bounds.data, "stopy", _stopy, Math.max); + this.updateBounds(_startx, _starty, _stopx, _stopy); + }, + bumpVerticalPos: function(bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = this.verticalPos; + }, + getVerticalPos: function() { + return this.verticalPos; + }, + getBounds: function() { + return this.data; + } +}; +const fills = conf.sectionFills; +const textColours = conf.sectionColours; +const drawTasks = function(diagram2, tasks2, verticalPos) { + const conf2 = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().journey; + let lastSection = ""; + const sectionVHeight = conf2.height * 2 + conf2.diagramMarginY; + const taskPos = verticalPos + sectionVHeight; + let sectionNumber = 0; + let fill = "#CCC"; + let colour = "black"; + let num = 0; + for (const [i, task] of tasks2.entries()) { + if (lastSection !== task.section) { + fill = fills[sectionNumber % fills.length]; + num = sectionNumber % fills.length; + colour = textColours[sectionNumber % textColours.length]; + let taskInSectionCount = 0; + const currentSection2 = task.section; + for (let taskIndex = i; taskIndex < tasks2.length; taskIndex++) { + if (tasks2[taskIndex].section == currentSection2) { + taskInSectionCount = taskInSectionCount + 1; + } else { + break; + } + } + const section = { + x: i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN, + y: 50, + text: task.section, + fill, + num, + colour, + taskCount: taskInSectionCount + }; + svgDraw.drawSection(diagram2, section, conf2); + lastSection = task.section; + sectionNumber++; + } + const taskActors = task.people.reduce((acc, actorName) => { + if (actors[actorName]) { + acc[actorName] = actors[actorName]; + } + return acc; + }, {}); + task.x = i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN; + task.y = taskPos; + task.width = conf2.diagramMarginX; + task.height = conf2.diagramMarginY; + task.colour = colour; + task.fill = fill; + task.num = num; + task.actors = taskActors; + svgDraw.drawTask(diagram2, task, conf2); + bounds.insert(task.x, task.y, task.x + task.width + conf2.taskMargin, 300 + 5 * 30); + } +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles, + init: (cnf) => { + renderer.setConf(cnf.journey); + db.clear(); + } +}; + +//# sourceMappingURL=journeyDiagram-d38aa57d.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/492.bf72a5fb.js b/assets/js/492.bf72a5fb.js new file mode 100644 index 0000000000..631de9cf6c --- /dev/null +++ b/assets/js/492.bf72a5fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[492],{492:(t,e,n)=>{n.d(e,{diagram:()=>I});var i=n(3047),s=n(44),r=n(9373),a=n(1188),o=(n(7856),n(7484),n(7967),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,2],n=[1,5],i=[6,9,11,17,18,20,22,23,24,26],s=[1,15],r=[1,16],a=[1,17],o=[1,18],c=[1,19],l=[1,20],h=[1,24],u=[4,6,9,11,17,18,20,22,23,24,26],y={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,taskName:24,taskData:25,open_directive:26,type_directive:27,arg_directive:28,close_directive:29,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",24:"taskName",25:"taskData",26:"open_directive",27:"type_directive",28:"arg_directive",29:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 11:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 12:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 13:case 14:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 15:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 16:i.addTask(r[o-1],r[o]),this.$="task";break;case 18:i.parseDirective("%%{","open_directive");break;case 19:i.parseDirective(r[o],"type_directive");break;case 20:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 21:i.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,26:n},{1:[3]},t(i,[2,3],{5:6}),{3:7,4:e,7:3,12:4,26:n},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:s,18:r,20:a,22:o,23:c,24:l,26:n},{1:[2,2]},{14:22,15:[1,23],29:h},t([15,29],[2,19]),t(i,[2,8],{1:[2,1]}),t(i,[2,4]),{7:21,10:25,12:4,17:s,18:r,20:a,22:o,23:c,24:l,26:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,11]),{19:[1,26]},{21:[1,27]},t(i,[2,14]),t(i,[2,15]),{25:[1,28]},t(i,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},t(i,[2,5]),t(i,[2,12]),t(i,[2,13]),t(i,[2,16]),t(u,[2,9]),{14:32,29:h},{29:[2,20]},{11:[1,33]},t(u,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,h=1,u=r.slice.call(arguments,1),y=Object.create(this.lexer),p={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(p.yy[d]=this.yy[d]);y.setInput(t,p.yy),p.yy.lexer=y,p.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var f=y.yylloc;r.push(f);var g=y.options&&y.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,m,k,_,b,v,w,$,M,T={};;){if(m=n[n.length-1],this.defaultActions[m]?k=this.defaultActions[m]:(null==x&&(M=void 0,"number"!=typeof(M=i.pop()||y.lex()||h)&&(M instanceof Array&&(M=(i=M).pop()),M=e.symbols_[M]||M),x=M),k=a[m]&&a[m][x]),void 0===k||!k.length||!k[0]){var S="";for(b in $=[],a[m])this.terminals_[b]&&b>2&&$.push("'"+this.terminals_[b]+"'");S=y.showPosition?"Parse error on line "+(c+1)+":\n"+y.showPosition()+"\nExpecting "+$.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==h?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(S,{text:y.match,token:this.terminals_[x]||x,line:y.yylineno,loc:f,expected:$})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+x);switch(k[0]){case 1:n.push(x),s.push(y.yytext),r.push(y.yylloc),n.push(k[1]),x=null,l=y.yyleng,o=y.yytext,c=y.yylineno,f=y.yylloc;break;case 2:if(v=this.productions_[k[1]][1],T.$=s[s.length-v],T._$={first_line:r[r.length-(v||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(v||1)].first_column,last_column:r[r.length-1].last_column},g&&(T._$.range=[r[r.length-(v||1)].range[0],r[r.length-1].range[1]]),void 0!==(_=this.performAction.apply(T,[o,l,c,p.yy,k[1],s,r].concat(u))))return _;v&&(n=n.slice(0,-1*v*2),s=s.slice(0,-1*v),r=r.slice(0,-1*v)),n.push(this.productions_[k[1]][0]),s.push(T.$),r.push(T._$),w=a[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},p={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}};function d(){this.yy={}}return y.lexer=p,d.prototype=y,y.Parser=d,new d}());o.parser=o;const c=o;let l="";const h=[],u=[],y=[],p=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},d={parseDirective:function(t,e,n){i.m.parseDirective(this,t,e,n)},getConfig:()=>(0,s.g)().journey,clear:function(){h.length=0,u.length=0,l="",y.length=0,(0,s.y)()},setDiagramTitle:s.w,getDiagramTitle:s.x,setAccTitle:s.o,getAccTitle:s.p,setAccDescription:s.v,getAccDescription:s.q,addSection:function(t){l=t,h.push(t)},getSections:function(){return h},getTasks:function(){let t=p();let e=0;for(;!t&&e<100;)t=p(),e++;return u.push(...y),u},addTask:function(t,e){const n=e.substr(1).split(":");let i=0,s=[];1===n.length?(i=Number(n[0]),s=[]):(i=Number(n[0]),s=n[1].split(","));const r=s.map((t=>t.trim())),a={section:l,type:l,people:r,task:t,score:i};y.push(a)},addTaskOrg:function(t){const e={section:l,type:l,description:t,task:t,classes:[]};u.push(e)},getActors:function(){return function(){const t=[];return u.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},f=t=>`.label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ${t.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${t.textColor}\n }\n\n .legend {\n fill: ${t.textColor};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${t.textColor}\n }\n\n .face {\n ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${t.fillType0?`fill: ${t.fillType0}`:""};\n }\n .task-type-1, .section-type-1 {\n ${t.fillType0?`fill: ${t.fillType1}`:""};\n }\n .task-type-2, .section-type-2 {\n ${t.fillType0?`fill: ${t.fillType2}`:""};\n }\n .task-type-3, .section-type-3 {\n ${t.fillType0?`fill: ${t.fillType3}`:""};\n }\n .task-type-4, .section-type-4 {\n ${t.fillType0?`fill: ${t.fillType4}`:""};\n }\n .task-type-5, .section-type-5 {\n ${t.fillType0?`fill: ${t.fillType5}`:""};\n }\n .task-type-6, .section-type-6 {\n ${t.fillType0?`fill: ${t.fillType6}`:""};\n }\n .task-type-7, .section-type-7 {\n ${t.fillType0?`fill: ${t.fillType7}`:""};\n }\n\n .actor-0 {\n ${t.actor0?`fill: ${t.actor0}`:""};\n }\n .actor-1 {\n ${t.actor1?`fill: ${t.actor1}`:""};\n }\n .actor-2 {\n ${t.actor2?`fill: ${t.actor2}`:""};\n }\n .actor-3 {\n ${t.actor3?`fill: ${t.actor3}`:""};\n }\n .actor-4 {\n ${t.actor4?`fill: ${t.actor4}`:""};\n }\n .actor-5 {\n ${t.actor5?`fill: ${t.actor5}`:""};\n }\n`,g=function(t,e){const n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},x=function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},m=function(t,e){const n=e.text.replace(/<br\s*\/?>/gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),void 0!==e.class&&i.attr("class",e.class);const s=i.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(n),i};let k=-1;const _=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},b=function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:u}=c,y=t.split(/<br\s*\/?>/gi);for(let p=0;p<y.length;p++){const t=p*h-h*(y.length-1)/2,c=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",l).style("text-anchor","middle").style("font-size",h).style("font-family",u);c.append("tspan").attr("x",n+r/2).attr("dy",t).text(y[p]),c.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(c,o)}}function n(t,n,s,r,a,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",s).attr("y",r).attr("width",a).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,s,r,a,o,c,l),i(u,c)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),v={drawRect:g,drawCircle:x,drawSection:function(t,e,n){const i=t.append("g"),s=_();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=n.width*e.taskCount+n.diagramMarginX*(e.taskCount-1),s.height=n.height,s.class="journey-section section-type-"+e.num,s.rx=3,s.ry=3,g(i,s),b(n)(e.text,i,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},drawText:m,drawLabel:function(t,e){const n=t.append("polygon");var i,s,r,a,o;n.attr("points",(i=e.x,s=e.y,i+","+s+" "+(i+(r=50))+","+s+" "+(i+r)+","+(s+(a=20)-(o=7))+" "+(i+r-1.2*o)+","+(s+a)+" "+i+","+(s+a))),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,m(t,e)},drawTask:function(t,e,n){const i=e.x+n.width/2,s=t.append("g");k++;s.append("line").attr("id","task"+k).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),function(t,e){const n=15,i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),s=t.append("g");s.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),s.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),e.score>3?function(t){const i=(0,r.Nb1)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}(s):e.score<3?function(t){const i=(0,r.Nb1)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}(s):s.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(s,{cx:i,cy:300+30*(5-e.score),score:e.score});const a=_();a.x=e.x,a.y=e.y,a.fill=e.fill,a.width=n.width,a.height=n.height,a.class="task task-type-"+e.num,a.rx=3,a.ry=3,g(s,a);let o=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,i={cx:o,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};x(s,i),o+=10})),b(n)(e.task,s,a.x,a.y,a.width,a.height,{class:"task"},n,e.colour)},drawBackgroundRect:function(t,e){g(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},getTextObj:function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},getNoteRect:_,initGraphics:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")}},w={};const $=(0,s.g)().journey,M=$.leftMargin,T={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])},updateBounds:function(t,e,n,i){const r=(0,s.g)().journey,a=this;let o=0;var c;this.sequenceItems.forEach((function(s){o++;const l=a.sequenceItems.length-o+1;a.updateVal(s,"starty",e-l*r.boxMargin,Math.min),a.updateVal(s,"stopy",i+l*r.boxMargin,Math.max),a.updateVal(T.data,"startx",t-l*r.boxMargin,Math.min),a.updateVal(T.data,"stopx",n+l*r.boxMargin,Math.max),"activation"!==c&&(a.updateVal(s,"startx",t-l*r.boxMargin,Math.min),a.updateVal(s,"stopx",n+l*r.boxMargin,Math.max),a.updateVal(T.data,"starty",e-l*r.boxMargin,Math.min),a.updateVal(T.data,"stopy",i+l*r.boxMargin,Math.max))}))},insert:function(t,e,n,i){const s=Math.min(t,n),r=Math.max(t,n),a=Math.min(e,i),o=Math.max(e,i);this.updateVal(T.data,"startx",s,Math.min),this.updateVal(T.data,"starty",a,Math.min),this.updateVal(T.data,"stopx",r,Math.max),this.updateVal(T.data,"stopy",o,Math.max),this.updateBounds(s,a,r,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},S=$.sectionFills,E=$.sectionColours,A=function(t,e,n){const i=(0,s.g)().journey;let r="";const a=n+(2*i.height+i.diagramMarginY);let o=0,c="#CCC",l="black",h=0;for(const[s,u]of e.entries()){if(r!==u.section){c=S[o%S.length],h=o%S.length,l=E[o%E.length];let n=0;const a=u.section;for(let t=s;t<e.length&&e[t].section==a;t++)n+=1;const y={x:s*i.taskMargin+s*i.width+M,y:50,text:u.section,fill:c,num:h,colour:l,taskCount:n};v.drawSection(t,y,i),r=u.section,o++}const n=u.people.reduce(((t,e)=>(w[e]&&(t[e]=w[e]),t)),{});u.x=s*i.taskMargin+s*i.width+M,u.y=a,u.width=i.diagramMarginX,u.height=i.diagramMarginY,u.colour=l,u.fill=c,u.num=h,u.actors=n,v.drawTask(t,u,i),T.insert(u.x,u.y,u.x+u.width+i.taskMargin,450)}},C={setConf:function(t){Object.keys(t).forEach((function(e){$[e]=t[e]}))},draw:function(t,e,n,i){const o=(0,s.g)().journey;i.db.clear(),i.parser.parse(t+"\n");const c=(0,s.g)().securityLevel;let l;"sandbox"===c&&(l=(0,r.Ys)("#i"+e));const h="sandbox"===c?(0,r.Ys)(l.nodes()[0].contentDocument.body):(0,r.Ys)("body");T.init();const u=h.select("#"+e);v.initGraphics(u);const y=i.db.getTasks(),p=i.db.getDiagramTitle(),d=i.db.getActors();for(const s in w)delete w[s];let f=0;d.forEach((t=>{w[t]={color:o.actorColours[f%o.actorColours.length],position:f},f++})),function(t){const e=(0,s.g)().journey;let n=60;Object.keys(w).forEach((i=>{const s=w[i].color,r={cx:20,cy:n,r:7,fill:s,stroke:"#000",pos:w[i].position};v.drawCircle(t,r);const a={x:40,y:n+7,fill:"#666",text:i,textMargin:5|e.boxTextMargin};v.drawText(t,a),n+=20}))}(u),T.insert(0,0,M,50*Object.keys(w).length),A(u,y,0);const g=T.getBounds();p&&u.append("text").text(p).attr("x",M).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const x=g.stopy-g.starty+2*o.diagramMarginY,m=M+g.stopx+2*o.diagramMarginX;(0,a.k)(u,x,m,o.useMaxWidth),u.append("line").attr("x1",M).attr("y1",4*o.height).attr("x2",m-M-4).attr("y2",4*o.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const k=p?70:0;u.attr("viewBox",`${g.startx} -25 ${m} ${x+k}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",x+k+25)}},I={parser:c,db:d,renderer:C,styles:f,init:t=>{C.setConf(t.journey),d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/496ed8d5.7aa20f44.js b/assets/js/496ed8d5.7aa20f44.js new file mode 100644 index 0000000000..ca6a8f8e7e --- /dev/null +++ b/assets/js/496ed8d5.7aa20f44.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2206],{9094:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var a=n(7462),o=(n(7294),n(3905));n(5657);const i={sidebar_position:8,description:"eCalc FAQ"},r="FAQ / Troubleshooting",l={unversionedId:"about/getting_started/cli/faq",id:"about/getting_started/cli/faq",title:"FAQ / Troubleshooting",description:"eCalc FAQ",source:"@site/docs/about/getting_started/cli/faq.md",sourceDirName:"about/getting_started/cli",slug:"/about/getting_started/cli/faq",permalink:"/ecalc/docs/about/getting_started/cli/faq",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/cli/faq.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"eCalc FAQ"},sidebar:"about",previous:{title:"CLI",permalink:"/ecalc/docs/about/getting_started/cli/"},next:{title:"Python Library",permalink:"/ecalc/docs/about/getting_started/library/"}},s={},c=[{value:"Indentation errors",id:"indentation-errors",level:2},{value:"Error messages due to YAML read problems",id:"error-messages-due-to-yaml-read-problems",level:3},{value:"Error messages due to invalid eCalc configuration",id:"error-messages-due-to-invalid-ecalc-configuration",level:3},{value:"Proposed solution",id:"proposed-solution",level:3},{value:"Special characters in Unicode",id:"special-characters-in-unicode",level:2},{value:"Proposed solution",id:"proposed-solution-1",level:3}],u={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"faq--troubleshooting"},"FAQ / Troubleshooting"),(0,o.kt)("p",null,"While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages.\nThis page tries to explain some common error messages and proposes how to fix them."),(0,o.kt)("h2",{id:"indentation-errors"},"Indentation errors"),(0,o.kt)("p",null,"In YAML, the indentation is very important and specifies the level in the hierarchy for the input.\nIf you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors."),(0,o.kt)("h3",{id:"error-messages-due-to-yaml-read-problems"},"Error messages due to YAML read problems"),(0,o.kt)("p",null,"The following error messages are common when you have formatting issues in your YAML file:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-text"},"mapping values are not allowed here\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-text"},"while scanning a simple key in \"<setupfile.yml>\", line <n>, column <m>\ncould not find expected ':', line <n>, column <m>\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-text"},"while parsing a block mapping in <setupfile>, line <n>, column <m>\nexpected <block end>, but found '<block mapping start>'\n")),(0,o.kt)("h3",{id:"error-messages-due-to-invalid-ecalc-configuration"},"Error messages due to invalid eCalc configuration"),(0,o.kt)("p",null,"The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type\ndictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would\nindicate that the type is wrong because it is not a 'dict'/'list' or other type"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-text"},"None should be instance of 'dict'\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-text"},"None should be instance of 'list'\n")),(0,o.kt)("h3",{id:"proposed-solution"},"Proposed solution"),(0,o.kt)("p",null,"Check your YAML setup file for correct indentation and correct format of values for each eCalc key."),(0,o.kt)("h2",{id:"special-characters-in-unicode"},"Special characters in Unicode"),(0,o.kt)("p",null,"eCalc uses ",(0,o.kt)("a",{parentName:"p",href:"https://pypi.org/project/ruamel.yaml/"},"ruamel.yaml")," to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message."),(0,o.kt)("p",null,'One example of this is an unrecognized "',(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Byte_order_mark"},"BOM"),'" character in "',(0,o.kt)("a",{parentName:"p",href:"https://nl.wikipedia.org/wiki/UTF-8"},"UTF-8 Unicode"),'".'),(0,o.kt)("p",null,"Error message"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"while scanning a simple key in \"<setupfile.yml>\", line <n>, column 1\ncould not find expected ':', line <n>, column 1\n")),(0,o.kt)("h3",{id:"proposed-solution-1"},"Proposed solution"),(0,o.kt)("p",null,"Check the encoding of your setupfile (and inputfiles):"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ file <setupfile>.yml\n")),(0,o.kt)("p",null,'If the output of this is not "ASCII text", convert your file to "US-ASCII" using ',(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/iconv"},"iconv"),"."),(0,o.kt)("p",null,"Example when ",(0,o.kt)("inlineCode",{parentName:"p"},"<setupfile>.yml"),' is of type "UTF-8"'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o <new_setup_file_name_ascii>.yml <old_setup_file_name_utf-8>.yml\n")),(0,o.kt)("p",null,"Now try to run again using the new file ",(0,o.kt)("inlineCode",{parentName:"p"},"<new_setup_file_name_ascii>.yml"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4972.cd867224.js b/assets/js/4972.cd867224.js new file mode 100644 index 0000000000..2b2f7898b2 --- /dev/null +++ b/assets/js/4972.cd867224.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4972],{4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),o=n(5999),l=n(1944),r=n(179);function i(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/498bfcff.7ac403d3.js b/assets/js/498bfcff.7ac403d3.js new file mode 100644 index 0000000000..fcbee74d02 --- /dev/null +++ b/assets/js/498bfcff.7ac403d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[749],{8293:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>r});var a=n(7462),s=(n(7294),n(3905));n(5657);const o={title:"Fuel types",sidebar_position:5,description:"Guide on how to use fuel types"},i=void 0,l={unversionedId:"about/modelling/setup/fuel_types",id:"about/modelling/setup/fuel_types",title:"Fuel types",description:"Guide on how to use fuel types",source:"@site/docs/about/modelling/setup/fuel_types.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/fuel_types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/fuel_types.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Fuel types",sidebar_position:5,description:"Guide on how to use fuel types"},sidebar:"about",previous:{title:"Turbine modelling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling"},next:{title:"Variables",permalink:"/ecalc/docs/about/modelling/setup/variables"}},u={},r=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],p={toc:r},d="wrapper";function c(e){let{components:t,...n}=e;return(0,s.kt)(d,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("admonition",{type:"note"},(0,s.kt)("p",{parentName:"admonition"},"The ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," keyword is ",(0,s.kt)("strong",{parentName:"p"},"mandatory")," within the eCalc\u2122 YAML file.")),(0,s.kt)("p",null,"This part of the setup specifies the various fuel types and associated emissions\nused in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/installations/"},"INSTALLATIONS")," part of the setup by its name."),(0,s.kt)("p",null,"A fuel type can have a fuel-cost ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/PRICE"},"PRICE")," associated with\nits use. The use of fuel can lead to one or more emission types, specified in ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSIONS"},"EMISSIONS"),",\nwhich in turn can have associated costs."),(0,s.kt)("p",null,"You can optionally specify a ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY"),"."),(0,s.kt)("h2",{id:"format"},"Format"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL_TYPES:\n - NAME: <name_1>\n CATEGORY: <category_1>\n PRICE: <fuel price>\n EMISSIONS: <emissions data>\n - NAME: <name_2>\n CATEGORY: <category_2>\n PRICE: <fuel price>\n EMISSIONS: <emissions data>\n")),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("p",null,"This is a full example where there are 3 fuel type definitions, i.e., there are 3 different\nfuels defined that can be used in your ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/installations/"},"INSTALLATIONS"),"."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL_TYPES:\n - NAME: fuel_gas # Name of this fuel, use this when referencing this fuel in the FUEL specification in the INSTALLATIONS part\n PRICE: 1.5 # The price or sales value of the fuel\n EMISSIONS:\n - NAME: CO2 # Name of the emission type\n FACTOR: 2.15 # kg/Sm3\n TAX: 1.51 # NOK/Sm3\n QUOTA: 280 # NOK/ton\n - NAME: CH4\n FACTOR: 0.00091 # kg/Sm3\n - NAME: flare_gas\n PRICE: 1.5\n CATEGORY: FUEL_GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.73\n TAX: 1.51\n - NAME: CH4\n FACTOR: 0.00024\n - NAME: diesel\n CATEGORY: DIESEL\n PRICE: 9000 # NOK/m3\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.7085 # kg/l - input diesel usage in l/d\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4aa4fc36.d83f6b61.js b/assets/js/4aa4fc36.d83f6b61.js new file mode 100644 index 0000000000..421d9d29cb --- /dev/null +++ b/assets/js/4aa4fc36.d83f6b61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1044],{8622:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var i=n(7462),o=(n(7294),n(3905));n(5657);const a={title:"v8 to v8.1",description:"v8 to v8.1 migration",sidebar_position:1},r="v8 to v8.1",s={unversionedId:"about/migration_guides/v8_to_v81",id:"about/migration_guides/v8_to_v81",title:"v8 to v8.1",description:"v8 to v8.1 migration",source:"@site/docs/about/migration_guides/v8_to_v81.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8_to_v81",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8_to_v81.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"v8 to v8.1",description:"v8 to v8.1 migration",sidebar_position:1},sidebar:"about",previous:{title:"v7 to v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8"},next:{title:"v8.1 to v8.2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2"}},l={},d=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"Migration overview",id:"migration-overview",level:3},{value:"1. Changes to TIME_SERIES",id:"1-changes-to-time_series",level:3},{value:"2. Not possible to have different interpolation types for vectors within one file",id:"2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file",level:3},{value:"3. Empty data in time series columns no longer allowed",id:"3-empty-data-in-time-series-columns-no-longer-allowed",level:3},{value:"4. New LTP Category: STEAM-TURBINE-GENERATOR",id:"4--new-ltp-category-steam-turbine-generator",level:3}],m={toc:d},p="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,i.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"v8-to-v81"},"v8 to v8.1"),(0,o.kt)("p",null,"In this migration guide you will find:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("a",{parentName:"li",href:"#yaml-migration"},"YAML changes"))),(0,o.kt)("h2",{id:"yaml-migration"},"Yaml migration"),(0,o.kt)("h3",{id:"migration-overview"},"Migration overview"),(0,o.kt)("p",null,"This doc guides you through migrating an existing eCalc\u2122 model from version v8 to v8.1."),(0,o.kt)("p",null,"We try to make this as easy as possible, and provide a step-by-step migration guide."),(0,o.kt)("h3",{id:"1-changes-to-time_series"},"1. Changes to TIME_SERIES"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RATE_INTERPOLATION_TYPE")," is renamed to ",(0,o.kt)("a",{parentName:"li",href:"../references/keywords/INTERPOLATION_TYPE"},(0,o.kt)("inlineCode",{parentName:"a"},"INTERPOLATION_TYPE"))),(0,o.kt)("li",{parentName:"ul"},"New time series type: ",(0,o.kt)("inlineCode",{parentName:"li"},"DEFAULT")," with default ",(0,o.kt)("inlineCode",{parentName:"li"},"RIGHT")," interpolation"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RESERVOIR")," type is removed")),(0,o.kt)("p",null,"Previously, it looked like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES:\n - NAME: <time series reference name>\n # This is old\n TYPE: <MISCELLANEOUS/RESERVOIR>\n FILE: <path to file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n # This is old\n RATE_INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n")),(0,o.kt)("p",null,"But the new valid definition of time series in the yaml is now:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES:\n - NAME: <time series reference name>\n # This is new\n TYPE: <MISCELLANEOUS/DEFAULT>\n FILE: <path to file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n # This is new\n INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n")),(0,o.kt)("admonition",{type:"important"},(0,o.kt)("p",{parentName:"admonition"},"We have understood that the previous definitions lead to misunderstandings and errors. It is therefore of high importance\nthat you now go through the reservoir data timeseries one-by-one and make sure that the correct type and interpolation type\nis set. See below for the 2 possibilities of migrating from the old ",(0,o.kt)("inlineCode",{parentName:"p"},"RESERVOIR")," type.")),(0,o.kt)("p",null,"If you previously used the ",(0,o.kt)("inlineCode",{parentName:"p"},"RESERVOIR")," type, you know have 2 options. See below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES:\n - NAME: <time series reference name>\n # This is old\n TYPE: RESERVOIR\n ...\n")),(0,o.kt)("p",null,"If you know that the reservoir data comes from Centuries, and/or that the data is right-interpolated, then you should\nchange to the new ",(0,o.kt)("inlineCode",{parentName:"p"},"DEFAULT")," type, like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES:\n - NAME: <time series reference name>\n # This is new\n TYPE: DEFAULT\n ...\n")),(0,o.kt)("admonition",{type:"important"},(0,o.kt)("p",{parentName:"admonition"},"If you do NOT know the origin of the timeseries or whether it uses ",(0,o.kt)("inlineCode",{parentName:"p"},"LEFT")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"RIGHT")," interpolation, you ",(0,o.kt)("strong",{parentName:"p"},"MUST")," contact\nsomebody that can help you out to make this right. The consequences of doing it wrong is that the calculations is\neasily offset by 1 year.")),(0,o.kt)("h3",{id:"2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file"},"2. Not possible to have different interpolation types for vectors within one file"),(0,o.kt)("p",null,"Previously eCalc\u2122 tried to recognize vectors as rates- or non-rates for time series.\nHence, rate-vectors were set to use ",(0,o.kt)("inlineCode",{parentName:"p"},"LEFT")," interpolation type, or if the type was\nMISCELLANEOUS it was set to the method given by the user. If the vector was not recognized\nas a rate, the interpolation method was automatically set to ",(0,o.kt)("inlineCode",{parentName:"p"},"LINEAR"),", regardless of user input."),(0,o.kt)("p",null,"This behaviour is now changed:"),(0,o.kt)("admonition",{type:"important"},(0,o.kt)("p",{parentName:"admonition"},"eCalc\u2122 will no longer auto-detect rates and set interpolation type based on recognized\nrate vectors. If different vectors (e.g. pressures and rates) should be interpolated differently, they now need\nto be in separate files.")),(0,o.kt)("h3",{id:"3-empty-data-in-time-series-columns-no-longer-allowed"},"3. Empty data in time series columns no longer allowed"),(0,o.kt)("p",null,"Each column in a time series resource should have data for all time steps, eCalc\u2122 will now show an error if this is not the case.\nThe reason behind this is that it can be ambiguous to know whether missing data should be interpolated or considered as 0. Now\nusers will have to be explicit, and this will lead to fewer ambiguities and errors."),(0,o.kt)("h3",{id:"4--new-ltp-category-steam-turbine-generator"},"4. New LTP Category: STEAM-TURBINE-GENERATOR"),(0,o.kt)("p",null,"A new LTP requirement to report steam turbine generator consumption/generation. This affects the total generator production\nnegatively (reduced load), as some energy is provided through this steam turbine generator. It is therefore modelled as a consumer\nwith a negative load in order to subtract from the total energy provided by the generator set. "),(0,o.kt)("p",null,"The load on the steam turbine generator is reported separately in a new column in LTP Export."),(0,o.kt)("p",null,"Added new ",(0,o.kt)("a",{parentName:"p",href:"../references/keywords/CATEGORY"},"CATEGORY")," with name ",(0,o.kt)("em",{parentName:"p"},"STEAM-TURBINE-GENERATOR")," to report power generated by a steam turbine.\nShould be negative load to deduct from genset. See excerpt example below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: steamgen\n CATEGORY: STEAM-TURBINE-GENERATOR\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: -1.1 # MW\n")),(0,o.kt)("admonition",{type:"important"},(0,o.kt)("p",{parentName:"admonition"},"Set ",(0,o.kt)("strong",{parentName:"p"},"negative")," load for ",(0,o.kt)("inlineCode",{parentName:"p"},"STEAM-TURBINE-GENERATOR")," (similar to the way ",(0,o.kt)("inlineCode",{parentName:"p"},"OFFSHORE-WIND")," is being used)")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4b5a01f9.c57a62d7.js b/assets/js/4b5a01f9.c57a62d7.js new file mode 100644 index 0000000000..65b0db4159 --- /dev/null +++ b/assets/js/4b5a01f9.c57a62d7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3211],{8792:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>m,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>d,toc:()=>s});var o=t(7462),l=(t(7294),t(3905));t(5657);const a={title:"Fluid model",sidebar_position:1,description:"Selecting a fluid model in eCalc"},i="Fluid model",d={unversionedId:"about/modelling/setup/models/fluid_model",id:"about/modelling/setup/models/fluid_model",title:"Fluid model",description:"Selecting a fluid model in eCalc",source:"@site/docs/about/modelling/setup/models/fluid_model.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/fluid_model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/fluid_model.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Fluid model",sidebar_position:1,description:"Selecting a fluid model in eCalc"},sidebar:"about",previous:{title:"Models",permalink:"/ecalc/docs/about/modelling/setup/models/"},next:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"}},m={},s=[{value:"Fluid model using predefined composition",id:"fluid-model-using-predefined-composition",level:2},{value:"Format",id:"format",level:3},{value:"Examples",id:"examples",level:3},{value:"Fluid model with user-specified composition",id:"fluid-model-with-user-specified-composition",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example",level:3}],r={toc:s},u="wrapper";function p(e){let{components:n,...t}=e;return(0,l.kt)(u,(0,o.Z)({},r,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"fluid-model"},"Fluid model"),(0,l.kt)("p",null,"To calculate the energy usage related to compression of a natural gas, information about the composition is needed, i.e.\nwhich components it consist of and the (mole) fraction of each. Typical components for natural gas are alkanes such as\nmethane, ethane, propane, butane, pentane, hexane in addition to water, nitrogen and carbone dioxide. Alkanes with seven\nor more carbon atoms may occur, but these are often just part of the liquid (oil) phase and not significant in dry gas\ncompression."),(0,l.kt)("p",null,"As the fluid is going through the compressor in a fluid dynamic process, the enthalpy changes, resulting in a new state\nwith increased pressure and temperature, and decreased volume. To estimate these changes, an equation-of-state (EOS)\nmodel is used. The default EOS model in eCalc is SRK (Soave-Redlich-Kwong)."),(0,l.kt)("p",null,"The GERG models (GERG 2008) are used to calculate enthalpy, gamma and density, whilst other properties such as molar mass\nis based on either SRK or PR."),(0,l.kt)("p",null,"Available EOS models"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"SRK (Soave-Redlich-Kwong)"),(0,l.kt)("li",{parentName:"ul"},"PR (Peng-Robinson)"),(0,l.kt)("li",{parentName:"ul"},"GERG_SRK"),(0,l.kt)("li",{parentName:"ul"},"GERG_PR")),(0,l.kt)("h2",{id:"fluid-model-using-predefined-composition"},"Fluid model using predefined composition"),(0,l.kt)("p",null,"Available predefined fluid compositions (with mole weights) are"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"ULTRA_DRY (17.1 kg/kmol)"),(0,l.kt)("li",{parentName:"ul"},"DRY (18.3 kg/kmol)"),(0,l.kt)("li",{parentName:"ul"},"MEDIUM (19.4 kg/kmol)"),(0,l.kt)("li",{parentName:"ul"},"RICH (21.1 kg/kmol)"),(0,l.kt)("li",{parentName:"ul"},"ULTRA_RICH (24.6 kg/kmol)")),(0,l.kt)("h3",{id:"format"},"Format"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: <eos model>\n GAS_TYPE: <name of a predefined composition>\n")),(0,l.kt)("h3",{id:"examples"},"Examples"),(0,l.kt)("p",null,"Examples with predefined fluid"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: PR\n GAS_TYPE: ULTRA_DRY\n")),(0,l.kt)("p",null,"Example where EOS is defaulted to SRK and GAS_TYPE defaulted to MEDIUM"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n")),(0,l.kt)("h2",{id:"fluid-model-with-user-specified-composition"},"Fluid model with user-specified composition"),(0,l.kt)("p",null,"The composition is specified by setting the mole fraction of each component. Setting the mole fraction for ",(0,l.kt)("strong",{parentName:"p"},"methane is\nrequired"),", all other components are optional and will be set to 0 if not specified. If methane is not part of your\ncomposition, simply put 0.0 for it."),(0,l.kt)("p",null,"It is not important that the fractions sum to one as they will be normalized by eCalc. It is the relative amount of each\nthat will be important."),(0,l.kt)("h3",{id:"format-1"},"Format"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: <eos model>\n COMPOSITION:\n water: <mole fraction>\n nitrogen: <mole fraction>\n CO2: <mole fraction>\n methane: <mole fraction, required>\n ethane: <mole fraction>\n propane: <mole fraction>\n i_butane: <mole fraction>\n n_butane: <mole fraction>\n i_pentane: <mole fraction>\n n_pentane: <mole fraction>\n n_hexane: <mole fraction>\n")),(0,l.kt)("h3",{id:"example"},"Example"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: srk\n COMPOSITION:\n water: 0.1\n nitrogen: 0.74373\n CO2: 2.415619\n methane: 85.60145\n ethane: 6.707826\n propane: 2.611471\n i_butane: 0.45077\n n_butane: 0.691702\n i_pentane: 0.210714\n n_pentane: 0.197937\n n_hexane: 0.368786\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4b80f681.d8321757.js b/assets/js/4b80f681.d8321757.js new file mode 100644 index 0000000000..6f339922bb --- /dev/null +++ b/assets/js/4b80f681.d8321757.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9842],{6766:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>m});var r=s(7462),o=(s(7294),s(3905));s(5657);const a={title:"Variable speed compressor train model with multiple streams and pressures",sidebar_position:4},n=void 0,i={unversionedId:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",title:"Variable speed compressor train model with multiple streams and pressures",description:"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Variable speed compressor train model with multiple streams and pressures",sidebar_position:4},sidebar:"about",previous:{title:"Variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},next:{title:"Fixed speed pressure control",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/"}},l={},m=[{value:"Format",id:"format",level:2},{value:"Keyword usage",id:"keyword-usage",level:2},{value:"INTERSTAGE_PRESSURE_CONTROL",id:"interstage_pressure_control",level:3},{value:"Fixed pressure control",id:"fixed-pressure-control",level:3},{value:"Example",id:"example",level:2}],d={toc:m},p="wrapper";function u(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Compressor train with multiple streams and pressures",src:s(9317).Z,width:"1475",height:"659"})),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("p",null,"The model is defined under the main keyword ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," in the format:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n # All streams defined ahead of stage\n # Default outlet stream after last stage should not be defined\n STREAMS: # All inlet streams must have fluid models with the same eos model\n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING # NB: No fluid definition for outgoing streams!\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n CONTROL_MARGIN: <Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n - ...\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n")),(0,o.kt)("h2",{id:"keyword-usage"},"Keyword usage"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STREAMS"},"STREAMS")," is a list of all in- and out-going streams for the compressor train."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"The same equation of state (EOS) must be used for each INGOING stream fluid models"),(0,o.kt)("li",{parentName:"ul"},"OUTGOING fluid models ",(0,o.kt)("strong",{parentName:"li"},"cannot")," be specified."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"STAGES")," is a list of all the stages in the compressor train. "),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"For each stage, a temperature in Celsius must be defined. It\nis assumed that the gas is cooled down to this temperature ahead of the compression at this stage. "),(0,o.kt)("li",{parentName:"ul"},"A reference to a\ncompressor chart needs to be specified for each stage."),(0,o.kt)("li",{parentName:"ul"},"For the first stage, it is required to have ",(0,o.kt)("strong",{parentName:"li"},"at least")," one stream of INGOING type. In addition, ",(0,o.kt)("inlineCode",{parentName:"li"},"INTERSTAGE_CONTROL_PRESSURE")," cannot be used on the first stage."),(0,o.kt)("li",{parentName:"ul"},"Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream\nwill be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the\nmolar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will\nbe subtracted the rate of the outgoing stream."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"PRESSURE_DROP_AHEAD_OF_STAGE")," is optional, but if defined it will reduce the inlet pressure of that particular stage by a fixed value.\nAs of now, only a single value is supported - i.e. a time series cannot be used here.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"CONTROL_MARGIN")," is a surge control margin, see ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"Surge control margin for variable speed compressor chart"),".")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"CONTROL_MARGIN_UNIT")," is the unit of the surge control margin."))),(0,o.kt)("h3",{id:"interstage_pressure_control"},"INTERSTAGE_PRESSURE_CONTROL"),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"INTERSTAGE_CONTROL_PRESSURE")," may be specified for one (only one!) of the stages 2, ..., N. It may ",(0,o.kt)("strong",{parentName:"p"},"not")," be specified for the first stage. See ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},"INTERSTAGE_CONTROL_PRESSURE")," for more usage details")),(0,o.kt)("p",null,"This is optional but essentially when this is specified the compression train is split into two parts - before and after the ",(0,o.kt)("inlineCode",{parentName:"p"},"INTERSTAGE_CONTROL_PRESSURE"),". As all rates and pressures (suction, discharge and interstage) are known, each side of the compression train can be solved independently."),(0,o.kt)("p",null,"Thus, given this, the rotational speed needed to match the suction and interstage pressure can be found. This speed will be for the first section of the compression train. The same is done for the second part of the train, only here the rotational speed is found to match the interstage and discharge pressure, for the given rates."),(0,o.kt)("p",null,"The highest speed between the first and second parts of the train is then taken as the rotational speed of the compression train.\nThis speed will essentially be needed to meet the most demanding pressure interval.\nThe section with the lower rotational speed must then be run with a form of pressure control (see ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"},"UPSTREAM_PRESSURE_CONTROL"),"/",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"},"DOWNSTREAM_PRESSURE_CONTROL"),")."),(0,o.kt)("p",null,"In a given simulation, the section of the compression train that requires either upstream or downstream pressure control is not fixed. This means that for different time steps, the part of the train with the highest rotational speed is not set to either the first or second section. Thus, both pressure control methods must be specified but only one of them will be used for each time step."),(0,o.kt)("p",null,"Technically, the INTERSTAGE_PRESSURE_CONTROL may be set independent of where the streams are defined. I.e. it may be\ndefined at a stage where there is an in- or out-going stream defined, or at a stage where there is no defined stream.\nIn reality, the INTERSTAGE_PRESSURE_CONTROL is linked to a stream, for example an outgoing stream for export where the\nexport pressure is defined, and where the rest of the gas continues through the compressor train for example for\ninjection at a higher pressure."),(0,o.kt)("h3",{id:"fixed-pressure-control"},"Fixed pressure control"),(0,o.kt)("p",null,"The available pressure controls are"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"DOWNSTREAM_CHOKE"),(0,o.kt)("li",{parentName:"ul"},"UPSTREAM_CHOKE"),(0,o.kt)("li",{parentName:"ul"},"INDIVIDUAL_ASV_PRESSURE"),(0,o.kt)("li",{parentName:"ul"},"INDIVIDUAL_ASV_RATE"),(0,o.kt)("li",{parentName:"ul"},"COMMON_ASV")),(0,o.kt)("p",null,"The sub-train where the pressure control is used, is now modeling wise equal to a single speed train as the speed is\ndetermined from the other sub-train. The inlet and outlet pressures for a sub-train, may be either the suction pressure\nand the interstage control pressure or interstage control pressure and the discharge pressure, depending on which sub\npart governs the speed of the full train."),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/"},"FIXED PRESSURE CONTROL")," for more details."),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n")))}u.isMDXComponent=!0},9317:(e,t,s)=>{s.d(t,{Z:()=>r});const r=s.p+"assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png"}}]); \ No newline at end of file diff --git a/assets/js/4c3c1dc2.2c55e369.js b/assets/js/4c3c1dc2.2c55e369.js new file mode 100644 index 0000000000..7627a5c8a5 --- /dev/null +++ b/assets/js/4c3c1dc2.2c55e369.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6686],{8122:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>R,frontMatter:()=>n,metadata:()=>l,toc:()=>i});var o=r(7462),a=(r(7294),r(3905));r(5657);const n={},s="PRESSURE_CONTROL",l={unversionedId:"about/references/keywords/PRESSURE_CONTROL",id:"about/references/keywords/PRESSURE_CONTROL",title:"PRESSURE_CONTROL",description:"Description",source:"@site/docs/about/references/keywords/PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT"},next:{title:"PRICE",permalink:"/ecalc/docs/about/references/keywords/PRICE"}},c={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:i},E="wrapper";function R(e){let{components:t,...r}=e;return(0,a.kt)(E,(0,o.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"pressure_control"},"PRESSURE_CONTROL"),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"PRESSURE_CONTROL")," is required when a compressor model is defined. This dictates how the compressor will be controlled, the method for pressure control are as follows:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DOWNSTREAM_CHOKE (default)"),(0,a.kt)("li",{parentName:"ul"},"UPSTREAM_CHOKE"),(0,a.kt)("li",{parentName:"ul"},"INDIVIDUAL_ASV_PRESSURE"),(0,a.kt)("li",{parentName:"ul"},"INDIVIDUAL_ASV_RATE"),(0,a.kt)("li",{parentName:"ul"},"COMMON_ASV"),(0,a.kt)("li",{parentName:"ul"},"NONE")),(0,a.kt)("p",null,"Further description on how each pressure control method works can be found in ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},"COMPRESSOR MODELLING")),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: <compressor model type>\n ...\n PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: variable_compressor\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n ...\n PRESSURE_CONTROL: INDIVIDUAL_ASV_PRESSURE\n")))}R.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4da8ac19.a539a450.js b/assets/js/4da8ac19.a539a450.js new file mode 100644 index 0000000000..99fad96425 --- /dev/null +++ b/assets/js/4da8ac19.a539a450.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6038],{4227:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>E});var a=t(7462),r=(t(7294),t(3905));t(5657);const o={},i="EFFICIENCY",s={unversionedId:"about/references/keywords/EFFICIENCY",id:"about/references/keywords/EFFICIENCY",title:"EFFICIENCY",description:"Description",source:"@site/docs/about/references/keywords/EFFICIENCY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EFFICIENCY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"},next:{title:"ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"}},l={},E=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"COMPRESSORS",id:"compressors",level:3},{value:"PUMPS",id:"pumps",level:3},{value:"Example",id:"example",level:2}],c={toc:E},p="wrapper";function d(e){let{components:n,...t}=e;return(0,r.kt)(p,(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"efficiency"},"EFFICIENCY"),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"EFFICIENCY")," is a keyword that is used defining ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},"PUMP")," and ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"COMPRESSOR CHARTS"),".\nEfficiency can either be given as a fraction or percentage."),(0,r.kt)("p",null,"For compressors, it is used in two separate ways under the ",(0,r.kt)("inlineCode",{parentName:"p"},"MODELS")," or section:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Defining the ",(0,r.kt)("inlineCode",{parentName:"li"},"UNITS")," of ",(0,r.kt)("inlineCode",{parentName:"li"},"EFFICIENCY")),(0,r.kt)("li",{parentName:"ul"},"Defining the set of values for ",(0,r.kt)("inlineCode",{parentName:"li"},"EFFICIENCY")," under ",(0,r.kt)("inlineCode",{parentName:"li"},"CURVES")," section. Here, this ",(0,r.kt)("strong",{parentName:"li"},"must")," be given as a set of values whose length (number of variables) match the correlating ",(0,r.kt)("inlineCode",{parentName:"li"},"HEAD")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"RATE")," values.")),(0,r.kt)("p",null,"For pumps, it is defined under the ",(0,r.kt)("inlineCode",{parentName:"p"},"FACILITY_INPUTS")," section."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("h3",{id:"compressors"},"COMPRESSORS"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <compressor chart name>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: <compressor chart type>\n UNITS:\n ...\n EFFICIENCY: <FRACTION or PERCENTAGE>\n CURVES:\n ...\n EFFICIENCY: <set of values>\n")),(0,r.kt)("h3",{id:"pumps"},"PUMPS"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: <FACILITY_INPUT_NAME>\n FILE: <path_to_file.csv>\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n ...\n EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4ee97ba8.139e1f70.js b/assets/js/4ee97ba8.139e1f70.js new file mode 100644 index 0000000000..4cd1871c0b --- /dev/null +++ b/assets/js/4ee97ba8.139e1f70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1668],{1792:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var n=o(7462),r=(o(7294),o(3905));o(5657);const i={title:"Reference documentation",sidebar_position:999,description:"Getting started with eCalc"},a=void 0,c={unversionedId:"about/references/index",id:"about/references/index",title:"Reference documentation",description:"Getting started with eCalc",source:"@site/docs/about/references/index.md",sourceDirName:"about/references",slug:"/about/references/",permalink:"/ecalc/docs/about/references/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/index.md",tags:[],version:"current",sidebarPosition:999,frontMatter:{title:"Reference documentation",sidebar_position:999,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"Drogon model",permalink:"/ecalc/docs/about/modelling/examples/drogon"},next:{title:"YAML keywords",permalink:"/ecalc/docs/about/references/keywords/"}},s={},d=[],u={toc:d},l="wrapper";function m(e){let{components:t,...o}=e;return(0,r.kt)(l,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5001.d122ea9e.js b/assets/js/5001.d122ea9e.js new file mode 100644 index 0000000000..32db01e618 --- /dev/null +++ b/assets/js/5001.d122ea9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5001],{5001:(t,e,n)=>{n.d(e,{d:()=>_,p:()=>o,s:()=>B});var i=n(9373),u=n(44),s=n(1188),r=n(3047),a=function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,3],n=[1,7],i=[1,8],u=[1,9],s=[1,10],r=[1,13],a=[1,12],o=[1,16,25],c=[1,20],l=[1,32],h=[1,33],A=[1,34],p=[1,48],d=[1,39],y=[1,37],E=[1,38],C=[1,44],g=[1,45],F=[1,40],m=[1,41],k=[1,42],f=[1,43],D=[1,49],_=[1,50],B=[1,51],b=[1,52],T=[16,25],S=[1,66],v=[1,67],N=[1,68],L=[1,69],$=[1,70],I=[1,71],O=[1,72],x=[1,82],R=[16,25,28,29,36,49,50,64,65,66,67,68,69,70,75,77],w=[16,25,28,29,34,36,49,50,55,64,65,66,67,68,69,70,75,77,92,93,94,95],P=[5,8,9,10,11,16,19,23,25],G=[29,92,93,94,95],U=[29,69,70,92,93,94,95],M=[29,64,65,66,67,68,92,93,94,95],Y=[1,96],K=[16,25,49,50],z=[16,25,36],Q={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statments:5,direction:6,directive:7,direction_tb:8,direction_bt:9,direction_rl:10,direction_lr:11,graphConfig:12,openDirective:13,typeDirective:14,closeDirective:15,NEWLINE:16,":":17,argDirective:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,CLASS_DIAGRAM:23,statements:24,EOF:25,statement:26,classLabel:27,SQS:28,STR:29,SQE:30,className:31,alphaNumToken:32,classLiteralName:33,GENERICTYPE:34,relationStatement:35,LABEL:36,classStatement:37,methodStatement:38,annotationStatement:39,clickStatement:40,cssClassStatement:41,noteStatement:42,acc_title:43,acc_title_value:44,acc_descr:45,acc_descr_value:46,acc_descr_multiline_value:47,classIdentifier:48,STYLE_SEPARATOR:49,STRUCT_START:50,members:51,STRUCT_STOP:52,CLASS:53,ANNOTATION_START:54,ANNOTATION_END:55,MEMBER:56,SEPARATOR:57,relation:58,NOTE_FOR:59,noteText:60,NOTE:61,relationType:62,lineType:63,AGGREGATION:64,EXTENSION:65,COMPOSITION:66,DEPENDENCY:67,LOLLIPOP:68,LINE:69,DOTTED_LINE:70,CALLBACK:71,LINK:72,LINK_TARGET:73,CLICK:74,CALLBACK_NAME:75,CALLBACK_ARGS:76,HREF:77,CSSCLASS:78,commentToken:79,textToken:80,graphCodeTokens:81,textNoTagsToken:82,TAGSTART:83,TAGEND:84,"==":85,"--":86,PCT:87,DEFAULT:88,SPACE:89,MINUS:90,keywords:91,UNICODE_TEXT:92,NUM:93,ALPHA:94,BQUOTE_STR:95,$accept:0,$end:1},terminals_:{2:"error",5:"statments",8:"direction_tb",9:"direction_bt",10:"direction_rl",11:"direction_lr",16:"NEWLINE",17:":",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",23:"CLASS_DIAGRAM",25:"EOF",28:"SQS",29:"STR",30:"SQE",34:"GENERICTYPE",36:"LABEL",43:"acc_title",44:"acc_title_value",45:"acc_descr",46:"acc_descr_value",47:"acc_descr_multiline_value",49:"STYLE_SEPARATOR",50:"STRUCT_START",52:"STRUCT_STOP",53:"CLASS",54:"ANNOTATION_START",55:"ANNOTATION_END",56:"MEMBER",57:"SEPARATOR",59:"NOTE_FOR",61:"NOTE",64:"AGGREGATION",65:"EXTENSION",66:"COMPOSITION",67:"DEPENDENCY",68:"LOLLIPOP",69:"LINE",70:"DOTTED_LINE",71:"CALLBACK",72:"LINK",73:"LINK_TARGET",74:"CLICK",75:"CALLBACK_NAME",76:"CALLBACK_ARGS",77:"HREF",78:"CSSCLASS",81:"graphCodeTokens",83:"TAGSTART",84:"TAGEND",85:"==",86:"--",87:"PCT",88:"DEFAULT",89:"SPACE",90:"MINUS",91:"keywords",92:"UNICODE_TEXT",93:"NUM",94:"ALPHA",95:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[3,1],[3,2],[6,1],[6,1],[6,1],[6,1],[4,1],[7,4],[7,6],[13,1],[14,1],[18,1],[15,1],[12,4],[24,1],[24,2],[24,3],[27,3],[31,1],[31,1],[31,2],[31,2],[31,2],[26,1],[26,2],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,2],[26,2],[26,1],[37,1],[37,3],[37,4],[37,6],[48,2],[48,3],[39,4],[51,1],[51,2],[38,1],[38,2],[38,1],[38,1],[35,3],[35,4],[35,4],[35,5],[42,3],[42,2],[58,3],[58,2],[58,2],[58,1],[62,1],[62,1],[62,1],[62,1],[62,1],[63,1],[63,1],[40,3],[40,4],[40,3],[40,4],[40,4],[40,5],[40,3],[40,4],[40,4],[40,5],[40,3],[40,4],[40,4],[40,5],[41,3],[79,1],[79,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[82,1],[82,1],[82,1],[82,1],[32,1],[32,1],[32,1],[33,1],[60,1]],performAction:function(t,e,n,i,u,s,r){var a=s.length-1;switch(u){case 5:i.setDirection("TB");break;case 6:i.setDirection("BT");break;case 7:i.setDirection("RL");break;case 8:i.setDirection("LR");break;case 12:i.parseDirective("%%{","open_directive");break;case 13:i.parseDirective(s[a],"type_directive");break;case 14:s[a]=s[a].trim().replace(/'/g,'"'),i.parseDirective(s[a],"arg_directive");break;case 15:i.parseDirective("}%%","close_directive","class");break;case 20:this.$=s[a-1];break;case 21:case 22:this.$=s[a];break;case 23:this.$=s[a-1]+s[a];break;case 24:case 25:this.$=s[a-1]+"~"+s[a];break;case 26:i.addRelation(s[a]);break;case 27:s[a-1].title=i.cleanupLabel(s[a]),i.addRelation(s[a-1]);break;case 36:this.$=s[a].trim(),i.setAccTitle(this.$);break;case 37:case 38:this.$=s[a].trim(),i.setAccDescription(this.$);break;case 40:i.setCssClass(s[a-2],s[a]);break;case 41:i.addMembers(s[a-3],s[a-1]);break;case 42:i.setCssClass(s[a-5],s[a-3]),i.addMembers(s[a-5],s[a-1]);break;case 43:this.$=s[a],i.addClass(s[a]);break;case 44:this.$=s[a-1],i.addClass(s[a-1]),i.setClassLabel(s[a-1],s[a]);break;case 45:i.addAnnotation(s[a],s[a-2]);break;case 46:this.$=[s[a]];break;case 47:s[a].push(s[a-1]),this.$=s[a];break;case 48:case 50:case 51:break;case 49:i.addMember(s[a-1],i.cleanupLabel(s[a]));break;case 52:this.$={id1:s[a-2],id2:s[a],relation:s[a-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:s[a-3],id2:s[a],relation:s[a-1],relationTitle1:s[a-2],relationTitle2:"none"};break;case 54:this.$={id1:s[a-3],id2:s[a],relation:s[a-2],relationTitle1:"none",relationTitle2:s[a-1]};break;case 55:this.$={id1:s[a-4],id2:s[a],relation:s[a-2],relationTitle1:s[a-3],relationTitle2:s[a-1]};break;case 56:i.addNote(s[a],s[a-1]);break;case 57:i.addNote(s[a]);break;case 58:this.$={type1:s[a-2],type2:s[a],lineType:s[a-1]};break;case 59:this.$={type1:"none",type2:s[a],lineType:s[a-1]};break;case 60:this.$={type1:s[a-1],type2:"none",lineType:s[a]};break;case 61:this.$={type1:"none",type2:"none",lineType:s[a]};break;case 62:this.$=i.relationType.AGGREGATION;break;case 63:this.$=i.relationType.EXTENSION;break;case 64:this.$=i.relationType.COMPOSITION;break;case 65:this.$=i.relationType.DEPENDENCY;break;case 66:this.$=i.relationType.LOLLIPOP;break;case 67:this.$=i.lineType.LINE;break;case 68:this.$=i.lineType.DOTTED_LINE;break;case 69:case 75:this.$=s[a-2],i.setClickEvent(s[a-1],s[a]);break;case 70:case 76:this.$=s[a-3],i.setClickEvent(s[a-2],s[a-1]),i.setTooltip(s[a-2],s[a]);break;case 71:case 79:this.$=s[a-2],i.setLink(s[a-1],s[a]);break;case 72:case 80:this.$=s[a-3],i.setLink(s[a-2],s[a-1],s[a]);break;case 73:case 81:this.$=s[a-3],i.setLink(s[a-2],s[a-1]),i.setTooltip(s[a-2],s[a]);break;case 74:case 82:this.$=s[a-4],i.setLink(s[a-3],s[a-2],s[a]),i.setTooltip(s[a-3],s[a-1]);break;case 77:this.$=s[a-3],i.setClickEvent(s[a-2],s[a-1],s[a]);break;case 78:this.$=s[a-4],i.setClickEvent(s[a-3],s[a-2],s[a-1]),i.setTooltip(s[a-3],s[a]);break;case 83:i.setCssClass(s[a-1],s[a])}},table:[{3:1,4:2,5:e,6:4,7:5,8:n,9:i,10:u,11:s,12:6,13:11,19:r,23:a},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{3:14,4:2,5:e,6:4,7:5,8:n,9:i,10:u,11:s,12:6,13:11,19:r,23:a},{1:[2,9]},t(o,[2,5]),t(o,[2,6]),t(o,[2,7]),t(o,[2,8]),{14:15,20:[1,16]},{16:[1,17]},{20:[2,12]},{1:[2,4]},{15:18,17:[1,19],22:c},t([17,22],[2,13]),{6:31,7:30,8:n,9:i,10:u,11:s,13:11,19:r,24:21,26:22,31:35,32:46,33:47,35:23,37:24,38:25,39:26,40:27,41:28,42:29,43:l,45:h,47:A,48:36,53:p,54:d,56:y,57:E,59:C,61:g,71:F,72:m,74:k,78:f,92:D,93:_,94:B,95:b},{16:[1,53]},{18:54,21:[1,55]},{16:[2,15]},{25:[1,56]},{16:[1,57],25:[2,17]},t(T,[2,26],{36:[1,58]}),t(T,[2,28]),t(T,[2,29]),t(T,[2,30]),t(T,[2,31]),t(T,[2,32]),t(T,[2,33]),t(T,[2,34]),t(T,[2,35]),{44:[1,59]},{46:[1,60]},t(T,[2,38]),t(T,[2,48],{58:61,62:64,63:65,29:[1,62],36:[1,63],64:S,65:v,66:N,67:L,68:$,69:I,70:O}),t(T,[2,39],{49:[1,73],50:[1,74]}),t(T,[2,50]),t(T,[2,51]),{32:75,92:D,93:_,94:B},{31:76,32:46,33:47,92:D,93:_,94:B,95:b},{31:77,32:46,33:47,92:D,93:_,94:B,95:b},{31:78,32:46,33:47,92:D,93:_,94:B,95:b},{29:[1,79]},{31:80,32:46,33:47,92:D,93:_,94:B,95:b},{29:x,60:81},t(R,[2,21],{32:46,33:47,31:83,34:[1,84],92:D,93:_,94:B,95:b}),t(R,[2,22],{34:[1,85]}),{31:86,32:46,33:47,92:D,93:_,94:B,95:b},t(w,[2,97]),t(w,[2,98]),t(w,[2,99]),t([16,25,28,29,34,36,49,50,64,65,66,67,68,69,70,75,77],[2,100]),t(P,[2,10]),{15:87,22:c},{22:[2,14]},{1:[2,16]},{6:31,7:30,8:n,9:i,10:u,11:s,13:11,19:r,24:88,25:[2,18],26:22,31:35,32:46,33:47,35:23,37:24,38:25,39:26,40:27,41:28,42:29,43:l,45:h,47:A,48:36,53:p,54:d,56:y,57:E,59:C,61:g,71:F,72:m,74:k,78:f,92:D,93:_,94:B,95:b},t(T,[2,27]),t(T,[2,36]),t(T,[2,37]),{29:[1,90],31:89,32:46,33:47,92:D,93:_,94:B,95:b},{58:91,62:64,63:65,64:S,65:v,66:N,67:L,68:$,69:I,70:O},t(T,[2,49]),{63:92,69:I,70:O},t(G,[2,61],{62:93,64:S,65:v,66:N,67:L,68:$}),t(U,[2,62]),t(U,[2,63]),t(U,[2,64]),t(U,[2,65]),t(U,[2,66]),t(M,[2,67]),t(M,[2,68]),{32:94,92:D,93:_,94:B},{51:95,56:Y},{55:[1,97]},{29:[1,98]},{29:[1,99]},{75:[1,100],77:[1,101]},{32:102,92:D,93:_,94:B},{29:x,60:103},t(T,[2,57]),t(T,[2,101]),t(R,[2,23]),t(R,[2,24]),t(R,[2,25]),t(K,[2,43],{27:104,28:[1,105]}),{16:[1,106]},{25:[2,19]},t(z,[2,52]),{31:107,32:46,33:47,92:D,93:_,94:B,95:b},{29:[1,109],31:108,32:46,33:47,92:D,93:_,94:B,95:b},t(G,[2,60],{62:110,64:S,65:v,66:N,67:L,68:$}),t(G,[2,59]),t(T,[2,40],{50:[1,111]}),{52:[1,112]},{51:113,52:[2,46],56:Y},{31:114,32:46,33:47,92:D,93:_,94:B,95:b},t(T,[2,69],{29:[1,115]}),t(T,[2,71],{29:[1,117],73:[1,116]}),t(T,[2,75],{29:[1,118],76:[1,119]}),t(T,[2,79],{29:[1,121],73:[1,120]}),t(T,[2,83]),t(T,[2,56]),t(K,[2,44]),{29:[1,122]},t(P,[2,11]),t(z,[2,54]),t(z,[2,53]),{31:123,32:46,33:47,92:D,93:_,94:B,95:b},t(G,[2,58]),{51:124,56:Y},t(T,[2,41]),{52:[2,47]},t(T,[2,45]),t(T,[2,70]),t(T,[2,72]),t(T,[2,73],{73:[1,125]}),t(T,[2,76]),t(T,[2,77],{29:[1,126]}),t(T,[2,80]),t(T,[2,81],{73:[1,127]}),{30:[1,128]},t(z,[2,55]),{52:[1,129]},t(T,[2,74]),t(T,[2,78]),t(T,[2,82]),t(K,[2,20]),t(T,[2,42])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],6:[2,9],13:[2,12],14:[2,4],20:[2,15],55:[2,14],56:[2,16],88:[2,19],113:[2,47]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],u=[null],s=[],r=this.table,a="",o=0,c=0,l=1,h=s.slice.call(arguments,1),A=Object.create(this.lexer),p={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(p.yy[d]=this.yy[d]);A.setInput(t,p.yy),p.yy.lexer=A,p.yy.parser=this,void 0===A.yylloc&&(A.yylloc={});var y=A.yylloc;s.push(y);var E=A.options&&A.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var C,g,F,m,k,f,D,_,B,b={};;){if(g=n[n.length-1],this.defaultActions[g]?F=this.defaultActions[g]:(null==C&&(B=void 0,"number"!=typeof(B=i.pop()||A.lex()||l)&&(B instanceof Array&&(B=(i=B).pop()),B=e.symbols_[B]||B),C=B),F=r[g]&&r[g][C]),void 0===F||!F.length||!F[0]){var T="";for(k in _=[],r[g])this.terminals_[k]&&k>2&&_.push("'"+this.terminals_[k]+"'");T=A.showPosition?"Parse error on line "+(o+1)+":\n"+A.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[C]||C)+"'":"Parse error on line "+(o+1)+": Unexpected "+(C==l?"end of input":"'"+(this.terminals_[C]||C)+"'"),this.parseError(T,{text:A.match,token:this.terminals_[C]||C,line:A.yylineno,loc:y,expected:_})}if(F[0]instanceof Array&&F.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+C);switch(F[0]){case 1:n.push(C),u.push(A.yytext),s.push(A.yylloc),n.push(F[1]),C=null,c=A.yyleng,a=A.yytext,o=A.yylineno,y=A.yylloc;break;case 2:if(f=this.productions_[F[1]][1],b.$=u[u.length-f],b._$={first_line:s[s.length-(f||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(f||1)].first_column,last_column:s[s.length-1].last_column},E&&(b._$.range=[s[s.length-(f||1)].range[0],s[s.length-1].range[1]]),void 0!==(m=this.performAction.apply(b,[a,c,o,p.yy,F[1],u,s].concat(h))))return m;f&&(n=n.slice(0,-1*f*2),u=u.slice(0,-1*f),s=s.slice(0,-1*f)),n.push(this.productions_[F[1]][0]),u.push(b.$),s.push(b._$),D=r[n[n.length-2]][n[n.length-1]],n.push(D);break;case 3:return!0}}return!0}},j={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var u=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[u[0],u[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,u;if(this.options.backtrack_lexer&&(u={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(u.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var s in u)this[s]=u[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var u=this._currentRules(),s=0;s<u.length;s++)if((n=this._input.match(this.rules[u[s]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,u[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,u[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:case 10:case 19:case 27:break;case 11:return this.begin("acc_title"),43;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),45;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 39:case 42:case 45:case 48:case 51:case 54:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 16;case 20:case 21:return 23;case 22:return this.begin("struct"),50;case 23:return"EDGE_STATE";case 24:return"EOF_IN_STRUCT";case 25:return"OPEN_IN_STRUCT";case 26:return this.popState(),52;case 28:return"MEMBER";case 29:return 53;case 30:return 78;case 31:return 71;case 32:return 72;case 33:return 74;case 34:return 59;case 35:return 61;case 36:return 54;case 37:return 55;case 38:this.begin("generic");break;case 40:return"GENERICTYPE";case 41:this.begin("string");break;case 43:return"STR";case 44:this.begin("bqstring");break;case 46:return"BQUOTE_STR";case 47:this.begin("href");break;case 49:return 77;case 50:this.begin("callback_name");break;case 52:this.popState(),this.begin("callback_args");break;case 53:return 75;case 55:return 76;case 56:case 57:case 58:case 59:return 73;case 60:case 61:return 65;case 62:case 63:return 67;case 64:return 66;case 65:return 64;case 66:return 68;case 67:return 69;case 68:return 70;case 69:return 36;case 70:return 49;case 71:return 90;case 72:return"DOT";case 73:return"PLUS";case 74:return 87;case 75:case 76:return"EQUALS";case 77:return 94;case 78:return 28;case 79:return 30;case 80:return"PUNCTUATION";case 81:return 93;case 82:return 92;case 83:return 89;case 84:return 25}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:\[\*\])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\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]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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-\u0C33\u0C35-\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\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\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\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\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])/,/^(?:\s)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[54,55],inclusive:!1},callback_name:{rules:[51,52,53],inclusive:!1},href:{rules:[48,49],inclusive:!1},struct:{rules:[23,24,25,26,27,28],inclusive:!1},generic:{rules:[39,40],inclusive:!1},bqstring:{rules:[45,46],inclusive:!1},string:{rules:[42,43],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,29,30,31,32,33,34,35,36,37,38,41,44,47,50,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],inclusive:!0}}};function X(){this.yy={}}return Q.lexer=j,X.prototype=Q,Q.Parser=X,new X}();a.parser=a;const o=a,c="classId-";let l=[],h={},A=[],p=0,d=[];const y=t=>u.e.sanitizeText(t,(0,u.g)()),E=function(t){let e="",n=t;if(t.indexOf("~")>0){const i=t.split("~");n=y(i[0]),e=y(i[1])}return{className:n,type:e}},C=function(t){const e=E(t);void 0===h[e.className]&&(h[e.className]={id:e.className,type:e.type,label:e.className,cssClasses:[],methods:[],members:[],annotations:[],domId:c+e.className+"-"+p},p++)},g=function(t){if(t in h)return h[t].domId;throw new Error("Class not found: "+t)},F=function(t,e){const n=E(t).className,i=h[n];if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?i.annotations.push(y(t.substring(2,t.length-2))):t.indexOf(")")>0?i.methods.push(y(t)):t&&i.members.push(y(t))}},m=function(t,e){t.split(",").forEach((function(t){let n=t;t[0].match(/\d/)&&(n=c+n),void 0!==h[n]&&h[n].cssClasses.push(e)}))},k=function(t,e,n){if("loose"!==(0,u.g)().securityLevel)return;if(void 0===e)return;const i=t;if(void 0!==h[i]){const t=g(i);let u=[];if("string"==typeof n){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<u.length;t++){let e=u[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),u[t]=e}}0===u.length&&u.push(t),d.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){s.u.runFunc(e,...u)}),!1)}))}},f=function(t){let e=(0,i.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,i.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,i.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,i.Ys)(this);if(null===t.attr("title"))return;const n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,i.Ys)(this).classed("hover",!1)}))};d.push(f);let D="TB";const _={parseDirective:function(t,e,n){r.m.parseDirective(this,t,e,n)},setAccTitle:u.o,getAccTitle:u.p,getAccDescription:u.q,setAccDescription:u.v,getConfig:()=>(0,u.g)().class,addClass:C,bindFunctions:function(t){d.forEach((function(e){e(t)}))},clear:function(){l=[],h={},A=[],d=[],d.push(f),(0,u.y)()},getClass:function(t){return h[t]},getClasses:function(){return h},getNotes:function(){return A},addAnnotation:function(t,e){const n=E(t).className;h[n].annotations.push(e)},addNote:function(t,e){const n={id:`note${A.length}`,class:e,text:t};A.push(n)},getRelations:function(){return l},addRelation:function(t){u.l.debug("Adding relation: "+JSON.stringify(t)),C(t.id1),C(t.id2),t.id1=E(t.id1).className,t.id2=E(t.id2).className,t.relationTitle1=u.e.sanitizeText(t.relationTitle1.trim(),(0,u.g)()),t.relationTitle2=u.e.sanitizeText(t.relationTitle2.trim(),(0,u.g)()),l.push(t)},getDirection:()=>D,setDirection:t=>{D=t},addMember:F,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((e=>F(t,e))))},cleanupLabel:function(t){return t.startsWith(":")&&(t=t.substring(1)),y(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){k(t,e,n),h[t].haveCallback=!0})),m(t,"clickable")},setCssClass:m,setLink:function(t,e,n){const i=(0,u.g)();t.split(",").forEach((function(t){let u=t;t[0].match(/\d/)&&(u=c+u),void 0!==h[u]&&(h[u].link=s.u.formatUrl(e,i),"sandbox"===i.securityLevel?h[u].linkTarget="_top":h[u].linkTarget="string"==typeof n?y(n):"_blank")})),m(t,"clickable")},getTooltip:function(t){return h[t].tooltip},setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(h[t].tooltip=y(e))}))},lookUpDomId:g,setDiagramTitle:u.w,getDiagramTitle:u.x,setClassLabel:function(t,e){e&&(e=y(e));const{className:n}=E(t);h[n].label=e}},B=t=>`g.classGroup text {\n fill: ${t.nodeBorder};\n fill: ${t.classText};\n stroke: none;\n font-family: ${t.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${t.classText};\n}\n.edgeLabel .label rect {\n fill: ${t.mainBkg};\n}\n.label text {\n fill: ${t.classText};\n}\n.edgeLabel .label span {\n background: ${t.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${t.nodeBorder};\n stroke: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${t.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${t.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/assets/js/502e1773.4736a14c.js b/assets/js/502e1773.4736a14c.js new file mode 100644 index 0000000000..031e78837d --- /dev/null +++ b/assets/js/502e1773.4736a14c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2693],{6914:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>c,contentTitle:()=>n,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>i});var t=o(7462),s=(o(7294),o(3905));o(5657);const a={},n="CONTROL_MARGIN_UNIT",l={unversionedId:"about/references/keywords/CONTROL_MARGIN_UNIT",id:"about/references/keywords/CONTROL_MARGIN_UNIT",title:"CONTROL_MARGIN_UNIT",description:"MODELS /",source:"@site/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN"},next:{title:"CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER"}},c={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3}],d={toc:i},m="wrapper";function p(e){let{components:r,...o}=e;return(0,s.kt)(m,(0,t.Z)({},d,o,{components:r,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"control_margin_unit"},"CONTROL_MARGIN_UNIT"),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n","[...]"," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STAGES"},"STAGES")),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,"This keyword defines the unit of the ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN"},"surge control margin")," for a variable speed compressor chart."),(0,s.kt)("p",null,"The ",(0,s.kt)("inlineCode",{parentName:"p"},"CONTROL_MARGIN_UNIT")," is given as a percentage or fraction of the rate difference between minimum- and maximum flow."),(0,s.kt)("p",null,"It is defined when setting up the stages in a ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},"Variable speed compressor train model")," or ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"Variable speed compressor train model with multiple streams and pressures"),"."),(0,s.kt)("p",null,"It is currently only possible to define a surge control margin for variable speed compressors."),(0,s.kt)("p",null,"See ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"Surge control margin for variable speed compressor chart")," for more details."),(0,s.kt)("h3",{id:"format"},"Format"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n ....\n")),(0,s.kt)("h3",{id:"example"},"Example"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20\n COMPRESSOR_CHART: 1_stage_chart\n CONTROL_MARGIN: 0.1\n CONTROL_MARGIN_UNIT: FRACTION\n ....\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5185.5a77c7f3.js b/assets/js/5185.5a77c7f3.js new file mode 100644 index 0000000000..1b1eaf914d --- /dev/null +++ b/assets/js/5185.5a77c7f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5185],{5185:(t,e,a)=>{a.d(e,{diagram:()=>m});var i=a(1341),n=a(9373),d=a(2494),r=a(5625),s=a(44),o=a(1188);a(7856),a(7484),a(7967);const g={},c=(t,e)=>{g[t]=e},p=(t,e)=>{const a=t.append("text").attr("x",2*(0,s.g)().state.padding).attr("y",(0,s.g)().state.textHeight+1.3*(0,s.g)().state.padding).attr("font-size",(0,s.g)().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),i=a.height,n=t.append("text").attr("x",(0,s.g)().state.padding).attr("y",i+.4*(0,s.g)().state.padding+(0,s.g)().state.dividerMargin+(0,s.g)().state.textHeight).attr("class","state-description");let d=!0,r=!0;e.descriptions.forEach((function(t){d||(!function(t,e,a){const i=t.append("tspan").attr("x",2*(0,s.g)().state.padding).text(e);a||i.attr("dy",(0,s.g)().state.textHeight)}(n,t,r),r=!1),d=!1}));const o=t.append("line").attr("x1",(0,s.g)().state.padding).attr("y1",(0,s.g)().state.padding+i+(0,s.g)().state.dividerMargin/2).attr("y2",(0,s.g)().state.padding+i+(0,s.g)().state.dividerMargin/2).attr("class","descr-divider"),g=n.node().getBBox(),c=Math.max(g.width,a.width);return o.attr("x2",c+3*(0,s.g)().state.padding),t.insert("rect",":first-child").attr("x",(0,s.g)().state.padding).attr("y",(0,s.g)().state.padding).attr("width",c+2*(0,s.g)().state.padding).attr("height",g.height+i+2*(0,s.g)().state.padding).attr("rx",(0,s.g)().state.radius),t},h=(t,e,a)=>{const i=(0,s.g)().state.padding,n=2*(0,s.g)().state.padding,d=t.node().getBBox(),r=d.width,o=d.x,g=t.append("text").attr("x",0).attr("y",(0,s.g)().state.titleShift).attr("font-size",(0,s.g)().state.fontSize).attr("class","state-title").text(e.id),c=g.node().getBBox().width+n;let p,h=Math.max(c,r);h===r&&(h+=n);const l=t.node().getBBox();e.doc,p=o-i,c>r&&(p=(r-h)/2+i),Math.abs(o-l.x)<i&&c>r&&(p=o-(c-r)/2);const x=1-(0,s.g)().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",x).attr("class",a?"alt-composit":"composit").attr("width",h).attr("height",l.height+(0,s.g)().state.textHeight+(0,s.g)().state.titleShift+1).attr("rx","0"),g.attr("x",p+i),c<=r&&g.attr("x",o+(h-n)/2-c/2+i),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.g)().state.titleShift-(0,s.g)().state.textHeight-(0,s.g)().state.padding).attr("width",h).attr("height",3*(0,s.g)().state.textHeight).attr("rx",(0,s.g)().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.g)().state.titleShift-(0,s.g)().state.textHeight-(0,s.g)().state.padding).attr("width",h).attr("height",l.height+3+2*(0,s.g)().state.textHeight).attr("rx",(0,s.g)().state.radius),t},l=(t,e)=>{e.attr("class","state-note");const a=e.append("rect").attr("x",0).attr("y",(0,s.g)().state.padding),i=e.append("g"),{textWidth:n,textHeight:d}=((t,e,a,i)=>{let n=0;const d=i.append("text");d.style("text-anchor","start"),d.attr("class","noteText");let r=t.replace(/\r\n/g,"<br/>");r=r.replace(/\n/g,"<br/>");const o=r.split(s.e.lineBreakRegex);let g=1.25*(0,s.g)().state.noteMargin;for(const c of o){const t=c.trim();if(t.length>0){const i=d.append("tspan");i.text(t),0===g&&(g+=i.node().getBBox().height),n+=g,i.attr("x",e+(0,s.g)().state.noteMargin),i.attr("y",a+n+1.25*(0,s.g)().state.noteMargin)}}return{textWidth:d.node().getBBox().width,textHeight:n}})(t,0,0,i);return a.attr("height",d+2*(0,s.g)().state.noteMargin),a.attr("width",n+2*(0,s.g)().state.noteMargin),a},x=function(t,e){const a=e.id,i={id:a,label:e.id,width:0,height:0},n=t.append("g").attr("id",a).attr("class","stateGroup");"start"===e.type&&(t=>{t.append("circle").attr("class","start-state").attr("r",(0,s.g)().state.sizeUnit).attr("cx",(0,s.g)().state.padding+(0,s.g)().state.sizeUnit).attr("cy",(0,s.g)().state.padding+(0,s.g)().state.sizeUnit)})(n),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",(0,s.g)().state.sizeUnit+(0,s.g)().state.miniPadding).attr("cx",(0,s.g)().state.padding+(0,s.g)().state.sizeUnit+(0,s.g)().state.miniPadding).attr("cy",(0,s.g)().state.padding+(0,s.g)().state.sizeUnit+(0,s.g)().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",(0,s.g)().state.sizeUnit).attr("cx",(0,s.g)().state.padding+(0,s.g)().state.sizeUnit+2).attr("cy",(0,s.g)().state.padding+(0,s.g)().state.sizeUnit+2)})(n),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let a=(0,s.g)().state.forkWidth,i=(0,s.g)().state.forkHeight;if(e.parentId){let t=a;a=i,i=t}t.append("rect").style("stroke","black").style("fill","black").attr("width",a).attr("height",i).attr("x",(0,s.g)().state.padding).attr("y",(0,s.g)().state.padding)})(n,e),"note"===e.type&&l(e.note.text,n),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",(0,s.g)().state.textHeight).attr("class","divider").attr("x2",2*(0,s.g)().state.textHeight).attr("y1",0).attr("y2",0)})(n),"default"===e.type&&0===e.descriptions.length&&((t,e)=>{const a=t.append("text").attr("x",2*(0,s.g)().state.padding).attr("y",(0,s.g)().state.textHeight+2*(0,s.g)().state.padding).attr("font-size",(0,s.g)().state.fontSize).attr("class","state-title").text(e.id),i=a.node().getBBox();t.insert("rect",":first-child").attr("x",(0,s.g)().state.padding).attr("y",(0,s.g)().state.padding).attr("width",i.width+2*(0,s.g)().state.padding).attr("height",i.height+2*(0,s.g)().state.padding).attr("rx",(0,s.g)().state.radius)})(n,e),"default"===e.type&&e.descriptions.length>0&&p(n,e);const d=n.node().getBBox();return i.width=d.width+2*(0,s.g)().state.padding,i.height=d.height+2*(0,s.g)().state.padding,c(a,i),i};let u=0;let f;const y={},w=(t,e,a,g,c,p,l)=>{const b=new r.k({compound:!0,multigraph:!0});let m,B=!0;for(m=0;m<t.length;m++)if("relation"===t[m].stmt){B=!1;break}a?b.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:B?1:f.edgeLengthFactor,nodeSep:B?1:50,isMultiGraph:!0}):b.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:B?1:f.edgeLengthFactor,nodeSep:B?1:50,ranker:"tight-tree",isMultiGraph:!0}),b.setDefaultEdgeLabel((function(){return{}})),l.db.extract(t);const k=l.db.getStates(),N=l.db.getRelations(),E=Object.keys(k);for(const i of E){const t=k[i];let n;if(a&&(t.parentId=a),t.doc){let a=e.append("g").attr("id",t.id).attr("class","stateGroup");n=w(t.doc,a,t.id,!g,c,p,l);{a=h(a,t,g);let e=a.node().getBBox();n.width=e.width,n.height=e.height+f.padding/2,y[t.id]={y:f.compositTitleSize}}}else n=x(e,t);if(t.note){const a={descriptions:[],id:t.id+"-note",note:t.note,type:"note"},i=x(e,a);"left of"===t.note.position?(b.setNode(n.id+"-note",i),b.setNode(n.id,n)):(b.setNode(n.id,n),b.setNode(n.id+"-note",i)),b.setParent(n.id,n.id+"-group"),b.setParent(n.id+"-note",n.id+"-group")}else b.setNode(n.id,n)}s.l.debug("Count=",b.nodeCount(),b);let M=0;N.forEach((function(t){var e;M++,s.l.debug("Setting edge",t),b.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*f.fontSizeFactor:1),height:f.labelHeight*s.e.getRows(t.title).length,labelpos:"c"},"id"+M)})),(0,d.bK)(b),s.l.debug("Graph after layout",b.nodes());const v=e.node();b.nodes().forEach((function(t){if(void 0!==t&&void 0!==b.node(t)){s.l.warn("Node "+t+": "+JSON.stringify(b.node(t))),c.select("#"+v.id+" #"+t).attr("transform","translate("+(b.node(t).x-b.node(t).width/2)+","+(b.node(t).y+(y[t]?y[t].y:0)-b.node(t).height/2)+" )"),c.select("#"+v.id+" #"+t).attr("data-x-shift",b.node(t).x-b.node(t).width/2);p.querySelectorAll("#"+v.id+" #"+t+" .divider").forEach((t=>{const e=t.parentElement;let a=0,i=0;e&&(e.parentElement&&(a=e.parentElement.getBBox().width),i=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(i)&&(i=0)),t.setAttribute("x1",0-i+8),t.setAttribute("x2",a-i-8)}))}else s.l.debug("No Node "+t+": "+JSON.stringify(b.node(t)))}));let S=v.getBBox();b.edges().forEach((function(t){void 0!==t&&void 0!==b.edge(t)&&(s.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(b.edge(t))),function(t,e,a){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const d=e.points,r=(0,n.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.$0Z),g=t.append("path").attr("d",r(d)).attr("id","edge"+u).attr("class","transition");let c="";if((0,s.g)().state.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),g.attr("marker-end","url("+c+"#"+function(t){switch(t){case i.d.relationType.AGGREGATION:return"aggregation";case i.d.relationType.EXTENSION:return"extension";case i.d.relationType.COMPOSITION:return"composition";case i.d.relationType.DEPENDENCY:return"dependency"}}(i.d.relationType.DEPENDENCY)+"End)"),void 0!==a.title){const i=t.append("g").attr("class","stateLabel"),{x:n,y:d}=o.u.calcLabelPosition(e.points),r=s.e.getRows(a.title);let g=0;const c=[];let p=0,h=0;for(let t=0;t<=r.length;t++){const e=i.append("text").attr("text-anchor","middle").text(r[t]).attr("x",n).attr("y",d+g),a=e.node().getBBox();if(p=Math.max(p,a.width),h=Math.min(h,a.x),s.l.info(a.x,n,d+g),0===g){const t=e.node().getBBox();g=t.height,s.l.info("Title height",g,d)}c.push(e)}let l=g*r.length;if(r.length>1){const t=(r.length-1)*g*.5;c.forEach(((e,a)=>e.attr("y",d+a*g-t))),l=g*r.length}const x=i.node().getBBox();i.insert("rect",":first-child").attr("class","box").attr("x",n-p/2-(0,s.g)().state.padding/2).attr("y",d-l/2-(0,s.g)().state.padding/2-3.5).attr("width",p+(0,s.g)().state.padding).attr("height",l+(0,s.g)().state.padding),s.l.info(x)}u++}(e,b.edge(t),b.edge(t).relation))})),S=v.getBBox();const z={id:a||"root",label:a||"root",width:0,height:0};return z.width=S.width+2*f.padding,z.height=S.height+2*f.padding,s.l.debug("Doc rendered",z,b),z},b={setConf:function(){},draw:function(t,e,a,i){f=(0,s.g)().state;const d=(0,s.g)().securityLevel;let g;"sandbox"===d&&(g=(0,n.Ys)("#i"+e));const c="sandbox"===d?(0,n.Ys)(g.nodes()[0].contentDocument.body):(0,n.Ys)("body"),p="sandbox"===d?g.nodes()[0].contentDocument:document;s.l.debug("Rendering diagram "+t);const h=c.select(`[id='${e}']`);h.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z");new r.k({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}}));const l=i.db.getRootDoc();w(l,h,void 0,!1,c,p,i);const x=f.padding,u=h.node().getBBox(),y=u.width+2*x,b=u.height+2*x,m=1.75*y;(0,o.k)(h,b,m,f.useMaxWidth),h.attr("viewBox",`${u.x-f.padding} ${u.y-f.padding} `+y+" "+b)}},m={parser:i.p,db:i.d,renderer:b,styles:i.s,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,i.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/51ad0f66.406eee01.js b/assets/js/51ad0f66.406eee01.js new file mode 100644 index 0000000000..f7374bc33c --- /dev/null +++ b/assets/js/51ad0f66.406eee01.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5713],{889:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>E,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=a(7462),n=(a(7294),a(3905));a(5657);const o={},s="EMISSION_RATE",l={unversionedId:"about/references/keywords/EMISSION_RATE",id:"about/references/keywords/EMISSION_RATE",title:"EMISSION_RATE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/EMISSION_RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSION_RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME"},next:{title:"EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],i={toc:d},p="wrapper";function E(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,r.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"emission_rate"},"EMISSION_RATE"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"},"EMITTER_MODEL")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSION_RATE"},"EMISSION_RATE")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Yes"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"EMITTER_MODEL")),(0,n.kt)("td",{parentName:"tr",align:null},"None")))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Used to define the emission rate for some ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"},"EMITTER_MODEL")," types\nusing an ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EXPRESSION"},"Expressions")),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSION_RATE: <emission rate [kg/day] expression or time series>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSION_RATE: 10.0 # [kg/day]\n")))}E.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5314.5e7a5198.js b/assets/js/5314.5e7a5198.js new file mode 100644 index 0000000000..3398a550d7 --- /dev/null +++ b/assets/js/5314.5e7a5198.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5314],{5314:(t,e,i)=>{i.d(e,{diagram:()=>H});var r=i(44),n=i(1188),c=i(3047),s=i(9373),a=(i(7856),i(7484),i(7967),function(){var t=function(t,e,i,r){for(i=i||{},r=t.length;r--;i[t[r]]=e);return i},e=[1,4],i=[1,7],r=[1,5],n=[1,9],c=[1,6],s=[2,6],a=[1,16],o=[6,8,14,20,22,24,25,27,29,32,37,40,50,55],l=[8,14,20,22,24,25,27,29,32,37,40],h=[8,13,14,20,22,24,25,27,29,32,37,40],m=[1,26],u=[6,8,14,50,55],y=[8,14,55],p=[1,53],g=[1,52],b=[8,14,30,33,35,38,55],d=[1,67],f=[1,68],k=[1,69],_=[8,14,33,35,42,55],$={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,GG:6,document:7,EOF:8,":":9,DIR:10,options:11,body:12,OPT:13,NL:14,line:15,statement:16,commitStatement:17,mergeStatement:18,cherryPickStatement:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,branchStatement:26,CHECKOUT:27,ref:28,BRANCH:29,ORDER:30,NUM:31,CHERRY_PICK:32,COMMIT_ID:33,STR:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,openDirective:46,typeDirective:47,closeDirective:48,argDirective:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,ID:54,";":55,$accept:0,$end:1},terminals_:{2:"error",6:"GG",8:"EOF",9:":",10:"DIR",13:"OPT",14:"NL",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"CHECKOUT",29:"BRANCH",30:"ORDER",31:"NUM",32:"CHERRY_PICK",33:"COMMIT_ID",34:"STR",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive",54:"ID",55:";"},productions_:[0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[19,5],[19,5],[19,5],[19,5],[18,2],[18,4],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[41,0],[41,1],[39,1],[39,1],[39,1],[5,3],[5,5],[46,1],[47,1],[49,1],[48,1],[28,1],[28,1],[4,1],[4,1],[4,1]],performAction:function(t,e,i,r,n,c,s){var a=c.length-1;switch(n){case 3:return c[a];case 4:return c[a-1];case 5:return r.setDirection(c[a-3]),c[a-1];case 7:r.setOptions(c[a-1]),this.$=c[a];break;case 8:c[a-1]+=c[a],this.$=c[a-1];break;case 10:this.$=[];break;case 11:c[a-1].push(c[a]),this.$=c[a-1];break;case 12:this.$=c[a-1];break;case 17:this.$=c[a].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=c[a].trim(),r.setAccDescription(this.$);break;case 20:r.addSection(c[a].substr(8)),this.$=c[a].substr(8);break;case 22:r.checkout(c[a]);break;case 23:r.branch(c[a]);break;case 24:r.branch(c[a-2],c[a]);break;case 25:r.cherryPick(c[a],"",void 0);break;case 26:r.cherryPick(c[a-2],"",c[a]);break;case 27:case 29:r.cherryPick(c[a-2],"","");break;case 28:r.cherryPick(c[a],"",c[a-2]);break;case 30:r.merge(c[a],"","","");break;case 31:r.merge(c[a-2],c[a],"","");break;case 32:r.merge(c[a-2],"",c[a],"");break;case 33:r.merge(c[a-2],"","",c[a]);break;case 34:r.merge(c[a-4],c[a],"",c[a-2]);break;case 35:r.merge(c[a-4],"",c[a],c[a-2]);break;case 36:r.merge(c[a-4],"",c[a-2],c[a]);break;case 37:r.merge(c[a-4],c[a-2],c[a],"");break;case 38:r.merge(c[a-4],c[a-2],"",c[a]);break;case 39:r.merge(c[a-4],c[a],c[a-2],"");break;case 40:r.merge(c[a-6],c[a-4],c[a-2],c[a]);break;case 41:r.merge(c[a-6],c[a],c[a-4],c[a-2]);break;case 42:r.merge(c[a-6],c[a-4],c[a],c[a-2]);break;case 43:r.merge(c[a-6],c[a-2],c[a-4],c[a]);break;case 44:r.merge(c[a-6],c[a],c[a-2],c[a-4]);break;case 45:r.merge(c[a-6],c[a-2],c[a],c[a-4]);break;case 46:r.commit(c[a]);break;case 47:r.commit("","",r.commitType.NORMAL,c[a]);break;case 48:r.commit("","",c[a],"");break;case 49:r.commit("","",c[a],c[a-2]);break;case 50:r.commit("","",c[a-2],c[a]);break;case 51:r.commit("",c[a],r.commitType.NORMAL,"");break;case 52:r.commit("",c[a-2],r.commitType.NORMAL,c[a]);break;case 53:r.commit("",c[a],r.commitType.NORMAL,c[a-2]);break;case 54:r.commit("",c[a-2],c[a],"");break;case 55:r.commit("",c[a],c[a-2],"");break;case 56:r.commit("",c[a-4],c[a-2],c[a]);break;case 57:r.commit("",c[a-4],c[a],c[a-2]);break;case 58:r.commit("",c[a-2],c[a-4],c[a]);break;case 59:r.commit("",c[a],c[a-4],c[a-2]);break;case 60:r.commit("",c[a],c[a-2],c[a-4]);break;case 61:r.commit("",c[a-2],c[a],c[a-4]);break;case 62:r.commit(c[a],"",r.commitType.NORMAL,"");break;case 63:r.commit(c[a],"",r.commitType.NORMAL,c[a-2]);break;case 64:r.commit(c[a-2],"",r.commitType.NORMAL,c[a]);break;case 65:r.commit(c[a-2],"",c[a],"");break;case 66:r.commit(c[a],"",c[a-2],"");break;case 67:r.commit(c[a],c[a-2],r.commitType.NORMAL,"");break;case 68:r.commit(c[a-2],c[a],r.commitType.NORMAL,"");break;case 69:r.commit(c[a-4],"",c[a-2],c[a]);break;case 70:r.commit(c[a-4],"",c[a],c[a-2]);break;case 71:r.commit(c[a-2],"",c[a-4],c[a]);break;case 72:r.commit(c[a],"",c[a-4],c[a-2]);break;case 73:r.commit(c[a],"",c[a-2],c[a-4]);break;case 74:r.commit(c[a-2],"",c[a],c[a-4]);break;case 75:r.commit(c[a-4],c[a],c[a-2],"");break;case 76:r.commit(c[a-4],c[a-2],c[a],"");break;case 77:r.commit(c[a-2],c[a],c[a-4],"");break;case 78:r.commit(c[a],c[a-2],c[a-4],"");break;case 79:r.commit(c[a],c[a-4],c[a-2],"");break;case 80:r.commit(c[a-2],c[a-4],c[a],"");break;case 81:r.commit(c[a-4],c[a],r.commitType.NORMAL,c[a-2]);break;case 82:r.commit(c[a-4],c[a-2],r.commitType.NORMAL,c[a]);break;case 83:r.commit(c[a-2],c[a],r.commitType.NORMAL,c[a-4]);break;case 84:r.commit(c[a],c[a-2],r.commitType.NORMAL,c[a-4]);break;case 85:r.commit(c[a],c[a-4],r.commitType.NORMAL,c[a-2]);break;case 86:r.commit(c[a-2],c[a-4],r.commitType.NORMAL,c[a]);break;case 87:r.commit(c[a-6],c[a-4],c[a-2],c[a]);break;case 88:r.commit(c[a-6],c[a-4],c[a],c[a-2]);break;case 89:r.commit(c[a-6],c[a-2],c[a-4],c[a]);break;case 90:r.commit(c[a-6],c[a],c[a-4],c[a-2]);break;case 91:r.commit(c[a-6],c[a-2],c[a],c[a-4]);break;case 92:r.commit(c[a-6],c[a],c[a-2],c[a-4]);break;case 93:r.commit(c[a-4],c[a-6],c[a-2],c[a]);break;case 94:r.commit(c[a-4],c[a-6],c[a],c[a-2]);break;case 95:r.commit(c[a-2],c[a-6],c[a-4],c[a]);break;case 96:r.commit(c[a],c[a-6],c[a-4],c[a-2]);break;case 97:r.commit(c[a-2],c[a-6],c[a],c[a-4]);break;case 98:r.commit(c[a],c[a-6],c[a-2],c[a-4]);break;case 99:r.commit(c[a],c[a-4],c[a-2],c[a-6]);break;case 100:r.commit(c[a-2],c[a-4],c[a],c[a-6]);break;case 101:r.commit(c[a],c[a-2],c[a-4],c[a-6]);break;case 102:r.commit(c[a-2],c[a],c[a-4],c[a-6]);break;case 103:r.commit(c[a-4],c[a-2],c[a],c[a-6]);break;case 104:r.commit(c[a-4],c[a],c[a-2],c[a-6]);break;case 105:r.commit(c[a-2],c[a-4],c[a-6],c[a]);break;case 106:r.commit(c[a],c[a-4],c[a-6],c[a-2]);break;case 107:r.commit(c[a-2],c[a],c[a-6],c[a-4]);break;case 108:r.commit(c[a],c[a-2],c[a-6],c[a-4]);break;case 109:r.commit(c[a-4],c[a-2],c[a-6],c[a]);break;case 110:r.commit(c[a-4],c[a],c[a-6],c[a-2]);break;case 111:this.$="";break;case 112:this.$=c[a];break;case 113:this.$=r.commitType.NORMAL;break;case 114:this.$=r.commitType.REVERSE;break;case 115:this.$=r.commitType.HIGHLIGHT;break;case 118:r.parseDirective("%%{","open_directive");break;case 119:r.parseDirective(c[a],"type_directive");break;case 120:c[a]=c[a].trim().replace(/'/g,'"'),r.parseDirective(c[a],"arg_directive");break;case 121:r.parseDirective("}%%","close_directive","gitGraph")}},table:[{3:1,4:2,5:3,6:e,8:i,14:r,46:8,50:n,55:c},{1:[3]},{3:10,4:2,5:3,6:e,8:i,14:r,46:8,50:n,55:c},{3:11,4:2,5:3,6:e,8:i,14:r,46:8,50:n,55:c},{7:12,8:s,9:[1,13],10:[1,14],11:15,14:a},t(o,[2,124]),t(o,[2,125]),t(o,[2,126]),{47:17,51:[1,18]},{51:[2,118]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:s,11:15,14:a},{9:[1,21]},t(l,[2,10],{12:22,13:[1,23]}),t(h,[2,9]),{9:[1,25],48:24,53:m},t([9,53],[2,119]),{1:[2,3]},{8:[1,27]},{7:28,8:s,11:15,14:a},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],37:[1,42],40:[1,41]},t(h,[2,8]),t(u,[2,116]),{49:45,52:[1,46]},t(u,[2,121]),{1:[2,4]},{8:[1,47]},t(l,[2,11]),{4:48,8:i,14:r,55:c},t(l,[2,13]),t(y,[2,14]),t(y,[2,15]),t(y,[2,16]),{21:[1,49]},{23:[1,50]},t(y,[2,19]),t(y,[2,20]),t(y,[2,21]),{28:51,34:p,54:g},t(y,[2,111],{41:54,33:[1,57],34:[1,59],35:[1,55],38:[1,56],42:[1,58]}),{28:60,34:p,54:g},{33:[1,61],35:[1,62]},{28:63,34:p,54:g},{48:64,53:m},{53:[2,120]},{1:[2,5]},t(l,[2,12]),t(y,[2,17]),t(y,[2,18]),t(y,[2,22]),t(b,[2,122]),t(b,[2,123]),t(y,[2,46]),{34:[1,65]},{39:66,43:d,44:f,45:k},{34:[1,70]},{34:[1,71]},t(y,[2,112]),t(y,[2,30],{33:[1,72],35:[1,74],38:[1,73]}),{34:[1,75]},{34:[1,76],36:[1,77]},t(y,[2,23],{30:[1,78]}),t(u,[2,117]),t(y,[2,47],{33:[1,80],38:[1,79],42:[1,81]}),t(y,[2,48],{33:[1,83],35:[1,82],42:[1,84]}),t(_,[2,113]),t(_,[2,114]),t(_,[2,115]),t(y,[2,51],{35:[1,85],38:[1,86],42:[1,87]}),t(y,[2,62],{33:[1,90],35:[1,88],38:[1,89]}),{34:[1,91]},{39:92,43:d,44:f,45:k},{34:[1,93]},t(y,[2,25],{35:[1,94]}),{33:[1,95]},{33:[1,96]},{31:[1,97]},{39:98,43:d,44:f,45:k},{34:[1,99]},{34:[1,100]},{34:[1,101]},{34:[1,102]},{34:[1,103]},{34:[1,104]},{39:105,43:d,44:f,45:k},{34:[1,106]},{34:[1,107]},{39:108,43:d,44:f,45:k},{34:[1,109]},t(y,[2,31],{35:[1,111],38:[1,110]}),t(y,[2,32],{33:[1,113],35:[1,112]}),t(y,[2,33],{33:[1,114],38:[1,115]}),{34:[1,116],36:[1,117]},{34:[1,118]},{34:[1,119]},t(y,[2,24]),t(y,[2,49],{33:[1,120],42:[1,121]}),t(y,[2,53],{38:[1,122],42:[1,123]}),t(y,[2,63],{33:[1,125],38:[1,124]}),t(y,[2,50],{33:[1,126],42:[1,127]}),t(y,[2,55],{35:[1,128],42:[1,129]}),t(y,[2,66],{33:[1,131],35:[1,130]}),t(y,[2,52],{38:[1,132],42:[1,133]}),t(y,[2,54],{35:[1,134],42:[1,135]}),t(y,[2,67],{35:[1,137],38:[1,136]}),t(y,[2,64],{33:[1,139],38:[1,138]}),t(y,[2,65],{33:[1,141],35:[1,140]}),t(y,[2,68],{35:[1,143],38:[1,142]}),{39:144,43:d,44:f,45:k},{34:[1,145]},{34:[1,146]},{34:[1,147]},{34:[1,148]},{39:149,43:d,44:f,45:k},t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(y,[2,29]),{34:[1,150]},{34:[1,151]},{39:152,43:d,44:f,45:k},{34:[1,153]},{39:154,43:d,44:f,45:k},{34:[1,155]},{34:[1,156]},{34:[1,157]},{34:[1,158]},{34:[1,159]},{34:[1,160]},{34:[1,161]},{39:162,43:d,44:f,45:k},{34:[1,163]},{34:[1,164]},{34:[1,165]},{39:166,43:d,44:f,45:k},{34:[1,167]},{39:168,43:d,44:f,45:k},{34:[1,169]},{34:[1,170]},{34:[1,171]},{39:172,43:d,44:f,45:k},{34:[1,173]},t(y,[2,37],{35:[1,174]}),t(y,[2,38],{38:[1,175]}),t(y,[2,36],{33:[1,176]}),t(y,[2,39],{35:[1,177]}),t(y,[2,34],{38:[1,178]}),t(y,[2,35],{33:[1,179]}),t(y,[2,60],{42:[1,180]}),t(y,[2,73],{33:[1,181]}),t(y,[2,61],{42:[1,182]}),t(y,[2,84],{38:[1,183]}),t(y,[2,74],{33:[1,184]}),t(y,[2,83],{38:[1,185]}),t(y,[2,59],{42:[1,186]}),t(y,[2,72],{33:[1,187]}),t(y,[2,58],{42:[1,188]}),t(y,[2,78],{35:[1,189]}),t(y,[2,71],{33:[1,190]}),t(y,[2,77],{35:[1,191]}),t(y,[2,57],{42:[1,192]}),t(y,[2,85],{38:[1,193]}),t(y,[2,56],{42:[1,194]}),t(y,[2,79],{35:[1,195]}),t(y,[2,80],{35:[1,196]}),t(y,[2,86],{38:[1,197]}),t(y,[2,70],{33:[1,198]}),t(y,[2,81],{38:[1,199]}),t(y,[2,69],{33:[1,200]}),t(y,[2,75],{35:[1,201]}),t(y,[2,76],{35:[1,202]}),t(y,[2,82],{38:[1,203]}),{34:[1,204]},{39:205,43:d,44:f,45:k},{34:[1,206]},{34:[1,207]},{39:208,43:d,44:f,45:k},{34:[1,209]},{34:[1,210]},{34:[1,211]},{34:[1,212]},{39:213,43:d,44:f,45:k},{34:[1,214]},{39:215,43:d,44:f,45:k},{34:[1,216]},{34:[1,217]},{34:[1,218]},{34:[1,219]},{34:[1,220]},{34:[1,221]},{34:[1,222]},{39:223,43:d,44:f,45:k},{34:[1,224]},{34:[1,225]},{34:[1,226]},{39:227,43:d,44:f,45:k},{34:[1,228]},{39:229,43:d,44:f,45:k},{34:[1,230]},{34:[1,231]},{34:[1,232]},{39:233,43:d,44:f,45:k},t(y,[2,40]),t(y,[2,42]),t(y,[2,41]),t(y,[2,43]),t(y,[2,45]),t(y,[2,44]),t(y,[2,101]),t(y,[2,102]),t(y,[2,99]),t(y,[2,100]),t(y,[2,104]),t(y,[2,103]),t(y,[2,108]),t(y,[2,107]),t(y,[2,106]),t(y,[2,105]),t(y,[2,110]),t(y,[2,109]),t(y,[2,98]),t(y,[2,97]),t(y,[2,96]),t(y,[2,95]),t(y,[2,93]),t(y,[2,94]),t(y,[2,92]),t(y,[2,91]),t(y,[2,90]),t(y,[2,89]),t(y,[2,87]),t(y,[2,88])],defaultActions:{9:[2,118],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,120],47:[2,5]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],r=[],n=[null],c=[],s=this.table,a="",o=0,l=0,h=1,m=c.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(y.yy[p]=this.yy[p]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var g=u.yylloc;c.push(g);var b=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var d,f,k,_,$,x,v,w,E,T={};;){if(f=i[i.length-1],this.defaultActions[f]?k=this.defaultActions[f]:(null==d&&(E=void 0,"number"!=typeof(E=r.pop()||u.lex()||h)&&(E instanceof Array&&(E=(r=E).pop()),E=e.symbols_[E]||E),d=E),k=s[f]&&s[f][d]),void 0===k||!k.length||!k[0]){var L="";for($ in w=[],s[f])this.terminals_[$]&&$>2&&w.push("'"+this.terminals_[$]+"'");L=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[d]||d)+"'":"Parse error on line "+(o+1)+": Unexpected "+(d==h?"end of input":"'"+(this.terminals_[d]||d)+"'"),this.parseError(L,{text:u.match,token:this.terminals_[d]||d,line:u.yylineno,loc:g,expected:w})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+d);switch(k[0]){case 1:i.push(d),n.push(u.yytext),c.push(u.yylloc),i.push(k[1]),d=null,l=u.yyleng,a=u.yytext,o=u.yylineno,g=u.yylloc;break;case 2:if(x=this.productions_[k[1]][1],T.$=n[n.length-x],T._$={first_line:c[c.length-(x||1)].first_line,last_line:c[c.length-1].last_line,first_column:c[c.length-(x||1)].first_column,last_column:c[c.length-1].last_column},b&&(T._$.range=[c[c.length-(x||1)].range[0],c[c.length-1].range[1]]),void 0!==(_=this.performAction.apply(T,[a,l,o,y.yy,k[1],n,c].concat(m))))return _;x&&(i=i.slice(0,-1*x*2),n=n.slice(0,-1*x),c=c.slice(0,-1*x)),i.push(this.productions_[k[1]][0]),n.push(T.$),c.push(T._$),v=s[i[i.length-2]][i[i.length-1]],i.push(v);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===r.length?this.yylloc.first_column:0)+r[r.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,r,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var c in n)this[c]=n[c];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),c=0;c<n.length;c++)if((i=this._input.match(this.rules[n[c]]))&&(!e||i[0].length>e[0].length)){if(e=i,r=c,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,n[c])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,r){switch(i){case 0:return this.begin("open_directive"),50;case 1:return this.begin("type_directive"),51;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),53;case 4:return 52;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 34:case 38:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:case 14:break;case 15:return 6;case 16:return 40;case 17:return 33;case 18:return 38;case 19:return 42;case 20:return 43;case 21:return 44;case 22:return 45;case 23:return 35;case 24:return 29;case 25:return 30;case 26:return 37;case 27:return 32;case 28:return 27;case 29:case 30:return 10;case 31:return 9;case 32:return"CARET";case 33:this.begin("options");break;case 35:return 13;case 36:return 36;case 37:this.begin("string");break;case 39:return 34;case 40:return 31;case 41:return 54;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[34,35],inclusive:!1},string:{rules:[38,39],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,36,37,40,41,42,43],inclusive:!0}}};function v(){this.yy={}}return $.lexer=x,v.prototype=$,$.Parser=v,new v}());a.parser=a;const o=a;let l=(0,r.g)().gitGraph.mainBranchName,h=(0,r.g)().gitGraph.mainBranchOrder,m={},u=null,y={};y[l]={name:l,order:h};let p={};p[l]=u;let g=l,b="LR",d=0;function f(){return(0,n.q)({length:7})}let k={};const _=function(t){if(t=r.e.sanitizeText(t,(0,r.g)()),void 0===p[t]){let e=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+t+'")');throw e.hash={text:"checkout "+t,token:"checkout "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+t+'"']},e}{g=t;const e=p[g];u=m[e]}};function $(t,e,i){const r=t.indexOf(e);-1===r?t.push(i):t.splice(r,1,i)}function x(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let i="";t.forEach((function(t){i+=t===e?"\t*":"\t|"}));const n=[i,e.id,e.seq];for(let r in p)p[r]===e.id&&n.push(r);if(r.l.debug(n.join(" ")),e.parents&&2==e.parents.length){const i=m[e.parents[0]];$(t,e,i),t.push(m[e.parents[1]])}else{if(0==e.parents.length)return;{const i=m[e.parents];$(t,e,i)}}x(t=function(t,e){const i=Object.create(null);return t.reduce(((t,r)=>{const n=e(r);return i[n]||(i[n]=!0,t.push(r)),t}),[])}(t,(t=>t.id)))}const v=function(){const t=Object.keys(m).map((function(t){return m[t]}));return t.forEach((function(t){r.l.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},w={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},E={parseDirective:function(t,e,i){c.m.parseDirective(this,t,e,i)},getConfig:()=>(0,r.g)().gitGraph,setDirection:function(t){b=t},setOptions:function(t){r.l.debug("options str",t),t=(t=t&&t.trim())||"{}";try{k=JSON.parse(t)}catch(e){r.l.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return k},commit:function(t,e,i,n){r.l.debug("Entering commit:",t,e,i,n),e=r.e.sanitizeText(e,(0,r.g)()),t=r.e.sanitizeText(t,(0,r.g)()),n=r.e.sanitizeText(n,(0,r.g)());const c={id:e||d+"-"+f(),message:t,seq:d++,type:i||w.NORMAL,tag:n||"",parents:null==u?[]:[u.id],branch:g};u=c,m[c.id]=c,p[g]=c.id,r.l.debug("in pushCommit "+c.id)},branch:function(t,e){if(t=r.e.sanitizeText(t,(0,r.g)()),void 0!==p[t]){let e=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+t+'")');throw e.hash={text:"branch "+t,token:"branch "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+t+'"']},e}p[t]=null!=u?u.id:null,y[t]={name:t,order:e?parseInt(e,10):null},_(t),r.l.debug("in createBranch")},merge:function(t,e,i,n){t=r.e.sanitizeText(t,(0,r.g)()),e=r.e.sanitizeText(e,(0,r.g)());const c=m[p[g]],s=m[p[t]];if(g===t){let e=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(void 0===c||!c){let e=new Error('Incorrect usage of "merge". Current branch ('+g+")has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},e}if(void 0===p[t]){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+t]},e}if(void 0===s||!s){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},e}if(c===s){let e=new Error('Incorrect usage of "merge". Both branches have same head');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(e&&void 0!==m[e]){let r=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw r.hash={text:"merge "+t+e+i+n,token:"merge "+t+e+i+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+i+" "+n]},r}const a={id:e||d+"-"+f(),message:"merged branch "+t+" into "+g,seq:d++,parents:[null==u?null:u.id,p[t]],branch:g,type:w.MERGE,customType:i,customId:!!e,tag:n||""};u=a,m[a.id]=a,p[g]=a.id,r.l.debug(p),r.l.debug("in mergeBranch")},cherryPick:function(t,e,i){if(r.l.debug("Entering cherryPick:",t,e,i),t=r.e.sanitizeText(t,(0,r.g)()),e=r.e.sanitizeText(e,(0,r.g)()),i=r.e.sanitizeText(i,(0,r.g)()),!t||void 0===m[t]){let i=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw i.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},i}let n=m[t],c=n.branch;if(n.type===w.MERGE){let i=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw i.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},i}if(!e||void 0===m[e]){if(c===g){let i=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw i.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},i}const s=m[p[g]];if(void 0===s||!s){let i=new Error('Incorrect usage of "cherry-pick". Current branch ('+g+")has no commits");throw i.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},i}const a={id:d+"-"+f(),message:"cherry-picked "+n+" into "+g,seq:d++,parents:[null==u?null:u.id,n.id],branch:g,type:w.CHERRY_PICK,tag:i??"cherry-pick:"+n.id};u=a,m[a.id]=a,p[g]=a.id,r.l.debug(p),r.l.debug("in cherryPick")}},checkout:_,prettyPrint:function(){r.l.debug(m);x([v()[0]])},clear:function(){m={},u=null;let t=(0,r.g)().gitGraph.mainBranchName,e=(0,r.g)().gitGraph.mainBranchOrder;p={},p[t]=null,y={},y[t]={name:t,order:e},g=t,d=0,(0,r.y)()},getBranchesAsObjArray:function(){return Object.values(y).map(((t,e)=>null!==t.order?t:{...t,order:parseFloat(`0.${e}`,10)})).sort(((t,e)=>t.order-e.order)).map((({name:t})=>({name:t})))},getBranches:function(){return p},getCommits:function(){return m},getCommitsArray:v,getCurrentBranch:function(){return g},getDirection:function(){return b},getHead:function(){return u},setAccTitle:r.o,getAccTitle:r.p,getAccDescription:r.q,setAccDescription:r.v,setDiagramTitle:r.w,getDiagramTitle:r.x,commitType:w};let T={};const L=0,M=1,I=2,O=3,A=4;let R={},C={},S=[],P=0;const N=(t,e,i)=>{const r=(0,n.t)().gitGraph,c=t.append("g").attr("class","commit-bullets"),s=t.append("g").attr("class","commit-labels");let a=0;Object.keys(e).sort(((t,i)=>e[t].seq-e[i].seq)).forEach((t=>{const n=e[t],o=R[n.branch].pos,l=a+10;if(i){let t,e=void 0!==n.customType&&""!==n.customType?n.customType:n.type;switch(e){case L:t="commit-normal";break;case M:t="commit-reverse";break;case I:t="commit-highlight";break;case O:t="commit-merge";break;case A:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===I){const e=c.append("rect");e.attr("x",l-10),e.attr("y",o-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${n.id} commit-highlight${R[n.branch].index%8} ${t}-outer`),c.append("rect").attr("x",l-6).attr("y",o-6).attr("height",12).attr("width",12).attr("class",`commit ${n.id} commit${R[n.branch].index%8} ${t}-inner`)}else if(e===A)c.append("circle").attr("cx",l).attr("cy",o).attr("r",10).attr("class",`commit ${n.id} ${t}`),c.append("circle").attr("cx",l-3).attr("cy",o+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${n.id} ${t}`),c.append("circle").attr("cx",l+3).attr("cy",o+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${n.id} ${t}`),c.append("line").attr("x1",l+3).attr("y1",o+1).attr("x2",l).attr("y2",o-5).attr("stroke","#fff").attr("class",`commit ${n.id} ${t}`),c.append("line").attr("x1",l-3).attr("y1",o+1).attr("x2",l).attr("y2",o-5).attr("stroke","#fff").attr("class",`commit ${n.id} ${t}`);else{const i=c.append("circle");if(i.attr("cx",l),i.attr("cy",o),i.attr("r",n.type===O?9:10),i.attr("class",`commit ${n.id} commit${R[n.branch].index%8}`),e===O){const e=c.append("circle");e.attr("cx",l),e.attr("cy",o),e.attr("r",6),e.attr("class",`commit ${t} ${n.id} commit${R[n.branch].index%8}`)}if(e===M){c.append("path").attr("d",`M ${l-5},${o-5}L${l+5},${o+5}M${l-5},${o+5}L${l+5},${o-5}`).attr("class",`commit ${t} ${n.id} commit${R[n.branch].index%8}`)}}}if(C[n.id]={x:a+10,y:o},i){const t=4,e=2;if(n.type!==A&&(n.customId&&n.type===O||n.type!==O)&&r.showCommitLabel){const t=s.append("g"),i=t.insert("rect").attr("class","commit-label-bkg"),c=t.append("text").attr("x",a).attr("y",o+25).attr("class","commit-label").text(n.id);let l=c.node().getBBox();if(i.attr("x",a+10-l.width/2-e).attr("y",o+13.5).attr("width",l.width+2*e).attr("height",l.height+2*e),c.attr("x",a+10-l.width/2),r.rotateCommitLabel){let e=-7.5-(l.width+10)/25*9.5,i=10+l.width/25*8.5;t.attr("transform","translate("+e+", "+i+") rotate("+"-45, "+a+", "+o+")")}}if(n.tag){const i=s.insert("polygon"),r=s.append("circle"),c=s.append("text").attr("y",o-16).attr("class","tag-label").text(n.tag);let l=c.node().getBBox();c.attr("x",a+10-l.width/2);const h=l.height/2,m=o-19.2;i.attr("class","tag-label-bkg").attr("points",`\n ${a-l.width/2-t/2},${m+e}\n ${a-l.width/2-t/2},${m-e}\n ${a+10-l.width/2-t},${m-h-e}\n ${a+10+l.width/2+t},${m-h-e}\n ${a+10+l.width/2+t},${m+h+e}\n ${a+10-l.width/2-t},${m+h+e}`),r.attr("cx",a-l.width/2+t/2).attr("cy",m).attr("r",1.5).attr("class","tag-hole")}}a+=50,a>P&&(P=a)}))},G=(t,e,i=0)=>{const r=t+Math.abs(t-e)/2;if(i>5)return r;if(S.every((t=>Math.abs(t-r)>=10)))return S.push(r),r;const n=Math.abs(t-e);return G(t,e-n/5,i+1)},D=(t,e,i,r)=>{const n=C[e.id],c=C[i.id],s=((t,e,i)=>Object.keys(i).filter((r=>i[r].branch===e.branch&&i[r].seq>t.seq&&i[r].seq<e.seq)).length>0)(e,i,r);let a,o="",l="",h=0,m=0,u=R[i.branch].index;if(s){o="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,m=10,u=R[i.branch].index;const t=n.y<c.y?G(n.y,c.y):G(c.y,n.y);a=n.y<c.y?`M ${n.x} ${n.y} L ${n.x} ${t-h} ${o} ${n.x+m} ${t} L ${c.x-h} ${t} ${l} ${c.x} ${t+m} L ${c.x} ${c.y}`:`M ${n.x} ${n.y} L ${n.x} ${t+h} ${l} ${n.x+m} ${t} L ${c.x-h} ${t} ${o} ${c.x} ${t-m} L ${c.x} ${c.y}`}else n.y<c.y&&(o="A 20 20, 0, 0, 0,",h=20,m=20,u=R[i.branch].index,a=`M ${n.x} ${n.y} L ${n.x} ${c.y-h} ${o} ${n.x+m} ${c.y} L ${c.x} ${c.y}`),n.y>c.y&&(o="A 20 20, 0, 0, 0,",h=20,m=20,u=R[e.branch].index,a=`M ${n.x} ${n.y} L ${c.x-h} ${n.y} ${o} ${c.x} ${n.y-m} L ${c.x} ${c.y}`),n.y===c.y&&(u=R[e.branch].index,a=`M ${n.x} ${n.y} L ${n.x} ${c.y-h} ${o} ${n.x+m} ${c.y} L ${c.x} ${c.y}`);t.append("path").attr("d",a).attr("class","arrow arrow"+u%8)},B=(t,e)=>{const i=(0,n.t)().gitGraph,r=t.append("g");e.forEach(((t,e)=>{const n=e%8,c=R[t.name].pos,s=r.append("line");s.attr("x1",0),s.attr("y1",c),s.attr("x2",P),s.attr("y2",c),s.attr("class","branch branch"+n),S.push(c);const a=(t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let i=[];i="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(const r of i){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","0"),t.setAttribute("class","row"),t.textContent=r.trim(),e.appendChild(t)}return e})(t.name),o=r.insert("rect"),l=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+n);l.node().appendChild(a);let h=a.getBBox();o.attr("class","branchLabelBkg label"+n).attr("rx",4).attr("ry",4).attr("x",-h.width-4-(!0===i.rotateCommitLabel?30:0)).attr("y",-h.height/2+8).attr("width",h.width+18).attr("height",h.height+4),l.attr("transform","translate("+(-h.width-14-(!0===i.rotateCommitLabel?30:0))+", "+(c-h.height/2-1)+")"),o.attr("transform","translate(-19, "+(c-h.height/2)+")")}))},H={parser:o,db:E,renderer:{draw:function(t,e,i,c){R={},C={},T={},P=0,S=[];const a=(0,n.t)(),o=a.gitGraph;r.l.debug("in gitgraph renderer",t+"\n","id:",e,i),T=c.db.getCommits();const l=c.db.getBranchesAsObjArray();let h=0;l.forEach(((t,e)=>{R[t.name]={pos:h,index:e},h+=50+(o.rotateCommitLabel?40:0)}));const m=(0,s.Ys)(`[id="${e}"]`);N(m,T,!1),o.showBranches&&B(m,l),((t,e)=>{const i=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const r=e[t];r.parents&&r.parents.length>0&&r.parents.forEach((t=>{D(i,e[t],r,e)}))}))})(m,T),N(m,T,!0),n.u.insertTitle(m,"gitTitleText",o.titleTopMargin,c.db.getDiagramTitle()),(0,n.v)(void 0,m,o.diagramPadding,o.useMaxWidth??a.useMaxWidth)}},styles:t=>`\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0,1,2,3,4,5,6,7].map((e=>`\n .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }\n .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }\n .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }\n .label${e} { fill: ${t["git"+e]}; }\n .arrow${e} { stroke: ${t["git"+e]}; }\n `)).join("\n")}\n\n .branch {\n stroke-width: 1;\n stroke: ${t.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}\n .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}\n .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }\n .tag-hole { fill: ${t.textColor}; }\n\n .commit-merge {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n .commit-reverse {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/532.b721fe9b.js b/assets/js/532.b721fe9b.js new file mode 100644 index 0000000000..44d50943e7 --- /dev/null +++ b/assets/js/532.b721fe9b.js @@ -0,0 +1,11907 @@ +"use strict"; +exports.id = 532; +exports.ids = [532]; +exports.modules = { + +/***/ 42494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "bK": () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js + + + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue/* default */.Z)(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js +var isPlainObject = __webpack_require__(37514); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = (0,isArray/* default */.Z)(srcValue), + isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue), + isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if ((0,isArray/* default */.Z)(objValue)) { + newValue = objValue; + } + else if ((0,isArrayLikeObject/* default */.Z)(objValue)) { + newValue = (0,_copyArray/* default */.Z)(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true); + } + else { + newValue = []; + } + } + else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) { + newValue = objValue; + if ((0,isArguments/* default */.Z)(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) { + newValue = (0,_initCloneObject/* default */.Z)(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + (0,_baseFor/* default */.Z)(source, function(srcValue, key) { + stack || (stack = new _Stack/* default */.Z); + if ((0,isObject/* default */.Z)(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, keysIn/* default */.Z); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return (0,_baseRest/* default */.Z)(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default.Date.now */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "k": () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 31667: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _Stack) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules +var _ListCache = __webpack_require__(67308); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache/* default */.Z; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js +var _Map = __webpack_require__(86183); +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache/* default */.Z) { + var pairs = data.__data__; + if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache/* default */.Z(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache/* default */.Z(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + + +/***/ }), + +/***/ 84073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Built-in value references. */ +var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 87668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _arrayLikeKeys) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = (0,isArray/* default */.Z)(value), + isArg = !isArr && (0,isArguments/* default */.Z)(value), + isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value), + isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + (0,_isIndex/* default */.Z)(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 72954: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value); + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue); + + +/***/ }), + +/***/ 74752: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904); + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) { + (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 61395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFor) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 69581: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203); +/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211); +/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227); + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + ''); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 41884: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073); + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer)); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer); + + +/***/ }), + +/***/ 91050: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer); + + +/***/ }), + +/***/ 12701: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884); + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray); + + +/***/ }), + +/***/ 87215: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray); + + +/***/ }), + +/***/ 31899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752); + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue); + } else { + (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject); + + +/***/ }), + +/***/ 77904: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508); + + +var defineProperty = (function() { + try { + var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 12513: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851); + + +/** Built-in value references. */ +var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 73658: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _initCloneObject) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!(0,isObject/* default */.Z)(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object)) + ? _baseCreate((0,_getPrototype/* default */.Z)(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + + +/***/ }), + +/***/ 56009: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex); + + +/***/ }), + +/***/ 50439: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226); + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length)) + : (type == 'string' && index in object) + ) { + return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value); + } + return false; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 81211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _overRest) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 27227: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _setToString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js +var _defineProperty = __webpack_require__(77904); +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) { + return (0,_defineProperty/* default */.Z)(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': (0,constant/* default */.Z)(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 62002: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 69203: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity); + + +/***/ }), + +/***/ 836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject); + + +/***/ }), + +/***/ 37514: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) { + return false; + } + var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 32957: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_keysIn) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules +var _arrayLikeKeys = __webpack_require__(87668); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!(0,isObject/* default */.Z)(object)) { + return _nativeKeysIn(object); + } + var isProto = (0,_isPrototype/* default */.Z)(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 46532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "diagram": () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/commonDb-573409be.js + 5 modules +var commonDb_573409be = __webpack_require__(70044); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaidAPI-3ae0f2f0.js + 5 modules +var mermaidAPI_3ae0f2f0 = __webpack_require__(43047); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 192 modules +var src = __webpack_require__(59373); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 71 modules +var dagre = __webpack_require__(42494); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/utils-d622194a.js +var utils_d622194a = __webpack_require__(81188); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = ((/* unused pure expression or super */ null && (stringify))); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate_validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate_validate); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return unsafeStringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// EXTERNAL MODULE: external "crypto" +var external_crypto_ = __webpack_require__(6113); +var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.js +var purify_es = __webpack_require__(20683); +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27484); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(17967); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/erDiagram-20cc9db4.js + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 23, 25, 27, 29, 30, 31, 51], $V3 = [1, 17], $V4 = [1, 18], $V5 = [1, 19], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 25], $Va = [1, 30], $Vb = [1, 31], $Vc = [1, 32], $Vd = [1, 33], $Ve = [6, 9, 11, 15, 20, 23, 25, 27, 29, 30, 31, 44, 45, 46, 47, 51], $Vf = [1, 45], $Vg = [30, 31, 48, 49], $Vh = [4, 6, 9, 11, 23, 25, 27, 29, 30, 31, 51], $Vi = [44, 45, 46, 47], $Vj = [22, 37], $Vk = [1, 65], $Vl = [1, 64], $Vm = [22, 37, 39, 41]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "ER_DIAGRAM": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "entityName": 17, "relSpec": 18, "role": 19, "BLOCK_START": 20, "attributes": 21, "BLOCK_STOP": 22, "title": 23, "title_value": 24, "acc_title": 25, "acc_title_value": 26, "acc_descr": 27, "acc_descr_value": 28, "acc_descr_multiline_value": 29, "ALPHANUM": 30, "ENTITY_NAME": 31, "attribute": 32, "attributeType": 33, "attributeName": 34, "attributeKeyTypeList": 35, "attributeComment": 36, "ATTRIBUTE_WORD": 37, "attributeKeyType": 38, "COMMA": 39, "ATTRIBUTE_KEY": 40, "COMMENT": 41, "cardinality": 42, "relType": 43, "ZERO_OR_ONE": 44, "ZERO_OR_MORE": 45, "ONE_OR_MORE": 46, "ONLY_ONE": 47, "NON_IDENTIFYING": 48, "IDENTIFYING": 49, "WORD": 50, "open_directive": 51, "type_directive": 52, "arg_directive": 53, "close_directive": 54, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "ER_DIAGRAM", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 20: "BLOCK_START", 22: "BLOCK_STOP", 23: "title", 24: "title_value", 25: "acc_title", 26: "acc_title_value", 27: "acc_descr", 28: "acc_descr_value", 29: "acc_descr_multiline_value", 30: "ALPHANUM", 31: "ENTITY_NAME", 37: "ATTRIBUTE_WORD", 39: "COMMA", 40: "ATTRIBUTE_KEY", 41: "COMMENT", 44: "ZERO_OR_ONE", 45: "ZERO_OR_MORE", 46: "ONE_OR_MORE", 47: "ONLY_ONE", 48: "NON_IDENTIFYING", 49: "IDENTIFYING", 50: "WORD", 51: "open_directive", 52: "type_directive", 53: "arg_directive", 54: "close_directive" }, + productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 5], [10, 4], [10, 3], [10, 1], [10, 2], [10, 2], [10, 2], [10, 1], [17, 1], [17, 1], [21, 1], [21, 2], [32, 2], [32, 3], [32, 3], [32, 4], [33, 1], [34, 1], [35, 1], [35, 3], [38, 1], [36, 1], [18, 3], [42, 1], [42, 1], [42, 1], [42, 1], [43, 1], [43, 1], [19, 1], [19, 1], [19, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + break; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 12: + yy.addEntity($$[$0 - 4]); + yy.addEntity($$[$0 - 2]); + yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]); + break; + case 13: + yy.addEntity($$[$0 - 3]); + yy.addAttributes($$[$0 - 3], $$[$0 - 1]); + break; + case 14: + yy.addEntity($$[$0 - 2]); + break; + case 15: + yy.addEntity($$[$0]); + break; + case 16: + case 17: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 18: + case 19: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 20: + case 43: + this.$ = $$[$0]; + break; + case 21: + case 41: + case 42: + this.$ = $$[$0].replace(/"/g, ""); + break; + case 22: + case 30: + this.$ = [$$[$0]]; + break; + case 23: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 24: + this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] }; + break; + case 25: + this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] }; + break; + case 26: + this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] }; + break; + case 27: + this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] }; + break; + case 28: + case 29: + case 32: + this.$ = $$[$0]; + break; + case 31: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 33: + this.$ = $$[$0].replace(/"/g, ""); + break; + case 34: + this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] }; + break; + case 35: + this.$ = yy.Cardinality.ZERO_OR_ONE; + break; + case 36: + this.$ = yy.Cardinality.ZERO_OR_MORE; + break; + case 37: + this.$ = yy.Cardinality.ONE_OR_MORE; + break; + case 38: + this.$ = yy.Cardinality.ONLY_ONE; + break; + case 39: + this.$ = yy.Identification.NON_IDENTIFYING; + break; + case 40: + this.$ = yy.Identification.IDENTIFYING; + break; + case 44: + yy.parseDirective("%%{", "open_directive"); + break; + case 45: + yy.parseDirective($$[$0], "type_directive"); + break; + case 46: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 47: + yy.parseDirective("}%%", "close_directive", "er"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 51: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 51: $V1 }, { 13: 8, 52: [1, 9] }, { 52: [2, 44] }, { 6: [1, 10], 7: 15, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 51: $V1 }, { 1: [2, 2] }, { 14: 23, 15: [1, 24], 54: $V9 }, o([15, 54], [2, 45]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 15, 10: 26, 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 51: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), o($V2, [2, 15], { 18: 27, 42: 29, 20: [1, 28], 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd }), { 24: [1, 34] }, { 26: [1, 35] }, { 28: [1, 36] }, o($V2, [2, 19]), o($Ve, [2, 20]), o($Ve, [2, 21]), { 11: [1, 37] }, { 16: 38, 53: [1, 39] }, { 11: [2, 47] }, o($V2, [2, 5]), { 17: 40, 30: $V7, 31: $V8 }, { 21: 41, 22: [1, 42], 32: 43, 33: 44, 37: $Vf }, { 43: 46, 48: [1, 47], 49: [1, 48] }, o($Vg, [2, 35]), o($Vg, [2, 36]), o($Vg, [2, 37]), o($Vg, [2, 38]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($Vh, [2, 9]), { 14: 49, 54: $V9 }, { 54: [2, 46] }, { 15: [1, 50] }, { 22: [1, 51] }, o($V2, [2, 14]), { 21: 52, 22: [2, 22], 32: 43, 33: 44, 37: $Vf }, { 34: 53, 37: [1, 54] }, { 37: [2, 28] }, { 42: 55, 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd }, o($Vi, [2, 39]), o($Vi, [2, 40]), { 11: [1, 56] }, { 19: 57, 30: [1, 60], 31: [1, 59], 50: [1, 58] }, o($V2, [2, 13]), { 22: [2, 23] }, o($Vj, [2, 24], { 35: 61, 36: 62, 38: 63, 40: $Vk, 41: $Vl }), o([22, 37, 40, 41], [2, 29]), o([30, 31], [2, 34]), o($Vh, [2, 10]), o($V2, [2, 12]), o($V2, [2, 41]), o($V2, [2, 42]), o($V2, [2, 43]), o($Vj, [2, 25], { 36: 66, 39: [1, 67], 41: $Vl }), o($Vj, [2, 26]), o($Vm, [2, 30]), o($Vj, [2, 33]), o($Vm, [2, 32]), o($Vj, [2, 27]), { 38: 68, 40: $Vk }, o($Vm, [2, 31])], + defaultActions: { 5: [2, 44], 7: [2, 2], 25: [2, 47], 39: [2, 46], 45: [2, 28], 52: [2, 23] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("acc_title"); + return 25; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 27; + case 3: + this.popState(); + return "acc_descr_value"; + case 4: + this.begin("acc_descr_multiline"); + break; + case 5: + this.popState(); + break; + case 6: + return "acc_descr_multiline_value"; + case 7: + this.begin("open_directive"); + return 51; + case 8: + this.begin("type_directive"); + return 52; + case 9: + this.popState(); + this.begin("arg_directive"); + return 15; + case 10: + this.popState(); + this.popState(); + return 54; + case 11: + return 53; + case 12: + return 11; + case 13: + break; + case 14: + return 9; + case 15: + return 31; + case 16: + return 50; + case 17: + return 4; + case 18: + this.begin("block"); + return 20; + case 19: + return 39; + case 20: + break; + case 21: + return 40; + case 22: + return 37; + case 23: + return 37; + case 24: + return 41; + case 25: + break; + case 26: + this.popState(); + return 22; + case 27: + return yy_.yytext[0]; + case 28: + return 44; + case 29: + return 46; + case 30: + return 46; + case 31: + return 46; + case 32: + return 44; + case 33: + return 44; + case 34: + return 45; + case 35: + return 45; + case 36: + return 45; + case 37: + return 45; + case 38: + return 45; + case 39: + return 46; + case 40: + return 45; + case 41: + return 46; + case 42: + return 47; + case 43: + return 47; + case 44: + return 47; + case 45: + return 47; + case 46: + return 44; + case 47: + return 45; + case 48: + return 46; + case 49: + return 48; + case 50: + return 49; + case 51: + return 49; + case 52: + return 48; + case 53: + return 48; + case 54: + return 48; + case 55: + return 30; + case 56: + return yy_.yytext[0]; + case 57: + return 6; + } + }, + rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:[\s]+)/i, /^(?:"[^"%\r\n\v\b\\]+")/i, /^(?:"[^"]*")/i, /^(?:erDiagram\b)/i, /^(?:\{)/i, /^(?:,)/i, /^(?:\s+)/i, /^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i, /^(?:"[^"]*")/i, /^(?:[\n]+)/i, /^(?:\})/i, /^(?:.)/i, /^(?:one or zero\b)/i, /^(?:one or more\b)/i, /^(?:one or many\b)/i, /^(?:1\+)/i, /^(?:\|o\b)/i, /^(?:zero or one\b)/i, /^(?:zero or more\b)/i, /^(?:zero or many\b)/i, /^(?:0\+)/i, /^(?:\}o\b)/i, /^(?:many\(0\))/i, /^(?:many\(1\))/i, /^(?:many\b)/i, /^(?:\}\|)/i, /^(?:one\b)/i, /^(?:only one\b)/i, /^(?:1\b)/i, /^(?:\|\|)/i, /^(?:o\|)/i, /^(?:o\{)/i, /^(?:\|\{)/i, /^(?:\.\.)/i, /^(?:--)/i, /^(?:to\b)/i, /^(?:optionally to\b)/i, /^(?:\.-)/i, /^(?:-\.)/i, /^(?:[A-Za-z][A-Za-z0-9\-_]*)/i, /^(?:.)/i, /^(?:$)/i], + conditions: { "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "open_directive": { "rules": [8], "inclusive": false }, "type_directive": { "rules": [9, 10], "inclusive": false }, "arg_directive": { "rules": [10, 11], "inclusive": false }, "block": { "rules": [19, 20, 21, 22, 23, 24, 25, 26, 27], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 12, 13, 14, 15, 16, 17, 18, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const erParser = parser; +let entities = {}; +let relationships = []; +const Cardinality = { + ZERO_OR_ONE: "ZERO_OR_ONE", + ZERO_OR_MORE: "ZERO_OR_MORE", + ONE_OR_MORE: "ONE_OR_MORE", + ONLY_ONE: "ONLY_ONE" +}; +const Identification = { + NON_IDENTIFYING: "NON_IDENTIFYING", + IDENTIFYING: "IDENTIFYING" +}; +const parseDirective = function(statement, context, type) { + mermaidAPI_3ae0f2f0.m.parseDirective(this, statement, context, type); +}; +const addEntity = function(name) { + if (entities[name] === void 0) { + entities[name] = { attributes: [] }; + commonDb_573409be.l.info("Added new entity :", name); + } + return entities[name]; +}; +const getEntities = () => entities; +const addAttributes = function(entityName, attribs) { + let entity = addEntity(entityName); + let i; + for (i = attribs.length - 1; i >= 0; i--) { + entity.attributes.push(attribs[i]); + commonDb_573409be.l.debug("Added attribute ", attribs[i].attributeName); + } +}; +const addRelationship = function(entA, rolA, entB, rSpec) { + let rel = { + entityA: entA, + roleA: rolA, + entityB: entB, + relSpec: rSpec + }; + relationships.push(rel); + commonDb_573409be.l.debug("Added new relationship :", rel); +}; +const getRelationships = () => relationships; +const clear = function() { + entities = {}; + relationships = []; + (0,commonDb_573409be.y)(); +}; +const erDb = { + Cardinality, + Identification, + parseDirective, + getConfig: () => (0,commonDb_573409be.g)().er, + addEntity, + addAttributes, + getEntities, + addRelationship, + getRelationships, + clear, + setAccTitle: commonDb_573409be.o, + getAccTitle: commonDb_573409be.p, + setAccDescription: commonDb_573409be.v, + getAccDescription: commonDb_573409be.q, + setDiagramTitle: commonDb_573409be.w, + getDiagramTitle: commonDb_573409be.x +}; +const ERMarkers = { + ONLY_ONE_START: "ONLY_ONE_START", + ONLY_ONE_END: "ONLY_ONE_END", + ZERO_OR_ONE_START: "ZERO_OR_ONE_START", + ZERO_OR_ONE_END: "ZERO_OR_ONE_END", + ONE_OR_MORE_START: "ONE_OR_MORE_START", + ONE_OR_MORE_END: "ONE_OR_MORE_END", + ZERO_OR_MORE_START: "ZERO_OR_MORE_START", + ZERO_OR_MORE_END: "ZERO_OR_MORE_END" +}; +const insertMarkers = function(elem, conf2) { + let marker; + elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18 M15,0 L15,18"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_END).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,0 L3,18 M9,0 L9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 21).attr("cy", 9).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_END).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 9).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,0 L21,18"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_END).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 48).attr("cy", 18).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_END).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 18).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18"); + return; +}; +const erMarkers = { + ERMarkers, + insertMarkers +}; +const BAD_ID_CHARS_REGEXP = /[^\dA-Za-z](\W)*/g; +let conf = {}; +let entityNameIds = /* @__PURE__ */ new Map(); +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const drawAttributes = (groupNode, entityTextNode, attributes) => { + const heightPadding = conf.entityPadding / 3; + const widthPadding = conf.entityPadding / 3; + const attrFontSize = conf.fontSize * 0.85; + const labelBBox = entityTextNode.node().getBBox(); + const attributeNodes = []; + let hasKeyType = false; + let hasComment = false; + let maxTypeWidth = 0; + let maxNameWidth = 0; + let maxKeyWidth = 0; + let maxCommentWidth = 0; + let cumulativeHeight = labelBBox.height + heightPadding * 2; + let attrNum = 1; + attributes.forEach((item) => { + if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) { + hasKeyType = true; + } + if (item.attributeComment !== void 0) { + hasComment = true; + } + }); + attributes.forEach((item) => { + const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`; + let nodeHeight = 0; + const attributeType = (0,commonDb_573409be.z)(item.attributeType); + const typeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-type`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,commonDb_573409be.g)().fontFamily).style("font-size", attrFontSize + "px").text(attributeType); + const nameNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-name`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,commonDb_573409be.g)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeName); + const attributeNode = {}; + attributeNode.tn = typeNode; + attributeNode.nn = nameNode; + const typeBBox = typeNode.node().getBBox(); + const nameBBox = nameNode.node().getBBox(); + maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width); + maxNameWidth = Math.max(maxNameWidth, nameBBox.width); + nodeHeight = Math.max(typeBBox.height, nameBBox.height); + if (hasKeyType) { + const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(",") : ""; + const keyTypeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-key`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,commonDb_573409be.g)().fontFamily).style("font-size", attrFontSize + "px").text(keyTypeNodeText); + attributeNode.kn = keyTypeNode; + const keyTypeBBox = keyTypeNode.node().getBBox(); + maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width); + nodeHeight = Math.max(nodeHeight, keyTypeBBox.height); + } + if (hasComment) { + const commentNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-comment`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,commonDb_573409be.g)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeComment || ""); + attributeNode.cn = commentNode; + const commentNodeBBox = commentNode.node().getBBox(); + maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width); + nodeHeight = Math.max(nodeHeight, commentNodeBBox.height); + } + attributeNode.height = nodeHeight; + attributeNodes.push(attributeNode); + cumulativeHeight += nodeHeight + heightPadding * 2; + attrNum += 1; + }); + let widthPaddingFactor = 4; + if (hasKeyType) { + widthPaddingFactor += 2; + } + if (hasComment) { + widthPaddingFactor += 2; + } + const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth; + const bBox = { + width: Math.max( + conf.minEntityWidth, + Math.max( + labelBBox.width + conf.entityPadding * 2, + maxWidth + widthPadding * widthPaddingFactor + ) + ), + height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2) + }; + if (attributes.length > 0) { + const spareColumnWidth = Math.max( + 0, + (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2) + ); + entityTextNode.attr( + "transform", + "translate(" + bBox.width / 2 + "," + (heightPadding + labelBBox.height / 2) + ")" + ); + let heightOffset = labelBBox.height + heightPadding * 2; + let attribStyle = "attributeBoxOdd"; + attributeNodes.forEach((attributeNode) => { + const alignY = heightOffset + heightPadding + attributeNode.height / 2; + attributeNode.tn.attr("transform", "translate(" + widthPadding + "," + alignY + ")"); + const typeRect = groupNode.insert("rect", "#" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr("x", 0).attr("y", heightOffset).attr("width", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + const nameXOffset = parseFloat(typeRect.attr("x")) + parseFloat(typeRect.attr("width")); + attributeNode.nn.attr( + "transform", + "translate(" + (nameXOffset + widthPadding) + "," + alignY + ")" + ); + const nameRect = groupNode.insert("rect", "#" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr("x", nameXOffset).attr("y", heightOffset).attr("width", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + let keyTypeAndCommentXOffset = parseFloat(nameRect.attr("x")) + parseFloat(nameRect.attr("width")); + if (hasKeyType) { + attributeNode.kn.attr( + "transform", + "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" + ); + const keyTypeRect = groupNode.insert("rect", "#" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr("x")) + parseFloat(keyTypeRect.attr("width")); + } + if (hasComment) { + attributeNode.cn.attr( + "transform", + "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" + ); + groupNode.insert("rect", "#" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, "true").attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + } + heightOffset += attributeNode.height + heightPadding * 2; + attribStyle = attribStyle === "attributeBoxOdd" ? "attributeBoxEven" : "attributeBoxOdd"; + }); + } else { + bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight); + entityTextNode.attr("transform", "translate(" + bBox.width / 2 + "," + bBox.height / 2 + ")"); + } + return bBox; +}; +const drawEntities = function(svgNode, entities2, graph) { + const keys = Object.keys(entities2); + let firstOne; + keys.forEach(function(entityName) { + const entityId = generateId(entityName, "entity"); + entityNameIds.set(entityName, entityId); + const groupNode = svgNode.append("g").attr("id", entityId); + firstOne = firstOne === void 0 ? entityId : firstOne; + const textId = "text-" + entityId; + const textNode = groupNode.append("text").classed("er entityLabel", true).attr("id", textId).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "middle").style("font-family", (0,commonDb_573409be.g)().fontFamily).style("font-size", conf.fontSize + "px").text(entityName); + const { width: entityWidth, height: entityHeight } = drawAttributes( + groupNode, + textNode, + entities2[entityName].attributes + ); + const rectNode = groupNode.insert("rect", "#" + textId).classed("er entityBox", true).attr("x", 0).attr("y", 0).attr("width", entityWidth).attr("height", entityHeight); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(entityId, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id: entityId + }); + }); + return firstOne; +}; +const adjustEntities = function(svgNode, graph) { + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + svgNode.select("#" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" + ); + } + }); +}; +const getEdgeName = function(rel) { + return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, ""); +}; +const addRelationships = function(relationships2, g) { + relationships2.forEach(function(r) { + g.setEdge( + entityNameIds.get(r.entityA), + entityNameIds.get(r.entityB), + { relationship: r }, + getEdgeName(r) + ); + }); + return relationships2; +}; +let relCnt = 0; +const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { + relCnt++; + const edge = g.edge( + entityNameIds.get(rel.entityA), + entityNameIds.get(rel.entityB), + getEdgeName(rel) + ); + const lineFunction = (0,src/* line */.jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(src/* curveBasis */.$0Z); + const svgPath = svg.insert("path", "#" + insert).classed("er relationshipLine", true).attr("d", lineFunction(edge.points)).style("stroke", conf.stroke).style("fill", "none"); + if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) { + svgPath.attr("stroke-dasharray", "8,8"); + } + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + switch (rel.relSpec.cardA) { + case diagObj.db.Cardinality.ZERO_OR_ONE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_END + ")"); + break; + case diagObj.db.Cardinality.ZERO_OR_MORE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_END + ")"); + break; + case diagObj.db.Cardinality.ONE_OR_MORE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_END + ")"); + break; + case diagObj.db.Cardinality.ONLY_ONE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_END + ")"); + break; + } + switch (rel.relSpec.cardB) { + case diagObj.db.Cardinality.ZERO_OR_ONE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_START + ")" + ); + break; + case diagObj.db.Cardinality.ZERO_OR_MORE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_START + ")" + ); + break; + case diagObj.db.Cardinality.ONE_OR_MORE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_START + ")" + ); + break; + case diagObj.db.Cardinality.ONLY_ONE: + svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_START + ")"); + break; + } + const len = svgPath.node().getTotalLength(); + const labelPoint = svgPath.node().getPointAtLength(len * 0.5); + const labelId = "rel" + relCnt; + const labelNode = svg.append("text").classed("er relationshipLabel", true).attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).style("text-anchor", "middle").style("dominant-baseline", "middle").style("font-family", (0,commonDb_573409be.g)().fontFamily).style("font-size", conf.fontSize + "px").text(rel.roleA); + const labelBBox = labelNode.node().getBBox(); + svg.insert("rect", "#" + labelId).classed("er relationshipLabelBox", true).attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height); +}; +const draw = function(text, id, _version, diagObj) { + conf = (0,commonDb_573409be.g)().er; + commonDb_573409be.l.info("Drawing ER diagram"); + const securityLevel = (0,commonDb_573409be.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const svg = root.select(`[id='${id}']`); + erMarkers.insertMarkers(svg, conf); + let g; + g = new graphlib/* Graph */.k({ + multigraph: true, + directed: true, + compound: false + }).setGraph({ + rankdir: conf.layoutDirection, + marginx: 20, + marginy: 20, + nodesep: 100, + edgesep: 100, + ranksep: 100 + }).setDefaultEdgeLabel(function() { + return {}; + }); + const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g); + const relationships2 = addRelationships(diagObj.db.getRelationships(), g); + (0,dagre/* layout */.bK)(g); + adjustEntities(svg, g); + relationships2.forEach(function(rel) { + drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj); + }); + const padding = conf.diagramPadding; + utils_d622194a.u.insertTitle(svg, "entityTitleText", conf.titleTopMargin, diagObj.db.getDiagramTitle()); + const svgBounds = svg.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,utils_d622194a.k)(svg, height, width, conf.useMaxWidth); + svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); +}; +const MERMAID_ERDIAGRAM_UUID = "28e9f9db-3c8d-5aa5-9faf-44286ae5937c"; +function generateId(str = "", prefix = "") { + const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, ""); + return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${esm_node_v5( + str, + MERMAID_ERDIAGRAM_UUID + )}`; +} +function strWithHyphen(str = "") { + return str.length > 0 ? `${str}-` : ""; +} +const erRenderer = { + setConf, + draw +}; +const getStyles = (options) => ` + .entityBox { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + } + + .attributeBoxOdd { + fill: ${options.attributeBackgroundColorOdd}; + stroke: ${options.nodeBorder}; + } + + .attributeBoxEven { + fill: ${options.attributeBackgroundColorEven}; + stroke: ${options.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${options.tertiaryColor}; + opacity: 0.7; + background-color: ${options.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .relationshipLine { + stroke: ${options.lineColor}; + } + + .entityTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const erStyles = getStyles; +const diagram = { + parser: erParser, + db: erDb, + renderer: erRenderer, + styles: erStyles +}; + +//# sourceMappingURL=erDiagram-20cc9db4.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/54094f37.591bc31b.js b/assets/js/54094f37.591bc31b.js new file mode 100644 index 0000000000..cf64a6cb66 --- /dev/null +++ b/assets/js/54094f37.591bc31b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3172],{3097:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var n=a(7462),r=(a(7294),a(3905));a(5657);const o={},s="EMITTER_MODEL",i={unversionedId:"about/references/keywords/EMITTER_MODEL",id:"about/references/keywords/EMITTER_MODEL",title:"EMITTER_MODEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/EMITTER_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMITTER_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE"},next:{title:"END",permalink:"/ecalc/docs/about/references/keywords/END"}},l={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:d},m="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(m,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"emitter_model"},"EMITTER_MODEL"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"},"EMITTER_MODEL")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Required"),(0,r.kt)("th",{parentName:"tr",align:null},"Child of"),(0,r.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"DIRECT_EMITTERS")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"EMISSION_RATE")," ",(0,r.kt)("br",null)," ",(0,r.kt)("inlineCode",{parentName:"td"},"QUOTA"))))),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"The emitter model specifies the data to calculate the direct emissions on an installation. This data is used to set up\na function that may be evaluated for a set of time series and return a result including the emissions emitted and\nthe related cost of the emissions."),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSION_RATE"},"EMISSION_RATE")," describes the rate ","[kg/day]"," of emissions and\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/QUOTA"},"QUOTA")," specifies the cost of emission per rate of\nemission ","[NOK/kg]",". Both are required."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"EMITTER_MODEL:\n - EMISSION_RATE: <emission rate [kg/day]>\n QUOTA: <emission cost per emission [NOK/kg]>\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"EMITTER_MODEL:\n - EMISSION_RATE: 4 # [kg/day]\n QUOTA: 10 # [NOK/kg]\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5525.97a2f6fd.js b/assets/js/5525.97a2f6fd.js new file mode 100644 index 0000000000..091be103fd --- /dev/null +++ b/assets/js/5525.97a2f6fd.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5525],{5525:()=>{}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.832a6662.js b/assets/js/55960ee5.832a6662.js new file mode 100644 index 0000000000..5902074176 --- /dev/null +++ b/assets/js/55960ee5.832a6662.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4121],{8070:e=>{e.exports=JSON.parse('[{"label":"release","permalink":"/ecalc/docs/tags/release","count":15},{"label":"eCalc","permalink":"/ecalc/docs/tags/e-calc","count":15}]')}}]); \ No newline at end of file diff --git a/assets/js/573.0273bd3e.js b/assets/js/573.0273bd3e.js new file mode 100644 index 0000000000..b5edfe1042 --- /dev/null +++ b/assets/js/573.0273bd3e.js @@ -0,0 +1,1330 @@ +"use strict"; +exports.id = 573; +exports.ids = [573]; +exports.modules = { + +/***/ 91619: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ is_dark) +}); + +// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(61691); +// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(71610); +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/luminance.js +/* IMPORT */ + + +/* MAIN */ +//SOURCE: https://planetcalc.com/7779 +const luminance = (color) => { + const { r, g, b } = dist_color/* default.parse */.Z.parse(color); + const luminance = .2126 * utils/* default.channel.toLinear */.Z.channel.toLinear(r) + .7152 * utils/* default.channel.toLinear */.Z.channel.toLinear(g) + .0722 * utils/* default.channel.toLinear */.Z.channel.toLinear(b); + return utils/* default.lang.round */.Z.lang.round(luminance); +}; +/* EXPORT */ +/* harmony default export */ const methods_luminance = (luminance); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_light.js +/* IMPORT */ + +/* MAIN */ +const isLight = (color) => { + return methods_luminance(color) >= .5; +}; +/* EXPORT */ +/* harmony default export */ const is_light = (isLight); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_dark.js +/* IMPORT */ + +/* MAIN */ +const isDark = (color) => { + return !is_light(color); +}; +/* EXPORT */ +/* harmony default export */ const is_dark = (isDark); + + +/***/ }), + +/***/ 51573: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7201); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 27], $Vb = [4, 6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "timeline": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "title": 17, "acc_title": 18, "acc_title_value": 19, "acc_descr": 20, "acc_descr_value": 21, "acc_descr_multiline_value": 22, "section": 23, "period_statement": 24, "event_statement": 25, "period": 26, "event": 27, "open_directive": 28, "type_directive": 29, "arg_directive": 30, "close_directive": 31, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "timeline", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 17: "title", 18: "acc_title", 19: "acc_title_value", 20: "acc_descr", 21: "acc_descr_value", 22: "acc_descr_multiline_value", 23: "section", 26: "period", 27: "event", 28: "open_directive", 29: "type_directive", 30: "arg_directive", 31: "close_directive" }, + productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [24, 1], [25, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 11: + yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 12: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccTitle(this.$); + break; + case 13: + case 14: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccDescription(this.$); + break; + case 15: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 19: + yy.addTask($$[$0], 0, ""); + this.$ = $$[$0]; + break; + case 20: + yy.addEvent($$[$0].substr(2)); + this.$ = $$[$0]; + break; + case 21: + yy.parseDirective("%%{", "open_directive"); + break; + case 22: + yy.parseDirective($$[$0], "type_directive"); + break; + case 23: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 24: + yy.parseDirective("}%%", "close_directive", "timeline"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 13: 8, 29: [1, 9] }, { 29: [2, 21] }, { 6: [1, 10], 7: 22, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, { 1: [2, 2] }, { 14: 25, 15: [1, 26], 31: $Va }, o([15, 31], [2, 22]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 22, 10: 28, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 29] }, { 21: [1, 30] }, o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 20]), { 11: [1, 31] }, { 16: 32, 30: [1, 33] }, { 11: [2, 24] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($Vb, [2, 9]), { 14: 34, 31: $Va }, { 31: [2, 23] }, { 11: [1, 35] }, o($Vb, [2, 10])], + defaultActions: { 5: [2, 21], 7: [2, 2], 27: [2, 24], 33: [2, 23] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 28; + case 1: + this.begin("type_directive"); + return 29; + case 2: + this.popState(); + this.begin("arg_directive"); + return 15; + case 3: + this.popState(); + this.popState(); + return 31; + case 4: + return 30; + case 5: + break; + case 6: + break; + case 7: + return 11; + case 8: + break; + case 9: + break; + case 10: + return 4; + case 11: + return 17; + case 12: + this.begin("acc_title"); + return 18; + case 13: + this.popState(); + return "acc_title_value"; + case 14: + this.begin("acc_descr"); + return 20; + case 15: + this.popState(); + return "acc_descr_value"; + case 16: + this.begin("acc_descr_multiline"); + break; + case 17: + this.popState(); + break; + case 18: + return "acc_descr_multiline_value"; + case 19: + return 23; + case 20: + return 27; + case 21: + return 26; + case 22: + return 6; + case 23: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?::\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "open_directive": { "rules": [1], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +let currentTaskId = 0; +const sections = []; +const tasks = []; +const rawTasks = []; +const getCommonDb = () => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.c; +const parseDirective = (statement, context, type) => { + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.p)(globalThis, statement, context, type); +}; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.y)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const addTask = function(period, length, event) { + const rawTask = { + id: currentTaskId++, + section: currentSection, + type: currentSection, + task: period, + score: length ? length : 0, + //if event is defined, then add it the events array + events: event ? [event] : [] + }; + rawTasks.push(rawTask); +}; +const addEvent = function(event) { + const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1); + currentTask.events.push(event); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const timelineDb = { + clear, + getCommonDb, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + addEvent, + parseDirective +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addEvent, + addSection, + addTask, + addTaskOrg, + clear, + default: timelineDb, + getCommonDb, + getSections, + getTasks, + parseDirective +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.class !== void 0) { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + const nText = textData.text.replace(/<br\s*\/?>/gi, " "); + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + const span = textElem.append("tspan"); + span.attr("x", textData.x + textData.textMargin * 2); + span.text(nText); + return textElem; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf) { + const g = elem.append("g"); + const rect = getNoteRect(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf.width; + rect.height = conf.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf) { + const center = task.x + conf.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = getNoteRect(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf.width; + rect.height = conf.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + task.x + 14; + _drawTextCandidateFunc(conf)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds) { + const rectElem = drawRect(elem, { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + class: "rect" + }); + rectElem.lower(); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + "text-anchor": "start", + width: 100, + height: 100, + textMargin: 0, + rx: 0, + ry: 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) { + const { taskFontSize, taskFontFamily } = conf; + const lines = content.split(/<br\s*\/?>/gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf) { + return conf.textPlacement === "fo" ? byFo : conf.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +function wrap(text, width) { + text.each(function() { + var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this), words = text2.text().split(/(\s+|<br>)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); + for (let j = 0; j < words.length; j++) { + word = words[words.length - 1 - j]; + line.push(word); + tspan.text(line.join(" ").trim()); + if (tspan.node().getComputedTextLength() > width || word === "<br>") { + line.pop(); + tspan.text(line.join(" ").trim()); + if (word === "<br>") { + line = [""]; + } else { + line = [word]; + } + tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); + } + } + }); +} +const drawNode = function(elem, node, fullSection, conf) { + const section = fullSection % MAX_SECTIONS - 1; + const nodeElem = elem.append("g"); + node.section = section; + nodeElem.attr( + "class", + (node.class ? node.class + " " : "") + "timeline-node " + ("section-" + section) + ); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.height = Math.max(node.height, node.maxHeight); + node.width = node.width + 2 * node.padding; + textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + defaultBkg(bkgElem, node, section); + return node; +}; +const getVirtualNodeHeight = function(elem, node, conf) { + const textElem = elem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + textElem.remove(); + return bbox.height + fontSize * 1.1 * 0.5 + node.padding; +}; +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + node.type).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + getTextObj, + getNoteRect, + initGraphics, + drawNode, + getVirtualNodeHeight +}; +const draw = function(text, id, version, diagObj) { + var _a, _b, _c, _d; + const conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)(); + const LEFT_MARGIN = conf.leftMargin ?? 50; + (_b = (_a = diagObj.db).clear) == null ? void 0 : _b.call(_a); + diagObj.parser.parse(text + "\n"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("timeline", diagObj.db); + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? ( + // @ts-ignore d3 types are wrong + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) + ) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getCommonDb().getDiagramTitle(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("task", tasks2); + svgDraw.initGraphics(svg); + const sections2 = diagObj.db.getSections(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sections", sections2); + let maxSectionHeight = 0; + let maxTaskHeight = 0; + let depthY = 0; + let sectionBeginY = 0; + let masterX = 50 + LEFT_MARGIN; + let masterY = 50; + sectionBeginY = 50; + let sectionNumber = 0; + let hasSections = true; + sections2.forEach(function(section) { + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 150, + padding: 20, + maxHeight: maxSectionHeight + }; + const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionHeight before draw", sectionHeight); + maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); + }); + let maxEventCount = 0; + let maxEventLineLength = 0; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("tasks.length", tasks2.length); + for (const [i, task] of tasks2.entries()) { + const taskNode = { + number: i, + descr: task, + section: task.section, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight before draw", taskHeight); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20); + maxEventCount = Math.max(maxEventCount, task.events.length); + let maxEventLineLengthTemp = 0; + for (let j = 0; j < task.events.length; j++) { + const event = task.events[j]; + const eventNode = { + descr: event, + section: task.section, + number: task.section, + width: 150, + padding: 20, + maxHeight: 50 + }; + maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf); + } + maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxSectionHeight before draw", maxSectionHeight); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxTaskHeight before draw", maxTaskHeight); + if (sections2 && sections2.length > 0) { + sections2.forEach((section) => { + const tasksForSection = tasks2.filter((task) => task.section === section); + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 200 * Math.max(tasksForSection.length, 1) - 50, + padding: 20, + maxHeight: maxSectionHeight + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode", sectionNode); + const sectionNodeWrapper = svg.append("g"); + const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode output", node); + sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); + masterY += maxSectionHeight + 50; + if (tasksForSection.length > 0) { + drawTasks( + svg, + tasksForSection, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + false + ); + } + masterX += 200 * Math.max(tasksForSection.length, 1); + masterY = sectionBeginY; + sectionNumber++; + }); + } else { + hasSections = false; + drawTasks( + svg, + tasks2, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + true + ); + } + const box = svg.node().getBBox(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("bounds", box); + if (title) { + svg.append("text").text(title).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); + } + depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; + const lineWrapper = svg.append("g").attr("class", "lineWrapper"); + lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.s)( + void 0, + svg, + ((_c = conf.timeline) == null ? void 0 : _c.padding) ?? 50, + ((_d = conf.timeline) == null ? void 0 : _d.useMaxWidth) ?? false + ); +}; +const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, maxTaskHeight, conf, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { + var _a; + for (const task of tasks2) { + const taskNode = { + descr: task.task, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskNode", taskNode); + const taskWrapper = diagram2.append("g").attr("class", "taskWrapper"); + const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf); + const taskHeight = node.height; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight after draw", taskHeight); + taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight); + if (task.events) { + const lineWrapper = diagram2.append("g").attr("class", "lineWrapper"); + let lineLength = maxTaskHeight; + masterY += 100; + lineLength = lineLength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf); + masterY -= 100; + lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr( + "y2", + masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120 + ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); + } + masterX = masterX + 200; + if (isWithoutSections && !((_a = conf.timeline) == null ? void 0 : _a.disableMulticolor)) { + sectionColor++; + } + } + masterY = masterY - 10; +}; +const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf) { + let maxEventHeight = 0; + const eventBeginY = masterY; + masterY = masterY + 100; + for (const event of events) { + const eventNode = { + descr: event, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: 50 + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("eventNode", eventNode); + const eventWrapper = diagram2.append("g").attr("class", "eventWrapper"); + const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf); + const eventHeight = node.height; + maxEventHeight = maxEventHeight + eventHeight; + eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + masterY = masterY + 10 + eventHeight; + } + masterY = eventBeginY; + return maxEventHeight; +}; +const renderer = { + setConf: () => { + }, + draw +}; +const genSections = (options) => { + let sections2 = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections2 += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .lineWrapper line{ + stroke: ${options["cScaleLabel" + i]} ; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections2; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`; +const styles = getStyles; +const diagram = { + db, + renderer, + parser: parser$1, + styles +}; + +//# sourceMappingURL=timeline-definition-de69aca6.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/577efb1d.09dcfef1.js b/assets/js/577efb1d.09dcfef1.js new file mode 100644 index 0000000000..ac5add0ad4 --- /dev/null +++ b/assets/js/577efb1d.09dcfef1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[628],{4944:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>E,contentTitle:()=>s,default:()=>l,frontMatter:()=>o,metadata:()=>S,toc:()=>c});var n=t(7462),a=(t(7294),t(3905));t(5657);const o={},s="STREAM",S={unversionedId:"about/references/keywords/STREAM",id:"about/references/keywords/STREAM",title:"STREAM",description:"MODELS /",source:"@site/docs/about/references/keywords/STREAM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STREAM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"START",permalink:"/ecalc/docs/about/references/keywords/START"},next:{title:"STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS"}},E={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],i={toc:c},d="wrapper";function l(e){let{components:r,...t}=e;return(0,a.kt)(d,(0,n.Z)({},i,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"stream"},"STREAM"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n","[...]"," / ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STAGES"},"STAGES"),"\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STREAMS"},"STREAMS")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"This keyword is not to be confused with ",(0,a.kt)("inlineCode",{parentName:"p"},"STREAMS")," - which is also utilised for ",(0,a.kt)("inlineCode",{parentName:"p"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"))),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"This keyword can ",(0,a.kt)("strong",{parentName:"p"},"only")," be utilised for a ",(0,a.kt)("inlineCode",{parentName:"p"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")," model type and is used under the ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STAGES"},"STAGES")," keyword."),(0,a.kt)("p",null,"This is used to refer a ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STAGES"},"STAGE")," to a previously defined ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STREAMS"},"STREAMS"),". "),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n ...\n")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5989d566.4526e43e.js b/assets/js/5989d566.4526e43e.js new file mode 100644 index 0000000000..5cedaf38c2 --- /dev/null +++ b/assets/js/5989d566.4526e43e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1709],{5856:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var n=a(7462),r=(a(7294),a(3905));a(5657);const l={},o="EMISSIONS",s={unversionedId:"about/references/keywords/EMISSIONS",id:"about/references/keywords/EMISSIONS",title:"EMISSIONS",description:"FUELTYPES /",source:"@site/docs/about/references/keywords/EMISSIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},next:{title:"EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME"}},i={},u=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:u},c="wrapper";function p(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"emissions"},"EMISSIONS"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSIONS"},"EMISSIONS")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Required"),(0,r.kt)("th",{parentName:"tr",align:null},"Child of"),(0,r.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"FUEL_TYPES")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"FACTOR")," ",(0,r.kt)("br",null)," ",(0,r.kt)("inlineCode",{parentName:"td"},"NAME")," ",(0,r.kt)("br",null)," ",(0,r.kt)("inlineCode",{parentName:"td"},"QUOTA")," ",(0,r.kt)("br",null)," ",(0,r.kt)("inlineCode",{parentName:"td"},"TAX"))))),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"In ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSIONS"},"EMISSIONS")," one or more emissions related to the use of fuel is specified as\na list. Each emission entry is ",(0,r.kt)("strong",{parentName:"p"},"required")," to have a ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME")," and a ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACTOR"},"FACTOR"),"."),(0,r.kt)("p",null,"The costs associated with emitting typically have two cost elements:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"a quota price ","[NOK/ton]"," (based on emission mass) and,"),(0,r.kt)("li",{parentName:"ul"},"a tax price ","[NOK/Sm",(0,r.kt)("sup",null,"3"),"]"," based on fuel gas volume.")),(0,r.kt)("p",null,"The names and are chosen due to the CO",(0,r.kt)("sub",null,"2")," emissions quota price (based on CO",(0,r.kt)("sub",null,"2")," mass) and\nthe Norwegian CO",(0,r.kt)("sub",null,"2")," tax"),(0,r.kt)("p",null,"In general, will be multiplied with the calculated emission volume while\nwill be multiplied with the calculated fuel volume to obtain the resulting taxation."),(0,r.kt)("p",null,"The economical parameters are optional."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSIONS:\n - NAME: <name>\n FACTOR: <factor>\n TAX: <expression>\n QUOTA: <expression>\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("p",null,"For example, if you want to add CO",(0,r.kt)("sub",null,"2")," emissions associated to the usage of a ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES"),"\nyou write the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n TAX: 1.5 # [NOK/Sm3]\n QUOTA: 240 # NOK/ton CO2\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5a5e553d.338de790.js b/assets/js/5a5e553d.338de790.js new file mode 100644 index 0000000000..2b3c8e0c93 --- /dev/null +++ b/assets/js/5a5e553d.338de790.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1110],{3917:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>k,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));a(5657);const l={},o="EXTRAPOLATION",i={unversionedId:"about/references/keywords/EXTRAPOLATION",id:"about/references/keywords/EXTRAPOLATION",title:"EXTRAPOLATION",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/EXTRAPOLATION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EXTRAPOLATION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION"},next:{title:"FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"}},d={},p=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}],s={toc:p},m="wrapper";function k(e){let{components:t,...a}=e;return(0,r.kt)(m,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"extrapolation"},"EXTRAPOLATION"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EXTRAPOLATION"},"EXTRAPOLATION")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Required"),(0,r.kt)("th",{parentName:"tr",align:null},"Child of"),(0,r.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"TIME_SERIES")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"None"))))),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Only valid for ",(0,r.kt)("inlineCode",{parentName:"p"},"TIME_SERIES")," of ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," ",(0,r.kt)("inlineCode",{parentName:"p"},"MISCELLANEOUS"),". For type\n",(0,r.kt)("inlineCode",{parentName:"p"},"DEFAULT")," the keyword is not supported as input, and the functionality is defaulted to ",(0,r.kt)("inlineCode",{parentName:"p"},"False"),".")),(0,r.kt)("p",null,"Defines whether the rates in the source should be set to 0 after the last time step (",(0,r.kt)("inlineCode",{parentName:"p"},"False"),"), or equal\nto value at last time step after the time interval (",(0,r.kt)("inlineCode",{parentName:"p"},"True"),")."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"EXTRAPOLATION: <True/False>\n")),(0,r.kt)("h3",{id:"requirements"},"Requirements"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"th"},"TYPE")," set to"),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"th"},"EXTRAPOLATION")," default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"DEFAULT")),(0,r.kt)("td",{parentName:"tr",align:null},"always ",(0,r.kt)("inlineCode",{parentName:"td"},"False"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"MISCELLANEOUS")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"False"))))),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("p",null,"See the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," ",(0,r.kt)("inlineCode",{parentName:"p"},"time_series_format"),"."))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5c08a402.d1babd15.js b/assets/js/5c08a402.d1babd15.js new file mode 100644 index 0000000000..1c6230a468 --- /dev/null +++ b/assets/js/5c08a402.d1babd15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8846],{6280:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var i=a(7462),o=(a(7294),a(3905));a(5657);const n={title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",sidebar_position:2},r="v8.1 to v8.2",s={unversionedId:"about/migration_guides/v8-1_to_v8-2",id:"about/migration_guides/v8-1_to_v8-2",title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",source:"@site/docs/about/migration_guides/v8-1_to_v8-2.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-1_to_v8-2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-1_to_v8-2.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",sidebar_position:2},sidebar:"about",previous:{title:"v8 to v8.1",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81"},next:{title:"v8.2 to v8.3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3"}},l={},d=[{value:"Modelling",id:"modelling",level:2},{value:"YAML",id:"yaml",level:3},{value:"LTP",id:"ltp",level:4},{value:"Result",id:"result",level:2},{value:"Operational settings used is now 1-based",id:"operational-settings-used-is-now-1-based",level:3},{value:"Resampling of rates changed from forward filling to average rates",id:"resampling-of-rates-changed-from-forward-filling-to-average-rates",level:3},{value:"LTP .tsv file",id:"ltp-tsv-file",level:3},{value:"STP .tsv file",id:"stp-tsv-file",level:3},{value:"Emissions, structure and order",id:"emissions-structure-and-order",level:3},{value:"Behaviour",id:"behaviour",level:2},{value:"Conditions",id:"conditions",level:2}],u={toc:d},m="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(m,(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"v81-to-v82"},"v8.1 to v8.2"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("a",{parentName:"li",href:"#modelling"},"Model changes")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("a",{parentName:"li",href:"#result"},"Result changes")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("a",{parentName:"li",href:"#behaviour"},"Behaviour"))),(0,o.kt)("h2",{id:"modelling"},"Modelling"),(0,o.kt)("h3",{id:"yaml"},"YAML"),(0,o.kt)("h4",{id:"ltp"},"LTP"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Two new consumer categories are added: ",(0,o.kt)("a",{parentName:"li",href:"../references/keywords/CATEGORY"},(0,o.kt)("inlineCode",{parentName:"a"},"HEATER"))," and ",(0,o.kt)("a",{parentName:"li",href:"../references/keywords/CATEGORY"},(0,o.kt)("inlineCode",{parentName:"a"},"BOILER")))),(0,o.kt)("h2",{id:"result"},"Result"),(0,o.kt)("h3",{id:"operational-settings-used-is-now-1-based"},"Operational settings used is now 1-based"),(0,o.kt)("p",null,"Consumer systems will now refer to the first operational setting as ",(0,o.kt)("strong",{parentName:"p"},"1")," instead of ",(0,o.kt)("strong",{parentName:"p"},"0"),". ",(0,o.kt)("strong",{parentName:"p"},"0"),' means that "No setting was used", indicating that none of the operational settings was able to handle the stream. This will make it easier for users to find the corresponding operational setting that is/was active for the different timesteps.'),(0,o.kt)("h3",{id:"resampling-of-rates-changed-from-forward-filling-to-average-rates"},"Resampling of rates changed from forward filling to average rates"),(0,o.kt)("p",null,"All calculations are performed on a global time vector, which is the union of all dates found in the\ninput resource files (csv files) where ",(0,o.kt)("a",{parentName:"p",href:"../references/keywords/INFLUENCE_TIME_VECTOR"},"INFLUENCE_TIME_VECTOR")," is set to\nTrue, dates found in the eCalc model yaml-file (temporal models), and dates in the requested output frequency."),(0,o.kt)("p",null,"If the global time vector and the dates in the requested output frequency does not coincide fully, a resampling of the\nresults needs to be performed. Previously this was done by simply picking the first\navailable rate in the time interval (forward filling). The rates are thought to be constant in a period between two\ndates, hence the forward filling will disconnect the rates and the cumulative volumes. This has now been changed to\ncalculating the average rate from all dates in the global time vector within a date range in the requested output\nfrequency, to keep the rate and cumulative consistent with each other. This average will take into\naccount the lengths of the periods and the regularity within each period. The figure below shows a comparison of how the\nresampling would previously have been done compared to how it is done now when making quarterly output from monthly results."),(0,o.kt)("p",null,(0,o.kt)("img",{src:a(7698).Z,width:"1790",height:"1116"})),(0,o.kt)("p",null,"TLDR; this change will make it possible to use the rate output data (rate from a point in time) from eCalc correctly."),(0,o.kt)("h3",{id:"ltp-tsv-file"},"LTP .tsv file"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Column Total CO2 is removed from LTP output (both for fixed & mobile installations)"),(0,o.kt)("li",{parentName:"ol"},"Add relevant columns in ltp-file for the two new consumer categories ",(0,o.kt)("a",{parentName:"li",href:"../references/keywords/CATEGORY"},(0,o.kt)("inlineCode",{parentName:"a"},"HEATER"))," and ",(0,o.kt)("a",{parentName:"li",href:"../references/keywords/CATEGORY"},(0,o.kt)("inlineCode",{parentName:"a"},"BOILER"))),(0,o.kt)("li",{parentName:"ol"},"Re-order some of the columns in the ltp-file, for more logical order"),(0,o.kt)("li",{parentName:"ol"},"Turbine-columns are now filtered on the two consumer categories ",(0,o.kt)("a",{parentName:"li",href:"../references/keywords/CATEGORY"},(0,o.kt)("inlineCode",{parentName:"a"},"TURBINE-GENERATOR"))," and ",(0,o.kt)("a",{parentName:"li",href:"../references/keywords/CATEGORY"},(0,o.kt)("inlineCode",{parentName:"a"},"GAS-DRIVEN-COMPRESSOR")),", as it is no longer only turbines that are consumers of FUEL-GAS")),(0,o.kt)("h3",{id:"stp-tsv-file"},"STP .tsv file"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Report CO2 emissions for both fixed- and mobile installations"),(0,o.kt)("li",{parentName:"ol"},"Report CH4 emissions for fixed installations")),(0,o.kt)("h3",{id:"emissions-structure-and-order"},"Emissions, structure and order"),(0,o.kt)("p",null,"The JSON result file has changed format for emissions. Emissions were previously listed in a list, but is now listed in a map:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},' # This is old\n "emissions":\n [\n {\n "name": "co2"\n ...\n')),(0,o.kt)("p",null,"to"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},' # This is new\n "emissions":\n {\n "co2":\n {\n "name": "co2"\n ...\n')),(0,o.kt)("p",null,"This will/may also affect the order of which emissions are presented in the result file, but should from now on be consistent."),(0,o.kt)("h2",{id:"behaviour"},"Behaviour"),(0,o.kt)("h2",{id:"conditions"},"Conditions"),(0,o.kt)("p",null,"eCalc will now consistently NOT evaluate and run calculations if a ",(0,o.kt)("a",{parentName:"p",href:"../references/keywords/CONDITION"},"CONDITION"),' is not fulfilled. Conditions can be set on most energy consumers, to indicate whether the consumer is active or not at a given timestep. Previously the consumer was evaluated even though a condition was not fulfilled to reflect "what would have happened if it was active". However this has proven to be difficult for users to understand and remember when the overall model result is being evaluated and analyzed. In order to prevent user errors, we have decided to consistently ',(0,o.kt)("strong",{parentName:"p"},"NOT")," evaluate a consumer for timesteps where it is disabled (conditions evaluated to true)."))}h.isMDXComponent=!0},7698:(e,t,a)=>{a.d(t,{Z:()=>i});const i=a.p+"assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png"}}]); \ No newline at end of file diff --git a/assets/js/5c8ec56d.c57bea75.js b/assets/js/5c8ec56d.c57bea75.js new file mode 100644 index 0000000000..f3f4529b17 --- /dev/null +++ b/assets/js/5c8ec56d.c57bea75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4070],{6095:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>n,toc:()=>m});var r=o(7462),t=(o(7294),o(3905));o(5657);const i={sidebar_position:2,description:"Compressor modelling"},a="Compressor modelling",n={unversionedId:"about/modelling/setup/models/compressor_modelling/index",id:"about/modelling/setup/models/compressor_modelling/index",title:"Compressor modelling",description:"Compressor modelling",source:"@site/docs/about/modelling/setup/models/compressor_modelling/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling",slug:"/about/modelling/setup/models/compressor_modelling/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Compressor modelling"},sidebar:"about",previous:{title:"Fluid model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model"},next:{title:"Compressor charts",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"}},l={},m=[],d={toc:m},p="wrapper";function c(e){let{components:s,...i}=e;return(0,t.kt)(p,(0,r.Z)({},d,i,{components:s,mdxType:"MDXLayout"}),(0,t.kt)("h1",{id:"compressor-modelling"},"Compressor modelling"),(0,t.kt)("p",null,"Compressors may be single speed or variable speed, they may be stand-alone or there may be multiple compressors mounted\non a common shaft (compressor train), they may be run with an electric motor or be driven by a turbine coupled\ndirectly to the shaft, there may be one or many compressors/compressor trains in parallel connected to a common\nmanifold from which the gas is distributed between these in different operational settings."),(0,t.kt)("p",null,(0,t.kt)("img",{src:o(3960).Z,width:"1049",height:"438"})),(0,t.kt)("p",null,"In eCalc\u2122, single compressors and compressor trains are modeled the same way, a single compressor is just a train with\njust one stage. There are multiple modeling options for compressor trains:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"},(0,t.kt)("inlineCode",{parentName:"a"},"Sampled compressor model")),": The compressor model is setup in an external tool, and this model is sampled by\nrunning a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a csv file and input to eCalc\u2122. Note, this is ",(0,t.kt)("strong",{parentName:"li"},"not")," inputted in the ",(0,t.kt)("inlineCode",{parentName:"li"},"MODELS")," section, rather in the ",(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/facility_inputs/"},"FACILITY_INPUTS")," section"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},(0,t.kt)("inlineCode",{parentName:"a"},"Single speed compressor train model")),": The compressor train modeling is done in eCalc\u2122. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage. In addition, since the speed is fixed, defining a pressure control method is required. This pressure control is used to meet the required discharge pressure."),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},(0,t.kt)("inlineCode",{parentName:"a"},"Variable speed compressor train model")),": The compressor train modelling is done in eCalc\u2122. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage."),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},(0,t.kt)("inlineCode",{parentName:"a"},"Simplified variable speed compressor train model")),": Model the same compressor train as the above, but is more\nlightweight in that instead of iterating to meet the requested discharge pressure, it assumes all stages has equal\npressure fractions and solves for each stage independently. As the shaft speed is not used in the calculations, this\nmodel supports using generic compressor charts, see the ",(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},(0,t.kt)("inlineCode",{parentName:"a"},"Compressor charts"))," section."),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},(0,t.kt)("inlineCode",{parentName:"a"},"Variable speed compressor train model with multiple streams and pressures")),": This is a more complex model, where it is\npossible to define fluid streams going in and out at different stages in the compressor train. Also, an additional\npressure requirement may be specified between two stages. This model is suitable in cases where for example a part of\nthe fluid stream is taken out after one stage at a specified pressure for export, and the rest is further compressed\nfor injection at a higher pressure.")),(0,t.kt)("p",null,"Core theory behind the modelling of compressors in eCalc\u2122 can be found ",(0,t.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/theory/compressor_modelling"},"here"),"."))}c.isMDXComponent=!0},3960:(e,s,o)=>{o.d(s,{Z:()=>r});const r=o.p+"assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png"}}]); \ No newline at end of file diff --git a/assets/js/5e10e9e1.d7eb56cd.js b/assets/js/5e10e9e1.d7eb56cd.js new file mode 100644 index 0000000000..e88f6fe0f5 --- /dev/null +++ b/assets/js/5e10e9e1.d7eb56cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[443],{4660:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>r,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=a(7462),s=(a(7294),a(3905));a(5657);const o={title:"Tabular models",sidebar_position:4,description:"Using tabular models in calculations"},i=void 0,l={unversionedId:"about/modelling/setup/installations/tabular_models_in_calculations",id:"about/modelling/setup/installations/tabular_models_in_calculations",title:"Tabular models",description:"Using tabular models in calculations",source:"@site/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/tabular_models_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Tabular models",sidebar_position:4,description:"Using tabular models in calculations"},sidebar:"about",previous:{title:"Variable speed compressor train multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},next:{title:"Direct consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers"}},r={},u=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"COMPRESSOR_TABULAR input type",id:"compressor_tabular-input-type",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...a}=e;return(0,s.kt)(c,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"This type is a pure interpolation model where the user may freely choose all the variables. No extrapolation is done, thus the user\nmust ensure to cover the entire variable space in the input data. For points outside the input data, the output is\ninvalid and no energy usage is given (shown in the output vector extrapolations)."),(0,s.kt)("h2",{id:"format"},"Format"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference to energy function in facility inputs of type tabular>\n VARIABLES:\n - NAME: <name of variable>\n EXPRESSION: <expression defining the variable>\n")),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n - NAME: Gas oil ratio\n EXPRESSION: SIM1;GOR\n - NAME: GAS_TEMPERATURE\n EXPRESSION: SIM1;TEMP\n")),(0,s.kt)("h2",{id:"compressor_tabular-input-type"},"COMPRESSOR_TABULAR input type"),(0,s.kt)("p",null,"Consumer energy function for the compressor (or compressor train) is in a tabulated format,\nwhere each line is a point defining the energy consumption for the given variables."),(0,s.kt)("p",null,"See ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"},"Sampled compressor model")," for details."),(0,s.kt)("p",null,"As a single compressor/compressor train (no system), it can be set up in the following way:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: <facility_inputs_key>\n RATE: <rate expression [Sm3/day]>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5e3ed04b.d13c1a1e.js b/assets/js/5e3ed04b.d13c1a1e.js new file mode 100644 index 0000000000..5c7620108f --- /dev/null +++ b/assets/js/5e3ed04b.d13c1a1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2205],{6052:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));a(5657);const i={},l="FACILITY_INPUTS",o={unversionedId:"about/references/keywords/FACILITY_INPUTS",id:"about/references/keywords/FACILITY_INPUTS",title:"FACILITY_INPUTS",description:"FACILITYINPUTS",source:"@site/docs/about/references/keywords/FACILITY_INPUTS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FACILITY_INPUTS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION"},next:{title:"FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR"}},p={},s=[{value:"Description",id:"description",level:2},{value:"Supported types",id:"supported-types",level:2}],d={toc:s},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"facility_inputs"},"FACILITY_INPUTS"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Required"),(0,r.kt)("th",{parentName:"tr",align:null},"Child of"),(0,r.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},"None"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"ADJUSTMENT")," ",(0,r.kt)("br",null)," ",(0,r.kt)("inlineCode",{parentName:"td"},"FILE")," ",(0,r.kt)("br",null)," ",(0,r.kt)("inlineCode",{parentName:"td"},"HEAD_MARGIN")," ",(0,r.kt)("br",null)," ",(0,r.kt)("inlineCode",{parentName:"td"},"TYPE"))))),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"This part of the setup defines input files that characterize various facility elements. Each facility element is\nspecified in a list. These are later used as input in the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," part of the setup by referencing their\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME"),"."),(0,r.kt)("p",null,"All facility inputs are in essence a ",(0,r.kt)("inlineCode",{parentName:"p"},"CSV")," (Comma separated file) file that specifies input data to a model that\ncalculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple\n",(0,r.kt)("a",{parentName:"p",href:"#supported-types"},"supported types"),"."),(0,r.kt)("h2",{id:"supported-types"},"Supported types"),(0,r.kt)("p",null,"The facility input type is defined using the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," keyword and defines the type of model applied\nto the data in this file. The input files are in ",(0,r.kt)("inlineCode",{parentName:"p"},"CSV")," (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file."),(0,r.kt)("p",null,"The supported types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ELECTRICITY2FUEL")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"TABULAR")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_TABULAR")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PUMP_CHART_SINGLE_SPEED")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PUMP_CHART_VARIABLE_SPEED"))),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/"},"FACILITY INPUTS")," for details about each of the above supported types and their usage."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/60746895.ac74eb35.js b/assets/js/60746895.ac74eb35.js new file mode 100644 index 0000000000..bc6c45e2e6 --- /dev/null +++ b/assets/js/60746895.ac74eb35.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8282],{1522:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>m,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>d,toc:()=>o});var a=n(7462),r=(n(7294),n(3905));n(5657);const l={},i="Markdown",d={unversionedId:"contribute/documentation-guide/markdown",id:"contribute/documentation-guide/markdown",title:"Markdown",description:"Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.",source:"@site/docs/contribute/documentation-guide/02-markdown.md",sourceDirName:"contribute/documentation-guide",slug:"/contribute/documentation-guide/markdown",permalink:"/ecalc/docs/contribute/documentation-guide/markdown",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/documentation-guide/02-markdown.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Overview",permalink:"/ecalc/docs/contribute/documentation-guide/documentation"},next:{title:"Guides",permalink:"/ecalc/docs/category/guides"}},m={},o=[{value:"Standard Markdown",id:"standard-markdown",level:2}],p={toc:o},k="wrapper";function u(t){let{components:e,...n}=t;return(0,r.kt)(k,(0,a.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"markdown"},"Markdown"),(0,r.kt)("p",null,"Docusaurus uses ",(0,r.kt)("a",{parentName:"p",href:"https://daringfireball.net/projects/markdown/syntax"},"standard Markdown syntax")," plus ",(0,r.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/next/markdown-features"},"Docusaurus Extended Markdown")," functionality."),(0,r.kt)("h2",{id:"standard-markdown"},"Standard Markdown"),(0,r.kt)("p",null,"Here is a quick summary or standard Markdown syntax:"),(0,r.kt)("p",null,"summary = md`"),(0,r.kt)("h1",{id:"markdown-summary"},"Markdown summary"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Desired style"),(0,r.kt)("th",{parentName:"tr",align:null},"Use the following Markdown annotation"),(0,r.kt)("th",{parentName:"tr",align:null},"Produces the following sample HTML"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Heading 1"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"# Title")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<h1>Title</h1>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Heading 2"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"## Title")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<h2>Title</h2>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Heading 3"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"### Title")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<h3>Title</h3>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Heading 4"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"#### Title")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<h4>Title</h4>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Heading 5"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"##### Title")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<h5>Title</h5>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Heading 6"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"###### Title")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<h6>Title</h6>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Paragraph"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Just start typing")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<p>Just start typing<p>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Bold")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"**Text**")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<strong>Text</strong>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},"Italic")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"*Text*")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<em>Text</em>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("del",{parentName:"td"},"Strike")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"~~Text~~")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<del>Text</del>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Quoted (indent)"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"> Text")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<blockquote><p>Text</p></blockquote>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Code")," (inline)"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Statement")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<code>Statement</code>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Code")," (fenced)"),(0,r.kt)("td",{parentName:"tr",align:null},"Statement 1",(0,r.kt)("br",null),"Statement 2",(0,r.kt)("br",null),"Statement 3"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<pre><code><span>Statement 1</span><span>Statement 2</span><span>Statement 3</span></code></pre>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"List (unordered)"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"}," List item 1",(0,r.kt)("br",null))," List item 2",(0,r.kt)("br",null),"* List item 3"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"List (ordered)"),(0,r.kt)("td",{parentName:"tr",align:null},"1. List item 1",(0,r.kt)("br",null),"2. List item 2",(0,r.kt)("br",null),"3. List item 3"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Images"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"![Alternate text for image](path/to/image)")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},'<img src="path/image.jpg" alt="Alternative text for image>'))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Hyperlinks"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"[Link text](https://www.google.com/)")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},'<a href="https://www.google.com/">Link text</a>'))))),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You may want to escape special html characters using ",(0,r.kt)("inlineCode",{parentName:"p"},"\\"),", and replace the great than symbol with ",(0,r.kt)("inlineCode",{parentName:"p"},"<"),", otherwise Docusaurus\nwill confuse it with html code.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/61639be2.a1fccc26.js b/assets/js/61639be2.a1fccc26.js new file mode 100644 index 0000000000..c5818ba93c --- /dev/null +++ b/assets/js/61639be2.a1fccc26.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4075],{7195:(e,r,a)=>{a.r(r),a.d(r,{assets:()=>E,contentTitle:()=>s,default:()=>i,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var t=a(7462),n=(a(7294),a(3905));a(5657);const o={},s="FUELCONSUMERS",c={unversionedId:"about/references/keywords/FUELCONSUMERS",id:"about/references/keywords/FUELCONSUMERS",title:"FUELCONSUMERS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/FUELCONSUMERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUELCONSUMERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL"},next:{title:"FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE"}},E={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:l},u="wrapper";function i(e){let{components:r,...a}=e;return(0,n.kt)(u,(0,t.Z)({},d,a,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"fuelconsumers"},"FUELCONSUMERS"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS")),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"The ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS")," keyword covers the fuel consumers on the installation\nthat are not generators. The attributes ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME"),",\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," and\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")," are required, while\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL"},"FUEL")," is optional and may be used to\noverride the installation's default fuel type."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"FUELCONSUMERS:\n - NAME: <consumer name>\n CATEGORY: <category>\n ENERGY_USAGE_MODEL: <energy usage model>\n FUEL: <fuel specification>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"FUELCONSUMERS:\n - NAME: CompressorFuelConsumer\n CATEGORY: GAS-DRIVEN-COMPRESSOR\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n - NAME: FlareFuelConsumer\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n ...\n - NAME: SomeOtherFuelConsumer\n CATEGORY: MISCELLANEOUS\n FUEL: fuel_gas\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n")))}i.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/619.980ffb36.js b/assets/js/619.980ffb36.js new file mode 100644 index 0000000000..91d91eb0e5 --- /dev/null +++ b/assets/js/619.980ffb36.js @@ -0,0 +1,16545 @@ +"use strict"; +exports.id = 619; +exports.ids = [619]; +exports.modules = { + +/***/ 3502: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (/* binding */ SimpleMarkdown) +/* harmony export */ }); +/* eslint-disable prefer-spread, no-regex-spaces, no-unused-vars, guard-for-in, no-console, no-var */ + +/** + * Simple-Markdown + * =============== + * + * Simple-Markdown's primary goal is to be easy to adapt. It aims + * to be compliant with John Gruber's [Markdown Syntax page][1], + * but compatiblity with other markdown implementations' edge-cases + * will be sacrificed where it conflicts with simplicity or + * extensibility. + * + * If your goal is to simply embed a standard markdown implementation + * in your website, simple-markdown is probably not the best library + * for you (although it should work). But if you have struggled to + * customize an existing library to meet your needs, simple-markdown + * might be able to help. + * + * Many of the regexes and original logic has been adapted from + * the wonderful [marked.js](https://github.com/chjj/marked) + */ +// Flow Type Definitions: +// We want to clarify our defaultRules types a little bit more so clients can +// reuse defaultRules built-ins. So we make some stronger guarantess when +// we can: +// End Flow Definitions +var CR_NEWLINE_R = /\r\n?/g; +var TAB_R = /\t/g; +var FORMFEED_R = /\f/g; +/** + * Turn various whitespace into easy-to-process whitespace + */ + +var preprocess = function preprocess(source) { + return source.replace(CR_NEWLINE_R, "\n").replace(FORMFEED_R, "").replace(TAB_R, " "); +}; + +var populateInitialState = function populateInitialState(givenState, defaultState) { + var state = givenState || {}; + + if (defaultState != null) { + for (var prop in defaultState) { + // $FlowFixMe + if (Object.prototype.hasOwnProperty.call(defaultState, prop)) { + state[prop] = defaultState[prop]; + } + } + } + + return state; +}; +/** + * Creates a parser for a given set of rules, with the precedence + * specified as a list of rules. + * + * @param {SimpleMarkdown.ParserRules} rules + * an object containing + * rule type -> {match, order, parse} objects + * (lower order is higher precedence) + * @param {SimpleMarkdown.OptionalState} [defaultState] + * + * @returns {SimpleMarkdown.Parser} + * The resulting parse function, with the following parameters: + * @source: the input source string to be parsed + * @state: an optional object to be threaded through parse + * calls. Allows clients to add stateful operations to + * parsing, such as keeping track of how many levels deep + * some nesting is. For an example use-case, see passage-ref + * parsing in src/widgets/passage/passage-markdown.jsx + */ + + +var parserFor = function parserFor(rules, defaultState) { + // Sorts rules in order of increasing order, then + // ascending rule name in case of ties. + var ruleList = Object.keys(rules).filter(function (type) { + var rule = rules[type]; + + if (rule == null || rule.match == null) { + return false; + } + + var order = rule.order; + + if ((typeof order !== "number" || !isFinite(order)) && typeof console !== "undefined") { + console.warn("simple-markdown: Invalid order for rule `" + type + "`: " + String(order)); + } + + return true; + }); + ruleList.sort(function (typeA, typeB) { + var ruleA = rules[typeA]; + var ruleB = rules[typeB]; + var orderA = ruleA.order; + var orderB = ruleB.order; // First sort based on increasing order + + if (orderA !== orderB) { + return orderA - orderB; + } + + var secondaryOrderA = ruleA.quality ? 0 : 1; + var secondaryOrderB = ruleB.quality ? 0 : 1; + + if (secondaryOrderA !== secondaryOrderB) { + return secondaryOrderA - secondaryOrderB; // Then based on increasing unicode lexicographic ordering + } else if (typeA < typeB) { + return -1; + } else if (typeA > typeB) { + return 1; + } else { + // Rules should never have the same name, + // but this is provided for completeness. + return 0; + } + }); + var latestState; + + var nestedParse = function nestedParse(source, state) { + var result = []; + state = state || latestState; + latestState = state; + + while (source) { + // store the best match, it's rule, and quality: + var ruleType = null; + var rule = null; + var capture = null; + var quality = NaN; // loop control variables: + + var i = 0; + var currRuleType = ruleList[0]; // $FlowFixMe + + var currRule = rules[currRuleType]; + + do { + var currOrder = currRule.order; + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var currCapture = currRule.match(source, state, prevCaptureStr); + + if (currCapture) { + var currQuality = currRule.quality ? currRule.quality(currCapture, state, prevCaptureStr) : 0; // This should always be true the first time because + // the initial quality is NaN (that's why there's the + // condition negation). + + if (!(currQuality <= quality)) { + ruleType = currRuleType; + rule = currRule; + capture = currCapture; + quality = currQuality; + } + } // Move on to the next item. + // Note that this makes `currRule` be the next item + + + i++; + currRuleType = ruleList[i]; // $FlowFixMe + + currRule = rules[currRuleType]; + } while ( // keep looping while we're still within the ruleList + currRule && ( // if we don't have a match yet, continue + !capture || // or if we have a match, but the next rule is + // at the same order, and has a quality measurement + // functions, then this rule must have a quality + // measurement function (since they are sorted before + // those without), and we need to check if there is + // a better quality match + currRule.order === currOrder && currRule.quality)); // TODO(aria): Write tests for these + + + if (rule == null || capture == null) { + throw new Error("Could not find a matching rule for the below " + "content. The rule with highest `order` should " + "always match content provided to it. Check " + "the definition of `match` for '" + ruleList[ruleList.length - 1] + "'. It seems to not match the following source:\n" + source); + } + + if (capture.index) { + // If present and non-zero, i.e. a non-^ regexp result: + throw new Error("`match` must return a capture starting at index 0 " + "(the current parse index). Did you forget a ^ at the " + "start of the RegExp?"); + } + + var parsed = rule.parse(capture, nestedParse, state); // We maintain the same object here so that rules can + // store references to the objects they return and + // modify them later. (oops sorry! but this adds a lot + // of power--see reflinks.) + + if (Array.isArray(parsed)) { + // $FlowFixMe + Array.prototype.push.apply(result, parsed); + } else { + if (parsed == null || typeof parsed !== "object") { + throw new Error("parse() function returned invalid parse result: '".concat(parsed, "'")); + } // We also let rules override the default type of + // their parsed node if they would like to, so that + // there can be a single output function for all links, + // even if there are several rules to parse them. + + + if (parsed.type == null) { + // $FlowFixMe + parsed.type = ruleType; + } + + result.push(parsed); + } + + state.prevCapture = capture; + source = source.substring(state.prevCapture[0].length); + } // $FlowFixMe + + + return result; + }; + + var outerParse = function outerParse(source, state) { + latestState = populateInitialState(state, defaultState); + + if (!latestState.inline && !latestState.disableAutoBlockNewlines) { + source = source + "\n\n"; + } // We store the previous capture so that match functions can + // use some limited amount of lookbehind. Lists use this to + // ensure they don't match arbitrary '- ' or '* ' in inline + // text (see the list rule for more information). This stores + // the full regex capture object, if there is one. + + + latestState.prevCapture = null; + return nestedParse(preprocess(source), latestState); + }; // $FlowFixMe + + + return outerParse; +}; // Creates a match function for an inline scoped element from a regex + + +var inlineRegex = function inlineRegex(regex) { + var match = function match(source, state, prevCapture) { + if (state.inline) { + // $FlowFixMe + return regex.exec(source); + } else { + return null; + } + }; + + match.regex = regex; + return match; +}; // Creates a match function for a block scoped element from a regex + + +var blockRegex = function blockRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + if (state.inline) { + return null; + } else { + return regex.exec(source); + } + }; + + match.regex = regex; + return match; +}; // Creates a match function from a regex, ignoring block/inline scope + + +var anyScopeRegex = function anyScopeRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + return regex.exec(source); + }; + + match.regex = regex; + return match; +}; + +var TYPE_SYMBOL = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; + +var reactElement = function reactElement(type, key, props) { + var element = { + $$typeof: TYPE_SYMBOL, + type: type, + key: key == null ? undefined : key, + ref: null, + props: props, + _owner: null + }; + return element; +}; +/** Returns a closed HTML tag. + * @param {string} tagName - Name of HTML tag (eg. "em" or "a") + * @param {string} content - Inner content of tag + * @param {{ [attr: string]: SimpleMarkdown.Attr }} [attributes] - Optional extra attributes of tag as an object of key-value pairs + * eg. { "href": "http://google.com" }. Falsey attributes are filtered out. + * @param {boolean} [isClosed] - boolean that controls whether tag is closed or not (eg. img tags). + * defaults to true + */ + + +var htmlTag = function htmlTag(tagName, content, attributes, isClosed) { + attributes = attributes || {}; + isClosed = typeof isClosed !== "undefined" ? isClosed : true; + var attributeString = ""; + + for (var attr in attributes) { + var attribute = attributes[attr]; // Removes falsey attributes + + if ( // $FlowFixMe + Object.prototype.hasOwnProperty.call(attributes, attr) && attribute) { + attributeString += " " + sanitizeText(attr) + '="' + sanitizeText(attribute) + '"'; + } + } + + var unclosedTag = "<" + tagName + attributeString + ">"; + + if (isClosed) { + return unclosedTag + content + "</" + tagName + ">"; + } else { + return unclosedTag; + } +}; + +var EMPTY_PROPS = {}; +/** + * @param {string | null | undefined} url - url to sanitize + * @returns {string | null} - url if safe, or null if a safe url could not be made + */ + +var sanitizeUrl = function sanitizeUrl(url) { + if (url == null) { + return null; + } + + try { + var prot = new URL(url, "https://localhost").protocol; + + if (prot.indexOf("javascript:") === 0 || prot.indexOf("vbscript:") === 0 || prot.indexOf("data:") === 0) { + return null; + } + } catch (e) { + // invalid URLs should throw a TypeError + // see for instance: `new URL("");` + return null; + } + + return url; +}; + +var SANITIZE_TEXT_R = /[<>&"']/g; +var SANITIZE_TEXT_CODES = { + "<": "<", + ">": ">", + "&": "&", + '"': """, + "'": "'", + "/": "/", + "`": "`" +}; + +var sanitizeText = function sanitizeText(text) { + return String(text).replace(SANITIZE_TEXT_R, function (chr) { + return SANITIZE_TEXT_CODES[chr]; + }); +}; + +var UNESCAPE_URL_R = /\\([^0-9A-Za-z\s])/g; + +var unescapeUrl = function unescapeUrl(rawUrlString) { + return rawUrlString.replace(UNESCAPE_URL_R, "$1"); +}; +/** + * Parse some content with the parser `parse`, with state.inline + * set to true. Useful for block elements; not generally necessary + * to be used by inline elements (where state.inline is already true. + */ + + +var parseInline = function parseInline(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = true; + var result = parse(content, state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseBlock = function parseBlock(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = false; + var result = parse(content + "\n\n", state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseCaptureInline = function parseCaptureInline(capture, parse, state) { + return { + content: parseInline(parse, capture[1], state) + }; +}; + +var ignoreCapture = function ignoreCapture() { + return {}; +}; // recognize a `*` `-`, `+`, `1.`, `2.`... list bullet + + +var LIST_BULLET = "(?:[*+-]|\\d+\\.)"; // recognize the start of a list item: +// leading space plus a bullet plus a space (` * `) + +var LIST_ITEM_PREFIX = "( *)(" + LIST_BULLET + ") +"; +var LIST_ITEM_PREFIX_R = new RegExp("^" + LIST_ITEM_PREFIX); // recognize an individual list item: +// * hi +// this is part of the same item +// +// as is this, which is a new paragraph in the same item +// +// * but this is not part of the same item + +var LIST_ITEM_R = new RegExp(LIST_ITEM_PREFIX + "[^\\n]*(?:\\n" + "(?!\\1" + LIST_BULLET + " )[^\\n]*)*(\n|$)", "gm"); +var BLOCK_END_R = /\n{2,}$/; +var INLINE_CODE_ESCAPE_BACKTICKS_R = /^ (?= *`)|(` *) $/g; // recognize the end of a paragraph block inside a list item: +// two or more newlines at end end of the item + +var LIST_BLOCK_END_R = BLOCK_END_R; +var LIST_ITEM_END_R = / *\n+$/; // check whether a list item has paragraphs: if it does, +// we leave the newlines at the end + +var LIST_R = new RegExp("^( *)(" + LIST_BULLET + ") " + "[\\s\\S]+?(?:\n{2,}(?! )" + "(?!\\1" + LIST_BULLET + " )\\n*" + // the \\s*$ here is so that we can parse the inside of nested +// lists, where our content might end before we receive two `\n`s +"|\\s*\n*$)"); +var LIST_LOOKBEHIND_R = /(?:^|\n)( *)$/; + +var TABLES = function () { + var TABLE_ROW_SEPARATOR_TRIM = /^ *\| *| *\| *$/g; + var TABLE_CELL_END_TRIM = / *$/; + var TABLE_RIGHT_ALIGN = /^ *-+: *$/; + var TABLE_CENTER_ALIGN = /^ *:-+: *$/; + var TABLE_LEFT_ALIGN = /^ *:-+ *$/; // TODO: This needs a real type + + var parseTableAlignCapture = function parseTableAlignCapture(alignCapture) { + if (TABLE_RIGHT_ALIGN.test(alignCapture)) { + return "right"; + } else if (TABLE_CENTER_ALIGN.test(alignCapture)) { + return "center"; + } else if (TABLE_LEFT_ALIGN.test(alignCapture)) { + return "left"; + } else { + return null; + } + }; + + var parseTableAlign = function parseTableAlign(source, parse, state, trimEndSeparators) { + if (trimEndSeparators) { + source = source.replace(TABLE_ROW_SEPARATOR_TRIM, ""); + } + + var alignText = source.trim().split("|"); + return alignText.map(parseTableAlignCapture); + }; + + var parseTableRow = function parseTableRow(source, parse, state, trimEndSeparators) { + var prevInTable = state.inTable; + state.inTable = true; + var tableRow = parse(source.trim(), state); + state.inTable = prevInTable; + var cells = [[]]; + tableRow.forEach(function (node, i) { + if (node.type === "tableSeparator") { + // Filter out empty table separators at the start/end: + if (!trimEndSeparators || i !== 0 && i !== tableRow.length - 1) { + // Split the current row: + cells.push([]); + } + } else { + if (node.type === "text" && (tableRow[i + 1] == null || tableRow[i + 1].type === "tableSeparator")) { + node.content = node.content.replace(TABLE_CELL_END_TRIM, ""); + } + + cells[cells.length - 1].push(node); + } + }); + return cells; + }; + /** + * @param {string} source + * @param {SimpleMarkdown.Parser} parse + * @param {SimpleMarkdown.State} state + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.ASTNode[][]} + */ + + + var parseTableCells = function parseTableCells(source, parse, state, trimEndSeparators) { + var rowsText = source.trim().split("\n"); + return rowsText.map(function (rowText) { + // $FlowFixMe + return parseTableRow(rowText, parse, state, trimEndSeparators); + }); + }; + /** + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.SingleNodeParseFunction} + */ + + + var parseTable = function parseTable(trimEndSeparators) { + return function (capture, parse, state) { + state.inline = true; + var header = parseTableRow(capture[1], parse, state, trimEndSeparators); + var align = parseTableAlign(capture[2], parse, state, trimEndSeparators); + var cells = parseTableCells(capture[3], parse, state, trimEndSeparators); + state.inline = false; + return { + type: "table", + header: header, + align: align, + cells: cells + }; + }; + }; + + return { + parseTable: parseTable(true), + parseNpTable: parseTable(false), + TABLE_REGEX: /^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/, + NPTABLE_REGEX: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/ + }; +}(); + +var LINK_INSIDE = "(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*"; +var LINK_HREF_AND_TITLE = "\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*"; +var AUTOLINK_MAILTO_CHECK_R = /mailto:/i; + +var parseRef = function parseRef(capture, state, refNode) { + var ref = (capture[2] || capture[1]).replace(/\s+/g, " ").toLowerCase(); // We store information about previously seen defs on + // state._defs (_ to deconflict with client-defined + // state). If the def for this reflink/refimage has + // already been seen, we can use its target/source + // and title here: + + if (state._defs && state._defs[ref]) { + var def = state._defs[ref]; // `refNode` can be a link or an image. Both use + // target and title properties. + + refNode.target = def.target; + refNode.title = def.title; + } // In case we haven't seen our def yet (or if someone + // overwrites that def later on), we add this node + // to the list of ref nodes for that def. Then, when + // we find the def, we can modify this link/image AST + // node :). + // I'm sorry. + + + state._refs = state._refs || {}; + state._refs[ref] = state._refs[ref] || []; + + state._refs[ref].push(refNode); + + return refNode; +}; + +var currOrder = 0; +var defaultRules = { + Array: { + react: function react(arr, output, state) { + var oldKey = state.key; + var result = []; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0, key = 0; i < arr.length; i++, key++) { + // `key` is our numerical `state.key`, which we increment for + // every output node, but don't change for joined text nodes. + // (i, however, must change for joined text nodes) + state.key = "" + i; + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result.push(output(node, state)); + } + + state.key = oldKey; + return result; + }, + html: function html(arr, output, state) { + var result = ""; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0; i < arr.length; i++) { + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result += output(node, state); + } + + return result; + } + }, + heading: { + order: currOrder++, + match: blockRegex(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/), + parse: function (_parse) { + function parse(_x, _x2, _x3) { + return _parse.apply(this, arguments); + } + + parse.toString = function () { + return _parse.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + level: capture[1].length, + content: parseInline(parse, capture[2].trim(), state) + }; + }), + react: function react(node, output, state) { + return reactElement("h" + node.level, state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("h" + node.level, output(node.content, state)); + } + }, + nptable: { + order: currOrder++, + match: blockRegex(TABLES.NPTABLE_REGEX), + parse: TABLES.parseNpTable, + react: null, + html: null + }, + lheading: { + order: currOrder++, + match: blockRegex(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/), + parse: function (_parse2) { + function parse(_x4, _x5, _x6) { + return _parse2.apply(this, arguments); + } + + parse.toString = function () { + return _parse2.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "heading", + level: capture[2] === "=" ? 1 : 2, + content: parseInline(parse, capture[1], state) + }; + }), + react: null, + html: null + }, + hr: { + order: currOrder++, + match: blockRegex(/^( *[-*_]){3,} *(?:\n *)+\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("hr", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<hr>"; + } + }, + codeBlock: { + order: currOrder++, + match: blockRegex(/^(?: [^\n]+\n*)+(?:\n *)+\n/), + parse: function (_parse3) { + function parse(_x7, _x8, _x9) { + return _parse3.apply(this, arguments); + } + + parse.toString = function () { + return _parse3.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ /gm, "").replace(/\n+$/, ""); + return { + lang: undefined, + content: content + }; + }), + react: function react(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + return reactElement("pre", state.key, { + children: reactElement("code", null, { + className: className, + children: node.content + }) + }); + }, + html: function html(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + var codeBlock = htmlTag("code", sanitizeText(node.content), { + class: className + }); + return htmlTag("pre", codeBlock); + } + }, + fence: { + order: currOrder++, + match: blockRegex(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/), + parse: function (_parse4) { + function parse(_x10, _x11, _x12) { + return _parse4.apply(this, arguments); + } + + parse.toString = function () { + return _parse4.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "codeBlock", + lang: capture[2] || undefined, + content: capture[3] + }; + }), + react: null, + html: null + }, + blockQuote: { + order: currOrder++, + match: blockRegex(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/), + parse: function (_parse5) { + function parse(_x13, _x14, _x15) { + return _parse5.apply(this, arguments); + } + + parse.toString = function () { + return _parse5.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ *> ?/gm, ""); + return { + content: parse(content, state) + }; + }), + react: function react(node, output, state) { + return reactElement("blockquote", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("blockquote", output(node.content, state)); + } + }, + list: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + // We only want to break into a list if we are at the start of a + // line. This is to avoid parsing "hi * there" with "* there" + // becoming a part of a list. + // You might wonder, "but that's inline, so of course it wouldn't + // start a list?". You would be correct! Except that some of our + // lists can be inline, because they might be inside another list, + // in which case we can parse with inline scope, but need to allow + // nested lists inside this inline scope. + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var isStartOfLineCapture = LIST_LOOKBEHIND_R.exec(prevCaptureStr); + var isListBlock = state._list || !state.inline; + + if (isStartOfLineCapture && isListBlock) { + source = isStartOfLineCapture[1] + source; + return LIST_R.exec(source); + } else { + return null; + } + }, + parse: function (_parse6) { + function parse(_x16, _x17, _x18) { + return _parse6.apply(this, arguments); + } + + parse.toString = function () { + return _parse6.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var bullet = capture[2]; + var ordered = bullet.length > 1; + var start = ordered ? +bullet : undefined; + var items = capture[0].replace(LIST_BLOCK_END_R, "\n").match(LIST_ITEM_R); // We know this will match here, because of how the regexes are + // defined + + var lastItemWasAParagraph = false; + var itemContent = items.map(function (item, i) { + // We need to see how far indented this item is: + var prefixCapture = LIST_ITEM_PREFIX_R.exec(item); + var space = prefixCapture ? prefixCapture[0].length : 0; // And then we construct a regex to "unindent" the subsequent + // lines of the items by that amount: + + var spaceRegex = new RegExp("^ {1," + space + "}", "gm"); // Before processing the item, we need a couple things + + var content = item // remove indents on trailing lines: + .replace(spaceRegex, "") // remove the bullet: + .replace(LIST_ITEM_PREFIX_R, ""); // I'm not sur4 why this is necessary again? + // Handling "loose" lists, like: + // + // * this is wrapped in a paragraph + // + // * as is this + // + // * as is this + + var isLastItem = i === items.length - 1; + var containsBlocks = content.indexOf("\n\n") !== -1; // Any element in a list is a block if it contains multiple + // newlines. The last element in the list can also be a block + // if the previous item in the list was a block (this is + // because non-last items in the list can end with \n\n, but + // the last item can't, so we just "inherit" this property + // from our previous element). + + var thisItemIsAParagraph = containsBlocks || isLastItem && lastItemWasAParagraph; + lastItemWasAParagraph = thisItemIsAParagraph; // backup our state for restoration afterwards. We're going to + // want to set state._list to true, and state.inline depending + // on our list's looseness. + + var oldStateInline = state.inline; + var oldStateList = state._list; + state._list = true; // Parse inline if we're in a tight list, or block if we're in + // a loose list. + + var adjustedContent; + + if (thisItemIsAParagraph) { + state.inline = false; + adjustedContent = content.replace(LIST_ITEM_END_R, "\n\n"); + } else { + state.inline = true; + adjustedContent = content.replace(LIST_ITEM_END_R, ""); + } + + var result = parse(adjustedContent, state); // Restore our state before returning + + state.inline = oldStateInline; + state._list = oldStateList; + return result; + }); + return { + ordered: ordered, + start: start, + items: itemContent + }; + }), + react: function react(node, output, state) { + var ListWrapper = node.ordered ? "ol" : "ul"; + return reactElement(ListWrapper, state.key, { + start: node.start, + children: node.items.map(function (item, i) { + return reactElement("li", "" + i, { + children: output(item, state) + }); + }) + }); + }, + html: function html(node, output, state) { + var listItems = node.items.map(function (item) { + return htmlTag("li", output(item, state)); + }).join(""); + var listTag = node.ordered ? "ol" : "ul"; + var attributes = { + start: node.start + }; + return htmlTag(listTag, listItems, attributes); + } + }, + def: { + order: currOrder++, + // TODO(aria): This will match without a blank line before the next + // block element, which is inconsistent with most of the rest of + // simple-markdown. + match: blockRegex(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/), + parse: function (_parse7) { + function parse(_x19, _x20, _x21) { + return _parse7.apply(this, arguments); + } + + parse.toString = function () { + return _parse7.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var def = capture[1].replace(/\s+/g, " ").toLowerCase(); + var target = capture[2]; + var title = capture[3]; // Look for previous links/images using this def + // If any links/images using this def have already been declared, + // they will have added themselves to the state._refs[def] list + // (_ to deconflict with client-defined state). We look through + // that list of reflinks for this def, and modify those AST nodes + // with our newly found information now. + // Sorry :(. + + if (state._refs && state._refs[def]) { + // `refNode` can be a link or an image + state._refs[def].forEach(function (refNode) { + refNode.target = target; + refNode.title = title; + }); + } // Add this def to our map of defs for any future links/images + // In case we haven't found any or all of the refs referring to + // this def yet, we add our def to the table of known defs, so + // that future reflinks can modify themselves appropriately with + // this information. + + + state._defs = state._defs || {}; + state._defs[def] = { + target: target, + title: title + }; // return the relevant parsed information + // for debugging only. + + return { + def: def, + target: target, + title: title + }; + }), + react: function react() { + return null; + }, + html: function html() { + return ""; + } + }, + table: { + order: currOrder++, + match: blockRegex(TABLES.TABLE_REGEX), + parse: TABLES.parseTable, + react: function react(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? {} : { + textAlign: node.align[colIndex] + }; + }; + + var headers = node.header.map(function (content, i) { + return reactElement("th", "" + i, { + style: getStyle(i), + scope: "col", + children: output(content, state) + }); + }); + var rows = node.cells.map(function (row, r) { + return reactElement("tr", "" + r, { + children: row.map(function (content, c) { + return reactElement("td", "" + c, { + style: getStyle(c), + children: output(content, state) + }); + }) + }); + }); + return reactElement("table", state.key, { + children: [reactElement("thead", "thead", { + children: reactElement("tr", null, { + children: headers + }) + }), reactElement("tbody", "tbody", { + children: rows + })] + }); + }, + html: function html(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? "" : "text-align:" + node.align[colIndex] + ";"; + }; + + var headers = node.header.map(function (content, i) { + return htmlTag("th", output(content, state), { + style: getStyle(i), + scope: "col" + }); + }).join(""); + var rows = node.cells.map(function (row) { + var cols = row.map(function (content, c) { + return htmlTag("td", output(content, state), { + style: getStyle(c) + }); + }).join(""); + return htmlTag("tr", cols); + }).join(""); + var thead = htmlTag("thead", htmlTag("tr", headers)); + var tbody = htmlTag("tbody", rows); + return htmlTag("table", thead + tbody); + } + }, + newline: { + order: currOrder++, + match: blockRegex(/^(?:\n *)*\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return "\n"; + }, + html: function html(node, output, state) { + return "\n"; + } + }, + paragraph: { + order: currOrder++, + match: blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("div", state.key, { + className: "paragraph", + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + class: "paragraph" + }; + return htmlTag("div", output(node.content, state), attributes); + } + }, + escape: { + order: currOrder++, + // We don't allow escaping numbers, letters, or spaces here so that + // backslashes used in plain text still get rendered. But allowing + // escaping anything else provides a very flexible escape mechanism, + // regardless of how this grammar is extended. + match: inlineRegex(/^\\([^0-9A-Za-z\s])/), + parse: function (_parse8) { + function parse(_x22, _x23, _x24) { + return _parse8.apply(this, arguments); + } + + parse.toString = function () { + return _parse8.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "text", + content: capture[1] + }; + }), + react: null, + html: null + }, + tableSeparator: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + if (!state.inTable) { + return null; + } + + return /^ *\| */.exec(source); + }, + parse: function parse() { + return { + type: "tableSeparator" + }; + }, + // These shouldn't be reached, but in case they are, be reasonable: + react: function react() { + return " | "; + }, + html: function html() { + return " | "; + } + }, + autolink: { + order: currOrder++, + match: inlineRegex(/^<([^: >]+:\/[^ >]+)>/), + parse: function (_parse9) { + function parse(_x25, _x26, _x27) { + return _parse9.apply(this, arguments); + } + + parse.toString = function () { + return _parse9.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1] + }; + }), + react: null, + html: null + }, + mailto: { + order: currOrder++, + match: inlineRegex(/^<([^ >]+@[^ >]+)>/), + parse: function (_parse10) { + function parse(_x28, _x29, _x30) { + return _parse10.apply(this, arguments); + } + + parse.toString = function () { + return _parse10.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var address = capture[1]; + var target = capture[1]; // Check for a `mailto:` already existing in the link: + + if (!AUTOLINK_MAILTO_CHECK_R.test(target)) { + target = "mailto:" + target; + } + + return { + type: "link", + content: [{ + type: "text", + content: address + }], + target: target + }; + }), + react: null, + html: null + }, + url: { + order: currOrder++, + match: inlineRegex(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/), + parse: function (_parse11) { + function parse(_x31, _x32, _x33) { + return _parse11.apply(this, arguments); + } + + parse.toString = function () { + return _parse11.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1], + title: undefined + }; + }), + react: null, + html: null + }, + link: { + order: currOrder++, + match: inlineRegex(new RegExp("^\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse12) { + function parse(_x34, _x35, _x36) { + return _parse12.apply(this, arguments); + } + + parse.toString = function () { + return _parse12.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var link = { + content: parse(capture[1], state), + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return link; + }), + react: function react(node, output, state) { + return reactElement("a", state.key, { + href: sanitizeUrl(node.target), + title: node.title, + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + href: sanitizeUrl(node.target), + title: node.title + }; + return htmlTag("a", output(node.content, state), attributes); + } + }, + image: { + order: currOrder++, + match: inlineRegex(new RegExp("^!\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse13) { + function parse(_x37, _x38, _x39) { + return _parse13.apply(this, arguments); + } + + parse.toString = function () { + return _parse13.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var image = { + alt: capture[1], + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return image; + }), + react: function react(node, output, state) { + return reactElement("img", state.key, { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }); + }, + html: function html(node, output, state) { + var attributes = { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }; + return htmlTag("img", "", attributes, false); + } + }, + reflink: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse14) { + function parse(_x40, _x41, _x42) { + return _parse14.apply(this, arguments); + } + + parse.toString = function () { + return _parse14.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "link", + content: parse(capture[1], state) + }); + }), + react: null, + html: null + }, + refimage: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^!\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse15) { + function parse(_x43, _x44, _x45) { + return _parse15.apply(this, arguments); + } + + parse.toString = function () { + return _parse15.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "image", + alt: capture[1] + }); + }), + react: null, + html: null + }, + em: { + order: currOrder + /* same as strong/u */ + , + match: inlineRegex(new RegExp( // only match _s surrounding words. + "^\\b_" + "((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_" + "\\b" + // Or match *s: + "|" + // Only match *s that are followed by a non-space: + "^\\*(?=\\S)(" + // Match at least one of: + "(?:" + // - `**`: so that bolds inside italics don't close the + // italics + "\\*\\*|" + // - escape sequence: so escaped *s don't close us + "\\\\[\\s\\S]|" + // - whitespace: followed by a non-* (we don't + // want ' *' to close an italics--it might + // start a list) + "\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|" + // - non-whitespace, non-*, non-backslash characters + "[^\\s\\*\\\\]" + ")+?" + // followed by a non-space, non-* then * + ")\\*(?!\\*)")), + quality: function quality(capture) { + // precedence by length, `em` wins ties: + return capture[0].length + 0.2; + }, + parse: function (_parse16) { + function parse(_x46, _x47, _x48) { + return _parse16.apply(this, arguments); + } + + parse.toString = function () { + return _parse16.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: parse(capture[2] || capture[1], state) + }; + }), + react: function react(node, output, state) { + return reactElement("em", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("em", output(node.content, state)); + } + }, + strong: { + order: currOrder + /* same as em */ + , + match: inlineRegex(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/), + quality: function quality(capture) { + // precedence by length, wins ties vs `u`: + return capture[0].length + 0.1; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("strong", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("strong", output(node.content, state)); + } + }, + u: { + order: currOrder++ + /* same as em&strong; increment for next rule */ + , + match: inlineRegex(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/), + quality: function quality(capture) { + // precedence by length, loses all ties + return capture[0].length; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("u", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("u", output(node.content, state)); + } + }, + del: { + order: currOrder++, + match: inlineRegex(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("del", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("del", output(node.content, state)); + } + }, + inlineCode: { + order: currOrder++, + match: inlineRegex(/^(`+)([\s\S]*?[^`])\1(?!`)/), + parse: function (_parse17) { + function parse(_x49, _x50, _x51) { + return _parse17.apply(this, arguments); + } + + parse.toString = function () { + return _parse17.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[2].replace(INLINE_CODE_ESCAPE_BACKTICKS_R, "$1") + }; + }), + react: function react(node, output, state) { + return reactElement("code", state.key, { + children: node.content + }); + }, + html: function html(node, output, state) { + return htmlTag("code", sanitizeText(node.content)); + } + }, + br: { + order: currOrder++, + match: anyScopeRegex(/^ {2,}\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("br", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<br>"; + } + }, + text: { + order: currOrder++, + // Here we look for anything followed by non-symbols, + // double newlines, or double-space-newlines + // We break on any symbol characters so that this grammar + // is easy to extend without needing to modify this regex + match: anyScopeRegex(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/), + parse: function (_parse18) { + function parse(_x52, _x53, _x54) { + return _parse18.apply(this, arguments); + } + + parse.toString = function () { + return _parse18.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[0] + }; + }), + react: function react(node, output, state) { + return node.content; + }, + html: function html(node, output, state) { + return sanitizeText(node.content); + } + } +}; +/** (deprecated) */ + +var ruleOutput = function ruleOutput( // $FlowFixMe +rules, property) { + if (!property && typeof console !== "undefined") { + console.warn("simple-markdown ruleOutput should take 'react' or " + "'html' as the second argument."); + } + + var nestedRuleOutput = function nestedRuleOutput(ast, outputFunc, state) { + return rules[ast.type][property](ast, outputFunc, state); + }; + + return nestedRuleOutput; +}; +/** (deprecated) + */ + + +var reactFor = function reactFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + var oldKey = state.key; + var result = []; // map nestedOutput over the ast, except group any text + // nodes together into a single string output. + + var lastResult = null; + + for (var i = 0; i < ast.length; i++) { + state.key = "" + i; + var nodeOut = nestedOutput(ast[i], state); + + if (typeof nodeOut === "string" && typeof lastResult === "string") { + lastResult = lastResult + nodeOut; + result[result.length - 1] = lastResult; + } else { + result.push(nodeOut); + lastResult = nodeOut; + } + } + + state.key = oldKey; + return result; + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; +/** (deprecated) + */ + + +var htmlFor = function htmlFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + return ast.map(function (node) { + return nestedOutput(node, state); + }).join(""); + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; + +var outputFor = function outputFor(rules, property) { + var defaultState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!property) { + throw new Error("simple-markdown: outputFor: `property` must be " + "defined. " + "if you just upgraded, you probably need to replace `outputFor` " + "with `reactFor`"); + } + + var latestState; // $FlowFixMe[incompatible-type] + + var arrayRule = rules.Array || defaultRules.Array; // Tricks to convince tsc that this var is not null: + + var arrayRuleCheck = arrayRule[property]; + + if (!arrayRuleCheck) { + throw new Error("simple-markdown: outputFor: to join nodes of type `" + property + "` you must provide an `Array:` joiner rule with that type, " + "Please see the docs for details on specifying an Array rule."); + } + + var arrayRuleOutput = arrayRuleCheck; + + var nestedOutput = function nestedOutput(ast, state) { + state = state || latestState; + latestState = state; + + if (Array.isArray(ast)) { + return arrayRuleOutput(ast, nestedOutput, state); + } else { + return rules[ast.type][property](ast, nestedOutput, state); + } + }; + + var outerOutput = function outerOutput(ast, state) { + latestState = populateInitialState(state, defaultState); + return nestedOutput(ast, latestState); + }; + + return outerOutput; +}; // $FlowFixMe[incompatible-call] + + +var defaultRawParse = parserFor(defaultRules); + +var defaultBlockParse = function defaultBlockParse(source, state) { + state = state || {}; + state.inline = false; + return defaultRawParse(source, state); +}; + +var defaultInlineParse = function defaultInlineParse(source, state) { + state = state || {}; + state.inline = true; + return defaultRawParse(source, state); +}; + +var defaultImplicitParse = function defaultImplicitParse(source, state) { + var isBlock = BLOCK_END_R.test(source); + state = state || {}; + state.inline = !isBlock; + return defaultRawParse(source, state); +}; // $FlowFixMe[incompatible-call] + + +var defaultReactOutput = outputFor(defaultRules, "react"); // $FlowFixMe[incompatible-call] + +var defaultHtmlOutput = outputFor(defaultRules, "html"); + +var markdownToReact = function markdownToReact(source, state) { + return defaultReactOutput(defaultBlockParse(source, state), state); +}; + +var markdownToHtml = function markdownToHtml(source, state) { + return defaultHtmlOutput(defaultBlockParse(source, state), state); +}; // TODO: This needs definition + + +var ReactMarkdown = function ReactMarkdown(props) { + var divProps = {}; + + for (var prop in props) { + if (prop !== "source" && // $FlowFixMe + Object.prototype.hasOwnProperty.call(props, prop)) { + divProps[prop] = props[prop]; + } + } + + divProps.children = markdownToReact(props.source); + return reactElement("div", null, divProps); +}; + +// $FlowFixMe +var SimpleMarkdown = { + defaultRules: defaultRules, + parserFor: parserFor, + outputFor: outputFor, + inlineRegex: inlineRegex, + blockRegex: blockRegex, + anyScopeRegex: anyScopeRegex, + parseInline: parseInline, + parseBlock: parseBlock, + // default wrappers: + markdownToReact: markdownToReact, + markdownToHtml: markdownToHtml, + ReactMarkdown: ReactMarkdown, + defaultBlockParse: defaultBlockParse, + defaultInlineParse: defaultInlineParse, + defaultImplicitParse: defaultImplicitParse, + defaultReactOutput: defaultReactOutput, + defaultHtmlOutput: defaultHtmlOutput, + preprocess: preprocess, + sanitizeText: sanitizeText, + sanitizeUrl: sanitizeUrl, + unescapeUrl: unescapeUrl, + htmlTag: htmlTag, + reactElement: reactElement, + // deprecated: + defaultRawParse: defaultRawParse, + ruleOutput: ruleOutput, + reactFor: reactFor, + htmlFor: htmlFor, + defaultParse: function defaultParse() { + if (typeof console !== "undefined") { + console.warn("defaultParse is deprecated, please use `defaultImplicitParse`"); + } + + return defaultImplicitParse.apply(null, arguments); + }, + defaultOutput: function defaultOutput() { + if (typeof console !== "undefined") { + console.warn("defaultOutput is deprecated, please use `defaultReactOutput`"); + } + + return defaultReactOutput.apply(null, arguments); + } +}; + + +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 42494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "bK": () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js + + + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue/* default */.Z)(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js +var isPlainObject = __webpack_require__(37514); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = (0,isArray/* default */.Z)(srcValue), + isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue), + isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if ((0,isArray/* default */.Z)(objValue)) { + newValue = objValue; + } + else if ((0,isArrayLikeObject/* default */.Z)(objValue)) { + newValue = (0,_copyArray/* default */.Z)(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true); + } + else { + newValue = []; + } + } + else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) { + newValue = objValue; + if ((0,isArguments/* default */.Z)(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) { + newValue = (0,_initCloneObject/* default */.Z)(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + (0,_baseFor/* default */.Z)(source, function(srcValue, key) { + stack || (stack = new _Stack/* default */.Z); + if ((0,isObject/* default */.Z)(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, keysIn/* default */.Z); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return (0,_baseRest/* default */.Z)(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default.Date.now */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "k": () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 39354: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "c": () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/clone.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 31667: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _Stack) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules +var _ListCache = __webpack_require__(67308); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache/* default */.Z; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js +var _Map = __webpack_require__(86183); +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache/* default */.Z) { + var pairs = data.__data__; + if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache/* default */.Z(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache/* default */.Z(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + + +/***/ }), + +/***/ 84073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Built-in value references. */ +var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 87668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _arrayLikeKeys) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = (0,isArray/* default */.Z)(value), + isArg = !isArr && (0,isArguments/* default */.Z)(value), + isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value), + isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + (0,_isIndex/* default */.Z)(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 72954: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value); + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue); + + +/***/ }), + +/***/ 74752: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904); + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) { + (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 61395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFor) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 69581: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203); +/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211); +/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227); + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + ''); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 41884: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073); + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer)); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer); + + +/***/ }), + +/***/ 91050: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer); + + +/***/ }), + +/***/ 12701: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884); + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray); + + +/***/ }), + +/***/ 87215: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray); + + +/***/ }), + +/***/ 31899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752); + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue); + } else { + (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject); + + +/***/ }), + +/***/ 77904: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508); + + +var defineProperty = (function() { + try { + var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 12513: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851); + + +/** Built-in value references. */ +var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 73658: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _initCloneObject) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!(0,isObject/* default */.Z)(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object)) + ? _baseCreate((0,_getPrototype/* default */.Z)(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + + +/***/ }), + +/***/ 56009: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex); + + +/***/ }), + +/***/ 50439: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226); + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length)) + : (type == 'string' && index in object) + ) { + return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value); + } + return false; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 81211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _overRest) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 27227: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _setToString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js +var _defineProperty = __webpack_require__(77904); +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) { + return (0,_defineProperty/* default */.Z)(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': (0,constant/* default */.Z)(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 62002: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 69203: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity); + + +/***/ }), + +/***/ 836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject); + + +/***/ }), + +/***/ 37514: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) { + return false; + } + var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 32957: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_keysIn) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules +var _arrayLikeKeys = __webpack_require__(87668); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!(0,isObject/* default */.Z)(object)) { + return _nativeKeysIn(object); + } + var isProto = (0,_isPrototype/* default */.Z)(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 10619: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(25001); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45625); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(70044); +/* harmony import */ var _index_5219d011_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(12566); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(81188); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39354); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3502); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(17967); + + + + + + + + + + + + + + + + + + + + +const sanitizeText = (txt) => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(txt, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)()); +let conf = { + dividerMargin: 10, + padding: 5, + textHeight: 10, + curve: void 0 +}; +const addClasses = function(classes, g, _id, diagObj) { + const keys = Object.keys(classes); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info("keys:", keys); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info(classes); + keys.forEach(function(id) { + var _a, _b; + const vertex = classes[id]; + let cssClassStr = ""; + if (vertex.cssClasses.length > 0) { + cssClassStr = cssClassStr + " " + vertex.cssClasses.join(" "); + } + const styles2 = { labelStyle: "", style: "" }; + const vertexText = vertex.label ?? vertex.id; + const radius = 0; + const shape = "class_box"; + const node = { + labelStyle: styles2.labelStyle, + shape, + labelText: sanitizeText(vertexText), + classData: vertex, + rx: radius, + ry: radius, + class: cssClassStr, + style: styles2.style, + id: vertex.id, + domId: vertex.domId, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + haveCallback: vertex.haveCallback, + link: vertex.link, + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release + padding: ((_a = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().class) == null ? void 0 : _b.padding) + }; + g.setNode(vertex.id, node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info("setNode", node); + }); +}; +const addNotes = function(notes, g, startEdgeId, classes) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info(notes); + notes.forEach(function(note, i) { + var _a, _b; + const vertex = note; + const cssNoteStr = ""; + const styles2 = { labelStyle: "", style: "" }; + const vertexText = vertex.text; + const radius = 0; + const shape = "note"; + const node = { + labelStyle: styles2.labelStyle, + shape, + labelText: sanitizeText(vertexText), + noteData: vertex, + rx: radius, + ry: radius, + class: cssNoteStr, + style: styles2.style, + id: vertex.id, + domId: vertex.id, + tooltip: "", + type: "note", + // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release + padding: ((_a = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().class) == null ? void 0 : _b.padding) + }; + g.setNode(vertex.id, node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info("setNode", node); + if (!vertex.class || !(vertex.class in classes)) { + return; + } + const edgeId = startEdgeId + i; + const edgeData = { + id: `edgeNote${edgeId}`, + //Set relationship style and line type + classes: "relation", + pattern: "dotted", + // Set link type for rendering + arrowhead: "none", + //Set edge extra labels + startLabelRight: "", + endLabelLeft: "", + //Set relation arrow types + arrowTypeStart: "none", + arrowTypeEnd: "none", + style: "fill:none", + labelStyle: "", + curve: (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6) + }; + g.setEdge(vertex.id, vertex.class, edgeData, edgeId); + }); +}; +const addRelations = function(relations, g) { + const conf2 = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().flowchart; + let cnt = 0; + relations.forEach(function(edge) { + var _a; + cnt++; + const edgeData = { + //Set relationship style and line type + classes: "relation", + pattern: edge.relation.lineType == 1 ? "dashed" : "solid", + id: "id" + cnt, + // Set link type for rendering + arrowhead: edge.type === "arrow_open" ? "none" : "normal", + //Set edge extra labels + startLabelRight: edge.relationTitle1 === "none" ? "" : edge.relationTitle1, + endLabelLeft: edge.relationTitle2 === "none" ? "" : edge.relationTitle2, + //Set relation arrow types + arrowTypeStart: getArrowMarker(edge.relation.type1), + arrowTypeEnd: getArrowMarker(edge.relation.type2), + style: "fill:none", + labelStyle: "", + curve: (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__.o)(conf2 == null ? void 0 : conf2.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6) + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info(edgeData, edge); + if (edge.style !== void 0) { + const styles2 = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__.n)(edge.style); + edgeData.style = styles2.style; + edgeData.labelStyle = styles2.labelStyle; + } + edge.text = edge.title; + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + if (((_a = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().flowchart) == null ? void 0 : _a.htmlLabels) ?? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().htmlLabels) { + edgeData.labelType = "html"; + edgeData.label = '<span class="edgeLabel">' + edge.text + "</span>"; + } else { + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + } + } + g.setEdge(edge.id1, edge.id2, edgeData, cnt); + }); +}; +const setConf = function(cnf) { + conf = { + ...conf, + ...cnf + }; +}; +const draw = function(text, id, _version, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Drawing class - ", id); + const conf2 = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().flowchart ?? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().class; + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().securityLevel; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info("config:", conf2); + const nodeSpacing = (conf2 == null ? void 0 : conf2.nodeSpacing) ?? 50; + const rankSpacing = (conf2 == null ? void 0 : conf2.rankSpacing) ?? 50; + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: diagObj.db.getDirection(), + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + const classes = diagObj.db.getClasses(); + const relations = diagObj.db.getRelations(); + const notes = diagObj.db.getNotes(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info(relations); + addClasses(classes, g, id, diagObj); + addRelations(relations, g); + addNotes(notes, g, relations.length + 1, classes); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? ( + // @ts-ignore Ignore type error for now + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) + ) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + (0,_index_5219d011_js__WEBPACK_IMPORTED_MODULE_10__.r)( + element, + g, + ["aggregation", "extension", "composition", "dependency", "lollipop"], + "classDiagram", + id + ); + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__.u.insertTitle(svg, "classTitleText", (conf2 == null ? void 0 : conf2.titleTopMargin) ?? 5, diagObj.db.getDiagramTitle()); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__.s)(g, svg, conf2 == null ? void 0 : conf2.diagramPadding, conf2 == null ? void 0 : conf2.useMaxWidth); + if (!(conf2 == null ? void 0 : conf2.htmlLabels)) { + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } +}; +function getArrowMarker(type) { + let marker; + switch (type) { + case 0: + marker = "aggregation"; + break; + case 1: + marker = "extension"; + break; + case 2: + marker = "composition"; + break; + case 3: + marker = "dependency"; + break; + case 4: + marker = "lollipop"; + break; + default: + marker = "none"; + } + return marker; +} +const renderer = { + setConf, + draw +}; +const diagram = { + parser: _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_11__.p, + db: _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_11__.d, + renderer, + styles: _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_11__.s, + init: (cnf) => { + if (!cnf.class) { + cnf.class = {}; + } + cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_11__.d.clear(); + } +}; + +//# sourceMappingURL=classDiagram-v2-72bddc41.js.map + + +/***/ }), + +/***/ 211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "c": () => (/* binding */ createText) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43047); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3502); + + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = withoutMultipleNewlines.replace(/^\s+/gm, ""); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(preprocessedMarkdown); + let lines = [[]]; + let currentLine = 0; + function processNode(node, parentType) { + if (node.type === "text") { + const textLines = node.content.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType || "normal" }); + } + }); + }); + } else if (node.type === "strong" || node.type === "em") { + node.content.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + syntaxTree.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.content.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(markdown); + function output(node) { + if (node.type === "text") { + return node.content.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.content.map(output).join("")}</strong>`; + } else if (node.type === "em") { + return `<em>${node.content.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.content.map(output).join("")}</p>`; + } else { + return ""; + } + } + return syntaxTree.map(output).join(""); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + `<span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + let bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = -1; + structuredText.forEach((line) => { + lineIndex++; + let tspan = createTspan(textElement, lineIndex, lineHeight); + let words = [...line].reverse(); + let currentWord; + let wrappedLine = []; + while (words.length) { + currentWord = words.pop(); + wrappedLine.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + if (tspan.node().getComputedTextLength() > width) { + wrappedLine.pop(); + words.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + wrappedLine = []; + lineIndex++; + tspan = createTspan(textElement, lineIndex, lineHeight); + } + } + }); + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "em" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width, + addSvgBackground = false +} = {}) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__.d)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlSpan(el, node, width, classes); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const special = ['"', "'", ".", ",", ":", ";", "!", "?", "(", ")", "[", "]", "{", "}"]; + let lastWord; + structuredText.forEach((line) => { + line.forEach((word) => { + if (special.includes(word.content) && lastWord) { + lastWord.content += word.content; + word.content = ""; + } + lastWord = word; + }); + }); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + +//# sourceMappingURL=createText-1f5f8f92.js.map + + +/***/ }), + +/***/ 48099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ insertMarkers$1), +/* harmony export */ "b": () => (/* binding */ clear$1), +/* harmony export */ "c": () => (/* binding */ createLabel$1), +/* harmony export */ "d": () => (/* binding */ clear), +/* harmony export */ "e": () => (/* binding */ insertNode), +/* harmony export */ "f": () => (/* binding */ insertEdgeLabel), +/* harmony export */ "g": () => (/* binding */ insertEdge), +/* harmony export */ "h": () => (/* binding */ positionEdgeLabel), +/* harmony export */ "i": () => (/* binding */ intersectRect$1), +/* harmony export */ "l": () => (/* binding */ labelHelper), +/* harmony export */ "p": () => (/* binding */ positionNode), +/* harmony export */ "s": () => (/* binding */ setNodeElem), +/* harmony export */ "u": () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(211); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); +/* harmony import */ var _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(77657); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(81188); + + + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 12 20").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(label, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), { + useHtmlLabels, + width: node.width || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(" + 0 + ", " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const question = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = (parent, node) => { + const { shapeSvg } = labelHelper(parent, node, "label", true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", " + 0 + ")" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = shapes[node.shape](newEl, node, dir); + } else { + el = shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcLabelPosition(path); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.arrowMarkerAbsolute || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + +//# sourceMappingURL=edges-2e77835f.js.map + + +/***/ }), + +/***/ 12566: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "r": () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39354); +/* harmony import */ var _edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(48099); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70044); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(211); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(59373); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = JSON.parse(JSON.stringify(edge)); + const edge2 = JSON.parse(JSON.stringify(edge)); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = (_elem, graph, diagramtype, parentCluster) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + graph.nodes().forEach(function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); + const newEl = o.elem; + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = (elem, graph, markers, diagramtype, id) => { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + adjustClustersAndEdges(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + recursiveRender(elem, graph, diagramtype); +}; + +//# sourceMappingURL=index-5219d011.js.map + + +/***/ }), + +/***/ 25001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "d": () => (/* binding */ db), +/* harmony export */ "p": () => (/* binding */ parser$1), +/* harmony export */ "s": () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(81188); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 7], $V2 = [1, 8], $V3 = [1, 9], $V4 = [1, 10], $V5 = [1, 13], $V6 = [1, 12], $V7 = [1, 16, 25], $V8 = [1, 20], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 48], $Vd = [1, 39], $Ve = [1, 37], $Vf = [1, 38], $Vg = [1, 44], $Vh = [1, 45], $Vi = [1, 40], $Vj = [1, 41], $Vk = [1, 42], $Vl = [1, 43], $Vm = [1, 49], $Vn = [1, 50], $Vo = [1, 51], $Vp = [1, 52], $Vq = [16, 25], $Vr = [1, 66], $Vs = [1, 67], $Vt = [1, 68], $Vu = [1, 69], $Vv = [1, 70], $Vw = [1, 71], $Vx = [1, 72], $Vy = [1, 82], $Vz = [16, 25, 28, 29, 36, 49, 50, 64, 65, 66, 67, 68, 69, 70, 75, 77], $VA = [16, 25, 28, 29, 34, 36, 49, 50, 55, 64, 65, 66, 67, 68, 69, 70, 75, 77, 92, 93, 94, 95], $VB = [5, 8, 9, 10, 11, 16, 19, 23, 25], $VC = [29, 92, 93, 94, 95], $VD = [29, 69, 70, 92, 93, 94, 95], $VE = [29, 64, 65, 66, 67, 68, 92, 93, 94, 95], $VF = [1, 96], $VG = [16, 25, 49, 50], $VH = [16, 25, 36]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statments": 5, "direction": 6, "directive": 7, "direction_tb": 8, "direction_bt": 9, "direction_rl": 10, "direction_lr": 11, "graphConfig": 12, "openDirective": 13, "typeDirective": 14, "closeDirective": 15, "NEWLINE": 16, ":": 17, "argDirective": 18, "open_directive": 19, "type_directive": 20, "arg_directive": 21, "close_directive": 22, "CLASS_DIAGRAM": 23, "statements": 24, "EOF": 25, "statement": 26, "classLabel": 27, "SQS": 28, "STR": 29, "SQE": 30, "className": 31, "alphaNumToken": 32, "classLiteralName": 33, "GENERICTYPE": 34, "relationStatement": 35, "LABEL": 36, "classStatement": 37, "methodStatement": 38, "annotationStatement": 39, "clickStatement": 40, "cssClassStatement": 41, "noteStatement": 42, "acc_title": 43, "acc_title_value": 44, "acc_descr": 45, "acc_descr_value": 46, "acc_descr_multiline_value": 47, "classIdentifier": 48, "STYLE_SEPARATOR": 49, "STRUCT_START": 50, "members": 51, "STRUCT_STOP": 52, "CLASS": 53, "ANNOTATION_START": 54, "ANNOTATION_END": 55, "MEMBER": 56, "SEPARATOR": 57, "relation": 58, "NOTE_FOR": 59, "noteText": 60, "NOTE": 61, "relationType": 62, "lineType": 63, "AGGREGATION": 64, "EXTENSION": 65, "COMPOSITION": 66, "DEPENDENCY": 67, "LOLLIPOP": 68, "LINE": 69, "DOTTED_LINE": 70, "CALLBACK": 71, "LINK": 72, "LINK_TARGET": 73, "CLICK": 74, "CALLBACK_NAME": 75, "CALLBACK_ARGS": 76, "HREF": 77, "CSSCLASS": 78, "commentToken": 79, "textToken": 80, "graphCodeTokens": 81, "textNoTagsToken": 82, "TAGSTART": 83, "TAGEND": 84, "==": 85, "--": 86, "PCT": 87, "DEFAULT": 88, "SPACE": 89, "MINUS": 90, "keywords": 91, "UNICODE_TEXT": 92, "NUM": 93, "ALPHA": 94, "BQUOTE_STR": 95, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "statments", 8: "direction_tb", 9: "direction_bt", 10: "direction_rl", 11: "direction_lr", 16: "NEWLINE", 17: ":", 19: "open_directive", 20: "type_directive", 21: "arg_directive", 22: "close_directive", 23: "CLASS_DIAGRAM", 25: "EOF", 28: "SQS", 29: "STR", 30: "SQE", 34: "GENERICTYPE", 36: "LABEL", 43: "acc_title", 44: "acc_title_value", 45: "acc_descr", 46: "acc_descr_value", 47: "acc_descr_multiline_value", 49: "STYLE_SEPARATOR", 50: "STRUCT_START", 52: "STRUCT_STOP", 53: "CLASS", 54: "ANNOTATION_START", 55: "ANNOTATION_END", 56: "MEMBER", 57: "SEPARATOR", 59: "NOTE_FOR", 61: "NOTE", 64: "AGGREGATION", 65: "EXTENSION", 66: "COMPOSITION", 67: "DEPENDENCY", 68: "LOLLIPOP", 69: "LINE", 70: "DOTTED_LINE", 71: "CALLBACK", 72: "LINK", 73: "LINK_TARGET", 74: "CLICK", 75: "CALLBACK_NAME", 76: "CALLBACK_ARGS", 77: "HREF", 78: "CSSCLASS", 81: "graphCodeTokens", 83: "TAGSTART", 84: "TAGEND", 85: "==", 86: "--", 87: "PCT", 88: "DEFAULT", 89: "SPACE", 90: "MINUS", 91: "keywords", 92: "UNICODE_TEXT", 93: "NUM", 94: "ALPHA", 95: "BQUOTE_STR" }, + productions_: [0, [3, 1], [3, 1], [3, 1], [3, 2], [6, 1], [6, 1], [6, 1], [6, 1], [4, 1], [7, 4], [7, 6], [13, 1], [14, 1], [18, 1], [15, 1], [12, 4], [24, 1], [24, 2], [24, 3], [27, 3], [31, 1], [31, 1], [31, 2], [31, 2], [31, 2], [26, 1], [26, 2], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 2], [26, 2], [26, 1], [37, 1], [37, 3], [37, 4], [37, 6], [48, 2], [48, 3], [39, 4], [51, 1], [51, 2], [38, 1], [38, 2], [38, 1], [38, 1], [35, 3], [35, 4], [35, 4], [35, 5], [42, 3], [42, 2], [58, 3], [58, 2], [58, 2], [58, 1], [62, 1], [62, 1], [62, 1], [62, 1], [62, 1], [63, 1], [63, 1], [40, 3], [40, 4], [40, 3], [40, 4], [40, 4], [40, 5], [40, 3], [40, 4], [40, 4], [40, 5], [40, 3], [40, 4], [40, 4], [40, 5], [41, 3], [79, 1], [79, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [82, 1], [82, 1], [82, 1], [82, 1], [32, 1], [32, 1], [32, 1], [33, 1], [60, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.setDirection("TB"); + break; + case 6: + yy.setDirection("BT"); + break; + case 7: + yy.setDirection("RL"); + break; + case 8: + yy.setDirection("LR"); + break; + case 12: + yy.parseDirective("%%{", "open_directive"); + break; + case 13: + yy.parseDirective($$[$0], "type_directive"); + break; + case 14: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 15: + yy.parseDirective("}%%", "close_directive", "class"); + break; + case 20: + this.$ = $$[$0 - 1]; + break; + case 21: + case 22: + this.$ = $$[$0]; + break; + case 23: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 24: + case 25: + this.$ = $$[$0 - 1] + "~" + $$[$0]; + break; + case 26: + yy.addRelation($$[$0]); + break; + case 27: + $$[$0 - 1].title = yy.cleanupLabel($$[$0]); + yy.addRelation($$[$0 - 1]); + break; + case 36: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 37: + case 38: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 40: + yy.setCssClass($$[$0 - 2], $$[$0]); + break; + case 41: + yy.addMembers($$[$0 - 3], $$[$0 - 1]); + break; + case 42: + yy.setCssClass($$[$0 - 5], $$[$0 - 3]); + yy.addMembers($$[$0 - 5], $$[$0 - 1]); + break; + case 43: + this.$ = $$[$0]; + yy.addClass($$[$0]); + break; + case 44: + this.$ = $$[$0 - 1]; + yy.addClass($$[$0 - 1]); + yy.setClassLabel($$[$0 - 1], $$[$0]); + break; + case 45: + yy.addAnnotation($$[$0], $$[$0 - 2]); + break; + case 46: + this.$ = [$$[$0]]; + break; + case 47: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 48: + break; + case 49: + yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); + break; + case 50: + break; + case 51: + break; + case 52: + this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; + break; + case 53: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; + break; + case 54: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; + break; + case 55: + this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; + break; + case 56: + yy.addNote($$[$0], $$[$0 - 1]); + break; + case 57: + yy.addNote($$[$0]); + break; + case 58: + this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 59: + this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 60: + this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; + break; + case 61: + this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; + break; + case 62: + this.$ = yy.relationType.AGGREGATION; + break; + case 63: + this.$ = yy.relationType.EXTENSION; + break; + case 64: + this.$ = yy.relationType.COMPOSITION; + break; + case 65: + this.$ = yy.relationType.DEPENDENCY; + break; + case 66: + this.$ = yy.relationType.LOLLIPOP; + break; + case 67: + this.$ = yy.lineType.LINE; + break; + case 68: + this.$ = yy.lineType.DOTTED_LINE; + break; + case 69: + case 75: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 70: + case 76: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 71: + case 79: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 72: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 73: + case 81: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 74: + case 82: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 3], $$[$0 - 1]); + break; + case 77: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 78: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 80: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 83: + yy.setCssClass($$[$0 - 1], $$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 6: 4, 7: 5, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 12: 6, 13: 11, 19: $V5, 23: $V6 }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 3: 14, 4: 2, 5: $V0, 6: 4, 7: 5, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 12: 6, 13: 11, 19: $V5, 23: $V6 }, { 1: [2, 9] }, o($V7, [2, 5]), o($V7, [2, 6]), o($V7, [2, 7]), o($V7, [2, 8]), { 14: 15, 20: [1, 16] }, { 16: [1, 17] }, { 20: [2, 12] }, { 1: [2, 4] }, { 15: 18, 17: [1, 19], 22: $V8 }, o([17, 22], [2, 13]), { 6: 31, 7: 30, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 13: 11, 19: $V5, 24: 21, 26: 22, 31: 35, 32: 46, 33: 47, 35: 23, 37: 24, 38: 25, 39: 26, 40: 27, 41: 28, 42: 29, 43: $V9, 45: $Va, 47: $Vb, 48: 36, 53: $Vc, 54: $Vd, 56: $Ve, 57: $Vf, 59: $Vg, 61: $Vh, 71: $Vi, 72: $Vj, 74: $Vk, 78: $Vl, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 16: [1, 53] }, { 18: 54, 21: [1, 55] }, { 16: [2, 15] }, { 25: [1, 56] }, { 16: [1, 57], 25: [2, 17] }, o($Vq, [2, 26], { 36: [1, 58] }), o($Vq, [2, 28]), o($Vq, [2, 29]), o($Vq, [2, 30]), o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vq, [2, 34]), o($Vq, [2, 35]), { 44: [1, 59] }, { 46: [1, 60] }, o($Vq, [2, 38]), o($Vq, [2, 48], { 58: 61, 62: 64, 63: 65, 29: [1, 62], 36: [1, 63], 64: $Vr, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv, 69: $Vw, 70: $Vx }), o($Vq, [2, 39], { 49: [1, 73], 50: [1, 74] }), o($Vq, [2, 50]), o($Vq, [2, 51]), { 32: 75, 92: $Vm, 93: $Vn, 94: $Vo }, { 31: 76, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 31: 77, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 31: 78, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 29: [1, 79] }, { 31: 80, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 29: $Vy, 60: 81 }, o($Vz, [2, 21], { 32: 46, 33: 47, 31: 83, 34: [1, 84], 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }), o($Vz, [2, 22], { 34: [1, 85] }), { 31: 86, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($VA, [2, 97]), o($VA, [2, 98]), o($VA, [2, 99]), o([16, 25, 28, 29, 34, 36, 49, 50, 64, 65, 66, 67, 68, 69, 70, 75, 77], [2, 100]), o($VB, [2, 10]), { 15: 87, 22: $V8 }, { 22: [2, 14] }, { 1: [2, 16] }, { 6: 31, 7: 30, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 13: 11, 19: $V5, 24: 88, 25: [2, 18], 26: 22, 31: 35, 32: 46, 33: 47, 35: 23, 37: 24, 38: 25, 39: 26, 40: 27, 41: 28, 42: 29, 43: $V9, 45: $Va, 47: $Vb, 48: 36, 53: $Vc, 54: $Vd, 56: $Ve, 57: $Vf, 59: $Vg, 61: $Vh, 71: $Vi, 72: $Vj, 74: $Vk, 78: $Vl, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($Vq, [2, 27]), o($Vq, [2, 36]), o($Vq, [2, 37]), { 29: [1, 90], 31: 89, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 58: 91, 62: 64, 63: 65, 64: $Vr, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv, 69: $Vw, 70: $Vx }, o($Vq, [2, 49]), { 63: 92, 69: $Vw, 70: $Vx }, o($VC, [2, 61], { 62: 93, 64: $Vr, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv }), o($VD, [2, 62]), o($VD, [2, 63]), o($VD, [2, 64]), o($VD, [2, 65]), o($VD, [2, 66]), o($VE, [2, 67]), o($VE, [2, 68]), { 32: 94, 92: $Vm, 93: $Vn, 94: $Vo }, { 51: 95, 56: $VF }, { 55: [1, 97] }, { 29: [1, 98] }, { 29: [1, 99] }, { 75: [1, 100], 77: [1, 101] }, { 32: 102, 92: $Vm, 93: $Vn, 94: $Vo }, { 29: $Vy, 60: 103 }, o($Vq, [2, 57]), o($Vq, [2, 101]), o($Vz, [2, 23]), o($Vz, [2, 24]), o($Vz, [2, 25]), o($VG, [2, 43], { 27: 104, 28: [1, 105] }), { 16: [1, 106] }, { 25: [2, 19] }, o($VH, [2, 52]), { 31: 107, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 29: [1, 109], 31: 108, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($VC, [2, 60], { 62: 110, 64: $Vr, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv }), o($VC, [2, 59]), o($Vq, [2, 40], { 50: [1, 111] }), { 52: [1, 112] }, { 51: 113, 52: [2, 46], 56: $VF }, { 31: 114, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($Vq, [2, 69], { 29: [1, 115] }), o($Vq, [2, 71], { 29: [1, 117], 73: [1, 116] }), o($Vq, [2, 75], { 29: [1, 118], 76: [1, 119] }), o($Vq, [2, 79], { 29: [1, 121], 73: [1, 120] }), o($Vq, [2, 83]), o($Vq, [2, 56]), o($VG, [2, 44]), { 29: [1, 122] }, o($VB, [2, 11]), o($VH, [2, 54]), o($VH, [2, 53]), { 31: 123, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($VC, [2, 58]), { 51: 124, 56: $VF }, o($Vq, [2, 41]), { 52: [2, 47] }, o($Vq, [2, 45]), o($Vq, [2, 70]), o($Vq, [2, 72]), o($Vq, [2, 73], { 73: [1, 125] }), o($Vq, [2, 76]), o($Vq, [2, 77], { 29: [1, 126] }), o($Vq, [2, 80]), o($Vq, [2, 81], { 73: [1, 127] }), { 30: [1, 128] }, o($VH, [2, 55]), { 52: [1, 129] }, o($Vq, [2, 74]), o($Vq, [2, 78]), o($Vq, [2, 82]), o($VG, [2, 20]), o($Vq, [2, 42])], + defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 6: [2, 9], 13: [2, 12], 14: [2, 4], 20: [2, 15], 55: [2, 14], 56: [2, 16], 88: [2, 19], 113: [2, 47] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 19; + case 1: + return 8; + case 2: + return 9; + case 3: + return 10; + case 4: + return 11; + case 5: + this.begin("type_directive"); + return 20; + case 6: + this.popState(); + this.begin("arg_directive"); + return 17; + case 7: + this.popState(); + this.popState(); + return 22; + case 8: + return 21; + case 9: + break; + case 10: + break; + case 11: + this.begin("acc_title"); + return 43; + case 12: + this.popState(); + return "acc_title_value"; + case 13: + this.begin("acc_descr"); + return 45; + case 14: + this.popState(); + return "acc_descr_value"; + case 15: + this.begin("acc_descr_multiline"); + break; + case 16: + this.popState(); + break; + case 17: + return "acc_descr_multiline_value"; + case 18: + return 16; + case 19: + break; + case 20: + return 23; + case 21: + return 23; + case 22: + this.begin("struct"); + return 50; + case 23: + return "EDGE_STATE"; + case 24: + return "EOF_IN_STRUCT"; + case 25: + return "OPEN_IN_STRUCT"; + case 26: + this.popState(); + return 52; + case 27: + break; + case 28: + return "MEMBER"; + case 29: + return 53; + case 30: + return 78; + case 31: + return 71; + case 32: + return 72; + case 33: + return 74; + case 34: + return 59; + case 35: + return 61; + case 36: + return 54; + case 37: + return 55; + case 38: + this.begin("generic"); + break; + case 39: + this.popState(); + break; + case 40: + return "GENERICTYPE"; + case 41: + this.begin("string"); + break; + case 42: + this.popState(); + break; + case 43: + return "STR"; + case 44: + this.begin("bqstring"); + break; + case 45: + this.popState(); + break; + case 46: + return "BQUOTE_STR"; + case 47: + this.begin("href"); + break; + case 48: + this.popState(); + break; + case 49: + return 77; + case 50: + this.begin("callback_name"); + break; + case 51: + this.popState(); + break; + case 52: + this.popState(); + this.begin("callback_args"); + break; + case 53: + return 75; + case 54: + this.popState(); + break; + case 55: + return 76; + case 56: + return 73; + case 57: + return 73; + case 58: + return 73; + case 59: + return 73; + case 60: + return 65; + case 61: + return 65; + case 62: + return 67; + case 63: + return 67; + case 64: + return 66; + case 65: + return 64; + case 66: + return 68; + case 67: + return 69; + case 68: + return 70; + case 69: + return 36; + case 70: + return 49; + case 71: + return 90; + case 72: + return "DOT"; + case 73: + return "PLUS"; + case 74: + return 87; + case 75: + return "EQUALS"; + case 76: + return "EQUALS"; + case 77: + return 94; + case 78: + return 28; + case 79: + return 30; + case 80: + return "PUNCTUATION"; + case 81: + return 93; + case 82: + return 92; + case 83: + return 89; + case 84: + return 25; + } + }, + rules: [/^(?:%%\{)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:[{])/, /^(?:\[\*\])/, /^(?:$)/, /^(?:[{])/, /^(?:[}])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:class\b)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:[~])/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[`])/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:href[\s]+["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\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]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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-\u0C33\u0C35-\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\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\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\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\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])/, /^(?:\s)/, /^(?:$)/], + conditions: { "acc_descr_multiline": { "rules": [16, 17], "inclusive": false }, "acc_descr": { "rules": [14], "inclusive": false }, "acc_title": { "rules": [12], "inclusive": false }, "arg_directive": { "rules": [7, 8], "inclusive": false }, "type_directive": { "rules": [6, 7], "inclusive": false }, "open_directive": { "rules": [5], "inclusive": false }, "callback_args": { "rules": [54, 55], "inclusive": false }, "callback_name": { "rules": [51, 52, 53], "inclusive": false }, "href": { "rules": [48, 49], "inclusive": false }, "struct": { "rules": [23, 24, 25, 26, 27, 28], "inclusive": false }, "generic": { "rules": [39, 40], "inclusive": false }, "bqstring": { "rules": [45, 46], "inclusive": false }, "string": { "rules": [42, 43], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 41, 44, 47, 50, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "classId-"; +let relations = []; +let classes = {}; +let notes = []; +let classCounter = 0; +let functions = []; +const sanitizeText = (txt) => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()); +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.m.parseDirective(this, statement, context, type); +}; +const splitClassNameAndType = function(id) { + let genericType = ""; + let className = id; + if (id.indexOf("~") > 0) { + const split = id.split("~"); + className = sanitizeText(split[0]); + genericType = sanitizeText(split[1]); + } + return { className, type: genericType }; +}; +const setClassLabel = function(id, label) { + if (label) { + label = sanitizeText(label); + } + const { className } = splitClassNameAndType(id); + classes[className].label = label; +}; +const addClass = function(id) { + const classId = splitClassNameAndType(id); + if (classes[classId.className] !== void 0) { + return; + } + classes[classId.className] = { + id: classId.className, + type: classId.type, + label: classId.className, + cssClasses: [], + methods: [], + members: [], + annotations: [], + domId: MERMAID_DOM_ID_PREFIX + classId.className + "-" + classCounter + }; + classCounter++; +}; +const lookUpDomId = function(id) { + if (id in classes) { + return classes[id].domId; + } + throw new Error("Class not found: " + id); +}; +const clear = function() { + relations = []; + classes = {}; + notes = []; + functions = []; + functions.push(setupToolTips); + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.y)(); +}; +const getClass = function(id) { + return classes[id]; +}; +const getClasses = function() { + return classes; +}; +const getRelations = function() { + return relations; +}; +const getNotes = function() { + return notes; +}; +const addRelation = function(relation) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); + addClass(relation.id1); + addClass(relation.id2); + relation.id1 = splitClassNameAndType(relation.id1).className; + relation.id2 = splitClassNameAndType(relation.id2).className; + relation.relationTitle1 = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + relation.relationTitle1.trim(), + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)() + ); + relation.relationTitle2 = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + relation.relationTitle2.trim(), + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)() + ); + relations.push(relation); +}; +const addAnnotation = function(className, annotation) { + const validatedClassName = splitClassNameAndType(className).className; + classes[validatedClassName].annotations.push(annotation); +}; +const addMember = function(className, member) { + const validatedClassName = splitClassNameAndType(className).className; + const theClass = classes[validatedClassName]; + if (typeof member === "string") { + const memberString = member.trim(); + if (memberString.startsWith("<<") && memberString.endsWith(">>")) { + theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); + } else if (memberString.indexOf(")") > 0) { + theClass.methods.push(sanitizeText(memberString)); + } else if (memberString) { + theClass.members.push(sanitizeText(memberString)); + } + } +}; +const addMembers = function(className, members) { + if (Array.isArray(members)) { + members.reverse(); + members.forEach((member) => addMember(className, member)); + } +}; +const addNote = function(text, className) { + const note = { + id: `note${notes.length}`, + class: className, + text + }; + notes.push(note); +}; +const cleanupLabel = function(label) { + if (label.startsWith(":")) { + label = label.substring(1); + } + return sanitizeText(label.trim()); +}; +const setCssClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].cssClasses.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + classes[id].tooltip = sanitizeText(tooltip); + } + }); +}; +const getTooltip = function(id) { + return classes[id].tooltip; +}; +const setLink = function(ids, linkStr, target) { + const config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].link = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.formatUrl(linkStr, config); + if (config.securityLevel === "sandbox") { + classes[id].linkTarget = "_top"; + } else if (typeof target === "string") { + classes[id].linkTarget = sanitizeText(target); + } else { + classes[id].linkTarget = "_blank"; + } + } + }); + setCssClass(ids, "clickable"); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFunc(id, functionName, functionArgs); + classes[id].haveCallback = true; + }); + setCssClass(ids, "clickable"); +}; +const setClickFunc = function(domId, functionName, functionArgs) { + const config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); + if (config.securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + const id = domId; + if (classes[id] !== void 0) { + const elemId = lookUpDomId(id); + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(elemId); + } + functions.push(function() { + const elem = document.querySelector(`[id="${elemId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const bindFunctions = function(element) { + functions.forEach(function(fun) { + fun(element); + }); +}; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + LOLLIPOP: 4 +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +functions.push(setupToolTips); +let direction = "TB"; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const db = { + parseDirective, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.p, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.v, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().class, + addClass, + bindFunctions, + clear, + getClass, + getClasses, + getNotes, + addAnnotation, + addNote, + getRelations, + addRelation, + getDirection, + setDirection, + addMember, + addMembers, + cleanupLabel, + lineType, + relationType, + setClickEvent, + setCssClass, + setLink, + getTooltip, + setTooltip, + lookUpDomId, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.x, + setClassLabel +}; +const getStyles = (options) => `g.classGroup text { + fill: ${options.nodeBorder}; + fill: ${options.classText}; + stroke: none; + font-family: ${options.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${options.classText}; +} +.edgeLabel .label rect { + fill: ${options.mainBkg}; +} +.label text { + fill: ${options.classText}; +} +.edgeLabel .label span { + background: ${options.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${options.nodeBorder}; + stroke: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.classGroup line { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${options.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${options.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + +//# sourceMappingURL=styles-16907e1b.js.map + + +/***/ }), + +/***/ 77657: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "p": () => (/* binding */ parseMember), +/* harmony export */ "s": () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); + + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = classDef.id; + if (classDef.type !== void 0 && classDef.type !== "") { + classTitleString += "<" + classDef.type + ">"; + } + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const drawNote = function(elem, note, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + const fieldRegEx = /^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/; + const methodRegEx = /^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/; + let fieldMatch = text.match(fieldRegEx); + let methodMatch = text.match(methodRegEx); + if (fieldMatch && !methodMatch) { + return buildFieldDisplay(fieldMatch); + } else if (methodMatch) { + return buildMethodDisplay(methodMatch); + } else { + return buildLegacyDisplay(text); + } +}; +const buildFieldDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let fieldType = parsedText[2] ? parsedText[2].trim() : ""; + let genericType = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let fieldName = parsedText[4] ? parsedText[4].trim() : ""; + let classifier = parsedText[5] ? parsedText[5].trim() : ""; + displayText = visibility + fieldType + genericType + " " + fieldName; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildMethodDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let methodName = parsedText[2] ? parsedText[2].trim() : ""; + let parameters = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let classifier = parsedText[4] ? parsedText[4].trim() : ""; + let returnType = parsedText[5] ? " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[5]).trim() : ""; + displayText = visibility + methodName + "(" + parameters + ")" + returnType; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildLegacyDisplay = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let methodStart = text.indexOf("("); + let methodEnd = text.indexOf(")"); + if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) { + let visibility = ""; + let methodName = ""; + let firstChar = text.substring(0, 1); + if (firstChar.match(/\w/)) { + methodName = text.substring(0, methodStart).trim(); + } else { + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + methodName = text.substring(1, methodStart).trim(); + } + const parameters = text.substring(methodStart + 1, methodEnd); + text.substring(methodEnd + 1, 1); + cssStyle = parseClassifier(text.substring(methodEnd + 1, methodEnd + 2)); + displayText = visibility + methodName + "(" + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + returnType = text.substring(methodEnd + 2).trim(); + if (returnType !== "") { + returnType = " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(returnType); + displayText += returnType; + } + } + } else { + displayText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + drawClass, + drawEdge, + drawNote, + parseMember +}; + +//# sourceMappingURL=svgDraw-2526cba0.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/619.ebfad195.js b/assets/js/619.ebfad195.js new file mode 100644 index 0000000000..83b8287d61 --- /dev/null +++ b/assets/js/619.ebfad195.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[619],{619:(e,t,l)=>{l.d(t,{diagram:()=>b});var n=l(5001),a=l(9373),o=l(5625),i=l(44),s=l(2566),r=l(1188);l(7856),l(7484),l(2494),l(9354),l(3502),l(7967);const d=e=>i.e.sanitizeText(e,(0,i.g)());let c={dividerMargin:10,padding:5,textHeight:10,curve:void 0};function g(e){let t;switch(e){case 0:t="aggregation";break;case 1:t="extension";break;case 2:t="composition";break;case 3:t="dependency";break;case 4:t="lollipop";break;default:t="none"}return t}const p={setConf:function(e){c={...c,...e}},draw:function(e,t,l,n){i.l.info("Drawing class - ",t);const p=(0,i.g)().flowchart??(0,i.g)().class,b=(0,i.g)().securityLevel;i.l.info("config:",p);const u=(null==p?void 0:p.nodeSpacing)??50,y=(null==p?void 0:p.rankSpacing)??50,f=new o.k({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:u,ranksep:y,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=n.db.getClasses(),v=n.db.getRelations(),w=n.db.getNotes();let x;i.l.info(v),function(e,t,l,n){const a=Object.keys(e);i.l.info("keys:",a),i.l.info(e),a.forEach((function(l){var a,o;const s=e[l];let r="";s.cssClasses.length>0&&(r=r+" "+s.cssClasses.join(" "));const c="",g="",p=s.label??s.id,b={labelStyle:c,shape:"class_box",labelText:d(p),classData:s,rx:0,ry:0,class:r,style:g,id:s.id,domId:s.domId,tooltip:n.db.getTooltip(s.id)||"",haveCallback:s.haveCallback,link:s.link,width:"group"===s.type?500:void 0,type:s.type,padding:(null==(a=(0,i.g)().flowchart)?void 0:a.padding)??(null==(o=(0,i.g)().class)?void 0:o.padding)};t.setNode(s.id,b),i.l.info("setNode",b)}))}(h,f,0,n),function(e,t){const l=(0,i.g)().flowchart;let n=0;e.forEach((function(e){var o;n++;const s={classes:"relation",pattern:1==e.relation.lineType?"dashed":"solid",id:"id"+n,arrowhead:"arrow_open"===e.type?"none":"normal",startLabelRight:"none"===e.relationTitle1?"":e.relationTitle1,endLabelLeft:"none"===e.relationTitle2?"":e.relationTitle2,arrowTypeStart:g(e.relation.type1),arrowTypeEnd:g(e.relation.type2),style:"fill:none",labelStyle:"",curve:(0,r.o)(null==l?void 0:l.curve,a.c_6)};if(i.l.info(s,e),void 0!==e.style){const t=(0,r.n)(e.style);s.style=t.style,s.labelStyle=t.labelStyle}e.text=e.title,void 0===e.text?void 0!==e.style&&(s.arrowheadStyle="fill: #333"):(s.arrowheadStyle="fill: #333",s.labelpos="c",(null==(o=(0,i.g)().flowchart)?void 0:o.htmlLabels)??(0,i.g)().htmlLabels?(s.labelType="html",s.label='<span class="edgeLabel">'+e.text+"</span>"):(s.labelType="text",s.label=e.text.replace(i.e.lineBreakRegex,"\n"),void 0===e.style&&(s.style=s.style||"stroke: #333; stroke-width: 1.5px;fill:none"),s.labelStyle=s.labelStyle.replace("color:","fill:"))),t.setEdge(e.id1,e.id2,s,n)}))}(v,f),function(e,t,l,n){i.l.info(e),e.forEach((function(e,o){var s,g;const p=e,b="",u="",y=p.text,f={labelStyle:b,shape:"note",labelText:d(y),noteData:p,rx:0,ry:0,class:"",style:u,id:p.id,domId:p.id,tooltip:"",type:"note",padding:(null==(s=(0,i.g)().flowchart)?void 0:s.padding)??(null==(g=(0,i.g)().class)?void 0:g.padding)};if(t.setNode(p.id,f),i.l.info("setNode",f),!p.class||!(p.class in n))return;const h=l+o,v={id:`edgeNote${h}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:(0,r.o)(c.curve,a.c_6)};t.setEdge(p.id,p.class,v,h)}))}(w,f,v.length+1,h),"sandbox"===b&&(x=(0,a.Ys)("#i"+t));const k="sandbox"===b?(0,a.Ys)(x.nodes()[0].contentDocument.body):(0,a.Ys)("body"),m=k.select(`[id="${t}"]`),T=k.select("#"+t+" g");if((0,s.r)(T,f,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",t),r.u.insertTitle(m,"classTitleText",(null==p?void 0:p.titleTopMargin)??5,n.db.getDiagramTitle()),(0,r.s)(f,m,null==p?void 0:p.diagramPadding,null==p?void 0:p.useMaxWidth),!(null==p?void 0:p.htmlLabels)){const e="sandbox"===b?x.nodes()[0].contentDocument:document,l=e.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of l){const l=t.getBBox(),n=e.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",l.width),n.setAttribute("height",l.height),t.insertBefore(n,t.firstChild)}}}},b={parser:n.p,db:n.d,renderer:p,styles:n.s,init:e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute,n.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/6234.e4aec976.js b/assets/js/6234.e4aec976.js new file mode 100644 index 0000000000..fc39674f1a --- /dev/null +++ b/assets/js/6234.e4aec976.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6234],{6234:(t,i,n)=>{n.d(i,{diagram:()=>l});var e=n(44),s=n(9373),r=(n(7856),n(7484),function(){var t=function(t,i,n,e){for(n=n||{},e=t.length;e--;n[t[e]]=i);return n},i=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,i,n,e,s,r,o){switch(r.length,s){case 1:return e;case 4:break;case 6:e.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(i,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(i,[2,3]),t(i,[2,4]),t(i,[2,5]),t(i,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,i){if(!i.recoverable){var n=new Error(t);throw n.hash=i,n}this.trace(t)},parse:function(t){var i=this,n=[0],e=[],s=[null],r=[],o=this.table,h="",l=0,c=0,a=1,y=r.slice.call(arguments,1),u=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);u.setInput(t,p.yy),p.yy.lexer=u,p.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var m=u.options&&u.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,d,k,b,x,v,w,I,S,E={};;){if(d=n[n.length-1],this.defaultActions[d]?k=this.defaultActions[d]:(null==_&&(S=void 0,"number"!=typeof(S=e.pop()||u.lex()||a)&&(S instanceof Array&&(S=(e=S).pop()),S=i.symbols_[S]||S),_=S),k=o[d]&&o[d][_]),void 0===k||!k.length||!k[0]){var A="";for(x in I=[],o[d])this.terminals_[x]&&x>2&&I.push("'"+this.terminals_[x]+"'");A=u.showPosition?"Parse error on line "+(l+1)+":\n"+u.showPosition()+"\nExpecting "+I.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(l+1)+": Unexpected "+(_==a?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(A,{text:u.match,token:this.terminals_[_]||_,line:u.yylineno,loc:f,expected:I})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+_);switch(k[0]){case 1:n.push(_),s.push(u.yytext),r.push(u.yylloc),n.push(k[1]),_=null,c=u.yyleng,h=u.yytext,l=u.yylineno,f=u.yylloc;break;case 2:if(v=this.productions_[k[1]][1],E.$=s[s.length-v],E._$={first_line:r[r.length-(v||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(v||1)].first_column,last_column:r[r.length-1].last_column},m&&(E._$.range=[r[r.length-(v||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply(E,[h,c,l,p.yy,k[1],s,r].concat(y))))return b;v&&(n=n.slice(0,-1*v*2),s=s.slice(0,-1*v),r=r.slice(0,-1*v)),n.push(this.productions_[k[1]][0]),s.push(E.$),r.push(E._$),w=o[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},e={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var e=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===e.length?this.yylloc.first_column:0)+e[e.length-n.length].length-n[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var n,e,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(e=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,n,e;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!i||n[0].length>i[0].length)){if(i=n,e=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,s[e]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,n,e){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function s(){this.yy={}}return n.lexer=e,s.prototype=n,n.Parser=s,new s}());r.parser=r;var o="",h=!1;const l={parser:r,db:{setMessage:t=>{e.l.debug("Setting message to: "+t),o=t},getMessage:()=>o,setInfo:t=>{h=t},getInfo:()=>h,clear:e.y},renderer:{draw:(t,i,n)=>{try{e.l.debug("Rendering info diagram\n"+t);const r=(0,e.g)().securityLevel;let o;"sandbox"===r&&(o=(0,s.Ys)("#i"+i));const h=("sandbox"===r?(0,s.Ys)(o.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select("#"+i);h.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),h.attr("height",100),h.attr("width",400)}catch(r){e.l.error("Error while rendering info diagram"),e.l.error(r.message)}}},styles:()=>""}}}]); \ No newline at end of file diff --git a/assets/js/66286265.e578dde5.js b/assets/js/66286265.e578dde5.js new file mode 100644 index 0000000000..22d8611d10 --- /dev/null +++ b/assets/js/66286265.e578dde5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[180],{1210:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var a=t(7462),r=(t(7294),t(3905));t(5657);const l={title:"Tabular models",sidebar_position:4,description:"Tabular models"},o=void 0,i={unversionedId:"about/modelling/setup/facility_inputs/tabular",id:"about/modelling/setup/facility_inputs/tabular",title:"Tabular models",description:"Tabular models",source:"@site/docs/about/modelling/setup/facility_inputs/tabular.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/tabular",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/tabular.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Tabular models",sidebar_position:4,description:"Tabular models"},sidebar:"about",previous:{title:"Sampled compressor model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"},next:{title:"Models",permalink:"/ecalc/docs/about/modelling/setup/models/"}},u={},s=[{value:"Header and unit requirements",id:"header-and-unit-requirements",level:2},{value:"Example",id:"example",level:3},{value:"1D tabular energy function",id:"1d-tabular-energy-function",level:4},{value:"3D tabular energy function",id:"3d-tabular-energy-function",level:4}],d={toc:s},p="wrapper";function c(e){let{components:n,...t}=e;return(0,r.kt)(p,(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Additional equipment that are considered to be energy consumers can be specified using the keyword ",(0,r.kt)("inlineCode",{parentName:"p"},"TABULAR"),".\nThis is given that a form of reservoir rates (oil/gas production) can be linked to either fuel or power consumption. "),(0,r.kt)("p",null,"This is considered to be a consumer energy function for pure barycentric interpolation, no extrapolation outside\nconvex area. One column defines the function value, the rest of the columns defines the\nvariables for a 1D (if one variable column) or multidimensional interpolation."),(0,r.kt)("h2",{id:"header-and-unit-requirements"},"Header and unit requirements"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Header"),(0,r.kt)("th",{parentName:"tr",align:null},"Unit"),(0,r.kt)("th",{parentName:"tr",align:null},"Comment"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Power"),(0,r.kt)("td",{parentName:"tr",align:null},"MW"),(0,r.kt)("td",{parentName:"tr",align:null},"For power driven consumers")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Fuel"),(0,r.kt)("td",{parentName:"tr",align:null},"Sm",(0,r.kt)("sup",null,"3"),"/day"),(0,r.kt)("td",{parentName:"tr",align:null},"For fuel (turbine) driven consumers")))),(0,r.kt)("p",null,"Variable headers can be chosen freely as long as these correspond to the defined variables for the function."),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("h4",{id:"1d-tabular-energy-function"},"1D tabular energy function"),(0,r.kt)("p",null,"Contents of the file ",(0,r.kt)("inlineCode",{parentName:"p"},"energyfunc_1d_rate_fuel.csv"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"},"RATE, FUEL\n0, 0\n1, 137750\n1000000, 137750\n2000000, 145579\n3000000, 153335\n4000000, 161022\n5000000, 168644\n")),(0,r.kt)("p",null,"The entry in ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: gasinjectiondata\n FILE: energyfunc_1d_rate_fuel.csv\n TYPE: TABULAR\n")),(0,r.kt)("p",null,"The entry in ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," under a fuel consumer:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n ....\n - NAME: gasinjection\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: gasinjectiondata\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_INJ # [Sm3/day]\n")),(0,r.kt)("admonition",{title:"Note",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Note that the name ",(0,r.kt)("inlineCode",{parentName:"p"},"RATE")," in the input file (under ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/"},"FACILITY_INPUT"),") and the variable name ",(0,r.kt)("inlineCode",{parentName:"p"},"RATE")," under ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES"),"\nmust be equal!")),(0,r.kt)("h4",{id:"3d-tabular-energy-function"},"3D tabular energy function"),(0,r.kt)("p",null,"Contents of file ",(0,r.kt)("inlineCode",{parentName:"p"},"energyfunc_3d_rate_ps_pd_power.csv"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"}," RATE, SUCTION_PRESSURE, DISCHARGE_PRESSURE, POWER\n# [Sm3/d], [bar], [bar], [MW]\n 1.00E+06, 10, 12.72, 0.3664\n 1.00E+06, 10, 26.21, 2.293\n 1.00E+06, 26, 31.36, 0.2739\n 1.00E+06, 26, 70.77, 6.28\n 1.00E+06, 34, 41.21, 0.368\n 1.00E+06, 34, 94.24, 8.435\n 1.00E+06, 78, 94.12, 0.7401\n 1.00E+06, 78, 231.6, 22.46\n 6.00E+06, 26, 36.93, 4.197\n 6.00E+06, 26, 57.43, 7.32\n 6.00E+06, 38, 46.96, 2.156\n 6.00E+06, 38, 106.2, 9.557\n 6.00E+06, 54, 67.26, 1.95\n 6.00E+06, 54, 155.6, 14.35\n 6.00E+06, 78, 94.17, 1.399\n 6.00E+06, 78, 231.6, 22.46\n 1.10E+07, 42, 66.92, 9.712\n 1.10E+07, 42, 81.63, 11.89\n 1.10E+07, 62, 75.64, 3.678\n 1.10E+07, 62, 180.8, 16.94\n 1.10E+07, 78, 97.79, 3.452\n 1.10E+07, 78, 231.6, 22.46\n")),(0,r.kt)("p",null,"The entry in ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: booster\n FILE: energyfunc_3d_rate_ps_pd_power.csv\n TYPE: TABULAR\n")),(0,r.kt)("p",null,"The entry in ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," under a fuel consumer (for 3-d tabular):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n ...\n - NAME: gasexport\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: booster\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_SALES # [Sm3/day]\n - NAME: SUCTION_PRESSURE\n EXPRESSION: SIM1;SUCTION_PRESSURE {+} 3 # [bara]\n - NAME: DISCHARGE_PRESSURE\n EXPRESSION: 100 # [bara]\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/66a649c0.edeeba0a.js b/assets/js/66a649c0.edeeba0a.js new file mode 100644 index 0000000000..b2e431e0f6 --- /dev/null +++ b/assets/js/66a649c0.edeeba0a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3240],{5245:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>i,contentTitle:()=>a,default:()=>p,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var o=t(7462),s=(t(7294),t(3905));t(5657);const n={},a="CROSSOVER",c={unversionedId:"about/references/keywords/CROSSOVER",id:"about/references/keywords/CROSSOVER",title:"CROSSOVER",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CROSSOVER.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CROSSOVER.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT"},next:{title:"CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2}],d={toc:l},u="wrapper";function p(e){let{components:r,...t}=e;return(0,s.kt)(u,(0,o.Z)({},d,t,{components:r,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"crossover"},"CROSSOVER"),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," / ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},"OPERATIONAL_SETTINGS")," / ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL"},"CROSSOVER")),(0,s.kt)("table",null,(0,s.kt)("thead",{parentName:"table"},(0,s.kt)("tr",{parentName:"thead"},(0,s.kt)("th",{parentName:"tr",align:null},"Required"),(0,s.kt)("th",{parentName:"tr",align:null},"Child of"),(0,s.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,s.kt)("tbody",{parentName:"table"},(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"Yes"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("a",{parentName:"td",href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},"OPERATIONAL_SETTINGS")),(0,s.kt)("td",{parentName:"tr",align:null},"None")))),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"CROSSOVER"),' specifies what rates will be crossed over from one consumer to another if rate capacity is exceed.\nIf the energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer.\nTo avoid loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower pressure, but not possible to "pressure up" in the crossover flow line. Some examples show how the crossover logic works:'),(0,s.kt)("p",null,"Crossover is given as and list of integer values for the first position is the first consumer, second position is the second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over possible. Note that we use 1-index here."),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n ...\n CROSSOVER: [3, 3, 0]\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6730.679bdfde.js b/assets/js/6730.679bdfde.js new file mode 100644 index 0000000000..c2bda69b8d --- /dev/null +++ b/assets/js/6730.679bdfde.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6730],{6730:(t,e,i)=>{i.d(e,{diagram:()=>_});var n=i(44),s=i(3047),r=i(9373),a=i(1188),c=(i(7856),i(7484),i(7967),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,4],i=[1,5],n=[1,6],s=[1,7],r=[1,9],a=[1,11,13,15,17,19,20,26,27,28,29],c=[2,5],l=[1,6,11,13,15,17,19,20,26,27,28,29],o=[26,27,28],h=[2,8],u=[1,18],p=[1,19],y=[1,20],d=[1,21],g=[1,22],_=[1,23],f=[1,28],m=[6,26,27,28,29],v={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,openDirective:21,typeDirective:22,closeDirective:23,":":24,argDirective:25,NEWLINE:26,";":27,EOF:28,open_directive:29,type_directive:30,arg_directive:31,close_directive:32,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",24:":",26:"NEWLINE",27:";",28:"EOF",29:"open_directive",30:"type_directive",31:"arg_directive",32:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],performAction:function(t,e,i,n,s,r,a){var c=r.length-1;switch(s){case 4:n.setShowData(!0);break;case 7:this.$=r[c-1];break;case 9:n.addSection(r[c-1],n.cleanupValue(r[c]));break;case 10:this.$=r[c].trim(),n.setDiagramTitle(this.$);break;case 11:this.$=r[c].trim(),n.setAccTitle(this.$);break;case 12:case 13:this.$=r[c].trim(),n.setAccDescription(this.$);break;case 14:n.addSection(r[c].substr(8)),this.$=r[c].substr(8);break;case 21:n.parseDirective("%%{","open_directive");break;case 22:n.parseDirective(r[c],"type_directive");break;case 23:r[c]=r[c].trim().replace(/'/g,'"'),n.parseDirective(r[c],"arg_directive");break;case 24:n.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,21:8,26:i,27:n,28:s,29:r},{1:[3]},{3:10,4:2,5:3,6:e,21:8,26:i,27:n,28:s,29:r},{3:11,4:2,5:3,6:e,21:8,26:i,27:n,28:s,29:r},t(a,c,{7:12,8:[1,13]}),t(l,[2,18]),t(l,[2,19]),t(l,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},t(o,h,{21:8,9:16,10:17,5:24,1:[2,3],11:u,13:p,15:y,17:d,19:g,20:_,29:r}),t(a,c,{7:25}),{23:26,24:[1,27],32:f},t([24,32],[2,22]),t(a,[2,6]),{4:29,26:i,27:n,28:s},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},t(o,[2,13]),t(o,[2,14]),t(o,[2,15]),t(o,h,{21:8,9:16,10:17,5:24,1:[2,4],11:u,13:p,15:y,17:d,19:g,20:_,29:r}),t(m,[2,16]),{25:34,31:[1,35]},t(m,[2,24]),t(a,[2,7]),t(o,[2,9]),t(o,[2,10]),t(o,[2,11]),t(o,[2,12]),{23:36,32:f},{32:[2,23]},t(m,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],s=[null],r=[],a=this.table,c="",l=0,o=0,h=1,u=r.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var g=p.yylloc;r.push(g);var _=p.options&&p.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,v,b,k,x,S,w,E,D={};;){if(m=i[i.length-1],this.defaultActions[m]?v=this.defaultActions[m]:(null==f&&(E=void 0,"number"!=typeof(E=n.pop()||p.lex()||h)&&(E instanceof Array&&(E=(n=E).pop()),E=e.symbols_[E]||E),f=E),v=a[m]&&a[m][f]),void 0===v||!v.length||!v[0]){var $="";for(k in w=[],a[m])this.terminals_[k]&&k>2&&w.push("'"+this.terminals_[k]+"'");$=p.showPosition?"Parse error on line "+(l+1)+":\n"+p.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(l+1)+": Unexpected "+(f==h?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError($,{text:p.match,token:this.terminals_[f]||f,line:p.yylineno,loc:g,expected:w})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(v[0]){case 1:i.push(f),s.push(p.yytext),r.push(p.yylloc),i.push(v[1]),f=null,o=p.yyleng,c=p.yytext,l=p.yylineno,g=p.yylloc;break;case 2:if(x=this.productions_[v[1]][1],D.$=s[s.length-x],D._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},_&&(D._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply(D,[c,o,l,y.yy,v[1],s,r].concat(u))))return b;x&&(i=i.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),i.push(this.productions_[v[1]][0]),s.push(D.$),r.push(D._$),S=a[i[i.length-2]][i[i.length-1]],i.push(S);break;case 3:return!0}}return!0}},b={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((i=this._input.match(this.rules[s[r]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,n){switch(i){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:case 6:case 8:case 9:break;case 7:return 26;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:case 20:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}};function k(){this.yy={}}return v.lexer=b,k.prototype=v,v.Parser=k,new k}());c.parser=c;const l=c;let o={},h=!1;const u={parseDirective:function(t,e,i){s.m.parseDirective(this,t,e,i)},getConfig:()=>(0,n.g)().pie,addSection:function(t,e){t=n.e.sanitizeText(t,(0,n.g)()),void 0===o[t]&&(o[t]=e,n.l.debug("Added new section :",t))},getSections:()=>o,cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){o={},h=!1,(0,n.y)()},setAccTitle:n.o,getAccTitle:n.p,setDiagramTitle:n.w,getDiagramTitle:n.x,setShowData:function(t){h=t},getShowData:function(){return h},getAccDescription:n.q,setAccDescription:n.v},p=t=>`\n .pieCircle{\n stroke: ${t.pieStrokeColor};\n stroke-width : ${t.pieStrokeWidth};\n opacity : ${t.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${t.pieOuterStrokeColor};\n stroke-width: ${t.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${t.pieTitleTextSize};\n fill: ${t.pieTitleTextColor};\n font-family: ${t.fontFamily};\n }\n .slice {\n font-family: ${t.fontFamily};\n fill: ${t.pieSectionTextColor};\n font-size:${t.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${t.pieLegendTextColor};\n font-family: ${t.fontFamily};\n font-size: ${t.pieLegendTextSize};\n }\n`;let y,d=(0,n.g)();const g=450,_={parser:l,db:u,renderer:{draw:(t,e,i,s)=>{var c;try{d=(0,n.g)(),n.l.debug("Rendering info diagram\n"+t);const i=(0,n.g)().securityLevel;let S;"sandbox"===i&&(S=(0,r.Ys)("#i"+e));const w="sandbox"===i?(0,r.Ys)(S.nodes()[0].contentDocument.body):(0,r.Ys)("body"),E="sandbox"===i?S.nodes()[0].contentDocument:document;s.db.clear(),s.parser.parse(t),n.l.debug("Parsed info diagram");const D=E.getElementById(e);y=D.parentElement.offsetWidth,void 0===y&&(y=1200),void 0!==d.useWidth&&(y=d.useWidth),void 0!==d.pie.useWidth&&(y=d.pie.useWidth);const $=w.select("#"+e);(0,a.k)($,g,y,d.pie.useMaxWidth),D.setAttribute("viewBox","0 0 "+y+" "+g);var l=18,o=Math.min(y,g)/2-40,h=$.append("g").attr("transform","translate("+y/2+",225)"),u=s.db.getSections(),p=0;Object.keys(u).forEach((function(t){p+=u[t]}));const A=d.themeVariables;var _=[A.pie1,A.pie2,A.pie3,A.pie4,A.pie5,A.pie6,A.pie7,A.pie8,A.pie9,A.pie10,A.pie11,A.pie12];const T=(null==(c=d.pie)?void 0:c.textPosition)??.75;let[I]=(0,a.x)(A.pieOuterStrokeWidth);I??(I=2);var f=(0,r.PKp)().range(_),m=Object.entries(u).map((function(t,e){return{order:e,name:t[0],value:t[1]}})),v=(0,r.ve8)().value((function(t){return t.value})).sort((function(t,e){return t.order-e.order}))(m),b=(0,r.Nb1)().innerRadius(0).outerRadius(o),k=(0,r.Nb1)().innerRadius(o*T).outerRadius(o*T);h.append("circle").attr("cx",0).attr("cy",0).attr("r",o+I/2).attr("class","pieOuterCircle"),h.selectAll("mySlices").data(v).enter().append("path").attr("d",b).attr("fill",(function(t){return f(t.data.name)})).attr("class","pieCircle"),h.selectAll("mySlices").data(v).enter().append("text").text((function(t){return(t.data.value/p*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+k.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice"),h.append("text").text(s.db.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var x=h.selectAll(".legend").data(f.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*f.domain().length/2)+")"}));x.append("rect").attr("width",l).attr("height",l).style("fill",f).style("stroke",f),x.data(v).append("text").attr("x",22).attr("y",14).text((function(t){return s.db.getShowData()||d.showData||d.pie.showData?t.data.name+" ["+t.data.value+"]":t.data.name}))}catch(S){n.l.error("Error while rendering info diagram"),n.l.error(S)}}},styles:p}}}]); \ No newline at end of file diff --git a/assets/js/6733.8da6ac76.js b/assets/js/6733.8da6ac76.js new file mode 100644 index 0000000000..e897df4d87 --- /dev/null +++ b/assets/js/6733.8da6ac76.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6733],{6733:(t,e,i)=>{i.d(e,{diagram:()=>nt});var n=i(3047),a=i(44),s=i(9373),r=i(7967),l=i(1188),o=(i(7856),i(7484),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,6],i=[1,7],n=[1,8],a=[1,9],s=[1,16],r=[1,11],l=[1,12],o=[1,13],h=[1,14],d=[1,15],u=[1,27],p=[1,33],y=[1,34],f=[1,35],b=[1,36],g=[1,37],_=[1,72],x=[1,73],m=[1,74],E=[1,75],A=[1,76],S=[1,77],v=[1,78],C=[1,38],k=[1,39],O=[1,40],T=[1,41],w=[1,42],D=[1,43],R=[1,44],N=[1,45],P=[1,46],j=[1,47],M=[1,48],B=[1,49],Y=[1,50],L=[1,51],I=[1,52],U=[1,53],F=[1,54],X=[1,55],z=[1,56],Q=[1,57],W=[1,59],$=[1,60],q=[1,61],V=[1,62],G=[1,63],H=[1,64],K=[1,65],J=[1,66],Z=[1,67],tt=[1,68],et=[1,69],it=[24,52],nt=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],at=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],st=[1,94],rt=[1,95],lt=[1,96],ot=[1,97],ct=[15,24,52],ht=[7,8,9,10,18,22,25,26,27,28],dt=[15,24,43,52],ut=[15,24,43,52,86,87,89,90],pt=[15,43],yt=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],ft={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,C4_CONTEXT:22,statements:23,EOF:24,C4_CONTAINER:25,C4_COMPONENT:26,C4_DYNAMIC:27,C4_DEPLOYMENT:28,otherStatements:29,diagramStatements:30,otherStatement:31,title:32,accDescription:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,boundaryStatement:39,boundaryStartStatement:40,boundaryStopStatement:41,boundaryStart:42,LBRACE:43,ENTERPRISE_BOUNDARY:44,attributes:45,SYSTEM_BOUNDARY:46,BOUNDARY:47,CONTAINER_BOUNDARY:48,NODE:49,NODE_L:50,NODE_R:51,RBRACE:52,diagramStatement:53,PERSON:54,PERSON_EXT:55,SYSTEM:56,SYSTEM_DB:57,SYSTEM_QUEUE:58,SYSTEM_EXT:59,SYSTEM_EXT_DB:60,SYSTEM_EXT_QUEUE:61,CONTAINER:62,CONTAINER_DB:63,CONTAINER_QUEUE:64,CONTAINER_EXT:65,CONTAINER_EXT_DB:66,CONTAINER_EXT_QUEUE:67,COMPONENT:68,COMPONENT_DB:69,COMPONENT_QUEUE:70,COMPONENT_EXT:71,COMPONENT_EXT_DB:72,COMPONENT_EXT_QUEUE:73,REL:74,BIREL:75,REL_U:76,REL_D:77,REL_L:78,REL_R:79,REL_B:80,REL_INDEX:81,UPDATE_EL_STYLE:82,UPDATE_REL_STYLE:83,UPDATE_LAYOUT_CONFIG:84,attribute:85,STR:86,STR_KEY:87,STR_VALUE:88,ATTRIBUTE:89,ATTRIBUTE_EMPTY:90,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"C4_CONTEXT",24:"EOF",25:"C4_CONTAINER",26:"C4_COMPONENT",27:"C4_DYNAMIC",28:"C4_DEPLOYMENT",32:"title",33:"accDescription",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",43:"LBRACE",44:"ENTERPRISE_BOUNDARY",46:"SYSTEM_BOUNDARY",47:"BOUNDARY",48:"CONTAINER_BOUNDARY",49:"NODE",50:"NODE_L",51:"NODE_R",52:"RBRACE",54:"PERSON",55:"PERSON_EXT",56:"SYSTEM",57:"SYSTEM_DB",58:"SYSTEM_QUEUE",59:"SYSTEM_EXT",60:"SYSTEM_EXT_DB",61:"SYSTEM_EXT_QUEUE",62:"CONTAINER",63:"CONTAINER_DB",64:"CONTAINER_QUEUE",65:"CONTAINER_EXT",66:"CONTAINER_EXT_DB",67:"CONTAINER_EXT_QUEUE",68:"COMPONENT",69:"COMPONENT_DB",70:"COMPONENT_QUEUE",71:"COMPONENT_EXT",72:"COMPONENT_EXT_DB",73:"COMPONENT_EXT_QUEUE",74:"REL",75:"BIREL",76:"REL_U",77:"REL_D",78:"REL_L",79:"REL_R",80:"REL_B",81:"REL_INDEX",82:"UPDATE_EL_STYLE",83:"UPDATE_REL_STYLE",84:"UPDATE_LAYOUT_CONFIG",86:"STR",87:"STR_KEY",88:"STR_VALUE",89:"ATTRIBUTE",90:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],performAction:function(t,e,i,n,a,s,r){var l=s.length-1;switch(a){case 4:n.setDirection("TB");break;case 5:n.setDirection("BT");break;case 6:n.setDirection("RL");break;case 7:n.setDirection("LR");break;case 11:n.parseDirective("%%{","open_directive");break;case 12:break;case 13:s[l]=s[l].trim().replace(/'/g,'"'),n.parseDirective(s[l],"arg_directive");break;case 14:n.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:n.setC4Type(s[l-3]);break;case 26:n.setTitle(s[l].substring(6)),this.$=s[l].substring(6);break;case 27:n.setAccDescription(s[l].substring(15)),this.$=s[l].substring(15);break;case 28:this.$=s[l].trim(),n.setTitle(this.$);break;case 29:case 30:this.$=s[l].trim(),n.setAccDescription(this.$);break;case 35:case 36:s[l].splice(2,0,"ENTERPRISE"),n.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 37:n.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 38:s[l].splice(2,0,"CONTAINER"),n.addContainerBoundary(...s[l]),this.$=s[l];break;case 39:n.addDeploymentNode("node",...s[l]),this.$=s[l];break;case 40:n.addDeploymentNode("nodeL",...s[l]),this.$=s[l];break;case 41:n.addDeploymentNode("nodeR",...s[l]),this.$=s[l];break;case 42:n.popBoundaryParseStack();break;case 46:n.addPersonOrSystem("person",...s[l]),this.$=s[l];break;case 47:n.addPersonOrSystem("external_person",...s[l]),this.$=s[l];break;case 48:n.addPersonOrSystem("system",...s[l]),this.$=s[l];break;case 49:n.addPersonOrSystem("system_db",...s[l]),this.$=s[l];break;case 50:n.addPersonOrSystem("system_queue",...s[l]),this.$=s[l];break;case 51:n.addPersonOrSystem("external_system",...s[l]),this.$=s[l];break;case 52:n.addPersonOrSystem("external_system_db",...s[l]),this.$=s[l];break;case 53:n.addPersonOrSystem("external_system_queue",...s[l]),this.$=s[l];break;case 54:n.addContainer("container",...s[l]),this.$=s[l];break;case 55:n.addContainer("container_db",...s[l]),this.$=s[l];break;case 56:n.addContainer("container_queue",...s[l]),this.$=s[l];break;case 57:n.addContainer("external_container",...s[l]),this.$=s[l];break;case 58:n.addContainer("external_container_db",...s[l]),this.$=s[l];break;case 59:n.addContainer("external_container_queue",...s[l]),this.$=s[l];break;case 60:n.addComponent("component",...s[l]),this.$=s[l];break;case 61:n.addComponent("component_db",...s[l]),this.$=s[l];break;case 62:n.addComponent("component_queue",...s[l]),this.$=s[l];break;case 63:n.addComponent("external_component",...s[l]),this.$=s[l];break;case 64:n.addComponent("external_component_db",...s[l]),this.$=s[l];break;case 65:n.addComponent("external_component_queue",...s[l]),this.$=s[l];break;case 67:n.addRel("rel",...s[l]),this.$=s[l];break;case 68:n.addRel("birel",...s[l]),this.$=s[l];break;case 69:n.addRel("rel_u",...s[l]),this.$=s[l];break;case 70:n.addRel("rel_d",...s[l]),this.$=s[l];break;case 71:n.addRel("rel_l",...s[l]),this.$=s[l];break;case 72:n.addRel("rel_r",...s[l]),this.$=s[l];break;case 73:n.addRel("rel_b",...s[l]),this.$=s[l];break;case 74:s[l].splice(0,1),n.addRel("rel",...s[l]),this.$=s[l];break;case 75:n.updateElStyle("update_el_style",...s[l]),this.$=s[l];break;case 76:n.updateRelStyle("update_rel_style",...s[l]),this.$=s[l];break;case 77:n.updateLayoutConfig("update_layout_config",...s[l]),this.$=s[l];break;case 78:this.$=[s[l]];break;case 79:s[l].unshift(s[l-1]),this.$=s[l];break;case 80:case 82:this.$=s[l].trim();break;case 81:let t={};t[s[l-1].trim()]=s[l].trim(),this.$=t;break;case 83:this.$=""}},table:[{3:1,4:2,5:3,6:4,7:e,8:i,9:n,10:a,11:5,12:10,18:s,22:r,25:l,26:o,27:h,28:d},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:e,8:i,9:n,10:a,11:5,12:10,18:s,22:r,25:l,26:o,27:h,28:d},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:u},t([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:p,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:j,64:M,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{23:79,29:29,30:30,31:31,32:p,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:j,64:M,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{23:80,29:29,30:30,31:31,32:p,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:j,64:M,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{23:81,29:29,30:30,31:31,32:p,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:j,64:M,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{23:82,29:29,30:30,31:31,32:p,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:j,64:M,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},t(it,[2,20],{53:32,39:58,40:70,42:71,30:87,44:_,46:x,47:m,48:E,49:A,50:S,51:v,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:j,64:M,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et}),t(it,[2,21]),t(nt,[2,23],{15:[1,88]}),t(it,[2,43],{15:[1,89]}),t(at,[2,26]),t(at,[2,27]),{35:[1,90]},{37:[1,91]},t(at,[2,30]),{45:92,85:93,86:st,87:rt,89:lt,90:ot},{45:98,85:93,86:st,87:rt,89:lt,90:ot},{45:99,85:93,86:st,87:rt,89:lt,90:ot},{45:100,85:93,86:st,87:rt,89:lt,90:ot},{45:101,85:93,86:st,87:rt,89:lt,90:ot},{45:102,85:93,86:st,87:rt,89:lt,90:ot},{45:103,85:93,86:st,87:rt,89:lt,90:ot},{45:104,85:93,86:st,87:rt,89:lt,90:ot},{45:105,85:93,86:st,87:rt,89:lt,90:ot},{45:106,85:93,86:st,87:rt,89:lt,90:ot},{45:107,85:93,86:st,87:rt,89:lt,90:ot},{45:108,85:93,86:st,87:rt,89:lt,90:ot},{45:109,85:93,86:st,87:rt,89:lt,90:ot},{45:110,85:93,86:st,87:rt,89:lt,90:ot},{45:111,85:93,86:st,87:rt,89:lt,90:ot},{45:112,85:93,86:st,87:rt,89:lt,90:ot},{45:113,85:93,86:st,87:rt,89:lt,90:ot},{45:114,85:93,86:st,87:rt,89:lt,90:ot},{45:115,85:93,86:st,87:rt,89:lt,90:ot},{45:116,85:93,86:st,87:rt,89:lt,90:ot},t(ct,[2,66]),{45:117,85:93,86:st,87:rt,89:lt,90:ot},{45:118,85:93,86:st,87:rt,89:lt,90:ot},{45:119,85:93,86:st,87:rt,89:lt,90:ot},{45:120,85:93,86:st,87:rt,89:lt,90:ot},{45:121,85:93,86:st,87:rt,89:lt,90:ot},{45:122,85:93,86:st,87:rt,89:lt,90:ot},{45:123,85:93,86:st,87:rt,89:lt,90:ot},{45:124,85:93,86:st,87:rt,89:lt,90:ot},{45:125,85:93,86:st,87:rt,89:lt,90:ot},{45:126,85:93,86:st,87:rt,89:lt,90:ot},{45:127,85:93,86:st,87:rt,89:lt,90:ot},{30:128,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:j,64:M,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{15:[1,130],43:[1,129]},{45:131,85:93,86:st,87:rt,89:lt,90:ot},{45:132,85:93,86:st,87:rt,89:lt,90:ot},{45:133,85:93,86:st,87:rt,89:lt,90:ot},{45:134,85:93,86:st,87:rt,89:lt,90:ot},{45:135,85:93,86:st,87:rt,89:lt,90:ot},{45:136,85:93,86:st,87:rt,89:lt,90:ot},{45:137,85:93,86:st,87:rt,89:lt,90:ot},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},t(ht,[2,9]),{14:142,21:u},{21:[2,13]},{1:[2,15]},t(it,[2,22]),t(nt,[2,24],{31:31,29:143,32:p,33:y,34:f,36:b,38:g}),t(it,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:p,33:y,34:f,36:b,38:g,44:_,46:x,47:m,48:E,49:A,50:S,51:v,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:j,64:M,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et}),t(at,[2,28]),t(at,[2,29]),t(ct,[2,46]),t(dt,[2,78],{85:93,45:145,86:st,87:rt,89:lt,90:ot}),t(ut,[2,80]),{88:[1,146]},t(ut,[2,82]),t(ut,[2,83]),t(ct,[2,47]),t(ct,[2,48]),t(ct,[2,49]),t(ct,[2,50]),t(ct,[2,51]),t(ct,[2,52]),t(ct,[2,53]),t(ct,[2,54]),t(ct,[2,55]),t(ct,[2,56]),t(ct,[2,57]),t(ct,[2,58]),t(ct,[2,59]),t(ct,[2,60]),t(ct,[2,61]),t(ct,[2,62]),t(ct,[2,63]),t(ct,[2,64]),t(ct,[2,65]),t(ct,[2,67]),t(ct,[2,68]),t(ct,[2,69]),t(ct,[2,70]),t(ct,[2,71]),t(ct,[2,72]),t(ct,[2,73]),t(ct,[2,74]),t(ct,[2,75]),t(ct,[2,76]),t(ct,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},t(pt,[2,35]),t(pt,[2,36]),t(pt,[2,37]),t(pt,[2,38]),t(pt,[2,39]),t(pt,[2,40]),t(pt,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},t(nt,[2,25]),t(it,[2,45]),t(dt,[2,79]),t(ut,[2,81]),t(ct,[2,31]),t(ct,[2,42]),t(yt,[2,32]),t(yt,[2,33],{15:[1,152]}),t(ht,[2,10]),t(yt,[2,34])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],a=[null],s=[],r=this.table,l="",o=0,c=0,h=1,d=s.slice.call(arguments,1),u=Object.create(this.lexer),p={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(p.yy[y]=this.yy[y]);u.setInput(t,p.yy),p.yy.lexer=u,p.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;s.push(f);var b=u.options&&u.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,_,x,m,E,A,S,v,C,k={};;){if(_=i[i.length-1],this.defaultActions[_]?x=this.defaultActions[_]:(null==g&&(C=void 0,"number"!=typeof(C=n.pop()||u.lex()||h)&&(C instanceof Array&&(C=(n=C).pop()),C=e.symbols_[C]||C),g=C),x=r[_]&&r[_][g]),void 0===x||!x.length||!x[0]){var O="";for(E in v=[],r[_])this.terminals_[E]&&E>2&&v.push("'"+this.terminals_[E]+"'");O=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(o+1)+": Unexpected "+(g==h?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(O,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:f,expected:v})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+g);switch(x[0]){case 1:i.push(g),a.push(u.yytext),s.push(u.yylloc),i.push(x[1]),g=null,c=u.yyleng,l=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(A=this.productions_[x[1]][1],k.$=a[a.length-A],k._$={first_line:s[s.length-(A||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(A||1)].first_column,last_column:s[s.length-1].last_column},b&&(k._$.range=[s[s.length-(A||1)].range[0],s[s.length-1].range[1]]),void 0!==(m=this.performAction.apply(k,[l,c,o,p.yy,x[1],a,s].concat(d))))return m;A&&(i=i.slice(0,-1*A*2),a=a.slice(0,-1*A),s=s.slice(0,-1*A)),i.push(this.productions_[x[1]][0]),a.push(k.$),s.push(k._$),S=r[i[i.length-2]][i[i.length-1]],i.push(S);break;case 3:return!0}}return!0}},bt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var s in a)this[s]=a[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),s=0;s<a.length;s++)if((i=this._input.match(this.rules[a[s]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,a[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,i,n){switch(i){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 78:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:case 21:case 75:break;case 19:c;break;case 20:return 15;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),55;case 28:return this.begin("person"),54;case 29:return this.begin("system_ext_queue"),61;case 30:return this.begin("system_ext_db"),60;case 31:return this.begin("system_ext"),59;case 32:return this.begin("system_queue"),58;case 33:return this.begin("system_db"),57;case 34:return this.begin("system"),56;case 35:return this.begin("boundary"),47;case 36:return this.begin("enterprise_boundary"),44;case 37:return this.begin("system_boundary"),46;case 38:return this.begin("container_ext_queue"),67;case 39:return this.begin("container_ext_db"),66;case 40:return this.begin("container_ext"),65;case 41:return this.begin("container_queue"),64;case 42:return this.begin("container_db"),63;case 43:return this.begin("container"),62;case 44:return this.begin("container_boundary"),48;case 45:return this.begin("component_ext_queue"),73;case 46:return this.begin("component_ext_db"),72;case 47:return this.begin("component_ext"),71;case 48:return this.begin("component_queue"),70;case 49:return this.begin("component_db"),69;case 50:return this.begin("component"),68;case 51:case 52:return this.begin("node"),49;case 53:return this.begin("node_l"),50;case 54:return this.begin("node_r"),51;case 55:return this.begin("rel"),74;case 56:return this.begin("birel"),75;case 57:case 58:return this.begin("rel_u"),76;case 59:case 60:return this.begin("rel_d"),77;case 61:case 62:return this.begin("rel_l"),78;case 63:case 64:return this.begin("rel_r"),79;case 65:return this.begin("rel_b"),80;case 66:return this.begin("rel_index"),81;case 67:return this.begin("update_el_style"),82;case 68:return this.begin("update_rel_style"),83;case 69:return this.begin("update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:this.begin("attribute");break;case 73:case 84:this.popState(),this.popState();break;case 74:case 76:return 90;case 77:this.begin("string");break;case 79:case 85:return"STR";case 80:this.begin("string_kv");break;case 81:return this.begin("string_kv_key"),"STR_KEY";case 82:this.popState(),this.begin("string_kv_value");break;case 83:return"STR_VALUE";case 86:return"LBRACE";case 87:return"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,86,87,88,89,90],inclusive:!0}}};function gt(){this.yy={}}return ft.lexer=bt,gt.prototype=ft,ft.Parser=gt,new gt}());o.parser=o;const h=o;let d=[],u=[""],p="global",y="",f=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],b=[],g="",_=!1,x=4,m=2;var E;const A=function(t){return null==t?d:d.filter((e=>e.parentBoundary===t))},S=function(){return _},v={addPersonOrSystem:function(t,e,i,n,a,s,r){if(null===e||null===i)return;let l={};const o=d.find((t=>t.alias===e));if(o&&e===o.alias?l=o:(l.alias=e,d.push(l)),l.label=null==i?{text:""}:{text:i},null==n)l.descr={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];l[t]={text:e}}else l.descr={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.sprite=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.tags=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=e}else l.link=r;l.typeC4Shape={text:t},l.parentBoundary=p,l.wrap=S()},addPersonOrSystemBoundary:function(t,e,i,n,a){if(null===t||null===e)return;let s={};const r=f.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,f.push(s)),s.label=null==e?{text:""}:{text:e},null==i)s.type={text:"system"};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]={text:e}}else s.type={text:i};if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]=e}else s.tags=n;if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.link=a;s.parentBoundary=p,s.wrap=S(),y=p,p=t,u.push(y)},addContainer:function(t,e,i,n,a,s,r,l){if(null===e||null===i)return;let o={};const c=d.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,d.push(o)),o.label=null==i?{text:""}:{text:i},null==n)o.techn={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.techn={text:n};if(null==a)o.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.descr={text:a};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=S(),o.typeC4Shape={text:t},o.parentBoundary=p},addContainerBoundary:function(t,e,i,n,a){if(null===t||null===e)return;let s={};const r=f.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,f.push(s)),s.label=null==e?{text:""}:{text:e},null==i)s.type={text:"container"};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]={text:e}}else s.type={text:i};if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]=e}else s.tags=n;if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.link=a;s.parentBoundary=p,s.wrap=S(),y=p,p=t,u.push(y)},addComponent:function(t,e,i,n,a,s,r,l){if(null===e||null===i)return;let o={};const c=d.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,d.push(o)),o.label=null==i?{text:""}:{text:i},null==n)o.techn={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.techn={text:n};if(null==a)o.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.descr={text:a};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=S(),o.typeC4Shape={text:t},o.parentBoundary=p},addDeploymentNode:function(t,e,i,n,a,s,r,l){if(null===e||null===i)return;let o={};const c=f.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,f.push(o)),o.label=null==i?{text:""}:{text:i},null==n)o.type={text:"node"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.type={text:n};if(null==a)o.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.descr={text:a};if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.nodeType=t,o.parentBoundary=p,o.wrap=S(),y=p,p=e,u.push(y)},popBoundaryParseStack:function(){p=y,u.pop(),y=u.pop(),u.push(y)},addRel:function(t,e,i,n,a,s,r,l,o){if(null==t||null==e||null==i||null==n)return;let c={};const h=b.find((t=>t.from===e&&t.to===i));if(h?c=h:b.push(c),c.type=t,c.from=e,c.to=i,c.label={text:n},null==a)c.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];c[t]={text:e}}else c.techn={text:a};if(null==s)c.descr={text:""};else if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]={text:e}}else c.descr={text:s};if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]=e}else c.sprite=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];c[t]=e}else c.tags=l;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=S()},updateElStyle:function(t,e,i,n,a,s,r,l,o,c,h){let u=d.find((t=>t.alias===e));if(void 0!==u||(u=f.find((t=>t.alias===e)),void 0!==u)){if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];u[t]=e}else u.bgColor=i;if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];u[t]=e}else u.fontColor=n;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];u[t]=e}else u.borderColor=a;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];u[t]=e}else u.shadowing=s;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];u[t]=e}else u.shape=r;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];u[t]=e}else u.sprite=l;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];u[t]=e}else u.techn=o;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];u[t]=e}else u.legendText=c;if(null!=h)if("object"==typeof h){let[t,e]=Object.entries(h)[0];u[t]=e}else u.legendSprite=h}},updateRelStyle:function(t,e,i,n,a,s,r){const l=b.find((t=>t.from===e&&t.to===i));if(void 0!==l){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];l[t]=e}else l.textColor=n;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.lineColor=a;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=parseInt(e)}else l.offsetX=parseInt(s);if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=parseInt(e)}else l.offsetY=parseInt(r)}},updateLayoutConfig:function(t,e,i){let n=x,a=m;if("object"==typeof e){const t=Object.values(e)[0];n=parseInt(t)}else n=parseInt(e);if("object"==typeof i){const t=Object.values(i)[0];a=parseInt(t)}else a=parseInt(i);n>=1&&(x=n),a>=1&&(m=a)},autoWrap:S,setWrap:function(t){_=t},getC4ShapeArray:A,getC4Shape:function(t){return d.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(A(t))},getBoundarys:function(t){return null==t?f:f.filter((e=>e.parentBoundary===t))},getCurrentBoundaryParse:function(){return p},getParentBoundaryParse:function(){return y},getRels:function(){return b},getTitle:function(){return g},getC4Type:function(){return E},getC4ShapeInRow:function(){return x},getC4BoundaryInRow:function(){return m},setAccTitle:a.o,getAccTitle:a.p,getAccDescription:a.q,setAccDescription:a.v,parseDirective:function(t,e,i){n.m.parseDirective(this,t,e,i)},getConfig:()=>(0,a.g)().c4,clear:function(){d=[],f=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],y="",p="global",u=[""],b=[],u=[""],g="",_=!1,x=4,m=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(t){let e=(0,a.b)(t,(0,a.g)());g=e},setC4Type:function(t){let e=(0,a.b)(t,(0,a.g)());E=e}},C=function(t,e){const i=t.append("rect");if(i.attr("x",e.x),i.attr("y",e.y),i.attr("fill",e.fill),i.attr("stroke",e.stroke),i.attr("width",e.width),i.attr("height",e.height),i.attr("rx",e.rx),i.attr("ry",e.ry),"undefined"!==e.attrs&&null!==e.attrs)for(let n in e.attrs)i.attr(n,e.attrs[n]);return"undefined"!==e.class&&i.attr("class",e.class),i},k=function(t,e,i,n,a,s){const l=t.append("image");l.attr("width",e),l.attr("height",i),l.attr("x",n),l.attr("y",a);let o=s.startsWith("data:image/png;base64")?s:(0,r.N)(s);l.attr("xlink:href",o)},O=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},T=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),w=function(){function t(t,e,i,a,s,r,l){n(e.append("text").attr("x",i+s/2).attr("y",a+r/2+5).style("text-anchor","middle").text(t),l)}function e(t,e,i,s,r,l,o,c){const{fontSize:h,fontFamily:d,fontWeight:u}=c,p=t.split(a.e.lineBreakRegex);for(let a=0;a<p.length;a++){const t=a*h-h*(p.length-1)/2,l=e.append("text").attr("x",i+r/2).attr("y",s).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",h).style("font-weight",u).style("font-family",d);l.append("tspan").attr("dy",t).text(p[a]).attr("alignment-baseline","mathematical"),n(l,o)}}function i(t,i,a,s,r,l,o,c){const h=i.append("switch"),d=h.append("foreignObject").attr("x",a).attr("y",s).attr("width",r).attr("height",l).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,a,s,r,0,o,c),n(d,o)}function n(t,e){for(const i in e)e.hasOwnProperty(i)&&t.attr(i,e[i])}return function(n){return"fo"===n.textPlacement?i:"old"===n.textPlacement?t:e}}(),D=function(t,e,i){const n=t.append("g");let a=e.bgColor?e.bgColor:"none",s=e.borderColor?e.borderColor:"#444444",r=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let o={x:e.x,y:e.y,fill:a,stroke:s,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};C(n,o);let c=i.boundaryFont();c.fontWeight="bold",c.fontSize=c.fontSize+2,c.fontColor=r,w(i)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},c),e.type&&""!==e.type.text&&(c=i.boundaryFont(),c.fontColor=r,w(i)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},c)),e.descr&&""!==e.descr.text&&(c=i.boundaryFont(),c.fontSize=c.fontSize-2,c.fontColor=r,w(i)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},c))},R=function(t,e,i){var n;let a=e.bgColor?e.bgColor:i[e.typeC4Shape.text+"_bg_color"],s=e.borderColor?e.borderColor:i[e.typeC4Shape.text+"_border_color"],r=e.fontColor?e.fontColor:"#FFFFFF",l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}const o=t.append("g");o.attr("class","person-man");const c=O();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":c.x=e.x,c.y=e.y,c.fill=a,c.width=e.width,c.height=e.height,c.stroke=s,c.rx=2.5,c.ry=2.5,c.attrs={"stroke-width":.5},C(o,c);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":o.append("path").attr("fill",a).attr("stroke-width","0.5").attr("stroke",s).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),o.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",s).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":o.append("path").attr("fill",a).attr("stroke-width","0.5").attr("stroke",s).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),o.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",s).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2))}let h=T(i,e.typeC4Shape.text);switch(o.append("text").attr("fill",r).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":k(o,48,48,e.x+e.width/2-24,e.y+e.image.Y,l)}let d=i[e.typeC4Shape.text+"Font"]();return d.fontWeight="bold",d.fontSize=d.fontSize+2,d.fontColor=r,w(i)(e.label.text,o,e.x,e.y+e.label.Y,e.width,e.height,{fill:r},d),d=i[e.typeC4Shape.text+"Font"](),d.fontColor=r,e.techn&&""!==(null==(n=e.techn)?void 0:n.text)?w(i)(e.techn.text,o,e.x,e.y+e.techn.Y,e.width,e.height,{fill:r,"font-style":"italic"},d):e.type&&""!==e.type.text&&w(i)(e.type.text,o,e.x,e.y+e.type.Y,e.width,e.height,{fill:r,"font-style":"italic"},d),e.descr&&""!==e.descr.text&&(d=i.personFont(),d.fontColor=r,w(i)(e.descr.text,o,e.x,e.y+e.descr.Y,e.width,e.height,{fill:r},d)),e.height},N=(t,e,i)=>{const n=t.append("g");let a=0;for(let s of e){let t=s.textColor?s.textColor:"#444444",e=s.lineColor?s.lineColor:"#444444",r=s.offsetX?parseInt(s.offsetX):0,l=s.offsetY?parseInt(s.offsetY):0,o="";if(0===a){let t=n.append("line");t.attr("x1",s.startPoint.x),t.attr("y1",s.startPoint.y),t.attr("x2",s.endPoint.x),t.attr("y2",s.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)"),a=-1}else{let t=n.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)")}let c=i.messageFont();w(i)(s.label.text,n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+l,s.label.width,s.label.height,{fill:t},c),s.techn&&""!==s.techn.text&&(c=i.messageFont(),w(i)("["+s.techn.text+"]",n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+i.messageFontSize+5+l,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:t,"font-style":"italic"},c))}},P=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},j=function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},M=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},B=function(t){const e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},Y=function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},L=function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},I=function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")};r.N;let U=0,F=0,X=4,z=2;o.yy=v;let Q={};class W{constructor(t){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,$(t.db.getConfig())}setData(t,e,i,n){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=e,this.nextData.starty=this.data.starty=i,this.nextData.stopy=this.data.stopy=n}updateVal(t,e,i,n){void 0===t[e]?t[e]=i:t[e]=n(i,t[e])}insert(t){this.nextData.cnt=this.nextData.cnt+1;let e=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+2*t.margin,i=e+t.width,n=this.nextData.starty+2*t.margin,a=n+t.height;(e>=this.data.widthLimit||i>=this.data.widthLimit||this.nextData.cnt>X)&&(e=this.nextData.startx+t.margin+Q.nextLinePaddingX,n=this.nextData.stopy+2*t.margin,this.nextData.stopx=i=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=n+t.height,this.nextData.cnt=1),t.x=e,t.y=n,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",n,Math.min),this.updateVal(this.data,"stopx",i,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",n,Math.min),this.updateVal(this.nextData,"stopx",i,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},$(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const $=function(t){(0,a.d)(Q,t),t.fontFamily&&(Q.personFontFamily=Q.systemFontFamily=Q.messageFontFamily=t.fontFamily),t.fontSize&&(Q.personFontSize=Q.systemFontSize=Q.messageFontSize=t.fontSize),t.fontWeight&&(Q.personFontWeight=Q.systemFontWeight=Q.messageFontWeight=t.fontWeight)},q=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),V=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function G(t,e,i,n,s){if(!e[t].width)if(i)e[t].text=(0,l.w)(e[t].text,s,n),e[t].textLines=e[t].text.split(a.e.lineBreakRegex).length,e[t].width=s,e[t].height=(0,l.m)(e[t].text,n);else{let i=e[t].text.split(a.e.lineBreakRegex);e[t].textLines=i.length;let s=0;e[t].height=0,e[t].width=0;for(const a of i)e[t].width=Math.max((0,l.j)(a,n),e[t].width),s=(0,l.m)(a,n),e[t].height=e[t].height+s}}const H=function(t,e,i){e.x=i.data.startx,e.y=i.data.starty,e.width=i.data.stopx-i.data.startx,e.height=i.data.stopy-i.data.starty,e.label.y=Q.c4ShapeMargin-35;let n=e.wrap&&Q.wrap,a=V(Q);a.fontSize=a.fontSize+2,a.fontWeight="bold",G("label",e,n,a,(0,l.j)(e.label.text,a)),D(t,e,Q)},K=function(t,e,i,n){let a=0;for(const s of n){a=0;const n=i[s];let r=q(Q,n.typeC4Shape.text);switch(r.fontSize=r.fontSize-2,n.typeC4Shape.width=(0,l.j)("<<"+n.typeC4Shape.text+">>",r),n.typeC4Shape.height=r.fontSize+2,n.typeC4Shape.Y=Q.c4ShapePadding,a=n.typeC4Shape.Y+n.typeC4Shape.height-4,n.image={width:0,height:0,Y:0},n.typeC4Shape.text){case"person":case"external_person":n.image.width=48,n.image.height=48,n.image.Y=a,a=n.image.Y+n.image.height}n.sprite&&(n.image.width=48,n.image.height=48,n.image.Y=a,a=n.image.Y+n.image.height);let o=n.wrap&&Q.wrap,c=Q.width-2*Q.c4ShapePadding,h=q(Q,n.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",G("label",n,o,h,c),n.label.Y=a+8,a=n.label.Y+n.label.height,n.type&&""!==n.type.text){n.type.text="["+n.type.text+"]",G("type",n,o,q(Q,n.typeC4Shape.text),c),n.type.Y=a+5,a=n.type.Y+n.type.height}else if(n.techn&&""!==n.techn.text){n.techn.text="["+n.techn.text+"]",G("techn",n,o,q(Q,n.techn.text),c),n.techn.Y=a+5,a=n.techn.Y+n.techn.height}let d=a,u=n.label.width;if(n.descr&&""!==n.descr.text){G("descr",n,o,q(Q,n.typeC4Shape.text),c),n.descr.Y=a+20,a=n.descr.Y+n.descr.height,u=Math.max(n.label.width,n.descr.width),d=a-5*n.descr.textLines}u+=Q.c4ShapePadding,n.width=Math.max(n.width||Q.width,u,Q.width),n.height=Math.max(n.height||Q.height,d,Q.height),n.margin=n.margin||Q.c4ShapeMargin,t.insert(n),R(e,n,Q)}t.bumpLastMargin(Q.c4ShapeMargin)};class J{constructor(t,e){this.x=t,this.y=e}}let Z=function(t,e){let i=t.x,n=t.y,a=e.x,s=e.y,r=i+t.width/2,l=n+t.height/2,o=Math.abs(i-a),c=Math.abs(n-s),h=c/o,d=t.height/t.width,u=null;return n==s&&i<a?u=new J(i+t.width,l):n==s&&i>a?u=new J(i,l):i==a&&n<s?u=new J(r,n+t.height):i==a&&n>s&&(u=new J(r,n)),i>a&&n<s?u=d>=h?new J(i,l+h*t.width/2):new J(r-o/c*t.height/2,n+t.height):i<a&&n<s?u=d>=h?new J(i+t.width,l+h*t.width/2):new J(r+o/c*t.height/2,n+t.height):i<a&&n>s?u=d>=h?new J(i+t.width,l-h*t.width/2):new J(r+t.height/2*o/c,n):i>a&&n>s&&(u=d>=h?new J(i,l-t.width/2*h):new J(r-t.height/2*o/c,n)),u},tt=function(t,e){let i={x:0,y:0};i.x=e.x+e.width/2,i.y=e.y+e.height/2;let n=Z(t,i);return i.x=t.x+t.width/2,i.y=t.y+t.height/2,{startPoint:n,endPoint:Z(e,i)}};function et(t,e,i,n,a){let s=new W(a);s.data.widthLimit=i.data.widthLimit/Math.min(z,n.length);for(let[r,l]of n.entries()){let n=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=n,n=l.image.Y+l.image.height);let o=l.wrap&&Q.wrap,c=V(Q);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",G("label",l,o,c,s.data.widthLimit),l.label.Y=n+8,n=l.label.Y+l.label.height,l.type&&""!==l.type.text){l.type.text="["+l.type.text+"]",G("type",l,o,V(Q),s.data.widthLimit),l.type.Y=n+5,n=l.type.Y+l.type.height}if(l.descr&&""!==l.descr.text){let t=V(Q);t.fontSize=t.fontSize-2,G("descr",l,o,t,s.data.widthLimit),l.descr.Y=n+20,n=l.descr.Y+l.descr.height}if(0==r||r%z==0){let t=i.data.startx+Q.diagramMarginX,e=i.data.stopy+Q.diagramMarginY+n;s.setData(t,t,e,e)}else{let t=s.data.stopx!==s.data.startx?s.data.stopx+Q.diagramMarginX:s.data.startx,e=s.data.starty;s.setData(t,t,e,e)}s.name=l.alias;let h=a.db.getC4ShapeArray(l.alias),d=a.db.getC4ShapeKeys(l.alias);d.length>0&&K(s,t,h,d),e=l.alias;let u=a.db.getBoundarys(e);u.length>0&&et(t,e,s,u,a),"global"!==l.alias&&H(t,l,s),i.data.stopy=Math.max(s.data.stopy+Q.c4ShapeMargin,i.data.stopy),i.data.stopx=Math.max(s.data.stopx+Q.c4ShapeMargin,i.data.stopx),U=Math.max(U,i.data.stopx),F=Math.max(F,i.data.stopy)}}const it={drawPersonOrSystemArray:K,drawBoundary:H,setConf:$,draw:function(t,e,i,n){Q=(0,a.g)().c4;const r=(0,a.g)().securityLevel;let o;"sandbox"===r&&(o=(0,s.Ys)("#i"+e));const c="sandbox"===r?(0,s.Ys)(o.nodes()[0].contentDocument.body):(0,s.Ys)("body");let h=n.db;n.db.setWrap(Q.wrap),X=h.getC4ShapeInRow(),z=h.getC4BoundaryInRow(),a.l.debug(`C:${JSON.stringify(Q,null,2)}`);const d="sandbox"===r?c.select(`[id="${e}"]`):(0,s.Ys)(`[id="${e}"]`);L(d),Y(d),I(d);let u=new W(n);u.setData(Q.diagramMarginX,Q.diagramMarginX,Q.diagramMarginY,Q.diagramMarginY),u.data.widthLimit=screen.availWidth,U=Q.diagramMarginX,F=Q.diagramMarginY;const p=n.db.getTitle();et(d,"",u,n.db.getBoundarys(""),n),P(d),j(d),B(d),M(d),function(t,e,i,n){let a=0;for(let r of e){a+=1;let t=r.wrap&&Q.wrap,e={fontFamily:(s=Q).messageFontFamily,fontSize:s.messageFontSize,fontWeight:s.messageFontWeight};"C4Dynamic"===n.db.getC4Type()&&(r.label.text=a+": "+r.label.text);let o=(0,l.j)(r.label.text,e);G("label",r,t,e,o),r.techn&&""!==r.techn.text&&(o=(0,l.j)(r.techn.text,e),G("techn",r,t,e,o)),r.descr&&""!==r.descr.text&&(o=(0,l.j)(r.descr.text,e),G("descr",r,t,e,o));let c=i(r.from),h=i(r.to),d=tt(c,h);r.startPoint=d.startPoint,r.endPoint=d.endPoint}var s;N(t,e,Q)}(d,n.db.getRels(),n.db.getC4Shape,n),u.data.stopx=U,u.data.stopy=F;const y=u.data;let f=y.stopy-y.starty+2*Q.diagramMarginY;const b=y.stopx-y.startx+2*Q.diagramMarginX;p&&d.append("text").text(p).attr("x",(y.stopx-y.startx)/2-4*Q.diagramMarginX).attr("y",y.starty+Q.diagramMarginY),(0,l.k)(d,f,b,Q.useMaxWidth);const g=p?60:0;d.attr("viewBox",y.startx-Q.diagramMarginX+" -"+(Q.diagramMarginY+g)+" "+b+" "+(f+g)),a.l.debug("models:",y)}},nt={parser:h,db:v,renderer:it,styles:t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,init:t=>{it.setConf(t.c4)}}}}]); \ No newline at end of file diff --git a/assets/js/676abc7a.63b3d25f.js b/assets/js/676abc7a.63b3d25f.js new file mode 100644 index 0000000000..ceb7cbd2bf --- /dev/null +++ b/assets/js/676abc7a.63b3d25f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5654],{7422:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>n,toc:()=>d});var s=t(7462),o=(t(7294),t(3905));t(5657);const a={},i="TIME_SERIES",n={unversionedId:"about/references/keywords/TIME_SERIES",id:"about/references/keywords/TIME_SERIES",title:"TIME_SERIES",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/TIME_SERIES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TIME_SERIES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TAX",permalink:"/ecalc/docs/about/references/keywords/TAX"},next:{title:"TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE"}},c={},d=[{value:"Description",id:"description",level:2}],l={toc:d},m="wrapper";function u(e){let{components:r,...t}=e;return(0,o.kt)(m,(0,s.Z)({},l,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"time_series"},"TIME_SERIES"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," /"),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,'This keyword defines the inputs for time dependent variables, or "reservoir\nvariables". For many fields, this may be only one reservoir simulation model. But in some\ncases, one might have several sources for reservoir and other relevant time series variables.'),(0,o.kt)("p",null,"For example, a field may have a reservoir simulation model for some areas and decline curves in other area of\nthe reservoir. There may also be tie-ins which are affecting the energy/emissions on the field\ninstallations. Also, there may be time profiles for fuel prices, emission tax, etc.\nTherefore, a set of sources may be specified with a name, path to data and type. The name is\nlater referred to in the system of energy consumers defined under ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),"."),(0,o.kt)("p",null,"Reservoir variables and other time varying data not coming from a reservoir simulation model can\nbe specified in a ",(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Comma-separated_values"},"CSV")," file."),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/time_series"},"TIME SERIES")," for more details about usage."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6941.2a27ca14.js b/assets/js/6941.2a27ca14.js new file mode 100644 index 0000000000..c7c2ba8585 --- /dev/null +++ b/assets/js/6941.2a27ca14.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6941],{6941:(e,t,i)=>{i.d(t,{diagram:()=>v});var r=i(44),n=i(3047),s=i(9373),a=i(2494),c=i(5625),l=i(1188),o=(i(7856),i(7484),i(7967),function(){var e=function(e,t,i,r){for(i=i||{},r=e.length;r--;i[e[r]]=t);return i},t=[1,3],i=[1,5],r=[1,6],n=[1,7],s=[1,8],a=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],c=[1,22],l=[2,13],o=[1,26],h=[1,27],u=[1,28],d=[1,29],y=[1,30],p=[1,31],_=[1,24],g=[1,32],E=[1,33],R=[1,36],m=[71,72],f=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],I=[1,56],b=[1,57],k=[1,58],S=[1,59],T=[1,60],N=[1,61],v=[1,62],x=[62,63],A=[1,74],q=[1,70],$=[1,71],O=[1,72],w=[1,73],C=[1,75],D=[1,79],L=[1,80],F=[1,77],M=[1,78],P=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],V={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,requirementDef:23,elementDef:24,relationshipDef:25,requirementType:26,requirementName:27,STRUCT_START:28,requirementBody:29,ID:30,COLONSEP:31,id:32,TEXT:33,text:34,RISK:35,riskLevel:36,VERIFYMTHD:37,verifyType:38,STRUCT_STOP:39,REQUIREMENT:40,FUNCTIONAL_REQUIREMENT:41,INTERFACE_REQUIREMENT:42,PERFORMANCE_REQUIREMENT:43,PHYSICAL_REQUIREMENT:44,DESIGN_CONSTRAINT:45,LOW_RISK:46,MED_RISK:47,HIGH_RISK:48,VERIFY_ANALYSIS:49,VERIFY_DEMONSTRATION:50,VERIFY_INSPECTION:51,VERIFY_TEST:52,ELEMENT:53,elementName:54,elementBody:55,TYPE:56,type:57,DOCREF:58,ref:59,END_ARROW_L:60,relationship:61,LINE:62,END_ARROW_R:63,CONTAINS:64,COPIES:65,DERIVES:66,SATISFIES:67,VERIFIES:68,REFINES:69,TRACES:70,unqString:71,qString:72,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",28:"STRUCT_START",30:"ID",31:"COLONSEP",33:"TEXT",35:"RISK",37:"VERIFYMTHD",39:"STRUCT_STOP",40:"REQUIREMENT",41:"FUNCTIONAL_REQUIREMENT",42:"INTERFACE_REQUIREMENT",43:"PERFORMANCE_REQUIREMENT",44:"PHYSICAL_REQUIREMENT",45:"DESIGN_CONSTRAINT",46:"LOW_RISK",47:"MED_RISK",48:"HIGH_RISK",49:"VERIFY_ANALYSIS",50:"VERIFY_DEMONSTRATION",51:"VERIFY_INSPECTION",52:"VERIFY_TEST",53:"ELEMENT",56:"TYPE",58:"DOCREF",60:"END_ARROW_L",62:"LINE",63:"END_ARROW_R",64:"CONTAINS",65:"COPIES",66:"DERIVES",67:"SATISFIES",68:"VERIFIES",69:"REFINES",70:"TRACES",71:"unqString",72:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],performAction:function(e,t,i,r,n,s,a){var c=s.length-1;switch(n){case 6:this.$=s[c].trim(),r.setAccTitle(this.$);break;case 7:case 8:this.$=s[c].trim(),r.setAccDescription(this.$);break;case 9:r.parseDirective("%%{","open_directive");break;case 10:r.parseDirective(s[c],"type_directive");break;case 11:s[c]=s[c].trim().replace(/'/g,'"'),r.parseDirective(s[c],"arg_directive");break;case 12:r.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:r.addRequirement(s[c-3],s[c-4]);break;case 20:r.setNewReqId(s[c-2]);break;case 21:r.setNewReqText(s[c-2]);break;case 22:r.setNewReqRisk(s[c-2]);break;case 23:r.setNewReqVerifyMethod(s[c-2]);break;case 26:this.$=r.RequirementType.REQUIREMENT;break;case 27:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=r.RiskLevel.LOW_RISK;break;case 33:this.$=r.RiskLevel.MED_RISK;break;case 34:this.$=r.RiskLevel.HIGH_RISK;break;case 35:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=r.VerifyType.VERIFY_TEST;break;case 39:r.addElement(s[c-3]);break;case 40:r.setNewElementType(s[c-2]);break;case 41:r.setNewElementDocRef(s[c-2]);break;case 44:r.addRelationship(s[c-2],s[c],s[c-4]);break;case 45:r.addRelationship(s[c-2],s[c-4],s[c]);break;case 46:this.$=r.Relationships.CONTAINS;break;case 47:this.$=r.Relationships.COPIES;break;case 48:this.$=r.Relationships.DERIVES;break;case 49:this.$=r.Relationships.SATISFIES;break;case 50:this.$=r.Relationships.VERIFIES;break;case 51:this.$=r.Relationships.REFINES;break;case 52:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:t,9:4,14:i,16:r,18:n,19:s},{1:[3]},{3:10,4:2,5:[1,9],6:t,9:4,14:i,16:r,18:n,19:s},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},e(a,[2,8]),{20:[2,9]},{3:16,4:2,6:t,9:4,14:i,16:r,18:n,19:s},{1:[2,2]},{4:21,5:c,7:17,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{11:34,12:[1,35],22:R},e([12,22],[2,10]),e(a,[2,6]),e(a,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:c,7:38,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{4:21,5:c,7:39,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{4:21,5:c,7:40,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{4:21,5:c,7:41,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{4:21,5:c,7:42,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},e(m,[2,26]),e(m,[2,27]),e(m,[2,28]),e(m,[2,29]),e(m,[2,30]),e(m,[2,31]),e(f,[2,55]),e(f,[2,56]),e(a,[2,4]),{13:51,21:[1,52]},e(a,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:I,65:b,66:k,67:S,68:T,69:N,70:v},{61:63,64:I,65:b,66:k,67:S,68:T,69:N,70:v},{11:64,22:R},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},e(x,[2,46]),e(x,[2,47]),e(x,[2,48]),e(x,[2,49]),e(x,[2,50]),e(x,[2,51]),e(x,[2,52]),{63:[1,68]},e(a,[2,5]),{5:A,29:69,30:q,33:$,35:O,37:w,39:C},{5:D,39:L,55:76,56:F,58:M},{32:81,71:g,72:E},{32:82,71:g,72:E},e(P,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:A,29:87,30:q,33:$,35:O,37:w,39:C},e(P,[2,25]),e(P,[2,39]),{31:[1,88]},{31:[1,89]},{5:D,39:L,55:90,56:F,58:M},e(P,[2,43]),e(P,[2,44]),e(P,[2,45]),{32:91,71:g,72:E},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},e(P,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},e(P,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:A,29:116,30:q,33:$,35:O,37:w,39:C},{5:A,29:117,30:q,33:$,35:O,37:w,39:C},{5:A,29:118,30:q,33:$,35:O,37:w,39:C},{5:A,29:119,30:q,33:$,35:O,37:w,39:C},{5:D,39:L,55:120,56:F,58:M},{5:D,39:L,55:121,56:F,58:M},e(P,[2,20]),e(P,[2,21]),e(P,[2,22]),e(P,[2,23]),e(P,[2,40]),e(P,[2,41])],defaultActions:{8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},parseError:function(e,t){if(!t.recoverable){var i=new Error(e);throw i.hash=t,i}this.trace(e)},parse:function(e){var t=this,i=[0],r=[],n=[null],s=[],a=this.table,c="",l=0,o=0,h=1,u=s.slice.call(arguments,1),d=Object.create(this.lexer),y={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(y.yy[p]=this.yy[p]);d.setInput(e,y.yy),y.yy.lexer=d,y.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var _=d.yylloc;s.push(_);var g=d.options&&d.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,R,m,f,I,b,k,S,T,N={};;){if(R=i[i.length-1],this.defaultActions[R]?m=this.defaultActions[R]:(null==E&&(T=void 0,"number"!=typeof(T=r.pop()||d.lex()||h)&&(T instanceof Array&&(T=(r=T).pop()),T=t.symbols_[T]||T),E=T),m=a[R]&&a[R][E]),void 0===m||!m.length||!m[0]){var v="";for(I in S=[],a[R])this.terminals_[I]&&I>2&&S.push("'"+this.terminals_[I]+"'");v=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(l+1)+": Unexpected "+(E==h?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(v,{text:d.match,token:this.terminals_[E]||E,line:d.yylineno,loc:_,expected:S})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+R+", token: "+E);switch(m[0]){case 1:i.push(E),n.push(d.yytext),s.push(d.yylloc),i.push(m[1]),E=null,o=d.yyleng,c=d.yytext,l=d.yylineno,_=d.yylloc;break;case 2:if(b=this.productions_[m[1]][1],N.$=n[n.length-b],N._$={first_line:s[s.length-(b||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(b||1)].first_column,last_column:s[s.length-1].last_column},g&&(N._$.range=[s[s.length-(b||1)].range[0],s[s.length-1].range[1]]),void 0!==(f=this.performAction.apply(N,[c,o,l,y.yy,m[1],n,s].concat(u))))return f;b&&(i=i.slice(0,-1*b*2),n=n.slice(0,-1*b),s=s.slice(0,-1*b)),i.push(this.productions_[m[1]][0]),n.push(N.$),s.push(N._$),k=a[i[i.length-2]][i[i.length-1]],i.push(k);break;case 3:return!0}}return!0}},Y={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,i=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===r.length?this.yylloc.first_column:0)+r[r.length-i.length].length-i[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var i,r,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],i=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var s in n)this[s]=n[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,i,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),s=0;s<n.length;s++)if((i=this._input.match(this.rules[n[s]]))&&(!t||i[0].length>t[0].length)){if(t=i,r=s,this.options.backtrack_lexer){if(!1!==(e=this.test_match(i,n[s])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,n[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,i,r){switch(i){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 53:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:case 15:case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 54:return"qString";case 55:return t.yytext=t.yytext.trim(),71}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},INITIAL:{rules:[0,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55],inclusive:!0}}};function U(){this.yy={}}return V.lexer=Y,U.prototype=V,V.Parser=U,new U}());o.parser=o;const h=o;let u=[],d={},y={},p={},_={};const g={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(e,t,i){n.m.parseDirective(this,e,t,i)},getConfig:()=>(0,r.g)().req,addRequirement:(e,t)=>(void 0===y[e]&&(y[e]={name:e,type:t,id:d.id,text:d.text,risk:d.risk,verifyMethod:d.verifyMethod}),d={},y[e]),getRequirements:()=>y,setNewReqId:e=>{void 0!==d&&(d.id=e)},setNewReqText:e=>{void 0!==d&&(d.text=e)},setNewReqRisk:e=>{void 0!==d&&(d.risk=e)},setNewReqVerifyMethod:e=>{void 0!==d&&(d.verifyMethod=e)},setAccTitle:r.o,getAccTitle:r.p,setAccDescription:r.v,getAccDescription:r.q,addElement:e=>(void 0===_[e]&&(_[e]={name:e,type:p.type,docRef:p.docRef},r.l.info("Added new requirement: ",e)),p={},_[e]),getElements:()=>_,setNewElementType:e=>{void 0!==p&&(p.type=e)},setNewElementDocRef:e=>{void 0!==p&&(p.docRef=e)},addRelationship:(e,t,i)=>{u.push({type:e,src:t,dst:i})},getRelationships:()=>u,clear:()=>{u=[],d={},y={},p={},_={},(0,r.y)()}},E={CONTAINS:"contains",ARROW:"arrow"},R=E,m=(e,t)=>{let i=e.append("defs").append("marker").attr("id",E.CONTAINS+"_line_ending").attr("refX",0).attr("refY",t.line_height/2).attr("markerWidth",t.line_height).attr("markerHeight",t.line_height).attr("orient","auto").append("g");i.append("circle").attr("cx",t.line_height/2).attr("cy",t.line_height/2).attr("r",t.line_height/2).attr("fill","none"),i.append("line").attr("x1",0).attr("x2",t.line_height).attr("y1",t.line_height/2).attr("y2",t.line_height/2).attr("stroke-width",1),i.append("line").attr("y1",0).attr("y2",t.line_height).attr("x1",t.line_height/2).attr("x2",t.line_height/2).attr("stroke-width",1),e.append("defs").append("marker").attr("id",E.ARROW+"_line_ending").attr("refX",t.line_height).attr("refY",.5*t.line_height).attr("markerWidth",t.line_height).attr("markerHeight",t.line_height).attr("orient","auto").append("path").attr("d",`M0,0\n L${t.line_height},${t.line_height/2}\n M${t.line_height},${t.line_height/2}\n L0,${t.line_height}`).attr("stroke-width",1)};let f={},I=0;const b=(e,t)=>e.insert("rect","#"+t).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",f.rect_min_width+"px").attr("height",f.rect_min_height+"px"),k=(e,t,i)=>{let r=f.rect_min_width/2,n=e.append("text").attr("class","req reqLabel reqTitle").attr("id",t).attr("x",r).attr("y",f.rect_padding).attr("dominant-baseline","hanging"),s=0;i.forEach((e=>{0==s?n.append("tspan").attr("text-anchor","middle").attr("x",f.rect_min_width/2).attr("dy",0).text(e):n.append("tspan").attr("text-anchor","middle").attr("x",f.rect_min_width/2).attr("dy",.75*f.line_height).text(e),s++}));let a=1.5*f.rect_padding+s*f.line_height*.75;return e.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",f.rect_min_width).attr("y1",a).attr("y2",a),{titleNode:n,y:a}},S=(e,t,i,r)=>{let n=e.append("text").attr("class","req reqLabel").attr("id",t).attr("x",f.rect_padding).attr("y",r).attr("dominant-baseline","hanging"),s=0;let a=[];return i.forEach((e=>{let t=e.length;for(;t>30&&s<3;){let i=e.substring(0,30);t=(e=e.substring(30,e.length)).length,a[a.length]=i,s++}if(3==s){let e=a[a.length-1];a[a.length-1]=e.substring(0,e.length-4)+"..."}else a[a.length]=e;s=0})),a.forEach((e=>{n.append("tspan").attr("x",f.rect_padding).attr("dy",f.line_height).text(e)})),n},T=function(e,t,i,n,a){const c=i.edge(N(t.src),N(t.dst)),l=(0,s.jvg)().x((function(e){return e.x})).y((function(e){return e.y})),o=e.insert("path","#"+n).attr("class","er relationshipLine").attr("d",l(c.points)).attr("fill","none");t.type==a.db.Relationships.CONTAINS?o.attr("marker-start","url("+r.e.getUrl(f.arrowMarkerAbsolute)+"#"+t.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+r.e.getUrl(f.arrowMarkerAbsolute)+"#"+R.ARROW+"_line_ending)")),((e,t,i,r)=>{const n=t.node().getTotalLength(),s=t.node().getPointAtLength(.5*n),a="rel"+I;I++;const c=e.append("text").attr("class","req relationshipLabel").attr("id",a).attr("x",s.x).attr("y",s.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(r).node().getBBox();e.insert("rect","#"+a).attr("class","req reqLabelBox").attr("x",s.x-c.width/2).attr("y",s.y-c.height/2).attr("width",c.width).attr("height",c.height).attr("fill","white").attr("fill-opacity","85%")})(e,o,0,`<<${t.type}>>`)},N=e=>e.replace(/\s/g,"").replace(/\./g,"_"),v={parser:h,db:g,renderer:{draw:(e,t,i,n)=>{f=(0,r.g)().requirement,n.db.clear(),n.parser.parse(e);const o=f.securityLevel;let h;"sandbox"===o&&(h=(0,s.Ys)("#i"+t));const u=("sandbox"===o?(0,s.Ys)(h.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select(`[id='${t}']`);m(u,f);const d=new c.k({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:f.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let y=n.db.getRequirements(),p=n.db.getElements(),_=n.db.getRelationships();var g,E,R;g=y,E=d,R=u,Object.keys(g).forEach((e=>{let t=g[e];e=N(e),r.l.info("Added new requirement: ",e);const i=R.append("g").attr("id",e),n=b(i,"req-"+e);let s=k(i,e+"_title",[`<<${t.type}>>`,`${t.name}`]);S(i,e+"_body",[`Id: ${t.id}`,`Text: ${t.text}`,`Risk: ${t.risk}`,`Verification: ${t.verifyMethod}`],s.y);const a=n.node().getBBox();E.setNode(e,{width:a.width,height:a.height,shape:"rect",id:e})})),((e,t,i)=>{Object.keys(e).forEach((r=>{let n=e[r];const s=N(r),a=i.append("g").attr("id",s),c="element-"+s,l=b(a,c);let o=k(a,c+"_title",["<<Element>>",`${r}`]);S(a,c+"_body",[`Type: ${n.type||"Not Specified"}`,`Doc Ref: ${n.docRef||"None"}`],o.y);const h=l.node().getBBox();t.setNode(s,{width:h.width,height:h.height,shape:"rect",id:s})}))})(p,d,u),((e,t)=>{e.forEach((function(e){let i=N(e.src),r=N(e.dst);t.setEdge(i,r,{relationship:e})}))})(_,d),(0,a.bK)(d),function(e,t){t.nodes().forEach((function(i){void 0!==i&&void 0!==t.node(i)&&(e.select("#"+i),e.select("#"+i).attr("transform","translate("+(t.node(i).x-t.node(i).width/2)+","+(t.node(i).y-t.node(i).height/2)+" )"))}))}(u,d),_.forEach((function(e){T(u,e,d,t,n)}));const I=f.rect_padding,v=u.node().getBBox(),x=v.width+2*I,A=v.height+2*I;(0,l.k)(u,A,x,f.useMaxWidth),u.attr("viewBox",`${v.x-I} ${v.y-I} ${x} ${A}`)}},styles:e=>`\n\n marker {\n fill: ${e.relationColor};\n stroke: ${e.relationColor};\n }\n\n marker.cross {\n stroke: ${e.lineColor};\n }\n\n svg {\n font-family: ${e.fontFamily};\n font-size: ${e.fontSize};\n }\n\n .reqBox {\n fill: ${e.requirementBackground};\n fill-opacity: 100%;\n stroke: ${e.requirementBorderColor};\n stroke-width: ${e.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${e.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${e.relationLabelBackground};\n fill-opacity: 100%;\n }\n\n .req-title-line {\n stroke: ${e.requirementBorderColor};\n stroke-width: ${e.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${e.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${e.relationLabelColor};\n }\n\n`}}}]); \ No newline at end of file diff --git a/assets/js/6964.f8908a4e.js b/assets/js/6964.f8908a4e.js new file mode 100644 index 0000000000..b470dbb77b --- /dev/null +++ b/assets/js/6964.f8908a4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6964],{6964:(e,t,s)=>{s.d(t,{diagram:()=>L});var o=s(1341),a=s(5625),r=s(9373),i=s(44),n=s(2566),d=s(1188);s(7856),s(7484),s(2494),s(9354),s(3502),s(7967);const l="rect",c="rectWithTitle",p="statediagram",g=`${p}-state`,b="transition",h=`${b} note-edge`,u=`${p}-note`,y=`${p}-cluster`,f=`${p}-cluster-alt`,w="parent",x="note",m="----",$=`${m}${x}`,T=`${m}${w}`,k="fill:none",S="fill: #333",D="text",v="normal";let A={},B=0;function E(e="",t=0,s="",o=m){return`state-${e}${null!==s&&s.length>0?`${o}${s}`:""}-${t}`}const C=(e,t,s,a,r,n)=>{const d=s.id,p=null==(b=a[d])?"":b.classes?b.classes.join(" "):"";var b;if("root"!==d){let t=l;!0===s.start&&(t="start"),!1===s.start&&(t="end"),s.type!==o.a&&(t=s.type),A[d]||(A[d]={id:d,shape:t,description:i.e.sanitizeText(d,(0,i.g)()),classes:`${p} ${g}`});const a=A[d];s.description&&(Array.isArray(a.description)?(a.shape=c,a.description.push(s.description)):a.description.length>0?(a.shape=c,a.description===d?a.description=[s.description]:a.description=[a.description,s.description]):(a.shape=l,a.description=s.description),a.description=i.e.sanitizeTextOrArray(a.description,(0,i.g)())),1===a.description.length&&a.shape===c&&(a.shape=l),!a.type&&s.doc&&(i.l.info("Setting cluster for ",d,V(s)),a.type="group",a.dir=V(s),a.shape=s.type===o.b?"divider":"roundedWithTitle",a.classes=a.classes+" "+y+" "+(n?f:""));const r={labelStyle:"",shape:a.shape,labelText:a.description,classes:a.classes,style:"",id:d,dir:a.dir,domId:E(d,B),type:a.type,padding:15,centerLabel:!0};if(s.note){const t={labelStyle:"",shape:"note",labelText:s.note.text,classes:u,style:"",id:d+$+"-"+B,domId:E(d,B,x),type:a.type,padding:15},o={labelStyle:"",shape:"noteGroup",labelText:s.note.text,classes:a.classes,style:"",id:d+T,domId:E(d,B,w),type:"group",padding:0};B++;const i=d+T;e.setNode(i,o),e.setNode(t.id,t),e.setNode(d,r),e.setParent(d,i),e.setParent(t.id,i);let n=d,l=t.id;"left of"===s.note.position&&(n=t.id,l=d),e.setEdge(n,l,{arrowhead:"none",arrowType:"",style:k,labelStyle:"",classes:h,arrowheadStyle:S,labelpos:"c",labelType:D,thickness:v})}else e.setNode(d,r)}t&&"root"!==t.id&&(i.l.trace("Setting node ",d," to be child of its parent ",t.id),e.setParent(d,t.id)),s.doc&&(i.l.trace("Adding nodes children "),R(e,s,s.doc,a,r,!n))},R=(e,t,s,a,r,n)=>{i.l.trace("items",s),s.forEach((s=>{switch(s.stmt){case o.c:case o.a:C(e,t,s,a,r,n);break;case o.S:{C(e,t,s.state1,a,r,n),C(e,t,s.state2,a,r,n);const o={id:"edge"+B,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:k,labelStyle:"",label:i.e.sanitizeText(s.description,(0,i.g)()),arrowheadStyle:S,labelpos:"c",labelType:D,thickness:v,classes:b};e.setEdge(s.state1.id,s.state2.id,o,B),B++}}}))},V=(e,t=o.e)=>{let s=t;if(e.doc)for(let o=0;o<e.doc.length;o++){const t=e.doc[o];"dir"===t.stmt&&(s=t.value)}return s},N={setConf:function(e){const t=Object.keys(e);for(const s of t)e[s]},getClasses:function(e,t){i.l.trace("Extracting classes"),t.db.clear();try{return t.parser.parse(e),t.db.extract(t.db.getRootDocV2()),t.db.getClasses()}catch(s){return s}},draw:function(e,t,s,c){i.l.info("Drawing state diagram (v2)",t),A={};let g=c.db.getDirection();void 0===g&&(g=o.D);const{securityLevel:b,state:h}=(0,i.g)(),u=h.nodeSpacing||50,y=h.rankSpacing||50;i.l.info(c.db.getRootDocV2()),c.db.extract(c.db.getRootDocV2()),i.l.info(c.db.getRootDocV2());const f=c.db.getStates(),w=new a.k({multigraph:!0,compound:!0}).setGraph({rankdir:V(c.db.getRootDocV2()),nodesep:u,ranksep:y,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));let x;C(w,void 0,c.db.getRootDocV2(),f,c.db,!0),"sandbox"===b&&(x=(0,r.Ys)("#i"+t));const m="sandbox"===b?(0,r.Ys)(x.nodes()[0].contentDocument.body):(0,r.Ys)("body"),$=m.select(`[id="${t}"]`),T=m.select("#"+t+" g");(0,n.r)(T,w,["barb"],p,t);d.u.insertTitle($,"statediagramTitleText",h.titleTopMargin,c.db.getDiagramTitle());const k=$.node().getBBox(),S=k.width+16,D=k.height+16;$.attr("class",p);const v=$.node().getBBox();(0,d.k)($,D,S,h.useMaxWidth);const B=`${v.x-8} ${v.y-8} ${S} ${D}`;i.l.debug(`viewBox ${B}`),$.attr("viewBox",B);const E=document.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const o of E){const e=o.getBBox(),t=document.createElementNS("http://www.w3.org/2000/svg",l);t.setAttribute("rx",0),t.setAttribute("ry",0),t.setAttribute("width",e.width),t.setAttribute("height",e.height),o.insertBefore(t,o.firstChild)}}},L={parser:o.p,db:o.d,renderer:N,styles:o.s,init:e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,o.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/69fd9be6.21ecae7b.js b/assets/js/69fd9be6.21ecae7b.js new file mode 100644 index 0000000000..8387de2839 --- /dev/null +++ b/assets/js/69fd9be6.21ecae7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8570],{8445:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>n,default:()=>p,frontMatter:()=>a,metadata:()=>_,toc:()=>i});var t=r(7462),o=(r(7294),r(3905));r(5657);const a={title:"Variable speed compressor train multiple streams and pressures",sidebar_position:3,description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model"},n="VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model",_={unversionedId:"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",id:"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",title:"Variable speed compressor train multiple streams and pressures",description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Variable speed compressor train multiple streams and pressures",sidebar_position:3,description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model"},sidebar:"about",previous:{title:"Compressor system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system"},next:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations"}},l={},i=[{value:"Format",id:"format",level:2}],m={toc:i},d="wrapper";function p(e){let{components:s,...r}=e;return(0,o.kt)(d,(0,t.Z)({},m,r,{components:s,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"variable_speed_compressor_train_multiple_streams_and_pressures-energy-usage-model"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model"),(0,o.kt)("p",null,"This energy usage model allows the compressor train model type\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"Variable speed compressor train model with multiple streams and pressures"),"."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n CONDITION: <condition expression>\n COMPRESSOR_TRAIN_MODEL: <reference a Variable speed compressor train model with multiple streams and pressures model>\n RATE_PER_STREAM:\n - <Expression for stream 1>\n - <Expression for stream 2>\n - ...\n - <Expression for stream N>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure expression>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n")),(0,o.kt)("p",null,"The number of elements in ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM"},"RATE_PER_STREAM")," must correspond to the number of streams defined for the model referenced in\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"},"COMPRESSOR_TRAIN_MODEL"),"."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},"INTERSTAGE_CONTROL_PRESSURE")," is required if the model referenced in ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"},"COMPRESSOR_TRAIN_MODEL")," has has an\ninterstage control pressure defined. If there is no interstage control pressure defined in ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"},"COMPRESSOR_TRAIN_MODEL"),",\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},"INTERSTAGE_CONTROL_PRESSURE")," should not be defined."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6adcc868.2773af0b.js b/assets/js/6adcc868.2773af0b.js new file mode 100644 index 0000000000..1769da04ae --- /dev/null +++ b/assets/js/6adcc868.2773af0b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8122],{9737:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>i,contentTitle:()=>a,default:()=>S,frontMatter:()=>n,metadata:()=>l,toc:()=>m});var t=o(7462),r=(o(7294),o(3905));o(5657);const n={title:"Compressor system",sidebar_position:2,description:"COMPRESSOR_SYSTEM Energy Usage Model"},a="COMPRESSOR_SYSTEM energy usage model",l={unversionedId:"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",id:"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",title:"Compressor system",description:"COMPRESSOR_SYSTEM Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor system",sidebar_position:2,description:"COMPRESSOR_SYSTEM Energy Usage Model"},sidebar:"about",previous:{title:"Compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor"},next:{title:"Variable speed compressor train multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}},i={},m=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:m},p="wrapper";function S(e){let{components:s,...o}=e;return(0,r.kt)(p,(0,t.Z)({},c,o,{components:s,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"compressor_system-energy-usage-model"},"COMPRESSOR_SYSTEM energy usage model"),(0,r.kt)("p",null,"When ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"},"COMPRESSOR_SYSTEM")," is specified under ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," a fully defined compressor model (with charts) can be used. Here, the following are allowed under the\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"},"COMPRESSOR_SYSTEM")," keyword:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},"Simplified variable speed compressor train model"),","),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},"Variable speed compressor train model")," "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"},"Sampled compressor model"))),(0,r.kt)("p",null,"The key difference between this model and the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor"},"COMPRESSOR")," keyword is that multiple compression trains can be specified. "),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n CONDITION: <condition expression>\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model in facility inputs>\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n OPERATIONAL_SETTINGS:\n <operational settings data>\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n - RATES:\n - SIM1;GAS_SALES\n - 0\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n - RATES:\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n")))}S.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6bd3279d.aeef8223.js b/assets/js/6bd3279d.aeef8223.js new file mode 100644 index 0000000000..361f0ed973 --- /dev/null +++ b/assets/js/6bd3279d.aeef8223.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[639],{9148:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var r=a(7462),n=(a(7294),a(3905));a(5657);const o={},l="EMISSION_NAME",s={unversionedId:"about/references/keywords/EMISSION_NAME",id:"about/references/keywords/EMISSION_NAME",title:"EMISSION_NAME",description:"[...] /",source:"@site/docs/about/references/keywords/EMISSION_NAME.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSION_NAME.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS"},next:{title:"EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:i},N="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(N,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"emission_name"},"EMISSION_NAME"),(0,n.kt)("p",null,"[...]"," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EMISSION_NAME"},"EMISSION_NAME")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Yes"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"DIRECT_EMITTERS")),(0,n.kt)("td",{parentName:"tr",align:null},"None")))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Name of an entity."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSION_NAME: <name>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("p",null,"Usage in ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"},"DIRECT_EMITTERS"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"DIRECT_EMITTERS:\n - EMISSION_NAME: CH4\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/706.2fd91774.js b/assets/js/706.2fd91774.js new file mode 100644 index 0000000000..2c6489816e --- /dev/null +++ b/assets/js/706.2fd91774.js @@ -0,0 +1,2052 @@ +exports.id = 706; +exports.ids = [706]; +exports.modules = { + +/***/ 28734: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return s.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return s.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return s.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return n.bind(this)(a)}}})); + +/***/ }), + +/***/ 10285: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,r=/\d\d?/,i=/\d*[^-_:/,()\s\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,a("seconds")],ss:[r,a("seconds")],m:[r,a("minutes")],mm:[r,a("minutes")],H:[r,a("hours")],h:[r,a("hours")],HH:[r,a("hours")],hh:[r,a("hours")],D:[r,a("day")],DD:[n,a("day")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,a("month")],MM:[n,a("month")],MMM:[i,function(e){var t=h("months"),n=(h("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,a("year")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\d{4}/,a("year")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\[|\]$/g,"")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if("string"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,"")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if("string"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if(["x","X"].indexOf(t)>-1)return new Date(("X"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date("")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(""))}else i.call(this,e)}}})); + +/***/ }), + +/***/ 59542: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e="day";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf("year"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,"week")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return"isoweek"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):n.bind(this)(e,t)}}})); + +/***/ }), + +/***/ 74706: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17967); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59542); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10285); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28734); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(81188); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(43047); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(59373); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20683); + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 28, 35, 40], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 20], $V9 = [1, 21], $Va = [1, 22], $Vb = [1, 23], $Vc = [1, 24], $Vd = [1, 25], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 29], $Vh = [1, 31], $Vi = [1, 34], $Vj = [5, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 28, 35, 40]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "directive": 4, "gantt": 5, "document": 6, "EOF": 7, "line": 8, "SPACE": 9, "statement": 10, "NL": 11, "dateFormat": 12, "inclusiveEndDates": 13, "topAxis": 14, "axisFormat": 15, "tickInterval": 16, "excludes": 17, "includes": 18, "todayMarker": 19, "title": 20, "acc_title": 21, "acc_title_value": 22, "acc_descr": 23, "acc_descr_value": 24, "acc_descr_multiline_value": 25, "section": 26, "clickStatement": 27, "taskTxt": 28, "taskData": 29, "openDirective": 30, "typeDirective": 31, "closeDirective": 32, ":": 33, "argDirective": 34, "click": 35, "callbackname": 36, "callbackargs": 37, "href": 38, "clickStatementDebug": 39, "open_directive": 40, "type_directive": 41, "arg_directive": 42, "close_directive": 43, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "gantt", 7: "EOF", 9: "SPACE", 11: "NL", 12: "dateFormat", 13: "inclusiveEndDates", 14: "topAxis", 15: "axisFormat", 16: "tickInterval", 17: "excludes", 18: "includes", 19: "todayMarker", 20: "title", 21: "acc_title", 22: "acc_title_value", 23: "acc_descr", 24: "acc_descr_value", 25: "acc_descr_multiline_value", 26: "section", 28: "taskTxt", 29: "taskData", 33: ":", 35: "click", 36: "callbackname", 37: "callbackargs", 38: "href", 40: "open_directive", 41: "type_directive", 42: "arg_directive", 43: "close_directive" }, + productions_: [0, [3, 2], [3, 3], [6, 0], [6, 2], [8, 2], [8, 1], [8, 1], [8, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 2], [10, 1], [4, 4], [4, 6], [27, 2], [27, 3], [27, 3], [27, 4], [27, 3], [27, 4], [27, 2], [39, 2], [39, 3], [39, 3], [39, 4], [39, 3], [39, 4], [39, 2], [30, 1], [31, 1], [34, 1], [32, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 2: + return $$[$0 - 1]; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 9: + yy.setDateFormat($$[$0].substr(11)); + this.$ = $$[$0].substr(11); + break; + case 10: + yy.enableInclusiveEndDates(); + this.$ = $$[$0].substr(18); + break; + case 11: + yy.TopAxis(); + this.$ = $$[$0].substr(8); + break; + case 12: + yy.setAxisFormat($$[$0].substr(11)); + this.$ = $$[$0].substr(11); + break; + case 13: + yy.setTickInterval($$[$0].substr(13)); + this.$ = $$[$0].substr(13); + break; + case 14: + yy.setExcludes($$[$0].substr(9)); + this.$ = $$[$0].substr(9); + break; + case 15: + yy.setIncludes($$[$0].substr(9)); + this.$ = $$[$0].substr(9); + break; + case 16: + yy.setTodayMarker($$[$0].substr(12)); + this.$ = $$[$0].substr(12); + break; + case 17: + yy.setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 18: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 19: + case 20: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 21: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 23: + yy.addTask($$[$0 - 1], $$[$0]); + this.$ = "task"; + break; + case 27: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0], null); + break; + case 28: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 29: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null); + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 30: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setLink($$[$0 - 3], $$[$0]); + break; + case 31: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0], null); + yy.setLink($$[$0 - 2], $$[$0 - 1]); + break; + case 32: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]); + yy.setLink($$[$0 - 3], $$[$0 - 2]); + break; + case 33: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 34: + case 40: + this.$ = $$[$0 - 1] + " " + $$[$0]; + break; + case 35: + case 36: + case 38: + this.$ = $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; + break; + case 37: + case 39: + this.$ = $$[$0 - 3] + " " + $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; + break; + case 41: + yy.parseDirective("%%{", "open_directive"); + break; + case 42: + yy.parseDirective($$[$0], "type_directive"); + break; + case 43: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 44: + yy.parseDirective("}%%", "close_directive", "gantt"); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 30: 4, 40: $V1 }, { 1: [3] }, { 3: 6, 4: 2, 5: $V0, 30: 4, 40: $V1 }, o($V2, [2, 3], { 6: 7 }), { 31: 8, 41: [1, 9] }, { 41: [2, 41] }, { 1: [2, 1] }, { 4: 30, 7: [1, 10], 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: $V3, 13: $V4, 14: $V5, 15: $V6, 16: $V7, 17: $V8, 18: $V9, 19: $Va, 20: $Vb, 21: $Vc, 23: $Vd, 25: $Ve, 26: $Vf, 27: 28, 28: $Vg, 30: 4, 35: $Vh, 40: $V1 }, { 32: 32, 33: [1, 33], 43: $Vi }, o([33, 43], [2, 42]), o($V2, [2, 8], { 1: [2, 2] }), o($V2, [2, 4]), { 4: 30, 10: 35, 12: $V3, 13: $V4, 14: $V5, 15: $V6, 16: $V7, 17: $V8, 18: $V9, 19: $Va, 20: $Vb, 21: $Vc, 23: $Vd, 25: $Ve, 26: $Vf, 27: 28, 28: $Vg, 30: 4, 35: $Vh, 40: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 9]), o($V2, [2, 10]), o($V2, [2, 11]), o($V2, [2, 12]), o($V2, [2, 13]), o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), { 22: [1, 36] }, { 24: [1, 37] }, o($V2, [2, 20]), o($V2, [2, 21]), o($V2, [2, 22]), { 29: [1, 38] }, o($V2, [2, 24]), { 36: [1, 39], 38: [1, 40] }, { 11: [1, 41] }, { 34: 42, 42: [1, 43] }, { 11: [2, 44] }, o($V2, [2, 5]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 23]), o($V2, [2, 27], { 37: [1, 44], 38: [1, 45] }), o($V2, [2, 33], { 36: [1, 46] }), o($Vj, [2, 25]), { 32: 47, 43: $Vi }, { 43: [2, 43] }, o($V2, [2, 28], { 38: [1, 48] }), o($V2, [2, 29]), o($V2, [2, 31], { 37: [1, 49] }), { 11: [1, 50] }, o($V2, [2, 30]), o($V2, [2, 32]), o($Vj, [2, 26])], + defaultActions: { 5: [2, 41], 6: [2, 1], 34: [2, 44], 43: [2, 43] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 40; + case 1: + this.begin("type_directive"); + return 41; + case 2: + this.popState(); + this.begin("arg_directive"); + return 33; + case 3: + this.popState(); + this.popState(); + return 43; + case 4: + return 42; + case 5: + this.begin("acc_title"); + return 21; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 23; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + break; + case 13: + break; + case 14: + break; + case 15: + return 11; + case 16: + break; + case 17: + break; + case 18: + break; + case 19: + this.begin("href"); + break; + case 20: + this.popState(); + break; + case 21: + return 38; + case 22: + this.begin("callbackname"); + break; + case 23: + this.popState(); + break; + case 24: + this.popState(); + this.begin("callbackargs"); + break; + case 25: + return 36; + case 26: + this.popState(); + break; + case 27: + return 37; + case 28: + this.begin("click"); + break; + case 29: + this.popState(); + break; + case 30: + return 35; + case 31: + return 5; + case 32: + return 12; + case 33: + return 13; + case 34: + return 14; + case 35: + return 15; + case 36: + return 16; + case 37: + return 18; + case 38: + return 17; + case 39: + return 19; + case 40: + return "date"; + case 41: + return 20; + case 42: + return "accDescription"; + case 43: + return 26; + case 44: + return 28; + case 45: + return 29; + case 46: + return 33; + case 47: + return 7; + case 48: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%(?!\{)*[^\n]*)/i, /^(?:[^\}]%%*[^\n]*)/i, /^(?:%%*[^\n]*[\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:inclusiveEndDates\b)/i, /^(?:topAxis\b)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:tickInterval\s[^#\n;]+)/i, /^(?:includes\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:todayMarker\s[^\n;]+)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accDescription\s[^#\n;]+)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "callbackargs": { "rules": [26, 27], "inclusive": false }, "callbackname": { "rules": [23, 24, 25], "inclusive": false }, "href": { "rules": [20, 21], "inclusive": false }, "click": { "rules": [29, 30], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 22, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const ganttParser = parser; +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__); +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__); +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__); +let dateFormat = ""; +let axisFormat = ""; +let tickInterval = void 0; +let todayMarker = ""; +let includes = []; +let excludes = []; +let links = {}; +let sections = []; +let tasks = []; +let currentSection = ""; +let displayMode = ""; +const tags = ["active", "done", "crit", "milestone"]; +let funs = []; +let inclusiveEndDates = false; +let topAxis = false; +let lastOrder = 0; +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_7__.m.parseDirective(this, statement, context, type); +}; +const clear = function() { + sections = []; + tasks = []; + currentSection = ""; + funs = []; + taskCnt = 0; + lastTask = void 0; + lastTaskID = void 0; + rawTasks = []; + dateFormat = ""; + axisFormat = ""; + displayMode = ""; + tickInterval = void 0; + todayMarker = ""; + includes = []; + excludes = []; + inclusiveEndDates = false; + topAxis = false; + lastOrder = 0; + links = {}; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.y)(); +}; +const setAxisFormat = function(txt) { + axisFormat = txt; +}; +const getAxisFormat = function() { + return axisFormat; +}; +const setTickInterval = function(txt) { + tickInterval = txt; +}; +const getTickInterval = function() { + return tickInterval; +}; +const setTodayMarker = function(txt) { + todayMarker = txt; +}; +const getTodayMarker = function() { + return todayMarker; +}; +const setDateFormat = function(txt) { + dateFormat = txt; +}; +const enableInclusiveEndDates = function() { + inclusiveEndDates = true; +}; +const endDatesAreInclusive = function() { + return inclusiveEndDates; +}; +const enableTopAxis = function() { + topAxis = true; +}; +const topAxisEnabled = function() { + return topAxis; +}; +const setDisplayMode = function(txt) { + displayMode = txt; +}; +const getDisplayMode = function() { + return displayMode; +}; +const getDateFormat = function() { + return dateFormat; +}; +const setIncludes = function(txt) { + includes = txt.toLowerCase().split(/[\s,]+/); +}; +const getIncludes = function() { + return includes; +}; +const setExcludes = function(txt) { + excludes = txt.toLowerCase().split(/[\s,]+/); +}; +const getExcludes = function() { + return excludes; +}; +const getLinks = function() { + return links; +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 10; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks = rawTasks; + return tasks; +}; +const isInvalidDate = function(date, dateFormat2, excludes2, includes2) { + if (includes2.includes(date.format(dateFormat2.trim()))) { + return false; + } + if (date.isoWeekday() >= 6 && excludes2.includes("weekends")) { + return true; + } + if (excludes2.includes(date.format("dddd").toLowerCase())) { + return true; + } + return excludes2.includes(date.format(dateFormat2.trim())); +}; +const checkTaskDates = function(task, dateFormat2, excludes2, includes2) { + if (!excludes2.length || task.manualEndTime) { + return; + } + let startTime; + if (task.startTime instanceof Date) { + startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime); + } else { + startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime, dateFormat2, true); + } + startTime = startTime.add(1, "d"); + let originalEndTime; + if (task.endTime instanceof Date) { + originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime); + } else { + originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime, dateFormat2, true); + } + const [fixedEndTime, renderEndTime] = fixTaskDates( + startTime, + originalEndTime, + dateFormat2, + excludes2, + includes2 + ); + task.endTime = fixedEndTime.toDate(); + task.renderEndTime = renderEndTime; +}; +const fixTaskDates = function(startTime, endTime, dateFormat2, excludes2, includes2) { + let invalid = false; + let renderEndTime = null; + while (startTime <= endTime) { + if (!invalid) { + renderEndTime = endTime.toDate(); + } + invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2); + if (invalid) { + endTime = endTime.add(1, "d"); + } + startTime = startTime.add(1, "d"); + } + return [endTime, renderEndTime]; +}; +const getStartDate = function(prevTime, dateFormat2, str) { + str = str.trim(); + const re = /^after\s+([\d\w- ]+)/; + const afterStatement = re.exec(str.trim()); + if (afterStatement !== null) { + let latestEndingTask = null; + afterStatement[1].split(" ").forEach(function(id) { + let task = findTaskById(id); + if (task !== void 0) { + if (!latestEndingTask) { + latestEndingTask = task; + } else { + if (task.endTime > latestEndingTask.endTime) { + latestEndingTask = task; + } + } + } + }); + if (!latestEndingTask) { + const dt = new Date(); + dt.setHours(0, 0, 0, 0); + return dt; + } else { + return latestEndingTask.endTime; + } + } + let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); + if (mDate.isValid()) { + return mDate.toDate(); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("Invalid date:" + str); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("With date format:" + dateFormat2.trim()); + const d = new Date(str); + if (d === void 0 || isNaN(d.getTime())) { + throw new Error("Invalid date:" + str); + } + return d; + } +}; +const parseDuration = function(str) { + const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str.trim()); + if (statement !== null) { + return [Number.parseFloat(statement[1]), statement[2]]; + } + return [NaN, "ms"]; +}; +const getEndDate = function(prevTime, dateFormat2, str, inclusive = false) { + str = str.trim(); + let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); + if (mDate.isValid()) { + if (inclusive) { + mDate = mDate.add(1, "d"); + } + return mDate.toDate(); + } + let endTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(prevTime); + const [durationValue, durationUnit] = parseDuration(str); + if (!Number.isNaN(durationValue)) { + const newEndTime = endTime.add(durationValue, durationUnit); + if (newEndTime.isValid()) { + endTime = newEndTime; + } + } + return endTime.toDate(); +}; +let taskCnt = 0; +const parseId = function(idStr) { + if (idStr === void 0) { + taskCnt = taskCnt + 1; + return "task" + taskCnt; + } + return idStr; +}; +const compileData = function(prevTask, dataStr) { + let ds; + if (dataStr.substr(0, 1) === ":") { + ds = dataStr.substr(1, dataStr.length); + } else { + ds = dataStr; + } + const data = ds.split(","); + const task = {}; + getTaskTags(data, task, tags); + for (let i = 0; i < data.length; i++) { + data[i] = data[i].trim(); + } + let endTimeData = ""; + switch (data.length) { + case 1: + task.id = parseId(); + task.startTime = prevTask.endTime; + endTimeData = data[0]; + break; + case 2: + task.id = parseId(); + task.startTime = getStartDate(void 0, dateFormat, data[0]); + endTimeData = data[1]; + break; + case 3: + task.id = parseId(data[0]); + task.startTime = getStartDate(void 0, dateFormat, data[1]); + endTimeData = data[2]; + break; + } + if (endTimeData) { + task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates); + task.manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(endTimeData, "YYYY-MM-DD", true).isValid(); + checkTaskDates(task, dateFormat, excludes, includes); + } + return task; +}; +const parseData = function(prevTaskId, dataStr) { + let ds; + if (dataStr.substr(0, 1) === ":") { + ds = dataStr.substr(1, dataStr.length); + } else { + ds = dataStr; + } + const data = ds.split(","); + const task = {}; + getTaskTags(data, task, tags); + for (let i = 0; i < data.length; i++) { + data[i] = data[i].trim(); + } + switch (data.length) { + case 1: + task.id = parseId(); + task.startTime = { + type: "prevTaskEnd", + id: prevTaskId + }; + task.endTime = { + data: data[0] + }; + break; + case 2: + task.id = parseId(); + task.startTime = { + type: "getStartDate", + startData: data[0] + }; + task.endTime = { + data: data[1] + }; + break; + case 3: + task.id = parseId(data[0]); + task.startTime = { + type: "getStartDate", + startData: data[1] + }; + task.endTime = { + data: data[2] + }; + break; + } + return task; +}; +let lastTask; +let lastTaskID; +let rawTasks = []; +const taskDb = {}; +const addTask = function(descr, data) { + const rawTask = { + section: currentSection, + type: currentSection, + processed: false, + manualEndTime: false, + renderEndTime: null, + raw: { data }, + task: descr, + classes: [] + }; + const taskInfo = parseData(lastTaskID, data); + rawTask.raw.startTime = taskInfo.startTime; + rawTask.raw.endTime = taskInfo.endTime; + rawTask.id = taskInfo.id; + rawTask.prevTaskId = lastTaskID; + rawTask.active = taskInfo.active; + rawTask.done = taskInfo.done; + rawTask.crit = taskInfo.crit; + rawTask.milestone = taskInfo.milestone; + rawTask.order = lastOrder; + lastOrder++; + const pos = rawTasks.push(rawTask); + lastTaskID = rawTask.id; + taskDb[rawTask.id] = pos - 1; +}; +const findTaskById = function(id) { + const pos = taskDb[id]; + return rawTasks[pos]; +}; +const addTaskOrg = function(descr, data) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + const taskInfo = compileData(lastTask, data); + newTask.startTime = taskInfo.startTime; + newTask.endTime = taskInfo.endTime; + newTask.id = taskInfo.id; + newTask.active = taskInfo.active; + newTask.done = taskInfo.done; + newTask.crit = taskInfo.crit; + newTask.milestone = taskInfo.milestone; + lastTask = newTask; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + const task = rawTasks[pos]; + let startTime = ""; + switch (rawTasks[pos].raw.startTime.type) { + case "prevTaskEnd": { + const prevTask = findTaskById(task.prevTaskId); + task.startTime = prevTask.endTime; + break; + } + case "getStartDate": + startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData); + if (startTime) { + rawTasks[pos].startTime = startTime; + } + break; + } + if (rawTasks[pos].startTime) { + rawTasks[pos].endTime = getEndDate( + rawTasks[pos].startTime, + dateFormat, + rawTasks[pos].raw.endTime.data, + inclusiveEndDates + ); + if (rawTasks[pos].endTime) { + rawTasks[pos].processed = true; + rawTasks[pos].manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__( + rawTasks[pos].raw.endTime.data, + "YYYY-MM-DD", + true + ).isValid(); + checkTaskDates(rawTasks[pos], dateFormat, excludes, includes); + } + } + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const setLink = function(ids, _linkStr) { + let linkStr = _linkStr; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().securityLevel !== "loose") { + linkStr = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .N)(_linkStr); + } + ids.split(",").forEach(function(id) { + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + pushFun(id, () => { + window.open(linkStr, "_self"); + }); + links[id] = linkStr; + } + }); + setClass(ids, "clickable"); +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(id) { + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + rawTask.classes.push(className); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + pushFun(id, () => { + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__.u.runFunc(functionName, ...argList); + }); + } +}; +const pushFun = function(id, callbackFunction) { + funs.push( + function() { + const elem = document.querySelector(`[id="${id}"]`); + if (elem !== null) { + elem.addEventListener("click", function() { + callbackFunction(); + }); + } + }, + function() { + const elem = document.querySelector(`[id="${id}-text"]`); + if (elem !== null) { + elem.addEventListener("click", function() { + callbackFunction(); + }); + } + } + ); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const ganttDb = { + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().gantt, + clear, + setDateFormat, + getDateFormat, + enableInclusiveEndDates, + endDatesAreInclusive, + enableTopAxis, + topAxisEnabled, + setAxisFormat, + getAxisFormat, + setTickInterval, + getTickInterval, + setTodayMarker, + getTodayMarker, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.p, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.x, + setDisplayMode, + getDisplayMode, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.v, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.q, + addSection, + getSections, + getTasks, + addTask, + findTaskById, + addTaskOrg, + setIncludes, + getIncludes, + setExcludes, + getExcludes, + setClickEvent, + setLink, + getLinks, + bindFunctions, + parseDuration, + isInvalidDate +}; +function getTaskTags(data, task, tags2) { + let matchFound = true; + while (matchFound) { + matchFound = false; + tags2.forEach(function(t) { + const pattern = "^\\s*" + t + "\\s*$"; + const regex = new RegExp(pattern); + if (data[0].match(regex)) { + task[t] = true; + data.shift(1); + matchFound = true; + } + }); + } +} +const setConf = function() { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.debug("Something is calling, setConf, remove the call"); +}; +const getMaxIntersections = (tasks2, orderOffset) => { + let timeline = [...tasks2].map(() => -Infinity); + let sorted = [...tasks2].sort((a, b) => a.startTime - b.startTime || a.order - b.order); + let maxIntersections = 0; + for (const element of sorted) { + for (let j = 0; j < timeline.length; j++) { + if (element.startTime >= timeline[j]) { + timeline[j] = element.endTime; + element.order = j + orderOffset; + if (j > maxIntersections) { + maxIntersections = j; + } + break; + } + } + } + return maxIntersections; +}; +let w; +const draw = function(text, id, version, diagObj) { + const conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().gantt; + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const elem = doc.getElementById(id); + w = elem.parentElement.offsetWidth; + if (w === void 0) { + w = 1200; + } + if (conf.useWidth !== void 0) { + w = conf.useWidth; + } + const taskArray = diagObj.db.getTasks(); + let categories = []; + for (const element of taskArray) { + categories.push(element.type); + } + categories = checkUnique(categories); + const categoryHeights = {}; + let h = 2 * conf.topPadding; + if (diagObj.db.getDisplayMode() === "compact" || conf.displayMode === "compact") { + const categoryElements = {}; + for (const element of taskArray) { + if (categoryElements[element.section] === void 0) { + categoryElements[element.section] = [element]; + } else { + categoryElements[element.section].push(element); + } + } + let intersections = 0; + for (const category of Object.keys(categoryElements)) { + const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1; + intersections += categoryHeight; + h += categoryHeight * (conf.barHeight + conf.barGap); + categoryHeights[category] = categoryHeight; + } + } else { + h += taskArray.length * (conf.barHeight + conf.barGap); + for (const category of categories) { + categoryHeights[category] = taskArray.filter((task) => task.type === category).length; + } + } + elem.setAttribute("viewBox", "0 0 " + w + " " + h); + const svg = root.select(`[id="${id}"]`); + const timeScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleTime */ .Xf)().domain([ + (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .min */ .VV$)(taskArray, function(d) { + return d.startTime; + }), + (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .max */ .Fp7)(taskArray, function(d) { + return d.endTime; + }) + ]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]); + function taskCompare(a, b) { + const taskA = a.startTime; + const taskB = b.startTime; + let result = 0; + if (taskA > taskB) { + result = 1; + } else if (taskA < taskB) { + result = -1; + } + return result; + } + taskArray.sort(taskCompare); + makeGant(taskArray, w, h); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__.k)(svg, h, w, conf.useMaxWidth); + svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w / 2).attr("y", conf.titleTopMargin).attr("class", "titleText"); + function makeGant(tasks2, pageWidth, pageHeight) { + const barHeight = conf.barHeight; + const gap = barHeight + conf.barGap; + const topPadding = conf.topPadding; + const leftPadding = conf.leftPadding; + const colorScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleLinear */ .BYU)().domain([0, categories.length]).range(["#00B9FA", "#F95002"]).interpolate(d3__WEBPACK_IMPORTED_MODULE_5__/* .interpolateHcl */ .JHv); + drawExcludeDays( + gap, + topPadding, + leftPadding, + pageWidth, + pageHeight, + tasks2, + diagObj.db.getExcludes(), + diagObj.db.getIncludes() + ); + makeGrid(leftPadding, topPadding, pageWidth, pageHeight); + drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth); + vertLabels(gap, topPadding); + drawToday(leftPadding, topPadding, pageWidth, pageHeight); + } + function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) { + const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))]; + const uniqueTasks = uniqueTaskOrderIds.map((id2) => theArray.find((item) => item.order === id2)); + svg.append("g").selectAll("rect").data(uniqueTasks).enter().append("rect").attr("x", 0).attr("y", function(d, i) { + i = d.order; + return i * theGap + theTopPad - 2; + }).attr("width", function() { + return w2 - conf.rightPadding / 2; + }).attr("height", theGap).attr("class", function(d) { + for (const [i, category] of categories.entries()) { + if (d.type === category) { + return "section section" + i % conf.numberSectionStyles; + } + } + return "section section0"; + }); + const rectangles = svg.append("g").selectAll("rect").data(theArray).enter(); + const links2 = diagObj.db.getLinks(); + rectangles.append("rect").attr("id", function(d) { + return d.id; + }).attr("rx", 3).attr("ry", 3).attr("x", function(d) { + if (d.milestone) { + return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; + } + return timeScale(d.startTime) + theSidePad; + }).attr("y", function(d, i) { + i = d.order; + return i * theGap + theTopPad; + }).attr("width", function(d) { + if (d.milestone) { + return theBarHeight; + } + return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime); + }).attr("height", theBarHeight).attr("transform-origin", function(d, i) { + i = d.order; + return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + "px " + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px"; + }).attr("class", function(d) { + const res = "task"; + let classStr = ""; + if (d.classes.length > 0) { + classStr = d.classes.join(" "); + } + let secNum = 0; + for (const [i, category] of categories.entries()) { + if (d.type === category) { + secNum = i % conf.numberSectionStyles; + } + } + let taskClass = ""; + if (d.active) { + if (d.crit) { + taskClass += " activeCrit"; + } else { + taskClass = " active"; + } + } else if (d.done) { + if (d.crit) { + taskClass = " doneCrit"; + } else { + taskClass = " done"; + } + } else { + if (d.crit) { + taskClass += " crit"; + } + } + if (taskClass.length === 0) { + taskClass = " task"; + } + if (d.milestone) { + taskClass = " milestone " + taskClass; + } + taskClass += secNum; + taskClass += " " + classStr; + return res + taskClass; + }); + rectangles.append("text").attr("id", function(d) { + return d.id + "-text"; + }).text(function(d) { + return d.task; + }).attr("font-size", conf.fontSize).attr("x", function(d) { + let startX = timeScale(d.startTime); + let endX = timeScale(d.renderEndTime || d.endTime); + if (d.milestone) { + startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; + } + if (d.milestone) { + endX = startX + theBarHeight; + } + const textWidth = this.getBBox().width; + if (textWidth > endX - startX) { + if (endX + textWidth + 1.5 * conf.leftPadding > w2) { + return startX + theSidePad - 5; + } else { + return endX + theSidePad + 5; + } + } else { + return (endX - startX) / 2 + startX + theSidePad; + } + }).attr("y", function(d, i) { + i = d.order; + return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad; + }).attr("text-height", theBarHeight).attr("class", function(d) { + const startX = timeScale(d.startTime); + let endX = timeScale(d.endTime); + if (d.milestone) { + endX = startX + theBarHeight; + } + const textWidth = this.getBBox().width; + let classStr = ""; + if (d.classes.length > 0) { + classStr = d.classes.join(" "); + } + let secNum = 0; + for (const [i, category] of categories.entries()) { + if (d.type === category) { + secNum = i % conf.numberSectionStyles; + } + } + let taskType = ""; + if (d.active) { + if (d.crit) { + taskType = "activeCritText" + secNum; + } else { + taskType = "activeText" + secNum; + } + } + if (d.done) { + if (d.crit) { + taskType = taskType + " doneCritText" + secNum; + } else { + taskType = taskType + " doneText" + secNum; + } + } else { + if (d.crit) { + taskType = taskType + " critText" + secNum; + } + } + if (d.milestone) { + taskType += " milestoneText"; + } + if (textWidth > endX - startX) { + if (endX + textWidth + 1.5 * conf.leftPadding > w2) { + return classStr + " taskTextOutsideLeft taskTextOutside" + secNum + " " + taskType; + } else { + return classStr + " taskTextOutsideRight taskTextOutside" + secNum + " " + taskType + " width-" + textWidth; + } + } else { + return classStr + " taskText taskText" + secNum + " " + taskType + " width-" + textWidth; + } + }); + const securityLevel2 = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)().securityLevel; + if (securityLevel2 === "sandbox") { + let sandboxElement2; + sandboxElement2 = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("#i" + id); + const doc2 = sandboxElement2.nodes()[0].contentDocument; + rectangles.filter(function(d) { + return links2[d.id] !== void 0; + }).each(function(o) { + var taskRect = doc2.querySelector("#" + o.id); + var taskText = doc2.querySelector("#" + o.id + "-text"); + const oldParent = taskRect.parentNode; + var Link = doc2.createElement("a"); + Link.setAttribute("xlink:href", links2[o.id]); + Link.setAttribute("target", "_top"); + oldParent.appendChild(Link); + Link.appendChild(taskRect); + Link.appendChild(taskText); + }); + } + } + function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) { + const minTime = tasks2.reduce( + (min2, { startTime }) => min2 ? Math.min(min2, startTime) : startTime, + 0 + ); + const maxTime = tasks2.reduce((max2, { endTime }) => max2 ? Math.max(max2, endTime) : endTime, 0); + const dateFormat2 = diagObj.db.getDateFormat(); + if (!minTime || !maxTime) { + return; + } + const excludeRanges = []; + let range = null; + let d = dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime); + while (d.valueOf() <= maxTime) { + if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) { + if (!range) { + range = { + start: d, + end: d + }; + } else { + range.end = d; + } + } else { + if (range) { + excludeRanges.push(range); + range = null; + } + } + d = d.add(1, "d"); + } + const rectangles = svg.append("g").selectAll("rect").data(excludeRanges).enter(); + rectangles.append("rect").attr("id", function(d2) { + return "exclude-" + d2.start.format("YYYY-MM-DD"); + }).attr("x", function(d2) { + return timeScale(d2.start) + theSidePad; + }).attr("y", conf.gridLineStartPadding).attr("width", function(d2) { + const renderEnd = d2.end.add(1, "day"); + return timeScale(renderEnd) - timeScale(d2.start); + }).attr("height", h2 - theTopPad - conf.gridLineStartPadding).attr("transform-origin", function(d2, i) { + return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + "px " + (i * theGap + 0.5 * h2).toString() + "px"; + }).attr("class", "exclude-range"); + } + function makeGrid(theSidePad, theTopPad, w2, h2) { + let bottomXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisBottom */ .LLu)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .i$Z)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); + const reTickInterval = /^([1-9]\d*)(minute|hour|day|week|month)$/; + const resultTickInterval = reTickInterval.exec( + diagObj.db.getTickInterval() || conf.tickInterval + ); + if (resultTickInterval !== null) { + const every = resultTickInterval[1]; + const interval = resultTickInterval[2]; + switch (interval) { + case "minute": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute.every */ .Z_i.every(every)); + break; + case "hour": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour.every */ .WQD.every(every)); + break; + case "day": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay.every */ .rr1.every(every)); + break; + case "week": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeWeek.every */ .NGh.every(every)); + break; + case "month": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth.every */ .F0B.every(every)); + break; + } + } + svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h2 - 50) + ")").call(bottomXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10).attr("dy", "1em"); + if (diagObj.db.topAxisEnabled() || conf.topAxis) { + let topXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisTop */ .F5q)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .i$Z)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); + if (resultTickInterval !== null) { + const every = resultTickInterval[1]; + const interval = resultTickInterval[2]; + switch (interval) { + case "minute": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute.every */ .Z_i.every(every)); + break; + case "hour": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour.every */ .WQD.every(every)); + break; + case "day": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay.every */ .rr1.every(every)); + break; + case "week": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeWeek.every */ .NGh.every(every)); + break; + case "month": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth.every */ .F0B.every(every)); + break; + } + } + svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + theTopPad + ")").call(topXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10); + } + } + function vertLabels(theGap, theTopPad) { + let prevGap = 0; + const numOccurances = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]); + svg.append("g").selectAll("text").data(numOccurances).enter().append(function(d) { + const rows = d[0].split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.e.lineBreakRegex); + const dy = -(rows.length - 1) / 2; + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("dy", dy + "em"); + for (const [j, row] of rows.entries()) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttribute("alignment-baseline", "central"); + tspan.setAttribute("x", "10"); + if (j > 0) { + tspan.setAttribute("dy", "1em"); + } + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + return svgLabel; + }).attr("x", 10).attr("y", function(d, i) { + if (i > 0) { + for (let j = 0; j < i; j++) { + prevGap += numOccurances[i - 1][1]; + return d[1] * theGap / 2 + prevGap * theGap + theTopPad; + } + } else { + return d[1] * theGap / 2 + theTopPad; + } + }).attr("font-size", conf.sectionFontSize).attr("class", function(d) { + for (const [i, category] of categories.entries()) { + if (d[0] === category) { + return "sectionTitle sectionTitle" + i % conf.numberSectionStyles; + } + } + return "sectionTitle"; + }); + } + function drawToday(theSidePad, theTopPad, w2, h2) { + const todayMarker2 = diagObj.db.getTodayMarker(); + if (todayMarker2 === "off") { + return; + } + const todayG = svg.append("g").attr("class", "today"); + const today = new Date(); + const todayLine = todayG.append("line"); + todayLine.attr("x1", timeScale(today) + theSidePad).attr("x2", timeScale(today) + theSidePad).attr("y1", conf.titleTopMargin).attr("y2", h2 - conf.titleTopMargin).attr("class", "today"); + if (todayMarker2 !== "") { + todayLine.attr("style", todayMarker2.replace(/,/g, ";")); + } + } + function checkUnique(arr) { + const hash = {}; + const result = []; + for (let i = 0, l = arr.length; i < l; ++i) { + if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) { + hash[arr[i]] = true; + result.push(arr[i]); + } + } + return result; + } +}; +const ganttRenderer = { + setConf, + draw +}; +const getStyles = (options) => ` + .mermaid-main-font { + font-family: "trebuchet ms", verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + .exclude-range { + fill: ${options.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${options.sectionBkgColor}; + } + + .section2 { + fill: ${options.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${options.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${options.titleColor}; + } + + .sectionTitle1 { + fill: ${options.titleColor}; + } + + .sectionTitle2 { + fill: ${options.titleColor}; + } + + .sectionTitle3 { + fill: ${options.titleColor}; + } + + .sectionTitle { + text-anchor: start; + // font-size: ${options.ganttFontSize}; + // text-height: 14px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${options.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + text { + font-family: ${options.fontFamily}; + fill: ${options.textColor}; + } + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${options.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + + // .taskText:not([font-size]) { + // font-size: ${options.ganttFontSize}; + // } + + .taskTextOutsideRight { + fill: ${options.taskTextDarkColor}; + text-anchor: start; + // font-size: ${options.ganttFontSize}; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + + } + + .taskTextOutsideLeft { + fill: ${options.taskTextDarkColor}; + text-anchor: end; + // font-size: ${options.ganttFontSize}; + } + + /* Special case clickable */ + .task.clickable { + cursor: pointer; + } + .taskText.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${options.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${options.taskBkgColor}; + stroke: ${options.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${options.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${options.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${options.activeTaskBkgColor}; + stroke: ${options.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${options.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${options.doneTaskBorderColor}; + fill: ${options.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${options.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${options.critBorderColor}; + fill: ${options.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${options.critBorderColor}; + fill: ${options.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${options.critBorderColor}; + fill: ${options.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${options.taskTextDarkColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${options.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor} ; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } +`; +const ganttStyles = getStyles; +const diagram = { + parser: ganttParser, + db: ganttDb, + renderer: ganttRenderer, + styles: ganttStyles +}; + +//# sourceMappingURL=ganttDiagram-04e74c0a.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/70f31d65.743b8ce0.js b/assets/js/70f31d65.743b8ce0.js new file mode 100644 index 0000000000..b343d6632e --- /dev/null +++ b/assets/js/70f31d65.743b8ce0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7337],{6233:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>l,frontMatter:()=>o,metadata:()=>E,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));n(5657);const o={},s="TURBINE_EFFICIENCIES",E={unversionedId:"about/references/keywords/TURBINE_EFFICIENCIES",id:"about/references/keywords/TURBINE_EFFICIENCIES",title:"TURBINE_EFFICIENCIES",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE"},next:{title:"TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD"}},i={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],I={toc:c},d="wrapper";function l(e){let{components:t,...n}=e;return(0,a.kt)(d,(0,r.Z)({},I,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"turbine_efficiencies"},"TURBINE_EFFICIENCIES"),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"TURBINE_EFFICIENCIES")," is a required to be specified under the ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"},"TURBINE_MODEL")," keyword."),(0,a.kt)("p",null,"This ",(0,a.kt)("strong",{parentName:"p"},"must")," be specified as a fraction and ",(0,a.kt)("strong",{parentName:"p"},"must")," have equal length to the corresponding ",(0,a.kt)("inlineCode",{parentName:"p"},"TURBINE_LOAD")," values."),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/72083b41.50503fab.js b/assets/js/72083b41.50503fab.js new file mode 100644 index 0000000000..8473595de6 --- /dev/null +++ b/assets/js/72083b41.50503fab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5178],{9881:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>k,frontMatter:()=>l,metadata:()=>o,toc:()=>E});var n=a(7462),i=(a(7294),a(3905));a(5657);const l={},r="TYPE",o={unversionedId:"about/references/keywords/TYPE",id:"about/references/keywords/TYPE",title:"TYPE",description:"[...] /",source:"@site/docs/about/references/keywords/TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"},next:{title:"UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS"}},s={},E=[{value:"Description",id:"description",level:2},{value:"Use in FACILITY_INPUTS",id:"use-in-facility_inputs",level:3},{value:"Use in TIME_SERIES",id:"use-in-time_series",level:3},{value:"Use in ENERGY_USAGE_MODEL",id:"use-in-energy_usage_model",level:3},{value:"Use in MODELS",id:"use-in-models",level:3},{value:"Format",id:"format",level:2}],d={toc:E},u="wrapper";function k(e){let{components:t,...a}=e;return(0,i.kt)(u,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"type"},"TYPE"),(0,i.kt)("p",null,"[...]"," /\n",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," /"),(0,i.kt)("h2",{id:"description"},"Description"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," is always a string. The allowed strings, and the resulting change in behavior,\nwill depend on where ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," is used:"),(0,i.kt)("h3",{id:"use-in-facility_inputs"},"Use in ",(0,i.kt)("a",{parentName:"h3",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ELECTRICITY2FUEL")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"TABULAR")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_TABULAR")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PUMP_CHART_SINGLE_SPEED")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PUMP_CHART_VARIABLE_SPEED"))),(0,i.kt)("h3",{id:"use-in-time_series"},"Use in ",(0,i.kt)("a",{parentName:"h3",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"MISCELLANEOUS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"DEFAULT"))),(0,i.kt)("h3",{id:"use-in-energy_usage_model"},"Use in ",(0,i.kt)("a",{parentName:"h3",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"DIRECT")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"COMPRESSOR")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PUMP")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_SYSTEM")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PUMP_SYSTEM")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"TABULATED")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"))),(0,i.kt)("h3",{id:"use-in-models"},"Use in ",(0,i.kt)("a",{parentName:"h3",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"FLUID")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"VARIABLE_SPEED_COMPRESSOR_TRAIN")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SINGLE_SPEED_COMPRESSOR_TRAIN")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"TURBINE")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_WITH_TURBINE")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"))),(0,i.kt)("h2",{id:"format"},"Format"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"TYPE: <type>\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/721cfe60.f07302aa.js b/assets/js/721cfe60.f07302aa.js new file mode 100644 index 0000000000..6b05063d4f --- /dev/null +++ b/assets/js/721cfe60.f07302aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3802],{1223:(t,o,i)=>{i.r(o),i.d(o,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>n,metadata:()=>r,toc:()=>d});var e=i(7462),a=(i(7294),i(3905));i(5657);const n={title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",sidebar_position:4},s="v8.3 to v8.4",r={unversionedId:"about/migration_guides/v8-3_to_v8-4",id:"about/migration_guides/v8-3_to_v8-4",title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",source:"@site/docs/about/migration_guides/v8-3_to_v8-4.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-3_to_v8-4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-3_to_v8-4.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",sidebar_position:4},sidebar:"about",previous:{title:"v8.2 to v8.3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3"},next:{title:"Output data",permalink:"/ecalc/docs/about/miscellaneous/"}},u={},d=[],v={toc:d},c="wrapper";function m(t){let{components:o,...i}=t;return(0,a.kt)(c,(0,e.Z)({},v,i,{components:o,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"v83-to-v84"},"v8.3 to v8.4"),(0,a.kt)("p",null,"No migration is needed."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/730.3bcc591c.js b/assets/js/730.3bcc591c.js new file mode 100644 index 0000000000..6b704ee0d2 --- /dev/null +++ b/assets/js/730.3bcc591c.js @@ -0,0 +1,795 @@ +"use strict"; +exports.id = 730; +exports.ids = [730]; +exports.modules = { + +/***/ 96730: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(43047); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(81188); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 9], $V5 = [1, 11, 13, 15, 17, 19, 20, 26, 27, 28, 29], $V6 = [2, 5], $V7 = [1, 6, 11, 13, 15, 17, 19, 20, 26, 27, 28, 29], $V8 = [26, 27, 28], $V9 = [2, 8], $Va = [1, 18], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 28], $Vh = [6, 26, 27, 28, 29]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "directive": 5, "PIE": 6, "document": 7, "showData": 8, "line": 9, "statement": 10, "txt": 11, "value": 12, "title": 13, "title_value": 14, "acc_title": 15, "acc_title_value": 16, "acc_descr": 17, "acc_descr_value": 18, "acc_descr_multiline_value": 19, "section": 20, "openDirective": 21, "typeDirective": 22, "closeDirective": 23, ":": 24, "argDirective": 25, "NEWLINE": 26, ";": 27, "EOF": 28, "open_directive": 29, "type_directive": 30, "arg_directive": 31, "close_directive": 32, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "PIE", 8: "showData", 11: "txt", 12: "value", 13: "title", 14: "title_value", 15: "acc_title", 16: "acc_title_value", 17: "acc_descr", 18: "acc_descr_value", 19: "acc_descr_multiline_value", 20: "section", 24: ":", 26: "NEWLINE", 27: ";", 28: "EOF", 29: "open_directive", 30: "type_directive", 31: "arg_directive", 32: "close_directive" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 3], [7, 0], [7, 2], [9, 2], [10, 0], [10, 2], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [5, 3], [5, 5], [4, 1], [4, 1], [4, 1], [21, 1], [22, 1], [25, 1], [23, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setShowData(true); + break; + case 7: + this.$ = $$[$0 - 1]; + break; + case 9: + yy.addSection($$[$0 - 1], yy.cleanupValue($$[$0])); + break; + case 10: + this.$ = $$[$0].trim(); + yy.setDiagramTitle(this.$); + break; + case 11: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 12: + case 13: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 14: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 21: + yy.parseDirective("%%{", "open_directive"); + break; + case 22: + yy.parseDirective($$[$0], "type_directive"); + break; + case 23: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 24: + yy.parseDirective("}%%", "close_directive", "pie"); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, { 3: 11, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, o($V5, $V6, { 7: 12, 8: [1, 13] }), o($V7, [2, 18]), o($V7, [2, 19]), o($V7, [2, 20]), { 22: 14, 30: [1, 15] }, { 30: [2, 21] }, { 1: [2, 1] }, { 1: [2, 2] }, o($V8, $V9, { 21: 8, 9: 16, 10: 17, 5: 24, 1: [2, 3], 11: $Va, 13: $Vb, 15: $Vc, 17: $Vd, 19: $Ve, 20: $Vf, 29: $V4 }), o($V5, $V6, { 7: 25 }), { 23: 26, 24: [1, 27], 32: $Vg }, o([24, 32], [2, 22]), o($V5, [2, 6]), { 4: 29, 26: $V1, 27: $V2, 28: $V3 }, { 12: [1, 30] }, { 14: [1, 31] }, { 16: [1, 32] }, { 18: [1, 33] }, o($V8, [2, 13]), o($V8, [2, 14]), o($V8, [2, 15]), o($V8, $V9, { 21: 8, 9: 16, 10: 17, 5: 24, 1: [2, 4], 11: $Va, 13: $Vb, 15: $Vc, 17: $Vd, 19: $Ve, 20: $Vf, 29: $V4 }), o($Vh, [2, 16]), { 25: 34, 31: [1, 35] }, o($Vh, [2, 24]), o($V5, [2, 7]), o($V8, [2, 9]), o($V8, [2, 10]), o($V8, [2, 11]), o($V8, [2, 12]), { 23: 36, 32: $Vg }, { 32: [2, 23] }, o($Vh, [2, 17])], + defaultActions: { 9: [2, 21], 10: [2, 1], 11: [2, 2], 35: [2, 23] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 29; + case 1: + this.begin("type_directive"); + return 30; + case 2: + this.popState(); + this.begin("arg_directive"); + return 24; + case 3: + this.popState(); + this.popState(); + return 32; + case 4: + return 31; + case 5: + break; + case 6: + break; + case 7: + return 26; + case 8: + break; + case 9: + break; + case 10: + this.begin("title"); + return 13; + case 11: + this.popState(); + return "title_value"; + case 12: + this.begin("acc_title"); + return 15; + case 13: + this.popState(); + return "acc_title_value"; + case 14: + this.begin("acc_descr"); + return 17; + case 15: + this.popState(); + return "acc_descr_value"; + case 16: + this.begin("acc_descr_multiline"); + break; + case 17: + this.popState(); + break; + case 18: + return "acc_descr_multiline_value"; + case 19: + this.begin("string"); + break; + case 20: + this.popState(); + break; + case 21: + return "txt"; + case 22: + return 6; + case 23: + return 8; + case 24: + return "value"; + case 25: + return 28; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:[\s]+)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:pie\b)/i, /^(?:showData\b)/i, /^(?::[\s]*[\d]+(?:\.[\d]+)?)/i, /^(?:$)/i], + conditions: { "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "title": { "rules": [11], "inclusive": false }, "string": { "rules": [20, 21], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 12, 14, 16, 19, 22, 23, 24, 25], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let sections = {}; +let showData = false; +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_4__.m.parseDirective(this, statement, context, type); +}; +const addSection = function(id, value) { + id = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.e.sanitizeText(id, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)()); + if (sections[id] === void 0) { + sections[id] = value; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Added new section :", id); + } +}; +const getSections = () => sections; +const setShowData = function(toggle) { + showData = toggle; +}; +const getShowData = function() { + return showData; +}; +const cleanupValue = function(value) { + if (value.substring(0, 1) === ":") { + value = value.substring(1).trim(); + return Number(value.trim()); + } else { + return Number(value.trim()); + } +}; +const clear = function() { + sections = {}; + showData = false; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.y)(); +}; +const db = { + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().pie, + addSection, + getSections, + cleanupValue, + clear, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.p, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.x, + setShowData, + getShowData, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.v +}; +const getStyles = (options) => ` + .pieCircle{ + stroke: ${options.pieStrokeColor}; + stroke-width : ${options.pieStrokeWidth}; + opacity : ${options.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${options.pieOuterStrokeColor}; + stroke-width: ${options.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${options.pieTitleTextSize}; + fill: ${options.pieTitleTextColor}; + font-family: ${options.fontFamily}; + } + .slice { + font-family: ${options.fontFamily}; + fill: ${options.pieSectionTextColor}; + font-size:${options.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${options.pieLegendTextColor}; + font-family: ${options.fontFamily}; + font-size: ${options.pieLegendTextSize}; + } +`; +const styles = getStyles; +let conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)(); +let width; +const height = 450; +const draw = (txt, id, _version, diagObj) => { + var _a; + try { + conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Rendering info diagram\n" + txt); + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + diagObj.db.clear(); + diagObj.parser.parse(txt); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Parsed info diagram"); + const elem = doc.getElementById(id); + width = elem.parentElement.offsetWidth; + if (width === void 0) { + width = 1200; + } + if (conf.useWidth !== void 0) { + width = conf.useWidth; + } + if (conf.pie.useWidth !== void 0) { + width = conf.pie.useWidth; + } + const diagram2 = root.select("#" + id); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.k)(diagram2, height, width, conf.pie.useMaxWidth); + elem.setAttribute("viewBox", "0 0 " + width + " " + height); + var margin = 40; + var legendRectSize = 18; + var legendSpacing = 4; + var radius = Math.min(width, height) / 2 - margin; + var svg = diagram2.append("g").attr("transform", "translate(" + width / 2 + "," + height / 2 + ")"); + var data = diagObj.db.getSections(); + var sum = 0; + Object.keys(data).forEach(function(key) { + sum += data[key]; + }); + const themeVariables = conf.themeVariables; + var myGeneratedColors = [ + themeVariables.pie1, + themeVariables.pie2, + themeVariables.pie3, + themeVariables.pie4, + themeVariables.pie5, + themeVariables.pie6, + themeVariables.pie7, + themeVariables.pie8, + themeVariables.pie9, + themeVariables.pie10, + themeVariables.pie11, + themeVariables.pie12 + ]; + const textPosition = ((_a = conf.pie) == null ? void 0 : _a.textPosition) ?? 0.75; + let [outerStrokeWidth] = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.x)(themeVariables.pieOuterStrokeWidth); + outerStrokeWidth ?? (outerStrokeWidth = 2); + var color = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleOrdinal */ .PKp)().range(myGeneratedColors); + var pieData = Object.entries(data).map(function(el, idx) { + return { + order: idx, + name: el[0], + value: el[1] + }; + }); + var pie$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .pie */ .ve8)().value(function(d) { + return d.value; + }).sort(function(a, b) { + return a.order - b.order; + }); + var dataReady = pie$1(pieData); + var arcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().innerRadius(0).outerRadius(radius); + var labelArcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().innerRadius(radius * textPosition).outerRadius(radius * textPosition); + svg.append("circle").attr("cx", 0).attr("cy", 0).attr("r", radius + outerStrokeWidth / 2).attr("class", "pieOuterCircle"); + svg.selectAll("mySlices").data(dataReady).enter().append("path").attr("d", arcGenerator).attr("fill", function(d) { + return color(d.data.name); + }).attr("class", "pieCircle"); + svg.selectAll("mySlices").data(dataReady).enter().append("text").text(function(d) { + return (d.data.value / sum * 100).toFixed(0) + "%"; + }).attr("transform", function(d) { + return "translate(" + labelArcGenerator.centroid(d) + ")"; + }).style("text-anchor", "middle").attr("class", "slice"); + svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", 0).attr("y", -(height - 50) / 2).attr("class", "pieTitleText"); + var legend = svg.selectAll(".legend").data(color.domain()).enter().append("g").attr("class", "legend").attr("transform", function(d, i) { + const height2 = legendRectSize + legendSpacing; + const offset = height2 * color.domain().length / 2; + const horizontal = 12 * legendRectSize; + const vertical = i * height2 - offset; + return "translate(" + horizontal + "," + vertical + ")"; + }); + legend.append("rect").attr("width", legendRectSize).attr("height", legendRectSize).style("fill", color).style("stroke", color); + legend.data(dataReady).append("text").attr("x", legendRectSize + legendSpacing).attr("y", legendRectSize - legendSpacing).text(function(d) { + if (diagObj.db.getShowData() || conf.showData || conf.pie.showData) { + return d.data.name + " [" + d.data.value + "]"; + } else { + return d.data.name; + } + }); + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.error("Error while rendering info diagram"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.error(e); + } +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + +//# sourceMappingURL=pieDiagram-db1a8a21.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/733.0245fcf3.js b/assets/js/733.0245fcf3.js new file mode 100644 index 0000000000..d2a598e92c --- /dev/null +++ b/assets/js/733.0245fcf3.js @@ -0,0 +1,2557 @@ +"use strict"; +exports.id = 733; +exports.ids = [733]; +exports.modules = { + +/***/ 46733: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(43047); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(81188); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 6], $V1 = [1, 7], $V2 = [1, 8], $V3 = [1, 9], $V4 = [1, 16], $V5 = [1, 11], $V6 = [1, 12], $V7 = [1, 13], $V8 = [1, 14], $V9 = [1, 15], $Va = [1, 27], $Vb = [1, 33], $Vc = [1, 34], $Vd = [1, 35], $Ve = [1, 36], $Vf = [1, 37], $Vg = [1, 72], $Vh = [1, 73], $Vi = [1, 74], $Vj = [1, 75], $Vk = [1, 76], $Vl = [1, 77], $Vm = [1, 78], $Vn = [1, 38], $Vo = [1, 39], $Vp = [1, 40], $Vq = [1, 41], $Vr = [1, 42], $Vs = [1, 43], $Vt = [1, 44], $Vu = [1, 45], $Vv = [1, 46], $Vw = [1, 47], $Vx = [1, 48], $Vy = [1, 49], $Vz = [1, 50], $VA = [1, 51], $VB = [1, 52], $VC = [1, 53], $VD = [1, 54], $VE = [1, 55], $VF = [1, 56], $VG = [1, 57], $VH = [1, 59], $VI = [1, 60], $VJ = [1, 61], $VK = [1, 62], $VL = [1, 63], $VM = [1, 64], $VN = [1, 65], $VO = [1, 66], $VP = [1, 67], $VQ = [1, 68], $VR = [1, 69], $VS = [24, 52], $VT = [24, 44, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], $VU = [15, 24, 44, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], $VV = [1, 94], $VW = [1, 95], $VX = [1, 96], $VY = [1, 97], $VZ = [15, 24, 52], $V_ = [7, 8, 9, 10, 18, 22, 25, 26, 27, 28], $V$ = [15, 24, 43, 52], $V01 = [15, 24, 43, 52, 86, 87, 89, 90], $V11 = [15, 43], $V21 = [44, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "direction": 5, "directive": 6, "direction_tb": 7, "direction_bt": 8, "direction_rl": 9, "direction_lr": 10, "graphConfig": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, "NEWLINE": 15, ":": 16, "argDirective": 17, "open_directive": 18, "type_directive": 19, "arg_directive": 20, "close_directive": 21, "C4_CONTEXT": 22, "statements": 23, "EOF": 24, "C4_CONTAINER": 25, "C4_COMPONENT": 26, "C4_DYNAMIC": 27, "C4_DEPLOYMENT": 28, "otherStatements": 29, "diagramStatements": 30, "otherStatement": 31, "title": 32, "accDescription": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "boundaryStatement": 39, "boundaryStartStatement": 40, "boundaryStopStatement": 41, "boundaryStart": 42, "LBRACE": 43, "ENTERPRISE_BOUNDARY": 44, "attributes": 45, "SYSTEM_BOUNDARY": 46, "BOUNDARY": 47, "CONTAINER_BOUNDARY": 48, "NODE": 49, "NODE_L": 50, "NODE_R": 51, "RBRACE": 52, "diagramStatement": 53, "PERSON": 54, "PERSON_EXT": 55, "SYSTEM": 56, "SYSTEM_DB": 57, "SYSTEM_QUEUE": 58, "SYSTEM_EXT": 59, "SYSTEM_EXT_DB": 60, "SYSTEM_EXT_QUEUE": 61, "CONTAINER": 62, "CONTAINER_DB": 63, "CONTAINER_QUEUE": 64, "CONTAINER_EXT": 65, "CONTAINER_EXT_DB": 66, "CONTAINER_EXT_QUEUE": 67, "COMPONENT": 68, "COMPONENT_DB": 69, "COMPONENT_QUEUE": 70, "COMPONENT_EXT": 71, "COMPONENT_EXT_DB": 72, "COMPONENT_EXT_QUEUE": 73, "REL": 74, "BIREL": 75, "REL_U": 76, "REL_D": 77, "REL_L": 78, "REL_R": 79, "REL_B": 80, "REL_INDEX": 81, "UPDATE_EL_STYLE": 82, "UPDATE_REL_STYLE": 83, "UPDATE_LAYOUT_CONFIG": 84, "attribute": 85, "STR": 86, "STR_KEY": 87, "STR_VALUE": 88, "ATTRIBUTE": 89, "ATTRIBUTE_EMPTY": 90, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 7: "direction_tb", 8: "direction_bt", 9: "direction_rl", 10: "direction_lr", 15: "NEWLINE", 16: ":", 18: "open_directive", 19: "type_directive", 20: "arg_directive", 21: "close_directive", 22: "C4_CONTEXT", 24: "EOF", 25: "C4_CONTAINER", 26: "C4_COMPONENT", 27: "C4_DYNAMIC", 28: "C4_DEPLOYMENT", 32: "title", 33: "accDescription", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 43: "LBRACE", 44: "ENTERPRISE_BOUNDARY", 46: "SYSTEM_BOUNDARY", 47: "BOUNDARY", 48: "CONTAINER_BOUNDARY", 49: "NODE", 50: "NODE_L", 51: "NODE_R", 52: "RBRACE", 54: "PERSON", 55: "PERSON_EXT", 56: "SYSTEM", 57: "SYSTEM_DB", 58: "SYSTEM_QUEUE", 59: "SYSTEM_EXT", 60: "SYSTEM_EXT_DB", 61: "SYSTEM_EXT_QUEUE", 62: "CONTAINER", 63: "CONTAINER_DB", 64: "CONTAINER_QUEUE", 65: "CONTAINER_EXT", 66: "CONTAINER_EXT_DB", 67: "CONTAINER_EXT_QUEUE", 68: "COMPONENT", 69: "COMPONENT_DB", 70: "COMPONENT_QUEUE", 71: "COMPONENT_EXT", 72: "COMPONENT_EXT_DB", 73: "COMPONENT_EXT_QUEUE", 74: "REL", 75: "BIREL", 76: "REL_U", 77: "REL_D", 78: "REL_L", 79: "REL_R", 80: "REL_B", 81: "REL_INDEX", 82: "UPDATE_EL_STYLE", 83: "UPDATE_REL_STYLE", 84: "UPDATE_LAYOUT_CONFIG", 86: "STR", 87: "STR_KEY", 88: "STR_VALUE", 89: "ATTRIBUTE", 90: "ATTRIBUTE_EMPTY" }, + productions_: [0, [3, 1], [3, 1], [3, 2], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [6, 4], [6, 6], [12, 1], [13, 1], [17, 1], [14, 1], [11, 4], [11, 4], [11, 4], [11, 4], [11, 4], [23, 1], [23, 1], [23, 2], [29, 1], [29, 2], [29, 3], [31, 1], [31, 1], [31, 2], [31, 2], [31, 1], [39, 3], [40, 3], [40, 3], [40, 4], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [41, 1], [30, 1], [30, 2], [30, 3], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 1], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [45, 1], [45, 2], [85, 1], [85, 2], [85, 1], [85, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setDirection("TB"); + break; + case 5: + yy.setDirection("BT"); + break; + case 6: + yy.setDirection("RL"); + break; + case 7: + yy.setDirection("LR"); + break; + case 11: + yy.parseDirective("%%{", "open_directive"); + break; + case 12: + break; + case 13: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 14: + yy.parseDirective("}%%", "close_directive", "c4Context"); + break; + case 15: + case 16: + case 17: + case 18: + case 19: + yy.setC4Type($$[$0 - 3]); + break; + case 26: + yy.setTitle($$[$0].substring(6)); + this.$ = $$[$0].substring(6); + break; + case 27: + yy.setAccDescription($$[$0].substring(15)); + this.$ = $$[$0].substring(15); + break; + case 28: + this.$ = $$[$0].trim(); + yy.setTitle(this.$); + break; + case 29: + case 30: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 35: + case 36: + $$[$0].splice(2, 0, "ENTERPRISE"); + yy.addPersonOrSystemBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 37: + yy.addPersonOrSystemBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 38: + $$[$0].splice(2, 0, "CONTAINER"); + yy.addContainerBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 39: + yy.addDeploymentNode("node", ...$$[$0]); + this.$ = $$[$0]; + break; + case 40: + yy.addDeploymentNode("nodeL", ...$$[$0]); + this.$ = $$[$0]; + break; + case 41: + yy.addDeploymentNode("nodeR", ...$$[$0]); + this.$ = $$[$0]; + break; + case 42: + yy.popBoundaryParseStack(); + break; + case 46: + yy.addPersonOrSystem("person", ...$$[$0]); + this.$ = $$[$0]; + break; + case 47: + yy.addPersonOrSystem("external_person", ...$$[$0]); + this.$ = $$[$0]; + break; + case 48: + yy.addPersonOrSystem("system", ...$$[$0]); + this.$ = $$[$0]; + break; + case 49: + yy.addPersonOrSystem("system_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 50: + yy.addPersonOrSystem("system_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 51: + yy.addPersonOrSystem("external_system", ...$$[$0]); + this.$ = $$[$0]; + break; + case 52: + yy.addPersonOrSystem("external_system_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 53: + yy.addPersonOrSystem("external_system_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 54: + yy.addContainer("container", ...$$[$0]); + this.$ = $$[$0]; + break; + case 55: + yy.addContainer("container_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 56: + yy.addContainer("container_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 57: + yy.addContainer("external_container", ...$$[$0]); + this.$ = $$[$0]; + break; + case 58: + yy.addContainer("external_container_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 59: + yy.addContainer("external_container_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 60: + yy.addComponent("component", ...$$[$0]); + this.$ = $$[$0]; + break; + case 61: + yy.addComponent("component_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 62: + yy.addComponent("component_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 63: + yy.addComponent("external_component", ...$$[$0]); + this.$ = $$[$0]; + break; + case 64: + yy.addComponent("external_component_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 65: + yy.addComponent("external_component_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 67: + yy.addRel("rel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 68: + yy.addRel("birel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 69: + yy.addRel("rel_u", ...$$[$0]); + this.$ = $$[$0]; + break; + case 70: + yy.addRel("rel_d", ...$$[$0]); + this.$ = $$[$0]; + break; + case 71: + yy.addRel("rel_l", ...$$[$0]); + this.$ = $$[$0]; + break; + case 72: + yy.addRel("rel_r", ...$$[$0]); + this.$ = $$[$0]; + break; + case 73: + yy.addRel("rel_b", ...$$[$0]); + this.$ = $$[$0]; + break; + case 74: + $$[$0].splice(0, 1); + yy.addRel("rel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 75: + yy.updateElStyle("update_el_style", ...$$[$0]); + this.$ = $$[$0]; + break; + case 76: + yy.updateRelStyle("update_rel_style", ...$$[$0]); + this.$ = $$[$0]; + break; + case 77: + yy.updateLayoutConfig("update_layout_config", ...$$[$0]); + this.$ = $$[$0]; + break; + case 78: + this.$ = [$$[$0]]; + break; + case 79: + $$[$0].unshift($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 80: + case 82: + this.$ = $$[$0].trim(); + break; + case 81: + let kv = {}; + kv[$$[$0 - 1].trim()] = $$[$0].trim(); + this.$ = kv; + break; + case 83: + this.$ = ""; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: $V0, 8: $V1, 9: $V2, 10: $V3, 11: 5, 12: 10, 18: $V4, 22: $V5, 25: $V6, 26: $V7, 27: $V8, 28: $V9 }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 3: 17, 4: 2, 5: 3, 6: 4, 7: $V0, 8: $V1, 9: $V2, 10: $V3, 11: 5, 12: 10, 18: $V4, 22: $V5, 25: $V6, 26: $V7, 27: $V8, 28: $V9 }, { 1: [2, 8] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 1: [2, 7] }, { 13: 18, 19: [1, 19] }, { 15: [1, 20] }, { 15: [1, 21] }, { 15: [1, 22] }, { 15: [1, 23] }, { 15: [1, 24] }, { 19: [2, 11] }, { 1: [2, 3] }, { 14: 25, 16: [1, 26], 21: $Va }, o([16, 21], [2, 12]), { 23: 28, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 79, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 80, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 81, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 82, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 15: [1, 83] }, { 17: 84, 20: [1, 85] }, { 15: [2, 14] }, { 24: [1, 86] }, o($VS, [2, 20], { 53: 32, 39: 58, 40: 70, 42: 71, 30: 87, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }), o($VS, [2, 21]), o($VT, [2, 23], { 15: [1, 88] }), o($VS, [2, 43], { 15: [1, 89] }), o($VU, [2, 26]), o($VU, [2, 27]), { 35: [1, 90] }, { 37: [1, 91] }, o($VU, [2, 30]), { 45: 92, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 98, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 99, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 100, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 101, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 102, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 103, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 104, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 105, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 106, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 107, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 108, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 109, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 110, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 111, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 112, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 113, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 114, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 115, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 116, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, o($VZ, [2, 66]), { 45: 117, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 118, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 119, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 120, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 121, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 122, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 123, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 124, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 125, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 126, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 127, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 30: 128, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 15: [1, 130], 43: [1, 129] }, { 45: 131, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 132, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 133, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 134, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 135, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 136, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 137, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 24: [1, 138] }, { 24: [1, 139] }, { 24: [1, 140] }, { 24: [1, 141] }, o($V_, [2, 9]), { 14: 142, 21: $Va }, { 21: [2, 13] }, { 1: [2, 15] }, o($VS, [2, 22]), o($VT, [2, 24], { 31: 31, 29: 143, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf }), o($VS, [2, 44], { 29: 29, 30: 30, 31: 31, 53: 32, 39: 58, 40: 70, 42: 71, 23: 144, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }), o($VU, [2, 28]), o($VU, [2, 29]), o($VZ, [2, 46]), o($V$, [2, 78], { 85: 93, 45: 145, 86: $VV, 87: $VW, 89: $VX, 90: $VY }), o($V01, [2, 80]), { 88: [1, 146] }, o($V01, [2, 82]), o($V01, [2, 83]), o($VZ, [2, 47]), o($VZ, [2, 48]), o($VZ, [2, 49]), o($VZ, [2, 50]), o($VZ, [2, 51]), o($VZ, [2, 52]), o($VZ, [2, 53]), o($VZ, [2, 54]), o($VZ, [2, 55]), o($VZ, [2, 56]), o($VZ, [2, 57]), o($VZ, [2, 58]), o($VZ, [2, 59]), o($VZ, [2, 60]), o($VZ, [2, 61]), o($VZ, [2, 62]), o($VZ, [2, 63]), o($VZ, [2, 64]), o($VZ, [2, 65]), o($VZ, [2, 67]), o($VZ, [2, 68]), o($VZ, [2, 69]), o($VZ, [2, 70]), o($VZ, [2, 71]), o($VZ, [2, 72]), o($VZ, [2, 73]), o($VZ, [2, 74]), o($VZ, [2, 75]), o($VZ, [2, 76]), o($VZ, [2, 77]), { 41: 147, 52: [1, 148] }, { 15: [1, 149] }, { 43: [1, 150] }, o($V11, [2, 35]), o($V11, [2, 36]), o($V11, [2, 37]), o($V11, [2, 38]), o($V11, [2, 39]), o($V11, [2, 40]), o($V11, [2, 41]), { 1: [2, 16] }, { 1: [2, 17] }, { 1: [2, 18] }, { 1: [2, 19] }, { 15: [1, 151] }, o($VT, [2, 25]), o($VS, [2, 45]), o($V$, [2, 79]), o($V01, [2, 81]), o($VZ, [2, 31]), o($VZ, [2, 42]), o($V21, [2, 32]), o($V21, [2, 33], { 15: [1, 152] }), o($V_, [2, 10]), o($V21, [2, 34])], + defaultActions: { 2: [2, 1], 3: [2, 2], 5: [2, 8], 6: [2, 4], 7: [2, 5], 8: [2, 6], 9: [2, 7], 16: [2, 11], 17: [2, 3], 27: [2, 14], 85: [2, 13], 86: [2, 15], 138: [2, 16], 139: [2, 17], 140: [2, 18], 141: [2, 19] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c2 = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c2 + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 18; + case 1: + return 7; + case 2: + return 8; + case 3: + return 9; + case 4: + return 10; + case 5: + this.begin("type_directive"); + return 19; + case 6: + this.popState(); + this.begin("arg_directive"); + return 16; + case 7: + this.popState(); + this.popState(); + return 21; + case 8: + return 20; + case 9: + return 32; + case 10: + return 33; + case 11: + this.begin("acc_title"); + return 34; + case 12: + this.popState(); + return "acc_title_value"; + case 13: + this.begin("acc_descr"); + return 36; + case 14: + this.popState(); + return "acc_descr_value"; + case 15: + this.begin("acc_descr_multiline"); + break; + case 16: + this.popState(); + break; + case 17: + return "acc_descr_multiline_value"; + case 18: + break; + case 19: + c; + break; + case 20: + return 15; + case 21: + break; + case 22: + return 22; + case 23: + return 25; + case 24: + return 26; + case 25: + return 27; + case 26: + return 28; + case 27: + this.begin("person_ext"); + return 55; + case 28: + this.begin("person"); + return 54; + case 29: + this.begin("system_ext_queue"); + return 61; + case 30: + this.begin("system_ext_db"); + return 60; + case 31: + this.begin("system_ext"); + return 59; + case 32: + this.begin("system_queue"); + return 58; + case 33: + this.begin("system_db"); + return 57; + case 34: + this.begin("system"); + return 56; + case 35: + this.begin("boundary"); + return 47; + case 36: + this.begin("enterprise_boundary"); + return 44; + case 37: + this.begin("system_boundary"); + return 46; + case 38: + this.begin("container_ext_queue"); + return 67; + case 39: + this.begin("container_ext_db"); + return 66; + case 40: + this.begin("container_ext"); + return 65; + case 41: + this.begin("container_queue"); + return 64; + case 42: + this.begin("container_db"); + return 63; + case 43: + this.begin("container"); + return 62; + case 44: + this.begin("container_boundary"); + return 48; + case 45: + this.begin("component_ext_queue"); + return 73; + case 46: + this.begin("component_ext_db"); + return 72; + case 47: + this.begin("component_ext"); + return 71; + case 48: + this.begin("component_queue"); + return 70; + case 49: + this.begin("component_db"); + return 69; + case 50: + this.begin("component"); + return 68; + case 51: + this.begin("node"); + return 49; + case 52: + this.begin("node"); + return 49; + case 53: + this.begin("node_l"); + return 50; + case 54: + this.begin("node_r"); + return 51; + case 55: + this.begin("rel"); + return 74; + case 56: + this.begin("birel"); + return 75; + case 57: + this.begin("rel_u"); + return 76; + case 58: + this.begin("rel_u"); + return 76; + case 59: + this.begin("rel_d"); + return 77; + case 60: + this.begin("rel_d"); + return 77; + case 61: + this.begin("rel_l"); + return 78; + case 62: + this.begin("rel_l"); + return 78; + case 63: + this.begin("rel_r"); + return 79; + case 64: + this.begin("rel_r"); + return 79; + case 65: + this.begin("rel_b"); + return 80; + case 66: + this.begin("rel_index"); + return 81; + case 67: + this.begin("update_el_style"); + return 82; + case 68: + this.begin("update_rel_style"); + return 83; + case 69: + this.begin("update_layout_config"); + return 84; + case 70: + return "EOF_IN_STRUCT"; + case 71: + this.begin("attribute"); + return "ATTRIBUTE_EMPTY"; + case 72: + this.begin("attribute"); + break; + case 73: + this.popState(); + this.popState(); + break; + case 74: + return 90; + case 75: + break; + case 76: + return 90; + case 77: + this.begin("string"); + break; + case 78: + this.popState(); + break; + case 79: + return "STR"; + case 80: + this.begin("string_kv"); + break; + case 81: + this.begin("string_kv_key"); + return "STR_KEY"; + case 82: + this.popState(); + this.begin("string_kv_value"); + break; + case 83: + return "STR_VALUE"; + case 84: + this.popState(); + this.popState(); + break; + case 85: + return "STR"; + case 86: + return "LBRACE"; + case 87: + return "RBRACE"; + case 88: + return "SPACE"; + case 89: + return "EOL"; + case 90: + return 24; + } + }, + rules: [/^(?:%%\{)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:title\s[^#\n;]+)/, /^(?:accDescription\s[^#\n;]+)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:C4Context\b)/, /^(?:C4Container\b)/, /^(?:C4Component\b)/, /^(?:C4Dynamic\b)/, /^(?:C4Deployment\b)/, /^(?:Person_Ext\b)/, /^(?:Person\b)/, /^(?:SystemQueue_Ext\b)/, /^(?:SystemDb_Ext\b)/, /^(?:System_Ext\b)/, /^(?:SystemQueue\b)/, /^(?:SystemDb\b)/, /^(?:System\b)/, /^(?:Boundary\b)/, /^(?:Enterprise_Boundary\b)/, /^(?:System_Boundary\b)/, /^(?:ContainerQueue_Ext\b)/, /^(?:ContainerDb_Ext\b)/, /^(?:Container_Ext\b)/, /^(?:ContainerQueue\b)/, /^(?:ContainerDb\b)/, /^(?:Container\b)/, /^(?:Container_Boundary\b)/, /^(?:ComponentQueue_Ext\b)/, /^(?:ComponentDb_Ext\b)/, /^(?:Component_Ext\b)/, /^(?:ComponentQueue\b)/, /^(?:ComponentDb\b)/, /^(?:Component\b)/, /^(?:Deployment_Node\b)/, /^(?:Node\b)/, /^(?:Node_L\b)/, /^(?:Node_R\b)/, /^(?:Rel\b)/, /^(?:BiRel\b)/, /^(?:Rel_Up\b)/, /^(?:Rel_U\b)/, /^(?:Rel_Down\b)/, /^(?:Rel_D\b)/, /^(?:Rel_Left\b)/, /^(?:Rel_L\b)/, /^(?:Rel_Right\b)/, /^(?:Rel_R\b)/, /^(?:Rel_Back\b)/, /^(?:RelIndex\b)/, /^(?:UpdateElementStyle\b)/, /^(?:UpdateRelStyle\b)/, /^(?:UpdateLayoutConfig\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*["]["])/, /^(?:[ ]*["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[ ]*[\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:[^,]+)/, /^(?:\{)/, /^(?:\})/, /^(?:[\s]+)/, /^(?:[\n\r]+)/, /^(?:$)/], + conditions: { "acc_descr_multiline": { "rules": [16, 17], "inclusive": false }, "acc_descr": { "rules": [14], "inclusive": false }, "acc_title": { "rules": [12], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [7, 8], "inclusive": false }, "type_directive": { "rules": [6, 7], "inclusive": false }, "open_directive": { "rules": [5], "inclusive": false }, "string_kv_value": { "rules": [83, 84], "inclusive": false }, "string_kv_key": { "rules": [82], "inclusive": false }, "string_kv": { "rules": [81], "inclusive": false }, "string": { "rules": [78, 79], "inclusive": false }, "attribute": { "rules": [73, 74, 75, 76, 77, 80, 85], "inclusive": false }, "update_layout_config": { "rules": [70, 71, 72, 73], "inclusive": false }, "update_rel_style": { "rules": [70, 71, 72, 73], "inclusive": false }, "update_el_style": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_b": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_r": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_l": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_d": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_u": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_bi": { "rules": [], "inclusive": false }, "rel": { "rules": [70, 71, 72, 73], "inclusive": false }, "node_r": { "rules": [70, 71, 72, 73], "inclusive": false }, "node_l": { "rules": [70, 71, 72, 73], "inclusive": false }, "node": { "rules": [70, 71, 72, 73], "inclusive": false }, "index": { "rules": [], "inclusive": false }, "rel_index": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_ext_queue": { "rules": [], "inclusive": false }, "component_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "component": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_ext_queue": { "rules": [], "inclusive": false }, "container_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "container": { "rules": [70, 71, 72, 73], "inclusive": false }, "birel": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "enterprise_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "system": { "rules": [70, 71, 72, 73], "inclusive": false }, "person_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "person": { "rules": [70, 71, 72, 73], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 88, 89, 90], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const c4Parser = parser; +let c4ShapeArray = []; +let boundaryParseStack = [""]; +let currentBoundaryParse = "global"; +let parentBoundaryParse = ""; +let boundarys = [ + { + alias: "global", + label: { text: "global" }, + type: { text: "global" }, + tags: null, + link: null, + parentBoundary: "" + } +]; +let rels = []; +let title = ""; +let wrapEnabled = false; +let c4ShapeInRow$1 = 4; +let c4BoundaryInRow$1 = 2; +var c4Type; +const getC4Type = function() { + return c4Type; +}; +const setC4Type = function(c4TypeParam) { + let sanitizedText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.b)(c4TypeParam, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + c4Type = sanitizedText; +}; +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_5__.m.parseDirective(this, statement, context, type); +}; +const addRel = function(type, from, to, label, techn, descr, sprite, tags, link) { + if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) { + return; + } + let rel = {}; + const old = rels.find((rel2) => rel2.from === from && rel2.to === to); + if (old) { + rel = old; + } else { + rels.push(rel); + } + rel.type = type; + rel.from = from; + rel.to = to; + rel.label = { text: label }; + if (techn === void 0 || techn === null) { + rel.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + rel[key] = { text: value }; + } else { + rel.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + rel.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + rel[key] = { text: value }; + } else { + rel.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + rel[key] = value; + } else { + rel.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + rel[key] = value; + } else { + rel.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + rel[key] = value; + } else { + rel.link = link; + } + rel.wrap = autoWrap(); +}; +const addPersonOrSystem = function(typeC4Shape, alias, label, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let personOrSystem = {}; + const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias); + if (old && alias === old.alias) { + personOrSystem = old; + } else { + personOrSystem.alias = alias; + c4ShapeArray.push(personOrSystem); + } + if (label === void 0 || label === null) { + personOrSystem.label = { text: "" }; + } else { + personOrSystem.label = { text: label }; + } + if (descr === void 0 || descr === null) { + personOrSystem.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + personOrSystem[key] = { text: value }; + } else { + personOrSystem.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.link = link; + } + personOrSystem.typeC4Shape = { text: typeC4Shape }; + personOrSystem.parentBoundary = currentBoundaryParse; + personOrSystem.wrap = autoWrap(); +}; +const addContainer = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let container = {}; + const old = c4ShapeArray.find((container2) => container2.alias === alias); + if (old && alias === old.alias) { + container = old; + } else { + container.alias = alias; + c4ShapeArray.push(container); + } + if (label === void 0 || label === null) { + container.label = { text: "" }; + } else { + container.label = { text: label }; + } + if (techn === void 0 || techn === null) { + container.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + container[key] = { text: value }; + } else { + container.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + container.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + container[key] = { text: value }; + } else { + container.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + container[key] = value; + } else { + container.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + container[key] = value; + } else { + container.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + container[key] = value; + } else { + container.link = link; + } + container.wrap = autoWrap(); + container.typeC4Shape = { text: typeC4Shape }; + container.parentBoundary = currentBoundaryParse; +}; +const addComponent = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let component = {}; + const old = c4ShapeArray.find((component2) => component2.alias === alias); + if (old && alias === old.alias) { + component = old; + } else { + component.alias = alias; + c4ShapeArray.push(component); + } + if (label === void 0 || label === null) { + component.label = { text: "" }; + } else { + component.label = { text: label }; + } + if (techn === void 0 || techn === null) { + component.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + component[key] = { text: value }; + } else { + component.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + component.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + component[key] = { text: value }; + } else { + component.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + component[key] = value; + } else { + component.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + component[key] = value; + } else { + component.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + component[key] = value; + } else { + component.link = link; + } + component.wrap = autoWrap(); + component.typeC4Shape = { text: typeC4Shape }; + component.parentBoundary = currentBoundaryParse; +}; +const addPersonOrSystemBoundary = function(alias, label, type, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "system" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const addContainerBoundary = function(alias, label, type, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "container" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const addDeploymentNode = function(nodeType, alias, label, type, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "node" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (descr === void 0 || descr === null) { + boundary.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + boundary[key] = { text: value }; + } else { + boundary.descr = { text: descr }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.nodeType = nodeType; + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const popBoundaryParseStack = function() { + currentBoundaryParse = parentBoundaryParse; + boundaryParseStack.pop(); + parentBoundaryParse = boundaryParseStack.pop(); + boundaryParseStack.push(parentBoundaryParse); +}; +const updateElStyle = function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) { + let old = c4ShapeArray.find((element) => element.alias === elementName); + if (old === void 0) { + old = boundarys.find((element) => element.alias === elementName); + if (old === void 0) { + return; + } + } + if (bgColor !== void 0 && bgColor !== null) { + if (typeof bgColor === "object") { + let [key, value] = Object.entries(bgColor)[0]; + old[key] = value; + } else { + old.bgColor = bgColor; + } + } + if (fontColor !== void 0 && fontColor !== null) { + if (typeof fontColor === "object") { + let [key, value] = Object.entries(fontColor)[0]; + old[key] = value; + } else { + old.fontColor = fontColor; + } + } + if (borderColor !== void 0 && borderColor !== null) { + if (typeof borderColor === "object") { + let [key, value] = Object.entries(borderColor)[0]; + old[key] = value; + } else { + old.borderColor = borderColor; + } + } + if (shadowing !== void 0 && shadowing !== null) { + if (typeof shadowing === "object") { + let [key, value] = Object.entries(shadowing)[0]; + old[key] = value; + } else { + old.shadowing = shadowing; + } + } + if (shape !== void 0 && shape !== null) { + if (typeof shape === "object") { + let [key, value] = Object.entries(shape)[0]; + old[key] = value; + } else { + old.shape = shape; + } + } + if (sprite !== void 0 && sprite !== null) { + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + old[key] = value; + } else { + old.sprite = sprite; + } + } + if (techn !== void 0 && techn !== null) { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + old[key] = value; + } else { + old.techn = techn; + } + } + if (legendText !== void 0 && legendText !== null) { + if (typeof legendText === "object") { + let [key, value] = Object.entries(legendText)[0]; + old[key] = value; + } else { + old.legendText = legendText; + } + } + if (legendSprite !== void 0 && legendSprite !== null) { + if (typeof legendSprite === "object") { + let [key, value] = Object.entries(legendSprite)[0]; + old[key] = value; + } else { + old.legendSprite = legendSprite; + } + } +}; +const updateRelStyle = function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) { + const old = rels.find((rel) => rel.from === from && rel.to === to); + if (old === void 0) { + return; + } + if (textColor !== void 0 && textColor !== null) { + if (typeof textColor === "object") { + let [key, value] = Object.entries(textColor)[0]; + old[key] = value; + } else { + old.textColor = textColor; + } + } + if (lineColor !== void 0 && lineColor !== null) { + if (typeof lineColor === "object") { + let [key, value] = Object.entries(lineColor)[0]; + old[key] = value; + } else { + old.lineColor = lineColor; + } + } + if (offsetX !== void 0 && offsetX !== null) { + if (typeof offsetX === "object") { + let [key, value] = Object.entries(offsetX)[0]; + old[key] = parseInt(value); + } else { + old.offsetX = parseInt(offsetX); + } + } + if (offsetY !== void 0 && offsetY !== null) { + if (typeof offsetY === "object") { + let [key, value] = Object.entries(offsetY)[0]; + old[key] = parseInt(value); + } else { + old.offsetY = parseInt(offsetY); + } + } +}; +const updateLayoutConfig = function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) { + let c4ShapeInRowValue = c4ShapeInRow$1; + let c4BoundaryInRowValue = c4BoundaryInRow$1; + if (typeof c4ShapeInRowParam === "object") { + const value = Object.values(c4ShapeInRowParam)[0]; + c4ShapeInRowValue = parseInt(value); + } else { + c4ShapeInRowValue = parseInt(c4ShapeInRowParam); + } + if (typeof c4BoundaryInRowParam === "object") { + const value = Object.values(c4BoundaryInRowParam)[0]; + c4BoundaryInRowValue = parseInt(value); + } else { + c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam); + } + if (c4ShapeInRowValue >= 1) { + c4ShapeInRow$1 = c4ShapeInRowValue; + } + if (c4BoundaryInRowValue >= 1) { + c4BoundaryInRow$1 = c4BoundaryInRowValue; + } +}; +const getC4ShapeInRow = function() { + return c4ShapeInRow$1; +}; +const getC4BoundaryInRow = function() { + return c4BoundaryInRow$1; +}; +const getCurrentBoundaryParse = function() { + return currentBoundaryParse; +}; +const getParentBoundaryParse = function() { + return parentBoundaryParse; +}; +const getC4ShapeArray = function(parentBoundary) { + if (parentBoundary === void 0 || parentBoundary === null) { + return c4ShapeArray; + } else { + return c4ShapeArray.filter((personOrSystem) => { + return personOrSystem.parentBoundary === parentBoundary; + }); + } +}; +const getC4Shape = function(alias) { + return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias); +}; +const getC4ShapeKeys = function(parentBoundary) { + return Object.keys(getC4ShapeArray(parentBoundary)); +}; +const getBoundarys = function(parentBoundary) { + if (parentBoundary === void 0 || parentBoundary === null) { + return boundarys; + } else { + return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary); + } +}; +const getRels = function() { + return rels; +}; +const getTitle = function() { + return title; +}; +const setWrap = function(wrapSetting) { + wrapEnabled = wrapSetting; +}; +const autoWrap = function() { + return wrapEnabled; +}; +const clear = function() { + c4ShapeArray = []; + boundarys = [ + { + alias: "global", + label: { text: "global" }, + type: { text: "global" }, + tags: null, + link: null, + parentBoundary: "" + } + ]; + parentBoundaryParse = ""; + currentBoundaryParse = "global"; + boundaryParseStack = [""]; + rels = []; + boundaryParseStack = [""]; + title = ""; + wrapEnabled = false; + c4ShapeInRow$1 = 4; + c4BoundaryInRow$1 = 2; +}; +const LINETYPE = { + SOLID: 0, + DOTTED: 1, + NOTE: 2, + SOLID_CROSS: 3, + DOTTED_CROSS: 4, + SOLID_OPEN: 5, + DOTTED_OPEN: 6, + LOOP_START: 10, + LOOP_END: 11, + ALT_START: 12, + ALT_ELSE: 13, + ALT_END: 14, + OPT_START: 15, + OPT_END: 16, + ACTIVE_START: 17, + ACTIVE_END: 18, + PAR_START: 19, + PAR_AND: 20, + PAR_END: 21, + RECT_START: 22, + RECT_END: 23, + SOLID_POINT: 24, + DOTTED_POINT: 25 +}; +const ARROWTYPE = { + FILLED: 0, + OPEN: 1 +}; +const PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 +}; +const setTitle = function(txt) { + let sanitizedText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.b)(txt, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)()); + title = sanitizedText; +}; +const c4Db = { + addPersonOrSystem, + addPersonOrSystemBoundary, + addContainer, + addContainerBoundary, + addComponent, + addDeploymentNode, + popBoundaryParseStack, + addRel, + updateElStyle, + updateRelStyle, + updateLayoutConfig, + autoWrap, + setWrap, + getC4ShapeArray, + getC4Shape, + getC4ShapeKeys, + getBoundarys, + getCurrentBoundaryParse, + getParentBoundaryParse, + getRels, + getTitle, + getC4Type, + getC4ShapeInRow, + getC4BoundaryInRow, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.p, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.v, + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().c4, + clear, + LINETYPE, + ARROWTYPE, + PLACEMENT, + setTitle, + setC4Type + // apply, +}; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.attrs !== "undefined" && rectData.attrs !== null) { + for (let attrKey in rectData.attrs) { + rectElem.attr(attrKey, rectData.attrs[attrKey]); + } + } + if (rectData.class !== "undefined") { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const drawImage = function(elem, width, height, x, y, link) { + const imageElem = elem.append("image"); + imageElem.attr("width", width); + imageElem.attr("height", height); + imageElem.attr("x", x); + imageElem.attr("y", y); + let sanitizedLink = link.startsWith("data:image/png;base64") ? link : (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .N)(link); + imageElem.attr("xlink:href", sanitizedLink); +}; +const drawRels$1 = (elem, rels2, conf2) => { + const relsElem = elem.append("g"); + let i = 0; + for (let rel of rels2) { + let textColor = rel.textColor ? rel.textColor : "#444444"; + let strokeColor = rel.lineColor ? rel.lineColor : "#444444"; + let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0; + let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0; + let url = ""; + if (i === 0) { + let line = relsElem.append("line"); + line.attr("x1", rel.startPoint.x); + line.attr("y1", rel.startPoint.y); + line.attr("x2", rel.endPoint.x); + line.attr("y2", rel.endPoint.y); + line.attr("stroke-width", "1"); + line.attr("stroke", strokeColor); + line.style("fill", "none"); + if (rel.type !== "rel_b") { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (rel.type === "birel" || rel.type === "rel_b") { + line.attr("marker-start", "url(" + url + "#arrowend)"); + } + i = -1; + } else { + let line = relsElem.append("path"); + line.attr("fill", "none").attr("stroke-width", "1").attr("stroke", strokeColor).attr( + "d", + "Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx", rel.startPoint.x).replaceAll("starty", rel.startPoint.y).replaceAll( + "controlx", + rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4 + ).replaceAll("controly", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll("stopx", rel.endPoint.x).replaceAll("stopy", rel.endPoint.y) + ); + if (rel.type !== "rel_b") { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (rel.type === "birel" || rel.type === "rel_b") { + line.attr("marker-start", "url(" + url + "#arrowend)"); + } + } + let messageConf = conf2.messageFont(); + _drawTextCandidateFunc(conf2)( + rel.label.text, + relsElem, + Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, + Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY, + rel.label.width, + rel.label.height, + { fill: textColor }, + messageConf + ); + if (rel.techn && rel.techn.text !== "") { + messageConf = conf2.messageFont(); + _drawTextCandidateFunc(conf2)( + "[" + rel.techn.text + "]", + relsElem, + Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, + Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY, + Math.max(rel.label.width, rel.techn.width), + rel.techn.height, + { fill: textColor, "font-style": "italic" }, + messageConf + ); + } + } +}; +const drawBoundary$1 = function(elem, boundary, conf2) { + const boundaryElem = elem.append("g"); + let fillColor = boundary.bgColor ? boundary.bgColor : "none"; + let strokeColor = boundary.borderColor ? boundary.borderColor : "#444444"; + let fontColor = boundary.fontColor ? boundary.fontColor : "black"; + let attrsValue = { "stroke-width": 1, "stroke-dasharray": "7.0,7.0" }; + if (boundary.nodeType) { + attrsValue = { "stroke-width": 1 }; + } + let rectData = { + x: boundary.x, + y: boundary.y, + fill: fillColor, + stroke: strokeColor, + width: boundary.width, + height: boundary.height, + rx: 2.5, + ry: 2.5, + attrs: attrsValue + }; + drawRect(boundaryElem, rectData); + let boundaryConf = conf2.boundaryFont(); + boundaryConf.fontWeight = "bold"; + boundaryConf.fontSize = boundaryConf.fontSize + 2; + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.label.text, + boundaryElem, + boundary.x, + boundary.y + boundary.label.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + if (boundary.type && boundary.type.text !== "") { + boundaryConf = conf2.boundaryFont(); + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.type.text, + boundaryElem, + boundary.x, + boundary.y + boundary.type.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + } + if (boundary.descr && boundary.descr.text !== "") { + boundaryConf = conf2.boundaryFont(); + boundaryConf.fontSize = boundaryConf.fontSize - 2; + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.descr.text, + boundaryElem, + boundary.x, + boundary.y + boundary.descr.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + } +}; +const drawC4Shape = function(elem, c4Shape, conf2) { + var _a; + let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + "_bg_color"]; + let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + "_border_color"]; + let fontColor = c4Shape.fontColor ? c4Shape.fontColor : "#FFFFFF"; + let personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; + switch (c4Shape.typeC4Shape.text) { + case "person": + personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; + break; + case "external_person": + personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="; + break; + } + const c4ShapeElem = elem.append("g"); + c4ShapeElem.attr("class", "person-man"); + const rect = getNoteRect(); + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + case "system": + case "external_system": + case "container": + case "external_container": + case "component": + case "external_component": + rect.x = c4Shape.x; + rect.y = c4Shape.y; + rect.fill = fillColor; + rect.width = c4Shape.width; + rect.height = c4Shape.height; + rect.stroke = strokeColor; + rect.rx = 2.5; + rect.ry = 2.5; + rect.attrs = { "stroke-width": 0.5 }; + drawRect(c4ShapeElem, rect); + break; + case "system_db": + case "external_system_db": + case "container_db": + case "external_container_db": + case "component_db": + case "external_component_db": + c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2).replaceAll("height", c4Shape.height) + ); + c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2) + ); + break; + case "system_queue": + case "external_system_queue": + case "container_queue": + case "external_container_queue": + case "component_queue": + case "external_component_queue": + c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("width", c4Shape.width).replaceAll("half", c4Shape.height / 2) + ); + c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx", c4Shape.x + c4Shape.width).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.height / 2) + ); + break; + } + let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text); + c4ShapeElem.append("text").attr("fill", fontColor).attr("font-family", c4ShapeFontConf.fontFamily).attr("font-size", c4ShapeFontConf.fontSize - 2).attr("font-style", "italic").attr("lengthAdjust", "spacing").attr("textLength", c4Shape.typeC4Shape.width).attr("x", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr("y", c4Shape.y + c4Shape.typeC4Shape.Y).text("<<" + c4Shape.typeC4Shape.text + ">>"); + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + drawImage( + c4ShapeElem, + 48, + 48, + c4Shape.x + c4Shape.width / 2 - 24, + c4Shape.y + c4Shape.image.Y, + personImg + ); + break; + } + let textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); + textFontConf.fontWeight = "bold"; + textFontConf.fontSize = textFontConf.fontSize + 2; + textFontConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + c4Shape.label.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.label.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor }, + textFontConf + ); + textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); + textFontConf.fontColor = fontColor; + if (c4Shape.techn && ((_a = c4Shape.techn) == null ? void 0 : _a.text) !== "") { + _drawTextCandidateFunc(conf2)( + c4Shape.techn.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.techn.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor, "font-style": "italic" }, + textFontConf + ); + } else if (c4Shape.type && c4Shape.type.text !== "") { + _drawTextCandidateFunc(conf2)( + c4Shape.type.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.type.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor, "font-style": "italic" }, + textFontConf + ); + } + if (c4Shape.descr && c4Shape.descr.text !== "") { + textFontConf = conf2.personFont(); + textFontConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + c4Shape.descr.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.descr.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor }, + textFontConf + ); + } + return c4Shape.height; +}; +const insertDatabaseIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" + ); +}; +const insertComputerIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" + ); +}; +const insertClockIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" + ); +}; +const insertArrowHead = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z"); +}; +const insertArrowEnd = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowend").attr("refX", 1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 10 0 L 0 5 L 10 10 z"); +}; +const insertArrowFilledHead = function(elem) { + elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const insertDynamicNumber = function(elem) { + elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); +}; +const insertArrowCrossHead = function(elem) { + const defs = elem.append("defs"); + const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 16).attr("refY", 4); + marker.append("path").attr("fill", "black").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 9,2 V 6 L16,4 Z"); + marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 0,1 L 6,7 M 6,1 L 0,7"); +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + fill: "#EDF2AE", + stroke: "#666", + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const getC4ShapeFont = (cnf, typeC4Shape) => { + return { + fontFamily: cnf[typeC4Shape + "FontFamily"], + fontSize: cnf[typeC4Shape + "FontSize"], + fontWeight: cnf[typeC4Shape + "FontWeight"] + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { fontSize, fontFamily, fontWeight } = conf2; + const lines = content.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * fontSize - fontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").attr("dominant-baseline", "middle").style("font-size", fontSize).style("font-weight", fontWeight).style("font-family", fontFamily); + text.append("tspan").attr("dy", dy).text(lines[i]).attr("alignment-baseline", "mathematical"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const svgDraw = { + drawRect, + drawBoundary: drawBoundary$1, + drawC4Shape, + drawRels: drawRels$1, + drawImage, + insertArrowHead, + insertArrowEnd, + insertArrowFilledHead, + insertDynamicNumber, + insertArrowCrossHead, + insertDatabaseIcon, + insertComputerIcon, + insertClockIcon, + getNoteRect, + sanitizeUrl: _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .N + // TODO why is this exported? +}; +let globalBoundaryMaxX = 0, globalBoundaryMaxY = 0; +let c4ShapeInRow = 4; +let c4BoundaryInRow = 2; +parser.yy = c4Db; +let conf = {}; +class Bounds { + constructor(diagObj) { + this.name = ""; + this.data = {}; + this.data.startx = void 0; + this.data.stopx = void 0; + this.data.starty = void 0; + this.data.stopy = void 0; + this.data.widthLimit = void 0; + this.nextData = {}; + this.nextData.startx = void 0; + this.nextData.stopx = void 0; + this.nextData.starty = void 0; + this.nextData.stopy = void 0; + this.nextData.cnt = 0; + setConf(diagObj.db.getConfig()); + } + setData(startx, stopx, starty, stopy) { + this.nextData.startx = this.data.startx = startx; + this.nextData.stopx = this.data.stopx = stopx; + this.nextData.starty = this.data.starty = starty; + this.nextData.stopy = this.data.stopy = stopy; + } + updateVal(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + } + insert(c4Shape) { + this.nextData.cnt = this.nextData.cnt + 1; + let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2; + let _stopx = _startx + c4Shape.width; + let _starty = this.nextData.starty + c4Shape.margin * 2; + let _stopy = _starty + c4Shape.height; + if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow) { + _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX; + _starty = this.nextData.stopy + c4Shape.margin * 2; + this.nextData.stopx = _stopx = _startx + c4Shape.width; + this.nextData.starty = this.nextData.stopy; + this.nextData.stopy = _stopy = _starty + c4Shape.height; + this.nextData.cnt = 1; + } + c4Shape.x = _startx; + c4Shape.y = _starty; + this.updateVal(this.data, "startx", _startx, Math.min); + this.updateVal(this.data, "starty", _starty, Math.min); + this.updateVal(this.data, "stopx", _stopx, Math.max); + this.updateVal(this.data, "stopy", _stopy, Math.max); + this.updateVal(this.nextData, "startx", _startx, Math.min); + this.updateVal(this.nextData, "starty", _starty, Math.min); + this.updateVal(this.nextData, "stopx", _stopx, Math.max); + this.updateVal(this.nextData, "stopy", _stopy, Math.max); + } + init(diagObj) { + this.name = ""; + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0, + widthLimit: void 0 + }; + this.nextData = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0, + cnt: 0 + }; + setConf(diagObj.db.getConfig()); + } + bumpLastMargin(margin) { + this.data.stopx += margin; + this.data.stopy += margin; + } +} +const setConf = function(cnf) { + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.d)(conf, cnf); + if (cnf.fontFamily) { + conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; +const c4ShapeFont = (cnf, typeC4Shape) => { + return { + fontFamily: cnf[typeC4Shape + "FontFamily"], + fontSize: cnf[typeC4Shape + "FontSize"], + fontWeight: cnf[typeC4Shape + "FontWeight"] + }; +}; +const boundaryFont = (cnf) => { + return { + fontFamily: cnf.boundaryFontFamily, + fontSize: cnf.boundaryFontSize, + fontWeight: cnf.boundaryFontWeight + }; +}; +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight + }; +}; +function calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) { + if (!c4Shape[textType].width) { + if (c4ShapeTextWrap) { + c4Shape[textType].text = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.w)(c4Shape[textType].text, textLimitWidth, textConf); + c4Shape[textType].textLines = c4Shape[textType].text.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex).length; + c4Shape[textType].width = textLimitWidth; + c4Shape[textType].height = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.m)(c4Shape[textType].text, textConf); + } else { + let lines = c4Shape[textType].text.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + c4Shape[textType].textLines = lines.length; + let lineHeight = 0; + c4Shape[textType].height = 0; + c4Shape[textType].width = 0; + for (const line of lines) { + c4Shape[textType].width = Math.max( + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.j)(line, textConf), + c4Shape[textType].width + ); + lineHeight = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.m)(line, textConf); + c4Shape[textType].height = c4Shape[textType].height + lineHeight; + } + } + } +} +const drawBoundary = function(diagram2, boundary, bounds) { + boundary.x = bounds.data.startx; + boundary.y = bounds.data.starty; + boundary.width = bounds.data.stopx - bounds.data.startx; + boundary.height = bounds.data.stopy - bounds.data.starty; + boundary.label.y = conf.c4ShapeMargin - 35; + let boundaryTextWrap = boundary.wrap && conf.wrap; + let boundaryLabelConf = boundaryFont(conf); + boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2; + boundaryLabelConf.fontWeight = "bold"; + let textLimitWidth = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.j)(boundary.label.text, boundaryLabelConf); + calcC4ShapeTextWH("label", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth); + svgDraw.drawBoundary(diagram2, boundary, conf); +}; +const drawC4ShapeArray = function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) { + let Y = 0; + for (const c4ShapeKey of c4ShapeKeys) { + Y = 0; + const c4Shape = c4ShapeArray2[c4ShapeKey]; + let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2; + c4Shape.typeC4Shape.width = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.j)( + "<<" + c4Shape.typeC4Shape.text + ">>", + c4ShapeTypeConf + ); + c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2; + c4Shape.typeC4Shape.Y = conf.c4ShapePadding; + Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4; + c4Shape.image = { width: 0, height: 0, Y: 0 }; + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + c4Shape.image.width = 48; + c4Shape.image.height = 48; + c4Shape.image.Y = Y; + Y = c4Shape.image.Y + c4Shape.image.height; + break; + } + if (c4Shape.sprite) { + c4Shape.image.width = 48; + c4Shape.image.height = 48; + c4Shape.image.Y = Y; + Y = c4Shape.image.Y + c4Shape.image.height; + } + let c4ShapeTextWrap = c4Shape.wrap && conf.wrap; + let textLimitWidth = conf.width - conf.c4ShapePadding * 2; + let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2; + c4ShapeLabelConf.fontWeight = "bold"; + calcC4ShapeTextWH("label", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth); + c4Shape["label"].Y = Y + 8; + Y = c4Shape["label"].Y + c4Shape["label"].height; + if (c4Shape.type && c4Shape.type.text !== "") { + c4Shape.type.text = "[" + c4Shape.type.text + "]"; + let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + calcC4ShapeTextWH("type", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth); + c4Shape["type"].Y = Y + 5; + Y = c4Shape["type"].Y + c4Shape["type"].height; + } else if (c4Shape.techn && c4Shape.techn.text !== "") { + c4Shape.techn.text = "[" + c4Shape.techn.text + "]"; + let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text); + calcC4ShapeTextWH("techn", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth); + c4Shape["techn"].Y = Y + 5; + Y = c4Shape["techn"].Y + c4Shape["techn"].height; + } + let rectHeight = Y; + let rectWidth = c4Shape.label.width; + if (c4Shape.descr && c4Shape.descr.text !== "") { + let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + calcC4ShapeTextWH("descr", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth); + c4Shape["descr"].Y = Y + 20; + Y = c4Shape["descr"].Y + c4Shape["descr"].height; + rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width); + rectHeight = Y - c4Shape["descr"].textLines * 5; + } + rectWidth = rectWidth + conf.c4ShapePadding; + c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width); + c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height); + c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin; + currentBounds.insert(c4Shape); + svgDraw.drawC4Shape(diagram2, c4Shape, conf); + } + currentBounds.bumpLastMargin(conf.c4ShapeMargin); +}; +class Point { + constructor(x, y) { + this.x = x; + this.y = y; + } +} +let getIntersectPoint = function(fromNode, endPoint) { + let x1 = fromNode.x; + let y1 = fromNode.y; + let x2 = endPoint.x; + let y2 = endPoint.y; + let fromCenterX = x1 + fromNode.width / 2; + let fromCenterY = y1 + fromNode.height / 2; + let dx = Math.abs(x1 - x2); + let dy = Math.abs(y1 - y2); + let tanDYX = dy / dx; + let fromDYX = fromNode.height / fromNode.width; + let returnPoint = null; + if (y1 == y2 && x1 < x2) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY); + } else if (y1 == y2 && x1 > x2) { + returnPoint = new Point(x1, fromCenterY); + } else if (x1 == x2 && y1 < y2) { + returnPoint = new Point(fromCenterX, y1 + fromNode.height); + } else if (x1 == x2 && y1 > y2) { + returnPoint = new Point(fromCenterX, y1); + } + if (x1 > x2 && y1 < y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point( + fromCenterX - dx / dy * fromNode.height / 2, + y1 + fromNode.height + ); + } + } else if (x1 < x2 && y1 < y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point( + fromCenterX + dx / dy * fromNode.height / 2, + y1 + fromNode.height + ); + } + } else if (x1 < x2 && y1 > y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1); + } + } else if (x1 > x2 && y1 > y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX); + } else { + returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1); + } + } + return returnPoint; +}; +let getIntersectPoints = function(fromNode, endNode) { + let endIntersectPoint = { x: 0, y: 0 }; + endIntersectPoint.x = endNode.x + endNode.width / 2; + endIntersectPoint.y = endNode.y + endNode.height / 2; + let startPoint = getIntersectPoint(fromNode, endIntersectPoint); + endIntersectPoint.x = fromNode.x + fromNode.width / 2; + endIntersectPoint.y = fromNode.y + fromNode.height / 2; + let endPoint = getIntersectPoint(endNode, endIntersectPoint); + return { startPoint, endPoint }; +}; +const drawRels = function(diagram2, rels2, getC4ShapeObj, diagObj) { + let i = 0; + for (let rel of rels2) { + i = i + 1; + let relTextWrap = rel.wrap && conf.wrap; + let relConf = messageFont(conf); + let diagramType = diagObj.db.getC4Type(); + if (diagramType === "C4Dynamic") { + rel.label.text = i + ": " + rel.label.text; + } + let textLimitWidth = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.j)(rel.label.text, relConf); + calcC4ShapeTextWH("label", rel, relTextWrap, relConf, textLimitWidth); + if (rel.techn && rel.techn.text !== "") { + textLimitWidth = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.j)(rel.techn.text, relConf); + calcC4ShapeTextWH("techn", rel, relTextWrap, relConf, textLimitWidth); + } + if (rel.descr && rel.descr.text !== "") { + textLimitWidth = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.j)(rel.descr.text, relConf); + calcC4ShapeTextWH("descr", rel, relTextWrap, relConf, textLimitWidth); + } + let fromNode = getC4ShapeObj(rel.from); + let endNode = getC4ShapeObj(rel.to); + let points = getIntersectPoints(fromNode, endNode); + rel.startPoint = points.startPoint; + rel.endPoint = points.endPoint; + } + svgDraw.drawRels(diagram2, rels2, conf); +}; +function drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) { + let currentBounds = new Bounds(diagObj); + currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length); + for (let [i, currentBoundary] of currentBoundaries.entries()) { + let Y = 0; + currentBoundary.image = { width: 0, height: 0, Y: 0 }; + if (currentBoundary.sprite) { + currentBoundary.image.width = 48; + currentBoundary.image.height = 48; + currentBoundary.image.Y = Y; + Y = currentBoundary.image.Y + currentBoundary.image.height; + } + let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap; + let currentBoundaryLabelConf = boundaryFont(conf); + currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2; + currentBoundaryLabelConf.fontWeight = "bold"; + calcC4ShapeTextWH( + "label", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryLabelConf, + currentBounds.data.widthLimit + ); + currentBoundary["label"].Y = Y + 8; + Y = currentBoundary["label"].Y + currentBoundary["label"].height; + if (currentBoundary.type && currentBoundary.type.text !== "") { + currentBoundary.type.text = "[" + currentBoundary.type.text + "]"; + let currentBoundaryTypeConf = boundaryFont(conf); + calcC4ShapeTextWH( + "type", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryTypeConf, + currentBounds.data.widthLimit + ); + currentBoundary["type"].Y = Y + 5; + Y = currentBoundary["type"].Y + currentBoundary["type"].height; + } + if (currentBoundary.descr && currentBoundary.descr.text !== "") { + let currentBoundaryDescrConf = boundaryFont(conf); + currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2; + calcC4ShapeTextWH( + "descr", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryDescrConf, + currentBounds.data.widthLimit + ); + currentBoundary["descr"].Y = Y + 20; + Y = currentBoundary["descr"].Y + currentBoundary["descr"].height; + } + if (i == 0 || i % c4BoundaryInRow === 0) { + let _x = parentBounds.data.startx + conf.diagramMarginX; + let _y = parentBounds.data.stopy + conf.diagramMarginY + Y; + currentBounds.setData(_x, _x, _y, _y); + } else { + let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx; + let _y = currentBounds.data.starty; + currentBounds.setData(_x, _x, _y, _y); + } + currentBounds.name = currentBoundary.alias; + let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias); + let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias); + if (currentPersonOrSystemKeys.length > 0) { + drawC4ShapeArray( + currentBounds, + diagram2, + currentPersonOrSystemArray, + currentPersonOrSystemKeys + ); + } + parentBoundaryAlias = currentBoundary.alias; + let nextCurrentBoundarys = diagObj.db.getBoundarys(parentBoundaryAlias); + if (nextCurrentBoundarys.length > 0) { + drawInsideBoundary( + diagram2, + parentBoundaryAlias, + currentBounds, + nextCurrentBoundarys, + diagObj + ); + } + if (currentBoundary.alias !== "global") { + drawBoundary(diagram2, currentBoundary, currentBounds); + } + parentBounds.data.stopy = Math.max( + currentBounds.data.stopy + conf.c4ShapeMargin, + parentBounds.data.stopy + ); + parentBounds.data.stopx = Math.max( + currentBounds.data.stopx + conf.c4ShapeMargin, + parentBounds.data.stopx + ); + globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx); + globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy); + } +} +const draw = function(_text, id, _version, diagObj) { + conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().c4; + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + let db = diagObj.db; + diagObj.db.setWrap(conf.wrap); + c4ShapeInRow = db.getC4ShapeInRow(); + c4BoundaryInRow = db.getC4BoundaryInRow(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`C:${JSON.stringify(conf, null, 2)}`); + const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + svgDraw.insertComputerIcon(diagram2); + svgDraw.insertDatabaseIcon(diagram2); + svgDraw.insertClockIcon(diagram2); + let screenBounds = new Bounds(diagObj); + screenBounds.setData( + conf.diagramMarginX, + conf.diagramMarginX, + conf.diagramMarginY, + conf.diagramMarginY + ); + screenBounds.data.widthLimit = screen.availWidth; + globalBoundaryMaxX = conf.diagramMarginX; + globalBoundaryMaxY = conf.diagramMarginY; + const title2 = diagObj.db.getTitle(); + let currentBoundaries = diagObj.db.getBoundarys(""); + drawInsideBoundary(diagram2, "", screenBounds, currentBoundaries, diagObj); + svgDraw.insertArrowHead(diagram2); + svgDraw.insertArrowEnd(diagram2); + svgDraw.insertArrowCrossHead(diagram2); + svgDraw.insertArrowFilledHead(diagram2); + drawRels(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj); + screenBounds.data.stopx = globalBoundaryMaxX; + screenBounds.data.stopy = globalBoundaryMaxY; + const box = screenBounds.data; + let boxHeight = box.stopy - box.starty; + let height = boxHeight + 2 * conf.diagramMarginY; + let boxWidth = box.stopx - box.startx; + const width = boxWidth + 2 * conf.diagramMarginX; + if (title2) { + diagram2.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr("y", box.starty + conf.diagramMarginY); + } + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.k)(diagram2, height, width, conf.useMaxWidth); + const extraVertForTitle = title2 ? 60 : 0; + diagram2.attr( + "viewBox", + box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, box); +}; +const c4Renderer = { + drawPersonOrSystemArray: drawC4ShapeArray, + drawBoundary, + setConf, + draw +}; +const getStyles = (options) => `.person { + stroke: ${options.personBorder}; + fill: ${options.personBkg}; + } +`; +const c4Styles = getStyles; +const diagram = { + parser: c4Parser, + db: c4Db, + renderer: c4Renderer, + styles: c4Styles, + init: (cnf) => { + c4Renderer.setConf(cnf.c4); + } +}; + +//# sourceMappingURL=c4Diagram-44c43e89.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/7514af75.cff1fdc2.js b/assets/js/7514af75.cff1fdc2.js new file mode 100644 index 0000000000..688d306671 --- /dev/null +++ b/assets/js/7514af75.cff1fdc2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6305],{1012:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>E,toc:()=>l});var r=n(7462),a=(n(7294),n(3905));n(5657);const o={},s="FUELRATE",E={unversionedId:"about/references/keywords/FUELRATE",id:"about/references/keywords/FUELRATE",title:"FUELRATE",description:"INSTALLATIONS",source:"@site/docs/about/references/keywords/FUELRATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUELRATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},next:{title:"FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:l},i="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(i,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"fuelrate"},"FUELRATE"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),"\n/\n","[...]"," /\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELRATE"},"FUELRATE")),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"Used for direct fuel ",(0,a.kt)("inlineCode",{parentName:"p"},"energy usage models<ENERGY_USAGE_MODEL>")," to define fuel consumption directly with an\n",(0,a.kt)("inlineCode",{parentName:"p"},"expression <Expressions>")),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: <fuel rate expression [m3/day]>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION: <condition expression>\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("p",null,"Constant fuel rate:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: 100000 # [m3/day]\n")),(0,a.kt)("p",null,"Fuel rate varying in time:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: fueldata;FUEL_RATE # [m3/day]\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7557b935.49ef7280.js b/assets/js/7557b935.49ef7280.js new file mode 100644 index 0000000000..38becf1399 --- /dev/null +++ b/assets/js/7557b935.49ef7280.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[856],{6949:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var o=t(7462),a=(t(7294),t(3905));t(5657);const i={title:"v7 to v8",description:"v7 to v8 migration",sidebar_position:0},s="v7 to v8",l={unversionedId:"about/migration_guides/v7_to_v8",id:"about/migration_guides/v7_to_v8",title:"v7 to v8",description:"v7 to v8 migration",source:"@site/docs/about/migration_guides/v7_to_v8.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v7_to_v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v7_to_v8.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"v7 to v8",description:"v7 to v8 migration",sidebar_position:0},sidebar:"about",previous:{title:"Migrating eCalc versions",permalink:"/ecalc/docs/about/migration_guides/"},next:{title:"v8 to v8.1",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81"}},r={},m=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"Migration overview",id:"migration-overview",level:3},{value:"Main differences",id:"main-differences",level:3},{value:"1. All component names must be unique",id:"1-all-component-names-must-be-unique",level:4},{value:"2. UNITS for pump and compressor charts",id:"2-units-for-pump-and-compressor-charts",level:4},{value:"3. Restrict allowed characters in component names and emission names",id:"3-restrict-allowed-characters-in-component-names-and-emission-names",level:4},{value:"4. NAME no longer used for LTP reporting, use CATEGORY instead",id:"4-name-no-longer-used-for-ltp-reporting-use-category-instead",level:4},{value:"5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)",id:"5-not-possible-to-use-custom-category-names-pre-defined-categories-must-be-uppercase-with-hyphen-as-separator-ie-fuel-gas",level:4},{value:"CLI migration",id:"cli-migration",level:2},{value:"1. Invoking eCalc\u2122 directly is no longer supported, use <code>ecalc run</code> instead.",id:"1-invoking-ecalc-directly-is-no-longer-supported-use-ecalc-run-instead",level:4},{value:"2. Log level should be specified as the first argument + log to file",id:"2-log-level-should-be-specified-as-the-first-argument--log-to-file",level:4},{value:"3. Model yaml-file needs to come last",id:"3-model-yaml-file-needs-to-come-last",level:4},{value:"4. Extrapolation correction is no longer optional",id:"4-extrapolation-correction-is-no-longer-optional",level:4},{value:"5. Argument for LTP export has changed from: <code>--centuries-ltp-export</code> to <code>--ltp-export</code>",id:"5-argument-for-ltp-export-has-changed-from---centuries-ltp-export-to---ltp-export",level:4},{value:"6. Simple results are now default for json",id:"6-simple-results-are-now-default-for-json",level:4}],d={toc:m},p="wrapper";function u(e){let{components:n,...t}=e;return(0,a.kt)(p,(0,o.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"v7-to-v8"},"v7 to v8"),(0,a.kt)("p",null,"In this migration guide you will find:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("a",{parentName:"li",href:"#yaml-migration"},"YAML changes")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("a",{parentName:"li",href:"#cli-migration"},"CLI changes"))),(0,a.kt)("h2",{id:"yaml-migration"},"Yaml migration"),(0,a.kt)("h3",{id:"migration-overview"},"Migration overview"),(0,a.kt)("p",null,"This doc guides you through migrating an existing eCalc\u2122 model from version v7 to v8."),(0,a.kt)("p",null,"We try to make this as easy as possible, and provide a step-by-step migration guide."),(0,a.kt)("h3",{id:"main-differences"},"Main differences"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"All component names must be unique to avoid ambiguity in reporting"),(0,a.kt)("li",{parentName:"ol"},"UNITS are required when setting up compressor and pump charts"),(0,a.kt)("li",{parentName:"ol"},"Restrict allowed characters in component names and emission names"),(0,a.kt)("li",{parentName:"ol"},"NAME no longer used for LTP reporting, use CATEGORY instead"),(0,a.kt)("li",{parentName:"ol"},"Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)")),(0,a.kt)("h4",{id:"1-all-component-names-must-be-unique"},"1. All component names must be unique"),(0,a.kt)("p",null,"All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation,\ngenerator sets, electricity consumers, fuel consumers and direct emitters."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml"',title:'"main.yaml"'},"INSTALLATIONS:\n # This is old\n - NAME: Installation\n ...\n \n GENERATORSETS:\n # This is old\n - NAME: Genset\n ...\n CONSUMERS:\n # This is old\n - NAME: Consumer\n ...\n # This is old\n - NAME: Consumer\n ...\n # This is old\n - NAME: Genset\n ...\n \n FUELCONSUMERS:\n # This is old\n - NAME: FuelConsumer\n ...\n # This is old\n - NAME: FuelConsumer\n ...\n \n DIRECT_EMITTER:\n # This is old\n - NAME: DirectEmitter\n ...\n # This is old\n - NAME: DirectEmitter\n ...\n # This is old\n - NAME: Installation\n ...\n")),(0,a.kt)("p",null,"This model is no longer valid, and the duplicated installation names are highlighted.\nTo make this model valid these names needs to be changed. For example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml"',title:'"main.yaml"'},"INSTALLATIONS:\n # This is new\n - NAME: Installation_A\n ...\n \n GENERATORSETS:\n # This is new\n - NAME: Genset_A\n ...\n CONSUMERS:\n # This is new\n - NAME: Consumer_A\n ...\n # This is new\n - NAME: Consumer_B\n ...\n # This is new\n - NAME: Genset_B\n ...\n \n FUELCONSUMERS:\n # This is new\n - NAME: FuelConsumer_A\n ...\n # This is new\n - NAME: FuelConsumer_B\n ...\n \n DIRECT_EMITTER:\n # This is new\n - NAME: DirectEmitter_A\n ...\n # This is new\n - NAME: DirectEmitter_B\n ...\n # This is new\n - NAME: Installation_B\n ...\n")),(0,a.kt)("p",null,"This will make it possible to attribute results to each consumer by name, and removes any an ambiguity\nwhen interpreting eCalc\u2122 results."),(0,a.kt)("p",null,"See ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATION"),",\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSET"),",\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMERS"},"CONSUMERS"),",\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS"),",\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"},"DIRECT_EMITTER"),"\nfor more details about the relevant keywords."),(0,a.kt)("admonition",{title:"Are you using power from shore?",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"We have implemented temporal categories for consumers to support the power from shore implementation in use. "),(0,a.kt)("p",{parentName:"admonition"},"Instead of duplicating the generator set and setting the ",(0,a.kt)("inlineCode",{parentName:"p"},"POWER-FROM-SHORE")," category,\nit is now possible to change the category at a certain date. This is the same syntax as other temporal models."),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"CATEGORY:\n 2020-01-01: TURBINE-GENERATOR\n 2030-01-01: POWER-FROM-SHORE\n")),(0,a.kt)("p",{parentName:"admonition"},"See ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling#power-from-shore"},"Power from shore")," for more information.")),(0,a.kt)("h4",{id:"2-units-for-pump-and-compressor-charts"},"2. UNITS for pump and compressor charts"),(0,a.kt)("p",null,"Compressor and pump charts has previously had implicit units, without requiring the operator to specify what\nunits are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand\nover models."),(0,a.kt)("p",null,"To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify."),(0,a.kt)("p",null,"To keep the old defaults you can do the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml"',title:'"main.yaml"'},"FACILITY_INPUTS:\n - NAME: single_speed_pump_chart\n FILE: <some input csv>\n # highlight-next-line\n TYPE: PUMP_CHART_SINGLE_SPEED\n # highlight-new-start\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n # highlight-new-end\n - NAME: variable_speed_pump_chart\n FILE: <some input csv>\n # highlight-next-line\n TYPE: PUMP_CHART_VARIABLE_SPEED\n # highlight-new-start\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n # highlight-new-end\n\nMODELS:\n - NAME: single_speed_compressor_chart\n # highlight-start\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n # highlight-end\n # highlight-new-start\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: FRACTION\n # highlight-new-end\n CURVES:\n ...\n - NAME: variable_speed_compressor_chart\n # highlight-start\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n # highlight-end\n # highlight-new-start\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: FRACTION\n # highlight-new-end\n CURVES:\n ...\n\n...\n")),(0,a.kt)("p",null,"See ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"COMPRESSOR CHART"),"\nand ",(0,a.kt)("a",{parentName:"p",href:"../modelling/setup/facility_inputs/pump_modelling/pump_charts"},"PUMP CHART"),"\nfor more details about the relevant keywords."),(0,a.kt)("h4",{id:"3-restrict-allowed-characters-in-component-names-and-emission-names"},"3. Restrict allowed characters in component names and emission names"),(0,a.kt)("p",null,"Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (",(0,a.kt)("inlineCode",{parentName:"p"},"_"),"), hyphen (",(0,a.kt)("inlineCode",{parentName:"p"},"-"),") and space (",(0,a.kt)("inlineCode",{parentName:"p"}," "),")."),(0,a.kt)("p",null,"Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (",(0,a.kt)("inlineCode",{parentName:"p"},"_"),")."),(0,a.kt)("h4",{id:"4-name-no-longer-used-for-ltp-reporting-use-category-instead"},"4. NAME no longer used for LTP reporting, use CATEGORY instead"),(0,a.kt)("p",null,"We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml"',title:'"main.yaml"'},"INSTALLATIONS:\n - NAME: Installation_A\n ...\n \n GENERATORSETS:\n - NAME: Genset_A\n ...\n CONSUMERS:\n - NAME: Consumer_A\n ...\n \n FUELCONSUMERS:\n # This is old\n - NAME: loading # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: LOADING # Category must be used to include it in LTP reporting\n FUEL: Fuel_A\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ...\n # This is old\n - NAME: storage # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: STORAGE # Category must be used to include it in LTP reporting\n FUEL: Fuel_B\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ... \n # This is old\n - NAME: flare # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: FLARE # Category must be used to include it in LTP reporting\n FUEL: Fuel_C\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ...\n # This is old\n - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting\n FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ... \n \n...\n")),(0,a.kt)("h4",{id:"5-not-possible-to-use-custom-category-names-pre-defined-categories-must-be-uppercase-with-hyphen-as-separator-ie-fuel-gas"},"5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)"),(0,a.kt)("p",null,"Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names.\nThe input is case-sensitive and must match exactly with the pre-defined names. See ",(0,a.kt)("a",{parentName:"p",href:"../references/keywords/CATEGORY"},"CLI Docs")," for full documentation."),(0,a.kt)("h2",{id:"cli-migration"},"CLI migration"),(0,a.kt)("p",null,"This version includes some changes to how the CLI is invoked and changes to default behavior."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Invoking eCalc\u2122 directly is no longer supported, use ",(0,a.kt)("inlineCode",{parentName:"li"},"ecalc run")," instead."),(0,a.kt)("li",{parentName:"ol"},"Log level should be specified as the first argument + log to file"),(0,a.kt)("li",{parentName:"ol"},"Model yaml-file needs to come last"),(0,a.kt)("li",{parentName:"ol"},"Extrapolation (correction) is now always used and cannot be disabled"),(0,a.kt)("li",{parentName:"ol"},"Argument for LTP export has changed from: ",(0,a.kt)("inlineCode",{parentName:"li"},"--centuries-ltp-export")," to ",(0,a.kt)("inlineCode",{parentName:"li"},"--ltp-export")),(0,a.kt)("li",{parentName:"ol"},"Simple results are now default for json")),(0,a.kt)("h4",{id:"1-invoking-ecalc-directly-is-no-longer-supported-use-ecalc-run-instead"},"1. Invoking eCalc\u2122 directly is no longer supported, use ",(0,a.kt)("inlineCode",{parentName:"h4"},"ecalc run")," instead."),(0,a.kt)("p",null,"To make it possible to add ",(0,a.kt)("inlineCode",{parentName:"p"},"ecalc show")," we added the ",(0,a.kt)("inlineCode",{parentName:"p"},"ecalc run")," command. In v8 it is required to specify ",(0,a.kt)("inlineCode",{parentName:"p"},"run")," when calculating a model."),(0,a.kt)("p",null,"If you previously ran eCalc\u2122 with this command"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc ./my-model.yaml\n")),(0,a.kt)("p",null,"you should now use "),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc run ./my-model.yaml\n")),(0,a.kt)("h4",{id:"2-log-level-should-be-specified-as-the-first-argument--log-to-file"},"2. Log level should be specified as the first argument + log to file"),(0,a.kt)("p",null,"Previously you could specify the ",(0,a.kt)("inlineCode",{parentName:"p"},"--log")," argument after ",(0,a.kt)("inlineCode",{parentName:"p"},"run"),", this is no longer possible."),(0,a.kt)("p",null,"This is the new way of specifying log level."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc --log DEBUG run ./my-model.yaml\n")),(0,a.kt)("p",null,"In addition we are introducing ",(0,a.kt)("inlineCode",{parentName:"p"},"--log-folder <path>")," where you can direct and store the log in a given path to easily\nlook at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc\nproduces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages).\nThe user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT\ndo that for you."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc --log DEBUG --log-folder . run ./my-model.yaml\n")),(0,a.kt)("p",null,"As you see above, the argument ",(0,a.kt)("strong",{parentName:"p"},"MUST")," be added ",(0,a.kt)("strong",{parentName:"p"},"BEFORE")," the ",(0,a.kt)("inlineCode",{parentName:"p"},"run")," argument."),(0,a.kt)("h4",{id:"3-model-yaml-file-needs-to-come-last"},"3. Model yaml-file needs to come last"),(0,a.kt)("p",null,"When running eCalc\u2122 you will now need to set the model file argument last."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file]")),(0,a.kt)("p",null,"See the ",(0,a.kt)("a",{parentName:"p",href:"../references/cli_reference"},"CLI Docs")," or run ",(0,a.kt)("inlineCode",{parentName:"p"},"ecalc --help")," for the full documentation."),(0,a.kt)("h4",{id:"4-extrapolation-correction-is-no-longer-optional"},"4. Extrapolation correction is no longer optional"),(0,a.kt)("p",null,'We have removed the extrapolation correction argument. eCalc\u2122 will now always "extrapolate" values.\nThe main reason for making this change was that the feature was in general always used, in addition to being a confusing term.\nLet us know if you have a use-case where this was needed.'),(0,a.kt)("h4",{id:"5-argument-for-ltp-export-has-changed-from---centuries-ltp-export-to---ltp-export"},"5. Argument for LTP export has changed from: ",(0,a.kt)("inlineCode",{parentName:"h4"},"--centuries-ltp-export")," to ",(0,a.kt)("inlineCode",{parentName:"h4"},"--ltp-export")),(0,a.kt)("p",null,"To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily\naffected by Centuries), we simplify the argument to get LTP results. See ",(0,a.kt)("a",{parentName:"p",href:"../references/cli_reference"},"CLI Docs")," for\nfull documentation."),(0,a.kt)("h4",{id:"6-simple-results-are-now-default-for-json"},"6. Simple results are now default for json"),(0,a.kt)("p",null,"Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now\nneeds to use the --detailed-output option when running the CLI. See ",(0,a.kt)("a",{parentName:"p",href:"../references/cli_reference#ecalc-run"},"CLI reference docs"),"\nfor more details."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7926.b155ab83.js b/assets/js/7926.b155ab83.js new file mode 100644 index 0000000000..193315c5dd --- /dev/null +++ b/assets/js/7926.b155ab83.js @@ -0,0 +1,2 @@ +/*! For license information please see 7926.b155ab83.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7926],{4182:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).FDLayoutConstants;function i(){}for(var a in r)i[a]=r[a];i.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,i.DEFAULT_RADIAL_SEPARATION=r.DEFAULT_EDGE_LENGTH,i.DEFAULT_COMPONENT_SEPERATION=60,i.TILE=!0,i.TILING_PADDING_VERTICAL=10,i.TILING_PADDING_HORIZONTAL=10,i.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutEdge;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraph;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraphManager;function i(e){r.call(this,e)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutNode,i=n(0).IMath;function a(e,t,n,i){r.call(this,e,t,n,i)}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];a.prototype.move=function(){var e=this.graphManager.getLayout();this.displacementX=e.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=e.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementX=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementY=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementY)),null==this.child||0==this.child.getNodes().length?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),e.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},a.prototype.propogateDisplacementToChildren=function(e,t){for(var n,r=this.getChild().getNodes(),i=0;i<r.length;i++)null==(n=r[i]).getChild()?(n.moveBy(e,t),n.displacementX+=e,n.displacementY+=t):n.propogateDisplacementToChildren(e,t)},a.prototype.setPred1=function(e){this.pred1=e},a.prototype.getPred1=function(){return pred1},a.prototype.getPred2=function(){return pred2},a.prototype.setNext=function(e){this.next=e},a.prototype.getNext=function(){return next},a.prototype.setProcessed=function(e){this.processed=e},a.prototype.isProcessed=function(){return processed},e.exports=a},function(e,t,n){"use strict";var r=n(0).FDLayout,i=n(4),a=n(3),o=n(5),s=n(2),l=n(1),u=n(0).FDLayoutConstants,c=n(0).LayoutConstants,h=n(0).Point,d=n(0).PointD,p=n(0).Layout,g=n(0).Integer,f=n(0).IGeometry,v=n(0).LGraph,y=n(0).Transform;function m(){r.call(this),this.toBeTiled={}}for(var b in m.prototype=Object.create(r.prototype),r)m[b]=r[b];m.prototype.newGraphManager=function(){var e=new i(this);return this.graphManager=e,e},m.prototype.newGraph=function(e){return new a(null,this.graphManager,e)},m.prototype.newNode=function(e){return new o(this.graphManager,e)},m.prototype.newEdge=function(e){return new s(null,null,e)},m.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.isSubLayout||(l.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=l.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=l.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=u.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=u.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=u.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=u.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=u.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=u.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/u.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=u.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},m.prototype.layout=function(){return c.DEFAULT_CREATE_BENDS_AS_NEEDED&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},m.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental)l.TREE_REDUCTION_ON_INCREMENTAL&&(this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation(),t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)})),this.graphManager.setAllNodesToApplyGravitation(n));else{var e=this.getFlatForest();if(e.length>0)this.positionNodesRadially(e);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)}));this.graphManager.setAllNodesToApplyGravitation(n),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},m.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}if(this.totalIterations%u.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged()){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}this.coolingCycle++,0==this.layoutQuality?this.coolingAdjuster=this.coolingCycle:1==this.layoutQuality&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),t=this.nodesWithGravity.filter((function(t){return e.has(t)}));this.graphManager.setAllNodesToApplyGravitation(t),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var n=!this.isTreeGrowing&&!this.isGrowthFinished,r=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(n,r),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},m.prototype.getPositionsData=function(){for(var e=this.graphManager.getAllNodes(),t={},n=0;n<e.length;n++){var r=e[n].rect,i=e[n].id;t[i]={id:i,x:r.getCenterX(),y:r.getCenterY(),w:r.width,h:r.height}}return t},m.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var e=!1;if("during"===u.ANIMATE)this.emit("layoutstarted");else{for(;!e;)e=this.tick();this.graphManager.updateBounds()}},m.prototype.calculateNodesToApplyGravitationTo=function(){var e,t,n=[],r=this.graphManager.getGraphs(),i=r.length;for(t=0;t<i;t++)(e=r[t]).updateConnected(),e.isConnected||(n=n.concat(e.getNodes()));return n},m.prototype.createBendpoints=function(){var e=[];e=e.concat(this.graphManager.getAllEdges());var t,n=new Set;for(t=0;t<e.length;t++){var r=e[t];if(!n.has(r)){var i=r.getSource(),a=r.getTarget();if(i==a)r.getBendpoints().push(new d),r.getBendpoints().push(new d),this.createDummyNodesForBendpoints(r),n.add(r);else{var o=[];if(o=(o=o.concat(i.getEdgeListToNode(a))).concat(a.getEdgeListToNode(i)),!n.has(o[0])){var s;if(o.length>1)for(s=0;s<o.length;s++){var l=o[s];l.getBendpoints().push(new d),this.createDummyNodesForBendpoints(l)}o.forEach((function(e){n.add(e)}))}}}if(n.size==e.length)break}},m.prototype.positionNodesRadially=function(e){for(var t=new h(0,0),n=Math.ceil(Math.sqrt(e.length)),r=0,i=0,a=0,o=new d(0,0),s=0;s<e.length;s++){s%n==0&&(a=0,i=r,0!=s&&(i+=l.DEFAULT_COMPONENT_SEPERATION),r=0);var u=e[s],g=p.findCenterOfTree(u);t.x=a,t.y=i,(o=m.radialLayout(u,g,t)).y>r&&(r=Math.floor(o.y)),a=Math.floor(o.x+l.DEFAULT_COMPONENT_SEPERATION)}this.transform(new d(c.WORLD_CENTER_X-o.x/2,c.WORLD_CENTER_Y-o.y/2))},m.radialLayout=function(e,t,n){var r=Math.max(this.maxDiagonalInTree(e),l.DEFAULT_RADIAL_SEPARATION);m.branchRadialLayout(t,null,0,359,0,r);var i=v.calculateBounds(e),a=new y;a.setDeviceOrgX(i.getMinX()),a.setDeviceOrgY(i.getMinY()),a.setWorldOrgX(n.x),a.setWorldOrgY(n.y);for(var o=0;o<e.length;o++)e[o].transform(a);var s=new d(i.getMaxX(),i.getMaxY());return a.inverseTransformPoint(s)},m.branchRadialLayout=function(e,t,n,r,i,a){var o=(r-n+1)/2;o<0&&(o+=180);var s=(o+n)%360*f.TWO_PI/360,l=(Math.cos(s),i*Math.cos(s)),u=i*Math.sin(s);e.setCenter(l,u);var c=[],h=(c=c.concat(e.getEdges())).length;null!=t&&h--;for(var d,p=0,g=c.length,v=e.getEdgesBetween(t);v.length>1;){var y=v[0];v.splice(0,1);var b=c.indexOf(y);b>=0&&c.splice(b,1),g--,h--}d=null!=t?(c.indexOf(v[0])+1)%g:0;for(var x=Math.abs(r-n)/h,w=d;p!=h;w=++w%g){var E=c[w].getOtherEnd(e);if(E!=t){var T=(n+p*x)%360,_=(T+x)%360;m.branchRadialLayout(E,e,T,_,i+a,a),p++}}},m.maxDiagonalInTree=function(e){for(var t=g.MIN_VALUE,n=0;n<e.length;n++){var r=e[n].getDiagonal();r>t&&(t=r)}return t},m.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},m.prototype.groupZeroDegreeMembers=function(){var e=this,t={};this.memberGroups={},this.idToDummyNode={};for(var n=[],r=this.graphManager.getAllNodes(),i=0;i<r.length;i++){var a=(s=r[i]).getParent();0!==this.getNodeDegreeWithChildren(s)||null!=a.id&&this.getToBeTiled(a)||n.push(s)}for(i=0;i<n.length;i++){var s,l=(s=n[i]).getParent().id;void 0===t[l]&&(t[l]=[]),t[l]=t[l].concat(s)}Object.keys(t).forEach((function(n){if(t[n].length>1){var r="DummyCompound_"+n;e.memberGroups[r]=t[n];var i=t[n][0].getParent(),a=new o(e.graphManager);a.id=r,a.paddingLeft=i.paddingLeft||0,a.paddingRight=i.paddingRight||0,a.paddingBottom=i.paddingBottom||0,a.paddingTop=i.paddingTop||0,e.idToDummyNode[r]=a;var s=e.getGraphManager().add(e.newGraph(),a),l=i.getChild();l.add(a);for(var u=0;u<t[n].length;u++){var c=t[n][u];l.remove(c),s.add(c)}}}))},m.prototype.clearCompounds=function(){var e={},t={};this.performDFSOnCompounds();for(var n=0;n<this.compoundOrder.length;n++)t[this.compoundOrder[n].id]=this.compoundOrder[n],e[this.compoundOrder[n].id]=[].concat(this.compoundOrder[n].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[n].getChild()),this.compoundOrder[n].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(e,t)},m.prototype.clearZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach((function(n){var r=e.idToDummyNode[n];t[n]=e.tileNodes(e.memberGroups[n],r.paddingLeft+r.paddingRight),r.rect.width=t[n].width,r.rect.height=t[n].height}))},m.prototype.repopulateCompounds=function(){for(var e=this.compoundOrder.length-1;e>=0;e--){var t=this.compoundOrder[e],n=t.id,r=t.paddingLeft,i=t.paddingTop;this.adjustLocations(this.tiledMemberPack[n],t.rect.x,t.rect.y,r,i)}},m.prototype.repopulateZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack;Object.keys(t).forEach((function(n){var r=e.idToDummyNode[n],i=r.paddingLeft,a=r.paddingTop;e.adjustLocations(t[n],r.rect.x,r.rect.y,i,a)}))},m.prototype.getToBeTiled=function(e){var t=e.id;if(null!=this.toBeTiled[t])return this.toBeTiled[t];var n=e.getChild();if(null==n)return this.toBeTiled[t]=!1,!1;for(var r=n.getNodes(),i=0;i<r.length;i++){var a=r[i];if(this.getNodeDegree(a)>0)return this.toBeTiled[t]=!1,!1;if(null!=a.getChild()){if(!this.getToBeTiled(a))return this.toBeTiled[t]=!1,!1}else this.toBeTiled[a.id]=!1}return this.toBeTiled[t]=!0,!0},m.prototype.getNodeDegree=function(e){e.id;for(var t=e.getEdges(),n=0,r=0;r<t.length;r++){var i=t[r];i.getSource().id!==i.getTarget().id&&(n+=1)}return n},m.prototype.getNodeDegreeWithChildren=function(e){var t=this.getNodeDegree(e);if(null==e.getChild())return t;for(var n=e.getChild().getNodes(),r=0;r<n.length;r++){var i=n[r];t+=this.getNodeDegreeWithChildren(i)}return t},m.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},m.prototype.fillCompexOrderByDFS=function(e){for(var t=0;t<e.length;t++){var n=e[t];null!=n.getChild()&&this.fillCompexOrderByDFS(n.getChild().getNodes()),this.getToBeTiled(n)&&this.compoundOrder.push(n)}},m.prototype.adjustLocations=function(e,t,n,r,i){n+=i;for(var a=t+=r,o=0;o<e.rows.length;o++){var s=e.rows[o];t=a;for(var l=0,u=0;u<s.length;u++){var c=s[u];c.rect.x=t,c.rect.y=n,t+=c.rect.width+e.horizontalPadding,c.rect.height>l&&(l=c.rect.height)}n+=l+e.verticalPadding}},m.prototype.tileCompoundMembers=function(e,t){var n=this;this.tiledMemberPack=[],Object.keys(e).forEach((function(r){var i=t[r];n.tiledMemberPack[r]=n.tileNodes(e[r],i.paddingLeft+i.paddingRight),i.rect.width=n.tiledMemberPack[r].width,i.rect.height=n.tiledMemberPack[r].height}))},m.prototype.tileNodes=function(e,t){var n={rows:[],rowWidth:[],rowHeight:[],width:0,height:t,verticalPadding:l.TILING_PADDING_VERTICAL,horizontalPadding:l.TILING_PADDING_HORIZONTAL};e.sort((function(e,t){return e.rect.width*e.rect.height>t.rect.width*t.rect.height?-1:e.rect.width*e.rect.height<t.rect.width*t.rect.height?1:0}));for(var r=0;r<e.length;r++){var i=e[r];0==n.rows.length?this.insertNodeToRow(n,i,0,t):this.canAddHorizontal(n,i.rect.width,i.rect.height)?this.insertNodeToRow(n,i,this.getShortestRowIndex(n),t):this.insertNodeToRow(n,i,n.rows.length,t),this.shiftToLastRow(n)}return n},m.prototype.insertNodeToRow=function(e,t,n,r){var i=r;n==e.rows.length&&(e.rows.push([]),e.rowWidth.push(i),e.rowHeight.push(0));var a=e.rowWidth[n]+t.rect.width;e.rows[n].length>0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width<a&&(e.width=a);var o=t.rect.height;n>0&&(o+=e.verticalPadding);var s=0;o>e.rowHeight[n]&&(s=e.rowHeight[n],e.rowHeight[n]=o,s=e.rowHeight[n]-s),e.height+=s,e.rows[n].push(t)},m.prototype.getShortestRowIndex=function(e){for(var t=-1,n=Number.MAX_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]<n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.getLongestRowIndex=function(e){for(var t=-1,n=Number.MIN_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]>n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.canAddHorizontal=function(e,t,n){var r=this.getShortestRowIndex(e);if(r<0)return!0;var i=e.rowWidth[r];if(i+e.horizontalPadding+t<=e.width)return!0;var a,o,s=0;return e.rowHeight[r]<n&&r>0&&(s=n+e.verticalPadding-e.rowHeight[r]),a=e.width-i>=t+e.horizontalPadding?(e.height+s)/(i+t+e.horizontalPadding):(e.height+s)/e.width,s=n+e.verticalPadding,(o=e.width<t?(e.height+s)/t:(e.height+s)/e.width)<1&&(o=1/o),a<1&&(a=1/a),a<o},m.prototype.shiftToLastRow=function(e){var t=this.getLongestRowIndex(e),n=e.rowWidth.length-1,r=e.rows[t],i=r[r.length-1],a=i.width+e.horizontalPadding;if(e.width-e.rowWidth[n]>a&&t!=n){r.splice(-1,1),e.rows[n].push(i),e.rowWidth[t]=e.rowWidth[t]-a,e.rowWidth[n]=e.rowWidth[n]+a,e.width=e.rowWidth[instance.getLongestRowIndex(e)];for(var o=Number.MIN_VALUE,s=0;s<r.length;s++)r[s].height>o&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]<i.height+e.verticalPadding&&(e.rowHeight[n]=i.height+e.verticalPadding);var u=e.rowHeight[t]+e.rowHeight[n];e.height+=u-l,this.shiftToLastRow(e)}},m.prototype.tilingPreLayout=function(){l.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},m.prototype.tilingPostLayout=function(){l.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},m.prototype.reduceTrees=function(){for(var e,t=[],n=!0;n;){var r=this.graphManager.getAllNodes(),i=[];n=!1;for(var a=0;a<r.length;a++)1!=(e=r[a]).getEdges().length||e.getEdges()[0].isInterGraph||null!=e.getChild()||(i.push([e,e.getEdges()[0],e.getOwner()]),n=!0);if(1==n){for(var o=[],s=0;s<i.length;s++)1==i[s][0].getEdges().length&&(o.push(i[s]),i[s][0].getOwner().remove(i[s][0]));t.push(o),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=t},m.prototype.growTree=function(e){for(var t,n=e[e.length-1],r=0;r<n.length;r++)t=n[r],this.findPlaceforPrunedNode(t),t[2].add(t[0]),t[2].add(t[1],t[1].source,t[1].target);e.splice(e.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},m.prototype.findPlaceforPrunedNode=function(e){var t,n,r=e[0],i=(n=r==e[1].source?e[1].target:e[1].source).startX,a=n.finishX,o=n.startY,s=n.finishY,l=[0,0,0,0];if(o>0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a<this.grid.length-1)for(c=o;c<=s;c++)l[1]+=this.grid[a+1][c].length+this.grid[a][c].length-1;if(s<this.grid[0].length-1)for(c=i;c<=a;c++)l[2]+=this.grid[c][s+1].length+this.grid[c][s].length-1;if(i>0)for(c=o;c<=s;c++)l[3]+=this.grid[i-1][c].length+this.grid[i][c].length-1;for(var h,d,p=g.MAX_VALUE,f=0;f<l.length;f++)l[f]<p?(p=l[f],h=1,d=f):l[f]==p&&h++;if(3==h&&0==p)0==l[0]&&0==l[1]&&0==l[2]?t=1:0==l[0]&&0==l[1]&&0==l[3]?t=0:0==l[0]&&0==l[2]&&0==l[3]?t=3:0==l[1]&&0==l[2]&&0==l[3]&&(t=2);else if(2==h&&0==p){var v=Math.floor(2*Math.random());t=0==l[0]&&0==l[1]?0==v?0:1:0==l[0]&&0==l[2]?0==v?0:2:0==l[0]&&0==l[3]?0==v?0:3:0==l[1]&&0==l[2]?0==v?1:2:0==l[1]&&0==l[3]?0==v?1:3:0==v?2:3}else t=4==h&&0==p?v=Math.floor(4*Math.random()):d;0==t?r.setCenter(n.getCenterX(),n.getCenterY()-n.getHeight()/2-u.DEFAULT_EDGE_LENGTH-r.getHeight()/2):1==t?r.setCenter(n.getCenterX()+n.getWidth()/2+u.DEFAULT_EDGE_LENGTH+r.getWidth()/2,n.getCenterY()):2==t?r.setCenter(n.getCenterX(),n.getCenterY()+n.getHeight()/2+u.DEFAULT_EDGE_LENGTH+r.getHeight()/2):r.setCenter(n.getCenterX()-n.getWidth()/2-u.DEFAULT_EDGE_LENGTH-r.getWidth()/2,n.getCenterY())},e.exports=m},function(e,t,n){"use strict";var r={};r.layoutBase=n(0),r.CoSEConstants=n(1),r.CoSEEdge=n(2),r.CoSEGraph=n(3),r.CoSEGraphManager=n(4),r.CoSELayout=n(6),r.CoSENode=n(5),e.exports=r}])},e.exports=r(n(2241))},4607:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).layoutBase.LayoutConstants,i=n(0).layoutBase.FDLayoutConstants,a=n(0).CoSEConstants,o=n(0).CoSELayout,s=n(0).CoSENode,l=n(0).layoutBase.PointD,u=n(0).layoutBase.DimensionD,c={ready:function(){},stop:function(){},quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function h(e){this.options=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}(c,e),d(this.options)}var d=function(e){null!=e.nodeRepulsion&&(a.DEFAULT_REPULSION_STRENGTH=i.DEFAULT_REPULSION_STRENGTH=e.nodeRepulsion),null!=e.idealEdgeLength&&(a.DEFAULT_EDGE_LENGTH=i.DEFAULT_EDGE_LENGTH=e.idealEdgeLength),null!=e.edgeElasticity&&(a.DEFAULT_SPRING_STRENGTH=i.DEFAULT_SPRING_STRENGTH=e.edgeElasticity),null!=e.nestingFactor&&(a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=e.nestingFactor),null!=e.gravity&&(a.DEFAULT_GRAVITY_STRENGTH=i.DEFAULT_GRAVITY_STRENGTH=e.gravity),null!=e.numIter&&(a.MAX_ITERATIONS=i.MAX_ITERATIONS=e.numIter),null!=e.gravityRange&&(a.DEFAULT_GRAVITY_RANGE_FACTOR=i.DEFAULT_GRAVITY_RANGE_FACTOR=e.gravityRange),null!=e.gravityCompound&&(a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=e.gravityCompound),null!=e.gravityRangeCompound&&(a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=e.gravityRangeCompound),null!=e.initialEnergyOnIncremental&&(a.DEFAULT_COOLING_FACTOR_INCREMENTAL=i.DEFAULT_COOLING_FACTOR_INCREMENTAL=e.initialEnergyOnIncremental),"draft"==e.quality?r.QUALITY=0:"proof"==e.quality?r.QUALITY=2:r.QUALITY=1,a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=r.NODE_DIMENSIONS_INCLUDE_LABELS=e.nodeDimensionsIncludeLabels,a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=r.DEFAULT_INCREMENTAL=!e.randomize,a.ANIMATE=i.ANIMATE=r.ANIMATE=e.animate,a.TILE=e.tile,a.TILING_PADDING_VERTICAL="function"==typeof e.tilingPaddingVertical?e.tilingPaddingVertical.call():e.tilingPaddingVertical,a.TILING_PADDING_HORIZONTAL="function"==typeof e.tilingPaddingHorizontal?e.tilingPaddingHorizontal.call():e.tilingPaddingHorizontal};h.prototype.run=function(){var e,t,n=this.options,r=(this.idToLNode={},this.layout=new o),i=this;i.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var a=r.newGraphManager();this.gm=a;var s=this.options.eles.nodes(),l=this.options.eles.edges();this.root=a.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(s),r);for(var u=0;u<l.length;u++){var c=l[u],h=this.idToLNode[c.data("source")],d=this.idToLNode[c.data("target")];h!==d&&0==h.getEdgesBetween(d).length&&(a.add(r.newEdge(),h,d).id=c.id())}var p=function(e,t){"number"==typeof e&&(e=t);var n=e.data("id"),r=i.idToLNode[n];return{x:r.getRect().getCenterX(),y:r.getRect().getCenterY()}},g=function a(){for(var o,s=function(){n.fit&&n.cy.fit(n.eles,n.padding),e||(e=!0,i.cy.one("layoutready",n.ready),i.cy.trigger({type:"layoutready",layout:i}))},l=i.options.refresh,u=0;u<l&&!o;u++)o=i.stopped||i.layout.tick();if(o)return r.checkLayoutSuccess()&&!r.isSubLayout&&r.doPostLayout(),r.tilingPostLayout&&r.tilingPostLayout(),r.isLayoutFinished=!0,i.options.eles.nodes().positions(p),s(),i.cy.one("layoutstop",i.options.stop),i.cy.trigger({type:"layoutstop",layout:i}),t&&cancelAnimationFrame(t),void(e=!1);var c=i.layout.getPositionsData();n.eles.nodes().positions((function(e,t){if("number"==typeof e&&(e=t),!e.isParent()){for(var n=e.id(),r=c[n],i=e;null==r&&(r=c[i.data("parent")]||c["DummyCompound_"+i.data("parent")],c[n]=r,null!=(i=i.parent()[0])););return null!=r?{x:r.x,y:r.y}:{x:e.position("x"),y:e.position("y")}}})),s(),t=requestAnimationFrame(a)};return r.addListener("layoutstarted",(function(){"during"===i.options.animate&&(t=requestAnimationFrame(g))})),r.runLayout(),"during"!==this.options.animate&&(i.options.eles.nodes().not(":parent").layoutPositions(i,i.options,p),e=!1),this},h.prototype.getTopMostNodes=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].id()]=!0;var r=e.filter((function(e,n){"number"==typeof e&&(e=n);for(var r=e.parent()[0];null!=r;){if(t[r.id()])return!1;r=r.parent()[0]}return!0}));return r},h.prototype.processChildrenList=function(e,t,n){for(var r=t.length,i=0;i<r;i++){var a,o,c=t[i],h=c.children(),d=c.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if((a=null!=c.outerWidth()&&null!=c.outerHeight()?e.add(new s(n.graphManager,new l(c.position("x")-d.w/2,c.position("y")-d.h/2),new u(parseFloat(d.w),parseFloat(d.h)))):e.add(new s(this.graphManager))).id=c.data("id"),a.paddingLeft=parseInt(c.css("padding")),a.paddingTop=parseInt(c.css("padding")),a.paddingRight=parseInt(c.css("padding")),a.paddingBottom=parseInt(c.css("padding")),this.options.nodeDimensionsIncludeLabels&&c.isParent()){var p=c.boundingBox({includeLabels:!0,includeNodes:!1}).w,g=c.boundingBox({includeLabels:!0,includeNodes:!1}).h,f=c.css("text-halign");a.labelWidth=p,a.labelHeight=g,a.labelPos=f}this.idToLNode[c.data("id")]=a,isNaN(a.rect.x)&&(a.rect.x=0),isNaN(a.rect.y)&&(a.rect.y=0),null!=h&&h.length>0&&(o=n.getGraphManager().add(n.newGraph(),a),this.processChildrenList(o,h,n))}},h.prototype.stop=function(){return this.stopped=!0,this};var p=function(e){e("layout","cose-bilkent",h)};"undefined"!=typeof cytoscape&&p(cytoscape),e.exports=p}])},e.exports=r(n(4182))},1377:function(e,t,n){e.exports=function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function i(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){return s(e)||l(e,t)||u(e,t)||h()}function s(e){if(Array.isArray(e))return e}function l(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(l){s=!0,i=l}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}}function u(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var d="undefined"==typeof window?null:window,p=d?d.navigator:null;d&&d.document;var g=e(""),f=e({}),v=e((function(){})),y="undefined"==typeof HTMLElement?"undefined":e(HTMLElement),m=function(e){return e&&e.instanceString&&x(e.instanceString)?e.instanceString():null},b=function(t){return null!=t&&e(t)==g},x=function(t){return null!=t&&e(t)===v},w=function(e){return!N(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},E=function(t){return null!=t&&e(t)===f&&!w(t)&&t.constructor===Object},T=function(t){return null!=t&&e(t)===f},_=function(t){return null!=t&&e(t)===e(1)&&!isNaN(t)},D=function(e){return _(e)&&Math.floor(e)===e},C=function(e){return"undefined"===y?void 0:null!=e&&e instanceof HTMLElement},N=function(e){return A(e)||L(e)},A=function(e){return"collection"===m(e)&&e._private.single},L=function(e){return"collection"===m(e)&&!e._private.single},S=function(e){return"core"===m(e)},O=function(e){return"stylesheet"===m(e)},I=function(e){return"event"===m(e)},k=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},M=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement},P=function(e){return E(e)&&_(e.x1)&&_(e.x2)&&_(e.y1)&&_(e.y2)},R=function(e){return T(e)&&x(e.then)},B=function(){return p&&p.userAgent.match(/msie|trident|edge/i)},F=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var n=function n(){var r,i=this,a=arguments,o=t.apply(i,a),s=n.cache;return(r=s[o])||(r=s[o]=e.apply(i,a)),r};return n.cache={},n},z=F((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),G=F((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),Y=F((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),X=function(e){return k(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},V="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",U="rgb[a]?\\(("+V+"[%]?)\\s*,\\s*("+V+"[%]?)\\s*,\\s*("+V+"[%]?)(?:\\s*,\\s*("+V+"))?\\)",j="rgb[a]?\\((?:"+V+"[%]?)\\s*,\\s*(?:"+V+"[%]?)\\s*,\\s*(?:"+V+"[%]?)(?:\\s*,\\s*(?:"+V+"))?\\)",H="hsl[a]?\\(("+V+")\\s*,\\s*("+V+"[%])\\s*,\\s*("+V+"[%])(?:\\s*,\\s*("+V+"))?\\)",q="hsl[a]?\\((?:"+V+")\\s*,\\s*(?:"+V+"[%])\\s*,\\s*(?:"+V+"[%])(?:\\s*,\\s*(?:"+V+"))?\\)",W="\\#[0-9a-fA-F]{3}",$="\\#[0-9a-fA-F]{6}",K=function(e,t){return e<t?-1:e>t?1:0},Z=function(e,t){return-1*K(e,t)},Q=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n<t.length;n++){var r=t[n];if(null!=r)for(var i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];e[o]=r[o]}}return e},J=function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,n,r,i=16;return 4===e.length?(t=parseInt(e[1]+e[1],i),n=parseInt(e[2]+e[2],i),r=parseInt(e[3]+e[3],i)):(t=parseInt(e[1]+e[2],i),n=parseInt(e[3]+e[4],i),r=parseInt(e[5]+e[6],i)),[t,n,r]}},ee=function(e){var t,n,r,i,a,o,s,l;function u(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+H+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=l=Math.round(255*i);else{var h=i<.5?i*(1+r):i+r-i*r,d=2*i-h;o=Math.round(255*u(d,h,n+1/3)),s=Math.round(255*u(d,h,n)),l=Math.round(255*u(d,h,n-1/3))}t=[o,s,l,a]}return t},te=function(e){var t,n=new RegExp("^"+U+"$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t},ne=function(e){return ie[e.toLowerCase()]},re=function(e){return(w(e)?e:null)||ne(e)||J(e)||te(e)||ee(e)},ie={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ae=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(E(a))throw Error("Tried to set map with object key");i<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},oe=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(E(a))throw Error("Tried to get map with object key");if(null==(t=t[a]))return t}return t};function se(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var le=se,ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:"undefined"!=typeof self?self:{};function ce(e,t){return e(t={exports:{}},t.exports),t.exports}var he="object"==typeof ue&&ue&&ue.Object===Object&&ue,de="object"==typeof self&&self&&self.Object===Object&&self,pe=he||de||Function("return this")(),ge=function(){return pe.Date.now()},fe=/\s/;function ve(e){for(var t=e.length;t--&&fe.test(e.charAt(t)););return t}var ye=ve,me=/^\s+/;function be(e){return e?e.slice(0,ye(e)+1).replace(me,""):e}var xe=be,we=pe.Symbol,Ee=Object.prototype,Te=Ee.hasOwnProperty,_e=Ee.toString,De=we?we.toStringTag:void 0;function Ce(e){var t=Te.call(e,De),n=e[De];try{e[De]=void 0;var r=!0}catch(a){}var i=_e.call(e);return r&&(t?e[De]=n:delete e[De]),i}var Ne=Ce,Ae=Object.prototype.toString;function Le(e){return Ae.call(e)}var Se=Le,Oe="[object Null]",Ie="[object Undefined]",ke=we?we.toStringTag:void 0;function Me(e){return null==e?void 0===e?Ie:Oe:ke&&ke in Object(e)?Ne(e):Se(e)}var Pe=Me;function Re(e){return null!=e&&"object"==typeof e}var Be=Re,Fe="[object Symbol]";function ze(e){return"symbol"==typeof e||Be(e)&&Pe(e)==Fe}var Ge=ze,Ye=NaN,Xe=/^[-+]0x[0-9a-f]+$/i,Ve=/^0b[01]+$/i,Ue=/^0o[0-7]+$/i,je=parseInt;function He(e){if("number"==typeof e)return e;if(Ge(e))return Ye;if(le(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=le(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=xe(e);var n=Ve.test(e);return n||Ue.test(e)?je(e.slice(2),n?2:8):Xe.test(e)?Ye:+e}var qe=He,We="Expected a function",$e=Math.max,Ke=Math.min;function Ze(e,t,n){var r,i,a,o,s,l,u=0,c=!1,h=!1,d=!0;if("function"!=typeof e)throw new TypeError(We);function p(t){var n=r,a=i;return r=i=void 0,u=t,o=e.apply(a,n)}function g(e){return u=e,s=setTimeout(y,t),c?p(e):o}function f(e){var n=t-(e-l);return h?Ke(n,a-(e-u)):n}function v(e){var n=e-l;return void 0===l||n>=t||n<0||h&&e-u>=a}function y(){var e=ge();if(v(e))return m(e);s=setTimeout(y,f(e))}function m(e){return s=void 0,d&&r?p(e):(r=i=void 0,o)}function b(){void 0!==s&&clearTimeout(s),u=0,r=l=i=s=void 0}function x(){return void 0===s?o:m(ge())}function w(){var e=ge(),n=v(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return g(l);if(h)return clearTimeout(s),s=setTimeout(y,t),p(l)}return void 0===s&&(s=setTimeout(y,t)),o}return t=qe(t)||0,le(n)&&(c=!!n.leading,a=(h="maxWait"in n)?$e(qe(n.maxWait)||0,t):a,d="trailing"in n?!!n.trailing:d),w.cancel=b,w.flush=x,w}var Qe=Ze,Je=d?d.performance:null,et=Je&&Je.now?function(){return Je.now()}:function(){return Date.now()},tt=function(){if(d){if(d.requestAnimationFrame)return function(e){d.requestAnimationFrame(e)};if(d.mozRequestAnimationFrame)return function(e){d.mozRequestAnimationFrame(e)};if(d.webkitRequestAnimationFrame)return function(e){d.webkitRequestAnimationFrame(e)};if(d.msRequestAnimationFrame)return function(e){d.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(et())}),1e3/60)}}(),nt=function(e){return tt(e)},rt=et,it=9261,at=65599,ot=5381,st=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:it;!(t=e.next()).done;)n=n*at+t.value|0;return n},lt=function(e){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:it)*at+e|0},ut=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ot;return(t<<5)+t+e|0},ct=function(e,t){return 2097152*e+t},ht=function(e){return 2097152*e[0]+e[1]},dt=function(e,t){return[lt(e[0],t[0]),ut(e[1],t[1])]},pt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r<i?n.value=e[r++]:n.done=!0,n}},t)},gt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r<i?n.value=e.charCodeAt(r++):n.done=!0,n}},t)},ft=function(){return vt(arguments)},vt=function(e){for(var t,n=0;n<e.length;n++){var r=e[n];t=0===n?gt(r):gt(r,t)}return t},yt=!0,mt=null!=console.warn,bt=null!=console.trace,xt=Number.MAX_SAFE_INTEGER||9007199254740991,wt=function(){return!0},Et=function(){return!1},Tt=function(){return 0},_t=function(){},Dt=function(e){throw new Error(e)},Ct=function(e){if(void 0===e)return yt;yt=!!e},Nt=function(e){Ct()&&(mt?console.warn(e):(console.log(e),bt&&console.trace()))},At=function(e){return Q({},e)},Lt=function(e){return null==e?e:w(e)?e.slice():E(e)?At(e):e},St=function(e){return e.slice()},Ot=function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t},It={},kt=function(){return It},Mt=function(e){var t=Object.keys(e);return function(n){for(var r={},i=0;i<t.length;i++){var a=t[i],o=null==n?void 0:n[a];r[a]=void 0===o?e[a]:o}return r}},Pt=function(e,t,n){for(var r=e.length-1;r>=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Rt=function(e){e.splice(0,e.length)},Bt=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.push(r)}},Ft=function(e,t,n){return n&&(t=Y(n,t)),e[t]},zt=function(e,t,n,r){n&&(t=Y(n,t)),e[t]=r},Gt=function(){function e(){t(this,e),this._obj={}}return i(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),Yt="undefined"!=typeof Map?Map:Gt,Xt="undefined",Vt=function(){function e(n){if(t(this,e),this._obj=Object.create(null),this.size=0,null!=n){var r;r=null!=n.instanceString&&n.instanceString()===this.instanceString()?n.toArray():n;for(var i=0;i<r.length;i++)this.add(r[i])}}return i(e,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(e){var t=this._obj;1!==t[e]&&(t[e]=1,this.size++)}},{key:"delete",value:function(e){var t=this._obj;1===t[e]&&(t[e]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(e){return 1===this._obj[e]}},{key:"toArray",value:function(){var e=this;return Object.keys(this._obj).filter((function(t){return e.has(t)}))}},{key:"forEach",value:function(e,t){return this.toArray().forEach(e,t)}}]),e}(),Ut=("undefined"==typeof Set?"undefined":e(Set))!==Xt?Set:Vt,jt=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&S(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new Ut,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var l=[];w(t.classes)?l=t.classes:b(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;u<c;u++){var h=l[u];h&&""!==h&&i.classes.add(h)}this.createEmitter();var d=t.style||t.css;d&&(Nt("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(d)),(void 0===n||n)&&this.restore()}else Dt("An element must be of type `nodes` or `edges`; you specified `"+r+"`")}else Dt("An element must have a core reference and parameters set")},Ht=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,r){var i;E(t)&&!N(t)&&(t=(i=t).roots||i.root,n=i.visit,r=i.directed),r=2!==arguments.length||x(n)?r:n,n=x(n)?n:function(){};for(var a,o=this._private.cy,s=t=b(t)?this.filter(t):t,l=[],u=[],c={},h={},d={},p=0,g=this.byGroup(),f=g.nodes,v=g.edges,y=0;y<s.length;y++){var m=s[y],w=m.id();m.isNode()&&(l.unshift(m),e.bfs&&(d[w]=!0,u.push(m)),h[w]=0)}for(var T=function(){var t=e.bfs?l.shift():l.pop(),i=t.id();if(e.dfs){if(d[i])return"continue";d[i]=!0,u.push(t)}var o=h[i],s=c[i],g=null!=s?s.source():null,y=null!=s?s.target():null,m=null==s?void 0:t.same(g)?y[0]:g[0],b=void 0;if(!0===(b=n(t,s,m,p++,o)))return a=t,"break";if(!1===b)return"break";for(var x=t.connectedEdges().filter((function(e){return(!r||e.source().same(t))&&v.has(e)})),w=0;w<x.length;w++){var E=x[w],T=E.connectedNodes().filter((function(e){return!e.same(t)&&f.has(e)})),_=T.id();0===T.length||d[_]||(T=T[0],l.push(T),e.bfs&&(d[_]=!0,u.push(T)),c[_]=E,h[_]=h[i]+1)}};0!==l.length;){var _=T();if("continue"!==_&&"break"===_)break}for(var D=o.collection(),C=0;C<u.length;C++){var A=u[C],L=c[A.id()];null!=L&&D.push(L),D.push(A)}return{path:o.collection(D),found:o.collection(a)}}},qt={breadthFirstSearch:Ht({bfs:!0}),depthFirstSearch:Ht({dfs:!0})};qt.bfs=qt.breadthFirstSearch,qt.dfs=qt.depthFirstSearch;var Wt=ce((function(e,t){(function(){var t,n,r,i,a,o,s,l,u,c,h,d,p,g,f;r=Math.floor,c=Math.min,n=function(e,t){return e<t?-1:e>t?1:0},u=function(e,t,i,a,o){var s;if(null==i&&(i=0),null==o&&(o=n),i<0)throw new Error("lo must be non-negative");for(null==a&&(a=e.length);i<a;)o(t,e[s=r((i+a)/2)])<0?a=s:i=s+1;return[].splice.apply(e,[i,i-i].concat(t)),t},o=function(e,t,r){return null==r&&(r=n),e.push(t),g(e,0,e.length-1,r)},a=function(e,t){var r,i;return null==t&&(t=n),r=e.pop(),e.length?(i=e[0],e[0]=r,f(e,0,t)):i=r,i},l=function(e,t,r){var i;return null==r&&(r=n),i=e[0],e[0]=t,f(e,0,r),i},s=function(e,t,r){var i;return null==r&&(r=n),e.length&&r(e[0],t)<0&&(t=(i=[e[0],t])[0],e[0]=i[1],f(e,0,r)),t},i=function(e,t){var i,a,o,s,l,u;for(null==t&&(t=n),l=[],a=0,o=(s=function(){u=[];for(var t=0,n=r(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;a<o;a++)i=s[a],l.push(f(e,i,t));return l},p=function(e,t,r){var i;if(null==r&&(r=n),-1!==(i=e.indexOf(t)))return g(e,0,i,r),f(e,i,r)},h=function(e,t,r){var a,o,l,u,c;if(null==r&&(r=n),!(o=e.slice(0,t)).length)return o;for(i(o,r),l=0,u=(c=e.slice(t)).length;l<u;l++)a=c[l],s(o,a,r);return o.sort(r).reverse()},d=function(e,t,r){var o,s,l,h,d,p,g,f,v;if(null==r&&(r=n),10*t<=e.length){if(!(l=e.slice(0,t).sort(r)).length)return l;for(s=l[l.length-1],h=0,p=(g=e.slice(t)).length;h<p;h++)r(o=g[h],s)<0&&(u(l,o,0,null,r),l.pop(),s=l[l.length-1]);return l}for(i(e,r),v=[],d=0,f=c(t,e.length);0<=f?d<f:d>f;0<=f?++d:--d)v.push(a(e,r));return v},g=function(e,t,r,i){var a,o,s;for(null==i&&(i=n),a=e[r];r>t&&i(a,o=e[s=r-1>>1])<0;)e[r]=o,r=s;return e[r]=a},f=function(e,t,r){var i,a,o,s,l;for(null==r&&(r=n),a=e.length,l=t,o=e[t],i=2*t+1;i<a;)(s=i+1)<a&&!(r(e[i],e[s])<0)&&(i=s),e[t]=e[i],i=2*(t=i)+1;return e[t]=o,g(e,l,t,r)},t=function(){function e(e){this.cmp=null!=e?e:n,this.nodes=[]}return e.push=o,e.pop=a,e.replace=l,e.pushpop=s,e.heapify=i,e.updateItem=p,e.nlargest=h,e.nsmallest=d,e.prototype.push=function(e){return o(this.nodes,e,this.cmp)},e.prototype.pop=function(){return a(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return l(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return s(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return i(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return p(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),function(t,n){e.exports=n()}(0,(function(){return t}))}).call(ue)})),$t=Wt,Kt=Mt({root:null,weight:function(e){return 1},directed:!1}),Zt={dijkstra:function(e){if(!E(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var n=Kt(e),r=n.root,i=n.weight,a=n.directed,o=this,s=i,l=b(r)?this.filter(r)[0]:r[0],u={},c={},h={},d=this.byGroup(),p=d.nodes,g=d.edges;g.unmergeBy((function(e){return e.isLoop()}));for(var f=function(e){return u[e.id()]},v=function(e,t){u[e.id()]=t,y.updateItem(e)},y=new $t((function(e,t){return f(e)-f(t)})),m=0;m<p.length;m++){var x=p[m];u[x.id()]=x.same(l)?0:1/0,y.push(x)}for(var w=function(e,t){for(var n,r=(a?e.edgesTo(t):e.edgesWith(t)).intersect(g),i=1/0,o=0;o<r.length;o++){var l=r[o],u=s(l);(u<i||!n)&&(i=u,n=l)}return{edge:n,dist:i}};y.size()>0;){var T=y.pop(),_=f(T),D=T.id();if(h[D]=_,_!==1/0)for(var C=T.neighborhood().intersect(p),N=0;N<C.length;N++){var A=C[N],L=A.id(),S=w(T,A),O=_+S.dist;O<f(A)&&(v(A,O),c[L]={node:T,edge:S.edge})}}return{distanceTo:function(e){var t=b(e)?p.filter(e)[0]:e[0];return h[t.id()]},pathTo:function(e){var t=b(e)?p.filter(e)[0]:e[0],n=[],r=t,i=r.id();if(t.length>0)for(n.unshift(t);c[i];){var a=c[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},Qt={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t<a.length;t++)if(a[t].has(e))return t},l=0;l<i;l++)a[l]=this.spawn(n[l]);for(var u=r.sort((function(t,n){return e(t)-e(n)})),c=0;c<u.length;c++){var h=u[c],d=h.source()[0],p=h.target()[0],g=s(d),f=s(p),v=a[g],y=a[f];g!==f&&(o.merge(h),v.merge(y),a.splice(f,1))}return o}},Jt=Mt({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),en={aStar:function(e){var t=this.cy(),n=Jt(e),r=n.root,i=n.goal,a=n.heuristic,o=n.directed,s=n.weight;r=t.collection(r)[0],i=t.collection(i)[0];var l,u,c=r.id(),h=i.id(),d={},p={},g={},f=new $t((function(e,t){return p[e.id()]-p[t.id()]})),v=new Ut,y={},m={},b=function(e,t){f.push(e),v.add(t)},x=function(){l=f.pop(),u=l.id(),v.delete(u)},w=function(e){return v.has(e)};b(r,c),d[c]=0,p[c]=a(r);for(var E=0;f.size()>0;){if(x(),E++,u===h){for(var T=[],_=i,D=h,C=m[D];T.unshift(_),null!=C&&T.unshift(C),null!=(_=y[D]);)C=m[D=_.id()];return{found:!0,distance:d[u],path:this.spawn(T),steps:E}}g[u]=!0;for(var N=l._private.edges,A=0;A<N.length;A++){var L=N[A];if(this.hasElementWithId(L.id())&&(!o||L.data("source")===u)){var S=L.source(),O=L.target(),I=S.id()!==u?S:O,k=I.id();if(this.hasElementWithId(k)&&!g[k]){var M=d[u]+s(L);w(k)?M<d[k]&&(d[k]=M,p[k]=M+a(I),y[k]=l,m[k]=L):(d[k]=M,p[k]=M+a(I),b(I,k),y[k]=l,m[k]=L)}}}}return{found:!1,distance:void 0,path:void 0,steps:E}}},tn=Mt({weight:function(e){return 1},directed:!1}),nn={floydWarshall:function(e){for(var t=this.cy(),n=tn(e),r=n.weight,i=n.directed,a=r,o=this.byGroup(),s=o.nodes,l=o.edges,u=s.length,c=u*u,h=function(e){return s.indexOf(e)},d=function(e){return s[e]},p=new Array(c),g=0;g<c;g++){var f=g%u,v=(g-f)/u;p[g]=v===f?0:1/0}for(var y=new Array(c),m=new Array(c),x=0;x<l.length;x++){var w=l[x],E=w.source()[0],T=w.target()[0];if(E!==T){var _=h(E),D=h(T),C=_*u+D,N=a(w);if(p[C]>N&&(p[C]=N,y[C]=D,m[C]=w),!i){var A=D*u+_;!i&&p[A]>N&&(p[A]=N,y[A]=_,m[A]=w)}}}for(var L=0;L<u;L++)for(var S=0;S<u;S++)for(var O=S*u+L,I=0;I<u;I++){var k=S*u+I,M=L*u+I;p[O]+p[M]<p[k]&&(p[k]=p[O]+p[M],y[k]=y[O])}var P=function(e){return(b(e)?t.filter(e):e)[0]},R=function(e){return h(P(e))},B={distance:function(e,t){var n=R(e),r=R(t);return p[n*u+r]},path:function(e,n){var r=R(e),i=R(n),a=d(r);if(r===i)return a.collection();if(null==y[r*u+i])return t.collection();var o,s=t.collection(),l=r;for(s.merge(a);r!==i;)l=r,r=y[r*u+i],o=m[l*u+r],s.merge(o),s.merge(d(r));return s}};return B}},rn=Mt({weight:function(e){return 1},directed:!1,root:null}),an={bellmanFord:function(e){var t=this,n=rn(e),r=n.weight,i=n.directed,a=n.root,o=r,s=this,l=this.cy(),u=this.byGroup(),c=u.edges,h=u.nodes,d=h.length,p=new Yt,g=!1,f=[];a=l.collection(a)[0],c.unmergeBy((function(e){return e.isLoop()}));for(var v=c.length,y=function(e){var t=p.get(e.id());return t||(t={},p.set(e.id(),t)),t},m=function(e){return(b(e)?l.$(e):e)[0]},x=function(e){return y(m(e)).dist},w=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a,r=[],i=m(e);;){if(null==i)return t.spawn();var o=y(i),l=o.edge,u=o.pred;if(r.unshift(i[0]),i.same(n)&&r.length>0)break;null!=l&&r.unshift(l),i=u}return s.spawn(r)},E=0;E<d;E++){var T=h[E],_=y(T);T.same(a)?_.dist=0:_.dist=1/0,_.pred=null,_.edge=null}for(var D=!1,C=function(e,t,n,r,i,a){var o=r.dist+a;o<i.dist&&!n.same(r.edge)&&(i.dist=o,i.pred=e,i.edge=n,D=!0)},N=1;N<d;N++){D=!1;for(var A=0;A<v;A++){var L=c[A],S=L.source(),O=L.target(),I=o(L),k=y(S),M=y(O);C(S,O,L,k,M,I),i||C(O,S,L,M,k,I)}if(!D)break}if(D)for(var P=[],R=0;R<v;R++){var B=c[R],F=B.source(),z=B.target(),G=o(B),Y=y(F).dist,X=y(z).dist;if(Y+G<X||!i&&X+G<Y){if(g||(Nt("Graph contains a negative weight cycle for Bellman-Ford"),g=!0),!1===e.findNegativeWeightCycles)break;var V=[];Y+G<X&&V.push(F),!i&&X+G<Y&&V.push(z);for(var U=V.length,j=0;j<U;j++){var H=V[j],q=[H];q.push(y(H).edge);for(var W=y(H).pred;-1===q.indexOf(W);)q.push(W),q.push(y(W).edge),W=y(W).pred;for(var $=(q=q.slice(q.indexOf(W)))[0].id(),K=0,Z=2;Z<q.length;Z+=2)q[Z].id()<$&&($=q[Z].id(),K=Z);(q=q.slice(K).concat(q.slice(0,K))).push(q[0]);var Q=q.map((function(e){return e.id()})).join(",");-1===P.indexOf(Q)&&(f.push(s.spawn(q)),P.push(Q))}}}return{distanceTo:x,pathTo:w,hasNegativeWeightCycle:g,negativeWeightCycles:f}}},on=Math.sqrt(2),sn=function(e,t,n){0===n.length&&Dt("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],l=n,u=l.length-1;u>=0;u--){var c=l[u],h=c[1],d=c[2];(t[h]===o&&t[d]===s||t[h]===s&&t[d]===o)&&l.splice(u,1)}for(var p=0;p<l.length;p++){var g=l[p];g[1]===s?(l[p]=g.slice(),l[p][1]=o):g[2]===s&&(l[p]=g.slice(),l[p][2]=o)}for(var f=0;f<t.length;f++)t[f]===s&&(t[f]=o);return l},ln=function(e,t,n,r){for(;n>r;){var i=Math.floor(Math.random()*t.length);t=sn(i,e,t),n--}return t},un={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/on);if(!(i<2)){for(var l=[],u=0;u<a;u++){var c=r[u];l.push([u,n.indexOf(c.source()),n.indexOf(c.target())])}for(var h=1/0,d=[],p=new Array(i),g=new Array(i),f=new Array(i),v=function(e,t){for(var n=0;n<i;n++)t[n]=e[n]},y=0;y<=o;y++){for(var m=0;m<i;m++)g[m]=m;var b=ln(g,l.slice(),i,s),x=b.slice();v(g,f);var w=ln(g,b,s,2),E=ln(f,x,s,2);w.length<=E.length&&w.length<h?(h=w.length,d=w,v(g,p)):E.length<=w.length&&E.length<h&&(h=E.length,d=E,v(f,p))}for(var T=this.spawn(d.map((function(e){return r[e[0]]}))),_=this.spawn(),D=this.spawn(),C=p[0],N=0;N<p.length;N++){var A=p[N],L=n[N];A===C?_.merge(L):D.merge(L)}var S=function(t){var n=e.spawn();return t.forEach((function(t){n.merge(t),t.connectedEdges().forEach((function(t){e.contains(t)&&!T.contains(t)&&n.merge(t)}))})),n},O=[S(_),S(D)];return{cut:T,components:O,partition1:_,partition2:D}}Dt("At least 2 nodes are required for Karger-Stein algorithm")}},cn=function(e){return{x:e.x,y:e.y}},hn=function(e,t,n){return{x:e.x*t+n.x,y:e.y*t+n.y}},dn=function(e,t,n){return{x:(e.x-n.x)/t,y:(e.y-n.y)/t}},pn=function(e){return{x:e[0],y:e[1]}},gn=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.min(a,r))}return r},fn=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.max(a,r))}return r},vn=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a<n;a++){var o=e[a];isFinite(o)&&(r+=o,i++)}return r/i},yn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n<e.length&&e.splice(n,e.length-n),t>0&&e.splice(0,t)):e=e.slice(t,n);for(var a=0,o=e.length-1;o>=0;o--){var s=e[o];i?isFinite(s)||(e[o]=-1/0,a++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+a]:(e[u-1+a]+e[u+a])/2},mn=function(e){return Math.PI*e/180},bn=function(e,t){return Math.atan2(t,e)-Math.PI/2},xn=Math.log2||function(e){return Math.log(e)/Math.log(2)},wn=function(e){return e>0?1:e<0?-1:0},En=function(e,t){return Math.sqrt(Tn(e,t))},Tn=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},_n=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(var i=0;i<t;i++)e[i]=e[i]/n;return e},Dn=function(e,t,n,r){return(1-r)*(1-r)*e+2*(1-r)*r*t+r*r*n},Cn=function(e,t,n,r){return{x:Dn(e.x,t.x,n.x,r),y:Dn(e.y,t.y,n.y,r)}},Nn=function(e,t,n,r){var i={x:t.x-e.x,y:t.y-e.y},a=En(e,t),o={x:i.x/a,y:i.y/a};return n=null==n?0:n,r=null!=r?r:n*a,{x:e.x+o.x*r,y:e.y+o.y*r}},An=function(e,t,n){return Math.max(e,Math.min(n,t))},Ln=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},Sn=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},On=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},In=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},kn=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},Mn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Pn=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var s=o(a,4);t=s[0],n=s[1],r=s[2],i=s[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Rn=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},Bn=function(e,t){return!(e.x1>t.x2||t.x1>e.x2||e.x2<t.x1||t.x2<e.x1||e.y2<t.y1||t.y2<e.y1||e.y1>t.y2||t.y1>e.y2)},Fn=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},zn=function(e,t){return Fn(e,t.x,t.y)},Gn=function(e,t){return Fn(e,t.x1,t.y1)&&Fn(e,t.x2,t.y2)},Yn=function(e,t,n,r,i,a,o){var s,l=cr(i,a),u=i/2,c=a/2,h=r-c-o;if((s=rr(e,t,n,r,n-u+l-o,h,n+u-l+o,h,!1)).length>0)return s;var d=n+u+o;if((s=rr(e,t,n,r,d,r-c+l-o,d,r+c-l+o,!1)).length>0)return s;var p=r+c+o;if((s=rr(e,t,n,r,n-u+l-o,p,n+u-l+o,p,!1)).length>0)return s;var g,f=n-u-o;if((s=rr(e,t,n,r,f,r-c+l-o,f,r+c-l+o,!1)).length>0)return s;var v=n-u+l,y=r-c+l;if((g=tr(e,t,n,r,v,y,l+o)).length>0&&g[0]<=v&&g[1]<=y)return[g[0],g[1]];var m=n+u-l,b=r-c+l;if((g=tr(e,t,n,r,m,b,l+o)).length>0&&g[0]>=m&&g[1]<=b)return[g[0],g[1]];var x=n+u-l,w=r+c-l;if((g=tr(e,t,n,r,x,w,l+o)).length>0&&g[0]>=x&&g[1]>=w)return[g[0],g[1]];var E=n-u+l,T=r+c-l;return(g=tr(e,t,n,r,E,T,l+o)).length>0&&g[0]<=E&&g[1]>=T?[g[0],g[1]]:[]},Xn=function(e,t,n,r,i,a,o){var s=o,l=Math.min(n,i),u=Math.max(n,i),c=Math.min(r,a),h=Math.max(r,a);return l-s<=e&&e<=u+s&&c-s<=t&&t<=h+s},Vn=function(e,t,n,r,i,a,o,s,l){var u={x1:Math.min(n,o,i)-l,x2:Math.max(n,o,i)+l,y1:Math.min(r,s,a)-l,y2:Math.max(r,s,a)+l};return!(e<u.x1||e>u.x2||t<u.y1||t>u.y2)},Un=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]},jn=function(e,t,n,r,i){var a,o,s,l,u,c,h,d;return 0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,h=t/3,a>0?(u=(u=s+Math.sqrt(a))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-h+u+c,h+=(u+c)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-c+u)/2,i[3]=h,void(i[5]=-h)):(i[5]=i[3]=0,0===a?(d=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*d-h,void(i[4]=i[2]=-(d+h))):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),d=2*Math.sqrt(o),i[0]=-h+d*Math.cos(l/3),i[2]=-h+d*Math.cos((l+2*Math.PI)/3),void(i[4]=-h+d*Math.cos((l+4*Math.PI)/3))))},Hn=function(e,t,n,r,i,a,o,s){var l=[];jn(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,l);for(var u=1e-7,c=[],h=0;h<6;h+=2)Math.abs(l[h+1])<u&&l[h]>=0&&l[h]<=1&&c.push(l[h]);c.push(1),c.push(0);for(var d,p,g,f=-1,v=0;v<c.length;v++)d=Math.pow(1-c[v],2)*n+2*(1-c[v])*c[v]*i+c[v]*c[v]*o,p=Math.pow(1-c[v],2)*r+2*(1-c[v])*c[v]*a+c[v]*c[v]*s,g=Math.pow(d-e,2)+Math.pow(p-t,2),f>=0?g<f&&(f=g):f=g;return f},qn=function(e,t,n,r,i,a){var o=[e-n,t-r],s=[i-n,a-r],l=s[0]*s[0]+s[1]*s[1],u=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],h=c*c/l;return c<0?u:h>l?(e-i)*(e-i)+(t-a)*(t-a):u-h},Wn=function(e,t,n){for(var r,i,a,o,s=0,l=0;l<n.length/2;l++)if(r=n[2*l],i=n[2*l+1],l+1<n.length/2?(a=n[2*(l+1)],o=n[2*(l+1)+1]):(a=n[2*(l+1-n.length/2)],o=n[2*(l+1-n.length/2)+1]),r==e&&a==e);else{if(!(r>=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},$n=function(e,t,n,r,i,a,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var h,d=Math.cos(-u),p=Math.sin(-u),g=0;g<c.length/2;g++)c[2*g]=a/2*(n[2*g]*d-n[2*g+1]*p),c[2*g+1]=o/2*(n[2*g+1]*d+n[2*g]*p),c[2*g]+=r,c[2*g+1]+=i;if(l>0){var f=Qn(c,-l);h=Zn(f)}else h=c;return Wn(e,t,h)},Kn=function(e,t,n,r,i,a,o){for(var s=new Array(n.length),l=a/2,u=o/2,c=hr(a,o),h=c*c,d=0;d<n.length/4;d++){var p=void 0,g=void 0;p=0===d?n.length-2:4*d-2,g=4*d+2;var f=r+l*n[4*d],v=i+u*n[4*d+1],y=-n[p]*n[g]-n[p+1]*n[g+1],m=c/Math.tan(Math.acos(y)/2),b=f-m*n[p],x=v-m*n[p+1],w=f+m*n[g],E=v+m*n[g+1];s[4*d]=b,s[4*d+1]=x,s[4*d+2]=w,s[4*d+3]=E;var T=n[p+1],_=-n[p];T*n[g]+_*n[g+1]<0&&(T*=-1,_*=-1);var D=b+T*c,C=x+_*c;if(Math.pow(D-e,2)+Math.pow(C-t,2)<=h)return!0}return Wn(e,t,s)},Zn=function(e){for(var t,n,r,i,a,o,s,l,u=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],n=e[4*c+1],r=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],l=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],l=e[3]);var h=rr(t,n,r,i,a,o,s,l,!0);u[2*c]=h[0],u[2*c+1]=h[1]}return u},Qn=function(e,t){for(var n,r,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){n=e[2*s],r=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var l=a-r,u=-(i-n),c=Math.sqrt(l*l+u*u),h=l/c,d=u/c;o[4*s]=n+h*t,o[4*s+1]=r+d*t,o[4*s+2]=i+h*t,o[4*s+3]=a+d*t}return o},Jn=function(e,t,n,r,i,a){var o=n-e,s=r-t;o/=i,s/=a;var l=Math.sqrt(o*o+s*s),u=l-1;if(u<0)return[];var c=u/l;return[(n-e)*c+e,(r-t)*c+t]},er=function(e,t,n,r,i,a,o){return e-=i,t-=a,(e/=n/2+o)*e+(t/=r/2+o)*t<=1},tr=function(e,t,n,r,i,a,o){var s=[n-e,r-t],l=[e-i,t-a],u=s[0]*s[0]+s[1]*s[1],c=2*(l[0]*s[0]+l[1]*s[1]),h=c*c-4*u*(l[0]*l[0]+l[1]*l[1]-o*o);if(h<0)return[];var d=(-c+Math.sqrt(h))/(2*u),p=(-c-Math.sqrt(h))/(2*u),g=Math.min(d,p),f=Math.max(d,p),v=[];if(g>=0&&g<=1&&v.push(g),f>=0&&f<=1&&v.push(f),0===v.length)return[];var y=v[0]*s[0]+e,m=v[0]*s[1]+t;return v.length>1?v[0]==v[1]?[y,m]:[y,m,v[1]*s[0]+e,v[1]*s[1]+t]:[y,m]},nr=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},rr=function(e,t,n,r,i,a,o,s,l){var u=e-i,c=n-e,h=o-i,d=t-a,p=r-t,g=s-a,f=h*d-g*u,v=c*d-p*u,y=g*c-h*p;if(0!==y){var m=f/y,b=v/y,x=.001,w=0-x,E=1+x;return w<=m&&m<=E&&w<=b&&b<=E||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?nr(e,n,o)===o?[o,s]:nr(e,n,i)===i?[i,a]:nr(i,o,n)===n?[n,r]:[]:[]},ir=function(e,t,n,r,i,a,o,s){var l,u,c,h,d,p,g=[],f=new Array(n.length),v=!0;if(null==a&&(v=!1),v){for(var y=0;y<f.length/2;y++)f[2*y]=n[2*y]*a+r,f[2*y+1]=n[2*y+1]*o+i;if(s>0){var m=Qn(f,-s);u=Zn(m)}else u=f}else u=n;for(var b=0;b<u.length/2;b++)c=u[2*b],h=u[2*b+1],b<u.length/2-1?(d=u[2*(b+1)],p=u[2*(b+1)+1]):(d=u[0],p=u[1]),0!==(l=rr(e,t,r,i,c,h,d,p)).length&&g.push(l[0],l[1]);return g},ar=function(e,t,n,r,i,a,o,s){for(var l,u=[],c=new Array(n.length),h=a/2,d=o/2,p=hr(a,o),g=0;g<n.length/4;g++){var f=void 0,v=void 0;f=0===g?n.length-2:4*g-2,v=4*g+2;var y=r+h*n[4*g],m=i+d*n[4*g+1],b=-n[f]*n[v]-n[f+1]*n[v+1],x=p/Math.tan(Math.acos(b)/2),w=y-x*n[f],E=m-x*n[f+1],T=y+x*n[v],_=m+x*n[v+1];0===g?(c[n.length-2]=w,c[n.length-1]=E):(c[4*g-2]=w,c[4*g-1]=E),c[4*g]=T,c[4*g+1]=_;var D=n[f+1],C=-n[f];D*n[v]+C*n[v+1]<0&&(D*=-1,C*=-1),0!==(l=tr(e,t,r,i,w+D*p,E+C*p,p)).length&&u.push(l[0],l[1])}for(var N=0;N<c.length/4;N++)0!==(l=rr(e,t,r,i,c[4*N],c[4*N+1],c[4*N+2],c[4*N+3],!1)).length&&u.push(l[0],l[1]);if(u.length>2){for(var A=[u[0],u[1]],L=Math.pow(A[0]-e,2)+Math.pow(A[1]-t,2),S=1;S<u.length/2;S++){var O=Math.pow(u[2*S]-e,2)+Math.pow(u[2*S+1]-t,2);O<=L&&(A[0]=u[2*S],A[1]=u[2*S+1],L=O)}return A}return u},or=function(e,t,n){var r=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(r[0]*r[0]+r[1]*r[1]),a=(i-n)/i;return a<0&&(a=1e-5),[t[0]+a*r[0],t[1]+a*r[1]]},sr=function(e,t){var n=ur(e,t);return n=lr(n)},lr=function(e){for(var t,n,r=e.length/2,i=1/0,a=1/0,o=-1/0,s=-1/0,l=0;l<r;l++)t=e[2*l],n=e[2*l+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);for(var u=2/(o-i),c=2/(s-a),h=0;h<r;h++)t=e[2*h]=e[2*h]*u,n=e[2*h+1]=e[2*h+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);if(a<-1)for(var d=0;d<r;d++)n=e[2*d+1]=e[2*d+1]+(-1-a);return e},ur=function(e,t){var n=1/e*2*Math.PI,r=e%2==0?Math.PI/2+n/2:Math.PI/2;r+=t;for(var i,a=new Array(2*e),o=0;o<e;o++)i=o*n+r,a[2*o]=Math.cos(i),a[2*o+1]=Math.sin(-i);return a},cr=function(e,t){return Math.min(e/4,t/4,8)},hr=function(e,t){return Math.min(e/10,t/10,8)},dr=function(){return 8},pr=function(e,t,n){return[e-2*t+n,2*(t-e),e]},gr=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},fr=Mt({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),vr={pageRank:function(e){for(var t=fr(e),n=t.dampingFactor,r=t.precision,i=t.iterations,a=t.weight,o=this._private.cy,s=this.byGroup(),l=s.nodes,u=s.edges,c=l.length,h=c*c,d=u.length,p=new Array(h),g=new Array(c),f=(1-n)/c,v=0;v<c;v++){for(var y=0;y<c;y++)p[v*c+y]=0;g[v]=0}for(var m=0;m<d;m++){var b=u[m],x=b.data("source"),w=b.data("target");if(x!==w){var E=l.indexOfId(x),T=l.indexOfId(w),_=a(b);p[T*c+E]+=_,g[E]+=_}}for(var D=1/c+f,C=0;C<c;C++)if(0===g[C])for(var N=0;N<c;N++)p[N*c+C]=D;else for(var A=0;A<c;A++){var L=A*c+C;p[L]=p[L]/g[C]+f}for(var S,O=new Array(c),I=new Array(c),k=0;k<c;k++)O[k]=1;for(var M=0;M<i;M++){for(var P=0;P<c;P++)I[P]=0;for(var R=0;R<c;R++)for(var B=0;B<c;B++){var F=R*c+B;I[R]+=p[F]*O[B]}_n(I),S=O,O=I,I=S;for(var z=0,G=0;G<c;G++){var Y=S[G]-O[G];z+=Y*Y}if(z<r)break}return{rank:function(e){return e=o.collection(e)[0],O[l.indexOf(e)]}}}},yr=Mt({root:null,weight:function(e){return 1},directed:!1,alpha:0}),mr={degreeCentralityNormalized:function(e){e=yr(e);var t=this.cy(),n=this.nodes(),r=n.length;if(e.directed){for(var i={},a={},o=0,s=0,l=0;l<r;l++){var u=n[l],c=u.id();e.root=u;var h=this.degreeCentrality(e);o<h.indegree&&(o=h.indegree),s<h.outdegree&&(s=h.outdegree),i[c]=h.indegree,a[c]=h.outdegree}return{indegree:function(e){return 0==o?0:(b(e)&&(e=t.filter(e)),i[e.id()]/o)},outdegree:function(e){return 0===s?0:(b(e)&&(e=t.filter(e)),a[e.id()]/s)}}}for(var d={},p=0,g=0;g<r;g++){var f=n[g];e.root=f;var v=this.degreeCentrality(e);p<v.degree&&(p=v.degree),d[f.id()]=v.degree}return{degree:function(e){return 0===p?0:(b(e)&&(e=t.filter(e)),d[e.id()]/p)}}},degreeCentrality:function(e){e=yr(e);var t=this.cy(),n=this,r=e,i=r.root,a=r.weight,o=r.directed,s=r.alpha;if(i=t.collection(i)[0],o){for(var l=i.connectedEdges(),u=l.filter((function(e){return e.target().same(i)&&n.has(e)})),c=l.filter((function(e){return e.source().same(i)&&n.has(e)})),h=u.length,d=c.length,p=0,g=0,f=0;f<u.length;f++)p+=a(u[f]);for(var v=0;v<c.length;v++)g+=a(c[v]);return{indegree:Math.pow(h,1-s)*Math.pow(p,s),outdegree:Math.pow(d,1-s)*Math.pow(g,s)}}for(var y=i.connectedEdges().intersection(n),m=y.length,b=0,x=0;x<y.length;x++)b+=a(y[x]);return{degree:Math.pow(m,1-s)*Math.pow(b,s)}}};mr.dc=mr.degreeCentrality,mr.dcn=mr.degreeCentralityNormalised=mr.degreeCentralityNormalized;var br=Mt({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),xr={closenessCentralityNormalized:function(e){for(var t=br(e),n=t.harmonic,r=t.weight,i=t.directed,a=this.cy(),o={},s=0,l=this.nodes(),u=this.floydWarshall({weight:r,directed:i}),c=0;c<l.length;c++){for(var h=0,d=l[c],p=0;p<l.length;p++)if(c!==p){var g=u.distance(d,l[p]);h+=n?1/g:g}n||(h=1/h),s<h&&(s=h),o[d.id()]=h}return{closeness:function(e){return 0==s?0:(e=b(e)?a.filter(e)[0].id():e.id(),o[e]/s)}}},closenessCentrality:function(e){var t=br(e),n=t.root,r=t.weight,i=t.directed,a=t.harmonic;n=this.filter(n)[0];for(var o=this.dijkstra({root:n,weight:r,directed:i}),s=0,l=this.nodes(),u=0;u<l.length;u++){var c=l[u];if(!c.same(n)){var h=o.distanceTo(c);s+=a?1/h:h}}return a?s:1/s}};xr.cc=xr.closenessCentrality,xr.ccn=xr.closenessCentralityNormalised=xr.closenessCentralityNormalized;var wr=Mt({weight:null,directed:!1}),Er={betweennessCentrality:function(e){for(var t=wr(e),n=t.directed,r=t.weight,i=null!=r,a=this.cy(),o=this.nodes(),s={},l={},u=0,c={set:function(e,t){l[e]=t,t>u&&(u=t)},get:function(e){return l[e]}},h=0;h<o.length;h++){var d=o[h],p=d.id();s[p]=n?d.outgoers().nodes():d.openNeighborhood().nodes(),c.set(p,0)}for(var g=function(e){for(var t=o[e].id(),n=[],l={},u={},h={},d=new $t((function(e,t){return h[e]-h[t]})),p=0;p<o.length;p++){var g=o[p].id();l[g]=[],u[g]=0,h[g]=1/0}for(u[t]=1,h[t]=0,d.push(t);!d.empty();){var f=d.pop();if(n.push(f),i)for(var v=0;v<s[f].length;v++){var y=s[f][v],m=a.getElementById(f),b=void 0;b=m.edgesTo(y).length>0?m.edgesTo(y)[0]:y.edgesTo(m)[0];var x=r(b);y=y.id(),h[y]>h[f]+x&&(h[y]=h[f]+x,d.nodes.indexOf(y)<0?d.push(y):d.updateItem(y),u[y]=0,l[y]=[]),h[y]==h[f]+x&&(u[y]=u[y]+u[f],l[y].push(f))}else for(var w=0;w<s[f].length;w++){var E=s[f][w].id();h[E]==1/0&&(d.push(E),h[E]=h[f]+1),h[E]==h[f]+1&&(u[E]=u[E]+u[f],l[E].push(f))}}for(var T={},_=0;_<o.length;_++)T[o[_].id()]=0;for(;n.length>0;){for(var D=n.pop(),C=0;C<l[D].length;C++){var N=l[D][C];T[N]=T[N]+u[N]/u[D]*(1+T[D])}D!=o[e].id()&&c.set(D,c.get(D)+T[D])}},f=0;f<o.length;f++)g(f);var v={betweenness:function(e){var t=a.collection(e).id();return c.get(t)},betweennessNormalized:function(e){if(0==u)return 0;var t=a.collection(e).id();return c.get(t)/u}};return v.betweennessNormalised=v.betweennessNormalized,v}};Er.bc=Er.betweennessCentrality;var Tr=Mt({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(e){return 1}]}),_r=function(e){return Tr(e)},Dr=function(e,t){for(var n=0,r=0;r<t.length;r++)n+=t[r](e);return n},Cr=function(e,t,n){for(var r=0;r<t;r++)e[r*t+r]=n},Nr=function(e,t){for(var n,r=0;r<t;r++){n=0;for(var i=0;i<t;i++)n+=e[i*t+r];for(var a=0;a<t;a++)e[a*t+r]=e[a*t+r]/n}},Ar=function(e,t,n){for(var r=new Array(n*n),i=0;i<n;i++){for(var a=0;a<n;a++)r[i*n+a]=0;for(var o=0;o<n;o++)for(var s=0;s<n;s++)r[i*n+s]+=e[i*n+o]*t[o*n+s]}return r},Lr=function(e,t,n){for(var r=e.slice(0),i=1;i<n;i++)e=Ar(e,r,t);return e},Sr=function(e,t,n){for(var r=new Array(t*t),i=0;i<t*t;i++)r[i]=Math.pow(e[i],n);return Nr(r,t),r},Or=function(e,t,n,r){for(var i=0;i<n;i++)if(Math.round(e[i]*Math.pow(10,r))/Math.pow(10,r)!=Math.round(t[i]*Math.pow(10,r))/Math.pow(10,r))return!1;return!0},Ir=function(e,t,n,r){for(var i=[],a=0;a<t;a++){for(var o=[],s=0;s<t;s++)Math.round(1e3*e[a*t+s])/1e3>0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i},kr=function(e,t){for(var n=0;n<e.length;n++)if(!t[n]||e[n].id()!==t[n].id())return!1;return!0},Mr=function(e){for(var t=0;t<e.length;t++)for(var n=0;n<e.length;n++)t!=n&&kr(e[t],e[n])&&e.splice(n,1);return e},Pr=function(e){for(var t=this.nodes(),n=this.edges(),r=this.cy(),i=_r(e),a={},o=0;o<t.length;o++)a[t[o].id()]=o;for(var s,l=t.length,u=l*l,c=new Array(u),h=0;h<u;h++)c[h]=0;for(var d=0;d<n.length;d++){var p=n[d],g=a[p.source().id()],f=a[p.target().id()],v=Dr(p,i.attributes);c[g*l+f]+=v,c[f*l+g]+=v}Cr(c,l,i.multFactor),Nr(c,l);for(var y=!0,m=0;y&&m<i.maxIterations;)y=!1,s=Lr(c,l,i.expandFactor),c=Sr(s,l,i.inflateFactor),Or(c,s,u,4)||(y=!0),m++;var b=Ir(c,l,t,r);return b=Mr(b)},Rr={markovClustering:Pr,mcl:Pr},Br=function(e){return e},Fr=function(e,t){return Math.abs(t-e)},zr=function(e,t,n){return e+Fr(t,n)},Gr=function(e,t,n){return e+Math.pow(n-t,2)},Yr=function(e){return Math.sqrt(e)},Xr=function(e,t,n){return Math.max(e,Fr(t,n))},Vr=function(e,t,n,r,i){for(var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:Br,o=r,s=0;s<e;s++)o=i(o,t(s),n(s));return a(o)},Ur={euclidean:function(e,t,n){return e>=2?Vr(e,t,n,0,Gr,Yr):Vr(e,t,n,0,zr)},squaredEuclidean:function(e,t,n){return Vr(e,t,n,0,Gr)},manhattan:function(e,t,n){return Vr(e,t,n,0,zr)},max:function(e,t,n){return Vr(e,t,n,-1/0,Xr)}};function jr(e,t,n,r,i,a){var o;return o=x(e)?e:Ur[e]||Ur.euclidean,0===t&&x(e)?o(i,a):o(t,n,r,i,a)}Ur["squared-euclidean"]=Ur.squaredEuclidean,Ur.squaredeuclidean=Ur.squaredEuclidean;var Hr=Mt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),qr=function(e){return Hr(e)},Wr=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=function(e){return r[e](t)},s=n,l=t;return jr(e,r.length,a,o,s,l)},$r=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,l=0;l<r;l++)i[l]=e.min(n[l]).value,a[l]=e.max(n[l]).value;for(var u=0;u<t;u++){s=[];for(var c=0;c<r;c++)s[c]=Math.random()*(a[c]-i[c])+i[c];o[u]=s}return o},Kr=function(e,t,n,r,i){for(var a=1/0,o=0,s=0;s<t.length;s++){var l=Wr(n,e,t[s],r,i);l<a&&(a=l,o=s)}return o},Zr=function(e,t,n){for(var r=[],i=null,a=0;a<t.length;a++)n[(i=t[a]).id()]===e&&r.push(i);return r},Qr=function(e,t,n){return Math.abs(t-e)<=n},Jr=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++)if(Math.abs(e[r][i]-t[r][i])>n)return!1;return!0},ei=function(e,t,n){for(var r=0;r<n;r++)if(e===t[r])return!0;return!1},ti=function(e,t){var n=new Array(t);if(e.length<50)for(var r=0;r<t;r++){for(var i=e[Math.floor(Math.random()*e.length)];ei(i,n,r);)i=e[Math.floor(Math.random()*e.length)];n[r]=i}else for(var a=0;a<t;a++)n[a]=e[Math.floor(Math.random()*e.length)];return n},ni=function(e,t,n){for(var r=0,i=0;i<t.length;i++)r+=Wr("manhattan",t[i],e,n,"kMedoids");return r},ri=function(e,t,n,r,i){for(var a,o,s=0;s<t.length;s++)for(var l=0;l<e.length;l++)r[s][l]=Math.pow(n[s][l],i.m);for(var u=0;u<e.length;u++)for(var c=0;c<i.attributes.length;c++){a=0,o=0;for(var h=0;h<t.length;h++)a+=r[h][u]*i.attributes[c](t[h]),o+=r[h][u];e[u][c]=a/o}},ii=function(e,t,n,r,i){for(var a=0;a<e.length;a++)t[a]=e[a].slice();for(var o,s,l,u=2/(i.m-1),c=0;c<n.length;c++)for(var h=0;h<r.length;h++){o=0;for(var d=0;d<n.length;d++)s=Wr(i.distance,r[h],n[c],i.attributes,"cmeans"),l=Wr(i.distance,r[h],n[d],i.attributes,"cmeans"),o+=Math.pow(s/l,u);e[h][c]=1/o}},ai=function(e,t,n,r){for(var i,a,o=new Array(n.k),s=0;s<o.length;s++)o[s]=[];for(var l=0;l<t.length;l++){i=-1/0,a=-1;for(var u=0;u<t[0].length;u++)t[l][u]>i&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c<o.length;c++)o[c]=r.collection(o[c]);return o},oi=function(e){var t,n,r,i,a=this.cy(),o=this.nodes(),s=qr(e);r=new Array(o.length);for(var l=0;l<o.length;l++)r[l]=new Array(s.k);n=new Array(o.length);for(var u=0;u<o.length;u++)n[u]=new Array(s.k);for(var c=0;c<o.length;c++){for(var h=0,d=0;d<s.k;d++)n[c][d]=Math.random(),h+=n[c][d];for(var p=0;p<s.k;p++)n[c][p]=n[c][p]/h}t=new Array(s.k);for(var g=0;g<s.k;g++)t[g]=new Array(s.attributes.length);i=new Array(o.length);for(var f=0;f<o.length;f++)i[f]=new Array(s.k);for(var v=!0,y=0;v&&y<s.maxIterations;)v=!1,ri(t,o,n,i,s),ii(n,r,t,o,s),Jr(n,r,s.sensitivityThreshold)||(v=!0),y++;return{clusters:ai(o,n,s,a),degreeOfMembership:n}},si={kMeans:function(t){var n,r=this.cy(),i=this.nodes(),a=null,o=qr(t),s=new Array(o.k),l={};o.testMode?"number"==typeof o.testCentroids?(o.testCentroids,n=$r(i,o.k,o.attributes)):n="object"===e(o.testCentroids)?o.testCentroids:$r(i,o.k,o.attributes):n=$r(i,o.k,o.attributes);for(var u=!0,c=0;u&&c<o.maxIterations;){for(var h=0;h<i.length;h++)l[(a=i[h]).id()]=Kr(a,n,o.distance,o.attributes,"kMeans");u=!1;for(var d=0;d<o.k;d++){var p=Zr(d,i,l);if(0!==p.length){for(var g=o.attributes.length,f=n[d],v=new Array(g),y=new Array(g),m=0;m<g;m++){y[m]=0;for(var b=0;b<p.length;b++)a=p[b],y[m]+=o.attributes[m](a);v[m]=y[m]/p.length,Qr(v[m],f[m],o.sensitivityThreshold)||(u=!0)}n[d]=v,s[d]=r.collection(p)}}c++}return s},kMedoids:function(t){var n,r,i=this.cy(),a=this.nodes(),o=null,s=qr(t),l=new Array(s.k),u={},c=new Array(s.k);s.testMode?"number"==typeof s.testCentroids||(n="object"===e(s.testCentroids)?s.testCentroids:ti(a,s.k)):n=ti(a,s.k);for(var h=!0,d=0;h&&d<s.maxIterations;){for(var p=0;p<a.length;p++)u[(o=a[p]).id()]=Kr(o,n,s.distance,s.attributes,"kMedoids");h=!1;for(var g=0;g<n.length;g++){var f=Zr(g,a,u);if(0!==f.length){c[g]=ni(n[g],f,s.attributes);for(var v=0;v<f.length;v++)(r=ni(f[v],f,s.attributes))<c[g]&&(c[g]=r,n[g]=f[v],h=!0);l[g]=i.collection(f)}}d++}return l},fuzzyCMeans:oi,fcm:oi},li=Mt({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),ui={single:"min",complete:"max"},ci=function(e){var t=li(e),n=ui[t.linkage];return null!=n&&(t.linkage=n),t},hi=function(e,t,n,r,i){for(var a,o=0,s=1/0,l=i.attributes,u=function(e,t){return jr(i.distance,l.length,(function(t){return l[t](e)}),(function(e){return l[e](t)}),e,t)},c=0;c<e.length;c++){var h=e[c].key,d=n[h][r[h]];d<s&&(o=h,s=d)}if("threshold"===i.mode&&s>=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var p,g=t[o],f=t[r[o]];p="dendrogram"===i.mode?{left:g,right:f,key:g.key}:{value:g.value.concat(f.value),key:g.key},e[g.index]=p,e.splice(f.index,1),t[g.key]=p;for(var v=0;v<e.length;v++){var y=e[v];g.key===y.key?a=1/0:"min"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]>n[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]<n[f.key][y.key]&&(a=n[f.key][y.key])):a="mean"===i.linkage?(n[g.key][y.key]*g.size+n[f.key][y.key]*f.size)/(g.size+f.size):"dendrogram"===i.mode?u(y.value,g.value):u(y.value[0],g.value[0]),n[g.key][y.key]=n[y.key][g.key]=a}for(var m=0;m<e.length;m++){var b=e[m].key;if(r[b]===g.key||r[b]===f.key){for(var x=b,w=0;w<e.length;w++){var E=e[w].key;n[b][E]<n[b][x]&&(x=E)}r[b]=x}e[m].index=m}return g.key=f.key=g.index=f.index=null,!0},di=function e(t,n,r){t&&(t.value?n.push(t.value):(t.left&&e(t.left,n),t.right&&e(t.right,n)))},pi=function e(t,n){if(!t)return"";if(t.left&&t.right){var r=e(t.left,n),i=e(t.right,n),a=n.add({group:"nodes",data:{id:r+","+i}});return n.add({group:"edges",data:{source:r,target:a.id()}}),n.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}return t.value?t.value.id():void 0},gi=function e(t,n,r){if(!t)return[];var i=[],a=[],o=[];return 0===n?(t.left&&di(t.left,i),t.right&&di(t.right,a),o=i.concat(a),[r.collection(o)]):1===n?t.value?[r.collection(t.value)]:(t.left&&di(t.left,i),t.right&&di(t.right,a),[r.collection(i),r.collection(a)]):t.value?[r.collection(t.value)]:(t.left&&(i=e(t.left,n-1,r)),t.right&&(a=e(t.right,n-1,r)),i.concat(a))},fi=function(e){for(var t=this.cy(),n=this.nodes(),r=ci(e),i=r.attributes,a=function(e,t){return jr(r.distance,i.length,(function(t){return i[t](e)}),(function(e){return i[e](t)}),e,t)},o=[],s=[],l=[],u=[],c=0;c<n.length;c++){var h={value:"dendrogram"===r.mode?n[c]:[n[c]],key:c,index:c};o[c]=h,u[c]=h,s[c]=[],l[c]=0}for(var d=0;d<o.length;d++)for(var p=0;p<=d;p++){var g=void 0;g="dendrogram"===r.mode?d===p?1/0:a(o[d].value,o[p].value):d===p?1/0:a(o[d].value[0],o[p].value[0]),s[d][p]=g,s[p][d]=g,g<s[d][l[d]]&&(l[d]=p)}for(var f,v=hi(o,u,s,l,r);v;)v=hi(o,u,s,l,r);return"dendrogram"===r.mode?(f=gi(o[0],r.dendrogramDepth,t),r.addDendrogram&&pi(o[0],t)):(f=new Array(o.length),o.forEach((function(e,n){e.key=e.index=null,f[n]=t.collection(e.value)}))),f},vi={hierarchicalClustering:fi,hca:fi},yi=Mt({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),mi=function(e){var t=e.damping,n=e.preference;.5<=t&&t<1||Dt("Damping must range on [0.5, 1). Got: ".concat(t));var r=["median","mean","min","max"];return r.some((function(e){return e===n}))||_(n)||Dt("Preference must be one of [".concat(r.map((function(e){return"'".concat(e,"'")})).join(", "),"] or a number. Got: ").concat(n)),yi(e)},bi=function(e,t,n,r){var i=function(e,t){return r[t](e)};return-jr(e,r.length,(function(e){return i(t,e)}),(function(e){return i(n,e)}),t,n)},xi=function(e,t){return"median"===t?yn(e):"mean"===t?vn(e):"min"===t?gn(e):"max"===t?fn(e):t},wi=function(e,t,n){for(var r=[],i=0;i<e;i++)t[i*e+i]+n[i*e+i]>0&&r.push(i);return r},Ei=function(e,t,n){for(var r=[],i=0;i<e;i++){for(var a=-1,o=-1/0,s=0;s<n.length;s++){var l=n[s];t[i*e+l]>o&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;u<n.length;u++)r[n[u]]=n[u];return r},Ti=function(e,t,n){for(var r=Ei(e,t,n),i=0;i<n.length;i++){for(var a=[],o=0;o<r.length;o++)r[o]===n[i]&&a.push(o);for(var s=-1,l=-1/0,u=0;u<a.length;u++){for(var c=0,h=0;h<a.length;h++)c+=t[a[h]*e+a[u]];c>l&&(s=u,l=c)}n[i]=a[s]}return r=Ei(e,t,n)},_i=function(e){for(var t,n,r,i,a,o,s=this.cy(),l=this.nodes(),u=mi(e),c={},h=0;h<l.length;h++)c[l[h].id()]=h;n=(t=l.length)*t,r=new Array(n);for(var d=0;d<n;d++)r[d]=-1/0;for(var p=0;p<t;p++)for(var g=0;g<t;g++)p!==g&&(r[p*t+g]=bi(u.distance,l[p],l[g],u.attributes));i=xi(r,u.preference);for(var f=0;f<t;f++)r[f*t+f]=i;a=new Array(n);for(var v=0;v<n;v++)a[v]=0;o=new Array(n);for(var y=0;y<n;y++)o[y]=0;for(var m=new Array(t),b=new Array(t),x=new Array(t),w=0;w<t;w++)m[w]=0,b[w]=0,x[w]=0;for(var E,T=new Array(t*u.minIterations),_=0;_<T.length;_++)T[_]=0;for(E=0;E<u.maxIterations;E++){for(var D=0;D<t;D++){for(var C=-1/0,N=-1/0,A=-1,L=0,S=0;S<t;S++)m[S]=a[D*t+S],(L=o[D*t+S]+r[D*t+S])>=C?(N=C,C=L,A=S):L>N&&(N=L);for(var O=0;O<t;O++)a[D*t+O]=(1-u.damping)*(r[D*t+O]-C)+u.damping*m[O];a[D*t+A]=(1-u.damping)*(r[D*t+A]-N)+u.damping*m[A]}for(var I=0;I<t;I++){for(var k=0,M=0;M<t;M++)m[M]=o[M*t+I],b[M]=Math.max(0,a[M*t+I]),k+=b[M];k-=b[I],b[I]=a[I*t+I],k+=b[I];for(var P=0;P<t;P++)o[P*t+I]=(1-u.damping)*Math.min(0,k-b[P])+u.damping*m[P];o[I*t+I]=(1-u.damping)*(k-b[I])+u.damping*m[I]}for(var R=0,B=0;B<t;B++){var F=o[B*t+B]+a[B*t+B]>0?1:0;T[E%u.minIterations*t+B]=F,R+=F}if(R>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var z=0,G=0;G<t;G++){x[G]=0;for(var Y=0;Y<u.minIterations;Y++)x[G]+=T[Y*t+G];0!==x[G]&&x[G]!==u.minIterations||z++}if(z===t)break}}for(var X=wi(t,a,o),V=Ti(t,r,X),U={},j=0;j<X.length;j++)U[X[j]]=[];for(var H=0;H<l.length;H++){var q=V[c[l[H].id()]];null!=q&&U[q].push(l[H])}for(var W=new Array(X.length),$=0;$<X.length;$++)W[$]=s.collection(U[X[$]]);return W},Di={affinityPropagation:_i,ap:_i},Ci=Mt({root:void 0,directed:!1}),Ni={hierholzer:function(e){if(!E(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Ci(e),o=a.root,s=a.directed,l=this,u=!1;o&&(i=b(o)?this.filter(o)[0].id():o[0].id());var c={},h={};s?l.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else h[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):h[t]=[e.source().id(),e.target().id()]}));var d={found:!1,trail:void 0};if(u)return d;if(r&&n)if(s){if(i&&r!=i)return d;i=r}else{if(i&&r!=i&&n!=i)return d;i||(i=r)}else i||(i=l[0].id());var p=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=h[t][0],i!=(r=h[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},g=[],f=[];for(f=p(i);1!=f.length;)0==c[f[0]].length?(g.unshift(l.getElementById(f.shift())),g.unshift(l.getElementById(f.shift()))):f=p(f.shift()).concat(f);for(var v in g.unshift(l.getElementById(f.shift())),c)if(c[v].length)return d;return d.found=!0,d.trail=this.spawn(g,!0),d}},Ai=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function(n,r){for(var o=a.length-1,s=[],l=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);l.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);l.merge(n),t[r].cutVertex?l.merge(i.filter((function(e){return e.isLoop()}))):l.merge(i)}))})),i.push(l)},l=function l(u,c,h){u===h&&(r+=1),t[c]={id:n,low:n++,cutVertex:!1};var d,p,g,f,v=e.getElementById(c).connectedEdges().intersection(e);0===v.size()?i.push(e.spawn(e.getElementById(c))):v.forEach((function(e){d=e.source().id(),p=e.target().id(),(g=d===c?p:d)!==h&&(f=e.id(),o[f]||(o[f]=!0,a.push({x:c,y:g,edge:e})),g in t?t[c].low=Math.min(t[c].low,t[g].id):(l(u,g,c),t[c].low=Math.min(t[c].low,t[g].low),t[c].id<=t[g].low&&(t[c].cutVertex=!0,s(c,g))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,l(n,n),t[n].cutVertex=r>1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},Li=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var l=e.spawn();;){var u=i.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),h=l.merge(c);r.push(h),a=a.difference(h)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},Si={};[qt,Zt,Qt,en,nn,an,un,vr,mr,xr,Er,Rr,si,vi,Di,Ni,{hopcroftTarjanBiconnected:Ai,htbc:Ai,htb:Ai,hopcroftTarjanBiconnectedComponents:Ai},{tarjanStronglyConnected:Li,tsc:Li,tscc:Li,tarjanStronglyConnectedComponents:Li}].forEach((function(e){Q(Si,e)}));var Oi=0,Ii=1,ki=2,Mi=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=Oi,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Mi.prototype={fulfill:function(e){return Pi(this,Ii,"fulfillValue",e)},reject:function(e){return Pi(this,ki,"rejectReason",e)},then:function(e,t){var n=this,r=new Mi;return n.onFulfilled.push(Fi(e,r,"fulfill")),n.onRejected.push(Fi(t,r,"reject")),Ri(n),r.proxy}};var Pi=function(e,t,n,r){return e.state===Oi&&(e.state=t,e[n]=r,Ri(e)),e},Ri=function(e){e.state===Ii?Bi(e,"onFulfilled",e.fulfillValue):e.state===ki&&Bi(e,"onRejected",e.rejectReason)},Bi=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e<r.length;e++)r[e](n)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},Fi=function(e,t,n){return function(r){if("function"!=typeof e)t[n].call(t,r);else{var i;try{i=e(r)}catch(a){return void t.reject(a)}zi(t,i)}}},zi=function t(n,r){if(n!==r&&n.proxy!==r){var i;if("object"===e(r)&&null!==r||"function"==typeof r)try{i=r.then}catch(o){return void n.reject(o)}if("function"!=typeof i)n.fulfill(r);else{var a=!1;try{i.call(r,(function(e){a||(a=!0,e===r?n.reject(new TypeError("circular thenable chain")):t(n,e))}),(function(e){a||(a=!0,n.reject(e))}))}catch(o){a||n.reject(o)}}}else n.reject(new TypeError("cannot resolve promise with itself"))};Mi.all=function(e){return new Mi((function(t,n){for(var r=new Array(e.length),i=0,a=function(n,a){r[n]=a,++i===e.length&&t(r)},o=0;o<e.length;o++)!function(t){var r=e[t];null!=r&&null!=r.then?r.then((function(e){a(t,e)}),(function(e){n(e)})):a(t,r)}(o)}))},Mi.resolve=function(e){return new Mi((function(t,n){t(e)}))},Mi.reject=function(e){return new Mi((function(t,n){n(e)}))};var Gi="undefined"!=typeof Promise?Promise:Mi,Yi=function(e,t,n){var r=S(e),i=!r,a=this._private=Q({duration:1e3},t,n);if(a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&x(a.complete)&&a.completes.push(a.complete),i){var o=e.position();a.startPosition=a.startPosition||{x:o.x,y:o.y},a.startStyle=a.startStyle||e.cy().style().getAnimationStartStyle(e,a.style)}if(r){var s=e.pan();a.startPan={x:s.x,y:s.y},a.startZoom=e.zoom()}this.length=1,this[0]=this},Xi=Yi.prototype;Q(Xi,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),N(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[r]=o}return t&&this.play(),this},promise:function(e){var t,n=this._private;return t="frame"===e?n.frames:n.completes,new Gi((function(e,n){t.push((function(){e()}))}))}}),Xi.complete=Xi.completed,Xi.run=Xi.play,Xi.running=Xi.playing;var Vi={animated:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return!1;var n=t[0];return n?n._private.animation.current.length>0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n<t.length;n++)t[n]._private.animation.queue=[];return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=this,r=void 0!==n.length,i=r?n:[n],a=this._private.cy||this,o=!r,s=!o;if(!a.styleEnabled())return this;var l=a.style();if(e=Q({},e,t),0===Object.keys(e).length)return new Yi(i[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(s&&(e.style=l.getPropsList(e.style||e.css),e.css=void 0),s&&null!=e.renderedPosition){var u=e.renderedPosition,c=a.pan(),h=a.zoom();e.position=dn(u,h,c)}if(o&&null!=e.panBy){var d=e.panBy,p=a.pan();e.pan={x:p.x+d.x,y:p.y+d.y}}var g=e.center||e.centre;if(o&&null!=g){var f=a.getCenterPan(g.eles,e.zoom);null!=f&&(e.pan=f)}if(o&&null!=e.fit){var v=e.fit,y=a.getFitViewport(v.eles||v.boundingBox,v.padding);null!=y&&(e.pan=y.pan,e.zoom=y.zoom)}if(o&&E(e.zoom)){var m=a.getZoomedViewport(e.zoom);null!=m?(m.zoomed&&(e.zoom=m.zoom),m.panned&&(e.pan=m.pan)):e.zoom=null}return new Yi(i[0],e)}},animate:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=Q({},e,t));for(var i=0;i<r.length;i++){var a=r[i],o=a.animated()&&(void 0===e.queue||e.queue);a.animation(e,o?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var a=0;a<r.length;a++){for(var o=r[a]._private,s=o.animation.current,l=0;l<s.length;l++){var u=s[l]._private;t&&(u.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return i.notify("draw"),this}}},Ui=Array.isArray,ji=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Hi=/^\w*$/;function qi(e,t){if(Ui(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Ge(e))||Hi.test(e)||!ji.test(e)||null!=t&&e in Object(t)}var Wi=qi,$i="[object AsyncFunction]",Ki="[object Function]",Zi="[object GeneratorFunction]",Qi="[object Proxy]";function Ji(e){if(!le(e))return!1;var t=Pe(e);return t==Ki||t==Zi||t==$i||t==Qi}var ea,ta=Ji,na=pe["__core-js_shared__"],ra=(ea=/[^.]+$/.exec(na&&na.keys&&na.keys.IE_PROTO||""))?"Symbol(src)_1."+ea:"";function ia(e){return!!ra&&ra in e}var aa=ia,oa=Function.prototype.toString;function sa(e){if(null!=e){try{return oa.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var la=sa,ua=/[\\^$.*+?()[\]{}|]/g,ca=/^\[object .+?Constructor\]$/,ha=Function.prototype,da=Object.prototype,pa=ha.toString,ga=da.hasOwnProperty,fa=RegExp("^"+pa.call(ga).replace(ua,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function va(e){return!(!le(e)||aa(e))&&(ta(e)?fa:ca).test(la(e))}var ya=va;function ma(e,t){return null==e?void 0:e[t]}var ba=ma;function xa(e,t){var n=ba(e,t);return ya(n)?n:void 0}var wa=xa,Ea=wa(Object,"create");function Ta(){this.__data__=Ea?Ea(null):{},this.size=0}var _a=Ta;function Da(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Ca=Da,Na="__lodash_hash_undefined__",Aa=Object.prototype.hasOwnProperty;function La(e){var t=this.__data__;if(Ea){var n=t[e];return n===Na?void 0:n}return Aa.call(t,e)?t[e]:void 0}var Sa=La,Oa=Object.prototype.hasOwnProperty;function Ia(e){var t=this.__data__;return Ea?void 0!==t[e]:Oa.call(t,e)}var ka=Ia,Ma="__lodash_hash_undefined__";function Pa(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Ea&&void 0===t?Ma:t,this}var Ra=Pa;function Ba(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Ba.prototype.clear=_a,Ba.prototype.delete=Ca,Ba.prototype.get=Sa,Ba.prototype.has=ka,Ba.prototype.set=Ra;var Fa=Ba;function za(){this.__data__=[],this.size=0}var Ga=za;function Ya(e,t){return e===t||e!=e&&t!=t}var Xa=Ya;function Va(e,t){for(var n=e.length;n--;)if(Xa(e[n][0],t))return n;return-1}var Ua=Va,ja=Array.prototype.splice;function Ha(e){var t=this.__data__,n=Ua(t,e);return!(n<0||(n==t.length-1?t.pop():ja.call(t,n,1),--this.size,0))}var qa=Ha;function Wa(e){var t=this.__data__,n=Ua(t,e);return n<0?void 0:t[n][1]}var $a=Wa;function Ka(e){return Ua(this.__data__,e)>-1}var Za=Ka;function Qa(e,t){var n=this.__data__,r=Ua(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var Ja=Qa;function eo(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}eo.prototype.clear=Ga,eo.prototype.delete=qa,eo.prototype.get=$a,eo.prototype.has=Za,eo.prototype.set=Ja;var to=eo,no=wa(pe,"Map");function ro(){this.size=0,this.__data__={hash:new Fa,map:new(no||to),string:new Fa}}var io=ro;function ao(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}var oo=ao;function so(e,t){var n=e.__data__;return oo(t)?n["string"==typeof t?"string":"hash"]:n.map}var lo=so;function uo(e){var t=lo(this,e).delete(e);return this.size-=t?1:0,t}var co=uo;function ho(e){return lo(this,e).get(e)}var po=ho;function go(e){return lo(this,e).has(e)}var fo=go;function vo(e,t){var n=lo(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var yo=vo;function mo(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}mo.prototype.clear=io,mo.prototype.delete=co,mo.prototype.get=po,mo.prototype.has=fo,mo.prototype.set=yo;var bo=mo,xo="Expected a function";function wo(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(xo);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(wo.Cache||bo),n}wo.Cache=bo;var Eo=wo,To=500;function _o(e){var t=Eo(e,(function(e){return n.size===To&&n.clear(),e})),n=t.cache;return t}var Do=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Co=/\\(\\)?/g,No=_o((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Do,(function(e,n,r,i){t.push(r?i.replace(Co,"$1"):n||e)})),t}));function Ao(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var Lo=Ao,So=1/0,Oo=we?we.prototype:void 0,Io=Oo?Oo.toString:void 0;function ko(e){if("string"==typeof e)return e;if(Ui(e))return Lo(e,ko)+"";if(Ge(e))return Io?Io.call(e):"";var t=e+"";return"0"==t&&1/e==-So?"-0":t}var Mo=ko;function Po(e){return null==e?"":Mo(e)}var Ro=Po;function Bo(e,t){return Ui(e)?e:Wi(e,t)?[e]:No(Ro(e))}var Fo=Bo,zo=1/0;function Go(e){if("string"==typeof e||Ge(e))return e;var t=e+"";return"0"==t&&1/e==-zo?"-0":t}var Yo=Go;function Xo(e,t){for(var n=0,r=(t=Fo(t,e)).length;null!=e&&n<r;)e=e[Yo(t[n++])];return n&&n==r?e:void 0}var Vo=Xo;function Uo(e,t,n){var r=null==e?void 0:Vo(e,t);return void 0===r?n:r}var jo=Uo,Ho=function(){try{var e=wa(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();function qo(e,t,n){"__proto__"==t&&Ho?Ho(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Wo=qo,$o=Object.prototype.hasOwnProperty;function Ko(e,t,n){var r=e[t];$o.call(e,t)&&Xa(r,n)&&(void 0!==n||t in e)||Wo(e,t,n)}var Zo=Ko,Qo=9007199254740991,Jo=/^(?:0|[1-9]\d*)$/;function es(e,t){var n=typeof e;return!!(t=null==t?Qo:t)&&("number"==n||"symbol"!=n&&Jo.test(e))&&e>-1&&e%1==0&&e<t}var ts=es;function ns(e,t,n,r){if(!le(e))return e;for(var i=-1,a=(t=Fo(t,e)).length,o=a-1,s=e;null!=s&&++i<a;){var l=Yo(t[i]),u=n;if("__proto__"===l||"constructor"===l||"prototype"===l)return e;if(i!=o){var c=s[l];void 0===(u=r?r(c,l,s):void 0)&&(u=le(c)?c:ts(t[i+1])?[]:{})}Zo(s,l,u),s=s[l]}return e}var rs=ns;function is(e,t,n){return null==e?e:rs(e,t,n)}var as=is;function os(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}var ss=os;function ls(e){return Ui(e)?Lo(e,Yo):Ge(e)?[e]:ss(No(Ro(e)))}var us=ls,cs={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,r=Array.prototype.slice.call(arguments,0);return new Gi((function(e,t){var i=function(t){n.off.apply(n,o),e(t)},a=r.concat([i]),o=a.concat([]);n.on.apply(n,a)}))}}},hs={};[Vi,{data:function(e){return e=Q({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,i=this,o=void 0!==i.length,s=o?i:[i],l=o?i[0]:i;if(b(t)){var u,c=-1!==t.indexOf(".")&&us(t);if(r.allowGetting&&void 0===n)return l&&(r.beforeGet(l),u=c&&void 0===l._private[r.field][t]?jo(l._private[r.field],c):l._private[r.field][t]),u;if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var h=a({},t,n);r.beforeSet(i,h);for(var d=0,p=s.length;d<p;d++){var g=s[d];r.canSet(g)&&(c&&void 0===l._private[r.field][t]?as(g._private[r.field],c,n):g._private[r.field][t]=n)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&E(t)){var f,v,y=t,m=Object.keys(y);r.beforeSet(i,y);for(var w=0;w<m.length;w++)if(v=y[f=m[w]],!r.immutableKeys[f])for(var T=0;T<s.length;T++){var _=s[T];r.canSet(_)&&(_._private[r.field][f]=v)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&x(t)){var D=t;i.on(r.bindingEvent,D)}else if(r.allowGetting&&void 0===t){var C;return l&&(r.beforeGet(l),C=l._private[r.field]),C}return i}},removeData:function(e){return e=Q({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=this,i=void 0!==r.length?r:[r];if(b(t)){for(var a=t.split(/\s+/),o=a.length,s=0;s<o;s++){var l=a[s];if(!k(l)&&!n.immutableKeys[l])for(var u=0,c=i.length;u<c;u++)i[u]._private[n.field][l]=void 0}n.triggerEvent&&r[n.triggerFnName](n.event)}else if(void 0===t){for(var h=0,d=i.length;h<d;h++)for(var p=i[h]._private[n.field],g=Object.keys(p),f=0;f<g.length;f++){var v=g[f];!n.immutableKeys[v]&&(p[v]=void 0)}n.triggerEvent&&r[n.triggerFnName](n.event)}return r}}},cs].forEach((function(e){Q(hs,e)}));var ds={animate:hs.animate(),animation:hs.animation(),animated:hs.animated(),clearQueue:hs.clearQueue(),delay:hs.delay(),delayAnimation:hs.delayAnimation(),stop:hs.stop()},ps={classes:function(e){var t=this;if(void 0===e){var n=[];return t[0]._private.classes.forEach((function(e){return n.push(e)})),n}w(e)||(e=(e||"").match(/\S+/g)||[]);for(var r=[],i=new Ut(e),a=0;a<t.length;a++){for(var o=t[a],s=o._private,l=s.classes,u=!1,c=0;c<e.length;c++){var h=e[c];if(!l.has(h)){u=!0;break}}u||(u=l.size!==e.length),u&&(s.classes=i,r.push(o))}return r.length>0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){w(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a<o;a++)for(var s=n[a],l=s._private.classes,u=!1,c=0;c<e.length;c++){var h=e[c],d=l.has(h),p=!1;t||r&&!d?(l.add(h),p=!0):(!t||r&&d)&&(l.delete(h),p=!0),!u&&p&&(i.push(s),u=!0)}return i.length>0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};ps.className=ps.classNames=ps.classes;var gs={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:V,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};gs.variable="(?:[\\w-.]|(?:\\\\"+gs.metaChar+"))+",gs.className="(?:[\\w-]|(?:\\\\"+gs.metaChar+"))+",gs.value=gs.string+"|"+gs.number,gs.id=gs.variable,function(){var e,t,n;for(e=gs.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],gs.comparatorOp+="|@"+t;for(e=gs.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(gs.comparatorOp+="|\\!"+t)}();var fs=function(){return{checks:[]}},vs={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},ys=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return Z(e.selector,t.selector)})),ms=function(){for(var e,t={},n=0;n<ys.length;n++)t[(e=ys[n]).selector]=e.matches;return t}(),bs=function(e,t){return ms[e](t)},xs="("+ys.map((function(e){return e.selector})).join("|")+")",ws=function(e){return e.replace(new RegExp("\\\\("+gs.metaChar+")","g"),(function(e,t){return t}))},Es=function(e,t,n){e[e.length-1]=n},Ts=[{name:"group",query:!0,regex:"("+gs.group+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.GROUP,value:"*"===r?r:r+"s"})}},{name:"state",query:!0,regex:xs,populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.STATE,value:r})}},{name:"id",query:!0,regex:"\\#("+gs.id+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.ID,value:ws(r)})}},{name:"className",query:!0,regex:"\\.("+gs.className+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.CLASS,value:ws(r)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+gs.variable+")\\s*\\]",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.DATA_EXIST,field:ws(r)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+gs.variable+")\\s*("+gs.comparatorOp+")\\s*("+gs.value+")\\s*\\]",populate:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],s=r[2];s=null!=new RegExp("^"+gs.string+"$").exec(s)?s.substring(1,s.length-1):parseFloat(s),t.checks.push({type:vs.DATA_COMPARE,field:ws(i),operator:a,value:s})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+gs.boolOp+")\\s*("+gs.variable+")\\s*\\]",populate:function(e,t,n){var r=o(n,2),i=r[0],a=r[1];t.checks.push({type:vs.DATA_BOOL,field:ws(a),operator:i})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+gs.meta+")\\s*("+gs.comparatorOp+")\\s*("+gs.number+")\\s*\\]\\]",populate:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],s=r[2];t.checks.push({type:vs.META_COMPARE,field:ws(i),operator:a,value:parseFloat(s)})}},{name:"nextQuery",separator:!0,regex:gs.separator,populate:function(e,t){var n=e.currentSubject,r=e.edgeCount,i=e.compoundCount,a=e[e.length-1];return null!=n&&(a.subject=n,e.currentSubject=null),a.edgeCount=r,a.compoundCount=i,e.edgeCount=0,e.compoundCount=0,e[e.length++]=fs()}},{name:"directedEdge",separator:!0,regex:gs.directedEdge,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=t,i=fs();return n.checks.push({type:vs.DIRECTED_EDGE,source:r,target:i}),Es(e,t,n),e.edgeCount++,i}var a=fs(),o=t,s=fs();return a.checks.push({type:vs.NODE_SOURCE,source:o,target:s}),Es(e,t,a),e.edgeCount++,s}},{name:"undirectedEdge",separator:!0,regex:gs.undirectedEdge,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=t,i=fs();return n.checks.push({type:vs.UNDIRECTED_EDGE,nodes:[r,i]}),Es(e,t,n),e.edgeCount++,i}var a=fs(),o=t,s=fs();return a.checks.push({type:vs.NODE_NEIGHBOR,node:o,neighbor:s}),Es(e,t,a),s}},{name:"child",separator:!0,regex:gs.child,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=fs(),i=e[e.length-1];return n.checks.push({type:vs.CHILD,parent:i,child:r}),Es(e,t,n),e.compoundCount++,r}if(e.currentSubject===t){var a=fs(),o=e[e.length-1],s=fs(),l=fs(),u=fs(),c=fs();return a.checks.push({type:vs.COMPOUND_SPLIT,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:vs.TRUE}],c.checks.push({type:vs.TRUE}),s.checks.push({type:vs.PARENT,parent:c,child:u}),Es(e,o,a),e.currentSubject=l,e.compoundCount++,u}var h=fs(),d=fs(),p=[{type:vs.PARENT,parent:h,child:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"descendant",separator:!0,regex:gs.descendant,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=fs(),i=e[e.length-1];return n.checks.push({type:vs.DESCENDANT,ancestor:i,descendant:r}),Es(e,t,n),e.compoundCount++,r}if(e.currentSubject===t){var a=fs(),o=e[e.length-1],s=fs(),l=fs(),u=fs(),c=fs();return a.checks.push({type:vs.COMPOUND_SPLIT,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:vs.TRUE}],c.checks.push({type:vs.TRUE}),s.checks.push({type:vs.ANCESTOR,ancestor:c,descendant:u}),Es(e,o,a),e.currentSubject=l,e.compoundCount++,u}var h=fs(),d=fs(),p=[{type:vs.ANCESTOR,ancestor:h,descendant:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"subject",modifier:!0,regex:gs.subject,populate:function(e,t){if(null!=e.currentSubject&&e.currentSubject!==t)return Nt("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t;var n=e[e.length-1].checks[0],r=null==n?null:n.type;r===vs.DIRECTED_EDGE?n.type=vs.NODE_TARGET:r===vs.UNDIRECTED_EDGE&&(n.type=vs.NODE_NEIGHBOR,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];Ts.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)}));var _s=function(e){for(var t,n,r,i=0;i<Ts.length;i++){var a=Ts[i],o=a.name,s=e.match(a.regexObj);if(null!=s){n=s,t=a,r=o;var l=s[0];e=e.substring(l.length);break}}return{expr:t,match:n,name:r,remaining:e}},Ds=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e},Cs={parse:function(e){var t=this,n=t.inputText=e,r=t[0]=fs();for(t.length=1,n=Ds(n);;){var i=_s(n);if(null==i.expr)return Nt("The selector `"+e+"`is invalid"),!1;var a=i.match.slice(1),o=i.expr.populate(t,r,a);if(!1===o)return!1;if(null!=o&&(r=o),(n=i.remaining).match(/^\s*$/))break}var s=t[t.length-1];null!=t.currentSubject&&(s.subject=t.currentSubject),s.edgeCount=t.edgeCount,s.compoundCount=t.compoundCount;for(var l=0;l<t.length;l++){var u=t[l];if(u.compoundCount>0&&u.edgeCount>0)return Nt("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return Nt("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&Nt("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return b(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case vs.GROUP:var l=e(s);return l.substring(0,l.length-1);case vs.DATA_COMPARE:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case vs.DATA_BOOL:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case vs.DATA_EXIST:return"["+r.field+"]";case vs.META_COMPARE:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case vs.STATE:return s;case vs.ID:return"#"+s;case vs.CLASS:return"."+s;case vs.PARENT:case vs.CHILD:return i(r.parent,a)+n(">")+i(r.child,a);case vs.ANCESTOR:case vs.DESCENDANT:return i(r.ancestor,a)+" "+i(r.descendant,a);case vs.COMPOUND_SPLIT:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case vs.TRUE:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o<this.length;o++){var s=this[o];a+=i(s,s.subject),this.length>1&&o<this.length-1&&(a+=", ")}return this.toStringCache=a,a}},Ns=function(e,t,n){var r,i,a,o=b(e),s=_(e),l=b(n),u=!1,c=!1,h=!1;switch(t.indexOf("!")>=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(i=o||s?""+e:"",a=""+n),u&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":h=!0,r=e>n;break;case">=":h=!0,r=e>=n;break;case"<":h=!0,r=e<n;break;case"<=":h=!0,r=e<=n;break;default:r=!1}return!c||null==e&&h||(r=!r),r},As=function(e,t){switch(t){case"?":return!!e;case"!":return!e;case"^":return void 0===e}},Ls=function(e){return void 0!==e},Ss=function(e,t){return e.data(t)},Os=function(e,t){return e[t]()},Is=[],ks=function(e,t){return e.checks.every((function(e){return Is[e.type](e,t)}))};Is[vs.GROUP]=function(e,t){var n=e.value;return"*"===n||n===t.group()},Is[vs.STATE]=function(e,t){var n=e.value;return bs(n,t)},Is[vs.ID]=function(e,t){var n=e.value;return t.id()===n},Is[vs.CLASS]=function(e,t){var n=e.value;return t.hasClass(n)},Is[vs.META_COMPARE]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Ns(Os(t,n),r,i)},Is[vs.DATA_COMPARE]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Ns(Ss(t,n),r,i)},Is[vs.DATA_BOOL]=function(e,t){var n=e.field,r=e.operator;return As(Ss(t,n),r)},Is[vs.DATA_EXIST]=function(e,t){var n=e.field;return e.operator,Ls(Ss(t,n))},Is[vs.UNDIRECTED_EDGE]=function(e,t){var n=e.nodes[0],r=e.nodes[1],i=t.source(),a=t.target();return ks(n,i)&&ks(r,a)||ks(r,i)&&ks(n,a)},Is[vs.NODE_NEIGHBOR]=function(e,t){return ks(e.node,t)&&t.neighborhood().some((function(t){return t.isNode()&&ks(e.neighbor,t)}))},Is[vs.DIRECTED_EDGE]=function(e,t){return ks(e.source,t.source())&&ks(e.target,t.target())},Is[vs.NODE_SOURCE]=function(e,t){return ks(e.source,t)&&t.outgoers().some((function(t){return t.isNode()&&ks(e.target,t)}))},Is[vs.NODE_TARGET]=function(e,t){return ks(e.target,t)&&t.incomers().some((function(t){return t.isNode()&&ks(e.source,t)}))},Is[vs.CHILD]=function(e,t){return ks(e.child,t)&&ks(e.parent,t.parent())},Is[vs.PARENT]=function(e,t){return ks(e.parent,t)&&t.children().some((function(t){return ks(e.child,t)}))},Is[vs.DESCENDANT]=function(e,t){return ks(e.descendant,t)&&t.ancestors().some((function(t){return ks(e.ancestor,t)}))},Is[vs.ANCESTOR]=function(e,t){return ks(e.ancestor,t)&&t.descendants().some((function(t){return ks(e.descendant,t)}))},Is[vs.COMPOUND_SPLIT]=function(e,t){return ks(e.subject,t)&&ks(e.left,t)&&ks(e.right,t)},Is[vs.TRUE]=function(){return!0},Is[vs.COLLECTION]=function(e,t){return e.value.has(t)},Is[vs.FILTER]=function(e,t){return(0,e.value)(t)};var Ms={matches:function(e){for(var t=this,n=0;n<t.length;n++){var r=t[n];if(ks(r,e))return!0}return!1},filter:function(e){var t=this;if(1===t.length&&1===t[0].checks.length&&t[0].checks[0].type===vs.ID)return e.getElementById(t[0].checks[0].value).collection();var n=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(ks(r,e))return!0}return!1};return null==t.text()&&(n=function(){return!0}),e.filter(n)}},Ps=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,null==e||b(e)&&e.match(/^\s*$/)||(N(e)?this.addQuery({checks:[{type:vs.COLLECTION,value:e.collection()}]}):x(e)?this.addQuery({checks:[{type:vs.FILTER,value:e}]}):b(e)?this.parse(e)||(this.invalid=!0):Dt("A selector must be created from a string; found "))},Rs=Ps.prototype;[Cs,Ms].forEach((function(e){return Q(Rs,e)})),Rs.text=function(){return this.inputText},Rs.size=function(){return this.length},Rs.eq=function(e){return this[e]},Rs.sameText=function(e){return!this.invalid&&!e.invalid&&this.text()===e.text()},Rs.addQuery=function(e){this[this.length++]=e},Rs.selector=Rs.toString;var Bs={allAre:function(e){var t=new Ps(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new Ps(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++)if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0;return!1},every:function(e,t){for(var n=0;n<this.length;n++)if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1;return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length;return t===e.length&&(1===t?this[0]===e[0]:this.every((function(t){return e.hasElementWithId(t.id())})))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};Bs.allAreNeighbours=Bs.allAreNeighbors,Bs.has=Bs.contains,Bs.equal=Bs.equals=Bs.same;var Fs,zs,Gs=function(e,t){return function(n,r,i,a){var o,s=n,l=this;if(null==s?o="":N(s)&&1===s.length&&(o=s.id()),1===l.length&&o){var u=l[0]._private,c=u.traversalCache=u.traversalCache||{},h=c[t]=c[t]||[],d=gt(o),p=h[d];return p||(h[d]=e.call(l,n,r,i,a))}return e.call(l,n,r,i,a)}},Ys={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:Gs((function(e){for(var t=[],n=0;n<this.length;n++)for(var r=this[n]._private.children,i=0;i<r.length;i++)t.push(r[i]);return this.spawn(t,!0).filter(e)}),"children"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];function n(e){for(var r=0;r<e.length;r++){var i=e[r];t.push(i),i.children().nonempty()&&n(i.children())}}return n(this.children()),this.spawn(t,!0).filter(e)}};function Xs(e,t,n,r){for(var i=[],a=new Ut,o=e.cy().hasCompoundNodes(),s=0;s<e.length;s++){var l=e[s];n?i.push(l):o&&r(i,a,l)}for(;i.length>0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function Vs(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var a=r[i];t.has(a.id())||e.push(a)}}function Us(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function js(e,t,n){Us(e,t,n),Vs(e,t,n)}Ys.forEachDown=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Vs)},Ys.forEachUp=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Us)},Ys.forEachUpAndDown=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],js)},Ys.ancestors=Ys.parents,(Fs=zs={data:hs.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:hs.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:hs.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hs.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:hs.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:hs.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Fs.data,Fs.removeAttr=Fs.removeData;var Hs,qs,Ws=zs,$s={};function Ks(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(r+=e(i,s))}return r}}}function Zs(e,t){return function(n){for(var r,i=this.nodes(),a=0;a<i.length;a++){var o=i[a][e](n);void 0===o||void 0!==r&&!t(o,r)||(r=o)}return r}}Q($s,{degree:Ks((function(e,t){return t.source().same(t.target())?2:1})),indegree:Ks((function(e,t){return t.target().same(e)?1:0})),outdegree:Ks((function(e,t){return t.source().same(e)?1:0}))}),Q($s,{minDegree:Zs("degree",(function(e,t){return e<t})),maxDegree:Zs("degree",(function(e,t){return e>t})),minIndegree:Zs("indegree",(function(e,t){return e<t})),maxIndegree:Zs("indegree",(function(e,t){return e>t})),minOutdegree:Zs("outdegree",(function(e,t){return e<t})),maxOutdegree:Zs("outdegree",(function(e,t){return e>t}))}),Q($s,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}});var Qs=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r];if(!i.locked()){var a=i._private.position,o={x:null!=t.x?t.x-a.x:0,y:null!=t.y?t.y-a.y:0};!i.isParent()||0===o.x&&0===o.y||i.children().shift(o,n),i.dirtyBoundingBoxCache()}}},Js={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){Qs(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};(Hs=qs={position:hs.data(Js),silentPosition:hs.data(Q({},Js,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){Qs(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(E(e))t?this.silentPosition(e):this.position(e);else if(x(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a=this[i],o=void 0;(o=n(a,i))&&(t?a.silentPosition(o):a.position(o))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,n){var r;if(E(e)?(r={x:_(e.x)?e.x:0,y:_(e.y)?e.y:0},n=t):b(e)&&_(t)&&((r={x:0,y:0})[e]=t),null!=r){var i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var o=this[a];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var s=o.position(),l={x:s.x+r.x,y:s.y+r.y};n?o.silentPosition(l):o.position(l)}}i.endBatch()}return this},silentShift:function(e,t){return E(e)?this.shift(e,!0):b(e)&&_(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),a=r.pan(),o=E(e)?e:void 0,s=void 0!==o||void 0!==t&&b(e);if(n&&n.isNode()){if(!s){var l=n.position();return o=hn(l,i,a),void 0===e?o:o[e]}for(var u=0;u<this.length;u++){var c=this[u];void 0!==t?c.position(e,(t-a[e])/i):void 0!==o&&c.position(dn(o,i,a))}}else if(!s)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=E(e)?e:void 0,a=void 0!==i||void 0!==t&&b(e),o=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var s=n.position(),l=o?n.parent():null,u=l&&l.length>0,c=u;u&&(l=l[0]);var h=c?l.position():{x:0,y:0};return i={x:s.x-h.x,y:s.y-h.y},void 0===e?i:i[e]}for(var d=0;d<this.length;d++){var p=this[d],g=o?p.parent():null,f=g&&g.length>0,v=f;f&&(g=g[0]);var y=v?g.position():{x:0,y:0};void 0!==t?p.position(e,t+y[e]):void 0!==i&&p.position({x:i.x+y.x,y:i.y+y.y})}}else if(!a)return;return this}}).modelPosition=Hs.point=Hs.position,Hs.modelPositions=Hs.points=Hs.positions,Hs.renderedPoint=Hs.renderedPosition,Hs.relativePoint=Hs.relativePosition;var el,tl,nl=qs;el=tl={},tl.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,l=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:l,w:o-a,h:l-s}},tl.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},tl.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var l=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(l=100*l/i.width.val);var u=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(u=100*u/i.height.val);var c=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(c=100*c/i.height.val);var h=y(i.width.val-a.w,s,l),d=h.biasDiff,p=h.biasComplementDiff,g=y(i.height.val-a.h,u,c),f=g.biasDiff,v=g.biasComplementDiff;t.autoPadding=m(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-d+a.x1+a.x2+p)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-f+a.y1+a.y2+v)/2}function y(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}function m(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}}for(var r=0;r<this.length;r++){var i=this[r],a=i._private;a.compoundBoundsClean&&!e||(n(i),t.batching()||(a.compoundBoundsClean=!0))}return this};var rl=function(e){return e===1/0||e===-1/0?0:e},il=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},al=function(e,t){return null==t?e:il(e,t.x1,t.y1,t.x2,t.y2)},ol=function(e,t,n){return Ft(e,t,n)},sl=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var l=a.arrowBounds=a.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=i-s,u.x2=r+s,u.y2=i+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,Mn(u,1),il(e,u.x1,u.y1,u.x2,u.y2)}}},ll=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),h=t.pstyle("text-valign"),d=ol(a,"labelWidth",n),p=ol(a,"labelHeight",n),g=ol(a,"labelX",n),f=ol(a,"labelY",n),v=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,T=2,_=p,D=d,C=D/2,N=_/2;if(m)o=g-C,s=g+C,l=f-N,u=f+N;else{switch(c.value){case"left":o=g-D,s=g;break;case"center":o=g-C,s=g+C;break;case"right":o=g,s=g+D}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-N,u=f+N;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-T,s+=v+Math.max(x,w)+E+T,l+=y-Math.max(x,w)-E-T,u+=y+Math.max(x,w)+E+T;var A=n||"main",L=i.labelBounds,S=L[A]=L[A]||{};S.x1=o,S.y1=l,S.x2=s,S.y2=u,S.w=s-o,S.h=u-l;var O=m&&"autorotate"===b.strValue,I=null!=b.pfValue&&0!==b.pfValue;if(O||I){var k=O?ol(i.rstyle,"labelAngle",n):b.pfValue,M=Math.cos(k),P=Math.sin(k),R=(o+s)/2,B=(l+u)/2;if(!m){switch(c.value){case"left":R=s;break;case"right":R=o}switch(h.value){case"top":B=u;break;case"bottom":B=l}}var F=function(e,t){return{x:(e-=R)*M-(t-=B)*P+R,y:e*P+t*M+B}},z=F(o,l),G=F(o,u),Y=F(s,l),X=F(s,u);o=Math.min(z.x,G.x,Y.x,X.x),s=Math.max(z.x,G.x,Y.x,X.x),l=Math.min(z.y,G.y,Y.y,X.y),u=Math.max(z.y,G.y,Y.y,X.y)}var V=A+"Rot",U=L[V]=L[V]||{};U.x1=o,U.y1=l,U.x2=s,U.y2=u,U.w=s-o,U.h=u-l,il(e,o,l,s,u),il(i.labelBounds.all,o,l,s,u)}return e}},ul=function(e,t){var n,r,i,a,o,s,l=e._private.cy,u=l.styleEnabled(),c=l.headless(),h=Ln(),d=e._private,p=e.isNode(),g=e.isEdge(),f=d.rstyle,v=p&&u?e.pstyle("bounds-expansion").pfValue:[0],y=function(e){return"none"!==e.pstyle("display").value},m=!u||y(e)&&(!g||y(e.source())&&y(e.target()));if(m){var b=0;u&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(b=e.pstyle("overlay-padding").value);var x=0;u&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(x=e.pstyle("underlay-padding").value);var w=Math.max(b,x),E=0;if(u&&(E=e.pstyle("width").pfValue/2),p&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var _=e.outerWidth()/2,D=e.outerHeight()/2;il(h,n=o-_,i=s-D,r=o+_,a=s+D)}else if(g&&t.includeEdges)if(u&&!c){var C=e.pstyle("curve-style").strValue;if(n=Math.min(f.srcX,f.midX,f.tgtX),r=Math.max(f.srcX,f.midX,f.tgtX),i=Math.min(f.srcY,f.midY,f.tgtY),a=Math.max(f.srcY,f.midY,f.tgtY),il(h,n-=E,i-=E,r+=E,a+=E),"haystack"===C){var N=f.haystackPts;if(N&&2===N.length){if(n=N[0].x,i=N[0].y,n>(r=N[1].x)){var A=n;n=r,r=A}if(i>(a=N[1].y)){var L=i;i=a,a=L}il(h,n-E,i-E,r+E,a+E)}}else if("bezier"===C||"unbundled-bezier"===C||"segments"===C||"taxi"===C){var S;switch(C){case"bezier":case"unbundled-bezier":S=f.bezierPts;break;case"segments":case"taxi":S=f.linePts}if(null!=S)for(var O=0;O<S.length;O++){var I=S[O];n=I.x-E,r=I.x+E,i=I.y-E,a=I.y+E,il(h,n,i,r,a)}}}else{var k=e.source().position(),M=e.target().position();if((n=k.x)>(r=M.x)){var P=n;n=r,r=P}if((i=k.y)>(a=M.y)){var R=i;i=a,a=R}il(h,n-=E,i-=E,r+=E,a+=E)}if(u&&t.includeEdges&&g&&(sl(h,e,"mid-source"),sl(h,e,"mid-target"),sl(h,e,"source"),sl(h,e,"target")),u&&"yes"===e.pstyle("ghost").value){var B=e.pstyle("ghost-offset-x").pfValue,F=e.pstyle("ghost-offset-y").pfValue;il(h,h.x1+B,h.y1+F,h.x2+B,h.y2+F)}var z=d.bodyBounds=d.bodyBounds||{};Rn(z,h),Pn(z,v),Mn(z,1),u&&(n=h.x1,r=h.x2,i=h.y1,a=h.y2,il(h,n-w,i-w,r+w,a+w));var G=d.overlayBounds=d.overlayBounds||{};Rn(G,h),Pn(G,v),Mn(G,1);var Y=d.labelBounds=d.labelBounds||{};null!=Y.all?On(Y.all):Y.all=Ln(),u&&t.includeLabels&&(t.includeMainLabels&&ll(h,e,null),g&&(t.includeSourceLabels&&ll(h,e,"source"),t.includeTargetLabels&&ll(h,e,"target")))}return h.x1=rl(h.x1),h.y1=rl(h.y1),h.x2=rl(h.x2),h.y2=rl(h.y2),h.w=rl(h.x2-h.x1),h.h=rl(h.y2-h.y1),h.w>0&&h.h>0&&m&&(Pn(h,v),Mn(h,1)),h},cl=function(e){var t=0,n=function(e){return(e?1:0)<<t++},r=0;return r+=n(e.incudeNodes),r+=n(e.includeEdges),r+=n(e.includeLabels),r+=n(e.includeMainLabels),r+=n(e.includeSourceLabels),r+=n(e.includeTargetLabels),r+=n(e.includeOverlays)},hl=function(e){if(e.isEdge()){var t=e.source().position(),n=e.target().position(),r=function(e){return Math.round(e)};return pt([r(t.x),r(t.y),r(n.x),r(n.y)])}return 0},dl=function(e,t){var n,r=e._private,i=e.isEdge(),a=(null==t?gl:cl(t))===gl,o=hl(e),s=r.bbCachePosKey===o,l=t.useCache&&s,u=function(e){return null==e._private.bbCache||e._private.styleDirty};if(!l||u(e)||i&&u(e.source())||u(e.target())?(s||e.recalculateRenderedStyle(l),n=ul(e,pl),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=Ln(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?al(n,r.overlayBounds):al(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?al(n,r.labelBounds.all):(t.includeMainLabels&&al(n,r.labelBounds.mainRot),t.includeSourceLabels&&al(n,r.labelBounds.sourceRot),t.includeTargetLabels&&al(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},pl={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,useCache:!0},gl=cl(pl),fl=Mt(pl);tl.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=Ln();var n=fl(e=e||pl),r=this;if(r.cy().styleEnabled())for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=hl(a),l=o.bbCachePosKey===s,u=n.useCache&&l&&!o.styleDirty;a.recalculateRenderedStyle(u)}this.updateCompoundBounds(!e.useCache);for(var c=0;c<r.length;c++){var h=r[c];al(t,dl(h,n))}}else e=void 0===e?pl:fl(e),t=dl(this[0],e);return t.x1=rl(t.x1),t.y1=rl(t.y1),t.x2=rl(t.x2),t.y2=rl(t.y2),t.w=rl(t.x2-t.x1),t.h=rl(t.y2-t.y1),t},tl.dirtyBoundingBoxCache=function(){for(var e=0;e<this.length;e++){var t=this[e]._private;t.bbCache=null,t.bbCachePosKey=null,t.bodyBounds=null,t.overlayBounds=null,t.labelBounds.all=null,t.labelBounds.source=null,t.labelBounds.target=null,t.labelBounds.main=null,t.labelBounds.sourceRot=null,t.labelBounds.targetRot=null,t.labelBounds.mainRot=null,t.arrowBounds.source=null,t.arrowBounds.target=null,t.arrowBounds["mid-source"]=null,t.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},tl.boundingBoxAt=function(e){var t=this.nodes(),n=this.cy(),r=n.hasCompoundNodes(),i=n.collection();if(r&&(i=t.filter((function(e){return e.isParent()})),t=t.not(i)),E(e)){var a=e;e=function(){return a}}var o=function(t,n){return t._private.bbAtOldPos=e(t,n)},s=function(e){return e._private.bbAtOldPos};n.startBatch(),t.forEach(o).silentPositions(e),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var l=Sn(this.boundingBox({useCache:!1}));return t.silentPositions(s),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),n.endBatch(),l},el.boundingbox=el.bb=el.boundingBox,el.renderedBoundingbox=el.renderedBoundingBox;var vl,yl,ml=tl;vl=yl={};var bl=function(e){e.uppercaseName=X(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=X(e.outerName),vl[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(r){if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);return"label"===i.strValue?(t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):i.pfValue}return 1}},vl["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},vl["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},vl["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};bl({name:"width"}),bl({name:"height"}),yl.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},yl.paddedHeight=function(){var e=this[0];return e.height()+2*e.padding()},yl.paddedWidth=function(){var e=this[0];return e.width()+2*e.padding()};var xl=yl,wl=function(e,t){if(e.isEdge())return t(e)},El=function(e,t){if(e.isEdge()){var n=e.cy();return hn(t(e),n.zoom(),n.pan())}},Tl=function(e,t){if(e.isEdge()){var n=e.cy(),r=n.pan(),i=n.zoom();return t(e).map((function(e){return hn(e,i,r)}))}},_l={controlPoints:{get:function(e){return e.renderer().getControlPoints(e)},mult:!0},segmentPoints:{get:function(e){return e.renderer().getSegmentPoints(e)},mult:!0},sourceEndpoint:{get:function(e){return e.renderer().getSourceEndpoint(e)}},targetEndpoint:{get:function(e){return e.renderer().getTargetEndpoint(e)}},midpoint:{get:function(e){return e.renderer().getEdgeMidpoint(e)}}},Dl=function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)},Cl=Object.keys(_l).reduce((function(e,t){var n=_l[t],r=Dl(t);return e[t]=function(){return wl(this,n.get)},n.mult?e[r]=function(){return Tl(this,n.get)}:e[r]=function(){return El(this,n.get)},e}),{}),Nl=Q({},nl,ml,xl,Cl),Al=function(e,t){this.recycle(e,t)};function Ll(){return!1}function Sl(){return!0}Al.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Ll,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?Sl:Ll):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:n.x*r+i.x,y:n.y*r+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=Sl;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=Sl;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Sl,this.stopPropagation()},isDefaultPrevented:Ll,isPropagationStopped:Ll,isImmediatePropagationStopped:Ll};var Ol=/^([^.]+)(\.(?:[^.]+))?$/,Il=".*",kl={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},Ml=Object.keys(kl),Pl={};function Rl(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Pl,t=arguments.length>1?arguments[1]:void 0,n=0;n<Ml.length;n++){var r=Ml[n];this[r]=e[r]||kl[r]}this.context=t||this.context,this.listeners=[],this.emitting=0}var Bl=Rl.prototype,Fl=function(e,t,n,r,i,a,o){x(r)&&(i=r,r=null),o&&(a=null==a?o:Q({},a,o));for(var s=w(n)?n:n.split(/\s+/),l=0;l<s.length;l++){var u=s[l];if(!k(u)){var c=u.match(Ol);if(c&&!1===t(e,u,c[1],c[2]?c[2]:null,r,i,a))break}}},zl=function(e,t){return e.addEventFields(e.context,t),new Al(t.type,t)},Gl=function(e,t,n){if(I(n))t(e,n);else if(E(n))t(e,zl(e,n));else for(var r=w(n)?n:n.split(/\s+/),i=0;i<r.length;i++){var a=r[i];if(!k(a)){var o=a.match(Ol);if(o){var s=o[1],l=o[2]?o[2]:null;t(e,zl(e,{type:s,namespace:l,target:e.context}))}}}};Bl.on=Bl.addListener=function(e,t,n,r,i){return Fl(this,(function(e,t,n,r,i,a,o){x(a)&&e.listeners.push({event:t,callback:a,type:n,namespace:r,qualifier:i,conf:o})}),e,t,n,r,i),this},Bl.one=function(e,t,n,r){return this.on(e,t,n,r,{one:!0})},Bl.removeListener=Bl.off=function(e,t,n,r){var i=this;0!==this.emitting&&(this.listeners=St(this.listeners));for(var a=this.listeners,o=function(o){var s=a[o];Fl(i,(function(t,n,r,i,l,u){if((s.type===r||"*"===e)&&(!i&&".*"!==s.namespace||s.namespace===i)&&(!l||t.qualifierCompare(s.qualifier,l))&&(!u||s.callback===u))return a.splice(o,1),!1}),e,t,n,r)},s=a.length-1;s>=0;s--)o(s);return this},Bl.removeAllListeners=function(){return this.removeListener("*")},Bl.emit=Bl.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,w(t)||(t=[t]),Gl(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||i.namespace===Il)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&Bt(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),l=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===l&&(a.stopPropagation(),a.preventDefault())}},s=0;s<i;s++)o(s);e.bubble(e.context)&&!a.isPropagationStopped()&&e.parent(e.context).emit(a,t)}),e),this.emitting--,this};var Yl={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&A(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},Xl=function(e){return b(e)?new Ps(e):e},Vl={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new Rl(Yl,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().on(e,r,n);return this},removeListener:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().removeListener(e,r,n);return this},removeAllListeners:function(){for(var e=0;e<this.length;e++)this[e].emitter().removeAllListeners();return this},one:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().one(e,r,n);return this},once:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().on(e,r,n,{once:!0,onceCollection:this})},emit:function(e,t){for(var n=0;n<this.length;n++)this[n].emitter().emit(e,t);return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify(e,this),this.emit(e,t),this}};hs.eventAliasesOn(Vl);var Ul={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),n=0;n<this.length;n++){var r=this[n];r.isNode()?e.push(r):t.push(r)}return{nodes:e,edges:t}},filter:function(e,t){if(void 0===e)return this;if(b(e)||N(e))return new Ps(e).filter(this);if(x(e)){for(var n=this.spawn(),r=this,i=0;i<r.length;i++){var a=r[i];(t?e.apply(t,[a,i,r]):e(a,i,r))&&n.push(a)}return n}return this.spawn()},not:function(e){if(e){b(e)&&(e=this.filter(e));for(var t=this.spawn(),n=0;n<this.length;n++){var r=this[n];e.has(r)||t.push(r)}return t}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(b(e)){var t=e;return this.filter(t)}for(var n=this.spawn(),r=this,i=e,a=this.length<e.length,o=a?r:i,s=a?i:r,l=0;l<o.length;l++){var u=o[l];s.has(u)&&n.push(u)}return n},xor:function(e){var t=this._private.cy;b(e)&&(e=t.$(e));var n=this.spawn(),r=this,i=e,a=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)||n.push(i)}};return a(r,i),a(i,r),n},diff:function(e){var t=this._private.cy;b(e)&&(e=t.$(e));var n=this.spawn(),r=this.spawn(),i=this.spawn(),a=this,o=e,s=function(e,t,n){for(var r=0;r<e.length;r++){var a=e[r],o=a._private.data.id;t.hasElementWithId(o)?i.merge(a):n.push(a)}};return s(a,o,n),s(o,a,r),{left:n,right:r,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(b(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=this.spawnSelf(),i=0;i<e.length;i++){var a=e[i],o=!this.has(a);o&&r.push(a)}return r},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&b(e)){var r=e;e=n.mutableElements().filter(r)}for(var i=t.map,a=0;a<e.length;a++){var o=e[a],s=o._private.data.id;if(!i.has(s)){var l=this.length++;this[l]=o,i.set(s,{ele:o,index:l})}}return this},unmergeAt:function(e){var t=this[e].id(),n=this._private.map;this[e]=void 0,n.delete(t);var r=e===this.length-1;if(this.length>1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&b(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r<e.length;r++)this.unmergeOne(e[r]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--)e(this[t])&&this.unmergeAt(t);return this},map:function(e,t){for(var n=[],r=this,i=0;i<r.length;i++){var a=r[i],o=t?e.apply(t,[a,i,r]):e(a,i,r);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=this,i=0;i<r.length;i++)n=e(n,r[i],i,r);return n},max:function(e,t){for(var n,r=-1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>r&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s<r&&(r=s,n=o)}return{value:r,ele:n}}},jl=Ul;jl.u=jl["|"]=jl["+"]=jl.union=jl.or=jl.add,jl["\\"]=jl["!"]=jl["-"]=jl.difference=jl.relativeComplement=jl.subtract=jl.not,jl.n=jl["&"]=jl["."]=jl.and=jl.intersection=jl.intersect,jl["^"]=jl["(+)"]=jl["(-)"]=jl.symmetricDifference=jl.symdiff=jl.xor,jl.fnFilter=jl.filterFn=jl.stdFilter=jl.filter,jl.complement=jl.abscomp=jl.absoluteComplement;var Hl,ql={isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},Wl=function(e,t){var n=e.cy().hasCompoundNodes();function r(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?xt:0}var i=r(e)-r(t);if(0!==i)return i;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var o=a(e)-a(t);if(0!==o)return o;var s=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==s?s:e.poolIndex()-t.poolIndex()},$l={forEach:function(e,t){if(x(e))for(var n=this.length,r=0;r<n;r++){var i=this[r];if(!1===(t?e.apply(t,[i,r,this]):e(i,r,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!x(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(Wl)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:xt-1}var r=t.source,i=t.target,a=r.zDepth(),o=i.zDepth();return Math.max(a,o,0)}}};$l.each=$l.forEach,Hl="undefined",("undefined"==typeof Symbol?"undefined":e(Symbol))!=Hl&&e(Symbol.iterator)!=Hl&&($l[Symbol.iterator]=function(){var e=this,t={value:void 0,done:!1},n=0,r=this.length;return a({next:function(){return n<r?t.value=e[n++]:(t.value=void 0,t.done=!0),t}},Symbol.iterator,(function(){return this}))});var Kl=Mt({nodeDimensionsIncludeLabels:!1}),Zl={layoutDimensions:function(e){var t;if(e=Kl(e),this.takesUpSpace())if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();t={w:n.w,h:n.h}}else t={w:this.outerWidth(),h:this.outerHeight()};else t={w:0,h:0};return 0!==t.w&&0!==t.h||(t.w=t.h=1),t},layoutPositions:function(e,t,n){var r=this.nodes().filter((function(e){return!e.isParent()})),i=this.cy(),a=t.eles,o=function(e){return e.id()},s=F(n,o);e.emit({type:"layoutstart",layout:e}),e.animations=[];var l=function(e,t,n){var r={x:t.x1+t.w/2,y:t.y1+t.h/2},i={x:(n.x-r.x)*e,y:(n.y-r.y)*e};return{x:r.x+i.x,y:r.y+i.y}},u=t.spacingFactor&&1!==t.spacingFactor,c=function(){if(!u)return null;for(var e=Ln(),t=0;t<r.length;t++){var n=r[t],i=s(n,t);kn(e,i.x,i.y)}return e},h=c(),d=F((function(e,n){var r=s(e,n);if(u){var i=Math.abs(t.spacingFactor);r=l(i,h,r)}return null!=t.transform&&(r=t.transform(e,r)),r}),o);if(t.animate){for(var p=0;p<r.length;p++){var g=r[p],f=d(g,p);if(null==t.animateFilter||t.animateFilter(g,p)){var v=g.animation({position:f,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(v)}else g.position(f)}if(t.fit){var y=i.animation({fit:{boundingBox:a.boundingBoxAt(d),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(y)}else if(void 0!==t.zoom&&void 0!==t.pan){var m=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(m)}e.animations.forEach((function(e){return e.play()})),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),Gi.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else r.positions(d),t.fit&&i.fit(t.eles,t.padding),null!=t.zoom&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(Q({},e,{eles:this}))}};function Ql(e,t,n){var r,i=n._private,a=i.styleCache=i.styleCache||[];return null!=(r=a[e])?r:r=a[e]=t(n)}function Jl(e,t){return e=gt(e),function(n){return Ql(e,t,n)}}function eu(e,t){e=gt(e);var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return Ql(e,n,t)}}Zl.createLayout=Zl.makeLayout=Zl.layout;var tu={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e,t=this.cy(),n=function(e){return e._private.styleCache=null};return t.hasCompoundNodes()?((e=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(e.connectedEdges()),e.forEach(n)):this.forEach((function(e){n(e),e.connectedEdges().forEach(n)})),this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching())return t._private.batchStyleEles.merge(this),this;var n=this;e=!(!e&&void 0!==e),t.hasCompoundNodes()&&(n=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var r=n;return e?r.emitAndNotify("style"):r.emit("style"),n.forEach((function(e){return e._private.styleDirty=!0})),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var n=this[t];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},parsedStyle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=!1,i=n.style();if(E(e)){var a=e;i.applyBypass(this,a,r),this.emitAndNotify("style")}else if(b(e)){if(void 0===t){var o=this[0];return o?i.getStylePropertyValue(o,e):void 0}i.applyBypass(this,e,t,r),this.emitAndNotify("style")}else if(void 0===e){var s=this[0];return s?i.getRawStyle(s):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=!1,r=t.style(),i=this;if(void 0===e)for(var a=0;a<i.length;a++){var o=i[a];r.removeAllBypasses(o,n)}else{e=e.split(/\s+/);for(var s=0;s<i.length;s++){var l=i[s];r.removeBypasses(l,e,n)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var a=r.data.parent?n.parents():null;if(a)for(var o=0;o<a.length;o++)i*=a[o].pstyle("opacity").value;return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function nu(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++)if(!t(n[r]))return!1;return!0}function ru(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],a=e.hasCompoundNodes();if(i){var o=i._private;if(!t(i))return!1;if(i.isNode())return!a||nu(i,r);var s=o.source,l=o.target;return n(s)&&(!a||nu(s,n))&&(s===l||n(l)&&(!a||nu(l,n)))}}}var iu=Jl("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));tu.takesUpSpace=eu("takesUpSpace",ru({ok:iu}));var au=Jl("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&iu(e)})),ou=Jl("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&iu(e)}));tu.interactive=eu("interactive",ru({ok:au,parentOk:ou,edgeOkViaNode:iu})),tu.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var su=Jl("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&iu(e)})),lu=iu;tu.visible=eu("visible",ru({ok:su,edgeOkViaNode:lu})),tu.hidden=function(){var e=this[0];if(e)return!e.visible()},tu.isBundledBezier=eu("isBundledBezier",(function(){return!!this.cy().styleEnabled()&&!this.removed()&&"bezier"===this.pstyle("curve-style").value&&this.takesUpSpace()})),tu.bypass=tu.css=tu.style,tu.renderedCss=tu.renderedStyle,tu.removeBypass=tu.removeCss=tu.removeStyle,tu.pstyle=tu.parsedStyle;var uu={};function cu(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length&&x(t[0])){var a=t[0];this.on(e.event,a)}else if(0===t.length||1===t.length&&w(t[0])){for(var o=1===t.length?t[0]:null,s=0;s<this.length;s++){var l=this[s],u=!e.ableField||l._private[e.ableField],c=l._private[e.field]!=e.value;if(e.overrideAble){var h=e.overrideAble(l);if(void 0!==h&&(u=h,!h))return this}u&&(l._private[e.field]=e.value,c&&n.push(l))}var d=this.spawn(n);d.updateStyle(),d.emit(e.event),o&&d.emit(o)}return this}}function hu(e){uu[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},uu[e.on]=cu({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),uu[e.off]=cu({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}hu({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),hu({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&!e.pannable()&&void 0},on:"grabify",off:"ungrabify"}),hu({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),hu({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),uu.deselect=uu.unselect,uu.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},hu({field:"active",on:"activate",off:"unactivate"}),hu({field:"pannable",on:"panify",off:"unpanify"}),uu.inactive=function(){var e=this[0];if(e)return!e._private.active};var du={},pu=function(e){return function(t){for(var n=this,r=[],i=0;i<n.length;i++){var a=n[i];if(a.isNode()){for(var o=!1,s=a.connectedEdges(),l=0;l<s.length;l++){var u=s[l],c=u.source(),h=u.target();if(e.noIncomingEdges&&h===a&&c!==a||e.noOutgoingEdges&&c===a&&h!==a){o=!0;break}}o||r.push(a)}}return this.spawn(r,!0).filter(t)}},gu=function(e){return function(t){for(var n=this,r=[],i=0;i<n.length;i++){var a=n[i];if(a.isNode())for(var o=a.connectedEdges(),s=0;s<o.length;s++){var l=o[s],u=l.source(),c=l.target();e.outgoing&&u===a?(r.push(l),r.push(c)):e.incoming&&c===a&&(r.push(l),r.push(u))}}return this.spawn(r,!0).filter(t)}},fu=function(e){return function(t){for(var n=this,r=[],i={};;){var a=e.outgoing?n.outgoers():n.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var l=a[s],u=l.id();i[u]||(i[u]=!0,r.push(l),o=!0)}if(!o)break;n=a}return this.spawn(r,!0).filter(t)}};function vu(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,!0).filter(t)}}function yu(e){return function(t){var n=[],r=this._private.cy,i=e||{};b(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var o=t[a]._private.edges,s=0;s<o.length;s++){var l=o[s],u=l._private.data,c=this.hasElementWithId(u.source)&&t.hasElementWithId(u.target),h=t.hasElementWithId(u.source)&&this.hasElementWithId(u.target);if(c||h){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!c)continue;if(i.thisIsTgt&&!h)continue}n.push(l)}}return this.spawn(n,!0)}}function mu(e){return e=Q({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,a=0;a<r.length;a++)for(var o=r[a]._private,s=o.source,l=s._private.data.id,u=o.data.target,c=s._private.edges,h=0;h<c.length;h++){var d=c[h],p=d._private.data,g=p.target,f=p.source,v=g===u&&f===l,y=l===g&&u===f;(i.codirected&&v||!i.codirected&&(v||y))&&n.push(d)}return this.spawn(n,!0).filter(t)}}du.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},Q(du,{roots:pu({noIncomingEdges:!0}),leaves:pu({noOutgoingEdges:!0}),outgoers:Gs(gu({outgoing:!0}),"outgoers"),successors:fu({outgoing:!0}),incomers:Gs(gu({incoming:!0}),"incomers"),predecessors:fu({incoming:!0})}),Q(du,{neighborhood:Gs((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target(),c=i===l?u:l;c.length>0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),du.neighbourhood=du.neighborhood,du.closedNeighbourhood=du.closedNeighborhood,du.openNeighbourhood=du.openNeighborhood,Q(du,{source:Gs((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Gs((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:vu({attr:"source"}),targets:vu({attr:"target"})}),Q(du,{edgesWith:Gs(yu(),"edgesWith"),edgesTo:Gs(yu({thisIsSrc:!0}),"edgesTo")}),Q(du,{connectedEdges:Gs((function(e){for(var t=[],n=this,r=0;r<n.length;r++){var i=n[r];if(i.isNode())for(var a=i._private.edges,o=0;o<a.length;o++){var s=a[o];t.push(s)}}return this.spawn(t,!0).filter(e)}),"connectedEdges"),connectedNodes:Gs((function(e){for(var t=[],n=this,r=0;r<n.length;r++){var i=n[r];i.isEdge()&&(t.push(i.source()[0]),t.push(i.target()[0]))}return this.spawn(t,!0).filter(e)}),"connectedNodes"),parallelEdges:Gs(mu(),"parallelEdges"),codirectedEdges:Gs(mu({codirected:!0}),"codirectedEdges")}),Q(du,{components:function(e){var t=this,n=t.cy(),r=n.collection(),i=null==e?t.nodes():e.nodes(),a=[];null!=e&&i.empty()&&(i=e.sources());var o=function(e,t){r.merge(e),i.unmerge(e),t.merge(e)};if(i.empty())return t.spawn();var s=function(){var e=n.collection();a.push(e);var r=i[0];o(r,e),t.bfs({directed:!1,roots:r,visit:function(t){return o(t,e)}}),e.forEach((function(n){n.connectedEdges().forEach((function(n){t.has(n)&&e.has(n.source())&&e.has(n.target())&&e.merge(n)}))}))};do{s()}while(i.length>0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),du.componentsOf=du.components;var bu=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new Yt,a=!1;if(t){if(t.length>0&&E(t[0])&&!A(t[0])){a=!0;for(var o=[],s=new Ut,l=0,u=t.length;l<u;l++){var c=t[l];null==c.data&&(c.data={});var h=c.data;if(null==h.id)h.id=Ot();else if(e.hasElementWithId(h.id)||s.has(h.id))continue;var d=new jt(e,c,!1);o.push(d),s.add(h.id)}t=o}}else t=[];this.length=0;for(var p=0,g=t.length;p<g;p++){var f=t[p][0];if(null!=f){var v=f._private.data.id;n&&i.has(v)||(n&&i.set(v,{index:this.length,ele:f}),this[this.length]=f,this.length++)}}this._private={eles:this,cy:e,get map(){return null==this.lazyMap&&this.rebuildMap(),this.lazyMap},set map(e){this.lazyMap=e},rebuildMap:function(){for(var e=this.lazyMap=new Yt,t=this.eles,n=0;n<t.length;n++){var r=t[n];e.set(r.id(),{index:n,ele:r})}}},n&&(this._private.map=i),a&&!r&&this.restore()}else Dt("A collection must have a reference to the core")},xu=jt.prototype=bu.prototype=Object.create(Array.prototype);xu.instanceString=function(){return"collection"},xu.spawn=function(e,t){return new bu(this.cy(),e,t)},xu.spawnSelf=function(){return this.spawn(this)},xu.cy=function(){return this._private.cy},xu.renderer=function(){return this._private.cy.renderer()},xu.element=function(){return this[0]},xu.collection=function(){return L(this)?this:new bu(this._private.cy,[this])},xu.unique=function(){return new bu(this._private.cy,this,!0)},xu.hasElementWithId=function(e){return e=""+e,this._private.map.has(e)},xu.getElementById=function(e){e=""+e;var t=this._private.cy,n=this._private.map.get(e);return n?n.ele:new bu(t)},xu.$id=xu.getElementById,xu.poolIndex=function(){var e=this._private.cy._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index},xu.indexOf=function(e){var t=e[0]._private.data.id;return this._private.map.get(t).index},xu.indexOfId=function(e){return e=""+e,this._private.map.get(e).index},xu.json=function(e){var t=this.element(),n=this.cy();if(null==t&&e)return this;if(null!=t){var r=t._private;if(E(e)){if(n.startBatch(),e.data){t.data(e.data);var i=r.data;if(t.isEdge()){var a=!1,o={},s=e.data.source,l=e.data.target;null!=s&&s!=i.source&&(o.source=""+s,a=!0),null!=l&&l!=i.target&&(o.target=""+l,a=!0),a&&(t=t.move(o))}else{var u="parent"in e.data,c=e.data.parent;!u||null==c&&null==i.parent||c==i.parent||(void 0===c&&(c=null),null!=c&&(c=""+c),t=t.move({parent:c}))}}e.position&&t.position(e.position);var h=function(n,i,a){var o=e[n];null!=o&&o!==r[n]&&(o?t[i]():t[a]())};return h("removed","remove","restore"),h("selected","select","unselect"),h("selectable","selectify","unselectify"),h("locked","lock","unlock"),h("grabbable","grabify","ungrabify"),h("pannable","panify","unpanify"),null!=e.classes&&t.classes(e.classes),n.endBatch(),this}if(void 0===e){var d={data:Lt(r.data),position:Lt(r.position),group:r.group,removed:r.removed,selected:r.selected,selectable:r.selectable,locked:r.locked,grabbable:r.grabbable,pannable:r.pannable,classes:null};d.classes="";var p=0;return r.classes.forEach((function(e){return d.classes+=0==p++?e:" "+e})),d}}},xu.jsons=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t].json();e.push(n)}return e},xu.clone=function(){for(var e=this.cy(),t=[],n=0;n<this.length;n++){var r=this[n].json(),i=new jt(e,r,!1);t.push(i)}return new bu(e,t)},xu.copy=xu.clone,xu.restore=function(){for(var e,t,n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],l=[],u=0,c=i.length;u<c;u++){var h=i[u];r&&!h.removed()||(h.isNode()?s.push(h):l.push(h))}e=s.concat(l);var d=function(){e.splice(t,1),t--};for(t=0;t<e.length;t++){var p=e[t],g=p._private,f=g.data;if(p.clearTraversalCache(),r||g.removed)if(void 0===f.id)f.id=Ot();else if(_(f.id))f.id=""+f.id;else{if(k(f.id)||!b(f.id)){Dt("Can not create element with invalid string ID `"+f.id+"`"),d();continue}if(a.hasElementWithId(f.id)){Dt("Can not create second element with ID `"+f.id+"`"),d();continue}}var v=f.id;if(p.isNode()){var y=g.position;null==y.x&&(y.x=0),null==y.y&&(y.y=0)}if(p.isEdge()){for(var m=p,x=["source","target"],w=x.length,E=!1,T=0;T<w;T++){var D=x[T],C=f[D];_(C)&&(C=f[D]=""+f[D]),null==C||""===C?(Dt("Can not create edge `"+v+"` with unspecified "+D),E=!0):a.hasElementWithId(C)||(Dt("Can not create edge `"+v+"` with nonexistant "+D+" `"+C+"`"),E=!0)}if(E){d();continue}var N=a.getElementById(f.source),A=a.getElementById(f.target);N.same(A)?N._private.edges.push(m):(N._private.edges.push(m),A._private.edges.push(m)),m._private.source=N,m._private.target=A}g.map=new Yt,g.map.set(v,{ele:p,index:0}),g.removed=!1,r&&a.addToPool(p)}for(var L=0;L<s.length;L++){var S=s[L],O=S._private.data;_(O.parent)&&(O.parent=""+O.parent);var I=O.parent;if(null!=I||S._private.parent){var M=S._private.parent?a.collection().merge(S._private.parent):a.getElementById(I);if(M.empty())O.parent=void 0;else if(M[0].removed())Nt("Node added with missing parent, reference to parent removed"),O.parent=void 0,S._private.parent=null;else{for(var P=!1,R=M;!R.empty();){if(S.same(R)){P=!0,O.parent=void 0;break}R=R.parent()}P||(M[0]._private.children.push(S),S._private.parent=M[0],o.hasCompoundNodes=!0)}}}if(e.length>0){for(var B=e.length===i.length?i:new bu(a,e),F=0;F<B.length;F++){var z=B[F];z.isNode()||(z.parallelEdges().clearTraversalCache(),z.source().clearTraversalCache(),z.target().clearTraversalCache())}(o.hasCompoundNodes?a.collection().merge(B).merge(B.connectedNodes()).merge(B.parent()):B).dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(n),n?B.emitAndNotify("add"):r&&B.emit("add")}return i},xu.removed=function(){var e=this[0];return e&&e._private.removed},xu.inside=function(){var e=this[0];return e&&!e._private.removed},xu.remove=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){for(var t=e._private.edges,n=0;n<t.length;n++)l(t[n])}function s(e){for(var t=e._private.children,n=0;n<t.length;n++)l(t[n])}function l(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),o(e),s(e)):r.unshift(e))}for(var u=0,c=n.length;u<c;u++)l(n[u]);function h(e,t){var n=e._private.edges;Pt(n,t),e.clearTraversalCache()}function d(e){e.clearTraversalCache()}var p=[];function g(e,t){t=t[0];var n=(e=e[0])._private.children,r=e.id();Pt(n,t),t._private.parent=null,p.ids[r]||(p.ids[r]=!0,p.push(e))}p.ids={},n.dirtyCompoundBoundsCache(),t&&a.removeFromPool(r);for(var f=0;f<r.length;f++){var v=r[f];if(v.isEdge()){var y=v.source()[0],m=v.target()[0];h(y,v),h(m,v);for(var b=v.parallelEdges(),x=0;x<b.length;x++){var w=b[x];d(w),w.isBundledBezier()&&w.dirtyBoundingBoxCache()}}else{var E=v.parent();0!==E.length&&g(E,v)}t&&(v._private.removed=!0)}var T=a._private.elements;a._private.hasCompoundNodes=!1;for(var _=0;_<T.length;_++)if(T[_].isParent()){a._private.hasCompoundNodes=!0;break}var D=new bu(this.cy(),r);D.size()>0&&(e?D.emitAndNotify("remove"):t&&D.emit("remove"));for(var C=0;C<p.length;C++){var N=p[C];t&&N.removed()||N.updateStyle()}return D},xu.move=function(e){var t=this._private.cy,n=this,r=!1,i=!1,a=function(e){return null==e?e:""+e};if(void 0!==e.source||void 0!==e.target){var o=a(e.source),s=a(e.target),l=null!=o&&t.hasElementWithId(o),u=null!=s&&t.hasElementWithId(s);(l||u)&&(t.batch((function(){n.remove(r,i),n.emitAndNotify("moveout");for(var e=0;e<n.length;e++){var t=n[e],a=t._private.data;t.isEdge()&&(l&&(a.source=o),u&&(a.target=s))}n.restore(r,i)})),n.emitAndNotify("move"))}else if(void 0!==e.parent){var c=a(e.parent);if(null===c||t.hasElementWithId(c)){var h=null===c?void 0:c;t.batch((function(){var e=n.remove(r,i);e.emitAndNotify("moveout");for(var t=0;t<n.length;t++){var a=n[t],o=a._private.data;a.isNode()&&(o.parent=h)}e.restore(r,i)})),n.emitAndNotify("move")}}return this},[Si,ds,ps,Bs,Ys,Ws,$s,Nl,Vl,Ul,ql,$l,Zl,tu,uu,du].forEach((function(e){Q(xu,e)}));var wu={add:function(e){var t,n=this;if(N(e)){var r=e;if(r._private.cy===n)t=r.restore();else{for(var i=[],a=0;a<r.length;a++){var o=r[a];i.push(o.json())}t=new bu(n,i)}}else if(w(e))t=new bu(n,e);else if(E(e)&&(w(e.nodes)||w(e.edges))){for(var s=e,l=[],u=["nodes","edges"],c=0,h=u.length;c<h;c++){var d=u[c],p=s[d];if(w(p))for(var g=0,f=p.length;g<f;g++){var v=Q({group:d},p[g]);l.push(v)}}t=new bu(n,l)}else t=new jt(n,e).collection();return t},remove:function(e){if(N(e));else if(b(e)){var t=e;e=this.$(t)}return e.remove()}};function Eu(e,t,n,r){var i=4,a=.001,o=1e-7,s=10,l=11,u=1/(l-1),c="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var h=0;h<4;++h)if("number"!=typeof arguments[h]||isNaN(arguments[h])||!isFinite(arguments[h]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var d=c?new Float32Array(l):new Array(l);function p(e,t){return 1-3*t+3*e}function g(e,t){return 3*t-6*e}function f(e){return 3*e}function v(e,t,n){return((p(t,n)*e+g(t,n))*e+f(t))*e}function y(e,t,n){return 3*p(t,n)*e*e+2*g(t,n)*e+f(t)}function m(t,r){for(var a=0;a<i;++a){var o=y(r,e,n);if(0===o)return r;r-=(v(r,e,n)-t)/o}return r}function b(){for(var t=0;t<l;++t)d[t]=v(t*u,e,n)}function x(t,r,i){var a,l,u=0;do{(a=v(l=r+(i-r)/2,e,n)-t)>0?i=l:r=l}while(Math.abs(a)>o&&++u<s);return l}function w(t){for(var r=0,i=1,o=l-1;i!==o&&d[i]<=t;++i)r+=u;--i;var s=r+(t-d[i])/(d[i+1]-d[i])*u,c=y(s,e,n);return c>=a?m(t,s):0===c?s:x(t,r,r+u)}var E=!1;function T(){E=!0,e===t&&n===r||b()}var _=function(i){return E||T(),e===t&&n===r?i:0===i?0:1===i?1:v(w(i),t,r)};_.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var D="generateBezier("+[e,t,n,r]+")";return _.toString=function(){return D},_}var Tu=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),l=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),u=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,i){var a,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,h=1e-4,d=.016;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,l.tension=t,l.friction=r,o=(a=null!==i)?(c=e(t,r))/i*d:d;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>h&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),_u=function(e,t,n,r){var i=Eu(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Du={linear:function(e,t,n){return e+(t-e)*n},ease:_u(.25,.1,.25,1),"ease-in":_u(.42,0,1,1),"ease-out":_u(0,0,.58,1),"ease-in-out":_u(.42,0,.58,1),"ease-in-sine":_u(.47,0,.745,.715),"ease-out-sine":_u(.39,.575,.565,1),"ease-in-out-sine":_u(.445,.05,.55,.95),"ease-in-quad":_u(.55,.085,.68,.53),"ease-out-quad":_u(.25,.46,.45,.94),"ease-in-out-quad":_u(.455,.03,.515,.955),"ease-in-cubic":_u(.55,.055,.675,.19),"ease-out-cubic":_u(.215,.61,.355,1),"ease-in-out-cubic":_u(.645,.045,.355,1),"ease-in-quart":_u(.895,.03,.685,.22),"ease-out-quart":_u(.165,.84,.44,1),"ease-in-out-quart":_u(.77,0,.175,1),"ease-in-quint":_u(.755,.05,.855,.06),"ease-out-quint":_u(.23,1,.32,1),"ease-in-out-quint":_u(.86,0,.07,1),"ease-in-expo":_u(.95,.05,.795,.035),"ease-out-expo":_u(.19,1,.22,1),"ease-in-out-expo":_u(1,0,0,1),"ease-in-circ":_u(.6,.04,.98,.335),"ease-out-circ":_u(.075,.82,.165,1),"ease-in-out-circ":_u(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Du.linear;var r=Tu(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":_u};function Cu(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function Nu(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Au(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Nu(e,i),s=Nu(t,i);if(_(o)&&_(s))return Cu(a,o,s,n,r);if(w(o)&&w(s)){for(var l=[],u=0;u<s.length;u++){var c=o[u],h=s[u];if(null!=c&&null!=h){var d=Cu(a,c,h,n,r);l.push(d)}else l.push(h)}return l}}function Lu(e,t,n,r){var i=!r,a=e._private,o=t._private,s=o.easing,l=o.startTime,u=(r?e:e.cy()).style();if(!o.easingImpl)if(null==s)o.easingImpl=Du.linear;else{var c,h,d;c=b(s)?u.parse("transition-timing-function",s).value:s,b(c)?(h=c,d=[]):(h=c[1],d=c.slice(2).map((function(e){return+e}))),d.length>0?("spring"===h&&d.push(o.duration),o.easingImpl=Du[h].apply(null,d)):o.easingImpl=Du[h]}var p,g=o.easingImpl;if(p=0===o.duration?1:(n-l)/o.duration,o.applying&&(p=o.progress),p<0?p=0:p>1&&(p=1),null==o.delay){var f=o.startPosition,v=o.position;if(v&&i&&!e.locked()){var y={};Su(f.x,v.x)&&(y.x=Au(f.x,v.x,p,g)),Su(f.y,v.y)&&(y.y=Au(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,x=o.pan,w=a.pan,E=null!=x&&r;E&&(Su(m.x,x.x)&&(w.x=Au(m.x,x.x,p,g)),Su(m.y,x.y)&&(w.y=Au(m.y,x.y,p,g)),e.emit("pan"));var T=o.startZoom,_=o.zoom,D=null!=_&&r;D&&(Su(T,_)&&(a.zoom=An(a.minZoom,Au(T,_,p,g),a.maxZoom)),e.emit("zoom")),(E||D)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&i){for(var N=0;N<C.length;N++){var A=C[N],L=A.name,S=A,O=o.startStyle[L],I=Au(O,S,p,g,u.properties[O.name]);u.overrideBypass(e,L,I)}e.emit("style")}}return o.progress=p,p}function Su(e,t){return!!(null!=e&&null!=t&&(_(e)&&_(t)||e&&t))}function Ou(e,t,n,r){var i=t._private;i.started=!0,i.startTime=n-i.progress*i.duration}function Iu(e,t){var n=t._private.aniEles,r=[];function i(t,n){var i=t._private,a=i.animation.current,o=i.animation.queue,s=!1;if(0===a.length){var l=o.shift();l&&a.push(l)}for(var u=function(e){for(var t=e.length-1;t>=0;t--)(0,e[t])();e.splice(0,e.length)},c=a.length-1;c>=0;c--){var h=a[c],d=h._private;d.stopped?(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.frames)):(d.playing||d.applying)&&(d.playing&&d.applying&&(d.applying=!1),d.started||Ou(t,h,e),Lu(t,h,e,n),d.applying&&(d.applying=!1),u(d.frames),null!=d.step&&d.step(e),h.completed()&&(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o<n.length;o++){var s=i(n[o]);a=a||s}var l=i(t,!0);(a||l)&&(n.length>0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var ku={animate:hs.animate(),animation:hs.animation(),animated:hs.animated(),clearQueue:hs.clearQueue(),delay:hs.delay(),delayAnimation:hs.delayAnimation(),stop:hs.stop(),addToAnimationPool:function(e){var t=this;t.styleEnabled()&&t._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Iu(n,e)}),t.beforeRenderPriorities.animations):n()}function n(){e._private.animationsRunning&&nt((function(t){Iu(t,e),n()}))}}},Mu={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&A(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},Pu=function(e){return b(e)?new Ps(e):e},Ru={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Rl(Mu,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Pu(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Pu(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Pu(t),n),this},once:function(e,t,n){return this.emitter().one(e,Pu(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};hs.eventAliasesOn(Ru);var Bu={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};Bu.jpeg=Bu.jpg;var Fu={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=b(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(Q({},e,{cy:t,eles:i}));return a}Dt("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else Dt("A `name` must be specified to make a layout");else Dt("Layout options must be specified to make a layout")}};Fu.createLayout=Fu.makeLayout=Fu.layout;var zu={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],a=e[i];t.getElementById(i).data(a)}}))}},Gu=Mt({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),Yu={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(e){var t=this,n=t.extension("renderer",e.name);if(null!=n){void 0!==e.wheelSensitivity&&Nt("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var r=Gu(e);r.cy=t,t._private.renderer=new n(r),this.notify("init")}else Dt("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"))},destroyRenderer:function(){var e=this;e.notify("destroy");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Yu.invalidateDimensions=Yu.resize;var Xu={collection:function(e,t){return b(e)?this.$(e):N(e)?e.collection():w(e)?(t||(t={}),new bu(this,e,t.unique,t.removed)):new bu(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};Xu.elements=Xu.filter=Xu.$;var Vu={},Uu="t",ju="f";Vu.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r<e.length;r++){var i=e[r],a=t.getContextMeta(i);if(!a.empty){var o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);i._private.appliedInitStyle?t.updateTransitions(i,s.diffProps):i._private.appliedInitStyle=!0,t.updateStyleHints(i)&&n.push(i)}}return n},Vu.getPropertiesDiff=function(e,t){var n=this,r=n._private.propDiffs=n._private.propDiffs||{},i=e+"-"+t,a=r[i];if(a)return a;for(var o=[],s={},l=0;l<n.length;l++){var u=n[l],c=e[l]===Uu,h=t[l]===Uu,d=c!==h,p=u.mappedProperties.length>0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f<g.length;f++){for(var v=g[f],y=v.name,m=!1,b=l+1;b<n.length;b++){var x=n[b];if(t[b]===Uu&&(m=null!=x.properties[v.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return r[i]=o,o},Vu.getContextMeta=function(e){for(var t,n=this,r="",i=e._private.styleCxtKey||"",a=0;a<n.length;a++){var o=n[a];r+=o.selector&&o.selector.matches(e)?Uu:ju}return t=n.getPropertiesDiff(i,r),e._private.styleCxtKey=r,{key:r,diffPropNames:t,empty:0===t.length}},Vu.getContextStyle=function(e){var t=e.key,n=this,r=this._private.contextStyles=this._private.contextStyles||{};if(r[t])return r[t];for(var i={_private:{key:t}},a=0;a<n.length;a++){var o=n[a];if(t[a]===Uu)for(var s=0;s<o.properties.length;s++){var l=o.properties[s];i[l.name]=l}}return r[t]=i,i},Vu.applyContextStyle=function(e,t,n){for(var r=this,i=e.diffPropNames,a={},o=r.types,s=0;s<i.length;s++){var l=i[s],u=t[l],c=n.pstyle(l);if(!u){if(!c)continue;u=c.bypass?{name:l,deleteBypassed:!0}:{name:l,delete:!0}}if(c!==u){if(u.mapped===o.fn&&null!=c&&null!=c.mapping&&c.mapping.value===u.value){var h=c.mapping;if((h.fnValue=u.value(n))===h.prevFnValue)continue}var d=a[l]={prev:c};r.applyParsedProperty(n,u),d.next=n.pstyle(l),d.next&&d.next.bypass&&(d.next=d.next.bypassed)}}return{diffProps:a}},Vu.updateStyleHints=function(e){var t=e._private,n=this,r=n.propertyGroupNames,i=n.propertyGroupKeys,a=function(e,t,r){return n.getPropertiesHash(e,t,r)},o=t.styleKey;if(e.removed())return!1;var s="nodes"===t.group,l=e._private.style;r=Object.keys(l);for(var u=0;u<i.length;u++){var c=i[u];t.styleKeys[c]=[it,ot]}for(var h=function(e,n){return t.styleKeys[n][0]=lt(e,t.styleKeys[n][0])},d=function(e,n){return t.styleKeys[n][1]=ut(e,t.styleKeys[n][1])},p=function(e,t){h(e,t),d(e,t)},g=function(e,t){for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);h(r,t),d(r,t)}},f=2e9,v=function(e){return-128<e&&e<128&&Math.floor(e)!==e?f-(1024*e|0):e},y=0;y<r.length;y++){var m=r[y],b=l[m];if(null!=b){var x=this.properties[m],w=x.type,E=x.groupKey,T=void 0;null!=x.hashOverride?T=x.hashOverride(e,b):null!=b.pfValue&&(T=b.pfValue);var _=null==x.enums?b.value:null,D=null!=T,C=D||null!=_,N=b.units;w.number&&C&&!w.multiple?(p(v(D?T:_),E),D||null==N||g(N,E)):g(b.strValue,E)}}for(var A=[it,ot],L=0;L<i.length;L++){var S=i[L],O=t.styleKeys[S];A[0]=lt(O[0],A[0]),A[1]=ut(O[1],A[1])}t.styleKey=ct(A[0],A[1]);var I=t.styleKeys;t.labelDimsKey=ht(I.labelDimensions);var k=a(e,["label"],I.labelDimensions);if(t.labelKey=ht(k),t.labelStyleKey=ht(dt(I.commonLabel,k)),!s){var M=a(e,["source-label"],I.labelDimensions);t.sourceLabelKey=ht(M),t.sourceLabelStyleKey=ht(dt(I.commonLabel,M));var P=a(e,["target-label"],I.labelDimensions);t.targetLabelKey=ht(P),t.targetLabelStyleKey=ht(dt(I.commonLabel,P))}if(s){var R=t.styleKeys,B=R.nodeBody,F=R.nodeBorder,z=R.backgroundImage,G=R.compound,Y=R.pie,X=[B,F,z,G,Y].filter((function(e){return null!=e})).reduce(dt,[it,ot]);t.nodeKey=ht(X),t.hasPie=null!=Y&&Y[0]!==it&&Y[1]!==ot}return o!==t.styleKey},Vu.clearStyleHints=function(e){var t=e._private;t.styleCxtKey="",t.styleKeys={},t.styleKey=null,t.labelKey=null,t.labelStyleKey=null,t.sourceLabelKey=null,t.sourceLabelStyleKey=null,t.targetLabelKey=null,t.targetLabelStyleKey=null,t.nodeKey=null,t.hasPie=null},Vu.applyParsedProperty=function(e,t){var n,r=this,i=t,a=e._private.style,o=r.types,s=r.properties[i.name].type,l=i.bypass,u=a[i.name],c=u&&u.bypass,h=e._private,d="mapping",p=function(e){return null==e?null:null!=e.pfValue?e.pfValue:e.value},g=function(){var t=p(u),n=p(i);r.checkTriggers(e,i.name,t,n)};if(i&&"pie"===i.name.substr(0,3)&&Nt("The pie style properties are deprecated. Create charts using background images instead."),"curve-style"===t.name&&e.isEdge()&&("bezier"!==t.value&&e.isLoop()||"haystack"===t.value&&(e.source().isParent()||e.target().isParent()))&&(i=t=this.parse(t.name,"bezier",l)),i.delete)return a[i.name]=void 0,g(),!0;if(i.deleteBypassed)return u?!!u.bypass&&(u.bypassed=void 0,g(),!0):(g(),!0);if(i.deleteBypass)return u?!!u.bypass&&(a[i.name]=u.bypassed,g(),!0):(g(),!0);var f=function(){Nt("Do not assign mappings to elements without corresponding data (i.e. ele `"+e.id()+"` has no mapping for property `"+i.name+"` with data field `"+i.field+"`); try a `["+i.field+"]` selector to limit scope to elements with `"+i.field+"` defined")};switch(i.mapped){case o.mapData:for(var v,y=i.field.split("."),m=h.data,b=0;b<y.length&&m;b++)m=m[y[b]];if(null==m)return f(),!1;if(!_(m))return Nt("Do not use continuous mappers without specifying numeric data (i.e. `"+i.field+": "+m+"` for `"+e.id()+"` is non-numeric)"),!1;var x=i.fieldMax-i.fieldMin;if((v=0===x?0:(m-i.fieldMin)/x)<0?v=0:v>1&&(v=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],T=i.valueMin[1],D=i.valueMax[1],C=i.valueMin[2],N=i.valueMax[2],A=null==i.valueMin[3]?1:i.valueMin[3],L=null==i.valueMax[3]?1:i.valueMax[3],S=[Math.round(w+(E-w)*v),Math.round(T+(D-T)*v),Math.round(C+(N-C)*v),Math.round(A+(L-A)*v)];n={bypass:i.bypass,name:i.name,value:S,strValue:"rgb("+S[0]+", "+S[1]+", "+S[2]+")"}}else{if(!s.number)return!1;var O=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,O,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var I=i.field.split("."),k=h.data,M=0;M<I.length&&k;M++)k=k[I[M]];if(null!=k&&(n=this.parse(i.name,k,i.bypass,d)),!n)return f(),!1;n.mapping=i,i=n;break;case o.fn:var P=i.value,R=null!=i.fnValue?i.fnValue:P(e);if(i.prevFnValue=R,null==R)return Nt("Custom function mappers may not return null (i.e. `"+i.name+"` for ele `"+e.id()+"` is null)"),!1;if(!(n=this.parse(i.name,R,i.bypass,d)))return Nt("Custom function mappers may not return invalid values for the property type (i.e. `"+i.name+"` for ele `"+e.id()+"` is invalid)"),!1;n.mapping=Lt(i),i=n;break;case void 0:break;default:return!1}return l?(i.bypassed=c?u.bypassed:u,a[i.name]=i):c?u.bypassed=i:a[i.name]=i,g(),!0},Vu.cleanElements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(this.clearStyleHints(r),r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),t)for(var i=r._private.style,a=Object.keys(i),o=0;o<a.length;o++){var s=a[o],l=i[s];null!=l&&(l.bypass?l.bypassed=null:i[s]=null)}else r._private.style={}}},Vu.update=function(){this._private.cy.mutableElements().updateStyle()},Vu.updateTransitions=function(e,t){var n=this,r=e._private,i=e.pstyle("transition-property").value,a=e.pstyle("transition-duration").pfValue,o=e.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var s={},l=!1,u=0;u<i.length;u++){var c=i[u],h=e.pstyle(c),d=t[c];if(d){var p=d.prev,g=null!=d.next?d.next:h,f=!1,v=void 0,y=1e-6;p&&(_(p.pfValue)&&_(g.pfValue)?(f=g.pfValue-p.pfValue,v=p.pfValue+y*f):_(p.value)&&_(g.value)?(f=g.value-p.value,v=p.value+y*f):w(p.value)&&w(g.value)&&(f=p.value[0]!==g.value[0]||p.value[1]!==g.value[1]||p.value[2]!==g.value[2],v=p.strValue),f&&(s[c]=g.strValue,this.applyBypass(e,c,v),l=!0))}}if(!l)return;r.transitioning=!0,new Gi((function(t){o>0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},Vu.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Vu.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},Vu.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||("curve-style"!==t||"bezier"!==n&&"bezier"!==r)&&("display"!==t||"none"!==n&&"none"!==r)||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()}))}))},Vu.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Hu={applyBypass:function(e,t,n,r){var i=this,a=[],o=!0;if("*"===t||"**"===t){if(void 0!==n)for(var s=0;s<i.properties.length;s++){var l=i.properties[s].name,u=this.parse(l,n,!0);u&&a.push(u)}}else if(b(t)){var c=this.parse(t,n,!0);c&&a.push(c)}else{if(!E(t))return!1;var h=t;r=n;for(var d=Object.keys(h),p=0;p<d.length;p++){var g=d[p],f=h[g];if(void 0===f&&(f=h[G(g)]),void 0!==f){var v=this.parse(g,f,!0);v&&a.push(v)}}}if(0===a.length)return!1;for(var y=!1,m=0;m<e.length;m++){for(var x=e[m],w={},T=void 0,_=0;_<a.length;_++){var D=a[_];if(r){var C=x.pstyle(D.name);T=w[D.name]={prev:C}}y=this.applyParsedProperty(x,Lt(D))||y,r&&(T.next=x.pstyle(D.name))}y&&this.updateStyleHints(x),r&&this.updateTransitions(x,w,o)}return y},overrideBypass:function(e,t,n){t=z(t);for(var r=0;r<e.length;r++){var i=e[r],a=i._private.style[t],o=this.properties[t].type,s=o.color,l=o.mutiple,u=a?null!=a.pfValue?a.pfValue:a.value:null;a&&a.bypass?(a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=s?"rgb("+n.join(",")+")":l?n.join(" "):""+n,this.updateStyleHints(i)):this.applyBypass(i,t,n),this.checkTriggers(i,t,u,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=!0,i=0;i<e.length;i++){for(var a=e[i],o={},s=0;s<t.length;s++){var l=t[s],u=this.properties[l],c=a.pstyle(u.name);if(c&&c.bypass){var h="",d=this.parse(l,h,!0),p=o[u.name]={prev:c};this.applyParsedProperty(a,d),p.next=a.pstyle(u.name)}}this.updateStyleHints(a),n&&this.updateTransitions(a,o,r)}}},qu={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy.container();if(d&&t&&d.getComputedStyle)return d.getComputedStyle(t).getPropertyValue(e)}},Wu={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){var n=this;if(e=e[0]){for(var r={},i=0;i<n.properties.length;i++){var a=n.properties[i],o=n.getStylePropertyValue(e,a.name,t);null!=o&&(r[a.name]=o,r[G(a.name)]=o)}return r}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){var r=this;if(e=e[0]){var i=r.properties[t];i.alias&&(i=i.pointsTo);var a=i.type,o=e.pstyle(i.name);if(o){var s=o.value,l=o.units,u=o.strValue;if(n&&a.number&&null!=s&&_(s)){var c=e.cy().zoom(),h=function(e){return e*c},d=function(e,t){return h(e)+t},p=w(s);return(p?l.every((function(e){return null!=e})):null!=l)?p?s.map((function(e,t){return d(e,l[t])})).join(" "):d(s,l):p?s.map((function(e){return b(e)?e:""+h(e)})).join(" "):""+h(s)}if(null!=u)return u}return null}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var i=t[r].name,a=e.pstyle(i);void 0!==a&&(a=E(a)?this.parse(i,a.strValue):this.parse(i,a)),a&&(n[i]=a)}return n},getPropsList:function(e){var t=[],n=e,r=this.properties;if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a],s=n[o],l=r[o]||r[z(o)],u=this.parse(l.name,s);u&&t.push(u)}return t},getNonDefaultPropertiesHash:function(e,t,n){var r,i,a,o,s,l,u=n.slice();for(s=0;s<t.length;s++)if(r=t[s],null!=(i=e.pstyle(r,!1)))if(null!=i.pfValue)u[0]=lt(o,u[0]),u[1]=ut(o,u[1]);else for(a=i.strValue,l=0;l<a.length;l++)o=a.charCodeAt(l),u[0]=lt(o,u[0]),u[1]=ut(o,u[1]);return u}};Wu.getPropertiesHash=Wu.getNonDefaultPropertiesHash;var $u={appendFromJson:function(e){for(var t=this,n=0;n<e.length;n++){var r=e[n],i=r.selector,a=r.style||r.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var l=o[s],u=a[l];t.css(l,u)}}return t},fromJson:function(e){var t=this;return t.resetToDefault(),t.appendFromJson(e),t},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:a})}return e}},Ku={appendFromString:function(e){var t,n,r,i=this,a=this,o=""+e;function s(){o=o.length>t.length?o.substr(t.length):""}function l(){n=n.length>r.length?n.substr(r.length):""}for(o=o.replace(/[/][*](\s|.)+?[*][/]/g,"");!o.match(/^\s*$/);){var u=o.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!u){Nt("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+o);break}t=u[0];var c=u[1];if("core"!==c&&new Ps(c).invalid)Nt("Skipping parsing of block: Invalid selector found in string stylesheet: "+c),s();else{var h=u[2],d=!1;n=h;for(var p=[];!n.match(/^\s*$/);){var g=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!g){Nt("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+h),d=!0;break}r=g[0];var f=g[1],v=g[2];i.properties[f]?a.parse(f,v)?(p.push({name:f,val:v}),l()):(Nt("Skipping property: Invalid property definition in: "+r),l()):(Nt("Skipping property: Invalid property name in: "+r),l())}if(d){s();break}a.selector(c);for(var y=0;y<p.length;y++){var m=p[y];a.css(m.name,m.val)}s()}}return a},fromString:function(e){var t=this;return t.resetToDefault(),t.appendFromString(e),t}},Zu={};(function(){var e=V,t=j,n=q,r=W,i=$,a=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},o=function(a){var o=e+"|\\w+|"+t+"|"+n+"|"+r+"|"+i;return"^"+a+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+o+")\\s*\\,\\s*("+o+")\\)$"},s=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];Zu.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:a("data")},layoutData:{mapping:!0,regex:a("layoutData")},scratch:{mapping:!0,regex:a("scratch")},mapData:{mapping:!0,regex:o("mapData")},mapLayoutData:{mapping:!0,regex:o("mapLayoutData")},mapScratch:{mapping:!0,regex:o("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:s,singleRegexMatchValue:!0},urls:{regexes:s,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return b(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(e){var t=e.length;return 1===t||2===t||4===t}}};var l={zeroNonZero:function(e,t){return(null==e||null==t)&&e!==t||0==e&&0!=t||0!=e&&0==t},any:function(e,t){return e!=t},emptyNonEmpty:function(e,t){var n=k(e),r=k(t);return n&&!r||!n&&r}},u=Zu.types,c=[{name:"label",type:u.text,triggersBounds:l.any,triggersZOrder:l.emptyNonEmpty},{name:"text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any}],h=[{name:"source-label",type:u.text,triggersBounds:l.any},{name:"source-text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"source-text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"source-text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"source-text-offset",type:u.size,triggersBounds:l.any}],d=[{name:"target-label",type:u.text,triggersBounds:l.any},{name:"target-text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"target-text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"target-text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"target-text-offset",type:u.size,triggersBounds:l.any}],p=[{name:"font-family",type:u.fontFamily,triggersBounds:l.any},{name:"font-style",type:u.fontStyle,triggersBounds:l.any},{name:"font-weight",type:u.fontWeight,triggersBounds:l.any},{name:"font-size",type:u.size,triggersBounds:l.any},{name:"text-transform",type:u.textTransform,triggersBounds:l.any},{name:"text-wrap",type:u.textWrap,triggersBounds:l.any},{name:"text-overflow-wrap",type:u.textOverflowWrap,triggersBounds:l.any},{name:"text-max-width",type:u.size,triggersBounds:l.any},{name:"text-outline-width",type:u.size,triggersBounds:l.any},{name:"line-height",type:u.positiveNumber,triggersBounds:l.any}],g=[{name:"text-valign",type:u.valign,triggersBounds:l.any},{name:"text-halign",type:u.halign,triggersBounds:l.any},{name:"color",type:u.color},{name:"text-outline-color",type:u.color},{name:"text-outline-opacity",type:u.zeroOneNumber},{name:"text-background-color",type:u.color},{name:"text-background-opacity",type:u.zeroOneNumber},{name:"text-background-padding",type:u.size,triggersBounds:l.any},{name:"text-border-opacity",type:u.zeroOneNumber},{name:"text-border-color",type:u.color},{name:"text-border-width",type:u.size,triggersBounds:l.any},{name:"text-border-style",type:u.borderStyle,triggersBounds:l.any},{name:"text-background-shape",type:u.textBackgroundShape,triggersBounds:l.any},{name:"text-justification",type:u.justification}],f=[{name:"events",type:u.bool},{name:"text-events",type:u.bool}],v=[{name:"display",type:u.display,triggersZOrder:l.any,triggersBounds:l.any,triggersBoundsOfParallelBeziers:!0},{name:"visibility",type:u.visibility,triggersZOrder:l.any},{name:"opacity",type:u.zeroOneNumber,triggersZOrder:l.zeroNonZero},{name:"text-opacity",type:u.zeroOneNumber},{name:"min-zoomed-font-size",type:u.size},{name:"z-compound-depth",type:u.zCompoundDepth,triggersZOrder:l.any},{name:"z-index-compare",type:u.zIndexCompare,triggersZOrder:l.any},{name:"z-index",type:u.nonNegativeInt,triggersZOrder:l.any}],y=[{name:"overlay-padding",type:u.size,triggersBounds:l.any},{name:"overlay-color",type:u.color},{name:"overlay-opacity",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:"overlay-shape",type:u.overlayShape,triggersBounds:l.any}],m=[{name:"underlay-padding",type:u.size,triggersBounds:l.any},{name:"underlay-color",type:u.color},{name:"underlay-opacity",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:"underlay-shape",type:u.overlayShape,triggersBounds:l.any}],x=[{name:"transition-property",type:u.propList},{name:"transition-duration",type:u.time},{name:"transition-delay",type:u.time},{name:"transition-timing-function",type:u.easing}],w=function(e,t){return"label"===t.value?-e.poolIndex():t.pfValue},E=[{name:"height",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:"width",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:"shape",type:u.nodeShape,triggersBounds:l.any},{name:"shape-polygon-points",type:u.polygonPointList,triggersBounds:l.any},{name:"background-color",type:u.color},{name:"background-fill",type:u.fill},{name:"background-opacity",type:u.zeroOneNumber},{name:"background-blacken",type:u.nOneOneNumber},{name:"background-gradient-stop-colors",type:u.colors},{name:"background-gradient-stop-positions",type:u.percentages},{name:"background-gradient-direction",type:u.gradientDirection},{name:"padding",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"padding-relative-to",type:u.paddingRelativeTo,triggersBounds:l.any},{name:"bounds-expansion",type:u.boundsExpansion,triggersBounds:l.any}],T=[{name:"border-color",type:u.color},{name:"border-opacity",type:u.zeroOneNumber},{name:"border-width",type:u.size,triggersBounds:l.any},{name:"border-style",type:u.borderStyle}],_=[{name:"background-image",type:u.urls},{name:"background-image-crossorigin",type:u.bgCrossOrigin},{name:"background-image-opacity",type:u.zeroOneNumbers},{name:"background-image-containment",type:u.bgContainment},{name:"background-image-smoothing",type:u.bools},{name:"background-position-x",type:u.bgPos},{name:"background-position-y",type:u.bgPos},{name:"background-width-relative-to",type:u.bgRelativeTo},{name:"background-height-relative-to",type:u.bgRelativeTo},{name:"background-repeat",type:u.bgRepeat},{name:"background-fit",type:u.bgFit},{name:"background-clip",type:u.bgClip},{name:"background-width",type:u.bgWH},{name:"background-height",type:u.bgWH},{name:"background-offset-x",type:u.bgPos},{name:"background-offset-y",type:u.bgPos}],D=[{name:"position",type:u.position,triggersBounds:l.any},{name:"compound-sizing-wrt-labels",type:u.compoundIncludeLabels,triggersBounds:l.any},{name:"min-width",type:u.size,triggersBounds:l.any},{name:"min-width-bias-left",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-width-bias-right",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-height",type:u.size,triggersBounds:l.any},{name:"min-height-bias-top",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-height-bias-bottom",type:u.sizeMaybePercent,triggersBounds:l.any}],C=[{name:"line-style",type:u.lineStyle},{name:"line-color",type:u.color},{name:"line-fill",type:u.fill},{name:"line-cap",type:u.lineCap},{name:"line-opacity",type:u.zeroOneNumber},{name:"line-dash-pattern",type:u.numbers},{name:"line-dash-offset",type:u.number},{name:"line-gradient-stop-colors",type:u.colors},{name:"line-gradient-stop-positions",type:u.percentages},{name:"curve-style",type:u.curveStyle,triggersBounds:l.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:u.zeroOneNumber,triggersBounds:l.any},{name:"source-endpoint",type:u.edgeEndpoint,triggersBounds:l.any},{name:"target-endpoint",type:u.edgeEndpoint,triggersBounds:l.any},{name:"control-point-step-size",type:u.size,triggersBounds:l.any},{name:"control-point-distances",type:u.bidirectionalSizes,triggersBounds:l.any},{name:"control-point-weights",type:u.numbers,triggersBounds:l.any},{name:"segment-distances",type:u.bidirectionalSizes,triggersBounds:l.any},{name:"segment-weights",type:u.numbers,triggersBounds:l.any},{name:"taxi-turn",type:u.bidirectionalSizeMaybePercent,triggersBounds:l.any},{name:"taxi-turn-min-distance",type:u.size,triggersBounds:l.any},{name:"taxi-direction",type:u.axisDirection,triggersBounds:l.any},{name:"edge-distances",type:u.edgeDistances,triggersBounds:l.any},{name:"arrow-scale",type:u.positiveNumber,triggersBounds:l.any},{name:"loop-direction",type:u.angle,triggersBounds:l.any},{name:"loop-sweep",type:u.angle,triggersBounds:l.any},{name:"source-distance-from-node",type:u.size,triggersBounds:l.any},{name:"target-distance-from-node",type:u.size,triggersBounds:l.any}],N=[{name:"ghost",type:u.bool,triggersBounds:l.any},{name:"ghost-offset-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"ghost-offset-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"ghost-opacity",type:u.zeroOneNumber}],A=[{name:"selection-box-color",type:u.color},{name:"selection-box-opacity",type:u.zeroOneNumber},{name:"selection-box-border-color",type:u.color},{name:"selection-box-border-width",type:u.size},{name:"active-bg-color",type:u.color},{name:"active-bg-opacity",type:u.zeroOneNumber},{name:"active-bg-size",type:u.size},{name:"outside-texture-bg-color",type:u.color},{name:"outside-texture-bg-opacity",type:u.zeroOneNumber}],L=[];Zu.pieBackgroundN=16,L.push({name:"pie-size",type:u.sizeMaybePercent});for(var S=1;S<=Zu.pieBackgroundN;S++)L.push({name:"pie-"+S+"-background-color",type:u.color}),L.push({name:"pie-"+S+"-background-size",type:u.percent}),L.push({name:"pie-"+S+"-background-opacity",type:u.zeroOneNumber});var O=[],I=Zu.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:u.arrowShape,triggersBounds:l.any},{name:"arrow-color",type:u.color},{name:"arrow-fill",type:u.arrowFill}].forEach((function(e){I.forEach((function(t){var n=t+"-"+e.name,r=e.type,i=e.triggersBounds;O.push({name:n,type:r,triggersBounds:i})}))}),{});var M=Zu.properties=[].concat(f,x,v,y,m,N,g,p,c,h,d,E,T,_,L,D,C,O,A),P=Zu.propertyGroups={behavior:f,transition:x,visibility:v,overlay:y,underlay:m,ghost:N,commonLabel:g,labelDimensions:p,mainLabel:c,sourceLabel:h,targetLabel:d,nodeBody:E,nodeBorder:T,backgroundImage:_,pie:L,compound:D,edgeLine:C,edgeArrow:O,core:A},R=Zu.propertyGroupNames={};(Zu.propertyGroupKeys=Object.keys(P)).forEach((function(e){R[e]=P[e].map((function(e){return e.name})),P[e].forEach((function(t){return t.groupKey=e}))}));var B=Zu.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];Zu.propertyNames=M.map((function(e){return e.name}));for(var F=0;F<M.length;F++){var z=M[F];M[z.name]=z}for(var G=0;G<B.length;G++){var Y=B[G],X=M[Y.pointsTo],U={name:Y.name,alias:!0,pointsTo:X};M.push(U),M[Y.name]=U}})(),Zu.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},Zu.getDefaultProperties=function(){var e=this._private;if(null!=e.defaultProperties)return e.defaultProperties;for(var t=Q({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce((function(e,t){for(var n=1;n<=Zu.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"}].reduce((function(e,t){return Zu.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),n={},r=0;r<this.properties.length;r++){var i=this.properties[r];if(!i.pointsTo){var a=i.name,o=t[a],s=this.parse(a,o);n[a]=s}}return e.defaultProperties=n,e.defaultProperties},Zu.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};var Qu={parse:function(e,t,n,r){var i=this;if(x(t))return i.parseImplWarn(e,t,n,r);var a,o=ft(e,""+t,n?"t":"f","mapping"===r||!0===r||!1===r||null==r?"dontcare":r),s=i.propCache=i.propCache||[];return(a=s[o])||(a=s[o]=i.parseImplWarn(e,t,n,r)),(n||"mapping"===r)&&(a=Lt(a))&&(a.value=Lt(a.value)),a},parseImplWarn:function(e,t,n,r){var i=this.parseImpl(e,t,n,r);return i||null==t||Nt("The style property `".concat(e,": ").concat(t,"` is invalid")),!i||"width"!==i.name&&"height"!==i.name||"label"!==t||Nt("The style value of `label` is deprecated for `"+i.name+"`"),i},parseImpl:function(e,t,n,r){var i=this;e=z(e);var a=i.properties[e],o=t,s=i.types;if(!a)return null;if(void 0===t)return null;a.alias&&(a=a.pointsTo,e=a.name);var l=b(t);l&&(t=t.trim());var u,c,h=a.type;if(!h)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(x(t))return{name:e,value:t,strValue:"fn",mapped:s.fn,bypass:n};if(!l||r||t.length<7||"a"!==t[1]);else{if(t.length>=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var d=s.data;return{name:e,value:u,strValue:""+t,mapped:d,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(h.multiple)return!1;var p=s.mapData;if(!h.color&&!h.number)return!1;var g=this.parse(e,c[4]);if(!g||g.mapped)return!1;var f=this.parse(e,c[5]);if(!f||f.mapped)return!1;if(g.pfValue===f.pfValue||g.strValue===f.strValue)return Nt("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+g.strValue+"`"),this.parse(e,g.strValue);if(h.color){var v=g.value,y=f.value;if(!(v[0]!==y[0]||v[1]!==y[1]||v[2]!==y[2]||v[3]!==y[3]&&(null!=v[3]&&1!==v[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:p,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:g.value,valueMax:f.value,bypass:n}}}if(h.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):w(t)?t:[t],h.evenMultiple&&m.length%2!=0)return null;for(var E=[],T=[],_=[],C="",N=!1,A=0;A<m.length;A++){var L=i.parse(e,m[A],n,"multiple");N=N||b(L.value),E.push(L.value),_.push(null!=L.pfValue?L.pfValue:L.value),T.push(L.units),C+=(A>0?" ":"")+L.strValue}return h.validate&&!h.validate(E,T)?null:h.singleEnum&&N?1===E.length&&b(E[0])?{name:e,value:E[0],strValue:E[0],bypass:n}:null:{name:e,value:E,pfValue:_,strValue:C,bypass:n,units:T}}var S=function(){for(var r=0;r<h.enums.length;r++)if(h.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n};return null};if(h.number){var O,I="px";if(h.units&&(O=h.units),h.implicitUnits&&(I=h.implicitUnits),!h.unitless)if(l){var k="px|em"+(h.allowPercent?"|\\%":"");O&&(k=O);var M=t.match("^("+V+")("+k+")?$");M&&(t=M[1],O=M[2]||I)}else O&&!h.implicitUnits||(O=I);if(t=parseFloat(t),isNaN(t)&&void 0===h.enums)return null;if(isNaN(t)&&void 0!==h.enums)return t=o,S();if(h.integer&&!D(t))return null;if(void 0!==h.min&&(t<h.min||h.strictMin&&t===h.min)||void 0!==h.max&&(t>h.max||h.strictMax&&t===h.max))return null;var P={name:e,value:t,strValue:""+t+(O||""),units:O,bypass:n};return h.unitless||"px"!==O&&"em"!==O?P.pfValue=t:P.pfValue="px"!==O&&O?this.getEmSizeInPixels()*t:t,"ms"!==O&&"s"!==O||(P.pfValue="ms"===O?t:1e3*t),"deg"!==O&&"rad"!==O||(P.pfValue="rad"===O?t:mn(t)),"%"===O&&(P.pfValue=t/100),P}if(h.propList){var R=[],B=""+t;if("none"===B);else{for(var F=B.split(/\s*,\s*|\s+/),G=0;G<F.length;G++){var Y=F[G].trim();i.properties[Y]?R.push(Y):Nt("`"+Y+"` is not a valid property name")}if(0===R.length)return null}return{name:e,value:R,strValue:0===R.length?"none":R.join(" "),bypass:n}}if(h.color){var X=re(t);return X?{name:e,value:X,pfValue:X,strValue:"rgb("+X[0]+","+X[1]+","+X[2]+")",bypass:n}:null}if(h.regex||h.regexes){if(h.enums){var U=S();if(U)return U}for(var j=h.regexes?h.regexes:[h.regex],H=0;H<j.length;H++){var q=new RegExp(j[H]).exec(t);if(q)return{name:e,value:h.singleRegexMatchValue?q[1]:q,strValue:""+t,bypass:n}}return null}return h.string?{name:e,value:""+t,strValue:""+t,bypass:n}:h.enums?S():null}},Ju=function e(t){if(!(this instanceof e))return new e(t);S(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):Dt("A style must have a core reference")},ec=Ju.prototype;ec.instanceString=function(){return"style"},ec.clear=function(){for(var e=this._private,t=e.cy.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0),t.forEach((function(e){var t=e[0]._private;t.styleDirty=!0,t.appliedInitStyle=!1})),this},ec.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},ec.core=function(e){return this._private.coreStyle[e]||this.getDefaultProperty(e)},ec.selector=function(e){var t="core"===e?null:new Ps(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},ec.css=function(){var e=this,t=arguments;if(1===t.length)for(var n=t[0],r=0;r<e.properties.length;r++){var i=e.properties[r],a=n[i.name];void 0===a&&(a=n[G(i.name)]),void 0!==a&&this.cssRule(i.name,a)}else 2===t.length&&this.cssRule(t[0],t[1]);return this},ec.style=ec.css,ec.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},ec.append=function(e){return O(e)?e.appendToStyle(this):w(e)?this.appendFromJson(e):b(e)&&this.appendFromString(e),this},Ju.fromJson=function(e,t){var n=new Ju(e);return n.fromJson(t),n},Ju.fromString=function(e,t){return new Ju(e).fromString(t)},[Vu,Hu,qu,Wu,$u,Ku,Zu,Qu].forEach((function(e){Q(ec,e)})),Ju.types=ec.types,Ju.properties=ec.properties,Ju.propertyGroups=ec.propertyGroups,Ju.propertyGroupNames=ec.propertyGroupNames,Ju.propertyGroupKeys=ec.propertyGroupKeys;var tc={style:function(e){return e&&this.setStyle(e).update(),this._private.style},setStyle:function(e){var t=this._private;return O(e)?t.style=e.generateStyle(this):w(e)?t.style=Ju.fromJson(this,e):b(e)?t.style=Ju.fromString(this,e):t.style=Ju(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},nc="single",rc={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},selectionType:function(e){var t=this._private;return null==t.selectionType&&(t.selectionType=nc),void 0===e?t.selectionType:("additive"!==e&&"single"!==e||(t.selectionType=e),this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,n,r,i,a=arguments,o=this._private.pan;switch(a.length){case 0:return o;case 1:if(b(a[0]))return o[e=a[0]];if(E(a[0])){if(!this._private.panningEnabled)return this;r=(n=a[0]).x,i=n.y,_(r)&&(o.x=r),_(i)&&(o.y=i),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;e=a[0],t=a[1],"x"!==e&&"y"!==e||!_(t)||(o[e]=t),this.emit("pan viewport")}return this.notify("viewport"),this},panBy:function(e,t){var n,r,i,a,o,s=arguments,l=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:E(e)&&(a=(i=s[0]).x,o=i.y,_(a)&&(l.x+=a),_(o)&&(l.y+=o),this.emit("pan viewport"));break;case 2:r=t,"x"!==(n=e)&&"y"!==n||!_(r)||(l[n]+=r),this.emit("pan viewport")}return this.notify("viewport"),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(e,t){if(_(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n;if(b(e)){var r=e;e=this.$(r)}else if(P(e)){var i=e;(n={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else N(e)||(e=this.mutableElements());if(!N(e)||!e.empty()){n=n||e.boundingBox();var a,o=this.width(),s=this.height();if(t=_(t)?t:0,!isNaN(o)&&!isNaN(s)&&o>0&&s>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:a=(a=(a=Math.min((o-2*t)/n.w,(s-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:a)<this._private.minZoom?this._private.minZoom:a,pan:{x:(o-a*(n.x1+n.x2))/2,y:(s-a*(n.y1+n.y2))/2}}}}},zoomRange:function(e,t){var n=this._private;if(null==t){var r=e;e=r.min,t=r.max}return _(e)&&_(t)&&e<=t?(n.minZoom=e,n.maxZoom=t):_(e)&&void 0===t&&e<=n.maxZoom?n.minZoom=e:_(t)&&void 0===e&&t>=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),_(e)?n=e:E(e)&&(n=e.level,null!=e.position?t=hn(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)<r.minZoom?r.minZoom:n,o||!_(n)||n===a||null!=t&&(!_(t.x)||!_(t.y)))return null;if(null!=t){var s=i,l=a,u=n;return{zoomed:!0,panned:!0,zoom:u,pan:{x:-u/l*(t.x-s.x)+t.x,y:-u/l*(t.y-s.y)+t.y}}}return{zoomed:!0,panned:!1,zoom:n,pan:i}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify("viewport"),this):this},viewport:function(e){var t=this._private,n=!0,r=!0,i=[],a=!1,o=!1;if(!e)return this;if(_(e.zoom)||(n=!1),E(e.pan)||(r=!1),!n&&!r)return this;if(n){var s=e.zoom;s<t.minZoom||s>t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;_(l.x)&&(t.pan.x=l.x,o=!1),_(l.y)&&(t.pan.y=l.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(b(e)){var n=e;e=this.mutableElements().filter(n)}else N(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container;return n.sizeCache=n.sizeCache||(r?(e=d.getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};rc.centre=rc.center,rc.autolockNodes=rc.autolock,rc.autoungrabifyNodes=rc.autoungrabify;var ic={data:hs.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:hs.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:hs.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hs.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};ic.attr=ic.data,ic.removeAttr=ic.removeData;var ac=function(e){var t=this,n=(e=Q({},e)).container;n&&!C(n)&&C(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==d&&void 0!==n&&!e.headless,o=e;o.layout=Q({name:a?"grid":"null"},o.layout),o.renderer=Q({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new bu(this),listeners:[],aniEles:new bu(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:_(o.zoom)?o.zoom:1,pan:{x:E(o.pan)&&_(o.pan.x)?o.pan.x:0,y:E(o.pan)&&_(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});var u=function(e,t){if(e.some(R))return Gi.all(e).then(t);t(e)};l.styleEnabled&&t.setStyle([]);var c=Q({},o,o.renderer);t.initRenderer(c);var h=function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(E(e)||w(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=Q({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()};u([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),h(a,(function(){t.startAnimationLoop(),l.ready=!0,x(o.ready)&&t.on("ready",o.ready);for(var e=0;e<i.length;e++){var n=i[e];t.on("ready",n)}r&&(r.readies=[]),t.emit("ready")}),o.done)}))},oc=ac.prototype;Q(oc,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},mount:function(e){if(null!=e){var t=this,n=t._private,r=n.options;return!C(e)&&C(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),n.container=e,n.styleEnabled=!0,t.invalidateSize(),t.initRenderer(Q({},r,r.renderer,{name:"null"===r.renderer.name?"canvas":r.renderer.name})),t.startAnimationLoop(),t.style(r.style),t.emit("mount"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},options:function(){return Lt(this._private.options)},json:function(e){var t=this,n=t._private,r=t.mutableElements(),i=function(e){return t.getElementById(e.id())};if(E(e)){if(t.startBatch(),e.elements){var a={},o=function(e,n){for(var r=[],i=[],o=0;o<e.length;o++){var s=e[o];if(s.data.id){var l=""+s.data.id,u=t.getElementById(l);a[l]=!0,0!==u.length?i.push({ele:u,json:s}):n?(s.group=n,r.push(s)):r.push(s)}else Nt("cy.json() cannot handle elements without an ID attribute")}t.add(r);for(var c=0;c<i.length;c++){var h=i[c],d=h.ele,p=h.json;d.json(p)}};if(w(e.elements))o(e.elements);else for(var s=["nodes","edges"],l=0;l<s.length;l++){var u=s[l],c=e.elements[u];w(c)&&o(c,u)}var h=t.collection();r.filter((function(e){return!a[e.id()]})).forEach((function(e){e.isParent()?h.merge(e):e.remove()})),h.forEach((function(e){return e.children().move({parent:null})})),h.forEach((function(e){return i(e).remove()}))}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==n.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===n.pan.x&&e.pan.y===n.pan.y||t.pan(e.pan)),e.data&&t.data(e.data);for(var d=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],p=0;p<d.length;p++){var g=d[p];null!=e[g]&&t[g](e[g])}return t.endBatch(),this}var f={};e?f.elements=this.elements().map((function(e){return e.json()})):(f.elements={},r.forEach((function(e){var t=e.group();f.elements[t]||(f.elements[t]=[]),f.elements[t].push(e.json())}))),this._private.styleEnabled&&(f.style=t.style().json()),f.data=Lt(t.data());var v=n.options;return f.zoomingEnabled=n.zoomingEnabled,f.userZoomingEnabled=n.userZoomingEnabled,f.zoom=n.zoom,f.minZoom=n.minZoom,f.maxZoom=n.maxZoom,f.panningEnabled=n.panningEnabled,f.userPanningEnabled=n.userPanningEnabled,f.pan=Lt(n.pan),f.boxSelectionEnabled=n.boxSelectionEnabled,f.renderer=Lt(v.renderer),f.hideEdgesOnViewport=v.hideEdgesOnViewport,f.textureOnViewport=v.textureOnViewport,f.wheelSensitivity=v.wheelSensitivity,f.motionBlur=v.motionBlur,f.multiClickDebounceTime=v.multiClickDebounceTime,f}}),oc.$id=oc.getElementById,[wu,ku,Ru,Bu,Fu,zu,Yu,Xu,tc,rc,ic].forEach((function(e){Q(oc,e)}));var sc={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}},lc={maximal:!1,acyclic:!1},uc=function(e){return e.scratch("breadthfirst")},cc=function(e,t){return e.scratch("breadthfirst",t)};function hc(e){this.options=Q({},sc,lc,e)}hc.prototype.run=function(){var e,t=this.options,n=t,r=t.cy,i=n.eles,a=i.nodes().filter((function(e){return!e.isParent()})),o=i,s=n.directed,l=n.acyclic||n.maximal||n.maximalAdjustments>0,u=Ln(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(N(n.roots))e=n.roots;else if(w(n.roots)){for(var c=[],h=0;h<n.roots.length;h++){var d=n.roots[h],p=r.getElementById(d);c.push(p)}e=r.collection(c)}else if(b(n.roots))e=r.$(n.roots);else if(s)e=a.roots();else{var g=i.components();e=r.collection();for(var f=function(t){var n=g[t],r=n.maxDegree(!1),i=n.filter((function(e){return e.degree(!1)===r}));e=e.add(i)},v=0;v<g.length;v++)f(v)}var y=[],m={},x=function(e,t){null==y[t]&&(y[t]=[]);var n=y[t].length;y[t].push(e),cc(e,{index:n,depth:t})},E=function(e,t){var n=uc(e),r=n.depth,i=n.index;y[r][i]=null,x(e,t)};o.bfs({roots:e,directed:n.directed,visit:function(e,t,n,r,i){var a=e[0],o=a.id();x(a,i),m[o]=!0}});for(var T=[],_=0;_<a.length;_++){var D=a[_];m[D.id()]||T.push(D)}var C=function(e){for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?cc(r,{depth:e,index:n}):(t.splice(n,1),n--)}},A=function(){for(var e=0;e<y.length;e++)C(e)},L=function(e,t){for(var r=uc(e),a=e.incomers().filter((function(e){return e.isNode()&&i.has(e)})),o=-1,s=e.id(),l=0;l<a.length;l++){var u=a[l],c=uc(u);o=Math.max(o,c.depth)}if(r.depth<=o){if(!n.acyclic&&t[s])return null;var h=o+1;return E(e,h),t[s]=h,!0}return!1};if(s&&l){var S=[],O={},I=function(e){return S.push(e)},k=function(){return S.shift()};for(a.forEach((function(e){return S.push(e)}));S.length>0;){var M=k(),P=L(M,O);if(P)M.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(I);else if(null===P){Nt("Detected double maximal shift for node `"+M.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}A();var R=0;if(n.avoidOverlap)for(var B=0;B<a.length;B++){var F=a[B].layoutDimensions(n),z=F.w,G=F.h;R=Math.max(R,z,G)}var Y={},X=function(e){if(Y[e.id()])return Y[e.id()];for(var t=uc(e).depth,n=e.neighborhood(),r=0,i=0,o=0;o<n.length;o++){var s=n[o];if(!s.isEdge()&&!s.isParent()&&a.has(s)){var l=uc(s);if(null!=l){var u=l.index,c=l.depth;if(null!=u&&null!=c){var h=y[c].length;c<t&&(r+=u/h,i++)}}}}return r/=i=Math.max(1,i),0===i&&(r=0),Y[e.id()]=r,r},V=function(e,t){var n=X(e)-X(t);return 0===n?K(e.id(),t.id()):n};void 0!==n.depthSort&&(V=n.depthSort);for(var U=0;U<y.length;U++)y[U].sort(V),C(U);for(var j=[],H=0;H<T.length;H++)j.push(T[H]);y.unshift(j),A();for(var q=0,W=0;W<y.length;W++)q=Math.max(y[W].length,q);var $={x:u.x1+u.w/2,y:u.x1+u.h/2},Z=y.reduce((function(e,t){return Math.max(e,t.length)}),0),Q=function(e){var t=uc(e),r=t.depth,i=t.index,a=y[r].length,o=Math.max(u.w/((n.grid?Z:a)+1),R),s=Math.max(u.h/(y.length+1),R),l=Math.min(u.w/2/y.length,u.h/2/y.length);if(l=Math.max(l,R),n.circle){var c=l*r+l-(y.length>0&&y[0].length<=3?l/2:0),h=2*Math.PI/y[r].length*i;return 0===r&&1===y[0].length&&(c=1),{x:$.x+c*Math.cos(h),y:$.y+c*Math.sin(h)}}return{x:$.x+(i+1-(a+1)/2)*o,y:(r+1)*s}};return i.nodes().layoutPositions(this,n,Q),this};var dc={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function pc(e){this.options=Q({},dc,e)}pc.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),c=0,h=0;h<a.length;h++){var d=a[h].layoutDimensions(t),p=d.w,g=d.h;c=Math.max(c,p,g)}if(o=_(t.radius)?t.radius:a.length<=1?0:Math.min(s.h,s.w)/2-c,a.length>1&&t.avoidOverlap){c*=1.75;var f=Math.cos(u)-Math.cos(0),v=Math.sin(u)-Math.sin(0),y=Math.sqrt(c*c/(f*f+v*v));o=Math.max(y,o)}var m=function(e,n){var r=t.startAngle+n*u*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l.x+a,y:l.y+s}};return r.nodes().layoutPositions(this,t,m),this};var gc,fc={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function vc(e){this.options=Q({},fc,e)}vc.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s={x:o.x1+o.w/2,y:o.y1+o.h/2},l=[],u=0,c=0;c<a.length;c++){var h=a[c],d=void 0;d=t.concentric(h),l.push({value:d,node:h}),h._private.scratch.concentric=d}a.updateStyle();for(var p=0;p<a.length;p++){var g=a[p].layoutDimensions(t);u=Math.max(u,g.w,g.h)}l.sort((function(e,t){return t.value-e.value}));for(var f=t.levelWidth(a),v=[[]],y=v[0],m=0;m<l.length;m++){var b=l[m];y.length>0&&Math.abs(y[0].value-b.value)>=f&&(y=[],v.push(y)),y.push(b)}var x=u+t.minNodeSpacing;if(!t.avoidOverlap){var w=v.length>0&&v[0].length>1,E=(Math.min(o.w,o.h)/2-x)/(v.length+w?1:0);x=Math.min(x,E)}for(var T=0,_=0;_<v.length;_++){var D=v[_],C=void 0===t.sweep?2*Math.PI-2*Math.PI/D.length:t.sweep,N=D.dTheta=C/Math.max(1,D.length-1);if(D.length>1&&t.avoidOverlap){var A=Math.cos(N)-Math.cos(0),L=Math.sin(N)-Math.sin(0),S=Math.sqrt(x*x/(A*A+L*L));T=Math.max(S,T)}D.r=T,T+=x}if(t.equidistant){for(var O=0,I=0,k=0;k<v.length;k++){var M=v[k].r-I;O=Math.max(O,M)}I=0;for(var P=0;P<v.length;P++){var R=v[P];0===P&&(I=R.r),R.r=I,I+=O}}for(var B={},F=0;F<v.length;F++)for(var z=v[F],G=z.dTheta,Y=z.r,X=0;X<z.length;X++){var V=z[X],U=t.startAngle+(n?1:-1)*G*X,j={x:s.x+Y*Math.cos(U),y:s.y+Y*Math.sin(U)};B[V.node.id()]=j}return i.nodes().layoutPositions(this,t,(function(e){var t=e.id();return B[t]})),this};var yc={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function mc(e){this.options=Q({},yc,e),this.options.layout=this}mc.prototype.run=function(){var e=this.options,t=e.cy,n=this;n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),gc=!0===e.debug;var r=xc(t,n,e);gc&&bc(r),e.randomize&&Tc(r);var i=rt(),a=function(){Dc(r,t,e),!0===e.fit&&t.fit(e.padding)},o=function(t){return!(n.stopped||t>=e.numIter||(Cc(r,e),r.temperature=r.temperature*e.coolingFactor,r.temperature<e.minTemp))},s=function(){if(!0===e.animate||!1===e.animate)a(),n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n});else{var t=e.eles.nodes(),i=_c(r,e,t);t.layoutPositions(n,e,i)}},l=0,u=!0;if(!0===e.animate)!function t(){for(var n=0;u&&n<e.refresh;)u=o(l),l++,n++;u?(rt()-i>=e.animationThreshold&&a(),nt(t)):(Fc(r,e),s())}();else{for(;u;)u=o(l),l++;Fc(r,e),s()}return this},mc.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},mc.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var bc,xc=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:e.width(),clientHeight:e.width(),boundingBox:Ln(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()})},o=n.eles.components(),s={},l=0;l<o.length;l++)for(var u=o[l],c=0;c<u.length;c++)s[u[c].id()]=l;for(l=0;l<a.nodeSize;l++){var h=(v=i[l]).layoutDimensions(n);(k={}).isLocked=v.locked(),k.id=v.data("id"),k.parentId=v.data("parent"),k.cmptId=s[v.id()],k.children=[],k.positionX=v.position("x"),k.positionY=v.position("y"),k.offsetX=0,k.offsetY=0,k.height=h.w,k.width=h.h,k.maxX=k.positionX+k.width/2,k.minX=k.positionX-k.width/2,k.maxY=k.positionY+k.height/2,k.minY=k.positionY-k.height/2,k.padLeft=parseFloat(v.style("padding")),k.padRight=parseFloat(v.style("padding")),k.padTop=parseFloat(v.style("padding")),k.padBottom=parseFloat(v.style("padding")),k.nodeRepulsion=x(n.nodeRepulsion)?n.nodeRepulsion(v):n.nodeRepulsion,a.layoutNodes.push(k),a.idToIndex[k.id]=l}var d=[],p=0,g=-1,f=[];for(l=0;l<a.nodeSize;l++){var v,y=(v=a.layoutNodes[l]).parentId;null!=y?a.layoutNodes[a.idToIndex[y]].children.push(v.id):(d[++g]=v.id,f.push(v.id))}for(a.graphSet.push(f);p<=g;){var m=d[p++],b=a.idToIndex[m],w=a.layoutNodes[b].children;if(w.length>0)for(a.graphSet.push(w),l=0;l<w.length;l++)d[++g]=w[l]}for(l=0;l<a.graphSet.length;l++){var E=a.graphSet[l];for(c=0;c<E.length;c++){var T=a.idToIndex[E[c]];a.indexToGraph[T]=l}}for(l=0;l<a.edgeSize;l++){var _=r[l],D={};D.id=_.data("id"),D.sourceId=_.data("source"),D.targetId=_.data("target");var C=x(n.idealEdgeLength)?n.idealEdgeLength(_):n.idealEdgeLength,N=x(n.edgeElasticity)?n.edgeElasticity(_):n.edgeElasticity,A=a.idToIndex[D.sourceId],L=a.idToIndex[D.targetId];if(a.indexToGraph[A]!=a.indexToGraph[L]){for(var S=wc(D.sourceId,D.targetId,a),O=a.graphSet[S],I=0,k=a.layoutNodes[A];-1===O.indexOf(k.id);)k=a.layoutNodes[a.idToIndex[k.parentId]],I++;for(k=a.layoutNodes[L];-1===O.indexOf(k.id);)k=a.layoutNodes[a.idToIndex[k.parentId]],I++;C*=I*n.nestingFactor}D.idealLength=C,D.elasticity=N,a.layoutEdges.push(D)}return a},wc=function(e,t,n){var r=Ec(e,t,0,n);return 2>r.count?0:r.graph},Ec=function e(t,n,r,i){var a=i.graphSet[r];if(-1<a.indexOf(t)&&-1<a.indexOf(n))return{count:2,graph:r};for(var o=0,s=0;s<a.length;s++){var l=a[s],u=i.idToIndex[l],c=i.layoutNodes[u].children;if(0!==c.length){var h=e(t,n,i.indexToGraph[i.idToIndex[c[0]]],i);if(0!==h.count){if(1!==h.count)return h;if(2==++o)break}}}return{count:o,graph:r}},Tc=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*n,a.positionY=Math.random()*r)}},_c=function(e,t,n){var r=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(n.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];i.x1=Math.min(i.x1,n.positionX),i.x2=Math.max(i.x2,n.positionX),i.y1=Math.min(i.y1,n.positionY),i.y2=Math.max(i.y2,n.positionY)})),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(n,a){var o=e.layoutNodes[e.idToIndex[n.data("id")]];if(t.boundingBox){var s=(o.positionX-i.x1)/i.w,l=(o.positionY-i.y1)/i.h;return{x:r.x1+s*r.w,y:r.y1+l*r.h}}return{x:o.positionX,y:o.positionY}}},Dc=function(e,t,n){var r=n.layout,i=n.eles.nodes(),a=_c(e,n,i);i.positions(a),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))},Cc=function(e,t,n){Nc(e,t),Ic(e),kc(e,t),Mc(e),Pc(e)},Nc=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,a=0;a<i;a++)for(var o=e.layoutNodes[e.idToIndex[r[a]]],s=a+1;s<i;s++){var l=e.layoutNodes[e.idToIndex[r[s]]];Lc(o,l,e,t)}},Ac=function(e){return-e+2*e*Math.random()},Lc=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,a=t.positionY-e.positionY,o=1;0===i&&0===a&&(i=Ac(o),a=Ac(o));var s=Sc(e,t,i,a);if(s>0)var l=(c=r.nodeOverlap*s)*i/(v=Math.sqrt(i*i+a*a)),u=c*a/v;else{var c,h=Oc(e,i,a),d=Oc(t,-1*i,-1*a),p=d.x-h.x,g=d.y-h.y,f=p*p+g*g,v=Math.sqrt(f);l=(c=(e.nodeRepulsion+t.nodeRepulsion)/f)*p/v,u=c*g/v}e.isLocked||(e.offsetX-=l,e.offsetY-=u),t.isLocked||(t.offsetX+=l,t.offsetY+=u)}},Sc=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},Oc=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,l=a/o,u={};return 0===t&&0<n||0===t&&0>n?(u.x=r,u.y=i+a/2,u):0<t&&-1*l<=s&&s<=l?(u.x=r+o/2,u.y=i+o*n/2/t,u):0>t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0<n&&(s<=-1*l||s>=l)?(u.x=r+a*t/2/n,u.y=i+a/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-a*t/2/n,u.y=i-a/2,u):u},Ic=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],a=e.layoutNodes[i],o=e.idToIndex[r.targetId],s=e.layoutNodes[o],l=s.positionX-a.positionX,u=s.positionY-a.positionY;if(0!==l||0!==u){var c=Oc(a,l,u),h=Oc(s,-1*l,-1*u),d=h.x-c.x,p=h.y-c.y,g=Math.sqrt(d*d+p*p),f=Math.pow(r.idealLength-g,2)/r.elasticity;if(0!==g)var v=f*d/g,y=f*p/g;else v=0,y=0;a.isLocked||(a.offsetX+=v,a.offsetY+=y),s.isLocked||(s.offsetX-=v,s.offsetY-=y)}}},kc=function(e,t){if(0!==t.gravity)for(var n=1,r=0;r<e.graphSet.length;r++){var i=e.graphSet[r],a=i.length;if(0===r)var o=e.clientHeight/2,s=e.clientWidth/2;else{var l=e.layoutNodes[e.idToIndex[i[0]]],u=e.layoutNodes[e.idToIndex[l.parentId]];o=u.positionX,s=u.positionY}for(var c=0;c<a;c++){var h=e.layoutNodes[e.idToIndex[i[c]]];if(!h.isLocked){var d=o-h.positionX,p=s-h.positionY,g=Math.sqrt(d*d+p*p);if(g>n){var f=t.gravity*d/g,v=t.gravity*p/g;h.offsetX+=f,h.offsetY+=v}}}}},Mc=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],l=s.children;if(0<l.length&&!s.isLocked){for(var u=s.offsetX,c=s.offsetY,h=0;h<l.length;h++){var d=e.layoutNodes[e.idToIndex[l[h]]];d.offsetX+=u,d.offsetY+=c,n[++i]=l[h]}s.offsetX=0,s.offsetY=0}}},Pc=function(e,t){for(var n=0;n<e.nodeSize;n++)0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0);for(n=0;n<e.nodeSize;n++)if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=Rc(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,Bc(i,e)}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},Rc=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Bc=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,a=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,a=!0),a?e(i,n):void 0}},Fc=function(e,t){for(var n=e.layoutNodes,r=[],i=0;i<n.length;i++){var a=n[i],o=a.cmptId;(r[o]=r[o]||[]).push(a)}var s=0;for(i=0;i<r.length;i++)if(f=r[i]){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var l=0;l<f.length;l++){var u=f[l];f.x1=Math.min(f.x1,u.positionX-u.width/2),f.x2=Math.max(f.x2,u.positionX+u.width/2),f.y1=Math.min(f.y1,u.positionY-u.height/2),f.y2=Math.max(f.y2,u.positionY+u.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,s+=f.w*f.h}r.sort((function(e,t){return t.w*t.h-e.w*e.h}));var c=0,h=0,d=0,p=0,g=Math.sqrt(s)*e.clientWidth/e.clientHeight;for(i=0;i<r.length;i++){var f;if(f=r[i]){for(l=0;l<f.length;l++)(u=f[l]).isLocked||(u.positionX+=c-f.x1,u.positionY+=h-f.y1);c+=f.w+t.componentSpacing,d+=f.w+t.componentSpacing,p=Math.max(p,f.h),d>g&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},zc={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Gc(e){this.options=Q({},zc,e)}Gc.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),l=Math.round(s),u=Math.round(a.w/a.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},h=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},d=t.rows,p=null!=t.cols?t.cols:t.columns;if(null!=d&&null!=p)l=d,u=p;else if(null!=d&&null==p)l=d,u=Math.ceil(o/l);else if(null==d&&null!=p)u=p,l=Math.ceil(o/u);else if(u*l>o){var g=c(),f=h();(g-1)*f>=o?c(g-1):(f-1)*g>=o&&h(f-1)}else for(;u*l<o;){var v=c(),y=h();(y+1)*v>=o?h(y+1):c(v+1)}var m=a.w/u,b=a.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x<i.length;x++){var w=i[x],E=w._private.position;null!=E.x&&null!=E.y||(E.x=0,E.y=0);var T=w.layoutDimensions(t),_=t.avoidOverlapPadding,D=T.w+_,C=T.h+_;m=Math.max(m,D),b=Math.max(b,C)}for(var N={},A=function(e,t){return!!N["c-"+e+"-"+t]},L=function(e,t){N["c-"+e+"-"+t]=!0},S=0,O=0,I=function(){++O>=u&&(O=0,S++)},k={},M=0;M<i.length;M++){var P=i[M],R=t.position(P);if(R&&(void 0!==R.row||void 0!==R.col)){var B={row:R.row,col:R.col};if(void 0===B.col)for(B.col=0;A(B.row,B.col);)B.col++;else if(void 0===B.row)for(B.row=0;A(B.row,B.col);)B.row++;k[P.id()]=B,L(B.row,B.col)}}var F=function(e,t){var n,r;if(e.locked()||e.isParent())return!1;var i=k[e.id()];if(i)n=i.col*m+m/2+a.x1,r=i.row*b+b/2+a.y1;else{for(;A(S,O);)I();n=O*m+m/2+a.x1,r=S*b+b/2+a.y1,L(S,O),I()}return{x:n,y:r}};i.layoutPositions(this,t,F)}return this};var Yc={ready:function(){},stop:function(){}};function Xc(e){this.options=Q({},Yc,e)}Xc.prototype.run=function(){var e=this.options,t=e.eles,n=this;return e.cy,n.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),n.one("layoutready",e.ready),n.emit("layoutready"),n.one("layoutstop",e.stop),n.emit("layoutstop"),this},Xc.prototype.stop=function(){return this};var Vc={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Uc(e){this.options=Q({},Vc,e)}Uc.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=x(e.positions);function r(t){if(null==e.positions)return cn(t.position());if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}return t.layoutPositions(this,e,(function(e,t){var n=r(e);return!e.locked()&&null!=n&&n})),this};var jc={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Hc(e){this.options=Q({},jc,e)}Hc.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,r=Ln(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),i=function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}};return n.nodes().layoutPositions(this,e,i),this};var qc=[{name:"breadthfirst",impl:hc},{name:"circle",impl:pc},{name:"concentric",impl:vc},{name:"cose",impl:mc},{name:"grid",impl:Gc},{name:"null",impl:Xc},{name:"preset",impl:Uc},{name:"random",impl:Hc}];function Wc(e){this.options=e,this.notifications=0}var $c=function(){},Kc=function(){throw new Error("A headless instance can not render images")};Wc.prototype={recalculateRenderedStyle:$c,notify:function(){this.notifications++},init:$c,isHeadless:function(){return!0},png:Kc,jpg:Kc};var Zc={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,a,o){var s=i.x-n/2-o,l=i.x+n/2+o,u=i.y-n/2-o,c=i.y+n/2+o;return s<=e&&e<=l&&u<=t&&t<=c},r=function(e,t,n,r,i){var a=e*Math.cos(r)-t*Math.sin(r),o=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:a*n+i.x,y:o+i.y}},i=function(e,t,n,i){for(var a=[],o=0;o<e.length;o+=2){var s=e[o],l=e[o+1];a.push(r(s,l,t,n,i))}return a},a=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},o=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},s=function(r,s){b(s)&&(s=e[s]),e[r]=Q({name:r,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,r,o,s){var l=a(i(this.points,n+2*s,r,o));return Wn(e,t,l)},roughCollide:n,draw:function(e,n,r,a){var o=i(this.points,n,r,a);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:o},s)};s("none",{collide:Et,roughCollide:Et,draw:_t,spacing:Tt,gap:Tt}),s("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),s("arrow","triangle"),s("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,a,o,s){var l=i(this.points,n,a,o),u=this.controlPoint,c=r(u[0],u[1],n,a,o);t.arrowShapeImpl(this.name)(e,l,c)},gap:function(e){return.8*o(e)}}),s("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.pointsTee,n+2*l,r,o));return Wn(e,t,u)||Wn(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.pointsTee,n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(e,t,n,r,o,s,l){var u=o,c=Math.pow(u.x-e,2)+Math.pow(u.y-t,2)<=Math.pow((n+2*l)*this.radius,2),h=a(i(this.points,n+2*l,r,o));return Wn(e,t,h)||c},draw:function(e,n,r,a,o){var s=i(this.pointsTr,n,r,a);t.arrowShapeImpl(this.name)(e,s,a.x,a.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e,i=3,a=5;return n[i]=n[i]-r,n[a]=n[a]-r,n},collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.crossLinePts(n,s),n+2*l,r,o));return Wn(e,t,u)||Wn(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.crossLinePts(n,o),n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*o(e)}}),s("circle",{radius:.15,collide:function(e,t,n,r,i,a,o){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*o)*this.radius,2)},draw:function(e,n,r,i,a){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),s("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),s("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}}),s("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(e){return.95*e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}},Qc={projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],a=r[1],o=r[4],s=n.pan(),l=n.zoom();return[((e-i)/o-s.x)/l,((t-a)/o-s.y)/l]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=d.getComputedStyle(e),r=function(e){return parseFloat(n.getPropertyValue(e))},i={left:r("padding-left"),right:r("padding-right"),top:r("padding-top"),bottom:r("padding-bottom")},a={left:r("border-left-width"),right:r("border-right-width"),top:r("border-top-width"),bottom:r("border-bottom-width")},o=e.clientWidth,s=e.clientHeight,l=i.left+i.right,u=i.top+i.bottom,c=a.left+a.right,h=t.width/(o+c),p=o-l,g=s-u,f=t.left+i.left+a.left,v=t.top+i.top+a.top;return this.containerBB=[f,v,p,g,h]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var i,a,o=this,s=this,l=s.getCachedZSortedEles(),u=[],c=s.cy.zoom(),h=s.cy.hasCompoundNodes(),d=(r?24:8)/c,p=(r?8:2)/c,g=(r?8:2)/c,f=1/0;function v(e,t){if(e.isNode()){if(a)return;a=e,u.push(e)}if(e.isEdge()&&(null==t||t<f))if(i){if(i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value&&i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value)for(var n=0;n<u.length;n++)if(u[n].isEdge()){u[n]=e,i=e,f=null!=t?t:f;break}}else u.push(e),i=e,f=null!=t?t:f}function y(n){var r=n.outerWidth()+2*p,i=n.outerHeight()+2*p,a=r/2,l=i/2,u=n.position();if(u.x-a<=e&&e<=u.x+a&&u.y-l<=t&&t<=u.y+l&&s.nodeShapes[o.getNodeShape(n)].checkPoint(e,t,0,r,i,u.x,u.y))return v(n,0),!0}function m(n){var r,i=n._private,a=i.rscratch,l=n.pstyle("width").pfValue,c=n.pstyle("arrow-scale").value,p=l/2+d,g=p*p,f=2*p,m=i.source,b=i.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var x=a.allpts,w=0;w+3<x.length;w+=2)if(Xn(e,t,x[w],x[w+1],x[w+2],x[w+3],f)&&g>(r=qn(e,t,x[w],x[w+1],x[w+2],x[w+3])))return v(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(x=a.allpts,w=0;w+5<a.allpts.length;w+=4)if(Vn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5],f)&&g>(r=Hn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return v(n,r),!0;m=m||i.source,b=b||i.target;var E=o.getArrowWidth(l,c),T=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(w=0;w<T.length;w++){var _=T[w],D=s.arrowShapes[n.pstyle(_.name+"-arrow-shape").value],C=n.pstyle("width").pfValue;if(D.roughCollide(e,t,E,_.angle,{x:_.x,y:_.y},C,d)&&D.collide(e,t,E,_.angle,{x:_.x,y:_.y},C,d))return v(n),!0}h&&u.length>0&&(y(m),y(b))}function b(e,t,n){return Ft(e,t,n)}function x(n,r){var i,a=n._private,o=g;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],l=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(a.rscratch,"labelX",r),c=b(a.rscratch,"labelY",r),h=b(a.rscratch,"labelAngle",r),d=n.pstyle(i+"text-margin-x").pfValue,p=n.pstyle(i+"text-margin-y").pfValue,f=s.x1-o-d,y=s.x2+o-d,m=s.y1-o-p,x=s.y2+o-p;if(h){var w=Math.cos(h),E=Math.sin(h),T=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},_=T(f,m),D=T(f,x),C=T(y,m),N=T(y,x),A=[_.x+d,_.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if(Wn(e,t,A))return v(n),!0}else if(Fn(s,e,t))return v(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){for(var i=this.getCachedZSortedEles().interactive,a=[],o=Math.min(e,n),s=Math.max(e,n),l=Math.min(t,r),u=Math.max(t,r),c=Ln({x1:e=o,y1:t=l,x2:n=s,y2:r=u}),h=0;h<i.length;h++){var d=i[h];if(d.isNode()){var p=d,g=p.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});Bn(c,g)&&!Gn(g,c)&&a.push(p)}else{var f=d,v=f._private,y=v.rscratch;if(null!=y.startX&&null!=y.startY&&!Fn(c,y.startX,y.startY))continue;if(null!=y.endX&&null!=y.endY&&!Fn(c,y.endX,y.endY))continue;if("bezier"===y.edgeType||"multibezier"===y.edgeType||"self"===y.edgeType||"compound"===y.edgeType||"segments"===y.edgeType||"haystack"===y.edgeType){for(var m=v.rstyle.bezierPts||v.rstyle.linePts||v.rstyle.haystackPts,b=!0,x=0;x<m.length;x++)if(!zn(c,m[x])){b=!1;break}b&&a.push(f)}else"haystack"!==y.edgeType&&"straight"!==y.edgeType||a.push(f)}}return a}},Jc={calculateArrowAngles:function(e){var t,n,r,i,a,o,s=e._private.rscratch,l="haystack"===s.edgeType,u="bezier"===s.edgeType,c="multibezier"===s.edgeType,h="segments"===s.edgeType,d="compound"===s.edgeType,p="self"===s.edgeType;if(l?(r=s.haystackPts[0],i=s.haystackPts[1],a=s.haystackPts[2],o=s.haystackPts[3]):(r=s.arrowStartX,i=s.arrowStartY,a=s.arrowEndX,o=s.arrowEndY),f=s.midX,v=s.midY,h)t=r-s.segpts[0],n=i-s.segpts[1];else if(c||d||p||u){var g=s.allpts;t=r-Dn(g[0],g[2],g[4],.1),n=i-Dn(g[1],g[3],g[5],.1)}else t=r-f,n=i-v;s.srcArrowAngle=bn(t,n);var f=s.midX,v=s.midY;if(l&&(f=(r+a)/2,v=(i+o)/2),t=a-r,n=o-i,h)if((g=s.allpts).length/2%2==0){var y=(m=g.length/2)-2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else{y=(m=g.length/2-1)-2;var m,b=m+2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else if(c||d||p){var x,w,E,T,g=s.allpts;if(s.ctrlpts.length/2%2==0){var _=2+(D=2+(C=g.length/2-1));x=Dn(g[C],g[D],g[_],0),w=Dn(g[C+1],g[D+1],g[_+1],0),E=Dn(g[C],g[D],g[_],1e-4),T=Dn(g[C+1],g[D+1],g[_+1],1e-4)}else{var D,C;_=2+(D=g.length/2-1),x=Dn(g[C=D-2],g[D],g[_],.4999),w=Dn(g[C+1],g[D+1],g[_+1],.4999),E=Dn(g[C],g[D],g[_],.5),T=Dn(g[C+1],g[D+1],g[_+1],.5)}t=E-x,n=T-w}if(s.midtgtArrowAngle=bn(t,n),s.midDispX=t,s.midDispY=n,t*=-1,n*=-1,h&&((g=s.allpts).length/2%2==0||(t=-(g[b=2+(m=g.length/2-1)]-g[m]),n=-(g[b+1]-g[m+1]))),s.midsrcArrowAngle=bn(t,n),h)t=a-s.segpts[s.segpts.length-2],n=o-s.segpts[s.segpts.length-1];else if(c||d||p||u){var N=(g=s.allpts).length;t=a-Dn(g[N-6],g[N-4],g[N-2],.9),n=o-Dn(g[N-5],g[N-3],g[N-1],.9)}else t=a-f,n=o-v;s.tgtArrowAngle=bn(t,n)}};Jc.getArrowWidth=Jc.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)};var eh={};function th(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}eh.findHaystackPoints=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n._private,i=r.rscratch;if(!i.haystack){var a=2*Math.random()*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=2*Math.random()*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var o=r.source,s=r.target,l=o.position(),u=s.position(),c=o.width(),h=s.width(),d=o.height(),p=s.height(),g=n.pstyle("haystack-radius").value/2;i.haystackPts=i.allpts=[i.source.x*c*g+l.x,i.source.y*d*g+l.y,i.target.x*h*g+u.x,i.target.y*p*g+u.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(n),this.calculateArrowAngles(n),this.recalculateEdgeLabelProjections(n),this.calculateLabelAngles(n)}},eh.findSegmentsPoints=function(e,t){var n=e._private.rscratch,r=t.posPts,i=t.intersectionPts,a=t.vectorNormInverse,o=e.pstyle("edge-distances").value,s=e.pstyle("segment-weights"),l=e.pstyle("segment-distances"),u=Math.min(s.pfValue.length,l.pfValue.length);n.edgeType="segments",n.segpts=[];for(var c=0;c<u;c++){var h=s.pfValue[c],d=l.pfValue[c],p=1-h,g=h,f="node-position"===o?r:i,v={x:f.x1*p+f.x2*g,y:f.y1*p+f.y2*g};n.segpts.push(v.x+a.x*d,v.y+a.y*d)}},eh.findLoopPoints=function(e,t,n,r){var i=e._private.rscratch,a=t.dirCounts,o=t.srcPos,s=e.pstyle("control-point-distances"),l=s?s.pfValue[0]:void 0,u=e.pstyle("loop-direction").pfValue,c=e.pstyle("loop-sweep").pfValue,h=e.pstyle("control-point-step-size").pfValue;i.edgeType="self";var d=n,p=h;r&&(d=0,p=l);var g=u-Math.PI/2,f=g-c/2,v=g+c/2,y=String(u+"_"+c);d=void 0===a[y]?a[y]=0:++a[y],i.ctrlpts=[o.x+1.4*Math.cos(f)*p*(d/3+1),o.y+1.4*Math.sin(f)*p*(d/3+1),o.x+1.4*Math.cos(v)*p*(d/3+1),o.y+1.4*Math.sin(v)*p*(d/3+1)]},eh.findCompoundLoopPoints=function(e,t,n,r){var i=e._private.rscratch;i.edgeType="compound";var a=t.srcPos,o=t.tgtPos,s=t.srcW,l=t.srcH,u=t.tgtW,c=t.tgtH,h=e.pstyle("control-point-step-size").pfValue,d=e.pstyle("control-point-distances"),p=d?d.pfValue[0]:void 0,g=n,f=h;r&&(g=0,f=p);var v=50,y={x:a.x-s/2,y:a.y-l/2},m={x:o.x-u/2,y:o.y-c/2},b={x:Math.min(y.x,m.x),y:Math.min(y.y,m.y)},x=.5,w=Math.max(x,Math.log(.01*s)),E=Math.max(x,Math.log(.01*u));i.ctrlpts=[b.x,b.y-(1+Math.pow(v,1.12)/100)*f*(g/3+1)*w,b.x-(1+Math.pow(v,1.12)/100)*f*(g/3+1)*E,b.y]},eh.findStraightEdgePoints=function(e){e._private.rscratch.edgeType="straight"},eh.findBezierPoints=function(e,t,n,r,i){var a=e._private.rscratch,o=t.vectorNormInverse,s=t.posPts,l=t.intersectionPts,u=e.pstyle("edge-distances").value,c=e.pstyle("control-point-step-size").pfValue,h=e.pstyle("control-point-distances"),d=e.pstyle("control-point-weights"),p=h&&d?Math.min(h.value.length,d.value.length):1,g=h?h.pfValue[0]:void 0,f=d.value[0],v=r;a.edgeType=v?"multibezier":"bezier",a.ctrlpts=[];for(var y=0;y<p;y++){var m=(.5-t.eles.length/2+n)*c*(i?-1:1),b=void 0,x=wn(m);v&&(g=h?h.pfValue[y]:c,f=d.value[y]);var w=void 0!==(b=r?g:void 0!==g?x*g:void 0)?b:m,E=1-f,T=f,_="node-position"===u?s:l,D={x:_.x1*E+_.x2*T,y:_.y1*E+_.y2*T};a.ctrlpts.push(D.x+o.x*w,D.y+o.y*w)}},eh.findTaxiPoints=function(e,t){var n=e._private.rscratch;n.edgeType="segments";var r="vertical",i="horizontal",a="leftward",o="rightward",s="downward",l="upward",u="auto",c=t.posPts,h=t.srcW,d=t.srcH,p=t.tgtW,g=t.tgtH,f="node-position"!==e.pstyle("edge-distances").value,v=e.pstyle("taxi-direction").value,y=v,m=e.pstyle("taxi-turn"),b="%"===m.units,x=m.pfValue,w=x<0,E=e.pstyle("taxi-turn-min-distance").pfValue,T=f?(h+p)/2:0,_=f?(d+g)/2:0,D=c.x2-c.x1,C=c.y2-c.y1,N=function(e,t){return e>0?Math.max(e-t,0):Math.min(e+t,0)},A=N(D,T),L=N(C,_),S=!1;y===u?v=Math.abs(A)>Math.abs(L)?i:r:y===l||y===s?(v=r,S=!0):y!==a&&y!==o||(v=i,S=!0);var O,I=v===r,k=I?L:A,M=I?C:D,P=wn(M),R=!1;S&&(b||w)||!(y===s&&M<0||y===l&&M>0||y===a&&M>0||y===o&&M<0)||(k=(P*=-1)*Math.abs(k),R=!0);var B=function(e){return Math.abs(e)<E||Math.abs(e)>=Math.abs(k)},F=B(O=b?(x<0?1+x:x)*k:(x<0?k:0)+x*P),z=B(Math.abs(k)-Math.abs(O));if(!F&&!z||R)if(I){var G=c.y1+O+(f?d/2*P:0),Y=c.x1,X=c.x2;n.segpts=[Y,G,X,G]}else{var V=c.x1+O+(f?h/2*P:0),U=c.y1,j=c.y2;n.segpts=[V,U,V,j]}else if(I){var H=Math.abs(M)<=d/2,q=Math.abs(D)<=p/2;if(H){var W=(c.x1+c.x2)/2,$=c.y1,K=c.y2;n.segpts=[W,$,W,K]}else if(q){var Z=(c.y1+c.y2)/2,Q=c.x1,J=c.x2;n.segpts=[Q,Z,J,Z]}else n.segpts=[c.x1,c.y2]}else{var ee=Math.abs(M)<=h/2,te=Math.abs(C)<=g/2;if(ee){var ne=(c.y1+c.y2)/2,re=c.x1,ie=c.x2;n.segpts=[re,ne,ie,ne]}else if(te){var ae=(c.x1+c.x2)/2,oe=c.y1,se=c.y2;n.segpts=[ae,oe,ae,se]}else n.segpts=[c.x2,c.y1]}},eh.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,h=!_(n.startX)||!_(n.startY),d=!_(n.arrowStartX)||!_(n.arrowStartY),p=!_(n.endX)||!_(n.endY),g=!_(n.arrowEndX)||!_(n.arrowEndY),f=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth*3,v=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=v<f,m=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.endX,y:n.endY}),b=m<f,x=!1;if(h||d||y){x=!0;var w={x:n.ctrlpts[0]-r.x,y:n.ctrlpts[1]-r.y},E=Math.sqrt(w.x*w.x+w.y*w.y),T={x:w.x/E,y:w.y/E},D=Math.max(a,o),C={x:n.ctrlpts[0]+2*T.x*D,y:n.ctrlpts[1]+2*T.y*D},N=u.intersectLine(r.x,r.y,a,o,C.x,C.y,0);y?(n.ctrlpts[0]=n.ctrlpts[0]+T.x*(f-v),n.ctrlpts[1]=n.ctrlpts[1]+T.y*(f-v)):(n.ctrlpts[0]=N[0]+T.x*f,n.ctrlpts[1]=N[1]+T.y*f)}if(p||g||b){x=!0;var A={x:n.ctrlpts[0]-i.x,y:n.ctrlpts[1]-i.y},L=Math.sqrt(A.x*A.x+A.y*A.y),S={x:A.x/L,y:A.y/L},O=Math.max(a,o),I={x:n.ctrlpts[0]+2*S.x*O,y:n.ctrlpts[1]+2*S.y*O},k=c.intersectLine(i.x,i.y,s,l,I.x,I.y,0);b?(n.ctrlpts[0]=n.ctrlpts[0]+S.x*(f-m),n.ctrlpts[1]=n.ctrlpts[1]+S.y*(f-m)):(n.ctrlpts[0]=k[0]+S.x*f,n.ctrlpts[1]=k[1]+S.y*f)}x&&this.findEndpoints(e)}},eh.storeAllpts=function(e){var t=e._private.rscratch;if("multibezier"===t.edgeType||"bezier"===t.edgeType||"self"===t.edgeType||"compound"===t.edgeType){t.allpts=[],t.allpts.push(t.startX,t.startY);for(var n=0;n+1<t.ctrlpts.length;n+=2)t.allpts.push(t.ctrlpts[n],t.ctrlpts[n+1]),n+3<t.ctrlpts.length&&t.allpts.push((t.ctrlpts[n]+t.ctrlpts[n+2])/2,(t.ctrlpts[n+1]+t.ctrlpts[n+3])/2);var r,i;t.allpts.push(t.endX,t.endY),t.ctrlpts.length/2%2==0?(r=t.allpts.length/2-1,t.midX=t.allpts[r],t.midY=t.allpts[r+1]):(r=t.allpts.length/2-3,i=.5,t.midX=Dn(t.allpts[r],t.allpts[r+2],t.allpts[r+4],i),t.midY=Dn(t.allpts[r+1],t.allpts[r+3],t.allpts[r+5],i))}else if("straight"===t.edgeType)t.allpts=[t.startX,t.startY,t.endX,t.endY],t.midX=(t.startX+t.endX+t.arrowStartX+t.arrowEndX)/4,t.midY=(t.startY+t.endY+t.arrowStartY+t.arrowEndY)/4;else if("segments"===t.edgeType)if(t.allpts=[],t.allpts.push(t.startX,t.startY),t.allpts.push.apply(t.allpts,t.segpts),t.allpts.push(t.endX,t.endY),t.segpts.length%4==0){var a=t.segpts.length/2,o=a-2;t.midX=(t.segpts[o]+t.segpts[a])/2,t.midY=(t.segpts[o+1]+t.segpts[a+1])/2}else{var s=t.segpts.length/2-1;t.midX=t.segpts[s],t.midY=t.segpts[s+1]}},eh.checkForInvalidEdgeWarning=function(e){var t=e[0]._private.rscratch;t.nodesOverlap||_(t.startX)&&_(t.startY)&&_(t.endX)&&_(t.endY)?t.loggedErr=!1:t.loggedErr||(t.loggedErr=!0,Nt("Edge `"+e.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))},eh.findEdgeControlPoints=function(e){var t=this;if(e&&0!==e.length){for(var n=this,r=n.cy.hasCompoundNodes(),i={map:new Yt,get:function(e){var t=this.map.get(e[0]);return null!=t?t.get(e[1]):null},set:function(e,t){var n=this.map.get(e[0]);null==n&&(n=new Yt,this.map.set(e[0],n)),n.set(e[1],t)}},a=[],o=[],s=0;s<e.length;s++){var l=e[s],u=l._private,c=l.pstyle("curve-style").value;if(!l.removed()&&l.takesUpSpace())if("haystack"!==c){var h="unbundled-bezier"===c||"segments"===c||"straight"===c||"straight-triangle"===c||"taxi"===c,d="unbundled-bezier"===c||"bezier"===c,p=u.source,g=u.target,f=[p.poolIndex(),g.poolIndex()].sort(),v=i.get(f);null==v&&(v={eles:[]},i.set(f,v),a.push(f)),v.eles.push(l),h&&(v.hasUnbundled=!0),d&&(v.hasBezier=!0)}else o.push(l)}for(var y=function(e){var o=a[e],s=i.get(o),l=void 0;if(!s.hasUnbundled){var u=s.eles[0].parallelEdges().filter((function(e){return e.isBundledBezier()}));Rt(s.eles),u.forEach((function(e){return s.eles.push(e)})),s.eles.sort((function(e,t){return e.poolIndex()-t.poolIndex()}))}var c=s.eles[0],h=c.source(),d=c.target();if(h.poolIndex()>d.poolIndex()){var p=h;h=d,d=p}var g=s.srcPos=h.position(),f=s.tgtPos=d.position(),v=s.srcW=h.outerWidth(),y=s.srcH=h.outerHeight(),m=s.tgtW=d.outerWidth(),b=s.tgtH=d.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(h)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(d)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E<s.eles.length;E++){var T=s.eles[E],D=T[0]._private.rscratch,C=T.pstyle("curve-style").value,N="unbundled-bezier"===C||"segments"===C||"taxi"===C,A=!h.same(T.source());if(!s.calculatedIntersection&&h!==d&&(s.hasBezier||s.hasUnbundled)){s.calculatedIntersection=!0;var L=x.intersectLine(g.x,g.y,v,y,f.x,f.y,0),S=s.srcIntn=L,O=w.intersectLine(f.x,f.y,m,b,g.x,g.y,0),I=s.tgtIntn=O,k=s.intersectionPts={x1:L[0],x2:O[0],y1:L[1],y2:O[1]},M=s.posPts={x1:g.x,x2:f.x,y1:g.y,y2:f.y},P=O[1]-L[1],R=O[0]-L[0],B=Math.sqrt(R*R+P*P),F=s.vector={x:R,y:P},z=s.vectorNorm={x:F.x/B,y:F.y/B},G={x:-z.y,y:z.x};s.nodesOverlap=!_(B)||w.checkPoint(L[0],L[1],0,m,b,f.x,f.y)||x.checkPoint(O[0],O[1],0,v,y,g.x,g.y),s.vectorNormInverse=G,l={nodesOverlap:s.nodesOverlap,dirCounts:s.dirCounts,calculatedIntersection:!0,hasBezier:s.hasBezier,hasUnbundled:s.hasUnbundled,eles:s.eles,srcPos:f,tgtPos:g,srcW:m,srcH:b,tgtW:v,tgtH:y,srcIntn:I,tgtIntn:S,srcShape:w,tgtShape:x,posPts:{x1:M.x2,y1:M.y2,x2:M.x1,y2:M.y1},intersectionPts:{x1:k.x2,y1:k.y2,x2:k.x1,y2:k.y1},vector:{x:-F.x,y:-F.y},vectorNorm:{x:-z.x,y:-z.y},vectorNormInverse:{x:-G.x,y:-G.y}}}var Y=A?l:s;D.nodesOverlap=Y.nodesOverlap,D.srcIntn=Y.srcIntn,D.tgtIntn=Y.tgtIntn,r&&(h.isParent()||h.isChild()||d.isParent()||d.isChild())&&(h.parents().anySame(d)||d.parents().anySame(h)||h.same(d)&&h.isParent())?t.findCompoundLoopPoints(T,Y,E,N):h===d?t.findLoopPoints(T,Y,E,N):"segments"===C?t.findSegmentsPoints(T,Y):"taxi"===C?t.findTaxiPoints(T,Y):"straight"===C||!N&&s.eles.length%2==1&&E===Math.floor(s.eles.length/2)?t.findStraightEdgePoints(T):t.findBezierPoints(T,Y,E,N,A),t.findEndpoints(T),t.tryToCorrectInvalidPoints(T,Y),t.checkForInvalidEdgeWarning(T),t.storeAllpts(T),t.storeEdgeProjections(T),t.calculateArrowAngles(T),t.recalculateEdgeLabelProjections(T),t.calculateLabelAngles(T)}},m=0;m<a.length;m++)y(m);this.findHaystackPoints(o)}},eh.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return this.recalculateRenderedStyle(e),th(t.segpts)},eh.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return this.recalculateRenderedStyle(e),th(t.ctrlpts)},eh.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),{x:t.midX,y:t.midY}};var nh={manualEndptToPx:function(e,t){var n=this,r=e.position(),i=e.outerWidth(),a=e.outerHeight();if(2===t.value.length){var o=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(o[0]=o[0]*i),"%"===t.units[1]&&(o[1]=o[1]*a),o[0]+=r.x,o[1]+=r.y,o}var s=t.pfValue[0];s=-Math.PI/2+s;var l=2*Math.max(i,a),u=[r.x+Math.cos(s)*l,r.y+Math.sin(s)*l];return n.nodeShapes[this.getNodeShape(e)].intersectLine(r.x,r.y,i,a,u[0],u[1],0)},findEndpoints:function(e){var t,n,r,i,a,o=this,s=e.source()[0],l=e.target()[0],u=s.position(),c=l.position(),h=e.pstyle("target-arrow-shape").value,d=e.pstyle("source-arrow-shape").value,p=e.pstyle("target-distance-from-node").pfValue,g=e.pstyle("source-distance-from-node").pfValue,f=e.pstyle("curve-style").value,v=e._private.rscratch,y=v.edgeType,m="self"===y||"compound"===y,b="bezier"===y||"multibezier"===y||m,x="bezier"!==y,w="straight"===y||"segments"===y,E="segments"===y,T=b||x||w,D=m||"taxi"===f,C=e.pstyle("source-endpoint"),N=D?"outside-to-node":C.value,A=e.pstyle("target-endpoint"),L=D?"outside-to-node":A.value;if(v.srcManEndpt=C,v.tgtManEndpt=A,b){var S=[v.ctrlpts[0],v.ctrlpts[1]];n=x?[v.ctrlpts[v.ctrlpts.length-2],v.ctrlpts[v.ctrlpts.length-1]]:S,r=S}else if(w){var O=E?v.segpts.slice(0,2):[c.x,c.y];n=E?v.segpts.slice(v.segpts.length-2):[u.x,u.y],r=O}if("inside-to-node"===L)t=[c.x,c.y];else if(A.units)t=this.manualEndptToPx(l,A);else if("outside-to-line"===L)t=v.tgtIntn;else if("outside-to-node"===L||"outside-to-node-or-label"===L?i=n:"outside-to-line"!==L&&"outside-to-line-or-label"!==L||(i=[u.x,u.y]),t=o.nodeShapes[this.getNodeShape(l)].intersectLine(c.x,c.y,l.outerWidth(),l.outerHeight(),i[0],i[1],0),"outside-to-node-or-label"===L||"outside-to-line-or-label"===L){var I=l._private.rscratch,k=I.labelWidth,M=I.labelHeight,P=I.labelX,R=I.labelY,B=k/2,F=M/2,z=l.pstyle("text-valign").value;"top"===z?R-=F:"bottom"===z&&(R+=F);var G=l.pstyle("text-halign").value;"left"===G?P-=B:"right"===G&&(P+=B);var Y=ir(i[0],i[1],[P-B,R-F,P+B,R-F,P+B,R+F,P-B,R+F],c.x,c.y);if(Y.length>0){var X=u,V=Tn(X,pn(t)),U=Tn(X,pn(Y)),j=V;U<V&&(t=Y,j=U),Y.length>2&&Tn(X,{x:Y[2],y:Y[3]})<j&&(t=[Y[2],Y[3]])}}var H=or(t,n,o.arrowShapes[h].spacing(e)+p),q=or(t,n,o.arrowShapes[h].gap(e)+p);if(v.endX=q[0],v.endY=q[1],v.arrowEndX=H[0],v.arrowEndY=H[1],"inside-to-node"===N)t=[u.x,u.y];else if(C.units)t=this.manualEndptToPx(s,C);else if("outside-to-line"===N)t=v.srcIntn;else if("outside-to-node"===N||"outside-to-node-or-label"===N?a=r:"outside-to-line"!==N&&"outside-to-line-or-label"!==N||(a=[c.x,c.y]),t=o.nodeShapes[this.getNodeShape(s)].intersectLine(u.x,u.y,s.outerWidth(),s.outerHeight(),a[0],a[1],0),"outside-to-node-or-label"===N||"outside-to-line-or-label"===N){var W=s._private.rscratch,$=W.labelWidth,K=W.labelHeight,Z=W.labelX,Q=W.labelY,J=$/2,ee=K/2,te=s.pstyle("text-valign").value;"top"===te?Q-=ee:"bottom"===te&&(Q+=ee);var ne=s.pstyle("text-halign").value;"left"===ne?Z-=J:"right"===ne&&(Z+=J);var re=ir(a[0],a[1],[Z-J,Q-ee,Z+J,Q-ee,Z+J,Q+ee,Z-J,Q+ee],u.x,u.y);if(re.length>0){var ie=c,ae=Tn(ie,pn(t)),oe=Tn(ie,pn(re)),se=ae;oe<ae&&(t=[re[0],re[1]],se=oe),re.length>2&&Tn(ie,{x:re[2],y:re[3]})<se&&(t=[re[2],re[3]])}}var le=or(t,r,o.arrowShapes[d].spacing(e)+g),ue=or(t,r,o.arrowShapes[d].gap(e)+g);v.startX=ue[0],v.startY=ue[1],v.arrowStartX=le[0],v.arrowStartY=le[1],T&&(_(v.startX)&&_(v.startY)&&_(v.endX)&&_(v.endY)?v.badLine=!1:v.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[0],y:t.haystackPts[1]}:{x:t.arrowStartX,y:t.arrowStartY}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[2],y:t.haystackPts[3]}:{x:t.arrowEndX,y:t.arrowEndY}}},rh={};function ih(e,t,n){for(var r=function(e,t,n,r){return Dn(e,t,n,r)},i=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var o=e.bezierProjPcts[a];i.push({x:r(n[0],n[2],n[4],o),y:r(n[1],n[3],n[5],o)})}}rh.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)ih(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var o=n.haystackPts;t.rstyle.haystackPts=[{x:o[0],y:o[1]},{x:o[2],y:o[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},rh.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)};var ah={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!k(t)){var n,r,i=e._private,a=e.width(),o=e.height(),s=e.padding(),l=e.position(),u=e.pstyle("text-halign").strValue,c=e.pstyle("text-valign").strValue,h=i.rscratch,d=i.rstyle;switch(u){case"left":n=l.x-a/2-s;break;case"right":n=l.x+a/2+s;break;default:n=l.x}switch(c){case"top":r=l.y-o/2-s;break;case"bottom":r=l.y+o/2+s;break;default:r=l.y}h.labelX=n,h.labelY=r,d.labelX=n,d.labelY=r,this.calculateLabelAngles(e),this.applyLabelDimensions(e)}}},oh=function(e,t){var n=Math.atan(t/e);return 0===e&&n<0&&(n*=-1),n},sh=function(e,t){var n=t.x-e.x,r=t.y-e.y;return oh(n,r)},lh=function(e,t,n,r){var i=An(0,r-.001,1),a=An(0,r+.001,1),o=Cn(e,t,n,i),s=Cn(e,t,n,a);return sh(o,s)};ah.recalculateEdgeLabelProjections=function(e){var t,n=e._private,r=n.rscratch,i=this,a={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(a.mid||a.source||a.target){t={x:r.midX,y:r.midY};var o=function(e,t,r){zt(n.rscratch,e,t,r),zt(n.rstyle,e,t,r)};o("labelX",null,t.x),o("labelY",null,t.y);var s=oh(r.midDispX,r.midDispY);o("labelAutoAngle",null,s);var l=function e(){if(e.cache)return e.cache;for(var t=[],a=0;a+5<r.allpts.length;a+=4){var o={x:r.allpts[a],y:r.allpts[a+1]},s={x:r.allpts[a+2],y:r.allpts[a+3]},l={x:r.allpts[a+4],y:r.allpts[a+5]};t.push({p0:o,p1:s,p2:l,startDist:0,length:0,segments:[]})}var u=n.rstyle.bezierPts,c=i.bezierProjPcts.length;function h(e,t,n,r,i){var a=En(t,n),o=e.segments[e.segments.length-1],s={p0:t,p1:n,t0:r,t1:i,startDist:o?o.startDist+o.length:0,length:a};e.segments.push(s),e.length+=a}for(var d=0;d<t.length;d++){var p=t[d],g=t[d-1];g&&(p.startDist=g.startDist+g.length),h(p,p.p0,u[d*c],0,i.bezierProjPcts[0]);for(var f=0;f<c-1;f++)h(p,u[d*c+f],u[d*c+f+1],i.bezierProjPcts[f],i.bezierProjPcts[f+1]);h(p,u[d*c+c-1],p.p2,i.bezierProjPcts[c-1],1)}return e.cache=t},u=function(n){var i,s="source"===n;if(a[n]){var u=e.pstyle(n+"-text-offset").pfValue;switch(r.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var c,h=l(),d=0,p=0,g=0;g<h.length;g++){for(var f=h[s?g:h.length-1-g],v=0;v<f.segments.length;v++){var y=f.segments[s?v:f.segments.length-1-v],m=g===h.length-1&&v===f.segments.length-1;if(d=p,(p+=y.length)>=u||m){c={cp:f,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-d)/x.length,E=x.t1-x.t0,T=s?x.t0+E*w:x.t1-E*w;T=An(0,T,1),t=Cn(b.p0,b.p1,b.p2,T),i=lh(b.p0,b.p1,b.p2,T);break;case"straight":case"segments":case"haystack":for(var _,D,C,N,A=0,L=r.allpts.length,S=0;S+3<L&&(s?(C={x:r.allpts[S],y:r.allpts[S+1]},N={x:r.allpts[S+2],y:r.allpts[S+3]}):(C={x:r.allpts[L-2-S],y:r.allpts[L-1-S]},N={x:r.allpts[L-4-S],y:r.allpts[L-3-S]}),D=A,!((A+=_=En(C,N))>=u));S+=2);var O=(u-D)/_;O=An(0,O,1),t=Nn(C,N,O),i=sh(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},ah.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},ah.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=Ft(n.rscratch,"labelWrapCachedLines",t)||[],l="wrap"!==o?1:Math.max(s.length,1),u=i.height/l,c=u*a,h=i.width,d=i.height+(l-1)*(a-1)*u;zt(n.rstyle,"labelWidth",t,h),zt(n.rscratch,"labelWidth",t,h),zt(n.rstyle,"labelHeight",t,d),zt(n.rscratch,"labelHeight",t,d),zt(n.rscratch,"labelLineHeight",t,c)},ah.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(zt(n.rscratch,e,t,r),r):Ft(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var l=o("labelKey");if(null!=l&&o("labelWrapKey")===l)return o("labelWrapCachedText");for(var u="\u200b",c=i.split("\n"),h=e.pstyle("text-max-width").pfValue,d="anywhere"===e.pstyle("text-overflow-wrap").value,p=[],g=/[\s\u200b]+/,f=d?"":" ",v=0;v<c.length;v++){var y=c[v],m=this.calculateLabelDimensions(e,y).width;if(d){var b=y.split("").join(u);y=b}if(m>h){for(var x=y.split(g),w="",E=0;E<x.length;E++){var T=x[E],_=0===w.length?T:w+f+T;this.calculateLabelDimensions(e,_).width<=h?w+=T+f:(w&&p.push(w),w=T+f)}w.match(/^[\s\u200b]+$/)||p.push(w)}else p.push(y)}o("labelWrapCachedLines",p),i=o("labelWrapCachedText",p.join("\n")),o("labelWrapKey",l)}else if("ellipsis"===s){var D=e.pstyle("text-max-width").pfValue,C="",N="\u2026",A=!1;if(this.calculateLabelDimensions(e,i).width<D)return i;for(var L=0;L<i.length&&!(this.calculateLabelDimensions(e,C+i[L]+N).width>D);L++)C+=i[L],L===i.length-1&&(A=!0);return A||(C+=N),C}return i},ah.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},ah.calculateLabelDimensions=function(e,t){var n=this,r=gt(t,e._private.labelDimsKey),i=n.labelDimCache||(n.labelDimCache=[]),a=i[r];if(null!=a)return a;var o=0,s=e.pstyle("font-style").strValue,l=e.pstyle("font-size").pfValue,u=e.pstyle("font-family").strValue,c=e.pstyle("font-weight").strValue,h=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!h){h=this.labelCalcCanvas=document.createElement("canvas"),d=this.labelCalcCanvasContext=h.getContext("2d");var p=h.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}d.font="".concat(s," ").concat(c," ").concat(l,"px ").concat(u);for(var g=0,f=0,v=t.split("\n"),y=0;y<v.length;y++){var m=v[y],b=d.measureText(m),x=Math.ceil(b.width),w=l;g=Math.max(x,g),f+=w}return g+=o,f+=o,i[r]={width:g,height:f}},ah.calculateLabelAngle=function(e,t){var n=e._private.rscratch,r=e.isEdge(),i=t?t+"-":"",a=e.pstyle(i+"text-rotation"),o=a.strValue;return"none"===o?0:r&&"autorotate"===o?n.labelAutoAngle:"autorotate"===o?0:a.pfValue},ah.calculateLabelAngles=function(e){var t=this,n=e.isEdge(),r=e._private.rscratch;r.labelAngle=t.calculateLabelAngle(e),n&&(r.sourceLabelAngle=t.calculateLabelAngle(e,"source"),r.targetLabelAngle=t.calculateLabelAngle(e,"target"))};var uh={},ch=28,hh=!1;uh.getNodeShape=function(e){var t=this,n=e.pstyle("shape").value;if("cutrectangle"===n&&(e.width()<ch||e.height()<ch))return hh||(Nt("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),hh=!0),"rectangle";if(e.isParent())return"rectangle"===n||"roundrectangle"===n||"round-rectangle"===n||"cutrectangle"===n||"cut-rectangle"===n||"barrel"===n?n:"rectangle";if("polygon"===n){var r=e.pstyle("shape-polygon-points").value;return t.nodeShapes.makePolygon(r).name}return n};var dh={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r<e.length;r++){var i=e[r]._private.rstyle;i.clean=!1,i.cleanConnected=!1}};n.binder(e).on("bounds.* dirty.*",(function(e){var t=e.target;r(t)})).on("style.* background.*",(function(e){var t=e.target;r(t,!1)}));var i=function(i){if(i){var a=n.onUpdateEleCalcsFns;t.cleanStyle();for(var o=0;o<t.length;o++){var s=t[o],l=s._private.rstyle;s.isNode()&&!l.cleanConnected&&(r(s.connectedEdges()),l.cleanConnected=!0)}if(a)for(var u=0;u<a.length;u++)(0,a[u])(i,t);n.recalculateRenderedStyle(t),t=e.collection()}};n.flushRenderedStyleQueue=function(){i(!0)},n.beforeRender(i,n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=function(e){return e._private.rstyle.cleanConnected},r=[],i=[];if(!this.destroyed){void 0===t&&(t=!0);for(var a=0;a<e.length;a++){var o=e[a],s=o._private,l=s.rstyle;!o.isEdge()||n(o.source())&&n(o.target())||(l.clean=!1),t&&l.clean||o.removed()||"none"!==o.pstyle("display").value&&("nodes"===s.group?i.push(o):r.push(o),l.clean=!0)}for(var u=0;u<i.length;u++){var c=i[u],h=c._private.rstyle,d=c.position();this.recalculateNodeLabelProjection(c),h.nodeX=d.x,h.nodeY=d.y,h.nodeW=c.pstyle("width").pfValue,h.nodeH=c.pstyle("height").pfValue}this.recalculateEdgeProjections(r);for(var p=0;p<r.length;p++){var g=r[p]._private,f=g.rstyle,v=g.rscratch;f.srcX=v.arrowStartX,f.srcY=v.arrowStartY,f.tgtX=v.arrowEndX,f.tgtY=v.arrowEndY,f.midX=v.midX,f.midY=v.midY,f.labelAngle=v.labelAngle,f.sourceLabelAngle=v.sourceLabelAngle,f.targetLabelAngle=v.targetLabelAngle}}}},ph={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(Wl),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}},gh={};[Qc,Jc,eh,nh,rh,ah,uh,dh,ph].forEach((function(e){Q(gh,e)}));var fh={getCachedImage:function(e,t,n){var r=this,i=r.imageCache=r.imageCache||{},a=i[e];if(a)return a.image.complete||a.image.addEventListener("load",n),a.image;var o=(a=i[e]=i[e]||{}).image=new Image;o.addEventListener("load",n),o.addEventListener("error",(function(){o.error=!0}));var s="data:";return e.substring(0,s.length).toLowerCase()===s||(t="null"===t?null:t,o.crossOrigin=t),o.src=e,o}},vh={registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)},binder:function(e){var t=this,n=e===window||e===document||e===document.body||M(e);if(null==t.supportsPassiveEvents){var r=!1;try{var i=Object.defineProperty({},"passive",{get:function(){return r=!0,!0}});window.addEventListener("test",null,i)}catch(o){}t.supportsPassiveEvents=r}var a=function(r,i,a){var o=Array.prototype.slice.call(arguments);return n&&t.supportsPassiveEvents&&(o[2]={capture:null!=a&&a,passive:!1,once:!1}),t.bindings.push({target:e,args:o}),(e.addEventListener||e.on).apply(e,o),this};return{on:a,addEventListener:a,addListener:a,bind:a}},nodeIsDraggable:function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},nodeIsGrabbable:function(e){return this.nodeIsDraggable(e)&&e.interactive()},load:function(){var e=this,t=function(e){return e.selected()},n=function(t,n,r,i){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var o=n[a];t.emit({originalEvent:r,type:o,position:i})}},r=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},i=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.pannable()){for(var i=0;n&&i<n.length;i++)if((t=n[i]).isNode()&&t.isParent()&&!t.pannable()){r=!1;break}}else r=!0;return r},a=function(e){e[0]._private.grabbed=!0},o=function(e){e[0]._private.grabbed=!1},s=function(e){e[0]._private.rscratch.inDragLayer=!0},l=function(e){e[0]._private.rscratch.inDragLayer=!1},u=function(e){e[0]._private.rscratch.isGrabTarget=!0},c=function(e){e[0]._private.rscratch.isGrabTarget=!1},h=function(e,t){var n=t.addToList;n.has(e)||!e.grabbable()||e.locked()||(n.merge(e),a(e))},d=function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(s),n.connectedEdges().forEach(s)),t.addToList&&h(n,t)}},p=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(s),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(s)),n.addToList&&t.forEach((function(e){h(e,n)})),d(t,n),v(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},g=p,f=function(t){t&&(e.getCachedZSortedEles().forEach((function(e){o(e),l(e),c(e)})),e.updateCachedGrabbedEles())},v=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(s),r.forEach(s)),t.addToList&&r.forEach((function(e){h(e,t)}))}}},y=function(){null!=document.activeElement&&null!=document.activeElement.blur&&document.activeElement.blur()},m="undefined"!=typeof MutationObserver,b="undefined"!=typeof ResizeObserver;m?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++)if(r[i]===e.container){e.destroy();break}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var x=Qe((function(){e.cy.resize()}),100);m&&(e.styleObserver=new MutationObserver(x),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(window,"resize",x),b&&(e.resizeObserver=new ResizeObserver(x),e.resizeObserver.observe(e.container));var w=function(e,t){for(;null!=e;)t(e),e=e.parentNode},E=function(){e.invalidateContainerClientCoordsCache()};w(e.container,(function(t){e.registerBinding(t,"transitionend",E),e.registerBinding(t,"animationend",E),e.registerBinding(t,"scroll",E)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var T,D,C,N=function(){return 0!==e.selection[4]},A=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],a=n[2],o=n[3],s=t.touches?t.touches:[t],l=!1,u=0;u<s.length;u++){var c=s[u];if(r<=c.clientX&&c.clientX<=r+a&&i<=c.clientY&&c.clientY<=i+o){l=!0;break}}if(!l)return!1;for(var h=e.container,d=t.target.parentNode,p=!1;d;){if(d===h){p=!0;break}d=d.parentNode}return!!p};e.registerBinding(e.container,"mousedown",(function(t){if(A(t)){t.preventDefault(),y(),e.hoverData.capture=!0,e.hoverData.which=t.which;var r=e.cy,i=[t.clientX,t.clientY],a=e.projectIntoViewport(i[0],i[1]),o=e.selection,s=e.findNearestElements(a[0],a[1],!0,!1),l=s[0],c=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;var h=function(){e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var n=e.hoverData.down;n?n.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}}):r.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}})}}),e.tapholdDuration)};if(3==t.which){e.hoverData.cxtStarted=!0;var d={originalEvent:t,type:"cxttapstart",position:{x:a[0],y:a[1]}};l?(l.activate(),l.emit(d),e.hoverData.down=l):r.emit(d),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==t.which){if(l&&l.activate(),null!=l&&e.nodeIsGrabbable(l)){var f=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}},v=function(e){e.emit(f("grab"))};if(u(l),l.selected()){c=e.dragData.possibleDragElements=r.collection();var m=r.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));p(m,{addToList:c}),l.emit(f("grabon")),m.forEach(v)}else c=e.dragData.possibleDragElements=r.collection(),g(l,{addToList:c}),l.emit(f("grabon")).emit(f("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=l,e.hoverData.downs=s,e.hoverData.downTime=(new Date).getTime(),n(l,["mousedown","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==l?(o[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):l.pannable()&&(o[4]=1),h()}o[0]=o[2]=a[0],o[1]=o[3]=a[1]}}),!1),e.registerBinding(window,"mousemove",(function(t){if(e.hoverData.capture||A(t)){var a=!1,o=e.cy,s=o.zoom(),l=[t.clientX,t.clientY],u=e.projectIntoViewport(l[0],l[1]),c=e.hoverData.mdownPos,h=e.hoverData.mdownGPos,d=e.selection,g=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(g=e.findNearestElement(u[0],u[1],!0,!1));var v,y=e.hoverData.last,m=e.hoverData.down,b=[u[0]-d[2],u[1]-d[3]],x=e.dragData.possibleDragElements;if(h){var w=l[0]-h[0],E=w*w,T=l[1]-h[1],D=E+T*T;e.hoverData.isOverThresholdDrag=v=D>=e.desktopTapThreshold2}var C=r(t);v&&(e.hoverData.tapholdCancelled=!0);var N=function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(b[0]),t.push(b[1])):(t[0]+=b[0],t[1]+=b[1])};a=!0,n(g,["mousemove","vmousemove","tapdrag"],t,{x:u[0],y:u[1]});var L=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:u[0],y:u[1]}}),d[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(v){var S={originalEvent:t,type:"cxtdrag",position:{x:u[0],y:u[1]}};m?m.emit(S):o.emit(S),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&g===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:u[0],y:u[1]}}),e.hoverData.cxtOver=g,g&&g.emit({originalEvent:t,type:"cxtdragover",position:{x:u[0],y:u[1]}}))}}else if(e.hoverData.dragging){if(a=!0,o.panningEnabled()&&o.userPanningEnabled()){var O;if(e.hoverData.justStartedPan){var I=e.hoverData.mdownPos;O={x:(u[0]-I[0])*s,y:(u[1]-I[1])*s},e.hoverData.justStartedPan=!1}else O={x:b[0]*s,y:b[1]*s};o.panBy(O),o.emit("dragpan"),e.hoverData.dragged=!0}u=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=d[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||g==y||(y&&n(y,["mouseout","tapdragout"],t,{x:u[0],y:u[1]}),g&&n(g,["mouseover","tapdragover"],t,{x:u[0],y:u[1]}),e.hoverData.last=g),m)if(v){if(o.boxSelectionEnabled()&&C)m&&m.grabbed()&&(f(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),L();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var k=!e.dragData.didDrag;k&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||p(x,{inDragLayer:!0});var M={x:0,y:0};if(_(b[0])&&_(b[1])&&(M.x+=b[0],M.y+=b[1],k)){var P=e.hoverData.dragDelta;P&&_(P[0])&&_(P[1])&&(M.x+=P[0],M.y+=P[1])}e.hoverData.draggingEles=!0,x.silentShift(M).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else N();a=!0}else v&&(e.hoverData.dragging||!o.boxSelectionEnabled()||!C&&o.panningEnabled()&&o.userPanningEnabled()?!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()&&i(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,d[4]=0,e.data.bgActivePosistion=pn(c),e.redrawHint("select",!0),e.redraw()):L(),m&&m.pannable()&&m.active()&&m.unactivate());return d[2]=u[0],d[3]=u[1],a?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(window,"mouseup",(function(i){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(i.clientX,i.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,h=r(i);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var d={originalEvent:i,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(d):a.emit(d),!e.hoverData.cxtDragged){var p={originalEvent:i,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):a.emit(p)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(n(l,["mouseup","tapend","vmouseup"],i,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(n(c,["click","tap","vclick"],i,{x:o[0],y:o[1]}),D=!1,i.timeStamp-C<=a.multiClickDebounceTime()?(T&&clearTimeout(T),D=!0,C=null,n(c,["dblclick","dbltap","vdblclick"],i,{x:o[0],y:o[1]})):(T=setTimeout((function(){D||n(c,["oneclick","onetap","voneclick"],i,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),C=i.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||r(i)||(a.$(t).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=a.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(a.$(t).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var g=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),g.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:i,position:{x:o[0],y:o[1]}});var v=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||h||a.$(t).unmerge(g).unselect(),g.emit("box").stdFilter(v).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=c&&c.grabbed();f(u),y&&(c.emit("freeon"),u.emit("free"),e.dragData.didDrag&&(c.emit("dragfreeon"),u.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var L,S,O,I,k,M,P,R,B,F,z,G,Y,X=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||N())t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var l=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(l=e.gestureStartZoom*t.scale),n.zoom({level:l,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",X,!0),e.registerBinding(window,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||X(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var V,U,j,H,q,W,$,K=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},Z=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",V=function(t){if(e.hasTouchStarted=!0,A(t)){y(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var r=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=o[0],i[1]=o[1]}if(t.touches[1]&&(o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),i[2]=o[0],i[3]=o[1]),t.touches[2]&&(o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),i[4]=o[0],i[5]=o[1]),t.touches[1]){e.touchData.singleTouchMoved=!0,f(e.dragData.touchDragEles);var s=e.findContainerClientCoords();B=s[0],F=s[1],z=s[2],G=s[3],L=t.touches[0].clientX-B,S=t.touches[0].clientY-F,O=t.touches[1].clientX-B,I=t.touches[1].clientY-F,Y=0<=L&&L<=z&&0<=O&&O<=z&&0<=S&&S<=G&&0<=I&&I<=G;var l=r.pan(),c=r.zoom();k=K(L,S,O,I),M=Z(L,S,O,I),R=[((P=[(L+O)/2,(S+I)/2])[0]-l.x)/c,(P[1]-l.y)/c];var h=200;if(M<h*h&&!t.touches[2]){var d=e.findNearestElement(i[0],i[1],!0,!0),v=e.findNearestElement(i[2],i[3],!0,!0);return d&&d.isNode()?(d.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=d):v&&v.isNode()?(v.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=v):r.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])r.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var m=e.findNearestElements(i[0],i[1],!0,!0),b=m[0];if(null!=b&&(b.activate(),e.touchData.start=b,e.touchData.starts=m,e.nodeIsGrabbable(b))){var x=e.dragData.touchDragEles=r.collection(),w=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),b.selected()?(w=r.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),p(w,{addToList:x})):g(b,{addToList:x}),u(b);var E=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};b.emit(E("grabon")),w?w.forEach((function(e){e.emit(E("grab"))})):b.emit(E("grab"))}n(b,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==b&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||n(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var T=e.touchData.startPosition=[],_=0;_<i.length;_++)T[_]=a[_]=i[_];var D=t.touches[0];e.touchData.startGPosition=[D.clientX,D.clientY]}}},!1),e.registerBinding(window,"touchmove",U=function(t){var r=e.touchData.capture;if(r||A(t)){var a=e.selection,o=e.cy,s=e.touchData.now,l=e.touchData.earlier,u=o.zoom();if(t.touches[0]){var c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=c[0],s[1]=c[1]}t.touches[1]&&(c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),s[2]=c[0],s[3]=c[1]),t.touches[2]&&(c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),s[4]=c[0],s[5]=c[1]);var h,d=e.touchData.startGPosition;if(r&&t.touches[0]&&d){for(var g=[],v=0;v<s.length;v++)g[v]=s[v]-l[v];var y=t.touches[0].clientX-d[0],m=y*y,b=t.touches[0].clientY-d[1];h=m+b*b>=e.touchTapThreshold2}if(r&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-B,w=t.touches[0].clientY-F,E=t.touches[1].clientX-B,T=t.touches[1].clientY-F,D=Z(x,w,E,T),C=150,N=1.5;if(D/M>=N*N||D>=C*C){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var P={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(P),e.touchData.start=null):o.emit(P)}}if(r&&e.touchData.cxt){P={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}},e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(P):o.emit(P),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var z=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&z===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=z,z&&z.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(r&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,a[4]=1,a&&0!==a.length&&void 0!==a[0]?(a[2]=(s[0]+s[2]+s[4])/3,a[3]=(s[1]+s[3]+s[5])/3):(a[0]=(s[0]+s[2]+s[4])/3,a[1]=(s[1]+s[3]+s[5])/3,a[2]=(s[0]+s[2]+s[4])/3+1,a[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(r&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ne=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var G=0;G<ne.length;G++){var X=ne[G]._private;X.grabbed=!1,X.rscratch.inDragLayer=!1}}var V=e.touchData.start,U=(x=t.touches[0].clientX-B,w=t.touches[0].clientY-F,E=t.touches[1].clientX-B,T=t.touches[1].clientY-F,K(x,w,E,T)),j=U/k;if(Y){var H=(x-L+(E-O))/2,q=(w-S+(T-I))/2,W=o.zoom(),$=W*j,Q=o.pan(),J=R[0]*W+Q.x,ee=R[1]*W+Q.y,te={x:-$/W*(J-Q.x-H)+J,y:-$/W*(ee-Q.y-q)+ee};if(V&&V.active()){var ne=e.dragData.touchDragEles;f(ne),e.redrawHint("drag",!0),e.redrawHint("eles",!0),V.unactivate().emit("freeon"),ne.emit("free"),e.dragData.didDrag&&(V.emit("dragfreeon"),ne.emit("dragfree"))}o.viewport({zoom:$,pan:te,cancelOnFailedZoom:!0}),o.emit("pinchzoom"),k=U,L=x,S=w,O=E,I=T,e.pinching=!0}t.touches[0]&&(c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY),s[0]=c[0],s[1]=c[1]),t.touches[1]&&(c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),s[2]=c[0],s[3]=c[1]),t.touches[2]&&(c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),s[4]=c[0],s[5]=c[1])}else if(t.touches[0]&&!e.touchData.didSelect){var re=e.touchData.start,ie=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(z=e.findNearestElement(s[0],s[1],!0,!0)),r&&null!=re&&t.preventDefault(),r&&null!=re&&e.nodeIsDraggable(re))if(h){ne=e.dragData.touchDragEles;var ae=!e.dragData.didDrag;ae&&p(ne,{inDragLayer:!0}),e.dragData.didDrag=!0;var oe={x:0,y:0};_(g[0])&&_(g[1])&&(oe.x+=g[0],oe.y+=g[1],ae&&(e.redrawHint("eles",!0),(se=e.touchData.dragDelta)&&_(se[0])&&_(se[1])&&(oe.x+=se[0],oe.y+=se[1]))),e.hoverData.draggingEles=!0,ne.silentShift(oe).emit("position drag"),e.redrawHint("drag",!0),e.touchData.startPosition[0]==l[0]&&e.touchData.startPosition[1]==l[1]&&e.redrawHint("eles",!0),e.redraw()}else{var se;0===(se=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(se.push(g[0]),se.push(g[1])):(se[0]+=g[0],se[1]+=g[1])}if(n(re||z,["touchmove","tapdrag","vmousemove"],t,{x:s[0],y:s[1]}),re&&re.grabbed()||z==ie||(ie&&ie.emit({originalEvent:t,type:"tapdragout",position:{x:s[0],y:s[1]}}),z&&z.emit({originalEvent:t,type:"tapdragover",position:{x:s[0],y:s[1]}})),e.touchData.last=z,r)for(G=0;G<s.length;G++)s[G]&&e.touchData.startPosition[G]&&h&&(e.touchData.singleTouchMoved=!0);r&&(null==re||re.pannable())&&o.panningEnabled()&&o.userPanningEnabled()&&(i(re,e.touchData.starts)&&(t.preventDefault(),e.data.bgActivePosistion||(e.data.bgActivePosistion=pn(e.touchData.startPosition)),e.swipePanning?(o.panBy({x:g[0]*u,y:g[1]*u}),o.emit("dragpan")):h&&(e.swipePanning=!0,o.panBy({x:y*u,y:b*u}),o.emit("dragpan"),re&&(re.unactivate(),e.redrawHint("select",!0),e.touchData.start=null))),c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY),s[0]=c[0],s[1]=c[1])}for(v=0;v<s.length;v++)l[v]=s[v];r&&t.touches.length>0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(window,"touchcancel",j=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(window,"touchend",H=function(r){var i=e.touchData.start;if(e.touchData.capture){0===r.touches.length&&(e.touchData.capture=!1),r.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,l=s.zoom(),u=e.touchData.now,c=e.touchData.earlier;if(r.touches[0]){var h=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);u[0]=h[0],u[1]=h[1]}if(r.touches[1]&&(h=e.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY),u[2]=h[0],u[3]=h[1]),r.touches[2]&&(h=e.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY),u[4]=h[0],u[5]=h[1]),i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:r,type:"cxttapend",position:{x:u[0],y:u[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var d={originalEvent:r,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(d):s.emit(d)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!r.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var p=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:r,position:{x:u[0],y:u[1]}});var g=function(e){return e.selectable()&&!e.selected()};p.emit("box").stdFilter(g).select().emit("boxselect"),p.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),r.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(r.touches[1]);else if(r.touches[0]);else if(!r.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var v=e.dragData.touchDragEles;if(null!=i){var y=i._private.grabbed;f(v),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&(i.emit("freeon"),v.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),v.emit("dragfree"))),n(i,["touchend","tapend","vmouseup","tapdragout"],r,{x:u[0],y:u[1]}),i.unactivate(),e.touchData.start=null}else{var m=e.findNearestElement(u[0],u[1],!0,!0);n(m,["touchend","tapend","vmouseup","tapdragout"],r,{x:u[0],y:u[1]})}var b=e.touchData.startPosition[0]-u[0],x=b*b,w=e.touchData.startPosition[1]-u[1],E=(x+w*w)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),n(i,["tap","vclick"],r,{x:u[0],y:u[1]}),q=!1,r.timeStamp-$<=s.multiClickDebounceTime()?(W&&clearTimeout(W),q=!0,$=null,n(i,["dbltap","vdblclick"],r,{x:u[0],y:u[1]})):(W=setTimeout((function(){q||n(i,["onetap","voneclick"],r,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),$=r.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&E<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(t).unmerge(i).unselect(["tapunselect"]),i.select(["tapselect"])):i.selected()?i.unselect(["tapunselect"]):i.select(["tapselect"]),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved=!0}for(var T=0;T<u.length;T++)c[T]=u[T];e.dragData.didDrag=!1,0===r.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=null,e.touchData.startGPosition=null,e.touchData.didSelect=!1),r.touches.length<2&&(1===r.touches.length&&(e.touchData.startGPosition=[r.touches[0].clientX,r.touches[0].clientY]),e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var Q=[],J=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},ee=function(e){return{event:e,touch:J(e)}},te=function(e){Q.push(ee(e))},ne=function(e){for(var t=0;t<Q.length;t++)if(Q[t].event.pointerId===e.pointerId)return void Q.splice(t,1)},re=function(e){var t=Q.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=J(e)},ie=function(e){e.touches=Q.map((function(e){return e.touch}))},ae=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){ae(e)||(e.preventDefault(),te(e),ie(e),V(e))})),e.registerBinding(e.container,"pointerup",(function(e){ae(e)||(ne(e),ie(e),H(e))})),e.registerBinding(e.container,"pointercancel",(function(e){ae(e)||(ne(e),ie(e),j(e))})),e.registerBinding(e.container,"pointermove",(function(e){ae(e)||(e.preventDefault(),re(e),ie(e),U(e))}))}}},yh={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return ir(i,a,this.points,e,t,n/2,r/2,o)},checkPoint:function(e,t,n,r,i,a,o){return $n(e,t,this.points,a,o,r,i,[0,-1],n)}}},generateEllipse:function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Jn(i,a,e,t,n/2+o,r/2+o)},checkPoint:function(e,t,n,r,i,a,o){return er(e,t,r,i,a,o,n)}}},generateRoundPolygon:function(e,t){for(var n=new Array(2*t.length),r=0;r<t.length/2;r++){var i=2*r,a=void 0;a=r<t.length/2-1?2*(r+1):0,n[4*r]=t[i],n[4*r+1]=t[i+1];var o=t[a]-t[i],s=t[a+1]-t[i+1],l=Math.sqrt(o*o+s*s);n[4*r+2]=o/l,n[4*r+3]=s/l}return this.nodeShapes[e]={renderer:this,name:e,points:n,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("round-polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return ar(i,a,this.points,e,t,n,r)},checkPoint:function(e,t,n,r,i,a,o){return Kn(e,t,this.points,a,o,r,i)}}},generateRoundRectangle:function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Yn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=cr(r,i),l=2*s;return!!($n(e,t,this.points,a,o,r,i-l,[0,-1],n)||$n(e,t,this.points,a,o,r-l,i,[0,-1],n)||er(e,t,l,l,a-r/2+s,o-i/2+s,n)||er(e,t,l,l,a+r/2-s,o-i/2+s,n)||er(e,t,l,l,a+r/2-s,o+i/2-s,n)||er(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},generateCutRectangle:function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:dr(),points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,a=t/2,o=e/2,s=n-o,l=n+o,u=r-a,c=r+a;return{topLeft:[s,u+i,s+i,u,s+i,u+i],topRight:[l-i,u,l,u+i,l-i,u+i],bottomRight:[l,c-i,l-i,c,l-i,c-i],bottomLeft:[s+i,c,s,c-i,s+i,c-i]}},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateCutTrianglePts(n+2*o,r+2*o,e,t),l=[].concat.apply([],[s.topLeft.splice(0,4),s.topRight.splice(0,4),s.bottomRight.splice(0,4),s.bottomLeft.splice(0,4)]);return ir(i,a,l,e,t)},checkPoint:function(e,t,n,r,i,a,o){if($n(e,t,this.points,a,o,r,i-2*this.cornerLength,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-2*this.cornerLength,i,[0,-1],n))return!0;var s=this.generateCutTrianglePts(r,i,a,o);return Wn(e,t,s.topLeft)||Wn(e,t,s.topRight)||Wn(e,t,s.bottomRight)||Wn(e,t,s.bottomLeft)}}},generateBarrel:function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=.15,l=.5,u=.85,c=this.generateBarrelBezierPts(n+2*o,r+2*o,e,t),h=function(e){var t=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},s),n=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},l),r=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},u);return[e[0],e[1],t.x,t.y,n.x,n.y,r.x,r.y,e[4],e[5]]},d=[].concat(h(c.topLeft),h(c.topRight),h(c.bottomRight),h(c.bottomLeft));return ir(i,a,d,e,t)},generateBarrelBezierPts:function(e,t,n,r){var i=t/2,a=e/2,o=n-a,s=n+a,l=r-i,u=r+i,c=gr(e,t),h=c.heightOffset,d=c.widthOffset,p=c.ctrlPtOffsetPct*e,g={topLeft:[o,l+h,o+p,l,o+d,l],topRight:[s-d,l,s-p,l,s,l+h],bottomRight:[s,u-h,s-p,u,s-d,u],bottomLeft:[o+d,u,o+p,u,o,u-h]};return g.topLeft.isTop=!0,g.topRight.isTop=!0,g.bottomLeft.isBottom=!0,g.bottomRight.isBottom=!0,g},checkPoint:function(e,t,n,r,i,a,o){var s=gr(r,i),l=s.heightOffset,u=s.widthOffset;if($n(e,t,this.points,a,o,r,i-2*l,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-2*u,i,[0,-1],n))return!0;for(var c=this.generateBarrelBezierPts(r,i,a,o),h=function(e,t,n){var r=n[4],i=n[2],a=n[0],o=n[5],s=n[1],l=Math.min(r,a),u=Math.max(r,a),c=Math.min(o,s),h=Math.max(o,s);if(l<=e&&e<=u&&c<=t&&t<=h){var d=pr(r,i,a),p=Un(d[0],d[1],d[2],e).filter((function(e){return 0<=e&&e<=1}));if(p.length>0)return p[0]}return null},d=Object.keys(c),p=0;p<d.length;p++){var g=c[d[p]],f=h(e,t,g);if(null!=f){var v=g[5],y=g[3],m=g[1],b=Dn(v,y,m,f);if(g.isTop&&b<=t)return!0;if(g.isBottom&&t<=b)return!0}}return!1}}},generateBottomRoundrectangle:function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=t-(r/2+o),l=rr(i,a,e,t,e-(n/2+o),s,e+(n/2+o),s,!1);return l.length>0?l:Yn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=cr(r,i),l=2*s;if($n(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-l,i,[0,-1],n))return!0;var u=r/2+2*n,c=i/2+2*n;return!!Wn(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||!!er(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!er(e,t,l,l,a-r/2+s,o+i/2-s,n)}}},registerNodeShapes:function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",sr(3,0)),this.generateRoundPolygon("round-triangle",sr(3,0)),this.generatePolygon("rectangle",sr(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",sr(5,0)),this.generateRoundPolygon("round-pentagon",sr(5,0)),this.generatePolygon("hexagon",sr(6,0)),this.generateRoundPolygon("round-hexagon",sr(6,0)),this.generatePolygon("heptagon",sr(7,0)),this.generateRoundPolygon("round-heptagon",sr(7,0)),this.generatePolygon("octagon",sr(8,0)),this.generateRoundPolygon("round-octagon",sr(8,0));var r=new Array(20),i=ur(5,0),a=ur(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(s=0;s<5;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=lr(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);var l=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",l),this.generateRoundPolygon("round-tag",l),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}}},mh={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||kt();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){null==t&&Dt("Priority is not optional for beforeRender");var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},bh=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};mh.startRenderLoop=function(){var e=this,t=e.cy;if(!e.renderLoopStarted){e.renderLoopStarted=!0;var n=function n(r){if(!e.destroyed){if(t.batching());else if(e.requestedFrame&&!e.skipFrame){bh(e,!0,r);var i=rt();e.render(e.renderOptions);var a=e.lastDrawTime=rt();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var o=a-i;e.redrawTotalTime+=o,e.lastRedrawTime=o,e.averageRedrawTime=e.averageRedrawTime/2+o/2,e.requestedFrame=!1}else bh(e,!1,r);e.skipFrame=!1,nt(n)}};nt(n)}};var xh=function(e){this.init(e)},wh=xh.prototype;wh.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],wh.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container();if(d){var r=d.document,i=r.head,a="__________cytoscape_stylesheet",o="__________cytoscape_container",s=null!=r.getElementById(a);if(n.className.indexOf(o)<0&&(n.className=(n.className||"")+" "+o),!s){var l=r.createElement("style");l.id=a,l.innerHTML="."+o+" { position: relative; }",i.insertBefore(l,i.children[0])}"static"===d.getComputedStyle(n).getPropertyValue("position")&&Nt("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=_(e.pixelRatio)?e.pixelRatio:null,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},wh.notify=function(e,t){var n=this,r=n.cy;this.destroyed||("init"!==e?"destroy"!==e?(("add"===e||"remove"===e||"move"===e&&r.hasCompoundNodes()||"load"===e||"zorder"===e||"mount"===e)&&n.invalidateCachedZSortedEles(),"viewport"===e&&n.redrawHint("select",!0),"load"!==e&&"resize"!==e&&"mount"!==e||(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()):n.destroy():n.load())},wh.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.resizeObserver&&e.resizeObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(i){}},wh.isHeadless=function(){return!1},[Zc,gh,fh,vh,yh,mh].forEach((function(e){Q(wh,e)}));var Eh=1e3/60,Th={setupDequeueing:function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var r=Qe((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),i=function(i,a){var o=rt(),s=n.averageRedrawTime,l=n.lastRedrawTime,u=[],c=n.cy.extent(),h=n.getPixelRatio();for(i||n.flushRenderedStyleQueue();;){var d=rt(),p=d-o,g=d-a;if(l<Eh){var f=Eh-(i?s:0);if(g>=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*Eh)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y<v.length;y++)u.push(v[y])}u.length>0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())},a=e.priority||_t;n.beforeRender(i,a(t))}}}},_h=function(){function e(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Et;t(this,e),this.idsByKey=new Yt,this.keyForId=new Yt,this.cachesByLvl=new Yt,this.lvls=[],this.getKey=n,this.doesEleInvalidateKey=r}return i(e,[{key:"getIdsFor",value:function(e){null==e&&Dt("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ut,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new Yt,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),Dh=25,Ch=50,Nh=-4,Ah=3,Lh=7.99,Sh=8,Oh=1024,Ih=1024,kh=1024,Mh=.2,Ph=.8,Rh=10,Bh=.15,Fh=.1,zh=.9,Gh=.9,Yh=100,Xh=1,Vh={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Uh=Mt({getKey:null,doesEleInvalidateKey:Et,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:wt,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),jh=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=Uh(t);Q(n,r),n.lookup=new _h(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},Hh=jh.prototype;Hh.reasons=Vh,Hh.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},Hh.getRetiredTextureQueue=function(e){var t=this,n=t.eleImgCaches.retired=t.eleImgCaches.retired||{};return n[e]=n[e]||[]},Hh.getElementQueue=function(){var e=this;return e.eleCacheQueue=e.eleCacheQueue||new $t((function(e,t){return t.reqs-e.reqs}))},Hh.getElementKeyToQueue=function(){var e=this;return e.eleKeyToCacheQueue=e.eleKeyToCacheQueue||{}},Hh.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(xn(s*n))),r<Nh)r=Nh;else if(s>=Lh||r>Ah)return null;var u=Math.pow(2,r),c=t.h*u,h=t.w*u,d=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,d))return null;var p,g=l.get(e,r);if(g&&g.invalidated&&(g.invalidated=!1,g.texture.invalidatedWidth-=g.width),g)return g;if(p=c<=Dh?Dh:c<=Ch?Ch:Math.ceil(c/Ch)*Ch,c>kh||h>Ih)return null;var f=a.getTextureQueue(p),v=f[f.length-2],y=function(){return a.recycleTexture(p,h)||a.addTexture(p,h)};v||(v=f[f.length-1]),v||(v=y()),v.width-v.usedWidth<h&&(v=y());for(var m,b=function(e){return e&&e.scaledLabelShown===d},x=i&&i===Vh.dequeue,w=i&&i===Vh.highQuality,E=i&&i===Vh.downscale,T=r+1;T<=Ah;T++){var _=l.get(e,T);if(_){m=_;break}}var D=m&&m.level===r+1?m:null,C=function(){v.context.drawImage(D.texture.canvas,D.x,0,D.width,D.height,v.usedWidth,0,h,c)};if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,h,p),b(D))C();else if(b(m)){if(!w)return a.queueElement(e,m.level-1),m;for(var N=m.level;N>r;N--)D=a.getElement(e,t,n,N,Vh.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=Nh;L--){var S=l.get(e,L);if(S){A=S;break}}if(b(A))return a.queueElement(e,r),A;v.context.translate(v.usedWidth,0),v.context.scale(u,u),this.drawElement(v.context,e,t,d,!1),v.context.scale(1/u,1/u),v.context.translate(-v.usedWidth,0)}return g={x:v.usedWidth,texture:v,level:r,scale:u,width:h,height:c,scaledLabelShown:d},v.usedWidth+=Math.ceil(h+Sh),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},Hh.invalidateElements=function(e){for(var t=0;t<e.length;t++)this.invalidateElement(e[t])},Hh.invalidateElement=function(e){var t=this,n=t.lookup,r=[];if(n.isInvalid(e)){for(var i=Nh;i<=Ah;i++){var a=n.getForCachedKey(e,i);a&&r.push(a)}if(n.invalidate(e))for(var o=0;o<r.length;o++){var s=r[o],l=s.texture;l.invalidatedWidth+=s.width,s.invalidated=!0,t.checkTextureUtility(l)}t.removeFromQueue(e)}},Hh.checkTextureUtility=function(e){e.invalidatedWidth>=Mh*e.width&&this.retireTexture(e)},Hh.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>Ph&&e.fullnessChecks>=Rh?Pt(t,e):e.fullnessChecks++},Hh.retireTexture=function(e){var t=this,n=e.height,r=t.getTextureQueue(n),i=this.lookup;Pt(r,e),e.retired=!0;for(var a=e.eleCaches,o=0;o<a.length;o++){var s=a[o];i.deleteCache(s.key,s.level)}Rt(a),t.getRetiredTextureQueue(n).push(e)},Hh.addTexture=function(e,t){var n=this,r={};return n.getTextureQueue(e).push(r),r.eleCaches=[],r.height=e,r.width=Math.max(Oh,t),r.usedWidth=0,r.invalidatedWidth=0,r.fullnessChecks=0,r.canvas=n.renderer.makeOffscreenCanvas(r.width,r.height),r.context=r.canvas.getContext("2d"),r},Hh.recycleTexture=function(e,t){for(var n=this,r=n.getTextureQueue(e),i=n.getRetiredTextureQueue(e),a=0;a<i.length;a++){var o=i[a];if(o.width>=t)return o.retired=!1,o.usedWidth=0,o.invalidatedWidth=0,o.fullnessChecks=0,Rt(o.eleCaches),o.context.setTransform(1,0,0,1,0,0),o.context.clearRect(0,0,o.width,o.height),Pt(i,o),r.push(o),o}},Hh.queueElement=function(e,t){var n=this,r=n.getElementQueue(),i=n.getElementKeyToQueue(),a=this.getKey(e),o=i[a];if(o)o.level=Math.max(o.level,t),o.eles.merge(e),o.reqs++,r.updateItem(o);else{var s={eles:e.spawn().merge(e),level:t,reqs:1,key:a};r.push(s),i[a]=s}},Hh.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<Xh&&n.size()>0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=a.hasCache(u,s.level);if(r[l]=null,!c){i.push(s);var h=t.getBoundingBox(u);t.getElement(u,h,e,s.level,Vh.dequeue)}}return i},Hh.removeFromQueue=function(e){var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=this.getKey(e),a=r[i];null!=a&&(1===a.eles.length?(a.reqs=xt,n.updateItem(a),n.pop(),r[i]=null):a.eles.unmerge(e))},Hh.onDequeue=function(e){this.onDequeues.push(e)},Hh.offDequeue=function(e){Pt(this.onDequeues,e)},Hh.setupDequeueing=Th.setupDequeueing({deqRedrawThreshold:Yh,deqCost:Bh,deqAvgCost:Fh,deqNoDrawCost:zh,deqFastCost:Gh,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++)(0,e.onDequeues[n])(t)},shouldRedraw:function(e,t,n,r){for(var i=0;i<t.length;i++)for(var a=t[i].eles,o=0;o<a.length;o++){var s=a[o].boundingBox();if(Bn(s,r))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var qh=1,Wh=-4,$h=2,Kh=3.99,Zh=50,Qh=50,Jh=.15,ed=.1,td=.9,nd=.9,rd=1,id=250,ad=16e6,od=!0,sd=function(e){var t=this,n=t.renderer=e,r=n.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=rt()-2*id,t.skipping=!1,t.eleTxrDeqs=r.collection(),t.scheduleElementRefinement=Qe((function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)}),Qh),n.beforeRender((function(e,n){n-t.lastInvalidationTime<=id?t.skipping=!0:t.skipping=!1}),n.beforeRenderPriorities.lyrTxrSkip);var i=function(e,t){return t.reqs-e.reqs};t.layersQueue=new $t(i),t.setupDequeueing()},ld=sd.prototype,ud=0,cd=Math.pow(2,53)-1;ld.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),a=this.renderer.makeOffscreenCanvas(r,i),o={id:ud=++ud%cd,bb:e,level:t,width:r,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,l=-o.bb.x1,u=-o.bb.y1;return s.scale(n,n),s.translate(l,u),o},ld.getLayers=function(e,t,n){var r=this,i=r.renderer.cy.zoom(),a=r.firstGet;if(r.firstGet=!1,null==n)if((n=Math.ceil(xn(i*t)))<Wh)n=Wh;else if(i>=Kh||n>$h)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[],h=function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},i=function(e){if(!s)for(var r=n+e;Wh<=r&&r<=$h&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Pt(c,o)}};if(r.levelIsComplete(n,e))return c;h();var d=function(){if(!o){o=Ln();for(var t=0;t<e.length;t++)In(o,e[t].boundingBox())}return o},p=function(e){var t=(e=e||{}).after;if(d(),o.w*u*(o.h*u)>ad)return null;var i=r.makeLayer(o,n);if(null!=t){var a=c.indexOf(t)+1;c.splice(a,0,i)}else(void 0===e.insert||e.insert)&&c.unshift(i);return i};if(r.skipping&&!a)return null;for(var g=null,f=e.length/qh,v=!a,y=0;y<e.length;y++){var m=e[y],b=m._private.rscratch,x=b.imgLayerCaches=b.imgLayerCaches||{},w=x[n];if(w)g=w;else{if((!g||g.eles.length>=f||!Gn(g.bb,m.boundingBox()))&&!(g=p({insert:!0,after:g})))return null;s||v?r.queueLayer(g,m):r.drawEleInLayer(g,m,n,t),g.eles.push(m),x[n]=g}}return s||(v?null:c)},ld.getEleLevelForLayerLevel=function(e,t){return e},ld.drawEleInLayer=function(e,t,n,r){var i=this,a=this.renderer,o=e.context,s=t.boundingBox();0!==s.w&&0!==s.h&&t.visible()&&(n=i.getEleLevelForLayerLevel(n,r),a.setImgSmoothing(o,!1),a.drawCachedElement(o,t,null,null,n,od),a.setImgSmoothing(o,!0))},ld.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var a=n[i];if(a.reqs>0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},ld.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(a<0)this.invalidateLayer(i);else{var s=a;for(o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}}},ld.updateElementsInLayers=function(e,t){for(var n=this,r=A(e[0]),i=0;i<e.length;i++)for(var a=r?null:e[i],o=r?e[i]:e[i].ele,s=o._private.rscratch,l=s.imgLayerCaches=s.imgLayerCaches||{},u=Wh;u<=$h;u++){var c=l[u];c&&(a&&n.getEleLevelForLayerLevel(c.level)!==a.level||t(c,o,a))}},ld.haveLayers=function(){for(var e=this,t=!1,n=Wh;n<=$h;n++){var r=e.layersByLevel[n];if(r&&r.length>0){t=!0;break}}return t},ld.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=rt(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},ld.invalidateLayer=function(e){if(this.lastInvalidationTime=rt(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Pt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i<n.length;i++){var a=n[i]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},ld.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])}))},ld.enqueueElementRefinement=function(e){this.eleTxrDeqs.merge(e),this.scheduleElementRefinement()},ld.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},ld.dequeue=function(e){for(var t=this,n=t.layersQueue,r=[],i=0;i<rd&&0!==n.size();){var a=n.peek();if(a.replacement)n.pop();else if(a.replaces&&a!==a.replaces.replacement)n.pop();else if(a.invalid)n.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===r.length&&r.push(!0),0===a.elesQueue.length&&(n.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return r},ld.applyLayerReplacement=function(e){var t=this,n=t.layersByLevel[e.level],r=e.replaces,i=n.indexOf(r);if(!(i<0||r.invalid)){n[i]=e;for(var a=0;a<e.eles.length;a++){var o=e.eles[a]._private,s=o.imgLayerCaches=o.imgLayerCaches||{};s&&(s[e.level]=e)}t.requestRedraw()}},ld.requestRedraw=Qe((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),ld.setupDequeueing=Th.setupDequeueing({deqRedrawThreshold:Zh,deqCost:Jh,deqAvgCost:ed,deqNoDrawCost:td,deqFastCost:nd,deq:function(e,t){return e.dequeue(t)},onDeqd:_t,shouldRedraw:wt,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var hd,dd={};function pd(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}}function gd(e,t,n){for(var r,i=0;i<t.length;i++){var a=t[i];0===i&&(r=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)}function fd(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var a=r[i];e.lineTo(a.x,a.y)}var o=n,s=n[0];for(e.moveTo(s.x,s.y),i=1;i<o.length;i++)a=o[i],e.lineTo(a.x,a.y);e.closePath&&e.closePath()}function vd(e,t,n,r,i){e.beginPath&&e.beginPath(),e.arc(n,r,i,0,2*Math.PI,!1);var a=t,o=a[0];e.moveTo(o.x,o.y);for(var s=0;s<a.length;s++){var l=a[s];e.lineTo(l.x,l.y)}e.closePath&&e.closePath()}function yd(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}dd.arrowShapeImpl=function(e){return(hd||(hd={polygon:pd,"triangle-backcurve":gd,"triangle-tee":fd,"circle-triangle":vd,"triangle-cross":fd,circle:yd}))[e]};var md={drawElement:function(e,t,n,r,i,a){var o=this;t.isNode()?o.drawNode(e,t,n,r,i,a):o.drawEdge(e,t,n,r,i,a)},drawElementOverlay:function(e,t){var n=this;t.isNode()?n.drawNodeOverlay(e,t):n.drawEdgeOverlay(e,t)},drawElementUnderlay:function(e,t){var n=this;t.isNode()?n.drawNodeUnderlay(e,t):n.drawEdgeUnderlay(e,t)},drawCachedElementPortion:function(e,t,n,r,i,a,o,s){var l=this,u=n.getBoundingBox(t);if(0!==u.w&&0!==u.h){var c=n.getElement(t,u,r,i,a);if(null!=c){var h=s(l,t);if(0===h)return;var d,p,g,f,v,y,m=o(l,t),b=u.x1,x=u.y1,w=u.w,E=u.h;if(0!==m){var T=n.getRotationPoint(t);g=T.x,f=T.y,e.translate(g,f),e.rotate(m),(v=l.getImgSmoothing(e))||l.setImgSmoothing(e,!0);var _=n.getRotationOffset(t);d=_.x,p=_.y}else d=b,p=x;1!==h&&(y=e.globalAlpha,e.globalAlpha=y*h),e.drawImage(c.texture.canvas,c.x,0,c.width,c.height,d,p,w,E),1!==h&&(e.globalAlpha=y),0!==m&&(e.rotate(-m),e.translate(-g,-f),v||l.setImgSmoothing(e,!1))}else n.drawElement(e,t)}}},bd=function(){return 0},xd=function(e,t){return e.getTextAngle(t,null)},wd=function(e,t){return e.getTextAngle(t,"source")},Ed=function(e,t){return e.getTextAngle(t,"target")},Td=function(e,t){return t.effectiveOpacity()},_d=function(e,t){return t.pstyle("text-opacity").pfValue*t.effectiveOpacity()};md.drawCachedElement=function(e,t,n,r,i,a){var o=this,s=o.data,l=s.eleTxrCache,u=s.lblTxrCache,c=s.slbTxrCache,h=s.tlbTxrCache,d=t.boundingBox(),p=!0===a?l.reasons.highQuality:null;if(0!==d.w&&0!==d.h&&t.visible()&&(!r||Bn(d,r))){var g=t.isEdge(),f=t.element()._private.rscratch.badLine;o.drawElementUnderlay(e,t),o.drawCachedElementPortion(e,t,l,n,i,p,bd,Td),g&&f||o.drawCachedElementPortion(e,t,u,n,i,p,xd,_d),g&&!f&&(o.drawCachedElementPortion(e,t,c,n,i,p,wd,_d),o.drawCachedElementPortion(e,t,h,n,i,p,Ed,_d)),o.drawElementOverlay(e,t)}},md.drawElements=function(e,t){for(var n=this,r=0;r<t.length;r++){var i=t[r];n.drawElement(e,i)}},md.drawCachedElements=function(e,t,n,r){for(var i=this,a=0;a<t.length;a++){var o=t[a];i.drawCachedElement(e,o,n,r)}},md.drawCachedNodes=function(e,t,n,r){for(var i=this,a=0;a<t.length;a++){var o=t[a];o.isNode()&&i.drawCachedElement(e,o,n,r)}},md.drawLayeredElements=function(e,t,n,r){var i=this,a=i.data.lyrTxrCache.getLayers(t,n);if(a)for(var o=0;o<a.length;o++){var s=a[o],l=s.bb;0!==l.w&&0!==l.h&&e.drawImage(s.canvas,l.x1,l.y1,l.w,l.h)}else i.drawCachedElements(e,t,n,r)};var Dd={drawEdge:function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=a?t.pstyle("opacity").value:1,c=a?t.pstyle("line-opacity").value:1,h=t.pstyle("curve-style").value,d=t.pstyle("line-style").value,p=t.pstyle("width").pfValue,g=t.pstyle("line-cap").value,f=u*c,v=u*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;"straight-triangle"===h?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=p,e.lineCap=g,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,d),e.lineCap="butt")},m=function(){i&&o.drawEdgeOverlay(e,t)},b=function(){i&&o.drawEdgeUnderlay(e,t)},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)},w=function(){o.drawElementText(e,t,null,r)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var E=t.pstyle("ghost-offset-x").pfValue,T=t.pstyle("ghost-offset-y").pfValue,_=t.pstyle("ghost-opacity").value,D=f*_;e.translate(E,T),y(D),x(D),e.translate(-E,-T)}b(),y(),x(),m(),w(),n&&e.translate(l.x1,l.y1)}}},Cd=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,l[0],l[1],l[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};Dd.drawEdgeOverlay=Cd("overlay"),Dd.drawEdgeUnderlay=Cd("underlay"),Dd.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,l=this.usePaths(),u=e.pstyle("line-dash-pattern").pfValue,c=e.pstyle("line-dash-offset").pfValue;if(l){var h=n.join("$");a.pathCacheKey&&a.pathCacheKey===h?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=h,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=c;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var d=2;d+3<n.length;d+=4)t.quadraticCurveTo(n[d],n[d+1],n[d+2],n[d+3]);break;case"straight":case"segments":case"haystack":for(var p=2;p+1<n.length;p+=2)t.lineTo(n[p],n[p+1])}t=o,l?t.stroke(i):t.stroke(),t.setLineDash&&t.setLineDash([])},Dd.drawEdgeTrianglePath=function(e,t,n){t.fillStyle=t.strokeStyle;for(var r=e.pstyle("width").pfValue,i=0;i+1<n.length;i+=2){var a=[n[i+2]-n[i],n[i+3]-n[i+1]],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]),s=[a[1]/o,-a[0]/o],l=[s[0]*r/2,s[1]*r/2];t.beginPath(),t.moveTo(n[i]-l[0],n[i+1]-l[1]),t.lineTo(n[i]+l[0],n[i+1]+l[1]),t.lineTo(n[i+2],n[i+3]),t.closePath(),t.fill()}},Dd.drawArrowheads=function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n)},Dd.drawArrowhead=function(e,t,n,r,i,a,o){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(a)||null==a)){var s=this,l=t.pstyle(n+"-arrow-shape").value;if("none"!==l){var u="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,h=t.pstyle("width").pfValue,d=t.pstyle("opacity").value;void 0===o&&(o=d);var p=e.globalCompositeOperation;1===o&&"hollow"!==c||(e.globalCompositeOperation="destination-out",s.colorFillStyle(e,255,255,255,1),s.colorStrokeStyle(e,255,255,255,1),s.drawArrowShape(t,e,u,h,l,r,i,a),e.globalCompositeOperation=p);var g=t.pstyle(n+"-arrow-color").value;s.colorFillStyle(e,g[0],g[1],g[2],o),s.colorStrokeStyle(e,g[0],g[1],g[2],o),s.drawArrowShape(t,e,c,h,l,r,i,a)}}},Dd.drawArrowShape=function(e,t,n,r,i,a,o,s){var l,u=this,c=this.usePaths()&&"triangle-cross"!==i,h=!1,d=t,p={x:a,y:o},g=e.pstyle("arrow-scale").value,f=this.getArrowWidth(r,g),v=u.arrowShapes[i];if(c){var y=u.arrowPathCache=u.arrowPathCache||[],m=gt(i),b=y[m];null!=b?(l=t=b,h=!0):(l=t=new Path2D,y[m]=l)}h||(t.beginPath&&t.beginPath(),c?v.draw(t,1,0,{x:0,y:0},1):v.draw(t,f,s,p,r),t.closePath&&t.closePath()),t=d,c&&(t.translate(a,o),t.rotate(s),t.scale(f,f)),"filled"!==n&&"both"!==n||(c?t.fill(l):t.fill()),"hollow"!==n&&"both"!==n||(t.lineWidth=(v.matchEdgeWidth?r:1)/(c?f:1),t.lineJoin="miter",c?t.stroke(l):t.stroke()),c&&(t.scale(1/f,1/f),t.rotate(-s),t.translate(-a,-o))};var Nd={safeDrawImage:function(e,t,n,r,i,a,o,s,l,u){if(!(i<=0||a<=0||l<=0||u<=0))try{e.drawImage(t,n,r,i,a,o,s,l,u)}catch(c){Nt(c)}},drawInscribedImage:function(e,t,n,r,i){var a=this,o=n.position(),s=o.x,l=o.y,u=n.cy().style(),c=u.getIndexedStyle.bind(u),h=c(n,"background-fit","value",r),d=c(n,"background-repeat","value",r),p=n.width(),g=n.height(),f=2*n.padding(),v=p+("inner"===c(n,"background-width-relative-to","value",r)?0:f),y=g+("inner"===c(n,"background-height-relative-to","value",r)?0:f),m=n._private.rscratch,b="node"===c(n,"background-clip","value",r),x=c(n,"background-image-opacity","value",r)*i,w=c(n,"background-image-smoothing","value",r),E=t.width||t.cachedW,T=t.height||t.cachedH;null!=E&&null!=T||(document.body.appendChild(t),E=t.cachedW=t.width||t.offsetWidth,T=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var _=E,D=T;if("auto"!==c(n,"background-width","value",r)&&(_="%"===c(n,"background-width","units",r)?c(n,"background-width","pfValue",r)*v:c(n,"background-width","pfValue",r)),"auto"!==c(n,"background-height","value",r)&&(D="%"===c(n,"background-height","units",r)?c(n,"background-height","pfValue",r)*y:c(n,"background-height","pfValue",r)),0!==_&&0!==D){if("contain"===h)_*=C=Math.min(v/_,y/D),D*=C;else if("cover"===h){var C;_*=C=Math.max(v/_,y/D),D*=C}var N=s-v/2,A=c(n,"background-position-x","units",r),L=c(n,"background-position-x","pfValue",r);N+="%"===A?(v-_)*L:L;var S=c(n,"background-offset-x","units",r),O=c(n,"background-offset-x","pfValue",r);N+="%"===S?(v-_)*O:O;var I=l-y/2,k=c(n,"background-position-y","units",r),M=c(n,"background-position-y","pfValue",r);I+="%"===k?(y-D)*M:M;var P=c(n,"background-offset-y","units",r),R=c(n,"background-offset-y","pfValue",r);I+="%"===P?(y-D)*R:R,m.pathCache&&(N-=s,I-=l,s=0,l=0);var B=e.globalAlpha;e.globalAlpha=x;var F=a.getImgSmoothing(e),z=!1;if("no"===w&&F?(a.setImgSmoothing(e,!1),z=!0):"yes"!==w||F||(a.setImgSmoothing(e,!0),z=!0),"no-repeat"===d)b&&(e.save(),m.pathCache?e.clip(m.pathCache):(a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.clip())),a.safeDrawImage(e,t,0,0,E,T,N,I,_,D),b&&e.restore();else{var G=e.createPattern(t,d);e.fillStyle=G,a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.translate(N,I),e.fill(),e.translate(-N,-I)}e.globalAlpha=B,z&&a.setImgSmoothing(e,F)}}},Ad={};function Ld(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:5;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),e.fill()}Ad.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(xn(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},Ad.drawElementText=function(e,t,n,r,i){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var u=t.element()._private.rscratch.badLine,c=t.pstyle("label"),h=t.pstyle("source-label"),d=t.pstyle("target-label");if(u||(!c||!c.value)&&(!h||!h.value)&&(!d||!d.value))return;e.textAlign="center",e.textBaseline="bottom"}var p,g=!n;n&&(p=n,e.translate(-p.x1,-p.y1)),null==i?(o.drawText(e,t,null,g,a),t.isEdge()&&(o.drawText(e,t,"source",g,a),o.drawText(e,t,"target",g,a))):o.drawText(e,t,i,g,a),n&&e.translate(p.x1,p.y1)},Ad.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},Ad.setupTextStyle=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},Ad.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Ft(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Ad.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private.rscratch,o=i?t.effectiveOpacity():1;if(!i||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=Ft(a,"labelX",n),c=Ft(a,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,i);var d,p=n?n+"-":"",g=Ft(a,"labelWidth",n),f=Ft(a,"labelHeight",n),v=t.pstyle(p+"text-margin-x").pfValue,y=t.pstyle(p+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;switch(m&&(b="center",x="center"),u+=v,c+=y,0!==(d=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(d),u=0,c=0),x){case"top":break;case"center":c+=f/2;break;case"bottom":c+=f}var w=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,T=t.pstyle("text-border-width").pfValue,_=t.pstyle("text-background-padding").pfValue;if(w>0||T>0&&E>0){var D=u-_;switch(b){case"left":D-=g;break;case"center":D-=g/2}var C=c-f-_,N=g+2*_,A=f+2*_;if(w>0){var L=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+w*o+")",0===t.pstyle("text-background-shape").strValue.indexOf("round")?Ld(e,D,C,N,A,2):e.fillRect(D,C,N,A),e.fillStyle=L}if(T>0&&E>0){var O=e.strokeStyle,I=e.lineWidth,k=t.pstyle("text-border-color").value,M=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+k[0]+","+k[1]+","+k[2]+","+E*o+")",e.lineWidth=T,e.setLineDash)switch(M){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=T/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(D,C,N,A),"double"===M){var P=T/2;e.strokeRect(D+P,C+P,N-2*P,A-2*P)}e.setLineDash&&e.setLineDash([]),e.lineWidth=I,e.strokeStyle=O}}var R=2*t.pstyle("text-outline-width").pfValue;if(R>0&&(e.lineWidth=R),"wrap"===t.pstyle("text-wrap").value){var B=Ft(a,"labelWrapCachedLines",n),F=Ft(a,"labelLineHeight",n),z=g/2,G=this.getLabelJustification(t);switch("auto"===G||("left"===b?"left"===G?u+=-g:"center"===G&&(u+=-z):"center"===b?"left"===G?u+=-z:"right"===G&&(u+=z):"right"===b&&("center"===G?u+=z:"right"===G&&(u+=g))),x){case"top":case"center":case"bottom":c-=(B.length-1)*F}for(var Y=0;Y<B.length;Y++)R>0&&e.strokeText(B[Y],u,c),e.fillText(B[Y],u,c),c+=F}else R>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var Sd={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,h=t.position();if(_(h.x)&&_(h.y)&&(!s||t.visible())){var d,p,g=s?t.effectiveOpacity():1,f=l.usePaths(),v=!1,y=t.padding();r=t.width()+2*y,i=t.height()+2*y,n&&(p=n,e.translate(-p.x1,-p.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E<m.length;E++){var T=m[E];if(b[E]=null!=T&&"none"!==T){var D=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",E);w++,x[E]=l.getCachedImage(T,D,(function(){u.backgroundTimestamp=Date.now(),t.emitAndNotify("background")}))}}var C=t.pstyle("background-blacken").value,N=t.pstyle("border-width").pfValue,A=t.pstyle("background-opacity").value*g,L=t.pstyle("border-color").value,S=t.pstyle("border-style").value,O=t.pstyle("border-opacity").value*g;e.lineJoin="miter";var I=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:A;l.eleFillStyle(e,t,n)},k=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:O;l.colorStrokeStyle(e,L[0],L[1],L[2],t)},M=t.pstyle("shape").strValue,P=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var R=l.nodePathCache=l.nodePathCache||[],B=ft("polygon"===M?M+","+P.join(","):M,""+i,""+r),F=R[B];null!=F?(d=F,v=!0,c.pathCache=d):(d=new Path2D,R[B]=c.pathCache=d)}var z=function(){if(!v){var n=h;f&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(d||e,n.x,n.y,r,i)}f?e.fill(d):e.fill()},G=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=u.backgrounding,a=0,o=0;o<x.length;o++){var s=t.cy().style().getIndexedStyle(t,"background-image-containment","value",o);r&&"over"===s||!r&&"inside"===s?a++:b[o]&&x[o].complete&&!x[o].error&&(a++,l.drawInscribedImage(e,x[o],t,o,n))}u.backgrounding=!(a===w),i!==u.backgrounding&&t.updateStyle(!1)},Y=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;l.hasPie(t)&&(l.drawPie(e,t,a),n&&(f||l.nodeShapes[l.getNodeShape(t)].draw(e,h.x,h.y,r,i)))},X=function(){var t=(C>0?C:-C)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:g),n=C>0?0:255;0!==C&&(l.colorFillStyle(e,n,n,n,t),f?e.fill(d):e.fill())},V=function(){if(N>0){if(e.lineWidth=N,e.lineCap="butt",e.setLineDash)switch(S){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(d):e.stroke(),"double"===S){e.lineWidth=N/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},U=function(){o&&l.drawNodeOverlay(e,t,h,r,i)},j=function(){o&&l.drawNodeUnderlay(e,t,h,r,i)},H=function(){l.drawElementText(e,t,null,a)};if("yes"===t.pstyle("ghost").value){var q=t.pstyle("ghost-offset-x").pfValue,W=t.pstyle("ghost-offset-y").pfValue,$=t.pstyle("ghost-opacity").value,K=$*g;e.translate(q,W),I($*A),z(),G(K,!0),k($*O),V(),Y(0!==C||0!==N),G(K,!1),X(K),e.translate(-q,-W)}f&&e.translate(-h.x,-h.y),j(),f&&e.translate(h.x,h.y),I(),z(),G(g,!0),k(),V(),Y(0!==C||0!==N),G(g,!1),X(),f&&e.translate(-h.x,-h.y),H(),U(),n&&e.translate(p.x1,p.y1)}}},Od=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){var o=this;if(n.visible()){var s=n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-opacity")).value,u=n.pstyle("".concat(e,"-color")).value,c=n.pstyle("".concat(e,"-shape")).value;if(l>0){if(r=r||n.position(),null==i||null==a){var h=n.padding();i=n.width()+2*h,a=n.height()+2*h}o.colorFillStyle(t,u[0],u[1],u[2],l),o.nodeShapes[c].draw(t,r.x,r.y,i+2*s,a+2*s),t.fill()}}}};Sd.drawNodeOverlay=Od("overlay"),Sd.drawNodeUnderlay=Od("underlay"),Sd.hasPie=function(e){return(e=e[0])._private.hasPie},Sd.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,l=t.width(),u=t.height(),c=Math.min(l,u)/2,h=0;this.usePaths()&&(o=0,s=0),"%"===a.units?c*=a.pfValue:void 0!==a.pfValue&&(c=a.pfValue/2);for(var d=1;d<=i.pieBackgroundN;d++){var p=t.pstyle("pie-"+d+"-background-size").value,g=t.pstyle("pie-"+d+"-background-color").value,f=t.pstyle("pie-"+d+"-background-opacity").value*n,v=p/100;v+h>1&&(v=1-h);var y=1.5*Math.PI+2*Math.PI*h,m=y+2*Math.PI*v;0===p||h>=1||h+v>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,c,y,m),e.closePath(),this.colorFillStyle(e,g[0],g[1],g[2],f),e.fill(),h+=v)}};var Id={},kd=100;Id.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},Id.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},Id.createGradientStyleFor=function(e,t,n,r,i){var a,o=this.usePaths(),s=n.pstyle(t+"-gradient-stop-colors").value,l=n.pstyle(t+"-gradient-stop-positions").pfValue;if("radial-gradient"===r)if(n.isEdge()){var u=n.sourceEndpoint(),c=n.targetEndpoint(),h=n.midpoint(),d=En(u,h),p=En(c,h);a=e.createRadialGradient(h.x,h.y,0,h.x,h.y,Math.max(d,p))}else{var g=o?{x:0,y:0}:n.position(),f=n.paddedWidth(),v=n.paddedHeight();a=e.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(f,v))}else if(n.isEdge()){var y=n.sourceEndpoint(),m=n.targetEndpoint();a=e.createLinearGradient(y.x,y.y,m.x,m.y)}else{var b=o?{x:0,y:0}:n.position(),x=n.paddedWidth()/2,w=n.paddedHeight()/2;switch(n.pstyle("background-gradient-direction").value){case"to-bottom":a=e.createLinearGradient(b.x,b.y-w,b.x,b.y+w);break;case"to-top":a=e.createLinearGradient(b.x,b.y+w,b.x,b.y-w);break;case"to-left":a=e.createLinearGradient(b.x+x,b.y,b.x-x,b.y);break;case"to-right":a=e.createLinearGradient(b.x-x,b.y,b.x+x,b.y);break;case"to-bottom-right":case"to-right-bottom":a=e.createLinearGradient(b.x-x,b.y-w,b.x+x,b.y+w);break;case"to-top-right":case"to-right-top":a=e.createLinearGradient(b.x-x,b.y+w,b.x+x,b.y-w);break;case"to-bottom-left":case"to-left-bottom":a=e.createLinearGradient(b.x+x,b.y-w,b.x-x,b.y+w);break;case"to-top-left":case"to-left-top":a=e.createLinearGradient(b.x+x,b.y+w,b.x-x,b.y-w)}}if(!a)return null;for(var E=l.length===s.length,T=s.length,_=0;_<T;_++)a.addColorStop(E?l[_]:_/(T-1),"rgba("+s[_][0]+","+s[_][1]+","+s[_][2]+","+i+")");return a},Id.gradientFillStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"background",t,n,r);if(!i)return null;e.fillStyle=i},Id.colorFillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},Id.eleFillStyle=function(e,t,n){var r=t.pstyle("background-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientFillStyle(e,t,r,n);else{var i=t.pstyle("background-color").value;this.colorFillStyle(e,i[0],i[1],i[2],n)}},Id.gradientStrokeStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"line",t,n,r);if(!i)return null;e.strokeStyle=i},Id.colorStrokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},Id.eleStrokeStyle=function(e,t,n){var r=t.pstyle("line-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientStrokeStyle(e,t,r,n);else{var i=t.pstyle("line-color").value;this.colorStrokeStyle(e,i[0],i[1],i[2],n)}},Id.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],a=r[3],o=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(o=s);var l,u=i*o,c=a*o;if(u!==t.canvasWidth||c!==t.canvasHeight){t.fontCaches=null;var h=n.canvasContainer;h.style.width=i+"px",h.style.height=a+"px";for(var d=0;d<t.CANVAS_LAYERS;d++)(l=n.canvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";for(d=0;d<t.BUFFER_COUNT;d++)(l=n.bufferCanvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";t.textureMult=1,o<=1&&(l=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,l.width=u*t.textureMult,l.height=c*t.textureMult),t.canvasWidth=u,t.canvasHeight=c}},Id.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},Id.render=function(e){var t=(e=e||kt()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,i=e.forcedZoom,a=e.forcedPan,o=this,s=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,l=o.cy,u=o.data,c=u.canvasNeedsRedraw,h=o.textureOnViewport&&!t&&(o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming),d=void 0!==e.motionBlur?e.motionBlur:o.motionBlur,p=o.motionBlurPxRatio,g=l.hasCompoundNodes(),f=o.hoverData.draggingEles,v=!(!o.hoverData.selecting&&!o.touchData.selecting),y=d=d&&!t&&o.motionBlurEnabled&&!v;t||(o.prevPxRatio!==s&&(o.invalidateContainerClientCoordsCache(),o.matchCanvasSize(o.container),o.redrawHint("eles",!0),o.redrawHint("drag",!0)),o.prevPxRatio=s),!t&&o.motionBlurTimeout&&clearTimeout(o.motionBlurTimeout),d&&(null==o.mbFrames&&(o.mbFrames=0),o.mbFrames++,o.mbFrames<3&&(y=!1),o.mbFrames>o.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!h&&(c[o.NODE]=!0,c[o.SELECT_BOX]=!0);var m=l.style(),b=l.zoom(),x=void 0!==i?i:b,w=l.pan(),E={x:w.x,y:w.y},T={zoom:b,pan:{x:w.x,y:w.y}},_=o.prevViewport;void 0===_||T.zoom!==_.zoom||T.pan.x!==_.pan.x||T.pan.y!==_.pan.y||f&&!g||(o.motionBlurPxRatio=1),a&&(E=a),x*=s,E.x*=s,E.y*=s;var D=o.getCachedZSortedEles();function C(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function N(e,r){var s,l,c,h;o.clearingMotionBlur||e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=E,l=x,c=o.canvasWidth,h=o.canvasHeight):(s={x:w.x*p,y:w.y*p},l=b*p,c=o.canvasWidth*p,h=o.canvasHeight*p),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?C(e,0,0,c,h):t||void 0!==r&&!r||e.clearRect(0,0,c,h),n||(e.translate(s.x,s.y),e.scale(l,l)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(h||(o.textureDrawLastFrame=!1),h){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=l.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var A=o.data.bufferContexts[o.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(T=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-T.pan.x)/T.zoom,y:(0-T.pan.y)/T.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],S=o.textureCache.texture;T=o.textureCache.viewport,L.setTransform(1,0,0,1,0,0),d?C(L,0,0,T.width,T.height):L.clearRect(0,0,T.width,T.height);var O=m.core("outside-texture-bg-color").value,I=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,O[0],O[1],O[2],I),L.fillRect(0,0,T.width,T.height),b=l.zoom(),N(L,!1),L.clearRect(T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s),L.drawImage(S,T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var k=l.extent(),M=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&M,R=[];if(R[o.NODE]=!c[o.NODE]&&d&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,R[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),R[o.DRAG]=!c[o.DRAG]&&d&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,R[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),c[o.NODE]||n||r||R[o.NODE]){var B=d&&!R[o.NODE]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:u.contexts[o.NODE]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.nondrag,s,k):o.drawLayeredElements(L,D.nondrag,s,k),o.debug&&o.drawDebugPoints(L,D.nondrag),n||d||(c[o.NODE]=!1)}if(!r&&(c[o.DRAG]||n||R[o.DRAG])&&(B=d&&!R[o.DRAG]&&1!==p,N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:u.contexts[o.DRAG]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.drag,s,k):o.drawCachedElements(L,D.drag,s,k),o.debug&&o.drawDebugPoints(L,D.drag),n||d||(c[o.DRAG]=!1)),o.showFps||!r&&c[o.SELECT_BOX]&&!n){if(N(L=t||u.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){b=o.cy.zoom();var F=m.core("selection-box-border-width").value/b;L.lineWidth=F,L.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",L.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),F>0&&(L.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",L.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(u.bgActivePosistion&&!o.hoverData.selecting){b=o.cy.zoom();var z=u.bgActivePosistion;L.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",L.beginPath(),L.arc(z.x,z.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),L.fill()}var G=o.lastRedrawTime;if(o.showFps&&G){G=Math.round(G);var Y=Math.round(1e3/G);L.setTransform(1,0,0,1,0,0),L.fillStyle="rgba(255, 0, 0, 0.75)",L.strokeStyle="rgba(255, 0, 0, 0.75)",L.lineWidth=1,L.fillText("1 frame = "+G+" ms = "+Y+" fps",0,20);var X=60;L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/X,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var V=u.contexts[o.NODE],U=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],j=u.contexts[o.DRAG],H=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],q=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!y?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):C(e,0,0,o.canvasWidth,o.canvasHeight);var r=p;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(c[o.NODE]||R[o.NODE])&&(q(V,U,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(j,H,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=T,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),d&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!h,o.mbFrames=0,c[o.NODE]=!0,c[o.DRAG]=!0,o.redraw()}),kd)),t||l.emit("render")};for(var Md={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var l=1;l<a.length/2;l++)e.lineTo(t+o*a[2*l],n+s*a[2*l+1]);e.closePath()},drawRoundPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2,l=hr(r,i);e.beginPath&&e.beginPath();for(var u=0;u<a.length/4;u++){var c=void 0,h=void 0;c=0===u?a.length-2:4*u-2,h=4*u+2;var d=t+o*a[4*u],p=n+s*a[4*u+1],g=-a[c]*a[h]-a[c+1]*a[h+1],f=l/Math.tan(Math.acos(g)/2),v=d-f*a[c],y=p-f*a[c+1],m=d+f*a[h],b=p+f*a[h+1];0===u?e.moveTo(v,y):e.lineTo(v,y),e.arcTo(d,p,m,b,l)}e.closePath()},drawRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=cr(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.arcTo(t+a,n-o,t+a,n,s),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.arcTo(t-a,n-o,t,n-o,s),e.lineTo(t,n-o),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=cr(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.lineTo(t+a,n-o),e.lineTo(t+a,n),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.lineTo(t-a,n-o),e.lineTo(t,n-o),e.closePath()},drawCutRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=dr();e.beginPath&&e.beginPath(),e.moveTo(t-a+s,n-o),e.lineTo(t+a-s,n-o),e.lineTo(t+a,n-o+s),e.lineTo(t+a,n+o-s),e.lineTo(t+a-s,n+o),e.lineTo(t-a+s,n+o),e.lineTo(t-a,n+o-s),e.lineTo(t-a,n-o+s),e.closePath()},drawBarrelPath:function(e,t,n,r,i){var a=r/2,o=i/2,s=t-a,l=t+a,u=n-o,c=n+o,h=gr(r,i),d=h.widthOffset,p=h.heightOffset,g=h.ctrlPtOffsetPct*d;e.beginPath&&e.beginPath(),e.moveTo(s,u+p),e.lineTo(s,c-p),e.quadraticCurveTo(s+g,c,s+d,c),e.lineTo(l-d,c),e.quadraticCurveTo(l-g,c,l,c-p),e.lineTo(l,u+p),e.quadraticCurveTo(l-g,u,l-d,u),e.lineTo(s+d,u),e.quadraticCurveTo(s+g,u,s,u+p),e.closePath()}},Pd=Math.sin(0),Rd=Math.cos(0),Bd={},Fd={},zd=Math.PI/40,Gd=0*Math.PI;Gd<2*Math.PI;Gd+=zd)Bd[Gd]=Math.sin(Gd),Fd[Gd]=Math.cos(Gd);Md.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var a,o,s=r/2,l=i/2,u=0*Math.PI;u<2*Math.PI;u+=zd)a=t-s*Bd[u]*Pd+s*Fd[u]*Rd,o=n+l*Fd[u]*Pd+l*Bd[u]*Rd,0===u?e.moveTo(a,o):e.lineTo(a,o);e.closePath()};var Yd={};function Xd(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),a=0;a<n.length;a++)i[a]=n.charCodeAt(a);return new Blob([r],{type:t})}function Vd(e){var t=e.indexOf(",");return e.substr(t+1)}function Ud(e,t,n){var r=function(){return t.toDataURL(n,e.quality)};switch(e.output){case"blob-promise":return new Gi((function(r,i){try{t.toBlob((function(e){null!=e?r(e):i(new Error("`canvas.toBlob()` sent a null value in its callback"))}),n,e.quality)}catch(a){i(a)}}));case"blob":return Xd(Vd(r()),n);case"base64":return Vd(r());default:return r()}}Yd.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},Yd.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),r=this.findContainerClientCoords(),i=e.full?Math.ceil(n.w):r[2],a=e.full?Math.ceil(n.h):r[3],o=_(e.maxWidth)||_(e.maxHeight),s=this.getPixelRatio(),l=1;if(void 0!==e.scale)i*=e.scale,a*=e.scale,l=e.scale;else if(o){var u=1/0,c=1/0;_(e.maxWidth)&&(u=l*e.maxWidth/i),_(e.maxHeight)&&(c=l*e.maxHeight/a),i*=l=Math.min(u,c),a*=l}o||(i*=s,a*=s,l*=s);var h=document.createElement("canvas");h.width=i,h.height=a,h.style.width=i+"px",h.style.height=a+"px";var d=h.getContext("2d");if(i>0&&a>0){d.clearRect(0,0,i,a),d.globalCompositeOperation="source-over";var p=this.getCachedZSortedEles();if(e.full)d.translate(-n.x1*l,-n.y1*l),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(n.x1*l,n.y1*l);else{var g=t.pan(),f={x:g.x*l,y:g.y*l};l*=t.zoom(),d.translate(f.x,f.y),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(-f.x,-f.y)}e.bg&&(d.globalCompositeOperation="destination-over",d.fillStyle=e.bg,d.rect(0,0,i,a),d.fill())}return h},Yd.png=function(e){return Ud(e,this.bufferCanvasImage(e),"image/png")},Yd.jpg=function(e){return Ud(e,this.bufferCanvasImage(e),"image/jpeg")};var jd={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},Hd=Wd,qd=Wd.prototype;function Wd(e){var t=this;t.data={canvases:new Array(qd.CANVAS_LAYERS),contexts:new Array(qd.CANVAS_LAYERS),canvasNeedsRedraw:new Array(qd.CANVAS_LAYERS),bufferCanvases:new Array(qd.BUFFER_COUNT),bufferContexts:new Array(qd.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};B()&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s<qd.CANVAS_LAYERS;s++){var l=t.data.canvases[s]=document.createElement("canvas");t.data.contexts[s]=l.getContext("2d"),Object.keys(o).forEach((function(e){l.style[e]=o[e]})),l.style.position="absolute",l.setAttribute("data-id","layer"+s),l.style.zIndex=String(qd.CANVAS_LAYERS-s),t.data.canvasContainer.appendChild(l),t.data.canvasNeedsRedraw[s]=!1}for(t.data.topCanvas=t.data.canvases[0],t.data.canvases[qd.NODE].setAttribute("data-id","layer"+qd.NODE+"-node"),t.data.canvases[qd.SELECT_BOX].setAttribute("data-id","layer"+qd.SELECT_BOX+"-selectbox"),t.data.canvases[qd.DRAG].setAttribute("data-id","layer"+qd.DRAG+"-drag"),s=0;s<qd.BUFFER_COUNT;s++)t.data.bufferCanvases[s]=document.createElement("canvas"),t.data.bufferContexts[s]=t.data.bufferCanvases[s].getContext("2d"),t.data.bufferCanvases[s].style.position="absolute",t.data.bufferCanvases[s].setAttribute("data-id","buffer"+s),t.data.bufferCanvases[s].style.zIndex=String(-s-1),t.data.bufferCanvases[s].style.visibility="hidden";t.pathsEnabled=!0;var u=Ln(),c=function(e){return{x:(e.x1+e.x2)/2,y:(e.y1+e.y2)/2}},h=function(e){return{x:-e.w/2,y:-e.h/2}},d=function(e){var t=e[0]._private;return!(t.oldBackgroundTimestamp===t.backgroundTimestamp)},p=function(e){return e[0]._private.nodeKey},g=function(e){return e[0]._private.labelStyleKey},f=function(e){return e[0]._private.sourceLabelStyleKey},v=function(e){return e[0]._private.targetLabelStyleKey},y=function(e,n,r,i,a){return t.drawElement(e,n,r,!1,!1,a)},m=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"main",a)},b=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"source",a)},x=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"target",a)},w=function(e){return e.boundingBox(),e[0]._private.bodyBounds},E=function(e){return e.boundingBox(),e[0]._private.labelBounds.main||u},T=function(e){return e.boundingBox(),e[0]._private.labelBounds.source||u},_=function(e){return e.boundingBox(),e[0]._private.labelBounds.target||u},D=function(e,t){return t},C=function(e){return c(w(e))},N=function(e,t,n){var r=e?e+"-":"";return{x:t.x+n.pstyle(r+"text-margin-x").pfValue,y:t.y+n.pstyle(r+"text-margin-y").pfValue}},A=function(e,t,n){var r=e[0]._private.rscratch;return{x:r[t],y:r[n]}},L=function(e){return N("",A(e,"labelX","labelY"),e)},S=function(e){return N("source",A(e,"sourceLabelX","sourceLabelY"),e)},O=function(e){return N("target",A(e,"targetLabelX","targetLabelY"),e)},I=function(e){return h(w(e))},k=function(e){return h(T(e))},M=function(e){return h(_(e))},P=function(e){var t=E(e),n=h(E(e));if(e.isNode()){switch(e.pstyle("text-halign").value){case"left":n.x=-t.w;break;case"right":n.x=0}switch(e.pstyle("text-valign").value){case"top":n.y=-t.h;break;case"bottom":n.y=0}}return n},R=t.data.eleTxrCache=new jh(t,{getKey:p,doesEleInvalidateKey:d,drawElement:y,getBoundingBox:w,getRotationPoint:C,getRotationOffset:I,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),F=t.data.lblTxrCache=new jh(t,{getKey:g,drawElement:m,getBoundingBox:E,getRotationPoint:L,getRotationOffset:P,isVisible:D}),z=t.data.slbTxrCache=new jh(t,{getKey:f,drawElement:b,getBoundingBox:T,getRotationPoint:S,getRotationOffset:k,isVisible:D}),G=t.data.tlbTxrCache=new jh(t,{getKey:v,drawElement:x,getBoundingBox:_,getRotationPoint:O,getRotationOffset:M,isVisible:D}),Y=t.data.lyrTxrCache=new sd(t);t.onUpdateEleCalcs((function(e,t){R.invalidateElements(t),F.invalidateElements(t),z.invalidateElements(t),G.invalidateElements(t),Y.invalidateElements(t);for(var n=0;n<t.length;n++){var r=t[n]._private;r.oldBackgroundTimestamp=r.backgroundTimestamp}}));var X=function(e){for(var t=0;t<e.length;t++)Y.enqueueElementRefinement(e[t].ele)};R.onDequeue(X),F.onDequeue(X),z.onDequeue(X),G.onDequeue(X)}qd.CANVAS_LAYERS=3,qd.SELECT_BOX=0,qd.DRAG=1,qd.NODE=2,qd.BUFFER_COUNT=3,qd.TEXTURE_BUFFER=0,qd.MOTIONBLUR_BUFFER_NODE=1,qd.MOTIONBLUR_BUFFER_DRAG=2,qd.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[qd.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[qd.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[qd.SELECT_BOX]=t}};var $d="undefined"!=typeof Path2D;qd.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},qd.usePaths=function(){return $d&&this.pathsEnabled},qd.setImgSmoothing=function(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)},qd.getImgSmoothing=function(e){return null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled},qd.makeOffscreenCanvas=function(t,n){var r;return"undefined"!==("undefined"==typeof OffscreenCanvas?"undefined":e(OffscreenCanvas))?r=new OffscreenCanvas(t,n):((r=document.createElement("canvas")).width=t,r.height=n),r},[dd,md,Dd,Nd,Ad,Sd,Id,Md,Yd,jd].forEach((function(e){Q(qd,e)}));var Kd=[{type:"layout",extensions:qc},{type:"renderer",extensions:[{name:"null",impl:Wc},{name:"base",impl:xh},{name:"canvas",impl:Hd}]}],Zd={},Qd={};function Jd(e,t,n){var r=n,i=function(n){Nt("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(ac.prototype[t])return i(t);ac.prototype[t]=n}else if("collection"===e){if(bu.prototype[t])return i(t);bu.prototype[t]=n}else if("layout"===e){for(var a=function(e){this.options=e,n.call(this,e),E(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},o=a.prototype=Object.create(n.prototype),s=[],l=0;l<s.length;l++){var u=s[l];o[u]=o[u]||function(){return this}}o.start&&!o.run?o.run=function(){return this.start(),this}:!o.start&&o.run&&(o.start=function(){return this.run(),this});var c=n.prototype.stop;o.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return c?c.call(this):this.emit("layoutstop"),this},o.destroy||(o.destroy=function(){return this}),o.cy=function(){return this._private.cy};var h=function(e){return e._private.cy},d={addEventFields:function(e,t){t.layout=e,t.cy=h(e),t.target=e},bubble:function(){return!0},parent:function(e){return h(e)}};Q(o,{createEmitter:function(){return this._private.emitter=new Rl(d,this),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),hs.eventAliasesOn(o),r=a}else if("renderer"===e&&"null"!==t&&"base"!==t){var p=ep("renderer","base"),g=p.prototype,f=n,v=n.prototype,y=function(){p.apply(this,arguments),f.apply(this,arguments)},m=y.prototype;for(var b in g){var x=g[b];if(null!=v[b])return i(b);m[b]=x}for(var w in v)m[w]=v[w];g.clientFunctions.forEach((function(e){m[e]=m[e]||function(){Dt("Renderer does not implement `renderer."+e+"()` on its prototype")}})),r=y}else if("__proto__"===e||"constructor"===e||"prototype"===e)return Dt(e+" is an illegal type to be registered, possibly lead to prototype pollutions");return ae({map:Zd,keys:[e,t],value:r})}function ep(e,t){return oe({map:Zd,keys:[e,t]})}function tp(e,t,n,r,i){return ae({map:Qd,keys:[e,t,n,r],value:i})}function np(e,t,n,r){return oe({map:Qd,keys:[e,t,n,r]})}var rp=function(){return 2===arguments.length?ep.apply(null,arguments):3===arguments.length?Jd.apply(null,arguments):4===arguments.length?np.apply(null,arguments):5===arguments.length?tp.apply(null,arguments):void Dt("Invalid extension access syntax")};ac.prototype.extension=rp,Kd.forEach((function(e){e.extensions.forEach((function(t){Jd(e.type,t.name,t.impl)}))}));var ip=function e(){if(!(this instanceof e))return new e;this.length=0},ap=ip.prototype;ap.instanceString=function(){return"stylesheet"},ap.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},ap.css=function(e,t){var n=this.length-1;if(b(e))this[n].properties.push({name:e,value:t});else if(E(e))for(var r=e,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a],s=r[o];if(null!=s){var l=Ju.properties[o]||Ju.properties[G(o)];if(null!=l){var u=l.name,c=s;this[n].properties.push({name:u,value:c})}}}return this},ap.style=ap.css,ap.generateStyle=function(e){var t=new Ju(e);return this.appendToStyle(t)},ap.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var a=0;a<i.length;a++){var o=i[a];e.css(o.name,o.value)}}return e};var op="3.24.0",sp=function(e){return void 0===e&&(e={}),E(e)?new ac(e):b(e)?rp.apply(rp,arguments):void 0};return sp.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(sp),e.apply(null,t),this},sp.warnings=function(e){return Ct(e)},sp.version=op,sp.stylesheet=sp.Stylesheet=ip,sp}()},2241:function(e){var t;t=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=26)}([function(e,t,n){"use strict";function r(){}r.QUALITY=1,r.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,r.DEFAULT_INCREMENTAL=!1,r.DEFAULT_ANIMATION_ON_LAYOUT=!0,r.DEFAULT_ANIMATION_DURING_LAYOUT=!1,r.DEFAULT_ANIMATION_PERIOD=50,r.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,r.DEFAULT_GRAPH_MARGIN=15,r.NODE_DIMENSIONS_INCLUDE_LABELS=!1,r.SIMPLE_NODE_SIZE=40,r.SIMPLE_NODE_HALF_SIZE=r.SIMPLE_NODE_SIZE/2,r.EMPTY_COMPOUND_NODE_SIZE=40,r.MIN_EDGE_LENGTH=1,r.WORLD_BOUNDARY=1e6,r.INITIAL_WORLD_BOUNDARY=r.WORLD_BOUNDARY/1e3,r.WORLD_CENTER_X=1200,r.WORLD_CENTER_Y=900,e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(8),a=n(9);function o(e,t,n){r.call(this,n),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=n,this.bendpoints=[],this.source=e,this.target=t}for(var s in o.prototype=Object.create(r.prototype),r)o[s]=r[s];o.prototype.getSource=function(){return this.source},o.prototype.getTarget=function(){return this.target},o.prototype.isInterGraph=function(){return this.isInterGraph},o.prototype.getLength=function(){return this.length},o.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},o.prototype.getBendpoints=function(){return this.bendpoints},o.prototype.getLca=function(){return this.lca},o.prototype.getSourceInLca=function(){return this.sourceInLca},o.prototype.getTargetInLca=function(){return this.targetInLca},o.prototype.getOtherEnd=function(e){if(this.source===e)return this.target;if(this.target===e)return this.source;throw"Node is not incident with this edge"},o.prototype.getOtherEndInGraph=function(e,t){for(var n=this.getOtherEnd(e),r=t.getGraphManager().getRoot();;){if(n.getOwner()==t)return n;if(n.getOwner()==r)break;n=n.getOwner().getParent()}return null},o.prototype.updateLength=function(){var e=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),e),this.isOverlapingSourceAndTarget||(this.lengthX=e[0]-e[2],this.lengthY=e[1]-e[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},o.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},e.exports=o},function(e,t,n){"use strict";e.exports=function(e){this.vGraphObject=e}},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(13),o=n(0),s=n(16),l=n(4);function u(e,t,n,o){null==n&&null==o&&(o=t),r.call(this,o),null!=e.graphManager&&(e=e.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=o,this.edges=[],this.graphManager=e,this.rect=null!=n&&null!=t?new a(t.x,t.y,n.width,n.height):new a}for(var c in u.prototype=Object.create(r.prototype),r)u[c]=r[c];u.prototype.getEdges=function(){return this.edges},u.prototype.getChild=function(){return this.child},u.prototype.getOwner=function(){return this.owner},u.prototype.getWidth=function(){return this.rect.width},u.prototype.setWidth=function(e){this.rect.width=e},u.prototype.getHeight=function(){return this.rect.height},u.prototype.setHeight=function(e){this.rect.height=e},u.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},u.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},u.prototype.getCenter=function(){return new l(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},u.prototype.getLocation=function(){return new l(this.rect.x,this.rect.y)},u.prototype.getRect=function(){return this.rect},u.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},u.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},u.prototype.setRect=function(e,t){this.rect.x=e.x,this.rect.y=e.y,this.rect.width=t.width,this.rect.height=t.height},u.prototype.setCenter=function(e,t){this.rect.x=e-this.rect.width/2,this.rect.y=t-this.rect.height/2},u.prototype.setLocation=function(e,t){this.rect.x=e,this.rect.y=t},u.prototype.moveBy=function(e,t){this.rect.x+=e,this.rect.y+=t},u.prototype.getEdgeListToNode=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.target==e){if(r.source!=n)throw"Incorrect edge source!";t.push(r)}})),t},u.prototype.getEdgesBetween=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.source!=n&&r.target!=n)throw"Incorrect edge source and/or target";r.target!=e&&r.source!=e||t.push(r)})),t},u.prototype.getNeighborsList=function(){var e=new Set,t=this;return t.edges.forEach((function(n){if(n.source==t)e.add(n.target);else{if(n.target!=t)throw"Incorrect incidency!";e.add(n.source)}})),e},u.prototype.withChildren=function(){var e=new Set;if(e.add(this),null!=this.child)for(var t=this.child.getNodes(),n=0;n<t.length;n++)t[n].withChildren().forEach((function(t){e.add(t)}));return e},u.prototype.getNoOfChildren=function(){var e=0;if(null==this.child)e=1;else for(var t=this.child.getNodes(),n=0;n<t.length;n++)e+=t[n].getNoOfChildren();return 0==e&&(e=1),e},u.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},u.prototype.calcEstimatedSize=function(){return null==this.child?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},u.prototype.scatter=function(){var e,t,n=-o.INITIAL_WORLD_BOUNDARY,r=o.INITIAL_WORLD_BOUNDARY;e=o.WORLD_CENTER_X+s.nextDouble()*(r-n)+n;var i=-o.INITIAL_WORLD_BOUNDARY,a=o.INITIAL_WORLD_BOUNDARY;t=o.WORLD_CENTER_Y+s.nextDouble()*(a-i)+i,this.rect.x=e,this.rect.y=t},u.prototype.updateBounds=function(){if(null==this.getChild())throw"assert failed";if(0!=this.getChild().getNodes().length){var e=this.getChild();if(e.updateBounds(!0),this.rect.x=e.getLeft(),this.rect.y=e.getTop(),this.setWidth(e.getRight()-e.getLeft()),this.setHeight(e.getBottom()-e.getTop()),o.NODE_DIMENSIONS_INCLUDE_LABELS){var t=e.getRight()-e.getLeft(),n=e.getBottom()-e.getTop();this.labelWidth>t&&(this.rect.x-=(this.labelWidth-t)/2,this.setWidth(this.labelWidth)),this.labelHeight>n&&("center"==this.labelPos?this.rect.y-=(this.labelHeight-n)/2:"top"==this.labelPos&&(this.rect.y-=this.labelHeight-n),this.setHeight(this.labelHeight))}}},u.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},u.prototype.transform=function(e){var t=this.rect.x;t>o.WORLD_BOUNDARY?t=o.WORLD_BOUNDARY:t<-o.WORLD_BOUNDARY&&(t=-o.WORLD_BOUNDARY);var n=this.rect.y;n>o.WORLD_BOUNDARY?n=o.WORLD_BOUNDARY:n<-o.WORLD_BOUNDARY&&(n=-o.WORLD_BOUNDARY);var r=new l(t,n),i=e.inverseTransformPoint(r);this.setLocation(i.x,i.y)},u.prototype.getLeft=function(){return this.rect.x},u.prototype.getRight=function(){return this.rect.x+this.rect.width},u.prototype.getTop=function(){return this.rect.y},u.prototype.getBottom=function(){return this.rect.y+this.rect.height},u.prototype.getParent=function(){return null==this.owner?null:this.owner.getParent()},e.exports=u},function(e,t,n){"use strict";function r(e,t){null==e&&null==t?(this.x=0,this.y=0):(this.x=e,this.y=t)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.setX=function(e){this.x=e},r.prototype.setY=function(e){this.y=e},r.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},r.prototype.getCopy=function(){return new r(this.x,this.y)},r.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(0),o=n(6),s=n(3),l=n(1),u=n(13),c=n(12),h=n(11);function d(e,t,n){r.call(this,n),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=e,null!=t&&t instanceof o?this.graphManager=t:null!=t&&t instanceof Layout&&(this.graphManager=t.graphManager)}for(var p in d.prototype=Object.create(r.prototype),r)d[p]=r[p];d.prototype.getNodes=function(){return this.nodes},d.prototype.getEdges=function(){return this.edges},d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getParent=function(){return this.parent},d.prototype.getLeft=function(){return this.left},d.prototype.getRight=function(){return this.right},d.prototype.getTop=function(){return this.top},d.prototype.getBottom=function(){return this.bottom},d.prototype.isConnected=function(){return this.isConnected},d.prototype.add=function(e,t,n){if(null==t&&null==n){var r=e;if(null==this.graphManager)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(r)>-1)throw"Node already in graph!";return r.owner=this,this.getNodes().push(r),r}var i=e;if(!(this.getNodes().indexOf(t)>-1&&this.getNodes().indexOf(n)>-1))throw"Source or target not in graph!";if(t.owner!=n.owner||t.owner!=this)throw"Both owners must be this graph!";return t.owner!=n.owner?null:(i.source=t,i.target=n,i.isInterGraph=!1,this.getEdges().push(i),t.edges.push(i),n!=t&&n.edges.push(i),i)},d.prototype.remove=function(e){var t=e;if(e instanceof s){if(null==t)throw"Node is null!";if(null==t.owner||t.owner!=this)throw"Owner graph is invalid!";if(null==this.graphManager)throw"Owner graph manager is invalid!";for(var n=t.edges.slice(),r=n.length,i=0;i<r;i++)(a=n[i]).isInterGraph?this.graphManager.remove(a):a.source.owner.remove(a);if(-1==(o=this.nodes.indexOf(t)))throw"Node not in owner node list!";this.nodes.splice(o,1)}else if(e instanceof l){var a;if(null==(a=e))throw"Edge is null!";if(null==a.source||null==a.target)throw"Source and/or target is null!";if(null==a.source.owner||null==a.target.owner||a.source.owner!=this||a.target.owner!=this)throw"Source and/or target owner is invalid!";var o,u=a.source.edges.indexOf(a),c=a.target.edges.indexOf(a);if(!(u>-1&&c>-1))throw"Source and/or target doesn't know this edge!";if(a.source.edges.splice(u,1),a.target!=a.source&&a.target.edges.splice(c,1),-1==(o=a.source.owner.getEdges().indexOf(a)))throw"Not in owner's edge list!";a.source.owner.getEdges().splice(o,1)}},d.prototype.updateLeftTop=function(){for(var e,t,n,r=i.MAX_VALUE,a=i.MAX_VALUE,o=this.getNodes(),s=o.length,l=0;l<s;l++){var u=o[l];r>(e=u.getTop())&&(r=e),a>(t=u.getLeft())&&(a=t)}return r==i.MAX_VALUE?null:(n=null!=o[0].getParent().paddingLeft?o[0].getParent().paddingLeft:this.margin,this.left=a-n,this.top=r-n,new c(this.left,this.top))},d.prototype.updateBounds=function(e){for(var t,n,r,a,o,s=i.MAX_VALUE,l=-i.MAX_VALUE,c=i.MAX_VALUE,h=-i.MAX_VALUE,d=this.nodes,p=d.length,g=0;g<p;g++){var f=d[g];e&&null!=f.child&&f.updateBounds(),s>(t=f.getLeft())&&(s=t),l<(n=f.getRight())&&(l=n),c>(r=f.getTop())&&(c=r),h<(a=f.getBottom())&&(h=a)}var v=new u(s,c,l-s,h-c);s==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),o=null!=d[0].getParent().paddingLeft?d[0].getParent().paddingLeft:this.margin,this.left=v.x-o,this.right=v.x+v.width+o,this.top=v.y-o,this.bottom=v.y+v.height+o},d.calculateBounds=function(e){for(var t,n,r,a,o=i.MAX_VALUE,s=-i.MAX_VALUE,l=i.MAX_VALUE,c=-i.MAX_VALUE,h=e.length,d=0;d<h;d++){var p=e[d];o>(t=p.getLeft())&&(o=t),s<(n=p.getRight())&&(s=n),l>(r=p.getTop())&&(l=r),c<(a=p.getBottom())&&(c=a)}return new u(o,l,s-o,c-l)},d.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},d.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},d.prototype.calcEstimatedSize=function(){for(var e=0,t=this.nodes,n=t.length,r=0;r<n;r++)e+=t[r].calcEstimatedSize();return this.estimatedSize=0==e?a.EMPTY_COMPOUND_NODE_SIZE:e/Math.sqrt(this.nodes.length),this.estimatedSize},d.prototype.updateConnected=function(){var e=this;if(0!=this.nodes.length){var t,n,r=new h,i=new Set,a=this.nodes[0];for(a.withChildren().forEach((function(e){r.push(e),i.add(e)}));0!==r.length;)for(var o=(t=(a=r.shift()).getEdges()).length,s=0;s<o;s++)null==(n=t[s].getOtherEndInGraph(a,this))||i.has(n)||n.withChildren().forEach((function(e){r.push(e),i.add(e)}));if(this.isConnected=!1,i.size>=this.nodes.length){var l=0;i.forEach((function(t){t.owner==e&&l++})),l==this.nodes.length&&(this.isConnected=!0)}}else this.isConnected=!0},e.exports=d},function(e,t,n){"use strict";var r,i=n(1);function a(e){r=n(5),this.layout=e,this.graphs=[],this.edges=[]}a.prototype.addRoot=function(){var e=this.layout.newGraph(),t=this.layout.newNode(null),n=this.add(e,t);return this.setRootGraph(n),this.rootGraph},a.prototype.add=function(e,t,n,r,i){if(null==n&&null==r&&null==i){if(null==e)throw"Graph is null!";if(null==t)throw"Parent node is null!";if(this.graphs.indexOf(e)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(e),null!=e.parent)throw"Already has a parent!";if(null!=t.child)throw"Already has a child!";return e.parent=t,t.child=e,e}i=n,n=e;var a=(r=t).getOwner(),o=i.getOwner();if(null==a||a.getGraphManager()!=this)throw"Source not in this graph mgr!";if(null==o||o.getGraphManager()!=this)throw"Target not in this graph mgr!";if(a==o)return n.isInterGraph=!1,a.add(n,r,i);if(n.isInterGraph=!0,n.source=r,n.target=i,this.edges.indexOf(n)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(n),null==n.source||null==n.target)throw"Edge source and/or target is null!";if(-1!=n.source.edges.indexOf(n)||-1!=n.target.edges.indexOf(n))throw"Edge already in source and/or target incidency list!";return n.source.edges.push(n),n.target.edges.push(n),n},a.prototype.remove=function(e){if(e instanceof r){var t=e;if(t.getGraphManager()!=this)throw"Graph not in this graph mgr";if(t!=this.rootGraph&&(null==t.parent||t.parent.graphManager!=this))throw"Invalid parent node!";for(var n,a=[],o=(a=a.concat(t.getEdges())).length,s=0;s<o;s++)n=a[s],t.remove(n);var l,u=[];for(o=(u=u.concat(t.getNodes())).length,s=0;s<o;s++)l=u[s],t.remove(l);t==this.rootGraph&&this.setRootGraph(null);var c=this.graphs.indexOf(t);this.graphs.splice(c,1),t.parent=null}else if(e instanceof i){if(null==(n=e))throw"Edge is null!";if(!n.isInterGraph)throw"Not an inter-graph edge!";if(null==n.source||null==n.target)throw"Source and/or target is null!";if(-1==n.source.edges.indexOf(n)||-1==n.target.edges.indexOf(n))throw"Source and/or target doesn't know this edge!";if(c=n.source.edges.indexOf(n),n.source.edges.splice(c,1),c=n.target.edges.indexOf(n),n.target.edges.splice(c,1),null==n.source.owner||null==n.source.owner.getGraphManager())throw"Edge owner graph or owner graph manager is null!";if(-1==n.source.owner.getGraphManager().edges.indexOf(n))throw"Not in owner graph manager's edge list!";c=n.source.owner.getGraphManager().edges.indexOf(n),n.source.owner.getGraphManager().edges.splice(c,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(null==this.allNodes){for(var e=[],t=this.getGraphs(),n=t.length,r=0;r<n;r++)e=e.concat(t[r].getNodes());this.allNodes=e}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(null==this.allEdges){for(var e=[],t=this.getGraphs(),n=(t.length,0);n<t.length;n++)e=e.concat(t[n].getEdges());e=e.concat(this.edges),this.allEdges=e}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(e){if(null!=this.allNodesToApplyGravitation)throw"assert failed";this.allNodesToApplyGravitation=e},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(e){if(e.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=e,null==e.parent&&(e.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(e,t){if(null==e||null==t)throw"assert failed";if(e==t)return!0;for(var n,r=e.getOwner();null!=(n=r.getParent());){if(n==t)return!0;if(null==(r=n.getOwner()))break}for(r=t.getOwner();null!=(n=r.getParent());){if(n==e)return!0;if(null==(r=n.getOwner()))break}return!1},a.prototype.calcLowestCommonAncestors=function(){for(var e,t,n,r,i,a=this.getAllEdges(),o=a.length,s=0;s<o;s++)if(t=(e=a[s]).source,n=e.target,e.lca=null,e.sourceInLca=t,e.targetInLca=n,t!=n){for(r=t.getOwner();null==e.lca;){for(e.targetInLca=n,i=n.getOwner();null==e.lca;){if(i==r){e.lca=i;break}if(i==this.rootGraph)break;if(null!=e.lca)throw"assert failed";e.targetInLca=i.getParent(),i=e.targetInLca.getOwner()}if(r==this.rootGraph)break;null==e.lca&&(e.sourceInLca=r.getParent(),r=e.sourceInLca.getOwner())}if(null==e.lca)throw"assert failed"}else e.lca=t.getOwner()},a.prototype.calcLowestCommonAncestor=function(e,t){if(e==t)return e.getOwner();for(var n=e.getOwner();null!=n;){for(var r=t.getOwner();null!=r;){if(r==n)return r;r=r.getParent().getOwner()}n=n.getParent().getOwner()}return n},a.prototype.calcInclusionTreeDepths=function(e,t){var n;null==e&&null==t&&(e=this.rootGraph,t=1);for(var r=e.getNodes(),i=r.length,a=0;a<i;a++)(n=r[a]).inclusionTreeDepth=t,null!=n.child&&this.calcInclusionTreeDepths(n.child,t+1)},a.prototype.includesInvalidEdge=function(){for(var e,t=this.edges.length,n=0;n<t;n++)if(e=this.edges[n],this.isOneAncestorOfOther(e.source,e.target))return!0;return!1},e.exports=a},function(e,t,n){"use strict";var r=n(0);function i(){}for(var a in r)i[a]=r[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=3*i.MAX_NODE_DISPLACEMENT_INCREMENTAL,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,e.exports=i},function(e,t,n){"use strict";var r=n(12);function i(){}i.calcSeparationAmount=function(e,t,n,r){if(!e.intersects(t))throw"assert failed";var i=new Array(2);this.decideDirectionsForOverlappingNodes(e,t,i),n[0]=Math.min(e.getRight(),t.getRight())-Math.max(e.x,t.x),n[1]=Math.min(e.getBottom(),t.getBottom())-Math.max(e.y,t.y),e.getX()<=t.getX()&&e.getRight()>=t.getRight()?n[0]+=Math.min(t.getX()-e.getX(),e.getRight()-t.getRight()):t.getX()<=e.getX()&&t.getRight()>=e.getRight()&&(n[0]+=Math.min(e.getX()-t.getX(),t.getRight()-e.getRight())),e.getY()<=t.getY()&&e.getBottom()>=t.getBottom()?n[1]+=Math.min(t.getY()-e.getY(),e.getBottom()-t.getBottom()):t.getY()<=e.getY()&&t.getBottom()>=e.getBottom()&&(n[1]+=Math.min(e.getY()-t.getY(),t.getBottom()-e.getBottom()));var a=Math.abs((t.getCenterY()-e.getCenterY())/(t.getCenterX()-e.getCenterX()));t.getCenterY()===e.getCenterY()&&t.getCenterX()===e.getCenterX()&&(a=1);var o=a*n[0],s=n[1]/a;n[0]<s?s=n[0]:o=n[1],n[0]=-1*i[0]*(s/2+r),n[1]=-1*i[1]*(o/2+r)},i.decideDirectionsForOverlappingNodes=function(e,t,n){e.getCenterX()<t.getCenterX()?n[0]=-1:n[0]=1,e.getCenterY()<t.getCenterY()?n[1]=-1:n[1]=1},i.getIntersection2=function(e,t,n){var r=e.getCenterX(),i=e.getCenterY(),a=t.getCenterX(),o=t.getCenterY();if(e.intersects(t))return n[0]=r,n[1]=i,n[2]=a,n[3]=o,!0;var s=e.getX(),l=e.getY(),u=e.getRight(),c=e.getX(),h=e.getBottom(),d=e.getRight(),p=e.getWidthHalf(),g=e.getHeightHalf(),f=t.getX(),v=t.getY(),y=t.getRight(),m=t.getX(),b=t.getBottom(),x=t.getRight(),w=t.getWidthHalf(),E=t.getHeightHalf(),T=!1,_=!1;if(r===a){if(i>o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(i<o)return n[0]=r,n[1]=h,n[2]=a,n[3]=v,!1}else if(i===o){if(r>a)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(r<a)return n[0]=u,n[1]=i,n[2]=f,n[3]=o,!1}else{var D=e.height/e.width,C=t.height/t.width,N=(o-i)/(a-r),A=void 0,L=void 0,S=void 0,O=void 0,I=void 0,k=void 0;if(-D===N?r>a?(n[0]=c,n[1]=h,T=!0):(n[0]=u,n[1]=l,T=!0):D===N&&(r>a?(n[0]=s,n[1]=l,T=!0):(n[0]=d,n[1]=h,T=!0)),-C===N?a>r?(n[2]=m,n[3]=b,_=!0):(n[2]=y,n[3]=v,_=!0):C===N&&(a>r?(n[2]=f,n[3]=v,_=!0):(n[2]=x,n[3]=b,_=!0)),T&&_)return!1;if(r>a?i>o?(A=this.getCardinalDirection(D,N,4),L=this.getCardinalDirection(C,N,2)):(A=this.getCardinalDirection(-D,N,3),L=this.getCardinalDirection(-C,N,1)):i>o?(A=this.getCardinalDirection(-D,N,1),L=this.getCardinalDirection(-C,N,3)):(A=this.getCardinalDirection(D,N,2),L=this.getCardinalDirection(C,N,4)),!T)switch(A){case 1:O=l,S=r+-g/N,n[0]=S,n[1]=O;break;case 2:S=d,O=i+p*N,n[0]=S,n[1]=O;break;case 3:O=h,S=r+g/N,n[0]=S,n[1]=O;break;case 4:S=c,O=i+-p*N,n[0]=S,n[1]=O}if(!_)switch(L){case 1:k=v,I=a+-E/N,n[2]=I,n[3]=k;break;case 2:I=x,k=o+w*N,n[2]=I,n[3]=k;break;case 3:k=b,I=a+E/N,n[2]=I,n[3]=k;break;case 4:I=m,k=o+-w*N,n[2]=I,n[3]=k}}return!1},i.getCardinalDirection=function(e,t,n){return e>t?n:1+n%4},i.getIntersection=function(e,t,n,i){if(null==i)return this.getIntersection2(e,t,n);var a,o,s,l,u,c,h,d=e.x,p=e.y,g=t.x,f=t.y,v=n.x,y=n.y,m=i.x,b=i.y;return 0==(h=(a=f-p)*(l=v-m)-(o=b-y)*(s=d-g))?null:new r((s*(c=m*y-v*b)-l*(u=g*p-d*f))/h,(o*u-a*c)/h)},i.angleOfVector=function(e,t,n,r){var i=void 0;return e!==n?(i=Math.atan((r-t)/(n-e)),n<e?i+=Math.PI:r<t&&(i+=this.TWO_PI)):i=r<t?this.ONE_AND_HALF_PI:this.HALF_PI,i},i.doIntersect=function(e,t,n,r){var i=e.x,a=e.y,o=t.x,s=t.y,l=n.x,u=n.y,c=r.x,h=r.y,d=(o-i)*(h-u)-(c-l)*(s-a);if(0===d)return!1;var p=((h-u)*(c-i)+(l-c)*(h-a))/d,g=((a-s)*(c-i)+(o-i)*(h-a))/d;return 0<p&&p<1&&0<g&&g<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,e.exports=i},function(e,t,n){"use strict";function r(){}r.sign=function(e){return e>0?1:e<0?-1:0},r.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},r.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},e.exports=r},function(e,t,n){"use strict";function r(){}r.MAX_VALUE=2147483647,r.MIN_VALUE=-2147483648,e.exports=r},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e){return{value:e,next:null,prev:null}},a=function(e,t,n,r){return null!==e?e.next=t:r.head=t,null!==n?n.prev=t:r.tail=t,t.prev=e,t.next=n,r.length++,t},o=function(e,t){var n=e.prev,r=e.next;return null!==n?n.next=r:t.head=r,null!==r?r.prev=n:t.tail=n,e.prev=e.next=null,t.length--,e},s=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.length=0,this.head=null,this.tail=null,null!=t&&t.forEach((function(e){return n.push(e)}))}return r(e,[{key:"size",value:function(){return this.length}},{key:"insertBefore",value:function(e,t){return a(t.prev,i(e),t,this)}},{key:"insertAfter",value:function(e,t){return a(t,i(e),t.next,this)}},{key:"insertNodeBefore",value:function(e,t){return a(t.prev,e,t,this)}},{key:"insertNodeAfter",value:function(e,t){return a(t,e,t.next,this)}},{key:"push",value:function(e){return a(this.tail,i(e),null,this)}},{key:"unshift",value:function(e){return a(null,i(e),this.head,this)}},{key:"remove",value:function(e){return o(e,this)}},{key:"pop",value:function(){return o(this.tail,this).value}},{key:"popNode",value:function(){return o(this.tail,this)}},{key:"shift",value:function(){return o(this.head,this).value}},{key:"shiftNode",value:function(){return o(this.head,this)}},{key:"get_object_at",value:function(e){if(e<=this.length()){for(var t=1,n=this.head;t<e;)n=n.next,t++;return n.value}}},{key:"set_object_at",value:function(e,t){if(e<=this.length()){for(var n=1,r=this.head;n<e;)r=r.next,n++;r.value=t}}}]),e}();e.exports=s},function(e,t,n){"use strict";function r(e,t,n){this.x=null,this.y=null,null==e&&null==t&&null==n?(this.x=0,this.y=0):"number"==typeof e&&"number"==typeof t&&null==n?(this.x=e,this.y=t):"Point"==e.constructor.name&&null==t&&null==n&&(n=e,this.x=n.x,this.y=n.y)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.getLocation=function(){return new r(this.x,this.y)},r.prototype.setLocation=function(e,t,n){"Point"==e.constructor.name&&null==t&&null==n?(n=e,this.setLocation(n.x,n.y)):"number"==typeof e&&"number"==typeof t&&null==n&&(parseInt(e)==e&&parseInt(t)==t?this.move(e,t):(this.x=Math.floor(e+.5),this.y=Math.floor(t+.5)))},r.prototype.move=function(e,t){this.x=e,this.y=t},r.prototype.translate=function(e,t){this.x+=e,this.y+=t},r.prototype.equals=function(e){if("Point"==e.constructor.name){var t=e;return this.x==t.x&&this.y==t.y}return this==e},r.prototype.toString=function(){return(new r).constructor.name+"[x="+this.x+",y="+this.y+"]"},e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.x=0,this.y=0,this.width=0,this.height=0,null!=e&&null!=t&&null!=n&&null!=r&&(this.x=e,this.y=t,this.width=n,this.height=r)}r.prototype.getX=function(){return this.x},r.prototype.setX=function(e){this.x=e},r.prototype.getY=function(){return this.y},r.prototype.setY=function(e){this.y=e},r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},r.prototype.getRight=function(){return this.x+this.width},r.prototype.getBottom=function(){return this.y+this.height},r.prototype.intersects=function(e){return!(this.getRight()<e.x||this.getBottom()<e.y||e.getRight()<this.x||e.getBottom()<this.y)},r.prototype.getCenterX=function(){return this.x+this.width/2},r.prototype.getMinX=function(){return this.getX()},r.prototype.getMaxX=function(){return this.getX()+this.width},r.prototype.getCenterY=function(){return this.y+this.height/2},r.prototype.getMinY=function(){return this.getY()},r.prototype.getMaxY=function(){return this.getY()+this.height},r.prototype.getWidthHalf=function(){return this.width/2},r.prototype.getHeightHalf=function(){return this.height/2},e.exports=r},function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function i(){}i.lastID=0,i.createID=function(e){return i.isPrimitive(e)?e:(null!=e.uniqueID||(e.uniqueID=i.getString(),i.lastID++),e.uniqueID)},i.getString=function(e){return null==e&&(e=i.lastID),"Object#"+e},i.isPrimitive=function(e){var t=void 0===e?"undefined":r(e);return null==e||"object"!=t&&"function"!=t},e.exports=i},function(e,t,n){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=n(0),a=n(6),o=n(3),s=n(1),l=n(5),u=n(4),c=n(17),h=n(27);function d(e){h.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,null!=e&&(this.isRemoteUse=e)}d.RANDOM_SEED=1,d.prototype=Object.create(h.prototype),d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},d.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},d.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},d.prototype.newGraphManager=function(){var e=new a(this);return this.graphManager=e,e},d.prototype.newGraph=function(e){return new l(null,this.graphManager,e)},d.prototype.newNode=function(e){return new o(this.graphManager,e)},d.prototype.newEdge=function(e){return new s(null,null,e)},d.prototype.checkLayoutSuccess=function(){return null==this.graphManager.getRoot()||0==this.graphManager.getRoot().getNodes().length||this.graphManager.includesInvalidEdge()},d.prototype.runLayout=function(){var e;return this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters(),e=!this.checkLayoutSuccess()&&this.layout(),"during"!==i.ANIMATE&&(e&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,e)},d.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},d.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var e=this.graphManager.getAllEdges(),t=0;t<e.length;t++)e[t];var n=this.graphManager.getRoot().getNodes();for(t=0;t<n.length;t++)n[t];this.update(this.graphManager.getRoot())}},d.prototype.update=function(e){if(null==e)this.update2();else if(e instanceof o){var t=e;if(null!=t.getChild())for(var n=t.getChild().getNodes(),r=0;r<n.length;r++)update(n[r]);null!=t.vGraphObject&&t.vGraphObject.update(t)}else if(e instanceof s){var i=e;null!=i.vGraphObject&&i.vGraphObject.update(i)}else if(e instanceof l){var a=e;null!=a.vGraphObject&&a.vGraphObject.update(a)}},d.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},d.prototype.transform=function(e){if(null==e)this.transform(new u(0,0));else{var t=new c,n=this.graphManager.getRoot().updateLeftTop();if(null!=n){t.setWorldOrgX(e.x),t.setWorldOrgY(e.y),t.setDeviceOrgX(n.x),t.setDeviceOrgY(n.y);for(var r=this.getAllNodes(),i=0;i<r.length;i++)r[i].transform(t)}}},d.prototype.positionNodesRandomly=function(e){if(null==e)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var t,n,r=e.getNodes(),i=0;i<r.length;i++)null==(n=(t=r[i]).getChild())||0==n.getNodes().length?t.scatter():(this.positionNodesRandomly(n),t.updateBounds())},d.prototype.getFlatForest=function(){for(var e=[],t=!0,n=this.graphManager.getRoot().getNodes(),i=!0,a=0;a<n.length;a++)null!=n[a].getChild()&&(i=!1);if(!i)return e;var o=new Set,s=[],l=new Map,u=[];for(u=u.concat(n);u.length>0&&t;){for(s.push(u[0]);s.length>0&&t;){var c=s[0];s.splice(0,1),o.add(c);var h=c.getEdges();for(a=0;a<h.length;a++){var d=h[a].getOtherEnd(c);if(l.get(c)!=d){if(o.has(d)){t=!1;break}s.push(d),l.set(d,c)}}}if(t){var p=[].concat(r(o));for(e.push(p),a=0;a<p.length;a++){var g=p[a],f=u.indexOf(g);f>-1&&u.splice(f,1)}o=new Set,l=new Map}else e=[]}return e},d.prototype.createDummyNodesForBendpoints=function(e){for(var t=[],n=e.source,r=this.graphManager.calcLowestCommonAncestor(e.source,e.target),i=0;i<e.bendpoints.length;i++){var a=this.newNode(null);a.setRect(new Point(0,0),new Dimension(1,1)),r.add(a);var o=this.newEdge(null);this.graphManager.add(o,n,a),t.add(a),n=a}return o=this.newEdge(null),this.graphManager.add(o,n,e.target),this.edgeToDummyNodes.set(e,t),e.isInterGraph()?this.graphManager.remove(e):r.remove(e),t},d.prototype.createBendpointsFromDummyNodes=function(){var e=[];e=e.concat(this.graphManager.getAllEdges()),e=[].concat(r(this.edgeToDummyNodes.keys())).concat(e);for(var t=0;t<e.length;t++){var n=e[t];if(n.bendpoints.length>0){for(var i=this.edgeToDummyNodes.get(n),a=0;a<i.length;a++){var o=i[a],s=new u(o.getCenterX(),o.getCenterY()),l=n.bendpoints.get(a);l.x=s.x,l.y=s.y,o.getOwner().remove(o)}this.graphManager.add(n,n.source,n.target)}}},d.transform=function(e,t,n,r){if(null!=n&&null!=r){var i=t;return e<=50?i-=(t-t/n)/50*(50-e):i+=(t*r-t)/50*(e-50),i}var a,o;return e<=50?(a=9*t/500,o=t/10):(a=9*t/50,o=-8*t),a*e+o},d.findCenterOfTree=function(e){var t=[];t=t.concat(e);var n=[],r=new Map,i=!1,a=null;1!=t.length&&2!=t.length||(i=!0,a=t[0]);for(var o=0;o<t.length;o++){var s=(c=t[o]).getNeighborsList().size;r.set(c,c.getNeighborsList().size),1==s&&n.push(c)}var l=[];for(l=l.concat(n);!i;){var u=[];for(u=u.concat(l),l=[],o=0;o<t.length;o++){var c=t[o],h=t.indexOf(c);h>=0&&t.splice(h,1),c.getNeighborsList().forEach((function(e){if(n.indexOf(e)<0){var t=r.get(e)-1;1==t&&l.push(e),r.set(e,t)}}))}n=n.concat(l),1!=t.length&&2!=t.length||(i=!0,a=t[0])}return a},d.prototype.setGraphManager=function(e){this.graphManager=e},e.exports=d},function(e,t,n){"use strict";function r(){}r.seed=1,r.x=0,r.nextDouble=function(){return r.x=1e4*Math.sin(r.seed++),r.x-Math.floor(r.x)},e.exports=r},function(e,t,n){"use strict";var r=n(4);function i(e,t){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(e){this.lworldExtX=e},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(e){this.lworldExtY=e},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},i.prototype.transformX=function(e){var t=0,n=this.lworldExtX;return 0!=n&&(t=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/n),t},i.prototype.transformY=function(e){var t=0,n=this.lworldExtY;return 0!=n&&(t=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/n),t},i.prototype.inverseTransformX=function(e){var t=0,n=this.ldeviceExtX;return 0!=n&&(t=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/n),t},i.prototype.inverseTransformY=function(e){var t=0,n=this.ldeviceExtY;return 0!=n&&(t=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/n),t},i.prototype.inverseTransformPoint=function(e){return new r(this.inverseTransformX(e.x),this.inverseTransformY(e.y))},e.exports=i},function(e,t,n){"use strict";var r=n(15),i=n(7),a=n(0),o=n(8),s=n(9);function l(){r.call(this),this.useSmartIdealEdgeLengthCalculation=i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=i.DEFAULT_EDGE_LENGTH,this.springConstant=i.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=i.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=i.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=i.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*i.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=i.MAX_ITERATIONS}for(var u in l.prototype=Object.create(r.prototype),r)l[u]=r[u];l.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},l.prototype.calcIdealEdgeLengths=function(){for(var e,t,n,r,o,s,l=this.getGraphManager().getAllEdges(),u=0;u<l.length;u++)(e=l[u]).idealLength=this.idealEdgeLength,e.isInterGraph&&(n=e.getSource(),r=e.getTarget(),o=e.getSourceInLca().getEstimatedSize(),s=e.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(e.idealLength+=o+s-2*a.SIMPLE_NODE_SIZE),t=e.getLca().getInclusionTreeDepth(),e.idealLength+=i.DEFAULT_EDGE_LENGTH*i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(n.getInclusionTreeDepth()+r.getInclusionTreeDepth()-2*t))},l.prototype.initSpringEmbedder=function(){var e=this.getAllNodes().length;this.incremental?(e>i.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*i.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-i.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT_INCREMENTAL):(e>i.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(i.COOLING_ADAPTATION_FACTOR,1-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*(1-i.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(5*this.getAllNodes().length,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},l.prototype.calcSpringForces=function(){for(var e,t=this.getAllEdges(),n=0;n<t.length;n++)e=t[n],this.calcSpringForce(e,e.idealLength)},l.prototype.calcRepulsionForces=function(){var e,t,n,r,a,o=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],s=arguments.length>1&&void 0!==arguments[1]&&arguments[1],l=this.getAllNodes();if(this.useFRGridVariant)for(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&o&&this.updateGrid(),a=new Set,e=0;e<l.length;e++)n=l[e],this.calculateRepulsionForceOfANode(n,a,o,s),a.add(n);else for(e=0;e<l.length;e++)for(n=l[e],t=e+1;t<l.length;t++)r=l[t],n.getOwner()==r.getOwner()&&this.calcRepulsionForce(n,r)},l.prototype.calcGravitationalForces=function(){for(var e,t=this.getAllNodesToApplyGravitation(),n=0;n<t.length;n++)e=t[n],this.calcGravitationalForce(e)},l.prototype.moveNodes=function(){for(var e=this.getAllNodes(),t=0;t<e.length;t++)e[t].move()},l.prototype.calcSpringForce=function(e,t){var n,r,i,a,o=e.getSource(),s=e.getTarget();if(this.uniformLeafNodeSizes&&null==o.getChild()&&null==s.getChild())e.updateLengthSimple();else if(e.updateLength(),e.isOverlapingSourceAndTarget)return;0!=(n=e.getLength())&&(i=(r=this.springConstant*(n-t))*(e.lengthX/n),a=r*(e.lengthY/n),o.springForceX+=i,o.springForceY+=a,s.springForceX-=i,s.springForceY-=a)},l.prototype.calcRepulsionForce=function(e,t){var n,r,a,l,u,c,h,d=e.getRect(),p=t.getRect(),g=new Array(2),f=new Array(4);if(d.intersects(p)){o.calcSeparationAmount(d,p,g,i.DEFAULT_EDGE_LENGTH/2),c=2*g[0],h=2*g[1];var v=e.noOfChildren*t.noOfChildren/(e.noOfChildren+t.noOfChildren);e.repulsionForceX-=v*c,e.repulsionForceY-=v*h,t.repulsionForceX+=v*c,t.repulsionForceY+=v*h}else this.uniformLeafNodeSizes&&null==e.getChild()&&null==t.getChild()?(n=p.getCenterX()-d.getCenterX(),r=p.getCenterY()-d.getCenterY()):(o.getIntersection(d,p,f),n=f[2]-f[0],r=f[3]-f[1]),Math.abs(n)<i.MIN_REPULSION_DIST&&(n=s.sign(n)*i.MIN_REPULSION_DIST),Math.abs(r)<i.MIN_REPULSION_DIST&&(r=s.sign(r)*i.MIN_REPULSION_DIST),a=n*n+r*r,l=Math.sqrt(a),c=(u=this.repulsionConstant*e.noOfChildren*t.noOfChildren/a)*n/l,h=u*r/l,e.repulsionForceX-=c,e.repulsionForceY-=h,t.repulsionForceX+=c,t.repulsionForceY+=h},l.prototype.calcGravitationalForce=function(e){var t,n,r,i,a,o,s,l;n=((t=e.getOwner()).getRight()+t.getLeft())/2,r=(t.getTop()+t.getBottom())/2,i=e.getCenterX()-n,a=e.getCenterY()-r,o=Math.abs(i)+e.getWidth()/2,s=Math.abs(a)+e.getHeight()/2,e.getOwner()==this.graphManager.getRoot()?(o>(l=t.getEstimatedSize()*this.gravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i,e.gravitationForceY=-this.gravityConstant*a):(o>(l=t.getEstimatedSize()*this.compoundGravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i*this.compoundGravityConstant,e.gravitationForceY=-this.gravityConstant*a*this.compoundGravityConstant)},l.prototype.isConverged=function(){var e,t=!1;return this.totalIterations>this.maxIterations/3&&(t=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),e=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,e||t},l.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},l.prototype.calcNoOfChildrenForAllNodes=function(){for(var e,t=this.graphManager.getAllNodes(),n=0;n<t.length;n++)(e=t[n]).noOfChildren=e.getNoOfChildren()},l.prototype.calcGrid=function(e){var t,n;t=parseInt(Math.ceil((e.getRight()-e.getLeft())/this.repulsionRange)),n=parseInt(Math.ceil((e.getBottom()-e.getTop())/this.repulsionRange));for(var r=new Array(t),i=0;i<t;i++)r[i]=new Array(n);for(i=0;i<t;i++)for(var a=0;a<n;a++)r[i][a]=new Array;return r},l.prototype.addNodeToGrid=function(e,t,n){var r,i,a,o;r=parseInt(Math.floor((e.getRect().x-t)/this.repulsionRange)),i=parseInt(Math.floor((e.getRect().width+e.getRect().x-t)/this.repulsionRange)),a=parseInt(Math.floor((e.getRect().y-n)/this.repulsionRange)),o=parseInt(Math.floor((e.getRect().height+e.getRect().y-n)/this.repulsionRange));for(var s=r;s<=i;s++)for(var l=a;l<=o;l++)this.grid[s][l].push(e),e.setGridCoordinates(r,i,a,o)},l.prototype.updateGrid=function(){var e,t,n=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),e=0;e<n.length;e++)t=n[e],this.addNodeToGrid(t,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},l.prototype.calculateRepulsionForceOfANode=function(e,t,n,r){if(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&n||r){var a,o=new Set;e.surrounding=new Array;for(var s=this.grid,l=e.startX-1;l<e.finishX+2;l++)for(var u=e.startY-1;u<e.finishY+2;u++)if(!(l<0||u<0||l>=s.length||u>=s[0].length))for(var c=0;c<s[l][u].length;c++)if(a=s[l][u][c],e.getOwner()==a.getOwner()&&e!=a&&!t.has(a)&&!o.has(a)){var h=Math.abs(e.getCenterX()-a.getCenterX())-(e.getWidth()/2+a.getWidth()/2),d=Math.abs(e.getCenterY()-a.getCenterY())-(e.getHeight()/2+a.getHeight()/2);h<=this.repulsionRange&&d<=this.repulsionRange&&o.add(a)}e.surrounding=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(o))}for(l=0;l<e.surrounding.length;l++)this.calcRepulsionForce(e,e.surrounding[l])},l.prototype.calcRepulsionRange=function(){return 0},e.exports=l},function(e,t,n){"use strict";var r=n(1),i=n(7);function a(e,t,n){r.call(this,e,t,n),this.idealLength=i.DEFAULT_EDGE_LENGTH}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];e.exports=a},function(e,t,n){"use strict";var r=n(3);function i(e,t,n,i){r.call(this,e,t,n,i),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];i.prototype.setGridCoordinates=function(e,t,n,r){this.startX=e,this.finishX=t,this.startY=n,this.finishY=r},e.exports=i},function(e,t,n){"use strict";function r(e,t){this.width=0,this.height=0,null!==e&&null!==t&&(this.height=t,this.width=e)}r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},e.exports=r},function(e,t,n){"use strict";var r=n(14);function i(){this.map={},this.keys=[]}i.prototype.put=function(e,t){var n=r.createID(e);this.contains(n)||(this.map[n]=t,this.keys.push(e))},i.prototype.contains=function(e){return r.createID(e),null!=this.map[e]},i.prototype.get=function(e){var t=r.createID(e);return this.map[t]},i.prototype.keySet=function(){return this.keys},e.exports=i},function(e,t,n){"use strict";var r=n(14);function i(){this.set={}}i.prototype.add=function(e){var t=r.createID(e);this.contains(t)||(this.set[t]=e)},i.prototype.remove=function(e){delete this.set[r.createID(e)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(e){return this.set[r.createID(e)]==e},i.prototype.isEmpty=function(){return 0===this.size()},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(e){for(var t=Object.keys(this.set),n=t.length,r=0;r<n;r++)e.push(this.set[t[r]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(e){for(var t=e.length,n=0;n<t;n++){var r=e[n];this.add(r)}},e.exports=i},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(11),a=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),null===n&&void 0===n||(this.compareFunction=this._defaultCompareFunction);var r=void 0;r=t instanceof i?t.size():t.length,this._quicksort(t,0,r-1)}return r(e,[{key:"_quicksort",value:function(e,t,n){if(t<n){var r=this._partition(e,t,n);this._quicksort(e,t,r),this._quicksort(e,r+1,n)}}},{key:"_partition",value:function(e,t,n){for(var r=this._get(e,t),i=t,a=n;;){for(;this.compareFunction(r,this._get(e,a));)a--;for(;this.compareFunction(this._get(e,i),r);)i++;if(!(i<a))return a;this._swap(e,i,a),i++,a--}}},{key:"_get",value:function(e,t){return e instanceof i?e.get_object_at(t):e[t]}},{key:"_set",value:function(e,t,n){e instanceof i?e.set_object_at(t,n):e[t]=n}},{key:"_swap",value:function(e,t,n){var r=this._get(e,t);this._set(e,t,this._get(e,n)),this._set(e,n,r)}},{key:"_defaultCompareFunction",value:function(e,t){return t>e}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sequence1=t,this.sequence2=n,this.match_score=r,this.mismatch_penalty=i,this.gap_penalty=a,this.iMax=t.length+1,this.jMax=n.length+1,this.grid=new Array(this.iMax);for(var o=0;o<this.iMax;o++){this.grid[o]=new Array(this.jMax);for(var s=0;s<this.jMax;s++)this.grid[o][s]=0}this.tracebackGrid=new Array(this.iMax);for(var l=0;l<this.iMax;l++){this.tracebackGrid[l]=new Array(this.jMax);for(var u=0;u<this.jMax;u++)this.tracebackGrid[l][u]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return r(e,[{key:"getScore",value:function(){return this.score}},{key:"getAlignments",value:function(){return this.alignments}},{key:"computeGrids",value:function(){for(var e=1;e<this.jMax;e++)this.grid[0][e]=this.grid[0][e-1]+this.gap_penalty,this.tracebackGrid[0][e]=[!1,!1,!0];for(var t=1;t<this.iMax;t++)this.grid[t][0]=this.grid[t-1][0]+this.gap_penalty,this.tracebackGrid[t][0]=[!1,!0,!1];for(var n=1;n<this.iMax;n++)for(var r=1;r<this.jMax;r++){var i=[this.sequence1[n-1]===this.sequence2[r-1]?this.grid[n-1][r-1]+this.match_score:this.grid[n-1][r-1]+this.mismatch_penalty,this.grid[n-1][r]+this.gap_penalty,this.grid[n][r-1]+this.gap_penalty],a=this.arrayAllMaxIndexes(i);this.grid[n][r]=i[a[0]],this.tracebackGrid[n][r]=[a.includes(0),a.includes(1),a.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]}},{key:"alignmentTraceback",value:function(){var e=[];for(e.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});e[0];){var t=e[0],n=this.tracebackGrid[t.pos[0]][t.pos[1]];n[0]&&e.push({pos:[t.pos[0]-1,t.pos[1]-1],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),n[1]&&e.push({pos:[t.pos[0]-1,t.pos[1]],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:"-"+t.seq2}),n[2]&&e.push({pos:[t.pos[0],t.pos[1]-1],seq1:"-"+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),0===t.pos[0]&&0===t.pos[1]&&this.alignments.push({sequence1:t.seq1,sequence2:t.seq2}),e.shift()}return this.alignments}},{key:"getAllIndexes",value:function(e,t){for(var n=[],r=-1;-1!==(r=e.indexOf(t,r+1));)n.push(r);return n}},{key:"arrayAllMaxIndexes",value:function(e){return this.getAllIndexes(e,Math.max.apply(null,e))}}]),e}();e.exports=i},function(e,t,n){"use strict";var r=function(){};r.FDLayout=n(18),r.FDLayoutConstants=n(7),r.FDLayoutEdge=n(19),r.FDLayoutNode=n(20),r.DimensionD=n(21),r.HashMap=n(22),r.HashSet=n(23),r.IGeometry=n(8),r.IMath=n(9),r.Integer=n(10),r.Point=n(12),r.PointD=n(4),r.RandomSeed=n(16),r.RectangleD=n(13),r.Transform=n(17),r.UniqueIDGeneretor=n(14),r.Quicksort=n(24),r.LinkedList=n(11),r.LGraphObject=n(2),r.LGraph=n(5),r.LEdge=n(1),r.LGraphManager=n(6),r.LNode=n(3),r.Layout=n(15),r.LayoutConstants=n(0),r.NeedlemanWunsch=n(25),e.exports=r},function(e,t,n){"use strict";function r(){this.listeners=[]}var i=r.prototype;i.addListener=function(e,t){this.listeners.push({event:e,callback:t})},i.removeListener=function(e,t){for(var n=this.listeners.length;n>=0;n--){var r=this.listeners[n];r.event===e&&r.callback===t&&this.listeners.splice(n,1)}},i.emit=function(e,t){for(var n=0;n<this.listeners.length;n++){var r=this.listeners[n];e===r.event&&r.callback(t)}},e.exports=r}])},e.exports=t()},1619:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(1691),i=n(1610);const a=e=>{const{r:t,g:n,b:a}=i.Z.parse(e),o=.2126*r.Z.channel.toLinear(t)+.7152*r.Z.channel.toLinear(n)+.0722*r.Z.channel.toLinear(a);return r.Z.lang.round(o)},o=e=>a(e)>=.5,s=e=>!o(e)},7926:(e,t,n)=>{"use strict";n.d(t,{diagram:()=>L});var r=n(44),i=n(9373),a=n(1188),o=n(211),s=n(1377),l=n(4607),u=n(1619),c=n(2281),h=n(7201),d=(n(7856),n(7484),n(7967),n(3502),function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,13],r=[1,12],i=[1,15],a=[1,16],o=[1,20],s=[1,19],l=[6,7,8],u=[1,26],c=[1,24],h=[1,25],d=[6,7,11],p=[1,6,13,15,16,19,22],g=[1,33],f=[1,34],v=[1,6,7,11,13,15,16,19,22],y={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",a[s].id),r.addNode(a[s-1].length,a[s].id,a[s].descr,a[s].type);break;case 16:r.getLogger().trace("Icon: ",a[s]),r.decorateNode({icon:a[s]});break;case 17:case 21:r.decorateNode({class:a[s]});break;case 18:r.getLogger().trace("SPACELIST");break;case 19:r.getLogger().trace("Node: ",a[s].id),r.addNode(0,a[s].id,a[s].descr,a[s].type);break;case 20:r.decorateNode({icon:a[s]});break;case 25:r.getLogger().trace("node found ..",a[s-2]),this.$={id:a[s-1],descr:a[s-1],type:r.getType(a[s-2],a[s])};break;case 26:this.$={id:a[s],descr:a[s],type:r.nodeType.DEFAULT};break;case 27:r.getLogger().trace("node found ..",a[s-3]),this.$={id:a[s-3],descr:a[s-1],type:r.getType(a[s-2],a[s])}}},table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:n,7:[1,10],9:9,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(l,[2,3]),{1:[2,2]},e(l,[2,4]),e(l,[2,5]),{1:[2,6],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:n,9:22,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:u,7:c,10:23,11:h},e(d,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:o,22:s}),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,23]),e(d,[2,24]),e(d,[2,26],{19:[1,30]}),{20:[1,31]},{6:u,7:c,10:32,11:h},{1:[2,7],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(p,[2,14],{7:g,11:f}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(d,[2,15]),e(d,[2,16]),e(d,[2,17]),{20:[1,35]},{21:[1,36]},e(p,[2,13],{7:g,11:f}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(d,[2,25]),e(d,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",l=0,u=0,c=1,h=a.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);d.setInput(e,p.yy),p.yy.lexer=d,p.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var f=d.yylloc;a.push(f);var v=d.options&&d.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,m,b,x,w,E,T,_,D,C={};;){if(m=n[n.length-1],this.defaultActions[m]?b=this.defaultActions[m]:(null==y&&(D=void 0,"number"!=typeof(D=r.pop()||d.lex()||c)&&(D instanceof Array&&(D=(r=D).pop()),D=t.symbols_[D]||D),y=D),b=o[m]&&o[m][y]),void 0===b||!b.length||!b[0]){var N="";for(w in _=[],o[m])this.terminals_[w]&&w>2&&_.push("'"+this.terminals_[w]+"'");N=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(l+1)+": Unexpected "+(y==c?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(N,{text:d.match,token:this.terminals_[y]||y,line:d.yylineno,loc:f,expected:_})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+y);switch(b[0]){case 1:n.push(y),i.push(d.yytext),a.push(d.yylloc),n.push(b[1]),y=null,u=d.yyleng,s=d.yytext,l=d.yylineno,f=d.yylloc;break;case 2:if(E=this.productions_[b[1]][1],C.$=i[i.length-E],C._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},v&&(C._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(C,[s,u,l,p.yy,b[1],i,a].concat(h))))return x;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[b[1]][0]),i.push(C.$),a.push(C._$),T=o[n[n.length-2]][n[n.length-1]],n.push(T);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!t||n[0].length>t[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return e.getLogger().trace("Found comment",t.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:case 23:case 26:this.popState();break;case 5:e.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return e.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:e.getLogger().trace("end icon"),this.popState();break;case 10:return e.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return e.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return e.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return e.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:case 15:case 16:case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 24:e.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return e.getLogger().trace("description:",t.yytext),"NODE_DESCR";case 27:return this.popState(),e.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),e.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),e.getLogger().trace("node end ...",t.yytext),"NODE_DEND";case 30:case 33:case 34:return this.popState(),e.getLogger().trace("node end (("),"NODE_DEND";case 31:case 32:return this.popState(),e.getLogger().trace("node end (-"),"NODE_DEND";case 35:case 36:return e.getLogger().trace("Long description:",t.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\-\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function b(){this.yy={}}return y.lexer=m,b.prototype=y,y.Parser=b,new b}());d.parser=d;const p=d,g=e=>(0,r.b)(e,(0,r.g)());let f=[],v=0,y={};const m={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},b=(e,t)=>{y[e]=t},x=e=>{switch(e){case m.DEFAULT:return"no-border";case m.RECT:return"rect";case m.ROUNDED_RECT:return"rounded-rect";case m.CIRCLE:return"circle";case m.CLOUD:return"cloud";case m.BANG:return"bang";case m.HEXAGON:return"hexgon";default:return"no-border"}};let w;const E=e=>y[e],T=Object.freeze(Object.defineProperty({__proto__:null,addNode:(e,t,n,i)=>{r.l.info("addNode",e,t,n,i);const a=(0,r.g)(),o={id:v++,nodeId:g(t),level:e,descr:g(n),type:i,children:[],width:(0,r.g)().mindmap.maxNodeWidth};switch(o.type){case m.ROUNDED_RECT:case m.RECT:case m.HEXAGON:o.padding=2*a.mindmap.padding;break;default:o.padding=a.mindmap.padding}const s=function(e){for(let t=f.length-1;t>=0;t--)if(f[t].level<e)return f[t];return null}(e);if(s)s.children.push(o),f.push(o);else{if(0!==f.length){let e=new Error('There can be only one root. No parent could be found for ("'+o.descr+'")');throw e.hash={text:"branch "+name,token:"branch "+name,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+name+'"']},e}f.push(o)}},clear:()=>{f=[],v=0,y={}},decorateNode:e=>{const t=f[f.length-1];e&&e.icon&&(t.icon=g(e.icon)),e&&e.class&&(t.class=g(e.class))},getElementById:E,getLogger:()=>r.l,getMindmap:()=>f.length>0?f[0]:null,getNodeById:e=>f[e],getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return m.RECT;case"(":return")"===t?m.ROUNDED_RECT:m.CLOUD;case"((":return m.CIRCLE;case")":return m.CLOUD;case"))":return m.BANG;case"{{":return m.HEXAGON;default:return m.DEFAULT}},nodeType:m,get parseError(){return w},sanitizeText:g,setElementForId:b,setErrorHandler:e=>{w=e},type2Str:x},Symbol.toStringTag,{value:"Module"}));const _=function(e,t,n,r){const i=r.htmlLabels,a=n%11,s=e.append("g");t.section=a;let l="section-"+a;a<0&&(l+=" section-root"),s.attr("class",(t.class?t.class+" ":"")+"mindmap-node "+l);const u=s.append("g"),c=s.append("g"),h=t.descr.replace(/(<br\/*>)/g,"\n");(0,o.c)(c,h,{useHtmlLabels:i,width:t.width,classes:"mindmap-node-label"}),i||c.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const d=c.node().getBBox(),p=r.fontSize.replace?r.fontSize.replace("px",""):r.fontSize;if(t.height=d.height+1.1*p*.5+t.padding,t.width=d.width+2*t.padding,t.icon)if(t.type===m.CIRCLE){t.height+=50,t.width+=50;s.append("foreignObject").attr("height","50px").attr("width",t.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+a+" "+t.icon),c.attr("transform","translate("+t.width/2+", "+(t.height/2-1.5*t.padding)+")")}else{t.width+=50;const e=t.height;t.height=Math.max(e,60);const n=Math.abs(t.height-e);s.append("foreignObject").attr("width","60px").attr("height",t.height).attr("style","text-align: center;margin-top:"+n/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+a+" "+t.icon),c.attr("transform","translate("+(25+t.width/2)+", "+(n/2+t.padding/2)+")")}else if(i){const e=(t.width-d.width)/2,n=(t.height-d.height)/2;c.attr("transform","translate("+e+", "+n+")")}else{const e=t.width/2,n=t.padding/2;c.attr("transform","translate("+e+", "+n+")")}switch(t.type){case m.DEFAULT:!function(e,t,n){e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 ${t.height-5} v${10-t.height} q0,-5 5,-5 h${t.width-10} q5,0 5,5 v${t.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",t.height).attr("x2",t.width).attr("y2",t.height)}(u,t,a);break;case m.ROUNDED_RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("height",t.height).attr("rx",t.padding).attr("ry",t.padding).attr("width",t.width)}(u,t);break;case m.RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("height",t.height).attr("width",t.width)}(u,t);break;case m.CIRCLE:u.attr("transform","translate("+t.width/2+", "+ +t.height/2+")"),function(e,t){e.append("circle").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("r",t.width/2)}(u,t);break;case m.CLOUD:!function(e,t){const n=t.width,r=t.height,i=.15*n,a=.25*n,o=.35*n,s=.2*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 0 a${i},${i} 0 0,1 ${.25*n},${-1*n*.1}\n a${o},${o} 1 0,1 ${.4*n},${-1*n*.1}\n a${a},${a} 1 0,1 ${.35*n},${1*n*.2}\n\n a${i},${i} 1 0,1 ${.15*n},${1*r*.35}\n a${s},${s} 1 0,1 ${-1*n*.15},${1*r*.65}\n\n a${a},${i} 1 0,1 ${-1*n*.25},${.15*n}\n a${o},${o} 1 0,1 ${-1*n*.5},0\n a${i},${i} 1 0,1 ${-1*n*.25},${-1*n*.15}\n\n a${i},${i} 1 0,1 ${-1*n*.1},${-1*r*.35}\n a${s},${s} 1 0,1 ${.1*n},${-1*r*.65}\n\n H0 V0 Z`)}(u,t);break;case m.BANG:!function(e,t){const n=t.width,r=t.height,i=.15*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 0 a${i},${i} 1 0,0 ${.25*n},${-1*r*.1}\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},${1*r*.1}\n\n a${i},${i} 1 0,0 ${.15*n},${1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${1*r*.34}\n a${i},${i} 1 0,0 ${-1*n*.15},${1*r*.33}\n\n a${i},${i} 1 0,0 ${-1*n*.25},${.15*r}\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},${-1*r*.15}\n\n a${i},${i} 1 0,0 ${-1*n*.1},${-1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${-1*r*.34}\n a${i},${i} 1 0,0 ${.1*n},${-1*r*.33}\n\n H0 V0 Z`)}(u,t);break;case m.HEXAGON:!function(e,t){const n=t.height,r=n/4,i=t.width-t.padding+2*r;!function(e,t,n,r,i){e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+(i.width-t)/2+", "+n+")")}(e,i,n,[{x:r,y:0},{x:i-r,y:0},{x:i,y:-n/2},{x:i-r,y:-n},{x:r,y:-n},{x:0,y:-n/2}],t)}(u,t)}return b(t.id,s),t.height},D=function(e){const t=E(e.id),n=e.x||0,r=e.y||0;t.attr("transform","translate("+n+","+r+")")};function C(e,t,n,r){_(e,t,n,r),t.children&&t.children.forEach(((t,i)=>{C(e,t,n<0?i:n,r)}))}function N(e,t,n,r){t.add({group:"nodes",data:{id:e.id,labelText:e.descr,height:e.height,width:e.width,level:r,nodeId:e.id,padding:e.padding,type:e.type},position:{x:e.x,y:e.y}}),e.children&&e.children.forEach((i=>{N(i,t,n,r+1),t.add({group:"edges",data:{id:`${e.id}_${i.id}`,source:e.id,target:i.id,depth:r,section:i.section}})}))}function A(e,t){return new Promise((n=>{const a=(0,i.Ys)("body").append("div").attr("id","cy").attr("style","display:none"),o=s({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});a.remove(),N(e,o,t,0),o.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),o.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),o.ready((e=>{r.l.info("Ready",e),n(o)}))}))}s.use(l);const L={db:T,renderer:{draw:async(e,t,n,o)=>{const s=(0,r.g)();s.htmlLabels=!1,o.db.clear(),o.parser.parse(e),r.l.debug("Rendering mindmap diagram\n"+e,o.parser);const l=(0,r.g)().securityLevel;let u;"sandbox"===l&&(u=(0,i.Ys)("#i"+t));const c=("sandbox"===l?(0,i.Ys)(u.nodes()[0].contentDocument.body):(0,i.Ys)("body")).select("#"+t);c.append("g");const h=o.db.getMindmap(),d=c.append("g");d.attr("class","mindmap-edges");const p=c.append("g");p.attr("class","mindmap-nodes"),C(p,h,-1,s);const g=await A(h,s);!function(e,t){t.edges().map(((t,n)=>{const i=t.data();if(t[0]._private.bodyBounds){const a=t[0]._private.rscratch;r.l.trace("Edge: ",n,i),e.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}}))}(d,g),function(e){e.nodes().map(((e,t)=>{const n=e.data();n.x=e.position().x,n.y=e.position().y,D(n);const i=E(n.nodeId);r.l.info("Id:",t,"Position: (",e.position().x,", ",e.position().y,")",n),i.attr("transform",`translate(${e.position().x-n.width/2}, ${e.position().y-n.height/2})`),i.attr("attr",`apa-${t})`)}))}(g),(0,a.s)(void 0,c,s.mindmap.padding,s.mindmap.useMaxWidth)}},parser:p,styles:e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n<e.THEME_COLOR_LIMIT;n++)e["lineColor"+n]=e["lineColor"+n]||e["cScaleInv"+n],(0,u.Z)(e["lineColor"+n])?e["lineColor"+n]=(0,c.Z)(e["lineColor"+n],20):e["lineColor"+n]=(0,h.Z)(e["lineColor"+n],20);for(let n=0;n<e.THEME_COLOR_LIMIT;n++){const r=""+(17-3*n);t+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {\n fill: ${e["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${e["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${e["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${e["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${r};\n }\n .section-${n-1} line {\n stroke: ${e["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return t})(e)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${e.git0};\n }\n .section-root text {\n fill: ${e.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .mindmap-node-label {\n dy: 1em;\n alignment-baseline: middle;\n text-anchor: middle;\n dominant-baseline: middle;\n text-align: center;\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/7926.b155ab83.js.LICENSE.txt b/assets/js/7926.b155ab83.js.LICENSE.txt new file mode 100644 index 0000000000..a58daed496 --- /dev/null +++ b/assets/js/7926.b155ab83.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + */ + +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ diff --git a/assets/js/7b02141e.deb77cdd.js b/assets/js/7b02141e.deb77cdd.js new file mode 100644 index 0000000000..e8e42d1974 --- /dev/null +++ b/assets/js/7b02141e.deb77cdd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2638],{5771:(o,e,t)=>{t.r(e),t.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>m,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var i=t(7462),l=(t(7294),t(3905));t(5657);const n={title:"eCalc\u2122 Workflow",sidebar_position:4,description:"eCalc modelling"},r=void 0,a={unversionedId:"about/modelling/workflow/index",id:"about/modelling/workflow/index",title:"eCalc\u2122 Workflow",description:"eCalc modelling",source:"@site/docs/about/modelling/workflow/index.md",sourceDirName:"about/modelling/workflow",slug:"/about/modelling/workflow/",permalink:"/ecalc/docs/about/modelling/workflow/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/workflow/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"eCalc\u2122 Workflow",sidebar_position:4,description:"eCalc modelling"},sidebar:"about",previous:{title:"Direct consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers"},next:{title:"Generic Workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow"}},d={},c=[],s={toc:c},u="wrapper";function m(o){let{components:e,...t}=o;return(0,l.kt)(u,(0,i.Z)({},s,t,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"This section will outline the method and workflow required when setting up an eCalc\u2122 model for the first time."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7c623a68.ff82d42e.js b/assets/js/7c623a68.ff82d42e.js new file mode 100644 index 0000000000..f23e825f1e --- /dev/null +++ b/assets/js/7c623a68.ff82d42e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1310],{8096:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>p,toc:()=>l});var n=t(7462),m=(t(7294),t(3905));t(5657);const r={},s="CONSUMPTION_RATE_TYPE",p={unversionedId:"about/references/keywords/CONSUMPTION_RATE_TYPE",id:"about/references/keywords/CONSUMPTION_RATE_TYPE",title:"CONSUMPTION_RATE_TYPE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS"},next:{title:"CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN"}},o={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],N={toc:l},i="wrapper";function c(a){let{components:e,...t}=a;return(0,m.kt)(i,(0,n.Z)({},N,t,{components:e,mdxType:"MDXLayout"}),(0,m.kt)("h1",{id:"consumption_rate_type"},"CONSUMPTION_RATE_TYPE"),(0,m.kt)("p",null,(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"},"CONSUMPTION_RATE_TYPE")),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:null},"Required"),(0,m.kt)("th",{parentName:"tr",align:null},"Child of"),(0,m.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"No"),(0,m.kt)("td",{parentName:"tr",align:null},(0,m.kt)("inlineCode",{parentName:"td"},"ENERGY_USAGE_MODEL")),(0,m.kt)("td",{parentName:"tr",align:null},"None")))),(0,m.kt)("h2",{id:"description"},"Description"),(0,m.kt)("admonition",{type:"important"},(0,m.kt)("p",{parentName:"admonition"},"You must have good control of the input rates - which are stream day rates and which are calendar day rates - and\nspecify ",(0,m.kt)("inlineCode",{parentName:"p"},"CALENDAR_DAY")," as input if necessary.")),(0,m.kt)("p",null,"When ",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/REGULARITY"},"REGULARITY")," is used,the consumption rate type may be specified for\n",(0,m.kt)("inlineCode",{parentName:"p"},"DIRECT ENERGY USAGE MODEL"),"(",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/LOAD"},"LOAD")," or ",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELRATE"},"FUELRATE"),")\nby setting ",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"},"CONSUMPTION_RATE_TYPE")," to either ",(0,m.kt)("inlineCode",{parentName:"p"},"CALENDAR_DAY")," or\n",(0,m.kt)("inlineCode",{parentName:"p"},"STREAM_DAY"),"."),(0,m.kt)("p",null,"The default behaviour, is that these will be interpreted as ",(0,m.kt)("inlineCode",{parentName:"p"},"STREAM_DAY")," if not set explicitly. This will result in\nfuel rates being multiplied by regularity to obtain (average) calendar day fuel rates, while the loads will be kept\nstream day when passed to the generator set calculation."),(0,m.kt)("admonition",{type:"note"},(0,m.kt)("p",{parentName:"admonition"},(0,m.kt)("inlineCode",{parentName:"p"},"CALENDAR_DAY"),": The average rate over a period after adjusting for operating conditions that keeps the\naverage throughput below the maximum achievable throughput for a single day, known as stream day."),(0,m.kt)("p",{parentName:"admonition"},(0,m.kt)("inlineCode",{parentName:"p"},"STREAM_DAY"),": The actual rate at a given moment. When multiplied with a ",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/REGULARITY"},"REGULARITY"),"\nfactor you get the calendar day rate which needs to be used when evaluating the economics of a process unit."),(0,m.kt)("div",{parentName:"admonition",className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mfrac",{parentName:"mrow"},(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,m.kt)("mi",{parentName:"mrow"},"d"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"e")),(0,m.kt)("mrow",{parentName:"mfrac"},(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mi",{parentName:"mrow"},"u"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"t"),(0,m.kt)("mi",{parentName:"mrow"},"y")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"stream\\ day\\ rate = \\frac{calendar\\ day\\ rate}{regularity}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"re"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"am"),(0,m.kt)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"2.2519em",verticalAlign:"-0.8804em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,m.kt)("span",{parentName:"span",className:"mfrac"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.3714em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"re"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"gu"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,m.kt)("span",{parentName:"span",style:{top:"-3.677em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.01968em"}},"l"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"d"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8804em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"mclose nulldelimiter"})))))))),(0,m.kt)("h2",{id:"format"},"Format"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-yaml"},"CONSUMPTION_RATE_TYPE: <consumption_rate_type>\n")),(0,m.kt)("p",null,"Where ",(0,m.kt)("inlineCode",{parentName:"p"},"<consumption_rate_type>")," can either be ",(0,m.kt)("inlineCode",{parentName:"p"},"CALENDAR_DAY")," or ",(0,m.kt)("inlineCode",{parentName:"p"},"STREAM_DAY"),"."),(0,m.kt)("h2",{id:"example"},"Example"),(0,m.kt)("p",null,"Specifying consumption rate type for fixed/direct consumers:"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-yaml"},"LOAD: 10\nCONSUMPTION_RATE_TYPE: CALENDAR_DAY\n...\nFUELRATE: 10000\nCONSUMPTION_RATE_TYPE: STREAM_DAY\n")),(0,m.kt)("p",null,"Given ",(0,m.kt)("inlineCode",{parentName:"p"},"CALENDAR_DAY")," input the rate will be converted to ",(0,m.kt)("inlineCode",{parentName:"p"},"STREAM_DAY")," when evaluating, and any fuel rate in output\nwill be converted back again to ",(0,m.kt)("inlineCode",{parentName:"p"},"CALENDAR_DAY")," rate equivalent in the results."),(0,m.kt)("p",null,"Given ",(0,m.kt)("inlineCode",{parentName:"p"},"STREAM_DAY")," input, and a ",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/REGULARITY"},"REGULARITY")," factor of 0.5 (50%), the\ninterpretation is that the process unit will run at full capacity half of the time. The resulting fuel rate reported\nfor a fuel consumer will be halved compared to 1 (100%) regularity."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7cebed78.a7d61ce4.js b/assets/js/7cebed78.a7d61ce4.js new file mode 100644 index 0000000000..6956db3d6d --- /dev/null +++ b/assets/js/7cebed78.a7d61ce4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9376],{8225:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var a=t(7462),r=(t(7294),t(3905)),l=t(5657);const i={sidebar_position:1,title:"Simple model",description:"A simple model with a single installation"},o="Simple model example",s={unversionedId:"about/modelling/examples/simple",id:"about/modelling/examples/simple",title:"Simple model",description:"A simple model with a single installation",source:"@site/docs/about/modelling/examples/simple.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/simple",permalink:"/ecalc/docs/about/modelling/examples/simple",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/simple.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Simple model",description:"A simple model with a single installation"},sidebar:"about",previous:{title:"Examples",permalink:"/ecalc/docs/about/modelling/examples/"},next:{title:"Advanced model",permalink:"/ecalc/docs/about/modelling/examples/advanced"}},p={},d=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"VARIABLES",id:"variables",level:2},{value:"INSTALLATION",id:"installation",level:2},{value:"GENERATORSETS",id:"generatorsets",level:3},{value:"FUELCONSUMERS",id:"fuelconsumers",level:3},{value:"ENERGY_USAGE_MODEL",id:"energy_usage_model",level:2},{value:"Full eCalc YAML model",id:"full-ecalc-yaml-model",level:2},{value:"Input files",id:"input-files",level:2}],m={toc:d},E="wrapper";function u(e){let{components:n,...t}=e;return(0,r.kt)(E,(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"simple-model-example"},"Simple model example"),(0,r.kt)("p",null,"The following is an example with one installation called ",(0,r.kt)("inlineCode",{parentName:"p"},"Installation A")," that exports oil (",(0,r.kt)("inlineCode",{parentName:"p"},"OIL_PROD"),") and gas (",(0,r.kt)("inlineCode",{parentName:"p"},"GAS_PROD"),").\nThe installation emits CO",(0,r.kt)("sub",null,"2")," that is subject to taxation and emission quotas."),(0,r.kt)("p",null,"On this installation, the following components are identified:"),(0,r.kt)(l.G,{chart:"graph TD;\n A(Installation A) --\x3e B(Flare);\n A --\x3e C(Gas export compressor);\n A --\x3e D(Generator set A);\n D --\x3e E(Base production load);\n D --\x3e F(Gas injection compressor);\n D --\x3e G(Produced water reinjection pump);\n D --\x3e H(Sea water injection pump);\n style A stroke:red;\n style E stroke:blue;\n style F stroke:blue;\n style G stroke:blue;\n style H stroke:blue;",mdxType:"Mermaid"}),(0,r.kt)("p",null,"The results of a performed characterization of the equipment are listed below:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Consumer"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Generator set A"),(0,r.kt)("td",{parentName:"tr",align:null},"Generator set"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable fuel consumer with electricity to fuel function")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Base production load"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Constant load 11.8 MW")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Gas injection compressor"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable consumption depending on gas injection rate and lift gas rate")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Produced water reinjection pump"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Sea water injection pump"),(0,r.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable consumption depending on a complex combination on water injection rate and water production rate")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Flare"),(0,r.kt)("td",{parentName:"tr",align:null},"Direct fuel consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Before 1.1.2005: Constant fuel rate 10000 Sm",(0,r.kt)("sup",null,"3"),"/day, From 1.1.2005: Constant fuel rate 7000 Sm",(0,r.kt)("sup",null,"3"),"/day")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Gas export compressor"),(0,r.kt)("td",{parentName:"tr",align:null},"Direct fuel consumer"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable fuel consumer depending on gas sales rate")))),(0,r.kt)("h2",{id:"yaml-model-overview"},"YAML model overview"),(0,r.kt)("p",null,"The YAML model consist of these main components:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Time series inputs - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")),(0,r.kt)("li",{parentName:"ul"},"Facility characterization input - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")),(0,r.kt)("li",{parentName:"ul"},"Fuel input - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")),(0,r.kt)("li",{parentName:"ul"},"Model variables - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES")),(0,r.kt)("li",{parentName:"ul"},"Installation topology - ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"))),(0,r.kt)("p",null,"The YAML setup file looks like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"TIME_SERIES:\n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nVARIABLES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n")),(0,r.kt)("p",null,"We will now replace the placeholders for each of the main keywords above."),(0,r.kt)("h2",{id:"time_series"},"TIME_SERIES"),(0,r.kt)("p",null,"The reservoir variables, in this case, are found in a CSV (Comma separated file) ",(0,r.kt)("inlineCode",{parentName:"p"},"production_data.csv"),".\nWe give the time-series data a name that can be referenced as variables elsewhere in the form ",(0,r.kt)("inlineCode",{parentName:"p"},"<NAME>:<NAME OF COLUMN>"),".\nSee ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," for further details."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"TIME_SERIES:\n - NAME: SIM\n FILE: production_data.csv\n TYPE: DEFAULT\n")),(0,r.kt)("h2",{id:"facility_inputs"},"FACILITY_INPUTS"),(0,r.kt)("p",null,"We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets,\ntabulated/sampled models and pump charts.\nSee ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")," for further details."),(0,r.kt)("p",null,"Here we define a tabulated genset, a sampled compressor, a sampled compressor driven by a turbine, a sampled pump,\nand a single speed pump chart. These will be used in the final model for illustration.\nNote that more complicated energy models are defined under the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS-keyword"),"."),(0,r.kt)("p",null,"See the input data further down to understand the input formats."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"FACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: compressor_sampled\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: compressor_with_turbine_sampled\n FILE: compressor_sampled_with_turbine.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_sampled\n FILE: pump_sampled.csv\n TYPE: TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n")),(0,r.kt)("h2",{id:"fuel_types"},"FUEL_TYPES"),(0,r.kt)("p",null,"In this example there is only one ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," - ",(0,r.kt)("inlineCode",{parentName:"p"},"fuel_gas"),". This has a price/value\nof 1.5 NOK/Sm",(0,r.kt)("sup",null,"3")," and the emissions we model with the fuel is CO",(0,r.kt)("sub",null,"2"),". The CO",(0,r.kt)("sub",null,"2")," factor\nis 2.19 kg CO2 per Sm",(0,r.kt)("sup",null,"3")," fuel gas burned. The CO",(0,r.kt)("sub",null,"2")," tax is set to 1.5 NOK/Sm",(0,r.kt)("sup",null,"3"),"\nfuel gas burned, and it has a quota price of 260 NOK/ton."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"FUEL_TYPES:\n - NAME: fuel_gas\n PRICE: 1.5 #NOK/Sm3\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.19 #CO2/Sm3 fuel gas burned\n TAX: 1.5 #NOK/Sm3 fuel gas burned\n QUOTA: 260 #NOK/ton\n")),(0,r.kt)("h2",{id:"variables"},"VARIABLES"),(0,r.kt)("p",null,"To run the model it is recommended to specify ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES"),",\ninstead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model\nby allowing descriptive variable names and avoid duplications."),(0,r.kt)("p",null,"For our model, we specify the following variables:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"VARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent\n salt_water_injection_rate_m3_per_day:\n VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n gas_injection_rate_sm3_per_day:\n VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT\n produced_water_reinjection_condition:\n VALUE: SIM;WATER_PROD > 1500\n produced_water_reinjection_total_system_rate_m3_per_day:\n VALUE: SIM;WATER_PROD\n flare_fuel_rate_sm3_day:\n 1995-10-01:\n VALUE: 10000\n 2005-01-01:\n VALUE: 7000\n")),(0,r.kt)("p",null,"We reference the ",(0,r.kt)("a",{parentName:"p",href:"#time_series"},"TIME_SERIES")," ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM")," using the column names from the CSV file. Here we use for example\n",(0,r.kt)("inlineCode",{parentName:"p"},"SIM:OIL_PROD")," (Field Oil Production Rate) ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM:GAS_PROD")," (Field Gas Sales Rate)."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"It is possible to specify if-else conditions by multiplying with boolean values.\nThis has been done in the $var.salt_water_injection_rate_m3_per_day variable example above.")),(0,r.kt)("h2",{id:"installation"},"INSTALLATION"),(0,r.kt)("p",null,"An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form\nof generatorsets (with electric sub-consumers), and direct fuel consumers."),(0,r.kt)("p",null,"We specify:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"NAME"),": the installation name"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"HCEXPORT"),": Hydrocarbon export in Sm",(0,r.kt)("sup",null,"3"),"/day by referring to the variable specified under ",(0,r.kt)("a",{parentName:"li",href:"#variables"},"VARIABLES")," above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"FUEl"),": Default fuel specified in ",(0,r.kt)("a",{parentName:"li",href:"#fuel_types"},"FUEL_TYPES")," above.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n")),(0,r.kt)("h3",{id:"generatorsets"},"GENERATORSETS"),(0,r.kt)("p",null,"There is one generator set, ",(0,r.kt)("inlineCode",{parentName:"p"},"Generator set A"),". This has a power to fuel function defined in\n",(0,r.kt)("a",{parentName:"p",href:"#facility_inputs"},"FACILITY_INPUTS")," with the name ",(0,r.kt)("inlineCode",{parentName:"p"},"genset"),". Further, the consumers getting\npower from the generator set are ",(0,r.kt)("em",{parentName:"p"},"Base production load"),", ",(0,r.kt)("em",{parentName:"p"},"Gas injection compressor"),", ",(0,r.kt)("em",{parentName:"p"},"Produced water re-injection pump"),"\nand ",(0,r.kt)("em",{parentName:"p"},"Sea-water injection pump"),". The setup for ",(0,r.kt)("inlineCode",{parentName:"p"},"Generator set A")," thus becomes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," GENERATORSETS:\n - NAME: Generator set A\n ELECTRICITY2FUEL: genset\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n <placeholder>\n")),(0,r.kt)("h3",{id:"fuelconsumers"},"FUELCONSUMERS"),(0,r.kt)("p",null,"The direct fuel consumers are ",(0,r.kt)("strong",{parentName:"p"},"Flare")," and ",(0,r.kt)("strong",{parentName:"p"},"Gas export compressor"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'}," FUELCONSUMERS:\n - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Gas export compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <placeholder>\n")),(0,r.kt)("h2",{id:"energy_usage_model"},"ENERGY_USAGE_MODEL"),(0,r.kt)("p",null,"We will now fill in the final placeholders with detailed ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"s."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Base production load")," has a constant load of 11.8 MW:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 11.8 # MW\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Gas injection compressor")," is represented by a tabulated (sampled) energy usage model defining the relationship\nbetween the gas injection rate ","[Sm",(0,r.kt)("sup",null,"3"),"/day]"," and the corresponding power requirement. The gas rate is already defined\nin the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"gas_injection_rate_sm3_per_day")," as ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM;GAS_INJ {+} SIM;GAS_LIFT"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_sampled\n RATE: $var.gas_injection_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Produced water reinjection pump")," is variable and its energy function is dependent on the field's water\nproduction rate (",(0,r.kt)("inlineCode",{parentName:"p"},"WATER_PROD"),") that is set in the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"produced_water_reinjection_condition")," as ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM;WATER_PROD"),".\nThe pump only runs when the variables ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"produced_water_reinjection_condition")," evaluates to true as ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM;WATER_PROD > 1500"),".\nThis is when the water production is above 1500 Sm3/day. Fluid density, suction pressure and discharge pressure\nis also defined:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.produced_water_reinjection_condition\n ENERGYFUNCTION: pump_chart\n RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day\n FLUID_DENSITY: 1010\n SUCTION_PRESSURE: 10 # [bara]\n DISCHARGE_PRESSURE: 200 # [bara]\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Sea water injection pump")," has an energy function that is dependent on the seawater injection rate.\nThis rate is not modeled explicitly in the reservoir input source, but it may be computed\nfrom the injection (",(0,r.kt)("inlineCode",{parentName:"p"},"WATER_INJ"),") and production (",(0,r.kt)("inlineCode",{parentName:"p"},"WATER_PROD"),") rate by the following rules:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In general, the seawater injection rate (",(0,r.kt)("inlineCode",{parentName:"p"},"SEAWATER_INJ"),"), is the difference between injected and\nproduced water: ",(0,r.kt)("inlineCode",{parentName:"p"},"SEAWATER_INJ = WATER_INJ - WATER_PROD"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"When the produced water rate is below 1500 SM3/day, this goes directly to sea, such that\n",(0,r.kt)("inlineCode",{parentName:"p"},"SEAWATER_INJ = WATER_INJ")," when ",(0,r.kt)("inlineCode",{parentName:"p"},"WATER_PROD < 1500"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"When the produced water rate is between 17000 and 18500 SM3/day, everything above 17000 SM3/day\ngoes directly to the sea, thus ",(0,r.kt)("inlineCode",{parentName:"p"},"SEAWATER_INJ = WATER_INJ - 17000")," when ",(0,r.kt)("inlineCode",{parentName:"p"},"17000 < WATER_PROD < 18500"),"."))),(0,r.kt)("p",null,"This is specified as the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"sea_water_injection_rate_m3_per_day")," above and is defined as:"),(0,r.kt)("p",null,"The model is specified:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: pump_sampled\n VARIABLES:\n - NAME: RATE\n EXPRESSION: $var.sea_water_injection_rate_m3_per_day\n")),(0,r.kt)("p",null,"The flare is changing on the 1st of January 2005. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"flare_fuel_rate_sm3_day"),"\nabove."),(0,r.kt)("p",null,"The model is specified:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_fuel_rate_sm3_day\n")),(0,r.kt)("p",null,"Gasexport is a variable fuel consumer whose energy function depends on the field gas sales rate (",(0,r.kt)("inlineCode",{parentName:"p"},"GAS_PROD"),") defined\nin the variable ",(0,r.kt)("a",{parentName:"p",href:"#variables"},"gas_export_rate_sm3_per_day")," as ",(0,r.kt)("inlineCode",{parentName:"p"},"SIM;GAS_PROD"),". Even though it is not used in the eCalc model, suction and discharge pressure needs to be specified in order for the model to run. "),(0,r.kt)("p",null,"The model is specified:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: Gas export compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_with_turbine_sampled\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n")),(0,r.kt)("h2",{id:"full-ecalc-yaml-model"},"Full eCalc YAML model"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="model.yaml"',title:'"model.yaml"'},"TIME_SERIES:\n - NAME: SIM\n FILE: production_data.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: compressor_sampled\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: compressor_with_turbine_sampled\n FILE: compressor_sampled_with_turbine.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_sampled\n FILE: pump_sampled.csv\n TYPE: TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n\nFUEL_TYPES:\n - NAME: fuel_gas\n PRICE: 1.5 # NOK/Sm3\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.19 # CO2/Sm3 fuel gas burned\n TAX: 1.5 # NOK/Sm3 fuel gas burned\n QUOTA: 260 # NOK/ton\n\nVARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent\n salt_water_injection_rate_m3_per_day:\n VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n gas_injection_rate_sm3_per_day:\n VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT\n produced_water_reinjection_condition:\n VALUE: SIM;WATER_PROD > 1500\n produced_water_reinjection_total_system_rate_m3_per_day:\n VALUE: SIM;WATER_PROD\n flare_fuel_rate_sm3_day:\n 1995-10-01:\n VALUE: 10000\n 2005-01-01:\n VALUE: 7000\n\nINSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: Generator set A\n ELECTRICITY2FUEL: genset\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 11.8 # MW\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_sampled\n RATE: $var.gas_injection_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.produced_water_reinjection_condition\n ENERGYFUNCTION: pump_chart\n RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day\n FLUID_DENSITY: 1010\n SUCTION_PRESSURE: 10 # bara\n DISCHARGE_PRESSURE: 200 # bara\n - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: pump_sampled\n VARIABLES:\n - NAME: RATE\n EXPRESSION: $var.salt_water_injection_rate_m3_per_day\n FUELCONSUMERS:\n - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_fuel_rate_sm3_day\n - NAME: Gas export compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_with_turbine_sampled\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n")),(0,r.kt)("h2",{id:"input-files"},"Input files"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="compressor_sampled.csv"',title:'"compressor_sampled.csv"'},"RATE,POWER\n#[Sm3/day],[MW]\n0,0\n1,4.1\n100000000,4.1\n200000000,4.1\n210000000,4.1\n220000000,4.4\n230000000,4.8\n240000000,5.1\n250000000,5.4\n260000000,5.8\n270000000,6.1\n280000000,6.4\n290000000,6.8\n300000000,7.1\n500000000,14.2\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="compressor_sampled_with_turbine.csv"',title:'"compressor_sampled_with_turbine.csv"'},"RATE,FUEL\n#[Sm3/day],[Sm3/day]\n0,0\n0.1,50000\n3000000,50000\n3500000,130000\n7000000,170000\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="genset.csv"',title:'"genset.csv"'},"POWER,FUEL\n#[MW],[Sm3/day]\n0, 0\n0.1, 65000\n10.0, 75000\n20.0, 126000\n40.0, 250000\n100.0, 750000\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="pump_chart.csv"',title:'"pump_chart.csv"'},"SPEED,RATE,HEAD,EFFICIENCY\n3250,250,2640,59\n3250,360,2490,68\n3250,500,2342,77\n3250,600,2210,80\n3250,667,2068,78\n3250,735,1870,74\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="pump_sampled.csv"',title:'"pump_sampled.csv"'},"RATE,POWER\n#[Sm3/day],[MW]\n0,0\n1,3\n8500,4\n9000,4\n17000,6\n17500,9\n36000,13\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="production_data.csv"',title:'"production_data.csv"'},"Dates, OIL_PROD, GAS_PROD, WATER_PROD, WATER_INJ, GAS_INJ, GAS_LIFT\n#, Sm3/d, Sm3/d, m3/d, m3/d, Sm3/d, Sm3/d\n2020-01-01 00:00:00, 9000, 3500000, 18000, 34000, 2200000, 130000\n2021-01-01 00:00:00, 8000, 3600000, 19000, 33000, 2200000, 170000\n2022-01-01 00:00:00, 7000, 3700000, 15000, 30000, 2200000, 210000\n2023-01-01 00:00:00, 6000, 3800000, 16000, 33000, 2300000, 240000\n2024-01-01 00:00:00, 6000, 3900000, 14000, 35000, 2300000, 280000\n2024-12-01 00:00:00, 6000, 4000000, 15000, 36000, 2400000, 310000\n2026-01-01 00:00:00, 7000, 4100000, 18000, 36000, 2400000, 350000\n2027-01-01 00:00:00, 6000, 4500000, 15000, 38000, 2400000, 390000\n2028-01-01 00:00:00, 6000, 3500000, 12000, 33000, 2400000, 430000\n2029-01-01 00:00:00, 5000, 2500000, 14000, 36000, 2400000, 460000\n2030-01-01 00:00:00, 6000, 2000000, 16000, 35000, 2400000, 500000\n2031-01-01 00:00:00, 4000, 3000000, 14000, 33000, 2400000, 530000\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7d3b81bb.34d1dcbc.js b/assets/js/7d3b81bb.34d1dcbc.js new file mode 100644 index 0000000000..47acbb78a0 --- /dev/null +++ b/assets/js/7d3b81bb.34d1dcbc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8230],{4959:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=t(7462),n=(t(7294),t(3905));t(5657);const i={slug:"v7-4-release",title:"v7.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:7},o="eCalc v7.4",l={unversionedId:"changelog/v7-4",id:"changelog/v7-4",title:"v7.4",description:"Features",source:"@site/docs/changelog/v7-4.md",sourceDirName:"changelog",slug:"/changelog/v7-4-release",permalink:"/ecalc/docs/changelog/v7-4-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-4.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:7,frontMatter:{slug:"v7-4-release",title:"v7.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:7},sidebar:"changelog",previous:{title:"v7.3",permalink:"/ecalc/docs/changelog/v7-3-release"},next:{title:"v7.5",permalink:"/ecalc/docs/changelog/v7-5-release"}},s={},p=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}],m={toc:p},u="wrapper";function c(e){let{components:a,...t}=e;return(0,n.kt)(u,(0,r.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"ecalc-v74"},"eCalc v7.4"),(0,n.kt)("h2",{id:"features"},(0,n.kt)("em",{parentName:"h2"},"Features")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Added is_valid and is_extrapolation flags in JSON-output.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Added is_valid flags to all energy usage model and consumer model results.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add additional result data when compressors are running outside of capacity")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add Direct Emitters to JSON-output.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add power capacity margin for generator set results.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add design head, rate and efficiency for generic compressor charts from design point.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add UNITS to PUMP_CHART_SINGLE_SPEED and PUMP_CHART_VARIABLE_SPEED")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Added FixedSpeedPressureControl to VariableSpeedCompressorTrainCommonShaft and VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPressures, enabling eCalc to possibly find a solution either along the minimum speed curve or through choking if the discharge pressure at minimum speed it too high. Default set to DOWNSTREAM_CHOKING.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"BREAKING CHANGE!"),": When specifying a stage in a VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPRessures, the STREAM yaml keyword has been changed from a string to a list, to allow for multiple streams entering or leaving the compressor train at the same stage."),(0,n.kt)("p",{parentName:"li"},".. code-block:: yaml"),(0,n.kt)("p",{parentName:"li"}," STAGES:"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"}," - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"BREAKING CHANGE!"),": A CONSUMER with a CONSUMER_SYSTEM. Mixing between SYSTEM and non-system is no longer supported.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"BREAKING CHANGE!"),": User MUST specify FUEL or POWER as one of the headers in TABULAR format. This was documented as mandatory, but not validated properly, hence eCalc would be allowed to run assuming POWER (incorrectly)."))),(0,n.kt)("h2",{id:"fixes"},(0,n.kt)("em",{parentName:"h2"},"Fixes")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Having several ingoing/outgoing streams at the same compressor train stage should now actually work."),(0,n.kt)("li",{parentName:"ul"},"Extrapolation flag in JSON/CSV-output now correctly indicates if data has been extrapolated. is_valid now indicates if datapoint is valid when extrapolation is turned off."),(0,n.kt)("li",{parentName:"ul"},"Speed-column no longer required for single speed compressor chart read from file"),(0,n.kt)("li",{parentName:"ul"},"Support time-slots for CONSUMER with ENERGY_USAGE_MODEL TYPE: CONSUMER_SYSTEM"),(0,n.kt)("li",{parentName:"ul"},"Re-add support for FUEL timeslots"),(0,n.kt)("li",{parentName:"ul"},'Failing compressor train when target pressure is too low and pressure control is used. Now correctly runs with valid result and chart area flag "below minimum flow rate".'),(0,n.kt)("li",{parentName:"ul"},"Use of TABULATED energy_usage_model was not supported in new json result format causing error, will now work."),(0,n.kt)("li",{parentName:"ul"},"Incorrect default energy_usage_type POWER was always set for TABULATED energy_usage_model. Now it will be set based on FUEL or POWER column specified in facility input. eCalc will fail if neither FUEL nor POWER is specified in the facility inputs file. Patched in v7.4.1"),(0,n.kt)("li",{parentName:"ul"},"Correct LTP gasTurbineCompressorConsumption calculation when a consumer is not initialized at first timestep of global time vector. Patched in v7.4.2"),(0,n.kt)("li",{parentName:"ul"},"Choke discharge pressure when using DOWNSTREAM_PRESSURE_CONTROL for variable speed compressor train. Patched in v7.4.2"),(0,n.kt)("li",{parentName:"ul"},"eCalc must support when using more than one energy usage model for calculating FuelConsumerPowerConsumption for LTP. Previously this resulted in missing calculations. Patched in v7.4.3.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7db788f5.77dcba9d.js b/assets/js/7db788f5.77dcba9d.js new file mode 100644 index 0000000000..afe5d3a0a4 --- /dev/null +++ b/assets/js/7db788f5.77dcba9d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3074],{4430:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var a=n(7462),i=(n(7294),n(3905));n(5657);const r={title:"Installations",sidebar_position:7,description:"Guide on how to use installations"},o=void 0,s={unversionedId:"about/modelling/setup/installations/index",id:"about/modelling/setup/installations/index",title:"Installations",description:"Guide on how to use installations",source:"@site/docs/about/modelling/setup/installations/index.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/",permalink:"/ecalc/docs/about/modelling/setup/installations/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/index.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Installations",sidebar_position:7,description:"Guide on how to use installations"},sidebar:"about",previous:{title:"Variables",permalink:"/ecalc/docs/about/modelling/setup/variables"},next:{title:"Generator sets",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations"}},l={},d=[{value:"Referring to time series",id:"referring-to-time-series",level:3},{value:"Time intervals for variables/expressions and models",id:"time-intervals-for-variablesexpressions-and-models",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"General structure",id:"general-structure",level:3},{value:"Referring to time series",id:"referring-to-time-series-1",level:3},{value:"Time intervals",id:"time-intervals",level:3}],p={toc:d},m="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(m,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," keyword is ",(0,i.kt)("strong",{parentName:"p"},"mandatory")," within the eCalc\u2122 YAML file.")),(0,i.kt)("p",null,"In ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Essentially installations on which fuel is burned to generate energy for the consumers.")),(0,i.kt)("p",null,"The structure of the keywords under ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),"\nis linked to the structure in the general consumer overview for an installation."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")," is optional, and generally reserved for use with LTP."),(0,i.kt)("h3",{id:"referring-to-time-series"},"Referring to time series"),(0,i.kt)("p",null,"In the installations set up, one may refer to variables from ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES"),"\nin many places by using ",(0,i.kt)("inlineCode",{parentName:"p"},"expressions")," to build up custom, or changing, configurations."),(0,i.kt)("p",null,"Referring to variables is done on the format:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"<KEY>;<VARIABLE_NAME>\n")),(0,i.kt)("p",null,"where ",(0,i.kt)("inlineCode",{parentName:"p"},"<KEY>")," must be defined in ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/time_series"},"TIME_SERIES"),", defining the time series input source\n(e.g., CSV file), and ",(0,i.kt)("inlineCode",{parentName:"p"},"<VARIABLE_NAME>")," is the name of the variable.\nSee ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/time_series"},"TIME SERIES")," for more examples"),(0,i.kt)("h3",{id:"time-intervals-for-variablesexpressions-and-models"},"Time intervals for variables/expressions and models"),(0,i.kt)("p",null,"For various reasons, the data in the ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," section may vary in time.\nThe consumers may need to be modeled differently due to rebuilds or degeneration. It could be that the user wants to\nmake a simple model for some periods and a more detailed model for others (e.g., a rate only model early time periods and a pressure\ndependent model in the field's late life)."),(0,i.kt)("p",null,"For the fields that support multiple time intervals, the syntax is generally to insert a\ndate on the format ",(0,i.kt)("inlineCode",{parentName:"p"},"YYYY-MM-DD")," followed by the expression/model for the time interval between\nthis date and the next entered date. See ",(0,i.kt)("inlineCode",{parentName:"p"},"Time intervals")," for an example."),(0,i.kt)("admonition",{title:"Note",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"When time dependency is used, the values before the first time default to 0 (zero)")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/HCEXPORT"},"HCEXPORT")," is zero before the first time given."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")," will have 0 fuel usage before the first time defined, despite a non-zero power load."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FUEL"},"FUEL"),": The fuel rate will be 0 before the first entered date."),(0,i.kt)("li",{parentName:"ul"},"Consumer energy consumption will be 0 before the first defined time.")),(0,i.kt)("h2",{id:"format"},"Format"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n - NAME: <name of installation 1>\n GENERATORSETS: <generator set specifications for installation 1>\n FUELCONSUMERS: <fuel consumer specifications for installation 1>\n FUEL: <fuel specification for installation 1>\n HCEXPORT: <hydrocarbon export specification for installation 1>\n REGULARITY: <regularity specification for installation 1>\n DIRECT_EMITTERS: <direct emissions specification for installation 1>\n CATEGORY: <category for installation 1>\n - NAME: <name of installation 2>\n GENERATORSETS: <generator set specifications for installation 2>\n FUELCONSUMERS: <fuel consumer specifications for installation 2>\n FUEL: <fuel specification for installation 2>\n HCEXPORT: <hydrocarbon export specification for installation 2>\n REGULARITY: <regularity specification for installation 2>\n DIRECT_EMITTERS: <direct emissions specification for installation 2>\n CATEGORY: <category for installation 2>\n - ...\n")),(0,i.kt)("h2",{id:"example"},"Example"),(0,i.kt)("h3",{id:"general-structure"},"General structure"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS\n - NAME: Platform_A\n CATEGORY: FIXED\n <The data for installation 1 to be put here>\n - NAME: Platform_B\n CATEGORY: MOBILE\n <The data for installation 2 to be put here>\n")),(0,i.kt)("h3",{id:"referring-to-time-series-1"},"Referring to time series"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"SIM;OIL_PROD\n")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"SIM")," is the key defined in ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES"),"."),(0,i.kt)("p",null,"The user can define expressions of variables,\nsee ",(0,i.kt)("inlineCode",{parentName:"p"},"expressions")," for details. The following is an example of using expressions:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"SIM1;WATER_PROD:FIELD_A {+} SIM2;WATER_PROD:FIELD_B\n")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"SIM1")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"SIM2")," are here different reservoir sources with potential different time steps.\nThis is not a problem and handled by eCalc automatically."),(0,i.kt)("h3",{id:"time-intervals"},"Time intervals"),(0,i.kt)("p",null,"This example uses the ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/HCEXPORT"},"HCEXPORT")," keyword."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Example: same expression for the entire time frame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"HCEXPORT: SIM;OIL_PROD\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Example: expression varies through time")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"HCEXPORT:\n 2001-01-01: SIM1;OIL_PROD\n 2005-01-01: SIM2:OIL_PROD {+} SIM2;GAS_SALES\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7e6991bb.d7e0dc19.js b/assets/js/7e6991bb.d7e0dc19.js new file mode 100644 index 0000000000..28021ce219 --- /dev/null +++ b/assets/js/7e6991bb.d7e0dc19.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2040],{2362:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>i,default:()=>s,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var n=a(7462),l=(a(7294),a(3905));a(5657);const r={title:"Sampled compressor model",sidebar_position:3,description:"Sampled compressor model"},i=void 0,p={unversionedId:"about/modelling/setup/facility_inputs/sampled_compressor_model",id:"about/modelling/setup/facility_inputs/sampled_compressor_model",title:"Sampled compressor model",description:"Sampled compressor model",source:"@site/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/sampled_compressor_model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Sampled compressor model",sidebar_position:3,description:"Sampled compressor model"},sidebar:"about",previous:{title:"Pump chart",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},next:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular"}},m={},d=[{value:"Format",id:"format",level:2},{value:"Header requirements for the sampled compressor csv file",id:"header-requirements-for-the-sampled-compressor-csv-file",level:2},{value:"Units",id:"units",level:2},{value:"Example tables",id:"example-tables",level:2},{value:"1D example",id:"1d-example",level:3},{value:"3D example",id:"3d-example",level:3}],o={toc:d},u="wrapper";function s(t){let{components:e,...a}=t;return(0,l.kt)(u,(0,n.Z)({},o,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"The compressor model is set up in an external tool, and this model is sampled by\nrunning a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a ",(0,l.kt)("inlineCode",{parentName:"p"},".csv")," file and\ninputted into eCalc\u2122. Each line in the ",(0,l.kt)("inlineCode",{parentName:"p"},".csv")," defines a point (rate, suction pressure, discharge pressure) and the total energy usage."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For ",(0,l.kt)("strong",{parentName:"p"},"electrically driven")," compressor trains. The total energy usage should be given in megawatts (MW).")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For ",(0,l.kt)("strong",{parentName:"p"},"turbine driven")," compressor trains. It is recommended to give the total energy usage in megawatts (MW) and couple the compressor model to a turbine model. However, it is possible (for backward compatibility) to give the total energy usage as fuel usage in standard cubic meters per day (Sm",(0,l.kt)("sup",null,"3"),"/day) and use the model directly. In this case, you can also provide a POWER (MW) column to calculate power for the shaft based on fuel usage.")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"The latter (turbine driven compressor train) will at some point become deprecated as it is replaced by COMPRESSOR_WITH_TURBINE mentioned above.*")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"Inside the convex hull defined by the input variables, there is a\n",(0,l.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Barycentric_coordinate_system#Interpolation_on_a_triangular_unstructured_grid"},(0,l.kt)("inlineCode",{parentName:"a"},"barycentric interpolation")),"\nbased on a ",(0,l.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Delaunay_triangulation"},(0,l.kt)("inlineCode",{parentName:"a"},"Delaunay triangulation")),".")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"Outside the defined area, there may be extrapolations where this is reasonable, i.e.,"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"for rates lower than the defined rates, the table is extrapolated up to minimum\nflow (to mimic ASV (anti-surge valve)/recirculation valve)"),(0,l.kt)("li",{parentName:"ul"},"the suction pressure is extrapolated down to the defined area"),(0,l.kt)("li",{parentName:"ul"},"the discharge pressure is extrapolated up to defined area to mimic choking when the required\nhead is lower than the compressor operational area.")))),(0,l.kt)("h2",{id:"format"},"Format"),(0,l.kt)("p",null,"The sampled compressor model is defined under the main keyword ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},(0,l.kt)("inlineCode",{parentName:"a"},"FACILITY_INPUTS"))," in the format"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"}," NAME: <model name>\n FILE: <sampled_data>.csv\n TYPE: COMPRESSOR_TABULAR\n")),(0,l.kt)("h2",{id:"header-requirements-for-the-sampled-compressor-csv-file"},"Header requirements for the sampled compressor csv file"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"POWER")," (and/or ",(0,l.kt)("inlineCode",{parentName:"li"},"FUEL"),")"),(0,l.kt)("li",{parentName:"ul"},"A minimum of one (but more are allowed) of the following:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"RATE")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"SUCTION_PRESSURE")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"DISCHARGE_PRESSURE"))))),(0,l.kt)("p",null,"In cases where the model is directly used as a turbine/fuel driven compressor without coupling it to an eCalc turbine\nmodel, ",(0,l.kt)("inlineCode",{parentName:"p"},"POWER")," may be replaced by ",(0,l.kt)("inlineCode",{parentName:"p"},"FUEL"),"."),(0,l.kt)("admonition",{title:"Shaft power reporting ",type:"info"},(0,l.kt)("p",{parentName:"admonition"},"In the case ",(0,l.kt)("inlineCode",{parentName:"p"},"FUEL")," is provided, it is also possible to specify ",(0,l.kt)("inlineCode",{parentName:"p"},"POWER")," in the csv-file in order to calculate shaft power usage for fuel driven compressors")),(0,l.kt)("p",null,"If only ",(0,l.kt)("inlineCode",{parentName:"p"},"POWER")," is provided, we assume that the compressor is electrical-driven\nIf ",(0,l.kt)("inlineCode",{parentName:"p"},"FUEL")," is provided, we assume that the compressor is turbine-driven (also when both ",(0,l.kt)("inlineCode",{parentName:"p"},"FUEL")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"POWER")," is given)"),(0,l.kt)("h2",{id:"units"},"Units"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Quantity"),(0,l.kt)("th",{parentName:"tr",align:null},"Units"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"POWER")),(0,l.kt)("td",{parentName:"tr",align:null},"MW")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"RATE")),(0,l.kt)("td",{parentName:"tr",align:null},"Sm",(0,l.kt)("sup",null,"3"),"/day")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"SUCTION_PRESSURE")),(0,l.kt)("td",{parentName:"tr",align:null},"bar")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"DISCHARGE_PRESSURE")),(0,l.kt)("td",{parentName:"tr",align:null},"bar")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"FUEL")),(0,l.kt)("td",{parentName:"tr",align:null},"Sm",(0,l.kt)("sup",null,"3"),"/day")))),(0,l.kt)("h2",{id:"example-tables"},"Example tables"),(0,l.kt)("h3",{id:"1d-example"},"1D example"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"RATE"),(0,l.kt)("th",{parentName:"tr",align:null},"POWER"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"0"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"100000"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1000000"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2600000"),(0,l.kt)("td",{parentName:"tr",align:null},"15")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"4400000"),(0,l.kt)("td",{parentName:"tr",align:null},"20")))),(0,l.kt)("h3",{id:"3d-example"},"3D example"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"RATE"),(0,l.kt)("th",{parentName:"tr",align:null},"SUCTION_PRESSURE"),(0,l.kt)("th",{parentName:"tr",align:null},"DISCHARGE_PRESSURE"),(0,l.kt)("th",{parentName:"tr",align:null},"POWER"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"10"),(0,l.kt)("td",{parentName:"tr",align:null},"12.72"),(0,l.kt)("td",{parentName:"tr",align:null},"0.3664")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"10"),(0,l.kt)("td",{parentName:"tr",align:null},"26.21"),(0,l.kt)("td",{parentName:"tr",align:null},"2.293")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"26"),(0,l.kt)("td",{parentName:"tr",align:null},"31.36"),(0,l.kt)("td",{parentName:"tr",align:null},"0.2739")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"26"),(0,l.kt)("td",{parentName:"tr",align:null},"70.77"),(0,l.kt)("td",{parentName:"tr",align:null},"6.28")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"34"),(0,l.kt)("td",{parentName:"tr",align:null},"41.21"),(0,l.kt)("td",{parentName:"tr",align:null},"0.368")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"34"),(0,l.kt)("td",{parentName:"tr",align:null},"94.24"),(0,l.kt)("td",{parentName:"tr",align:null},"8.435")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"78"),(0,l.kt)("td",{parentName:"tr",align:null},"94.12"),(0,l.kt)("td",{parentName:"tr",align:null},"0.7401")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"78"),(0,l.kt)("td",{parentName:"tr",align:null},"231.6"),(0,l.kt)("td",{parentName:"tr",align:null},"22.46")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"26"),(0,l.kt)("td",{parentName:"tr",align:null},"36.93"),(0,l.kt)("td",{parentName:"tr",align:null},"4.197")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"26"),(0,l.kt)("td",{parentName:"tr",align:null},"57.43"),(0,l.kt)("td",{parentName:"tr",align:null},"7.32")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"38"),(0,l.kt)("td",{parentName:"tr",align:null},"46.96"),(0,l.kt)("td",{parentName:"tr",align:null},"2.156")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"38"),(0,l.kt)("td",{parentName:"tr",align:null},"106.2"),(0,l.kt)("td",{parentName:"tr",align:null},"9.557")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"54"),(0,l.kt)("td",{parentName:"tr",align:null},"67.26"),(0,l.kt)("td",{parentName:"tr",align:null},"1.95")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"54"),(0,l.kt)("td",{parentName:"tr",align:null},"155.6"),(0,l.kt)("td",{parentName:"tr",align:null},"14.35")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"78"),(0,l.kt)("td",{parentName:"tr",align:null},"94.17"),(0,l.kt)("td",{parentName:"tr",align:null},"1.399")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6.00E+06"),(0,l.kt)("td",{parentName:"tr",align:null},"78"),(0,l.kt)("td",{parentName:"tr",align:null},"231.6"),(0,l.kt)("td",{parentName:"tr",align:null},"22.46")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.10E+07"),(0,l.kt)("td",{parentName:"tr",align:null},"42"),(0,l.kt)("td",{parentName:"tr",align:null},"66.92"),(0,l.kt)("td",{parentName:"tr",align:null},"9.712")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.10E+07"),(0,l.kt)("td",{parentName:"tr",align:null},"42"),(0,l.kt)("td",{parentName:"tr",align:null},"81.63"),(0,l.kt)("td",{parentName:"tr",align:null},"11.89")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.10E+07"),(0,l.kt)("td",{parentName:"tr",align:null},"62"),(0,l.kt)("td",{parentName:"tr",align:null},"75.64"),(0,l.kt)("td",{parentName:"tr",align:null},"3.678")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.10E+07"),(0,l.kt)("td",{parentName:"tr",align:null},"62"),(0,l.kt)("td",{parentName:"tr",align:null},"180.8"),(0,l.kt)("td",{parentName:"tr",align:null},"16.94")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.10E+07"),(0,l.kt)("td",{parentName:"tr",align:null},"78"),(0,l.kt)("td",{parentName:"tr",align:null},"97.79"),(0,l.kt)("td",{parentName:"tr",align:null},"3.452")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1.10E+07"),(0,l.kt)("td",{parentName:"tr",align:null},"78"),(0,l.kt)("td",{parentName:"tr",align:null},"231.6"),(0,l.kt)("td",{parentName:"tr",align:null},"22.46")))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8099.23d0e642.js b/assets/js/8099.23d0e642.js new file mode 100644 index 0000000000..51811207b0 --- /dev/null +++ b/assets/js/8099.23d0e642.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8099],{8099:(t,e,r)=>{r.d(e,{a:()=>c,b:()=>B,c:()=>h,d:()=>N,e:()=>M,f:()=>P,g:()=>I,h:()=>H,i:()=>b,l:()=>p,p:()=>E,s:()=>T,u:()=>g});var a=r(44),i=r(9373),n=r(211),s=r(3047),l=r(7657),d=r(1188);const o={extension:(t,e,r)=>{a.l.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},point:(t,e)=>{t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 12 20").attr("refX",10).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(t,e)=>{t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(t,e)=>{t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},c=(t,e,r,a)=>{e.forEach((e=>{o[e](t,r,a)}))};const h=(t,e,r,n)=>{let l=t||"";if("object"==typeof l&&(l=l[0]),(0,a.k)((0,a.g)().flowchart.htmlLabels)){l=l.replace(/\\n|\n/g,"<br />"),a.l.info("vertexText"+l);let t=function(t){const e=(0,i.Ys)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),a=t.label,n=t.isNode?"nodeLabel":"edgeLabel";var s,l;return r.html('<span class="'+n+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+a+"</span>"),s=r,(l=t.labelStyle)&&s.attr("style",l),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:n,label:(0,s.d)(l).replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`)),labelStyle:e.replace("fill:","color:")});return t}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let a=[];a="string"==typeof l?l.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(l)?l:[];for(const e of a){const a=document.createElementNS("http://www.w3.org/2000/svg","tspan");a.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),a.setAttribute("dy","1em"),a.setAttribute("x","0"),r?a.setAttribute("class","title-row"):a.setAttribute("class","row"),a.textContent=e.trim(),t.appendChild(a)}return t}},p=(t,e,r,l)=>{let d;const o=e.useHtmlLabels||(0,a.k)((0,a.g)().flowchart.htmlLabels);d=r||"node default";const c=t.insert("g").attr("class",d).attr("id",e.domId||e.id),p=c.insert("g").attr("class","label").attr("style",e.labelStyle);let g;g=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const y=p.node();let f;f="markdown"===e.labelType?(0,n.c)(p,(0,a.b)((0,s.d)(g),(0,a.g)()),{useHtmlLabels:o,width:e.width||(0,a.g)().flowchart.wrappingWidth,classes:"markdown-node-label"}):y.appendChild(h((0,a.b)((0,s.d)(g),(0,a.g)()),e.labelStyle,!1,l));let x=f.getBBox();if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const t=f.children[0],e=(0,i.Ys)(f);x=t.getBoundingClientRect(),e.attr("width",x.width),e.attr("height",x.height)}const u=e.padding/2;return o?p.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"):p.attr("transform","translate(0, "+-x.height/2+")"),e.centerLabel&&p.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"),p.insert("rect",":first-child"),{shapeSvg:c,bbox:x,halfPadding:u,label:p}},g=(t,e)=>{const r=e.node().getBBox();t.width=r.width,t.height=r.height};function y(t,e,r,a){return t.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}function f(t,e,r,a){var i=t.x,n=t.y,s=i-a.x,l=n-a.y,d=Math.sqrt(e*e*l*l+r*r*s*s),o=Math.abs(e*r*s/d);a.x<i&&(o=-o);var c=Math.abs(e*r*l/d);return a.y<n&&(c=-c),{x:i+o,y:n+c}}function x(t,e,r,a){var i,n,s,l,d,o,c,h,p,g,y,f,x;if(i=e.y-t.y,s=t.x-e.x,d=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+d,g=i*a.x+s*a.y+d,!(0!==p&&0!==g&&u(p,g)||(n=a.y-r.y,l=r.x-a.x,o=a.x*r.y-r.x*a.y,c=n*t.x+l*t.y+o,h=n*e.x+l*e.y+o,0!==c&&0!==h&&u(c,h)||0==(y=i*l-n*s))))return f=Math.abs(y/2),{x:(x=s*o-l*d)<0?(x-f)/y:(x+f)/y,y:(x=n*d-i*o)<0?(x-f)/y:(x+f)/y}}function u(t,e){return t*e>0}const b=(t,e)=>{var r,a,i=t.x,n=t.y,s=e.x-i,l=e.y-n,d=t.width/2,o=t.height/2;return Math.abs(l)*d>Math.abs(s)*o?(l<0&&(o=-o),r=0===l?0:o*s/l,a=o):(s<0&&(d=-d),r=d,a=0===s?0:d*l/s),{x:i+r,y:n+a}},w={node:function(t,e){return t.intersect(e)},circle:function(t,e,r){return f(t,e,e,r)},ellipse:f,polygon:function(t,e,r){var a=t.x,i=t.y,n=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){s=Math.min(s,t.x),l=Math.min(l,t.y)})):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var d=a-t.width/2-s,o=i-t.height/2-l,c=0;c<e.length;c++){var h=e[c],p=e[c<e.length-1?c+1:0],g=x(t,r,{x:d+h.x,y:o+h.y},{x:d+p.x,y:o+p.y});g&&n.push(g)}return n.length?(n.length>1&&n.sort((function(t,e){var a=t.x-r.x,i=t.y-r.y,n=Math.sqrt(a*a+i*i),s=e.x-r.x,l=e.y-r.y,d=Math.sqrt(s*s+l*l);return n<d?-1:n===d?0:1})),n[0]):t},rect:b},m=(t,e)=>{const{shapeSvg:r,bbox:i}=p(t,e,void 0,!0),n=i.width+e.padding+(i.height+e.padding),s=[{x:n/2,y:0},{x:n,y:-n/2},{x:n/2,y:-n},{x:0,y:-n/2}];a.l.info("Question main (Circle)");const l=y(r,n,n,s);return l.attr("style",e.style),g(e,l),e.intersect=function(t){return a.l.warn("Intersect called"),w.polygon(e,s,t)},r};function k(t,e,r,i){const n=[],s=t=>{n.push(t,0)},l=t=>{n.push(0,t)};e.includes("t")?(a.l.debug("add top border"),s(r)):l(r),e.includes("r")?(a.l.debug("add right border"),s(i)):l(i),e.includes("b")?(a.l.debug("add bottom border"),s(r)):l(r),e.includes("l")?(a.l.debug("add left border"),s(i)):l(i),t.attr("stroke-dasharray",n.join(" "))}const L=(t,e,r)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let i=70,n=10;"LR"===r&&(i=10,n=70);const s=a.append("rect").attr("x",-1*i/2).attr("y",-1*n/2).attr("width",i).attr("height",n).attr("class","fork-join");return g(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return w.rect(e,t)},a},v={rhombus:m,question:m,rect:(t,e)=>{const{shapeSvg:r,bbox:i,halfPadding:n}=p(t,e,"node "+e.classes,!0),s=r.insert("rect",":first-child"),l=i.width+e.padding,d=i.height+e.padding;if(s.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-n).attr("y",-i.height/2-n).attr("width",l).attr("height",d),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(s,e.props.borders,l,d),t.delete("borders")),t.forEach((t=>{a.l.warn(`Unknown node property ${t}`)}))}return g(e,s),e.intersect=function(t){return w.rect(e,t)},r},labelRect:(t,e)=>{const{shapeSvg:r}=p(t,e,"label",!0);a.l.trace("Classes = ",e.classes);const i=r.insert("rect",":first-child");if(i.attr("width",0).attr("height",0),r.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(i,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{a.l.warn(`Unknown node property ${t}`)}))}return g(e,i),e.intersect=function(t){return w.rect(e,t)},r},rectWithTitle:(t,e)=>{let r;r=e.classes?"node "+e.classes:"node default";const n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),s=n.insert("rect",":first-child"),l=n.insert("line"),d=n.insert("g").attr("class","label"),o=e.labelText.flat?e.labelText.flat():e.labelText;let c="";c="object"==typeof o?o[0]:o,a.l.info("Label text abc79",c,o,"object"==typeof o);const p=d.node().appendChild(h(c,e.labelStyle,!0,!0));let y={width:0,height:0};if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const t=p.children[0],e=(0,i.Ys)(p);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}a.l.info("Text 2",o);const f=o.slice(1,o.length);let x=p.getBBox();const u=d.node().appendChild(h(f.join?f.join("<br/>"):f,e.labelStyle,!0,!0));if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const t=u.children[0],e=(0,i.Ys)(u);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}const b=e.padding/2;return(0,i.Ys)(u).attr("transform","translate( "+(y.width>x.width?0:(x.width-y.width)/2)+", "+(x.height+b+5)+")"),(0,i.Ys)(p).attr("transform","translate( "+(y.width<x.width?0:-(x.width-y.width)/2)+", 0)"),y=d.node().getBBox(),d.attr("transform","translate("+-y.width/2+", "+(-y.height/2-b+3)+")"),s.attr("class","outer title-state").attr("x",-y.width/2-b).attr("y",-y.height/2-b).attr("width",y.width+e.padding).attr("height",y.height+e.padding),l.attr("class","divider").attr("x1",-y.width/2-b).attr("x2",y.width/2+b).attr("y1",-y.height/2-b+x.height+b).attr("y2",-y.height/2-b+x.height+b),g(e,s),e.intersect=function(t){return w.rect(e,t)},n},choice:(t,e)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a=[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}];return r.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return w.circle(e,14,t)},r},circle:(t,e)=>{const{shapeSvg:r,bbox:i,halfPadding:n}=p(t,e,void 0,!0),s=r.insert("circle",":first-child");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n).attr("width",i.width+e.padding).attr("height",i.height+e.padding),a.l.info("Circle main"),g(e,s),e.intersect=function(t){return a.l.info("Circle intersect",e,i.width/2+n,t),w.circle(e,i.width/2+n,t)},r},doublecircle:(t,e)=>{const{shapeSvg:r,bbox:i,halfPadding:n}=p(t,e,void 0,!0),s=r.insert("g",":first-child"),l=s.insert("circle"),d=s.insert("circle");return l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n+5).attr("width",i.width+e.padding+10).attr("height",i.height+e.padding+10),d.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n).attr("width",i.width+e.padding).attr("height",i.height+e.padding),a.l.info("DoubleCircle main"),g(e,l),e.intersect=function(t){return a.l.info("DoubleCircle intersect",e,i.width/2+n+5,t),w.circle(e,i.width/2+n+5,t)},r},stadium:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.height+e.padding,n=a.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-n/2).attr("y",-i/2).attr("width",n).attr("height",i);return g(e,s),e.intersect=function(t){return w.rect(e,t)},r},hexagon:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.height+e.padding,n=i/4,s=a.width+2*n+e.padding,l=[{x:n,y:0},{x:s-n,y:0},{x:s,y:-i/2},{x:s-n,y:-i},{x:n,y:-i},{x:0,y:-i/2}],d=y(r,s,i,l);return d.attr("style",e.style),g(e,d),e.intersect=function(t){return w.polygon(e,l,t)},r},rect_left_inv_arrow:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.width+e.padding,n=a.height+e.padding,s=[{x:-n/2,y:0},{x:i,y:0},{x:i,y:-n},{x:-n/2,y:-n},{x:0,y:-n/2}];return y(r,i,n,s).attr("style",e.style),e.width=i+n,e.height=n,e.intersect=function(t){return w.polygon(e,s,t)},r},lean_right:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.width+e.padding,n=a.height+e.padding,s=[{x:-2*n/6,y:0},{x:i-n/6,y:0},{x:i+2*n/6,y:-n},{x:n/6,y:-n}],l=y(r,i,n,s);return l.attr("style",e.style),g(e,l),e.intersect=function(t){return w.polygon(e,s,t)},r},lean_left:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.width+e.padding,n=a.height+e.padding,s=[{x:2*n/6,y:0},{x:i+n/6,y:0},{x:i-2*n/6,y:-n},{x:-n/6,y:-n}],l=y(r,i,n,s);return l.attr("style",e.style),g(e,l),e.intersect=function(t){return w.polygon(e,s,t)},r},trapezoid:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.width+e.padding,n=a.height+e.padding,s=[{x:-2*n/6,y:0},{x:i+2*n/6,y:0},{x:i-n/6,y:-n},{x:n/6,y:-n}],l=y(r,i,n,s);return l.attr("style",e.style),g(e,l),e.intersect=function(t){return w.polygon(e,s,t)},r},inv_trapezoid:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.width+e.padding,n=a.height+e.padding,s=[{x:n/6,y:0},{x:i-n/6,y:0},{x:i+2*n/6,y:-n},{x:-2*n/6,y:-n}],l=y(r,i,n,s);return l.attr("style",e.style),g(e,l),e.intersect=function(t){return w.polygon(e,s,t)},r},rect_right_inv_arrow:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.width+e.padding,n=a.height+e.padding,s=[{x:0,y:0},{x:i+n/2,y:0},{x:i,y:-n/2},{x:i+n/2,y:-n},{x:0,y:-n}],l=y(r,i,n,s);return l.attr("style",e.style),g(e,l),e.intersect=function(t){return w.polygon(e,s,t)},r},cylinder:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.width+e.padding,n=i/2,s=n/(2.5+i/50),l=a.height+s+e.padding,d="M 0,"+s+" a "+n+","+s+" 0,0,0 "+i+" 0 a "+n+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+n+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,o=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",d).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return g(e,o),e.intersect=function(t){const r=w.rect(e,t),a=r.x-e.x;if(0!=n&&(Math.abs(a)<e.width/2||Math.abs(a)==e.width/2&&Math.abs(r.y-e.y)>e.height/2-s)){let i=s*s*(1-a*a/(n*n));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),r.y+=i}return r},r},start:(t,e)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a=r.insert("circle",":first-child");return a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),g(e,a),e.intersect=function(t){return w.circle(e,7,t)},r},end:(t,e)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),a.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),g(e,i),e.intersect=function(t){return w.circle(e,7,t)},r},note:(t,e)=>{e.useHtmlLabels||(0,a.g)().flowchart.htmlLabels||(e.centerLabel=!0);const{shapeSvg:r,bbox:i,halfPadding:n}=p(t,e,"node "+e.classes,!0);a.l.info("Classes = ",e.classes);const s=r.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-n).attr("y",-i.height/2-n).attr("width",i.width+e.padding).attr("height",i.height+e.padding),g(e,s),e.intersect=function(t){return w.rect(e,t)},r},subroutine:(t,e)=>{const{shapeSvg:r,bbox:a}=p(t,e,void 0,!0),i=a.width+e.padding,n=a.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-n},{x:0,y:-n},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-n},{x:-8,y:-n},{x:-8,y:0}],l=y(r,i,n,s);return l.attr("style",e.style),g(e,l),e.intersect=function(t){return w.polygon(e,s,t)},r},fork:L,join:L,class_box:(t,e)=>{const r=e.padding/2;let n;n=e.classes?"node "+e.classes:"node default";const s=t.insert("g").attr("class",n).attr("id",e.domId||e.id),d=s.insert("rect",":first-child"),o=s.insert("line"),c=s.insert("line");let p=0,y=4;const f=s.insert("g").attr("class","label");let x=0;const u=e.classData.annotations&&e.classData.annotations[0],b=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",m=f.node().appendChild(h(b,e.labelStyle,!0,!0));let k=m.getBBox();if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const t=m.children[0],e=(0,i.Ys)(m);k=t.getBoundingClientRect(),e.attr("width",k.width),e.attr("height",k.height)}e.classData.annotations[0]&&(y+=k.height+4,p+=k.width);let L=e.classData.label;void 0!==e.classData.type&&""!==e.classData.type&&((0,a.g)().flowchart.htmlLabels?L+="<"+e.classData.type+">":L+="<"+e.classData.type+">");const v=f.node().appendChild(h(L,e.labelStyle,!0,!0));(0,i.Ys)(v).attr("class","classTitle");let S=v.getBBox();if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const t=v.children[0],e=(0,i.Ys)(v);S=t.getBoundingClientRect(),e.attr("width",S.width),e.attr("height",S.height)}y+=S.height+4,S.width>p&&(p=S.width);const M=[];e.classData.members.forEach((t=>{const r=(0,l.p)(t);let n=r.displayText;(0,a.g)().flowchart.htmlLabels&&(n=n.replace(/</g,"<").replace(/>/g,">"));const s=f.node().appendChild(h(n,r.cssStyle?r.cssStyle:e.labelStyle,!0,!0));let d=s.getBBox();if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const t=s.children[0],e=(0,i.Ys)(s);d=t.getBoundingClientRect(),e.attr("width",d.width),e.attr("height",d.height)}d.width>p&&(p=d.width),y+=d.height+4,M.push(s)})),y+=8;const T=[];if(e.classData.methods.forEach((t=>{const r=(0,l.p)(t);let n=r.displayText;(0,a.g)().flowchart.htmlLabels&&(n=n.replace(/</g,"<").replace(/>/g,">"));const s=f.node().appendChild(h(n,r.cssStyle?r.cssStyle:e.labelStyle,!0,!0));let d=s.getBBox();if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const t=s.children[0],e=(0,i.Ys)(s);d=t.getBoundingClientRect(),e.attr("width",d.width),e.attr("height",d.height)}d.width>p&&(p=d.width),y+=d.height+4,T.push(s)})),y+=8,u){let t=(p-k.width)/2;(0,i.Ys)(m).attr("transform","translate( "+(-1*p/2+t)+", "+-1*y/2+")"),x=k.height+4}let B=(p-S.width)/2;return(0,i.Ys)(v).attr("transform","translate( "+(-1*p/2+B)+", "+(-1*y/2+x)+")"),x+=S.height+4,o.attr("class","divider").attr("x1",-p/2-r).attr("x2",p/2+r).attr("y1",-y/2-r+8+x).attr("y2",-y/2-r+8+x),x+=8,M.forEach((t=>{(0,i.Ys)(t).attr("transform","translate( "+-p/2+", "+(-1*y/2+x+4)+")"),x+=S.height+4})),x+=8,c.attr("class","divider").attr("x1",-p/2-r).attr("x2",p/2+r).attr("y1",-y/2-r+8+x).attr("y2",-y/2-r+8+x),x+=8,T.forEach((t=>{(0,i.Ys)(t).attr("transform","translate( "+-p/2+", "+(-1*y/2+x)+")"),x+=S.height+4})),d.attr("class","outer title-state").attr("x",-p/2-r).attr("y",-y/2-r).attr("width",p+e.padding).attr("height",y+e.padding),g(e,d),e.intersect=function(t){return w.rect(e,t)},s}};let S={};const M=(t,e,r)=>{let i,n;if(e.link){let s;"sandbox"===(0,a.g)().securityLevel?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),i=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s),n=v[e.shape](i,e,r)}else n=v[e.shape](t,e,r),i=n;return e.tooltip&&n.attr("title",e.tooltip),e.class&&n.attr("class","node default "+e.class),S[e.id]=i,e.haveCallback&&S[e.id].attr("class",S[e.id].attr("class")+" clickable"),i},T=(t,e)=>{S[e.id]=t},B=()=>{S={}},E=t=>{const e=S[t.id];a.l.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const r=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+r-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),r};let C={},Y={};const N=()=>{C={},Y={}},P=(t,e)=>{const r=(0,a.k)((0,a.g)().flowchart.htmlLabels),s="markdown"===e.labelType?(0,n.c)(t,e.label,{style:e.labelStyle,useHtmlLabels:r,addSvgBackground:!0}):h(e.label,e.labelStyle);a.l.info("abc82",e,e.labelType);const l=t.insert("g").attr("class","edgeLabel"),d=l.insert("g").attr("class","label");d.node().appendChild(s);let o,c=s.getBBox();if(r){const t=s.children[0],e=(0,i.Ys)(s);c=t.getBoundingClientRect(),e.attr("width",c.width),e.attr("height",c.height)}if(d.attr("transform","translate("+-c.width/2+", "+-c.height/2+")"),C[e.id]=l,e.width=c.width,e.height=c.height,e.startLabelLeft){const r=h(e.startLabelLeft,e.labelStyle),a=t.insert("g").attr("class","edgeTerminals"),i=a.insert("g").attr("class","inner");o=i.node().appendChild(r);const n=r.getBBox();i.attr("transform","translate("+-n.width/2+", "+-n.height/2+")"),Y[e.id]||(Y[e.id]={}),Y[e.id].startLeft=a,_(o,e.startLabelLeft)}if(e.startLabelRight){const r=h(e.startLabelRight,e.labelStyle),a=t.insert("g").attr("class","edgeTerminals"),i=a.insert("g").attr("class","inner");o=a.node().appendChild(r),i.node().appendChild(r);const n=r.getBBox();i.attr("transform","translate("+-n.width/2+", "+-n.height/2+")"),Y[e.id]||(Y[e.id]={}),Y[e.id].startRight=a,_(o,e.startLabelRight)}if(e.endLabelLeft){const r=h(e.endLabelLeft,e.labelStyle),a=t.insert("g").attr("class","edgeTerminals"),i=a.insert("g").attr("class","inner");o=i.node().appendChild(r);const n=r.getBBox();i.attr("transform","translate("+-n.width/2+", "+-n.height/2+")"),a.node().appendChild(r),Y[e.id]||(Y[e.id]={}),Y[e.id].endLeft=a,_(o,e.endLabelLeft)}if(e.endLabelRight){const r=h(e.endLabelRight,e.labelStyle),a=t.insert("g").attr("class","edgeTerminals"),i=a.insert("g").attr("class","inner");o=i.node().appendChild(r);const n=r.getBBox();i.attr("transform","translate("+-n.width/2+", "+-n.height/2+")"),a.node().appendChild(r),Y[e.id]||(Y[e.id]={}),Y[e.id].endRight=a,_(o,e.endLabelRight)}return s};function _(t,e){(0,a.g)().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const H=(t,e)=>{a.l.info("Moving label abc78 ",t.id,t.label,C[t.id]);let r=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){const i=C[t.id];let n=t.x,s=t.y;if(r){const i=d.u.calcLabelPosition(r);a.l.info("Moving label "+t.label+" from (",n,",",s,") to (",i.x,",",i.y,") abc78"),e.updatedPath&&(n=i.x,s=i.y)}i.attr("transform","translate("+n+", "+s+")")}if(t.startLabelLeft){const e=Y[t.id].startLeft;let a=t.x,i=t.y;if(r){const e=d.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);a=e.x,i=e.y}e.attr("transform","translate("+a+", "+i+")")}if(t.startLabelRight){const e=Y[t.id].startRight;let a=t.x,i=t.y;if(r){const e=d.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);a=e.x,i=e.y}e.attr("transform","translate("+a+", "+i+")")}if(t.endLabelLeft){const e=Y[t.id].endLeft;let a=t.x,i=t.y;if(r){const e=d.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);a=e.x,i=e.y}e.attr("transform","translate("+a+", "+i+")")}if(t.endLabelRight){const e=Y[t.id].endRight;let a=t.x,i=t.y;if(r){const e=d.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);a=e.x,i=e.y}e.attr("transform","translate("+a+", "+i+")")}},R=(t,e)=>{a.l.warn("abc88 cutPathAtIntersect",t,e);let r=[],i=t[0],n=!1;return t.forEach((t=>{if(a.l.info("abc88 checking point",t,e),((t,e)=>{const r=t.x,a=t.y,i=Math.abs(e.x-r),n=Math.abs(e.y-a),s=t.width/2,l=t.height/2;return i>=s||n>=l})(e,t)||n)a.l.warn("abc88 outside",t,i),i=t,n||r.push(t);else{const s=((t,e,r)=>{a.l.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(r)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const i=t.x,n=t.y,s=Math.abs(i-r.x),l=t.width/2;let d=r.x<e.x?l-s:l+s;const o=t.height/2,c=Math.abs(e.y-r.y),h=Math.abs(e.x-r.x);if(Math.abs(n-e.y)*l>Math.abs(i-e.x)*o){let t=r.y<e.y?e.y-o-n:n-o-e.y;d=h*t/c;const i={x:r.x<e.x?r.x+d:r.x-h+d,y:r.y<e.y?r.y+c-t:r.y-c+t};return 0===d&&(i.x=e.x,i.y=e.y),0===h&&(i.x=e.x),0===c&&(i.y=e.y),a.l.warn(`abc89 topp/bott calc, Q ${c}, q ${t}, R ${h}, r ${d}`,i),i}{d=r.x<e.x?e.x-l-i:i-l-e.x;let t=c*d/h,n=r.x<e.x?r.x+h-d:r.x-h+d,s=r.y<e.y?r.y+t:r.y-t;return a.l.warn(`sides calc abc89, Q ${c}, q ${t}, R ${h}, r ${d}`,{_x:n,_y:s}),0===d&&(n=e.x,s=e.y),0===h&&(n=e.x),0===c&&(s=e.y),{x:n,y:s}}})(e,i,t);a.l.warn("abc88 inside",t,i,s),a.l.warn("abc88 intersection",s);let l=!1;r.forEach((t=>{l=l||t.x===s.x&&t.y===s.y})),r.some((t=>t.x===s.x&&t.y===s.y))?a.l.warn("abc88 no intersect",s,r):r.push(s),n=!0}})),a.l.warn("abc88 returning points",r),r},I=function(t,e,r,n,s,l){let d=r.points,o=!1;const c=l.node(e.v);var h=l.node(e.w);a.l.info("abc88 InsertEdge: ",r),h.intersect&&c.intersect&&(d=d.slice(1,r.points.length-1),d.unshift(c.intersect(d[0])),a.l.info("Last point",d[d.length-1],h,h.intersect(d[d.length-1])),d.push(h.intersect(d[d.length-1]))),r.toCluster&&(a.l.info("to cluster abc88",n[r.toCluster]),d=R(r.points,n[r.toCluster].node),o=!0),r.fromCluster&&(a.l.info("from cluster abc88",n[r.fromCluster]),d=R(d.reverse(),n[r.fromCluster].node).reverse(),o=!0);const p=d.filter((t=>!Number.isNaN(t.y)));let g;g=("graph"===s||"flowchart"===s)&&r.curve||i.$0Z;const y=(0,i.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(g);let f;switch(r.thickness){case"normal":f="edge-thickness-normal";break;case"thick":case"invisible":f="edge-thickness-thick";break;default:f=""}switch(r.pattern){case"solid":f+=" edge-pattern-solid";break;case"dotted":f+=" edge-pattern-dotted";break;case"dashed":f+=" edge-pattern-dashed"}const x=t.append("path").attr("d",y(p)).attr("id",r.id).attr("class"," "+f+(r.classes?" "+r.classes:"")).attr("style",r.style);let u="";switch(((0,a.g)().flowchart.arrowMarkerAbsolute||(0,a.g)().state.arrowMarkerAbsolute)&&(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,u=u.replace(/\(/g,"\\("),u=u.replace(/\)/g,"\\)")),a.l.info("arrowTypeStart",r.arrowTypeStart),a.l.info("arrowTypeEnd",r.arrowTypeEnd),r.arrowTypeStart){case"arrow_cross":x.attr("marker-start","url("+u+"#"+s+"-crossStart)");break;case"arrow_point":x.attr("marker-start","url("+u+"#"+s+"-pointStart)");break;case"arrow_barb":x.attr("marker-start","url("+u+"#"+s+"-barbStart)");break;case"arrow_circle":x.attr("marker-start","url("+u+"#"+s+"-circleStart)");break;case"aggregation":x.attr("marker-start","url("+u+"#"+s+"-aggregationStart)");break;case"extension":x.attr("marker-start","url("+u+"#"+s+"-extensionStart)");break;case"composition":x.attr("marker-start","url("+u+"#"+s+"-compositionStart)");break;case"dependency":x.attr("marker-start","url("+u+"#"+s+"-dependencyStart)");break;case"lollipop":x.attr("marker-start","url("+u+"#"+s+"-lollipopStart)")}switch(r.arrowTypeEnd){case"arrow_cross":x.attr("marker-end","url("+u+"#"+s+"-crossEnd)");break;case"arrow_point":x.attr("marker-end","url("+u+"#"+s+"-pointEnd)");break;case"arrow_barb":x.attr("marker-end","url("+u+"#"+s+"-barbEnd)");break;case"arrow_circle":x.attr("marker-end","url("+u+"#"+s+"-circleEnd)");break;case"aggregation":x.attr("marker-end","url("+u+"#"+s+"-aggregationEnd)");break;case"extension":x.attr("marker-end","url("+u+"#"+s+"-extensionEnd)");break;case"composition":x.attr("marker-end","url("+u+"#"+s+"-compositionEnd)");break;case"dependency":x.attr("marker-end","url("+u+"#"+s+"-dependencyEnd)");break;case"lollipop":x.attr("marker-end","url("+u+"#"+s+"-lollipopEnd)")}let b={};return o&&(b.updatedPath=d),b.originalPath=r.points,b}},7657:(t,e,r)=>{r.d(e,{p:()=>l,s:()=>g});var a=r(9373),i=r(1188),n=r(44);let s=0;const l=function(t){let e=t.match(/^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/),r=t.match(/^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/);return e&&!r?d(e):r?o(r):c(t)},d=function(t){let e="",r="";try{let a=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",s=t[3]?(0,n.z)(t[3].trim()):"",l=t[4]?t[4].trim():"",d=t[5]?t[5].trim():"";r=a+i+s+" "+l,e=p(d)}catch(a){r=t}return{displayText:r,cssStyle:e}},o=function(t){let e="",r="";try{let a=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",s=t[3]?(0,n.z)(t[3].trim()):"",l=t[4]?t[4].trim():"";r=a+i+"("+s+")"+(t[5]?" : "+(0,n.z)(t[5]).trim():""),e=p(l)}catch(a){r=t}return{displayText:r,cssStyle:e}},c=function(t){let e="",r="",a="",i=t.indexOf("("),s=t.indexOf(")");if(i>1&&s>i&&s<=t.length){let l="",d="",o=t.substring(0,1);o.match(/\w/)?d=t.substring(0,i).trim():(o.match(/[#+~-]/)&&(l=o),d=t.substring(1,i).trim());const c=t.substring(i+1,s);t.substring(s+1,1),r=p(t.substring(s+1,s+2)),e=l+d+"("+(0,n.z)(c.trim())+")",s<t.length&&(a=t.substring(s+2).trim(),""!==a&&(a=" : "+(0,n.z)(a),e+=a))}else e=(0,n.z)(t);return{displayText:e,cssStyle:r}},h=function(t,e,r,a){let i=l(e);const n=t.append("tspan").attr("x",a.padding).text(i.displayText);""!==i.cssStyle&&n.attr("style",i.cssStyle),r||n.attr("dy",a.textHeight)},p=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},g={drawClass:function(t,e,r,a){n.l.debug("Rendering class ",e,r);const i=e.id,s={id:i,label:e.id,width:0,height:0},l=t.append("g").attr("id",a.db.lookUpDomId(i)).attr("class","classGroup");let d;d=e.link?l.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",r.textHeight+r.padding).attr("x",0):l.append("text").attr("y",r.textHeight+r.padding).attr("x",0);let o=!0;e.annotations.forEach((function(t){const e=d.append("tspan").text("\xab"+t+"\xbb");o||e.attr("dy",r.textHeight),o=!1}));let c=e.id;void 0!==e.type&&""!==e.type&&(c+="<"+e.type+">");const p=d.append("tspan").text(c).attr("class","title");o||p.attr("dy",r.textHeight);const g=d.node().getBBox().height,y=l.append("line").attr("x1",0).attr("y1",r.padding+g+r.dividerMargin/2).attr("y2",r.padding+g+r.dividerMargin/2),f=l.append("text").attr("x",r.padding).attr("y",g+r.dividerMargin+r.textHeight).attr("fill","white").attr("class","classText");o=!0,e.members.forEach((function(t){h(f,t,o,r),o=!1}));const x=f.node().getBBox(),u=l.append("line").attr("x1",0).attr("y1",r.padding+g+r.dividerMargin+x.height).attr("y2",r.padding+g+r.dividerMargin+x.height),b=l.append("text").attr("x",r.padding).attr("y",g+2*r.dividerMargin+x.height+r.textHeight).attr("fill","white").attr("class","classText");o=!0,e.methods.forEach((function(t){h(b,t,o,r),o=!1}));const w=l.node().getBBox();var m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));const k=l.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",w.width+2*r.padding).attr("height",w.height+r.padding+.5*r.dividerMargin).attr("class",m).node().getBBox().width;return d.node().childNodes.forEach((function(t){t.setAttribute("x",(k-t.getBBox().width)/2)})),e.tooltip&&d.insert("title").text(e.tooltip),y.attr("x2",k),u.attr("x2",k),s.width=k,s.height=w.height+r.padding+.5*r.dividerMargin,s},drawEdge:function(t,e,r,l,d){const o=function(t){switch(t){case d.db.relationType.AGGREGATION:return"aggregation";case d.db.relationType.EXTENSION:return"extension";case d.db.relationType.COMPOSITION:return"composition";case d.db.relationType.DEPENDENCY:return"dependency";case d.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const c=e.points,h=(0,a.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(a.$0Z),p=t.append("path").attr("d",h(c)).attr("id","edge"+s).attr("class","relation");let g,y,f="";l.arrowMarkerAbsolute&&(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,f=f.replace(/\(/g,"\\("),f=f.replace(/\)/g,"\\)")),1==r.relation.lineType&&p.attr("class","relation dashed-line"),10==r.relation.lineType&&p.attr("class","relation dotted-line"),"none"!==r.relation.type1&&p.attr("marker-start","url("+f+"#"+o(r.relation.type1)+"Start)"),"none"!==r.relation.type2&&p.attr("marker-end","url("+f+"#"+o(r.relation.type2)+"End)");const x=e.points.length;let u,b,w,m,k=i.u.calcLabelPosition(e.points);if(g=k.x,y=k.y,x%2!=0&&x>1){let t=i.u.calcCardinalityPosition("none"!==r.relation.type1,e.points,e.points[0]),a=i.u.calcCardinalityPosition("none"!==r.relation.type2,e.points,e.points[x-1]);n.l.debug("cardinality_1_point "+JSON.stringify(t)),n.l.debug("cardinality_2_point "+JSON.stringify(a)),u=t.x,b=t.y,w=a.x,m=a.y}if(void 0!==r.title){const e=t.append("g").attr("class","classLabel"),a=e.append("text").attr("class","label").attr("x",g).attr("y",y).attr("fill","red").attr("text-anchor","middle").text(r.title);window.label=a;const i=a.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",i.x-l.padding/2).attr("y",i.y-l.padding/2).attr("width",i.width+l.padding).attr("height",i.height+l.padding)}if(n.l.info("Rendering relation "+JSON.stringify(r)),void 0!==r.relationTitle1&&"none"!==r.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",b).attr("fill","black").attr("font-size","6").text(r.relationTitle1)}if(void 0!==r.relationTitle2&&"none"!==r.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",w).attr("y",m).attr("fill","black").attr("font-size","6").text(r.relationTitle2)}s++},drawNote:function(t,e,r,a){n.l.debug("Rendering note ",e,r);const i=e.id,s={id:i,text:e.text,width:0,height:0},l=t.append("g").attr("id",i).attr("class","classGroup");let d=l.append("text").attr("y",r.textHeight+r.padding).attr("x",0);const o=JSON.parse(`"${e.text}"`).split("\n");o.forEach((function(t){n.l.debug(`Adding line: ${t}`),d.append("tspan").text(t).attr("class","title").attr("dy",r.textHeight)}));const c=l.node().getBBox(),h=l.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",c.width+2*r.padding).attr("height",c.height+o.length*r.textHeight+r.padding+.5*r.dividerMargin).node().getBBox().width;return d.node().childNodes.forEach((function(t){t.setAttribute("x",(h-t.getBBox().width)/2)})),s.width=h,s.height=c.height+o.length*r.textHeight+r.padding+.5*r.dividerMargin,s},parseMember:l}}}]); \ No newline at end of file diff --git a/assets/js/826.ccdb5ff3.js b/assets/js/826.ccdb5ff3.js new file mode 100644 index 0000000000..c769d248ef --- /dev/null +++ b/assets/js/826.ccdb5ff3.js @@ -0,0 +1,19003 @@ +"use strict"; +exports.id = 826; +exports.ids = [826]; +exports.modules = { + +/***/ 3502: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (/* binding */ SimpleMarkdown) +/* harmony export */ }); +/* eslint-disable prefer-spread, no-regex-spaces, no-unused-vars, guard-for-in, no-console, no-var */ + +/** + * Simple-Markdown + * =============== + * + * Simple-Markdown's primary goal is to be easy to adapt. It aims + * to be compliant with John Gruber's [Markdown Syntax page][1], + * but compatiblity with other markdown implementations' edge-cases + * will be sacrificed where it conflicts with simplicity or + * extensibility. + * + * If your goal is to simply embed a standard markdown implementation + * in your website, simple-markdown is probably not the best library + * for you (although it should work). But if you have struggled to + * customize an existing library to meet your needs, simple-markdown + * might be able to help. + * + * Many of the regexes and original logic has been adapted from + * the wonderful [marked.js](https://github.com/chjj/marked) + */ +// Flow Type Definitions: +// We want to clarify our defaultRules types a little bit more so clients can +// reuse defaultRules built-ins. So we make some stronger guarantess when +// we can: +// End Flow Definitions +var CR_NEWLINE_R = /\r\n?/g; +var TAB_R = /\t/g; +var FORMFEED_R = /\f/g; +/** + * Turn various whitespace into easy-to-process whitespace + */ + +var preprocess = function preprocess(source) { + return source.replace(CR_NEWLINE_R, "\n").replace(FORMFEED_R, "").replace(TAB_R, " "); +}; + +var populateInitialState = function populateInitialState(givenState, defaultState) { + var state = givenState || {}; + + if (defaultState != null) { + for (var prop in defaultState) { + // $FlowFixMe + if (Object.prototype.hasOwnProperty.call(defaultState, prop)) { + state[prop] = defaultState[prop]; + } + } + } + + return state; +}; +/** + * Creates a parser for a given set of rules, with the precedence + * specified as a list of rules. + * + * @param {SimpleMarkdown.ParserRules} rules + * an object containing + * rule type -> {match, order, parse} objects + * (lower order is higher precedence) + * @param {SimpleMarkdown.OptionalState} [defaultState] + * + * @returns {SimpleMarkdown.Parser} + * The resulting parse function, with the following parameters: + * @source: the input source string to be parsed + * @state: an optional object to be threaded through parse + * calls. Allows clients to add stateful operations to + * parsing, such as keeping track of how many levels deep + * some nesting is. For an example use-case, see passage-ref + * parsing in src/widgets/passage/passage-markdown.jsx + */ + + +var parserFor = function parserFor(rules, defaultState) { + // Sorts rules in order of increasing order, then + // ascending rule name in case of ties. + var ruleList = Object.keys(rules).filter(function (type) { + var rule = rules[type]; + + if (rule == null || rule.match == null) { + return false; + } + + var order = rule.order; + + if ((typeof order !== "number" || !isFinite(order)) && typeof console !== "undefined") { + console.warn("simple-markdown: Invalid order for rule `" + type + "`: " + String(order)); + } + + return true; + }); + ruleList.sort(function (typeA, typeB) { + var ruleA = rules[typeA]; + var ruleB = rules[typeB]; + var orderA = ruleA.order; + var orderB = ruleB.order; // First sort based on increasing order + + if (orderA !== orderB) { + return orderA - orderB; + } + + var secondaryOrderA = ruleA.quality ? 0 : 1; + var secondaryOrderB = ruleB.quality ? 0 : 1; + + if (secondaryOrderA !== secondaryOrderB) { + return secondaryOrderA - secondaryOrderB; // Then based on increasing unicode lexicographic ordering + } else if (typeA < typeB) { + return -1; + } else if (typeA > typeB) { + return 1; + } else { + // Rules should never have the same name, + // but this is provided for completeness. + return 0; + } + }); + var latestState; + + var nestedParse = function nestedParse(source, state) { + var result = []; + state = state || latestState; + latestState = state; + + while (source) { + // store the best match, it's rule, and quality: + var ruleType = null; + var rule = null; + var capture = null; + var quality = NaN; // loop control variables: + + var i = 0; + var currRuleType = ruleList[0]; // $FlowFixMe + + var currRule = rules[currRuleType]; + + do { + var currOrder = currRule.order; + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var currCapture = currRule.match(source, state, prevCaptureStr); + + if (currCapture) { + var currQuality = currRule.quality ? currRule.quality(currCapture, state, prevCaptureStr) : 0; // This should always be true the first time because + // the initial quality is NaN (that's why there's the + // condition negation). + + if (!(currQuality <= quality)) { + ruleType = currRuleType; + rule = currRule; + capture = currCapture; + quality = currQuality; + } + } // Move on to the next item. + // Note that this makes `currRule` be the next item + + + i++; + currRuleType = ruleList[i]; // $FlowFixMe + + currRule = rules[currRuleType]; + } while ( // keep looping while we're still within the ruleList + currRule && ( // if we don't have a match yet, continue + !capture || // or if we have a match, but the next rule is + // at the same order, and has a quality measurement + // functions, then this rule must have a quality + // measurement function (since they are sorted before + // those without), and we need to check if there is + // a better quality match + currRule.order === currOrder && currRule.quality)); // TODO(aria): Write tests for these + + + if (rule == null || capture == null) { + throw new Error("Could not find a matching rule for the below " + "content. The rule with highest `order` should " + "always match content provided to it. Check " + "the definition of `match` for '" + ruleList[ruleList.length - 1] + "'. It seems to not match the following source:\n" + source); + } + + if (capture.index) { + // If present and non-zero, i.e. a non-^ regexp result: + throw new Error("`match` must return a capture starting at index 0 " + "(the current parse index). Did you forget a ^ at the " + "start of the RegExp?"); + } + + var parsed = rule.parse(capture, nestedParse, state); // We maintain the same object here so that rules can + // store references to the objects they return and + // modify them later. (oops sorry! but this adds a lot + // of power--see reflinks.) + + if (Array.isArray(parsed)) { + // $FlowFixMe + Array.prototype.push.apply(result, parsed); + } else { + if (parsed == null || typeof parsed !== "object") { + throw new Error("parse() function returned invalid parse result: '".concat(parsed, "'")); + } // We also let rules override the default type of + // their parsed node if they would like to, so that + // there can be a single output function for all links, + // even if there are several rules to parse them. + + + if (parsed.type == null) { + // $FlowFixMe + parsed.type = ruleType; + } + + result.push(parsed); + } + + state.prevCapture = capture; + source = source.substring(state.prevCapture[0].length); + } // $FlowFixMe + + + return result; + }; + + var outerParse = function outerParse(source, state) { + latestState = populateInitialState(state, defaultState); + + if (!latestState.inline && !latestState.disableAutoBlockNewlines) { + source = source + "\n\n"; + } // We store the previous capture so that match functions can + // use some limited amount of lookbehind. Lists use this to + // ensure they don't match arbitrary '- ' or '* ' in inline + // text (see the list rule for more information). This stores + // the full regex capture object, if there is one. + + + latestState.prevCapture = null; + return nestedParse(preprocess(source), latestState); + }; // $FlowFixMe + + + return outerParse; +}; // Creates a match function for an inline scoped element from a regex + + +var inlineRegex = function inlineRegex(regex) { + var match = function match(source, state, prevCapture) { + if (state.inline) { + // $FlowFixMe + return regex.exec(source); + } else { + return null; + } + }; + + match.regex = regex; + return match; +}; // Creates a match function for a block scoped element from a regex + + +var blockRegex = function blockRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + if (state.inline) { + return null; + } else { + return regex.exec(source); + } + }; + + match.regex = regex; + return match; +}; // Creates a match function from a regex, ignoring block/inline scope + + +var anyScopeRegex = function anyScopeRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + return regex.exec(source); + }; + + match.regex = regex; + return match; +}; + +var TYPE_SYMBOL = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; + +var reactElement = function reactElement(type, key, props) { + var element = { + $$typeof: TYPE_SYMBOL, + type: type, + key: key == null ? undefined : key, + ref: null, + props: props, + _owner: null + }; + return element; +}; +/** Returns a closed HTML tag. + * @param {string} tagName - Name of HTML tag (eg. "em" or "a") + * @param {string} content - Inner content of tag + * @param {{ [attr: string]: SimpleMarkdown.Attr }} [attributes] - Optional extra attributes of tag as an object of key-value pairs + * eg. { "href": "http://google.com" }. Falsey attributes are filtered out. + * @param {boolean} [isClosed] - boolean that controls whether tag is closed or not (eg. img tags). + * defaults to true + */ + + +var htmlTag = function htmlTag(tagName, content, attributes, isClosed) { + attributes = attributes || {}; + isClosed = typeof isClosed !== "undefined" ? isClosed : true; + var attributeString = ""; + + for (var attr in attributes) { + var attribute = attributes[attr]; // Removes falsey attributes + + if ( // $FlowFixMe + Object.prototype.hasOwnProperty.call(attributes, attr) && attribute) { + attributeString += " " + sanitizeText(attr) + '="' + sanitizeText(attribute) + '"'; + } + } + + var unclosedTag = "<" + tagName + attributeString + ">"; + + if (isClosed) { + return unclosedTag + content + "</" + tagName + ">"; + } else { + return unclosedTag; + } +}; + +var EMPTY_PROPS = {}; +/** + * @param {string | null | undefined} url - url to sanitize + * @returns {string | null} - url if safe, or null if a safe url could not be made + */ + +var sanitizeUrl = function sanitizeUrl(url) { + if (url == null) { + return null; + } + + try { + var prot = new URL(url, "https://localhost").protocol; + + if (prot.indexOf("javascript:") === 0 || prot.indexOf("vbscript:") === 0 || prot.indexOf("data:") === 0) { + return null; + } + } catch (e) { + // invalid URLs should throw a TypeError + // see for instance: `new URL("");` + return null; + } + + return url; +}; + +var SANITIZE_TEXT_R = /[<>&"']/g; +var SANITIZE_TEXT_CODES = { + "<": "<", + ">": ">", + "&": "&", + '"': """, + "'": "'", + "/": "/", + "`": "`" +}; + +var sanitizeText = function sanitizeText(text) { + return String(text).replace(SANITIZE_TEXT_R, function (chr) { + return SANITIZE_TEXT_CODES[chr]; + }); +}; + +var UNESCAPE_URL_R = /\\([^0-9A-Za-z\s])/g; + +var unescapeUrl = function unescapeUrl(rawUrlString) { + return rawUrlString.replace(UNESCAPE_URL_R, "$1"); +}; +/** + * Parse some content with the parser `parse`, with state.inline + * set to true. Useful for block elements; not generally necessary + * to be used by inline elements (where state.inline is already true. + */ + + +var parseInline = function parseInline(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = true; + var result = parse(content, state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseBlock = function parseBlock(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = false; + var result = parse(content + "\n\n", state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseCaptureInline = function parseCaptureInline(capture, parse, state) { + return { + content: parseInline(parse, capture[1], state) + }; +}; + +var ignoreCapture = function ignoreCapture() { + return {}; +}; // recognize a `*` `-`, `+`, `1.`, `2.`... list bullet + + +var LIST_BULLET = "(?:[*+-]|\\d+\\.)"; // recognize the start of a list item: +// leading space plus a bullet plus a space (` * `) + +var LIST_ITEM_PREFIX = "( *)(" + LIST_BULLET + ") +"; +var LIST_ITEM_PREFIX_R = new RegExp("^" + LIST_ITEM_PREFIX); // recognize an individual list item: +// * hi +// this is part of the same item +// +// as is this, which is a new paragraph in the same item +// +// * but this is not part of the same item + +var LIST_ITEM_R = new RegExp(LIST_ITEM_PREFIX + "[^\\n]*(?:\\n" + "(?!\\1" + LIST_BULLET + " )[^\\n]*)*(\n|$)", "gm"); +var BLOCK_END_R = /\n{2,}$/; +var INLINE_CODE_ESCAPE_BACKTICKS_R = /^ (?= *`)|(` *) $/g; // recognize the end of a paragraph block inside a list item: +// two or more newlines at end end of the item + +var LIST_BLOCK_END_R = BLOCK_END_R; +var LIST_ITEM_END_R = / *\n+$/; // check whether a list item has paragraphs: if it does, +// we leave the newlines at the end + +var LIST_R = new RegExp("^( *)(" + LIST_BULLET + ") " + "[\\s\\S]+?(?:\n{2,}(?! )" + "(?!\\1" + LIST_BULLET + " )\\n*" + // the \\s*$ here is so that we can parse the inside of nested +// lists, where our content might end before we receive two `\n`s +"|\\s*\n*$)"); +var LIST_LOOKBEHIND_R = /(?:^|\n)( *)$/; + +var TABLES = function () { + var TABLE_ROW_SEPARATOR_TRIM = /^ *\| *| *\| *$/g; + var TABLE_CELL_END_TRIM = / *$/; + var TABLE_RIGHT_ALIGN = /^ *-+: *$/; + var TABLE_CENTER_ALIGN = /^ *:-+: *$/; + var TABLE_LEFT_ALIGN = /^ *:-+ *$/; // TODO: This needs a real type + + var parseTableAlignCapture = function parseTableAlignCapture(alignCapture) { + if (TABLE_RIGHT_ALIGN.test(alignCapture)) { + return "right"; + } else if (TABLE_CENTER_ALIGN.test(alignCapture)) { + return "center"; + } else if (TABLE_LEFT_ALIGN.test(alignCapture)) { + return "left"; + } else { + return null; + } + }; + + var parseTableAlign = function parseTableAlign(source, parse, state, trimEndSeparators) { + if (trimEndSeparators) { + source = source.replace(TABLE_ROW_SEPARATOR_TRIM, ""); + } + + var alignText = source.trim().split("|"); + return alignText.map(parseTableAlignCapture); + }; + + var parseTableRow = function parseTableRow(source, parse, state, trimEndSeparators) { + var prevInTable = state.inTable; + state.inTable = true; + var tableRow = parse(source.trim(), state); + state.inTable = prevInTable; + var cells = [[]]; + tableRow.forEach(function (node, i) { + if (node.type === "tableSeparator") { + // Filter out empty table separators at the start/end: + if (!trimEndSeparators || i !== 0 && i !== tableRow.length - 1) { + // Split the current row: + cells.push([]); + } + } else { + if (node.type === "text" && (tableRow[i + 1] == null || tableRow[i + 1].type === "tableSeparator")) { + node.content = node.content.replace(TABLE_CELL_END_TRIM, ""); + } + + cells[cells.length - 1].push(node); + } + }); + return cells; + }; + /** + * @param {string} source + * @param {SimpleMarkdown.Parser} parse + * @param {SimpleMarkdown.State} state + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.ASTNode[][]} + */ + + + var parseTableCells = function parseTableCells(source, parse, state, trimEndSeparators) { + var rowsText = source.trim().split("\n"); + return rowsText.map(function (rowText) { + // $FlowFixMe + return parseTableRow(rowText, parse, state, trimEndSeparators); + }); + }; + /** + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.SingleNodeParseFunction} + */ + + + var parseTable = function parseTable(trimEndSeparators) { + return function (capture, parse, state) { + state.inline = true; + var header = parseTableRow(capture[1], parse, state, trimEndSeparators); + var align = parseTableAlign(capture[2], parse, state, trimEndSeparators); + var cells = parseTableCells(capture[3], parse, state, trimEndSeparators); + state.inline = false; + return { + type: "table", + header: header, + align: align, + cells: cells + }; + }; + }; + + return { + parseTable: parseTable(true), + parseNpTable: parseTable(false), + TABLE_REGEX: /^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/, + NPTABLE_REGEX: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/ + }; +}(); + +var LINK_INSIDE = "(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*"; +var LINK_HREF_AND_TITLE = "\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*"; +var AUTOLINK_MAILTO_CHECK_R = /mailto:/i; + +var parseRef = function parseRef(capture, state, refNode) { + var ref = (capture[2] || capture[1]).replace(/\s+/g, " ").toLowerCase(); // We store information about previously seen defs on + // state._defs (_ to deconflict with client-defined + // state). If the def for this reflink/refimage has + // already been seen, we can use its target/source + // and title here: + + if (state._defs && state._defs[ref]) { + var def = state._defs[ref]; // `refNode` can be a link or an image. Both use + // target and title properties. + + refNode.target = def.target; + refNode.title = def.title; + } // In case we haven't seen our def yet (or if someone + // overwrites that def later on), we add this node + // to the list of ref nodes for that def. Then, when + // we find the def, we can modify this link/image AST + // node :). + // I'm sorry. + + + state._refs = state._refs || {}; + state._refs[ref] = state._refs[ref] || []; + + state._refs[ref].push(refNode); + + return refNode; +}; + +var currOrder = 0; +var defaultRules = { + Array: { + react: function react(arr, output, state) { + var oldKey = state.key; + var result = []; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0, key = 0; i < arr.length; i++, key++) { + // `key` is our numerical `state.key`, which we increment for + // every output node, but don't change for joined text nodes. + // (i, however, must change for joined text nodes) + state.key = "" + i; + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result.push(output(node, state)); + } + + state.key = oldKey; + return result; + }, + html: function html(arr, output, state) { + var result = ""; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0; i < arr.length; i++) { + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result += output(node, state); + } + + return result; + } + }, + heading: { + order: currOrder++, + match: blockRegex(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/), + parse: function (_parse) { + function parse(_x, _x2, _x3) { + return _parse.apply(this, arguments); + } + + parse.toString = function () { + return _parse.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + level: capture[1].length, + content: parseInline(parse, capture[2].trim(), state) + }; + }), + react: function react(node, output, state) { + return reactElement("h" + node.level, state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("h" + node.level, output(node.content, state)); + } + }, + nptable: { + order: currOrder++, + match: blockRegex(TABLES.NPTABLE_REGEX), + parse: TABLES.parseNpTable, + react: null, + html: null + }, + lheading: { + order: currOrder++, + match: blockRegex(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/), + parse: function (_parse2) { + function parse(_x4, _x5, _x6) { + return _parse2.apply(this, arguments); + } + + parse.toString = function () { + return _parse2.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "heading", + level: capture[2] === "=" ? 1 : 2, + content: parseInline(parse, capture[1], state) + }; + }), + react: null, + html: null + }, + hr: { + order: currOrder++, + match: blockRegex(/^( *[-*_]){3,} *(?:\n *)+\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("hr", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<hr>"; + } + }, + codeBlock: { + order: currOrder++, + match: blockRegex(/^(?: [^\n]+\n*)+(?:\n *)+\n/), + parse: function (_parse3) { + function parse(_x7, _x8, _x9) { + return _parse3.apply(this, arguments); + } + + parse.toString = function () { + return _parse3.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ /gm, "").replace(/\n+$/, ""); + return { + lang: undefined, + content: content + }; + }), + react: function react(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + return reactElement("pre", state.key, { + children: reactElement("code", null, { + className: className, + children: node.content + }) + }); + }, + html: function html(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + var codeBlock = htmlTag("code", sanitizeText(node.content), { + class: className + }); + return htmlTag("pre", codeBlock); + } + }, + fence: { + order: currOrder++, + match: blockRegex(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/), + parse: function (_parse4) { + function parse(_x10, _x11, _x12) { + return _parse4.apply(this, arguments); + } + + parse.toString = function () { + return _parse4.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "codeBlock", + lang: capture[2] || undefined, + content: capture[3] + }; + }), + react: null, + html: null + }, + blockQuote: { + order: currOrder++, + match: blockRegex(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/), + parse: function (_parse5) { + function parse(_x13, _x14, _x15) { + return _parse5.apply(this, arguments); + } + + parse.toString = function () { + return _parse5.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ *> ?/gm, ""); + return { + content: parse(content, state) + }; + }), + react: function react(node, output, state) { + return reactElement("blockquote", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("blockquote", output(node.content, state)); + } + }, + list: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + // We only want to break into a list if we are at the start of a + // line. This is to avoid parsing "hi * there" with "* there" + // becoming a part of a list. + // You might wonder, "but that's inline, so of course it wouldn't + // start a list?". You would be correct! Except that some of our + // lists can be inline, because they might be inside another list, + // in which case we can parse with inline scope, but need to allow + // nested lists inside this inline scope. + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var isStartOfLineCapture = LIST_LOOKBEHIND_R.exec(prevCaptureStr); + var isListBlock = state._list || !state.inline; + + if (isStartOfLineCapture && isListBlock) { + source = isStartOfLineCapture[1] + source; + return LIST_R.exec(source); + } else { + return null; + } + }, + parse: function (_parse6) { + function parse(_x16, _x17, _x18) { + return _parse6.apply(this, arguments); + } + + parse.toString = function () { + return _parse6.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var bullet = capture[2]; + var ordered = bullet.length > 1; + var start = ordered ? +bullet : undefined; + var items = capture[0].replace(LIST_BLOCK_END_R, "\n").match(LIST_ITEM_R); // We know this will match here, because of how the regexes are + // defined + + var lastItemWasAParagraph = false; + var itemContent = items.map(function (item, i) { + // We need to see how far indented this item is: + var prefixCapture = LIST_ITEM_PREFIX_R.exec(item); + var space = prefixCapture ? prefixCapture[0].length : 0; // And then we construct a regex to "unindent" the subsequent + // lines of the items by that amount: + + var spaceRegex = new RegExp("^ {1," + space + "}", "gm"); // Before processing the item, we need a couple things + + var content = item // remove indents on trailing lines: + .replace(spaceRegex, "") // remove the bullet: + .replace(LIST_ITEM_PREFIX_R, ""); // I'm not sur4 why this is necessary again? + // Handling "loose" lists, like: + // + // * this is wrapped in a paragraph + // + // * as is this + // + // * as is this + + var isLastItem = i === items.length - 1; + var containsBlocks = content.indexOf("\n\n") !== -1; // Any element in a list is a block if it contains multiple + // newlines. The last element in the list can also be a block + // if the previous item in the list was a block (this is + // because non-last items in the list can end with \n\n, but + // the last item can't, so we just "inherit" this property + // from our previous element). + + var thisItemIsAParagraph = containsBlocks || isLastItem && lastItemWasAParagraph; + lastItemWasAParagraph = thisItemIsAParagraph; // backup our state for restoration afterwards. We're going to + // want to set state._list to true, and state.inline depending + // on our list's looseness. + + var oldStateInline = state.inline; + var oldStateList = state._list; + state._list = true; // Parse inline if we're in a tight list, or block if we're in + // a loose list. + + var adjustedContent; + + if (thisItemIsAParagraph) { + state.inline = false; + adjustedContent = content.replace(LIST_ITEM_END_R, "\n\n"); + } else { + state.inline = true; + adjustedContent = content.replace(LIST_ITEM_END_R, ""); + } + + var result = parse(adjustedContent, state); // Restore our state before returning + + state.inline = oldStateInline; + state._list = oldStateList; + return result; + }); + return { + ordered: ordered, + start: start, + items: itemContent + }; + }), + react: function react(node, output, state) { + var ListWrapper = node.ordered ? "ol" : "ul"; + return reactElement(ListWrapper, state.key, { + start: node.start, + children: node.items.map(function (item, i) { + return reactElement("li", "" + i, { + children: output(item, state) + }); + }) + }); + }, + html: function html(node, output, state) { + var listItems = node.items.map(function (item) { + return htmlTag("li", output(item, state)); + }).join(""); + var listTag = node.ordered ? "ol" : "ul"; + var attributes = { + start: node.start + }; + return htmlTag(listTag, listItems, attributes); + } + }, + def: { + order: currOrder++, + // TODO(aria): This will match without a blank line before the next + // block element, which is inconsistent with most of the rest of + // simple-markdown. + match: blockRegex(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/), + parse: function (_parse7) { + function parse(_x19, _x20, _x21) { + return _parse7.apply(this, arguments); + } + + parse.toString = function () { + return _parse7.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var def = capture[1].replace(/\s+/g, " ").toLowerCase(); + var target = capture[2]; + var title = capture[3]; // Look for previous links/images using this def + // If any links/images using this def have already been declared, + // they will have added themselves to the state._refs[def] list + // (_ to deconflict with client-defined state). We look through + // that list of reflinks for this def, and modify those AST nodes + // with our newly found information now. + // Sorry :(. + + if (state._refs && state._refs[def]) { + // `refNode` can be a link or an image + state._refs[def].forEach(function (refNode) { + refNode.target = target; + refNode.title = title; + }); + } // Add this def to our map of defs for any future links/images + // In case we haven't found any or all of the refs referring to + // this def yet, we add our def to the table of known defs, so + // that future reflinks can modify themselves appropriately with + // this information. + + + state._defs = state._defs || {}; + state._defs[def] = { + target: target, + title: title + }; // return the relevant parsed information + // for debugging only. + + return { + def: def, + target: target, + title: title + }; + }), + react: function react() { + return null; + }, + html: function html() { + return ""; + } + }, + table: { + order: currOrder++, + match: blockRegex(TABLES.TABLE_REGEX), + parse: TABLES.parseTable, + react: function react(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? {} : { + textAlign: node.align[colIndex] + }; + }; + + var headers = node.header.map(function (content, i) { + return reactElement("th", "" + i, { + style: getStyle(i), + scope: "col", + children: output(content, state) + }); + }); + var rows = node.cells.map(function (row, r) { + return reactElement("tr", "" + r, { + children: row.map(function (content, c) { + return reactElement("td", "" + c, { + style: getStyle(c), + children: output(content, state) + }); + }) + }); + }); + return reactElement("table", state.key, { + children: [reactElement("thead", "thead", { + children: reactElement("tr", null, { + children: headers + }) + }), reactElement("tbody", "tbody", { + children: rows + })] + }); + }, + html: function html(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? "" : "text-align:" + node.align[colIndex] + ";"; + }; + + var headers = node.header.map(function (content, i) { + return htmlTag("th", output(content, state), { + style: getStyle(i), + scope: "col" + }); + }).join(""); + var rows = node.cells.map(function (row) { + var cols = row.map(function (content, c) { + return htmlTag("td", output(content, state), { + style: getStyle(c) + }); + }).join(""); + return htmlTag("tr", cols); + }).join(""); + var thead = htmlTag("thead", htmlTag("tr", headers)); + var tbody = htmlTag("tbody", rows); + return htmlTag("table", thead + tbody); + } + }, + newline: { + order: currOrder++, + match: blockRegex(/^(?:\n *)*\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return "\n"; + }, + html: function html(node, output, state) { + return "\n"; + } + }, + paragraph: { + order: currOrder++, + match: blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("div", state.key, { + className: "paragraph", + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + class: "paragraph" + }; + return htmlTag("div", output(node.content, state), attributes); + } + }, + escape: { + order: currOrder++, + // We don't allow escaping numbers, letters, or spaces here so that + // backslashes used in plain text still get rendered. But allowing + // escaping anything else provides a very flexible escape mechanism, + // regardless of how this grammar is extended. + match: inlineRegex(/^\\([^0-9A-Za-z\s])/), + parse: function (_parse8) { + function parse(_x22, _x23, _x24) { + return _parse8.apply(this, arguments); + } + + parse.toString = function () { + return _parse8.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "text", + content: capture[1] + }; + }), + react: null, + html: null + }, + tableSeparator: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + if (!state.inTable) { + return null; + } + + return /^ *\| */.exec(source); + }, + parse: function parse() { + return { + type: "tableSeparator" + }; + }, + // These shouldn't be reached, but in case they are, be reasonable: + react: function react() { + return " | "; + }, + html: function html() { + return " | "; + } + }, + autolink: { + order: currOrder++, + match: inlineRegex(/^<([^: >]+:\/[^ >]+)>/), + parse: function (_parse9) { + function parse(_x25, _x26, _x27) { + return _parse9.apply(this, arguments); + } + + parse.toString = function () { + return _parse9.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1] + }; + }), + react: null, + html: null + }, + mailto: { + order: currOrder++, + match: inlineRegex(/^<([^ >]+@[^ >]+)>/), + parse: function (_parse10) { + function parse(_x28, _x29, _x30) { + return _parse10.apply(this, arguments); + } + + parse.toString = function () { + return _parse10.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var address = capture[1]; + var target = capture[1]; // Check for a `mailto:` already existing in the link: + + if (!AUTOLINK_MAILTO_CHECK_R.test(target)) { + target = "mailto:" + target; + } + + return { + type: "link", + content: [{ + type: "text", + content: address + }], + target: target + }; + }), + react: null, + html: null + }, + url: { + order: currOrder++, + match: inlineRegex(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/), + parse: function (_parse11) { + function parse(_x31, _x32, _x33) { + return _parse11.apply(this, arguments); + } + + parse.toString = function () { + return _parse11.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1], + title: undefined + }; + }), + react: null, + html: null + }, + link: { + order: currOrder++, + match: inlineRegex(new RegExp("^\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse12) { + function parse(_x34, _x35, _x36) { + return _parse12.apply(this, arguments); + } + + parse.toString = function () { + return _parse12.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var link = { + content: parse(capture[1], state), + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return link; + }), + react: function react(node, output, state) { + return reactElement("a", state.key, { + href: sanitizeUrl(node.target), + title: node.title, + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + href: sanitizeUrl(node.target), + title: node.title + }; + return htmlTag("a", output(node.content, state), attributes); + } + }, + image: { + order: currOrder++, + match: inlineRegex(new RegExp("^!\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse13) { + function parse(_x37, _x38, _x39) { + return _parse13.apply(this, arguments); + } + + parse.toString = function () { + return _parse13.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var image = { + alt: capture[1], + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return image; + }), + react: function react(node, output, state) { + return reactElement("img", state.key, { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }); + }, + html: function html(node, output, state) { + var attributes = { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }; + return htmlTag("img", "", attributes, false); + } + }, + reflink: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse14) { + function parse(_x40, _x41, _x42) { + return _parse14.apply(this, arguments); + } + + parse.toString = function () { + return _parse14.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "link", + content: parse(capture[1], state) + }); + }), + react: null, + html: null + }, + refimage: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^!\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse15) { + function parse(_x43, _x44, _x45) { + return _parse15.apply(this, arguments); + } + + parse.toString = function () { + return _parse15.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "image", + alt: capture[1] + }); + }), + react: null, + html: null + }, + em: { + order: currOrder + /* same as strong/u */ + , + match: inlineRegex(new RegExp( // only match _s surrounding words. + "^\\b_" + "((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_" + "\\b" + // Or match *s: + "|" + // Only match *s that are followed by a non-space: + "^\\*(?=\\S)(" + // Match at least one of: + "(?:" + // - `**`: so that bolds inside italics don't close the + // italics + "\\*\\*|" + // - escape sequence: so escaped *s don't close us + "\\\\[\\s\\S]|" + // - whitespace: followed by a non-* (we don't + // want ' *' to close an italics--it might + // start a list) + "\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|" + // - non-whitespace, non-*, non-backslash characters + "[^\\s\\*\\\\]" + ")+?" + // followed by a non-space, non-* then * + ")\\*(?!\\*)")), + quality: function quality(capture) { + // precedence by length, `em` wins ties: + return capture[0].length + 0.2; + }, + parse: function (_parse16) { + function parse(_x46, _x47, _x48) { + return _parse16.apply(this, arguments); + } + + parse.toString = function () { + return _parse16.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: parse(capture[2] || capture[1], state) + }; + }), + react: function react(node, output, state) { + return reactElement("em", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("em", output(node.content, state)); + } + }, + strong: { + order: currOrder + /* same as em */ + , + match: inlineRegex(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/), + quality: function quality(capture) { + // precedence by length, wins ties vs `u`: + return capture[0].length + 0.1; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("strong", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("strong", output(node.content, state)); + } + }, + u: { + order: currOrder++ + /* same as em&strong; increment for next rule */ + , + match: inlineRegex(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/), + quality: function quality(capture) { + // precedence by length, loses all ties + return capture[0].length; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("u", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("u", output(node.content, state)); + } + }, + del: { + order: currOrder++, + match: inlineRegex(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("del", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("del", output(node.content, state)); + } + }, + inlineCode: { + order: currOrder++, + match: inlineRegex(/^(`+)([\s\S]*?[^`])\1(?!`)/), + parse: function (_parse17) { + function parse(_x49, _x50, _x51) { + return _parse17.apply(this, arguments); + } + + parse.toString = function () { + return _parse17.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[2].replace(INLINE_CODE_ESCAPE_BACKTICKS_R, "$1") + }; + }), + react: function react(node, output, state) { + return reactElement("code", state.key, { + children: node.content + }); + }, + html: function html(node, output, state) { + return htmlTag("code", sanitizeText(node.content)); + } + }, + br: { + order: currOrder++, + match: anyScopeRegex(/^ {2,}\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("br", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<br>"; + } + }, + text: { + order: currOrder++, + // Here we look for anything followed by non-symbols, + // double newlines, or double-space-newlines + // We break on any symbol characters so that this grammar + // is easy to extend without needing to modify this regex + match: anyScopeRegex(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/), + parse: function (_parse18) { + function parse(_x52, _x53, _x54) { + return _parse18.apply(this, arguments); + } + + parse.toString = function () { + return _parse18.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[0] + }; + }), + react: function react(node, output, state) { + return node.content; + }, + html: function html(node, output, state) { + return sanitizeText(node.content); + } + } +}; +/** (deprecated) */ + +var ruleOutput = function ruleOutput( // $FlowFixMe +rules, property) { + if (!property && typeof console !== "undefined") { + console.warn("simple-markdown ruleOutput should take 'react' or " + "'html' as the second argument."); + } + + var nestedRuleOutput = function nestedRuleOutput(ast, outputFunc, state) { + return rules[ast.type][property](ast, outputFunc, state); + }; + + return nestedRuleOutput; +}; +/** (deprecated) + */ + + +var reactFor = function reactFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + var oldKey = state.key; + var result = []; // map nestedOutput over the ast, except group any text + // nodes together into a single string output. + + var lastResult = null; + + for (var i = 0; i < ast.length; i++) { + state.key = "" + i; + var nodeOut = nestedOutput(ast[i], state); + + if (typeof nodeOut === "string" && typeof lastResult === "string") { + lastResult = lastResult + nodeOut; + result[result.length - 1] = lastResult; + } else { + result.push(nodeOut); + lastResult = nodeOut; + } + } + + state.key = oldKey; + return result; + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; +/** (deprecated) + */ + + +var htmlFor = function htmlFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + return ast.map(function (node) { + return nestedOutput(node, state); + }).join(""); + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; + +var outputFor = function outputFor(rules, property) { + var defaultState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!property) { + throw new Error("simple-markdown: outputFor: `property` must be " + "defined. " + "if you just upgraded, you probably need to replace `outputFor` " + "with `reactFor`"); + } + + var latestState; // $FlowFixMe[incompatible-type] + + var arrayRule = rules.Array || defaultRules.Array; // Tricks to convince tsc that this var is not null: + + var arrayRuleCheck = arrayRule[property]; + + if (!arrayRuleCheck) { + throw new Error("simple-markdown: outputFor: to join nodes of type `" + property + "` you must provide an `Array:` joiner rule with that type, " + "Please see the docs for details on specifying an Array rule."); + } + + var arrayRuleOutput = arrayRuleCheck; + + var nestedOutput = function nestedOutput(ast, state) { + state = state || latestState; + latestState = state; + + if (Array.isArray(ast)) { + return arrayRuleOutput(ast, nestedOutput, state); + } else { + return rules[ast.type][property](ast, nestedOutput, state); + } + }; + + var outerOutput = function outerOutput(ast, state) { + latestState = populateInitialState(state, defaultState); + return nestedOutput(ast, latestState); + }; + + return outerOutput; +}; // $FlowFixMe[incompatible-call] + + +var defaultRawParse = parserFor(defaultRules); + +var defaultBlockParse = function defaultBlockParse(source, state) { + state = state || {}; + state.inline = false; + return defaultRawParse(source, state); +}; + +var defaultInlineParse = function defaultInlineParse(source, state) { + state = state || {}; + state.inline = true; + return defaultRawParse(source, state); +}; + +var defaultImplicitParse = function defaultImplicitParse(source, state) { + var isBlock = BLOCK_END_R.test(source); + state = state || {}; + state.inline = !isBlock; + return defaultRawParse(source, state); +}; // $FlowFixMe[incompatible-call] + + +var defaultReactOutput = outputFor(defaultRules, "react"); // $FlowFixMe[incompatible-call] + +var defaultHtmlOutput = outputFor(defaultRules, "html"); + +var markdownToReact = function markdownToReact(source, state) { + return defaultReactOutput(defaultBlockParse(source, state), state); +}; + +var markdownToHtml = function markdownToHtml(source, state) { + return defaultHtmlOutput(defaultBlockParse(source, state), state); +}; // TODO: This needs definition + + +var ReactMarkdown = function ReactMarkdown(props) { + var divProps = {}; + + for (var prop in props) { + if (prop !== "source" && // $FlowFixMe + Object.prototype.hasOwnProperty.call(props, prop)) { + divProps[prop] = props[prop]; + } + } + + divProps.children = markdownToReact(props.source); + return reactElement("div", null, divProps); +}; + +// $FlowFixMe +var SimpleMarkdown = { + defaultRules: defaultRules, + parserFor: parserFor, + outputFor: outputFor, + inlineRegex: inlineRegex, + blockRegex: blockRegex, + anyScopeRegex: anyScopeRegex, + parseInline: parseInline, + parseBlock: parseBlock, + // default wrappers: + markdownToReact: markdownToReact, + markdownToHtml: markdownToHtml, + ReactMarkdown: ReactMarkdown, + defaultBlockParse: defaultBlockParse, + defaultInlineParse: defaultInlineParse, + defaultImplicitParse: defaultImplicitParse, + defaultReactOutput: defaultReactOutput, + defaultHtmlOutput: defaultHtmlOutput, + preprocess: preprocess, + sanitizeText: sanitizeText, + sanitizeUrl: sanitizeUrl, + unescapeUrl: unescapeUrl, + htmlTag: htmlTag, + reactElement: reactElement, + // deprecated: + defaultRawParse: defaultRawParse, + ruleOutput: ruleOutput, + reactFor: reactFor, + htmlFor: htmlFor, + defaultParse: function defaultParse() { + if (typeof console !== "undefined") { + console.warn("defaultParse is deprecated, please use `defaultImplicitParse`"); + } + + return defaultImplicitParse.apply(null, arguments); + }, + defaultOutput: function defaultOutput() { + if (typeof console !== "undefined") { + console.warn("defaultOutput is deprecated, please use `defaultReactOutput`"); + } + + return defaultReactOutput.apply(null, arguments); + } +}; + + +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 43349: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96225); + + + + +function addHtmlLabel(root, node) { + var fo = root.append('foreignObject').attr('width', '100000'); + + var div = fo.append('xhtml:div'); + div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); + + var label = node.label; + switch (typeof label) { + case 'function': + div.insert(label); + break; + case 'object': + // Currently we assume this is a DOM object. + div.insert(function () { + return label; + }); + break; + default: + div.html(label); + } + + _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .bg(div, node.labelStyle); + div.style('display', 'inline-block'); + // Fix for firefox + div.style('white-space', 'nowrap'); + + var client = div.node().getBoundingClientRect(); + fo.attr('width', client.width).attr('height', client.height); + + return fo; +} + + +/***/ }), + +/***/ 96225: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "$p": () => (/* binding */ applyClass), +/* harmony export */ "O1": () => (/* binding */ edgeToId), +/* harmony export */ "WR": () => (/* binding */ applyTransition), +/* harmony export */ "bF": () => (/* binding */ isSubgraph), +/* harmony export */ "bg": () => (/* binding */ applyStyle) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37514); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73234); + + +// Public utility functions + + +/* + * Returns true if the specified node in the graph is a subgraph node. A + * subgraph node is one that contains other nodes. + */ +function isSubgraph(g, v) { + return !!g.children(v).length; +} + +function edgeToId(e) { + return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); +} + +var ID_DELIM = /:/g; +function escapeId(str) { + return str ? String(str).replace(ID_DELIM, '\\:') : ''; +} + +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr('style', styleFn); + } +} + +function applyClass(dom, classFn, otherClasses) { + if (classFn) { + dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); + } +} + +function applyTransition(selection, g) { + var graph = g.graph(); + + if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 42494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "bK": () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js + + + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue/* default */.Z)(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js +var isPlainObject = __webpack_require__(37514); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = (0,isArray/* default */.Z)(srcValue), + isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue), + isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if ((0,isArray/* default */.Z)(objValue)) { + newValue = objValue; + } + else if ((0,isArrayLikeObject/* default */.Z)(objValue)) { + newValue = (0,_copyArray/* default */.Z)(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true); + } + else { + newValue = []; + } + } + else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) { + newValue = objValue; + if ((0,isArguments/* default */.Z)(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) { + newValue = (0,_initCloneObject/* default */.Z)(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + (0,_baseFor/* default */.Z)(source, function(srcValue, key) { + stack || (stack = new _Stack/* default */.Z); + if ((0,isObject/* default */.Z)(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, keysIn/* default */.Z); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return (0,_baseRest/* default */.Z)(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default.Date.now */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "k": () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 39354: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "c": () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/clone.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 31667: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _Stack) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules +var _ListCache = __webpack_require__(67308); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache/* default */.Z; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js +var _Map = __webpack_require__(86183); +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache/* default */.Z) { + var pairs = data.__data__; + if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache/* default */.Z(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache/* default */.Z(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + + +/***/ }), + +/***/ 84073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Built-in value references. */ +var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 87668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _arrayLikeKeys) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = (0,isArray/* default */.Z)(value), + isArg = !isArr && (0,isArguments/* default */.Z)(value), + isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value), + isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + (0,_isIndex/* default */.Z)(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 72954: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value); + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue); + + +/***/ }), + +/***/ 74752: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904); + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) { + (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 61395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFor) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 69581: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203); +/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211); +/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227); + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + ''); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 41884: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073); + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer)); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer); + + +/***/ }), + +/***/ 91050: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer); + + +/***/ }), + +/***/ 12701: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884); + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray); + + +/***/ }), + +/***/ 87215: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray); + + +/***/ }), + +/***/ 31899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752); + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue); + } else { + (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject); + + +/***/ }), + +/***/ 77904: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508); + + +var defineProperty = (function() { + try { + var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 12513: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851); + + +/** Built-in value references. */ +var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 73658: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _initCloneObject) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!(0,isObject/* default */.Z)(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object)) + ? _baseCreate((0,_getPrototype/* default */.Z)(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + + +/***/ }), + +/***/ 56009: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex); + + +/***/ }), + +/***/ 50439: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226); + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length)) + : (type == 'string' && index in object) + ) { + return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value); + } + return false; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 81211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _overRest) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 27227: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _setToString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js +var _defineProperty = __webpack_require__(77904); +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) { + return (0,_defineProperty/* default */.Z)(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': (0,constant/* default */.Z)(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 62002: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 69203: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity); + + +/***/ }), + +/***/ 836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject); + + +/***/ }), + +/***/ 37514: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) { + return false; + } + var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 32957: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_keysIn) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules +var _arrayLikeKeys = __webpack_require__(87668); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!(0,isObject/* default */.Z)(object)) { + return _nativeKeysIn(object); + } + var isProto = (0,_isPrototype/* default */.Z)(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "c": () => (/* binding */ createText) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43047); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3502); + + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = withoutMultipleNewlines.replace(/^\s+/gm, ""); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(preprocessedMarkdown); + let lines = [[]]; + let currentLine = 0; + function processNode(node, parentType) { + if (node.type === "text") { + const textLines = node.content.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType || "normal" }); + } + }); + }); + } else if (node.type === "strong" || node.type === "em") { + node.content.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + syntaxTree.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.content.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(markdown); + function output(node) { + if (node.type === "text") { + return node.content.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.content.map(output).join("")}</strong>`; + } else if (node.type === "em") { + return `<em>${node.content.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.content.map(output).join("")}</p>`; + } else { + return ""; + } + } + return syntaxTree.map(output).join(""); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + `<span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + let bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = -1; + structuredText.forEach((line) => { + lineIndex++; + let tspan = createTspan(textElement, lineIndex, lineHeight); + let words = [...line].reverse(); + let currentWord; + let wrappedLine = []; + while (words.length) { + currentWord = words.pop(); + wrappedLine.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + if (tspan.node().getComputedTextLength() > width) { + wrappedLine.pop(); + words.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + wrappedLine = []; + lineIndex++; + tspan = createTspan(textElement, lineIndex, lineHeight); + } + } + }); + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "em" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width, + addSvgBackground = false +} = {}) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__.d)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlSpan(el, node, width, classes); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const special = ['"', "'", ".", ",", ":", ";", "!", "?", "(", ")", "[", "]", "{", "}"]; + let lastWord; + structuredText.forEach((line) => { + line.forEach((word) => { + if (special.includes(word.content) && lastWord) { + lastWord.content += word.content; + word.content = ""; + } + lastWord = word; + }); + }); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + +//# sourceMappingURL=createText-1f5f8f92.js.map + + +/***/ }), + +/***/ 48099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ insertMarkers$1), +/* harmony export */ "b": () => (/* binding */ clear$1), +/* harmony export */ "c": () => (/* binding */ createLabel$1), +/* harmony export */ "d": () => (/* binding */ clear), +/* harmony export */ "e": () => (/* binding */ insertNode), +/* harmony export */ "f": () => (/* binding */ insertEdgeLabel), +/* harmony export */ "g": () => (/* binding */ insertEdge), +/* harmony export */ "h": () => (/* binding */ positionEdgeLabel), +/* harmony export */ "i": () => (/* binding */ intersectRect$1), +/* harmony export */ "l": () => (/* binding */ labelHelper), +/* harmony export */ "p": () => (/* binding */ positionNode), +/* harmony export */ "s": () => (/* binding */ setNodeElem), +/* harmony export */ "u": () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(211); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); +/* harmony import */ var _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(77657); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(81188); + + + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 12 20").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(label, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), { + useHtmlLabels, + width: node.width || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(" + 0 + ", " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const question = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = (parent, node) => { + const { shapeSvg } = labelHelper(parent, node, "label", true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", " + 0 + ")" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = shapes[node.shape](newEl, node, dir); + } else { + el = shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcLabelPosition(path); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.arrowMarkerAbsolute || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + +//# sourceMappingURL=edges-2e77835f.js.map + + +/***/ }), + +/***/ 49863: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "d": () => (/* binding */ db), +/* harmony export */ "f": () => (/* binding */ flowDb), +/* harmony export */ "p": () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 9], $V1 = [1, 7], $V2 = [1, 6], $V3 = [1, 8], $V4 = [1, 20, 21, 22, 23, 38, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $V5 = [2, 10], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 30], $Vb = [1, 32], $Vc = [1, 33], $Vd = [1, 34], $Ve = [1, 62], $Vf = [1, 48], $Vg = [1, 52], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 38], $Vk = [1, 39], $Vl = [1, 40], $Vm = [1, 56], $Vn = [1, 63], $Vo = [1, 51], $Vp = [1, 53], $Vq = [1, 55], $Vr = [1, 59], $Vs = [1, 60], $Vt = [1, 41], $Vu = [1, 42], $Vv = [1, 43], $Vw = [1, 44], $Vx = [1, 61], $Vy = [1, 50], $Vz = [1, 54], $VA = [1, 57], $VB = [1, 58], $VC = [1, 49], $VD = [1, 66], $VE = [1, 71], $VF = [1, 20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $VG = [1, 75], $VH = [1, 74], $VI = [1, 76], $VJ = [20, 21, 23, 81, 82], $VK = [1, 99], $VL = [1, 104], $VM = [1, 107], $VN = [1, 108], $VO = [1, 101], $VP = [1, 106], $VQ = [1, 109], $VR = [1, 102], $VS = [1, 114], $VT = [1, 113], $VU = [1, 103], $VV = [1, 105], $VW = [1, 110], $VX = [1, 111], $VY = [1, 112], $VZ = [1, 115], $V_ = [20, 21, 22, 23, 81, 82], $V$ = [20, 21, 22, 23, 53, 81, 82], $V01 = [20, 21, 22, 23, 40, 52, 53, 55, 57, 59, 61, 63, 65, 66, 67, 69, 71, 73, 74, 76, 81, 82, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V11 = [20, 21, 23], $V21 = [20, 21, 23, 52, 66, 67, 81, 82, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V31 = [1, 12, 20, 21, 22, 23, 24, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $V41 = [52, 66, 67, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $V51 = [1, 150], $V61 = [1, 158], $V71 = [1, 159], $V81 = [1, 160], $V91 = [1, 161], $Va1 = [1, 145], $Vb1 = [1, 146], $Vc1 = [1, 141], $Vd1 = [1, 142], $Ve1 = [1, 153], $Vf1 = [1, 154], $Vg1 = [1, 155], $Vh1 = [1, 156], $Vi1 = [1, 157], $Vj1 = [1, 162], $Vk1 = [1, 163], $Vl1 = [1, 148], $Vm1 = [1, 151], $Vn1 = [1, 147], $Vo1 = [1, 144], $Vp1 = [20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 87, 88, 89, 90, 91, 92, 96, 106, 107, 110, 112, 113, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128], $Vq1 = [1, 166], $Vr1 = [20, 21, 22, 23, 26, 52, 66, 67, 92, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], $Vs1 = [20, 21, 22, 23, 24, 26, 38, 40, 41, 42, 52, 56, 58, 60, 62, 64, 66, 67, 68, 70, 72, 73, 75, 77, 81, 82, 87, 88, 89, 90, 91, 92, 93, 96, 106, 107, 110, 112, 113, 114, 115, 123, 124, 125, 126, 127, 128], $Vt1 = [12, 21, 22, 24], $Vu1 = [22, 107], $Vv1 = [1, 251], $Vw1 = [1, 246], $Vx1 = [1, 247], $Vy1 = [1, 255], $Vz1 = [1, 252], $VA1 = [1, 249], $VB1 = [1, 248], $VC1 = [1, 250], $VD1 = [1, 253], $VE1 = [1, 254], $VF1 = [1, 256], $VG1 = [1, 274], $VH1 = [20, 21, 23, 107], $VI1 = [20, 21, 22, 23, 66, 67, 87, 103, 106, 107, 110, 111, 112, 113, 114]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "openDirective": 6, "typeDirective": 7, "closeDirective": 8, "separator": 9, ":": 10, "argDirective": 11, "open_directive": 12, "type_directive": 13, "arg_directive": 14, "close_directive": 15, "graphConfig": 16, "document": 17, "line": 18, "statement": 19, "SEMI": 20, "NEWLINE": 21, "SPACE": 22, "EOF": 23, "GRAPH": 24, "NODIR": 25, "DIR": 26, "FirstStmtSeperator": 27, "ending": 28, "endToken": 29, "spaceList": 30, "spaceListNewline": 31, "verticeStatement": 32, "styleStatement": 33, "linkStyleStatement": 34, "classDefStatement": 35, "classStatement": 36, "clickStatement": 37, "subgraph": 38, "text": 39, "SQS": 40, "SQE": 41, "end": 42, "direction": 43, "acc_title": 44, "acc_title_value": 45, "acc_descr": 46, "acc_descr_value": 47, "acc_descr_multiline_value": 48, "link": 49, "node": 50, "vertex": 51, "AMP": 52, "STYLE_SEPARATOR": 53, "idString": 54, "DOUBLECIRCLESTART": 55, "DOUBLECIRCLEEND": 56, "PS": 57, "PE": 58, "(-": 59, "-)": 60, "STADIUMSTART": 61, "STADIUMEND": 62, "SUBROUTINESTART": 63, "SUBROUTINEEND": 64, "VERTEX_WITH_PROPS_START": 65, "ALPHA": 66, "COLON": 67, "PIPE": 68, "CYLINDERSTART": 69, "CYLINDEREND": 70, "DIAMOND_START": 71, "DIAMOND_STOP": 72, "TAGEND": 73, "TRAPSTART": 74, "TRAPEND": 75, "INVTRAPSTART": 76, "INVTRAPEND": 77, "linkStatement": 78, "arrowText": 79, "TESTSTR": 80, "START_LINK": 81, "LINK": 82, "textToken": 83, "STR": 84, "MD_STR": 85, "keywords": 86, "STYLE": 87, "LINKSTYLE": 88, "CLASSDEF": 89, "CLASS": 90, "CLICK": 91, "DOWN": 92, "UP": 93, "textNoTags": 94, "textNoTagsToken": 95, "DEFAULT": 96, "stylesOpt": 97, "alphaNum": 98, "CALLBACKNAME": 99, "CALLBACKARGS": 100, "HREF": 101, "LINK_TARGET": 102, "HEX": 103, "numList": 104, "INTERPOLATE": 105, "NUM": 106, "COMMA": 107, "style": 108, "styleComponent": 109, "MINUS": 110, "UNIT": 111, "BRKT": 112, "DOT": 113, "PCT": 114, "TAGSTART": 115, "alphaNumToken": 116, "idStringToken": 117, "alphaNumStatement": 118, "direction_tb": 119, "direction_bt": 120, "direction_rl": 121, "direction_lr": 122, "PUNCTUATION": 123, "UNICODE_TEXT": 124, "PLUS": 125, "EQUALS": 126, "MULT": 127, "UNDERSCORE": 128, "graphCodeTokens": 129, "ARROW_CROSS": 130, "ARROW_POINT": 131, "ARROW_CIRCLE": 132, "ARROW_OPEN": 133, "QUOTE": 134, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 10: ":", 12: "open_directive", 13: "type_directive", 14: "arg_directive", 15: "close_directive", 20: "SEMI", 21: "NEWLINE", 22: "SPACE", 23: "EOF", 24: "GRAPH", 25: "NODIR", 26: "DIR", 38: "subgraph", 40: "SQS", 41: "SQE", 42: "end", 44: "acc_title", 45: "acc_title_value", 46: "acc_descr", 47: "acc_descr_value", 48: "acc_descr_multiline_value", 52: "AMP", 53: "STYLE_SEPARATOR", 55: "DOUBLECIRCLESTART", 56: "DOUBLECIRCLEEND", 57: "PS", 58: "PE", 59: "(-", 60: "-)", 61: "STADIUMSTART", 62: "STADIUMEND", 63: "SUBROUTINESTART", 64: "SUBROUTINEEND", 65: "VERTEX_WITH_PROPS_START", 66: "ALPHA", 67: "COLON", 68: "PIPE", 69: "CYLINDERSTART", 70: "CYLINDEREND", 71: "DIAMOND_START", 72: "DIAMOND_STOP", 73: "TAGEND", 74: "TRAPSTART", 75: "TRAPEND", 76: "INVTRAPSTART", 77: "INVTRAPEND", 80: "TESTSTR", 81: "START_LINK", 82: "LINK", 84: "STR", 85: "MD_STR", 87: "STYLE", 88: "LINKSTYLE", 89: "CLASSDEF", 90: "CLASS", 91: "CLICK", 92: "DOWN", 93: "UP", 96: "DEFAULT", 99: "CALLBACKNAME", 100: "CALLBACKARGS", 101: "HREF", 102: "LINK_TARGET", 103: "HEX", 105: "INTERPOLATE", 106: "NUM", 107: "COMMA", 110: "MINUS", 111: "UNIT", 112: "BRKT", 113: "DOT", 114: "PCT", 115: "TAGSTART", 119: "direction_tb", 120: "direction_bt", 121: "direction_rl", 122: "direction_lr", 123: "PUNCTUATION", 124: "UNICODE_TEXT", 125: "PLUS", 126: "EQUALS", 127: "MULT", 128: "UNDERSCORE", 130: "ARROW_CROSS", 131: "ARROW_POINT", 132: "ARROW_CIRCLE", 133: "ARROW_OPEN", 134: "QUOTE" }, + productions_: [0, [3, 1], [3, 2], [5, 4], [5, 6], [6, 1], [7, 1], [11, 1], [8, 1], [4, 2], [17, 0], [17, 2], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [16, 2], [16, 2], [16, 2], [16, 3], [28, 2], [28, 1], [29, 1], [29, 1], [29, 1], [27, 1], [27, 1], [27, 2], [31, 2], [31, 2], [31, 1], [31, 1], [30, 2], [30, 1], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 9], [19, 6], [19, 4], [19, 1], [19, 2], [19, 2], [19, 1], [9, 1], [9, 1], [9, 1], [32, 3], [32, 4], [32, 2], [32, 1], [50, 1], [50, 5], [50, 3], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 8], [51, 4], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 4], [51, 4], [51, 1], [49, 2], [49, 3], [49, 3], [49, 1], [49, 3], [78, 1], [79, 3], [39, 1], [39, 2], [39, 1], [39, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [86, 1], [94, 1], [94, 2], [35, 5], [35, 5], [36, 5], [37, 2], [37, 4], [37, 3], [37, 5], [37, 2], [37, 4], [37, 4], [37, 6], [37, 2], [37, 4], [37, 2], [37, 4], [37, 4], [37, 6], [33, 5], [33, 5], [34, 5], [34, 5], [34, 9], [34, 9], [34, 7], [34, 7], [104, 1], [104, 3], [97, 1], [97, 3], [108, 1], [108, 2], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [109, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [95, 1], [95, 1], [95, 1], [95, 1], [54, 1], [54, 2], [98, 1], [98, 2], [118, 1], [118, 1], [118, 1], [118, 1], [43, 1], [43, 1], [43, 1], [43, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1], [129, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.parseDirective("%%{", "open_directive"); + break; + case 6: + yy.parseDirective($$[$0], "type_directive"); + break; + case 7: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 8: + yy.parseDirective("}%%", "close_directive", "flowchart"); + break; + case 10: + this.$ = []; + break; + case 11: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 12: + case 97: + case 153: + case 155: + case 156: + this.$ = $$[$0]; + break; + case 19: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 20: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 35: + this.$ = $$[$0 - 1].nodes; + break; + case 36: + case 37: + case 38: + case 39: + case 40: + this.$ = []; + break; + case 41: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 42: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 43: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 45: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 46: + case 47: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 51: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 52: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 53: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 54: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 55: + this.$ = [$$[$0]]; + break; + case 56: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 57: + this.$ = [$$[$0 - 2]]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 58: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 60: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 61: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 64: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 65: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 67: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 68: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 69: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 70: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 71: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 72: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 74: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 75: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 76: + case 77: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 78: + this.$ = $$[$0]; + break; + case 79: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 80: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 81: + this.$ = $$[$0 - 1]; + break; + case 82: + this.$ = { text: $$[$0], type: "text" }; + break; + case 83: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 84: + this.$ = { text: $$[$0], type: "text" }; + break; + case 85: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 98: + case 154: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 99: + case 100: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 101: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 102: + case 110: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 103: + case 111: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 104: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 105: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 106: + case 112: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 107: + case 113: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 108: + case 114: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 109: + case 115: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 116: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 117: + case 119: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 118: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 121: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 122: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 123: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 124: + case 126: + this.$ = [$$[$0]]; + break; + case 125: + case 127: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 129: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 151: + this.$ = $$[$0]; + break; + case 152: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 157: + this.$ = "v"; + break; + case 158: + this.$ = "-"; + break; + case 159: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 160: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 161: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 162: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, { 1: [3] }, { 1: [2, 1] }, { 3: 10, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, o($V4, $V5, { 17: 11 }), { 7: 12, 13: [1, 13] }, { 16: 14, 21: $V1, 22: $V2, 24: $V3 }, { 16: 15, 21: $V1, 22: $V2, 24: $V3 }, { 25: [1, 16], 26: [1, 17] }, { 13: [2, 5] }, { 1: [2, 2] }, { 1: [2, 9], 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 8: 64, 10: [1, 65], 15: $VD }, o([10, 15], [2, 6]), o($V4, [2, 17]), o($V4, [2, 18]), o($V4, [2, 19]), { 20: [1, 68], 21: [1, 69], 22: $VE, 27: 67, 30: 70 }, o($VF, [2, 11]), o($VF, [2, 12]), o($VF, [2, 13]), o($VF, [2, 14]), o($VF, [2, 15]), o($VF, [2, 16]), { 9: 72, 20: $VG, 21: $VH, 23: $VI, 49: 73, 78: 77, 81: [1, 78], 82: [1, 79] }, { 9: 80, 20: $VG, 21: $VH, 23: $VI }, { 9: 81, 20: $VG, 21: $VH, 23: $VI }, { 9: 82, 20: $VG, 21: $VH, 23: $VI }, { 9: 83, 20: $VG, 21: $VH, 23: $VI }, { 9: 84, 20: $VG, 21: $VH, 23: $VI }, { 9: 86, 20: $VG, 21: $VH, 22: [1, 85], 23: $VI }, o($VF, [2, 44]), { 45: [1, 87] }, { 47: [1, 88] }, o($VF, [2, 47]), o($VJ, [2, 54], { 30: 89, 22: $VE }), { 22: [1, 90] }, { 22: [1, 91] }, { 22: [1, 92] }, { 22: [1, 93] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 84: [1, 97], 92: $VO, 98: 96, 99: [1, 94], 101: [1, 95], 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($VF, [2, 159]), o($VF, [2, 160]), o($VF, [2, 161]), o($VF, [2, 162]), o($V_, [2, 55], { 53: [1, 116] }), o($V$, [2, 74], { 117: 129, 40: [1, 117], 52: $Ve, 55: [1, 118], 57: [1, 119], 59: [1, 120], 61: [1, 121], 63: [1, 122], 65: [1, 123], 66: $Vf, 67: $Vg, 69: [1, 124], 71: [1, 125], 73: [1, 126], 74: [1, 127], 76: [1, 128], 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }), o($V01, [2, 151]), o($V01, [2, 176]), o($V01, [2, 177]), o($V01, [2, 178]), o($V01, [2, 179]), o($V01, [2, 180]), o($V01, [2, 181]), o($V01, [2, 182]), o($V01, [2, 183]), o($V01, [2, 184]), o($V01, [2, 185]), o($V01, [2, 186]), o($V01, [2, 187]), o($V01, [2, 188]), o($V01, [2, 189]), o($V01, [2, 190]), o($V01, [2, 191]), { 9: 130, 20: $VG, 21: $VH, 23: $VI }, { 11: 131, 14: [1, 132] }, o($V11, [2, 8]), o($V4, [2, 20]), o($V4, [2, 26]), o($V4, [2, 27]), { 21: [1, 133] }, o($V21, [2, 34], { 30: 134, 22: $VE }), o($VF, [2, 35]), { 50: 135, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, o($V31, [2, 48]), o($V31, [2, 49]), o($V31, [2, 50]), o($V41, [2, 78], { 79: 136, 68: [1, 138], 80: [1, 137] }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 139, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o([52, 66, 67, 68, 80, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], [2, 80]), o($VF, [2, 36]), o($VF, [2, 37]), o($VF, [2, 38]), o($VF, [2, 39]), o($VF, [2, 40]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 164, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vp1, $V5, { 17: 165 }), o($VF, [2, 45]), o($VF, [2, 46]), o($VJ, [2, 53], { 52: $Vq1 }), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 167, 103: [1, 168], 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 96: [1, 169], 104: 170, 106: [1, 171] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 96: [1, 172], 98: 173, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 174, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 102], { 22: [1, 175], 100: [1, 176] }), o($V11, [2, 106], { 22: [1, 177] }), o($V11, [2, 110], { 116: 100, 118: 179, 22: [1, 178], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 112], { 22: [1, 180] }), o($Vr1, [2, 153]), o($Vr1, [2, 155]), o($Vr1, [2, 156]), o($Vr1, [2, 157]), o($Vr1, [2, 158]), o($Vs1, [2, 163]), o($Vs1, [2, 164]), o($Vs1, [2, 165]), o($Vs1, [2, 166]), o($Vs1, [2, 167]), o($Vs1, [2, 168]), o($Vs1, [2, 169]), o($Vs1, [2, 170]), o($Vs1, [2, 171]), o($Vs1, [2, 172]), o($Vs1, [2, 173]), o($Vs1, [2, 174]), o($Vs1, [2, 175]), { 52: $Ve, 54: 181, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 182, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 183, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 185, 42: $V91, 52: $VL, 57: [1, 184], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 186, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 187, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 188, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 66: [1, 189] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 190, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 191, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 71: [1, 192], 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 193, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 194, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 195, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V01, [2, 152]), o($Vt1, [2, 3]), { 8: 196, 15: $VD }, { 15: [2, 7] }, o($V4, [2, 28]), o($V21, [2, 33]), o($VJ, [2, 51], { 30: 197, 22: $VE }), o($V41, [2, 75], { 22: [1, 198] }), { 22: [1, 199] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 200, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 82: [1, 201], 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vs1, [2, 82]), o($Vs1, [2, 84]), o($Vs1, [2, 85]), o($Vs1, [2, 141]), o($Vs1, [2, 142]), o($Vs1, [2, 143]), o($Vs1, [2, 144]), o($Vs1, [2, 145]), o($Vs1, [2, 146]), o($Vs1, [2, 147]), o($Vs1, [2, 148]), o($Vs1, [2, 149]), o($Vs1, [2, 150]), o($Vs1, [2, 86]), o($Vs1, [2, 87]), o($Vs1, [2, 88]), o($Vs1, [2, 89]), o($Vs1, [2, 90]), o($Vs1, [2, 91]), o($Vs1, [2, 92]), o($Vs1, [2, 93]), o($Vs1, [2, 94]), o($Vs1, [2, 95]), o($Vs1, [2, 96]), { 9: 204, 20: $VG, 21: $VH, 22: $V51, 23: $VI, 24: $V61, 26: $V71, 38: $V81, 40: [1, 203], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 205], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $VE, 30: 206 }, { 22: [1, 207], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: [1, 208] }, { 22: [1, 209] }, { 22: [1, 210], 107: [1, 211] }, o($Vu1, [2, 124]), { 22: [1, 212] }, { 22: [1, 213], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: [1, 214], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 179, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 84: [1, 215] }, o($V11, [2, 104], { 22: [1, 216] }), { 84: [1, 217], 102: [1, 218] }, { 84: [1, 219] }, o($Vr1, [2, 154]), { 84: [1, 220], 102: [1, 221] }, o($V_, [2, 57], { 117: 129, 52: $Ve, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 222], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 56: [1, 223], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 224, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 225], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 60: [1, 226], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 62: [1, 227], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 64: [1, 228], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 67: [1, 229] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 70: [1, 230], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 231], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 232, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 233], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 234], 77: [1, 235], 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 237], 77: [1, 236], 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 9: 238, 20: $VG, 21: $VH, 23: $VI }, o($VJ, [2, 52], { 52: $Vq1 }), o($V41, [2, 77]), o($V41, [2, 76]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 68: [1, 239], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V41, [2, 79]), o($Vs1, [2, 83]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 240, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($Vp1, $V5, { 17: 241 }), o($VF, [2, 43]), { 51: 242, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 243, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 257, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 258, 103: $Vz1, 105: [1, 259], 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 260, 103: $Vz1, 105: [1, 261], 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 106: [1, 262] }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 263, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 264, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 265, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 103]), { 84: [1, 266] }, o($V11, [2, 107], { 22: [1, 267] }), o($V11, [2, 108]), o($V11, [2, 111]), o($V11, [2, 113], { 22: [1, 268] }), o($V11, [2, 114]), o($V$, [2, 58]), o($V$, [2, 59]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 269], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 66]), o($V$, [2, 61]), o($V$, [2, 62]), o($V$, [2, 63]), { 66: [1, 270] }, o($V$, [2, 65]), o($V$, [2, 67]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 271], 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 69]), o($V$, [2, 70]), o($V$, [2, 72]), o($V$, [2, 71]), o($V$, [2, 73]), o($Vt1, [2, 4]), o([22, 52, 66, 67, 92, 96, 106, 107, 110, 112, 113, 123, 124, 125, 126, 127, 128], [2, 81]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 272], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 273], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, o($V_, [2, 56]), o($V11, [2, 116], { 107: $VG1 }), o($VH1, [2, 126], { 109: 275, 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }), o($VI1, [2, 128]), o($VI1, [2, 130]), o($VI1, [2, 131]), o($VI1, [2, 132]), o($VI1, [2, 133]), o($VI1, [2, 134]), o($VI1, [2, 135]), o($VI1, [2, 136]), o($VI1, [2, 137]), o($VI1, [2, 138]), o($VI1, [2, 139]), o($VI1, [2, 140]), o($V11, [2, 117], { 107: $VG1 }), o($V11, [2, 118], { 107: $VG1 }), { 22: [1, 276] }, o($V11, [2, 119], { 107: $VG1 }), { 22: [1, 277] }, o($Vu1, [2, 125]), o($V11, [2, 99], { 107: $VG1 }), o($V11, [2, 100], { 107: $VG1 }), o($V11, [2, 101], { 116: 100, 118: 179, 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 105]), { 102: [1, 278] }, { 102: [1, 279] }, { 58: [1, 280] }, { 68: [1, 281] }, { 72: [1, 282] }, { 9: 283, 20: $VG, 21: $VH, 23: $VI }, o($VF, [2, 42]), { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 108: 284, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, o($VI1, [2, 129]), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 285, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 98: 286, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 116: 100, 118: 98, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V11, [2, 109]), o($V11, [2, 115]), o($V$, [2, 60]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 287, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: $Vd1, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, o($V$, [2, 68]), o($Vp1, $V5, { 17: 288 }), o($VH1, [2, 127], { 109: 275, 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 103: $Vz1, 106: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }), o($V11, [2, 122], { 116: 100, 118: 179, 22: [1, 289], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), o($V11, [2, 123], { 116: 100, 118: 179, 22: [1, 290], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 92: $VO, 106: $VP, 107: $VQ, 110: $VR, 112: $VS, 113: $VT, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 291], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 202, 86: 152, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 93: $Vk1, 95: 143, 96: $Vl1, 106: $VP, 107: $VQ, 110: $Vm1, 112: $VS, 113: $VT, 114: $Vn1, 115: $Vo1, 116: 149, 123: $VU, 124: $VV, 125: $VW, 126: $VX, 127: $VY, 128: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 292], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 87: $Vh, 88: $Vi, 89: $Vj, 90: $Vk, 91: $Vl, 92: $Vm, 96: $Vn, 106: $Vo, 107: $Vp, 110: $Vq, 112: $Vr, 113: $Vs, 117: 47, 119: $Vt, 120: $Vu, 121: $Vv, 122: $Vw, 123: $Vx, 124: $Vy, 125: $Vz, 126: $VA, 127: $VB, 128: $VC }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 293, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, { 22: $Vv1, 66: $Vw1, 67: $Vx1, 87: $Vy1, 97: 294, 103: $Vz1, 106: $VA1, 108: 244, 109: 245, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1, 114: $VF1 }, o($V$, [2, 64]), o($VF, [2, 41]), o($V11, [2, 120], { 107: $VG1 }), o($V11, [2, 121], { 107: $VG1 })], + defaultActions: { 2: [2, 1], 9: [2, 5], 10: [2, 2], 132: [2, 7] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 12; + case 1: + this.begin("type_directive"); + return 13; + case 2: + this.popState(); + this.begin("arg_directive"); + return 10; + case 3: + this.popState(); + this.popState(); + return 15; + case 4: + return 14; + case 5: + this.begin("acc_title"); + return 44; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 46; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + this.begin("md_string"); + break; + case 13: + return "MD_STR"; + case 14: + this.popState(); + break; + case 15: + this.begin("string"); + break; + case 16: + this.popState(); + break; + case 17: + return "STR"; + case 18: + return 87; + case 19: + return 96; + case 20: + return 88; + case 21: + return 105; + case 22: + return 89; + case 23: + return 90; + case 24: + this.begin("href"); + break; + case 25: + this.popState(); + break; + case 26: + return 101; + case 27: + this.begin("callbackname"); + break; + case 28: + this.popState(); + break; + case 29: + this.popState(); + this.begin("callbackargs"); + break; + case 30: + return 99; + case 31: + this.popState(); + break; + case 32: + return 100; + case 33: + this.begin("click"); + break; + case 34: + this.popState(); + break; + case 35: + return 91; + case 36: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 37: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 38: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 39: + return 38; + case 40: + return 42; + case 41: + return 102; + case 42: + return 102; + case 43: + return 102; + case 44: + return 102; + case 45: + this.popState(); + return 25; + case 46: + this.popState(); + return 26; + case 47: + this.popState(); + return 26; + case 48: + this.popState(); + return 26; + case 49: + this.popState(); + return 26; + case 50: + this.popState(); + return 26; + case 51: + this.popState(); + return 26; + case 52: + this.popState(); + return 26; + case 53: + this.popState(); + return 26; + case 54: + this.popState(); + return 26; + case 55: + this.popState(); + return 26; + case 56: + return 119; + case 57: + return 120; + case 58: + return 121; + case 59: + return 122; + case 60: + return 106; + case 61: + return 112; + case 62: + return 53; + case 63: + return 67; + case 64: + return 52; + case 65: + return 20; + case 66: + return 107; + case 67: + return 127; + case 68: + return 82; + case 69: + return 82; + case 70: + return 82; + case 71: + return 82; + case 72: + return 81; + case 73: + return 81; + case 74: + return 81; + case 75: + return 59; + case 76: + return 60; + case 77: + return 61; + case 78: + return 62; + case 79: + return 63; + case 80: + return 64; + case 81: + return 65; + case 82: + return 69; + case 83: + return 70; + case 84: + return 55; + case 85: + return 56; + case 86: + return 110; + case 87: + return 113; + case 88: + return 128; + case 89: + return 125; + case 90: + return 114; + case 91: + return 126; + case 92: + return 126; + case 93: + return 115; + case 94: + return 73; + case 95: + return 93; + case 96: + return "SEP"; + case 97: + return 92; + case 98: + return 66; + case 99: + return 75; + case 100: + return 74; + case 101: + return 77; + case 102: + return 76; + case 103: + return 123; + case 104: + return 124; + case 105: + return 68; + case 106: + return 57; + case 107: + return 58; + case 108: + return 40; + case 109: + return 41; + case 110: + return 71; + case 111: + return 72; + case 112: + return 134; + case 113: + return 21; + case 114: + return 22; + case 115: + return 23; + } + }, + rules: [/^(?:%%\{)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s]+["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*~~[\~]+\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:\(-)/, /^(?:-\))/, /^(?:\(\[)/, /^(?:\]\))/, /^(?:\[\[)/, /^(?:\]\])/, /^(?:\[\|)/, /^(?:\[\()/, /^(?:\)\])/, /^(?:\(\(\()/, /^(?:\)\)\))/, /^(?:-)/, /^(?:\.)/, /^(?:[\_])/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:[A-Za-z]+)/, /^(?:\\\])/, /^(?:\[\/)/, /^(?:\/\])/, /^(?:\[\\)/, /^(?:[!"#$%&'*+,-.`?\\_/])/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\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]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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-\u0C33\u0C35-\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\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\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\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\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])/, /^(?:\|)/, /^(?:\()/, /^(?:\))/, /^(?:\[)/, /^(?:\])/, /^(?:\{)/, /^(?:\})/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "callbackargs": { "rules": [31, 32], "inclusive": false }, "callbackname": { "rules": [28, 29, 30], "inclusive": false }, "href": { "rules": [25, 26], "inclusive": false }, "click": { "rules": [34, 35], "inclusive": false }, "vertex": { "rules": [], "inclusive": false }, "dir": { "rules": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "inclusive": false }, "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "md_string": { "rules": [13, 14], "inclusive": false }, "string": { "rules": [16, 17], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 15, 18, 19, 20, 21, 22, 23, 24, 27, 33, 36, 37, 38, 39, 40, 41, 42, 43, 44, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.m.parseDirective(this, statement, context, type); +}; +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + edges.push(edge); +}; +const addLink = function(_start, _end, type) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(id, style) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle1 = s.replace("fill", "bgFill"); + const newStyle2 = newStyle1.replace("color", "fill"); + classes[id].textStyles.push(newStyle2); + } + classes[id].styles.push(s); + }); + } +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + return tooltips[id]; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = []; + firstGraphFlag = true; + version = ver; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.y)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + parseDirective, + defaultConfig: () => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.j.flowchart, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.p, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.v, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.x +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + parseDirective, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + +//# sourceMappingURL=flowDb-52e24d17.js.map + + +/***/ }), + +/***/ 31826: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "diagram": () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/flowDb-52e24d17.js +var flowDb_52e24d17 = __webpack_require__(49863); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 192 modules +var src = __webpack_require__(59373); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/commonDb-573409be.js + 5 modules +var commonDb_573409be = __webpack_require__(70044); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 71 modules +var dagre = __webpack_require__(42494); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/util.js +var util = __webpack_require__(96225); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/arrows.js + + + + +var arrows = { + normal, + vee, + undirected, +}; + +function setArrows(value) { + arrows = value; +} + +function normal(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +function vee(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 L 4 5 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +function undirected(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 5 L 10 5') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js +var add_html_label = __webpack_require__(43349); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js + + + + +function addSVGLabel(root, node) { + var domNode = root; + + domNode.node().appendChild(node.label); + + util/* applyStyle */.bg(domNode, node.labelStyle); + + return domNode; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js + + + + +/* + * Attaches a text label to the specified root. Handles escape sequences. + */ +function addTextLabel(root, node) { + var domNode = root.append('text'); + + var lines = processEscapeSequences(node.label).split('\n'); + for (var i = 0; i < lines.length; i++) { + domNode + .append('tspan') + .attr('xml:space', 'preserve') + .attr('dy', '1em') + .attr('x', '1') + .text(lines[i]); + } + + util/* applyStyle */.bg(domNode, node.labelStyle); + + return domNode; +} + +function processEscapeSequences(text) { + var newText = ''; + var escaped = false; + var ch; + for (var i = 0; i < text.length; ++i) { + ch = text[i]; + if (escaped) { + switch (ch) { + case 'n': + newText += '\n'; + break; + default: + newText += ch; + } + escaped = false; + } else if (ch === '\\') { + escaped = true; + } else { + newText += ch; + } + } + return newText; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-label.js + + + + + + +function addLabel(root, node, location) { + var label = node.label; + var labelSvg = root.append('g'); + + // Allow the label to be a string, a function that returns a DOM element, or + // a DOM element itself. + if (node.labelType === 'svg') { + addSVGLabel(labelSvg, node); + } else if (typeof label !== 'string' || node.labelType === 'html') { + (0,add_html_label/* addHtmlLabel */.a)(labelSvg, node); + } else { + addTextLabel(labelSvg, node); + } + + var labelBBox = labelSvg.node().getBBox(); + var y; + switch (location) { + case 'top': + y = -node.height / 2; + break; + case 'bottom': + y = node.height / 2 - labelBBox.height; + break; + default: + y = -labelBBox.height / 2; + } + labelSvg.attr('transform', 'translate(' + -labelBBox.width / 2 + ',' + y + ')'); + + return labelSvg; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-clusters.js + + + + + + +var createClusters = function (selection, g) { + var clusters = g.nodes().filter(function (v) { + return util/* isSubgraph */.bF(g, v); + }); + var svgClusters = selection.selectAll('g.cluster').data(clusters, function (v) { + return v; + }); + + util/* applyTransition */.WR(svgClusters.exit(), g).style('opacity', 0).remove(); + + var enterSelection = svgClusters + .enter() + .append('g') + .attr('class', 'cluster') + .attr('id', function (v) { + var node = g.node(v); + return node.id; + }) + .style('opacity', 0) + .each(function (v) { + var node = g.node(v); + var thisGroup = src/* select */.Ys(this); + src/* select */.Ys(this).append('rect'); + var labelGroup = thisGroup.append('g').attr('class', 'label'); + addLabel(labelGroup, node, node.clusterLabelPos); + }); + + svgClusters = svgClusters.merge(enterSelection); + + svgClusters = util/* applyTransition */.WR(svgClusters, g).style('opacity', 1); + + svgClusters.selectAll('rect').each(function (c) { + var node = g.node(c); + var domCluster = src/* select */.Ys(this); + util/* applyStyle */.bg(domCluster, node.style); + }); + + return svgClusters; +}; + +function setCreateClusters(value) { + createClusters = value; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js + + + + + + + +let createEdgeLabels = function (selection, g) { + var svgEdgeLabels = selection + .selectAll('g.edgeLabel') + .data(g.edges(), function (e) { + return util/* edgeToId */.O1(e); + }) + .classed('update', true); + + svgEdgeLabels.exit().remove(); + svgEdgeLabels.enter().append('g').classed('edgeLabel', true).style('opacity', 0); + + svgEdgeLabels = selection.selectAll('g.edgeLabel'); + + svgEdgeLabels.each(function (e) { + var root = src/* select */.Ys(this); + root.select('.label').remove(); + var edge = g.edge(e); + var label = addLabel(root, g.edge(e), 0).classed('label', true); + var bbox = label.node().getBBox(); + + if (edge.labelId) { + label.attr('id', edge.labelId); + } + if (!has/* default */.Z(edge, 'width')) { + edge.width = bbox.width; + } + if (!has/* default */.Z(edge, 'height')) { + edge.height = bbox.height; + } + }); + + var exitSelection; + + if (svgEdgeLabels.exit) { + exitSelection = svgEdgeLabels.exit(); + } else { + exitSelection = svgEdgeLabels.selectAll(null); // empty selection + } + + util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove(); + + return svgEdgeLabels; +}; + +function setCreateEdgeLabels(value) { + createEdgeLabels = value; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js + + +function intersectNode(node, point) { + return node.intersect(point); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js + + + + + + + +var createEdgePaths = function (selection, g, arrows) { + var previousPaths = selection + .selectAll('g.edgePath') + .data(g.edges(), function (e) { + return util/* edgeToId */.O1(e); + }) + .classed('update', true); + + var newPaths = enter(previousPaths, g); + exit(previousPaths, g); + + var svgPaths = previousPaths.merge !== undefined ? previousPaths.merge(newPaths) : previousPaths; + util/* applyTransition */.WR(svgPaths, g).style('opacity', 1); + + // Save DOM element in the path group, and set ID and class + svgPaths.each(function (e) { + var domEdge = src/* select */.Ys(this); + var edge = g.edge(e); + edge.elem = this; + + if (edge.id) { + domEdge.attr('id', edge.id); + } + + util/* applyClass */.$p( + domEdge, + edge['class'], + (domEdge.classed('update') ? 'update ' : '') + 'edgePath' + ); + }); + + svgPaths.selectAll('path.path').each(function (e) { + var edge = g.edge(e); + edge.arrowheadId = uniqueId/* default */.Z('arrowhead'); + + var domEdge = src/* select */.Ys(this) + .attr('marker-end', function () { + return 'url(' + makeFragmentRef(location.href, edge.arrowheadId) + ')'; + }) + .style('fill', 'none'); + + util/* applyTransition */.WR(domEdge, g).attr('d', function (e) { + return calcPoints(g, e); + }); + + util/* applyStyle */.bg(domEdge, edge.style); + }); + + svgPaths.selectAll('defs *').remove(); + svgPaths.selectAll('defs').each(function (e) { + var edge = g.edge(e); + var arrowhead = arrows[edge.arrowhead]; + arrowhead(src/* select */.Ys(this), edge.arrowheadId, edge, 'arrowhead'); + }); + + return svgPaths; +}; + +function setCreateEdgePaths(value) { + createEdgePaths = value; +} + +function makeFragmentRef(url, fragmentId) { + var baseUrl = url.split('#')[0]; + return baseUrl + '#' + fragmentId; +} + +function calcPoints(g, e) { + var edge = g.edge(e); + var tail = g.node(e.v); + var head = g.node(e.w); + var points = edge.points.slice(1, edge.points.length - 1); + points.unshift(intersectNode(tail, points[0])); + points.push(intersectNode(head, points[points.length - 1])); + + return createLine(edge, points); +} + +function createLine(edge, points) { + // @ts-expect-error + var line = (src/* line */.jvg || src/* svg.line */.YPS.line)() + .x(function (d) { + return d.x; + }) + .y(function (d) { + return d.y; + }); + + (line.curve || line.interpolate)(edge.curve); + + return line(points); +} + +function getCoords(elem) { + var bbox = elem.getBBox(); + var matrix = elem.ownerSVGElement + .getScreenCTM() + .inverse() + .multiply(elem.getScreenCTM()) + .translate(bbox.width / 2, bbox.height / 2); + return { x: matrix.e, y: matrix.f }; +} + +function enter(svgPaths, g) { + var svgPathsEnter = svgPaths.enter().append('g').attr('class', 'edgePath').style('opacity', 0); + svgPathsEnter + .append('path') + .attr('class', 'path') + .attr('d', function (e) { + var edge = g.edge(e); + var sourceElem = g.node(e.v).elem; + var points = range/* default */.Z(edge.points.length).map(function () { + return getCoords(sourceElem); + }); + return createLine(edge, points); + }); + svgPathsEnter.append('defs'); + return svgPathsEnter; +} + +function exit(svgPaths, g) { + var svgPathExit = svgPaths.exit(); + util/* applyTransition */.WR(svgPathExit, g).style('opacity', 0).remove(); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-nodes.js + + + + + + + +var createNodes = function (selection, g, shapes) { + var simpleNodes = g.nodes().filter(function (v) { + return !util/* isSubgraph */.bF(g, v); + }); + var svgNodes = selection + .selectAll('g.node') + .data(simpleNodes, function (v) { + return v; + }) + .classed('update', true); + + svgNodes.exit().remove(); + + svgNodes.enter().append('g').attr('class', 'node').style('opacity', 0); + + svgNodes = selection.selectAll('g.node'); + + svgNodes.each(function (v) { + var node = g.node(v); + var thisGroup = src/* select */.Ys(this); + util/* applyClass */.$p( + thisGroup, + node['class'], + (thisGroup.classed('update') ? 'update ' : '') + 'node' + ); + + thisGroup.select('g.label').remove(); + var labelGroup = thisGroup.append('g').attr('class', 'label'); + var labelDom = addLabel(labelGroup, node); + var shape = shapes[node.shape]; + var bbox = pick/* default */.Z(labelDom.node().getBBox(), 'width', 'height'); + + node.elem = this; + + if (node.id) { + thisGroup.attr('id', node.id); + } + if (node.labelId) { + labelGroup.attr('id', node.labelId); + } + + if (has/* default */.Z(node, 'width')) { + bbox.width = node.width; + } + if (has/* default */.Z(node, 'height')) { + bbox.height = node.height; + } + + bbox.width += node.paddingLeft + node.paddingRight; + bbox.height += node.paddingTop + node.paddingBottom; + labelGroup.attr( + 'transform', + 'translate(' + + (node.paddingLeft - node.paddingRight) / 2 + + ',' + + (node.paddingTop - node.paddingBottom) / 2 + + ')' + ); + + var root = src/* select */.Ys(this); + root.select('.label-container').remove(); + var shapeSvg = shape(root, bbox, node).classed('label-container', true); + util/* applyStyle */.bg(shapeSvg, node.style); + + var shapeBBox = shapeSvg.node().getBBox(); + node.width = shapeBBox.width; + node.height = shapeBBox.height; + }); + + var exitSelection; + + if (svgNodes.exit) { + exitSelection = svgNodes.exit(); + } else { + exitSelection = svgNodes.selectAll(null); // empty selection + } + + util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove(); + + return svgNodes; +}; + +function setCreateNodes(value) { + createNodes = value; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-clusters.js + + + + + +function positionClusters(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(v) { + var node = g.node(v); + return 'translate(' + node.x + ',' + node.y + ')'; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); + + util/* applyTransition */.WR(created.selectAll('rect'), g) + .attr('width', function (v) { + return g.node(v).width; + }) + .attr('height', function (v) { + return g.node(v).height; + }) + .attr('x', function (v) { + var node = g.node(v); + return -node.width / 2; + }) + .attr('y', function (v) { + var node = g.node(v); + return -node.height / 2; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js + + + + + + +function positionEdgeLabels(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(e) { + var edge = g.edge(e); + return has/* default */.Z(edge, 'x') ? 'translate(' + edge.x + ',' + edge.y + ')' : ''; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-nodes.js + + + + + +function positionNodes(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(v) { + var node = g.node(v); + return 'translate(' + node.x + ',' + node.y + ')'; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js + + +function intersectEllipse(node, rx, ry, point) { + // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html + + var cx = node.x; + var cy = node.y; + + var px = cx - point.x; + var py = cy - point.y; + + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + + var dx = Math.abs((rx * ry * px) / det); + if (point.x < cx) { + dx = -dx; + } + var dy = Math.abs((rx * ry * py) / det); + if (point.y < cy) { + dy = -dy; + } + + return { x: cx + dx, y: cy + dy }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js + + + + +function intersectCircle(node, rx, point) { + return intersectEllipse(node, rx, rx, point); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js + + +/* + * Returns the point at which two lines, p and q, intersect or returns + * undefined if they do not intersect. + */ +function intersectLine(p1, p2, q1, q2) { + // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, + // p7 and p473. + + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + + // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + + // b1 y + c1 = 0. + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + + // Compute r3 and r4. + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + + // Check signs of r3 and r4. If both point 3 and point 4 lie on + // same side of line 1, the line segments do not intersect. + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return /*DONT_INTERSECT*/; + } + + // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + + // Compute r1 and r2 + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + + // Check signs of r1 and r2. If both point 1 and point 2 lie + // on same side of second line segment, the line segments do + // not intersect. + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return /*DONT_INTERSECT*/; + } + + // Line segments intersect: compute intersection point. + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return /*COLLINEAR*/; + } + + offset = Math.abs(denom / 2); + + // The denom/2 is to get rounding instead of truncating. It + // is added or subtracted to the numerator, depending upon the + // sign of the numerator. + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + + return { x: x, y: y }; +} + +function sameSign(r1, r2) { + return r1 * r2 > 0; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js + + + + +/* + * Returns the point ({x, y}) at which the point argument intersects with the + * node argument assuming that it has the shape specified by polygon. + */ +function intersectPolygon(node, polyPoints, point) { + var x1 = node.x; + var y1 = node.y; + + var intersections = []; + + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + polyPoints.forEach(function (entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect = intersectLine( + node, + point, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect) { + intersections.push(intersect); + } + } + + if (!intersections.length) { + console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node); + return node; + } + + if (intersections.length > 1) { + // More intersections, find the one nearest to edge end point + intersections.sort(function (p, q) { + var pdx = p.x - point.x; + var pdy = p.y - point.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + + var qdx = q.x - point.x; + var qdy = q.y - point.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js + + +function intersectRect(node, point) { + var x = node.x; + var y = node.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = node.width / 2; + var h = node.height / 2; + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/shapes.js + + + + + + + +var shapes = { + rect, + ellipse, + circle, + diamond, +}; + +function setShapes(value) { + shapes = value; +} + +function rect(parent, bbox, node) { + var shapeSvg = parent + .insert('rect', ':first-child') + .attr('rx', node.rx) + .attr('ry', node.ry) + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('width', bbox.width) + .attr('height', bbox.height); + + node.intersect = function (point) { + return intersectRect(node, point); + }; + + return shapeSvg; +} + +function ellipse(parent, bbox, node) { + var rx = bbox.width / 2; + var ry = bbox.height / 2; + var shapeSvg = parent + .insert('ellipse', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('rx', rx) + .attr('ry', ry); + + node.intersect = function (point) { + return intersectEllipse(node, rx, ry, point); + }; + + return shapeSvg; +} + +function circle(parent, bbox, node) { + var r = Math.max(bbox.width, bbox.height) / 2; + var shapeSvg = parent + .insert('circle', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('r', r); + + node.intersect = function (point) { + return intersectCircle(node, r, point); + }; + + return shapeSvg; +} + +// Circumscribe an ellipse for the bounding box with a diamond shape. I derived +// the function to calculate the diamond shape from: +// http://mathforum.org/kb/message.jspa?messageID=3750236 +function diamond(parent, bbox, node) { + var w = (bbox.width * Math.SQRT2) / 2; + var h = (bbox.height * Math.SQRT2) / 2; + var points = [ + { x: 0, y: -h }, + { x: -w, y: 0 }, + { x: 0, y: h }, + { x: w, y: 0 }, + ]; + var shapeSvg = parent.insert('polygon', ':first-child').attr( + 'points', + points + .map(function (p) { + return p.x + ',' + p.y; + }) + .join(' ') + ); + + node.intersect = function (p) { + return intersectPolygon(node, points, p); + }; + + return shapeSvg; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/render.js + + + + + + + + + + + + + + + +// This design is based on http://bost.ocks.org/mike/chart/. +function render() { + var fn = function (svg, g) { + preProcessGraph(g); + + var outputGroup = createOrSelectGroup(svg, 'output'); + var clustersGroup = createOrSelectGroup(outputGroup, 'clusters'); + var edgePathsGroup = createOrSelectGroup(outputGroup, 'edgePaths'); + var edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, 'edgeLabels'), g); + var nodes = createNodes(createOrSelectGroup(outputGroup, 'nodes'), g, shapes); + + (0,dagre/* layout */.bK)(g); + + positionNodes(nodes, g); + positionEdgeLabels(edgeLabels, g); + createEdgePaths(edgePathsGroup, g, arrows); + + var clusters = createClusters(clustersGroup, g); + positionClusters(clusters, g); + + postProcessGraph(g); + }; + + fn.createNodes = function (value) { + if (!arguments.length) return createNodes; + setCreateNodes(value); + return fn; + }; + + fn.createClusters = function (value) { + if (!arguments.length) return createClusters; + setCreateClusters(value); + return fn; + }; + + fn.createEdgeLabels = function (value) { + if (!arguments.length) return createEdgeLabels; + setCreateEdgeLabels(value); + return fn; + }; + + fn.createEdgePaths = function (value) { + if (!arguments.length) return createEdgePaths; + setCreateEdgePaths(value); + return fn; + }; + + fn.shapes = function (value) { + if (!arguments.length) return shapes; + setShapes(value); + return fn; + }; + + fn.arrows = function (value) { + if (!arguments.length) return arrows; + setArrows(value); + return fn; + }; + + return fn; +} + +var NODE_DEFAULT_ATTRS = { + paddingLeft: 10, + paddingRight: 10, + paddingTop: 10, + paddingBottom: 10, + rx: 0, + ry: 0, + shape: 'rect', +}; + +var EDGE_DEFAULT_ATTRS = { + arrowhead: 'normal', + curve: src/* curveLinear */.c_6, +}; + +function preProcessGraph(g) { + g.nodes().forEach(function (v) { + var node = g.node(v); + if (!has/* default */.Z(node, 'label') && !g.children(v).length) { + node.label = v; + } + + if (has/* default */.Z(node, 'paddingX')) { + defaults/* default */.Z(node, { + paddingLeft: node.paddingX, + paddingRight: node.paddingX, + }); + } + + if (has/* default */.Z(node, 'paddingY')) { + defaults/* default */.Z(node, { + paddingTop: node.paddingY, + paddingBottom: node.paddingY, + }); + } + + if (has/* default */.Z(node, 'padding')) { + defaults/* default */.Z(node, { + paddingLeft: node.padding, + paddingRight: node.padding, + paddingTop: node.padding, + paddingBottom: node.padding, + }); + } + + defaults/* default */.Z(node, NODE_DEFAULT_ATTRS); + + forEach/* default */.Z(['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'], function (k) { + node[k] = Number(node[k]); + }); + + // Save dimensions for restore during post-processing + if (has/* default */.Z(node, 'width')) { + node._prevWidth = node.width; + } + if (has/* default */.Z(node, 'height')) { + node._prevHeight = node.height; + } + }); + + g.edges().forEach(function (e) { + var edge = g.edge(e); + if (!has/* default */.Z(edge, 'label')) { + edge.label = ''; + } + defaults/* default */.Z(edge, EDGE_DEFAULT_ATTRS); + }); +} + +function postProcessGraph(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + + // Restore original dimensions + if (has/* default */.Z(node, '_prevWidth')) { + node.width = node._prevWidth; + } else { + delete node.width; + } + + if (has/* default */.Z(node, '_prevHeight')) { + node.height = node._prevHeight; + } else { + delete node.height; + } + + delete node._prevWidth; + delete node._prevHeight; + }); +} + +function createOrSelectGroup(root, name) { + var selection = root.select('g.' + name); + if (selection.empty()) { + selection = root.append('g').attr('class', name); + } + return selection; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/index.js + + + + + + + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/utils-d622194a.js +var utils_d622194a = __webpack_require__(81188); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/styles-26373982.js +var styles_26373982 = __webpack_require__(60755); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.js +var purify_es = __webpack_require__(20683); +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27484); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(17967); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + 1 modules +var json = __webpack_require__(39354); +// EXTERNAL MODULE: ./node_modules/mermaid/node_modules/@khanacademy/simple-markdown/dist/es/index.js +var es = __webpack_require__(3502); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/flowDiagram-46a15f6f.js + + + + + + + + + + + + + + + + + + + + + + + + + + +function question(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const s = (w + h) * 0.9; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, s, s, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function hexagon(parent, bbox, node) { + const f = 4; + const h = bbox.height; + const m = h / f; + const w = bbox.width + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function rect_left_inv_arrow(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function lean_right(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function lean_left(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function trapezoid(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function inv_trapezoid(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function rect_right_inv_arrow(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function stadium(parent, bbox, node) { + const h = bbox.height; + const w = bbox.width + h / 4; + const shapeSvg = parent.insert("rect", ":first-child").attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + node.intersect = function(point) { + return intersectRect(node, point); + }; + return shapeSvg; +} +function subroutine(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function cylinder(parent, bbox, node) { + const w = bbox.width; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const shapeSvg = parent.attr("label-offset-y", ry).insert("path", ":first-child").attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + node.intersect = function(point) { + const pos = intersectRect(node, point); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +} +function addToRender(render2) { + render2.shapes().question = question; + render2.shapes().hexagon = hexagon; + render2.shapes().stadium = stadium; + render2.shapes().subroutine = subroutine; + render2.shapes().cylinder = cylinder; + render2.shapes().rect_left_inv_arrow = rect_left_inv_arrow; + render2.shapes().lean_right = lean_right; + render2.shapes().lean_left = lean_left; + render2.shapes().trapezoid = trapezoid; + render2.shapes().inv_trapezoid = inv_trapezoid; + render2.shapes().rect_right_inv_arrow = rect_right_inv_arrow; +} +function addToRenderV2(addShape) { + addShape({ question }); + addShape({ hexagon }); + addShape({ stadium }); + addShape({ subroutine }); + addShape({ cylinder }); + addShape({ rect_left_inv_arrow }); + addShape({ lean_right }); + addShape({ lean_left }); + addShape({ trapezoid }); + addShape({ inv_trapezoid }); + addShape({ rect_right_inv_arrow }); +} +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +const flowChartShapes = { + addToRender, + addToRenderV2 +}; +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, _doc, diagObj) { + const svg = !root ? (0,src/* select */.Ys)(`[id="${svgId}"]`) : root.select(`[id="${svgId}"]`); + const doc = !_doc ? document : _doc; + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + const styles = (0,utils_d622194a.n)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + if ((0,commonDb_573409be.k)((0,commonDb_573409be.g)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,add_html_label/* addHtmlLabel */.a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(commonDb_573409be.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + default: + _shape = "rect"; + } + commonDb_573409be.l.warn("Adding node", vertex.id, vertex.domId); + g.setNode(diagObj.db.lookUpDomId(vertex.id), { + labelType: "svg", + labelStyle: styles.labelStyle, + shape: _shape, + label: vertexNode, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: diagObj.db.lookUpDomId(vertex.id) + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + let cnt = 0; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,utils_d622194a.n)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + var linkId = "L-" + edge.start + "-" + edge.end; + var linkNameStart = "LS-" + edge.start; + var linkNameEnd = "LE-" + edge.end; + const edgeData = {}; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + let style = ""; + let labelStyle = ""; + if (edge.style !== void 0) { + const styles = (0,utils_d622194a.n)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } else { + switch (edge.stroke) { + case "normal": + style = "fill:none"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + break; + case "dotted": + style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + style = " stroke-width: 3.5px;fill:none"; + break; + } + } + edgeData.style = style; + edgeData.labelStyle = labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,utils_d622194a.o)(edge.interpolate, src/* curveLinear */.c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,utils_d622194a.o)(edges.defaultInterpolate, src/* curveLinear */.c_6); + } else { + edgeData.curve = (0,utils_d622194a.o)(conf.curve, src/* curveLinear */.c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + if ((0,commonDb_573409be.k)((0,commonDb_573409be.g)().flowchart.htmlLabels)) { + edgeData.labelType = "html"; + edgeData.label = `<span id="L-${linkId}" class="edgeLabel L-${linkNameStart}' L-${linkNameEnd}" style="${edgeData.labelStyle}">${edge.text.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + )}</span>`; + } else { + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(commonDb_573409be.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + } + } + edgeData.id = linkId; + edgeData.class = linkNameStart + " " + linkNameEnd; + edgeData.minlen = edge.length || 1; + g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + commonDb_573409be.l.info("Extracting classes"); + diagObj.db.clear(); + try { + diagObj.parse(text); + return diagObj.db.getClasses(); + } catch (e) { + commonDb_573409be.l.error(e); + return {}; + } +}; +const draw = function(text, id, _version, diagObj) { + commonDb_573409be.l.info("Drawing flowchart"); + diagObj.db.clear(); + const { securityLevel, flowchart: conf2 } = (0,commonDb_573409be.g)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + try { + diagObj.parser.parse(text); + } catch (err) { + commonDb_573409be.l.debug("Parsing failed"); + } + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + const g = new graphlib/* Graph */.k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes); + } + const vert = diagObj.db.getVertices(); + commonDb_573409be.l.warn("Get vertices", vert); + const edges = diagObj.db.getEdges(); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,src/* selectAll */.td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + commonDb_573409be.l.warn( + "Setting subgraph", + subG.nodes[j], + diagObj.db.lookUpDomId(subG.nodes[j]), + diagObj.db.lookUpDomId(subG.id) + ); + g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id)); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g, diagObj); + const render$1 = new render(); + flowChartShapes.addToRender(render$1); + render$1.arrows().none = function normal(parent, id2, edge, type) { + const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); + const path = marker.append("path").attr("d", "M 0 0 L 0 0 L 0 0 z"); + (0,util/* applyStyle */.bg)(path, edge[type + "Style"]); + }; + render$1.arrows().normal = function normal(parent, id2) { + const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); + marker.append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowheadPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + }; + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + render$1(element, g); + element.selectAll("g.node").attr("title", function() { + return diagObj.db.getTooltip(this.id); + }); + diagObj.db.indexNodes("subGraph" + i); + for (i = 0; i < subGraphs.length; i++) { + subG = subGraphs[i]; + if (subG.title !== "undefined") { + const clusterRects = doc.querySelectorAll( + "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"] rect' + ); + const clusterEl = doc.querySelectorAll( + "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"]' + ); + const xPos = clusterRects[0].x.baseVal.value; + const yPos = clusterRects[0].y.baseVal.value; + const _width = clusterRects[0].width.baseVal.value; + const cluster = (0,src/* select */.Ys)(clusterEl[0]); + const te = cluster.select(".label"); + te.attr("transform", `translate(${xPos + _width / 2}, ${yPos + 14})`); + te.attr("id", id + "Text"); + for (let j = 0; j < subG.classes.length; j++) { + clusterEl[0].classList.add(subG.classes[j]); + } + } + } + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + (0,utils_d622194a.s)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = root.select("#" + id + ' [id="' + diagObj.db.lookUpDomId(key) + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRenderer = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const diagram = { + parser: flowDb_52e24d17.p, + db: flowDb_52e24d17.f, + renderer: styles_26373982.f, + styles: styles_26373982.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + flowRenderer.setConf(cnf.flowchart); + flowDb_52e24d17.f.clear(); + flowDb_52e24d17.f.setGen("gen-1"); + } +}; + +//# sourceMappingURL=flowDiagram-46a15f6f.js.map + + +/***/ }), + +/***/ 12566: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "r": () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39354); +/* harmony import */ var _edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(48099); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70044); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(211); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(59373); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = JSON.parse(JSON.stringify(edge)); + const edge2 = JSON.parse(JSON.stringify(edge)); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = (_elem, graph, diagramtype, parentCluster) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + graph.nodes().forEach(function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); + const newEl = o.elem; + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = (elem, graph, markers, diagramtype, id) => { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + adjustClustersAndEdges(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + recursiveRender(elem, graph, diagramtype); +}; + +//# sourceMappingURL=index-5219d011.js.map + + +/***/ }), + +/***/ 60755: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ flowStyles), +/* harmony export */ "f": () => (/* binding */ flowRendererV2) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45625); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59373); +/* harmony import */ var _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(49863); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(81188); +/* harmony import */ var _index_5219d011_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12566); +/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(43349); + + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.n)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_4__/* .addHtmlLabel */ .a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)().flowchart.padding + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + domId: diagObj.db.lookUpDomId(vertex.id), + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + dir: vertex.dir, + props: vertex.props, + padding: (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)().flowchart.padding + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.n)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + var linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + var linkNameStart = "LS-" + edge.start; + var linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + case "invisible": + edgeData.thickness = "invisible"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 0;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.n)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.o)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.o)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + g.setEdge(edge.start, edge.end, edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Extracting classes"); + diagObj.db.clear(); + try { + diagObj.parse(text); + return diagObj.db.getClasses(); + } catch (e) { + return; + } +}; +const draw = function(text, id, _version, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Drawing flowchart"); + diagObj.db.clear(); + _flowDb_52e24d17_js__WEBPACK_IMPORTED_MODULE_5__.f.setGen("gen-2"); + diagObj.parser.parse(text); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.g)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 0, + marginy: 0 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Subgraph - ", subG); + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const vert = diagObj.db.getVertices(); + const edges = diagObj.db.getEdges(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .selectAll */ .td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_3__.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + (0,_index_5219d011_js__WEBPACK_IMPORTED_MODULE_6__.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.s)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + diagObj.db.indexNodes("subGraph" + i); + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#" + id + ' [id="' + key + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRendererV2 = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; + +//# sourceMappingURL=styles-26373982.js.map + + +/***/ }), + +/***/ 77657: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "p": () => (/* binding */ parseMember), +/* harmony export */ "s": () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); + + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = classDef.id; + if (classDef.type !== void 0 && classDef.type !== "") { + classTitleString += "<" + classDef.type + ">"; + } + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const drawNote = function(elem, note, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + const fieldRegEx = /^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/; + const methodRegEx = /^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/; + let fieldMatch = text.match(fieldRegEx); + let methodMatch = text.match(methodRegEx); + if (fieldMatch && !methodMatch) { + return buildFieldDisplay(fieldMatch); + } else if (methodMatch) { + return buildMethodDisplay(methodMatch); + } else { + return buildLegacyDisplay(text); + } +}; +const buildFieldDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let fieldType = parsedText[2] ? parsedText[2].trim() : ""; + let genericType = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let fieldName = parsedText[4] ? parsedText[4].trim() : ""; + let classifier = parsedText[5] ? parsedText[5].trim() : ""; + displayText = visibility + fieldType + genericType + " " + fieldName; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildMethodDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let methodName = parsedText[2] ? parsedText[2].trim() : ""; + let parameters = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let classifier = parsedText[4] ? parsedText[4].trim() : ""; + let returnType = parsedText[5] ? " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[5]).trim() : ""; + displayText = visibility + methodName + "(" + parameters + ")" + returnType; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildLegacyDisplay = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let methodStart = text.indexOf("("); + let methodEnd = text.indexOf(")"); + if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) { + let visibility = ""; + let methodName = ""; + let firstChar = text.substring(0, 1); + if (firstChar.match(/\w/)) { + methodName = text.substring(0, methodStart).trim(); + } else { + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + methodName = text.substring(1, methodStart).trim(); + } + const parameters = text.substring(methodStart + 1, methodEnd); + text.substring(methodEnd + 1, 1); + cssStyle = parseClassifier(text.substring(methodEnd + 1, methodEnd + 2)); + displayText = visibility + methodName + "(" + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + returnType = text.substring(methodEnd + 2).trim(); + if (returnType !== "") { + returnType = " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(returnType); + displayText += returnType; + } + } + } else { + displayText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + drawClass, + drawEdge, + drawNote, + parseMember +}; + +//# sourceMappingURL=svgDraw-2526cba0.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/83665776.355a054f.js b/assets/js/83665776.355a054f.js new file mode 100644 index 0000000000..d5872895bf --- /dev/null +++ b/assets/js/83665776.355a054f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6710],{4807:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var a=r(7462),o=(r(7294),r(3905));r(5657);const n={},s="QUOTA",c={unversionedId:"about/references/keywords/QUOTA",id:"about/references/keywords/QUOTA",title:"QUOTA",description:"[...] /",source:"@site/docs/about/references/keywords/QUOTA.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/QUOTA",permalink:"/ecalc/docs/about/references/keywords/QUOTA",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/QUOTA.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS"},next:{title:"RATE",permalink:"/ecalc/docs/about/references/keywords/RATE"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:l},u="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"quota"},"QUOTA"),(0,o.kt)("p",null,"[...]"," /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/QUOTA"},"QUOTA")),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"Quota cost in NOK/Sm",(0,o.kt)("sup",null,"3")," for the emission. ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/QUOTA"},"QUOTA")," can either be a fixed number or an\nexpression (time series). With the use of an expression, a time series can be defined which can let the quota value vary over the model timespan."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"QUOTA: <quota>\n")),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # kg/Sm3\n QUOTA: 240 # NOK/ton CO2\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/841adc37.bd9ecd54.js b/assets/js/841adc37.bd9ecd54.js new file mode 100644 index 0000000000..4a9fb91a0b --- /dev/null +++ b/assets/js/841adc37.bd9ecd54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6768],{2634:(a,e,m)=>{m.r(e),m.d(e,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>p,toc:()=>o});var t=m(7462),n=(m(7294),m(3905));m(5657);const r={sidebar_position:4,description:"Turbine modelling"},s="Turbine modelling",p={unversionedId:"about/modelling/setup/models/turbine_modeling",id:"about/modelling/setup/models/turbine_modeling",title:"Turbine modelling",description:"Turbine modelling",source:"@site/docs/about/modelling/setup/models/turbine_modeling.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/turbine_modeling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/turbine_modeling.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Turbine modelling"},sidebar:"about",previous:{title:"Fixed speed pressure control",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/"},next:{title:"Fuel types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types"}},l={},o=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Combining a compressor train and a turbine into one model",id:"combining-a-compressor-train-and-a-turbine-into-one-model",level:3},{value:"Format",id:"format-1",level:2},{value:"Examples",id:"examples",level:2}],i={toc:o},N="wrapper";function d(a){let{components:e,...m}=a;return(0,n.kt)(N,(0,t.Z)({},i,m,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"turbine-modelling"},"Turbine modelling"),(0,n.kt)("p",null,"The turbine model requires values for efficiencies vs corresponding loads. Currently also a lower heating value needs to\nbe specified (planned feature is to get this from the fuel type used)"),(0,n.kt)("p",null,"The load values are given in MW, while efficiency values are numbers between 0 and 1."),(0,n.kt)("p",null,"The fuel usage for a turbine is equal to"),(0,n.kt)("div",{className:"math math-display"},(0,n.kt)("span",{parentName:"div",className:"katex-display"},(0,n.kt)("span",{parentName:"span",className:"katex"},(0,n.kt)("span",{parentName:"span",className:"katex-mathml"},(0,n.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,n.kt)("semantics",{parentName:"math"},(0,n.kt)("mrow",{parentName:"semantics"},(0,n.kt)("mi",{parentName:"mrow"},"F"),(0,n.kt)("mi",{parentName:"mrow"},"U"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mi",{parentName:"mrow"},"L"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,n.kt)("mi",{parentName:"mrow"},"U"),(0,n.kt)("mi",{parentName:"mrow"},"S"),(0,n.kt)("mi",{parentName:"mrow"},"A"),(0,n.kt)("mi",{parentName:"mrow"},"G"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mo",{parentName:"mrow"},"="),(0,n.kt)("mfrac",{parentName:"mrow"},(0,n.kt)("mrow",{parentName:"mfrac"},(0,n.kt)("mi",{parentName:"mrow"},"L"),(0,n.kt)("mi",{parentName:"mrow"},"O"),(0,n.kt)("mi",{parentName:"mrow"},"A"),(0,n.kt)("mi",{parentName:"mrow"},"D"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,n.kt)("mi",{parentName:"mrow"},"I"),(0,n.kt)("mi",{parentName:"mrow"},"N"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,n.kt)("mi",{parentName:"mrow"},"M"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mi",{parentName:"mrow"},"G"),(0,n.kt)("mi",{parentName:"mrow"},"A"),(0,n.kt)("mi",{parentName:"mrow"},"W"),(0,n.kt)("mi",{parentName:"mrow"},"A"),(0,n.kt)("mi",{parentName:"mrow"},"T"),(0,n.kt)("mi",{parentName:"mrow"},"T"),(0,n.kt)("mo",{parentName:"mrow"},"\u2217"),(0,n.kt)("mi",{parentName:"mrow"},"S"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mi",{parentName:"mrow"},"C"),(0,n.kt)("mi",{parentName:"mrow"},"O"),(0,n.kt)("mi",{parentName:"mrow"},"N"),(0,n.kt)("mi",{parentName:"mrow"},"D"),(0,n.kt)("mi",{parentName:"mrow"},"S"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,n.kt)("mi",{parentName:"mrow"},"P"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mi",{parentName:"mrow"},"R"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,n.kt)("mi",{parentName:"mrow"},"D"),(0,n.kt)("mi",{parentName:"mrow"},"A"),(0,n.kt)("mi",{parentName:"mrow"},"Y")),(0,n.kt)("mrow",{parentName:"mfrac"},(0,n.kt)("mi",{parentName:"mrow"},"L"),(0,n.kt)("mi",{parentName:"mrow"},"O"),(0,n.kt)("mi",{parentName:"mrow"},"W"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mi",{parentName:"mrow"},"R"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,n.kt)("mi",{parentName:"mrow"},"H"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mi",{parentName:"mrow"},"A"),(0,n.kt)("mi",{parentName:"mrow"},"T"),(0,n.kt)("mi",{parentName:"mrow"},"I"),(0,n.kt)("mi",{parentName:"mrow"},"N"),(0,n.kt)("mi",{parentName:"mrow"},"G"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,n.kt)("mi",{parentName:"mrow"},"V"),(0,n.kt)("mi",{parentName:"mrow"},"A"),(0,n.kt)("mi",{parentName:"mrow"},"L"),(0,n.kt)("mi",{parentName:"mrow"},"U"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mo",{parentName:"mrow"},"\u2217"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mi",{parentName:"mrow"},"F"),(0,n.kt)("mi",{parentName:"mrow"},"F"),(0,n.kt)("mi",{parentName:"mrow"},"I"),(0,n.kt)("mi",{parentName:"mrow"},"C"),(0,n.kt)("mi",{parentName:"mrow"},"I"),(0,n.kt)("mi",{parentName:"mrow"},"E"),(0,n.kt)("mi",{parentName:"mrow"},"N"),(0,n.kt)("mi",{parentName:"mrow"},"C"),(0,n.kt)("mi",{parentName:"mrow"},"Y")))),(0,n.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"FUEL\\_USAGE = \\frac{LOAD\\_IN\\_MEGAWATT * SECONDS\\_PER\\_DAY}{LOWER\\_HEATING\\_VALUE * EFFICIENCY}")))),(0,n.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9933em",verticalAlign:"-0.31em"}}),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"F"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"L"),(0,n.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"S"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"GE"),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.kt)("span",{parentName:"span",className:"mrel"},"="),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"2.3793em",verticalAlign:"-0.996em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,n.kt)("span",{parentName:"span",className:"mfrac"},(0,n.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.3833em"}},(0,n.kt)("span",{parentName:"span",style:{top:"-2.314em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"L"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"O"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"ER"),(0,n.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"NG"),(0,n.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"LU"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.kt)("span",{parentName:"span",className:"mbin"},"\u2217"),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"EFF"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"C"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"ENC"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"Y"))),(0,n.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,n.kt)("span",{parentName:"span",style:{top:"-3.7em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"L"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"O"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,n.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,n.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"MEG"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"TT"),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.kt)("span",{parentName:"span",className:"mbin"},"\u2217"),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"SECON"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"S"),(0,n.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"PER"),(0,n.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"Y")))),(0,n.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.996em"}},(0,n.kt)("span",{parentName:"span"}))))),(0,n.kt)("span",{parentName:"span",className:"mclose nulldelimiter"}))))))),(0,n.kt)("p",null,"When evaluated for a load (in units MW), the efficiency is evaluated by linearly interpolating the input load vs\nefficiency data."),(0,n.kt)("p",null,"The input values for load and efficiency are lists which both MUST START WITH 0! The user is thus responsible for the\nbehaviour also for small load values."),(0,n.kt)("p",null,"For load values equal to 0, the fuel usage is also set to 0."),(0,n.kt)("p",null,"Lower heating value is given in units ",(0,n.kt)("em",{parentName:"p"},"MJ/Sm",(0,n.kt)("sup",null,"3"))),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n TURBINE_LOADS: <list of power values in mega watt>\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n")),(0,n.kt)("h3",{id:"combining-a-compressor-train-and-a-turbine-into-one-model"},"Combining a compressor train and a turbine into one model"),(0,n.kt)("p",null,"To model a turbine driven compressor train, a compressor train model needs to be combined with a turbine model. The\ncalculated shaft power required for the compressor train, will then be the input of the turbine model to calculate\nfuel usage."),(0,n.kt)("h2",{id:"format-1"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of turbine model, for reference>\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: <reference to compressor train model defined in [MODELS](../references/keywords/MODELS) or [FACILITY_INPUTS](../references/keywords/FACILITY_INPUTS) (of type COMPRESSOR_TABULAR)>\n TURBINE_MODEL: <reference to a turbine model defined in [MODELS](../references/keywords/MODELS) (of type TURBINE)>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n")),(0,n.kt)("h2",{id:"examples"},"Examples"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: simplified_compressor_train_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TURBINE_MODEL: compressor_train_turbine\n POWER_ADJUSTMENT_CONSTANT: 10\n")),(0,n.kt)("p",null,"Turbine combined with presampled compressor model (",(0,n.kt)("inlineCode",{parentName:"p"},"COMPRESSOR_TABULAR<COMPRESSOR_TABULAR facility input type>"),")"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_sampled_tabulated_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: compressor_sampled_tabulated_model\n TURBINE_MODEL: compressor_train_turbine\n POWER_ADJUSTMENT_CONSTANT: 10\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8443.b56128a0.js b/assets/js/8443.b56128a0.js new file mode 100644 index 0000000000..6d410e191a --- /dev/null +++ b/assets/js/8443.b56128a0.js @@ -0,0 +1,2 @@ +/*! For license information please see 8443.b56128a0.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8443],{8443:(t,e,n)=>{"use strict";t.exports=n(295)},1228:(t,e,n)=>{"use strict";var i=n(2856),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},9050:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(2856),a=n(4910),u=n(3561),c=n(1228),l=n(3109);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"<p>"+e(t)+"</p>"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},3354:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910),r=n(3109),o=n(9050),a=n(1228);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('<div class="'+i.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else i.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s<n&&this.$menu.scrollTop(i+(n-s))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:o.extractDatum(t),value:o.extractValue(t),datasetName:o.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){i.each(this.datasets,(function(e){e.update(t)}))},empty:function(){i.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,i.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=o,t.exports=u},50:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},3109:(t,e,n)=>{"use strict";var i=n(624),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s<r;s+=1)i=!1===t[s].apply(e,n);return!i}}t.exports={onSync:function(t,e,n){return r.call(this,"sync",t,e,n)},onAsync:function(t,e,n){return r.call(this,"async",t,e,n)},off:function(t){var e;if(!this._callbacks)return this;t=t.split(s);for(;e=t.shift();)delete this._callbacks[e];return this},trigger:function(t){var e,n,r,a,u;if(!this._callbacks)return this;t=t.split(s),r=[].slice.call(arguments,1);for(;(e=t.shift())&&(n=this._callbacks[e]);)a=o(n.sync,this,[e].concat(r)),u=o(n.async,this,[e].concat(r)),a()&&i(u);return this}}},3561:t=>{"use strict";t.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},2534:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(2856),r=n(4910),o=n(3109);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},6549:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(2856),r=n(4910),o=n(50),a=n(2534),u=n(3354),c=n(3561),l=n(1228);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(8840),t.exports=h},4910:t=>{"use strict";t.exports={element:null}},6177:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},2856:(t,e,n)=>{"use strict";var i,s=n(8820),r=n(4910);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"<em>";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"</em>";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},9983:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},8840:(t,e,n)=>{"use strict";t.exports={hits:n(9983),popularIn:n(4445)}},4445:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r<a.hits.length;++r)n.push(a.hits[r]);l(n,a)}}))}l([])}}))}}},295:(t,e,n)=>{"use strict";var i=n(6990);n(4910).element=i;var s=n(2856);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(6549),a=n(50);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},533:t=>{t.exports="0.38.1"},6990:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n<i;n++)this[n]=t[n];this.length=i,this.selector=e||""}function W(t,i,s){for(n in i)s&&(R(i[n])||k(i[n]))?(R(i[n])&&!R(t[n])&&(t[n]={}),k(i[n])&&!k(t[n])&&(t[n]=[]),W(t[n],i[n],s)):i[n]!==e&&(t[n]=i[n])}function Z(t,e){return null==e?i(t):i(t).filter(e)}function X(t,e,n,i){return P(e)?e.call(t,n,i):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function J(t,n){var i=t.className||"",s=i&&i.baseVal!==e;if(n===e)return s?i.baseVal:i;s?i.baseVal=n:t.className=n}function Y(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?i.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,i=t.childNodes.length;n<i;n++)tt(t.childNodes[n],e)}return O.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,s=t.parentNode,r=!s;return r&&(s=D).appendChild(t),i=~O.qsa(s,e).indexOf(t),r&&D.removeChild(t),i},r=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},o=function(t){return c.call(t,(function(e,n){return t.indexOf(e)==n}))},O.fragment=function(t,n,s){var r,o,a;return m.test(t)&&(r=i(h.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(v,"<$1></$2>")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i<t.length;i++)null!=(n=e(t[i],i))&&r.push(n);else for(s in t)null!=(n=e(t[s],s))&&r.push(n);return H(r)},i.each=function(t,e){var n,i;if(q(t)){for(n=0;n<t.length;n++)if(!1===e.call(t[n],n,t[n]))return t}else for(i in t)if(!1===e.call(t[i],i,t[i]))return t;return t},i.grep=function(t,e){return c.call(t,e)},t.JSON&&(i.parseJSON=JSON.parse),i.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(t,e){$["[object "+e+"]"]=e.toLowerCase()})),i.fn={constructor:O.Z,length:0,forEach:a.forEach,reduce:a.reduce,push:a.push,sort:a.sort,splice:a.splice,indexOf:a.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=O.isZ(e)?e.toArray():e;return u.apply(O.isZ(this)?this.toArray():this,n)},map:function(t){return i(i.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return i(l.apply(this,arguments))},ready:function(t){return E.test(h.readyState)&&h.body?t(i):h.addEventListener("DOMContentLoaded",(function(){t(i)}),!1),this},get:function(t){return t===e?l.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},8820:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h<p;){var f=r.charAt(h++),d=f.charCodeAt(),g=void 0;if(d<32||d>126){if(d>=55296&&d<=56319&&h<p){var m=r.charCodeAt(h++);56320==(64512&m)?d=((1023&d)<<10)+(1023&m)+65536:h--}g="\\"+d.toString(16).toUpperCase()+" "}else g=o.escapeEverything?n.test(f)?"\\"+f:"\\"+d.toString(16).toUpperCase()+" ":/[\t\n\f\r\x0B]/.test(f)?"\\"+d.toString(16).toUpperCase()+" ":"\\"==f||!u&&('"'==f&&a==f||"'"==f&&a==f)||u&&i.test(f)?"\\"+f:f;l+=g}return u&&(/^-[-\d]/.test(l)?l="\\-"+l.slice(1):/\d/.test(c)&&(l="\\3"+c+" "+l.slice(1))),l=l.replace(s,(function(t,e,n){return e&&e.length%2?t:(e||"")+n})),!u&&o.wrap?a+l+a:l};r.options={escapeEverything:!1,isIdentifier:!1,quotes:"single",wrap:!1},r.version="3.0.0",t.exports=r},624:(t,e,n)=>{"use strict";var i,s,r,o=[n(5525),n(4785),n(8291),n(2709),n(2506),n(9176)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a<t;)s[a].run();a=-1,t=u.length}s=null,a=-1,i=!1,clearTimeout(e)}}for(var p=-1,f=o.length;++p<f;)if(o[p]&&o[p].test&&o[p].test()){r=o[p].install(h);break}function d(t,e){this.fun=t,this.array=e}d.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new d(t,e)),c||i||(c=!0,r())}},2709:(t,e,n)=>{"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},8291:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},4785:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},2506:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},9176:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file diff --git a/assets/js/8443.b56128a0.js.LICENSE.txt b/assets/js/8443.b56128a0.js.LICENSE.txt new file mode 100644 index 0000000000..4f7ccd8a76 --- /dev/null +++ b/assets/js/8443.b56128a0.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/855.89c4e752.js b/assets/js/855.89c4e752.js new file mode 100644 index 0000000000..beba7e4ea1 --- /dev/null +++ b/assets/js/855.89c4e752.js @@ -0,0 +1,12342 @@ +"use strict"; +exports.id = 855; +exports.ids = [855]; +exports.modules = { + +/***/ 42494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "bK": () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js + + + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue/* default */.Z)(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js +var isPlainObject = __webpack_require__(37514); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = (0,isArray/* default */.Z)(srcValue), + isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue), + isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if ((0,isArray/* default */.Z)(objValue)) { + newValue = objValue; + } + else if ((0,isArrayLikeObject/* default */.Z)(objValue)) { + newValue = (0,_copyArray/* default */.Z)(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true); + } + else { + newValue = []; + } + } + else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) { + newValue = objValue; + if ((0,isArguments/* default */.Z)(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) { + newValue = (0,_initCloneObject/* default */.Z)(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + (0,_baseFor/* default */.Z)(source, function(srcValue, key) { + stack || (stack = new _Stack/* default */.Z); + if ((0,isObject/* default */.Z)(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, keysIn/* default */.Z); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return (0,_baseRest/* default */.Z)(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default.Date.now */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "k": () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 31667: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _Stack) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules +var _ListCache = __webpack_require__(67308); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache/* default */.Z; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js +var _Map = __webpack_require__(86183); +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache/* default */.Z) { + var pairs = data.__data__; + if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache/* default */.Z(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache/* default */.Z(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + + +/***/ }), + +/***/ 84073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Built-in value references. */ +var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 87668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _arrayLikeKeys) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = (0,isArray/* default */.Z)(value), + isArg = !isArr && (0,isArguments/* default */.Z)(value), + isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value), + isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + (0,_isIndex/* default */.Z)(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 72954: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value); + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue); + + +/***/ }), + +/***/ 74752: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904); + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) { + (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 61395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFor) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 69581: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203); +/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211); +/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227); + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + ''); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 41884: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073); + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer)); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer); + + +/***/ }), + +/***/ 91050: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer); + + +/***/ }), + +/***/ 12701: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884); + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray); + + +/***/ }), + +/***/ 87215: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray); + + +/***/ }), + +/***/ 31899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752); + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue); + } else { + (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject); + + +/***/ }), + +/***/ 77904: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508); + + +var defineProperty = (function() { + try { + var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 12513: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851); + + +/** Built-in value references. */ +var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 73658: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _initCloneObject) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!(0,isObject/* default */.Z)(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object)) + ? _baseCreate((0,_getPrototype/* default */.Z)(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + + +/***/ }), + +/***/ 56009: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex); + + +/***/ }), + +/***/ 50439: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226); + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length)) + : (type == 'string' && index in object) + ) { + return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value); + } + return false; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 81211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _overRest) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 27227: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _setToString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js +var _defineProperty = __webpack_require__(77904); +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) { + return (0,_defineProperty/* default */.Z)(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': (0,constant/* default */.Z)(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 62002: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 69203: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity); + + +/***/ }), + +/***/ 836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject); + + +/***/ }), + +/***/ 37514: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) { + return false; + } + var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 32957: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_keysIn) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules +var _arrayLikeKeys = __webpack_require__(87668); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!(0,isObject/* default */.Z)(object)) { + return _nativeKeysIn(object); + } + var isProto = (0,_isPrototype/* default */.Z)(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 2855: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(25001); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(70044); +/* harmony import */ var _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(77657); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(81188); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17967); + + + + + + + + + + + + + + + +let idCache = {}; +const padding = 20; +const getGraphId = function(label) { + const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label); + if (foundEntry) { + return foundEntry[0]; + } +}; +const insertMarkers = function(elem) { + elem.append("defs").append("marker").attr("id", "extensionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", "extensionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); + elem.append("defs").append("marker").attr("id", "compositionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "compositionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "aggregationStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "aggregationEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "dependencyStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const draw = function(text, id, _version, diagObj) { + const conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().class; + idCache = {}; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering diagram " + text); + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true + }); + g.setGraph({ + isMultiGraph: true + }); + g.setDefaultEdgeLabel(function() { + return {}; + }); + const classes = diagObj.db.getClasses(); + const keys = Object.keys(classes); + for (const key of keys) { + const classDef = classes[key]; + const node = _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_7__.s.drawClass(diagram2, classDef, conf, diagObj); + idCache[node.id] = node; + g.setNode(node.id, node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Org height: " + node.height); + } + const relations = diagObj.db.getRelations(); + relations.forEach(function(relation) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.info( + "tjoho" + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation) + ); + g.setEdge( + getGraphId(relation.id1), + getGraphId(relation.id2), + { + relation + }, + relation.title || "DEFAULT" + ); + }); + const notes = diagObj.db.getNotes(); + notes.forEach(function(note) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`Adding note: ${JSON.stringify(note)}`); + const node = _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_7__.s.drawNote(diagram2, note, conf, diagObj); + idCache[node.id] = node; + g.setNode(node.id, node); + if (note.class && note.class in classes) { + g.setEdge( + note.id, + getGraphId(note.class), + { + relation: { + id1: note.id, + id2: note.class, + relation: { + type1: "none", + type2: "none", + lineType: 10 + } + } + }, + "DEFAULT" + ); + } + }); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(g); + g.nodes().forEach(function(v) { + if (v !== void 0 && g.node(v) !== void 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Node " + v + ": " + JSON.stringify(g.node(v))); + root.select("#" + (diagObj.db.lookUpDomId(v) || v)).attr( + "transform", + "translate(" + (g.node(v).x - g.node(v).width / 2) + "," + (g.node(v).y - g.node(v).height / 2) + " )" + ); + } + }); + g.edges().forEach(function(e) { + if (e !== void 0 && g.edge(e) !== void 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(g.edge(e))); + _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_7__.s.drawEdge(diagram2, g.edge(e), g.edge(e).relation, conf, diagObj); + } + }); + const svgBounds = diagram2.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_8__.k)(diagram2, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`viewBox ${vBox}`); + diagram2.attr("viewBox", vBox); +}; +const renderer = { + draw +}; +const diagram = { + parser: _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_9__.p, + db: _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_9__.d, + renderer, + styles: _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_9__.s, + init: (cnf) => { + if (!cnf.class) { + cnf.class = {}; + } + cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_16907e1b_js__WEBPACK_IMPORTED_MODULE_9__.d.clear(); + } +}; + +//# sourceMappingURL=classDiagram-634fc78b.js.map + + +/***/ }), + +/***/ 25001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "d": () => (/* binding */ db), +/* harmony export */ "p": () => (/* binding */ parser$1), +/* harmony export */ "s": () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(81188); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 7], $V2 = [1, 8], $V3 = [1, 9], $V4 = [1, 10], $V5 = [1, 13], $V6 = [1, 12], $V7 = [1, 16, 25], $V8 = [1, 20], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 48], $Vd = [1, 39], $Ve = [1, 37], $Vf = [1, 38], $Vg = [1, 44], $Vh = [1, 45], $Vi = [1, 40], $Vj = [1, 41], $Vk = [1, 42], $Vl = [1, 43], $Vm = [1, 49], $Vn = [1, 50], $Vo = [1, 51], $Vp = [1, 52], $Vq = [16, 25], $Vr = [1, 66], $Vs = [1, 67], $Vt = [1, 68], $Vu = [1, 69], $Vv = [1, 70], $Vw = [1, 71], $Vx = [1, 72], $Vy = [1, 82], $Vz = [16, 25, 28, 29, 36, 49, 50, 64, 65, 66, 67, 68, 69, 70, 75, 77], $VA = [16, 25, 28, 29, 34, 36, 49, 50, 55, 64, 65, 66, 67, 68, 69, 70, 75, 77, 92, 93, 94, 95], $VB = [5, 8, 9, 10, 11, 16, 19, 23, 25], $VC = [29, 92, 93, 94, 95], $VD = [29, 69, 70, 92, 93, 94, 95], $VE = [29, 64, 65, 66, 67, 68, 92, 93, 94, 95], $VF = [1, 96], $VG = [16, 25, 49, 50], $VH = [16, 25, 36]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statments": 5, "direction": 6, "directive": 7, "direction_tb": 8, "direction_bt": 9, "direction_rl": 10, "direction_lr": 11, "graphConfig": 12, "openDirective": 13, "typeDirective": 14, "closeDirective": 15, "NEWLINE": 16, ":": 17, "argDirective": 18, "open_directive": 19, "type_directive": 20, "arg_directive": 21, "close_directive": 22, "CLASS_DIAGRAM": 23, "statements": 24, "EOF": 25, "statement": 26, "classLabel": 27, "SQS": 28, "STR": 29, "SQE": 30, "className": 31, "alphaNumToken": 32, "classLiteralName": 33, "GENERICTYPE": 34, "relationStatement": 35, "LABEL": 36, "classStatement": 37, "methodStatement": 38, "annotationStatement": 39, "clickStatement": 40, "cssClassStatement": 41, "noteStatement": 42, "acc_title": 43, "acc_title_value": 44, "acc_descr": 45, "acc_descr_value": 46, "acc_descr_multiline_value": 47, "classIdentifier": 48, "STYLE_SEPARATOR": 49, "STRUCT_START": 50, "members": 51, "STRUCT_STOP": 52, "CLASS": 53, "ANNOTATION_START": 54, "ANNOTATION_END": 55, "MEMBER": 56, "SEPARATOR": 57, "relation": 58, "NOTE_FOR": 59, "noteText": 60, "NOTE": 61, "relationType": 62, "lineType": 63, "AGGREGATION": 64, "EXTENSION": 65, "COMPOSITION": 66, "DEPENDENCY": 67, "LOLLIPOP": 68, "LINE": 69, "DOTTED_LINE": 70, "CALLBACK": 71, "LINK": 72, "LINK_TARGET": 73, "CLICK": 74, "CALLBACK_NAME": 75, "CALLBACK_ARGS": 76, "HREF": 77, "CSSCLASS": 78, "commentToken": 79, "textToken": 80, "graphCodeTokens": 81, "textNoTagsToken": 82, "TAGSTART": 83, "TAGEND": 84, "==": 85, "--": 86, "PCT": 87, "DEFAULT": 88, "SPACE": 89, "MINUS": 90, "keywords": 91, "UNICODE_TEXT": 92, "NUM": 93, "ALPHA": 94, "BQUOTE_STR": 95, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "statments", 8: "direction_tb", 9: "direction_bt", 10: "direction_rl", 11: "direction_lr", 16: "NEWLINE", 17: ":", 19: "open_directive", 20: "type_directive", 21: "arg_directive", 22: "close_directive", 23: "CLASS_DIAGRAM", 25: "EOF", 28: "SQS", 29: "STR", 30: "SQE", 34: "GENERICTYPE", 36: "LABEL", 43: "acc_title", 44: "acc_title_value", 45: "acc_descr", 46: "acc_descr_value", 47: "acc_descr_multiline_value", 49: "STYLE_SEPARATOR", 50: "STRUCT_START", 52: "STRUCT_STOP", 53: "CLASS", 54: "ANNOTATION_START", 55: "ANNOTATION_END", 56: "MEMBER", 57: "SEPARATOR", 59: "NOTE_FOR", 61: "NOTE", 64: "AGGREGATION", 65: "EXTENSION", 66: "COMPOSITION", 67: "DEPENDENCY", 68: "LOLLIPOP", 69: "LINE", 70: "DOTTED_LINE", 71: "CALLBACK", 72: "LINK", 73: "LINK_TARGET", 74: "CLICK", 75: "CALLBACK_NAME", 76: "CALLBACK_ARGS", 77: "HREF", 78: "CSSCLASS", 81: "graphCodeTokens", 83: "TAGSTART", 84: "TAGEND", 85: "==", 86: "--", 87: "PCT", 88: "DEFAULT", 89: "SPACE", 90: "MINUS", 91: "keywords", 92: "UNICODE_TEXT", 93: "NUM", 94: "ALPHA", 95: "BQUOTE_STR" }, + productions_: [0, [3, 1], [3, 1], [3, 1], [3, 2], [6, 1], [6, 1], [6, 1], [6, 1], [4, 1], [7, 4], [7, 6], [13, 1], [14, 1], [18, 1], [15, 1], [12, 4], [24, 1], [24, 2], [24, 3], [27, 3], [31, 1], [31, 1], [31, 2], [31, 2], [31, 2], [26, 1], [26, 2], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 2], [26, 2], [26, 1], [37, 1], [37, 3], [37, 4], [37, 6], [48, 2], [48, 3], [39, 4], [51, 1], [51, 2], [38, 1], [38, 2], [38, 1], [38, 1], [35, 3], [35, 4], [35, 4], [35, 5], [42, 3], [42, 2], [58, 3], [58, 2], [58, 2], [58, 1], [62, 1], [62, 1], [62, 1], [62, 1], [62, 1], [63, 1], [63, 1], [40, 3], [40, 4], [40, 3], [40, 4], [40, 4], [40, 5], [40, 3], [40, 4], [40, 4], [40, 5], [40, 3], [40, 4], [40, 4], [40, 5], [41, 3], [79, 1], [79, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [82, 1], [82, 1], [82, 1], [82, 1], [32, 1], [32, 1], [32, 1], [33, 1], [60, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.setDirection("TB"); + break; + case 6: + yy.setDirection("BT"); + break; + case 7: + yy.setDirection("RL"); + break; + case 8: + yy.setDirection("LR"); + break; + case 12: + yy.parseDirective("%%{", "open_directive"); + break; + case 13: + yy.parseDirective($$[$0], "type_directive"); + break; + case 14: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 15: + yy.parseDirective("}%%", "close_directive", "class"); + break; + case 20: + this.$ = $$[$0 - 1]; + break; + case 21: + case 22: + this.$ = $$[$0]; + break; + case 23: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 24: + case 25: + this.$ = $$[$0 - 1] + "~" + $$[$0]; + break; + case 26: + yy.addRelation($$[$0]); + break; + case 27: + $$[$0 - 1].title = yy.cleanupLabel($$[$0]); + yy.addRelation($$[$0 - 1]); + break; + case 36: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 37: + case 38: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 40: + yy.setCssClass($$[$0 - 2], $$[$0]); + break; + case 41: + yy.addMembers($$[$0 - 3], $$[$0 - 1]); + break; + case 42: + yy.setCssClass($$[$0 - 5], $$[$0 - 3]); + yy.addMembers($$[$0 - 5], $$[$0 - 1]); + break; + case 43: + this.$ = $$[$0]; + yy.addClass($$[$0]); + break; + case 44: + this.$ = $$[$0 - 1]; + yy.addClass($$[$0 - 1]); + yy.setClassLabel($$[$0 - 1], $$[$0]); + break; + case 45: + yy.addAnnotation($$[$0], $$[$0 - 2]); + break; + case 46: + this.$ = [$$[$0]]; + break; + case 47: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 48: + break; + case 49: + yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); + break; + case 50: + break; + case 51: + break; + case 52: + this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; + break; + case 53: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; + break; + case 54: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; + break; + case 55: + this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; + break; + case 56: + yy.addNote($$[$0], $$[$0 - 1]); + break; + case 57: + yy.addNote($$[$0]); + break; + case 58: + this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 59: + this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 60: + this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; + break; + case 61: + this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; + break; + case 62: + this.$ = yy.relationType.AGGREGATION; + break; + case 63: + this.$ = yy.relationType.EXTENSION; + break; + case 64: + this.$ = yy.relationType.COMPOSITION; + break; + case 65: + this.$ = yy.relationType.DEPENDENCY; + break; + case 66: + this.$ = yy.relationType.LOLLIPOP; + break; + case 67: + this.$ = yy.lineType.LINE; + break; + case 68: + this.$ = yy.lineType.DOTTED_LINE; + break; + case 69: + case 75: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 70: + case 76: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 71: + case 79: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 72: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 73: + case 81: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 74: + case 82: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 3], $$[$0 - 1]); + break; + case 77: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 78: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 80: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 83: + yy.setCssClass($$[$0 - 1], $$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 6: 4, 7: 5, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 12: 6, 13: 11, 19: $V5, 23: $V6 }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 3: 14, 4: 2, 5: $V0, 6: 4, 7: 5, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 12: 6, 13: 11, 19: $V5, 23: $V6 }, { 1: [2, 9] }, o($V7, [2, 5]), o($V7, [2, 6]), o($V7, [2, 7]), o($V7, [2, 8]), { 14: 15, 20: [1, 16] }, { 16: [1, 17] }, { 20: [2, 12] }, { 1: [2, 4] }, { 15: 18, 17: [1, 19], 22: $V8 }, o([17, 22], [2, 13]), { 6: 31, 7: 30, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 13: 11, 19: $V5, 24: 21, 26: 22, 31: 35, 32: 46, 33: 47, 35: 23, 37: 24, 38: 25, 39: 26, 40: 27, 41: 28, 42: 29, 43: $V9, 45: $Va, 47: $Vb, 48: 36, 53: $Vc, 54: $Vd, 56: $Ve, 57: $Vf, 59: $Vg, 61: $Vh, 71: $Vi, 72: $Vj, 74: $Vk, 78: $Vl, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 16: [1, 53] }, { 18: 54, 21: [1, 55] }, { 16: [2, 15] }, { 25: [1, 56] }, { 16: [1, 57], 25: [2, 17] }, o($Vq, [2, 26], { 36: [1, 58] }), o($Vq, [2, 28]), o($Vq, [2, 29]), o($Vq, [2, 30]), o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vq, [2, 34]), o($Vq, [2, 35]), { 44: [1, 59] }, { 46: [1, 60] }, o($Vq, [2, 38]), o($Vq, [2, 48], { 58: 61, 62: 64, 63: 65, 29: [1, 62], 36: [1, 63], 64: $Vr, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv, 69: $Vw, 70: $Vx }), o($Vq, [2, 39], { 49: [1, 73], 50: [1, 74] }), o($Vq, [2, 50]), o($Vq, [2, 51]), { 32: 75, 92: $Vm, 93: $Vn, 94: $Vo }, { 31: 76, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 31: 77, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 31: 78, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 29: [1, 79] }, { 31: 80, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 29: $Vy, 60: 81 }, o($Vz, [2, 21], { 32: 46, 33: 47, 31: 83, 34: [1, 84], 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }), o($Vz, [2, 22], { 34: [1, 85] }), { 31: 86, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($VA, [2, 97]), o($VA, [2, 98]), o($VA, [2, 99]), o([16, 25, 28, 29, 34, 36, 49, 50, 64, 65, 66, 67, 68, 69, 70, 75, 77], [2, 100]), o($VB, [2, 10]), { 15: 87, 22: $V8 }, { 22: [2, 14] }, { 1: [2, 16] }, { 6: 31, 7: 30, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 13: 11, 19: $V5, 24: 88, 25: [2, 18], 26: 22, 31: 35, 32: 46, 33: 47, 35: 23, 37: 24, 38: 25, 39: 26, 40: 27, 41: 28, 42: 29, 43: $V9, 45: $Va, 47: $Vb, 48: 36, 53: $Vc, 54: $Vd, 56: $Ve, 57: $Vf, 59: $Vg, 61: $Vh, 71: $Vi, 72: $Vj, 74: $Vk, 78: $Vl, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($Vq, [2, 27]), o($Vq, [2, 36]), o($Vq, [2, 37]), { 29: [1, 90], 31: 89, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 58: 91, 62: 64, 63: 65, 64: $Vr, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv, 69: $Vw, 70: $Vx }, o($Vq, [2, 49]), { 63: 92, 69: $Vw, 70: $Vx }, o($VC, [2, 61], { 62: 93, 64: $Vr, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv }), o($VD, [2, 62]), o($VD, [2, 63]), o($VD, [2, 64]), o($VD, [2, 65]), o($VD, [2, 66]), o($VE, [2, 67]), o($VE, [2, 68]), { 32: 94, 92: $Vm, 93: $Vn, 94: $Vo }, { 51: 95, 56: $VF }, { 55: [1, 97] }, { 29: [1, 98] }, { 29: [1, 99] }, { 75: [1, 100], 77: [1, 101] }, { 32: 102, 92: $Vm, 93: $Vn, 94: $Vo }, { 29: $Vy, 60: 103 }, o($Vq, [2, 57]), o($Vq, [2, 101]), o($Vz, [2, 23]), o($Vz, [2, 24]), o($Vz, [2, 25]), o($VG, [2, 43], { 27: 104, 28: [1, 105] }), { 16: [1, 106] }, { 25: [2, 19] }, o($VH, [2, 52]), { 31: 107, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, { 29: [1, 109], 31: 108, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($VC, [2, 60], { 62: 110, 64: $Vr, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv }), o($VC, [2, 59]), o($Vq, [2, 40], { 50: [1, 111] }), { 52: [1, 112] }, { 51: 113, 52: [2, 46], 56: $VF }, { 31: 114, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($Vq, [2, 69], { 29: [1, 115] }), o($Vq, [2, 71], { 29: [1, 117], 73: [1, 116] }), o($Vq, [2, 75], { 29: [1, 118], 76: [1, 119] }), o($Vq, [2, 79], { 29: [1, 121], 73: [1, 120] }), o($Vq, [2, 83]), o($Vq, [2, 56]), o($VG, [2, 44]), { 29: [1, 122] }, o($VB, [2, 11]), o($VH, [2, 54]), o($VH, [2, 53]), { 31: 123, 32: 46, 33: 47, 92: $Vm, 93: $Vn, 94: $Vo, 95: $Vp }, o($VC, [2, 58]), { 51: 124, 56: $VF }, o($Vq, [2, 41]), { 52: [2, 47] }, o($Vq, [2, 45]), o($Vq, [2, 70]), o($Vq, [2, 72]), o($Vq, [2, 73], { 73: [1, 125] }), o($Vq, [2, 76]), o($Vq, [2, 77], { 29: [1, 126] }), o($Vq, [2, 80]), o($Vq, [2, 81], { 73: [1, 127] }), { 30: [1, 128] }, o($VH, [2, 55]), { 52: [1, 129] }, o($Vq, [2, 74]), o($Vq, [2, 78]), o($Vq, [2, 82]), o($VG, [2, 20]), o($Vq, [2, 42])], + defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 6: [2, 9], 13: [2, 12], 14: [2, 4], 20: [2, 15], 55: [2, 14], 56: [2, 16], 88: [2, 19], 113: [2, 47] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 19; + case 1: + return 8; + case 2: + return 9; + case 3: + return 10; + case 4: + return 11; + case 5: + this.begin("type_directive"); + return 20; + case 6: + this.popState(); + this.begin("arg_directive"); + return 17; + case 7: + this.popState(); + this.popState(); + return 22; + case 8: + return 21; + case 9: + break; + case 10: + break; + case 11: + this.begin("acc_title"); + return 43; + case 12: + this.popState(); + return "acc_title_value"; + case 13: + this.begin("acc_descr"); + return 45; + case 14: + this.popState(); + return "acc_descr_value"; + case 15: + this.begin("acc_descr_multiline"); + break; + case 16: + this.popState(); + break; + case 17: + return "acc_descr_multiline_value"; + case 18: + return 16; + case 19: + break; + case 20: + return 23; + case 21: + return 23; + case 22: + this.begin("struct"); + return 50; + case 23: + return "EDGE_STATE"; + case 24: + return "EOF_IN_STRUCT"; + case 25: + return "OPEN_IN_STRUCT"; + case 26: + this.popState(); + return 52; + case 27: + break; + case 28: + return "MEMBER"; + case 29: + return 53; + case 30: + return 78; + case 31: + return 71; + case 32: + return 72; + case 33: + return 74; + case 34: + return 59; + case 35: + return 61; + case 36: + return 54; + case 37: + return 55; + case 38: + this.begin("generic"); + break; + case 39: + this.popState(); + break; + case 40: + return "GENERICTYPE"; + case 41: + this.begin("string"); + break; + case 42: + this.popState(); + break; + case 43: + return "STR"; + case 44: + this.begin("bqstring"); + break; + case 45: + this.popState(); + break; + case 46: + return "BQUOTE_STR"; + case 47: + this.begin("href"); + break; + case 48: + this.popState(); + break; + case 49: + return 77; + case 50: + this.begin("callback_name"); + break; + case 51: + this.popState(); + break; + case 52: + this.popState(); + this.begin("callback_args"); + break; + case 53: + return 75; + case 54: + this.popState(); + break; + case 55: + return 76; + case 56: + return 73; + case 57: + return 73; + case 58: + return 73; + case 59: + return 73; + case 60: + return 65; + case 61: + return 65; + case 62: + return 67; + case 63: + return 67; + case 64: + return 66; + case 65: + return 64; + case 66: + return 68; + case 67: + return 69; + case 68: + return 70; + case 69: + return 36; + case 70: + return 49; + case 71: + return 90; + case 72: + return "DOT"; + case 73: + return "PLUS"; + case 74: + return 87; + case 75: + return "EQUALS"; + case 76: + return "EQUALS"; + case 77: + return 94; + case 78: + return 28; + case 79: + return 30; + case 80: + return "PUNCTUATION"; + case 81: + return 93; + case 82: + return 92; + case 83: + return 89; + case 84: + return 25; + } + }, + rules: [/^(?:%%\{)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:[{])/, /^(?:\[\*\])/, /^(?:$)/, /^(?:[{])/, /^(?:[}])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:class\b)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:[~])/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[`])/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:href[\s]+["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\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]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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-\u0C33\u0C35-\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\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\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\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\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])/, /^(?:\s)/, /^(?:$)/], + conditions: { "acc_descr_multiline": { "rules": [16, 17], "inclusive": false }, "acc_descr": { "rules": [14], "inclusive": false }, "acc_title": { "rules": [12], "inclusive": false }, "arg_directive": { "rules": [7, 8], "inclusive": false }, "type_directive": { "rules": [6, 7], "inclusive": false }, "open_directive": { "rules": [5], "inclusive": false }, "callback_args": { "rules": [54, 55], "inclusive": false }, "callback_name": { "rules": [51, 52, 53], "inclusive": false }, "href": { "rules": [48, 49], "inclusive": false }, "struct": { "rules": [23, 24, 25, 26, 27, 28], "inclusive": false }, "generic": { "rules": [39, 40], "inclusive": false }, "bqstring": { "rules": [45, 46], "inclusive": false }, "string": { "rules": [42, 43], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 41, 44, 47, 50, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "classId-"; +let relations = []; +let classes = {}; +let notes = []; +let classCounter = 0; +let functions = []; +const sanitizeText = (txt) => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()); +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.m.parseDirective(this, statement, context, type); +}; +const splitClassNameAndType = function(id) { + let genericType = ""; + let className = id; + if (id.indexOf("~") > 0) { + const split = id.split("~"); + className = sanitizeText(split[0]); + genericType = sanitizeText(split[1]); + } + return { className, type: genericType }; +}; +const setClassLabel = function(id, label) { + if (label) { + label = sanitizeText(label); + } + const { className } = splitClassNameAndType(id); + classes[className].label = label; +}; +const addClass = function(id) { + const classId = splitClassNameAndType(id); + if (classes[classId.className] !== void 0) { + return; + } + classes[classId.className] = { + id: classId.className, + type: classId.type, + label: classId.className, + cssClasses: [], + methods: [], + members: [], + annotations: [], + domId: MERMAID_DOM_ID_PREFIX + classId.className + "-" + classCounter + }; + classCounter++; +}; +const lookUpDomId = function(id) { + if (id in classes) { + return classes[id].domId; + } + throw new Error("Class not found: " + id); +}; +const clear = function() { + relations = []; + classes = {}; + notes = []; + functions = []; + functions.push(setupToolTips); + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.y)(); +}; +const getClass = function(id) { + return classes[id]; +}; +const getClasses = function() { + return classes; +}; +const getRelations = function() { + return relations; +}; +const getNotes = function() { + return notes; +}; +const addRelation = function(relation) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); + addClass(relation.id1); + addClass(relation.id2); + relation.id1 = splitClassNameAndType(relation.id1).className; + relation.id2 = splitClassNameAndType(relation.id2).className; + relation.relationTitle1 = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + relation.relationTitle1.trim(), + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)() + ); + relation.relationTitle2 = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + relation.relationTitle2.trim(), + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)() + ); + relations.push(relation); +}; +const addAnnotation = function(className, annotation) { + const validatedClassName = splitClassNameAndType(className).className; + classes[validatedClassName].annotations.push(annotation); +}; +const addMember = function(className, member) { + const validatedClassName = splitClassNameAndType(className).className; + const theClass = classes[validatedClassName]; + if (typeof member === "string") { + const memberString = member.trim(); + if (memberString.startsWith("<<") && memberString.endsWith(">>")) { + theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); + } else if (memberString.indexOf(")") > 0) { + theClass.methods.push(sanitizeText(memberString)); + } else if (memberString) { + theClass.members.push(sanitizeText(memberString)); + } + } +}; +const addMembers = function(className, members) { + if (Array.isArray(members)) { + members.reverse(); + members.forEach((member) => addMember(className, member)); + } +}; +const addNote = function(text, className) { + const note = { + id: `note${notes.length}`, + class: className, + text + }; + notes.push(note); +}; +const cleanupLabel = function(label) { + if (label.startsWith(":")) { + label = label.substring(1); + } + return sanitizeText(label.trim()); +}; +const setCssClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].cssClasses.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + classes[id].tooltip = sanitizeText(tooltip); + } + }); +}; +const getTooltip = function(id) { + return classes[id].tooltip; +}; +const setLink = function(ids, linkStr, target) { + const config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].link = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.formatUrl(linkStr, config); + if (config.securityLevel === "sandbox") { + classes[id].linkTarget = "_top"; + } else if (typeof target === "string") { + classes[id].linkTarget = sanitizeText(target); + } else { + classes[id].linkTarget = "_blank"; + } + } + }); + setCssClass(ids, "clickable"); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFunc(id, functionName, functionArgs); + classes[id].haveCallback = true; + }); + setCssClass(ids, "clickable"); +}; +const setClickFunc = function(domId, functionName, functionArgs) { + const config = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)(); + if (config.securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + const id = domId; + if (classes[id] !== void 0) { + const elemId = lookUpDomId(id); + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(elemId); + } + functions.push(function() { + const elem = document.querySelector(`[id="${elemId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_3__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const bindFunctions = function(element) { + functions.forEach(function(fun) { + fun(element); + }); +}; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + LOLLIPOP: 4 +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +functions.push(setupToolTips); +let direction = "TB"; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const db = { + parseDirective, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.p, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.v, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().class, + addClass, + bindFunctions, + clear, + getClass, + getClasses, + getNotes, + addAnnotation, + addNote, + getRelations, + addRelation, + getDirection, + setDirection, + addMember, + addMembers, + cleanupLabel, + lineType, + relationType, + setClickEvent, + setCssClass, + setLink, + getTooltip, + setTooltip, + lookUpDomId, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.x, + setClassLabel +}; +const getStyles = (options) => `g.classGroup text { + fill: ${options.nodeBorder}; + fill: ${options.classText}; + stroke: none; + font-family: ${options.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${options.classText}; +} +.edgeLabel .label rect { + fill: ${options.mainBkg}; +} +.label text { + fill: ${options.classText}; +} +.edgeLabel .label span { + background: ${options.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${options.nodeBorder}; + stroke: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.classGroup line { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${options.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${options.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + +//# sourceMappingURL=styles-16907e1b.js.map + + +/***/ }), + +/***/ 77657: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "p": () => (/* binding */ parseMember), +/* harmony export */ "s": () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); + + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = classDef.id; + if (classDef.type !== void 0 && classDef.type !== "") { + classTitleString += "<" + classDef.type + ">"; + } + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const drawNote = function(elem, note, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + const fieldRegEx = /^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/; + const methodRegEx = /^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/; + let fieldMatch = text.match(fieldRegEx); + let methodMatch = text.match(methodRegEx); + if (fieldMatch && !methodMatch) { + return buildFieldDisplay(fieldMatch); + } else if (methodMatch) { + return buildMethodDisplay(methodMatch); + } else { + return buildLegacyDisplay(text); + } +}; +const buildFieldDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let fieldType = parsedText[2] ? parsedText[2].trim() : ""; + let genericType = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let fieldName = parsedText[4] ? parsedText[4].trim() : ""; + let classifier = parsedText[5] ? parsedText[5].trim() : ""; + displayText = visibility + fieldType + genericType + " " + fieldName; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildMethodDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let methodName = parsedText[2] ? parsedText[2].trim() : ""; + let parameters = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let classifier = parsedText[4] ? parsedText[4].trim() : ""; + let returnType = parsedText[5] ? " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[5]).trim() : ""; + displayText = visibility + methodName + "(" + parameters + ")" + returnType; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildLegacyDisplay = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let methodStart = text.indexOf("("); + let methodEnd = text.indexOf(")"); + if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) { + let visibility = ""; + let methodName = ""; + let firstChar = text.substring(0, 1); + if (firstChar.match(/\w/)) { + methodName = text.substring(0, methodStart).trim(); + } else { + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + methodName = text.substring(1, methodStart).trim(); + } + const parameters = text.substring(methodStart + 1, methodEnd); + text.substring(methodEnd + 1, 1); + cssStyle = parseClassifier(text.substring(methodEnd + 1, methodEnd + 2)); + displayText = visibility + methodName + "(" + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + returnType = text.substring(methodEnd + 2).trim(); + if (returnType !== "") { + returnType = " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(returnType); + displayText += returnType; + } + } + } else { + displayText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + drawClass, + drawEdge, + drawNote, + parseMember +}; + +//# sourceMappingURL=svgDraw-2526cba0.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/86262f09.c7931357.js b/assets/js/86262f09.c7931357.js new file mode 100644 index 0000000000..c21800fb15 --- /dev/null +++ b/assets/js/86262f09.c7931357.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8318],{1155:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));a(5657);const l={},o="EXPRESSION",s={unversionedId:"about/references/keywords/EXPRESSION",id:"about/references/keywords/EXPRESSION",title:"EXPRESSION",description:"VARIABLES /",source:"@site/docs/about/references/keywords/EXPRESSION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EXPRESSION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},next:{title:"EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION"}},i={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:c},p="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"expression"},"EXPRESSION"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EXPRESSION"},"EXPRESSION")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"No"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"VARIABLES")),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"None"))))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Expression for a ",(0,n.kt)("inlineCode",{parentName:"p"},"variable<VARIABLES>")," using ",(0,n.kt)("inlineCode",{parentName:"p"},"EXPRESSIONS")),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"EXPRESSION: <expression>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("p",null,"With time series reference"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"EXPRESSION: time_series_ref_1;vector_name_1 {+} time_series_ref_2;vector_name_2 {*} (time_series_ref_3;vector_name_3 > 0)\n")),(0,n.kt)("p",null,"With variable reference"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"EXPRESSION: $var.variable_name1 {+} $var.variable_name2\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/880bbd08.30ac2c51.js b/assets/js/880bbd08.30ac2c51.js new file mode 100644 index 0000000000..c16930b851 --- /dev/null +++ b/assets/js/880bbd08.30ac2c51.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3315],{6475:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>m,frontMatter:()=>o,metadata:()=>p,toc:()=>l});var n=r(7462),s=(r(7294),r(3905));r(5657);const o={},a="UNITS",p={unversionedId:"about/references/keywords/UNITS",id:"about/references/keywords/UNITS",title:"UNITS",description:"Description",source:"@site/docs/about/references/keywords/UNITS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/UNITS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE"},next:{title:"UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Pumps",id:"pumps",level:3},{value:"Compressors",id:"compressors",level:3},{value:"Example",id:"example",level:2},{value:"Pumps",id:"pumps-1",level:3},{value:"Compressors",id:"compressors-1",level:3}],c={toc:l},u="wrapper";function m(e){let{components:t,...r}=e;return(0,s.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"units"},"UNITS"),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"UNITS")," is a keyword that can be specified for ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},"PUMP")," and ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"COMPRESSOR CHARTS"),". This is a requirement and ",(0,s.kt)("strong",{parentName:"p"},"must")," be specified."),(0,s.kt)("p",null,"For pumps this must be specified in ",(0,s.kt)("inlineCode",{parentName:"p"},"FACILITY_INPUTS"),", whilst for compressors it must be within ",(0,s.kt)("inlineCode",{parentName:"p"},"MODELS"),"."),(0,s.kt)("h2",{id:"format"},"Format"),(0,s.kt)("h3",{id:"pumps"},"Pumps"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: <pump chart name>\n ...\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>\n")),(0,s.kt)("h3",{id:"compressors"},"Compressors"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of chart, for reference>\n ...\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n ....\n")),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("h3",{id:"pumps-1"},"Pumps"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: single_speed_pump\n TYPE: PUMP_CHART_SINGLE_SPEED\n ...\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n")),(0,s.kt)("h3",{id:"compressors-1"},"Compressors"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n ...\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8961bfac.129eb342.js b/assets/js/8961bfac.129eb342.js new file mode 100644 index 0000000000..c30bb40409 --- /dev/null +++ b/assets/js/8961bfac.129eb342.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9128],{4649:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>k,frontMatter:()=>m,metadata:()=>r,toc:()=>i});var n=t(7462),s=(t(7294),t(3905));t(5657);const m={sidebar_position:3,description:"eCalc EXPRESSIONS"},p="Expressions",r={unversionedId:"about/modelling/setup/file_format_and_syntax/expressions",id:"about/modelling/setup/file_format_and_syntax/expressions",title:"Expressions",description:"eCalc EXPRESSIONS",source:"@site/docs/about/modelling/setup/file_format_and_syntax/expressions.md",sourceDirName:"about/modelling/setup/file_format_and_syntax",slug:"/about/modelling/setup/file_format_and_syntax/expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/file_format_and_syntax/expressions.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"eCalc EXPRESSIONS"},sidebar:"about",previous:{title:"File format and syntax",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"},next:{title:"Time series",permalink:"/ecalc/docs/about/modelling/setup/time_series"}},l={},i=[{value:"Available operators",id:"available-operators",level:2},{value:"Examples",id:"examples",level:2},{value:"Combining data from different reservoir inputs",id:"combining-data-from-different-reservoir-inputs",level:3},{value:"Model of additional rate",id:"model-of-additional-rate",level:3}],N={toc:i},o="wrapper";function k(a){let{components:e,...t}=a;return(0,s.kt)(o,(0,n.Z)({},N,t,{components:e,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"expressions"},"Expressions"),(0,s.kt)("p",null,"The variables needed in the energy functions for the variable consumers, may not always be directly found in the\nreservoir inputs. For example, there may be two group rates that should be added to be\nconsistent with the net rate through a compressor system. Or, it may be that a pressure defined in a network node is\nnot equal to the pressure at the inlet/outlet of a compressor system and some delta pressure must be added."),(0,s.kt)("p",null,"To avoid forcing the users to define new variables in the simulation files/CSV data and also keep the data in the\nconsumer\u2019s energy function consistent, the calculator supports expressions to define variables (and conditions in the\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONDITIONS"},"CONDITIONS"),"."),(0,s.kt)("admonition",{type:"warning"},(0,s.kt)("p",{parentName:"admonition"},"When creating new variables from CSV files make sure to choose the right interpolation type!\nSee ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE")," for more information.")),(0,s.kt)("h2",{id:"available-operators"},"Available operators"),(0,s.kt)("p",null,"As reservoir simulation vectors (and also CSV headers) may include mathematical operators\nlike ",(0,s.kt)("inlineCode",{parentName:"p"},"+"),", ",(0,s.kt)("inlineCode",{parentName:"p"},"-")," in their names, the operators must be surrounded by curly brackets, ",(0,s.kt)("inlineCode",{parentName:"p"},"{}"),",\nin the expressions. Logical operators (",(0,s.kt)("inlineCode",{parentName:"p"},">"),", ",(0,s.kt)("inlineCode",{parentName:"p"},">="),", ",(0,s.kt)("inlineCode",{parentName:"p"},"<"),", ",(0,s.kt)("inlineCode",{parentName:"p"},"<="),", ",(0,s.kt)("inlineCode",{parentName:"p"},"=="),", ",(0,s.kt)("inlineCode",{parentName:"p"},"!="),")\nevaluates to ",(0,s.kt)("inlineCode",{parentName:"p"},"0")," or ",(0,s.kt)("inlineCode",{parentName:"p"},"1"),"."),(0,s.kt)("p",null,"The following operators are supported:"),(0,s.kt)("table",null,(0,s.kt)("thead",{parentName:"table"},(0,s.kt)("tr",{parentName:"thead"},(0,s.kt)("th",{parentName:"tr",align:null},"Operator"),(0,s.kt)("th",{parentName:"tr",align:null},"Description"),(0,s.kt)("th",{parentName:"tr",align:null},"Example"))),(0,s.kt)("tbody",{parentName:"table"},(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"{+}")),(0,s.kt)("td",{parentName:"tr",align:null},"Addition"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"2 {+} 1"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"{-}")),(0,s.kt)("td",{parentName:"tr",align:null},"Subtraction"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {-} 10"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"{*}")),(0,s.kt)("td",{parentName:"tr",align:null},"Multiplication"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {*} 2"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"{/}")),(0,s.kt)("td",{parentName:"tr",align:null},"Division"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {/} 2"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"{^}")),(0,s.kt)("td",{parentName:"tr",align:null},"Power"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {^} 2"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"( )")),(0,s.kt)("td",{parentName:"tr",align:null},"Parentheses"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"( SIM;GAS {+} 2 ) {/} 2"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"<")),(0,s.kt)("td",{parentName:"tr",align:null},"Less than"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {+} (SIM1;OIL < 150) {*} 1000000"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"<=")),(0,s.kt)("td",{parentName:"tr",align:null},"Less than or equal"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {+} (SIM1;OIL <= 150) {*} 1000000"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},">")),(0,s.kt)("td",{parentName:"tr",align:null},"Greater than"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {+} (SIM1;OIL > 150) {*} 1000000"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},">=")),(0,s.kt)("td",{parentName:"tr",align:null},"Greater than or equal"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {+} (SIM1;OIL >= 150) {*} 1000000"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"==")),(0,s.kt)("td",{parentName:"tr",align:null},"Equal"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {+} (SIM;FLAG == 1) {*} 1000000"))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"!=")),(0,s.kt)("td",{parentName:"tr",align:null},"Not equal"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("inlineCode",{parentName:"td"},"SIM;GAS {-} (SIM;FLAG != 1) {*} 1000000"))))),(0,s.kt)("h2",{id:"examples"},"Examples"),(0,s.kt)("h3",{id:"combining-data-from-different-reservoir-inputs"},"Combining data from different reservoir inputs"),(0,s.kt)("p",null,"The rate through a gas injection compressor is the sum of injection rate for the field plus\nsome additional injection rate for a tie-in (whose data is specified in a CSV file with\nkey ",(0,s.kt)("inlineCode",{parentName:"p"},"SIM2"),"):"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"VARIABLES:\n total_rate_through_compressor:\n VALUE: SIM1;GAS_INJ {+} SIM2;GAS_INJ\n")),(0,s.kt)("h3",{id:"model-of-additional-rate"},"Model of additional rate"),(0,s.kt)("p",null,"The rate through a compressor is the produced rate plus some additional term. This term ",(0,s.kt)("em",{parentName:"p"},"Q")," is a function of pressures ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"P"),(0,s.kt)("mn",{parentName:"msub"},"1"))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P_{1}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,s.kt)("span",{parentName:"span"}))))))))))," and ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"P"),(0,s.kt)("mn",{parentName:"msub"},"2"))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P_{2}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,s.kt)("span",{parentName:"span"})))))))))),","),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"Q"),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"25000"),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("msqrt",{parentName:"mrow"},(0,s.kt)("mrow",{parentName:"msqrt"},(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"P"),(0,s.kt)("mn",{parentName:"msub"},"1")),(0,s.kt)("mo",{parentName:"mrow"},"\u22c5"),(0,s.kt)("mrow",{parentName:"mrow"},(0,s.kt)("mo",{parentName:"mrow",fence:"true"},"("),(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"P"),(0,s.kt)("mn",{parentName:"msub"},"2")),(0,s.kt)("mo",{parentName:"mrow"},"\u2212"),(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"P"),(0,s.kt)("mn",{parentName:"msub"},"1")),(0,s.kt)("mo",{parentName:"mrow",fence:"true"},")"))))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"Q = 25000 \\cdot \\sqrt{P_{1} \\cdot \\left( P_{2} - P_{1} \\right)}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"25000"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1.24em",verticalAlign:"-0.2561em"}}),(0,s.kt)("span",{parentName:"span",className:"mord sqrt"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.9839em"}},(0,s.kt)("span",{parentName:"span",className:"svg-align",style:{top:"-3.2em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.2em"}}),(0,s.kt)("span",{parentName:"span",className:"mord",style:{paddingLeft:"1em"}},(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,s.kt)("span",{parentName:"span"})))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u22c5"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"minner"},(0,s.kt)("span",{parentName:"span",className:"mopen delimcenter",style:{top:"0em"}},"("),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,s.kt)("span",{parentName:"span"})))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,s.kt)("span",{parentName:"span"})))))),(0,s.kt)("span",{parentName:"span",className:"mclose delimcenter",style:{top:"0em"}},")")))),(0,s.kt)("span",{parentName:"span",style:{top:"-2.9439em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3.2em"}}),(0,s.kt)("span",{parentName:"span",className:"hide-tail",style:{minWidth:"1.02em",height:"1.28em"}},(0,s.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"400em",height:"1.28em",viewBox:"0 0 400000 1296",preserveAspectRatio:"xMinYMin slice"},(0,s.kt)("path",{parentName:"svg",d:"M263,681c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl0 -0\nc4.7,-7.3,11,-11,19,-11\nH40000v40H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM1001 80h400000v40h-400000z"}))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2561em"}},(0,s.kt)("span",{parentName:"span"})))))))))),(0,s.kt)("p",null,"The addition is only added when the reservoir gas rate is positive."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"VARIABLES:\n rate:\n VALUE: SIM;GAS_PROD {+} ( SIM;GAS_PROD > 0 ) {*} 25000 {*} ( SIM;P1 {*} ( SIM;P2 {-} SIM;P1 ) ) {^} 0.5\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/899.26888d9b.js b/assets/js/899.26888d9b.js new file mode 100644 index 0000000000..3dcd826eb0 --- /dev/null +++ b/assets/js/899.26888d9b.js @@ -0,0 +1,3171 @@ +"use strict"; +exports.id = 899; +exports.ids = [899]; +exports.modules = { + +/***/ 52899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(43047); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(81188); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 19], $V8 = [1, 21], $V9 = [1, 22], $Va = [1, 23], $Vb = [1, 29], $Vc = [1, 30], $Vd = [1, 31], $Ve = [1, 32], $Vf = [1, 33], $Vg = [1, 34], $Vh = [1, 35], $Vi = [1, 36], $Vj = [1, 37], $Vk = [1, 38], $Vl = [1, 39], $Vm = [1, 40], $Vn = [1, 42], $Vo = [1, 43], $Vp = [1, 45], $Vq = [1, 46], $Vr = [1, 47], $Vs = [1, 48], $Vt = [1, 49], $Vu = [1, 50], $Vv = [1, 53], $Vw = [1, 4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 51, 52, 53, 54, 56, 57, 62, 63, 64, 65, 73, 83], $Vx = [4, 5, 21, 54, 56], $Vy = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 54, 56, 57, 62, 63, 64, 65, 73, 83], $Vz = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 53, 54, 56, 57, 62, 63, 64, 65, 73, 83], $VA = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 52, 54, 56, 57, 62, 63, 64, 65, 73, 83], $VB = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 51, 54, 56, 57, 62, 63, 64, 65, 73, 83], $VC = [71, 72, 73], $VD = [1, 125], $VE = [1, 4, 5, 7, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 51, 52, 53, 54, 56, 57, 62, 63, 64, 65, 73, 83]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "directive": 6, "SD": 7, "document": 8, "line": 9, "statement": 10, "box_section": 11, "box_line": 12, "participant_statement": 13, "openDirective": 14, "typeDirective": 15, "closeDirective": 16, ":": 17, "argDirective": 18, "box": 19, "restOfLine": 20, "end": 21, "signal": 22, "autonumber": 23, "NUM": 24, "off": 25, "activate": 26, "actor": 27, "deactivate": 28, "note_statement": 29, "links_statement": 30, "link_statement": 31, "properties_statement": 32, "details_statement": 33, "title": 34, "legacy_title": 35, "acc_title": 36, "acc_title_value": 37, "acc_descr": 38, "acc_descr_value": 39, "acc_descr_multiline_value": 40, "loop": 41, "rect": 42, "opt": 43, "alt": 44, "else_sections": 45, "par": 46, "par_sections": 47, "critical": 48, "option_sections": 49, "break": 50, "option": 51, "and": 52, "else": 53, "participant": 54, "AS": 55, "participant_actor": 56, "note": 57, "placement": 58, "text2": 59, "over": 60, "actor_pair": 61, "links": 62, "link": 63, "properties": 64, "details": 65, "spaceList": 66, ",": 67, "left_of": 68, "right_of": 69, "signaltype": 70, "+": 71, "-": 72, "ACTOR": 73, "SOLID_OPEN_ARROW": 74, "DOTTED_OPEN_ARROW": 75, "SOLID_ARROW": 76, "DOTTED_ARROW": 77, "SOLID_CROSS": 78, "DOTTED_CROSS": 79, "SOLID_POINT": 80, "DOTTED_POINT": 81, "TXT": 82, "open_directive": 83, "type_directive": 84, "arg_directive": 85, "close_directive": 86, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 7: "SD", 17: ":", 19: "box", 20: "restOfLine", 21: "end", 23: "autonumber", 24: "NUM", 25: "off", 26: "activate", 28: "deactivate", 34: "title", 35: "legacy_title", 36: "acc_title", 37: "acc_title_value", 38: "acc_descr", 39: "acc_descr_value", 40: "acc_descr_multiline_value", 41: "loop", 42: "rect", 43: "opt", 44: "alt", 46: "par", 48: "critical", 50: "break", 51: "option", 52: "and", 53: "else", 54: "participant", 55: "AS", 56: "participant_actor", 57: "note", 60: "over", 62: "links", 63: "link", 64: "properties", 65: "details", 67: ",", 68: "left_of", 69: "right_of", 71: "+", 72: "-", 73: "ACTOR", 74: "SOLID_OPEN_ARROW", 75: "DOTTED_OPEN_ARROW", 76: "SOLID_ARROW", 77: "DOTTED_ARROW", 78: "SOLID_CROSS", 79: "DOTTED_CROSS", 80: "SOLID_POINT", 81: "DOTTED_POINT", 82: "TXT", 83: "open_directive", 84: "type_directive", 85: "arg_directive", 86: "close_directive" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [11, 0], [11, 2], [12, 2], [12, 1], [12, 1], [6, 4], [6, 6], [10, 1], [10, 4], [10, 2], [10, 4], [10, 3], [10, 3], [10, 2], [10, 3], [10, 3], [10, 2], [10, 2], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 1], [49, 1], [49, 4], [47, 1], [47, 4], [45, 1], [45, 4], [13, 5], [13, 3], [13, 5], [13, 3], [29, 4], [29, 4], [30, 3], [31, 3], [32, 3], [33, 3], [66, 2], [66, 1], [61, 3], [61, 1], [58, 1], [58, 1], [22, 5], [22, 5], [22, 4], [27, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [59, 1], [14, 1], [15, 1], [18, 1], [16, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.apply($$[$0]); + return $$[$0]; + case 5: + case 10: + this.$ = []; + break; + case 6: + case 11: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 7: + case 8: + case 12: + case 13: + this.$ = $$[$0]; + break; + case 9: + case 14: + this.$ = []; + break; + case 18: + $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) }); + $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] }); + this.$ = $$[$0 - 1]; + break; + case 20: + this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 21: + this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 22: + this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 23: + this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 24: + this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] }; + break; + case 25: + this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1] }; + break; + case 31: + yy.setDiagramTitle($$[$0].substring(6)); + this.$ = $$[$0].substring(6); + break; + case 32: + yy.setDiagramTitle($$[$0].substring(7)); + this.$ = $$[$0].substring(7); + break; + case 33: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 34: + case 35: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 36: + $$[$0 - 1].unshift({ type: "loopStart", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START }); + $$[$0 - 1].push({ type: "loopEnd", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END }); + this.$ = $$[$0 - 1]; + break; + case 37: + $$[$0 - 1].unshift({ type: "rectStart", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START }); + $$[$0 - 1].push({ type: "rectEnd", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END }); + this.$ = $$[$0 - 1]; + break; + case 38: + $$[$0 - 1].unshift({ type: "optStart", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START }); + $$[$0 - 1].push({ type: "optEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END }); + this.$ = $$[$0 - 1]; + break; + case 39: + $$[$0 - 1].unshift({ type: "altStart", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START }); + $$[$0 - 1].push({ type: "altEnd", signalType: yy.LINETYPE.ALT_END }); + this.$ = $$[$0 - 1]; + break; + case 40: + $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START }); + $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); + this.$ = $$[$0 - 1]; + break; + case 41: + $$[$0 - 1].unshift({ type: "criticalStart", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START }); + $$[$0 - 1].push({ type: "criticalEnd", signalType: yy.LINETYPE.CRITICAL_END }); + this.$ = $$[$0 - 1]; + break; + case 42: + $$[$0 - 1].unshift({ type: "breakStart", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START }); + $$[$0 - 1].push({ type: "breakEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END }); + this.$ = $$[$0 - 1]; + break; + case 45: + this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]); + break; + case 47: + this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]); + break; + case 49: + this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]); + break; + case 50: + $$[$0 - 3].type = "addParticipant"; + $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); + this.$ = $$[$0 - 3]; + break; + case 51: + $$[$0 - 1].type = "addParticipant"; + this.$ = $$[$0 - 1]; + break; + case 52: + $$[$0 - 3].type = "addActor"; + $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); + this.$ = $$[$0 - 3]; + break; + case 53: + $$[$0 - 1].type = "addActor"; + this.$ = $$[$0 - 1]; + break; + case 54: + this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 55: + $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2); + $$[$0 - 2][0] = $$[$0 - 2][0].actor; + $$[$0 - 2][1] = $$[$0 - 2][1].actor; + this.$ = [$$[$0 - 1], { type: "addNote", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }]; + break; + case 56: + this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 57: + this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 58: + this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 59: + this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 62: + this.$ = [$$[$0 - 2], $$[$0]]; + break; + case 63: + this.$ = $$[$0]; + break; + case 64: + this.$ = yy.PLACEMENT.LEFTOF; + break; + case 65: + this.$ = yy.PLACEMENT.RIGHTOF; + break; + case 66: + this.$ = [ + $$[$0 - 4], + $$[$0 - 1], + { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] }, + { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] } + ]; + break; + case 67: + this.$ = [ + $$[$0 - 4], + $$[$0 - 1], + { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] }, + { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4] } + ]; + break; + case 68: + this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }]; + break; + case 69: + this.$ = { type: "addParticipant", actor: $$[$0] }; + break; + case 70: + this.$ = yy.LINETYPE.SOLID_OPEN; + break; + case 71: + this.$ = yy.LINETYPE.DOTTED_OPEN; + break; + case 72: + this.$ = yy.LINETYPE.SOLID; + break; + case 73: + this.$ = yy.LINETYPE.DOTTED; + break; + case 74: + this.$ = yy.LINETYPE.SOLID_CROSS; + break; + case 75: + this.$ = yy.LINETYPE.DOTTED_CROSS; + break; + case 76: + this.$ = yy.LINETYPE.SOLID_POINT; + break; + case 77: + this.$ = yy.LINETYPE.DOTTED_POINT; + break; + case 78: + this.$ = yy.parseMessage($$[$0].trim().substring(1)); + break; + case 79: + yy.parseDirective("%%{", "open_directive"); + break; + case 80: + yy.parseDirective($$[$0], "type_directive"); + break; + case 81: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 82: + yy.parseDirective("}%%", "close_directive", "sequence"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 83: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 83: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 83: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 83: $V3 }, o([1, 4, 5, 19, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 54, 56, 57, 62, 63, 64, 65, 73, 83], $V4, { 8: 11 }), { 15: 12, 84: [1, 13] }, { 84: [2, 79] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 16: 51, 17: [1, 52], 86: $Vv }, o([17, 86], [2, 80]), o($Vw, [2, 6]), { 6: 41, 10: 54, 13: 18, 14: 6, 19: $V7, 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, o($Vw, [2, 8]), o($Vw, [2, 9]), o($Vw, [2, 17]), { 20: [1, 55] }, { 5: [1, 56] }, { 5: [1, 59], 24: [1, 57], 25: [1, 58] }, { 27: 60, 73: $Vu }, { 27: 61, 73: $Vu }, { 5: [1, 62] }, { 5: [1, 63] }, { 5: [1, 64] }, { 5: [1, 65] }, { 5: [1, 66] }, o($Vw, [2, 31]), o($Vw, [2, 32]), { 37: [1, 67] }, { 39: [1, 68] }, o($Vw, [2, 35]), { 20: [1, 69] }, { 20: [1, 70] }, { 20: [1, 71] }, { 20: [1, 72] }, { 20: [1, 73] }, { 20: [1, 74] }, { 20: [1, 75] }, o($Vw, [2, 43]), { 27: 76, 73: $Vu }, { 27: 77, 73: $Vu }, { 70: 78, 74: [1, 79], 75: [1, 80], 76: [1, 81], 77: [1, 82], 78: [1, 83], 79: [1, 84], 80: [1, 85], 81: [1, 86] }, { 58: 87, 60: [1, 88], 68: [1, 89], 69: [1, 90] }, { 27: 91, 73: $Vu }, { 27: 92, 73: $Vu }, { 27: 93, 73: $Vu }, { 27: 94, 73: $Vu }, o([5, 55, 67, 74, 75, 76, 77, 78, 79, 80, 81, 82], [2, 69]), { 5: [1, 95] }, { 18: 96, 85: [1, 97] }, { 5: [2, 82] }, o($Vw, [2, 7]), o($Vx, [2, 10], { 11: 98 }), o($Vw, [2, 19]), { 5: [1, 100], 24: [1, 99] }, { 5: [1, 101] }, o($Vw, [2, 23]), { 5: [1, 102] }, { 5: [1, 103] }, o($Vw, [2, 26]), o($Vw, [2, 27]), o($Vw, [2, 28]), o($Vw, [2, 29]), o($Vw, [2, 30]), o($Vw, [2, 33]), o($Vw, [2, 34]), o($Vy, $V4, { 8: 104 }), o($Vy, $V4, { 8: 105 }), o($Vy, $V4, { 8: 106 }), o($Vz, $V4, { 45: 107, 8: 108 }), o($VA, $V4, { 47: 109, 8: 110 }), o($VB, $V4, { 49: 111, 8: 112 }), o($Vy, $V4, { 8: 113 }), { 5: [1, 115], 55: [1, 114] }, { 5: [1, 117], 55: [1, 116] }, { 27: 120, 71: [1, 118], 72: [1, 119], 73: $Vu }, o($VC, [2, 70]), o($VC, [2, 71]), o($VC, [2, 72]), o($VC, [2, 73]), o($VC, [2, 74]), o($VC, [2, 75]), o($VC, [2, 76]), o($VC, [2, 77]), { 27: 121, 73: $Vu }, { 27: 123, 61: 122, 73: $Vu }, { 73: [2, 64] }, { 73: [2, 65] }, { 59: 124, 82: $VD }, { 59: 126, 82: $VD }, { 59: 127, 82: $VD }, { 59: 128, 82: $VD }, o($VE, [2, 15]), { 16: 129, 86: $Vv }, { 86: [2, 81] }, { 4: [1, 132], 5: [1, 134], 12: 131, 13: 133, 21: [1, 130], 54: $Vn, 56: $Vo }, { 5: [1, 135] }, o($Vw, [2, 21]), o($Vw, [2, 22]), o($Vw, [2, 24]), o($Vw, [2, 25]), { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 136], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 137], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 138], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 21: [1, 139] }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 48], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 53: [1, 140], 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 21: [1, 141] }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 46], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 52: [1, 142], 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 21: [1, 143] }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 44], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 51: [1, 144], 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 145], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 20: [1, 146] }, o($Vw, [2, 51]), { 20: [1, 147] }, o($Vw, [2, 53]), { 27: 148, 73: $Vu }, { 27: 149, 73: $Vu }, { 59: 150, 82: $VD }, { 59: 151, 82: $VD }, { 59: 152, 82: $VD }, { 67: [1, 153], 82: [2, 63] }, { 5: [2, 56] }, { 5: [2, 78] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: [2, 59] }, { 5: [1, 154] }, o($Vw, [2, 18]), o($Vx, [2, 11]), { 13: 155, 54: $Vn, 56: $Vo }, o($Vx, [2, 13]), o($Vx, [2, 14]), o($Vw, [2, 20]), o($Vw, [2, 36]), o($Vw, [2, 37]), o($Vw, [2, 38]), o($Vw, [2, 39]), { 20: [1, 156] }, o($Vw, [2, 40]), { 20: [1, 157] }, o($Vw, [2, 41]), { 20: [1, 158] }, o($Vw, [2, 42]), { 5: [1, 159] }, { 5: [1, 160] }, { 59: 161, 82: $VD }, { 59: 162, 82: $VD }, { 5: [2, 68] }, { 5: [2, 54] }, { 5: [2, 55] }, { 27: 163, 73: $Vu }, o($VE, [2, 16]), o($Vx, [2, 12]), o($Vz, $V4, { 8: 108, 45: 164 }), o($VA, $V4, { 8: 110, 47: 165 }), o($VB, $V4, { 8: 112, 49: 166 }), o($Vw, [2, 50]), o($Vw, [2, 52]), { 5: [2, 66] }, { 5: [2, 67] }, { 82: [2, 62] }, { 21: [2, 49] }, { 21: [2, 47] }, { 21: [2, 45] }], + defaultActions: { 7: [2, 79], 8: [2, 1], 9: [2, 2], 10: [2, 3], 53: [2, 82], 89: [2, 64], 90: [2, 65], 97: [2, 81], 124: [2, 56], 125: [2, 78], 126: [2, 57], 127: [2, 58], 128: [2, 59], 150: [2, 68], 151: [2, 54], 152: [2, 55], 161: [2, 66], 162: [2, 67], 163: [2, 62], 164: [2, 49], 165: [2, 47], 166: [2, 45] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 83; + case 1: + this.begin("type_directive"); + return 84; + case 2: + this.popState(); + this.begin("arg_directive"); + return 17; + case 3: + this.popState(); + this.popState(); + return 86; + case 4: + return 85; + case 5: + return 5; + case 6: + break; + case 7: + break; + case 8: + break; + case 9: + break; + case 10: + break; + case 11: + return 24; + case 12: + this.begin("LINE"); + return 19; + case 13: + this.begin("ID"); + return 54; + case 14: + this.begin("ID"); + return 56; + case 15: + yy_.yytext = yy_.yytext.trim(); + this.begin("ALIAS"); + return 73; + case 16: + this.popState(); + this.popState(); + this.begin("LINE"); + return 55; + case 17: + this.popState(); + this.popState(); + return 5; + case 18: + this.begin("LINE"); + return 41; + case 19: + this.begin("LINE"); + return 42; + case 20: + this.begin("LINE"); + return 43; + case 21: + this.begin("LINE"); + return 44; + case 22: + this.begin("LINE"); + return 53; + case 23: + this.begin("LINE"); + return 46; + case 24: + this.begin("LINE"); + return 52; + case 25: + this.begin("LINE"); + return 48; + case 26: + this.begin("LINE"); + return 51; + case 27: + this.begin("LINE"); + return 50; + case 28: + this.popState(); + return 20; + case 29: + return 21; + case 30: + return 68; + case 31: + return 69; + case 32: + return 62; + case 33: + return 63; + case 34: + return 64; + case 35: + return 65; + case 36: + return 60; + case 37: + return 57; + case 38: + this.begin("ID"); + return 26; + case 39: + this.begin("ID"); + return 28; + case 40: + return 34; + case 41: + return 35; + case 42: + this.begin("acc_title"); + return 36; + case 43: + this.popState(); + return "acc_title_value"; + case 44: + this.begin("acc_descr"); + return 38; + case 45: + this.popState(); + return "acc_descr_value"; + case 46: + this.begin("acc_descr_multiline"); + break; + case 47: + this.popState(); + break; + case 48: + return "acc_descr_multiline_value"; + case 49: + return 7; + case 50: + return 23; + case 51: + return 25; + case 52: + return 67; + case 53: + return 5; + case 54: + yy_.yytext = yy_.yytext.trim(); + return 73; + case 55: + return 76; + case 56: + return 77; + case 57: + return 74; + case 58: + return 75; + case 59: + return 78; + case 60: + return 79; + case 61: + return 80; + case 62: + return 81; + case 63: + return 82; + case 64: + return 71; + case 65: + return 72; + case 66: + return 5; + case 67: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[0-9]+(?=[ \n]+))/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:rect\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:and\b)/i, /^(?:critical\b)/i, /^(?:option\b)/i, /^(?:break\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:links\b)/i, /^(?:link\b)/i, /^(?:properties\b)/i, /^(?:details\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:title:\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:sequenceDiagram\b)/i, /^(?:autonumber\b)/i, /^(?:off\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\)])/i, /^(?:--[\)])/i, /^(?::(?:(?:no)?wrap)?[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [47, 48], "inclusive": false }, "acc_descr": { "rules": [45], "inclusive": false }, "acc_title": { "rules": [43], "inclusive": false }, "open_directive": { "rules": [1, 8], "inclusive": false }, "type_directive": { "rules": [2, 3, 8], "inclusive": false }, "arg_directive": { "rules": [3, 4, 8], "inclusive": false }, "ID": { "rules": [7, 8, 15], "inclusive": false }, "ALIAS": { "rules": [7, 8, 16, 17], "inclusive": false }, "LINE": { "rules": [7, 8, 28], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let prevActor = void 0; +let actors = {}; +let boxes = []; +let messages = []; +let sequenceNumbersEnabled = false; +let wrapEnabled; +let currentBox = void 0; +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_4__.m.parseDirective(this, statement, context, type); +}; +const addBox = function(data) { + boxes.push({ + name: data.text, + wrap: data.wrap === void 0 && autoWrap() || !!data.wrap, + fill: data.color, + actorKeys: [] + }); + currentBox = boxes.slice(-1)[0]; +}; +const addActor = function(id, name, description, type) { + let assignedBox = currentBox; + const old = actors[id]; + if (old) { + if (currentBox && old.box && currentBox !== old.box) { + throw new Error( + "A same participant should only be defined in one Box: " + old.name + " can't be in '" + old.box.name + "' and in '" + currentBox.name + "' at the same time." + ); + } + assignedBox = old.box ? old.box : currentBox; + old.box = assignedBox; + if (old && name === old.name && description == null) { + return; + } + } + if (description == null || description.text == null) { + description = { text: name, wrap: null, type }; + } + if (type == null || description.text == null) { + description = { text: name, wrap: null, type }; + } + actors[id] = { + box: assignedBox, + name, + description: description.text, + wrap: description.wrap === void 0 && autoWrap() || !!description.wrap, + prevActor, + links: {}, + properties: {}, + actorCnt: null, + rectData: null, + type: type || "participant" + }; + if (prevActor && actors[prevActor]) { + actors[prevActor].nextActor = id; + } + if (currentBox) { + currentBox.actorKeys.push(id); + } + prevActor = id; +}; +const activationCount = (part) => { + let i; + let count = 0; + for (i = 0; i < messages.length; i++) { + if (messages[i].type === LINETYPE.ACTIVE_START && messages[i].from.actor === part) { + count++; + } + if (messages[i].type === LINETYPE.ACTIVE_END && messages[i].from.actor === part) { + count--; + } + } + return count; +}; +const addMessage = function(idFrom, idTo, message, answer) { + messages.push({ + from: idFrom, + to: idTo, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + answer + }); +}; +const addSignal = function(idFrom, idTo, message = { text: void 0, wrap: void 0 }, messageType) { + if (messageType === LINETYPE.ACTIVE_END) { + const cnt = activationCount(idFrom.actor); + if (cnt < 1) { + let error = new Error("Trying to inactivate an inactive participant (" + idFrom.actor + ")"); + error.hash = { + text: "->>-", + token: "->>-", + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["'ACTIVE_PARTICIPANT'"] + }; + throw error; + } + } + messages.push({ + from: idFrom, + to: idTo, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + type: messageType + }); + return true; +}; +const hasAtLeastOneBox = function() { + return boxes.length > 0; +}; +const hasAtLeastOneBoxWithTitle = function() { + return boxes.some((b) => b.name); +}; +const getMessages = function() { + return messages; +}; +const getBoxes = function() { + return boxes; +}; +const getActors = function() { + return actors; +}; +const getActor = function(id) { + return actors[id]; +}; +const getActorKeys = function() { + return Object.keys(actors); +}; +const enableSequenceNumbers = function() { + sequenceNumbersEnabled = true; +}; +const disableSequenceNumbers = function() { + sequenceNumbersEnabled = false; +}; +const showSequenceNumbers = () => sequenceNumbersEnabled; +const setWrap = function(wrapSetting) { + wrapEnabled = wrapSetting; +}; +const autoWrap = () => { + if (wrapEnabled !== void 0) { + return wrapEnabled; + } + return (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().sequence.wrap; +}; +const clear = function() { + actors = {}; + boxes = []; + messages = []; + sequenceNumbersEnabled = false; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.y)(); +}; +const parseMessage = function(str) { + const _str = str.trim(); + const message = { + text: _str.replace(/^:?(?:no)?wrap:/, "").trim(), + wrap: _str.match(/^:?wrap:/) !== null ? true : _str.match(/^:?nowrap:/) !== null ? false : void 0 + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("parseMessage:", message); + return message; +}; +const parseBoxData = function(str) { + const match = str.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/); + let color = match != null && match[1] ? match[1].trim() : "transparent"; + let title = match != null && match[2] ? match[2].trim() : void 0; + if (window && window.CSS) { + if (!window.CSS.supports("color", color)) { + color = "transparent"; + title = str.trim(); + } + } else { + const style = new Option().style; + style.color = color; + if (style.color !== color) { + color = "transparent"; + title = str.trim(); + } + } + const boxData = { + color, + text: title !== void 0 ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.b)(title.replace(/^:?(?:no)?wrap:/, ""), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)()) : void 0, + wrap: title !== void 0 ? title.match(/^:?wrap:/) !== null ? true : title.match(/^:?nowrap:/) !== null ? false : void 0 : void 0 + }; + return boxData; +}; +const LINETYPE = { + SOLID: 0, + DOTTED: 1, + NOTE: 2, + SOLID_CROSS: 3, + DOTTED_CROSS: 4, + SOLID_OPEN: 5, + DOTTED_OPEN: 6, + LOOP_START: 10, + LOOP_END: 11, + ALT_START: 12, + ALT_ELSE: 13, + ALT_END: 14, + OPT_START: 15, + OPT_END: 16, + ACTIVE_START: 17, + ACTIVE_END: 18, + PAR_START: 19, + PAR_AND: 20, + PAR_END: 21, + RECT_START: 22, + RECT_END: 23, + SOLID_POINT: 24, + DOTTED_POINT: 25, + AUTONUMBER: 26, + CRITICAL_START: 27, + CRITICAL_OPTION: 28, + CRITICAL_END: 29, + BREAK_START: 30, + BREAK_END: 31 +}; +const ARROWTYPE = { + FILLED: 0, + OPEN: 1 +}; +const PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 +}; +const addNote = function(actor, placement, message) { + ({ + actor, + placement, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap + }); + const actors2 = [].concat(actor, actor); + messages.push({ + from: actors2[0], + to: actors2[1], + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + type: LINETYPE.NOTE, + placement + }); +}; +const addLinks = function(actorId, text) { + const actor = getActor(actorId); + try { + let sanitizedText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.b)(text.text, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)()); + sanitizedText = sanitizedText.replace(/&/g, "&"); + sanitizedText = sanitizedText.replace(/=/g, "="); + const links = JSON.parse(sanitizedText); + insertLinks(actor, links); + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.error("error while parsing actor link text", e); + } +}; +const addALink = function(actorId, text) { + const actor = getActor(actorId); + try { + const links = {}; + let sanitizedText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.b)(text.text, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)()); + var sep = sanitizedText.indexOf("@"); + sanitizedText = sanitizedText.replace(/&/g, "&"); + sanitizedText = sanitizedText.replace(/=/g, "="); + var label = sanitizedText.slice(0, sep - 1).trim(); + var link = sanitizedText.slice(sep + 1).trim(); + links[label] = link; + insertLinks(actor, links); + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.error("error while parsing actor link text", e); + } +}; +function insertLinks(actor, links) { + if (actor.links == null) { + actor.links = links; + } else { + for (let key in links) { + actor.links[key] = links[key]; + } + } +} +const addProperties = function(actorId, text) { + const actor = getActor(actorId); + try { + let sanitizedText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.b)(text.text, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)()); + const properties = JSON.parse(sanitizedText); + insertProperties(actor, properties); + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.error("error while parsing actor properties text", e); + } +}; +function insertProperties(actor, properties) { + if (actor.properties == null) { + actor.properties = properties; + } else { + for (let key in properties) { + actor.properties[key] = properties[key]; + } + } +} +function boxEnd() { + currentBox = void 0; +} +const addDetails = function(actorId, text) { + const actor = getActor(actorId); + const elem = document.getElementById(text.text); + try { + const text2 = elem.innerHTML; + const details = JSON.parse(text2); + if (details["properties"]) { + insertProperties(actor, details["properties"]); + } + if (details["links"]) { + insertLinks(actor, details["links"]); + } + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.error("error while parsing actor details text", e); + } +}; +const getActorProperty = function(actor, key) { + if (actor !== void 0 && actor.properties !== void 0) { + return actor.properties[key]; + } + return void 0; +}; +const apply = function(param) { + if (Array.isArray(param)) { + param.forEach(function(item) { + apply(item); + }); + } else { + switch (param.type) { + case "sequenceIndex": + messages.push({ + from: void 0, + to: void 0, + message: { + start: param.sequenceIndex, + step: param.sequenceIndexStep, + visible: param.sequenceVisible + }, + wrap: false, + type: param.signalType + }); + break; + case "addParticipant": + addActor(param.actor, param.actor, param.description, "participant"); + break; + case "addActor": + addActor(param.actor, param.actor, param.description, "actor"); + break; + case "activeStart": + addSignal(param.actor, void 0, void 0, param.signalType); + break; + case "activeEnd": + addSignal(param.actor, void 0, void 0, param.signalType); + break; + case "addNote": + addNote(param.actor, param.placement, param.text); + break; + case "addLinks": + addLinks(param.actor, param.text); + break; + case "addALink": + addALink(param.actor, param.text); + break; + case "addProperties": + addProperties(param.actor, param.text); + break; + case "addDetails": + addDetails(param.actor, param.text); + break; + case "addMessage": + addSignal(param.from, param.to, param.msg, param.signalType); + break; + case "boxStart": + addBox(param.boxData); + break; + case "boxEnd": + boxEnd(); + break; + case "loopStart": + addSignal(void 0, void 0, param.loopText, param.signalType); + break; + case "loopEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "rectStart": + addSignal(void 0, void 0, param.color, param.signalType); + break; + case "rectEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "optStart": + addSignal(void 0, void 0, param.optText, param.signalType); + break; + case "optEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "altStart": + addSignal(void 0, void 0, param.altText, param.signalType); + break; + case "else": + addSignal(void 0, void 0, param.altText, param.signalType); + break; + case "altEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "setAccTitle": + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.o)(param.text); + break; + case "parStart": + addSignal(void 0, void 0, param.parText, param.signalType); + break; + case "and": + addSignal(void 0, void 0, param.parText, param.signalType); + break; + case "parEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "criticalStart": + addSignal(void 0, void 0, param.criticalText, param.signalType); + break; + case "option": + addSignal(void 0, void 0, param.optionText, param.signalType); + break; + case "criticalEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "breakStart": + addSignal(void 0, void 0, param.breakText, param.signalType); + break; + case "breakEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + } + } +}; +const db = { + addActor, + addMessage, + addSignal, + addLinks, + addDetails, + addProperties, + autoWrap, + setWrap, + enableSequenceNumbers, + disableSequenceNumbers, + showSequenceNumbers, + getMessages, + getActors, + getActor, + getActorKeys, + getActorProperty, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.p, + getBoxes, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.x, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.w, + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)().sequence, + clear, + parseMessage, + parseBoxData, + LINETYPE, + ARROWTYPE, + PLACEMENT, + addNote, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.o, + apply, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.v, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.q, + hasAtLeastOneBox, + hasAtLeastOneBoxWithTitle +}; +const getStyles = (options) => `.actor { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + } + + text.actor > tspan { + fill: ${options.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${options.actorLineColor}; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${options.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${options.signalColor}; + } + + #arrowhead path { + fill: ${options.signalColor}; + stroke: ${options.signalColor}; + } + + .sequenceNumber { + fill: ${options.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${options.signalColor}; + } + + #crosshead path { + fill: ${options.signalColor}; + stroke: ${options.signalColor}; + } + + .messageText { + fill: ${options.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${options.labelBoxBorderColor}; + fill: ${options.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${options.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${options.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${options.labelBoxBorderColor}; + fill: ${options.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${options.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .activation1 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .activation2 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${options.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man line { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + } + .actor-man circle, line { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + stroke-width: 2px; + } +`; +const styles = getStyles; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.class !== void 0) { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const addPopupInteraction = (id, actorCnt2) => { + (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_4__.a)(() => { + const arr = document.querySelectorAll(id); + if (arr.length === 0) { + return; + } + arr[0].addEventListener("mouseover", function() { + popupMenuUpFunc("actor" + actorCnt2 + "_popup"); + }); + arr[0].addEventListener("mouseout", function() { + popupMenuDownFunc("actor" + actorCnt2 + "_popup"); + }); + }); +}; +const drawPopup = function(elem, actor, minMenuWidth, textAttrs, forceMenus) { + if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) { + return { height: 0, width: 0 }; + } + const links = actor.links; + const actorCnt2 = actor.actorCnt; + const rectData = actor.rectData; + var displayValue = "none"; + if (forceMenus) { + displayValue = "block !important"; + } + const g = elem.append("g"); + g.attr("id", "actor" + actorCnt2 + "_popup"); + g.attr("class", "actorPopupMenu"); + g.attr("display", displayValue); + addPopupInteraction("#actor" + actorCnt2 + "_popup", actorCnt2); + var actorClass = ""; + if (rectData.class !== void 0) { + actorClass = " " + rectData.class; + } + let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth; + const rectElem = g.append("rect"); + rectElem.attr("class", "actorPopupMenuPanel" + actorClass); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.height); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", menuWidth); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (links != null) { + var linkY = 20; + for (let key in links) { + var linkElem = g.append("a"); + var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .N)(links[key]); + linkElem.attr("xlink:href", sanitizedLink); + linkElem.attr("target", "_blank"); + _drawMenuItemTextCandidateFunc(textAttrs)( + key, + linkElem, + rectData.x + 10, + rectData.height + linkY, + menuWidth, + 20, + { class: "actor" }, + textAttrs + ); + linkY += 30; + } + } + rectElem.attr("height", linkY); + return { height: rectData.height + linkY, width: menuWidth }; +}; +const drawImage = function(elem, x, y, link) { + const imageElem = elem.append("image"); + imageElem.attr("x", x); + imageElem.attr("y", y); + var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .N)(link); + imageElem.attr("xlink:href", sanitizedLink); +}; +const drawEmbeddedImage = function(elem, x, y, link) { + const imageElem = elem.append("use"); + imageElem.attr("x", x); + imageElem.attr("y", y); + var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .N)(link); + imageElem.attr("xlink:href", "#" + sanitizedLink); +}; +const popupMenu = function(popid) { + return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'block'; }"; +}; +const popdownMenu = function(popid) { + return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'none'; }"; +}; +const popupMenuUpFunc = function(popupId) { + var pu = document.getElementById(popupId); + if (pu != null) { + pu.style.display = "block"; + } +}; +const popupMenuDownFunc = function(popupId) { + var pu = document.getElementById(popupId); + if (pu != null) { + pu.style.display = "none"; + } +}; +const drawText = function(elem, textData) { + let prevTextHeight = 0, textHeight = 0; + const lines = textData.text.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex); + const [_textFontSize, _textFontSizePx] = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.x)(textData.fontSize); + let textElems = []; + let dy = 0; + let yfunc = () => textData.y; + if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { + switch (textData.valign) { + case "top": + case "start": + yfunc = () => Math.round(textData.y + textData.textMargin); + break; + case "middle": + case "center": + yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2); + break; + case "bottom": + case "end": + yfunc = () => Math.round( + textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin + ); + break; + } + } + if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) { + switch (textData.anchor) { + case "left": + case "start": + textData.x = Math.round(textData.x + textData.textMargin); + textData.anchor = "start"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + case "middle": + case "center": + textData.x = Math.round(textData.x + textData.width / 2); + textData.anchor = "middle"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + case "right": + case "end": + textData.x = Math.round(textData.x + textData.width - textData.textMargin); + textData.anchor = "end"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + } + } + for (let [i, line] of lines.entries()) { + if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) { + dy = i * _textFontSize; + } + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", yfunc()); + if (textData.anchor !== void 0) { + textElem.attr("text-anchor", textData.anchor).attr("dominant-baseline", textData.dominantBaseline).attr("alignment-baseline", textData.alignmentBaseline); + } + if (textData.fontFamily !== void 0) { + textElem.style("font-family", textData.fontFamily); + } + if (_textFontSizePx !== void 0) { + textElem.style("font-size", _textFontSizePx); + } + if (textData.fontWeight !== void 0) { + textElem.style("font-weight", textData.fontWeight); + } + if (textData.fill !== void 0) { + textElem.attr("fill", textData.fill); + } + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + if (textData.dy !== void 0) { + textElem.attr("dy", textData.dy); + } else if (dy !== 0) { + textElem.attr("dy", dy); + } + if (textData.tspan) { + const span = textElem.append("tspan"); + span.attr("x", textData.x); + if (textData.fill !== void 0) { + span.attr("fill", textData.fill); + } + span.text(line); + } else { + textElem.text(line); + } + if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { + textHeight += (textElem._groups || textElem)[0][0].getBBox().height; + prevTextHeight = textHeight; + } + textElems.push(textElem); + } + return textElems; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.height / 2; + drawText(elem, txtObject); + return polygon; +}; +let actorCnt = -1; +const fixLifeLineHeights = (diagram2, bounds2) => { + if (!diagram2.selectAll) { + return; + } + diagram2.selectAll(".actor-line").attr("class", "200").attr("y2", bounds2 - 55); +}; +const drawActorTypeParticipant = function(elem, actor, conf2, isFooter) { + const center = actor.x + actor.width / 2; + const centerY = actor.y + 5; + const boxpluslineGroup = elem.append("g"); + var g = boxpluslineGroup; + if (!isFooter) { + actorCnt++; + g.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("stroke-width", "0.5px").attr("stroke", "#999"); + g = boxpluslineGroup.append("g"); + actor.actorCnt = actorCnt; + if (actor.links != null) { + g.attr("id", "root-" + actorCnt); + addPopupInteraction("#root-" + actorCnt, actorCnt); + } + } + const rect = getNoteRect(); + var cssclass = "actor"; + if (actor.properties != null && actor.properties["class"]) { + cssclass = actor.properties["class"]; + } else { + rect.fill = "#eaeaea"; + } + rect.x = actor.x; + rect.y = actor.y; + rect.width = actor.width; + rect.height = actor.height; + rect.class = cssclass; + rect.rx = 3; + rect.ry = 3; + const rectElem = drawRect(g, rect); + actor.rectData = rect; + if (actor.properties != null && actor.properties["icon"]) { + const iconSrc = actor.properties["icon"].trim(); + if (iconSrc.charAt(0) === "@") { + drawEmbeddedImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1)); + } else { + drawImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc); + } + } + _drawTextCandidateFunc(conf2)( + actor.description, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "actor" }, + conf2 + ); + let height = actor.height; + if (rectElem.node) { + const bounds2 = rectElem.node().getBBox(); + actor.height = bounds2.height; + height = bounds2.height; + } + return height; +}; +const drawActorTypeActor = function(elem, actor, conf2, isFooter) { + const center = actor.x + actor.width / 2; + const centerY = actor.y + 80; + if (!isFooter) { + actorCnt++; + elem.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("stroke-width", "0.5px").attr("stroke", "#999"); + } + const actElem = elem.append("g"); + actElem.attr("class", "actor-man"); + const rect = getNoteRect(); + rect.x = actor.x; + rect.y = actor.y; + rect.fill = "#eaeaea"; + rect.width = actor.width; + rect.height = actor.height; + rect.class = "actor"; + rect.rx = 3; + rect.ry = 3; + actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center).attr("y1", actor.y + 25).attr("x2", center).attr("y2", actor.y + 45); + actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center - 18).attr("y1", actor.y + 33).attr("x2", center + 18).attr("y2", actor.y + 33); + actElem.append("line").attr("x1", center - 18).attr("y1", actor.y + 60).attr("x2", center).attr("y2", actor.y + 45); + actElem.append("line").attr("x1", center).attr("y1", actor.y + 45).attr("x2", center + 16).attr("y2", actor.y + 60); + const circle = actElem.append("circle"); + circle.attr("cx", actor.x + actor.width / 2); + circle.attr("cy", actor.y + 10); + circle.attr("r", 15); + circle.attr("width", actor.width); + circle.attr("height", actor.height); + const bounds2 = actElem.node().getBBox(); + actor.height = bounds2.height; + _drawTextCandidateFunc(conf2)( + actor.description, + actElem, + rect.x, + rect.y + 35, + rect.width, + rect.height, + { class: "actor" }, + conf2 + ); + return actor.height; +}; +const drawActor = function(elem, actor, conf2, isFooter) { + switch (actor.type) { + case "actor": + return drawActorTypeActor(elem, actor, conf2, isFooter); + case "participant": + return drawActorTypeParticipant(elem, actor, conf2, isFooter); + } +}; +const drawBox = function(elem, box, conf2) { + const boxplustextGroup = elem.append("g"); + const g = boxplustextGroup; + drawBackgroundRect(g, box); + if (box.name) { + _drawTextCandidateFunc(conf2)( + box.name, + g, + box.x, + box.y + (box.textMaxHeight || 0) / 2, + box.width, + 0, + { class: "text" }, + conf2 + ); + } + g.lower(); +}; +const anchorElement = function(elem) { + return elem.append("g"); +}; +const drawActivation = function(elem, bounds2, verticalPos, conf2, actorActivations2) { + const rect = getNoteRect(); + const g = bounds2.anchored; + rect.x = bounds2.startx; + rect.y = bounds2.starty; + rect.class = "activation" + actorActivations2 % 3; + rect.width = bounds2.stopx - bounds2.startx; + rect.height = verticalPos - bounds2.starty; + drawRect(g, rect); +}; +const drawLoop = function(elem, loopModel, labelText, conf2) { + const { + boxMargin, + boxTextMargin, + labelBoxHeight, + labelBoxWidth, + messageFontFamily: fontFamily, + messageFontSize: fontSize, + messageFontWeight: fontWeight + } = conf2; + const g = elem.append("g"); + const drawLoopLine = function(startx, starty, stopx, stopy) { + return g.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine"); + }; + drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty); + drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy); + drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy); + drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy); + if (loopModel.sections !== void 0) { + loopModel.sections.forEach(function(item) { + drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style( + "stroke-dasharray", + "3, 3" + ); + }); + } + let txt = getTextObj(); + txt.text = labelText; + txt.x = loopModel.startx; + txt.y = loopModel.starty; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.tspan = false; + txt.width = labelBoxWidth || 50; + txt.height = labelBoxHeight || 20; + txt.textMargin = boxTextMargin; + txt.class = "labelText"; + drawLabel(g, txt); + txt = getTextObj(); + txt.text = loopModel.title; + txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2; + txt.y = loopModel.starty + boxMargin + boxTextMargin; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.textMargin = boxTextMargin; + txt.class = "loopText"; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.wrap = true; + let textElem = drawText(g, txt); + if (loopModel.sectionTitles !== void 0) { + loopModel.sectionTitles.forEach(function(item, idx) { + if (item.message) { + txt.text = item.message; + txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2; + txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin; + txt.class = "loopText"; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.tspan = false; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.wrap = loopModel.wrap; + textElem = drawText(g, txt); + let sectionHeight = Math.round( + textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) + ); + loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin); + } + }); + } + loopModel.height = Math.round(loopModel.stopy - loopModel.starty); + return g; +}; +const drawBackgroundRect = function(elem, bounds2) { + const rectElem = drawRect(elem, { + x: bounds2.startx, + y: bounds2.starty, + width: bounds2.stopx - bounds2.startx, + height: bounds2.stopy - bounds2.starty, + fill: bounds2.fill, + stroke: bounds2.stroke, + class: "rect" + }); + rectElem.lower(); +}; +const insertDatabaseIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" + ); +}; +const insertComputerIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" + ); +}; +const insertClockIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" + ); +}; +const insertArrowHead = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z"); +}; +const insertArrowFilledHead = function(elem) { + elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const insertSequenceNumber = function(elem) { + elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); +}; +const insertArrowCrossHead = function(elem) { + const defs = elem.append("defs"); + const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 4).attr("refY", 5); + marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1pt").attr("d", "M 1,2 L 6,7 M 6,2 L 1,7"); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + anchor: void 0, + style: "#666", + width: void 0, + height: void 0, + textMargin: 0, + rx: 0, + ry: 0, + tspan: true, + valign: void 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + fill: "#EDF2AE", + stroke: "#666", + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; + const [_actorFontSize, _actorFontSizePx] = (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.x)(actorFontSize); + const lines = content.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * _actorFontSize - _actorFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const _drawMenuItemTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; + const lines = content.split(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); + text.append("tspan").attr("x", x).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const svgDraw = { + drawRect, + drawText, + drawLabel, + drawActor, + drawBox, + drawPopup, + drawImage, + drawEmbeddedImage, + anchorElement, + drawActivation, + drawLoop, + drawBackgroundRect, + insertArrowHead, + insertArrowFilledHead, + insertSequenceNumber, + insertArrowCrossHead, + insertDatabaseIcon, + insertComputerIcon, + insertClockIcon, + getTextObj, + getNoteRect, + popupMenu, + popdownMenu, + fixLifeLineHeights, + sanitizeUrl: _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .N +}; +let conf = {}; +const bounds = { + data: { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }, + verticalPos: 0, + sequenceItems: [], + activations: [], + models: { + getHeight: function() { + return Math.max.apply( + null, + this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) + ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h)); + }, + clear: function() { + this.actors = []; + this.boxes = []; + this.loops = []; + this.messages = []; + this.notes = []; + }, + addBox: function(boxModel) { + this.boxes.push(boxModel); + }, + addActor: function(actorModel) { + this.actors.push(actorModel); + }, + addLoop: function(loopModel) { + this.loops.push(loopModel); + }, + addMessage: function(msgModel) { + this.messages.push(msgModel); + }, + addNote: function(noteModel) { + this.notes.push(noteModel); + }, + lastActor: function() { + return this.actors[this.actors.length - 1]; + }, + lastLoop: function() { + return this.loops[this.loops.length - 1]; + }, + lastMessage: function() { + return this.messages[this.messages.length - 1]; + }, + lastNote: function() { + return this.notes[this.notes.length - 1]; + }, + actors: [], + boxes: [], + loops: [], + messages: [], + notes: [] + }, + init: function() { + this.sequenceItems = []; + this.activations = []; + this.models.clear(); + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }; + this.verticalPos = 0; + setConf((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)()); + }, + updateVal: function(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + }, + updateBounds: function(startx, starty, stopx, stopy) { + const _self = this; + let cnt = 0; + function updateFn(type) { + return function updateItemBounds(item) { + cnt++; + const n = _self.sequenceItems.length - cnt + 1; + _self.updateVal(item, "starty", starty - n * conf.boxMargin, Math.min); + _self.updateVal(item, "stopy", stopy + n * conf.boxMargin, Math.max); + _self.updateVal(bounds.data, "startx", startx - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopx", stopx + n * conf.boxMargin, Math.max); + if (!(type === "activation")) { + _self.updateVal(item, "startx", startx - n * conf.boxMargin, Math.min); + _self.updateVal(item, "stopx", stopx + n * conf.boxMargin, Math.max); + _self.updateVal(bounds.data, "starty", starty - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopy", stopy + n * conf.boxMargin, Math.max); + } + }; + } + this.sequenceItems.forEach(updateFn()); + this.activations.forEach(updateFn("activation")); + }, + insert: function(startx, starty, stopx, stopy) { + const _startx = Math.min(startx, stopx); + const _stopx = Math.max(startx, stopx); + const _starty = Math.min(starty, stopy); + const _stopy = Math.max(starty, stopy); + this.updateVal(bounds.data, "startx", _startx, Math.min); + this.updateVal(bounds.data, "starty", _starty, Math.min); + this.updateVal(bounds.data, "stopx", _stopx, Math.max); + this.updateVal(bounds.data, "stopy", _stopy, Math.max); + this.updateBounds(_startx, _starty, _stopx, _stopy); + }, + newActivation: function(message, diagram2, actors2) { + const actorRect = actors2[message.from.actor]; + const stackedSize = actorActivations(message.from.actor).length || 0; + const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; + this.activations.push({ + startx: x, + starty: this.verticalPos + 2, + stopx: x + conf.activationWidth, + stopy: void 0, + actor: message.from.actor, + anchored: svgDraw.anchorElement(diagram2) + }); + }, + endActivation: function(message) { + const lastActorActivationIdx = this.activations.map(function(activation) { + return activation.actor; + }).lastIndexOf(message.from.actor); + return this.activations.splice(lastActorActivationIdx, 1)[0]; + }, + createLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { + return { + startx: void 0, + starty: this.verticalPos, + stopx: void 0, + stopy: void 0, + title: title.message, + wrap: title.wrap, + width: title.width, + height: 0, + fill + }; + }, + newLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { + this.sequenceItems.push(this.createLoop(title, fill)); + }, + endLoop: function() { + return this.sequenceItems.pop(); + }, + addSectionToLoop: function(message) { + const loop = this.sequenceItems.pop(); + loop.sections = loop.sections || []; + loop.sectionTitles = loop.sectionTitles || []; + loop.sections.push({ y: bounds.getVerticalPos(), height: 0 }); + loop.sectionTitles.push(message); + this.sequenceItems.push(loop); + }, + bumpVerticalPos: function(bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = this.verticalPos; + }, + getVerticalPos: function() { + return this.verticalPos; + }, + getBounds: function() { + return { bounds: this.data, models: this.models }; + } +}; +const drawNote = function(elem, noteModel) { + bounds.bumpVerticalPos(conf.boxMargin); + noteModel.height = conf.boxMargin; + noteModel.starty = bounds.getVerticalPos(); + const rect = svgDraw.getNoteRect(); + rect.x = noteModel.startx; + rect.y = noteModel.starty; + rect.width = noteModel.width || conf.width; + rect.class = "note"; + const g = elem.append("g"); + const rectElem = svgDraw.drawRect(g, rect); + const textObj = svgDraw.getTextObj(); + textObj.x = noteModel.startx; + textObj.y = noteModel.starty; + textObj.width = rect.width; + textObj.dy = "1em"; + textObj.text = noteModel.message; + textObj.class = "noteText"; + textObj.fontFamily = conf.noteFontFamily; + textObj.fontSize = conf.noteFontSize; + textObj.fontWeight = conf.noteFontWeight; + textObj.anchor = conf.noteAlign; + textObj.textMargin = conf.noteMargin; + textObj.valign = "center"; + const textElem = drawText(g, textObj); + const textHeight = Math.round( + textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) + ); + rectElem.attr("height", textHeight + 2 * conf.noteMargin); + noteModel.height += textHeight + 2 * conf.noteMargin; + bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); + noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin; + noteModel.stopx = noteModel.startx + rect.width; + bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); + bounds.models.addNote(noteModel); +}; +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight + }; +}; +const noteFont = (cnf) => { + return { + fontFamily: cnf.noteFontFamily, + fontSize: cnf.noteFontSize, + fontWeight: cnf.noteFontWeight + }; +}; +const actorFont = (cnf) => { + return { + fontFamily: cnf.actorFontFamily, + fontSize: cnf.actorFontSize, + fontWeight: cnf.actorFontWeight + }; +}; +function boundMessage(_diagram, msgModel) { + bounds.bumpVerticalPos(10); + const { startx, stopx, message } = msgModel; + const lines = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.e.splitBreaks(message).length; + const textDims = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions(message, messageFont(conf)); + const lineHeight = textDims.height / lines; + msgModel.height += lineHeight; + bounds.bumpVerticalPos(lineHeight); + let lineStartY; + let totalOffset = textDims.height - 10; + const textWidth = textDims.width; + if (startx === stopx) { + lineStartY = bounds.getVerticalPos() + totalOffset; + if (!conf.rightAngles) { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + } + totalOffset += 30; + const dx = Math.max(textWidth / 2, conf.width / 2); + bounds.insert( + startx - dx, + bounds.getVerticalPos() - 10 + totalOffset, + stopx + dx, + bounds.getVerticalPos() + 30 + totalOffset + ); + } else { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + bounds.insert(startx, lineStartY - 10, stopx, lineStartY); + } + bounds.bumpVerticalPos(totalOffset); + msgModel.height += totalOffset; + msgModel.stopy = msgModel.starty + msgModel.height; + bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); + return lineStartY; +} +const drawMessage = function(diagram2, msgModel, lineStartY, diagObj) { + const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; + const textDims = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions(message, messageFont(conf)); + const textObj = svgDraw.getTextObj(); + textObj.x = startx; + textObj.y = starty + 10; + textObj.width = stopx - startx; + textObj.class = "messageText"; + textObj.dy = "1em"; + textObj.text = message; + textObj.fontFamily = conf.messageFontFamily; + textObj.fontSize = conf.messageFontSize; + textObj.fontWeight = conf.messageFontWeight; + textObj.anchor = conf.messageAlign; + textObj.valign = "center"; + textObj.textMargin = conf.wrapPadding; + textObj.tspan = false; + drawText(diagram2, textObj); + const textWidth = textDims.width; + let line; + if (startx === stopx) { + if (conf.rightAngles) { + line = diagram2.append("path").attr( + "d", + `M ${startx},${lineStartY} H ${startx + Math.max(conf.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}` + ); + } else { + line = diagram2.append("path").attr( + "d", + "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20) + ); + } + } else { + line = diagram2.append("line"); + line.attr("x1", startx); + line.attr("y1", lineStartY); + line.attr("x2", stopx); + line.attr("y2", lineStartY); + } + if (type === diagObj.db.LINETYPE.DOTTED || type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN) { + line.style("stroke-dasharray", "3, 3"); + line.attr("class", "messageLine1"); + } else { + line.attr("class", "messageLine0"); + } + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + line.attr("stroke-width", 2); + line.attr("stroke", "none"); + line.style("fill", "none"); + if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) { + line.attr("marker-end", "url(" + url + "#filled-head)"); + } + if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) { + line.attr("marker-end", "url(" + url + "#crosshead)"); + } + if (sequenceVisible || conf.showSequenceNumbers) { + line.attr("marker-start", "url(" + url + "#sequencenumber)"); + diagram2.append("text").attr("x", startx).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", "12px").attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex); + } +}; +const drawActors = function(diagram2, actors2, actorKeys, verticalPos, configuration, messages2, isFooter) { + if (configuration.hideUnusedParticipants === true) { + const newActors = /* @__PURE__ */ new Set(); + messages2.forEach((message) => { + newActors.add(message.from); + newActors.add(message.to); + }); + actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); + } + let prevWidth = 0; + let prevMargin = 0; + let maxHeight = 0; + let prevBox = void 0; + for (const actorKey of actorKeys) { + const actor = actors2[actorKey]; + const box = actor.box; + if (prevBox && prevBox != box) { + if (!isFooter) { + bounds.models.addBox(prevBox); + } + prevMargin += conf.boxMargin + prevBox.margin; + } + if (box && box != prevBox) { + if (!isFooter) { + box.x = prevWidth + prevMargin; + box.y = verticalPos; + } + prevMargin += box.margin; + } + actor.width = actor.width || conf.width; + actor.height = Math.max(actor.height || conf.height, conf.height); + actor.margin = actor.margin || conf.actorMargin; + actor.x = prevWidth + prevMargin; + actor.y = bounds.getVerticalPos(); + const height = svgDraw.drawActor(diagram2, actor, conf, isFooter); + maxHeight = Math.max(maxHeight, height); + bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); + prevWidth += actor.width + prevMargin; + if (actor.box) { + actor.box.width = prevWidth + box.margin - actor.box.x; + } + prevMargin = actor.margin; + prevBox = actor.box; + bounds.models.addActor(actor); + } + if (prevBox && !isFooter) { + bounds.models.addBox(prevBox); + } + bounds.bumpVerticalPos(maxHeight); +}; +const drawActorsPopup = function(diagram2, actors2, actorKeys, doc) { + let maxHeight = 0; + let maxWidth = 0; + for (const actorKey of actorKeys) { + const actor = actors2[actorKey]; + const minMenuWidth = getRequiredPopupWidth(actor); + const menuDimensions = svgDraw.drawPopup( + diagram2, + actor, + minMenuWidth, + conf, + conf.forceMenus, + doc + ); + if (menuDimensions.height > maxHeight) { + maxHeight = menuDimensions.height; + } + if (menuDimensions.width + actor.x > maxWidth) { + maxWidth = menuDimensions.width + actor.x; + } + } + return { maxHeight, maxWidth }; +}; +const setConf = function(cnf) { + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.d)(conf, cnf); + if (cnf.fontFamily) { + conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; +const actorActivations = function(actor) { + return bounds.activations.filter(function(activation) { + return activation.actor === actor; + }); +}; +const activationBounds = function(actor, actors2) { + const actorObj = actors2[actor]; + const activations = actorActivations(actor); + const left = activations.reduce(function(acc, activation) { + return Math.min(acc, activation.startx); + }, actorObj.x + actorObj.width / 2); + const right = activations.reduce(function(acc, activation) { + return Math.max(acc, activation.stopx); + }, actorObj.x + actorObj.width / 2); + return [left, right]; +}; +function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { + bounds.bumpVerticalPos(preMargin); + let heightAdjust = postMargin; + if (msg.id && msg.message && loopWidths[msg.id]) { + const loopWidth = loopWidths[msg.id].width; + const textConf = messageFont(conf); + msg.message = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf); + msg.width = loopWidth; + msg.wrap = true; + const textDims = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions(msg.message, textConf); + const totalOffset = Math.max(textDims.height, conf.labelBoxHeight); + heightAdjust = postMargin + totalOffset; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(`${totalOffset} - ${msg.message}`); + } + addLoopFn(msg); + bounds.bumpVerticalPos(heightAdjust); +} +const draw = function(_text, id, _version, diagObj) { + const { securityLevel, sequence } = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + conf = sequence; + diagObj.db.clear(); + diagObj.parser.parse(_text); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + bounds.init(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(diagObj.db); + const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + const actors2 = diagObj.db.getActors(); + const boxes2 = diagObj.db.getBoxes(); + const actorKeys = diagObj.db.getActorKeys(); + const messages2 = diagObj.db.getMessages(); + const title = diagObj.db.getDiagramTitle(); + const hasBoxes = diagObj.db.hasAtLeastOneBox(); + const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); + const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors2, messages2, diagObj); + conf.height = calculateActorMargins(actors2, maxMessageWidthPerActor, boxes2); + svgDraw.insertComputerIcon(diagram2); + svgDraw.insertDatabaseIcon(diagram2); + svgDraw.insertClockIcon(diagram2); + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + if (hasBoxTitles) { + bounds.bumpVerticalPos(boxes2[0].textMaxHeight); + } + } + drawActors(diagram2, actors2, actorKeys, 0, conf, messages2, false); + const loopWidths = calculateLoopBounds(messages2, actors2, maxMessageWidthPerActor, diagObj); + svgDraw.insertArrowHead(diagram2); + svgDraw.insertArrowCrossHead(diagram2); + svgDraw.insertArrowFilledHead(diagram2); + svgDraw.insertSequenceNumber(diagram2); + function activeEnd(msg, verticalPos) { + const activationData = bounds.endActivation(msg); + if (activationData.starty + 18 > verticalPos) { + activationData.starty = verticalPos - 6; + verticalPos += 12; + } + svgDraw.drawActivation( + diagram2, + activationData, + verticalPos, + conf, + actorActivations(msg.from.actor).length + ); + bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); + } + let sequenceIndex = 1; + let sequenceIndexStep = 1; + const messagesToDraw = []; + messages2.forEach(function(msg) { + let loopModel, noteModel, msgModel; + switch (msg.type) { + case diagObj.db.LINETYPE.NOTE: + noteModel = msg.noteModel; + drawNote(diagram2, noteModel); + break; + case diagObj.db.LINETYPE.ACTIVE_START: + bounds.newActivation(msg, diagram2, actors2); + break; + case diagObj.db.LINETYPE.ACTIVE_END: + activeEnd(msg, bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.LOOP_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.LOOP_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "loop", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.RECT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin, + (message) => bounds.newLoop(void 0, message.message) + ); + break; + case diagObj.db.LINETYPE.RECT_END: + loopModel = bounds.endLoop(); + svgDraw.drawBackgroundRect(diagram2, loopModel); + bounds.models.addLoop(loopModel); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.OPT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.OPT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "opt", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.ALT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "alt", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.PAR_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.PAR_AND: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.PAR_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "par", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.AUTONUMBER: + sequenceIndex = msg.message.start || sequenceIndex; + sequenceIndexStep = msg.message.step || sequenceIndexStep; + if (msg.message.visible) { + diagObj.db.enableSequenceNumbers(); + } else { + diagObj.db.disableSequenceNumbers(); + } + break; + case diagObj.db.LINETYPE.CRITICAL_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_OPTION: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "critical", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.BREAK_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.BREAK_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "break", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + default: + try { + msgModel = msg.msgModel; + msgModel.starty = bounds.getVerticalPos(); + msgModel.sequenceIndex = sequenceIndex; + msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); + const lineStartY = boundMessage(diagram2, msgModel); + messagesToDraw.push({ messageModel: msgModel, lineStartY }); + bounds.models.addMessage(msgModel); + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.error("error while drawing message", e); + } + } + if ([ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT + ].includes(msg.type)) { + sequenceIndex = sequenceIndex + sequenceIndexStep; + } + }); + messagesToDraw.forEach((e) => drawMessage(diagram2, e.messageModel, e.lineStartY, diagObj)); + if (conf.mirrorActors) { + bounds.bumpVerticalPos(conf.boxMargin * 2); + drawActors(diagram2, actors2, actorKeys, bounds.getVerticalPos(), conf, messages2, true); + bounds.bumpVerticalPos(conf.boxMargin); + fixLifeLineHeights(diagram2, bounds.getVerticalPos()); + } + bounds.models.boxes.forEach(function(box2) { + box2.height = bounds.getVerticalPos() - box2.y; + bounds.insert(box2.x, box2.y, box2.x + box2.width, box2.height); + box2.startx = box2.x; + box2.starty = box2.y; + box2.stopx = box2.startx + box2.width; + box2.stopy = box2.starty + box2.height; + box2.stroke = "rgb(0,0,0, 0.5)"; + svgDraw.drawBox(diagram2, box2, conf); + }); + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + } + const requiredBoxSize = drawActorsPopup(diagram2, actors2, actorKeys, doc); + const { bounds: box } = bounds.getBounds(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("For line height fix Querying: #" + id + " .actor-line"); + const actorLines = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .selectAll */ .td_)("#" + id + " .actor-line"); + actorLines.attr("y2", box.stopy); + let boxHeight = box.stopy - box.starty; + if (boxHeight < requiredBoxSize.maxHeight) { + boxHeight = requiredBoxSize.maxHeight; + } + let height = boxHeight + 2 * conf.diagramMarginY; + if (conf.mirrorActors) { + height = height - conf.boxMargin + conf.bottomMarginAdj; + } + let boxWidth = box.stopx - box.startx; + if (boxWidth < requiredBoxSize.maxWidth) { + boxWidth = requiredBoxSize.maxWidth; + } + const width = boxWidth + 2 * conf.diagramMarginX; + if (title) { + diagram2.append("text").text(title).attr("x", (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr("y", -25); + } + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.k)(diagram2, height, width, conf.useMaxWidth); + const extraVertForTitle = title ? 40 : 0; + diagram2.attr( + "viewBox", + box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug(`models:`, bounds.models); +}; +function getMaxMessageWidthPerActor(actors2, messages2, diagObj) { + const maxMessageWidthPerActor = {}; + messages2.forEach(function(msg) { + if (actors2[msg.to] && actors2[msg.from]) { + const actor = actors2[msg.to]; + if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { + return; + } + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { + return; + } + const isNote = msg.placement !== void 0; + const isMessage = !isNote; + const textFont = isNote ? noteFont(conf) : messageFont(conf); + const wrappedMessage = msg.wrap ? _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message; + const messageDimensions = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions(wrappedMessage, textFont); + const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; + if (isMessage && msg.from === actor.nextActor) { + maxMessageWidthPerActor[msg.to] = Math.max( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth + ); + } else if (isMessage && msg.from === actor.prevActor) { + maxMessageWidthPerActor[msg.from] = Math.max( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (isMessage && msg.from === msg.to) { + maxMessageWidthPerActor[msg.from] = Math.max( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + maxMessageWidthPerActor[msg.to] = Math.max( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth / 2 + ); + } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + maxMessageWidthPerActor[msg.from] = Math.max( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + maxMessageWidthPerActor[actor.prevActor] = Math.max( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { + if (actor.prevActor) { + maxMessageWidthPerActor[actor.prevActor] = Math.max( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth / 2 + ); + } + if (actor.nextActor) { + maxMessageWidthPerActor[msg.from] = Math.max( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + } + } + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor); + return maxMessageWidthPerActor; +} +const getRequiredPopupWidth = function(actor) { + let requiredPopupWidth = 0; + const textFont = actorFont(conf); + for (const key in actor.links) { + const labelDimensions = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions(key, textFont); + const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin; + if (requiredPopupWidth < labelWidth) { + requiredPopupWidth = labelWidth; + } + } + return requiredPopupWidth; +}; +function calculateActorMargins(actors2, actorToMessageWidth, boxes2) { + let maxHeight = 0; + Object.keys(actors2).forEach((prop) => { + const actor = actors2[prop]; + if (actor.wrap) { + actor.description = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.wrapLabel( + actor.description, + conf.width - 2 * conf.wrapPadding, + actorFont(conf) + ); + } + const actDims = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions(actor.description, actorFont(conf)); + actor.width = actor.wrap ? conf.width : Math.max(conf.width, actDims.width + 2 * conf.wrapPadding); + actor.height = actor.wrap ? Math.max(actDims.height, conf.height) : conf.height; + maxHeight = Math.max(maxHeight, actor.height); + }); + for (const actorKey in actorToMessageWidth) { + const actor = actors2[actorKey]; + if (!actor) { + continue; + } + const nextActor = actors2[actor.nextActor]; + if (!nextActor) { + const messageWidth2 = actorToMessageWidth[actorKey]; + const actorWidth2 = messageWidth2 + conf.actorMargin - actor.width / 2; + actor.margin = Math.max(actorWidth2, conf.actorMargin); + continue; + } + const messageWidth = actorToMessageWidth[actorKey]; + const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2; + actor.margin = Math.max(actorWidth, conf.actorMargin); + } + let maxBoxHeight = 0; + boxes2.forEach((box) => { + const textFont = messageFont(conf); + let totalWidth = box.actorKeys.reduce((total, aKey) => { + return total += actors2[aKey].width + (actors2[aKey].margin || 0); + }, 0); + totalWidth -= 2 * conf.boxTextMargin; + if (box.wrap) { + box.name = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont); + } + const boxMsgDimensions = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions(box.name, textFont); + maxBoxHeight = Math.max(boxMsgDimensions.height, maxBoxHeight); + const minWidth = Math.max(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding); + box.margin = conf.boxTextMargin; + if (totalWidth < minWidth) { + const missing = (minWidth - totalWidth) / 2; + box.margin += missing; + } + }); + boxes2.forEach((box) => box.textMaxHeight = maxBoxHeight); + return Math.max(maxHeight, conf.height); +} +const buildNoteModel = function(msg, actors2, diagObj) { + const startx = actors2[msg.from].x; + const stopx = actors2[msg.to].x; + const shouldWrap = msg.wrap && msg.message; + let textDimensions = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions( + shouldWrap ? _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, + noteFont(conf) + ); + const noteModel = { + width: shouldWrap ? conf.width : Math.max(conf.width, textDimensions.width + 2 * conf.noteMargin), + height: 0, + startx: actors2[msg.from].x, + stopx: 0, + starty: 0, + stopy: 0, + message: msg.message + }; + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + noteModel.width = shouldWrap ? Math.max(conf.width, textDimensions.width) : Math.max( + actors2[msg.from].width / 2 + actors2[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors2[msg.from].width + conf.actorMargin) / 2; + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + noteModel.width = shouldWrap ? Math.max(conf.width, textDimensions.width + 2 * conf.noteMargin) : Math.max( + actors2[msg.from].width / 2 + actors2[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx - noteModel.width + (actors2[msg.from].width - conf.actorMargin) / 2; + } else if (msg.to === msg.from) { + textDimensions = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions( + shouldWrap ? _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.wrapLabel(msg.message, Math.max(conf.width, actors2[msg.from].width), noteFont(conf)) : msg.message, + noteFont(conf) + ); + noteModel.width = shouldWrap ? Math.max(conf.width, actors2[msg.from].width) : Math.max(actors2[msg.from].width, conf.width, textDimensions.width + 2 * conf.noteMargin); + noteModel.startx = startx + (actors2[msg.from].width - noteModel.width) / 2; + } else { + noteModel.width = Math.abs(startx + actors2[msg.from].width / 2 - (stopx + actors2[msg.to].width / 2)) + conf.actorMargin; + noteModel.startx = startx < stopx ? startx + actors2[msg.from].width / 2 - conf.actorMargin / 2 : stopx + actors2[msg.to].width / 2 - conf.actorMargin / 2; + } + if (shouldWrap) { + noteModel.message = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.wrapLabel( + msg.message, + noteModel.width - 2 * conf.wrapPadding, + noteFont(conf) + ); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug( + `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` + ); + return noteModel; +}; +const buildMessageModel = function(msg, actors2, diagObj) { + let process = false; + if ([ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT + ].includes(msg.type)) { + process = true; + } + if (!process) { + return {}; + } + const fromBounds = activationBounds(msg.from, actors2); + const toBounds = activationBounds(msg.to, actors2); + const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0; + const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1; + const allBounds = [...fromBounds, ...toBounds]; + const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]); + if (msg.wrap && msg.message) { + msg.message = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.wrapLabel( + msg.message, + Math.max(boundedWidth + 2 * conf.wrapPadding, conf.width), + messageFont(conf) + ); + } + const msgDims = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.calculateTextDimensions(msg.message, messageFont(conf)); + return { + width: Math.max( + msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, + boundedWidth + 2 * conf.wrapPadding, + conf.width + ), + height: 0, + startx: fromBounds[fromIdx], + stopx: toBounds[toIdx], + starty: 0, + stopy: 0, + message: msg.message, + type: msg.type, + wrap: msg.wrap, + fromBounds: Math.min.apply(null, allBounds), + toBounds: Math.max.apply(null, allBounds) + }; +}; +const calculateLoopBounds = function(messages2, actors2, _maxWidthPerActor, diagObj) { + const loops = {}; + const stack = []; + let current, noteModel, msgModel; + messages2.forEach(function(msg) { + msg.id = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_6__.u.random({ length: 10 }); + switch (msg.type) { + case diagObj.db.LINETYPE.LOOP_START: + case diagObj.db.LINETYPE.ALT_START: + case diagObj.db.LINETYPE.OPT_START: + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.CRITICAL_START: + case diagObj.db.LINETYPE.BREAK_START: + stack.push({ + id: msg.id, + msg: msg.message, + from: Number.MAX_SAFE_INTEGER, + to: Number.MIN_SAFE_INTEGER, + width: 0 + }); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + case diagObj.db.LINETYPE.PAR_AND: + case diagObj.db.LINETYPE.CRITICAL_OPTION: + if (msg.message) { + current = stack.pop(); + loops[current.id] = current; + loops[msg.id] = current; + stack.push(current); + } + break; + case diagObj.db.LINETYPE.LOOP_END: + case diagObj.db.LINETYPE.ALT_END: + case diagObj.db.LINETYPE.OPT_END: + case diagObj.db.LINETYPE.PAR_END: + case diagObj.db.LINETYPE.CRITICAL_END: + case diagObj.db.LINETYPE.BREAK_END: + current = stack.pop(); + loops[current.id] = current; + break; + case diagObj.db.LINETYPE.ACTIVE_START: + { + const actorRect = actors2[msg.from ? msg.from.actor : msg.to.actor]; + const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length; + const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; + const toAdd = { + startx: x, + stopx: x + conf.activationWidth, + actor: msg.from.actor, + enabled: true + }; + bounds.activations.push(toAdd); + } + break; + case diagObj.db.LINETYPE.ACTIVE_END: + { + const lastActorActivationIdx = bounds.activations.map((a) => a.actor).lastIndexOf(msg.from.actor); + delete bounds.activations.splice(lastActorActivationIdx, 1)[0]; + } + break; + } + const isNote = msg.placement !== void 0; + if (isNote) { + noteModel = buildNoteModel(msg, actors2, diagObj); + msg.noteModel = noteModel; + stack.forEach((stk) => { + current = stk; + current.from = Math.min(current.from, noteModel.startx); + current.to = Math.max(current.to, noteModel.startx + noteModel.width); + current.width = Math.max(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth; + }); + } else { + msgModel = buildMessageModel(msg, actors2, diagObj); + msg.msgModel = msgModel; + if (msgModel.startx && msgModel.stopx && stack.length > 0) { + stack.forEach((stk) => { + current = stk; + if (msgModel.startx === msgModel.stopx) { + const from = actors2[msg.from]; + const to = actors2[msg.to]; + current.from = Math.min( + from.x - msgModel.width / 2, + from.x - from.width / 2, + current.from + ); + current.to = Math.max(to.x + msgModel.width / 2, to.x + from.width / 2, current.to); + current.width = Math.max(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth; + } else { + current.from = Math.min(msgModel.startx, current.from); + current.to = Math.max(msgModel.stopx, current.to); + current.width = Math.max(current.width, msgModel.width) - conf.labelBoxWidth; + } + }); + } + } + }); + bounds.activations = []; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Loop type widths:", loops); + return loops; +}; +const renderer = { + bounds, + drawActors, + drawActorsPopup, + setConf, + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + +//# sourceMappingURL=sequenceDiagram-446df3e4.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/90184672.63024330.js b/assets/js/90184672.63024330.js new file mode 100644 index 0000000000..3b9dc90f37 --- /dev/null +++ b/assets/js/90184672.63024330.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5932],{58:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>E,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var r=a(7462),n=(a(7294),a(3905));a(5657);const o={},s="INLET_TEMPERATURE",l={unversionedId:"about/references/keywords/INLET_TEMPERATURE",id:"about/references/keywords/INLET_TEMPERATURE",title:"INLET_TEMPERATURE",description:"MODELS / INLETTEMPERATURE",source:"@site/docs/about/references/keywords/INLET_TEMPERATURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INLET_TEMPERATURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"},next:{title:"INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS"}},E={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:i},d="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"inlet_temperature"},"INLET_TEMPERATURE"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," / ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE"},"INLET_TEMPERATURE")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Yes"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")),(0,n.kt)("td",{parentName:"tr",align:null},"None")))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"This is a keyword used in ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},"COMPRESSOR MODELLING"),". It is a necessary input parameter which describes the inlet temperature to a compressor stage. Temperature ",(0,n.kt)("strong",{parentName:"p"},"must")," be given in ",(0,n.kt)("sup",null,"o"),"C."),(0,n.kt)("p",null,"As of now, this is can only be given as a single value. Time-series are not accepted here."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n ...\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_train\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20 #degC\n ...\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/926.c73d999d.js b/assets/js/926.c73d999d.js new file mode 100644 index 0000000000..da8ede9f2c --- /dev/null +++ b/assets/js/926.c73d999d.js @@ -0,0 +1,43457 @@ +exports.id = 926; +exports.ids = [926]; +exports.modules = { + +/***/ 84182: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(82241)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_643__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_643__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_643__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_643__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_643__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_643__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_643__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_643__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_643__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_643__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_643__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_643__(__nested_webpack_require_643__.s = 7); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3185__) { + +"use strict"; + + +var FDLayoutConstants = __nested_webpack_require_3185__(0).FDLayoutConstants; + +function CoSEConstants() {} + +//CoSEConstants inherits static props in FDLayoutConstants +for (var prop in FDLayoutConstants) { + CoSEConstants[prop] = FDLayoutConstants[prop]; +} + +CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; +CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; +CoSEConstants.TILE = true; +CoSEConstants.TILING_PADDING_VERTICAL = 10; +CoSEConstants.TILING_PADDING_HORIZONTAL = 10; +CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout + +module.exports = CoSEConstants; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __nested_webpack_require_4002__) { + +"use strict"; + + +var FDLayoutEdge = __nested_webpack_require_4002__(0).FDLayoutEdge; + +function CoSEEdge(source, target, vEdge) { + FDLayoutEdge.call(this, source, target, vEdge); +} + +CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); +for (var prop in FDLayoutEdge) { + CoSEEdge[prop] = FDLayoutEdge[prop]; +} + +module.exports = CoSEEdge; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_4409__) { + +"use strict"; + + +var LGraph = __nested_webpack_require_4409__(0).LGraph; + +function CoSEGraph(parent, graphMgr, vGraph) { + LGraph.call(this, parent, graphMgr, vGraph); +} + +CoSEGraph.prototype = Object.create(LGraph.prototype); +for (var prop in LGraph) { + CoSEGraph[prop] = LGraph[prop]; +} + +module.exports = CoSEGraph; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __nested_webpack_require_4790__) { + +"use strict"; + + +var LGraphManager = __nested_webpack_require_4790__(0).LGraphManager; + +function CoSEGraphManager(layout) { + LGraphManager.call(this, layout); +} + +CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); +for (var prop in LGraphManager) { + CoSEGraphManager[prop] = LGraphManager[prop]; +} + +module.exports = CoSEGraphManager; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_5205__) { + +"use strict"; + + +var FDLayoutNode = __nested_webpack_require_5205__(0).FDLayoutNode; +var IMath = __nested_webpack_require_5205__(0).IMath; + +function CoSENode(gm, loc, size, vNode) { + FDLayoutNode.call(this, gm, loc, size, vNode); +} + +CoSENode.prototype = Object.create(FDLayoutNode.prototype); +for (var prop in FDLayoutNode) { + CoSENode[prop] = FDLayoutNode[prop]; +} + +CoSENode.prototype.move = function () { + var layout = this.graphManager.getLayout(); + this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; + this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; + + if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX); + } + + if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY); + } + + // a simple node, just move it + if (this.child == null) { + this.moveBy(this.displacementX, this.displacementY); + } + // an empty compound node, again just move it + else if (this.child.getNodes().length == 0) { + this.moveBy(this.displacementX, this.displacementY); + } + // non-empty compound node, propogate movement to children as well + else { + this.propogateDisplacementToChildren(this.displacementX, this.displacementY); + } + + layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); + + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + this.displacementX = 0; + this.displacementY = 0; +}; + +CoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) { + var nodes = this.getChild().getNodes(); + var node; + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + if (node.getChild() == null) { + node.moveBy(dX, dY); + node.displacementX += dX; + node.displacementY += dY; + } else { + node.propogateDisplacementToChildren(dX, dY); + } + } +}; + +CoSENode.prototype.setPred1 = function (pred1) { + this.pred1 = pred1; +}; + +CoSENode.prototype.getPred1 = function () { + return pred1; +}; + +CoSENode.prototype.getPred2 = function () { + return pred2; +}; + +CoSENode.prototype.setNext = function (next) { + this.next = next; +}; + +CoSENode.prototype.getNext = function () { + return next; +}; + +CoSENode.prototype.setProcessed = function (processed) { + this.processed = processed; +}; + +CoSENode.prototype.isProcessed = function () { + return processed; +}; + +module.exports = CoSENode; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_8085__) { + +"use strict"; + + +var FDLayout = __nested_webpack_require_8085__(0).FDLayout; +var CoSEGraphManager = __nested_webpack_require_8085__(4); +var CoSEGraph = __nested_webpack_require_8085__(3); +var CoSENode = __nested_webpack_require_8085__(5); +var CoSEEdge = __nested_webpack_require_8085__(2); +var CoSEConstants = __nested_webpack_require_8085__(1); +var FDLayoutConstants = __nested_webpack_require_8085__(0).FDLayoutConstants; +var LayoutConstants = __nested_webpack_require_8085__(0).LayoutConstants; +var Point = __nested_webpack_require_8085__(0).Point; +var PointD = __nested_webpack_require_8085__(0).PointD; +var Layout = __nested_webpack_require_8085__(0).Layout; +var Integer = __nested_webpack_require_8085__(0).Integer; +var IGeometry = __nested_webpack_require_8085__(0).IGeometry; +var LGraph = __nested_webpack_require_8085__(0).LGraph; +var Transform = __nested_webpack_require_8085__(0).Transform; + +function CoSELayout() { + FDLayout.call(this); + + this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled +} + +CoSELayout.prototype = Object.create(FDLayout.prototype); + +for (var prop in FDLayout) { + CoSELayout[prop] = FDLayout[prop]; +} + +CoSELayout.prototype.newGraphManager = function () { + var gm = new CoSEGraphManager(this); + this.graphManager = gm; + return gm; +}; + +CoSELayout.prototype.newGraph = function (vGraph) { + return new CoSEGraph(null, this.graphManager, vGraph); +}; + +CoSELayout.prototype.newNode = function (vNode) { + return new CoSENode(this.graphManager, vNode); +}; + +CoSELayout.prototype.newEdge = function (vEdge) { + return new CoSEEdge(null, null, vEdge); +}; + +CoSELayout.prototype.initParameters = function () { + FDLayout.prototype.initParameters.call(this, arguments); + if (!this.isSubLayout) { + if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { + this.idealEdgeLength = 10; + } else { + this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; + } + + this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + + // variables for tree reduction support + this.prunedNodesAll = []; + this.growTreeIterations = 0; + this.afterGrowthIterations = 0; + this.isTreeGrowing = false; + this.isGrowthFinished = false; + + // variables for cooling + this.coolingCycle = 0; + this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; + this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations; + this.coolingAdjuster = 1; + } +}; + +CoSELayout.prototype.layout = function () { + var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + if (createBendsAsNeeded) { + this.createBendpoints(); + this.graphManager.resetAllEdges(); + } + + this.level = 0; + return this.classicLayout(); +}; + +CoSELayout.prototype.classicLayout = function () { + this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); + this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); + this.calcNoOfChildrenForAllNodes(); + this.graphManager.calcLowestCommonAncestors(); + this.graphManager.calcInclusionTreeDepths(); + this.graphManager.getRoot().calcEstimatedSize(); + this.calcIdealEdgeLengths(); + + if (!this.incremental) { + var forest = this.getFlatForest(); + + // The graph associated with this layout is flat and a forest + if (forest.length > 0) { + this.positionNodesRadially(forest); + } + // The graph associated with this layout is not flat or a forest + else { + // Reduce the trees when incremental mode is not enabled and graph is not a forest + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.positionNodesRandomly(); + } + } else { + if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { + // Reduce the trees in incremental mode if only this constant is set to true + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + } + } + + this.initSpringEmbedder(); + this.runSpringEmbedder(); + + return true; +}; + +CoSELayout.prototype.tick = function () { + this.totalIterations++; + + if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.isConverged()) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + this.coolingCycle++; + + if (this.layoutQuality == 0) { + // quality - "draft" + this.coolingAdjuster = this.coolingCycle; + } else if (this.layoutQuality == 1) { + // quality - "default" + this.coolingAdjuster = this.coolingCycle / 3; + } + + // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3 + this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); + this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); + } + // Operations while tree is growing again + if (this.isTreeGrowing) { + if (this.growTreeIterations % 10 == 0) { + if (this.prunedNodesAll.length > 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + this.growTree(this.prunedNodesAll); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.graphManager.updateBounds(); + this.updateGrid(); + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + } else { + this.isTreeGrowing = false; + this.isGrowthFinished = true; + } + } + this.growTreeIterations++; + } + // Operations after growth is finished + if (this.isGrowthFinished) { + if (this.isConverged()) { + return true; + } + if (this.afterGrowthIterations % 10 == 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + } + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); + this.afterGrowthIterations++; + } + + var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; + var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; + + this.totalDisplacement = 0; + this.graphManager.updateBounds(); + this.calcSpringForces(); + this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); + this.calcGravitationalForces(); + this.moveNodes(); + this.animate(); + + return false; // Layout is not ended yet return false +}; + +CoSELayout.prototype.getPositionsData = function () { + var allNodes = this.graphManager.getAllNodes(); + var pData = {}; + for (var i = 0; i < allNodes.length; i++) { + var rect = allNodes[i].rect; + var id = allNodes[i].id; + pData[id] = { + id: id, + x: rect.getCenterX(), + y: rect.getCenterY(), + w: rect.width, + h: rect.height + }; + } + + return pData; +}; + +CoSELayout.prototype.runSpringEmbedder = function () { + this.initialAnimationPeriod = 25; + this.animationPeriod = this.initialAnimationPeriod; + var layoutEnded = false; + + // If aminate option is 'during' signal that layout is supposed to start iterating + if (FDLayoutConstants.ANIMATE === 'during') { + this.emit('layoutstarted'); + } else { + // If aminate option is 'during' tick() function will be called on index.js + while (!layoutEnded) { + layoutEnded = this.tick(); + } + + this.graphManager.updateBounds(); + } +}; + +CoSELayout.prototype.calculateNodesToApplyGravitationTo = function () { + var nodeList = []; + var graph; + + var graphs = this.graphManager.getGraphs(); + var size = graphs.length; + var i; + for (i = 0; i < size; i++) { + graph = graphs[i]; + + graph.updateConnected(); + + if (!graph.isConnected) { + nodeList = nodeList.concat(graph.getNodes()); + } + } + + return nodeList; +}; + +CoSELayout.prototype.createBendpoints = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + var visited = new Set(); + var i; + for (i = 0; i < edges.length; i++) { + var edge = edges[i]; + + if (!visited.has(edge)) { + var source = edge.getSource(); + var target = edge.getTarget(); + + if (source == target) { + edge.getBendpoints().push(new PointD()); + edge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(edge); + visited.add(edge); + } else { + var edgeList = []; + + edgeList = edgeList.concat(source.getEdgeListToNode(target)); + edgeList = edgeList.concat(target.getEdgeListToNode(source)); + + if (!visited.has(edgeList[0])) { + if (edgeList.length > 1) { + var k; + for (k = 0; k < edgeList.length; k++) { + var multiEdge = edgeList[k]; + multiEdge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(multiEdge); + } + } + edgeList.forEach(function (edge) { + visited.add(edge); + }); + } + } + } + + if (visited.size == edges.length) { + break; + } + } +}; + +CoSELayout.prototype.positionNodesRadially = function (forest) { + // We tile the trees to a grid row by row; first tree starts at (0,0) + var currentStartingPoint = new Point(0, 0); + var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); + var height = 0; + var currentY = 0; + var currentX = 0; + var point = new PointD(0, 0); + + for (var i = 0; i < forest.length; i++) { + if (i % numberOfColumns == 0) { + // Start of a new row, make the x coordinate 0, increment the + // y coordinate with the max height of the previous row + currentX = 0; + currentY = height; + + if (i != 0) { + currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; + } + + height = 0; + } + + var tree = forest[i]; + + // Find the center of the tree + var centerNode = Layout.findCenterOfTree(tree); + + // Set the staring point of the next tree + currentStartingPoint.x = currentX; + currentStartingPoint.y = currentY; + + // Do a radial layout starting with the center + point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); + + if (point.y > height) { + height = Math.floor(point.y); + } + + currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); + } + + this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2)); +}; + +CoSELayout.radialLayout = function (tree, centerNode, startingPoint) { + var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); + CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); + var bounds = LGraph.calculateBounds(tree); + + var transform = new Transform(); + transform.setDeviceOrgX(bounds.getMinX()); + transform.setDeviceOrgY(bounds.getMinY()); + transform.setWorldOrgX(startingPoint.x); + transform.setWorldOrgY(startingPoint.y); + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + node.transform(transform); + } + + var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY()); + + return transform.inverseTransformPoint(bottomRight); +}; + +CoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) { + // First, position this node by finding its angle. + var halfInterval = (endAngle - startAngle + 1) / 2; + + if (halfInterval < 0) { + halfInterval += 180; + } + + var nodeAngle = (halfInterval + startAngle) % 360; + var teta = nodeAngle * IGeometry.TWO_PI / 360; + + // Make polar to java cordinate conversion. + var cos_teta = Math.cos(teta); + var x_ = distance * Math.cos(teta); + var y_ = distance * Math.sin(teta); + + node.setCenter(x_, y_); + + // Traverse all neighbors of this node and recursively call this + // function. + var neighborEdges = []; + neighborEdges = neighborEdges.concat(node.getEdges()); + var childCount = neighborEdges.length; + + if (parentOfNode != null) { + childCount--; + } + + var branchCount = 0; + + var incEdgesCount = neighborEdges.length; + var startIndex; + + var edges = node.getEdgesBetween(parentOfNode); + + // If there are multiple edges, prune them until there remains only one + // edge. + while (edges.length > 1) { + //neighborEdges.remove(edges.remove(0)); + var temp = edges[0]; + edges.splice(0, 1); + var index = neighborEdges.indexOf(temp); + if (index >= 0) { + neighborEdges.splice(index, 1); + } + incEdgesCount--; + childCount--; + } + + if (parentOfNode != null) { + //assert edges.length == 1; + startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount; + } else { + startIndex = 0; + } + + var stepAngle = Math.abs(endAngle - startAngle) / childCount; + + for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) { + var currentNeighbor = neighborEdges[i].getOtherEnd(node); + + // Don't back traverse to root node in current tree. + if (currentNeighbor == parentOfNode) { + continue; + } + + var childStartAngle = (startAngle + branchCount * stepAngle) % 360; + var childEndAngle = (childStartAngle + stepAngle) % 360; + + CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation); + + branchCount++; + } +}; + +CoSELayout.maxDiagonalInTree = function (tree) { + var maxDiagonal = Integer.MIN_VALUE; + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + var diagonal = node.getDiagonal(); + + if (diagonal > maxDiagonal) { + maxDiagonal = diagonal; + } + } + + return maxDiagonal; +}; + +CoSELayout.prototype.calcRepulsionRange = function () { + // formula is 2 x (level + 1) x idealEdgeLength + return 2 * (this.level + 1) * this.idealEdgeLength; +}; + +// Tiling methods + +// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's +CoSELayout.prototype.groupZeroDegreeMembers = function () { + var self = this; + // array of [parent_id x oneDegreeNode_id] + var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members + this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled + this.idToDummyNode = {}; // A map of id to dummy node + + var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled + var allNodes = this.graphManager.getAllNodes(); + + // Fill zero degree list + for (var i = 0; i < allNodes.length; i++) { + var node = allNodes[i]; + var parent = node.getParent(); + // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list + if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) { + zeroDegree.push(node); + } + } + + // Create a map of parent node and its zero degree members + for (var i = 0; i < zeroDegree.length; i++) { + var node = zeroDegree[i]; // Zero degree node itself + var p_id = node.getParent().id; // Parent id + + if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; + + tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups + } + + // If there are at least two nodes at a level, create a dummy compound for them + Object.keys(tempMemberGroups).forEach(function (p_id) { + if (tempMemberGroups[p_id].length > 1) { + var dummyCompoundId = "DummyCompound_" + p_id; // The id of dummy compound which will be created soon + self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups + + var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound + + // Create a dummy compound with calculated id + var dummyCompound = new CoSENode(self.graphManager); + dummyCompound.id = dummyCompoundId; + dummyCompound.paddingLeft = parent.paddingLeft || 0; + dummyCompound.paddingRight = parent.paddingRight || 0; + dummyCompound.paddingBottom = parent.paddingBottom || 0; + dummyCompound.paddingTop = parent.paddingTop || 0; + + self.idToDummyNode[dummyCompoundId] = dummyCompound; + + var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound); + var parentGraph = parent.getChild(); + + // Add dummy compound to parent the graph + parentGraph.add(dummyCompound); + + // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent + for (var i = 0; i < tempMemberGroups[p_id].length; i++) { + var node = tempMemberGroups[p_id][i]; + + parentGraph.remove(node); + dummyParentGraph.add(node); + } + } + }); +}; + +CoSELayout.prototype.clearCompounds = function () { + var childGraphMap = {}; + var idToNode = {}; + + // Get compound ordering by finding the inner one first + this.performDFSOnCompounds(); + + for (var i = 0; i < this.compoundOrder.length; i++) { + + idToNode[this.compoundOrder[i].id] = this.compoundOrder[i]; + childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes()); + + // Remove children of compounds + this.graphManager.remove(this.compoundOrder[i].getChild()); + this.compoundOrder[i].child = null; + } + + this.graphManager.resetAllNodes(); + + // Tile the removed children + this.tileCompoundMembers(childGraphMap, idToNode); +}; + +CoSELayout.prototype.clearZeroDegreeMembers = function () { + var self = this; + var tiledZeroDegreePack = this.tiledZeroDegreePack = []; + + Object.keys(this.memberGroups).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound + + tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + // Set the width and height of the dummy compound as calculated + compoundNode.rect.width = tiledZeroDegreePack[id].width; + compoundNode.rect.height = tiledZeroDegreePack[id].height; + }); +}; + +CoSELayout.prototype.repopulateCompounds = function () { + for (var i = this.compoundOrder.length - 1; i >= 0; i--) { + var lCompoundNode = this.compoundOrder[i]; + var id = lCompoundNode.id; + var horizontalMargin = lCompoundNode.paddingLeft; + var verticalMargin = lCompoundNode.paddingTop; + + this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); + } +}; + +CoSELayout.prototype.repopulateZeroDegreeMembers = function () { + var self = this; + var tiledPack = this.tiledZeroDegreePack; + + Object.keys(tiledPack).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id + var horizontalMargin = compoundNode.paddingLeft; + var verticalMargin = compoundNode.paddingTop; + + // Adjust the positions of nodes wrt its compound + self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); + }); +}; + +CoSELayout.prototype.getToBeTiled = function (node) { + var id = node.id; + //firstly check the previous results + if (this.toBeTiled[id] != null) { + return this.toBeTiled[id]; + } + + //only compound nodes are to be tiled + var childGraph = node.getChild(); + if (childGraph == null) { + this.toBeTiled[id] = false; + return false; + } + + var children = childGraph.getNodes(); // Get the children nodes + + //a compound node is not to be tiled if all of its compound children are not to be tiled + for (var i = 0; i < children.length; i++) { + var theChild = children[i]; + + if (this.getNodeDegree(theChild) > 0) { + this.toBeTiled[id] = false; + return false; + } + + //pass the children not having the compound structure + if (theChild.getChild() == null) { + this.toBeTiled[theChild.id] = false; + continue; + } + + if (!this.getToBeTiled(theChild)) { + this.toBeTiled[id] = false; + return false; + } + } + this.toBeTiled[id] = true; + return true; +}; + +// Get degree of a node depending of its edges and independent of its children +CoSELayout.prototype.getNodeDegree = function (node) { + var id = node.id; + var edges = node.getEdges(); + var degree = 0; + + // For the edges connected + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + if (edge.getSource().id !== edge.getTarget().id) { + degree = degree + 1; + } + } + return degree; +}; + +// Get degree of a node with its children +CoSELayout.prototype.getNodeDegreeWithChildren = function (node) { + var degree = this.getNodeDegree(node); + if (node.getChild() == null) { + return degree; + } + var children = node.getChild().getNodes(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + degree += this.getNodeDegreeWithChildren(child); + } + return degree; +}; + +CoSELayout.prototype.performDFSOnCompounds = function () { + this.compoundOrder = []; + this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); +}; + +CoSELayout.prototype.fillCompexOrderByDFS = function (children) { + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.getChild() != null) { + this.fillCompexOrderByDFS(child.getChild().getNodes()); + } + if (this.getToBeTiled(child)) { + this.compoundOrder.push(child); + } + } +}; + +/** +* This method places each zero degree member wrt given (x,y) coordinates (top left). +*/ +CoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) { + x += compoundHorizontalMargin; + y += compoundVerticalMargin; + + var left = x; + + for (var i = 0; i < organization.rows.length; i++) { + var row = organization.rows[i]; + x = left; + var maxHeight = 0; + + for (var j = 0; j < row.length; j++) { + var lnode = row[j]; + + lnode.rect.x = x; // + lnode.rect.width / 2; + lnode.rect.y = y; // + lnode.rect.height / 2; + + x += lnode.rect.width + organization.horizontalPadding; + + if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; + } + + y += maxHeight + organization.verticalPadding; + } +}; + +CoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) { + var self = this; + this.tiledMemberPack = []; + + Object.keys(childGraphMap).forEach(function (id) { + // Get the compound node + var compoundNode = idToNode[id]; + + self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + compoundNode.rect.width = self.tiledMemberPack[id].width; + compoundNode.rect.height = self.tiledMemberPack[id].height; + }); +}; + +CoSELayout.prototype.tileNodes = function (nodes, minWidth) { + var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; + var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; + var organization = { + rows: [], + rowWidth: [], + rowHeight: [], + width: 0, + height: minWidth, // assume minHeight equals to minWidth + verticalPadding: verticalPadding, + horizontalPadding: horizontalPadding + }; + + // Sort the nodes in ascending order of their areas + nodes.sort(function (n1, n2) { + if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1; + if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1; + return 0; + }); + + // Create the organization -> tile members + for (var i = 0; i < nodes.length; i++) { + var lNode = nodes[i]; + + if (organization.rows.length == 0) { + this.insertNodeToRow(organization, lNode, 0, minWidth); + } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { + this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth); + } else { + this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); + } + + this.shiftToLastRow(organization); + } + + return organization; +}; + +CoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) { + var minCompoundSize = minWidth; + + // Add new row if needed + if (rowIndex == organization.rows.length) { + var secondDimension = []; + + organization.rows.push(secondDimension); + organization.rowWidth.push(minCompoundSize); + organization.rowHeight.push(0); + } + + // Update row width + var w = organization.rowWidth[rowIndex] + node.rect.width; + + if (organization.rows[rowIndex].length > 0) { + w += organization.horizontalPadding; + } + + organization.rowWidth[rowIndex] = w; + // Update compound width + if (organization.width < w) { + organization.width = w; + } + + // Update height + var h = node.rect.height; + if (rowIndex > 0) h += organization.verticalPadding; + + var extraHeight = 0; + if (h > organization.rowHeight[rowIndex]) { + extraHeight = organization.rowHeight[rowIndex]; + organization.rowHeight[rowIndex] = h; + extraHeight = organization.rowHeight[rowIndex] - extraHeight; + } + + organization.height += extraHeight; + + // Insert node + organization.rows[rowIndex].push(node); +}; + +//Scans the rows of an organization and returns the one with the min width +CoSELayout.prototype.getShortestRowIndex = function (organization) { + var r = -1; + var min = Number.MAX_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + if (organization.rowWidth[i] < min) { + r = i; + min = organization.rowWidth[i]; + } + } + return r; +}; + +//Scans the rows of an organization and returns the one with the max width +CoSELayout.prototype.getLongestRowIndex = function (organization) { + var r = -1; + var max = Number.MIN_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + + if (organization.rowWidth[i] > max) { + r = i; + max = organization.rowWidth[i]; + } + } + + return r; +}; + +/** +* This method checks whether adding extra width to the organization violates +* the aspect ratio(1) or not. +*/ +CoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) { + + var sri = this.getShortestRowIndex(organization); + + if (sri < 0) { + return true; + } + + var min = organization.rowWidth[sri]; + + if (min + organization.horizontalPadding + extraWidth <= organization.width) return true; + + var hDiff = 0; + + // Adding to an existing row + if (organization.rowHeight[sri] < extraHeight) { + if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; + } + + var add_to_row_ratio; + if (organization.width - min >= extraWidth + organization.horizontalPadding) { + add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding); + } else { + add_to_row_ratio = (organization.height + hDiff) / organization.width; + } + + // Adding a new row for this node + hDiff = extraHeight + organization.verticalPadding; + var add_new_row_ratio; + if (organization.width < extraWidth) { + add_new_row_ratio = (organization.height + hDiff) / extraWidth; + } else { + add_new_row_ratio = (organization.height + hDiff) / organization.width; + } + + if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; + + if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; + + return add_to_row_ratio < add_new_row_ratio; +}; + +//If moving the last node from the longest row and adding it to the last +//row makes the bounding box smaller, do it. +CoSELayout.prototype.shiftToLastRow = function (organization) { + var longest = this.getLongestRowIndex(organization); + var last = organization.rowWidth.length - 1; + var row = organization.rows[longest]; + var node = row[row.length - 1]; + + var diff = node.width + organization.horizontalPadding; + + // Check if there is enough space on the last row + if (organization.width - organization.rowWidth[last] > diff && longest != last) { + // Remove the last element of the longest row + row.splice(-1, 1); + + // Push it to the last row + organization.rows[last].push(node); + + organization.rowWidth[longest] = organization.rowWidth[longest] - diff; + organization.rowWidth[last] = organization.rowWidth[last] + diff; + organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; + + // Update heights of the organization + var maxHeight = Number.MIN_VALUE; + for (var i = 0; i < row.length; i++) { + if (row[i].height > maxHeight) maxHeight = row[i].height; + } + if (longest > 0) maxHeight += organization.verticalPadding; + + var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + + organization.rowHeight[longest] = maxHeight; + if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding; + + var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + organization.height += finalTotal - prevTotal; + + this.shiftToLastRow(organization); + } +}; + +CoSELayout.prototype.tilingPreLayout = function () { + if (CoSEConstants.TILE) { + // Find zero degree nodes and create a compound for each level + this.groupZeroDegreeMembers(); + // Tile and clear children of each compound + this.clearCompounds(); + // Separately tile and clear zero degree nodes for each level + this.clearZeroDegreeMembers(); + } +}; + +CoSELayout.prototype.tilingPostLayout = function () { + if (CoSEConstants.TILE) { + this.repopulateZeroDegreeMembers(); + this.repopulateCompounds(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: Tree Reduction methods +// ----------------------------------------------------------------------------- +// Reduce trees +CoSELayout.prototype.reduceTrees = function () { + var prunedNodesAll = []; + var containsLeaf = true; + var node; + + while (containsLeaf) { + var allNodes = this.graphManager.getAllNodes(); + var prunedNodesInStepTemp = []; + containsLeaf = false; + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) { + prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]); + containsLeaf = true; + } + } + if (containsLeaf == true) { + var prunedNodesInStep = []; + for (var j = 0; j < prunedNodesInStepTemp.length; j++) { + if (prunedNodesInStepTemp[j][0].getEdges().length == 1) { + prunedNodesInStep.push(prunedNodesInStepTemp[j]); + prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]); + } + } + prunedNodesAll.push(prunedNodesInStep); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); + } + } + this.prunedNodesAll = prunedNodesAll; +}; + +// Grow tree one step +CoSELayout.prototype.growTree = function (prunedNodesAll) { + var lengthOfPrunedNodesInStep = prunedNodesAll.length; + var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; + + var nodeData; + for (var i = 0; i < prunedNodesInStep.length; i++) { + nodeData = prunedNodesInStep[i]; + + this.findPlaceforPrunedNode(nodeData); + + nodeData[2].add(nodeData[0]); + nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target); + } + + prunedNodesAll.splice(prunedNodesAll.length - 1, 1); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); +}; + +// Find an appropriate position to replace pruned node, this method can be improved +CoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) { + + var gridForPrunedNode; + var nodeToConnect; + var prunedNode = nodeData[0]; + if (prunedNode == nodeData[1].source) { + nodeToConnect = nodeData[1].target; + } else { + nodeToConnect = nodeData[1].source; + } + var startGridX = nodeToConnect.startX; + var finishGridX = nodeToConnect.finishX; + var startGridY = nodeToConnect.startY; + var finishGridY = nodeToConnect.finishY; + + var upNodeCount = 0; + var downNodeCount = 0; + var rightNodeCount = 0; + var leftNodeCount = 0; + var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; + + if (startGridY > 0) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1; + } + } + if (finishGridX < this.grid.length - 1) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1; + } + } + if (finishGridY < this.grid[0].length - 1) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1; + } + } + if (startGridX > 0) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1; + } + } + var min = Integer.MAX_VALUE; + var minCount; + var minIndex; + for (var j = 0; j < controlRegions.length; j++) { + if (controlRegions[j] < min) { + min = controlRegions[j]; + minCount = 1; + minIndex = j; + } else if (controlRegions[j] == min) { + minCount++; + } + } + + if (minCount == 3 && min == 0) { + if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { + gridForPrunedNode = 1; + } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 0; + } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 3; + } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 2; + } + } else if (minCount == 2 && min == 0) { + var random = Math.floor(Math.random() * 2); + if (controlRegions[0] == 0 && controlRegions[1] == 0) { + ; + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 1; + } + } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 3; + } + } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 3; + } + } else { + if (random == 0) { + gridForPrunedNode = 2; + } else { + gridForPrunedNode = 3; + } + } + } else if (minCount == 4 && min == 0) { + var random = Math.floor(Math.random() * 4); + gridForPrunedNode = random; + } else { + gridForPrunedNode = minIndex; + } + + if (gridForPrunedNode == 0) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); + } else if (gridForPrunedNode == 1) { + prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } else if (gridForPrunedNode == 2) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); + } else { + prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } +}; + +module.exports = CoSELayout; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_45620__) { + +"use strict"; + + +var coseBase = {}; + +coseBase.layoutBase = __nested_webpack_require_45620__(0); +coseBase.CoSEConstants = __nested_webpack_require_45620__(1); +coseBase.CoSEEdge = __nested_webpack_require_45620__(2); +coseBase.CoSEGraph = __nested_webpack_require_45620__(3); +coseBase.CoSEGraphManager = __nested_webpack_require_45620__(4); +coseBase.CoSELayout = __nested_webpack_require_45620__(6); +coseBase.CoSENode = __nested_webpack_require_45620__(5); + +module.exports = coseBase; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 14607: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(84182)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_659__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_659__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_659__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_659__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_659__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_659__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_659__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_659__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_659__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_659__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_659__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_659__(__nested_webpack_require_659__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3201__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_3201__(0).layoutBase.LayoutConstants; +var FDLayoutConstants = __nested_webpack_require_3201__(0).layoutBase.FDLayoutConstants; +var CoSEConstants = __nested_webpack_require_3201__(0).CoSEConstants; +var CoSELayout = __nested_webpack_require_3201__(0).CoSELayout; +var CoSENode = __nested_webpack_require_3201__(0).CoSENode; +var PointD = __nested_webpack_require_3201__(0).layoutBase.PointD; +var DimensionD = __nested_webpack_require_3201__(0).layoutBase.DimensionD; + +var defaults = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // 'draft', 'default' or 'proof" + // - 'draft' fast cooling rate + // - 'default' moderate cooling rate + // - "proof" slow cooling rate + quality: 'default', + // include labels in node dimensions + nodeDimensionsIncludeLabels: false, + // number of ticks per frame; higher is faster but more jerky + refresh: 30, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 10, + // Whether to enable incremental mode + randomize: true, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: 4500, + // Ideal edge (non nested) length + idealEdgeLength: 50, + // Divisor to compute edge forces + edgeElasticity: 0.45, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 0.1, + // Gravity force (constant) + gravity: 0.25, + // Maximum number of iterations to perform + numIter: 2500, + // For enabling tiling + tile: true, + // Type of layout animation. The option set is {'during', 'end', false} + animate: 'end', + // Duration for animate:end + animationDuration: 500, + // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingVertical: 10, + // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingHorizontal: 10, + // Gravity range (constant) for compounds + gravityRangeCompound: 1.5, + // Gravity force (constant) for compounds + gravityCompound: 1.0, + // Gravity range (constant) + gravityRange: 3.8, + // Initial cooling factor for incremental layout + initialEnergyOnIncremental: 0.5 +}; + +function extend(defaults, options) { + var obj = {}; + + for (var i in defaults) { + obj[i] = defaults[i]; + } + + for (var i in options) { + obj[i] = options[i]; + } + + return obj; +}; + +function _CoSELayout(_options) { + this.options = extend(defaults, _options); + getUserOptions(this.options); +} + +var getUserOptions = function getUserOptions(options) { + if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion; + if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength; + if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity; + if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor; + if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity; + if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter; + if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange; + if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound; + if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound; + if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental; + + if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1; + + CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels; + CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize; + CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate; + CoSEConstants.TILE = options.tile; + CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical; + CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal; +}; + +_CoSELayout.prototype.run = function () { + var ready; + var frameId; + var options = this.options; + var idToLNode = this.idToLNode = {}; + var layout = this.layout = new CoSELayout(); + var self = this; + + self.stopped = false; + + this.cy = this.options.cy; + + this.cy.trigger({ type: 'layoutstart', layout: this }); + + var gm = layout.newGraphManager(); + this.gm = gm; + + var nodes = this.options.eles.nodes(); + var edges = this.options.eles.edges(); + + this.root = gm.addRoot(); + this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout); + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var sourceNode = this.idToLNode[edge.data("source")]; + var targetNode = this.idToLNode[edge.data("target")]; + if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { + var e1 = gm.add(layout.newEdge(), sourceNode, targetNode); + e1.id = edge.id(); + } + } + + var getPositions = function getPositions(ele, i) { + if (typeof ele === "number") { + ele = i; + } + var theId = ele.data('id'); + var lNode = self.idToLNode[theId]; + + return { + x: lNode.getRect().getCenterX(), + y: lNode.getRect().getCenterY() + }; + }; + + /* + * Reposition nodes in iterations animatedly + */ + var iterateAnimated = function iterateAnimated() { + // Thigs to perform after nodes are repositioned on screen + var afterReposition = function afterReposition() { + if (options.fit) { + options.cy.fit(options.eles, options.padding); + } + + if (!ready) { + ready = true; + self.cy.one('layoutready', options.ready); + self.cy.trigger({ type: 'layoutready', layout: self }); + } + }; + + var ticksPerFrame = self.options.refresh; + var isDone; + + for (var i = 0; i < ticksPerFrame && !isDone; i++) { + isDone = self.stopped || self.layout.tick(); + } + + // If layout is done + if (isDone) { + // If the layout is not a sublayout and it is successful perform post layout. + if (layout.checkLayoutSuccess() && !layout.isSubLayout) { + layout.doPostLayout(); + } + + // If layout has a tilingPostLayout function property call it. + if (layout.tilingPostLayout) { + layout.tilingPostLayout(); + } + + layout.isLayoutFinished = true; + + self.options.eles.nodes().positions(getPositions); + + afterReposition(); + + // trigger layoutstop when the layout stops (e.g. finishes) + self.cy.one('layoutstop', self.options.stop); + self.cy.trigger({ type: 'layoutstop', layout: self }); + + if (frameId) { + cancelAnimationFrame(frameId); + } + + ready = false; + return; + } + + var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling + + // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds) + // use position of their ancestors or dummy ancestors + options.eles.nodes().positions(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + // If ele is a compound node, then its position will be defined by its children + if (!ele.isParent()) { + var theId = ele.id(); + var pNode = animationData[theId]; + var temp = ele; + // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well) + while (pNode == null) { + pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')]; + animationData[theId] = pNode; + temp = temp.parent()[0]; + if (temp == undefined) { + break; + } + } + if (pNode != null) { + return { + x: pNode.x, + y: pNode.y + }; + } else { + return { + x: ele.position('x'), + y: ele.position('y') + }; + } + } + }); + + afterReposition(); + + frameId = requestAnimationFrame(iterateAnimated); + }; + + /* + * Listen 'layoutstarted' event and start animated iteration if animate option is 'during' + */ + layout.addListener('layoutstarted', function () { + if (self.options.animate === 'during') { + frameId = requestAnimationFrame(iterateAnimated); + } + }); + + layout.runLayout(); // Run cose layout + + /* + * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed) + */ + if (this.options.animate !== "during") { + self.options.eles.nodes().not(":parent").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter + ready = false; + } + + return this; // chaining +}; + +//Get the top most ones of a list of nodes +_CoSELayout.prototype.getTopMostNodes = function (nodes) { + var nodesMap = {}; + for (var i = 0; i < nodes.length; i++) { + nodesMap[nodes[i].id()] = true; + } + var roots = nodes.filter(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + var parent = ele.parent()[0]; + while (parent != null) { + if (nodesMap[parent.id()]) { + return false; + } + parent = parent.parent()[0]; + } + return true; + }); + + return roots; +}; + +_CoSELayout.prototype.processChildrenList = function (parent, children, layout) { + var size = children.length; + for (var i = 0; i < size; i++) { + var theChild = children[i]; + var children_of_children = theChild.children(); + var theNode; + + var dimensions = theChild.layoutDimensions({ + nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels + }); + + if (theChild.outerWidth() != null && theChild.outerHeight() != null) { + theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h)))); + } else { + theNode = parent.add(new CoSENode(this.graphManager)); + } + // Attach id to the layout node + theNode.id = theChild.data("id"); + // Attach the paddings of cy node to layout node + theNode.paddingLeft = parseInt(theChild.css('padding')); + theNode.paddingTop = parseInt(theChild.css('padding')); + theNode.paddingRight = parseInt(theChild.css('padding')); + theNode.paddingBottom = parseInt(theChild.css('padding')); + + //Attach the label properties to compound if labels will be included in node dimensions + if (this.options.nodeDimensionsIncludeLabels) { + if (theChild.isParent()) { + var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w; + var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h; + var labelPos = theChild.css("text-halign"); + theNode.labelWidth = labelWidth; + theNode.labelHeight = labelHeight; + theNode.labelPos = labelPos; + } + } + + // Map the layout node + this.idToLNode[theChild.data("id")] = theNode; + + if (isNaN(theNode.rect.x)) { + theNode.rect.x = 0; + } + + if (isNaN(theNode.rect.y)) { + theNode.rect.y = 0; + } + + if (children_of_children != null && children_of_children.length > 0) { + var theNewGraph; + theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode); + this.processChildrenList(theNewGraph, children_of_children, layout); + } + } +}; + +/** + * @brief : called on continuous layouts to stop them before they finish + */ +_CoSELayout.prototype.stop = function () { + this.stopped = true; + + return this; // chaining +}; + +var register = function register(cytoscape) { + // var Layout = getLayout( cytoscape ); + + cytoscape('layout', 'cose-bilkent', _CoSELayout); +}; + +// auto reg for globals +if (typeof cytoscape !== 'undefined') { + register(cytoscape); +} + +module.exports = register; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 71377: +/***/ (function(module) { + +/** + * Copyright (c) 2016-2023, The Cytoscape Consortium. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the “Software”), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +(function (global, factory) { + true ? module.exports = factory() : + 0; +})(this, (function () { 'use strict'; + + function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + + function _defineProperty$1(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; + } + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var window$1 = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef + + var navigator = window$1 ? window$1.navigator : null; + window$1 ? window$1.document : null; + + var typeofstr = _typeof(''); + + var typeofobj = _typeof({}); + + var typeoffn = _typeof(function () {}); + + var typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement); + + var instanceStr = function instanceStr(obj) { + return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null; + }; + + var string = function string(obj) { + return obj != null && _typeof(obj) == typeofstr; + }; + var fn$6 = function fn(obj) { + return obj != null && _typeof(obj) === typeoffn; + }; + var array = function array(obj) { + return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array); + }; + var plainObject = function plainObject(obj) { + return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object; + }; + var object = function object(obj) { + return obj != null && _typeof(obj) === typeofobj; + }; + var number$1 = function number(obj) { + return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj); + }; + var integer = function integer(obj) { + return number$1(obj) && Math.floor(obj) === obj; + }; + var htmlElement = function htmlElement(obj) { + if ('undefined' === typeofhtmlele) { + return undefined; + } else { + return null != obj && obj instanceof HTMLElement; + } + }; + var elementOrCollection = function elementOrCollection(obj) { + return element(obj) || collection(obj); + }; + var element = function element(obj) { + return instanceStr(obj) === 'collection' && obj._private.single; + }; + var collection = function collection(obj) { + return instanceStr(obj) === 'collection' && !obj._private.single; + }; + var core = function core(obj) { + return instanceStr(obj) === 'core'; + }; + var stylesheet = function stylesheet(obj) { + return instanceStr(obj) === 'stylesheet'; + }; + var event = function event(obj) { + return instanceStr(obj) === 'event'; + }; + var emptyString = function emptyString(obj) { + if (obj === undefined || obj === null) { + // null is empty + return true; + } else if (obj === '' || obj.match(/^\s+$/)) { + return true; // empty string is empty + } + + return false; // otherwise, we don't know what we've got + }; + var domElement = function domElement(obj) { + if (typeof HTMLElement === 'undefined') { + return false; // we're not in a browser so it doesn't matter + } else { + return obj instanceof HTMLElement; + } + }; + var boundingBox = function boundingBox(obj) { + return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2); + }; + var promise = function promise(obj) { + return object(obj) && fn$6(obj.then); + }; + var ms = function ms() { + return navigator && navigator.userAgent.match(/msie|trident|edge/i); + }; // probably a better way to detect this... + + var memoize$1 = function memoize(fn, keyFn) { + if (!keyFn) { + keyFn = function keyFn() { + if (arguments.length === 1) { + return arguments[0]; + } else if (arguments.length === 0) { + return 'undefined'; + } + + var args = []; + + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + + return args.join('$'); + }; + } + + var memoizedFn = function memoizedFn() { + var self = this; + var args = arguments; + var ret; + var k = keyFn.apply(self, args); + var cache = memoizedFn.cache; + + if (!(ret = cache[k])) { + ret = cache[k] = fn.apply(self, args); + } + + return ret; + }; + + memoizedFn.cache = {}; + return memoizedFn; + }; + + var camel2dash = memoize$1(function (str) { + return str.replace(/([A-Z])/g, function (v) { + return '-' + v.toLowerCase(); + }); + }); + var dash2camel = memoize$1(function (str) { + return str.replace(/(-\w)/g, function (v) { + return v[1].toUpperCase(); + }); + }); + var prependCamel = memoize$1(function (prefix, str) { + return prefix + str[0].toUpperCase() + str.substring(1); + }, function (prefix, str) { + return prefix + '$' + str; + }); + var capitalize = function capitalize(str) { + if (emptyString(str)) { + return str; + } + + return str.charAt(0).toUpperCase() + str.substring(1); + }; + + var number = '(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))'; + var rgba = 'rgb[a]?\\((' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)(?:\\s*,\\s*(' + number + '))?\\)'; + var rgbaNoBackRefs = 'rgb[a]?\\((?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)(?:\\s*,\\s*(?:' + number + '))?\\)'; + var hsla = 'hsl[a]?\\((' + number + ')\\s*,\\s*(' + number + '[%])\\s*,\\s*(' + number + '[%])(?:\\s*,\\s*(' + number + '))?\\)'; + var hslaNoBackRefs = 'hsl[a]?\\((?:' + number + ')\\s*,\\s*(?:' + number + '[%])\\s*,\\s*(?:' + number + '[%])(?:\\s*,\\s*(?:' + number + '))?\\)'; + var hex3 = '\\#[0-9a-fA-F]{3}'; + var hex6 = '\\#[0-9a-fA-F]{6}'; + + var ascending = function ascending(a, b) { + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } + }; + var descending = function descending(a, b) { + return -1 * ascending(a, b); + }; + + var extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) { + var args = arguments; + + for (var i = 1; i < args.length; i++) { + var obj = args[i]; + + if (obj == null) { + continue; + } + + var keys = Object.keys(obj); + + for (var j = 0; j < keys.length; j++) { + var k = keys[j]; + tgt[k] = obj[k]; + } + } + + return tgt; + }; + + var hex2tuple = function hex2tuple(hex) { + if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') { + return; + } + + var shortHex = hex.length === 4; + var r, g, b; + var base = 16; + + if (shortHex) { + r = parseInt(hex[1] + hex[1], base); + g = parseInt(hex[2] + hex[2], base); + b = parseInt(hex[3] + hex[3], base); + } else { + r = parseInt(hex[1] + hex[2], base); + g = parseInt(hex[3] + hex[4], base); + b = parseInt(hex[5] + hex[6], base); + } + + return [r, g, b]; + }; // get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0) + + var hsl2tuple = function hsl2tuple(hsl) { + var ret; + var h, s, l, a, r, g, b; + + function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; + } + + var m = new RegExp('^' + hsla + '$').exec(hsl); + + if (m) { + // get hue + h = parseInt(m[1]); + + if (h < 0) { + h = (360 - -1 * h % 360) % 360; + } else if (h > 360) { + h = h % 360; + } + + h /= 360; // normalise on [0, 1] + + s = parseFloat(m[2]); + + if (s < 0 || s > 100) { + return; + } // saturation is [0, 100] + + + s = s / 100; // normalise on [0, 1] + + l = parseFloat(m[3]); + + if (l < 0 || l > 100) { + return; + } // lightness is [0, 100] + + + l = l / 100; // normalise on [0, 1] + + a = m[4]; + + if (a !== undefined) { + a = parseFloat(a); + + if (a < 0 || a > 1) { + return; + } // alpha is [0, 1] + + } // now, convert to rgb + // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript + + + if (s === 0) { + r = g = b = Math.round(l * 255); // achromatic + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = Math.round(255 * hue2rgb(p, q, h + 1 / 3)); + g = Math.round(255 * hue2rgb(p, q, h)); + b = Math.round(255 * hue2rgb(p, q, h - 1 / 3)); + } + + ret = [r, g, b, a]; + } + + return ret; + }; // get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0) + + var rgb2tuple = function rgb2tuple(rgb) { + var ret; + var m = new RegExp('^' + rgba + '$').exec(rgb); + + if (m) { + ret = []; + var isPct = []; + + for (var i = 1; i <= 3; i++) { + var channel = m[i]; + + if (channel[channel.length - 1] === '%') { + isPct[i] = true; + } + + channel = parseFloat(channel); + + if (isPct[i]) { + channel = channel / 100 * 255; // normalise to [0, 255] + } + + if (channel < 0 || channel > 255) { + return; + } // invalid channel value + + + ret.push(Math.floor(channel)); + } + + var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3]; + var allArePct = isPct[1] && isPct[2] && isPct[3]; + + if (atLeastOneIsPct && !allArePct) { + return; + } // must all be percent values if one is + + + var alpha = m[4]; + + if (alpha !== undefined) { + alpha = parseFloat(alpha); + + if (alpha < 0 || alpha > 1) { + return; + } // invalid alpha value + + + ret.push(alpha); + } + } + + return ret; + }; + var colorname2tuple = function colorname2tuple(color) { + return colors[color.toLowerCase()]; + }; + var color2tuple = function color2tuple(color) { + return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color); + }; + var colors = { + // special colour names + transparent: [0, 0, 0, 0], + // NB alpha === 0 + // regular colours + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + grey: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] + }; + + var setMap = function setMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + + for (var i = 0; i < l; i++) { + var key = keys[i]; + + if (plainObject(key)) { + throw Error('Tried to set map with object key'); + } + + if (i < keys.length - 1) { + // extend the map if necessary + if (obj[key] == null) { + obj[key] = {}; + } + + obj = obj[key]; + } else { + // set the value + obj[key] = options.value; + } + } + }; // gets the value in a map even if it's not built in places + + var getMap = function getMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + + for (var i = 0; i < l; i++) { + var key = keys[i]; + + if (plainObject(key)) { + throw Error('Tried to get map with object key'); + } + + obj = obj[key]; + + if (obj == null) { + return obj; + } + } + + return obj; + }; // deletes the entry in the map + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + var isObject_1 = isObject; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + var _freeGlobal = freeGlobal; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = _freeGlobal || freeSelf || Function('return this')(); + + var _root = root; + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = function() { + return _root.Date.now(); + }; + + var now_1 = now; + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + var _trimmedEndIndex = trimmedEndIndex; + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } + + var _baseTrim = baseTrim; + + /** Built-in value references. */ + var Symbol$1 = _root.Symbol; + + var _Symbol = Symbol$1; + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$5.toString; + + /** Built-in value references. */ + var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty$4.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; + } + + var _getRawTag = getRawTag; + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto$4.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + var _objectToString = objectToString; + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? _getRawTag(value) + : _objectToString(value); + } + + var _baseGetTag = baseGetTag; + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + var isObjectLike_1 = isObjectLike; + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike_1(value) && _baseGetTag(value) == symbolTag); + } + + var isSymbol_1 = isSymbol; + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol_1(value)) { + return NAN; + } + if (isObject_1(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject_1(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + var toNumber_1 = toNumber; + + /** Error message constants. */ + var FUNC_ERROR_TEXT$1 = 'Expected a function'; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$1); + } + wait = toNumber_1(wait) || 0; + if (isObject_1(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber_1(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now_1(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now_1()); + } + + function debounced() { + var time = now_1(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + var debounce_1 = debounce; + + var performance = window$1 ? window$1.performance : null; + var pnow = performance && performance.now ? function () { + return performance.now(); + } : function () { + return Date.now(); + }; + + var raf = function () { + if (window$1) { + if (window$1.requestAnimationFrame) { + return function (fn) { + window$1.requestAnimationFrame(fn); + }; + } else if (window$1.mozRequestAnimationFrame) { + return function (fn) { + window$1.mozRequestAnimationFrame(fn); + }; + } else if (window$1.webkitRequestAnimationFrame) { + return function (fn) { + window$1.webkitRequestAnimationFrame(fn); + }; + } else if (window$1.msRequestAnimationFrame) { + return function (fn) { + window$1.msRequestAnimationFrame(fn); + }; + } + } + + return function (fn) { + if (fn) { + setTimeout(function () { + fn(pnow()); + }, 1000 / 60); + } + }; + }(); + + var requestAnimationFrame = function requestAnimationFrame(fn) { + return raf(fn); + }; + var performanceNow = pnow; + + var DEFAULT_HASH_SEED = 9261; + var K = 65599; // 37 also works pretty well + + var DEFAULT_HASH_SEED_ALT = 5381; + var hashIterableInts = function hashIterableInts(iterator) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + var hash = seed; + var entry; + + for (;;) { + entry = iterator.next(); + + if (entry.done) { + break; + } + + hash = hash * K + entry.value | 0; + } + + return hash; + }; + var hashInt = function hashInt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + return seed * K + num | 0; + }; + var hashIntAlt = function hashIntAlt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT; + // djb2/string-hash + return (seed << 5) + seed + num | 0; + }; + var combineHashes = function combineHashes(hash1, hash2) { + return hash1 * 0x200000 + hash2; + }; + var combineHashesArray = function combineHashesArray(hashes) { + return hashes[0] * 0x200000 + hashes[1]; + }; + var hashArrays = function hashArrays(hashes1, hashes2) { + return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])]; + }; + var hashIntsArray = function hashIntsArray(ints, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = ints.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = ints[i++]; + } else { + entry.done = true; + } + + return entry; + } + }; + return hashIterableInts(iterator, seed); + }; + var hashString = function hashString(str, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = str.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = str.charCodeAt(i++); + } else { + entry.done = true; + } + + return entry; + } + }; + return hashIterableInts(iterator, seed); + }; + var hashStrings = function hashStrings() { + return hashStringsArray(arguments); + }; + var hashStringsArray = function hashStringsArray(strs) { + var hash; + + for (var i = 0; i < strs.length; i++) { + var str = strs[i]; + + if (i === 0) { + hash = hashString(str); + } else { + hash = hashString(str, hash); + } + } + + return hash; + }; + + /*global console */ + var warningsEnabled = true; + var warnSupported = console.warn != null; // eslint-disable-line no-console + + var traceSupported = console.trace != null; // eslint-disable-line no-console + + var MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; + var trueify = function trueify() { + return true; + }; + var falsify = function falsify() { + return false; + }; + var zeroify = function zeroify() { + return 0; + }; + var noop$1 = function noop() {}; + var error = function error(msg) { + throw new Error(msg); + }; + var warnings = function warnings(enabled) { + if (enabled !== undefined) { + warningsEnabled = !!enabled; + } else { + return warningsEnabled; + } + }; + var warn = function warn(msg) { + /* eslint-disable no-console */ + if (!warnings()) { + return; + } + + if (warnSupported) { + console.warn(msg); + } else { + console.log(msg); + + if (traceSupported) { + console.trace(); + } + } + }; + /* eslint-enable */ + + var clone = function clone(obj) { + return extend({}, obj); + }; // gets a shallow copy of the argument + + var copy = function copy(obj) { + if (obj == null) { + return obj; + } + + if (array(obj)) { + return obj.slice(); + } else if (plainObject(obj)) { + return clone(obj); + } else { + return obj; + } + }; + var copyArray$1 = function copyArray(arr) { + return arr.slice(); + }; + var uuid = function uuid(a, b + /* placeholders */ + ) { + for ( // loop :) + b = a = ''; // b - result , a - numeric letiable + a++ < 36; // + b += a * 51 & 52 // if "a" is not 9 or 14 or 19 or 24 + ? // return a random number or 4 + (a ^ 15 // if "a" is not 15 + ? // generate a random number from 0 to 15 + 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless "a" is 20, in which case a random number from 8 to 11 + : 4 // otherwise 4 + ).toString(16) : '-' // in other cases (if "a" is 9,14,19,24) insert "-" + ) { + } + + return b; + }; + var _staticEmptyObject = {}; + var staticEmptyObject = function staticEmptyObject() { + return _staticEmptyObject; + }; + var defaults$g = function defaults(_defaults) { + var keys = Object.keys(_defaults); + return function (opts) { + var filledOpts = {}; + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var optVal = opts == null ? undefined : opts[key]; + filledOpts[key] = optVal === undefined ? _defaults[key] : optVal; + } + + return filledOpts; + }; + }; + var removeFromArray = function removeFromArray(arr, ele, oneCopy) { + for (var i = arr.length - 1; i >= 0; i--) { + if (arr[i] === ele) { + arr.splice(i, 1); + + if (oneCopy) { + break; + } + } + } + }; + var clearArray = function clearArray(arr) { + arr.splice(0, arr.length); + }; + var push = function push(arr, otherArr) { + for (var i = 0; i < otherArr.length; i++) { + var el = otherArr[i]; + arr.push(el); + } + }; + var getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + return obj[propName]; + }; + var setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + obj[propName] = value; + }; + + /* global Map */ + var ObjectMap = /*#__PURE__*/function () { + function ObjectMap() { + _classCallCheck(this, ObjectMap); + + this._obj = {}; + } + + _createClass(ObjectMap, [{ + key: "set", + value: function set(key, val) { + this._obj[key] = val; + return this; + } + }, { + key: "delete", + value: function _delete(key) { + this._obj[key] = undefined; + return this; + } + }, { + key: "clear", + value: function clear() { + this._obj = {}; + } + }, { + key: "has", + value: function has(key) { + return this._obj[key] !== undefined; + } + }, { + key: "get", + value: function get(key) { + return this._obj[key]; + } + }]); + + return ObjectMap; + }(); + + var Map$2 = typeof Map !== 'undefined' ? Map : ObjectMap; + + /* global Set */ + var undef = "undefined" ; + + var ObjectSet = /*#__PURE__*/function () { + function ObjectSet(arrayOrObjectSet) { + _classCallCheck(this, ObjectSet); + + this._obj = Object.create(null); + this.size = 0; + + if (arrayOrObjectSet != null) { + var arr; + + if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) { + arr = arrayOrObjectSet.toArray(); + } else { + arr = arrayOrObjectSet; + } + + for (var i = 0; i < arr.length; i++) { + this.add(arr[i]); + } + } + } + + _createClass(ObjectSet, [{ + key: "instanceString", + value: function instanceString() { + return 'set'; + } + }, { + key: "add", + value: function add(val) { + var o = this._obj; + + if (o[val] !== 1) { + o[val] = 1; + this.size++; + } + } + }, { + key: "delete", + value: function _delete(val) { + var o = this._obj; + + if (o[val] === 1) { + o[val] = 0; + this.size--; + } + } + }, { + key: "clear", + value: function clear() { + this._obj = Object.create(null); + } + }, { + key: "has", + value: function has(val) { + return this._obj[val] === 1; + } + }, { + key: "toArray", + value: function toArray() { + var _this = this; + + return Object.keys(this._obj).filter(function (key) { + return _this.has(key); + }); + } + }, { + key: "forEach", + value: function forEach(callback, thisArg) { + return this.toArray().forEach(callback, thisArg); + } + }]); + + return ObjectSet; + }(); + + var Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet; + + var Element = function Element(cy, params) { + var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + if (cy === undefined || params === undefined || !core(cy)) { + error('An element must have a core reference and parameters set'); + return; + } + + var group = params.group; // try to automatically infer the group if unspecified + + if (group == null) { + if (params.data && params.data.source != null && params.data.target != null) { + group = 'edges'; + } else { + group = 'nodes'; + } + } // validate group + + + if (group !== 'nodes' && group !== 'edges') { + error('An element must be of type `nodes` or `edges`; you specified `' + group + '`'); + return; + } // make the element array-like, just like a collection + + + this.length = 1; + this[0] = this; // NOTE: when something is added here, add also to ele.json() + + var _p = this._private = { + cy: cy, + single: true, + // indicates this is an element + data: params.data || {}, + // data object + position: params.position || { + x: 0, + y: 0 + }, + // (x, y) position pair + autoWidth: undefined, + // width and height of nodes calculated by the renderer when set to special 'auto' value + autoHeight: undefined, + autoPadding: undefined, + compoundBoundsClean: false, + // whether the compound dimensions need to be recalculated the next time dimensions are read + listeners: [], + // array of bound listeners + group: group, + // string; 'nodes' or 'edges' + style: {}, + // properties as set by the style + rstyle: {}, + // properties for style sent from the renderer to the core + styleCxts: [], + // applied style contexts from the styler + styleKeys: {}, + // per-group keys of style property values + removed: true, + // whether it's inside the vis; true if removed (set true here since we call restore) + selected: params.selected ? true : false, + // whether it's selected + selectable: params.selectable === undefined ? true : params.selectable ? true : false, + // whether it's selectable + locked: params.locked ? true : false, + // whether the element is locked (cannot be moved) + grabbed: false, + // whether the element is grabbed by the mouse; renderer sets this privately + grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false, + // whether the element can be grabbed + pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false, + // whether the element has passthrough panning enabled + active: false, + // whether the element is active from user interaction + classes: new Set$1(), + // map ( className => true ) + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + rscratch: {}, + // object in which the renderer can store information + scratch: params.scratch || {}, + // scratch objects + edges: [], + // array of connected edges + children: [], + // array of children + parent: params.parent && params.parent.isNode() ? params.parent : null, + // parent ref + traversalCache: {}, + // cache of output of traversal functions + backgrounding: false, + // whether background images are loading + bbCache: null, + // cache of the current bounding box + bbCacheShift: { + x: 0, + y: 0 + }, + // shift applied to cached bb to be applied on next get + bodyBounds: null, + // bounds cache of element body, w/o overlay + overlayBounds: null, + // bounds cache of element body, including overlay + labelBounds: { + // bounds cache of labels + all: null, + source: null, + target: null, + main: null + }, + arrowBounds: { + // bounds cache of edge arrows + source: null, + target: null, + 'mid-source': null, + 'mid-target': null + } + }; + + if (_p.position.x == null) { + _p.position.x = 0; + } + + if (_p.position.y == null) { + _p.position.y = 0; + } // renderedPosition overrides if specified + + + if (params.renderedPosition) { + var rpos = params.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + _p.position = { + x: (rpos.x - pan.x) / zoom, + y: (rpos.y - pan.y) / zoom + }; + } + + var classes = []; + + if (array(params.classes)) { + classes = params.classes; + } else if (string(params.classes)) { + classes = params.classes.split(/\s+/); + } + + for (var i = 0, l = classes.length; i < l; i++) { + var cls = classes[i]; + + if (!cls || cls === '') { + continue; + } + + _p.classes.add(cls); + } + + this.createEmitter(); + var bypass = params.style || params.css; + + if (bypass) { + warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.'); + this.style(bypass); + } + + if (restore === undefined || restore) { + this.restore(); + } + }; + + var defineSearch = function defineSearch(params) { + params = { + bfs: params.bfs || !params.dfs, + dfs: params.dfs || !params.bfs + }; // from pseudocode on wikipedia + + return function searchFn(roots, fn, directed) { + var options; + + if (plainObject(roots) && !elementOrCollection(roots)) { + options = roots; + roots = options.roots || options.root; + fn = options.visit; + directed = options.directed; + } + + directed = arguments.length === 2 && !fn$6(fn) ? fn : directed; + fn = fn$6(fn) ? fn : function () {}; + var cy = this._private.cy; + var v = roots = string(roots) ? this.filter(roots) : roots; + var Q = []; + var connectedNodes = []; + var connectedBy = {}; + var id2depth = {}; + var V = {}; + var j = 0; + var found; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; // enqueue v + + + for (var i = 0; i < v.length; i++) { + var vi = v[i]; + var viId = vi.id(); + + if (vi.isNode()) { + Q.unshift(vi); + + if (params.bfs) { + V[viId] = true; + connectedNodes.push(vi); + } + + id2depth[viId] = 0; + } + } + + var _loop = function _loop() { + var v = params.bfs ? Q.shift() : Q.pop(); + var vId = v.id(); + + if (params.dfs) { + if (V[vId]) { + return "continue"; + } + + V[vId] = true; + connectedNodes.push(v); + } + + var depth = id2depth[vId]; + var prevEdge = connectedBy[vId]; + var src = prevEdge != null ? prevEdge.source() : null; + var tgt = prevEdge != null ? prevEdge.target() : null; + var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0]; + var ret = void 0; + ret = fn(v, prevEdge, prevNode, j++, depth); + + if (ret === true) { + found = v; + return "break"; + } + + if (ret === false) { + return "break"; + } + + var vwEdges = v.connectedEdges().filter(function (e) { + return (!directed || e.source().same(v)) && edges.has(e); + }); + + for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { + var e = vwEdges[_i2]; + var w = e.connectedNodes().filter(function (n) { + return !n.same(v) && nodes.has(n); + }); + var wId = w.id(); + + if (w.length !== 0 && !V[wId]) { + w = w[0]; + Q.push(w); + + if (params.bfs) { + V[wId] = true; + connectedNodes.push(w); + } + + connectedBy[wId] = e; + id2depth[wId] = id2depth[vId] + 1; + } + } + }; + + while (Q.length !== 0) { + var _ret = _loop(); + + if (_ret === "continue") continue; + if (_ret === "break") break; + } + + var connectedEles = cy.collection(); + + for (var _i = 0; _i < connectedNodes.length; _i++) { + var node = connectedNodes[_i]; + var edge = connectedBy[node.id()]; + + if (edge != null) { + connectedEles.push(edge); + } + + connectedEles.push(node); + } + + return { + path: cy.collection(connectedEles), + found: cy.collection(found) + }; + }; + }; // search, spanning trees, etc + + + var elesfn$v = { + breadthFirstSearch: defineSearch({ + bfs: true + }), + depthFirstSearch: defineSearch({ + dfs: true + }) + }; // nice, short mathematical alias + + elesfn$v.bfs = elesfn$v.breadthFirstSearch; + elesfn$v.dfs = elesfn$v.depthFirstSearch; + + var heap$1 = createCommonjsModule(function (module, exports) { + // Generated by CoffeeScript 1.8.0 + (function() { + var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup; + + floor = Math.floor, min = Math.min; + + + /* + Default comparison function to be used + */ + + defaultCmp = function(x, y) { + if (x < y) { + return -1; + } + if (x > y) { + return 1; + } + return 0; + }; + + + /* + Insert item x in list a, and keep it sorted assuming a is sorted. + + If x is already in a, insert it to the right of the rightmost x. + + Optional args lo (default 0) and hi (default a.length) bound the slice + of a to be searched. + */ + + insort = function(a, x, lo, hi, cmp) { + var mid; + if (lo == null) { + lo = 0; + } + if (cmp == null) { + cmp = defaultCmp; + } + if (lo < 0) { + throw new Error('lo must be non-negative'); + } + if (hi == null) { + hi = a.length; + } + while (lo < hi) { + mid = floor((lo + hi) / 2); + if (cmp(x, a[mid]) < 0) { + hi = mid; + } else { + lo = mid + 1; + } + } + return ([].splice.apply(a, [lo, lo - lo].concat(x)), x); + }; + + + /* + Push item onto heap, maintaining the heap invariant. + */ + + heappush = function(array, item, cmp) { + if (cmp == null) { + cmp = defaultCmp; + } + array.push(item); + return _siftdown(array, 0, array.length - 1, cmp); + }; + + + /* + Pop the smallest item off the heap, maintaining the heap invariant. + */ + + heappop = function(array, cmp) { + var lastelt, returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + lastelt = array.pop(); + if (array.length) { + returnitem = array[0]; + array[0] = lastelt; + _siftup(array, 0, cmp); + } else { + returnitem = lastelt; + } + return returnitem; + }; + + + /* + Pop and return the current smallest value, and add the new item. + + This is more efficient than heappop() followed by heappush(), and can be + more appropriate when using a fixed size heap. Note that the value + returned may be larger than item! That constrains reasonable use of + this routine unless written as part of a conditional replacement: + if item > array[0] + item = heapreplace(array, item) + */ + + heapreplace = function(array, item, cmp) { + var returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + returnitem = array[0]; + array[0] = item; + _siftup(array, 0, cmp); + return returnitem; + }; + + + /* + Fast version of a heappush followed by a heappop. + */ + + heappushpop = function(array, item, cmp) { + var _ref; + if (cmp == null) { + cmp = defaultCmp; + } + if (array.length && cmp(array[0], item) < 0) { + _ref = [array[0], item], item = _ref[0], array[0] = _ref[1]; + _siftup(array, 0, cmp); + } + return item; + }; + + + /* + Transform list into a heap, in-place, in O(array.length) time. + */ + + heapify = function(array, cmp) { + var i, _i, _len, _ref1, _results, _results1; + if (cmp == null) { + cmp = defaultCmp; + } + _ref1 = (function() { + _results1 = []; + for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); } + return _results1; + }).apply(this).reverse(); + _results = []; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + i = _ref1[_i]; + _results.push(_siftup(array, i, cmp)); + } + return _results; + }; + + + /* + Update the position of the given item in the heap. + This function should be called every time the item is being modified. + */ + + updateItem = function(array, item, cmp) { + var pos; + if (cmp == null) { + cmp = defaultCmp; + } + pos = array.indexOf(item); + if (pos === -1) { + return; + } + _siftdown(array, 0, pos, cmp); + return _siftup(array, pos, cmp); + }; + + + /* + Find the n largest elements in a dataset. + */ + + nlargest = function(array, n, cmp) { + var elem, result, _i, _len, _ref; + if (cmp == null) { + cmp = defaultCmp; + } + result = array.slice(0, n); + if (!result.length) { + return result; + } + heapify(result, cmp); + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + heappushpop(result, elem, cmp); + } + return result.sort(cmp).reverse(); + }; + + + /* + Find the n smallest elements in a dataset. + */ + + nsmallest = function(array, n, cmp) { + var elem, los, result, _i, _j, _len, _ref, _ref1, _results; + if (cmp == null) { + cmp = defaultCmp; + } + if (n * 10 <= array.length) { + result = array.slice(0, n).sort(cmp); + if (!result.length) { + return result; + } + los = result[result.length - 1]; + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + if (cmp(elem, los) < 0) { + insort(result, elem, 0, null, cmp); + result.pop(); + los = result[result.length - 1]; + } + } + return result; + } + heapify(array, cmp); + _results = []; + for (_j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) { + _results.push(heappop(array, cmp)); + } + return _results; + }; + + _siftdown = function(array, startpos, pos, cmp) { + var newitem, parent, parentpos; + if (cmp == null) { + cmp = defaultCmp; + } + newitem = array[pos]; + while (pos > startpos) { + parentpos = (pos - 1) >> 1; + parent = array[parentpos]; + if (cmp(newitem, parent) < 0) { + array[pos] = parent; + pos = parentpos; + continue; + } + break; + } + return array[pos] = newitem; + }; + + _siftup = function(array, pos, cmp) { + var childpos, endpos, newitem, rightpos, startpos; + if (cmp == null) { + cmp = defaultCmp; + } + endpos = array.length; + startpos = pos; + newitem = array[pos]; + childpos = 2 * pos + 1; + while (childpos < endpos) { + rightpos = childpos + 1; + if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) { + childpos = rightpos; + } + array[pos] = array[childpos]; + pos = childpos; + childpos = 2 * pos + 1; + } + array[pos] = newitem; + return _siftdown(array, startpos, pos, cmp); + }; + + Heap = (function() { + Heap.push = heappush; + + Heap.pop = heappop; + + Heap.replace = heapreplace; + + Heap.pushpop = heappushpop; + + Heap.heapify = heapify; + + Heap.updateItem = updateItem; + + Heap.nlargest = nlargest; + + Heap.nsmallest = nsmallest; + + function Heap(cmp) { + this.cmp = cmp != null ? cmp : defaultCmp; + this.nodes = []; + } + + Heap.prototype.push = function(x) { + return heappush(this.nodes, x, this.cmp); + }; + + Heap.prototype.pop = function() { + return heappop(this.nodes, this.cmp); + }; + + Heap.prototype.peek = function() { + return this.nodes[0]; + }; + + Heap.prototype.contains = function(x) { + return this.nodes.indexOf(x) !== -1; + }; + + Heap.prototype.replace = function(x) { + return heapreplace(this.nodes, x, this.cmp); + }; + + Heap.prototype.pushpop = function(x) { + return heappushpop(this.nodes, x, this.cmp); + }; + + Heap.prototype.heapify = function() { + return heapify(this.nodes, this.cmp); + }; + + Heap.prototype.updateItem = function(x) { + return updateItem(this.nodes, x, this.cmp); + }; + + Heap.prototype.clear = function() { + return this.nodes = []; + }; + + Heap.prototype.empty = function() { + return this.nodes.length === 0; + }; + + Heap.prototype.size = function() { + return this.nodes.length; + }; + + Heap.prototype.clone = function() { + var heap; + heap = new Heap(); + heap.nodes = this.nodes.slice(0); + return heap; + }; + + Heap.prototype.toArray = function() { + return this.nodes.slice(0); + }; + + Heap.prototype.insert = Heap.prototype.push; + + Heap.prototype.top = Heap.prototype.peek; + + Heap.prototype.front = Heap.prototype.peek; + + Heap.prototype.has = Heap.prototype.contains; + + Heap.prototype.copy = Heap.prototype.clone; + + return Heap; + + })(); + + (function(root, factory) { + { + return module.exports = factory(); + } + })(this, function() { + return Heap; + }); + + }).call(commonjsGlobal); + }); + + var heap = heap$1; + + var dijkstraDefaults = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false + }); + var elesfn$u = { + dijkstra: function dijkstra(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + weight: args[1], + directed: args[2] + }; + } + + var _dijkstraDefaults = dijkstraDefaults(options), + root = _dijkstraDefaults.root, + weight = _dijkstraDefaults.weight, + directed = _dijkstraDefaults.directed; + + var eles = this; + var weightFn = weight; + var source = string(root) ? this.filter(root)[0] : root[0]; + var dist = {}; + var prev = {}; + var knownDist = {}; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + edges.unmergeBy(function (ele) { + return ele.isLoop(); + }); + + var getDist = function getDist(node) { + return dist[node.id()]; + }; + + var setDist = function setDist(node, d) { + dist[node.id()] = d; + Q.updateItem(node); + }; + + var Q = new heap(function (a, b) { + return getDist(a) - getDist(b); + }); + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + dist[node.id()] = node.same(source) ? 0 : Infinity; + Q.push(node); + } + + var distBetween = function distBetween(u, v) { + var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges); + var smallestDistance = Infinity; + var smallestEdge; + + for (var _i = 0; _i < uvs.length; _i++) { + var edge = uvs[_i]; + + var _weight = weightFn(edge); + + if (_weight < smallestDistance || !smallestEdge) { + smallestDistance = _weight; + smallestEdge = edge; + } + } + + return { + edge: smallestEdge, + dist: smallestDistance + }; + }; + + while (Q.size() > 0) { + var u = Q.pop(); + var smalletsDist = getDist(u); + var uid = u.id(); + knownDist[uid] = smalletsDist; + + if (smalletsDist === Infinity) { + continue; + } + + var neighbors = u.neighborhood().intersect(nodes); + + for (var _i2 = 0; _i2 < neighbors.length; _i2++) { + var v = neighbors[_i2]; + var vid = v.id(); + var vDist = distBetween(u, v); + var alt = smalletsDist + vDist.dist; + + if (alt < getDist(v)) { + setDist(v, alt); + prev[vid] = { + node: u, + edge: vDist.edge + }; + } + } // for + + } // while + + + return { + distanceTo: function distanceTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + return knownDist[target.id()]; + }, + pathTo: function pathTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + var S = []; + var u = target; + var uid = u.id(); + + if (target.length > 0) { + S.unshift(target); + + while (prev[uid]) { + var p = prev[uid]; + S.unshift(p.edge); + S.unshift(p.node); + u = p.node; + uid = u.id(); + } + } + + return eles.spawn(S); + } + }; + } + }; + + var elesfn$t = { + // kruskal's algorithm (finds min spanning tree, assuming undirected graph) + // implemented from pseudocode from wikipedia + kruskal: function kruskal(weightFn) { + weightFn = weightFn || function (edge) { + return 1; + }; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var numNodes = nodes.length; + var forest = new Array(numNodes); + var A = nodes; // assumes byGroup() creates new collections that can be safely mutated + + var findSetIndex = function findSetIndex(ele) { + for (var i = 0; i < forest.length; i++) { + var eles = forest[i]; + + if (eles.has(ele)) { + return i; + } + } + }; // start with one forest per node + + + for (var i = 0; i < numNodes; i++) { + forest[i] = this.spawn(nodes[i]); + } + + var S = edges.sort(function (a, b) { + return weightFn(a) - weightFn(b); + }); + + for (var _i = 0; _i < S.length; _i++) { + var edge = S[_i]; + var u = edge.source()[0]; + var v = edge.target()[0]; + var setUIndex = findSetIndex(u); + var setVIndex = findSetIndex(v); + var setU = forest[setUIndex]; + var setV = forest[setVIndex]; + + if (setUIndex !== setVIndex) { + A.merge(edge); // combine forests for u and v + + setU.merge(setV); + forest.splice(setVIndex, 1); + } + } + + return A; + } + }; + + var aStarDefaults = defaults$g({ + root: null, + goal: null, + weight: function weight(edge) { + return 1; + }, + heuristic: function heuristic(edge) { + return 0; + }, + directed: false + }); + var elesfn$s = { + // Implemented from pseudocode from wikipedia + aStar: function aStar(options) { + var cy = this.cy(); + + var _aStarDefaults = aStarDefaults(options), + root = _aStarDefaults.root, + goal = _aStarDefaults.goal, + heuristic = _aStarDefaults.heuristic, + directed = _aStarDefaults.directed, + weight = _aStarDefaults.weight; + + root = cy.collection(root)[0]; + goal = cy.collection(goal)[0]; + var sid = root.id(); + var tid = goal.id(); + var gScore = {}; + var fScore = {}; + var closedSetIds = {}; + var openSet = new heap(function (a, b) { + return fScore[a.id()] - fScore[b.id()]; + }); + var openSetIds = new Set$1(); + var cameFrom = {}; + var cameFromEdge = {}; + + var addToOpenSet = function addToOpenSet(ele, id) { + openSet.push(ele); + openSetIds.add(id); + }; + + var cMin, cMinId; + + var popFromOpenSet = function popFromOpenSet() { + cMin = openSet.pop(); + cMinId = cMin.id(); + openSetIds["delete"](cMinId); + }; + + var isInOpenSet = function isInOpenSet(id) { + return openSetIds.has(id); + }; + + addToOpenSet(root, sid); + gScore[sid] = 0; + fScore[sid] = heuristic(root); // Counter + + var steps = 0; // Main loop + + while (openSet.size() > 0) { + popFromOpenSet(); + steps++; // If we've found our goal, then we are done + + if (cMinId === tid) { + var path = []; + var pathNode = goal; + var pathNodeId = tid; + var pathEdge = cameFromEdge[pathNodeId]; + + for (;;) { + path.unshift(pathNode); + + if (pathEdge != null) { + path.unshift(pathEdge); + } + + pathNode = cameFrom[pathNodeId]; + + if (pathNode == null) { + break; + } + + pathNodeId = pathNode.id(); + pathEdge = cameFromEdge[pathNodeId]; + } + + return { + found: true, + distance: gScore[cMinId], + path: this.spawn(path), + steps: steps + }; + } // Add cMin to processed nodes + + + closedSetIds[cMinId] = true; // Update scores for neighbors of cMin + // Take into account if graph is directed or not + + var vwEdges = cMin._private.edges; + + for (var i = 0; i < vwEdges.length; i++) { + var e = vwEdges[i]; // edge must be in set of calling eles + + if (!this.hasElementWithId(e.id())) { + continue; + } // cMin must be the source of edge if directed + + + if (directed && e.data('source') !== cMinId) { + continue; + } + + var wSrc = e.source(); + var wTgt = e.target(); + var w = wSrc.id() !== cMinId ? wSrc : wTgt; + var wid = w.id(); // node must be in set of calling eles + + if (!this.hasElementWithId(wid)) { + continue; + } // if node is in closedSet, ignore it + + + if (closedSetIds[wid]) { + continue; + } // New tentative score for node w + + + var tempScore = gScore[cMinId] + weight(e); // Update gScore for node w if: + // w not present in openSet + // OR + // tentative gScore is less than previous value + // w not in openSet + + if (!isInOpenSet(wid)) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + addToOpenSet(w, wid); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + continue; + } // w already in openSet, but with greater gScore + + + if (tempScore < gScore[wid]) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + } + } // End of neighbors update + + } // End of main loop + // If we've reached here, then we've not reached our goal + + + return { + found: false, + distance: undefined, + path: undefined, + steps: steps + }; + } + }; // elesfn + + var floydWarshallDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false + }); + var elesfn$r = { + // Implemented from pseudocode from wikipedia + floydWarshall: function floydWarshall(options) { + var cy = this.cy(); + + var _floydWarshallDefault = floydWarshallDefaults(options), + weight = _floydWarshallDefault.weight, + directed = _floydWarshallDefault.directed; + + var weightFn = weight; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var N = nodes.length; + var Nsq = N * N; + + var indexOf = function indexOf(node) { + return nodes.indexOf(node); + }; + + var atIndex = function atIndex(i) { + return nodes[i]; + }; // Initialize distance matrix + + + var dist = new Array(Nsq); + + for (var n = 0; n < Nsq; n++) { + var j = n % N; + var i = (n - j) / N; + + if (i === j) { + dist[n] = 0; + } else { + dist[n] = Infinity; + } + } // Initialize matrix used for path reconstruction + // Initialize distance matrix + + + var next = new Array(Nsq); + var edgeNext = new Array(Nsq); // Process edges + + for (var _i = 0; _i < edges.length; _i++) { + var edge = edges[_i]; + var src = edge.source()[0]; + var tgt = edge.target()[0]; + + if (src === tgt) { + continue; + } // exclude loops + + + var s = indexOf(src); + var t = indexOf(tgt); + var st = s * N + t; // source to target index + + var _weight = weightFn(edge); // Check if already process another edge between same 2 nodes + + + if (dist[st] > _weight) { + dist[st] = _weight; + next[st] = t; + edgeNext[st] = edge; + } // If undirected graph, process 'reversed' edge + + + if (!directed) { + var ts = t * N + s; // target to source index + + if (!directed && dist[ts] > _weight) { + dist[ts] = _weight; + next[ts] = s; + edgeNext[ts] = edge; + } + } + } // Main loop + + + for (var k = 0; k < N; k++) { + for (var _i2 = 0; _i2 < N; _i2++) { + var ik = _i2 * N + k; + + for (var _j = 0; _j < N; _j++) { + var ij = _i2 * N + _j; + var kj = k * N + _j; + + if (dist[ik] + dist[kj] < dist[ij]) { + dist[ij] = dist[ik] + dist[kj]; + next[ij] = next[ik]; + } + } + } + } + + var getArgEle = function getArgEle(ele) { + return (string(ele) ? cy.filter(ele) : ele)[0]; + }; + + var indexOfArgEle = function indexOfArgEle(ele) { + return indexOf(getArgEle(ele)); + }; + + var res = { + distance: function distance(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + return dist[i * N + j]; + }, + path: function path(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + var fromNode = atIndex(i); + + if (i === j) { + return fromNode.collection(); + } + + if (next[i * N + j] == null) { + return cy.collection(); + } + + var path = cy.collection(); + var prev = i; + var edge; + path.merge(fromNode); + + while (i !== j) { + prev = i; + i = next[i * N + j]; + edge = edgeNext[prev * N + i]; + path.merge(edge); + path.merge(atIndex(i)); + } + + return path; + } + }; + return res; + } // floydWarshall + + }; // elesfn + + var bellmanFordDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false, + root: null + }); + var elesfn$q = { + // Implemented from pseudocode from wikipedia + bellmanFord: function bellmanFord(options) { + var _this = this; + + var _bellmanFordDefaults = bellmanFordDefaults(options), + weight = _bellmanFordDefaults.weight, + directed = _bellmanFordDefaults.directed, + root = _bellmanFordDefaults.root; + + var weightFn = weight; + var eles = this; + var cy = this.cy(); + + var _this$byGroup = this.byGroup(), + edges = _this$byGroup.edges, + nodes = _this$byGroup.nodes; + + var numNodes = nodes.length; + var infoMap = new Map$2(); + var hasNegativeWeightCycle = false; + var negativeWeightCycles = []; + root = cy.collection(root)[0]; // in case selector passed + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numEdges = edges.length; + + var getInfo = function getInfo(node) { + var obj = infoMap.get(node.id()); + + if (!obj) { + obj = {}; + infoMap.set(node.id(), obj); + } + + return obj; + }; + + var getNodeFromTo = function getNodeFromTo(to) { + return (string(to) ? cy.$(to) : to)[0]; + }; + + var distanceTo = function distanceTo(to) { + return getInfo(getNodeFromTo(to)).dist; + }; + + var pathTo = function pathTo(to) { + var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root; + var end = getNodeFromTo(to); + var path = []; + var node = end; + + for (;;) { + if (node == null) { + return _this.spawn(); + } + + var _getInfo = getInfo(node), + edge = _getInfo.edge, + pred = _getInfo.pred; + + path.unshift(node[0]); + + if (node.same(thisStart) && path.length > 0) { + break; + } + + if (edge != null) { + path.unshift(edge); + } + + node = pred; + } + + return eles.spawn(path); + }; // Initializations { dist, pred, edge } + + + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; + var info = getInfo(node); + + if (node.same(root)) { + info.dist = 0; + } else { + info.dist = Infinity; + } + + info.pred = null; + info.edge = null; + } // Edges relaxation + + + var replacedEdge = false; + + var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) { + var dist = info1.dist + weight; + + if (dist < info2.dist && !edge.same(info1.edge)) { + info2.dist = dist; + info2.pred = node1; + info2.edge = edge; + replacedEdge = true; + } + }; + + for (var _i = 1; _i < numNodes; _i++) { + replacedEdge = false; + + for (var e = 0; e < numEdges; e++) { + var edge = edges[e]; + var src = edge.source(); + var tgt = edge.target(); + + var _weight = weightFn(edge); + + var srcInfo = getInfo(src); + var tgtInfo = getInfo(tgt); + checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); // If undirected graph, we need to take into account the 'reverse' edge + + if (!directed) { + checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight); + } + } + + if (!replacedEdge) { + break; + } + } + + if (replacedEdge) { + // Check for negative weight cycles + var negativeWeightCycleIds = []; + + for (var _e = 0; _e < numEdges; _e++) { + var _edge = edges[_e]; + + var _src = _edge.source(); + + var _tgt = _edge.target(); + + var _weight2 = weightFn(_edge); + + var srcDist = getInfo(_src).dist; + var tgtDist = getInfo(_tgt).dist; + + if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) { + if (!hasNegativeWeightCycle) { + warn('Graph contains a negative weight cycle for Bellman-Ford'); + hasNegativeWeightCycle = true; + } + + if (options.findNegativeWeightCycles !== false) { + var negativeNodes = []; + + if (srcDist + _weight2 < tgtDist) { + negativeNodes.push(_src); + } + + if (!directed && tgtDist + _weight2 < srcDist) { + negativeNodes.push(_tgt); + } + + var numNegativeNodes = negativeNodes.length; + + for (var n = 0; n < numNegativeNodes; n++) { + var start = negativeNodes[n]; + var cycle = [start]; + cycle.push(getInfo(start).edge); + var _node = getInfo(start).pred; + + while (cycle.indexOf(_node) === -1) { + cycle.push(_node); + cycle.push(getInfo(_node).edge); + _node = getInfo(_node).pred; + } + + cycle = cycle.slice(cycle.indexOf(_node)); + var smallestId = cycle[0].id(); + var smallestIndex = 0; + + for (var c = 2; c < cycle.length; c += 2) { + if (cycle[c].id() < smallestId) { + smallestId = cycle[c].id(); + smallestIndex = c; + } + } + + cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex)); + cycle.push(cycle[0]); + var cycleId = cycle.map(function (el) { + return el.id(); + }).join(","); + + if (negativeWeightCycleIds.indexOf(cycleId) === -1) { + negativeWeightCycles.push(eles.spawn(cycle)); + negativeWeightCycleIds.push(cycleId); + } + } + } else { + break; + } + } + } + } + + return { + distanceTo: distanceTo, + pathTo: pathTo, + hasNegativeWeightCycle: hasNegativeWeightCycle, + negativeWeightCycles: negativeWeightCycles + }; + } // bellmanFord + + }; // elesfn + + var sqrt2 = Math.sqrt(2); // Function which colapses 2 (meta) nodes into one + // Updates the remaining edge lists + // Receives as a paramater the edge which causes the collapse + + var collapse = function collapse(edgeIndex, nodeMap, remainingEdges) { + if (remainingEdges.length === 0) { + error("Karger-Stein must be run on a connected (sub)graph"); + } + + var edgeInfo = remainingEdges[edgeIndex]; + var sourceIn = edgeInfo[1]; + var targetIn = edgeInfo[2]; + var partition1 = nodeMap[sourceIn]; + var partition2 = nodeMap[targetIn]; + var newEdges = remainingEdges; // re-use array + // Delete all edges between partition1 and partition2 + + for (var i = newEdges.length - 1; i >= 0; i--) { + var edge = newEdges[i]; + var src = edge[1]; + var tgt = edge[2]; + + if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) { + newEdges.splice(i, 1); + } + } // All edges pointing to partition2 should now point to partition1 + + + for (var _i = 0; _i < newEdges.length; _i++) { + var _edge = newEdges[_i]; + + if (_edge[1] === partition2) { + // Check source + newEdges[_i] = _edge.slice(); // copy + + newEdges[_i][1] = partition1; + } else if (_edge[2] === partition2) { + // Check target + newEdges[_i] = _edge.slice(); // copy + + newEdges[_i][2] = partition1; + } + } // Move all nodes from partition2 to partition1 + + + for (var _i2 = 0; _i2 < nodeMap.length; _i2++) { + if (nodeMap[_i2] === partition2) { + nodeMap[_i2] = partition1; + } + } + + return newEdges; + }; // Contracts a graph until we reach a certain number of meta nodes + + + var contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) { + while (size > sizeLimit) { + // Choose an edge randomly + var edgeIndex = Math.floor(Math.random() * remainingEdges.length); // Collapse graph based on edge + + remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); + size--; + } + + return remainingEdges; + }; + + var elesfn$p = { + // Computes the minimum cut of an undirected graph + // Returns the correct answer with high probability + kargerStein: function kargerStein() { + var _this = this; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numNodes = nodes.length; + var numEdges = edges.length; + var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2)); + var stopSize = Math.floor(numNodes / sqrt2); + + if (numNodes < 2) { + error('At least 2 nodes are required for Karger-Stein algorithm'); + return undefined; + } // Now store edge destination as indexes + // Format for each edge (edge index, source node index, target node index) + + + var edgeIndexes = []; + + for (var i = 0; i < numEdges; i++) { + var e = edges[i]; + edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]); + } // We will store the best cut found here + + + var minCutSize = Infinity; + var minCutEdgeIndexes = []; + var minCutNodeMap = new Array(numNodes); // Initial meta node partition + + var metaNodeMap = new Array(numNodes); + var metaNodeMap2 = new Array(numNodes); + + var copyNodesMap = function copyNodesMap(from, to) { + for (var _i3 = 0; _i3 < numNodes; _i3++) { + to[_i3] = from[_i3]; + } + }; // Main loop + + + for (var iter = 0; iter <= numIter; iter++) { + // Reset meta node partition + for (var _i4 = 0; _i4 < numNodes; _i4++) { + metaNodeMap[_i4] = _i4; + } // Contract until stop point (stopSize nodes) + + + var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize); + var edgesState2 = edgesState.slice(); // copy + // Create a copy of the colapsed nodes state + + copyNodesMap(metaNodeMap, metaNodeMap2); // Run 2 iterations starting in the stop state + + var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2); + var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); // Is any of the 2 results the best cut so far? + + if (res1.length <= res2.length && res1.length < minCutSize) { + minCutSize = res1.length; + minCutEdgeIndexes = res1; + copyNodesMap(metaNodeMap, minCutNodeMap); + } else if (res2.length <= res1.length && res2.length < minCutSize) { + minCutSize = res2.length; + minCutEdgeIndexes = res2; + copyNodesMap(metaNodeMap2, minCutNodeMap); + } + } // end of main loop + // Construct result + + + var cut = this.spawn(minCutEdgeIndexes.map(function (e) { + return edges[e[0]]; + })); + var partition1 = this.spawn(); + var partition2 = this.spawn(); // traverse metaNodeMap for best cut + + var witnessNodePartition = minCutNodeMap[0]; + + for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) { + var partitionId = minCutNodeMap[_i5]; + var node = nodes[_i5]; + + if (partitionId === witnessNodePartition) { + partition1.merge(node); + } else { + partition2.merge(node); + } + } // construct components corresponding to each disjoint subset of nodes + + + var constructComponent = function constructComponent(subset) { + var component = _this.spawn(); + + subset.forEach(function (node) { + component.merge(node); + node.connectedEdges().forEach(function (edge) { + // ensure edge is within calling collection and edge is not in cut + if (_this.contains(edge) && !cut.contains(edge)) { + component.merge(edge); + } + }); + }); + return component; + }; + + var components = [constructComponent(partition1), constructComponent(partition2)]; + var ret = { + cut: cut, + components: components, + // n.b. partitions are included to be compatible with the old api spec + // (could be removed in a future major version) + partition1: partition1, + partition2: partition2 + }; + return ret; + } + }; // elesfn + + var copyPosition = function copyPosition(p) { + return { + x: p.x, + y: p.y + }; + }; + var modelToRenderedPosition = function modelToRenderedPosition(p, zoom, pan) { + return { + x: p.x * zoom + pan.x, + y: p.y * zoom + pan.y + }; + }; + var renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) { + return { + x: (p.x - pan.x) / zoom, + y: (p.y - pan.y) / zoom + }; + }; + var array2point = function array2point(arr) { + return { + x: arr[0], + y: arr[1] + }; + }; + var min = function min(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var min = Infinity; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + min = Math.min(val, min); + } + } + + return min; + }; + var max = function max(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var max = -Infinity; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + max = Math.max(val, max); + } + } + + return max; + }; + var mean = function mean(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var total = 0; + var n = 0; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + total += val; + n++; + } + } + + return total / n; + }; + var median = function median(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + + if (copy) { + arr = arr.slice(begin, end); + } else { + if (end < arr.length) { + arr.splice(end, arr.length - end); + } + + if (begin > 0) { + arr.splice(0, begin); + } + } // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start + + + var off = 0; // offset from non-finite values + + for (var i = arr.length - 1; i >= 0; i--) { + var v = arr[i]; + + if (includeHoles) { + if (!isFinite(v)) { + arr[i] = -Infinity; + off++; + } + } else { + // just remove it if we don't want to consider holes + arr.splice(i, 1); + } + } + + if (sort) { + arr.sort(function (a, b) { + return a - b; + }); // requires copy = true if you don't want to change the orig + } + + var len = arr.length; + var mid = Math.floor(len / 2); + + if (len % 2 !== 0) { + return arr[mid + 1 + off]; + } else { + return (arr[mid - 1 + off] + arr[mid + off]) / 2; + } + }; + var deg2rad = function deg2rad(deg) { + return Math.PI * deg / 180; + }; + var getAngleFromDisp = function getAngleFromDisp(dispX, dispY) { + return Math.atan2(dispY, dispX) - Math.PI / 2; + }; + var log2 = Math.log2 || function (n) { + return Math.log(n) / Math.log(2); + }; + var signum = function signum(x) { + if (x > 0) { + return 1; + } else if (x < 0) { + return -1; + } else { + return 0; + } + }; + var dist = function dist(p1, p2) { + return Math.sqrt(sqdist(p1, p2)); + }; + var sqdist = function sqdist(p1, p2) { + var dx = p2.x - p1.x; + var dy = p2.y - p1.y; + return dx * dx + dy * dy; + }; + var inPlaceSumNormalize = function inPlaceSumNormalize(v) { + var length = v.length; // First, get sum of all elements + + var total = 0; + + for (var i = 0; i < length; i++) { + total += v[i]; + } // Now, divide each by the sum of all elements + + + for (var _i = 0; _i < length; _i++) { + v[_i] = v[_i] / total; + } + + return v; + }; + + var qbezierAt = function qbezierAt(p0, p1, p2, t) { + return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2; + }; + var qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) { + return { + x: qbezierAt(p0.x, p1.x, p2.x, t), + y: qbezierAt(p0.y, p1.y, p2.y, t) + }; + }; + var lineAt = function lineAt(p0, p1, t, d) { + var vec = { + x: p1.x - p0.x, + y: p1.y - p0.y + }; + var vecDist = dist(p0, p1); + var normVec = { + x: vec.x / vecDist, + y: vec.y / vecDist + }; + t = t == null ? 0 : t; + d = d != null ? d : t * vecDist; + return { + x: p0.x + normVec.x * d, + y: p0.y + normVec.y * d + }; + }; + var bound = function bound(min, val, max) { + return Math.max(min, Math.min(max, val)); + }; // makes a full bb (x1, y1, x2, y2, w, h) from implicit params + + var makeBoundingBox = function makeBoundingBox(bb) { + if (bb == null) { + return { + x1: Infinity, + y1: Infinity, + x2: -Infinity, + y2: -Infinity, + w: 0, + h: 0 + }; + } else if (bb.x1 != null && bb.y1 != null) { + if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x2, + y2: bb.y2, + w: bb.x2 - bb.x1, + h: bb.y2 - bb.y1 + }; + } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x1 + bb.w, + y2: bb.y1 + bb.h, + w: bb.w, + h: bb.h + }; + } + } + }; + var copyBoundingBox = function copyBoundingBox(bb) { + return { + x1: bb.x1, + x2: bb.x2, + w: bb.w, + y1: bb.y1, + y2: bb.y2, + h: bb.h + }; + }; + var clearBoundingBox = function clearBoundingBox(bb) { + bb.x1 = Infinity; + bb.y1 = Infinity; + bb.x2 = -Infinity; + bb.y2 = -Infinity; + bb.w = 0; + bb.h = 0; + }; + var updateBoundingBox = function updateBoundingBox(bb1, bb2) { + // update bb1 with bb2 bounds + bb1.x1 = Math.min(bb1.x1, bb2.x1); + bb1.x2 = Math.max(bb1.x2, bb2.x2); + bb1.w = bb1.x2 - bb1.x1; + bb1.y1 = Math.min(bb1.y1, bb2.y1); + bb1.y2 = Math.max(bb1.y2, bb2.y2); + bb1.h = bb1.y2 - bb1.y1; + }; + var expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) { + bb.x1 = Math.min(bb.x1, x); + bb.x2 = Math.max(bb.x2, x); + bb.w = bb.x2 - bb.x1; + bb.y1 = Math.min(bb.y1, y); + bb.y2 = Math.max(bb.y2, y); + bb.h = bb.y2 - bb.y1; + }; + var expandBoundingBox = function expandBoundingBox(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + bb.x1 -= padding; + bb.x2 += padding; + bb.y1 -= padding; + bb.y2 += padding; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; + }; + var expandBoundingBoxSides = function expandBoundingBoxSides(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0]; + var top, right, bottom, left; + + if (padding.length === 1) { + top = right = bottom = left = padding[0]; + } else if (padding.length === 2) { + top = bottom = padding[0]; + left = right = padding[1]; + } else if (padding.length === 4) { + var _padding = _slicedToArray(padding, 4); + + top = _padding[0]; + right = _padding[1]; + bottom = _padding[2]; + left = _padding[3]; + } + + bb.x1 -= left; + bb.x2 += right; + bb.y1 -= top; + bb.y2 += bottom; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; + }; + + var assignBoundingBox = function assignBoundingBox(bb1, bb2) { + bb1.x1 = bb2.x1; + bb1.y1 = bb2.y1; + bb1.x2 = bb2.x2; + bb1.y2 = bb2.y2; + bb1.w = bb1.x2 - bb1.x1; + bb1.h = bb1.y2 - bb1.y1; + }; + var boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) { + // case: one bb to right of other + if (bb1.x1 > bb2.x2) { + return false; + } + + if (bb2.x1 > bb1.x2) { + return false; + } // case: one bb to left of other + + + if (bb1.x2 < bb2.x1) { + return false; + } + + if (bb2.x2 < bb1.x1) { + return false; + } // case: one bb above other + + + if (bb1.y2 < bb2.y1) { + return false; + } + + if (bb2.y2 < bb1.y1) { + return false; + } // case: one bb below other + + + if (bb1.y1 > bb2.y2) { + return false; + } + + if (bb2.y1 > bb1.y2) { + return false; + } // otherwise, must have some overlap + + + return true; + }; + var inBoundingBox = function inBoundingBox(bb, x, y) { + return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2; + }; + var pointInBoundingBox = function pointInBoundingBox(bb, pt) { + return inBoundingBox(bb, pt.x, pt.y); + }; + var boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) { + return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2); + }; + var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) { + var cornerRadius = getRoundRectangleRadius(width, height); + var halfWidth = width / 2; + var halfHeight = height / 2; // Check intersections with straight line segments + + var straightLineIntersections; // Top segment, left to right + + { + var topStartX = nodeX - halfWidth + cornerRadius - padding; + var topStartY = nodeY - halfHeight - padding; + var topEndX = nodeX + halfWidth - cornerRadius + padding; + var topEndY = topStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Right segment, top to bottom + + { + var rightStartX = nodeX + halfWidth + padding; + var rightStartY = nodeY - halfHeight + cornerRadius - padding; + var rightEndX = rightStartX; + var rightEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Bottom segment, left to right + + { + var bottomStartX = nodeX - halfWidth + cornerRadius - padding; + var bottomStartY = nodeY + halfHeight + padding; + var bottomEndX = nodeX + halfWidth - cornerRadius + padding; + var bottomEndY = bottomStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Left segment, top to bottom + + { + var leftStartX = nodeX - halfWidth - padding; + var leftStartY = nodeY - halfHeight + cornerRadius - padding; + var leftEndX = leftStartX; + var leftEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Check intersections with arc segments + + var arcIntersections; // Top Left + + { + var topLeftCenterX = nodeX - halfWidth + cornerRadius; + var topLeftCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Top Right + + { + var topRightCenterX = nodeX + halfWidth - cornerRadius; + var topRightCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Bottom Right + + { + var bottomRightCenterX = nodeX + halfWidth - cornerRadius; + var bottomRightCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Bottom Left + + { + var bottomLeftCenterX = nodeX - halfWidth + cornerRadius; + var bottomLeftCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + return []; // if nothing + }; + var inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) { + var t = tolerance; + var x1 = Math.min(lx1, lx2); + var x2 = Math.max(lx1, lx2); + var y1 = Math.min(ly1, ly2); + var y2 = Math.max(ly1, ly2); + return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t; + }; + var inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) { + var bb = { + x1: Math.min(x1, x3, x2) - tolerance, + x2: Math.max(x1, x3, x2) + tolerance, + y1: Math.min(y1, y3, y2) - tolerance, + y2: Math.max(y1, y3, y2) + tolerance + }; // if outside the rough bounding box for the bezier, then it can't be a hit + + if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) { + // console.log('bezier out of rough bb') + return false; + } else { + // console.log('do more expensive check'); + return true; + } + }; + var solveQuadratic = function solveQuadratic(a, b, c, val) { + c -= val; + var r = b * b - 4 * a * c; + + if (r < 0) { + return []; + } + + var sqrtR = Math.sqrt(r); + var denom = 2 * a; + var root1 = (-b + sqrtR) / denom; + var root2 = (-b - sqrtR) / denom; + return [root1, root2]; + }; + var solveCubic = function solveCubic(a, b, c, d, result) { + // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where + // r is the real component, i is the imaginary component + // An implementation of the Cardano method from the year 1545 + // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots + var epsilon = 0.00001; // avoid division by zero while keeping the overall expression close in value + + if (a === 0) { + a = epsilon; + } + + b /= a; + c /= a; + d /= a; + var discriminant, q, r, dum1, s, t, term1, r13; + q = (3.0 * c - b * b) / 9.0; + r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b)); + r /= 54.0; + discriminant = q * q * q + r * r; + result[1] = 0; + term1 = b / 3.0; + + if (discriminant > 0) { + s = r + Math.sqrt(discriminant); + s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0); + t = r - Math.sqrt(discriminant); + t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0); + result[0] = -term1 + s + t; + term1 += (s + t) / 2.0; + result[4] = result[2] = -term1; + term1 = Math.sqrt(3.0) * (-t + s) / 2; + result[3] = term1; + result[5] = -term1; + return; + } + + result[5] = result[3] = 0; + + if (discriminant === 0) { + r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0); + result[0] = -term1 + 2.0 * r13; + result[4] = result[2] = -(r13 + term1); + return; + } + + q = -q; + dum1 = q * q * q; + dum1 = Math.acos(r / Math.sqrt(dum1)); + r13 = 2.0 * Math.sqrt(q); + result[0] = -term1 + r13 * Math.cos(dum1 / 3.0); + result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0); + result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0); + return; + }; + var sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) { + // Find minimum distance by using the minimum of the distance + // function between the given point and the curve + // This gives the coefficients of the resulting cubic equation + // whose roots tell us where a possible minimum is + // (Coefficients are divided by 4) + var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3; + var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3; + var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y; + var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y; // debug("coefficients: " + a / a + ", " + b / a + ", " + c / a + ", " + d / a); + + var roots = []; // Use the cubic solving algorithm + + solveCubic(a, b, c, d, roots); + var zeroThreshold = 0.0000001; + var params = []; + + for (var index = 0; index < 6; index += 2) { + if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) { + params.push(roots[index]); + } + } + + params.push(1.0); + params.push(0.0); + var minDistanceSquared = -1; + var curX, curY, distSquared; + + for (var i = 0; i < params.length; i++) { + curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3; + curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3; + distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2); // debug('distance for param ' + params[i] + ": " + Math.sqrt(distSquared)); + + if (minDistanceSquared >= 0) { + if (distSquared < minDistanceSquared) { + minDistanceSquared = distSquared; + } + } else { + minDistanceSquared = distSquared; + } + } + + return minDistanceSquared; + }; + var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) { + var offset = [x - x1, y - y1]; + var line = [x2 - x1, y2 - y1]; + var lineSq = line[0] * line[0] + line[1] * line[1]; + var hypSq = offset[0] * offset[0] + offset[1] * offset[1]; + var dotProduct = offset[0] * line[0] + offset[1] * line[1]; + var adjSq = dotProduct * dotProduct / lineSq; + + if (dotProduct < 0) { + return hypSq; + } + + if (adjSq > lineSq) { + return (x - x2) * (x - x2) + (y - y2) * (y - y2); + } + + return hypSq - adjSq; + }; + var pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) { + var x1, y1, x2, y2; + var y3; // Intersect with vertical line through (x, y) + + var up = 0; // let down = 0; + + for (var i = 0; i < points.length / 2; i++) { + x1 = points[i * 2]; + y1 = points[i * 2 + 1]; + + if (i + 1 < points.length / 2) { + x2 = points[(i + 1) * 2]; + y2 = points[(i + 1) * 2 + 1]; + } else { + x2 = points[(i + 1 - points.length / 2) * 2]; + y2 = points[(i + 1 - points.length / 2) * 2 + 1]; + } + + if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) { + y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1; + + if (y3 > y) { + up++; + } // if( y3 < y ){ + // down++; + // } + + } else { + continue; + } + } + + if (up % 2 === 0) { + return false; + } else { + return true; + } + }; + var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) { + var transformedPoints = new Array(basePoints.length); // Gives negative angle + + var angle; + + if (direction[0] != null) { + angle = Math.atan(direction[1] / direction[0]); + + if (direction[0] < 0) { + angle = angle + Math.PI / 2; + } else { + angle = -angle - Math.PI / 2; + } + } else { + angle = direction; + } + + var cos = Math.cos(-angle); + var sin = Math.sin(-angle); // console.log("base: " + basePoints); + + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin); + transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin); + transformedPoints[i * 2] += centerX; + transformedPoints[i * 2 + 1] += centerY; + } + + var points; + + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + + return pointInsidePolygonPoints(x, y, points); + }; + var pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height) { + var cutPolygonPoints = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + var squaredCornerRadius = cornerRadius * cornerRadius; + + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + cutPolygonPoints[i * 4] = cp0x; + cutPolygonPoints[i * 4 + 1] = cp0y; + cutPolygonPoints[i * 4 + 2] = cp1x; + cutPolygonPoints[i * 4 + 3] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + var squaredDistance = Math.pow(cx - x, 2) + Math.pow(cy - y, 2); + + if (squaredDistance <= squaredCornerRadius) { + return true; + } + } + + return pointInsidePolygonPoints(x, y, cutPolygonPoints); + }; + var joinLines = function joinLines(lineSet) { + var vertices = new Array(lineSet.length / 2); + var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY; + var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY; + + for (var i = 0; i < lineSet.length / 4; i++) { + currentLineStartX = lineSet[i * 4]; + currentLineStartY = lineSet[i * 4 + 1]; + currentLineEndX = lineSet[i * 4 + 2]; + currentLineEndY = lineSet[i * 4 + 3]; + + if (i < lineSet.length / 4 - 1) { + nextLineStartX = lineSet[(i + 1) * 4]; + nextLineStartY = lineSet[(i + 1) * 4 + 1]; + nextLineEndX = lineSet[(i + 1) * 4 + 2]; + nextLineEndY = lineSet[(i + 1) * 4 + 3]; + } else { + nextLineStartX = lineSet[0]; + nextLineStartY = lineSet[1]; + nextLineEndX = lineSet[2]; + nextLineEndY = lineSet[3]; + } + + var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); + vertices[i * 2] = intersection[0]; + vertices[i * 2 + 1] = intersection[1]; + } + + return vertices; + }; + var expandPolygon = function expandPolygon(points, pad) { + var expandedLineSet = new Array(points.length * 2); + var currentPointX, currentPointY, nextPointX, nextPointY; + + for (var i = 0; i < points.length / 2; i++) { + currentPointX = points[i * 2]; + currentPointY = points[i * 2 + 1]; + + if (i < points.length / 2 - 1) { + nextPointX = points[(i + 1) * 2]; + nextPointY = points[(i + 1) * 2 + 1]; + } else { + nextPointX = points[0]; + nextPointY = points[1]; + } // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY] + // Assume CCW polygon winding + + + var offsetX = nextPointY - currentPointY; + var offsetY = -(nextPointX - currentPointX); // Normalize + + var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); + var normalizedOffsetX = offsetX / offsetLength; + var normalizedOffsetY = offsetY / offsetLength; + expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad; + expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad; + } + + return expandedLineSet; + }; + var intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) { + var dispX = centerX - x; + var dispY = centerY - y; + dispX /= ellipseWradius; + dispY /= ellipseHradius; + var len = Math.sqrt(dispX * dispX + dispY * dispY); + var newLength = len - 1; + + if (newLength < 0) { + return []; + } + + var lenProportion = newLength / len; + return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y]; + }; + var checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) { + x -= centerX; + y -= centerY; + x /= width / 2 + padding; + y /= height / 2 + padding; + return x * x + y * y <= 1; + }; // Returns intersections of increasing distance from line's start point + + var intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) { + // Calculate d, direction vector of line + var d = [x2 - x1, y2 - y1]; // Direction vector of line + + var f = [x1 - centerX, y1 - centerY]; + var a = d[0] * d[0] + d[1] * d[1]; + var b = 2 * (f[0] * d[0] + f[1] * d[1]); + var c = f[0] * f[0] + f[1] * f[1] - radius * radius; + var discriminant = b * b - 4 * a * c; + + if (discriminant < 0) { + return []; + } + + var t1 = (-b + Math.sqrt(discriminant)) / (2 * a); + var t2 = (-b - Math.sqrt(discriminant)) / (2 * a); + var tMin = Math.min(t1, t2); + var tMax = Math.max(t1, t2); + var inRangeParams = []; + + if (tMin >= 0 && tMin <= 1) { + inRangeParams.push(tMin); + } + + if (tMax >= 0 && tMax <= 1) { + inRangeParams.push(tMax); + } + + if (inRangeParams.length === 0) { + return []; + } + + var nearIntersectionX = inRangeParams[0] * d[0] + x1; + var nearIntersectionY = inRangeParams[0] * d[1] + y1; + + if (inRangeParams.length > 1) { + if (inRangeParams[0] == inRangeParams[1]) { + return [nearIntersectionX, nearIntersectionY]; + } else { + var farIntersectionX = inRangeParams[1] * d[0] + x1; + var farIntersectionY = inRangeParams[1] * d[1] + y1; + return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; + } + } else { + return [nearIntersectionX, nearIntersectionY]; + } + }; + var midOfThree = function midOfThree(a, b, c) { + if (b <= a && a <= c || c <= a && a <= b) { + return a; + } else if (a <= b && b <= c || c <= b && b <= a) { + return b; + } else { + return c; + } + }; // (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4) + + var finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) { + var dx13 = x1 - x3; + var dx21 = x2 - x1; + var dx43 = x4 - x3; + var dy13 = y1 - y3; + var dy21 = y2 - y1; + var dy43 = y4 - y3; + var ua_t = dx43 * dy13 - dy43 * dx13; + var ub_t = dx21 * dy13 - dy21 * dx13; + var u_b = dy43 * dx21 - dx43 * dy21; + + if (u_b !== 0) { + var ua = ua_t / u_b; + var ub = ub_t / u_b; + var flptThreshold = 0.001; + + var _min = 0 - flptThreshold; + + var _max = 1 + flptThreshold; + + if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) { + return [x1 + ua * dx21, y1 + ua * dy21]; + } else { + if (!infiniteLines) { + return []; + } else { + return [x1 + ua * dx21, y1 + ua * dy21]; + } + } + } else { + if (ua_t === 0 || ub_t === 0) { + // Parallel, coincident lines. Check if overlap + // Check endpoint of second line + if (midOfThree(x1, x2, x4) === x4) { + return [x4, y4]; + } // Check start point of second line + + + if (midOfThree(x1, x2, x3) === x3) { + return [x3, y3]; + } // Endpoint of first line + + + if (midOfThree(x3, x4, x2) === x2) { + return [x2, y2]; + } + + return []; + } else { + // Parallel, non-coincident + return []; + } + } + }; // math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding ) + // intersect a node polygon (pts transformed) + // + // math.polygonIntersectLine( x, y, basePoints, centerX, centerY ) + // intersect the points (no transform) + + var polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var transformedPoints = new Array(basePoints.length); + var doTransform = true; + + if (width == null) { + doTransform = false; + } + + var points; + + if (doTransform) { + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = basePoints[i * 2] * width + centerX; + transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY; + } + + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + } else { + points = basePoints; + } + + var currentX, currentY, nextX, nextY; + + for (var _i2 = 0; _i2 < points.length / 2; _i2++) { + currentX = points[_i2 * 2]; + currentY = points[_i2 * 2 + 1]; + + if (_i2 < points.length / 2 - 1) { + nextX = points[(_i2 + 1) * 2]; + nextY = points[(_i2 + 1) * 2 + 1]; + } else { + nextX = points[0]; + nextY = points[1]; + } + + intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + return intersections; + }; + var roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var lines = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + + if (i === 0) { + lines[basePoints.length - 2] = cp0x; + lines[basePoints.length - 1] = cp0y; + } else { + lines[i * 4 - 2] = cp0x; + lines[i * 4 - 1] = cp0y; + } + + lines[i * 4] = cp1x; + lines[i * 4 + 1] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + intersection = intersectLineCircle(x, y, centerX, centerY, cx, cy, cornerRadius); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + for (var _i3 = 0; _i3 < lines.length / 4; _i3++) { + intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[_i3 * 4], lines[_i3 * 4 + 1], lines[_i3 * 4 + 2], lines[_i3 * 4 + 3], false); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + if (intersections.length > 2) { + var lowestIntersection = [intersections[0], intersections[1]]; + var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2); + + for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) { + var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2); + + if (squaredDistance <= lowestSquaredDistance) { + lowestIntersection[0] = intersections[_i4 * 2]; + lowestIntersection[1] = intersections[_i4 * 2 + 1]; + lowestSquaredDistance = squaredDistance; + } + } + + return lowestIntersection; + } + + return intersections; + }; + var shortenIntersection = function shortenIntersection(intersection, offset, amount) { + var disp = [intersection[0] - offset[0], intersection[1] - offset[1]]; + var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]); + var lenRatio = (length - amount) / length; + + if (lenRatio < 0) { + lenRatio = 0.00001; + } + + return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]]; + }; + var generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) { + var points = generateUnitNgonPoints(sides, rotationRadians); + points = fitPolygonToSquare(points); + return points; + }; + var fitPolygonToSquare = function fitPolygonToSquare(points) { + var x, y; + var sides = points.length / 2; + var minX = Infinity, + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity; + + for (var i = 0; i < sides; i++) { + x = points[2 * i]; + y = points[2 * i + 1]; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } // stretch factors + + + var sx = 2 / (maxX - minX); + var sy = 2 / (maxY - minY); + + for (var _i5 = 0; _i5 < sides; _i5++) { + x = points[2 * _i5] = points[2 * _i5] * sx; + y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + + if (minY < -1) { + for (var _i6 = 0; _i6 < sides; _i6++) { + y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY); + } + } + + return points; + }; + var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) { + var increment = 1.0 / sides * 2 * Math.PI; + var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0; + startAngle += rotationRadians; + var points = new Array(sides * 2); + var currentAngle; + + for (var i = 0; i < sides; i++) { + currentAngle = i * increment + startAngle; + points[2 * i] = Math.cos(currentAngle); // x + + points[2 * i + 1] = Math.sin(-currentAngle); // y + } + + return points; + }; // Set the default radius, unless half of width or height is smaller than default + + var getRoundRectangleRadius = function getRoundRectangleRadius(width, height) { + return Math.min(width / 4, height / 4, 8); + }; // Set the default radius + + var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) { + return Math.min(width / 10, height / 10, 8); + }; + var getCutRectangleCornerLength = function getCutRectangleCornerLength() { + return 8; + }; + var bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) { + return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0]; + }; // get curve width, height, and control point position offsets as a percentage of node height / width + + var getBarrelCurveConstants = function getBarrelCurveConstants(width, height) { + return { + heightOffset: Math.min(15, 0.05 * height), + widthOffset: Math.min(100, 0.25 * width), + ctrlPtOffsetPct: 0.05 + }; + }; + + var pageRankDefaults = defaults$g({ + dampingFactor: 0.8, + precision: 0.000001, + iterations: 200, + weight: function weight(edge) { + return 1; + } + }); + var elesfn$o = { + pageRank: function pageRank(options) { + var _pageRankDefaults = pageRankDefaults(options), + dampingFactor = _pageRankDefaults.dampingFactor, + precision = _pageRankDefaults.precision, + iterations = _pageRankDefaults.iterations, + weight = _pageRankDefaults.weight; + + var cy = this._private.cy; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var numNodes = nodes.length; + var numNodesSqd = numNodes * numNodes; + var numEdges = edges.length; // Construct transposed adjacency matrix + // First lets have a zeroed matrix of the right size + // We'll also keep track of the sum of each column + + var matrix = new Array(numNodesSqd); + var columnSum = new Array(numNodes); + var additionalProb = (1 - dampingFactor) / numNodes; // Create null matrix + + for (var i = 0; i < numNodes; i++) { + for (var j = 0; j < numNodes; j++) { + var n = i * numNodes + j; + matrix[n] = 0; + } + + columnSum[i] = 0; + } // Now, process edges + + + for (var _i = 0; _i < numEdges; _i++) { + var edge = edges[_i]; + var srcId = edge.data('source'); + var tgtId = edge.data('target'); // Don't include loops in the matrix + + if (srcId === tgtId) { + continue; + } + + var s = nodes.indexOfId(srcId); + var t = nodes.indexOfId(tgtId); + var w = weight(edge); + + var _n = t * numNodes + s; // Update matrix + + + matrix[_n] += w; // Update column sum + + columnSum[s] += w; + } // Add additional probability based on damping factor + // Also, take into account columns that have sum = 0 + + + var p = 1.0 / numNodes + additionalProb; // Shorthand + // Traverse matrix, column by column + + for (var _j = 0; _j < numNodes; _j++) { + if (columnSum[_j] === 0) { + // No 'links' out from node jth, assume equal probability for each possible node + for (var _i2 = 0; _i2 < numNodes; _i2++) { + var _n2 = _i2 * numNodes + _j; + + matrix[_n2] = p; + } + } else { + // Node jth has outgoing link, compute normalized probabilities + for (var _i3 = 0; _i3 < numNodes; _i3++) { + var _n3 = _i3 * numNodes + _j; + + matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb; + } + } + } // Compute dominant eigenvector using power method + + + var eigenvector = new Array(numNodes); + var temp = new Array(numNodes); + var previous; // Start with a vector of all 1's + // Also, initialize a null vector which will be used as shorthand + + for (var _i4 = 0; _i4 < numNodes; _i4++) { + eigenvector[_i4] = 1; + } + + for (var iter = 0; iter < iterations; iter++) { + // Temp array with all 0's + for (var _i5 = 0; _i5 < numNodes; _i5++) { + temp[_i5] = 0; + } // Multiply matrix with previous result + + + for (var _i6 = 0; _i6 < numNodes; _i6++) { + for (var _j2 = 0; _j2 < numNodes; _j2++) { + var _n4 = _i6 * numNodes + _j2; + + temp[_i6] += matrix[_n4] * eigenvector[_j2]; + } + } + + inPlaceSumNormalize(temp); + previous = eigenvector; + eigenvector = temp; + temp = previous; + var diff = 0; // Compute difference (squared module) of both vectors + + for (var _i7 = 0; _i7 < numNodes; _i7++) { + var delta = previous[_i7] - eigenvector[_i7]; + diff += delta * delta; + } // If difference is less than the desired threshold, stop iterating + + + if (diff < precision) { + break; + } + } // Construct result + + + var res = { + rank: function rank(node) { + node = cy.collection(node)[0]; + return eigenvector[nodes.indexOf(node)]; + } + }; + return res; + } // pageRank + + }; // elesfn + + var defaults$f = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false, + alpha: 0 + }); + var elesfn$n = { + degreeCentralityNormalized: function degreeCentralityNormalized(options) { + options = defaults$f(options); + var cy = this.cy(); + var nodes = this.nodes(); + var numNodes = nodes.length; + + if (!options.directed) { + var degrees = {}; + var maxDegree = 0; + + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; // add current node to the current options object and call degreeCentrality + + options.root = node; + var currDegree = this.degreeCentrality(options); + + if (maxDegree < currDegree.degree) { + maxDegree = currDegree.degree; + } + + degrees[node.id()] = currDegree.degree; + } + + return { + degree: function degree(node) { + if (maxDegree === 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return degrees[node.id()] / maxDegree; + } + }; + } else { + var indegrees = {}; + var outdegrees = {}; + var maxIndegree = 0; + var maxOutdegree = 0; + + for (var _i = 0; _i < numNodes; _i++) { + var _node = nodes[_i]; + + var id = _node.id(); // add current node to the current options object and call degreeCentrality + + + options.root = _node; + + var _currDegree = this.degreeCentrality(options); + + if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; + if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; + indegrees[id] = _currDegree.indegree; + outdegrees[id] = _currDegree.outdegree; + } + + return { + indegree: function indegree(node) { + if (maxIndegree == 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return indegrees[node.id()] / maxIndegree; + }, + outdegree: function outdegree(node) { + if (maxOutdegree === 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return outdegrees[node.id()] / maxOutdegree; + } + }; + } + }, + // degreeCentralityNormalized + // Implemented from the algorithm in Opsahl's paper + // "Node centrality in weighted networks: Generalizing degree and shortest paths" + // check the heading 2 "Degree" + degreeCentrality: function degreeCentrality(options) { + options = defaults$f(options); + var cy = this.cy(); + var callingEles = this; + var _options = options, + root = _options.root, + weight = _options.weight, + directed = _options.directed, + alpha = _options.alpha; + root = cy.collection(root)[0]; + + if (!directed) { + var connEdges = root.connectedEdges().intersection(callingEles); + var k = connEdges.length; + var s = 0; // Now, sum edge weights + + for (var i = 0; i < connEdges.length; i++) { + s += weight(connEdges[i]); + } + + return { + degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha) + }; + } else { + var edges = root.connectedEdges(); + var incoming = edges.filter(function (edge) { + return edge.target().same(root) && callingEles.has(edge); + }); + var outgoing = edges.filter(function (edge) { + return edge.source().same(root) && callingEles.has(edge); + }); + var k_in = incoming.length; + var k_out = outgoing.length; + var s_in = 0; + var s_out = 0; // Now, sum incoming edge weights + + for (var _i2 = 0; _i2 < incoming.length; _i2++) { + s_in += weight(incoming[_i2]); + } // Now, sum outgoing edge weights + + + for (var _i3 = 0; _i3 < outgoing.length; _i3++) { + s_out += weight(outgoing[_i3]); + } + + return { + indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha), + outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha) + }; + } + } // degreeCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$n.dc = elesfn$n.degreeCentrality; + elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; + + var defaults$e = defaults$g({ + harmonic: true, + weight: function weight() { + return 1; + }, + directed: false, + root: null + }); + var elesfn$m = { + closenessCentralityNormalized: function closenessCentralityNormalized(options) { + var _defaults = defaults$e(options), + harmonic = _defaults.harmonic, + weight = _defaults.weight, + directed = _defaults.directed; + + var cy = this.cy(); + var closenesses = {}; + var maxCloseness = 0; + var nodes = this.nodes(); + var fw = this.floydWarshall({ + weight: weight, + directed: directed + }); // Compute closeness for every node and find the maximum closeness + + for (var i = 0; i < nodes.length; i++) { + var currCloseness = 0; + var node_i = nodes[i]; + + for (var j = 0; j < nodes.length; j++) { + if (i !== j) { + var d = fw.distance(node_i, nodes[j]); + + if (harmonic) { + currCloseness += 1 / d; + } else { + currCloseness += d; + } + } + } + + if (!harmonic) { + currCloseness = 1 / currCloseness; + } + + if (maxCloseness < currCloseness) { + maxCloseness = currCloseness; + } + + closenesses[node_i.id()] = currCloseness; + } + + return { + closeness: function closeness(node) { + if (maxCloseness == 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node)[0].id(); + } else { + // from is a node + node = node.id(); + } + + return closenesses[node] / maxCloseness; + } + }; + }, + // Implemented from pseudocode from wikipedia + closenessCentrality: function closenessCentrality(options) { + var _defaults2 = defaults$e(options), + root = _defaults2.root, + weight = _defaults2.weight, + directed = _defaults2.directed, + harmonic = _defaults2.harmonic; + + root = this.filter(root)[0]; // we need distance from this node to every other node + + var dijkstra = this.dijkstra({ + root: root, + weight: weight, + directed: directed + }); + var totalDistance = 0; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + + if (!n.same(root)) { + var d = dijkstra.distanceTo(n); + + if (harmonic) { + totalDistance += 1 / d; + } else { + totalDistance += d; + } + } + } + + return harmonic ? totalDistance : 1 / totalDistance; + } // closenessCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$m.cc = elesfn$m.closenessCentrality; + elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; + + var defaults$d = defaults$g({ + weight: null, + directed: false + }); + var elesfn$l = { + // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes + betweennessCentrality: function betweennessCentrality(options) { + var _defaults = defaults$d(options), + directed = _defaults.directed, + weight = _defaults.weight; + + var weighted = weight != null; + var cy = this.cy(); // starting + + var V = this.nodes(); + var A = {}; + var _C = {}; + var max = 0; + var C = { + set: function set(key, val) { + _C[key] = val; + + if (val > max) { + max = val; + } + }, + get: function get(key) { + return _C[key]; + } + }; // A contains the neighborhoods of every node + + for (var i = 0; i < V.length; i++) { + var v = V[i]; + var vid = v.id(); + + if (directed) { + A[vid] = v.outgoers().nodes(); // get outgoers of every node + } else { + A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node + } + + C.set(vid, 0); + } + + var _loop = function _loop(s) { + var sid = V[s].id(); + var S = []; // stack + + var P = {}; + var g = {}; + var d = {}; + var Q = new heap(function (a, b) { + return d[a] - d[b]; + }); // queue + // init dictionaries + + for (var _i = 0; _i < V.length; _i++) { + var _vid = V[_i].id(); + + P[_vid] = []; + g[_vid] = 0; + d[_vid] = Infinity; + } + + g[sid] = 1; // sigma + + d[sid] = 0; // distance to s + + Q.push(sid); + + while (!Q.empty()) { + var _v = Q.pop(); + + S.push(_v); + + if (weighted) { + for (var j = 0; j < A[_v].length; j++) { + var w = A[_v][j]; + var vEle = cy.getElementById(_v); + var edge = void 0; + + if (vEle.edgesTo(w).length > 0) { + edge = vEle.edgesTo(w)[0]; + } else { + edge = w.edgesTo(vEle)[0]; + } + + var edgeWeight = weight(edge); + w = w.id(); + + if (d[w] > d[_v] + edgeWeight) { + d[w] = d[_v] + edgeWeight; + + if (Q.nodes.indexOf(w) < 0) { + //if w is not in Q + Q.push(w); + } else { + // update position if w is in Q + Q.updateItem(w); + } + + g[w] = 0; + P[w] = []; + } + + if (d[w] == d[_v] + edgeWeight) { + g[w] = g[w] + g[_v]; + P[w].push(_v); + } + } + } else { + for (var _j = 0; _j < A[_v].length; _j++) { + var _w = A[_v][_j].id(); + + if (d[_w] == Infinity) { + Q.push(_w); + d[_w] = d[_v] + 1; + } + + if (d[_w] == d[_v] + 1) { + g[_w] = g[_w] + g[_v]; + + P[_w].push(_v); + } + } + } + } + + var e = {}; + + for (var _i2 = 0; _i2 < V.length; _i2++) { + e[V[_i2].id()] = 0; + } + + while (S.length > 0) { + var _w2 = S.pop(); + + for (var _j2 = 0; _j2 < P[_w2].length; _j2++) { + var _v2 = P[_w2][_j2]; + e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]); + } + + if (_w2 != V[s].id()) { + C.set(_w2, C.get(_w2) + e[_w2]); + } + } + }; + + for (var s = 0; s < V.length; s++) { + _loop(s); + } + + var ret = { + betweenness: function betweenness(node) { + var id = cy.collection(node).id(); + return C.get(id); + }, + betweennessNormalized: function betweennessNormalized(node) { + if (max == 0) { + return 0; + } + + var id = cy.collection(node).id(); + return C.get(id) / max; + } + }; // alias + + ret.betweennessNormalised = ret.betweennessNormalized; + return ret; + } // betweennessCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$l.bc = elesfn$l.betweennessCentrality; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + /* eslint-disable no-unused-vars */ + + var defaults$c = defaults$g({ + expandFactor: 2, + // affects time of computation and cluster granularity to some extent: M * M + inflateFactor: 2, + // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j) + multFactor: 1, + // optional self loops for each node. Use a neutral value to improve cluster computations. + maxIterations: 20, + // maximum number of iterations of the MCL algorithm in a single run + attributes: [// attributes/features used to group nodes, ie. similarity values between nodes + function (edge) { + return 1; + }] + }); + /* eslint-enable */ + + var setOptions$3 = function setOptions(options) { + return defaults$c(options); + }; + /* eslint-enable */ + + + var getSimilarity$1 = function getSimilarity(edge, attributes) { + var total = 0; + + for (var i = 0; i < attributes.length; i++) { + total += attributes[i](edge); + } + + return total; + }; + + var addLoops = function addLoops(M, n, val) { + for (var i = 0; i < n; i++) { + M[i * n + i] = val; + } + }; + + var normalize = function normalize(M, n) { + var sum; + + for (var col = 0; col < n; col++) { + sum = 0; + + for (var row = 0; row < n; row++) { + sum += M[row * n + col]; + } + + for (var _row = 0; _row < n; _row++) { + M[_row * n + col] = M[_row * n + col] / sum; + } + } + }; // TODO: blocked matrix multiplication? + + + var mmult = function mmult(A, B, n) { + var C = new Array(n * n); + + for (var i = 0; i < n; i++) { + for (var j = 0; j < n; j++) { + C[i * n + j] = 0; + } + + for (var k = 0; k < n; k++) { + for (var _j = 0; _j < n; _j++) { + C[i * n + _j] += A[i * n + k] * B[k * n + _j]; + } + } + } + + return C; + }; + + var expand = function expand(M, n, expandFactor + /** power **/ + ) { + var _M = M.slice(0); + + for (var p = 1; p < expandFactor; p++) { + M = mmult(M, _M, n); + } + + return M; + }; + + var inflate = function inflate(M, n, inflateFactor + /** r **/ + ) { + var _M = new Array(n * n); // M(i,j) ^ inflatePower + + + for (var i = 0; i < n * n; i++) { + _M[i] = Math.pow(M[i], inflateFactor); + } + + normalize(_M, n); + return _M; + }; + + var hasConverged = function hasConverged(M, _M, n2, roundFactor) { + // Check that both matrices have the same elements (i,j) + for (var i = 0; i < n2; i++) { + var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places + + var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); + + if (v1 !== v2) { + return false; + } + } + + return true; + }; + + var assign$2 = function assign(M, n, nodes, cy) { + var clusters = []; + + for (var i = 0; i < n; i++) { + var cluster = []; + + for (var j = 0; j < n; j++) { + // Row-wise attractors and elements that they attract belong in same cluster + if (Math.round(M[i * n + j] * 1000) / 1000 > 0) { + cluster.push(nodes[j]); + } + } + + if (cluster.length !== 0) { + clusters.push(cy.collection(cluster)); + } + } + + return clusters; + }; + + var isDuplicate = function isDuplicate(c1, c2) { + for (var i = 0; i < c1.length; i++) { + if (!c2[i] || c1[i].id() !== c2[i].id()) { + return false; + } + } + + return true; + }; + + var removeDuplicates = function removeDuplicates(clusters) { + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j < clusters.length; j++) { + if (i != j && isDuplicate(clusters[i], clusters[j])) { + clusters.splice(j, 1); + } + } + } + + return clusters; + }; + + var markovClustering = function markovClustering(options) { + var nodes = this.nodes(); + var edges = this.edges(); + var cy = this.cy(); // Set parameters of algorithm: + + var opts = setOptions$3(options); // Map each node to its position in node array + + var id2position = {}; + + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } // Generate stochastic matrix M from input graph G (should be symmetric/undirected) + + + var n = nodes.length, + n2 = n * n; + + var M = new Array(n2), + _M; + + for (var _i = 0; _i < n2; _i++) { + M[_i] = 0; + } + + for (var e = 0; e < edges.length; e++) { + var edge = edges[e]; + var _i2 = id2position[edge.source().id()]; + var j = id2position[edge.target().id()]; + var sim = getSimilarity$1(edge, opts.attributes); + M[_i2 * n + j] += sim; // G should be symmetric and undirected + + M[j * n + _i2] += sim; + } // Begin Markov cluster algorithm + // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal + + + addLoops(M, n, opts.multFactor); // Step 2: M = normalize( M ); + + normalize(M, n); + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; // Step 3: + + _M = expand(M, n, opts.expandFactor); // Step 4: + + M = inflate(_M, n, opts.inflateFactor); // Step 5: check to see if ~steady state has been reached + + if (!hasConverged(M, _M, n2, 4)) { + isStillMoving = true; + } + + iterations++; + } // Build clusters from matrix + + + var clusters = assign$2(M, n, nodes, cy); // Remove duplicate clusters due to symmetry of graph and M matrix + + clusters = removeDuplicates(clusters); + return clusters; + }; + + var markovClustering$1 = { + markovClustering: markovClustering, + mcl: markovClustering + }; + + // Common distance metrics for clustering algorithms + + var identity = function identity(x) { + return x; + }; + + var absDiff = function absDiff(p, q) { + return Math.abs(q - p); + }; + + var addAbsDiff = function addAbsDiff(total, p, q) { + return total + absDiff(p, q); + }; + + var addSquaredDiff = function addSquaredDiff(total, p, q) { + return total + Math.pow(q - p, 2); + }; + + var sqrt = function sqrt(x) { + return Math.sqrt(x); + }; + + var maxAbsDiff = function maxAbsDiff(currentMax, p, q) { + return Math.max(currentMax, absDiff(p, q)); + }; + + var getDistance = function getDistance(length, getP, getQ, init, visit) { + var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity; + var ret = init; + var p, q; + + for (var dim = 0; dim < length; dim++) { + p = getP(dim); + q = getQ(dim); + ret = visit(ret, p, q); + } + + return post(ret); + }; + + var distances = { + euclidean: function euclidean(length, getP, getQ) { + if (length >= 2) { + return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt); + } else { + // for single attr case, more efficient to avoid sqrt + return getDistance(length, getP, getQ, 0, addAbsDiff); + } + }, + squaredEuclidean: function squaredEuclidean(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addSquaredDiff); + }, + manhattan: function manhattan(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addAbsDiff); + }, + max: function max(length, getP, getQ) { + return getDistance(length, getP, getQ, -Infinity, maxAbsDiff); + } + }; // in case the user accidentally doesn't use camel case + + distances['squared-euclidean'] = distances['squaredEuclidean']; + distances['squaredeuclidean'] = distances['squaredEuclidean']; + function clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) { + var impl; + + if (fn$6(method)) { + impl = method; + } else { + impl = distances[method] || distances.euclidean; + } + + if (length === 0 && fn$6(method)) { + return impl(nodeP, nodeQ); + } else { + return impl(length, getP, getQ, nodeP, nodeQ); + } + } + + var defaults$b = defaults$g({ + k: 2, + m: 2, + sensitivityThreshold: 0.0001, + distance: 'euclidean', + maxIterations: 10, + attributes: [], + testMode: false, + testCentroids: null + }); + + var setOptions$2 = function setOptions(options) { + return defaults$b(options); + }; + /* eslint-enable */ + + + var getDist = function getDist(type, node, centroid, attributes, mode) { + var noNodeP = mode !== 'kMedoids'; + var getP = noNodeP ? function (i) { + return centroid[i]; + } : function (i) { + return attributes[i](centroid); + }; + + var getQ = function getQ(i) { + return attributes[i](node); + }; + + var nodeP = centroid; + var nodeQ = node; + return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ); + }; + + var randomCentroids = function randomCentroids(nodes, k, attributes) { + var ndim = attributes.length; + var min = new Array(ndim); + var max = new Array(ndim); + var centroids = new Array(k); + var centroid = null; // Find min, max values for each attribute dimension + + for (var i = 0; i < ndim; i++) { + min[i] = nodes.min(attributes[i]).value; + max[i] = nodes.max(attributes[i]).value; + } // Build k centroids, each represented as an n-dim feature vector + + + for (var c = 0; c < k; c++) { + centroid = []; + + for (var _i = 0; _i < ndim; _i++) { + centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value + } + + centroids[c] = centroid; + } + + return centroids; + }; + + var classify = function classify(node, centroids, distance, attributes, type) { + var min = Infinity; + var index = 0; + + for (var i = 0; i < centroids.length; i++) { + var dist = getDist(distance, node, centroids[i], attributes, type); + + if (dist < min) { + min = dist; + index = i; + } + } + + return index; + }; + + var buildCluster = function buildCluster(centroid, nodes, assignment) { + var cluster = []; + var node = null; + + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + + if (assignment[node.id()] === centroid) { + //console.log("Node " + node.id() + " is associated with medoid #: " + m); + cluster.push(node); + } + } + + return cluster; + }; + + var haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) { + return Math.abs(v2 - v1) <= sensitivityThreshold; + }; + + var haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) { + for (var i = 0; i < v1.length; i++) { + for (var j = 0; j < v1[i].length; j++) { + var diff = Math.abs(v1[i][j] - v2[i][j]); + + if (diff > sensitivityThreshold) { + return false; + } + } + } + + return true; + }; + + var seenBefore = function seenBefore(node, medoids, n) { + for (var i = 0; i < n; i++) { + if (node === medoids[i]) return true; + } + + return false; + }; + + var randomMedoids = function randomMedoids(nodes, k) { + var medoids = new Array(k); // For small data sets, the probability of medoid conflict is greater, + // so we need to check to see if we've already seen or chose this node before. + + if (nodes.length < 50) { + // Randomly select k medoids from the n nodes + for (var i = 0; i < k; i++) { + var node = nodes[Math.floor(Math.random() * nodes.length)]; // If we've already chosen this node to be a medoid, don't choose it again (for small data sets). + // Instead choose a different random node. + + while (seenBefore(node, medoids, i)) { + node = nodes[Math.floor(Math.random() * nodes.length)]; + } + + medoids[i] = node; + } + } else { + // Relatively large data set, so pretty safe to not check and just select random nodes + for (var _i2 = 0; _i2 < k; _i2++) { + medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)]; + } + } + + return medoids; + }; + + var findCost = function findCost(potentialNewMedoid, cluster, attributes) { + var cost = 0; + + for (var n = 0; n < cluster.length; n++) { + cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids'); + } + + return cost; + }; + + var kMeans = function kMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; // Set parameters of algorithm: # of clusters, distance metric, etc. + + var opts = setOptions$2(options); // Begin k-means algorithm + + var clusters = new Array(opts.k); + var assignment = {}; + var centroids; // Step 1: Initialize centroid positions + + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') { + // TODO: implement a seeded random number generator. + opts.testCentroids; + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } else if (_typeof(opts.testCentroids) === 'object') { + centroids = opts.testCentroids; + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest centroid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster # + + assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans'); + } // Step 3: For each of the k clusters, update its centroid + + + isStillMoving = false; + + for (var c = 0; c < opts.k; c++) { + // Get all nodes that belong to this cluster + var cluster = buildCluster(c, nodes, assignment); + + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } // Update centroids by calculating avg of all nodes within the cluster. + + + var ndim = opts.attributes.length; + var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ] + + var newCentroid = new Array(ndim); + var sum = new Array(ndim); + + for (var d = 0; d < ndim; d++) { + sum[d] = 0.0; + + for (var i = 0; i < cluster.length; i++) { + node = cluster[i]; + sum[d] += opts.attributes[d](node); + } + + newCentroid[d] = sum[d] / cluster.length; // Check to see if algorithm has converged, i.e. when centroids no longer change + + if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) { + isStillMoving = true; + } + } + + centroids[c] = newCentroid; + clusters[c] = cy.collection(cluster); + } + + iterations++; + } + + return clusters; + }; + + var kMedoids = function kMedoids(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; + var opts = setOptions$2(options); // Begin k-medoids algorithm + + var clusters = new Array(opts.k); + var medoids; + var assignment = {}; + var curCost; + var minCosts = new Array(opts.k); // minimum cost configuration for each cluster + // Step 1: Initialize k medoids + + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') { + medoids = opts.testCentroids; + } else { + medoids = randomMedoids(nodes, opts.k); + } + } else { + medoids = randomMedoids(nodes, opts.k); + } + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest medoid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster # + + assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids'); + } + + isStillMoving = false; // Step 3: For each medoid m, and for each node associated with mediod m, + // select the node with the lowest configuration cost as new medoid. + + for (var m = 0; m < medoids.length; m++) { + // Get all nodes that belong to this medoid + var cluster = buildCluster(m, nodes, assignment); + + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } + + minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost + // Select different medoid if its configuration has the lowest cost + + for (var _n = 0; _n < cluster.length; _n++) { + curCost = findCost(cluster[_n], cluster, opts.attributes); + + if (curCost < minCosts[m]) { + minCosts[m] = curCost; + medoids[m] = cluster[_n]; + isStillMoving = true; + } + } + + clusters[m] = cy.collection(cluster); + } + + iterations++; + } + + return clusters; + }; + + var updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) { + var numerator, denominator; + + for (var n = 0; n < nodes.length; n++) { + for (var c = 0; c < centroids.length; c++) { + weight[n][c] = Math.pow(U[n][c], opts.m); + } + } + + for (var _c = 0; _c < centroids.length; _c++) { + for (var dim = 0; dim < opts.attributes.length; dim++) { + numerator = 0; + denominator = 0; + + for (var _n2 = 0; _n2 < nodes.length; _n2++) { + numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]); + denominator += weight[_n2][_c]; + } + + centroids[_c][dim] = numerator / denominator; + } + } + }; + + var updateMembership = function updateMembership(U, _U, centroids, nodes, opts) { + // Save previous step + for (var i = 0; i < U.length; i++) { + _U[i] = U[i].slice(); + } + + var sum, numerator, denominator; + var pow = 2 / (opts.m - 1); + + for (var c = 0; c < centroids.length; c++) { + for (var n = 0; n < nodes.length; n++) { + sum = 0; + + for (var k = 0; k < centroids.length; k++) { + // against all other centroids + numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans'); + denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans'); + sum += Math.pow(numerator / denominator, pow); + } + + U[n][c] = 1 / sum; + } + } + }; + + var assign$1 = function assign(nodes, U, opts, cy) { + var clusters = new Array(opts.k); + + for (var c = 0; c < clusters.length; c++) { + clusters[c] = []; + } + + var max; + var index; + + for (var n = 0; n < U.length; n++) { + // for each node (U is N x C matrix) + max = -Infinity; + index = -1; // Determine which cluster the node is most likely to belong in + + for (var _c2 = 0; _c2 < U[0].length; _c2++) { + if (U[n][_c2] > max) { + max = U[n][_c2]; + index = _c2; + } + } + + clusters[index].push(nodes[n]); + } // Turn every array into a collection of nodes + + + for (var _c3 = 0; _c3 < clusters.length; _c3++) { + clusters[_c3] = cy.collection(clusters[_c3]); + } + + return clusters; + }; + + var fuzzyCMeans = function fuzzyCMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions$2(options); // Begin fuzzy c-means algorithm + + var clusters; + var centroids; + var U; + + var _U; + + var weight; // Step 1: Initialize letiables. + + _U = new Array(nodes.length); + + for (var i = 0; i < nodes.length; i++) { + // N x C matrix + _U[i] = new Array(opts.k); + } + + U = new Array(nodes.length); + + for (var _i3 = 0; _i3 < nodes.length; _i3++) { + // N x C matrix + U[_i3] = new Array(opts.k); + } + + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var total = 0; + + for (var j = 0; j < opts.k; j++) { + U[_i4][j] = Math.random(); + total += U[_i4][j]; + } + + for (var _j = 0; _j < opts.k; _j++) { + U[_i4][_j] = U[_i4][_j] / total; + } + } + + centroids = new Array(opts.k); + + for (var _i5 = 0; _i5 < opts.k; _i5++) { + centroids[_i5] = new Array(opts.attributes.length); + } + + weight = new Array(nodes.length); + + for (var _i6 = 0; _i6 < nodes.length; _i6++) { + // N x C matrix + weight[_i6] = new Array(opts.k); + } // end init FCM + + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; // Step 2: Calculate the centroids for each step. + + updateCentroids(centroids, nodes, U, weight, opts); // Step 3: Update the partition matrix U. + + updateMembership(U, _U, centroids, nodes, opts); // Step 4: Check for convergence. + + if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) { + isStillMoving = true; + } + + iterations++; + } // Assign nodes to clusters with highest probability. + + + clusters = assign$1(nodes, U, opts, cy); + return { + clusters: clusters, + degreeOfMembership: U + }; + }; + + var kClustering = { + kMeans: kMeans, + kMedoids: kMedoids, + fuzzyCMeans: fuzzyCMeans, + fcm: fuzzyCMeans + }; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + var defaults$a = defaults$g({ + distance: 'euclidean', + // distance metric to compare nodes + linkage: 'min', + // linkage criterion : how to determine the distance between clusters of nodes + mode: 'threshold', + // mode:'threshold' => clusters must be threshold distance apart + threshold: Infinity, + // the distance threshold + // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters + addDendrogram: false, + // whether to add the dendrogram to the graph for viz + dendrogramDepth: 0, + // depth at which dendrogram branches are merged into the returned clusters + attributes: [] // array of attr functions + + }); + var linkageAliases = { + 'single': 'min', + 'complete': 'max' + }; + + var setOptions$1 = function setOptions(options) { + var opts = defaults$a(options); + var preferredAlias = linkageAliases[opts.linkage]; + + if (preferredAlias != null) { + opts.linkage = preferredAlias; + } + + return opts; + }; + + var mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) { + // Find two closest clusters from cached mins + var minKey = 0; + var min = Infinity; + var dist; + var attrs = opts.attributes; + + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; + + for (var i = 0; i < clusters.length; i++) { + var key = clusters[i].key; + var _dist = dists[key][mins[key]]; + + if (_dist < min) { + minKey = key; + min = _dist; + } + } + + if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) { + return false; + } + + var c1 = index[minKey]; + var c2 = index[mins[minKey]]; + var merged; // Merge two closest clusters + + if (opts.mode === 'dendrogram') { + merged = { + left: c1, + right: c2, + key: c1.key + }; + } else { + merged = { + value: c1.value.concat(c2.value), + key: c1.key + }; + } + + clusters[c1.index] = merged; + clusters.splice(c2.index, 1); + index[c1.key] = merged; // Update distances with new merged cluster + + for (var _i = 0; _i < clusters.length; _i++) { + var cur = clusters[_i]; + + if (c1.key === cur.key) { + dist = Infinity; + } else if (opts.linkage === 'min') { + dist = dists[c1.key][cur.key]; + + if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'max') { + dist = dists[c1.key][cur.key]; + + if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'mean') { + dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size); + } else { + if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]); + } + + dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric + } // Update cached mins + + + for (var _i2 = 0; _i2 < clusters.length; _i2++) { + var key1 = clusters[_i2].key; + + if (mins[key1] === c1.key || mins[key1] === c2.key) { + var _min = key1; + + for (var j = 0; j < clusters.length; j++) { + var key2 = clusters[j].key; + + if (dists[key1][key2] < dists[key1][_min]) { + _min = key2; + } + } + + mins[key1] = _min; + } + + clusters[_i2].index = _i2; + } // Clean up meta data used for clustering + + + c1.key = c2.key = c1.index = c2.index = null; + return true; + }; + + var getAllChildren = function getAllChildren(root, arr, cy) { + if (!root) return; + + if (root.value) { + arr.push(root.value); + } else { + if (root.left) getAllChildren(root.left, arr); + if (root.right) getAllChildren(root.right, arr); + } + }; + + var buildDendrogram = function buildDendrogram(root, cy) { + if (!root) return ''; + + if (root.left && root.right) { + var leftStr = buildDendrogram(root.left, cy); + var rightStr = buildDendrogram(root.right, cy); + var node = cy.add({ + group: 'nodes', + data: { + id: leftStr + ',' + rightStr + } + }); + cy.add({ + group: 'edges', + data: { + source: leftStr, + target: node.id() + } + }); + cy.add({ + group: 'edges', + data: { + source: rightStr, + target: node.id() + } + }); + return node.id(); + } else if (root.value) { + return root.value.id(); + } + }; + + var buildClustersFromTree = function buildClustersFromTree(root, k, cy) { + if (!root) return []; + var left = [], + right = [], + leaves = []; + + if (k === 0) { + // don't cut tree, simply return all nodes as 1 single cluster + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + leaves = left.concat(right); + return [cy.collection(leaves)]; + } else if (k === 1) { + // cut at root + if (root.value) { + // leaf node + return [cy.collection(root.value)]; + } else { + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + return [cy.collection(left), cy.collection(right)]; + } + } else { + if (root.value) { + return [cy.collection(root.value)]; + } else { + if (root.left) left = buildClustersFromTree(root.left, k - 1, cy); + if (root.right) right = buildClustersFromTree(root.right, k - 1, cy); + return left.concat(right); + } + } + }; + /* eslint-enable */ + + + var hierarchicalClustering = function hierarchicalClustering(options) { + var cy = this.cy(); + var nodes = this.nodes(); // Set parameters of algorithm: linkage type, distance metric, etc. + + var opts = setOptions$1(options); + var attrs = opts.attributes; + + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; // Begin hierarchical algorithm + + + var clusters = []; + var dists = []; // distances between each pair of clusters + + var mins = []; // closest cluster for each cluster + + var index = []; // hash of all clusters by key + // In agglomerative (bottom-up) clustering, each node starts as its own cluster + + for (var n = 0; n < nodes.length; n++) { + var cluster = { + value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]], + key: n, + index: n + }; + clusters[n] = cluster; + index[n] = cluster; + dists[n] = []; + mins[n] = 0; + } // Calculate the distance between each pair of clusters + + + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j <= i; j++) { + var dist = void 0; + + if (opts.mode === 'dendrogram') { + // modes store cluster values differently + dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value); + } else { + dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]); + } + + dists[i][j] = dist; + dists[j][i] = dist; + + if (dist < dists[i][mins[i]]) { + mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j + } + } + } // Find the closest pair of clusters and merge them into a single cluster. + // Update distances between new cluster and each of the old clusters, and loop until threshold reached. + + + var merged = mergeClosest(clusters, index, dists, mins, opts); + + while (merged) { + merged = mergeClosest(clusters, index, dists, mins, opts); + } + + var retClusters; // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges + // in addition to returning the clusters. + + if (opts.mode === 'dendrogram') { + retClusters = buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy); + if (opts.addDendrogram) buildDendrogram(clusters[0], cy); + } else { + // Regular mode simply returns the clusters + retClusters = new Array(clusters.length); + clusters.forEach(function (cluster, i) { + // Clean up meta data used for clustering + cluster.key = cluster.index = null; + retClusters[i] = cy.collection(cluster.value); + }); + } + + return retClusters; + }; + + var hierarchicalClustering$1 = { + hierarchicalClustering: hierarchicalClustering, + hca: hierarchicalClustering + }; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + var defaults$9 = defaults$g({ + distance: 'euclidean', + // distance metric to compare attributes between two nodes + preference: 'median', + // suitability of a data point to serve as an exemplar + damping: 0.8, + // damping factor between [0.5, 1) + maxIterations: 1000, + // max number of iterations to run + minIterations: 100, + // min number of iterations to run in order for clustering to stop + attributes: [// functions to quantify the similarity between any two points + // e.g. node => node.data('weight') + ] + }); + + var setOptions = function setOptions(options) { + var dmp = options.damping; + var pref = options.preference; + + if (!(0.5 <= dmp && dmp < 1)) { + error("Damping must range on [0.5, 1). Got: ".concat(dmp)); + } + + var validPrefs = ['median', 'mean', 'min', 'max']; + + if (!(validPrefs.some(function (v) { + return v === pref; + }) || number$1(pref))) { + error("Preference must be one of [".concat(validPrefs.map(function (p) { + return "'".concat(p, "'"); + }).join(', '), "] or a number. Got: ").concat(pref)); + } + + return defaults$9(options); + }; + /* eslint-enable */ + + + var getSimilarity = function getSimilarity(type, n1, n2, attributes) { + var attr = function attr(n, i) { + return attributes[i](n); + }; // nb negative because similarity should have an inverse relationship to distance + + + return -clusteringDistance(type, attributes.length, function (i) { + return attr(n1, i); + }, function (i) { + return attr(n2, i); + }, n1, n2); + }; + + var getPreference = function getPreference(S, preference) { + // larger preference = greater # of clusters + var p = null; + + if (preference === 'median') { + p = median(S); + } else if (preference === 'mean') { + p = mean(S); + } else if (preference === 'min') { + p = min(S); + } else if (preference === 'max') { + p = max(S); + } else { + // Custom preference number, as set by user + p = preference; + } + + return p; + }; + + var findExemplars = function findExemplars(n, R, A) { + var indices = []; + + for (var i = 0; i < n; i++) { + if (R[i * n + i] + A[i * n + i] > 0) { + indices.push(i); + } + } + + return indices; + }; + + var assignClusters = function assignClusters(n, S, exemplars) { + var clusters = []; + + for (var i = 0; i < n; i++) { + var index = -1; + var max = -Infinity; + + for (var ei = 0; ei < exemplars.length; ei++) { + var e = exemplars[ei]; + + if (S[i * n + e] > max) { + index = e; + max = S[i * n + e]; + } + } + + if (index > 0) { + clusters.push(index); + } + } + + for (var _ei = 0; _ei < exemplars.length; _ei++) { + clusters[exemplars[_ei]] = exemplars[_ei]; + } + + return clusters; + }; + + var assign = function assign(n, S, exemplars) { + var clusters = assignClusters(n, S, exemplars); + + for (var ei = 0; ei < exemplars.length; ei++) { + var ii = []; + + for (var c = 0; c < clusters.length; c++) { + if (clusters[c] === exemplars[ei]) { + ii.push(c); + } + } + + var maxI = -1; + var maxSum = -Infinity; + + for (var i = 0; i < ii.length; i++) { + var sum = 0; + + for (var j = 0; j < ii.length; j++) { + sum += S[ii[j] * n + ii[i]]; + } + + if (sum > maxSum) { + maxI = i; + maxSum = sum; + } + } + + exemplars[ei] = ii[maxI]; + } + + clusters = assignClusters(n, S, exemplars); + return clusters; + }; + + var affinityPropagation = function affinityPropagation(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions(options); // Map each node to its position in node array + + var id2position = {}; + + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } // Begin affinity propagation algorithm + + + var n; // number of data points + + var n2; // size of matrices + + var S; // similarity matrix (1D array) + + var p; // preference/suitability of a data point to serve as an exemplar + + var R; // responsibility matrix (1D array) + + var A; // availability matrix (1D array) + + n = nodes.length; + n2 = n * n; // Initialize and build S similarity matrix + + S = new Array(n2); + + for (var _i = 0; _i < n2; _i++) { + S[_i] = -Infinity; // for cases where two data points shouldn't be linked together + } + + for (var _i2 = 0; _i2 < n; _i2++) { + for (var j = 0; j < n; j++) { + if (_i2 !== j) { + S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes); + } + } + } // Place preferences on the diagonal of S + + + p = getPreference(S, opts.preference); + + for (var _i3 = 0; _i3 < n; _i3++) { + S[_i3 * n + _i3] = p; + } // Initialize R responsibility matrix + + + R = new Array(n2); + + for (var _i4 = 0; _i4 < n2; _i4++) { + R[_i4] = 0.0; + } // Initialize A availability matrix + + + A = new Array(n2); + + for (var _i5 = 0; _i5 < n2; _i5++) { + A[_i5] = 0.0; + } + + var old = new Array(n); + var Rp = new Array(n); + var se = new Array(n); + + for (var _i6 = 0; _i6 < n; _i6++) { + old[_i6] = 0.0; + Rp[_i6] = 0.0; + se[_i6] = 0; + } + + var e = new Array(n * opts.minIterations); + + for (var _i7 = 0; _i7 < e.length; _i7++) { + e[_i7] = 0; + } + + var iter; + + for (iter = 0; iter < opts.maxIterations; iter++) { + // main algorithmic loop + // Update R responsibility matrix + for (var _i8 = 0; _i8 < n; _i8++) { + var max = -Infinity, + max2 = -Infinity, + maxI = -1, + AS = 0.0; + + for (var _j = 0; _j < n; _j++) { + old[_j] = R[_i8 * n + _j]; + AS = A[_i8 * n + _j] + S[_i8 * n + _j]; + + if (AS >= max) { + max2 = max; + max = AS; + maxI = _j; + } else if (AS > max2) { + max2 = AS; + } + } + + for (var _j2 = 0; _j2 < n; _j2++) { + R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2]; + } + + R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI]; + } // Update A availability matrix + + + for (var _i9 = 0; _i9 < n; _i9++) { + var sum = 0; + + for (var _j3 = 0; _j3 < n; _j3++) { + old[_j3] = A[_j3 * n + _i9]; + Rp[_j3] = Math.max(0, R[_j3 * n + _i9]); + sum += Rp[_j3]; + } + + sum -= Rp[_i9]; + Rp[_i9] = R[_i9 * n + _i9]; + sum += Rp[_i9]; + + for (var _j4 = 0; _j4 < n; _j4++) { + A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4]; + } + + A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9]; + } // Check for convergence + + + var K = 0; + + for (var _i10 = 0; _i10 < n; _i10++) { + var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0; + e[iter % opts.minIterations * n + _i10] = E; + K += E; + } + + if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { + var _sum = 0; + + for (var _i11 = 0; _i11 < n; _i11++) { + se[_i11] = 0; + + for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { + se[_i11] += e[_j5 * n + _i11]; + } + + if (se[_i11] === 0 || se[_i11] === opts.minIterations) { + _sum++; + } + } + + if (_sum === n) { + // then we have convergence + break; + } + } + } // Identify exemplars (cluster centers) + + + var exemplarsIndices = findExemplars(n, R, A); // Assign nodes to clusters + + var clusterIndices = assign(n, S, exemplarsIndices); + var clusters = {}; + + for (var c = 0; c < exemplarsIndices.length; c++) { + clusters[exemplarsIndices[c]] = []; + } + + for (var _i12 = 0; _i12 < nodes.length; _i12++) { + var pos = id2position[nodes[_i12].id()]; + + var clusterIndex = clusterIndices[pos]; + + if (clusterIndex != null) { + // the node may have not been assigned a cluster if no valid attributes were specified + clusters[clusterIndex].push(nodes[_i12]); + } + } + + var retClusters = new Array(exemplarsIndices.length); + + for (var _c = 0; _c < exemplarsIndices.length; _c++) { + retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]); + } + + return retClusters; + }; + + var affinityPropagation$1 = { + affinityPropagation: affinityPropagation, + ap: affinityPropagation + }; + + var hierholzerDefaults = defaults$g({ + root: undefined, + directed: false + }); + var elesfn$k = { + hierholzer: function hierholzer(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + directed: args[1] + }; + } + + var _hierholzerDefaults = hierholzerDefaults(options), + root = _hierholzerDefaults.root, + directed = _hierholzerDefaults.directed; + + var eles = this; + var dflag = false; + var oddIn; + var oddOut; + var startVertex; + if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id(); + var nodes = {}; + var edges = {}; + + if (directed) { + eles.forEach(function (ele) { + var id = ele.id(); + + if (ele.isNode()) { + var ind = ele.indegree(true); + var outd = ele.outdegree(true); + var d1 = ind - outd; + var d2 = outd - ind; + + if (d1 == 1) { + if (oddIn) dflag = true;else oddIn = id; + } else if (d2 == 1) { + if (oddOut) dflag = true;else oddOut = id; + } else if (d2 > 1 || d1 > 1) { + dflag = true; + } + + nodes[id] = []; + ele.outgoers().forEach(function (e) { + if (e.isEdge()) nodes[id].push(e.id()); + }); + } else { + edges[id] = [undefined, ele.target().id()]; + } + }); + } else { + eles.forEach(function (ele) { + var id = ele.id(); + + if (ele.isNode()) { + var d = ele.degree(true); + + if (d % 2) { + if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true; + } + + nodes[id] = []; + ele.connectedEdges().forEach(function (e) { + return nodes[id].push(e.id()); + }); + } else { + edges[id] = [ele.source().id(), ele.target().id()]; + } + }); + } + + var result = { + found: false, + trail: undefined + }; + if (dflag) return result;else if (oddOut && oddIn) { + if (directed) { + if (startVertex && oddOut != startVertex) { + return result; + } + + startVertex = oddOut; + } else { + if (startVertex && oddOut != startVertex && oddIn != startVertex) { + return result; + } else if (!startVertex) { + startVertex = oddOut; + } + } + } else { + if (!startVertex) startVertex = eles[0].id(); + } + + var walk = function walk(v) { + var currentNode = v; + var subtour = [v]; + var adj, adjTail, adjHead; + + while (nodes[currentNode].length) { + adj = nodes[currentNode].shift(); + adjTail = edges[adj][0]; + adjHead = edges[adj][1]; + + if (currentNode != adjHead) { + nodes[adjHead] = nodes[adjHead].filter(function (e) { + return e != adj; + }); + currentNode = adjHead; + } else if (!directed && currentNode != adjTail) { + nodes[adjTail] = nodes[adjTail].filter(function (e) { + return e != adj; + }); + currentNode = adjTail; + } + + subtour.unshift(adj); + subtour.unshift(currentNode); + } + + return subtour; + }; + + var trail = []; + var subtour = []; + subtour = walk(startVertex); + + while (subtour.length != 1) { + if (nodes[subtour[0]].length == 0) { + trail.unshift(eles.getElementById(subtour.shift())); + trail.unshift(eles.getElementById(subtour.shift())); + } else { + subtour = walk(subtour.shift()).concat(subtour); + } + } + + trail.unshift(eles.getElementById(subtour.shift())); // final node + + for (var d in nodes) { + if (nodes[d].length) { + return result; + } + } + + result.found = true; + result.trail = this.spawn(trail, true); + return result; + } + }; + + var hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() { + var eles = this; + var nodes = {}; + var id = 0; + var edgeCount = 0; + var components = []; + var stack = []; + var visitedEdges = {}; + + var buildComponent = function buildComponent(x, y) { + var i = stack.length - 1; + var cutset = []; + var component = eles.spawn(); + + while (stack[i].x != x || stack[i].y != y) { + cutset.push(stack.pop().edge); + i--; + } + + cutset.push(stack.pop().edge); + cutset.forEach(function (edge) { + var connectedNodes = edge.connectedNodes().intersection(eles); + component.merge(edge); + connectedNodes.forEach(function (node) { + var nodeId = node.id(); + var connectedEdges = node.connectedEdges().intersection(eles); + component.merge(node); + + if (!nodes[nodeId].cutVertex) { + component.merge(connectedEdges); + } else { + component.merge(connectedEdges.filter(function (edge) { + return edge.isLoop(); + })); + } + }); + }); + components.push(component); + }; + + var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) { + if (root === parent) edgeCount += 1; + nodes[currentNode] = { + id: id, + low: id++, + cutVertex: false + }; + var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles); + + if (edges.size() === 0) { + components.push(eles.spawn(eles.getElementById(currentNode))); + } else { + var sourceId, targetId, otherNodeId, edgeId; + edges.forEach(function (edge) { + sourceId = edge.source().id(); + targetId = edge.target().id(); + otherNodeId = sourceId === currentNode ? targetId : sourceId; + + if (otherNodeId !== parent) { + edgeId = edge.id(); + + if (!visitedEdges[edgeId]) { + visitedEdges[edgeId] = true; + stack.push({ + x: currentNode, + y: otherNodeId, + edge: edge + }); + } + + if (!(otherNodeId in nodes)) { + biconnectedSearch(root, otherNodeId, currentNode); + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low); + + if (nodes[currentNode].id <= nodes[otherNodeId].low) { + nodes[currentNode].cutVertex = true; + buildComponent(currentNode, otherNodeId); + } + } else { + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id); + } + } + }); + } + }; + + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + + if (!(nodeId in nodes)) { + edgeCount = 0; + biconnectedSearch(nodeId, nodeId); + nodes[nodeId].cutVertex = edgeCount > 1; + } + } + }); + var cutVertices = Object.keys(nodes).filter(function (id) { + return nodes[id].cutVertex; + }).map(function (id) { + return eles.getElementById(id); + }); + return { + cut: eles.spawn(cutVertices), + components: components + }; + }; + + var hopcroftTarjanBiconnected$1 = { + hopcroftTarjanBiconnected: hopcroftTarjanBiconnected, + htbc: hopcroftTarjanBiconnected, + htb: hopcroftTarjanBiconnected, + hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected + }; + + var tarjanStronglyConnected = function tarjanStronglyConnected() { + var eles = this; + var nodes = {}; + var index = 0; + var components = []; + var stack = []; + var cut = eles.spawn(eles); + + var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) { + stack.push(sourceNodeId); + nodes[sourceNodeId] = { + index: index, + low: index++, + explored: false + }; + var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles); + connectedEdges.forEach(function (edge) { + var targetNodeId = edge.target().id(); + + if (targetNodeId !== sourceNodeId) { + if (!(targetNodeId in nodes)) { + stronglyConnectedSearch(targetNodeId); + } + + if (!nodes[targetNodeId].explored) { + nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low); + } + } + }); + + if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) { + var componentNodes = eles.spawn(); + + for (;;) { + var nodeId = stack.pop(); + componentNodes.merge(eles.getElementById(nodeId)); + nodes[nodeId].low = nodes[sourceNodeId].index; + nodes[nodeId].explored = true; + + if (nodeId === sourceNodeId) { + break; + } + } + + var componentEdges = componentNodes.edgesWith(componentNodes); + var component = componentNodes.merge(componentEdges); + components.push(component); + cut = cut.difference(component); + } + }; + + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + + if (!(nodeId in nodes)) { + stronglyConnectedSearch(nodeId); + } + } + }); + return { + cut: cut, + components: components + }; + }; + + var tarjanStronglyConnected$1 = { + tarjanStronglyConnected: tarjanStronglyConnected, + tsc: tarjanStronglyConnected, + tscc: tarjanStronglyConnected, + tarjanStronglyConnectedComponents: tarjanStronglyConnected + }; + + var elesfn$j = {}; + [elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) { + extend(elesfn$j, props); + }); + + /*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + */ + + /* promise states [Promises/A+ 2.1] */ + var STATE_PENDING = 0; + /* [Promises/A+ 2.1.1] */ + + var STATE_FULFILLED = 1; + /* [Promises/A+ 2.1.2] */ + + var STATE_REJECTED = 2; + /* [Promises/A+ 2.1.3] */ + + /* promise object constructor */ + + var api = function api(executor) { + /* optionally support non-constructor/plain-function call */ + if (!(this instanceof api)) return new api(executor); + /* initialize object */ + + this.id = 'Thenable/1.0.7'; + this.state = STATE_PENDING; + /* initial state */ + + this.fulfillValue = undefined; + /* initial value */ + + /* [Promises/A+ 1.3, 2.1.2.2] */ + + this.rejectReason = undefined; + /* initial reason */ + + /* [Promises/A+ 1.5, 2.1.3.2] */ + + this.onFulfilled = []; + /* initial handlers */ + + this.onRejected = []; + /* initial handlers */ + + /* provide optional information-hiding proxy */ + + this.proxy = { + then: this.then.bind(this) + }; + /* support optional executor function */ + + if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); + }; + /* promise API methods */ + + + api.prototype = { + /* promise resolving methods */ + fulfill: function fulfill(value) { + return deliver(this, STATE_FULFILLED, 'fulfillValue', value); + }, + reject: function reject(value) { + return deliver(this, STATE_REJECTED, 'rejectReason', value); + }, + + /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */ + then: function then(onFulfilled, onRejected) { + var curr = this; + var next = new api(); + /* [Promises/A+ 2.2.7] */ + + curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); + /* [Promises/A+ 2.2.2/2.2.6] */ + + curr.onRejected.push(resolver(onRejected, next, 'reject')); + /* [Promises/A+ 2.2.3/2.2.6] */ + + execute(curr); + return next.proxy; + /* [Promises/A+ 2.2.7, 3.3] */ + } + }; + /* deliver an action */ + + var deliver = function deliver(curr, state, name, value) { + if (curr.state === STATE_PENDING) { + curr.state = state; + /* [Promises/A+ 2.1.2.1, 2.1.3.1] */ + + curr[name] = value; + /* [Promises/A+ 2.1.2.2, 2.1.3.2] */ + + execute(curr); + } + + return curr; + }; + /* execute all handlers */ + + + var execute = function execute(curr) { + if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason); + }; + /* execute particular set of handlers */ + + + var execute_handlers = function execute_handlers(curr, name, value) { + /* global setImmediate: true */ + + /* global setTimeout: true */ + + /* short-circuit processing */ + if (curr[name].length === 0) return; + /* iterate over all handlers, exactly once */ + + var handlers = curr[name]; + curr[name] = []; + /* [Promises/A+ 2.2.2.3, 2.2.3.3] */ + + var func = function func() { + for (var i = 0; i < handlers.length; i++) { + handlers[i](value); + } + /* [Promises/A+ 2.2.5] */ + + }; + /* execute procedure asynchronously */ + + /* [Promises/A+ 2.2.4, 3.1] */ + + + if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0); + }; + /* generate a resolver function */ + + + var resolver = function resolver(cb, next, method) { + return function (value) { + if (typeof cb !== 'function') + /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */ + next[method].call(next, value); + /* [Promises/A+ 2.2.7.3, 2.2.7.4] */ + else { + var result; + + try { + result = cb(value); + } + /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ + catch (e) { + next.reject(e); + /* [Promises/A+ 2.2.7.2] */ + + return; + } + + resolve(next, result); + /* [Promises/A+ 2.2.7.1] */ + } + }; + }; + /* "Promise Resolution Procedure" */ + + /* [Promises/A+ 2.3] */ + + + var resolve = function resolve(promise, x) { + /* sanity check arguments */ + + /* [Promises/A+ 2.3.1] */ + if (promise === x || promise.proxy === x) { + promise.reject(new TypeError('cannot resolve promise with itself')); + return; + } + /* surgically check for a "then" method + (mainly to just call the "getter" of "then" only once) */ + + + var then; + + if (_typeof(x) === 'object' && x !== null || typeof x === 'function') { + try { + then = x.then; + } + /* [Promises/A+ 2.3.3.1, 3.5] */ + catch (e) { + promise.reject(e); + /* [Promises/A+ 2.3.3.2] */ + + return; + } + } + /* handle own Thenables [Promises/A+ 2.3.2] + and similar "thenables" [Promises/A+ 2.3.3] */ + + + if (typeof then === 'function') { + var resolved = false; + + try { + /* call retrieved "then" method */ + + /* [Promises/A+ 2.3.3.3] */ + then.call(x, + /* resolvePromise */ + + /* [Promises/A+ 2.3.3.3.1] */ + function (y) { + if (resolved) return; + resolved = true; + /* [Promises/A+ 2.3.3.3.3] */ + + if (y === x) + /* [Promises/A+ 3.6] */ + promise.reject(new TypeError('circular thenable chain'));else resolve(promise, y); + }, + /* rejectPromise */ + + /* [Promises/A+ 2.3.3.3.2] */ + function (r) { + if (resolved) return; + resolved = true; + /* [Promises/A+ 2.3.3.3.3] */ + + promise.reject(r); + }); + } catch (e) { + if (!resolved) + /* [Promises/A+ 2.3.3.3.3] */ + promise.reject(e); + /* [Promises/A+ 2.3.3.3.4] */ + } + + return; + } + /* handle other values */ + + + promise.fulfill(x); + /* [Promises/A+ 2.3.4, 2.3.3.4] */ + }; // so we always have Promise.all() + + + api.all = function (ps) { + return new api(function (resolveAll, rejectAll) { + var vals = new Array(ps.length); + var doneCount = 0; + + var fulfill = function fulfill(i, val) { + vals[i] = val; + doneCount++; + + if (doneCount === ps.length) { + resolveAll(vals); + } + }; + + for (var i = 0; i < ps.length; i++) { + (function (i) { + var p = ps[i]; + var isPromise = p != null && p.then != null; + + if (isPromise) { + p.then(function (val) { + fulfill(i, val); + }, function (err) { + rejectAll(err); + }); + } else { + var val = p; + fulfill(i, val); + } + })(i); + } + }); + }; + + api.resolve = function (val) { + return new api(function (resolve, reject) { + resolve(val); + }); + }; + + api.reject = function (val) { + return new api(function (resolve, reject) { + reject(val); + }); + }; + + var Promise$1 = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef + + var Animation = function Animation(target, opts, opts2) { + var isCore = core(target); + var isEle = !isCore; + + var _p = this._private = extend({ + duration: 1000 + }, opts, opts2); + + _p.target = target; + _p.style = _p.style || _p.css; + _p.started = false; + _p.playing = false; + _p.hooked = false; + _p.applying = false; + _p.progress = 0; + _p.completes = []; + _p.frames = []; + + if (_p.complete && fn$6(_p.complete)) { + _p.completes.push(_p.complete); + } + + if (isEle) { + var pos = target.position(); + _p.startPosition = _p.startPosition || { + x: pos.x, + y: pos.y + }; + _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); + } + + if (isCore) { + var pan = target.pan(); + _p.startPan = { + x: pan.x, + y: pan.y + }; + _p.startZoom = target.zoom(); + } // for future timeline/animations impl + + + this.length = 1; + this[0] = this; + }; + + var anifn = Animation.prototype; + extend(anifn, { + instanceString: function instanceString() { + return 'animation'; + }, + hook: function hook() { + var _p = this._private; + + if (!_p.hooked) { + // add to target's animation queue + var q; + var tAni = _p.target._private.animation; + + if (_p.queue) { + q = tAni.queue; + } else { + q = tAni.current; + } + + q.push(this); // add to the animation loop pool + + if (elementOrCollection(_p.target)) { + _p.target.cy().addToAnimationPool(_p.target); + } + + _p.hooked = true; + } + + return this; + }, + play: function play() { + var _p = this._private; // autorewind + + if (_p.progress === 1) { + _p.progress = 0; + } + + _p.playing = true; + _p.started = false; // needs to be started by animation loop + + _p.stopped = false; + this.hook(); // the animation loop will start the animation... + + return this; + }, + playing: function playing() { + return this._private.playing; + }, + apply: function apply() { + var _p = this._private; + _p.applying = true; + _p.started = false; // needs to be started by animation loop + + _p.stopped = false; + this.hook(); // the animation loop will apply the animation at this progress + + return this; + }, + applying: function applying() { + return this._private.applying; + }, + pause: function pause() { + var _p = this._private; + _p.playing = false; + _p.started = false; + return this; + }, + stop: function stop() { + var _p = this._private; + _p.playing = false; + _p.started = false; + _p.stopped = true; // to be removed from animation queues + + return this; + }, + rewind: function rewind() { + return this.progress(0); + }, + fastforward: function fastforward() { + return this.progress(1); + }, + time: function time(t) { + var _p = this._private; + + if (t === undefined) { + return _p.progress * _p.duration; + } else { + return this.progress(t / _p.duration); + } + }, + progress: function progress(p) { + var _p = this._private; + var wasPlaying = _p.playing; + + if (p === undefined) { + return _p.progress; + } else { + if (wasPlaying) { + this.pause(); + } + + _p.progress = p; + _p.started = false; + + if (wasPlaying) { + this.play(); + } + } + + return this; + }, + completed: function completed() { + return this._private.progress === 1; + }, + reverse: function reverse() { + var _p = this._private; + var wasPlaying = _p.playing; + + if (wasPlaying) { + this.pause(); + } + + _p.progress = 1 - _p.progress; + _p.started = false; + + var swap = function swap(a, b) { + var _pa = _p[a]; + + if (_pa == null) { + return; + } + + _p[a] = _p[b]; + _p[b] = _pa; + }; + + swap('zoom', 'startZoom'); + swap('pan', 'startPan'); + swap('position', 'startPosition'); // swap styles + + if (_p.style) { + for (var i = 0; i < _p.style.length; i++) { + var prop = _p.style[i]; + var name = prop.name; + var startStyleProp = _p.startStyle[name]; + _p.startStyle[name] = prop; + _p.style[i] = startStyleProp; + } + } + + if (wasPlaying) { + this.play(); + } + + return this; + }, + promise: function promise(type) { + var _p = this._private; + var arr; + + switch (type) { + case 'frame': + arr = _p.frames; + break; + + default: + case 'complete': + case 'completed': + arr = _p.completes; + } + + return new Promise$1(function (resolve, reject) { + arr.push(function () { + resolve(); + }); + }); + } + }); + anifn.complete = anifn.completed; + anifn.run = anifn.play; + anifn.running = anifn.playing; + + var define$3 = { + animated: function animated() { + return function animatedImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return false; + } + + var ele = all[0]; + + if (ele) { + return ele._private.animation.current.length > 0; + } + }; + }, + // animated + clearQueue: function clearQueue() { + return function clearQueueImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + ele._private.animation.queue = []; + } + + return this; + }; + }, + // clearQueue + delay: function delay() { + return function delayImpl(time, complete) { + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + return this.animate({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + delayAnimation: function delayAnimation() { + return function delayAnimationImpl(time, complete) { + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + return this.animation({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + animation: function animation() { + return function animationImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + var isCore = !selfIsArrayLike; + var isEles = !isCore; + + if (!cy.styleEnabled()) { + return this; + } + + var style = cy.style(); + properties = extend({}, properties, params); + var propertiesEmpty = Object.keys(properties).length === 0; + + if (propertiesEmpty) { + return new Animation(all[0], properties); // nothing to animate + } + + if (properties.duration === undefined) { + properties.duration = 400; + } + + switch (properties.duration) { + case 'slow': + properties.duration = 600; + break; + + case 'fast': + properties.duration = 200; + break; + } + + if (isEles) { + properties.style = style.getPropsList(properties.style || properties.css); + properties.css = undefined; + } + + if (isEles && properties.renderedPosition != null) { + var rpos = properties.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + properties.position = renderedToModelPosition(rpos, zoom, pan); + } // override pan w/ panBy if set + + + if (isCore && properties.panBy != null) { + var panBy = properties.panBy; + var cyPan = cy.pan(); + properties.pan = { + x: cyPan.x + panBy.x, + y: cyPan.y + panBy.y + }; + } // override pan w/ center if set + + + var center = properties.center || properties.centre; + + if (isCore && center != null) { + var centerPan = cy.getCenterPan(center.eles, properties.zoom); + + if (centerPan != null) { + properties.pan = centerPan; + } + } // override pan & zoom w/ fit if set + + + if (isCore && properties.fit != null) { + var fit = properties.fit; + var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding); + + if (fitVp != null) { + properties.pan = fitVp.pan; + properties.zoom = fitVp.zoom; + } + } // override zoom (& potentially pan) w/ zoom obj if set + + + if (isCore && plainObject(properties.zoom)) { + var vp = cy.getZoomedViewport(properties.zoom); + + if (vp != null) { + if (vp.zoomed) { + properties.zoom = vp.zoom; + } + + if (vp.panned) { + properties.pan = vp.pan; + } + } else { + properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed + } + } + + return new Animation(all[0], properties); + }; + }, + // animate + animate: function animate() { + return function animateImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + if (params) { + properties = extend({}, properties, params); + } // manually hook and run the animation + + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var queue = ele.animated() && (properties.queue === undefined || properties.queue); + var ani = ele.animation(properties, queue ? { + queue: true + } : undefined); + ani.play(); + } + + return this; // chaining + }; + }, + // animate + stop: function stop() { + return function stopImpl(clearQueue, jumpToEnd) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var _p = ele._private; + var anis = _p.animation.current; + + for (var j = 0; j < anis.length; j++) { + var ani = anis[j]; + var ani_p = ani._private; + + if (jumpToEnd) { + // next iteration of the animation loop, the animation + // will go straight to the end and be removed + ani_p.duration = 0; + } + } // clear the queue of future animations + + + if (clearQueue) { + _p.animation.queue = []; + } + + if (!jumpToEnd) { + _p.animation.current = []; + } + } // we have to notify (the animation loop doesn't do it for us on `stop`) + + + cy.notify('draw'); + return this; + }; + } // stop + + }; // define + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + var isArray_1 = isArray; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray_1(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol_1(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + var _isKey = isKey; + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject_1(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = _baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + var isFunction_1 = isFunction; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = _root['__core-js_shared__']; + + var _coreJsData = coreJsData; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + var _isMasked = isMasked; + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + var _toSource = toSource; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto$3 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$3).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); + } + + var _baseIsNative = baseIsNative; + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue$1(object, key) { + return object == null ? undefined : object[key]; + } + + var _getValue = getValue$1; + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; + } + + var _getNative = getNative; + + /* Built-in method references that are verified to be native. */ + var nativeCreate = _getNative(Object, 'create'); + + var _nativeCreate = nativeCreate; + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; + this.size = 0; + } + + var _hashClear = hashClear; + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + var _hashDelete = hashDelete; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto$2 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (_nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED$1 ? undefined : result; + } + return hasOwnProperty$2.call(data, key) ? data[key] : undefined; + } + + var _hashGet = hashGet; + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$1.call(data, key); + } + + var _hashHas = hashHas; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + var _hashSet = hashSet; + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = _hashClear; + Hash.prototype['delete'] = _hashDelete; + Hash.prototype.get = _hashGet; + Hash.prototype.has = _hashHas; + Hash.prototype.set = _hashSet; + + var _Hash = Hash; + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + var _listCacheClear = listCacheClear; + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + var eq_1 = eq; + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq_1(array[length][0], key)) { + return length; + } + } + return -1; + } + + var _assocIndexOf = assocIndexOf; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + var _listCacheDelete = listCacheDelete; + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + var _listCacheGet = listCacheGet; + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return _assocIndexOf(this.__data__, key) > -1; + } + + var _listCacheHas = listCacheHas; + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + var _listCacheSet = listCacheSet; + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = _listCacheClear; + ListCache.prototype['delete'] = _listCacheDelete; + ListCache.prototype.get = _listCacheGet; + ListCache.prototype.has = _listCacheHas; + ListCache.prototype.set = _listCacheSet; + + var _ListCache = ListCache; + + /* Built-in method references that are verified to be native. */ + var Map$1 = _getNative(_root, 'Map'); + + var _Map = Map$1; + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new _Hash, + 'map': new (_Map || _ListCache), + 'string': new _Hash + }; + } + + var _mapCacheClear = mapCacheClear; + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + var _isKeyable = isKeyable; + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return _isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + var _getMapData = getMapData; + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = _getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + var _mapCacheDelete = mapCacheDelete; + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return _getMapData(this, key).get(key); + } + + var _mapCacheGet = mapCacheGet; + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return _getMapData(this, key).has(key); + } + + var _mapCacheHas = mapCacheHas; + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = _getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + var _mapCacheSet = mapCacheSet; + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = _mapCacheClear; + MapCache.prototype['delete'] = _mapCacheDelete; + MapCache.prototype.get = _mapCacheGet; + MapCache.prototype.has = _mapCacheHas; + MapCache.prototype.set = _mapCacheSet; + + var _MapCache = MapCache; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || _MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = _MapCache; + + var memoize_1 = memoize; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize_1(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + var _memoizeCapped = memoizeCapped; + + /** Used to match property names within property paths. */ + var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + var _stringToPath = stringToPath; + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + var _arrayMap = arrayMap; + + /** Used as references for various `Number` constants. */ + var INFINITY$1 = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = _Symbol ? _Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray_1(value)) { + // Recursively convert values (susceptible to call stack limits). + return _arrayMap(value, baseToString) + ''; + } + if (isSymbol_1(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; + } + + var _baseToString = baseToString; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString$1(value) { + return value == null ? '' : _baseToString(value); + } + + var toString_1 = toString$1; + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray_1(value)) { + return value; + } + return _isKey(value, object) ? [value] : _stringToPath(toString_1(value)); + } + + var _castPath = castPath; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol_1(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + var _toKey = toKey; + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = _castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[_toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + var _baseGet = baseGet; + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : _baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + var get_1 = get; + + var defineProperty = (function() { + try { + var func = _getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + var _defineProperty = defineProperty; + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty) { + _defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + var _baseAssignValue = baseAssignValue; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq_1(objValue, value)) || + (value === undefined && !(key in object))) { + _baseAssignValue(object, key, value); + } + } + + var _assignValue = assignValue; + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + var _isIndex = isIndex; + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject_1(object)) { + return object; + } + path = _castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = _toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject_1(objValue) + ? objValue + : (_isIndex(path[index + 1]) ? [] : {}); + } + } + _assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + var _baseSet = baseSet; + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : _baseSet(object, path, value); + } + + var set_1 = set; + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + var _copyArray = copyArray; + + /** + * Converts `value` to a property path array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {*} value The value to convert. + * @returns {Array} Returns the new property path array. + * @example + * + * _.toPath('a.b.c'); + * // => ['a', 'b', 'c'] + * + * _.toPath('a[0].b.c'); + * // => ['a', '0', 'b', 'c'] + */ + function toPath(value) { + if (isArray_1(value)) { + return _arrayMap(value, _toKey); + } + return isSymbol_1(value) ? [value] : _copyArray(_stringToPath(toString_1(value))); + } + + var toPath_1 = toPath; + + var define$2 = { + // access data field + data: function data(params) { + var defaults = { + field: 'data', + bindingEvent: 'data', + allowBinding: false, + allowSetting: false, + allowGetting: false, + settingEvent: 'data', + settingTriggersEvent: false, + triggerFnName: 'trigger', + immutableKeys: {}, + // key => true if immutable + updateStyle: false, + beforeGet: function beforeGet(self) {}, + beforeSet: function beforeSet(self, obj) {}, + onSet: function onSet(self) {}, + canSet: function canSet(self) { + return true; + } + }; + params = extend({}, defaults, params); + return function dataImpl(name, value) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var single = selfIsArrayLike ? self[0] : self; // .data('foo', ...) + + if (string(name)) { + // set or get property + var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot + + var path = isPathLike && toPath_1(name); // .data('foo') + + if (p.allowGetting && value === undefined) { + // get + var ret; + + if (single) { + p.beforeGet(single); // check if it's path and a field with the same name doesn't exist + + if (path && single._private[p.field][name] === undefined) { + ret = get_1(single._private[p.field], path); + } else { + ret = single._private[p.field][name]; + } + } + + return ret; // .data('foo', 'bar') + } else if (p.allowSetting && value !== undefined) { + // set + var valid = !p.immutableKeys[name]; + + if (valid) { + var change = _defineProperty$1({}, name, value); + + p.beforeSet(self, change); + + for (var i = 0, l = all.length; i < l; i++) { + var ele = all[i]; + + if (p.canSet(ele)) { + if (path && single._private[p.field][name] === undefined) { + set_1(ele._private[p.field], path, value); + } else { + ele._private[p.field][name] = value; + } + } + } // update mappers if asked + + + if (p.updateStyle) { + self.updateStyle(); + } // call onSet callback + + + p.onSet(self); + + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } + } + } // .data({ 'foo': 'bar' }) + + } else if (p.allowSetting && plainObject(name)) { + // extend + var obj = name; + var k, v; + var keys = Object.keys(obj); + p.beforeSet(self, obj); + + for (var _i = 0; _i < keys.length; _i++) { + k = keys[_i]; + v = obj[k]; + + var _valid = !p.immutableKeys[k]; + + if (_valid) { + for (var j = 0; j < all.length; j++) { + var _ele = all[j]; + + if (p.canSet(_ele)) { + _ele._private[p.field][k] = v; + } + } + } + } // update mappers if asked + + + if (p.updateStyle) { + self.updateStyle(); + } // call onSet callback + + + p.onSet(self); + + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } // .data(function(){ ... }) + + } else if (p.allowBinding && fn$6(name)) { + // bind to event + var fn = name; + self.on(p.bindingEvent, fn); // .data() + } else if (p.allowGetting && name === undefined) { + // get whole object + var _ret; + + if (single) { + p.beforeGet(single); + _ret = single._private[p.field]; + } + + return _ret; + } + + return self; // maintain chainability + }; // function + }, + // data + // remove data field + removeData: function removeData(params) { + var defaults = { + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: false, + immutableKeys: {} // key => true if immutable + + }; + params = extend({}, defaults, params); + return function removeDataImpl(names) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + // .removeData('foo bar') + + if (string(names)) { + // then get the list of keys, and delete them + var keys = names.split(/\s+/); + var l = keys.length; + + for (var i = 0; i < l; i++) { + // delete each non-empty key + var key = keys[i]; + + if (emptyString(key)) { + continue; + } + + var valid = !p.immutableKeys[key]; // not valid if immutable + + if (valid) { + for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) { + all[i_a]._private[p.field][key] = undefined; + } + } + } + + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } // .removeData() + + } else if (names === undefined) { + // then delete all keys + for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) { + var _privateFields = all[_i_a]._private[p.field]; + + var _keys = Object.keys(_privateFields); + + for (var _i2 = 0; _i2 < _keys.length; _i2++) { + var _key = _keys[_i2]; + var validKeyToDelete = !p.immutableKeys[_key]; + + if (validKeyToDelete) { + _privateFields[_key] = undefined; + } + } + } + + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } + } + + return self; // maintain chaining + }; // function + } // removeData + + }; // define + + var define$1 = { + eventAliasesOn: function eventAliasesOn(proto) { + var p = proto; + p.addListener = p.listen = p.bind = p.on; + p.unlisten = p.unbind = p.off = p.removeListener; + p.trigger = p.emit; // this is just a wrapper alias of .on() + + p.pon = p.promiseOn = function (events, selector) { + var self = this; + var args = Array.prototype.slice.call(arguments, 0); + return new Promise$1(function (resolve, reject) { + var callback = function callback(e) { + self.off.apply(self, offArgs); + resolve(e); + }; + + var onArgs = args.concat([callback]); + var offArgs = onArgs.concat([]); + self.on.apply(self, onArgs); + }); + }; + } + }; // define + + // use this module to cherry pick functions into your prototype + var define = {}; + [define$3, define$2, define$1].forEach(function (m) { + extend(define, m); + }); + + var elesfn$i = { + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop() + }; + + var elesfn$h = { + classes: function classes(_classes) { + var self = this; + + if (_classes === undefined) { + var ret = []; + + self[0]._private.classes.forEach(function (cls) { + return ret.push(cls); + }); + + return ret; + } else if (!array(_classes)) { + // extract classes from string + _classes = (_classes || '').match(/\S+/g) || []; + } + + var changed = []; + var classesSet = new Set$1(_classes); // check and update each ele + + for (var j = 0; j < self.length; j++) { + var ele = self[j]; + var _p = ele._private; + var eleClasses = _p.classes; + var changedEle = false; // check if ele has all of the passed classes + + for (var i = 0; i < _classes.length; i++) { + var cls = _classes[i]; + var eleHasClass = eleClasses.has(cls); + + if (!eleHasClass) { + changedEle = true; + break; + } + } // check if ele has classes outside of those passed + + + if (!changedEle) { + changedEle = eleClasses.size !== _classes.length; + } + + if (changedEle) { + _p.classes = classesSet; + changed.push(ele); + } + } // trigger update style on those eles that had class changes + + + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + + return self; + }, + addClass: function addClass(classes) { + return this.toggleClass(classes, true); + }, + hasClass: function hasClass(className) { + var ele = this[0]; + return ele != null && ele._private.classes.has(className); + }, + toggleClass: function toggleClass(classes, toggle) { + if (!array(classes)) { + // extract classes from string + classes = classes.match(/\S+/g) || []; + } + + var self = this; + var toggleUndefd = toggle === undefined; + var changed = []; // eles who had classes changed + + for (var i = 0, il = self.length; i < il; i++) { + var ele = self[i]; + var eleClasses = ele._private.classes; + var changedEle = false; + + for (var j = 0; j < classes.length; j++) { + var cls = classes[j]; + var hasClass = eleClasses.has(cls); + var changedNow = false; + + if (toggle || toggleUndefd && !hasClass) { + eleClasses.add(cls); + changedNow = true; + } else if (!toggle || toggleUndefd && hasClass) { + eleClasses["delete"](cls); + changedNow = true; + } + + if (!changedEle && changedNow) { + changed.push(ele); + changedEle = true; + } + } // for j classes + + } // for i eles + // trigger update style on those eles that had class changes + + + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + + return self; + }, + removeClass: function removeClass(classes) { + return this.toggleClass(classes, false); + }, + flashClass: function flashClass(classes, duration) { + var self = this; + + if (duration == null) { + duration = 250; + } else if (duration === 0) { + return self; // nothing to do really + } + + self.addClass(classes); + setTimeout(function () { + self.removeClass(classes); + }, duration); + return self; + } + }; + elesfn$h.className = elesfn$h.classNames = elesfn$h.classes; + + var tokens = { + metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', + // chars we need to escape in let names, etc + comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', + // binary comparison op (used in data selectors) + boolOp: '\\?|\\!|\\^', + // boolean (unary) operators (used in data selectors) + string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", + // string literals (used in data selectors) -- doublequotes | singlequotes + number: number, + // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123 + meta: 'degree|indegree|outdegree', + // allowed metadata fields (i.e. allowed functions to use from Collection) + separator: '\\s*,\\s*', + // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass + descendant: '\\s+', + child: '\\s+>\\s+', + subject: '\\$', + group: 'node|edge|\\*', + directedEdge: '\\s+->\\s+', + undirectedEdge: '\\s+<->\\s+' + }; + tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods + + tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name + + tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number + + tokens.id = tokens.variable; // an element id (follows variable conventions) + + (function () { + var ops, op, i; // add @ variants to comparatorOp + + ops = tokens.comparatorOp.split('|'); + + for (i = 0; i < ops.length; i++) { + op = ops[i]; + tokens.comparatorOp += '|@' + op; + } // add ! variants to comparatorOp + + + ops = tokens.comparatorOp.split('|'); + + for (i = 0; i < ops.length; i++) { + op = ops[i]; + + if (op.indexOf('!') >= 0) { + continue; + } // skip ops that explicitly contain ! + + + if (op === '=') { + continue; + } // skip = b/c != is explicitly defined + + + tokens.comparatorOp += '|\\!' + op; + } + })(); + + /** + * Make a new query object + * + * @prop type {Type} The type enum (int) of the query + * @prop checks List of checks to make against an ele to test for a match + */ + var newQuery = function newQuery() { + return { + checks: [] + }; + }; + + /** + * A check type enum-like object. Uses integer values for fast match() lookup. + * The ordering does not matter as long as the ints are unique. + */ + var Type = { + /** E.g. node */ + GROUP: 0, + + /** A collection of elements */ + COLLECTION: 1, + + /** A filter(ele) function */ + FILTER: 2, + + /** E.g. [foo > 1] */ + DATA_COMPARE: 3, + + /** E.g. [foo] */ + DATA_EXIST: 4, + + /** E.g. [?foo] */ + DATA_BOOL: 5, + + /** E.g. [[degree > 2]] */ + META_COMPARE: 6, + + /** E.g. :selected */ + STATE: 7, + + /** E.g. #foo */ + ID: 8, + + /** E.g. .foo */ + CLASS: 9, + + /** E.g. #foo <-> #bar */ + UNDIRECTED_EDGE: 10, + + /** E.g. #foo -> #bar */ + DIRECTED_EDGE: 11, + + /** E.g. $#foo -> #bar */ + NODE_SOURCE: 12, + + /** E.g. #foo -> $#bar */ + NODE_TARGET: 13, + + /** E.g. $#foo <-> #bar */ + NODE_NEIGHBOR: 14, + + /** E.g. #foo > #bar */ + CHILD: 15, + + /** E.g. #foo #bar */ + DESCENDANT: 16, + + /** E.g. $#foo > #bar */ + PARENT: 17, + + /** E.g. $#foo #bar */ + ANCESTOR: 18, + + /** E.g. #foo > $bar > #baz */ + COMPOUND_SPLIT: 19, + + /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */ + TRUE: 20 + }; + + var stateSelectors = [{ + selector: ':selected', + matches: function matches(ele) { + return ele.selected(); + } + }, { + selector: ':unselected', + matches: function matches(ele) { + return !ele.selected(); + } + }, { + selector: ':selectable', + matches: function matches(ele) { + return ele.selectable(); + } + }, { + selector: ':unselectable', + matches: function matches(ele) { + return !ele.selectable(); + } + }, { + selector: ':locked', + matches: function matches(ele) { + return ele.locked(); + } + }, { + selector: ':unlocked', + matches: function matches(ele) { + return !ele.locked(); + } + }, { + selector: ':visible', + matches: function matches(ele) { + return ele.visible(); + } + }, { + selector: ':hidden', + matches: function matches(ele) { + return !ele.visible(); + } + }, { + selector: ':transparent', + matches: function matches(ele) { + return ele.transparent(); + } + }, { + selector: ':grabbed', + matches: function matches(ele) { + return ele.grabbed(); + } + }, { + selector: ':free', + matches: function matches(ele) { + return !ele.grabbed(); + } + }, { + selector: ':removed', + matches: function matches(ele) { + return ele.removed(); + } + }, { + selector: ':inside', + matches: function matches(ele) { + return !ele.removed(); + } + }, { + selector: ':grabbable', + matches: function matches(ele) { + return ele.grabbable(); + } + }, { + selector: ':ungrabbable', + matches: function matches(ele) { + return !ele.grabbable(); + } + }, { + selector: ':animated', + matches: function matches(ele) { + return ele.animated(); + } + }, { + selector: ':unanimated', + matches: function matches(ele) { + return !ele.animated(); + } + }, { + selector: ':parent', + matches: function matches(ele) { + return ele.isParent(); + } + }, { + selector: ':childless', + matches: function matches(ele) { + return ele.isChildless(); + } + }, { + selector: ':child', + matches: function matches(ele) { + return ele.isChild(); + } + }, { + selector: ':orphan', + matches: function matches(ele) { + return ele.isOrphan(); + } + }, { + selector: ':nonorphan', + matches: function matches(ele) { + return ele.isChild(); + } + }, { + selector: ':compound', + matches: function matches(ele) { + if (ele.isNode()) { + return ele.isParent(); + } else { + return ele.source().isParent() || ele.target().isParent(); + } + } + }, { + selector: ':loop', + matches: function matches(ele) { + return ele.isLoop(); + } + }, { + selector: ':simple', + matches: function matches(ele) { + return ele.isSimple(); + } + }, { + selector: ':active', + matches: function matches(ele) { + return ele.active(); + } + }, { + selector: ':inactive', + matches: function matches(ele) { + return !ele.active(); + } + }, { + selector: ':backgrounding', + matches: function matches(ele) { + return ele.backgrounding(); + } + }, { + selector: ':nonbackgrounding', + matches: function matches(ele) { + return !ele.backgrounding(); + } + }].sort(function (a, b) { + // n.b. selectors that are starting substrings of others must have the longer ones first + return descending(a.selector, b.selector); + }); + + var lookup = function () { + var selToFn = {}; + var s; + + for (var i = 0; i < stateSelectors.length; i++) { + s = stateSelectors[i]; + selToFn[s.selector] = s.matches; + } + + return selToFn; + }(); + + var stateSelectorMatches = function stateSelectorMatches(sel, ele) { + return lookup[sel](ele); + }; + var stateSelectorRegex = '(' + stateSelectors.map(function (s) { + return s.selector; + }).join('|') + ')'; + + // so that values get compared properly in Selector.filter() + + var cleanMetaChars = function cleanMetaChars(str) { + return str.replace(new RegExp('\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) { + return $1; + }); + }; + + var replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) { + selector[selector.length - 1] = replacementQuery; + }; // NOTE: add new expression syntax here to have it recognised by the parser; + // - a query contains all adjacent (i.e. no separator in between) expressions; + // - the current query is stored in selector[i] + // - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward + + + var exprs = [{ + name: 'group', + // just used for identifying when debugging + query: true, + regex: '(' + tokens.group + ')', + populate: function populate(selector, query, _ref) { + var _ref2 = _slicedToArray(_ref, 1), + group = _ref2[0]; + + query.checks.push({ + type: Type.GROUP, + value: group === '*' ? group : group + 's' + }); + } + }, { + name: 'state', + query: true, + regex: stateSelectorRegex, + populate: function populate(selector, query, _ref3) { + var _ref4 = _slicedToArray(_ref3, 1), + state = _ref4[0]; + + query.checks.push({ + type: Type.STATE, + value: state + }); + } + }, { + name: 'id', + query: true, + regex: '\\#(' + tokens.id + ')', + populate: function populate(selector, query, _ref5) { + var _ref6 = _slicedToArray(_ref5, 1), + id = _ref6[0]; + + query.checks.push({ + type: Type.ID, + value: cleanMetaChars(id) + }); + } + }, { + name: 'className', + query: true, + regex: '\\.(' + tokens.className + ')', + populate: function populate(selector, query, _ref7) { + var _ref8 = _slicedToArray(_ref7, 1), + className = _ref8[0]; + + query.checks.push({ + type: Type.CLASS, + value: cleanMetaChars(className) + }); + } + }, { + name: 'dataExists', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref9) { + var _ref10 = _slicedToArray(_ref9, 1), + variable = _ref10[0]; + + query.checks.push({ + type: Type.DATA_EXIST, + field: cleanMetaChars(variable) + }); + } + }, { + name: 'dataCompare', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.value + ')\\s*\\]', + populate: function populate(selector, query, _ref11) { + var _ref12 = _slicedToArray(_ref11, 3), + variable = _ref12[0], + comparatorOp = _ref12[1], + value = _ref12[2]; + + var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null; + + if (valueIsString) { + value = value.substring(1, value.length - 1); + } else { + value = parseFloat(value); + } + + query.checks.push({ + type: Type.DATA_COMPARE, + field: cleanMetaChars(variable), + operator: comparatorOp, + value: value + }); + } + }, { + name: 'dataBool', + query: true, + regex: '\\[\\s*(' + tokens.boolOp + ')\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref13) { + var _ref14 = _slicedToArray(_ref13, 2), + boolOp = _ref14[0], + variable = _ref14[1]; + + query.checks.push({ + type: Type.DATA_BOOL, + field: cleanMetaChars(variable), + operator: boolOp + }); + } + }, { + name: 'metaCompare', + query: true, + regex: '\\[\\[\\s*(' + tokens.meta + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.number + ')\\s*\\]\\]', + populate: function populate(selector, query, _ref15) { + var _ref16 = _slicedToArray(_ref15, 3), + meta = _ref16[0], + comparatorOp = _ref16[1], + number = _ref16[2]; + + query.checks.push({ + type: Type.META_COMPARE, + field: cleanMetaChars(meta), + operator: comparatorOp, + value: parseFloat(number) + }); + } + }, { + name: 'nextQuery', + separator: true, + regex: tokens.separator, + populate: function populate(selector, query) { + var currentSubject = selector.currentSubject; + var edgeCount = selector.edgeCount; + var compoundCount = selector.compoundCount; + var lastQ = selector[selector.length - 1]; + + if (currentSubject != null) { + lastQ.subject = currentSubject; + selector.currentSubject = null; + } + + lastQ.edgeCount = edgeCount; + lastQ.compoundCount = compoundCount; + selector.edgeCount = 0; + selector.compoundCount = 0; // go on to next query + + var nextQuery = selector[selector.length++] = newQuery(); + return nextQuery; // this is the new query to be filled by the following exprs + } + }, { + name: 'directedEdge', + separator: true, + regex: tokens.directedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.DIRECTED_EDGE, + source: source, + target: target + }); // the query in the selector should be the edge rather than the source + + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; // we're now populating the target query with expressions that follow + + return target; + } else { + // source/target + var srcTgtQ = newQuery(); + var _source = query; + + var _target = newQuery(); + + srcTgtQ.checks.push({ + type: Type.NODE_SOURCE, + source: _source, + target: _target + }); // the query in the selector should be the neighbourhood rather than the node + + replaceLastQuery(selector, query, srcTgtQ); + selector.edgeCount++; + return _target; // now populating the target with the following expressions + } + } + }, { + name: 'undirectedEdge', + separator: true, + regex: tokens.undirectedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.UNDIRECTED_EDGE, + nodes: [source, target] + }); // the query in the selector should be the edge rather than the source + + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; // we're now populating the target query with expressions that follow + + return target; + } else { + // neighbourhood + var nhoodQ = newQuery(); + var node = query; + var neighbor = newQuery(); + nhoodQ.checks.push({ + type: Type.NODE_NEIGHBOR, + node: node, + neighbor: neighbor + }); // the query in the selector should be the neighbourhood rather than the node + + replaceLastQuery(selector, query, nhoodQ); + return neighbor; // now populating the neighbor with following expressions + } + } + }, { + name: 'child', + separator: true, + regex: tokens.child, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: child query + var parentChildQuery = newQuery(); + var child = newQuery(); + var parent = selector[selector.length - 1]; + parentChildQuery.checks.push({ + type: Type.CHILD, + parent: parent, + child: child + }); // the query in the selector should be the '>' itself + + replaceLastQuery(selector, query, parentChildQuery); + selector.compoundCount++; // we're now populating the child query with expressions that follow + + return child; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + + var _child = newQuery(); + + var _parent = newQuery(); // set up the root compound q + + + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); // populate the subject and replace the q at the old spot (within left) with TRUE + + subject.checks = query.checks; // take the checks from the left + + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + // set up the right q + + _parent.checks.push({ + type: Type.TRUE + }); // parent implicitly refs the subject + + + right.checks.push({ + type: Type.PARENT, + // type is swapped on right side queries + parent: _parent, + child: _child // empty for now + + }); + replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query` + + selector.currentSubject = subject; + selector.compoundCount++; + return _child; // now populating the right side's child + } else { + // parent query + // info for parent query + var _parent2 = newQuery(); + + var _child2 = newQuery(); + + var pcQChecks = [{ + type: Type.PARENT, + parent: _parent2, + child: _child2 + }]; // the parent-child query takes the place of the query previously being populated + + _parent2.checks = query.checks; // the previous query contains the checks for the parent + + query.checks = pcQChecks; // pc query takes over + + selector.compoundCount++; + return _child2; // we're now populating the child + } + } + }, { + name: 'descendant', + separator: true, + regex: tokens.descendant, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: descendant query + var ancChQuery = newQuery(); + var descendant = newQuery(); + var ancestor = selector[selector.length - 1]; + ancChQuery.checks.push({ + type: Type.DESCENDANT, + ancestor: ancestor, + descendant: descendant + }); // the query in the selector should be the '>' itself + + replaceLastQuery(selector, query, ancChQuery); + selector.compoundCount++; // we're now populating the descendant query with expressions that follow + + return descendant; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + + var _descendant = newQuery(); + + var _ancestor = newQuery(); // set up the root compound q + + + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); // populate the subject and replace the q at the old spot (within left) with TRUE + + subject.checks = query.checks; // take the checks from the left + + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + // set up the right q + + _ancestor.checks.push({ + type: Type.TRUE + }); // ancestor implicitly refs the subject + + + right.checks.push({ + type: Type.ANCESTOR, + // type is swapped on right side queries + ancestor: _ancestor, + descendant: _descendant // empty for now + + }); + replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query` + + selector.currentSubject = subject; + selector.compoundCount++; + return _descendant; // now populating the right side's descendant + } else { + // ancestor query + // info for parent query + var _ancestor2 = newQuery(); + + var _descendant2 = newQuery(); + + var adQChecks = [{ + type: Type.ANCESTOR, + ancestor: _ancestor2, + descendant: _descendant2 + }]; // the parent-child query takes the place of the query previously being populated + + _ancestor2.checks = query.checks; // the previous query contains the checks for the parent + + query.checks = adQChecks; // pc query takes over + + selector.compoundCount++; + return _descendant2; // we're now populating the child + } + } + }, { + name: 'subject', + modifier: true, + regex: tokens.subject, + populate: function populate(selector, query) { + if (selector.currentSubject != null && selector.currentSubject !== query) { + warn('Redefinition of subject in selector `' + selector.toString() + '`'); + return false; + } + + selector.currentSubject = query; + var topQ = selector[selector.length - 1]; + var topChk = topQ.checks[0]; + var topType = topChk == null ? null : topChk.type; + + if (topType === Type.DIRECTED_EDGE) { + // directed edge with subject on the target + // change to target node check + topChk.type = Type.NODE_TARGET; + } else if (topType === Type.UNDIRECTED_EDGE) { + // undirected edge with subject on the second node + // change to neighbor check + topChk.type = Type.NODE_NEIGHBOR; + topChk.node = topChk.nodes[1]; // second node is subject + + topChk.neighbor = topChk.nodes[0]; // clean up unused fields for new type + + topChk.nodes = null; + } + } + }]; + exprs.forEach(function (e) { + return e.regexObj = new RegExp('^' + e.regex); + }); + + /** + * Of all the expressions, find the first match in the remaining text. + * @param {string} remaining The remaining text to parse + * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }` + */ + + var consumeExpr = function consumeExpr(remaining) { + var expr; + var match; + var name; + + for (var j = 0; j < exprs.length; j++) { + var e = exprs[j]; + var n = e.name; + var m = remaining.match(e.regexObj); + + if (m != null) { + match = m; + expr = e; + name = n; + var consumed = m[0]; + remaining = remaining.substring(consumed.length); + break; // we've consumed one expr, so we can return now + } + } + + return { + expr: expr, + match: match, + name: name, + remaining: remaining + }; + }; + /** + * Consume all the leading whitespace + * @param {string} remaining The text to consume + * @returns The text with the leading whitespace removed + */ + + + var consumeWhitespace = function consumeWhitespace(remaining) { + var match = remaining.match(/^\s+/); + + if (match) { + var consumed = match[0]; + remaining = remaining.substring(consumed.length); + } + + return remaining; + }; + /** + * Parse the string and store the parsed representation in the Selector. + * @param {string} selector The selector string + * @returns `true` if the selector was successfully parsed, `false` otherwise + */ + + + var parse = function parse(selector) { + var self = this; + var remaining = self.inputText = selector; + var currentQuery = self[0] = newQuery(); + self.length = 1; + remaining = consumeWhitespace(remaining); // get rid of leading whitespace + + for (;;) { + var exprInfo = consumeExpr(remaining); + + if (exprInfo.expr == null) { + warn('The selector `' + selector + '`is invalid'); + return false; + } else { + var args = exprInfo.match.slice(1); // let the token populate the selector object in currentQuery + + var ret = exprInfo.expr.populate(self, currentQuery, args); + + if (ret === false) { + return false; // exit if population failed + } else if (ret != null) { + currentQuery = ret; // change the current query to be filled if the expr specifies + } + } + + remaining = exprInfo.remaining; // we're done when there's nothing left to parse + + if (remaining.match(/^\s*$/)) { + break; + } + } + + var lastQ = self[self.length - 1]; + + if (self.currentSubject != null) { + lastQ.subject = self.currentSubject; + } + + lastQ.edgeCount = self.edgeCount; + lastQ.compoundCount = self.compoundCount; + + for (var i = 0; i < self.length; i++) { + var q = self[i]; // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations + + if (q.compoundCount > 0 && q.edgeCount > 0) { + warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector'); + return false; + } + + if (q.edgeCount > 1) { + warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors'); + return false; + } else if (q.edgeCount === 1) { + warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.'); + } + } + + return true; // success + }; + /** + * Get the selector represented as a string. This value uses default formatting, + * so things like spacing may differ from the input text passed to the constructor. + * @returns {string} The selector string + */ + + + var toString = function toString() { + if (this.toStringCache != null) { + return this.toStringCache; + } + + var clean = function clean(obj) { + if (obj == null) { + return ''; + } else { + return obj; + } + }; + + var cleanVal = function cleanVal(val) { + if (string(val)) { + return '"' + val + '"'; + } else { + return clean(val); + } + }; + + var space = function space(val) { + return ' ' + val + ' '; + }; + + var checkToString = function checkToString(check, subject) { + var type = check.type, + value = check.value; + + switch (type) { + case Type.GROUP: + { + var group = clean(value); + return group.substring(0, group.length - 1); + } + + case Type.DATA_COMPARE: + { + var field = check.field, + operator = check.operator; + return '[' + field + space(clean(operator)) + cleanVal(value) + ']'; + } + + case Type.DATA_BOOL: + { + var _operator = check.operator, + _field = check.field; + return '[' + clean(_operator) + _field + ']'; + } + + case Type.DATA_EXIST: + { + var _field2 = check.field; + return '[' + _field2 + ']'; + } + + case Type.META_COMPARE: + { + var _operator2 = check.operator, + _field3 = check.field; + return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]'; + } + + case Type.STATE: + { + return value; + } + + case Type.ID: + { + return '#' + value; + } + + case Type.CLASS: + { + return '.' + value; + } + + case Type.PARENT: + case Type.CHILD: + { + return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject); + } + + case Type.ANCESTOR: + case Type.DESCENDANT: + { + return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject); + } + + case Type.COMPOUND_SPLIT: + { + var lhs = queryToString(check.left, subject); + var sub = queryToString(check.subject, subject); + var rhs = queryToString(check.right, subject); + return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs; + } + + case Type.TRUE: + { + return ''; + } + } + }; + + var queryToString = function queryToString(query, subject) { + return query.checks.reduce(function (str, chk, i) { + return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject); + }, ''); + }; + + var str = ''; + + for (var i = 0; i < this.length; i++) { + var query = this[i]; + str += queryToString(query, query.subject); + + if (this.length > 1 && i < this.length - 1) { + str += ', '; + } + } + + this.toStringCache = str; + return str; + }; + var parse$1 = { + parse: parse, + toString: toString + }; + + var valCmp = function valCmp(fieldVal, operator, value) { + var matches; + var isFieldStr = string(fieldVal); + var isFieldNum = number$1(fieldVal); + var isValStr = string(value); + var fieldStr, valStr; + var caseInsensitive = false; + var notExpr = false; + var isIneqCmp = false; + + if (operator.indexOf('!') >= 0) { + operator = operator.replace('!', ''); + notExpr = true; + } + + if (operator.indexOf('@') >= 0) { + operator = operator.replace('@', ''); + caseInsensitive = true; + } + + if (isFieldStr || isValStr || caseInsensitive) { + fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal; + valStr = '' + value; + } // if we're doing a case insensitive comparison, then we're using a STRING comparison + // even if we're comparing numbers + + + if (caseInsensitive) { + fieldVal = fieldStr = fieldStr.toLowerCase(); + value = valStr = valStr.toLowerCase(); + } + + switch (operator) { + case '*=': + matches = fieldStr.indexOf(valStr) >= 0; + break; + + case '$=': + matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0; + break; + + case '^=': + matches = fieldStr.indexOf(valStr) === 0; + break; + + case '=': + matches = fieldVal === value; + break; + + case '>': + isIneqCmp = true; + matches = fieldVal > value; + break; + + case '>=': + isIneqCmp = true; + matches = fieldVal >= value; + break; + + case '<': + isIneqCmp = true; + matches = fieldVal < value; + break; + + case '<=': + isIneqCmp = true; + matches = fieldVal <= value; + break; + + default: + matches = false; + break; + } // apply the not op, but null vals for inequalities should always stay non-matching + + + if (notExpr && (fieldVal != null || !isIneqCmp)) { + matches = !matches; + } + + return matches; + }; + var boolCmp = function boolCmp(fieldVal, operator) { + switch (operator) { + case '?': + return fieldVal ? true : false; + + case '!': + return fieldVal ? false : true; + + case '^': + return fieldVal === undefined; + } + }; + var existCmp = function existCmp(fieldVal) { + return fieldVal !== undefined; + }; + var data$1 = function data(ele, field) { + return ele.data(field); + }; + var meta = function meta(ele, field) { + return ele[field](); + }; + + /** A lookup of `match(check, ele)` functions by `Type` int */ + + var match = []; + /** + * Returns whether the query matches for the element + * @param query The `{ type, value, ... }` query object + * @param ele The element to compare against + */ + + var matches$1 = function matches(query, ele) { + return query.checks.every(function (chk) { + return match[chk.type](chk, ele); + }); + }; + + match[Type.GROUP] = function (check, ele) { + var group = check.value; + return group === '*' || group === ele.group(); + }; + + match[Type.STATE] = function (check, ele) { + var stateSelector = check.value; + return stateSelectorMatches(stateSelector, ele); + }; + + match[Type.ID] = function (check, ele) { + var id = check.value; + return ele.id() === id; + }; + + match[Type.CLASS] = function (check, ele) { + var cls = check.value; + return ele.hasClass(cls); + }; + + match[Type.META_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(meta(ele, field), operator, value); + }; + + match[Type.DATA_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(data$1(ele, field), operator, value); + }; + + match[Type.DATA_BOOL] = function (check, ele) { + var field = check.field, + operator = check.operator; + return boolCmp(data$1(ele, field), operator); + }; + + match[Type.DATA_EXIST] = function (check, ele) { + var field = check.field; + check.operator; + return existCmp(data$1(ele, field)); + }; + + match[Type.UNDIRECTED_EDGE] = function (check, ele) { + var qA = check.nodes[0]; + var qB = check.nodes[1]; + var src = ele.source(); + var tgt = ele.target(); + return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt); + }; + + match[Type.NODE_NEIGHBOR] = function (check, ele) { + return matches$1(check.node, ele) && ele.neighborhood().some(function (n) { + return n.isNode() && matches$1(check.neighbor, n); + }); + }; + + match[Type.DIRECTED_EDGE] = function (check, ele) { + return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); + }; + + match[Type.NODE_SOURCE] = function (check, ele) { + return matches$1(check.source, ele) && ele.outgoers().some(function (n) { + return n.isNode() && matches$1(check.target, n); + }); + }; + + match[Type.NODE_TARGET] = function (check, ele) { + return matches$1(check.target, ele) && ele.incomers().some(function (n) { + return n.isNode() && matches$1(check.source, n); + }); + }; + + match[Type.CHILD] = function (check, ele) { + return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); + }; + + match[Type.PARENT] = function (check, ele) { + return matches$1(check.parent, ele) && ele.children().some(function (c) { + return matches$1(check.child, c); + }); + }; + + match[Type.DESCENDANT] = function (check, ele) { + return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) { + return matches$1(check.ancestor, a); + }); + }; + + match[Type.ANCESTOR] = function (check, ele) { + return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) { + return matches$1(check.descendant, d); + }); + }; + + match[Type.COMPOUND_SPLIT] = function (check, ele) { + return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); + }; + + match[Type.TRUE] = function () { + return true; + }; + + match[Type.COLLECTION] = function (check, ele) { + var collection = check.value; + return collection.has(ele); + }; + + match[Type.FILTER] = function (check, ele) { + var filter = check.value; + return filter(ele); + }; + + var filter = function filter(collection) { + var self = this; // for 1 id #foo queries, just get the element + + if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) { + return collection.getElementById(self[0].checks[0].value).collection(); + } + + var selectorFunction = function selectorFunction(element) { + for (var j = 0; j < self.length; j++) { + var query = self[j]; + + if (matches$1(query, element)) { + return true; + } + } + + return false; + }; + + if (self.text() == null) { + selectorFunction = function selectorFunction() { + return true; + }; + } + + return collection.filter(selectorFunction); + }; // filter + // does selector match a single element? + + + var matches = function matches(ele) { + var self = this; + + for (var j = 0; j < self.length; j++) { + var query = self[j]; + + if (matches$1(query, ele)) { + return true; + } + } + + return false; + }; // matches + + + var matching = { + matches: matches, + filter: filter + }; + + var Selector = function Selector(selector) { + this.inputText = selector; + this.currentSubject = null; + this.compoundCount = 0; + this.edgeCount = 0; + this.length = 0; + + if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { + this.addQuery({ + checks: [{ + type: Type.COLLECTION, + value: selector.collection() + }] + }); + } else if (fn$6(selector)) { + this.addQuery({ + checks: [{ + type: Type.FILTER, + value: selector + }] + }); + } else if (string(selector)) { + if (!this.parse(selector)) { + this.invalid = true; + } + } else { + error('A selector must be created from a string; found '); + } + }; + + var selfn = Selector.prototype; + [parse$1, matching].forEach(function (p) { + return extend(selfn, p); + }); + + selfn.text = function () { + return this.inputText; + }; + + selfn.size = function () { + return this.length; + }; + + selfn.eq = function (i) { + return this[i]; + }; + + selfn.sameText = function (otherSel) { + return !this.invalid && !otherSel.invalid && this.text() === otherSel.text(); + }; + + selfn.addQuery = function (q) { + this[this.length++] = q; + }; + + selfn.selector = selfn.toString; + + var elesfn$g = { + allAre: function allAre(selector) { + var selObj = new Selector(selector); + return this.every(function (ele) { + return selObj.matches(ele); + }); + }, + is: function is(selector) { + var selObj = new Selector(selector); + return this.some(function (ele) { + return selObj.matches(ele); + }); + }, + some: function some(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + + if (ret) { + return true; + } + } + + return false; + }, + every: function every(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + + if (!ret) { + return false; + } + } + + return true; + }, + same: function same(collection) { + // cheap collection ref check + if (this === collection) { + return true; + } + + collection = this.cy().collection(collection); + var thisLength = this.length; + var collectionLength = collection.length; // cheap length check + + if (thisLength !== collectionLength) { + return false; + } // cheap element ref check + + + if (thisLength === 1) { + return this[0] === collection[0]; + } + + return this.every(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + anySame: function anySame(collection) { + collection = this.cy().collection(collection); + return this.some(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + allAreNeighbors: function allAreNeighbors(collection) { + collection = this.cy().collection(collection); + var nhood = this.neighborhood(); + return collection.every(function (ele) { + return nhood.hasElementWithId(ele.id()); + }); + }, + contains: function contains(collection) { + collection = this.cy().collection(collection); + var self = this; + return collection.every(function (ele) { + return self.hasElementWithId(ele.id()); + }); + } + }; + elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors; + elesfn$g.has = elesfn$g.contains; + elesfn$g.equal = elesfn$g.equals = elesfn$g.same; + + var cache = function cache(fn, name) { + return function traversalCache(arg1, arg2, arg3, arg4) { + var selectorOrEles = arg1; + var eles = this; + var key; + + if (selectorOrEles == null) { + key = ''; + } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) { + key = selectorOrEles.id(); + } + + if (eles.length === 1 && key) { + var _p = eles[0]._private; + var tch = _p.traversalCache = _p.traversalCache || {}; + var ch = tch[name] = tch[name] || []; + var hash = hashString(key); + var cacheHit = ch[hash]; + + if (cacheHit) { + return cacheHit; + } else { + return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4); + } + } else { + return fn.call(eles, arg1, arg2, arg3, arg4); + } + }; + }; + + var elesfn$f = { + parent: function parent(selector) { + var parents = []; // optimisation for single ele call + + if (this.length === 1) { + var parent = this[0]._private.parent; + + if (parent) { + return parent; + } + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _parent = ele._private.parent; + + if (_parent) { + parents.push(_parent); + } + } + + return this.spawn(parents, true).filter(selector); + }, + parents: function parents(selector) { + var parents = []; + var eles = this.parent(); + + while (eles.nonempty()) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + parents.push(ele); + } + + eles = eles.parent(); + } + + return this.spawn(parents, true).filter(selector); + }, + commonAncestors: function commonAncestors(selector) { + var ancestors; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var parents = ele.parents(); + ancestors = ancestors || parents; + ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set + } + + return ancestors.filter(selector); + }, + orphans: function orphans(selector) { + return this.stdFilter(function (ele) { + return ele.isOrphan(); + }).filter(selector); + }, + nonorphans: function nonorphans(selector) { + return this.stdFilter(function (ele) { + return ele.isChild(); + }).filter(selector); + }, + children: cache(function (selector) { + var children = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var eleChildren = ele._private.children; + + for (var j = 0; j < eleChildren.length; j++) { + children.push(eleChildren[j]); + } + } + + return this.spawn(children, true).filter(selector); + }, 'children'), + siblings: function siblings(selector) { + return this.parent().children().not(this).filter(selector); + }, + isParent: function isParent() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.children.length !== 0; + } + }, + isChildless: function isChildless() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.children.length === 0; + } + }, + isChild: function isChild() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.parent != null; + } + }, + isOrphan: function isOrphan() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.parent == null; + } + }, + descendants: function descendants(selector) { + var elements = []; + + function add(eles) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + elements.push(ele); + + if (ele.children().nonempty()) { + add(ele.children()); + } + } + } + + add(this.children()); + return this.spawn(elements, true).filter(selector); + } + }; + + function forEachCompound(eles, fn, includeSelf, recursiveStep) { + var q = []; + var did = new Set$1(); + var cy = eles.cy(); + var hasCompounds = cy.hasCompoundNodes(); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (includeSelf) { + q.push(ele); + } else if (hasCompounds) { + recursiveStep(q, did, ele); + } + } + + while (q.length > 0) { + var _ele = q.shift(); + + fn(_ele); + did.add(_ele.id()); + + if (hasCompounds) { + recursiveStep(q, did, _ele); + } + } + + return eles; + } + + function addChildren(q, did, ele) { + if (ele.isParent()) { + var children = ele._private.children; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (!did.has(child.id())) { + q.push(child); + } + } + } + } // very efficient version of eles.add( eles.descendants() ).forEach() + // for internal use + + + elesfn$f.forEachDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addChildren); + }; + + function addParent(q, did, ele) { + if (ele.isChild()) { + var parent = ele._private.parent; + + if (!did.has(parent.id())) { + q.push(parent); + } + } + } + + elesfn$f.forEachUp = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParent); + }; + + function addParentAndChildren(q, did, ele) { + addParent(q, did, ele); + addChildren(q, did, ele); + } + + elesfn$f.forEachUpAndDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParentAndChildren); + }; // aliases + + + elesfn$f.ancestors = elesfn$f.parents; + + var fn$5, elesfn$e; + fn$5 = elesfn$e = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + rscratch: define.data({ + field: 'rscratch', + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: true + }), + removeRscratch: define.removeData({ + field: 'rscratch', + triggerEvent: false + }), + id: function id() { + var ele = this[0]; + + if (ele) { + return ele._private.data.id; + } + } + }; // aliases + + fn$5.attr = fn$5.data; + fn$5.removeAttr = fn$5.removeData; + var data = elesfn$e; + + var elesfn$d = {}; + + function defineDegreeFunction(callback) { + return function (includeLoops) { + var self = this; + + if (includeLoops === undefined) { + includeLoops = true; + } + + if (self.length === 0) { + return; + } + + if (self.isNode() && !self.removed()) { + var degree = 0; + var node = self[0]; + var connectedEdges = node._private.edges; + + for (var i = 0; i < connectedEdges.length; i++) { + var edge = connectedEdges[i]; + + if (!includeLoops && edge.isLoop()) { + continue; + } + + degree += callback(node, edge); + } + + return degree; + } else { + return; + } + }; + } + + extend(elesfn$d, { + degree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(edge.target())) { + return 2; + } else { + return 1; + } + }), + indegree: defineDegreeFunction(function (node, edge) { + if (edge.target().same(node)) { + return 1; + } else { + return 0; + } + }), + outdegree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(node)) { + return 1; + } else { + return 0; + } + }) + }); + + function defineDegreeBoundsFunction(degreeFn, callback) { + return function (includeLoops) { + var ret; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + var ele = nodes[i]; + var degree = ele[degreeFn](includeLoops); + + if (degree !== undefined && (ret === undefined || callback(degree, ret))) { + ret = degree; + } + } + + return ret; + }; + } + + extend(elesfn$d, { + minDegree: defineDegreeBoundsFunction('degree', function (degree, min) { + return degree < min; + }), + maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) { + return degree > max; + }), + minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) { + return degree < min; + }), + maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) { + return degree > max; + }), + minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) { + return degree < min; + }), + maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) { + return degree > max; + }) + }); + extend(elesfn$d, { + totalDegree: function totalDegree(includeLoops) { + var total = 0; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + total += nodes[i].degree(includeLoops); + } + + return total; + } + }); + + var fn$4, elesfn$c; + + var beforePositionSet = function beforePositionSet(eles, newPos, silent) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.locked()) { + var oldPos = ele._private.position; + var delta = { + x: newPos.x != null ? newPos.x - oldPos.x : 0, + y: newPos.y != null ? newPos.y - oldPos.y : 0 + }; + + if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) { + ele.children().shift(delta, silent); + } + + ele.dirtyBoundingBoxCache(); + } + } + }; + + var positionDef = { + field: 'position', + bindingEvent: 'position', + allowBinding: true, + allowSetting: true, + settingEvent: 'position', + settingTriggersEvent: true, + triggerFnName: 'emitAndNotify', + allowGetting: true, + validKeys: ['x', 'y'], + beforeGet: function beforeGet(ele) { + ele.updateCompoundBounds(); + }, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, false); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + }, + canSet: function canSet(ele) { + return !ele.locked(); + } + }; + fn$4 = elesfn$c = { + position: define.data(positionDef), + // position but no notification to renderer + silentPosition: define.data(extend({}, positionDef, { + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: false, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, true); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + } + })), + positions: function positions(pos, silent) { + if (plainObject(pos)) { + if (silent) { + this.silentPosition(pos); + } else { + this.position(pos); + } + } else if (fn$6(pos)) { + var _fn = pos; + var cy = this.cy(); + cy.startBatch(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + var _pos = void 0; + + if (_pos = _fn(ele, i)) { + if (silent) { + ele.silentPosition(_pos); + } else { + ele.position(_pos); + } + } + } + + cy.endBatch(); + } + + return this; // chaining + }, + silentPositions: function silentPositions(pos) { + return this.positions(pos, true); + }, + shift: function shift(dim, val, silent) { + var delta; + + if (plainObject(dim)) { + delta = { + x: number$1(dim.x) ? dim.x : 0, + y: number$1(dim.y) ? dim.y : 0 + }; + silent = val; + } else if (string(dim) && number$1(val)) { + delta = { + x: 0, + y: 0 + }; + delta[dim] = val; + } + + if (delta != null) { + var cy = this.cy(); + cy.startBatch(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; // exclude any node that is a descendant of the calling collection + + if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) { + continue; + } + + var pos = ele.position(); + var newPos = { + x: pos.x + delta.x, + y: pos.y + delta.y + }; + + if (silent) { + ele.silentPosition(newPos); + } else { + ele.position(newPos); + } + } + + cy.endBatch(); + } + + return this; + }, + silentShift: function silentShift(dim, val) { + if (plainObject(dim)) { + this.shift(dim, true); + } else if (string(dim) && number$1(val)) { + this.shift(dim, val, true); + } + + return this; + }, + // get/set the rendered (i.e. on screen) positon of the element + renderedPosition: function renderedPosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var rpos = plainObject(dim) ? dim : undefined; + var setting = rpos !== undefined || val !== undefined && string(dim); + + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele = this[i]; + + if (val !== undefined) { + // set one dimension + _ele.position(dim, (val - pan[dim]) / zoom); + } else if (rpos !== undefined) { + // set whole position + _ele.position(renderedToModelPosition(rpos, zoom, pan)); + } + } + } else { + // getting + var pos = ele.position(); + rpos = modelToRenderedPosition(pos, zoom, pan); + + if (dim === undefined) { + // then return the whole rendered position + return rpos; + } else { + // then return the specified dimension + return rpos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + }, + // get/set the position relative to the parent + relativePosition: function relativePosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var ppos = plainObject(dim) ? dim : undefined; + var setting = ppos !== undefined || val !== undefined && string(dim); + var hasCompoundNodes = cy.hasCompoundNodes(); + + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele2 = this[i]; + var parent = hasCompoundNodes ? _ele2.parent() : null; + var hasParent = parent && parent.length > 0; + var relativeToParent = hasParent; + + if (hasParent) { + parent = parent[0]; + } + + var origin = relativeToParent ? parent.position() : { + x: 0, + y: 0 + }; + + if (val !== undefined) { + // set one dimension + _ele2.position(dim, val + origin[dim]); + } else if (ppos !== undefined) { + // set whole position + _ele2.position({ + x: ppos.x + origin.x, + y: ppos.y + origin.y + }); + } + } + } else { + // getting + var pos = ele.position(); + + var _parent = hasCompoundNodes ? ele.parent() : null; + + var _hasParent = _parent && _parent.length > 0; + + var _relativeToParent = _hasParent; + + if (_hasParent) { + _parent = _parent[0]; + } + + var _origin = _relativeToParent ? _parent.position() : { + x: 0, + y: 0 + }; + + ppos = { + x: pos.x - _origin.x, + y: pos.y - _origin.y + }; + + if (dim === undefined) { + // then return the whole rendered position + return ppos; + } else { + // then return the specified dimension + return ppos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + } + }; // aliases + + fn$4.modelPosition = fn$4.point = fn$4.position; + fn$4.modelPositions = fn$4.points = fn$4.positions; + fn$4.renderedPoint = fn$4.renderedPosition; + fn$4.relativePoint = fn$4.relativePosition; + var position = elesfn$c; + + var fn$3, elesfn$b; + fn$3 = elesfn$b = {}; + + elesfn$b.renderedBoundingBox = function (options) { + var bb = this.boundingBox(options); + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var x1 = bb.x1 * zoom + pan.x; + var x2 = bb.x2 * zoom + pan.x; + var y1 = bb.y1 * zoom + pan.y; + var y2 = bb.y2 * zoom + pan.y; + return { + x1: x1, + x2: x2, + y1: y1, + y2: y2, + w: x2 - x1, + h: y2 - y1 + }; + }; + + elesfn$b.dirtyCompoundBoundsCache = function () { + var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); + + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } + + this.forEachUp(function (ele) { + if (ele.isParent()) { + var _p = ele._private; + _p.compoundBoundsClean = false; + _p.bbCache = null; + + if (!silent) { + ele.emitAndNotify('bounds'); + } + } + }); + return this; + }; + + elesfn$b.updateCompoundBounds = function () { + var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); // not possible to do on non-compound graphs or with the style disabled + + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } // save cycles when batching -- but bounds will be stale (or not exist yet) + + + if (!force && cy.batching()) { + return this; + } + + function update(parent) { + if (!parent.isParent()) { + return; + } + + var _p = parent._private; + var children = parent.children(); + var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include'; + var min = { + width: { + val: parent.pstyle('min-width').pfValue, + left: parent.pstyle('min-width-bias-left'), + right: parent.pstyle('min-width-bias-right') + }, + height: { + val: parent.pstyle('min-height').pfValue, + top: parent.pstyle('min-height-bias-top'), + bottom: parent.pstyle('min-height-bias-bottom') + } + }; + var bb = children.boundingBox({ + includeLabels: includeLabels, + includeOverlays: false, + // updating the compound bounds happens outside of the regular + // cache cycle (i.e. before fired events) + useCache: false + }); + var pos = _p.position; // if children take up zero area then keep position and fall back on stylesheet w/h + + if (bb.w === 0 || bb.h === 0) { + bb = { + w: parent.pstyle('width').pfValue, + h: parent.pstyle('height').pfValue + }; + bb.x1 = pos.x - bb.w / 2; + bb.x2 = pos.x + bb.w / 2; + bb.y1 = pos.y - bb.h / 2; + bb.y2 = pos.y + bb.h / 2; + } + + function computeBiasValues(propDiff, propBias, propBiasComplement) { + var biasDiff = 0; + var biasComplementDiff = 0; + var biasTotal = propBias + propBiasComplement; + + if (propDiff > 0 && biasTotal > 0) { + biasDiff = propBias / biasTotal * propDiff; + biasComplementDiff = propBiasComplement / biasTotal * propDiff; + } + + return { + biasDiff: biasDiff, + biasComplementDiff: biasComplementDiff + }; + } + + function computePaddingValues(width, height, paddingObject, relativeTo) { + // Assuming percentage is number from 0 to 1 + if (paddingObject.units === '%') { + switch (relativeTo) { + case 'width': + return width > 0 ? paddingObject.pfValue * width : 0; + + case 'height': + return height > 0 ? paddingObject.pfValue * height : 0; + + case 'average': + return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0; + + case 'min': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0; + + case 'max': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0; + + default: + return 0; + } + } else if (paddingObject.units === 'px') { + return paddingObject.pfValue; + } else { + return 0; + } + } + + var leftVal = min.width.left.value; + + if (min.width.left.units === 'px' && min.width.val > 0) { + leftVal = leftVal * 100 / min.width.val; + } + + var rightVal = min.width.right.value; + + if (min.width.right.units === 'px' && min.width.val > 0) { + rightVal = rightVal * 100 / min.width.val; + } + + var topVal = min.height.top.value; + + if (min.height.top.units === 'px' && min.height.val > 0) { + topVal = topVal * 100 / min.height.val; + } + + var bottomVal = min.height.bottom.value; + + if (min.height.bottom.units === 'px' && min.height.val > 0) { + bottomVal = bottomVal * 100 / min.height.val; + } + + var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal); + var diffLeft = widthBiasDiffs.biasDiff; + var diffRight = widthBiasDiffs.biasComplementDiff; + var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal); + var diffTop = heightBiasDiffs.biasDiff; + var diffBottom = heightBiasDiffs.biasComplementDiff; + _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value); + _p.autoWidth = Math.max(bb.w, min.width.val); + pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; + _p.autoHeight = Math.max(bb.h, min.height.val); + pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2; + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + + if (!_p.compoundBoundsClean || force) { + update(ele); + + if (!cy.batching()) { + _p.compoundBoundsClean = true; + } + } + } + + return this; + }; + + var noninf = function noninf(x) { + if (x === Infinity || x === -Infinity) { + return 0; + } + + return x; + }; + + var updateBounds = function updateBounds(b, x1, y1, x2, y2) { + // don't update with zero area boxes + if (x2 - x1 === 0 || y2 - y1 === 0) { + return; + } // don't update with null dim + + + if (x1 == null || y1 == null || x2 == null || y2 == null) { + return; + } + + b.x1 = x1 < b.x1 ? x1 : b.x1; + b.x2 = x2 > b.x2 ? x2 : b.x2; + b.y1 = y1 < b.y1 ? y1 : b.y1; + b.y2 = y2 > b.y2 ? y2 : b.y2; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + }; + + var updateBoundsFromBox = function updateBoundsFromBox(b, b2) { + if (b2 == null) { + return b; + } + + return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2); + }; + + var prefixedProperty = function prefixedProperty(obj, field, prefix) { + return getPrefixedProperty(obj, field, prefix); + }; + + var updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + + var _p = ele._private; + var rstyle = _p.rstyle; + var halfArW = rstyle.arrowWidth / 2; + var arrowType = ele.pstyle(prefix + '-arrow-shape').value; + var x; + var y; + + if (arrowType !== 'none') { + if (prefix === 'source') { + x = rstyle.srcX; + y = rstyle.srcY; + } else if (prefix === 'target') { + x = rstyle.tgtX; + y = rstyle.tgtY; + } else { + x = rstyle.midX; + y = rstyle.midY; + } // always store the individual arrow bounds + + + var bbs = _p.arrowBounds = _p.arrowBounds || {}; + var bb = bbs[prefix] = bbs[prefix] || {}; + bb.x1 = x - halfArW; + bb.y1 = y - halfArW; + bb.x2 = x + halfArW; + bb.y2 = y + halfArW; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + expandBoundingBox(bb, 1); + updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2); + } + }; + + var updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + + var prefixDash; + + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + + var _p = ele._private; + var rstyle = _p.rstyle; + var label = ele.pstyle(prefixDash + 'label').strValue; + + if (label) { + var halign = ele.pstyle('text-halign'); + var valign = ele.pstyle('text-valign'); + var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix); + var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix); + var labelX = prefixedProperty(rstyle, 'labelX', prefix); + var labelY = prefixedProperty(rstyle, 'labelY', prefix); + var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var rotation = ele.pstyle(prefixDash + 'text-rotation'); + var outlineWidth = ele.pstyle('text-outline-width').pfValue; + var borderWidth = ele.pstyle('text-border-width').pfValue; + var halfBorderWidth = borderWidth / 2; + var padding = ele.pstyle('text-background-padding').pfValue; + var marginOfError = 2; // expand to work around browser dimension inaccuracies + + var lh = labelHeight; + var lw = labelWidth; + var lw_2 = lw / 2; + var lh_2 = lh / 2; + var lx1, lx2, ly1, ly2; + + if (isEdge) { + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + } else { + switch (halign.value) { + case 'left': + lx1 = labelX - lw; + lx2 = labelX; + break; + + case 'center': + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + break; + + case 'right': + lx1 = labelX; + lx2 = labelX + lw; + break; + } + + switch (valign.value) { + case 'top': + ly1 = labelY - lh; + ly2 = labelY; + break; + + case 'center': + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + break; + + case 'bottom': + ly1 = labelY; + ly2 = labelY + lh; + break; + } + } // shift by margin and expand by outline and border + + + lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; + ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; // always store the unrotated label bounds separately + + var bbPrefix = prefix || 'main'; + var bbs = _p.labelBounds; + var bb = bbs[bbPrefix] = bbs[bbPrefix] || {}; + bb.x1 = lx1; + bb.y1 = ly1; + bb.x2 = lx2; + bb.y2 = ly2; + bb.w = lx2 - lx1; + bb.h = ly2 - ly1; + var isAutorotate = isEdge && rotation.strValue === 'autorotate'; + var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0; + + if (isAutorotate || isPfValue) { + var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue; + var cos = Math.cos(theta); + var sin = Math.sin(theta); // rotation point (default value for center-center) + + var xo = (lx1 + lx2) / 2; + var yo = (ly1 + ly2) / 2; + + if (!isEdge) { + switch (halign.value) { + case 'left': + xo = lx2; + break; + + case 'right': + xo = lx1; + break; + } + + switch (valign.value) { + case 'top': + yo = ly2; + break; + + case 'bottom': + yo = ly1; + break; + } + } + + var rotate = function rotate(x, y) { + x = x - xo; + y = y - yo; + return { + x: x * cos - y * sin + xo, + y: x * sin + y * cos + yo + }; + }; + + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + } + + var bbPrefixRot = bbPrefix + 'Rot'; + var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {}; + bbRot.x1 = lx1; + bbRot.y1 = ly1; + bbRot.x2 = lx2; + bbRot.y2 = ly2; + bbRot.w = lx2 - lx1; + bbRot.h = ly2 - ly1; + updateBounds(bounds, lx1, ly1, lx2, ly2); + updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); + } + + return bounds; + }; // get the bounding box of the elements (in raw model position) + + + var boundingBoxImpl = function boundingBoxImpl(ele, options) { + var cy = ele._private.cy; + var styleEnabled = cy.styleEnabled(); + var headless = cy.headless(); + var bounds = makeBoundingBox(); + var _p = ele._private; + var isNode = ele.isNode(); + var isEdge = ele.isEdge(); + var ex1, ex2, ey1, ey2; // extrema of body / lines + + var x, y; // node pos + + var rstyle = _p.rstyle; + var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0]; // must use `display` prop only, as reading `compound.width()` causes recursion + // (other factors like width values will be considered later in this function anyway) + + var isDisplayed = function isDisplayed(ele) { + return ele.pstyle('display').value !== 'none'; + }; + + var displayed = !styleEnabled || isDisplayed(ele) // must take into account connected nodes b/c of implicit edge hiding on display:none node + && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target())); + + if (displayed) { + // displayed suffices, since we will find zero area eles anyway + var overlayOpacity = 0; + var overlayPadding = 0; + + if (styleEnabled && options.includeOverlays) { + overlayOpacity = ele.pstyle('overlay-opacity').value; + + if (overlayOpacity !== 0) { + overlayPadding = ele.pstyle('overlay-padding').value; + } + } + + var underlayOpacity = 0; + var underlayPadding = 0; + + if (styleEnabled && options.includeUnderlays) { + underlayOpacity = ele.pstyle('underlay-opacity').value; + + if (underlayOpacity !== 0) { + underlayPadding = ele.pstyle('underlay-padding').value; + } + } + + var padding = Math.max(overlayPadding, underlayPadding); + var w = 0; + var wHalf = 0; + + if (styleEnabled) { + w = ele.pstyle('width').pfValue; + wHalf = w / 2; + } + + if (isNode && options.includeNodes) { + var pos = ele.position(); + x = pos.x; + y = pos.y; + + var _w = ele.outerWidth(); + + var halfW = _w / 2; + var h = ele.outerHeight(); + var halfH = h / 2; // handle node dimensions + ///////////////////////// + + ex1 = x - halfW; + ex2 = x + halfW; + ey1 = y - halfH; + ey2 = y + halfH; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } else if (isEdge && options.includeEdges) { + if (styleEnabled && !headless) { + var curveStyle = ele.pstyle('curve-style').strValue; // handle edge dimensions (rough box estimate) + ////////////////////////////////////////////// + + ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY); + ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); // take into account edge width + + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); // precise edges + //////////////// + + if (curveStyle === 'haystack') { + var hpts = rstyle.haystackPts; + + if (hpts && hpts.length === 2) { + ex1 = hpts[0].x; + ey1 = hpts[0].y; + ex2 = hpts[1].x; + ey2 = hpts[1].y; + + if (ex1 > ex2) { + var temp = ex1; + ex1 = ex2; + ex2 = temp; + } + + if (ey1 > ey2) { + var _temp = ey1; + ey1 = ey2; + ey2 = _temp; + } + + updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf); + } + } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'taxi') { + var pts; + + switch (curveStyle) { + case 'bezier': + case 'unbundled-bezier': + pts = rstyle.bezierPts; + break; + + case 'segments': + case 'taxi': + pts = rstyle.linePts; + break; + } + + if (pts != null) { + for (var j = 0; j < pts.length; j++) { + var pt = pts[j]; + ex1 = pt.x - wHalf; + ex2 = pt.x + wHalf; + ey1 = pt.y - wHalf; + ey2 = pt.y + wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } + } + } // bezier-like or segment-like edge + + } else { + // headless or style disabled + // fallback on source and target positions + ////////////////////////////////////////// + var n1 = ele.source(); + var n1pos = n1.position(); + var n2 = ele.target(); + var n2pos = n2.position(); + ex1 = n1pos.x; + ex2 = n2pos.x; + ey1 = n1pos.y; + ey2 = n2pos.y; + + if (ex1 > ex2) { + var _temp2 = ex1; + ex1 = ex2; + ex2 = _temp2; + } + + if (ey1 > ey2) { + var _temp3 = ey1; + ey1 = ey2; + ey2 = _temp3; + } // take into account edge width + + + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } // headless or style disabled + + } // edges + // handle edge arrow size + ///////////////////////// + + + if (styleEnabled && options.includeEdges && isEdge) { + updateBoundsFromArrow(bounds, ele, 'mid-source'); + updateBoundsFromArrow(bounds, ele, 'mid-target'); + updateBoundsFromArrow(bounds, ele, 'source'); + updateBoundsFromArrow(bounds, ele, 'target'); + } // ghost + //////// + + + if (styleEnabled) { + var ghost = ele.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = ele.pstyle('ghost-offset-x').pfValue; + var gy = ele.pstyle('ghost-offset-y').pfValue; + updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy); + } + } // always store the body bounds separately from the labels + + + var bbBody = _p.bodyBounds = _p.bodyBounds || {}; + assignBoundingBox(bbBody, bounds); + expandBoundingBoxSides(bbBody, manualExpansion); + expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies + // overlay + ////////// + + if (styleEnabled) { + ex1 = bounds.x1; + ex2 = bounds.x2; + ey1 = bounds.y1; + ey2 = bounds.y2; + updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding); + } // always store the body bounds separately from the labels + + + var bbOverlay = _p.overlayBounds = _p.overlayBounds || {}; + assignBoundingBox(bbOverlay, bounds); + expandBoundingBoxSides(bbOverlay, manualExpansion); + expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies + // handle label dimensions + ////////////////////////// + + var bbLabels = _p.labelBounds = _p.labelBounds || {}; + + if (bbLabels.all != null) { + clearBoundingBox(bbLabels.all); + } else { + bbLabels.all = makeBoundingBox(); + } + + if (styleEnabled && options.includeLabels) { + if (options.includeMainLabels) { + updateBoundsFromLabel(bounds, ele, null); + } + + if (isEdge) { + if (options.includeSourceLabels) { + updateBoundsFromLabel(bounds, ele, 'source'); + } + + if (options.includeTargetLabels) { + updateBoundsFromLabel(bounds, ele, 'target'); + } + } + } // style enabled for labels + + } // if displayed + + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + + if (bounds.w > 0 && bounds.h > 0 && displayed) { + expandBoundingBoxSides(bounds, manualExpansion); // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides + + expandBoundingBox(bounds, 1); + } + + return bounds; + }; + + var getKey = function getKey(opts) { + var i = 0; + + var tf = function tf(val) { + return (val ? 1 : 0) << i++; + }; + + var key = 0; + key += tf(opts.incudeNodes); + key += tf(opts.includeEdges); + key += tf(opts.includeLabels); + key += tf(opts.includeMainLabels); + key += tf(opts.includeSourceLabels); + key += tf(opts.includeTargetLabels); + key += tf(opts.includeOverlays); + return key; + }; + + var getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) { + if (ele.isEdge()) { + var p1 = ele.source().position(); + var p2 = ele.target().position(); + + var r = function r(x) { + return Math.round(x); + }; + + return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]); + } else { + return 0; + } + }; + + var cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) { + var _p = ele._private; + var bb; + var isEdge = ele.isEdge(); + var key = opts == null ? defBbOptsKey : getKey(opts); + var usingDefOpts = key === defBbOptsKey; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame; + + var isDirty = function isDirty(ele) { + return ele._private.bbCache == null || ele._private.styleDirty; + }; + + var needRecalc = !useCache || isDirty(ele) || isEdge && isDirty(ele.source()) || isDirty(ele.target()); + + if (needRecalc) { + if (!isPosKeySame) { + ele.recalculateRenderedStyle(useCache); + } + + bb = boundingBoxImpl(ele, defBbOpts); + _p.bbCache = bb; + _p.bbCachePosKey = currPosKey; + } else { + bb = _p.bbCache; + } // not using def opts => need to build up bb from combination of sub bbs + + + if (!usingDefOpts) { + var isNode = ele.isNode(); + bb = makeBoundingBox(); + + if (opts.includeNodes && isNode || opts.includeEdges && !isNode) { + if (opts.includeOverlays) { + updateBoundsFromBox(bb, _p.overlayBounds); + } else { + updateBoundsFromBox(bb, _p.bodyBounds); + } + } + + if (opts.includeLabels) { + if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) { + updateBoundsFromBox(bb, _p.labelBounds.all); + } else { + if (opts.includeMainLabels) { + updateBoundsFromBox(bb, _p.labelBounds.mainRot); + } + + if (opts.includeSourceLabels) { + updateBoundsFromBox(bb, _p.labelBounds.sourceRot); + } + + if (opts.includeTargetLabels) { + updateBoundsFromBox(bb, _p.labelBounds.targetRot); + } + } + } + + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } + + return bb; + }; + + var defBbOpts = { + includeNodes: true, + includeEdges: true, + includeLabels: true, + includeMainLabels: true, + includeSourceLabels: true, + includeTargetLabels: true, + includeOverlays: true, + includeUnderlays: true, + useCache: true + }; + var defBbOptsKey = getKey(defBbOpts); + var filledBbOpts = defaults$g(defBbOpts); + + elesfn$b.boundingBox = function (options) { + var bounds; // the main usecase is ele.boundingBox() for a single element with no/def options + // specified s.t. the cache is used, so check for this case to make it faster by + // avoiding the overhead of the rest of the function + + if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) { + if (options === undefined) { + options = defBbOpts; + } else { + options = filledBbOpts(options); + } + + bounds = cachedBoundingBoxImpl(this[0], options); + } else { + bounds = makeBoundingBox(); + options = options || defBbOpts; + var opts = filledBbOpts(options); + var eles = this; + var cy = eles.cy(); + var styleEnabled = cy.styleEnabled(); + + if (styleEnabled) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame && !_p.styleDirty; + ele.recalculateRenderedStyle(useCache); + } + } + + this.updateCompoundBounds(!options.useCache); + + for (var _i = 0; _i < eles.length; _i++) { + var _ele = eles[_i]; + updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts)); + } + } + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + return bounds; + }; + + elesfn$b.dirtyBoundingBoxCache = function () { + for (var i = 0; i < this.length; i++) { + var _p = this[i]._private; + _p.bbCache = null; + _p.bbCachePosKey = null; + _p.bodyBounds = null; + _p.overlayBounds = null; + _p.labelBounds.all = null; + _p.labelBounds.source = null; + _p.labelBounds.target = null; + _p.labelBounds.main = null; + _p.labelBounds.sourceRot = null; + _p.labelBounds.targetRot = null; + _p.labelBounds.mainRot = null; + _p.arrowBounds.source = null; + _p.arrowBounds.target = null; + _p.arrowBounds['mid-source'] = null; + _p.arrowBounds['mid-target'] = null; + } + + this.emitAndNotify('bounds'); + return this; + }; // private helper to get bounding box for custom node positions + // - good for perf in certain cases but currently requires dirtying the rendered style + // - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer... + // - try to use for only things like discrete layouts where the node position would change anyway + + + elesfn$b.boundingBoxAt = function (fn) { + var nodes = this.nodes(); + var cy = this.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + var parents = cy.collection(); + + if (hasCompoundNodes) { + parents = nodes.filter(function (node) { + return node.isParent(); + }); + nodes = nodes.not(parents); + } + + if (plainObject(fn)) { + var obj = fn; + + fn = function fn() { + return obj; + }; + } + + var storeOldPos = function storeOldPos(node, i) { + return node._private.bbAtOldPos = fn(node, i); + }; + + var getOldPos = function getOldPos(node) { + return node._private.bbAtOldPos; + }; + + cy.startBatch(); + nodes.forEach(storeOldPos).silentPositions(fn); + + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + var bb = copyBoundingBox(this.boundingBox({ + useCache: false + })); + nodes.silentPositions(getOldPos); + + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + cy.endBatch(); + return bb; + }; + + fn$3.boundingbox = fn$3.bb = fn$3.boundingBox; + fn$3.renderedBoundingbox = fn$3.renderedBoundingBox; + var bounds = elesfn$b; + + var fn$2, elesfn$a; + fn$2 = elesfn$a = {}; + + var defineDimFns = function defineDimFns(opts) { + opts.uppercaseName = capitalize(opts.name); + opts.autoName = 'auto' + opts.uppercaseName; + opts.labelName = 'label' + opts.uppercaseName; + opts.outerName = 'outer' + opts.uppercaseName; + opts.uppercaseOuterName = capitalize(opts.outerName); + + fn$2[opts.name] = function dimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + + if (ele) { + if (styleEnabled) { + if (ele.isParent()) { + ele.updateCompoundBounds(); + return _p[opts.autoName] || 0; + } + + var d = ele.pstyle(opts.name); + + switch (d.strValue) { + case 'label': + ele.recalculateRenderedStyle(); + return _p.rstyle[opts.labelName] || 0; + + default: + return d.pfValue; + } + } else { + return 1; + } + } + }; + + fn$2['outer' + opts.uppercaseName] = function outerDimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + + if (ele) { + if (styleEnabled) { + var dim = ele[opts.name](); + var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side + + var padding = 2 * ele.padding(); + return dim + border + padding; + } else { + return 1; + } + } + }; + + fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() { + var ele = this[0]; + + if (ele) { + var d = ele[opts.name](); + return d * this.cy().zoom(); + } + }; + + fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() { + var ele = this[0]; + + if (ele) { + var od = ele[opts.outerName](); + return od * this.cy().zoom(); + } + }; + }; + + defineDimFns({ + name: 'width' + }); + defineDimFns({ + name: 'height' + }); + + elesfn$a.padding = function () { + var ele = this[0]; + var _p = ele._private; + + if (ele.isParent()) { + ele.updateCompoundBounds(); + + if (_p.autoPadding !== undefined) { + return _p.autoPadding; + } else { + return ele.pstyle('padding').pfValue; + } + } else { + return ele.pstyle('padding').pfValue; + } + }; + + elesfn$a.paddedHeight = function () { + var ele = this[0]; + return ele.height() + 2 * ele.padding(); + }; + + elesfn$a.paddedWidth = function () { + var ele = this[0]; + return ele.width() + 2 * ele.padding(); + }; + + var widthHeight = elesfn$a; + + var ifEdge = function ifEdge(ele, getValue) { + if (ele.isEdge()) { + return getValue(ele); + } + }; + + var ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) { + if (ele.isEdge()) { + var cy = ele.cy(); + return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan()); + } + }; + + var ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) { + if (ele.isEdge()) { + var cy = ele.cy(); + var pan = cy.pan(); + var zoom = cy.zoom(); + return getPoints(ele).map(function (p) { + return modelToRenderedPosition(p, zoom, pan); + }); + } + }; + + var controlPoints = function controlPoints(ele) { + return ele.renderer().getControlPoints(ele); + }; + + var segmentPoints = function segmentPoints(ele) { + return ele.renderer().getSegmentPoints(ele); + }; + + var sourceEndpoint = function sourceEndpoint(ele) { + return ele.renderer().getSourceEndpoint(ele); + }; + + var targetEndpoint = function targetEndpoint(ele) { + return ele.renderer().getTargetEndpoint(ele); + }; + + var midpoint = function midpoint(ele) { + return ele.renderer().getEdgeMidpoint(ele); + }; + + var pts = { + controlPoints: { + get: controlPoints, + mult: true + }, + segmentPoints: { + get: segmentPoints, + mult: true + }, + sourceEndpoint: { + get: sourceEndpoint + }, + targetEndpoint: { + get: targetEndpoint + }, + midpoint: { + get: midpoint + } + }; + + var renderedName = function renderedName(name) { + return 'rendered' + name[0].toUpperCase() + name.substr(1); + }; + + var edgePoints = Object.keys(pts).reduce(function (obj, name) { + var spec = pts[name]; + var rName = renderedName(name); + + obj[name] = function () { + return ifEdge(this, spec.get); + }; + + if (spec.mult) { + obj[rName] = function () { + return ifEdgeRenderedPositions(this, spec.get); + }; + } else { + obj[rName] = function () { + return ifEdgeRenderedPosition(this, spec.get); + }; + } + + return obj; + }, {}); + + var dimensions = extend({}, position, bounds, widthHeight, edgePoints); + + /*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + */ + var Event = function Event(src, props) { + this.recycle(src, props); + }; + + function returnFalse() { + return false; + } + + function returnTrue() { + return true; + } // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + + + Event.prototype = { + instanceString: function instanceString() { + return 'event'; + }, + recycle: function recycle(src, props) { + this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse; + + if (src != null && src.preventDefault) { + // Browser Event object + this.type = src.type; // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + + this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse; + } else if (src != null && src.type) { + // Plain object containing all event details + props = src; + } else { + // Event string + this.type = src; + } // Put explicitly provided properties onto the event object + + + if (props != null) { + // more efficient to manually copy fields we use + this.originalEvent = props.originalEvent; + this.type = props.type != null ? props.type : this.type; + this.cy = props.cy; + this.target = props.target; + this.position = props.position; + this.renderedPosition = props.renderedPosition; + this.namespace = props.namespace; + this.layout = props.layout; + } + + if (this.cy != null && this.position != null && this.renderedPosition == null) { + // create a rendered position based on the passed position + var pos = this.position; + var zoom = this.cy.zoom(); + var pan = this.cy.pan(); + this.renderedPosition = { + x: pos.x * zoom + pan.x, + y: pos.y * zoom + pan.y + }; + } // Create a timestamp if incoming event doesn't have one + + + this.timeStamp = src && src.timeStamp || Date.now(); + }, + preventDefault: function preventDefault() { + this.isDefaultPrevented = returnTrue; + var e = this.originalEvent; + + if (!e) { + return; + } // if preventDefault exists run it on the original event + + + if (e.preventDefault) { + e.preventDefault(); + } + }, + stopPropagation: function stopPropagation() { + this.isPropagationStopped = returnTrue; + var e = this.originalEvent; + + if (!e) { + return; + } // if stopPropagation exists run it on the original event + + + if (e.stopPropagation) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function stopImmediatePropagation() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse + }; + + var eventRegex = /^([^.]+)(\.(?:[^.]+))?$/; // regex for matching event strings (e.g. "click.namespace") + + var universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally + + var defaults$8 = { + qualifierCompare: function qualifierCompare(q1, q2) { + return q1 === q2; + }, + eventMatches: function + /*context, listener, eventObj*/ + eventMatches() { + return true; + }, + addEventFields: function + /*context, evt*/ + addEventFields() {}, + callbackContext: function callbackContext(context + /*, listener, eventObj*/ + ) { + return context; + }, + beforeEmit: function + /* context, listener, eventObj */ + beforeEmit() {}, + afterEmit: function + /* context, listener, eventObj */ + afterEmit() {}, + bubble: function + /*context*/ + bubble() { + return false; + }, + parent: function + /*context*/ + parent() { + return null; + }, + context: null + }; + var defaultsKeys = Object.keys(defaults$8); + var emptyOpts = {}; + + function Emitter() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts; + var context = arguments.length > 1 ? arguments[1] : undefined; + + // micro-optimisation vs Object.assign() -- reduces Element instantiation time + for (var i = 0; i < defaultsKeys.length; i++) { + var key = defaultsKeys[i]; + this[key] = opts[key] || defaults$8[key]; + } + + this.context = context || this.context; + this.listeners = []; + this.emitting = 0; + } + + var p = Emitter.prototype; + + var forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) { + if (fn$6(qualifier)) { + callback = qualifier; + qualifier = null; + } + + if (confOverrides) { + if (conf == null) { + conf = confOverrides; + } else { + conf = extend({}, conf, confOverrides); + } + } + + var eventList = array(events) ? events : events.split(/\s+/); + + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + + if (emptyString(evt)) { + continue; + } + + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var ret = handler(self, evt, type, namespace, qualifier, callback, conf); + + if (ret === false) { + break; + } // allow exiting early + + } + } + }; + + var makeEventObj = function makeEventObj(self, obj) { + self.addEventFields(self.context, obj); + return new Event(obj.type, obj); + }; + + var forEachEventObj = function forEachEventObj(self, handler, events) { + if (event(events)) { + handler(self, events); + return; + } else if (plainObject(events)) { + handler(self, makeEventObj(self, events)); + return; + } + + var eventList = array(events) ? events : events.split(/\s+/); + + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + + if (emptyString(evt)) { + continue; + } + + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var eventObj = makeEventObj(self, { + type: type, + namespace: namespace, + target: self.context + }); + handler(self, eventObj); + } + } + }; + + p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) { + forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) { + if (fn$6(callback)) { + self.listeners.push({ + event: event, + // full event string + callback: callback, + // callback to run + type: type, + // the event type (e.g. 'click') + namespace: namespace, + // the event namespace (e.g. ".foo") + qualifier: qualifier, + // a restriction on whether to match this emitter + conf: conf // additional configuration + + }); + } + }, events, qualifier, callback, conf, confOverrides); + return this; + }; + + p.one = function (events, qualifier, callback, conf) { + return this.on(events, qualifier, callback, conf, { + one: true + }); + }; + + p.removeListener = p.off = function (events, qualifier, callback, conf) { + var _this = this; + + if (this.emitting !== 0) { + this.listeners = copyArray$1(this.listeners); + } + + var listeners = this.listeners; + + var _loop = function _loop(i) { + var listener = listeners[i]; + forEachEvent(_this, function (self, event, type, namespace, qualifier, callback + /*, conf*/ + ) { + if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) { + listeners.splice(i, 1); + return false; + } + }, events, qualifier, callback, conf); + }; + + for (var i = listeners.length - 1; i >= 0; i--) { + _loop(i); + } + + return this; + }; + + p.removeAllListeners = function () { + return this.removeListener('*'); + }; + + p.emit = p.trigger = function (events, extraParams, manualCallback) { + var listeners = this.listeners; + var numListenersBeforeEmit = listeners.length; + this.emitting++; + + if (!array(extraParams)) { + extraParams = [extraParams]; + } + + forEachEventObj(this, function (self, eventObj) { + if (manualCallback != null) { + listeners = [{ + event: eventObj.event, + type: eventObj.type, + namespace: eventObj.namespace, + callback: manualCallback + }]; + numListenersBeforeEmit = listeners.length; + } + + var _loop2 = function _loop2(i) { + var listener = listeners[i]; + + if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) { + var args = [eventObj]; + + if (extraParams != null) { + push(args, extraParams); + } + + self.beforeEmit(self.context, listener, eventObj); + + if (listener.conf && listener.conf.one) { + self.listeners = self.listeners.filter(function (l) { + return l !== listener; + }); + } + + var context = self.callbackContext(self.context, listener, eventObj); + var ret = listener.callback.apply(context, args); + self.afterEmit(self.context, listener, eventObj); + + if (ret === false) { + eventObj.stopPropagation(); + eventObj.preventDefault(); + } + } // if listener matches + + }; + + for (var i = 0; i < numListenersBeforeEmit; i++) { + _loop2(i); + } // for listener + + + if (self.bubble(self.context) && !eventObj.isPropagationStopped()) { + self.parent(self.context).emit(eventObj, extraParams); + } + }, events); + this.emitting--; + return this; + }; + + var emitterOptions$1 = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(ele, listener, eventObj) { + var selector = listener.qualifier; + + if (selector != null) { + return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + + return true; + }, + addEventFields: function addEventFields(ele, evt) { + evt.cy = ele.cy(); + evt.target = ele; + }, + callbackContext: function callbackContext(ele, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : ele; + }, + beforeEmit: function beforeEmit(context, listener + /*, eventObj*/ + ) { + if (listener.conf && listener.conf.once) { + listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); + } + }, + bubble: function bubble() { + return true; + }, + parent: function parent(ele) { + return ele.isChild() ? ele.parent() : ele.cy(); + } + }; + + var argSelector$1 = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } + }; + + var elesfn$9 = { + createEmitter: function createEmitter() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions$1, ele); + } + } + + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback); + } + + return this; + }, + removeListener: function removeListener(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeListener(events, argSel, callback); + } + + return this; + }, + removeAllListeners: function removeAllListeners() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeAllListeners(); + } + + return this; + }, + one: function one(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().one(events, argSel, callback); + } + + return this; + }, + once: function once(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback, { + once: true, + onceCollection: this + }); + } + }, + emit: function emit(events, extraParams) { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().emit(events, extraParams); + } + + return this; + }, + emitAndNotify: function emitAndNotify(event, extraParams) { + // for internal use only + if (this.length === 0) { + return; + } // empty collections don't need to notify anything + // notify renderer + + + this.cy().notify(event, this); + this.emit(event, extraParams); + return this; + } + }; + define.eventAliasesOn(elesfn$9); + + var elesfn$8 = { + nodes: function nodes(selector) { + return this.filter(function (ele) { + return ele.isNode(); + }).filter(selector); + }, + edges: function edges(selector) { + return this.filter(function (ele) { + return ele.isEdge(); + }).filter(selector); + }, + // internal helper to get nodes and edges as separate collections with single iteration over elements + byGroup: function byGroup() { + var nodes = this.spawn(); + var edges = this.spawn(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + if (ele.isNode()) { + nodes.push(ele); + } else { + edges.push(ele); + } + } + + return { + nodes: nodes, + edges: edges + }; + }, + filter: function filter(_filter, thisArg) { + if (_filter === undefined) { + // check this first b/c it's the most common/performant case + return this; + } else if (string(_filter) || elementOrCollection(_filter)) { + return new Selector(_filter).filter(this); + } else if (fn$6(_filter)) { + var filterEles = this.spawn(); + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles); + + if (include) { + filterEles.push(ele); + } + } + + return filterEles; + } + + return this.spawn(); // if not handled by above, give 'em an empty collection + }, + not: function not(toRemove) { + if (!toRemove) { + return this; + } else { + if (string(toRemove)) { + toRemove = this.filter(toRemove); + } + + var elements = this.spawn(); + + for (var i = 0; i < this.length; i++) { + var element = this[i]; + var remove = toRemove.has(element); + + if (!remove) { + elements.push(element); + } + } + + return elements; + } + }, + absoluteComplement: function absoluteComplement() { + var cy = this.cy(); + return cy.mutableElements().not(this); + }, + intersect: function intersect(other) { + // if a selector is specified, then filter by it instead + if (string(other)) { + var selector = other; + return this.filter(selector); + } + + var elements = this.spawn(); + var col1 = this; + var col2 = other; + var col1Smaller = this.length < other.length; + var colS = col1Smaller ? col1 : col2; + var colL = col1Smaller ? col2 : col1; + + for (var i = 0; i < colS.length; i++) { + var ele = colS[i]; + + if (colL.has(ele)) { + elements.push(ele); + } + } + + return elements; + }, + xor: function xor(other) { + var cy = this._private.cy; + + if (string(other)) { + other = cy.$(other); + } + + var elements = this.spawn(); + var col1 = this; + var col2 = other; + + var add = function add(col, other) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + + if (!inOther) { + elements.push(ele); + } + } + }; + + add(col1, col2); + add(col2, col1); + return elements; + }, + diff: function diff(other) { + var cy = this._private.cy; + + if (string(other)) { + other = cy.$(other); + } + + var left = this.spawn(); + var right = this.spawn(); + var both = this.spawn(); + var col1 = this; + var col2 = other; + + var add = function add(col, other, retEles) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + + if (inOther) { + both.merge(ele); + } else { + retEles.push(ele); + } + } + }; + + add(col1, col2, left); + add(col2, col1, right); + return { + left: left, + right: right, + both: both + }; + }, + add: function add(toAdd) { + var cy = this._private.cy; + + if (!toAdd) { + return this; + } + + if (string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + + var elements = this.spawnSelf(); + + for (var i = 0; i < toAdd.length; i++) { + var ele = toAdd[i]; + var add = !this.has(ele); + + if (add) { + elements.push(ele); + } + } + + return elements; + }, + // in place merge on calling collection + merge: function merge(toAdd) { + var _p = this._private; + var cy = _p.cy; + + if (!toAdd) { + return this; + } + + if (toAdd && string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + + var map = _p.map; + + for (var i = 0; i < toAdd.length; i++) { + var toAddEle = toAdd[i]; + var id = toAddEle._private.data.id; + var add = !map.has(id); + + if (add) { + var index = this.length++; + this[index] = toAddEle; + map.set(id, { + ele: toAddEle, + index: index + }); + } + } + + return this; // chaining + }, + unmergeAt: function unmergeAt(i) { + var ele = this[i]; + var id = ele.id(); + var _p = this._private; + var map = _p.map; // remove ele + + this[i] = undefined; + map["delete"](id); + var unmergedLastEle = i === this.length - 1; // replace empty spot with last ele in collection + + if (this.length > 1 && !unmergedLastEle) { + var lastEleI = this.length - 1; + var lastEle = this[lastEleI]; + var lastEleId = lastEle._private.data.id; + this[lastEleI] = undefined; + this[i] = lastEle; + map.set(lastEleId, { + ele: lastEle, + index: i + }); + } // the collection is now 1 ele smaller + + + this.length--; + return this; + }, + // remove single ele in place in calling collection + unmergeOne: function unmergeOne(ele) { + ele = ele[0]; + var _p = this._private; + var id = ele._private.data.id; + var map = _p.map; + var entry = map.get(id); + + if (!entry) { + return this; // no need to remove + } + + var i = entry.index; + this.unmergeAt(i); + return this; + }, + // remove eles in place on calling collection + unmerge: function unmerge(toRemove) { + var cy = this._private.cy; + + if (!toRemove) { + return this; + } + + if (toRemove && string(toRemove)) { + var selector = toRemove; + toRemove = cy.mutableElements().filter(selector); + } + + for (var i = 0; i < toRemove.length; i++) { + this.unmergeOne(toRemove[i]); + } + + return this; // chaining + }, + unmergeBy: function unmergeBy(toRmFn) { + for (var i = this.length - 1; i >= 0; i--) { + var ele = this[i]; + + if (toRmFn(ele)) { + this.unmergeAt(i); + } + } + + return this; + }, + map: function map(mapFn, thisArg) { + var arr = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles); + arr.push(ret); + } + + return arr; + }, + reduce: function reduce(fn, initialValue) { + var val = initialValue; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + val = fn(val, eles[i], i, eles); + } + + return val; + }, + max: function max(valFn, thisArg) { + var max = -Infinity; + var maxEle; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + + if (val > max) { + max = val; + maxEle = ele; + } + } + + return { + value: max, + ele: maxEle + }; + }, + min: function min(valFn, thisArg) { + var min = Infinity; + var minEle; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + + if (val < min) { + min = val; + minEle = ele; + } + } + + return { + value: min, + ele: minEle + }; + } + }; // aliases + + var fn$1 = elesfn$8; + fn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add; + fn$1['\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not; + fn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect; + fn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor; + fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter; + fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement; + + var elesfn$7 = { + isNode: function isNode() { + return this.group() === 'nodes'; + }, + isEdge: function isEdge() { + return this.group() === 'edges'; + }, + isLoop: function isLoop() { + return this.isEdge() && this.source()[0] === this.target()[0]; + }, + isSimple: function isSimple() { + return this.isEdge() && this.source()[0] !== this.target()[0]; + }, + group: function group() { + var ele = this[0]; + + if (ele) { + return ele._private.group; + } + } + }; + + /** + * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges), + * and z-index (low to high). These styles affect how this applies: + * + * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the + * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from + * root to leaves of the compound graph. The last drawn is `top`. + * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes. + * `manual` ignores this convention and draws based on the `z-index` value setting. + * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher + * `z-index` will be drawn on top of an element with a lower `z-index`. + */ + + var zIndexSort = function zIndexSort(a, b) { + var cy = a.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + + function getDepth(ele) { + var style = ele.pstyle('z-compound-depth'); + + if (style.value === 'auto') { + return hasCompoundNodes ? ele.zDepth() : 0; + } else if (style.value === 'bottom') { + return -1; + } else if (style.value === 'top') { + return MAX_INT$1; + } // 'orphan' + + + return 0; + } + + var depthDiff = getDepth(a) - getDepth(b); + + if (depthDiff !== 0) { + return depthDiff; + } + + function getEleDepth(ele) { + var style = ele.pstyle('z-index-compare'); + + if (style.value === 'auto') { + return ele.isNode() ? 1 : 0; + } // 'manual' + + + return 0; + } + + var eleDiff = getEleDepth(a) - getEleDepth(b); + + if (eleDiff !== 0) { + return eleDiff; + } + + var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value; + + if (zDiff !== 0) { + return zDiff; + } // compare indices in the core (order added to graph w/ last on top) + + + return a.poolIndex() - b.poolIndex(); + }; + + var elesfn$6 = { + forEach: function forEach(fn, thisArg) { + if (fn$6(fn)) { + var N = this.length; + + for (var i = 0; i < N; i++) { + var ele = this[i]; + var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this); + + if (ret === false) { + break; + } // exit each early on return false + + } + } + + return this; + }, + toArray: function toArray() { + var array = []; + + for (var i = 0; i < this.length; i++) { + array.push(this[i]); + } + + return array; + }, + slice: function slice(start, end) { + var array = []; + var thisSize = this.length; + + if (end == null) { + end = thisSize; + } + + if (start == null) { + start = 0; + } + + if (start < 0) { + start = thisSize + start; + } + + if (end < 0) { + end = thisSize + end; + } + + for (var i = start; i >= 0 && i < end && i < thisSize; i++) { + array.push(this[i]); + } + + return this.spawn(array); + }, + size: function size() { + return this.length; + }, + eq: function eq(i) { + return this[i] || this.spawn(); + }, + first: function first() { + return this[0] || this.spawn(); + }, + last: function last() { + return this[this.length - 1] || this.spawn(); + }, + empty: function empty() { + return this.length === 0; + }, + nonempty: function nonempty() { + return !this.empty(); + }, + sort: function sort(sortFn) { + if (!fn$6(sortFn)) { + return this; + } + + var sorted = this.toArray().sort(sortFn); + return this.spawn(sorted); + }, + sortByZIndex: function sortByZIndex() { + return this.sort(zIndexSort); + }, + zDepth: function zDepth() { + var ele = this[0]; + + if (!ele) { + return undefined; + } // let cy = ele.cy(); + + + var _p = ele._private; + var group = _p.group; + + if (group === 'nodes') { + var depth = _p.data.parent ? ele.parents().size() : 0; + + if (!ele.isParent()) { + return MAX_INT$1 - 1; // childless nodes always on top + } + + return depth; + } else { + var src = _p.source; + var tgt = _p.target; + var srcDepth = src.zDepth(); + var tgtDepth = tgt.zDepth(); + return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent + } + } + }; + elesfn$6.each = elesfn$6.forEach; + + var defineSymbolIterator = function defineSymbolIterator() { + var typeofUndef = "undefined" ; + var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; // eslint-disable-line no-undef + + if (isIteratorSupported) { + elesfn$6[Symbol.iterator] = function () { + var _this = this; + + // eslint-disable-line no-undef + var entry = { + value: undefined, + done: false + }; + var i = 0; + var length = this.length; + return _defineProperty$1({ + next: function next() { + if (i < length) { + entry.value = _this[i++]; + } else { + entry.value = undefined; + entry.done = true; + } + + return entry; + } + }, Symbol.iterator, function () { + // eslint-disable-line no-undef + return this; + }); + }; + } + }; + + defineSymbolIterator(); + + var getLayoutDimensionOptions = defaults$g({ + nodeDimensionsIncludeLabels: false + }); + var elesfn$5 = { + // Calculates and returns node dimensions { x, y } based on options given + layoutDimensions: function layoutDimensions(options) { + options = getLayoutDimensionOptions(options); + var dims; + + if (!this.takesUpSpace()) { + dims = { + w: 0, + h: 0 + }; + } else if (options.nodeDimensionsIncludeLabels) { + var bbDim = this.boundingBox(); + dims = { + w: bbDim.w, + h: bbDim.h + }; + } else { + dims = { + w: this.outerWidth(), + h: this.outerHeight() + }; + } // sanitise the dimensions for external layouts (avoid division by zero) + + + if (dims.w === 0 || dims.h === 0) { + dims.w = dims.h = 1; + } + + return dims; + }, + // using standard layout options, apply position function (w/ or w/o animation) + layoutPositions: function layoutPositions(layout, options, fn) { + var nodes = this.nodes().filter(function (n) { + return !n.isParent(); + }); + var cy = this.cy(); + var layoutEles = options.eles; // nodes & edges + + var getMemoizeKey = function getMemoizeKey(node) { + return node.id(); + }; + + var fnMem = memoize$1(fn, getMemoizeKey); // memoized version of position function + + layout.emit({ + type: 'layoutstart', + layout: layout + }); + layout.animations = []; + + var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) { + var center = { + x: nodesBb.x1 + nodesBb.w / 2, + y: nodesBb.y1 + nodesBb.h / 2 + }; + var spacingVector = { + // scale from center of bounding box (not necessarily 0,0) + x: (pos.x - center.x) * spacing, + y: (pos.y - center.y) * spacing + }; + return { + x: center.x + spacingVector.x, + y: center.y + spacingVector.y + }; + }; + + var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1; + + var spacingBb = function spacingBb() { + if (!useSpacingFactor) { + return null; + } + + var bb = makeBoundingBox(); + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = fnMem(node, i); + expandBoundingBoxByPoint(bb, pos.x, pos.y); + } + + return bb; + }; + + var bb = spacingBb(); + var getFinalPos = memoize$1(function (node, i) { + var newPos = fnMem(node, i); + + if (useSpacingFactor) { + var spacing = Math.abs(options.spacingFactor); + newPos = calculateSpacing(spacing, bb, newPos); + } + + if (options.transform != null) { + newPos = options.transform(node, newPos); + } + + return newPos; + }, getMemoizeKey); + + if (options.animate) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var newPos = getFinalPos(node, i); + var animateNode = options.animateFilter == null || options.animateFilter(node, i); + + if (animateNode) { + var ani = node.animation({ + position: newPos, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(ani); + } else { + node.position(newPos); + } + } + + if (options.fit) { + var fitAni = cy.animation({ + fit: { + boundingBox: layoutEles.boundingBoxAt(getFinalPos), + padding: options.padding + }, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(fitAni); + } else if (options.zoom !== undefined && options.pan !== undefined) { + var zoomPanAni = cy.animation({ + zoom: options.zoom, + pan: options.pan, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(zoomPanAni); + } + + layout.animations.forEach(function (ani) { + return ani.play(); + }); + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + Promise$1.all(layout.animations.map(function (ani) { + return ani.promise(); + })).then(function () { + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + }); + } else { + nodes.positions(getFinalPos); + + if (options.fit) { + cy.fit(options.eles, options.padding); + } + + if (options.zoom != null) { + cy.zoom(options.zoom); + } + + if (options.pan) { + cy.pan(options.pan); + } + + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } + + return this; // chaining + }, + layout: function layout(options) { + var cy = this.cy(); + return cy.makeLayout(extend({}, options, { + eles: this + })); + } + }; // aliases: + + elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout; + + function styleCache(key, fn, ele) { + var _p = ele._private; + var cache = _p.styleCache = _p.styleCache || []; + var val; + + if ((val = cache[key]) != null) { + return val; + } else { + val = cache[key] = fn(ele); + return val; + } + } + + function cacheStyleFunction(key, fn) { + key = hashString(key); + return function cachedStyleFunction(ele) { + return styleCache(key, fn, ele); + }; + } + + function cachePrototypeStyleFunction(key, fn) { + key = hashString(key); + + var selfFn = function selfFn(ele) { + return fn.call(ele); + }; + + return function cachedPrototypeStyleFunction() { + var ele = this[0]; + + if (ele) { + return styleCache(key, selfFn, ele); + } + }; + } + + var elesfn$4 = { + recalculateRenderedStyle: function recalculateRenderedStyle(useCache) { + var cy = this.cy(); + var renderer = cy.renderer(); + var styleEnabled = cy.styleEnabled(); + + if (renderer && styleEnabled) { + renderer.recalculateRenderedStyle(this, useCache); + } + + return this; + }, + dirtyStyleCache: function dirtyStyleCache() { + var cy = this.cy(); + + var dirty = function dirty(ele) { + return ele._private.styleCache = null; + }; + + if (cy.hasCompoundNodes()) { + var eles; + eles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + eles.merge(eles.connectedEdges()); + eles.forEach(dirty); + } else { + this.forEach(function (ele) { + dirty(ele); + ele.connectedEdges().forEach(dirty); + }); + } + + return this; + }, + // fully updates (recalculates) the style for the elements + updateStyle: function updateStyle(notifyRenderer) { + var cy = this._private.cy; + + if (!cy.styleEnabled()) { + return this; + } + + if (cy.batching()) { + var bEles = cy._private.batchStyleEles; + bEles.merge(this); + return this; // chaining and exit early when batching + } + + var hasCompounds = cy.hasCompoundNodes(); + var updatedEles = this; + notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false; + + if (hasCompounds) { + // then add everything up and down for compound selector checks + updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + } // let changedEles = style.apply( updatedEles ); + + + var changedEles = updatedEles; + + if (notifyRenderer) { + changedEles.emitAndNotify('style'); // let renderer know we changed style + } else { + changedEles.emit('style'); // just fire the event + } + + updatedEles.forEach(function (ele) { + return ele._private.styleDirty = true; + }); + return this; // chaining + }, + // private: clears dirty flag and recalculates style + cleanStyle: function cleanStyle() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return; + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + if (ele._private.styleDirty) { + // n.b. this flag should be set before apply() to avoid potential infinite recursion + ele._private.styleDirty = false; + cy.style().apply(ele); + } + } + }, + // get the internal parsed style object for the specified property + parsedStyle: function parsedStyle(property) { + var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var ele = this[0]; + var cy = ele.cy(); + + if (!cy.styleEnabled()) { + return; + } + + if (ele) { + this.cleanStyle(); + var overriddenStyle = ele._private.style[property]; + + if (overriddenStyle != null) { + return overriddenStyle; + } else if (includeNonDefault) { + return cy.style().getDefaultProperty(property); + } else { + return null; + } + } + }, + numericStyle: function numericStyle(property) { + var ele = this[0]; + + if (!ele.cy().styleEnabled()) { + return; + } + + if (ele) { + var pstyle = ele.pstyle(property); + return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value; + } + }, + numericStyleUnits: function numericStyleUnits(property) { + var ele = this[0]; + + if (!ele.cy().styleEnabled()) { + return; + } + + if (ele) { + return ele.pstyle(property).units; + } + }, + // get the specified css property as a rendered value (i.e. on-screen value) + // or get the whole rendered style if no property specified (NB doesn't allow setting) + renderedStyle: function renderedStyle(property) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var ele = this[0]; + + if (ele) { + return cy.style().getRenderedStyle(ele, property); + } + }, + // read the calculated css style of the element or override the style (via a bypass) + style: function style(name, value) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var updateTransitions = false; + var style = cy.style(); + + if (plainObject(name)) { + // then extend the bypass + var props = name; + style.applyBypass(this, props, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } else if (string(name)) { + if (value === undefined) { + // then get the property from the style + var ele = this[0]; + + if (ele) { + return style.getStylePropertyValue(ele, name); + } else { + // empty collection => can't get any value + return; + } + } else { + // then set the bypass with the property value + style.applyBypass(this, name, value, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } + } else if (name === undefined) { + var _ele = this[0]; + + if (_ele) { + return style.getRawStyle(_ele); + } else { + // empty collection => can't get any value + return; + } + } + + return this; // chaining + }, + removeStyle: function removeStyle(names) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var updateTransitions = false; + var style = cy.style(); + var eles = this; + + if (names === undefined) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + style.removeAllBypasses(ele, updateTransitions); + } + } else { + names = names.split(/\s+/); + + for (var _i = 0; _i < eles.length; _i++) { + var _ele2 = eles[_i]; + style.removeBypasses(_ele2, names, updateTransitions); + } + } + + this.emitAndNotify('style'); // let the renderer know we've updated style + + return this; // chaining + }, + show: function show() { + this.css('display', 'element'); + return this; // chaining + }, + hide: function hide() { + this.css('display', 'none'); + return this; // chaining + }, + effectiveOpacity: function effectiveOpacity() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return 1; + } + + var hasCompoundNodes = cy.hasCompoundNodes(); + var ele = this[0]; + + if (ele) { + var _p = ele._private; + var parentOpacity = ele.pstyle('opacity').value; + + if (!hasCompoundNodes) { + return parentOpacity; + } + + var parents = !_p.data.parent ? null : ele.parents(); + + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + var opacity = parent.pstyle('opacity').value; + parentOpacity = opacity * parentOpacity; + } + } + + return parentOpacity; + } + }, + transparent: function transparent() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return false; + } + + var ele = this[0]; + var hasCompoundNodes = ele.cy().hasCompoundNodes(); + + if (ele) { + if (!hasCompoundNodes) { + return ele.pstyle('opacity').value === 0; + } else { + return ele.effectiveOpacity() === 0; + } + } + }, + backgrounding: function backgrounding() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return false; + } + + var ele = this[0]; + return ele._private.backgrounding ? true : false; + } + }; + + function checkCompound(ele, parentOk) { + var _p = ele._private; + var parents = _p.data.parent ? ele.parents() : null; + + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + + if (!parentOk(parent)) { + return false; + } + } + } + + return true; + } + + function defineDerivedStateFunction(specs) { + var ok = specs.ok; + var edgeOkViaNode = specs.edgeOkViaNode || specs.ok; + var parentOk = specs.parentOk || specs.ok; + return function () { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return true; + } + + var ele = this[0]; + var hasCompoundNodes = cy.hasCompoundNodes(); + + if (ele) { + var _p = ele._private; + + if (!ok(ele)) { + return false; + } + + if (ele.isNode()) { + return !hasCompoundNodes || checkCompound(ele, parentOk); + } else { + var src = _p.source; + var tgt = _p.target; + return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode))); + } + } + }; + } + + var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) { + return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); + }); + elesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({ + ok: eleTakesUpSpace + })); + var eleInteractive = cacheStyleFunction('eleInteractive', function (ele) { + return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele); + }); + var parentInteractive = cacheStyleFunction('parentInteractive', function (parent) { + return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent); + }); + elesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({ + ok: eleInteractive, + parentOk: parentInteractive, + edgeOkViaNode: eleTakesUpSpace + })); + + elesfn$4.noninteractive = function () { + var ele = this[0]; + + if (ele) { + return !ele.interactive(); + } + }; + + var eleVisible = cacheStyleFunction('eleVisible', function (ele) { + return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele); + }); + var edgeVisibleViaNode = eleTakesUpSpace; + elesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({ + ok: eleVisible, + edgeOkViaNode: edgeVisibleViaNode + })); + + elesfn$4.hidden = function () { + var ele = this[0]; + + if (ele) { + return !ele.visible(); + } + }; + + elesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () { + if (!this.cy().styleEnabled()) { + return false; + } + + return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace(); + }); + elesfn$4.bypass = elesfn$4.css = elesfn$4.style; + elesfn$4.renderedCss = elesfn$4.renderedStyle; + elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle; + elesfn$4.pstyle = elesfn$4.parsedStyle; + + var elesfn$3 = {}; + + function defineSwitchFunction(params) { + return function () { + var args = arguments; + var changedEles = []; // e.g. cy.nodes().select( data, handler ) + + if (args.length === 2) { + var data = args[0]; + var handler = args[1]; + this.on(params.event, data, handler); + } // e.g. cy.nodes().select( handler ) + else if (args.length === 1 && fn$6(args[0])) { + var _handler = args[0]; + this.on(params.event, _handler); + } // e.g. cy.nodes().select() + // e.g. (private) cy.nodes().select(['tapselect']) + else if (args.length === 0 || args.length === 1 && array(args[0])) { + var addlEvents = args.length === 1 ? args[0] : null; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var able = !params.ableField || ele._private[params.ableField]; + var changed = ele._private[params.field] != params.value; + + if (params.overrideAble) { + var overrideAble = params.overrideAble(ele); + + if (overrideAble !== undefined) { + able = overrideAble; + + if (!overrideAble) { + return this; + } // to save cycles assume not able for all on override + + } + } + + if (able) { + ele._private[params.field] = params.value; + + if (changed) { + changedEles.push(ele); + } + } + } + + var changedColl = this.spawn(changedEles); + changedColl.updateStyle(); // change of state => possible change of style + + changedColl.emit(params.event); + + if (addlEvents) { + changedColl.emit(addlEvents); + } + } + + return this; + }; + } + + function defineSwitchSet(params) { + elesfn$3[params.field] = function () { + var ele = this[0]; + + if (ele) { + if (params.overrideField) { + var val = params.overrideField(ele); + + if (val !== undefined) { + return val; + } + } + + return ele._private[params.field]; + } + }; + + elesfn$3[params.on] = defineSwitchFunction({ + event: params.on, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: true + }); + elesfn$3[params.off] = defineSwitchFunction({ + event: params.off, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: false + }); + } + + defineSwitchSet({ + field: 'locked', + overrideField: function overrideField(ele) { + return ele.cy().autolock() ? true : undefined; + }, + on: 'lock', + off: 'unlock' + }); + defineSwitchSet({ + field: 'grabbable', + overrideField: function overrideField(ele) { + return ele.cy().autoungrabify() || ele.pannable() ? false : undefined; + }, + on: 'grabify', + off: 'ungrabify' + }); + defineSwitchSet({ + field: 'selected', + ableField: 'selectable', + overrideAble: function overrideAble(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'select', + off: 'unselect' + }); + defineSwitchSet({ + field: 'selectable', + overrideField: function overrideField(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'selectify', + off: 'unselectify' + }); + elesfn$3.deselect = elesfn$3.unselect; + + elesfn$3.grabbed = function () { + var ele = this[0]; + + if (ele) { + return ele._private.grabbed; + } + }; + + defineSwitchSet({ + field: 'active', + on: 'activate', + off: 'unactivate' + }); + defineSwitchSet({ + field: 'pannable', + on: 'panify', + off: 'unpanify' + }); + + elesfn$3.inactive = function () { + var ele = this[0]; + + if (ele) { + return !ele._private.active; + } + }; + + var elesfn$2 = {}; // DAG functions + //////////////// + + var defineDagExtremity = function defineDagExtremity(params) { + return function dagExtremityImpl(selector) { + var eles = this; + var ret = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + var disqualified = false; + var edges = ele.connectedEdges(); + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + + if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) { + disqualified = true; + break; + } + } + + if (!disqualified) { + ret.push(ele); + } + } + + return this.spawn(ret, true).filter(selector); + }; + }; + + var defineDagOneHop = function defineDagOneHop(params) { + return function (selector) { + var eles = this; + var oEles = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + var edges = ele.connectedEdges(); + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + + if (params.outgoing && src === ele) { + oEles.push(edge); + oEles.push(tgt); + } else if (params.incoming && tgt === ele) { + oEles.push(edge); + oEles.push(src); + } + } + } + + return this.spawn(oEles, true).filter(selector); + }; + }; + + var defineDagAllHops = function defineDagAllHops(params) { + return function (selector) { + var eles = this; + var sEles = []; + var sElesIds = {}; + + for (;;) { + var next = params.outgoing ? eles.outgoers() : eles.incomers(); + + if (next.length === 0) { + break; + } // done if none left + + + var newNext = false; + + for (var i = 0; i < next.length; i++) { + var n = next[i]; + var nid = n.id(); + + if (!sElesIds[nid]) { + sElesIds[nid] = true; + sEles.push(n); + newNext = true; + } + } + + if (!newNext) { + break; + } // done if touched all outgoers already + + + eles = next; + } + + return this.spawn(sEles, true).filter(selector); + }; + }; + + elesfn$2.clearTraversalCache = function () { + for (var i = 0; i < this.length; i++) { + this[i]._private.traversalCache = null; + } + }; + + extend(elesfn$2, { + // get the root nodes in the DAG + roots: defineDagExtremity({ + noIncomingEdges: true + }), + // get the leaf nodes in the DAG + leaves: defineDagExtremity({ + noOutgoingEdges: true + }), + // normally called children in graph theory + // these nodes =edges=> outgoing nodes + outgoers: cache(defineDagOneHop({ + outgoing: true + }), 'outgoers'), + // aka DAG descendants + successors: defineDagAllHops({ + outgoing: true + }), + // normally called parents in graph theory + // these nodes <=edges= incoming nodes + incomers: cache(defineDagOneHop({ + incoming: true + }), 'incomers'), + // aka DAG ancestors + predecessors: defineDagAllHops({ + incoming: true + }) + }); // Neighbourhood functions + ////////////////////////// + + extend(elesfn$2, { + neighborhood: cache(function (selector) { + var elements = []; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + // for all nodes + var node = nodes[i]; + var connectedEdges = node.connectedEdges(); // for each connected edge, add the edge and the other node + + for (var j = 0; j < connectedEdges.length; j++) { + var edge = connectedEdges[j]; + var src = edge.source(); + var tgt = edge.target(); + var otherNode = node === src ? tgt : src; // need check in case of loop + + if (otherNode.length > 0) { + elements.push(otherNode[0]); // add node 1 hop away + } // add connected edge + + + elements.push(edge[0]); + } + } + + return this.spawn(elements, true).filter(selector); + }, 'neighborhood'), + closedNeighborhood: function closedNeighborhood(selector) { + return this.neighborhood().add(this).filter(selector); + }, + openNeighborhood: function openNeighborhood(selector) { + return this.neighborhood(selector); + } + }); // aliases + + elesfn$2.neighbourhood = elesfn$2.neighborhood; + elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; + elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; // Edge functions + ///////////////// + + extend(elesfn$2, { + source: cache(function sourceImpl(selector) { + var ele = this[0]; + var src; + + if (ele) { + src = ele._private.source || ele.cy().collection(); + } + + return src && selector ? src.filter(selector) : src; + }, 'source'), + target: cache(function targetImpl(selector) { + var ele = this[0]; + var tgt; + + if (ele) { + tgt = ele._private.target || ele.cy().collection(); + } + + return tgt && selector ? tgt.filter(selector) : tgt; + }, 'target'), + sources: defineSourceFunction({ + attr: 'source' + }), + targets: defineSourceFunction({ + attr: 'target' + }) + }); + + function defineSourceFunction(params) { + return function sourceImpl(selector) { + var sources = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var src = ele._private[params.attr]; + + if (src) { + sources.push(src); + } + } + + return this.spawn(sources, true).filter(selector); + }; + } + + extend(elesfn$2, { + edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'), + edgesTo: cache(defineEdgesWithFunction({ + thisIsSrc: true + }), 'edgesTo') + }); + + function defineEdgesWithFunction(params) { + return function edgesWithImpl(otherNodes) { + var elements = []; + var cy = this._private.cy; + var p = params || {}; // get elements if a selector is specified + + if (string(otherNodes)) { + otherNodes = cy.$(otherNodes); + } + + for (var h = 0; h < otherNodes.length; h++) { + var edges = otherNodes[h]._private.edges; + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var edgeData = edge._private.data; + var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target); + var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target); + var edgeConnectsThisAndOther = thisToOther || otherToThis; + + if (!edgeConnectsThisAndOther) { + continue; + } + + if (p.thisIsSrc || p.thisIsTgt) { + if (p.thisIsSrc && !thisToOther) { + continue; + } + + if (p.thisIsTgt && !otherToThis) { + continue; + } + } + + elements.push(edge); + } + } + + return this.spawn(elements, true); + }; + } + + extend(elesfn$2, { + connectedEdges: cache(function (selector) { + var retEles = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var node = eles[i]; + + if (!node.isNode()) { + continue; + } + + var edges = node._private.edges; + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + retEles.push(edge); + } + } + + return this.spawn(retEles, true).filter(selector); + }, 'connectedEdges'), + connectedNodes: cache(function (selector) { + var retEles = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var edge = eles[i]; + + if (!edge.isEdge()) { + continue; + } + + retEles.push(edge.source()[0]); + retEles.push(edge.target()[0]); + } + + return this.spawn(retEles, true).filter(selector); + }, 'connectedNodes'), + parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'), + codirectedEdges: cache(defineParallelEdgesFunction({ + codirected: true + }), 'codirectedEdges') + }); + + function defineParallelEdgesFunction(params) { + var defaults = { + codirected: false + }; + params = extend({}, defaults, params); + return function parallelEdgesImpl(selector) { + // micro-optimised for renderer + var elements = []; + var edges = this.edges(); + var p = params; // look at all the edges in the collection + + for (var i = 0; i < edges.length; i++) { + var edge1 = edges[i]; + var edge1_p = edge1._private; + var src1 = edge1_p.source; + var srcid1 = src1._private.data.id; + var tgtid1 = edge1_p.data.target; + var srcEdges1 = src1._private.edges; // look at edges connected to the src node of this edge + + for (var j = 0; j < srcEdges1.length; j++) { + var edge2 = srcEdges1[j]; + var edge2data = edge2._private.data; + var tgtid2 = edge2data.target; + var srcid2 = edge2data.source; + var codirected = tgtid2 === tgtid1 && srcid2 === srcid1; + var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2; + + if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) { + elements.push(edge2); + } + } + } + + return this.spawn(elements, true).filter(selector); + }; + } // Misc functions + ///////////////// + + + extend(elesfn$2, { + components: function components(root) { + var self = this; + var cy = self.cy(); + var visited = cy.collection(); + var unvisited = root == null ? self.nodes() : root.nodes(); + var components = []; + + if (root != null && unvisited.empty()) { + // root may contain only edges + unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides + } + + var visitInComponent = function visitInComponent(node, component) { + visited.merge(node); + unvisited.unmerge(node); + component.merge(node); + }; + + if (unvisited.empty()) { + return self.spawn(); + } + + var _loop = function _loop() { + // each iteration yields a component + var cmpt = cy.collection(); + components.push(cmpt); + var root = unvisited[0]; + visitInComponent(root, cmpt); + self.bfs({ + directed: false, + roots: root, + visit: function visit(v) { + return visitInComponent(v, cmpt); + } + }); + cmpt.forEach(function (node) { + node.connectedEdges().forEach(function (e) { + // connectedEdges() usually cached + if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) { + // has() is cheap + cmpt.merge(e); // forEach() only considers nodes -- sets N at call time + } + }); + }); + }; + + do { + _loop(); + } while (unvisited.length > 0); + + return components; + }, + component: function component() { + var ele = this[0]; + return ele.cy().mutableElements().components(ele)[0]; + } + }); + elesfn$2.componentsOf = elesfn$2.components; + + var Collection = function Collection(cy, elements) { + var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + if (cy === undefined) { + error('A collection must have a reference to the core'); + return; + } + + var map = new Map$2(); + var createdElements = false; + + if (!elements) { + elements = []; + } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) { + createdElements = true; // make elements from json and restore all at once later + + var eles = []; + var elesIds = new Set$1(); + + for (var i = 0, l = elements.length; i < l; i++) { + var json = elements[i]; + + if (json.data == null) { + json.data = {}; + } + + var _data = json.data; // make sure newly created elements have valid ids + + if (_data.id == null) { + _data.id = uuid(); + } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) { + continue; // can't create element if prior id already exists + } + + var ele = new Element(cy, json, false); + eles.push(ele); + elesIds.add(_data.id); + } + + elements = eles; + } + + this.length = 0; + + for (var _i = 0, _l = elements.length; _i < _l; _i++) { + var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements + + if (element$1 == null) { + continue; + } + + var id = element$1._private.data.id; + + if (!unique || !map.has(id)) { + if (unique) { + map.set(id, { + index: this.length, + ele: element$1 + }); + } + + this[this.length] = element$1; + this.length++; + } + } + + this._private = { + eles: this, + cy: cy, + + get map() { + if (this.lazyMap == null) { + this.rebuildMap(); + } + + return this.lazyMap; + }, + + set map(m) { + this.lazyMap = m; + }, + + rebuildMap: function rebuildMap() { + var m = this.lazyMap = new Map$2(); + var eles = this.eles; + + for (var _i2 = 0; _i2 < eles.length; _i2++) { + var _ele = eles[_i2]; + m.set(_ele.id(), { + index: _i2, + ele: _ele + }); + } + } + }; + + if (unique) { + this._private.map = map; + } // restore the elements if we created them from json + + + if (createdElements && !removed) { + this.restore(); + } + }; // Functions + //////////////////////////////////////////////////////////////////////////////////////////////////// + // keep the prototypes in sync (an element has the same functions as a collection) + // and use elefn and elesfn as shorthands to the prototypes + + + var elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype); + + elesfn$1.instanceString = function () { + return 'collection'; + }; + + elesfn$1.spawn = function (eles, unique) { + return new Collection(this.cy(), eles, unique); + }; + + elesfn$1.spawnSelf = function () { + return this.spawn(this); + }; + + elesfn$1.cy = function () { + return this._private.cy; + }; + + elesfn$1.renderer = function () { + return this._private.cy.renderer(); + }; + + elesfn$1.element = function () { + return this[0]; + }; + + elesfn$1.collection = function () { + if (collection(this)) { + return this; + } else { + // an element + return new Collection(this._private.cy, [this]); + } + }; + + elesfn$1.unique = function () { + return new Collection(this._private.cy, this, true); + }; + + elesfn$1.hasElementWithId = function (id) { + id = '' + id; // id must be string + + return this._private.map.has(id); + }; + + elesfn$1.getElementById = function (id) { + id = '' + id; // id must be string + + var cy = this._private.cy; + + var entry = this._private.map.get(id); + + return entry ? entry.ele : new Collection(cy); // get ele or empty collection + }; + + elesfn$1.$id = elesfn$1.getElementById; + + elesfn$1.poolIndex = function () { + var cy = this._private.cy; + var eles = cy._private.elements; + var id = this[0]._private.data.id; + return eles._private.map.get(id).index; + }; + + elesfn$1.indexOf = function (ele) { + var id = ele[0]._private.data.id; + return this._private.map.get(id).index; + }; + + elesfn$1.indexOfId = function (id) { + id = '' + id; // id must be string + + return this._private.map.get(id).index; + }; + + elesfn$1.json = function (obj) { + var ele = this.element(); + var cy = this.cy(); + + if (ele == null && obj) { + return this; + } // can't set to no eles + + + if (ele == null) { + return undefined; + } // can't get from no eles + + + var p = ele._private; + + if (plainObject(obj)) { + // set + cy.startBatch(); + + if (obj.data) { + ele.data(obj.data); + var _data2 = p.data; + + if (ele.isEdge()) { + // source and target are immutable via data() + var move = false; + var spec = {}; + var src = obj.data.source; + var tgt = obj.data.target; + + if (src != null && src != _data2.source) { + spec.source = '' + src; // id must be string + + move = true; + } + + if (tgt != null && tgt != _data2.target) { + spec.target = '' + tgt; // id must be string + + move = true; + } + + if (move) { + ele = ele.move(spec); + } + } else { + // parent is immutable via data() + var newParentValSpecd = ('parent' in obj.data); + var parent = obj.data.parent; + + if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) { + if (parent === undefined) { + // can't set undefined imperatively, so use null + parent = null; + } + + if (parent != null) { + parent = '' + parent; // id must be string + } + + ele = ele.move({ + parent: parent + }); + } + } + } + + if (obj.position) { + ele.position(obj.position); + } // ignore group -- immutable + + + var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) { + var obj_k = obj[k]; + + if (obj_k != null && obj_k !== p[k]) { + if (obj_k) { + ele[trueFnName](); + } else { + ele[falseFnName](); + } + } + }; + + checkSwitch('removed', 'remove', 'restore'); + checkSwitch('selected', 'select', 'unselect'); + checkSwitch('selectable', 'selectify', 'unselectify'); + checkSwitch('locked', 'lock', 'unlock'); + checkSwitch('grabbable', 'grabify', 'ungrabify'); + checkSwitch('pannable', 'panify', 'unpanify'); + + if (obj.classes != null) { + ele.classes(obj.classes); + } + + cy.endBatch(); + return this; + } else if (obj === undefined) { + // get + var json = { + data: copy(p.data), + position: copy(p.position), + group: p.group, + removed: p.removed, + selected: p.selected, + selectable: p.selectable, + locked: p.locked, + grabbable: p.grabbable, + pannable: p.pannable, + classes: null + }; + json.classes = ''; + var i = 0; + p.classes.forEach(function (cls) { + return json.classes += i++ === 0 ? cls : ' ' + cls; + }); + return json; + } + }; + + elesfn$1.jsons = function () { + var jsons = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + jsons.push(json); + } + + return jsons; + }; + + elesfn$1.clone = function () { + var cy = this.cy(); + var elesArr = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + var clone = new Element(cy, json, false); // NB no restore + + elesArr.push(clone); + } + + return new Collection(cy, elesArr); + }; + + elesfn$1.copy = elesfn$1.clone; + + elesfn$1.restore = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var cy = self.cy(); + var cy_p = cy._private; // create arrays of nodes and edges, since we need to + // restore the nodes first + + var nodes = []; + var edges = []; + var elements; + + for (var _i3 = 0, l = self.length; _i3 < l; _i3++) { + var ele = self[_i3]; + + if (addToPool && !ele.removed()) { + // don't need to handle this ele + continue; + } // keep nodes first in the array and edges after + + + if (ele.isNode()) { + // put to front of array if node + nodes.push(ele); + } else { + // put to end of array if edge + edges.push(ele); + } + } + + elements = nodes.concat(edges); + var i; + + var removeFromElements = function removeFromElements() { + elements.splice(i, 1); + i--; + }; // now, restore each element + + + for (i = 0; i < elements.length; i++) { + var _ele2 = elements[i]; + var _private = _ele2._private; + var _data3 = _private.data; // the traversal cache should start fresh when ele is added + + _ele2.clearTraversalCache(); // set id and validate + + + if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) { + _data3.id = uuid(); + } else if (number$1(_data3.id)) { + _data3.id = '' + _data3.id; // now it's a string + } else if (emptyString(_data3.id) || !string(_data3.id)) { + error('Can not create element with invalid string ID `' + _data3.id + '`'); // can't create element if it has empty string as id or non-string id + + removeFromElements(); + continue; + } else if (cy.hasElementWithId(_data3.id)) { + error('Can not create second element with ID `' + _data3.id + '`'); // can't create element if one already has that id + + removeFromElements(); + continue; + } + + var id = _data3.id; // id is finalised, now let's keep a ref + + if (_ele2.isNode()) { + // extra checks for nodes + var pos = _private.position; // make sure the nodes have a defined position + + if (pos.x == null) { + pos.x = 0; + } + + if (pos.y == null) { + pos.y = 0; + } + } + + if (_ele2.isEdge()) { + // extra checks for edges + var edge = _ele2; + var fields = ['source', 'target']; + var fieldsLength = fields.length; + var badSourceOrTarget = false; + + for (var j = 0; j < fieldsLength; j++) { + var field = fields[j]; + var val = _data3[field]; + + if (number$1(val)) { + val = _data3[field] = '' + _data3[field]; // now string + } + + if (val == null || val === '') { + // can't create if source or target is not defined properly + error('Can not create edge `' + id + '` with unspecified ' + field); + badSourceOrTarget = true; + } else if (!cy.hasElementWithId(val)) { + // can't create edge if one of its nodes doesn't exist + error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`'); + badSourceOrTarget = true; + } + } + + if (badSourceOrTarget) { + removeFromElements(); + continue; + } // can't create this + + + var src = cy.getElementById(_data3.source); + var tgt = cy.getElementById(_data3.target); // only one edge in node if loop + + if (src.same(tgt)) { + src._private.edges.push(edge); + } else { + src._private.edges.push(edge); + + tgt._private.edges.push(edge); + } + + edge._private.source = src; + edge._private.target = tgt; + } // if is edge + // create mock ids / indexes maps for element so it can be used like collections + + + _private.map = new Map$2(); + + _private.map.set(id, { + ele: _ele2, + index: 0 + }); + + _private.removed = false; + + if (addToPool) { + cy.addToPool(_ele2); + } + } // for each element + // do compound node sanity checks + + + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + // each node + var node = nodes[_i4]; + var _data4 = node._private.data; + + if (number$1(_data4.parent)) { + // then automake string + _data4.parent = '' + _data4.parent; + } + + var parentId = _data4.parent; + var specifiedParent = parentId != null; + + if (specifiedParent || node._private.parent) { + var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId); + + if (parent.empty()) { + // non-existant parent; just remove it + _data4.parent = undefined; + } else if (parent[0].removed()) { + warn('Node added with missing parent, reference to parent removed'); + _data4.parent = undefined; + node._private.parent = null; + } else { + var selfAsParent = false; + var ancestor = parent; + + while (!ancestor.empty()) { + if (node.same(ancestor)) { + // mark self as parent and remove from data + selfAsParent = true; + _data4.parent = undefined; // remove parent reference + // exit or we loop forever + + break; + } + + ancestor = ancestor.parent(); + } + + if (!selfAsParent) { + // connect with children + parent[0]._private.children.push(node); + + node._private.parent = parent[0]; // let the core know we have a compound graph + + cy_p.hasCompoundNodes = true; + } + } // else + + } // if specified parent + + } // for each node + + + if (elements.length > 0) { + var restored = elements.length === self.length ? self : new Collection(cy, elements); + + for (var _i5 = 0; _i5 < restored.length; _i5++) { + var _ele3 = restored[_i5]; + + if (_ele3.isNode()) { + continue; + } // adding an edge invalidates the traversal caches for the parallel edges + + + _ele3.parallelEdges().clearTraversalCache(); // adding an edge invalidates the traversal cache for the connected nodes + + + _ele3.source().clearTraversalCache(); + + _ele3.target().clearTraversalCache(); + } + + var toUpdateStyle; + + if (cy_p.hasCompoundNodes) { + toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent()); + } else { + toUpdateStyle = restored; + } + + toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer); + + if (notifyRenderer) { + restored.emitAndNotify('add'); + } else if (addToPool) { + restored.emit('add'); + } + } + + return self; // chainability + }; + + elesfn$1.removed = function () { + var ele = this[0]; + return ele && ele._private.removed; + }; + + elesfn$1.inside = function () { + var ele = this[0]; + return ele && !ele._private.removed; + }; + + elesfn$1.remove = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var elesToRemove = []; + var elesToRemoveIds = {}; + var cy = self._private.cy; // add connected edges + + function addConnectedEdges(node) { + var edges = node._private.edges; + + for (var i = 0; i < edges.length; i++) { + add(edges[i]); + } + } // add descendant nodes + + + function addChildren(node) { + var children = node._private.children; + + for (var i = 0; i < children.length; i++) { + add(children[i]); + } + } + + function add(ele) { + var alreadyAdded = elesToRemoveIds[ele.id()]; + + if (removeFromPool && ele.removed() || alreadyAdded) { + return; + } else { + elesToRemoveIds[ele.id()] = true; + } + + if (ele.isNode()) { + elesToRemove.push(ele); // nodes are removed last + + addConnectedEdges(ele); + addChildren(ele); + } else { + elesToRemove.unshift(ele); // edges are removed first + } + } // make the list of elements to remove + // (may be removing more than specified due to connected edges etc) + + + for (var i = 0, l = self.length; i < l; i++) { + var ele = self[i]; + add(ele); + } + + function removeEdgeRef(node, edge) { + var connectedEdges = node._private.edges; + removeFromArray(connectedEdges, edge); // removing an edges invalidates the traversal cache for its nodes + + node.clearTraversalCache(); + } + + function removeParallelRef(pllEdge) { + // removing an edge invalidates the traversal caches for the parallel edges + pllEdge.clearTraversalCache(); + } + + var alteredParents = []; + alteredParents.ids = {}; + + function removeChildRef(parent, ele) { + ele = ele[0]; + parent = parent[0]; + var children = parent._private.children; + var pid = parent.id(); + removeFromArray(children, ele); // remove parent => child ref + + ele._private.parent = null; // remove child => parent ref + + if (!alteredParents.ids[pid]) { + alteredParents.ids[pid] = true; + alteredParents.push(parent); + } + } + + self.dirtyCompoundBoundsCache(); + + if (removeFromPool) { + cy.removeFromPool(elesToRemove); // remove from core pool + } + + for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) { + var _ele4 = elesToRemove[_i6]; + + if (_ele4.isEdge()) { + // remove references to this edge in its connected nodes + var src = _ele4.source()[0]; + + var tgt = _ele4.target()[0]; + + removeEdgeRef(src, _ele4); + removeEdgeRef(tgt, _ele4); + + var pllEdges = _ele4.parallelEdges(); + + for (var j = 0; j < pllEdges.length; j++) { + var pllEdge = pllEdges[j]; + removeParallelRef(pllEdge); + + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + } + } else { + // remove reference to parent + var parent = _ele4.parent(); + + if (parent.length !== 0) { + removeChildRef(parent, _ele4); + } + } + + if (removeFromPool) { + // mark as removed + _ele4._private.removed = true; + } + } // check to see if we have a compound graph or not + + + var elesStillInside = cy._private.elements; + cy._private.hasCompoundNodes = false; + + for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) { + var _ele5 = elesStillInside[_i7]; + + if (_ele5.isParent()) { + cy._private.hasCompoundNodes = true; + break; + } + } + + var removedElements = new Collection(this.cy(), elesToRemove); + + if (removedElements.size() > 0) { + // must manually notify since trigger won't do this automatically once removed + if (notifyRenderer) { + removedElements.emitAndNotify('remove'); + } else if (removeFromPool) { + removedElements.emit('remove'); + } + } // the parents who were modified by the removal need their style updated + + + for (var _i8 = 0; _i8 < alteredParents.length; _i8++) { + var _ele6 = alteredParents[_i8]; + + if (!removeFromPool || !_ele6.removed()) { + _ele6.updateStyle(); + } + } + + return removedElements; + }; + + elesfn$1.move = function (struct) { + var cy = this._private.cy; + var eles = this; // just clean up refs, caches, etc. in the same way as when removing and then restoring + // (our calls to remove/restore do not remove from the graph or make events) + + var notifyRenderer = false; + var modifyPool = false; + + var toString = function toString(id) { + return id == null ? id : '' + id; + }; // id must be string + + + if (struct.source !== undefined || struct.target !== undefined) { + var srcId = toString(struct.source); + var tgtId = toString(struct.target); + var srcExists = srcId != null && cy.hasElementWithId(srcId); + var tgtExists = tgtId != null && cy.hasElementWithId(tgtId); + + if (srcExists || tgtExists) { + cy.batch(function () { + // avoid duplicate style updates + eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + + eles.emitAndNotify('moveout'); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data5 = ele._private.data; + + if (ele.isEdge()) { + if (srcExists) { + _data5.source = srcId; + } + + if (tgtExists) { + _data5.target = tgtId; + } + } + } + + eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + eles.emitAndNotify('move'); + } + } else if (struct.parent !== undefined) { + // move node to new parent + var parentId = toString(struct.parent); + var parentExists = parentId === null || cy.hasElementWithId(parentId); + + if (parentExists) { + var pidToAssign = parentId === null ? undefined : parentId; + cy.batch(function () { + // avoid duplicate style updates + var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + + updated.emitAndNotify('moveout'); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data6 = ele._private.data; + + if (ele.isNode()) { + _data6.parent = pidToAssign; + } + } + + updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + eles.emitAndNotify('move'); + } + } + + return this; + }; + + [elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) { + extend(elesfn$1, props); + }); + + var corefn$9 = { + add: function add(opts) { + var elements; + var cy = this; // add the elements + + if (elementOrCollection(opts)) { + var eles = opts; + + if (eles._private.cy === cy) { + // same instance => just restore + elements = eles.restore(); + } else { + // otherwise, copy from json + var jsons = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + jsons.push(ele.json()); + } + + elements = new Collection(cy, jsons); + } + } // specify an array of options + else if (array(opts)) { + var _jsons = opts; + elements = new Collection(cy, _jsons); + } // specify via opts.nodes and opts.edges + else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) { + var elesByGroup = opts; + var _jsons2 = []; + var grs = ['nodes', 'edges']; + + for (var _i = 0, il = grs.length; _i < il; _i++) { + var group = grs[_i]; + var elesArray = elesByGroup[group]; + + if (array(elesArray)) { + for (var j = 0, jl = elesArray.length; j < jl; j++) { + var json = extend({ + group: group + }, elesArray[j]); + + _jsons2.push(json); + } + } + } + + elements = new Collection(cy, _jsons2); + } // specify options for one element + else { + var _json = opts; + elements = new Element(cy, _json).collection(); + } + + return elements; + }, + remove: function remove(collection) { + if (elementOrCollection(collection)) ; else if (string(collection)) { + var selector = collection; + collection = this.$(selector); + } + + return collection.remove(); + } + }; + + /* global Float32Array */ + + /*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + function generateCubicBezier(mX1, mY1, mX2, mY2) { + var NEWTON_ITERATIONS = 4, + NEWTON_MIN_SLOPE = 0.001, + SUBDIVISION_PRECISION = 0.0000001, + SUBDIVISION_MAX_ITERATIONS = 10, + kSplineTableSize = 11, + kSampleStepSize = 1.0 / (kSplineTableSize - 1.0), + float32ArraySupported = typeof Float32Array !== 'undefined'; + /* Must contain four arguments. */ + + if (arguments.length !== 4) { + return false; + } + /* Arguments must be numbers. */ + + + for (var i = 0; i < 4; ++i) { + if (typeof arguments[i] !== "number" || isNaN(arguments[i]) || !isFinite(arguments[i])) { + return false; + } + } + /* X values must be in the [0, 1] range. */ + + + mX1 = Math.min(mX1, 1); + mX2 = Math.min(mX2, 1); + mX1 = Math.max(mX1, 0); + mX2 = Math.max(mX2, 0); + var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + + function A(aA1, aA2) { + return 1.0 - 3.0 * aA2 + 3.0 * aA1; + } + + function B(aA1, aA2) { + return 3.0 * aA2 - 6.0 * aA1; + } + + function C(aA1) { + return 3.0 * aA1; + } + + function calcBezier(aT, aA1, aA2) { + return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; + } + + function getSlope(aT, aA1, aA2) { + return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); + } + + function newtonRaphsonIterate(aX, aGuessT) { + for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + + if (currentSlope === 0.0) { + return aGuessT; + } + + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + + return aGuessT; + } + + function calcSampleValues() { + for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) { + mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2); + } + } + + function binarySubdivide(aX, aA, aB) { + var currentX, + currentT, + i = 0; + + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + + return currentT; + } + + function getTForX(aX) { + var intervalStart = 0.0, + currentSample = 1, + lastSample = kSplineTableSize - 1; + + for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + + --currentSample; + var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), + guessForT = intervalStart + dist * kSampleStepSize, + initialSlope = getSlope(guessForT, mX1, mX2); + + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize); + } + } + + var _precomputed = false; + + function precompute() { + _precomputed = true; + + if (mX1 !== mY1 || mX2 !== mY2) { + calcSampleValues(); + } + } + + var f = function f(aX) { + if (!_precomputed) { + precompute(); + } + + if (mX1 === mY1 && mX2 === mY2) { + return aX; + } + + if (aX === 0) { + return 0; + } + + if (aX === 1) { + return 1; + } + + return calcBezier(getTForX(aX), mY1, mY2); + }; + + f.getControlPoints = function () { + return [{ + x: mX1, + y: mY1 + }, { + x: mX2, + y: mY2 + }]; + }; + + var str = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; + + f.toString = function () { + return str; + }; + + return f; + } + + /*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + + /* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass + then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */ + var generateSpringRK4 = function () { + function springAccelerationForState(state) { + return -state.tension * state.x - state.friction * state.v; + } + + function springEvaluateStateWithDerivative(initialState, dt, derivative) { + var state = { + x: initialState.x + derivative.dx * dt, + v: initialState.v + derivative.dv * dt, + tension: initialState.tension, + friction: initialState.friction + }; + return { + dx: state.v, + dv: springAccelerationForState(state) + }; + } + + function springIntegrateState(state, dt) { + var a = { + dx: state.v, + dv: springAccelerationForState(state) + }, + b = springEvaluateStateWithDerivative(state, dt * 0.5, a), + c = springEvaluateStateWithDerivative(state, dt * 0.5, b), + d = springEvaluateStateWithDerivative(state, dt, c), + dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx), + dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv); + state.x = state.x + dxdt * dt; + state.v = state.v + dvdt * dt; + return state; + } + + return function springRK4Factory(tension, friction, duration) { + var initState = { + x: -1, + v: 0, + tension: null, + friction: null + }, + path = [0], + time_lapsed = 0, + tolerance = 1 / 10000, + DT = 16 / 1000, + have_duration, + dt, + last_state; + tension = parseFloat(tension) || 500; + friction = parseFloat(friction) || 20; + duration = duration || null; + initState.tension = tension; + initState.friction = friction; + have_duration = duration !== null; + /* Calculate the actual time it takes for this animation to complete with the provided conditions. */ + + if (have_duration) { + /* Run the simulation without a duration. */ + time_lapsed = springRK4Factory(tension, friction); + /* Compute the adjusted time delta. */ + + dt = time_lapsed / duration * DT; + } else { + dt = DT; + } + + for (;;) { + /* Next/step function .*/ + last_state = springIntegrateState(last_state || initState, dt); + /* Store the position. */ + + path.push(1 + last_state.x); + time_lapsed += 16; + /* If the change threshold is reached, break. */ + + if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) { + break; + } + } + /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the + computed path and returns a snapshot of the position according to a given percentComplete. */ + + + return !have_duration ? time_lapsed : function (percentComplete) { + return path[percentComplete * (path.length - 1) | 0]; + }; + }; + }(); + + var cubicBezier = function cubicBezier(t1, p1, t2, p2) { + var bezier = generateCubicBezier(t1, p1, t2, p2); + return function (start, end, percent) { + return start + (end - start) * bezier(percent); + }; + }; + + var easings = { + 'linear': function linear(start, end, percent) { + return start + (end - start) * percent; + }, + // default easings + 'ease': cubicBezier(0.25, 0.1, 0.25, 1), + 'ease-in': cubicBezier(0.42, 0, 1, 1), + 'ease-out': cubicBezier(0, 0, 0.58, 1), + 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), + // sine + 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715), + 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1), + 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95), + // quad + 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53), + 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94), + 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955), + // cubic + 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19), + 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1), + 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1), + // quart + 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22), + 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1), + 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1), + // quint + 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06), + 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1), + 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1), + // expo + 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035), + 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1), + 'ease-in-out-expo': cubicBezier(1, 0, 0, 1), + // circ + 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335), + 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1), + 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86), + // user param easings... + 'spring': function spring(tension, friction, duration) { + if (duration === 0) { + // can't get a spring w/ duration 0 + return easings.linear; // duration 0 => jump to end so impl doesn't matter + } + + var spring = generateSpringRK4(tension, friction, duration); + return function (start, end, percent) { + return start + (end - start) * spring(percent); + }; + }, + 'cubic-bezier': cubicBezier + }; + + function getEasedValue(type, start, end, percent, easingFn) { + if (percent === 1) { + return end; + } + + if (start === end) { + return end; + } + + var val = easingFn(start, end, percent); + + if (type == null) { + return val; + } + + if (type.roundValue || type.color) { + val = Math.round(val); + } + + if (type.min !== undefined) { + val = Math.max(val, type.min); + } + + if (type.max !== undefined) { + val = Math.min(val, type.max); + } + + return val; + } + + function getValue(prop, spec) { + if (prop.pfValue != null || prop.value != null) { + if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) { + return prop.pfValue; + } else { + return prop.value; + } + } else { + return prop; + } + } + + function ease(startProp, endProp, percent, easingFn, propSpec) { + var type = propSpec != null ? propSpec.type : null; + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + var start = getValue(startProp, propSpec); + var end = getValue(endProp, propSpec); + + if (number$1(start) && number$1(end)) { + return getEasedValue(type, start, end, percent, easingFn); + } else if (array(start) && array(end)) { + var easedArr = []; + + for (var i = 0; i < end.length; i++) { + var si = start[i]; + var ei = end[i]; + + if (si != null && ei != null) { + var val = getEasedValue(type, si, ei, percent, easingFn); + easedArr.push(val); + } else { + easedArr.push(ei); + } + } + + return easedArr; + } + + return undefined; + } + + function step$1(self, ani, now, isCore) { + var isEles = !isCore; + var _p = self._private; + var ani_p = ani._private; + var pEasing = ani_p.easing; + var startTime = ani_p.startTime; + var cy = isCore ? self : self.cy(); + var style = cy.style(); + + if (!ani_p.easingImpl) { + if (pEasing == null) { + // use default + ani_p.easingImpl = easings['linear']; + } else { + // then define w/ name + var easingVals; + + if (string(pEasing)) { + var easingProp = style.parse('transition-timing-function', pEasing); + easingVals = easingProp.value; + } else { + // then assume preparsed array + easingVals = pEasing; + } + + var name, args; + + if (string(easingVals)) { + name = easingVals; + args = []; + } else { + name = easingVals[1]; + args = easingVals.slice(2).map(function (n) { + return +n; + }); + } + + if (args.length > 0) { + // create with args + if (name === 'spring') { + args.push(ani_p.duration); // need duration to generate spring + } + + ani_p.easingImpl = easings[name].apply(null, args); + } else { + // static impl by name + ani_p.easingImpl = easings[name]; + } + } + } + + var easing = ani_p.easingImpl; + var percent; + + if (ani_p.duration === 0) { + percent = 1; + } else { + percent = (now - startTime) / ani_p.duration; + } + + if (ani_p.applying) { + percent = ani_p.progress; + } + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + if (ani_p.delay == null) { + // then update + var startPos = ani_p.startPosition; + var endPos = ani_p.position; + + if (endPos && isEles && !self.locked()) { + var newPos = {}; + + if (valid(startPos.x, endPos.x)) { + newPos.x = ease(startPos.x, endPos.x, percent, easing); + } + + if (valid(startPos.y, endPos.y)) { + newPos.y = ease(startPos.y, endPos.y, percent, easing); + } + + self.position(newPos); + } + + var startPan = ani_p.startPan; + var endPan = ani_p.pan; + var pan = _p.pan; + var animatingPan = endPan != null && isCore; + + if (animatingPan) { + if (valid(startPan.x, endPan.x)) { + pan.x = ease(startPan.x, endPan.x, percent, easing); + } + + if (valid(startPan.y, endPan.y)) { + pan.y = ease(startPan.y, endPan.y, percent, easing); + } + + self.emit('pan'); + } + + var startZoom = ani_p.startZoom; + var endZoom = ani_p.zoom; + var animatingZoom = endZoom != null && isCore; + + if (animatingZoom) { + if (valid(startZoom, endZoom)) { + _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom); + } + + self.emit('zoom'); + } + + if (animatingPan || animatingZoom) { + self.emit('viewport'); + } + + var props = ani_p.style; + + if (props && props.length > 0 && isEles) { + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var _name = prop.name; + var end = prop; + var start = ani_p.startStyle[_name]; + var propSpec = style.properties[start.name]; + var easedVal = ease(start, end, percent, easing, propSpec); + style.overrideBypass(self, _name, easedVal); + } // for props + + + self.emit('style'); + } // if + + } + + ani_p.progress = percent; + return percent; + } + + function valid(start, end) { + if (start == null || end == null) { + return false; + } + + if (number$1(start) && number$1(end)) { + return true; + } else if (start && end) { + return true; + } + + return false; + } + + function startAnimation(self, ani, now, isCore) { + var ani_p = ani._private; + ani_p.started = true; + ani_p.startTime = now - ani_p.progress * ani_p.duration; + } + + function stepAll(now, cy) { + var eles = cy._private.aniEles; + var doneEles = []; + + function stepOne(ele, isCore) { + var _p = ele._private; + var current = _p.animation.current; + var queue = _p.animation.queue; + var ranAnis = false; // if nothing currently animating, get something from the queue + + if (current.length === 0) { + var next = queue.shift(); + + if (next) { + current.push(next); + } + } + + var callbacks = function callbacks(_callbacks) { + for (var j = _callbacks.length - 1; j >= 0; j--) { + var cb = _callbacks[j]; + cb(); + } + + _callbacks.splice(0, _callbacks.length); + }; // step and remove if done + + + for (var i = current.length - 1; i >= 0; i--) { + var ani = current[i]; + var ani_p = ani._private; + + if (ani_p.stopped) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.frames); + continue; + } + + if (!ani_p.playing && !ani_p.applying) { + continue; + } // an apply() while playing shouldn't do anything + + + if (ani_p.playing && ani_p.applying) { + ani_p.applying = false; + } + + if (!ani_p.started) { + startAnimation(ele, ani, now); + } + + step$1(ele, ani, now, isCore); + + if (ani_p.applying) { + ani_p.applying = false; + } + + callbacks(ani_p.frames); + + if (ani_p.step != null) { + ani_p.step(now); + } + + if (ani.completed()) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.completes); + } + + ranAnis = true; + } + + if (!isCore && current.length === 0 && queue.length === 0) { + doneEles.push(ele); + } + + return ranAnis; + } // stepElement + // handle all eles + + + var ranEleAni = false; + + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + var handledThisEle = stepOne(ele); + ranEleAni = ranEleAni || handledThisEle; + } // each element + + + var ranCoreAni = stepOne(cy, true); // notify renderer + + if (ranEleAni || ranCoreAni) { + if (eles.length > 0) { + cy.notify('draw', eles); + } else { + cy.notify('draw'); + } + } // remove elements from list of currently animating if its queues are empty + + + eles.unmerge(doneEles); + cy.emit('step'); + } // stepAll + + var corefn$8 = { + // pull in animation functions + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop(), + addToAnimationPool: function addToAnimationPool(eles) { + var cy = this; + + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + + + cy._private.aniEles.merge(eles); + }, + stopAnimationLoop: function stopAnimationLoop() { + this._private.animationsRunning = false; + }, + startAnimationLoop: function startAnimationLoop() { + var cy = this; + cy._private.animationsRunning = true; + + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + // NB the animation loop will exec in headless environments if style enabled + // and explicit cy.destroy() is necessary to stop the loop + + + function headlessStep() { + if (!cy._private.animationsRunning) { + return; + } + + requestAnimationFrame(function animationStep(now) { + stepAll(now, cy); + headlessStep(); + }); + } + + var renderer = cy.renderer(); + + if (renderer && renderer.beforeRender) { + // let the renderer schedule animations + renderer.beforeRender(function rendererAnimationStep(willDraw, now) { + stepAll(now, cy); + }, renderer.beforeRenderPriorities.animations); + } else { + // manage the animation loop ourselves + headlessStep(); // first call + } + } + }; + + var emitterOptions = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(cy, listener, eventObj) { + var selector = listener.qualifier; + + if (selector != null) { + return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + + return true; + }, + addEventFields: function addEventFields(cy, evt) { + evt.cy = cy; + evt.target = cy; + }, + callbackContext: function callbackContext(cy, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : cy; + } + }; + + var argSelector = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } + }; + + var elesfn = { + createEmitter: function createEmitter() { + var _p = this._private; + + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions, this); + } + + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + this.emitter().on(events, argSelector(selector), callback); + return this; + }, + removeListener: function removeListener(events, selector, callback) { + this.emitter().removeListener(events, argSelector(selector), callback); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + one: function one(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + once: function once(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + emit: function emit(events, extraParams) { + this.emitter().emit(events, extraParams); + return this; + }, + emitAndNotify: function emitAndNotify(event, eles) { + this.emit(event); + this.notify(event, eles); + return this; + } + }; + define.eventAliasesOn(elesfn); + + var corefn$7 = { + png: function png(options) { + var renderer = this._private.renderer; + options = options || {}; + return renderer.png(options); + }, + jpg: function jpg(options) { + var renderer = this._private.renderer; + options = options || {}; + options.bg = options.bg || '#fff'; + return renderer.jpg(options); + } + }; + corefn$7.jpeg = corefn$7.jpg; + + var corefn$6 = { + layout: function layout(options) { + var cy = this; + + if (options == null) { + error('Layout options must be specified to make a layout'); + return; + } + + if (options.name == null) { + error('A `name` must be specified to make a layout'); + return; + } + + var name = options.name; + var Layout = cy.extension('layout', name); + + if (Layout == null) { + error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?'); + return; + } + + var eles; + + if (string(options.eles)) { + eles = cy.$(options.eles); + } else { + eles = options.eles != null ? options.eles : cy.$(); + } + + var layout = new Layout(extend({}, options, { + cy: cy, + eles: eles + })); + return layout; + } + }; + corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout; + + var corefn$5 = { + notify: function notify(eventName, eventEles) { + var _p = this._private; + + if (this.batching()) { + _p.batchNotifications = _p.batchNotifications || {}; + var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection(); + + if (eventEles != null) { + eles.merge(eventEles); + } + + return; // notifications are disabled during batching + } + + if (!_p.notificationsEnabled) { + return; + } // exit on disabled + + + var renderer = this.renderer(); // exit if destroy() called on core or renderer in between frames #1499 #1528 + + if (this.destroyed() || !renderer) { + return; + } + + renderer.notify(eventName, eventEles); + }, + notifications: function notifications(bool) { + var p = this._private; + + if (bool === undefined) { + return p.notificationsEnabled; + } else { + p.notificationsEnabled = bool ? true : false; + } + + return this; + }, + noNotifications: function noNotifications(callback) { + this.notifications(false); + callback(); + this.notifications(true); + }, + batching: function batching() { + return this._private.batchCount > 0; + }, + startBatch: function startBatch() { + var _p = this._private; + + if (_p.batchCount == null) { + _p.batchCount = 0; + } + + if (_p.batchCount === 0) { + _p.batchStyleEles = this.collection(); + _p.batchNotifications = {}; + } + + _p.batchCount++; + return this; + }, + endBatch: function endBatch() { + var _p = this._private; + + if (_p.batchCount === 0) { + return this; + } + + _p.batchCount--; + + if (_p.batchCount === 0) { + // update style for dirty eles + _p.batchStyleEles.updateStyle(); + + var renderer = this.renderer(); // notify the renderer of queued eles and event types + + Object.keys(_p.batchNotifications).forEach(function (eventName) { + var eles = _p.batchNotifications[eventName]; + + if (eles.empty()) { + renderer.notify(eventName); + } else { + renderer.notify(eventName, eles); + } + }); + } + + return this; + }, + batch: function batch(callback) { + this.startBatch(); + callback(); + this.endBatch(); + return this; + }, + // for backwards compatibility + batchData: function batchData(map) { + var cy = this; + return this.batch(function () { + var ids = Object.keys(map); + + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var data = map[id]; + var ele = cy.getElementById(id); + ele.data(data); + } + }); + } + }; + + var rendererDefaults = defaults$g({ + hideEdgesOnViewport: false, + textureOnViewport: false, + motionBlur: false, + motionBlurOpacity: 0.05, + pixelRatio: undefined, + desktopTapThreshold: 4, + touchTapThreshold: 8, + wheelSensitivity: 1, + debug: false, + showFps: false + }); + var corefn$4 = { + renderTo: function renderTo(context, zoom, pan, pxRatio) { + var r = this._private.renderer; + r.renderTo(context, zoom, pan, pxRatio); + return this; + }, + renderer: function renderer() { + return this._private.renderer; + }, + forceRender: function forceRender() { + this.notify('draw'); + return this; + }, + resize: function resize() { + this.invalidateSize(); + this.emitAndNotify('resize'); + return this; + }, + initRenderer: function initRenderer(options) { + var cy = this; + var RendererProto = cy.extension('renderer', options.name); + + if (RendererProto == null) { + error("Can not initialise: No such renderer `".concat(options.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); + return; + } + + if (options.wheelSensitivity !== undefined) { + warn("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine."); + } + + var rOpts = rendererDefaults(options); + rOpts.cy = cy; + cy._private.renderer = new RendererProto(rOpts); + this.notify('init'); + }, + destroyRenderer: function destroyRenderer() { + var cy = this; + cy.notify('destroy'); // destroy the renderer + + var domEle = cy.container(); + + if (domEle) { + domEle._cyreg = null; + + while (domEle.childNodes.length > 0) { + domEle.removeChild(domEle.childNodes[0]); + } + } + + cy._private.renderer = null; // to be extra safe, remove the ref + + cy.mutableElements().forEach(function (ele) { + var _p = ele._private; + _p.rscratch = {}; + _p.rstyle = {}; + _p.animation.current = []; + _p.animation.queue = []; + }); + }, + onRender: function onRender(fn) { + return this.on('render', fn); + }, + offRender: function offRender(fn) { + return this.off('render', fn); + } + }; + corefn$4.invalidateDimensions = corefn$4.resize; + + var corefn$3 = { + // get a collection + // - empty collection on no args + // - collection of elements in the graph on selector arg + // - guarantee a returned collection when elements or collection specified + collection: function collection(eles, opts) { + if (string(eles)) { + return this.$(eles); + } else if (elementOrCollection(eles)) { + return eles.collection(); + } else if (array(eles)) { + if (!opts) { + opts = {}; + } + + return new Collection(this, eles, opts.unique, opts.removed); + } + + return new Collection(this); + }, + nodes: function nodes(selector) { + var nodes = this.$(function (ele) { + return ele.isNode(); + }); + + if (selector) { + return nodes.filter(selector); + } + + return nodes; + }, + edges: function edges(selector) { + var edges = this.$(function (ele) { + return ele.isEdge(); + }); + + if (selector) { + return edges.filter(selector); + } + + return edges; + }, + // search the graph like jQuery + $: function $(selector) { + var eles = this._private.elements; + + if (selector) { + return eles.filter(selector); + } else { + return eles.spawnSelf(); + } + }, + mutableElements: function mutableElements() { + return this._private.elements; + } + }; // aliases + + corefn$3.elements = corefn$3.filter = corefn$3.$; + + var styfn$8 = {}; // keys for style blocks, e.g. ttfftt + + var TRUE = 't'; + var FALSE = 'f'; // (potentially expensive calculation) + // apply the style to the element based on + // - its bypass + // - what selectors match it + + styfn$8.apply = function (eles) { + var self = this; + var _p = self._private; + var cy = _p.cy; + var updatedEles = cy.collection(); + + for (var ie = 0; ie < eles.length; ie++) { + var ele = eles[ie]; + var cxtMeta = self.getContextMeta(ele); + + if (cxtMeta.empty) { + continue; + } + + var cxtStyle = self.getContextStyle(cxtMeta); + var app = self.applyContextStyle(cxtMeta, cxtStyle, ele); + + if (ele._private.appliedInitStyle) { + self.updateTransitions(ele, app.diffProps); + } else { + ele._private.appliedInitStyle = true; + } + + var hintsDiff = self.updateStyleHints(ele); + + if (hintsDiff) { + updatedEles.push(ele); + } + } // for elements + + + return updatedEles; + }; + + styfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) { + var self = this; + var cache = self._private.propDiffs = self._private.propDiffs || {}; + var dualCxtKey = oldCxtKey + '-' + newCxtKey; + var cachedVal = cache[dualCxtKey]; + + if (cachedVal) { + return cachedVal; + } + + var diffProps = []; + var addedProp = {}; + + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var oldHasCxt = oldCxtKey[i] === TRUE; + var newHasCxt = newCxtKey[i] === TRUE; + var cxtHasDiffed = oldHasCxt !== newHasCxt; + var cxtHasMappedProps = cxt.mappedProperties.length > 0; + + if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) { + var props = void 0; + + if (cxtHasDiffed && cxtHasMappedProps) { + props = cxt.properties; // suffices b/c mappedProperties is a subset of properties + } else if (cxtHasDiffed) { + props = cxt.properties; // need to check them all + } else if (cxtHasMappedProps) { + props = cxt.mappedProperties; // only need to check mapped + } + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + var name = prop.name; // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter + // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result + // is cached) + + var laterCxtOverrides = false; + + for (var k = i + 1; k < self.length; k++) { + var laterCxt = self[k]; + var hasLaterCxt = newCxtKey[k] === TRUE; + + if (!hasLaterCxt) { + continue; + } // can't override unless the context is active + + + laterCxtOverrides = laterCxt.properties[prop.name] != null; + + if (laterCxtOverrides) { + break; + } // exit early as long as one later context overrides + + } + + if (!addedProp[name] && !laterCxtOverrides) { + addedProp[name] = true; + diffProps.push(name); + } + } // for props + + } // if + + } // for contexts + + + cache[dualCxtKey] = diffProps; + return diffProps; + }; + + styfn$8.getContextMeta = function (ele) { + var self = this; + var cxtKey = ''; + var diffProps; + var prevKey = ele._private.styleCxtKey || ''; // get the cxt key + + for (var i = 0; i < self.length; i++) { + var context = self[i]; + var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core' + + if (contextSelectorMatches) { + cxtKey += TRUE; + } else { + cxtKey += FALSE; + } + } // for context + + + diffProps = self.getPropertiesDiff(prevKey, cxtKey); + ele._private.styleCxtKey = cxtKey; + return { + key: cxtKey, + diffPropNames: diffProps, + empty: diffProps.length === 0 + }; + }; // gets a computed ele style object based on matched contexts + + + styfn$8.getContextStyle = function (cxtMeta) { + var cxtKey = cxtMeta.key; + var self = this; + var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; // if already computed style, returned cached copy + + if (cxtStyles[cxtKey]) { + return cxtStyles[cxtKey]; + } + + var style = { + _private: { + key: cxtKey + } + }; + + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var hasCxt = cxtKey[i] === TRUE; + + if (!hasCxt) { + continue; + } + + for (var j = 0; j < cxt.properties.length; j++) { + var prop = cxt.properties[j]; + style[prop.name] = prop; + } + } + + cxtStyles[cxtKey] = style; + return style; + }; + + styfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) { + var self = this; + var diffProps = cxtMeta.diffPropNames; + var retDiffProps = {}; + var types = self.types; + + for (var i = 0; i < diffProps.length; i++) { + var diffPropName = diffProps[i]; + var cxtProp = cxtStyle[diffPropName]; + var eleProp = ele.pstyle(diffPropName); + + if (!cxtProp) { + // no context prop means delete + if (!eleProp) { + continue; // no existing prop means nothing needs to be removed + // nb affects initial application on mapped values like control-point-distances + } else if (eleProp.bypass) { + cxtProp = { + name: diffPropName, + deleteBypassed: true + }; + } else { + cxtProp = { + name: diffPropName, + "delete": true + }; + } + } // save cycles when the context prop doesn't need to be applied + + + if (eleProp === cxtProp) { + continue; + } // save cycles when a mapped context prop doesn't need to be applied + + + if (cxtProp.mapped === types.fn // context prop is function mapper + && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one) + && eleProp.mapping != null // ele prop is a concrete value from from a mapper + && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper + ) { + // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet) + var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy + + var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss + + if (fnValue === mapping.prevFnValue) { + continue; + } + } + + var retDiffProp = retDiffProps[diffPropName] = { + prev: eleProp + }; + self.applyParsedProperty(ele, cxtProp); + retDiffProp.next = ele.pstyle(diffPropName); + + if (retDiffProp.next && retDiffProp.next.bypass) { + retDiffProp.next = retDiffProp.next.bypassed; + } + } + + return { + diffProps: retDiffProps + }; + }; + + styfn$8.updateStyleHints = function (ele) { + var _p = ele._private; + var self = this; + var propNames = self.propertyGroupNames; + var propGrKeys = self.propertyGroupKeys; + + var propHash = function propHash(ele, propNames, seedKey) { + return self.getPropertiesHash(ele, propNames, seedKey); + }; + + var oldStyleKey = _p.styleKey; + + if (ele.removed()) { + return false; + } + + var isNode = _p.group === 'nodes'; // get the style key hashes per prop group + // but lazily -- only use non-default prop values to reduce the number of hashes + // + + var overriddenStyles = ele._private.style; + propNames = Object.keys(overriddenStyles); + + for (var i = 0; i < propGrKeys.length; i++) { + var grKey = propGrKeys[i]; + _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + } + + var updateGrKey1 = function updateGrKey1(val, grKey) { + return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]); + }; + + var updateGrKey2 = function updateGrKey2(val, grKey) { + return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]); + }; + + var updateGrKey = function updateGrKey(val, grKey) { + updateGrKey1(val, grKey); + updateGrKey2(val, grKey); + }; + + var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) { + for (var j = 0; j < strVal.length; j++) { + var ch = strVal.charCodeAt(j); + updateGrKey1(ch, grKey); + updateGrKey2(ch, grKey); + } + }; // - hashing works on 32 bit ints b/c we use bitwise ops + // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function) + // - raise up small numbers so more significant digits are seen by hashing + // - make small numbers larger than a normal value to avoid collisions + // - works in practice and it's relatively cheap + + + var N = 2000000000; + + var cleanNum = function cleanNum(val) { + return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val; + }; + + for (var _i = 0; _i < propNames.length; _i++) { + var name = propNames[_i]; + var parsedProp = overriddenStyles[name]; + + if (parsedProp == null) { + continue; + } + + var propInfo = this.properties[name]; + var type = propInfo.type; + var _grKey = propInfo.groupKey; + var normalizedNumberVal = void 0; + + if (propInfo.hashOverride != null) { + normalizedNumberVal = propInfo.hashOverride(ele, parsedProp); + } else if (parsedProp.pfValue != null) { + normalizedNumberVal = parsedProp.pfValue; + } // might not be a number if it allows enums + + + var numberVal = propInfo.enums == null ? parsedProp.value : null; + var haveNormNum = normalizedNumberVal != null; + var haveUnitedNum = numberVal != null; + var haveNum = haveNormNum || haveUnitedNum; + var units = parsedProp.units; // numbers are cheaper to hash than strings + // 1 hash op vs n hash ops (for length n string) + + if (type.number && haveNum && !type.multiple) { + var v = haveNormNum ? normalizedNumberVal : numberVal; + updateGrKey(cleanNum(v), _grKey); + + if (!haveNormNum && units != null) { + updateGrKeyWStr(units, _grKey); + } + } else { + updateGrKeyWStr(parsedProp.strValue, _grKey); + } + } // overall style key + // + + + var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + + for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) { + var _grKey2 = propGrKeys[_i2]; + var grHash = _p.styleKeys[_grKey2]; + hash[0] = hashInt(grHash[0], hash[0]); + hash[1] = hashIntAlt(grHash[1], hash[1]); + } + + _p.styleKey = combineHashes(hash[0], hash[1]); // label dims + // + + var sk = _p.styleKeys; + _p.labelDimsKey = combineHashesArray(sk.labelDimensions); + var labelKeys = propHash(ele, ['label'], sk.labelDimensions); + _p.labelKey = combineHashesArray(labelKeys); + _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys)); + + if (!isNode) { + var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions); + _p.sourceLabelKey = combineHashesArray(sourceLabelKeys); + _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys)); + var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions); + _p.targetLabelKey = combineHashesArray(targetLabelKeys); + _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); + } // node + // + + + if (isNode) { + var _p$styleKeys = _p.styleKeys, + nodeBody = _p$styleKeys.nodeBody, + nodeBorder = _p$styleKeys.nodeBorder, + backgroundImage = _p$styleKeys.backgroundImage, + compound = _p$styleKeys.compound, + pie = _p$styleKeys.pie; + var nodeKeys = [nodeBody, nodeBorder, backgroundImage, compound, pie].filter(function (k) { + return k != null; + }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]); + _p.nodeKey = combineHashesArray(nodeKeys); + _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT; + } + + return oldStyleKey !== _p.styleKey; + }; + + styfn$8.clearStyleHints = function (ele) { + var _p = ele._private; + _p.styleCxtKey = ''; + _p.styleKeys = {}; + _p.styleKey = null; + _p.labelKey = null; + _p.labelStyleKey = null; + _p.sourceLabelKey = null; + _p.sourceLabelStyleKey = null; + _p.targetLabelKey = null; + _p.targetLabelStyleKey = null; + _p.nodeKey = null; + _p.hasPie = null; + }; // apply a property to the style (for internal use) + // returns whether application was successful + // + // now, this function flattens the property, and here's how: + // + // for parsedProp:{ bypass: true, deleteBypass: true } + // no property is generated, instead the bypass property in the + // element's style is replaced by what's pointed to by the `bypassed` + // field in the bypass property (i.e. restoring the property the + // bypass was overriding) + // + // for parsedProp:{ mapped: truthy } + // the generated flattenedProp:{ mapping: prop } + // + // for parsedProp:{ bypass: true } + // the generated flattenedProp:{ bypassed: parsedProp } + + + styfn$8.applyParsedProperty = function (ele, parsedProp) { + var self = this; + var prop = parsedProp; + var style = ele._private.style; + var flatProp; + var types = self.types; + var type = self.properties[prop.name].type; + var propIsBypass = prop.bypass; + var origProp = style[prop.name]; + var origPropIsBypass = origProp && origProp.bypass; + var _p = ele._private; + var flatPropMapping = 'mapping'; + + var getVal = function getVal(p) { + if (p == null) { + return null; + } else if (p.pfValue != null) { + return p.pfValue; + } else { + return p.value; + } + }; + + var checkTriggers = function checkTriggers() { + var fromVal = getVal(origProp); + var toVal = getVal(prop); + self.checkTriggers(ele, prop.name, fromVal, toVal); + }; + + if (prop && prop.name.substr(0, 3) === 'pie') { + warn('The pie style properties are deprecated. Create charts using background images instead.'); + } // edge sanity checks to prevent the client from making serious mistakes + + + if (parsedProp.name === 'curve-style' && ele.isEdge() && ( // loops must be bundled beziers + parsedProp.value !== 'bezier' && ele.isLoop() || // edges connected to compound nodes can not be haystacks + parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) { + prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass); + } + + if (prop["delete"]) { + // delete the property and use the default value on falsey value + style[prop.name] = undefined; + checkTriggers(); + return true; + } + + if (prop.deleteBypassed) { + // delete the property that the + if (!origProp) { + checkTriggers(); + return true; // can't delete if no prop + } else if (origProp.bypass) { + // delete bypassed + origProp.bypassed = undefined; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypassed + } + } // check if we need to delete the current bypass + + + if (prop.deleteBypass) { + // then this property is just here to indicate we need to delete + if (!origProp) { + checkTriggers(); + return true; // property is already not defined + } else if (origProp.bypass) { + // then replace the bypass property with the original + // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary) + style[prop.name] = origProp.bypassed; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypass + } + } + + var printMappingErr = function printMappingErr() { + warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined'); + }; // put the property in the style objects + + + switch (prop.mapped) { + // flatten the property if mapped + case types.mapData: + { + // flatten the field (e.g. data.foo.bar) + var fields = prop.field.split('.'); + var fieldVal = _p.data; + + for (var i = 0; i < fields.length && fieldVal; i++) { + var field = fields[i]; + fieldVal = fieldVal[field]; + } + + if (fieldVal == null) { + printMappingErr(); + return false; + } + + var percent; + + if (!number$1(fieldVal)) { + // then don't apply and fall back on the existing style + warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)'); + return false; + } else { + var fieldWidth = prop.fieldMax - prop.fieldMin; + + if (fieldWidth === 0) { + // safety check -- not strictly necessary as no props of zero range should be passed here + percent = 0; + } else { + percent = (fieldVal - prop.fieldMin) / fieldWidth; + } + } // make sure to bound percent value + + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + if (type.color) { + var r1 = prop.valueMin[0]; + var r2 = prop.valueMax[0]; + var g1 = prop.valueMin[1]; + var g2 = prop.valueMax[1]; + var b1 = prop.valueMin[2]; + var b2 = prop.valueMax[2]; + var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3]; + var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3]; + var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)]; + flatProp = { + // colours are simple, so just create the flat property instead of expensive string parsing + bypass: prop.bypass, + // we're a bypass if the mapping property is a bypass + name: prop.name, + value: clr, + strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')' + }; + } else if (type.number) { + var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent; + flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping); + } else { + return false; // can only map to colours and numbers + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply the property and fall back on the existing style + printMappingErr(); + return false; + } + + flatProp.mapping = prop; // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + // direct mapping + + case types.data: + { + // flatten the field (e.g. data.foo.bar) + var _fields = prop.field.split('.'); + + var _fieldVal = _p.data; + + for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) { + var _field = _fields[_i3]; + _fieldVal = _fieldVal[_field]; + } + + if (_fieldVal != null) { + flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping); + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply and fall back on the existing style + printMappingErr(); + return false; + } + + flatProp.mapping = prop; // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + case types.fn: + { + var fn = prop.value; + var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function + + prop.prevFnValue = fnRetVal; + + if (fnRetVal == null) { + warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)'); + return false; + } + + flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping); + + if (!flatProp) { + warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)'); + return false; + } + + flatProp.mapping = copy(prop); // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + case undefined: + break; + // just set the property + + default: + return false; + // not a valid mapping + } // if the property is a bypass property, then link the resultant property to the original one + + + if (propIsBypass) { + if (origPropIsBypass) { + // then this bypass overrides the existing one + prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass + } else { + // then link the orig prop to the new bypass + prop.bypassed = origProp; + } + + style[prop.name] = prop; // and set + } else { + // prop is not bypass + if (origPropIsBypass) { + // then keep the orig prop (since it's a bypass) and link to the new prop + origProp.bypassed = prop; + } else { + // then just replace the old prop with the new one + style[prop.name] = prop; + } + } + + checkTriggers(); + return true; + }; + + styfn$8.cleanElements = function (eles, keepBypasses) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + this.clearStyleHints(ele); + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); + + if (!keepBypasses) { + ele._private.style = {}; + } else { + var style = ele._private.style; + var propNames = Object.keys(style); + + for (var j = 0; j < propNames.length; j++) { + var propName = propNames[j]; + var eleProp = style[propName]; + + if (eleProp != null) { + if (eleProp.bypass) { + eleProp.bypassed = null; + } else { + style[propName] = null; + } + } + } + } + } + }; // updates the visual style for all elements (useful for manual style modification after init) + + + styfn$8.update = function () { + var cy = this._private.cy; + var eles = cy.mutableElements(); + eles.updateStyle(); + }; // diffProps : { name => { prev, next } } + + + styfn$8.updateTransitions = function (ele, diffProps) { + var self = this; + var _p = ele._private; + var props = ele.pstyle('transition-property').value; + var duration = ele.pstyle('transition-duration').pfValue; + var delay = ele.pstyle('transition-delay').pfValue; + + if (props.length > 0 && duration > 0) { + var style = {}; // build up the style to animate towards + + var anyPrev = false; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var styProp = ele.pstyle(prop); + var diffProp = diffProps[prop]; + + if (!diffProp) { + continue; + } + + var prevProp = diffProp.prev; + var fromProp = prevProp; + var toProp = diffProp.next != null ? diffProp.next : styProp; + var diff = false; + var initVal = void 0; + var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity) + + if (!fromProp) { + continue; + } // consider px values + + + if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) { + diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy + + initVal = fromProp.pfValue + initDt * diff; // consider numerical values + } else if (number$1(fromProp.value) && number$1(toProp.value)) { + diff = toProp.value - fromProp.value; // nonzero is truthy + + initVal = fromProp.value + initDt * diff; // consider colour values + } else if (array(fromProp.value) && array(toProp.value)) { + diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2]; + initVal = fromProp.strValue; + } // the previous value is good for an animation only if it's different + + + if (diff) { + style[prop] = toProp.strValue; // to val + + this.applyBypass(ele, prop, initVal); // from val + + anyPrev = true; + } + } // end if props allow ani + // can't transition if there's nothing previous to transition from + + + if (!anyPrev) { + return; + } + + _p.transitioning = true; + new Promise$1(function (resolve) { + if (delay > 0) { + ele.delayAnimation(delay).play().promise().then(resolve); + } else { + resolve(); + } + }).then(function () { + return ele.animation({ + style: style, + duration: duration, + easing: ele.pstyle('transition-timing-function').value, + queue: false + }).play().promise(); + }).then(function () { + // if( !isBypass ){ + self.removeBypasses(ele, props); + ele.emitAndNotify('style'); // } + + _p.transitioning = false; + }); + } else if (_p.transitioning) { + this.removeBypasses(ele, props); + ele.emitAndNotify('style'); + _p.transitioning = false; + } + }; + + styfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) { + var prop = this.properties[name]; + var triggerCheck = getTrigger(prop); + + if (triggerCheck != null && triggerCheck(fromValue, toValue)) { + onTrigger(prop); + } + }; + + styfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) { + var _this = this; + + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersZOrder; + }, function () { + _this._private.cy.notify('zorder', ele); + }); + }; + + styfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) { + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersBounds; + }, function (prop) { + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); // if the prop change makes the bb of pll bezier edges invalid, + // then dirty the pll edge bb cache as well + + if ( // only for beziers -- so performance of other edges isn't affected + prop.triggersBoundsOfParallelBeziers && (name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier') || name === 'display' && (fromValue === 'none' || toValue === 'none'))) { + ele.parallelEdges().forEach(function (pllEdge) { + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + }); + } + }); + }; + + styfn$8.checkTriggers = function (ele, name, fromValue, toValue) { + ele.dirtyStyleCache(); + this.checkZOrderTrigger(ele, name, fromValue, toValue); + this.checkBoundsTrigger(ele, name, fromValue, toValue); + }; + + var styfn$7 = {}; // bypasses are applied to an existing style on an element, and just tacked on temporarily + // returns true iff application was successful for at least 1 specified property + + styfn$7.applyBypass = function (eles, name, value, updateTransitions) { + var self = this; + var props = []; + var isBypass = true; // put all the properties (can specify one or many) in an array after parsing them + + if (name === '*' || name === '**') { + // apply to all property names + if (value !== undefined) { + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var _name = prop.name; + var parsedProp = this.parse(_name, value, true); + + if (parsedProp) { + props.push(parsedProp); + } + } + } + } else if (string(name)) { + // then parse the single property + var _parsedProp = this.parse(name, value, true); + + if (_parsedProp) { + props.push(_parsedProp); + } + } else if (plainObject(name)) { + // then parse each property + var specifiedProps = name; + updateTransitions = value; + var names = Object.keys(specifiedProps); + + for (var _i = 0; _i < names.length; _i++) { + var _name2 = names[_i]; + var _value = specifiedProps[_name2]; + + if (_value === undefined) { + // try camel case name too + _value = specifiedProps[dash2camel(_name2)]; + } + + if (_value !== undefined) { + var _parsedProp2 = this.parse(_name2, _value, true); + + if (_parsedProp2) { + props.push(_parsedProp2); + } + } + } + } else { + // can't do anything without well defined properties + return false; + } // we've failed if there are no valid properties + + + if (props.length === 0) { + return false; + } // now, apply the bypass properties on the elements + + + var ret = false; // return true if at least one succesful bypass applied + + for (var _i2 = 0; _i2 < eles.length; _i2++) { + // for each ele + var ele = eles[_i2]; + var diffProps = {}; + var diffProp = void 0; + + for (var j = 0; j < props.length; j++) { + // for each prop + var _prop = props[j]; + + if (updateTransitions) { + var prevProp = ele.pstyle(_prop.name); + diffProp = diffProps[_prop.name] = { + prev: prevProp + }; + } + + ret = this.applyParsedProperty(ele, copy(_prop)) || ret; + + if (updateTransitions) { + diffProp.next = ele.pstyle(_prop.name); + } + } // for props + + + if (ret) { + this.updateStyleHints(ele); + } + + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + + return ret; + }; // only useful in specific cases like animation + + + styfn$7.overrideBypass = function (eles, name, value) { + name = camel2dash(name); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var prop = ele._private.style[name]; + var type = this.properties[name].type; + var isColor = type.color; + var isMulti = type.mutiple; + var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value; + + if (!prop || !prop.bypass) { + // need a bypass if one doesn't exist + this.applyBypass(ele, name, value); + } else { + prop.value = value; + + if (prop.pfValue != null) { + prop.pfValue = value; + } + + if (isColor) { + prop.strValue = 'rgb(' + value.join(',') + ')'; + } else if (isMulti) { + prop.strValue = value.join(' '); + } else { + prop.strValue = '' + value; + } + + this.updateStyleHints(ele); + } + + this.checkTriggers(ele, name, oldValue, value); + } + }; + + styfn$7.removeAllBypasses = function (eles, updateTransitions) { + return this.removeBypasses(eles, this.propertyNames, updateTransitions); + }; + + styfn$7.removeBypasses = function (eles, props, updateTransitions) { + var isBypass = true; + + for (var j = 0; j < eles.length; j++) { + var ele = eles[j]; + var diffProps = {}; + + for (var i = 0; i < props.length; i++) { + var name = props[i]; + var prop = this.properties[name]; + var prevProp = ele.pstyle(prop.name); + + if (!prevProp || !prevProp.bypass) { + // if a bypass doesn't exist for the prop, nothing needs to be removed + continue; + } + + var value = ''; // empty => remove bypass + + var parsedProp = this.parse(name, value, true); + var diffProp = diffProps[prop.name] = { + prev: prevProp + }; + this.applyParsedProperty(ele, parsedProp); + diffProp.next = ele.pstyle(prop.name); + } // for props + + + this.updateStyleHints(ele); + + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + }; + + var styfn$6 = {}; // gets what an em size corresponds to in pixels relative to a dom element + + styfn$6.getEmSizeInPixels = function () { + var px = this.containerCss('font-size'); + + if (px != null) { + return parseFloat(px); + } else { + return 1; // for headless + } + }; // gets css property from the core container + + + styfn$6.containerCss = function (propName) { + var cy = this._private.cy; + var domElement = cy.container(); + + if (window$1 && domElement && window$1.getComputedStyle) { + return window$1.getComputedStyle(domElement).getPropertyValue(propName); + } + }; + + var styfn$5 = {}; // gets the rendered style for an element + + styfn$5.getRenderedStyle = function (ele, prop) { + if (prop) { + return this.getStylePropertyValue(ele, prop, true); + } else { + return this.getRawStyle(ele, true); + } + }; // gets the raw style for an element + + + styfn$5.getRawStyle = function (ele, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var rstyle = {}; + + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal); + + if (val != null) { + rstyle[prop.name] = val; + rstyle[dash2camel(prop.name)] = val; + } + } + + return rstyle; + } + }; + + styfn$5.getIndexedStyle = function (ele, property, subproperty, index) { + var pstyle = ele.pstyle(property)[subproperty][index]; + return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0]; + }; + + styfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var prop = self.properties[propName]; + + if (prop.alias) { + prop = prop.pointsTo; + } + + var type = prop.type; + var styleProp = ele.pstyle(prop.name); + + if (styleProp) { + var value = styleProp.value, + units = styleProp.units, + strValue = styleProp.strValue; + + if (isRenderedVal && type.number && value != null && number$1(value)) { + var zoom = ele.cy().zoom(); + + var getRenderedValue = function getRenderedValue(val) { + return val * zoom; + }; + + var getValueStringWithUnits = function getValueStringWithUnits(val, units) { + return getRenderedValue(val) + units; + }; + + var isArrayValue = array(value); + var haveUnits = isArrayValue ? units.every(function (u) { + return u != null; + }) : units != null; + + if (haveUnits) { + if (isArrayValue) { + return value.map(function (v, i) { + return getValueStringWithUnits(v, units[i]); + }).join(' '); + } else { + return getValueStringWithUnits(value, units); + } + } else { + if (isArrayValue) { + return value.map(function (v) { + return string(v) ? v : '' + getRenderedValue(v); + }).join(' '); + } else { + return '' + getRenderedValue(value); + } + } + } else if (strValue != null) { + return strValue; + } + } + + return null; + } + }; + + styfn$5.getAnimationStartStyle = function (ele, aniProps) { + var rstyle = {}; + + for (var i = 0; i < aniProps.length; i++) { + var aniProp = aniProps[i]; + var name = aniProp.name; + var styleProp = ele.pstyle(name); + + if (styleProp !== undefined) { + // then make a prop of it + if (plainObject(styleProp)) { + styleProp = this.parse(name, styleProp.strValue); + } else { + styleProp = this.parse(name, styleProp); + } + } + + if (styleProp) { + rstyle[name] = styleProp; + } + } + + return rstyle; + }; + + styfn$5.getPropsList = function (propsObj) { + var self = this; + var rstyle = []; + var style = propsObj; + var props = self.properties; + + if (style) { + var names = Object.keys(style); + + for (var i = 0; i < names.length; i++) { + var name = names[i]; + var val = style[name]; + var prop = props[name] || props[camel2dash(name)]; + var styleProp = this.parse(prop.name, val); + + if (styleProp) { + rstyle.push(styleProp); + } + } + } + + return rstyle; + }; + + styfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) { + var hash = seed.slice(); + var name, val, strVal, chVal; + var i, j; + + for (i = 0; i < propNames.length; i++) { + name = propNames[i]; + val = ele.pstyle(name, false); + + if (val == null) { + continue; + } else if (val.pfValue != null) { + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } else { + strVal = val.strValue; + + for (j = 0; j < strVal.length; j++) { + chVal = strVal.charCodeAt(j); + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } + } + } + + return hash; + }; + + styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash; + + var styfn$4 = {}; + + styfn$4.appendFromJson = function (json) { + var style = this; + + for (var i = 0; i < json.length; i++) { + var context = json[i]; + var selector = context.selector; + var props = context.style || context.css; + var names = Object.keys(props); + style.selector(selector); // apply selector + + for (var j = 0; j < names.length; j++) { + var name = names[j]; + var value = props[name]; + style.css(name, value); // apply property + } + } + + return style; + }; // accessible cy.style() function + + + styfn$4.fromJson = function (json) { + var style = this; + style.resetToDefault(); + style.appendFromJson(json); + return style; + }; // get json from cy.style() api + + + styfn$4.json = function () { + var json = []; + + for (var i = this.defaultLength; i < this.length; i++) { + var cxt = this[i]; + var selector = cxt.selector; + var props = cxt.properties; + var css = {}; + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + css[prop.name] = prop.strValue; + } + + json.push({ + selector: !selector ? 'core' : selector.toString(), + style: css + }); + } + + return json; + }; + + var styfn$3 = {}; + + styfn$3.appendFromString = function (string) { + var self = this; + var style = this; + var remaining = '' + string; + var selAndBlockStr; + var blockRem; + var propAndValStr; // remove comments from the style string + + remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, ''); + + function removeSelAndBlockFromRemaining() { + // remove the parsed selector and block from the remaining text to parse + if (remaining.length > selAndBlockStr.length) { + remaining = remaining.substr(selAndBlockStr.length); + } else { + remaining = ''; + } + } + + function removePropAndValFromRem() { + // remove the parsed property and value from the remaining block text to parse + if (blockRem.length > propAndValStr.length) { + blockRem = blockRem.substr(propAndValStr.length); + } else { + blockRem = ''; + } + } + + for (;;) { + var nothingLeftToParse = remaining.match(/^\s*$/); + + if (nothingLeftToParse) { + break; + } + + var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); + + if (!selAndBlock) { + warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining); + break; + } + + selAndBlockStr = selAndBlock[0]; // parse the selector + + var selectorStr = selAndBlock[1]; + + if (selectorStr !== 'core') { + var selector = new Selector(selectorStr); + + if (selector.invalid) { + warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr); // skip this selector and block + + removeSelAndBlockFromRemaining(); + continue; + } + } // parse the block of properties and values + + + var blockStr = selAndBlock[2]; + var invalidBlock = false; + blockRem = blockStr; + var props = []; + + for (;;) { + var _nothingLeftToParse = blockRem.match(/^\s*$/); + + if (_nothingLeftToParse) { + break; + } + + var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/); + + if (!propAndVal) { + warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr); + invalidBlock = true; + break; + } + + propAndValStr = propAndVal[0]; + var propStr = propAndVal[1]; + var valStr = propAndVal[2]; + var prop = self.properties[propStr]; + + if (!prop) { + warn('Skipping property: Invalid property name in: ' + propAndValStr); // skip this property in the block + + removePropAndValFromRem(); + continue; + } + + var parsedProp = style.parse(propStr, valStr); + + if (!parsedProp) { + warn('Skipping property: Invalid property definition in: ' + propAndValStr); // skip this property in the block + + removePropAndValFromRem(); + continue; + } + + props.push({ + name: propStr, + val: valStr + }); + removePropAndValFromRem(); + } + + if (invalidBlock) { + removeSelAndBlockFromRemaining(); + break; + } // put the parsed block in the style + + + style.selector(selectorStr); + + for (var i = 0; i < props.length; i++) { + var _prop = props[i]; + style.css(_prop.name, _prop.val); + } + + removeSelAndBlockFromRemaining(); + } + + return style; + }; + + styfn$3.fromString = function (string) { + var style = this; + style.resetToDefault(); + style.appendFromString(string); + return style; + }; + + var styfn$2 = {}; + + (function () { + var number$1 = number; + var rgba = rgbaNoBackRefs; + var hsla = hslaNoBackRefs; + var hex3$1 = hex3; + var hex6$1 = hex6; + + var data = function data(prefix) { + return '^' + prefix + '\\s*\\(\\s*([\\w\\.]+)\\s*\\)$'; + }; + + var mapData = function mapData(prefix) { + var mapArg = number$1 + '|\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1; + return '^' + prefix + '\\s*\\(([\\w\\.]+)\\s*\\,\\s*(' + number$1 + ')\\s*\\,\\s*(' + number$1 + ')\\s*,\\s*(' + mapArg + ')\\s*\\,\\s*(' + mapArg + ')\\)$'; + }; + + var urlRegexes = ['^url\\s*\\(\\s*[\'"]?(.+?)[\'"]?\\s*\\)$', '^(none)$', '^(.+)$']; // each visual style property has a type and needs to be validated according to it + + styfn$2.types = { + time: { + number: true, + min: 0, + units: 's|ms', + implicitUnits: 'ms' + }, + percent: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%' + }, + percentages: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%', + multiple: true + }, + zeroOneNumber: { + number: true, + min: 0, + max: 1, + unitless: true + }, + zeroOneNumbers: { + number: true, + min: 0, + max: 1, + unitless: true, + multiple: true + }, + nOneOneNumber: { + number: true, + min: -1, + max: 1, + unitless: true + }, + nonNegativeInt: { + number: true, + min: 0, + integer: true, + unitless: true + }, + position: { + enums: ['parent', 'origin'] + }, + nodeSize: { + number: true, + min: 0, + enums: ['label'] + }, + number: { + number: true, + unitless: true + }, + numbers: { + number: true, + unitless: true, + multiple: true + }, + positiveNumber: { + number: true, + unitless: true, + min: 0, + strictMin: true + }, + size: { + number: true, + min: 0 + }, + bidirectionalSize: { + number: true + }, + // allows negative + bidirectionalSizeMaybePercent: { + number: true, + allowPercent: true + }, + // allows negative + bidirectionalSizes: { + number: true, + multiple: true + }, + // allows negative + sizeMaybePercent: { + number: true, + min: 0, + allowPercent: true + }, + axisDirection: { + enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto'] + }, + paddingRelativeTo: { + enums: ['width', 'height', 'average', 'min', 'max'] + }, + bgWH: { + number: true, + min: 0, + allowPercent: true, + enums: ['auto'], + multiple: true + }, + bgPos: { + number: true, + allowPercent: true, + multiple: true + }, + bgRelativeTo: { + enums: ['inner', 'include-padding'], + multiple: true + }, + bgRepeat: { + enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'], + multiple: true + }, + bgFit: { + enums: ['none', 'contain', 'cover'], + multiple: true + }, + bgCrossOrigin: { + enums: ['anonymous', 'use-credentials', 'null'], + multiple: true + }, + bgClip: { + enums: ['none', 'node'], + multiple: true + }, + bgContainment: { + enums: ['inside', 'over'], + multiple: true + }, + color: { + color: true + }, + colors: { + color: true, + multiple: true + }, + fill: { + enums: ['solid', 'linear-gradient', 'radial-gradient'] + }, + bool: { + enums: ['yes', 'no'] + }, + bools: { + enums: ['yes', 'no'], + multiple: true + }, + lineStyle: { + enums: ['solid', 'dotted', 'dashed'] + }, + lineCap: { + enums: ['butt', 'round', 'square'] + }, + borderStyle: { + enums: ['solid', 'dotted', 'dashed', 'double'] + }, + curveStyle: { + enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi'] + }, + fontFamily: { + regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' + }, + fontStyle: { + enums: ['italic', 'normal', 'oblique'] + }, + fontWeight: { + enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900] + }, + textDecoration: { + enums: ['none', 'underline', 'overline', 'line-through'] + }, + textTransform: { + enums: ['none', 'uppercase', 'lowercase'] + }, + textWrap: { + enums: ['none', 'wrap', 'ellipsis'] + }, + textOverflowWrap: { + enums: ['whitespace', 'anywhere'] + }, + textBackgroundShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle'] + }, + nodeShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'polygon'] + }, + overlayShape: { + enums: ['roundrectangle', 'round-rectangle', 'ellipse'] + }, + compoundIncludeLabels: { + enums: ['include', 'exclude'] + }, + arrowShape: { + enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none'] + }, + arrowFill: { + enums: ['filled', 'hollow'] + }, + display: { + enums: ['element', 'none'] + }, + visibility: { + enums: ['hidden', 'visible'] + }, + zCompoundDepth: { + enums: ['bottom', 'orphan', 'auto', 'top'] + }, + zIndexCompare: { + enums: ['auto', 'manual'] + }, + valign: { + enums: ['top', 'center', 'bottom'] + }, + halign: { + enums: ['left', 'center', 'right'] + }, + justification: { + enums: ['left', 'center', 'right', 'auto'] + }, + text: { + string: true + }, + data: { + mapping: true, + regex: data('data') + }, + layoutData: { + mapping: true, + regex: data('layoutData') + }, + scratch: { + mapping: true, + regex: data('scratch') + }, + mapData: { + mapping: true, + regex: mapData('mapData') + }, + mapLayoutData: { + mapping: true, + regex: mapData('mapLayoutData') + }, + mapScratch: { + mapping: true, + regex: mapData('mapScratch') + }, + fn: { + mapping: true, + fn: true + }, + url: { + regexes: urlRegexes, + singleRegexMatchValue: true + }, + urls: { + regexes: urlRegexes, + singleRegexMatchValue: true, + multiple: true + }, + propList: { + propList: true + }, + angle: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad' + }, + textRotation: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad', + enums: ['none', 'autorotate'] + }, + polygonPointList: { + number: true, + multiple: true, + evenMultiple: true, + min: -1, + max: 1, + unitless: true + }, + edgeDistances: { + enums: ['intersection', 'node-position'] + }, + edgeEndpoint: { + number: true, + multiple: true, + units: '%|px|em|deg|rad', + implicitUnits: 'px', + enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'], + singleEnum: true, + validate: function validate(valArr, unitsArr) { + switch (valArr.length) { + case 2: + // can be % or px only + return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad'; + + case 1: + // can be enum, deg, or rad only + return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad'; + + default: + return false; + } + } + }, + easing: { + regexes: ['^(spring)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$', '^(cubic-bezier)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$'], + enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ'] + }, + gradientDirection: { + enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order + ] + }, + boundsExpansion: { + number: true, + multiple: true, + min: 0, + validate: function validate(valArr) { + var length = valArr.length; + return length === 1 || length === 2 || length === 4; + } + } + }; + var diff = { + zeroNonZero: function zeroNonZero(val1, val2) { + if ((val1 == null || val2 == null) && val1 !== val2) { + return true; // null cases could represent any value + } + + if (val1 == 0 && val2 != 0) { + return true; + } else if (val1 != 0 && val2 == 0) { + return true; + } else { + return false; + } + }, + any: function any(val1, val2) { + return val1 != val2; + }, + emptyNonEmpty: function emptyNonEmpty(str1, str2) { + var empty1 = emptyString(str1); + var empty2 = emptyString(str2); + return empty1 && !empty2 || !empty1 && empty2; + } + }; // define visual style properties + // + // - n.b. adding a new group of props may require updates to updateStyleHints() + // - adding new props to an existing group gets handled automatically + + var t = styfn$2.types; + var mainLabel = [{ + name: 'label', + type: t.text, + triggersBounds: diff.any, + triggersZOrder: diff.emptyNonEmpty + }, { + name: 'text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }]; + var sourceLabel = [{ + name: 'source-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'source-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'source-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var targetLabel = [{ + name: 'target-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'target-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'target-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var labelDimensions = [{ + name: 'font-family', + type: t.fontFamily, + triggersBounds: diff.any + }, { + name: 'font-style', + type: t.fontStyle, + triggersBounds: diff.any + }, { + name: 'font-weight', + type: t.fontWeight, + triggersBounds: diff.any + }, { + name: 'font-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-transform', + type: t.textTransform, + triggersBounds: diff.any + }, { + name: 'text-wrap', + type: t.textWrap, + triggersBounds: diff.any + }, { + name: 'text-overflow-wrap', + type: t.textOverflowWrap, + triggersBounds: diff.any + }, { + name: 'text-max-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-outline-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'line-height', + type: t.positiveNumber, + triggersBounds: diff.any + }]; + var commonLabel = [{ + name: 'text-valign', + type: t.valign, + triggersBounds: diff.any + }, { + name: 'text-halign', + type: t.halign, + triggersBounds: diff.any + }, { + name: 'color', + type: t.color + }, { + name: 'text-outline-color', + type: t.color + }, { + name: 'text-outline-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-color', + type: t.color + }, { + name: 'text-background-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-opacity', + type: t.zeroOneNumber + }, { + name: 'text-border-color', + type: t.color + }, { + name: 'text-border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-style', + type: t.borderStyle, + triggersBounds: diff.any + }, { + name: 'text-background-shape', + type: t.textBackgroundShape, + triggersBounds: diff.any + }, { + name: 'text-justification', + type: t.justification + }]; + var behavior = [{ + name: 'events', + type: t.bool + }, { + name: 'text-events', + type: t.bool + }]; + var visibility = [{ + name: 'display', + type: t.display, + triggersZOrder: diff.any, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'visibility', + type: t.visibility, + triggersZOrder: diff.any + }, { + name: 'opacity', + type: t.zeroOneNumber, + triggersZOrder: diff.zeroNonZero + }, { + name: 'text-opacity', + type: t.zeroOneNumber + }, { + name: 'min-zoomed-font-size', + type: t.size + }, { + name: 'z-compound-depth', + type: t.zCompoundDepth, + triggersZOrder: diff.any + }, { + name: 'z-index-compare', + type: t.zIndexCompare, + triggersZOrder: diff.any + }, { + name: 'z-index', + type: t.nonNegativeInt, + triggersZOrder: diff.any + }]; + var overlay = [{ + name: 'overlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'overlay-color', + type: t.color + }, { + name: 'overlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'overlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var underlay = [{ + name: 'underlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'underlay-color', + type: t.color + }, { + name: 'underlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'underlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var transition = [{ + name: 'transition-property', + type: t.propList + }, { + name: 'transition-duration', + type: t.time + }, { + name: 'transition-delay', + type: t.time + }, { + name: 'transition-timing-function', + type: t.easing + }]; + + var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) { + if (parsedProp.value === 'label') { + return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway) + } else { + return parsedProp.pfValue; + } + }; + + var nodeBody = [{ + name: 'height', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'width', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'shape', + type: t.nodeShape, + triggersBounds: diff.any + }, { + name: 'shape-polygon-points', + type: t.polygonPointList, + triggersBounds: diff.any + }, { + name: 'background-color', + type: t.color + }, { + name: 'background-fill', + type: t.fill + }, { + name: 'background-opacity', + type: t.zeroOneNumber + }, { + name: 'background-blacken', + type: t.nOneOneNumber + }, { + name: 'background-gradient-stop-colors', + type: t.colors + }, { + name: 'background-gradient-stop-positions', + type: t.percentages + }, { + name: 'background-gradient-direction', + type: t.gradientDirection + }, { + name: 'padding', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'padding-relative-to', + type: t.paddingRelativeTo, + triggersBounds: diff.any + }, { + name: 'bounds-expansion', + type: t.boundsExpansion, + triggersBounds: diff.any + }]; + var nodeBorder = [{ + name: 'border-color', + type: t.color + }, { + name: 'border-opacity', + type: t.zeroOneNumber + }, { + name: 'border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'border-style', + type: t.borderStyle + }]; + var backgroundImage = [{ + name: 'background-image', + type: t.urls + }, { + name: 'background-image-crossorigin', + type: t.bgCrossOrigin + }, { + name: 'background-image-opacity', + type: t.zeroOneNumbers + }, { + name: 'background-image-containment', + type: t.bgContainment + }, { + name: 'background-image-smoothing', + type: t.bools + }, { + name: 'background-position-x', + type: t.bgPos + }, { + name: 'background-position-y', + type: t.bgPos + }, { + name: 'background-width-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-height-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-repeat', + type: t.bgRepeat + }, { + name: 'background-fit', + type: t.bgFit + }, { + name: 'background-clip', + type: t.bgClip + }, { + name: 'background-width', + type: t.bgWH + }, { + name: 'background-height', + type: t.bgWH + }, { + name: 'background-offset-x', + type: t.bgPos + }, { + name: 'background-offset-y', + type: t.bgPos + }]; + var compound = [{ + name: 'position', + type: t.position, + triggersBounds: diff.any + }, { + name: 'compound-sizing-wrt-labels', + type: t.compoundIncludeLabels, + triggersBounds: diff.any + }, { + name: 'min-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-width-bias-left', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-width-bias-right', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-height-bias-top', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height-bias-bottom', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }]; + var edgeLine = [{ + name: 'line-style', + type: t.lineStyle + }, { + name: 'line-color', + type: t.color + }, { + name: 'line-fill', + type: t.fill + }, { + name: 'line-cap', + type: t.lineCap + }, { + name: 'line-opacity', + type: t.zeroOneNumber + }, { + name: 'line-dash-pattern', + type: t.numbers + }, { + name: 'line-dash-offset', + type: t.number + }, { + name: 'line-gradient-stop-colors', + type: t.colors + }, { + name: 'line-gradient-stop-positions', + type: t.percentages + }, { + name: 'curve-style', + type: t.curveStyle, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'haystack-radius', + type: t.zeroOneNumber, + triggersBounds: diff.any + }, { + name: 'source-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'target-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'control-point-step-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'control-point-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'control-point-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'segment-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'segment-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'taxi-turn', + type: t.bidirectionalSizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'taxi-turn-min-distance', + type: t.size, + triggersBounds: diff.any + }, { + name: 'taxi-direction', + type: t.axisDirection, + triggersBounds: diff.any + }, { + name: 'edge-distances', + type: t.edgeDistances, + triggersBounds: diff.any + }, { + name: 'arrow-scale', + type: t.positiveNumber, + triggersBounds: diff.any + }, { + name: 'loop-direction', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'loop-sweep', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'source-distance-from-node', + type: t.size, + triggersBounds: diff.any + }, { + name: 'target-distance-from-node', + type: t.size, + triggersBounds: diff.any + }]; + var ghost = [{ + name: 'ghost', + type: t.bool, + triggersBounds: diff.any + }, { + name: 'ghost-offset-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-offset-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-opacity', + type: t.zeroOneNumber + }]; + var core = [{ + name: 'selection-box-color', + type: t.color + }, { + name: 'selection-box-opacity', + type: t.zeroOneNumber + }, { + name: 'selection-box-border-color', + type: t.color + }, { + name: 'selection-box-border-width', + type: t.size + }, { + name: 'active-bg-color', + type: t.color + }, { + name: 'active-bg-opacity', + type: t.zeroOneNumber + }, { + name: 'active-bg-size', + type: t.size + }, { + name: 'outside-texture-bg-color', + type: t.color + }, { + name: 'outside-texture-bg-opacity', + type: t.zeroOneNumber + }]; // pie backgrounds for nodes + + var pie = []; + styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use) + + pie.push({ + name: 'pie-size', + type: t.sizeMaybePercent + }); + + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + pie.push({ + name: 'pie-' + i + '-background-color', + type: t.color + }); + pie.push({ + name: 'pie-' + i + '-background-size', + type: t.percent + }); + pie.push({ + name: 'pie-' + i + '-background-opacity', + type: t.zeroOneNumber + }); + } // edge arrows + + + var edgeArrow = []; + var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target']; + [{ + name: 'arrow-shape', + type: t.arrowShape, + triggersBounds: diff.any + }, { + name: 'arrow-color', + type: t.color + }, { + name: 'arrow-fill', + type: t.arrowFill + }].forEach(function (prop) { + arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var type = prop.type, + triggersBounds = prop.triggersBounds; + edgeArrow.push({ + name: name, + type: type, + triggersBounds: triggersBounds + }); + }); + }, {}); + var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, backgroundImage, pie, compound, edgeLine, edgeArrow, core); + var propGroups = styfn$2.propertyGroups = { + // common to all eles + behavior: behavior, + transition: transition, + visibility: visibility, + overlay: overlay, + underlay: underlay, + ghost: ghost, + // labels + commonLabel: commonLabel, + labelDimensions: labelDimensions, + mainLabel: mainLabel, + sourceLabel: sourceLabel, + targetLabel: targetLabel, + // node props + nodeBody: nodeBody, + nodeBorder: nodeBorder, + backgroundImage: backgroundImage, + pie: pie, + compound: compound, + // edge props + edgeLine: edgeLine, + edgeArrow: edgeArrow, + core: core + }; + var propGroupNames = styfn$2.propertyGroupNames = {}; + var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups); + propGroupKeys.forEach(function (key) { + propGroupNames[key] = propGroups[key].map(function (prop) { + return prop.name; + }); + propGroups[key].forEach(function (prop) { + return prop.groupKey = key; + }); + }); // define aliases + + var aliases = styfn$2.aliases = [{ + name: 'content', + pointsTo: 'label' + }, { + name: 'control-point-distance', + pointsTo: 'control-point-distances' + }, { + name: 'control-point-weight', + pointsTo: 'control-point-weights' + }, { + name: 'edge-text-rotation', + pointsTo: 'text-rotation' + }, { + name: 'padding-left', + pointsTo: 'padding' + }, { + name: 'padding-right', + pointsTo: 'padding' + }, { + name: 'padding-top', + pointsTo: 'padding' + }, { + name: 'padding-bottom', + pointsTo: 'padding' + }]; // list of property names + + styfn$2.propertyNames = props.map(function (p) { + return p.name; + }); // allow access of properties by name ( e.g. style.properties.height ) + + for (var _i = 0; _i < props.length; _i++) { + var prop = props[_i]; + props[prop.name] = prop; // allow lookup by name + } // map aliases + + + for (var _i2 = 0; _i2 < aliases.length; _i2++) { + var alias = aliases[_i2]; + var pointsToProp = props[alias.pointsTo]; + var aliasProp = { + name: alias.name, + alias: true, + pointsTo: pointsToProp + }; // add alias prop for parsing + + props.push(aliasProp); + props[alias.name] = aliasProp; // allow lookup by name + } + })(); + + styfn$2.getDefaultProperty = function (name) { + return this.getDefaultProperties()[name]; + }; + + styfn$2.getDefaultProperties = function () { + var _p = this._private; + + if (_p.defaultProperties != null) { + return _p.defaultProperties; + } + + var rawProps = extend({ + // core props + 'selection-box-color': '#ddd', + 'selection-box-opacity': 0.65, + 'selection-box-border-color': '#aaa', + 'selection-box-border-width': 1, + 'active-bg-color': 'black', + 'active-bg-opacity': 0.15, + 'active-bg-size': 30, + 'outside-texture-bg-color': '#000', + 'outside-texture-bg-opacity': 0.125, + // common node/edge props + 'events': 'yes', + 'text-events': 'no', + 'text-valign': 'top', + 'text-halign': 'center', + 'text-justification': 'auto', + 'line-height': 1, + 'color': '#000', + 'text-outline-color': '#000', + 'text-outline-width': 0, + 'text-outline-opacity': 1, + 'text-opacity': 1, + 'text-decoration': 'none', + 'text-transform': 'none', + 'text-wrap': 'none', + 'text-overflow-wrap': 'whitespace', + 'text-max-width': 9999, + 'text-background-color': '#000', + 'text-background-opacity': 0, + 'text-background-shape': 'rectangle', + 'text-background-padding': 0, + 'text-border-opacity': 0, + 'text-border-width': 0, + 'text-border-style': 'solid', + 'text-border-color': '#000', + 'font-family': 'Helvetica Neue, Helvetica, sans-serif', + 'font-style': 'normal', + 'font-weight': 'normal', + 'font-size': 16, + 'min-zoomed-font-size': 0, + 'text-rotation': 'none', + 'source-text-rotation': 'none', + 'target-text-rotation': 'none', + 'visibility': 'visible', + 'display': 'element', + 'opacity': 1, + 'z-compound-depth': 'auto', + 'z-index-compare': 'auto', + 'z-index': 0, + 'label': '', + 'text-margin-x': 0, + 'text-margin-y': 0, + 'source-label': '', + 'source-text-offset': 0, + 'source-text-margin-x': 0, + 'source-text-margin-y': 0, + 'target-label': '', + 'target-text-offset': 0, + 'target-text-margin-x': 0, + 'target-text-margin-y': 0, + 'overlay-opacity': 0, + 'overlay-color': '#000', + 'overlay-padding': 10, + 'overlay-shape': 'round-rectangle', + 'underlay-opacity': 0, + 'underlay-color': '#000', + 'underlay-padding': 10, + 'underlay-shape': 'round-rectangle', + 'transition-property': 'none', + 'transition-duration': 0, + 'transition-delay': 0, + 'transition-timing-function': 'linear', + // node props + 'background-blacken': 0, + 'background-color': '#999', + 'background-fill': 'solid', + 'background-opacity': 1, + 'background-image': 'none', + 'background-image-crossorigin': 'anonymous', + 'background-image-opacity': 1, + 'background-image-containment': 'inside', + 'background-image-smoothing': 'yes', + 'background-position-x': '50%', + 'background-position-y': '50%', + 'background-offset-x': 0, + 'background-offset-y': 0, + 'background-width-relative-to': 'include-padding', + 'background-height-relative-to': 'include-padding', + 'background-repeat': 'no-repeat', + 'background-fit': 'none', + 'background-clip': 'node', + 'background-width': 'auto', + 'background-height': 'auto', + 'border-color': '#000', + 'border-opacity': 1, + 'border-width': 0, + 'border-style': 'solid', + 'height': 30, + 'width': 30, + 'shape': 'ellipse', + 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1', + 'bounds-expansion': 0, + // node gradient + 'background-gradient-direction': 'to-bottom', + 'background-gradient-stop-colors': '#999', + 'background-gradient-stop-positions': '0%', + // ghost props + 'ghost': 'no', + 'ghost-offset-y': 0, + 'ghost-offset-x': 0, + 'ghost-opacity': 0, + // compound props + 'padding': 0, + 'padding-relative-to': 'width', + 'position': 'origin', + 'compound-sizing-wrt-labels': 'include', + 'min-width': 0, + 'min-width-bias-left': 0, + 'min-width-bias-right': 0, + 'min-height': 0, + 'min-height-bias-top': 0, + 'min-height-bias-bottom': 0 + }, { + // node pie bg + 'pie-size': '100%' + }, [{ + name: 'pie-{{i}}-background-color', + value: 'black' + }, { + name: 'pie-{{i}}-background-size', + value: '0%' + }, { + name: 'pie-{{i}}-background-opacity', + value: 1 + }].reduce(function (css, prop) { + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + var name = prop.name.replace('{{i}}', i); + var val = prop.value; + css[name] = val; + } + + return css; + }, {}), { + // edge props + 'line-style': 'solid', + 'line-color': '#999', + 'line-fill': 'solid', + 'line-cap': 'butt', + 'line-opacity': 1, + 'line-gradient-stop-colors': '#999', + 'line-gradient-stop-positions': '0%', + 'control-point-step-size': 40, + 'control-point-weights': 0.5, + 'segment-weights': 0.5, + 'segment-distances': 20, + 'taxi-turn': '50%', + 'taxi-turn-min-distance': 10, + 'taxi-direction': 'auto', + 'edge-distances': 'intersection', + 'curve-style': 'haystack', + 'haystack-radius': 0, + 'arrow-scale': 1, + 'loop-direction': '-45deg', + 'loop-sweep': '-90deg', + 'source-distance-from-node': 0, + 'target-distance-from-node': 0, + 'source-endpoint': 'outside-to-node', + 'target-endpoint': 'outside-to-node', + 'line-dash-pattern': [6, 3], + 'line-dash-offset': 0 + }, [{ + name: 'arrow-shape', + value: 'none' + }, { + name: 'arrow-color', + value: '#999' + }, { + name: 'arrow-fill', + value: 'filled' + }].reduce(function (css, prop) { + styfn$2.arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var val = prop.value; + css[name] = val; + }); + return css; + }, {})); + var parsedProps = {}; + + for (var i = 0; i < this.properties.length; i++) { + var prop = this.properties[i]; + + if (prop.pointsTo) { + continue; + } + + var name = prop.name; + var val = rawProps[name]; + var parsedProp = this.parse(name, val); + parsedProps[name] = parsedProp; + } + + _p.defaultProperties = parsedProps; + return _p.defaultProperties; + }; + + styfn$2.addDefaultStylesheet = function () { + this.selector(':parent').css({ + 'shape': 'rectangle', + 'padding': 10, + 'background-color': '#eee', + 'border-color': '#ccc', + 'border-width': 1 + }).selector('edge').css({ + 'width': 3 + }).selector(':loop').css({ + 'curve-style': 'bezier' + }).selector('edge:compound').css({ + 'curve-style': 'bezier', + 'source-endpoint': 'outside-to-line', + 'target-endpoint': 'outside-to-line' + }).selector(':selected').css({ + 'background-color': '#0169D9', + 'line-color': '#0169D9', + 'source-arrow-color': '#0169D9', + 'target-arrow-color': '#0169D9', + 'mid-source-arrow-color': '#0169D9', + 'mid-target-arrow-color': '#0169D9' + }).selector(':parent:selected').css({ + 'background-color': '#CCE1F9', + 'border-color': '#aec8e5' + }).selector(':active').css({ + 'overlay-color': 'black', + 'overlay-padding': 10, + 'overlay-opacity': 0.25 + }); + this.defaultLength = this.length; + }; + + var styfn$1 = {}; // a caching layer for property parsing + + styfn$1.parse = function (name, value, propIsBypass, propIsFlat) { + var self = this; // function values can't be cached in all cases, and there isn't much benefit of caching them anyway + + if (fn$6(value)) { + return self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } + + var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat; + var bypassKey = propIsBypass ? 't' : 'f'; + var valueKey = '' + value; + var argHash = hashStrings(name, valueKey, bypassKey, flatKey); + var propCache = self.propCache = self.propCache || []; + var ret; + + if (!(ret = propCache[argHash])) { + ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden + // - mappings can't be shared b/c mappings are per-element + + + if (propIsBypass || propIsFlat === 'mapping') { + // need a copy since props are mutated later in their lifecycles + ret = copy(ret); + + if (ret) { + ret.value = copy(ret.value); // because it could be an array, e.g. colour + } + } + + return ret; + }; + + styfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) { + var prop = this.parseImpl(name, value, propIsBypass, propIsFlat); + + if (!prop && value != null) { + warn("The style property `".concat(name, ": ").concat(value, "` is invalid")); + } + + if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') { + warn('The style value of `label` is deprecated for `' + prop.name + '`'); + } + + return prop; + }; // parse a property; return null on invalid; return parsed property otherwise + // fields : + // - name : the name of the property + // - value : the parsed, native-typed value of the property + // - strValue : a string value that represents the property value in valid css + // - bypass : true iff the property is a bypass property + + + styfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) { + var self = this; + name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName') + + var property = self.properties[name]; + var passedValue = value; + var types = self.types; + + if (!property) { + return null; + } // return null on property of unknown name + + + if (value === undefined) { + return null; + } // can't assign undefined + // the property may be an alias + + + if (property.alias) { + property = property.pointsTo; + name = property.name; + } + + var valueIsString = string(value); + + if (valueIsString) { + // trim the value to make parsing easier + value = value.trim(); + } + + var type = property.type; + + if (!type) { + return null; + } // no type, no luck + // check if bypass is null or empty string (i.e. indication to delete bypass property) + + + if (propIsBypass && (value === '' || value === null)) { + return { + name: name, + value: value, + bypass: true, + deleteBypass: true + }; + } // check if value is a function used as a mapper + + + if (fn$6(value)) { + return { + name: name, + value: value, + strValue: 'fn', + mapped: types.fn, + bypass: propIsBypass + }; + } // check if value is mapped + + + var data, mapData; + + if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + + var mapped = types.data; + return { + name: name, + value: data, + strValue: '' + value, + mapped: mapped, + field: data[1], + bypass: propIsBypass + }; + } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + + if (type.multiple) { + return false; + } // impossible to map to num + + + var _mapped = types.mapData; // we can map only if the type is a colour or a number + + if (!(type.color || type.number)) { + return false; + } + + var valueMin = this.parse(name, mapData[4]); // parse to validate + + if (!valueMin || valueMin.mapped) { + return false; + } // can't be invalid or mapped + + + var valueMax = this.parse(name, mapData[5]); // parse to validate + + if (!valueMax || valueMax.mapped) { + return false; + } // can't be invalid or mapped + // check if valueMin and valueMax are the same + + + if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) { + warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`'); + return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range + } else if (type.color) { + var c1 = valueMin.value; + var c2 = valueMax.value; + var same = c1[0] === c2[0] // red + && c1[1] === c2[1] // green + && c1[2] === c2[2] // blue + && ( // optional alpha + c1[3] === c2[3] // same alpha outright + || (c1[3] == null || c1[3] === 1 // full opacity for colour 1? + ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2? + ); + + if (same) { + return false; + } // can't make a mapper without a range + + } + + return { + name: name, + value: mapData, + strValue: '' + value, + mapped: _mapped, + field: mapData[1], + fieldMin: parseFloat(mapData[2]), + // min & max are numeric + fieldMax: parseFloat(mapData[3]), + valueMin: valueMin.value, + valueMax: valueMax.value, + bypass: propIsBypass + }; + } + + if (type.multiple && propIsFlat !== 'multiple') { + var vals; + + if (valueIsString) { + vals = value.split(/\s+/); + } else if (array(value)) { + vals = value; + } else { + vals = [value]; + } + + if (type.evenMultiple && vals.length % 2 !== 0) { + return null; + } + + var valArr = []; + var unitsArr = []; + var pfValArr = []; + var strVal = ''; + var hasEnum = false; + + for (var i = 0; i < vals.length; i++) { + var p = self.parse(name, vals[i], propIsBypass, 'multiple'); + hasEnum = hasEnum || string(p.value); + valArr.push(p.value); + pfValArr.push(p.pfValue != null ? p.pfValue : p.value); + unitsArr.push(p.units); + strVal += (i > 0 ? ' ' : '') + p.strValue; + } + + if (type.validate && !type.validate(valArr, unitsArr)) { + return null; + } + + if (type.singleEnum && hasEnum) { + if (valArr.length === 1 && string(valArr[0])) { + return { + name: name, + value: valArr[0], + strValue: valArr[0], + bypass: propIsBypass + }; + } else { + return null; + } + } + + return { + name: name, + value: valArr, + pfValue: pfValArr, + strValue: strVal, + bypass: propIsBypass, + units: unitsArr + }; + } // several types also allow enums + + + var checkEnums = function checkEnums() { + for (var _i = 0; _i < type.enums.length; _i++) { + var en = type.enums[_i]; + + if (en === value) { + return { + name: name, + value: value, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + + return null; + }; // check the type and return the appropriate object + + + if (type.number) { + var units; + var implicitUnits = 'px'; // not set => px + + if (type.units) { + // use specified units if set + units = type.units; + } + + if (type.implicitUnits) { + implicitUnits = type.implicitUnits; + } + + if (!type.unitless) { + if (valueIsString) { + var unitsRegex = 'px|em' + (type.allowPercent ? '|\\%' : ''); + + if (units) { + unitsRegex = units; + } // only allow explicit units if so set + + + var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$'); + + if (match) { + value = match[1]; + units = match[2] || implicitUnits; + } + } else if (!units || type.implicitUnits) { + units = implicitUnits; // implicitly px if unspecified + } + } + + value = parseFloat(value); // if not a number and enums not allowed, then the value is invalid + + if (isNaN(value) && type.enums === undefined) { + return null; + } // check if this number type also accepts special keywords in place of numbers + // (i.e. `left`, `auto`, etc) + + + if (isNaN(value) && type.enums !== undefined) { + value = passedValue; + return checkEnums(); + } // check if value must be an integer + + + if (type.integer && !integer(value)) { + return null; + } // check value is within range + + + if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) { + return null; + } + + var ret = { + name: name, + value: value, + strValue: '' + value + (units ? units : ''), + units: units, + bypass: propIsBypass + }; // normalise value in pixels + + if (type.unitless || units !== 'px' && units !== 'em') { + ret.pfValue = value; + } else { + ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value; + } // normalise value in ms + + + if (units === 'ms' || units === 's') { + ret.pfValue = units === 'ms' ? value : 1000 * value; + } // normalise value in rad + + + if (units === 'deg' || units === 'rad') { + ret.pfValue = units === 'rad' ? value : deg2rad(value); + } // normalize value in % + + + if (units === '%') { + ret.pfValue = value / 100; + } + + return ret; + } else if (type.propList) { + var props = []; + var propsStr = '' + value; + + if (propsStr === 'none') ; else { + // go over each prop + var propsSplit = propsStr.split(/\s*,\s*|\s+/); + + for (var _i2 = 0; _i2 < propsSplit.length; _i2++) { + var propName = propsSplit[_i2].trim(); + + if (self.properties[propName]) { + props.push(propName); + } else { + warn('`' + propName + '` is not a valid property name'); + } + } + + if (props.length === 0) { + return null; + } + } + + return { + name: name, + value: props, + strValue: props.length === 0 ? 'none' : props.join(' '), + bypass: propIsBypass + }; + } else if (type.color) { + var tuple = color2tuple(value); + + if (!tuple) { + return null; + } + + return { + name: name, + value: tuple, + pfValue: tuple, + strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')', + // n.b. no spaces b/c of multiple support + bypass: propIsBypass + }; + } else if (type.regex || type.regexes) { + // first check enums + if (type.enums) { + var enumProp = checkEnums(); + + if (enumProp) { + return enumProp; + } + } + + var regexes = type.regexes ? type.regexes : [type.regex]; + + for (var _i3 = 0; _i3 < regexes.length; _i3++) { + var regex = new RegExp(regexes[_i3]); // make a regex from the type string + + var m = regex.exec(value); + + if (m) { + // regex matches + return { + name: name, + value: type.singleRegexMatchValue ? m[1] : m, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + + return null; // didn't match any + } else if (type.string) { + // just return + return { + name: name, + value: '' + value, + strValue: '' + value, + bypass: propIsBypass + }; + } else if (type.enums) { + // check enums last because it's a combo type in others + return checkEnums(); + } else { + return null; // not a type we can handle + } + }; + + var Style = function Style(cy) { + if (!(this instanceof Style)) { + return new Style(cy); + } + + if (!core(cy)) { + error('A style must have a core reference'); + return; + } + + this._private = { + cy: cy, + coreStyle: {} + }; + this.length = 0; + this.resetToDefault(); + }; + + var styfn = Style.prototype; + + styfn.instanceString = function () { + return 'style'; + }; // remove all contexts + + + styfn.clear = function () { + var _p = this._private; + var cy = _p.cy; + var eles = cy.elements(); + + for (var i = 0; i < this.length; i++) { + this[i] = undefined; + } + + this.length = 0; + _p.contextStyles = {}; + _p.propDiffs = {}; + this.cleanElements(eles, true); + eles.forEach(function (ele) { + var ele_p = ele[0]._private; + ele_p.styleDirty = true; + ele_p.appliedInitStyle = false; + }); + return this; // chaining + }; + + styfn.resetToDefault = function () { + this.clear(); + this.addDefaultStylesheet(); + return this; + }; // builds a style object for the 'core' selector + + + styfn.core = function (propName) { + return this._private.coreStyle[propName] || this.getDefaultProperty(propName); + }; // create a new context from the specified selector string and switch to that context + + + styfn.selector = function (selectorStr) { + // 'core' is a special case and does not need a selector + var selector = selectorStr === 'core' ? null : new Selector(selectorStr); + var i = this.length++; // new context means new index + + this[i] = { + selector: selector, + properties: [], + mappedProperties: [], + index: i + }; + return this; // chaining + }; // add one or many css rules to the current context + + + styfn.css = function () { + var self = this; + var args = arguments; + + if (args.length === 1) { + var map = args[0]; + + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var mapVal = map[prop.name]; + + if (mapVal === undefined) { + mapVal = map[dash2camel(prop.name)]; + } + + if (mapVal !== undefined) { + this.cssRule(prop.name, mapVal); + } + } + } else if (args.length === 2) { + this.cssRule(args[0], args[1]); + } // do nothing if args are invalid + + + return this; // chaining + }; + + styfn.style = styfn.css; // add a single css rule to the current context + + styfn.cssRule = function (name, value) { + // name-value pair + var property = this.parse(name, value); // add property to current context if valid + + if (property) { + var i = this.length - 1; + this[i].properties.push(property); + this[i].properties[property.name] = property; // allow access by name as well + + if (property.name.match(/pie-(\d+)-background-size/) && property.value) { + this._private.hasPie = true; + } + + if (property.mapped) { + this[i].mappedProperties.push(property); + } // add to core style if necessary + + + var currentSelectorIsCore = !this[i].selector; + + if (currentSelectorIsCore) { + this._private.coreStyle[property.name] = property; + } + } + + return this; // chaining + }; + + styfn.append = function (style) { + if (stylesheet(style)) { + style.appendToStyle(this); + } else if (array(style)) { + this.appendFromJson(style); + } else if (string(style)) { + this.appendFromString(style); + } // you probably wouldn't want to append a Style, since you'd duplicate the default parts + + + return this; + }; // static function + + + Style.fromJson = function (cy, json) { + var style = new Style(cy); + style.fromJson(json); + return style; + }; + + Style.fromString = function (cy, string) { + return new Style(cy).fromString(string); + }; + + [styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) { + extend(styfn, props); + }); + Style.types = styfn.types; + Style.properties = styfn.properties; + Style.propertyGroups = styfn.propertyGroups; + Style.propertyGroupNames = styfn.propertyGroupNames; + Style.propertyGroupKeys = styfn.propertyGroupKeys; + + var corefn$2 = { + style: function style(newStyle) { + if (newStyle) { + var s = this.setStyle(newStyle); + s.update(); + } + + return this._private.style; + }, + setStyle: function setStyle(style) { + var _p = this._private; + + if (stylesheet(style)) { + _p.style = style.generateStyle(this); + } else if (array(style)) { + _p.style = Style.fromJson(this, style); + } else if (string(style)) { + _p.style = Style.fromString(this, style); + } else { + _p.style = Style(this); + } + + return _p.style; + }, + // e.g. cy.data() changed => recalc ele mappers + updateStyle: function updateStyle() { + this.mutableElements().updateStyle(); // just send to all eles + } + }; + + var defaultSelectionType = 'single'; + var corefn$1 = { + autolock: function autolock(bool) { + if (bool !== undefined) { + this._private.autolock = bool ? true : false; + } else { + return this._private.autolock; + } + + return this; // chaining + }, + autoungrabify: function autoungrabify(bool) { + if (bool !== undefined) { + this._private.autoungrabify = bool ? true : false; + } else { + return this._private.autoungrabify; + } + + return this; // chaining + }, + autounselectify: function autounselectify(bool) { + if (bool !== undefined) { + this._private.autounselectify = bool ? true : false; + } else { + return this._private.autounselectify; + } + + return this; // chaining + }, + selectionType: function selectionType(selType) { + var _p = this._private; + + if (_p.selectionType == null) { + _p.selectionType = defaultSelectionType; + } + + if (selType !== undefined) { + if (selType === 'additive' || selType === 'single') { + _p.selectionType = selType; + } + } else { + return _p.selectionType; + } + + return this; + }, + panningEnabled: function panningEnabled(bool) { + if (bool !== undefined) { + this._private.panningEnabled = bool ? true : false; + } else { + return this._private.panningEnabled; + } + + return this; // chaining + }, + userPanningEnabled: function userPanningEnabled(bool) { + if (bool !== undefined) { + this._private.userPanningEnabled = bool ? true : false; + } else { + return this._private.userPanningEnabled; + } + + return this; // chaining + }, + zoomingEnabled: function zoomingEnabled(bool) { + if (bool !== undefined) { + this._private.zoomingEnabled = bool ? true : false; + } else { + return this._private.zoomingEnabled; + } + + return this; // chaining + }, + userZoomingEnabled: function userZoomingEnabled(bool) { + if (bool !== undefined) { + this._private.userZoomingEnabled = bool ? true : false; + } else { + return this._private.userZoomingEnabled; + } + + return this; // chaining + }, + boxSelectionEnabled: function boxSelectionEnabled(bool) { + if (bool !== undefined) { + this._private.boxSelectionEnabled = bool ? true : false; + } else { + return this._private.boxSelectionEnabled; + } + + return this; // chaining + }, + pan: function pan() { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + + switch (args.length) { + case 0: + // .pan() + return pan; + + case 1: + if (string(args[0])) { + // .pan('x') + dim = args[0]; + return pan[dim]; + } else if (plainObject(args[0])) { + // .pan({ x: 0, y: 100 }) + if (!this._private.panningEnabled) { + return this; + } + + dims = args[0]; + x = dims.x; + y = dims.y; + + if (number$1(x)) { + pan.x = x; + } + + if (number$1(y)) { + pan.y = y; + } + + this.emit('pan viewport'); + } + + break; + + case 2: + // .pan('x', 100) + if (!this._private.panningEnabled) { + return this; + } + + dim = args[0]; + val = args[1]; + + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] = val; + } + + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + panBy: function panBy(arg0, arg1) { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + + if (!this._private.panningEnabled) { + return this; + } + + switch (args.length) { + case 1: + if (plainObject(arg0)) { + // .panBy({ x: 0, y: 100 }) + dims = args[0]; + x = dims.x; + y = dims.y; + + if (number$1(x)) { + pan.x += x; + } + + if (number$1(y)) { + pan.y += y; + } + + this.emit('pan viewport'); + } + + break; + + case 2: + // .panBy('x', 100) + dim = arg0; + val = arg1; + + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] += val; + } + + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + fit: function fit(elements, padding) { + var viewportState = this.getFitViewport(elements, padding); + + if (viewportState) { + var _p = this._private; + _p.zoom = viewportState.zoom; + _p.pan = viewportState.pan; + this.emit('pan zoom viewport'); + this.notify('viewport'); + } + + return this; // chaining + }, + getFitViewport: function getFitViewport(elements, padding) { + if (number$1(elements) && padding === undefined) { + // elements is optional + padding = elements; + elements = undefined; + } + + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return; + } + + var bb; + + if (string(elements)) { + var sel = elements; + elements = this.$(sel); + } else if (boundingBox(elements)) { + // assume bb + var bbe = elements; + bb = { + x1: bbe.x1, + y1: bbe.y1, + x2: bbe.x2, + y2: bbe.y2 + }; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + + if (elementOrCollection(elements) && elements.empty()) { + return; + } // can't fit to nothing + + + bb = bb || elements.boundingBox(); + var w = this.width(); + var h = this.height(); + var zoom; + padding = number$1(padding) ? padding : 0; + + if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { + zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h); // crop zoom + + zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom; + zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom; + var pan = { + // now pan to middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return { + zoom: zoom, + pan: pan + }; + } + + return; + }, + zoomRange: function zoomRange(min, max) { + var _p = this._private; + + if (max == null) { + var opts = min; + min = opts.min; + max = opts.max; + } + + if (number$1(min) && number$1(max) && min <= max) { + _p.minZoom = min; + _p.maxZoom = max; + } else if (number$1(min) && max === undefined && min <= _p.maxZoom) { + _p.minZoom = min; + } else if (number$1(max) && min === undefined && max >= _p.minZoom) { + _p.maxZoom = max; + } + + return this; + }, + minZoom: function minZoom(zoom) { + if (zoom === undefined) { + return this._private.minZoom; + } else { + return this.zoomRange({ + min: zoom + }); + } + }, + maxZoom: function maxZoom(zoom) { + if (zoom === undefined) { + return this._private.maxZoom; + } else { + return this.zoomRange({ + max: zoom + }); + } + }, + getZoomedViewport: function getZoomedViewport(params) { + var _p = this._private; + var currentPan = _p.pan; + var currentZoom = _p.zoom; + var pos; // in rendered px + + var zoom; + var bail = false; + + if (!_p.zoomingEnabled) { + // zooming disabled + bail = true; + } + + if (number$1(params)) { + // then set the zoom + zoom = params; + } else if (plainObject(params)) { + // then zoom about a point + zoom = params.level; + + if (params.position != null) { + pos = modelToRenderedPosition(params.position, currentZoom, currentPan); + } else if (params.renderedPosition != null) { + pos = params.renderedPosition; + } + + if (pos != null && !_p.panningEnabled) { + // panning disabled + bail = true; + } + } // crop zoom + + + zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom; + zoom = zoom < _p.minZoom ? _p.minZoom : zoom; // can't zoom with invalid params + + if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) { + return null; + } + + if (pos != null) { + // set zoom about position + var pan1 = currentPan; + var zoom1 = currentZoom; + var zoom2 = zoom; + var pan2 = { + x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x, + y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y + }; + return { + zoomed: true, + panned: true, + zoom: zoom2, + pan: pan2 + }; + } else { + // just set the zoom + return { + zoomed: true, + panned: false, + zoom: zoom, + pan: currentPan + }; + } + }, + zoom: function zoom(params) { + if (params === undefined) { + // get + return this._private.zoom; + } else { + // set + var vp = this.getZoomedViewport(params); + var _p = this._private; + + if (vp == null || !vp.zoomed) { + return this; + } + + _p.zoom = vp.zoom; + + if (vp.panned) { + _p.pan.x = vp.pan.x; + _p.pan.y = vp.pan.y; + } + + this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport'); + this.notify('viewport'); + return this; // chaining + } + }, + viewport: function viewport(opts) { + var _p = this._private; + var zoomDefd = true; + var panDefd = true; + var events = []; // to trigger + + var zoomFailed = false; + var panFailed = false; + + if (!opts) { + return this; + } + + if (!number$1(opts.zoom)) { + zoomDefd = false; + } + + if (!plainObject(opts.pan)) { + panDefd = false; + } + + if (!zoomDefd && !panDefd) { + return this; + } + + if (zoomDefd) { + var z = opts.zoom; + + if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) { + zoomFailed = true; + } else { + _p.zoom = z; + events.push('zoom'); + } + } + + if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) { + var p = opts.pan; + + if (number$1(p.x)) { + _p.pan.x = p.x; + panFailed = false; + } + + if (number$1(p.y)) { + _p.pan.y = p.y; + panFailed = false; + } + + if (!panFailed) { + events.push('pan'); + } + } + + if (events.length > 0) { + events.push('viewport'); + this.emit(events.join(' ')); + this.notify('viewport'); + } + + return this; // chaining + }, + center: function center(elements) { + var pan = this.getCenterPan(elements); + + if (pan) { + this._private.pan = pan; + this.emit('pan viewport'); + this.notify('viewport'); + } + + return this; // chaining + }, + getCenterPan: function getCenterPan(elements, zoom) { + if (!this._private.panningEnabled) { + return; + } + + if (string(elements)) { + var selector = elements; + elements = this.mutableElements().filter(selector); + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + + if (elements.length === 0) { + return; + } // can't centre pan to nothing + + + var bb = elements.boundingBox(); + var w = this.width(); + var h = this.height(); + zoom = zoom === undefined ? this._private.zoom : zoom; + var pan = { + // middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return pan; + }, + reset: function reset() { + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return this; + } + + this.viewport({ + pan: { + x: 0, + y: 0 + }, + zoom: 1 + }); + return this; // chaining + }, + invalidateSize: function invalidateSize() { + this._private.sizeCache = null; + }, + size: function size() { + var _p = this._private; + var container = _p.container; + return _p.sizeCache = _p.sizeCache || (container ? function () { + var style = window$1.getComputedStyle(container); + + var val = function val(name) { + return parseFloat(style.getPropertyValue(name)); + }; + + return { + width: container.clientWidth - val('padding-left') - val('padding-right'), + height: container.clientHeight - val('padding-top') - val('padding-bottom') + }; + }() : { + // fallback if no container (not 0 b/c can be used for dividing etc) + width: 1, + height: 1 + }); + }, + width: function width() { + return this.size().width; + }, + height: function height() { + return this.size().height; + }, + extent: function extent() { + var pan = this._private.pan; + var zoom = this._private.zoom; + var rb = this.renderedExtent(); + var b = { + x1: (rb.x1 - pan.x) / zoom, + x2: (rb.x2 - pan.x) / zoom, + y1: (rb.y1 - pan.y) / zoom, + y2: (rb.y2 - pan.y) / zoom + }; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + return b; + }, + renderedExtent: function renderedExtent() { + var width = this.width(); + var height = this.height(); + return { + x1: 0, + y1: 0, + x2: width, + y2: height, + w: width, + h: height + }; + }, + multiClickDebounceTime: function multiClickDebounceTime(_int) { + if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime; + return this; // chaining + } + }; // aliases + + corefn$1.centre = corefn$1.center; // backwards compatibility + + corefn$1.autolockNodes = corefn$1.autolock; + corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; + + var fn = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }) + }; // aliases + + fn.attr = fn.data; + fn.removeAttr = fn.removeData; + + var Core = function Core(opts) { + var cy = this; + opts = extend({}, opts); + var container = opts.container; // allow for passing a wrapped jquery object + // e.g. cytoscape({ container: $('#cy') }) + + if (container && !htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + + var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery + + reg = reg || {}; + + if (reg && reg.cy) { + reg.cy.destroy(); + reg = {}; // old instance => replace reg completely + } + + var readies = reg.readies = reg.readies || []; + + if (container) { + container._cyreg = reg; + } // make sure container assoc'd reg points to this cy + + + reg.cy = cy; + var head = window$1 !== undefined && container !== undefined && !opts.headless; + var options = opts; + options.layout = extend({ + name: head ? 'grid' : 'null' + }, options.layout); + options.renderer = extend({ + name: head ? 'canvas' : 'null' + }, options.renderer); + + var defVal = function defVal(def, val, altVal) { + if (val !== undefined) { + return val; + } else if (altVal !== undefined) { + return altVal; + } else { + return def; + } + }; + + var _p = this._private = { + container: container, + // html dom ele container + ready: false, + // whether ready has been triggered + options: options, + // cached options + elements: new Collection(this), + // elements in the graph + listeners: [], + // list of listeners + aniEles: new Collection(this), + // elements being animated + data: options.data || {}, + // data for the core + scratch: {}, + // scratch object for core + layout: null, + renderer: null, + destroyed: false, + // whether destroy was called + notificationsEnabled: true, + // whether notifications are sent to the renderer + minZoom: 1e-50, + maxZoom: 1e50, + zoomingEnabled: defVal(true, options.zoomingEnabled), + userZoomingEnabled: defVal(true, options.userZoomingEnabled), + panningEnabled: defVal(true, options.panningEnabled), + userPanningEnabled: defVal(true, options.userPanningEnabled), + boxSelectionEnabled: defVal(true, options.boxSelectionEnabled), + autolock: defVal(false, options.autolock, options.autolockNodes), + autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes), + autounselectify: defVal(false, options.autounselectify), + styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled, + zoom: number$1(options.zoom) ? options.zoom : 1, + pan: { + x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0, + y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0 + }, + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + hasCompoundNodes: false, + multiClickDebounceTime: defVal(250, options.multiClickDebounceTime) + }; + + this.createEmitter(); // set selection type + + this.selectionType(options.selectionType); // init zoom bounds + + this.zoomRange({ + min: options.minZoom, + max: options.maxZoom + }); + + var loadExtData = function loadExtData(extData, next) { + var anyIsPromise = extData.some(promise); + + if (anyIsPromise) { + return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init + } else { + next(extData); // exec synchronously for convenience + } + }; // start with the default stylesheet so we have something before loading an external stylesheet + + + if (_p.styleEnabled) { + cy.setStyle([]); + } // create the renderer + + + var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options + + cy.initRenderer(rendererOptions); + + var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) { + cy.notifications(false); // remove old elements + + var oldEles = cy.mutableElements(); + + if (oldEles.length > 0) { + oldEles.remove(); + } + + if (elements != null) { + if (plainObject(elements) || array(elements)) { + cy.add(elements); + } + } + + cy.one('layoutready', function (e) { + cy.notifications(true); + cy.emit(e); // we missed this event by turning notifications off, so pass it on + + cy.one('load', onload); + cy.emitAndNotify('load'); + }).one('layoutstop', function () { + cy.one('done', ondone); + cy.emit('done'); + }); + var layoutOpts = extend({}, cy._private.options.layout); + layoutOpts.eles = cy.elements(); + cy.layout(layoutOpts).run(); + }; + + loadExtData([options.style, options.elements], function (thens) { + var initStyle = thens[0]; + var initEles = thens[1]; // init style + + if (_p.styleEnabled) { + cy.style().append(initStyle); + } // initial load + + + setElesAndLayout(initEles, function () { + // onready + cy.startAnimationLoop(); + _p.ready = true; // if a ready callback is specified as an option, the bind it + + if (fn$6(options.ready)) { + cy.on('ready', options.ready); + } // bind all the ready handlers registered before creating this instance + + + for (var i = 0; i < readies.length; i++) { + var fn = readies[i]; + cy.on('ready', fn); + } + + if (reg) { + reg.readies = []; + } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc + + + cy.emit('ready'); + }, options.done); + }); + }; + + var corefn = Core.prototype; // short alias + + extend(corefn, { + instanceString: function instanceString() { + return 'core'; + }, + isReady: function isReady() { + return this._private.ready; + }, + destroyed: function destroyed() { + return this._private.destroyed; + }, + ready: function ready(fn) { + if (this.isReady()) { + this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event + } else { + this.on('ready', fn); + } + + return this; + }, + destroy: function destroy() { + var cy = this; + if (cy.destroyed()) return; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + this.emit('destroy'); + cy._private.destroyed = true; + return cy; + }, + hasElementWithId: function hasElementWithId(id) { + return this._private.elements.hasElementWithId(id); + }, + getElementById: function getElementById(id) { + return this._private.elements.getElementById(id); + }, + hasCompoundNodes: function hasCompoundNodes() { + return this._private.hasCompoundNodes; + }, + headless: function headless() { + return this._private.renderer.isHeadless(); + }, + styleEnabled: function styleEnabled() { + return this._private.styleEnabled; + }, + addToPool: function addToPool(eles) { + this._private.elements.merge(eles); + + return this; // chaining + }, + removeFromPool: function removeFromPool(eles) { + this._private.elements.unmerge(eles); + + return this; + }, + container: function container() { + return this._private.container || null; + }, + mount: function mount(container) { + if (container == null) { + return; + } + + var cy = this; + var _p = cy._private; + var options = _p.options; + + if (!htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + + cy.stopAnimationLoop(); + cy.destroyRenderer(); + _p.container = container; + _p.styleEnabled = true; + cy.invalidateSize(); + cy.initRenderer(extend({}, options, options.renderer, { + // allow custom renderer name to be re-used, otherwise use canvas + name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name + })); + cy.startAnimationLoop(); + cy.style(options.style); + cy.emit('mount'); + return cy; + }, + unmount: function unmount() { + var cy = this; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + cy.initRenderer({ + name: 'null' + }); + cy.emit('unmount'); + return cy; + }, + options: function options() { + return copy(this._private.options); + }, + json: function json(obj) { + var cy = this; + var _p = cy._private; + var eles = cy.mutableElements(); + + var getFreshRef = function getFreshRef(ele) { + return cy.getElementById(ele.id()); + }; + + if (plainObject(obj)) { + // set + cy.startBatch(); + + if (obj.elements) { + var idInJson = {}; + + var updateEles = function updateEles(jsons, gr) { + var toAdd = []; + var toMod = []; + + for (var i = 0; i < jsons.length; i++) { + var json = jsons[i]; + + if (!json.data.id) { + warn('cy.json() cannot handle elements without an ID attribute'); + continue; + } + + var id = '' + json.data.id; // id must be string + + var ele = cy.getElementById(id); + idInJson[id] = true; + + if (ele.length !== 0) { + // existing element should be updated + toMod.push({ + ele: ele, + json: json + }); + } else { + // otherwise should be added + if (gr) { + json.group = gr; + toAdd.push(json); + } else { + toAdd.push(json); + } + } + } + + cy.add(toAdd); + + for (var _i = 0; _i < toMod.length; _i++) { + var _toMod$_i = toMod[_i], + _ele = _toMod$_i.ele, + _json = _toMod$_i.json; + + _ele.json(_json); + } + }; + + if (array(obj.elements)) { + // elements: [] + updateEles(obj.elements); + } else { + // elements: { nodes: [], edges: [] } + var grs = ['nodes', 'edges']; + + for (var i = 0; i < grs.length; i++) { + var gr = grs[i]; + var elements = obj.elements[gr]; + + if (array(elements)) { + updateEles(elements, gr); + } + } + } + + var parentsToRemove = cy.collection(); + eles.filter(function (ele) { + return !idInJson[ele.id()]; + }).forEach(function (ele) { + if (ele.isParent()) { + parentsToRemove.merge(ele); + } else { + ele.remove(); + } + }); // so that children are not removed w/parent + + parentsToRemove.forEach(function (ele) { + return ele.children().move({ + parent: null + }); + }); // intermediate parents may be moved by prior line, so make sure we remove by fresh refs + + parentsToRemove.forEach(function (ele) { + return getFreshRef(ele).remove(); + }); + } + + if (obj.style) { + cy.style(obj.style); + } + + if (obj.zoom != null && obj.zoom !== _p.zoom) { + cy.zoom(obj.zoom); + } + + if (obj.pan) { + if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) { + cy.pan(obj.pan); + } + } + + if (obj.data) { + cy.data(obj.data); + } + + var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime']; + + for (var _i2 = 0; _i2 < fields.length; _i2++) { + var f = fields[_i2]; + + if (obj[f] != null) { + cy[f](obj[f]); + } + } + + cy.endBatch(); + return this; // chaining + } else { + // get + var flat = !!obj; + var json = {}; + + if (flat) { + json.elements = this.elements().map(function (ele) { + return ele.json(); + }); + } else { + json.elements = {}; + eles.forEach(function (ele) { + var group = ele.group(); + + if (!json.elements[group]) { + json.elements[group] = []; + } + + json.elements[group].push(ele.json()); + }); + } + + if (this._private.styleEnabled) { + json.style = cy.style().json(); + } + + json.data = copy(cy.data()); + var options = _p.options; + json.zoomingEnabled = _p.zoomingEnabled; + json.userZoomingEnabled = _p.userZoomingEnabled; + json.zoom = _p.zoom; + json.minZoom = _p.minZoom; + json.maxZoom = _p.maxZoom; + json.panningEnabled = _p.panningEnabled; + json.userPanningEnabled = _p.userPanningEnabled; + json.pan = copy(_p.pan); + json.boxSelectionEnabled = _p.boxSelectionEnabled; + json.renderer = copy(options.renderer); + json.hideEdgesOnViewport = options.hideEdgesOnViewport; + json.textureOnViewport = options.textureOnViewport; + json.wheelSensitivity = options.wheelSensitivity; + json.motionBlur = options.motionBlur; + json.multiClickDebounceTime = options.multiClickDebounceTime; + return json; + } + } + }); + corefn.$id = corefn.getElementById; + [corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) { + extend(corefn, props); + }); + + /* eslint-disable no-unused-vars */ + + var defaults$7 = { + fit: true, + // whether to fit the viewport to the graph + directed: false, + // whether the tree is directed downwards (or edges can point in any direction if false) + padding: 30, + // padding on fit + circle: false, + // put depths in concentric circles if true, put depths top down if false + grid: false, + // whether to create an even grid into which the DAG is placed (circle:false only) + spacingFactor: 1.75, + // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + roots: undefined, + // the roots of the trees + depthSort: undefined, + // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled, + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + var deprecatedOptionDefaults = { + maximal: false, + // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also + acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops + + }; + /* eslint-enable */ + + var getInfo = function getInfo(ele) { + return ele.scratch('breadthfirst'); + }; + + var setInfo = function setInfo(ele, obj) { + return ele.scratch('breadthfirst', obj); + }; + + function BreadthFirstLayout(options) { + this.options = extend({}, defaults$7, deprecatedOptionDefaults, options); + } + + BreadthFirstLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().filter(function (n) { + return !n.isParent(); + }); + var graph = eles; + var directed = options.directed; + var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var roots; + + if (elementOrCollection(options.roots)) { + roots = options.roots; + } else if (array(options.roots)) { + var rootsArray = []; + + for (var i = 0; i < options.roots.length; i++) { + var id = options.roots[i]; + var ele = cy.getElementById(id); + rootsArray.push(ele); + } + + roots = cy.collection(rootsArray); + } else if (string(options.roots)) { + roots = cy.$(options.roots); + } else { + if (directed) { + roots = nodes.roots(); + } else { + var components = eles.components(); + roots = cy.collection(); + + var _loop = function _loop(_i) { + var comp = components[_i]; + var maxDegree = comp.maxDegree(false); + var compRoots = comp.filter(function (ele) { + return ele.degree(false) === maxDegree; + }); + roots = roots.add(compRoots); + }; + + for (var _i = 0; _i < components.length; _i++) { + _loop(_i); + } + } + } + + var depths = []; + var foundByBfs = {}; + + var addToDepth = function addToDepth(ele, d) { + if (depths[d] == null) { + depths[d] = []; + } + + var i = depths[d].length; + depths[d].push(ele); + setInfo(ele, { + index: i, + depth: d + }); + }; + + var changeDepth = function changeDepth(ele, newDepth) { + var _getInfo = getInfo(ele), + depth = _getInfo.depth, + index = _getInfo.index; + + depths[depth][index] = null; + addToDepth(ele, newDepth); + }; // find the depths of the nodes + + + graph.bfs({ + roots: roots, + directed: options.directed, + visit: function visit(node, edge, pNode, i, depth) { + var ele = node[0]; + var id = ele.id(); + addToDepth(ele, depth); + foundByBfs[id] = true; + } + }); // check for nodes not found by bfs + + var orphanNodes = []; + + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + + if (foundByBfs[_ele.id()]) { + continue; + } else { + orphanNodes.push(_ele); + } + } // assign the nodes a depth and index + + + var assignDepthsAt = function assignDepthsAt(i) { + var eles = depths[i]; + + for (var j = 0; j < eles.length; j++) { + var _ele2 = eles[j]; + + if (_ele2 == null) { + eles.splice(j, 1); + j--; + continue; + } + + setInfo(_ele2, { + depth: i, + index: j + }); + } + }; + + var assignDepths = function assignDepths() { + for (var _i3 = 0; _i3 < depths.length; _i3++) { + assignDepthsAt(_i3); + } + }; + + var adjustMaximally = function adjustMaximally(ele, shifted) { + var eInfo = getInfo(ele); + var incomers = ele.incomers().filter(function (el) { + return el.isNode() && eles.has(el); + }); + var maxDepth = -1; + var id = ele.id(); + + for (var k = 0; k < incomers.length; k++) { + var incmr = incomers[k]; + var iInfo = getInfo(incmr); + maxDepth = Math.max(maxDepth, iInfo.depth); + } + + if (eInfo.depth <= maxDepth) { + if (!options.acyclic && shifted[id]) { + return null; + } + + var newDepth = maxDepth + 1; + changeDepth(ele, newDepth); + shifted[id] = newDepth; + return true; + } + + return false; + }; // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1) + + + if (directed && maximal) { + var Q = []; + var shifted = {}; + + var enqueue = function enqueue(n) { + return Q.push(n); + }; + + var dequeue = function dequeue() { + return Q.shift(); + }; + + nodes.forEach(function (n) { + return Q.push(n); + }); + + while (Q.length > 0) { + var _ele3 = dequeue(); + + var didShift = adjustMaximally(_ele3, shifted); + + if (didShift) { + _ele3.outgoers().filter(function (el) { + return el.isNode() && eles.has(el); + }).forEach(enqueue); + } else if (didShift === null) { + warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.'); + break; // exit on failure + } + } + } + + assignDepths(); // clear holes + // find min distance we need to leave between nodes + + var minDistance = 0; + + if (options.avoidOverlap) { + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var n = nodes[_i4]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + } // get the weighted percent for an element based on its connectivity to other levels + + + var cachedWeightedPercent = {}; + + var getWeightedPercent = function getWeightedPercent(ele) { + if (cachedWeightedPercent[ele.id()]) { + return cachedWeightedPercent[ele.id()]; + } + + var eleDepth = getInfo(ele).depth; + var neighbors = ele.neighborhood(); + var percent = 0; + var samples = 0; + + for (var _i5 = 0; _i5 < neighbors.length; _i5++) { + var neighbor = neighbors[_i5]; + + if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) { + continue; + } + + var bf = getInfo(neighbor); + + if (bf == null) { + continue; + } + + var index = bf.index; + var depth = bf.depth; // unassigned neighbours shouldn't affect the ordering + + if (index == null || depth == null) { + continue; + } + + var nDepth = depths[depth].length; + + if (depth < eleDepth) { + // only get influenced by elements above + percent += index / nDepth; + samples++; + } + } + + samples = Math.max(1, samples); + percent = percent / samples; + + if (samples === 0) { + // put lone nodes at the start + percent = 0; + } + + cachedWeightedPercent[ele.id()] = percent; + return percent; + }; // rearrange the indices in each depth level based on connectivity + + + var sortFn = function sortFn(a, b) { + var apct = getWeightedPercent(a); + var bpct = getWeightedPercent(b); + var diff = apct - bpct; + + if (diff === 0) { + return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons + } else { + return diff; + } + }; + + if (options.depthSort !== undefined) { + sortFn = options.depthSort; + } // sort each level to make connected nodes closer + + + for (var _i6 = 0; _i6 < depths.length; _i6++) { + depths[_i6].sort(sortFn); + + assignDepthsAt(_i6); + } // assign orphan nodes to a new top-level depth + + + var orphanDepth = []; + + for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) { + orphanDepth.push(orphanNodes[_i7]); + } + + depths.unshift(orphanDepth); + assignDepths(); + var biggestDepthSize = 0; + + for (var _i8 = 0; _i8 < depths.length; _i8++) { + biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); + } + + var center = { + x: bb.x1 + bb.w / 2, + y: bb.x1 + bb.h / 2 + }; + var maxDepthSize = depths.reduce(function (max, eles) { + return Math.max(max, eles.length); + }, 0); + + var getPosition = function getPosition(ele) { + var _getInfo2 = getInfo(ele), + depth = _getInfo2.depth, + index = _getInfo2.index; + + var depthSize = depths[depth].length; + var distanceX = Math.max(bb.w / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance); + var distanceY = Math.max(bb.h / (depths.length + 1), minDistance); + var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length); + radiusStepSize = Math.max(radiusStepSize, minDistance); + + if (!options.circle) { + var epos = { + x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX, + y: (depth + 1) * distanceY + }; + return epos; + } else { + var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0); + var theta = 2 * Math.PI / depths[depth].length * index; + + if (depth === 0 && depths[0].length === 1) { + radius = 1; + } + + return { + x: center.x + radius * Math.cos(theta), + y: center.y + radius * Math.sin(theta) + }; + } + }; + + eles.nodes().layoutPositions(this, options, getPosition); + return this; // chaining + }; + + var defaults$6 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox and radius if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + radius: undefined, + // the radius of the circle + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function CircleLayout(options) { + this.options = extend({}, defaults$6, options); + } + + CircleLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var nodes = eles.nodes().not(':parent'); + + if (options.sort) { + nodes = nodes.sort(options.sort); + } + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep; + var dTheta = sweep / Math.max(1, nodes.length - 1); + var r; + var minDistance = 0; + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + + if (number$1(options.radius)) { + r = options.radius; + } else if (nodes.length <= 1) { + r = 0; + } else { + r = Math.min(bb.h, bb.w) / 2 - minDistance; + } // calculate the radius + + + if (nodes.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + minDistance *= 1.75; // just to have some nice spacing + + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + + var getPos = function getPos(ele, i) { + var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1); + var rx = r * Math.cos(theta); + var ry = r * Math.sin(theta); + var pos = { + x: center.x + rx, + y: center.y + ry + }; + return pos; + }; + + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining + }; + + var defaults$5 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + equidistant: false, + // whether levels have an equal radial distance betwen them, may cause bounding box overflow + minNodeSpacing: 10, + // min spacing between outside of nodes (used for radius adjustment) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + height: undefined, + // height of layout area (overrides container height) + width: undefined, + // width of layout area (overrides container width) + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + concentric: function concentric(node) { + // returns numeric value for each node, placing higher nodes in levels towards the centre + return node.degree(); + }, + levelWidth: function levelWidth(nodes) { + // the variation of concentric values in each level + return nodes.maxDegree() / 4; + }, + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function ConcentricLayout(options) { + this.options = extend({}, defaults$5, options); + } + + ConcentricLayout.prototype.run = function () { + var params = this.options; + var options = params; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var nodeValues = []; // { node, value } + + var maxNodeSize = 0; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var value = void 0; // calculate the node value + + value = options.concentric(node); + nodeValues.push({ + value: value, + node: node + }); // for style mapping + + node._private.scratch.concentric = value; + } // in case we used the `concentric` in style + + + nodes.updateStyle(); // calculate max size now based on potentially updated mappers + + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + + var nbb = _node.layoutDimensions(options); + + maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); + } // sort node values in descreasing order + + + nodeValues.sort(function (a, b) { + return b.value - a.value; + }); + var levelWidth = options.levelWidth(nodes); // put the values into levels + + var levels = [[]]; + var currentLevel = levels[0]; + + for (var _i2 = 0; _i2 < nodeValues.length; _i2++) { + var val = nodeValues[_i2]; + + if (currentLevel.length > 0) { + var diff = Math.abs(currentLevel[0].value - val.value); + + if (diff >= levelWidth) { + currentLevel = []; + levels.push(currentLevel); + } + } + + currentLevel.push(val); + } // create positions from levels + + + var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes + + if (!options.avoidOverlap) { + // then strictly constrain to bb + var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; + var maxR = Math.min(bb.w, bb.h) / 2 - minDist; + var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0); + minDist = Math.min(minDist, rStep); + } // find the metrics for each level + + + var r = 0; + + for (var _i3 = 0; _i3 < levels.length; _i3++) { + var level = levels[_i3]; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep; + var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); // calculate the radius + + if (level.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + + level.r = r; + r += minDist; + } + + if (options.equidistant) { + var rDeltaMax = 0; + var _r = 0; + + for (var _i4 = 0; _i4 < levels.length; _i4++) { + var _level = levels[_i4]; + var rDelta = _level.r - _r; + rDeltaMax = Math.max(rDeltaMax, rDelta); + } + + _r = 0; + + for (var _i5 = 0; _i5 < levels.length; _i5++) { + var _level2 = levels[_i5]; + + if (_i5 === 0) { + _r = _level2.r; + } + + _level2.r = _r; + _r += rDeltaMax; + } + } // calculate the node positions + + + var pos = {}; // id => position + + for (var _i6 = 0; _i6 < levels.length; _i6++) { + var _level3 = levels[_i6]; + var _dTheta = _level3.dTheta; + var _r2 = _level3.r; + + for (var j = 0; j < _level3.length; j++) { + var _val = _level3[j]; + var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j; + var p = { + x: center.x + _r2 * Math.cos(theta), + y: center.y + _r2 * Math.sin(theta) + }; + pos[_val.node.id()] = p; + } + } // position the nodes + + + eles.nodes().layoutPositions(this, options, function (ele) { + var id = ele.id(); + return pos[id]; + }); + return this; // chaining + }; + + /* + The CoSE layout was written by Gerardo Huck. + https://www.linkedin.com/in/gerardohuck/ + + Based on the following article: + http://dl.acm.org/citation.cfm?id=1498047 + + Modifications tracked on Github. + */ + var DEBUG; + /** + * @brief : default layout options + */ + + var defaults$4 = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // Whether to animate while running the layout + // true : Animate continuously as the layout is running + // false : Just show the end result + // 'end' : Animate with the end result, from the initial positions to the end positions + animate: true, + // Easing of the animation for animate:'end' + animationEasing: undefined, + // The duration of the animation for animate:'end' + animationDuration: undefined, + // A function that determines whether the node should be animated + // All nodes animated by default on animate enabled + // Non-animated nodes are positioned immediately when the layout starts + animateFilter: function animateFilter(node, i) { + return true; + }, + // The layout animates only after this many milliseconds for animate:true + // (prevents flashing on fast runs) + animationThreshold: 250, + // Number of iterations between consecutive screen positions update + refresh: 20, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 30, + // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + boundingBox: undefined, + // Excludes the label when calculating node bounding boxes for the layout algorithm + nodeDimensionsIncludeLabels: false, + // Randomize the initial positions of the nodes (true) or use existing positions (false) + randomize: false, + // Extra spacing between components in non-compound graphs + componentSpacing: 40, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: function nodeRepulsion(node) { + return 2048; + }, + // Node repulsion (overlapping) multiplier + nodeOverlap: 4, + // Ideal edge (non nested) length + idealEdgeLength: function idealEdgeLength(edge) { + return 32; + }, + // Divisor to compute edge forces + edgeElasticity: function edgeElasticity(edge) { + return 32; + }, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 1.2, + // Gravity force (constant) + gravity: 1, + // Maximum number of iterations to perform + numIter: 1000, + // Initial temperature (maximum node displacement) + initialTemp: 1000, + // Cooling factor (how the temperature is reduced between consecutive iterations + coolingFactor: 0.99, + // Lower temperature threshold (below this point the layout will end) + minTemp: 1.0 + }; + /** + * @brief : constructor + * @arg options : object containing layout options + */ + + function CoseLayout(options) { + this.options = extend({}, defaults$4, options); + this.options.layout = this; + } + /** + * @brief : runs the layout + */ + + + CoseLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var layout = this; + layout.stopped = false; + + if (options.animate === true || options.animate === false) { + layout.emit({ + type: 'layoutstart', + layout: layout + }); + } // Set DEBUG - Global variable + + + if (true === options.debug) { + DEBUG = true; + } else { + DEBUG = false; + } // Initialize layout info + + + var layoutInfo = createLayoutInfo(cy, layout, options); // Show LayoutInfo contents if debugging + + if (DEBUG) { + printLayoutInfo(layoutInfo); + } // If required, randomize node positions + + + if (options.randomize) { + randomizePositions(layoutInfo); + } + + var startTime = performanceNow(); + + var refresh = function refresh() { + refreshPositions(layoutInfo, cy, options); // Fit the graph if necessary + + if (true === options.fit) { + cy.fit(options.padding); + } + }; + + var mainLoop = function mainLoop(i) { + if (layout.stopped || i >= options.numIter) { + // logDebug("Layout manually stopped. Stopping computation in step " + i); + return false; + } // Do one step in the phisical simulation + + + step(layoutInfo, options); // Update temperature + + layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; // logDebug("New temperature: " + layoutInfo.temperature); + + if (layoutInfo.temperature < options.minTemp) { + // logDebug("Temperature drop below minimum threshold. Stopping computation in step " + i); + return false; + } + + return true; + }; + + var done = function done() { + if (options.animate === true || options.animate === false) { + refresh(); // Layout has finished + + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } else { + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.layoutPositions(layout, options, getScaledPos); + } + }; + + var i = 0; + var loopRet = true; + + if (options.animate === true) { + var frame = function frame() { + var f = 0; + + while (loopRet && f < options.refresh) { + loopRet = mainLoop(i); + i++; + f++; + } + + if (!loopRet) { + // it's done + separateComponents(layoutInfo, options); + done(); + } else { + var now = performanceNow(); + + if (now - startTime >= options.animationThreshold) { + refresh(); + } + + requestAnimationFrame(frame); + } + }; + + frame(); + } else { + while (loopRet) { + loopRet = mainLoop(i); + i++; + } + + separateComponents(layoutInfo, options); + done(); + } + + return this; // chaining + }; + /** + * @brief : called on continuous layouts to stop them before they finish + */ + + + CoseLayout.prototype.stop = function () { + this.stopped = true; + + if (this.thread) { + this.thread.stop(); + } + + this.emit('layoutstop'); + return this; // chaining + }; + + CoseLayout.prototype.destroy = function () { + if (this.thread) { + this.thread.stop(); + } + + return this; // chaining + }; + /** + * @brief : Creates an object which is contains all the data + * used in the layout process + * @arg cy : cytoscape.js object + * @return : layoutInfo object initialized + */ + + + var createLayoutInfo = function createLayoutInfo(cy, layout, options) { + // Shortcut + var edges = options.eles.edges(); + var nodes = options.eles.nodes(); + var layoutInfo = { + isCompound: cy.hasCompoundNodes(), + layoutNodes: [], + idToIndex: {}, + nodeSize: nodes.size(), + graphSet: [], + indexToGraph: [], + layoutEdges: [], + edgeSize: edges.size(), + temperature: options.initialTemp, + clientWidth: cy.width(), + clientHeight: cy.width(), + boundingBox: makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }) + }; + var components = options.eles.components(); + var id2cmptId = {}; + + for (var i = 0; i < components.length; i++) { + var component = components[i]; + + for (var j = 0; j < component.length; j++) { + var node = component[j]; + id2cmptId[node.id()] = i; + } + } // Iterate over all nodes, creating layout nodes + + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var tempNode = {}; + tempNode.isLocked = n.locked(); + tempNode.id = n.data('id'); + tempNode.parentId = n.data('parent'); + tempNode.cmptId = id2cmptId[n.id()]; + tempNode.children = []; + tempNode.positionX = n.position('x'); + tempNode.positionY = n.position('y'); + tempNode.offsetX = 0; + tempNode.offsetY = 0; + tempNode.height = nbb.w; + tempNode.width = nbb.h; + tempNode.maxX = tempNode.positionX + tempNode.width / 2; + tempNode.minX = tempNode.positionX - tempNode.width / 2; + tempNode.maxY = tempNode.positionY + tempNode.height / 2; + tempNode.minY = tempNode.positionY - tempNode.height / 2; + tempNode.padLeft = parseFloat(n.style('padding')); + tempNode.padRight = parseFloat(n.style('padding')); + tempNode.padTop = parseFloat(n.style('padding')); + tempNode.padBottom = parseFloat(n.style('padding')); // forces + + tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion; // Add new node + + layoutInfo.layoutNodes.push(tempNode); // Add entry to id-index map + + layoutInfo.idToIndex[tempNode.id] = i; + } // Inline implementation of a queue, used for traversing the graph in BFS order + + + var queue = []; + var start = 0; // Points to the start the queue + + var end = -1; // Points to the end of the queue + + var tempGraph = []; // Second pass to add child information and + // initialize queue for hierarchical traversal + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + var p_id = n.parentId; // Check if node n has a parent node + + if (null != p_id) { + // Add node Id to parent's list of children + layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id); + } else { + // If a node doesn't have a parent, then it's in the root graph + queue[++end] = n.id; + tempGraph.push(n.id); + } + } // Add root graph to graphSet + + + layoutInfo.graphSet.push(tempGraph); // Traverse the graph, level by level, + + while (start <= end) { + // Get the node to visit and remove it from queue + var node_id = queue[start++]; + var node_ix = layoutInfo.idToIndex[node_id]; + var node = layoutInfo.layoutNodes[node_ix]; + var children = node.children; + + if (children.length > 0) { + // Add children nodes as a new graph to graph set + layoutInfo.graphSet.push(children); // Add children to que queue to be visited + + for (var i = 0; i < children.length; i++) { + queue[++end] = children[i]; + } + } + } // Create indexToGraph map + + + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + + for (var j = 0; j < graph.length; j++) { + var index = layoutInfo.idToIndex[graph[j]]; + layoutInfo.indexToGraph[index] = i; + } + } // Iterate over all edges, creating Layout Edges + + + for (var i = 0; i < layoutInfo.edgeSize; i++) { + var e = edges[i]; + var tempEdge = {}; + tempEdge.id = e.data('id'); + tempEdge.sourceId = e.data('source'); + tempEdge.targetId = e.data('target'); // Compute ideal length + + var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength; + var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity; // Check if it's an inter graph edge + + var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId]; + var targetIx = layoutInfo.idToIndex[tempEdge.targetId]; + var sourceGraph = layoutInfo.indexToGraph[sourceIx]; + var targetGraph = layoutInfo.indexToGraph[targetIx]; + + if (sourceGraph != targetGraph) { + // Find lowest common graph ancestor + var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); // Compute sum of node depths, relative to lca graph + + var lcaGraph = layoutInfo.graphSet[lca]; + var depth = 0; // Source depth + + var tempNode = layoutInfo.layoutNodes[sourceIx]; + + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } // Target depth + + + tempNode = layoutInfo.layoutNodes[targetIx]; + + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId + + // ". Index: " + lca + " Contents: " + lcaGraph.toString() + + // ". Depth: " + depth); + // Update idealLength + + + idealLength *= depth * options.nestingFactor; + } + + tempEdge.idealLength = idealLength; + tempEdge.elasticity = elasticity; + layoutInfo.layoutEdges.push(tempEdge); + } // Finally, return layoutInfo object + + + return layoutInfo; + }; + /** + * @brief : This function finds the index of the lowest common + * graph ancestor between 2 nodes in the subtree + * (from the graph hierarchy induced tree) whose + * root is graphIx + * + * @arg node1: node1's ID + * @arg node2: node2's ID + * @arg layoutInfo: layoutInfo object + * + */ + + + var findLCA = function findLCA(node1, node2, layoutInfo) { + // Find their common ancester, starting from the root graph + var res = findLCA_aux(node1, node2, 0, layoutInfo); + + if (2 > res.count) { + // If aux function couldn't find the common ancester, + // then it is the root graph + return 0; + } else { + return res.graph; + } + }; + /** + * @brief : Auxiliary function used for LCA computation + * + * @arg node1 : node1's ID + * @arg node2 : node2's ID + * @arg graphIx : subgraph index + * @arg layoutInfo : layoutInfo object + * + * @return : object of the form {count: X, graph: Y}, where: + * X is the number of ancestors (max: 2) found in + * graphIx (and it's subgraphs), + * Y is the graph index of the lowest graph containing + * all X nodes + */ + + + var findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) { + var graph = layoutInfo.graphSet[graphIx]; // If both nodes belongs to graphIx + + if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) { + return { + count: 2, + graph: graphIx + }; + } // Make recursive calls for all subgraphs + + + var c = 0; + + for (var i = 0; i < graph.length; i++) { + var nodeId = graph[i]; + var nodeIx = layoutInfo.idToIndex[nodeId]; + var children = layoutInfo.layoutNodes[nodeIx].children; // If the node has no child, skip it + + if (0 === children.length) { + continue; + } + + var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]]; + var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo); + + if (0 === result.count) { + // Neither node1 nor node2 are present in this subgraph + continue; + } else if (1 === result.count) { + // One of (node1, node2) is present in this subgraph + c++; + + if (2 === c) { + // We've already found both nodes, no need to keep searching + break; + } + } else { + // Both nodes are present in this subgraph + return result; + } + } + + return { + count: c, + graph: graphIx + }; + }; + /** + * @brief: printsLayoutInfo into js console + * Only used for debbuging + */ + + +var printLayoutInfo; + /** + * @brief : Randomizes the position of all nodes + */ + + + var randomizePositions = function randomizePositions(layoutInfo, cy) { + var width = layoutInfo.clientWidth; + var height = layoutInfo.clientHeight; + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; // No need to randomize compound nodes or locked nodes + + if (0 === n.children.length && !n.isLocked) { + n.positionX = Math.random() * width; + n.positionY = Math.random() * height; + } + } + }; + + var getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) { + var bb = layoutInfo.boundingBox; + var coseBB = { + x1: Infinity, + x2: -Infinity, + y1: Infinity, + y2: -Infinity + }; + + if (options.boundingBox) { + nodes.forEach(function (node) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]]; + coseBB.x1 = Math.min(coseBB.x1, lnode.positionX); + coseBB.x2 = Math.max(coseBB.x2, lnode.positionX); + coseBB.y1 = Math.min(coseBB.y1, lnode.positionY); + coseBB.y2 = Math.max(coseBB.y2, lnode.positionY); + }); + coseBB.w = coseBB.x2 - coseBB.x1; + coseBB.h = coseBB.y2 - coseBB.y1; + } + + return function (ele, i) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]]; + + if (options.boundingBox) { + // then add extra bounding box constraint + var pctX = (lnode.positionX - coseBB.x1) / coseBB.w; + var pctY = (lnode.positionY - coseBB.y1) / coseBB.h; + return { + x: bb.x1 + pctX * bb.w, + y: bb.y1 + pctY * bb.h + }; + } else { + return { + x: lnode.positionX, + y: lnode.positionY + }; + } + }; + }; + /** + * @brief : Updates the positions of nodes in the network + * @arg layoutInfo : LayoutInfo object + * @arg cy : Cytoscape object + * @arg options : Layout options + */ + + + var refreshPositions = function refreshPositions(layoutInfo, cy, options) { + // var s = 'Refreshing positions'; + // logDebug(s); + var layout = options.layout; + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.positions(getScaledPos); // Trigger layoutReady only on first call + + if (true !== layoutInfo.ready) { + // s = 'Triggering layoutready'; + // logDebug(s); + layoutInfo.ready = true; + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: this + }); + } + }; + /** + * @brief : Logs a debug message in JS console, if DEBUG is ON + */ + // var logDebug = function(text) { + // if (DEBUG) { + // console.debug(text); + // } + // }; + + /** + * @brief : Performs one iteration of the physical simulation + * @arg layoutInfo : LayoutInfo object already initialized + * @arg cy : Cytoscape object + * @arg options : Layout options + */ + + + var step = function step(layoutInfo, options, _step) { + // var s = "\n\n###############################"; + // s += "\nSTEP: " + step; + // s += "\n###############################\n"; + // logDebug(s); + // Calculate node repulsions + calculateNodeForces(layoutInfo, options); // Calculate edge forces + + calculateEdgeForces(layoutInfo); // Calculate gravity forces + + calculateGravityForces(layoutInfo, options); // Propagate forces from parent to child + + propagateForces(layoutInfo); // Update positions based on calculated forces + + updatePositions(layoutInfo); + }; + /** + * @brief : Computes the node repulsion forces + */ + + + var calculateNodeForces = function calculateNodeForces(layoutInfo, options) { + // Go through each of the graphs in graphSet + // Nodes only repel each other if they belong to the same graph + // var s = 'calculateNodeForces'; + // logDebug(s); + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; // s = "Set: " + graph.toString(); + // logDebug(s); + // Now get all the pairs of nodes + // Only get each pair once, (A, B) = (B, A) + + for (var j = 0; j < numNodes; j++) { + var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; + + for (var k = j + 1; k < numNodes; k++) { + var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]]; + nodeRepulsion(node1, node2, layoutInfo, options); + } + } + } + }; + + var randomDistance = function randomDistance(max) { + return -max + 2 * max * Math.random(); + }; + /** + * @brief : Compute the node repulsion forces between a pair of nodes + */ + + + var nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) { + // var s = "Node repulsion. Node1: " + node1.id + " Node2: " + node2.id; + var cmptId1 = node1.cmptId; + var cmptId2 = node2.cmptId; + + if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) { + return; + } // Get direction of line connecting both node centers + + + var directionX = node2.positionX - node1.positionX; + var directionY = node2.positionY - node1.positionY; + var maxRandDist = 1; // s += "\ndirectionX: " + directionX + ", directionY: " + directionY; + // If both centers are the same, apply a random force + + if (0 === directionX && 0 === directionY) { + directionX = randomDistance(maxRandDist); + directionY = randomDistance(maxRandDist); + } + + var overlap = nodesOverlap(node1, node2, directionX, directionY); + + if (overlap > 0) { + // s += "\nNodes DO overlap."; + // s += "\nOverlap: " + overlap; + // If nodes overlap, repulsion force is proportional + // to the overlap + var force = options.nodeOverlap * overlap; // Compute the module and components of the force vector + + var distance = Math.sqrt(directionX * directionX + directionY * directionY); // s += "\nDistance: " + distance; + + var forceX = force * directionX / distance; + var forceY = force * directionY / distance; + } else { + // s += "\nNodes do NOT overlap."; + // If there's no overlap, force is inversely proportional + // to squared distance + // Get clipping points for both nodes + var point1 = findClippingPoint(node1, directionX, directionY); + var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY); // Use clipping points to compute distance + + var distanceX = point2.x - point1.x; + var distanceY = point2.y - point1.y; + var distanceSqr = distanceX * distanceX + distanceY * distanceY; + var distance = Math.sqrt(distanceSqr); // s += "\nDistance: " + distance; + // Compute the module and components of the force vector + + var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; + var forceX = force * distanceX / distance; + var forceY = force * distanceY / distance; + } // Apply force + + + if (!node1.isLocked) { + node1.offsetX -= forceX; + node1.offsetY -= forceY; + } + + if (!node2.isLocked) { + node2.offsetX += forceX; + node2.offsetY += forceY; + } // s += "\nForceX: " + forceX + " ForceY: " + forceY; + // logDebug(s); + + + return; + }; + /** + * @brief : Determines whether two nodes overlap or not + * @return : Amount of overlapping (0 => no overlap) + */ + + + var nodesOverlap = function nodesOverlap(node1, node2, dX, dY) { + if (dX > 0) { + var overlapX = node1.maxX - node2.minX; + } else { + var overlapX = node2.maxX - node1.minX; + } + + if (dY > 0) { + var overlapY = node1.maxY - node2.minY; + } else { + var overlapY = node2.maxY - node1.minY; + } + + if (overlapX >= 0 && overlapY >= 0) { + return Math.sqrt(overlapX * overlapX + overlapY * overlapY); + } else { + return 0; + } + }; + /** + * @brief : Finds the point in which an edge (direction dX, dY) intersects + * the rectangular bounding box of it's source/target node + */ + + + var findClippingPoint = function findClippingPoint(node, dX, dY) { + // Shorcuts + var X = node.positionX; + var Y = node.positionY; + var H = node.height || 1; + var W = node.width || 1; + var dirSlope = dY / dX; + var nodeSlope = H / W; // var s = 'Computing clipping point of node ' + node.id + + // " . Height: " + H + ", Width: " + W + + // "\nDirection " + dX + ", " + dY; + // + // Compute intersection + + var res = {}; // Case: Vertical direction (up) + + if (0 === dX && 0 < dY) { + res.x = X; // s += "\nUp direction"; + + res.y = Y + H / 2; + return res; + } // Case: Vertical direction (down) + + + if (0 === dX && 0 > dY) { + res.x = X; + res.y = Y + H / 2; // s += "\nDown direction"; + + return res; + } // Case: Intersects the right border + + + if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X + W / 2; + res.y = Y + W * dY / 2 / dX; // s += "\nRightborder"; + + return res; + } // Case: Intersects the left border + + + if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X - W / 2; + res.y = Y - W * dY / 2 / dX; // s += "\nLeftborder"; + + return res; + } // Case: Intersects the top border + + + if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X + H * dX / 2 / dY; + res.y = Y + H / 2; // s += "\nTop border"; + + return res; + } // Case: Intersects the bottom border + + + if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X - H * dX / 2 / dY; + res.y = Y - H / 2; // s += "\nBottom border"; + + return res; + } // s += "\nClipping point found at " + res.x + ", " + res.y; + // logDebug(s); + + + return res; + }; + /** + * @brief : Calculates all edge forces + */ + + + var calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) { + // Iterate over all edges + for (var i = 0; i < layoutInfo.edgeSize; i++) { + // Get edge, source & target nodes + var edge = layoutInfo.layoutEdges[i]; + var sourceIx = layoutInfo.idToIndex[edge.sourceId]; + var source = layoutInfo.layoutNodes[sourceIx]; + var targetIx = layoutInfo.idToIndex[edge.targetId]; + var target = layoutInfo.layoutNodes[targetIx]; // Get direction of line connecting both node centers + + var directionX = target.positionX - source.positionX; + var directionY = target.positionY - source.positionY; // If both centers are the same, do nothing. + // A random force has already been applied as node repulsion + + if (0 === directionX && 0 === directionY) { + continue; + } // Get clipping points for both nodes + + + var point1 = findClippingPoint(source, directionX, directionY); + var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY); + var lx = point2.x - point1.x; + var ly = point2.y - point1.y; + var l = Math.sqrt(lx * lx + ly * ly); + var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity; + + if (0 !== l) { + var forceX = force * lx / l; + var forceY = force * ly / l; + } else { + var forceX = 0; + var forceY = 0; + } // Add this force to target and source nodes + + + if (!source.isLocked) { + source.offsetX += forceX; + source.offsetY += forceY; + } + + if (!target.isLocked) { + target.offsetX -= forceX; + target.offsetY -= forceY; + } // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id; + // s += "\nDistance: " + l + " Force: (" + forceX + ", " + forceY + ")"; + // logDebug(s); + + } + }; + /** + * @brief : Computes gravity forces for all nodes + */ + + + var calculateGravityForces = function calculateGravityForces(layoutInfo, options) { + if (options.gravity === 0) { + return; + } + + var distThreshold = 1; // var s = 'calculateGravityForces'; + // logDebug(s); + + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; // s = "Set: " + graph.toString(); + // logDebug(s); + // Compute graph center + + if (0 === i) { + var centerX = layoutInfo.clientHeight / 2; + var centerY = layoutInfo.clientWidth / 2; + } else { + // Get Parent node for this graph, and use its position as center + var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]]; + var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; + var centerX = parent.positionX; + var centerY = parent.positionY; + } // s = "Center found at: " + centerX + ", " + centerY; + // logDebug(s); + // Apply force to all nodes in graph + + + for (var j = 0; j < numNodes; j++) { + var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; // s = "Node: " + node.id; + + if (node.isLocked) { + continue; + } + + var dx = centerX - node.positionX; + var dy = centerY - node.positionY; + var d = Math.sqrt(dx * dx + dy * dy); + + if (d > distThreshold) { + var fx = options.gravity * dx / d; + var fy = options.gravity * dy / d; + node.offsetX += fx; + node.offsetY += fy; // s += ": Applied force: " + fx + ", " + fy; + } // logDebug(s); + + } + } + }; + /** + * @brief : This function propagates the existing offsets from + * parent nodes to its descendents. + * @arg layoutInfo : layoutInfo Object + * @arg cy : cytoscape Object + * @arg options : Layout options + */ + + + var propagateForces = function propagateForces(layoutInfo, options) { + // Inline implementation of a queue, used for traversing the graph in BFS order + var queue = []; + var start = 0; // Points to the start the queue + + var end = -1; // Points to the end of the queue + // logDebug('propagateForces'); + // Start by visiting the nodes in the root graph + + queue.push.apply(queue, layoutInfo.graphSet[0]); + end += layoutInfo.graphSet[0].length; // Traverse the graph, level by level, + + while (start <= end) { + // Get the node to visit and remove it from queue + var nodeId = queue[start++]; + var nodeIndex = layoutInfo.idToIndex[nodeId]; + var node = layoutInfo.layoutNodes[nodeIndex]; + var children = node.children; // We only need to process the node if it's compound + + if (0 < children.length && !node.isLocked) { + var offX = node.offsetX; + var offY = node.offsetY; // var s = "Propagating offset from parent node : " + node.id + + // ". OffsetX: " + offX + ". OffsetY: " + offY; + // s += "\n Children: " + children.toString(); + // logDebug(s); + + for (var i = 0; i < children.length; i++) { + var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; // Propagate offset + + childNode.offsetX += offX; + childNode.offsetY += offY; // Add children to queue to be visited + + queue[++end] = children[i]; + } // Reset parent offsets + + + node.offsetX = 0; + node.offsetY = 0; + } + } + }; + /** + * @brief : Updates the layout model positions, based on + * the accumulated forces + */ + + + var updatePositions = function updatePositions(layoutInfo, options) { + // var s = 'Updating positions'; + // logDebug(s); + // Reset boundaries for compound nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length) { + // logDebug("Resetting boundaries of compound node: " + n.id); + n.maxX = undefined; + n.minX = undefined; + n.maxY = undefined; + n.minY = undefined; + } + } + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length || n.isLocked) { + // No need to set compound or locked node position + // logDebug("Skipping position update of node: " + n.id); + continue; + } // s = "Node: " + n.id + " Previous position: (" + + // n.positionX + ", " + n.positionY + ")."; + // Limit displacement in order to improve stability + + + var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature); + n.positionX += tempForce.x; + n.positionY += tempForce.y; + n.offsetX = 0; + n.offsetY = 0; + n.minX = n.positionX - n.width; + n.maxX = n.positionX + n.width; + n.minY = n.positionY - n.height; + n.maxY = n.positionY + n.height; // s += " New Position: (" + n.positionX + ", " + n.positionY + ")."; + // logDebug(s); + // Update ancestry boudaries + + updateAncestryBoundaries(n, layoutInfo); + } // Update size, position of compund nodes + + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length && !n.isLocked) { + n.positionX = (n.maxX + n.minX) / 2; + n.positionY = (n.maxY + n.minY) / 2; + n.width = n.maxX - n.minX; + n.height = n.maxY - n.minY; // s = "Updating position, size of compound node " + n.id; + // s += "\nPositionX: " + n.positionX + ", PositionY: " + n.positionY; + // s += "\nWidth: " + n.width + ", Height: " + n.height; + // logDebug(s); + } + } + }; + /** + * @brief : Limits a force (forceX, forceY) to be not + * greater (in modulo) than max. + 8 Preserves force direction. + */ + + + var limitForce = function limitForce(forceX, forceY, max) { + // var s = "Limiting force: (" + forceX + ", " + forceY + "). Max: " + max; + var force = Math.sqrt(forceX * forceX + forceY * forceY); + + if (force > max) { + var res = { + x: max * forceX / force, + y: max * forceY / force + }; + } else { + var res = { + x: forceX, + y: forceY + }; + } // s += ".\nResult: (" + res.x + ", " + res.y + ")"; + // logDebug(s); + + + return res; + }; + /** + * @brief : Function used for keeping track of compound node + * sizes, since they should bound all their subnodes. + */ + + + var updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) { + // var s = "Propagating new position/size of node " + node.id; + var parentId = node.parentId; + + if (null == parentId) { + // If there's no parent, we are done + // s += ". No parent node."; + // logDebug(s); + return; + } // Get Parent Node + + + var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; + var flag = false; // MaxX + + if (null == p.maxX || node.maxX + p.padRight > p.maxX) { + p.maxX = node.maxX + p.padRight; + flag = true; // s += "\nNew maxX for parent node " + p.id + ": " + p.maxX; + } // MinX + + + if (null == p.minX || node.minX - p.padLeft < p.minX) { + p.minX = node.minX - p.padLeft; + flag = true; // s += "\nNew minX for parent node " + p.id + ": " + p.minX; + } // MaxY + + + if (null == p.maxY || node.maxY + p.padBottom > p.maxY) { + p.maxY = node.maxY + p.padBottom; + flag = true; // s += "\nNew maxY for parent node " + p.id + ": " + p.maxY; + } // MinY + + + if (null == p.minY || node.minY - p.padTop < p.minY) { + p.minY = node.minY - p.padTop; + flag = true; // s += "\nNew minY for parent node " + p.id + ": " + p.minY; + } // If updated boundaries, propagate changes upward + + + if (flag) { + // logDebug(s); + return updateAncestryBoundaries(p, layoutInfo); + } // s += ". No changes in boundaries/position of parent node " + p.id; + // logDebug(s); + + + return; + }; + + var separateComponents = function separateComponents(layoutInfo, options) { + var nodes = layoutInfo.layoutNodes; + var components = []; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var cid = node.cmptId; + var component = components[cid] = components[cid] || []; + component.push(node); + } + + var totalA = 0; + + for (var i = 0; i < components.length; i++) { + var c = components[i]; + + if (!c) { + continue; + } + + c.x1 = Infinity; + c.x2 = -Infinity; + c.y1 = Infinity; + c.y2 = -Infinity; + + for (var j = 0; j < c.length; j++) { + var n = c[j]; + c.x1 = Math.min(c.x1, n.positionX - n.width / 2); + c.x2 = Math.max(c.x2, n.positionX + n.width / 2); + c.y1 = Math.min(c.y1, n.positionY - n.height / 2); + c.y2 = Math.max(c.y2, n.positionY + n.height / 2); + } + + c.w = c.x2 - c.x1; + c.h = c.y2 - c.y1; + totalA += c.w * c.h; + } + + components.sort(function (c1, c2) { + return c2.w * c2.h - c1.w * c1.h; + }); + var x = 0; + var y = 0; + var usedW = 0; + var rowH = 0; + var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight; + + for (var i = 0; i < components.length; i++) { + var c = components[i]; + + if (!c) { + continue; + } + + for (var j = 0; j < c.length; j++) { + var n = c[j]; + + if (!n.isLocked) { + n.positionX += x - c.x1; + n.positionY += y - c.y1; + } + } + + x += c.w + options.componentSpacing; + usedW += c.w + options.componentSpacing; + rowH = Math.max(rowH, c.h); + + if (usedW > maxRowW) { + y += rowH + options.componentSpacing; + x = 0; + usedW = 0; + rowH = 0; + } + } + }; + + var defaults$3 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // padding used on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + avoidOverlapPadding: 10, + // extra spacing around nodes when avoidOverlap: true + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + condense: false, + // uses all available space on false, uses minimal space on true + rows: undefined, + // force num of rows in the grid + cols: undefined, + // force num of columns in the grid + position: function position(node) {}, + // returns { row, col } for element + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function GridLayout(options) { + this.options = extend({}, defaults$3, options); + } + + GridLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + + if (options.sort) { + nodes = nodes.sort(options.sort); + } + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + + if (bb.h === 0 || bb.w === 0) { + eles.nodes().layoutPositions(this, options, function (ele) { + return { + x: bb.x1, + y: bb.y1 + }; + }); + } else { + // width/height * splits^2 = cells where splits is number of times to split width + var cells = nodes.size(); + var splits = Math.sqrt(cells * bb.h / bb.w); + var rows = Math.round(splits); + var cols = Math.round(bb.w / bb.h * splits); + + var small = function small(val) { + if (val == null) { + return Math.min(rows, cols); + } else { + var min = Math.min(rows, cols); + + if (min == rows) { + rows = val; + } else { + cols = val; + } + } + }; + + var large = function large(val) { + if (val == null) { + return Math.max(rows, cols); + } else { + var max = Math.max(rows, cols); + + if (max == rows) { + rows = val; + } else { + cols = val; + } + } + }; + + var oRows = options.rows; + var oCols = options.cols != null ? options.cols : options.columns; // if rows or columns were set in options, use those values + + if (oRows != null && oCols != null) { + rows = oRows; + cols = oCols; + } else if (oRows != null && oCols == null) { + rows = oRows; + cols = Math.ceil(cells / rows); + } else if (oRows == null && oCols != null) { + cols = oCols; + rows = Math.ceil(cells / cols); + } // otherwise use the automatic values and adjust accordingly + // if rounding was up, see if we can reduce rows or columns + else if (cols * rows > cells) { + var sm = small(); + var lg = large(); // reducing the small side takes away the most cells, so try it first + + if ((sm - 1) * lg >= cells) { + small(sm - 1); + } else if ((lg - 1) * sm >= cells) { + large(lg - 1); + } + } else { + // if rounding was too low, add rows or columns + while (cols * rows < cells) { + var _sm = small(); + + var _lg = large(); // try to add to larger side first (adds less in multiplication) + + + if ((_lg + 1) * _sm >= cells) { + large(_lg + 1); + } else { + small(_sm + 1); + } + } + } + + var cellWidth = bb.w / cols; + var cellHeight = bb.h / rows; + + if (options.condense) { + cellWidth = 0; + cellHeight = 0; + } + + if (options.avoidOverlap) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = node._private.position; + + if (pos.x == null || pos.y == null) { + // for bb + pos.x = 0; + pos.y = 0; + } + + var nbb = node.layoutDimensions(options); + var p = options.avoidOverlapPadding; + var w = nbb.w + p; + var h = nbb.h + p; + cellWidth = Math.max(cellWidth, w); + cellHeight = Math.max(cellHeight, h); + } + } + + var cellUsed = {}; // e.g. 'c-0-2' => true + + var used = function used(row, col) { + return cellUsed['c-' + row + '-' + col] ? true : false; + }; + + var use = function use(row, col) { + cellUsed['c-' + row + '-' + col] = true; + }; // to keep track of current cell position + + + var row = 0; + var col = 0; + + var moveToNextCell = function moveToNextCell() { + col++; + + if (col >= cols) { + col = 0; + row++; + } + }; // get a cache of all the manual positions + + + var id2manPos = {}; + + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + var rcPos = options.position(_node); + + if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) { + // must have at least row or col def'd + var _pos = { + row: rcPos.row, + col: rcPos.col + }; + + if (_pos.col === undefined) { + // find unused col + _pos.col = 0; + + while (used(_pos.row, _pos.col)) { + _pos.col++; + } + } else if (_pos.row === undefined) { + // find unused row + _pos.row = 0; + + while (used(_pos.row, _pos.col)) { + _pos.row++; + } + } + + id2manPos[_node.id()] = _pos; + use(_pos.row, _pos.col); + } + } + + var getPos = function getPos(element, i) { + var x, y; + + if (element.locked() || element.isParent()) { + return false; + } // see if we have a manual position set + + + var rcPos = id2manPos[element.id()]; + + if (rcPos) { + x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1; + y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1; + } else { + // otherwise set automatically + while (used(row, col)) { + moveToNextCell(); + } + + x = col * cellWidth + cellWidth / 2 + bb.x1; + y = row * cellHeight + cellHeight / 2 + bb.y1; + use(row, col); + moveToNextCell(); + } + + return { + x: x, + y: y + }; + }; + + nodes.layoutPositions(this, options, getPos); + } + + return this; // chaining + }; + + var defaults$2 = { + ready: function ready() {}, + // on layoutready + stop: function stop() {} // on layoutstop + + }; // constructor + // options : object containing layout options + + function NullLayout(options) { + this.options = extend({}, defaults$2, options); + } // runs the layout + + + NullLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; // elements to consider in the layout + + var layout = this; // cy is automatically populated for us in the constructor + // (disable eslint for next line as this serves as example layout code to external developers) + // eslint-disable-next-line no-unused-vars + + options.cy; + layout.emit('layoutstart'); // puts all nodes at (0, 0) + // n.b. most layouts would use layoutPositions(), instead of positions() and manual events + + eles.nodes().positions(function () { + return { + x: 0, + y: 0 + }; + }); // trigger layoutready when each node has had its position set at least once + + layout.one('layoutready', options.ready); + layout.emit('layoutready'); // trigger layoutstop when the layout stops (e.g. finishes) + + layout.one('layoutstop', options.stop); + layout.emit('layoutstop'); + return this; // chaining + }; // called on continuous layouts to stop them before they finish + + + NullLayout.prototype.stop = function () { + return this; // chaining + }; + + var defaults$1 = { + positions: undefined, + // map of (node id) => (position obj); or function(node){ return somPos; } + zoom: undefined, + // the zoom level to set (prob want fit = false if set) + pan: undefined, + // the pan level to set (prob want fit = false if set) + fit: true, + // whether to fit to viewport + padding: 30, + // padding on fit + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function PresetLayout(options) { + this.options = extend({}, defaults$1, options); + } + + PresetLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; + var nodes = eles.nodes(); + var posIsFn = fn$6(options.positions); + + function getPosition(node) { + if (options.positions == null) { + return copyPosition(node.position()); + } + + if (posIsFn) { + return options.positions(node); + } + + var pos = options.positions[node._private.data.id]; + + if (pos == null) { + return null; + } + + return pos; + } + + nodes.layoutPositions(this, options, function (node, i) { + var position = getPosition(node); + + if (node.locked() || position == null) { + return false; + } + + return position; + }); + return this; // chaining + }; + + var defaults = { + fit: true, + // whether to fit to viewport + padding: 30, + // fit padding + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function RandomLayout(options) { + this.options = extend({}, defaults, options); + } + + RandomLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var eles = options.eles; + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + + var getPos = function getPos(node, i) { + return { + x: bb.x1 + Math.round(Math.random() * bb.w), + y: bb.y1 + Math.round(Math.random() * bb.h) + }; + }; + + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining + }; + + var layout = [{ + name: 'breadthfirst', + impl: BreadthFirstLayout + }, { + name: 'circle', + impl: CircleLayout + }, { + name: 'concentric', + impl: ConcentricLayout + }, { + name: 'cose', + impl: CoseLayout + }, { + name: 'grid', + impl: GridLayout + }, { + name: 'null', + impl: NullLayout + }, { + name: 'preset', + impl: PresetLayout + }, { + name: 'random', + impl: RandomLayout + }]; + + function NullRenderer(options) { + this.options = options; + this.notifications = 0; // for testing + } + + var noop = function noop() {}; + + var throwImgErr = function throwImgErr() { + throw new Error('A headless instance can not render images'); + }; + + NullRenderer.prototype = { + recalculateRenderedStyle: noop, + notify: function notify() { + this.notifications++; + }, + init: noop, + isHeadless: function isHeadless() { + return true; + }, + png: throwImgErr, + jpg: throwImgErr + }; + + var BRp$f = {}; + BRp$f.arrowShapeWidth = 0.3; + + BRp$f.registerArrowShapes = function () { + var arrowShapes = this.arrowShapes = {}; + var renderer = this; // Contract for arrow shapes: + // 0, 0 is arrow tip + // (0, 1) is direction towards node + // (1, 0) is right + // + // functional api: + // collide: check x, y in shape + // roughCollide: called before collide, no false negatives + // draw: draw + // spacing: dist(arrowTip, nodeBoundary) + // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip + + var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) { + var x1 = translation.x - size / 2 - padding; + var x2 = translation.x + size / 2 + padding; + var y1 = translation.y - size / 2 - padding; + var y2 = translation.y + size / 2 + padding; + var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2; + return inside; + }; + + var transform = function transform(x, y, size, angle, translation) { + var xRotated = x * Math.cos(angle) - y * Math.sin(angle); + var yRotated = x * Math.sin(angle) + y * Math.cos(angle); + var xScaled = xRotated * size; + var yScaled = yRotated * size; + var xTranslated = xScaled + translation.x; + var yTranslated = yScaled + translation.y; + return { + x: xTranslated, + y: yTranslated + }; + }; + + var transformPoints = function transformPoints(pts, size, angle, translation) { + var retPts = []; + + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push(transform(x, y, size, angle, translation)); + } + + return retPts; + }; + + var pointsToArr = function pointsToArr(pts) { + var ret = []; + + for (var i = 0; i < pts.length; i++) { + var p = pts[i]; + ret.push(p.x, p.y); + } + + return ret; + }; + + var standardGap = function standardGap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2; + }; + + var defineArrowShape = function defineArrowShape(name, defn) { + if (string(defn)) { + defn = arrowShapes[defn]; + } + + arrowShapes[name] = extend({ + name: name, + points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3], + collide: function collide(x, y, size, angle, translation, padding) { + var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, points); + return inside; + }, + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation) { + var points = transformPoints(this.points, size, angle, translation); + renderer.arrowShapeImpl('polygon')(context, points); + }, + spacing: function spacing(edge) { + return 0; + }, + gap: standardGap + }, defn); + }; + + defineArrowShape('none', { + collide: falsify, + roughCollide: falsify, + draw: noop$1, + spacing: zeroify, + gap: zeroify + }); + defineArrowShape('triangle', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3] + }); + defineArrowShape('arrow', 'triangle'); + defineArrowShape('triangle-backcurve', { + points: arrowShapes['triangle'].points, + controlPoint: [0, -0.15], + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation, edgeWidth) { + var ptsTrans = transformPoints(this.points, size, angle, translation); + var ctrlPt = this.controlPoint; + var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans); + }, + gap: function gap(edge) { + return standardGap(edge) * 0.8; + } + }); + defineArrowShape('triangle-tee', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var teePts = transformPoints(this.pointsTee, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, teePts); + } + }); + defineArrowShape('circle-triangle', { + radius: 0.15, + pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + return pointInsidePolygonPoints(x, y, triPts) || circleInside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.pointsTr, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('triangle-cross', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + baseCrossLinePts: [-0.15, -0.4, // first half of the rectangle + -0.15, -0.4, 0.15, -0.4, // second half of the rectangle + 0.15, -0.4], + crossLinePts: function crossLinePts(size, edgeWidth) { + // shift points so that the distance between the cross points matches edge width + var p = this.baseCrossLinePts.slice(); + var shiftFactor = edgeWidth / size; + var y0 = 3; + var y1 = 5; + p[y0] = p[y0] - shiftFactor; + p[y1] = p[y1] - shiftFactor; + return p; + }, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts); + } + }); + defineArrowShape('vee', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15], + gap: function gap(edge) { + return standardGap(edge) * 0.525; + } + }); + defineArrowShape('circle', { + radius: 0.15, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('tee', { + points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0], + spacing: function spacing(edge) { + return 1; + }, + gap: function gap(edge) { + return 1; + } + }); + defineArrowShape('square', { + points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3] + }); + defineArrowShape('diamond', { + points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0], + gap: function gap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + defineArrowShape('chevron', { + points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15], + gap: function gap(edge) { + return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + }; + + var BRp$e = {}; // Project mouse + + BRp$e.projectIntoViewport = function (clientX, clientY) { + var cy = this.cy; + var offsets = this.findContainerClientCoords(); + var offsetLeft = offsets[0]; + var offsetTop = offsets[1]; + var scale = offsets[4]; + var pan = cy.pan(); + var zoom = cy.zoom(); + var x = ((clientX - offsetLeft) / scale - pan.x) / zoom; + var y = ((clientY - offsetTop) / scale - pan.y) / zoom; + return [x, y]; + }; + + BRp$e.findContainerClientCoords = function () { + if (this.containerBB) { + return this.containerBB; + } + + var container = this.container; + var rect = container.getBoundingClientRect(); + var style = window$1.getComputedStyle(container); + + var styleValue = function styleValue(name) { + return parseFloat(style.getPropertyValue(name)); + }; + + var padding = { + left: styleValue('padding-left'), + right: styleValue('padding-right'), + top: styleValue('padding-top'), + bottom: styleValue('padding-bottom') + }; + var border = { + left: styleValue('border-left-width'), + right: styleValue('border-right-width'), + top: styleValue('border-top-width'), + bottom: styleValue('border-bottom-width') + }; + var clientWidth = container.clientWidth; + var clientHeight = container.clientHeight; + var paddingHor = padding.left + padding.right; + var paddingVer = padding.top + padding.bottom; + var borderHor = border.left + border.right; + var scale = rect.width / (clientWidth + borderHor); + var unscaledW = clientWidth - paddingHor; + var unscaledH = clientHeight - paddingVer; + var left = rect.left + padding.left + border.left; + var top = rect.top + padding.top + border.top; + return this.containerBB = [left, top, unscaledW, unscaledH, scale]; + }; + + BRp$e.invalidateContainerClientCoordsCache = function () { + this.containerBB = null; + }; + + BRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) { + return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0]; + }; + + BRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) { + var self = this; + var r = this; + var eles = r.getCachedZSortedEles(); + var near = []; // 1 node max, 1 edge max + + var zoom = r.cy.zoom(); + var hasCompounds = r.cy.hasCompoundNodes(); + var edgeThreshold = (isTouch ? 24 : 8) / zoom; + var nodeThreshold = (isTouch ? 8 : 2) / zoom; + var labelThreshold = (isTouch ? 8 : 2) / zoom; + var minSqDist = Infinity; + var nearEdge; + var nearNode; + + if (interactiveElementsOnly) { + eles = eles.interactive; + } + + function addEle(ele, sqDist) { + if (ele.isNode()) { + if (nearNode) { + return; // can't replace node + } else { + nearNode = ele; + near.push(ele); + } + } + + if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) { + if (nearEdge) { + // then replace existing edge + // can replace only if same z-index + if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) { + for (var i = 0; i < near.length; i++) { + if (near[i].isEdge()) { + near[i] = ele; + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + break; + } + } + } + } else { + near.push(ele); + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + } + } + } + + function checkNode(node) { + var width = node.outerWidth() + 2 * nodeThreshold; + var height = node.outerHeight() + 2 * nodeThreshold; + var hw = width / 2; + var hh = height / 2; + var pos = node.position(); + + if (pos.x - hw <= x && x <= pos.x + hw // bb check x + && pos.y - hh <= y && y <= pos.y + hh // bb check y + ) { + var shape = r.nodeShapes[self.getNodeShape(node)]; + + if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y)) { + addEle(node, 0); + return true; + } + } + } + + function checkEdge(edge) { + var _p = edge._private; + var rs = _p.rscratch; + var styleWidth = edge.pstyle('width').pfValue; + var scale = edge.pstyle('arrow-scale').value; + var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre + + var widthSq = width * width; + var width2 = width * 2; + var src = _p.source; + var tgt = _p.target; + var sqDist; + + if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') { + var pts = rs.allpts; + + for (var i = 0; i + 3 < pts.length; i += 2) { + if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) { + addEle(edge, sqDist); + return true; + } + } + } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + var pts = rs.allpts; + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) { + addEle(edge, sqDist); + return true; + } + } + } // if we're close to the edge but didn't hit it, maybe we hit its arrows + + + var src = src || _p.source; + var tgt = tgt || _p.target; + var arSize = self.getArrowWidth(styleWidth, scale); + var arrows = [{ + name: 'source', + x: rs.arrowStartX, + y: rs.arrowStartY, + angle: rs.srcArrowAngle + }, { + name: 'target', + x: rs.arrowEndX, + y: rs.arrowEndY, + angle: rs.tgtArrowAngle + }, { + name: 'mid-source', + x: rs.midX, + y: rs.midY, + angle: rs.midsrcArrowAngle + }, { + name: 'mid-target', + x: rs.midX, + y: rs.midY, + angle: rs.midtgtArrowAngle + }]; + + for (var i = 0; i < arrows.length; i++) { + var ar = arrows[i]; + var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value]; + var edgeWidth = edge.pstyle('width').pfValue; + + if (shape.roughCollide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold)) { + addEle(edge); + return true; + } + } // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence) + + + if (hasCompounds && near.length > 0) { + checkNode(src); + checkNode(tgt); + } + } + + function preprop(obj, name, pre) { + return getPrefixedProperty(obj, name, pre); + } + + function checkLabel(ele, prefix) { + var _p = ele._private; + var th = labelThreshold; + var prefixDash; + + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + + ele.boundingBox(); + var bb = _p.labelBounds[prefix || 'main']; + var text = ele.pstyle(prefixDash + 'label').value; + var eventsEnabled = ele.pstyle('text-events').strValue === 'yes'; + + if (!eventsEnabled || !text) { + return; + } + + var lx = preprop(_p.rscratch, 'labelX', prefix); + var ly = preprop(_p.rscratch, 'labelY', prefix); + var theta = preprop(_p.rscratch, 'labelAngle', prefix); + var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin + + var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly) + + var ly1 = bb.y1 - th - oy; + var ly2 = bb.y2 + th - oy; + + if (theta) { + var cos = Math.cos(theta); + var sin = Math.sin(theta); + + var rotate = function rotate(x, y) { + x = x - lx; + y = y - ly; + return { + x: x * cos - y * sin + lx, + y: x * sin + y * cos + ly + }; + }; + + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + var points = [// with the margin added after the rotation is applied + px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy]; + + if (pointInsidePolygonPoints(x, y, points)) { + addEle(ele); + return true; + } + } else { + // do a cheaper bb check + if (inBoundingBox(bb, x, y)) { + addEle(ele); + return true; + } + } + } + + for (var i = eles.length - 1; i >= 0; i--) { + // reverse order for precedence + var ele = eles[i]; + + if (ele.isNode()) { + checkNode(ele) || checkLabel(ele); + } else { + // then edge + checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target'); + } + } + + return near; + }; // 'Give me everything from this box' + + + BRp$e.getAllInBox = function (x1, y1, x2, y2) { + var eles = this.getCachedZSortedEles().interactive; + var box = []; + var x1c = Math.min(x1, x2); + var x2c = Math.max(x1, x2); + var y1c = Math.min(y1, y2); + var y2c = Math.max(y1, y2); + x1 = x1c; + x2 = x2c; + y1 = y1c; + y2 = y2c; + var boxBb = makeBoundingBox({ + x1: x1, + y1: y1, + x2: x2, + y2: y2 + }); + + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + + if (ele.isNode()) { + var node = ele; + var nodeBb = node.boundingBox({ + includeNodes: true, + includeEdges: false, + includeLabels: false + }); + + if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { + box.push(node); + } + } else { + var edge = ele; + var _p = edge._private; + var rs = _p.rscratch; + + if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) { + continue; + } + + if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) { + continue; + } + + if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') { + var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; + var allInside = true; + + for (var i = 0; i < pts.length; i++) { + if (!pointInBoundingBox(boxBb, pts[i])) { + allInside = false; + break; + } + } + + if (allInside) { + box.push(edge); + } + } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') { + box.push(edge); + } + } + } + + return box; + }; + + var BRp$d = {}; + + BRp$d.calculateArrowAngles = function (edge) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + var isBezier = rs.edgeType === 'bezier'; + var isMultibezier = rs.edgeType === 'multibezier'; + var isSegments = rs.edgeType === 'segments'; + var isCompound = rs.edgeType === 'compound'; + var isSelf = rs.edgeType === 'self'; // Displacement gives direction for arrowhead orientation + + var dispX, dispY; + var startX, startY, endX, endY, midX, midY; + + if (isHaystack) { + startX = rs.haystackPts[0]; + startY = rs.haystackPts[1]; + endX = rs.haystackPts[2]; + endY = rs.haystackPts[3]; + } else { + startX = rs.arrowStartX; + startY = rs.arrowStartY; + endX = rs.arrowEndX; + endY = rs.arrowEndY; + } + + midX = rs.midX; + midY = rs.midY; // source + // + + if (isSegments) { + dispX = startX - rs.segpts[0]; + dispY = startY - rs.segpts[1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1); + var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1); + dispX = startX - bX; + dispY = startY - bY; + } else { + dispX = startX - midX; + dispY = startY - midY; + } + + rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); // mid target + // + + var midX = rs.midX; + var midY = rs.midY; + + if (isHaystack) { + midX = (startX + endX) / 2; + midY = (startY + endY) / 2; + } + + dispX = endX - startX; + dispY = endY - startY; + + if (isSegments) { + var pts = rs.allpts; + + if (pts.length / 2 % 2 === 0) { + var i2 = pts.length / 2; + var i1 = i2 - 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } else { + var i2 = pts.length / 2 - 1; + var i1 = i2 - 2; + var i3 = i2 + 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } + } else if (isMultibezier || isCompound || isSelf) { + var pts = rs.allpts; + var cpts = rs.ctrlpts; + var bp0x, bp0y; + var bp1x, bp1y; + + if (cpts.length / 2 % 2 === 0) { + var p0 = pts.length / 2 - 1; // startpt + + var ic = p0 + 2; + var p1 = ic + 2; + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001); + } else { + var ic = pts.length / 2 - 1; // ctrpt + + var p0 = ic - 2; // startpt + + var p1 = ic + 2; // endpt + + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5); + } + + dispX = bp1x - bp0x; + dispY = bp1y - bp0y; + } + + rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY); + rs.midDispX = dispX; + rs.midDispY = dispY; // mid source + // + + dispX *= -1; + dispY *= -1; + + if (isSegments) { + var pts = rs.allpts; + + if (pts.length / 2 % 2 === 0) ; else { + var i2 = pts.length / 2 - 1; + var i3 = i2 + 2; + dispX = -(pts[i3] - pts[i2]); + dispY = -(pts[i3 + 1] - pts[i2 + 1]); + } + } + + rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); // target + // + + if (isSegments) { + dispX = endX - rs.segpts[rs.segpts.length - 2]; + dispY = endY - rs.segpts[rs.segpts.length - 1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var l = pts.length; + var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9); + var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9); + dispX = endX - bX; + dispY = endY - bY; + } else { + dispX = endX - midX; + dispY = endY - midY; + } + + rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY); + }; + + BRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) { + var cache = this.arrowWidthCache = this.arrowWidthCache || {}; + var cachedVal = cache[edgeWidth + ', ' + scale]; + + if (cachedVal) { + return cachedVal; + } + + cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale; + cache[edgeWidth + ', ' + scale] = cachedVal; + return cachedVal; + }; + + var BRp$c = {}; + + BRp$c.findHaystackPoints = function (edges) { + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var rs = _p.rscratch; + + if (!rs.haystack) { + var angle = Math.random() * 2 * Math.PI; + rs.source = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + angle = Math.random() * 2 * Math.PI; + rs.target = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + } + + var src = _p.source; + var tgt = _p.target; + var srcPos = src.position(); + var tgtPos = tgt.position(); + var srcW = src.width(); + var tgtW = tgt.width(); + var srcH = src.height(); + var tgtH = tgt.height(); + var radius = edge.pstyle('haystack-radius').value; + var halfRadius = radius / 2; // b/c have to half width/height + + rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y]; + rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2; + rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; // always override as haystack in case set to different type previously + + rs.edgeType = 'haystack'; + rs.haystack = true; + this.storeEdgeProjections(edge); + this.calculateArrowAngles(edge); + this.recalculateEdgeLabelProjections(edge); + this.calculateLabelAngles(edge); + } + }; + + BRp$c.findSegmentsPoints = function (edge, pairInfo) { + // Segments (multiple straight lines) + var rs = edge._private.rscratch; + var posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts, + vectorNormInverse = pairInfo.vectorNormInverse; + var edgeDistances = edge.pstyle('edge-distances').value; + var segmentWs = edge.pstyle('segment-weights'); + var segmentDs = edge.pstyle('segment-distances'); + var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); + rs.edgeType = 'segments'; + rs.segpts = []; + + for (var s = 0; s < segmentsN; s++) { + var w = segmentWs.pfValue[s]; + var d = segmentDs.pfValue[s]; + var w1 = 1 - w; + var w2 = w; + var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d); + } + }; + + BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Self-edge + var rs = edge._private.rscratch; + var dirCounts = pairInfo.dirCounts, + srcPos = pairInfo.srcPos; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var loopDir = edge.pstyle('loop-direction').pfValue; + var loopSwp = edge.pstyle('loop-sweep').pfValue; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + rs.edgeType = 'self'; + var j = i; + var loopDist = stepSize; + + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + + var loopAngle = loopDir - Math.PI / 2; + var outAngle = loopAngle - loopSwp / 2; + var inAngle = loopAngle + loopSwp / 2; // increase by step size for overlapping loops, keyed on direction and sweep values + + var dc = String(loopDir + '_' + loopSwp); + j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc]; + rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)]; + }; + + BRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Compound edge + var rs = edge._private.rscratch; + rs.edgeType = 'compound'; + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var j = i; + var loopDist = stepSize; + + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + + var loopW = 50; + var loopaPos = { + x: srcPos.x - srcW / 2, + y: srcPos.y - srcH / 2 + }; + var loopbPos = { + x: tgtPos.x - tgtW / 2, + y: tgtPos.y - tgtH / 2 + }; + var loopPos = { + x: Math.min(loopaPos.x, loopbPos.x), + y: Math.min(loopaPos.y, loopbPos.y) + }; // avoids cases with impossible beziers + + var minCompoundStretch = 0.5; + var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01)); + var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01)); + rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y]; + }; + + BRp$c.findStraightEdgePoints = function (edge) { + // Straight edge within bundle + edge._private.rscratch.edgeType = 'straight'; + }; + + BRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) { + var rs = edge._private.rscratch; + var vectorNormInverse = pairInfo.vectorNormInverse, + posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts; + var edgeDistances = edge.pstyle('edge-distances').value; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptWs = edge.pstyle('control-point-weights'); + var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1; + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var ctrlptWeight = ctrlptWs.value[0]; // (Multi)bezier + + var multi = edgeIsUnbundled; + rs.edgeType = multi ? 'multibezier' : 'bezier'; + rs.ctrlpts = []; + + for (var b = 0; b < bezierN; b++) { + var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1); + var manctrlptDist = void 0; + var sign = signum(normctrlptDist); + + if (multi) { + ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size + + ctrlptWeight = ctrlptWs.value[b]; + } + + if (edgeIsUnbundled) { + // multi or single unbundled + manctrlptDist = ctrlptDist; + } else { + manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined; + } + + var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist; + var w1 = 1 - ctrlptWeight; + var w2 = ctrlptWeight; + var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint); + } + }; + + BRp$c.findTaxiPoints = function (edge, pairInfo) { + // Taxicab geometry with two turns maximum + var rs = edge._private.rscratch; + rs.edgeType = 'segments'; + var VERTICAL = 'vertical'; + var HORIZONTAL = 'horizontal'; + var LEFTWARD = 'leftward'; + var RIGHTWARD = 'rightward'; + var DOWNWARD = 'downward'; + var UPWARD = 'upward'; + var AUTO = 'auto'; + var posPts = pairInfo.posPts, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var edgeDistances = edge.pstyle('edge-distances').value; + var dIncludesNodeBody = edgeDistances !== 'node-position'; + var taxiDir = edge.pstyle('taxi-direction').value; + var rawTaxiDir = taxiDir; // unprocessed value + + var taxiTurn = edge.pstyle('taxi-turn'); + var turnIsPercent = taxiTurn.units === '%'; + var taxiTurnPfVal = taxiTurn.pfValue; + var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side + + var minD = edge.pstyle('taxi-turn-min-distance').pfValue; + var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0; + var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0; + var pdx = posPts.x2 - posPts.x1; + var pdy = posPts.y2 - posPts.y1; // take away the effective w/h from the magnitude of the delta value + + var subDWH = function subDWH(dxy, dwh) { + if (dxy > 0) { + return Math.max(dxy - dwh, 0); + } else { + return Math.min(dxy + dwh, 0); + } + }; + + var dx = subDWH(pdx, dw); + var dy = subDWH(pdy, dh); + var isExplicitDir = false; + + if (rawTaxiDir === AUTO) { + taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL; + } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) { + taxiDir = VERTICAL; + isExplicitDir = true; + } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) { + taxiDir = HORIZONTAL; + isExplicitDir = true; + } + + var isVert = taxiDir === VERTICAL; + var l = isVert ? dy : dx; + var pl = isVert ? pdy : pdx; + var sgnL = signum(pl); + var forcedDir = false; + + if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction + && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) { + sgnL *= -1; + l = sgnL * Math.abs(l); + forcedDir = true; + } + + var d; + + if (turnIsPercent) { + var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; + d = p * l; + } else { + var k = taxiTurnPfVal < 0 ? l : 0; + d = k + taxiTurnPfVal * sgnL; + } + + var getIsTooClose = function getIsTooClose(d) { + return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l); + }; + + var isTooCloseSrc = getIsTooClose(d); + var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d)); + var isTooClose = isTooCloseSrc || isTooCloseTgt; + + if (isTooClose && !forcedDir) { + // non-ideal routing + if (isVert) { + // vertical fallbacks + var lShapeInsideSrc = Math.abs(pl) <= srcH / 2; + var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2; + + if (lShapeInsideSrc) { + // horizontal Z-shape (direction not respected) + var x = (posPts.x1 + posPts.x2) / 2; + var y1 = posPts.y1, + y2 = posPts.y2; + rs.segpts = [x, y1, x, y2]; + } else if (lShapeInsideTgt) { + // vertical Z-shape (distance not respected) + var y = (posPts.y1 + posPts.y2) / 2; + var x1 = posPts.x1, + x2 = posPts.x2; + rs.segpts = [x1, y, x2, y]; + } else { + // L-shape fallback (turn distance not respected, but works well with tree siblings) + rs.segpts = [posPts.x1, posPts.y2]; + } + } else { + // horizontal fallbacks + var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2; + + var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2; + + if (_lShapeInsideSrc) { + // vertical Z-shape (direction not respected) + var _y = (posPts.y1 + posPts.y2) / 2; + + var _x = posPts.x1, + _x2 = posPts.x2; + rs.segpts = [_x, _y, _x2, _y]; + } else if (_lShapeInsideTgt) { + // horizontal Z-shape (turn distance not respected) + var _x3 = (posPts.x1 + posPts.x2) / 2; + + var _y2 = posPts.y1, + _y3 = posPts.y2; + rs.segpts = [_x3, _y2, _x3, _y3]; + } else { + // L-shape (turn distance not respected, but works well for tree siblings) + rs.segpts = [posPts.x2, posPts.y1]; + } + } + } else { + // ideal routing + if (isVert) { + var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); + + var _x4 = posPts.x1, + _x5 = posPts.x2; + rs.segpts = [_x4, _y4, _x5, _y4]; + } else { + // horizontal + var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0); + + var _y5 = posPts.y1, + _y6 = posPts.y2; + rs.segpts = [_x6, _y5, _x6, _y6]; + } + } + }; + + BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) { + var rs = edge._private.rscratch; // can only correct beziers for now... + + if (rs.edgeType === 'bezier') { + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH, + srcShape = pairInfo.srcShape, + tgtShape = pairInfo.tgtShape; + var badStart = !number$1(rs.startX) || !number$1(rs.startY); + var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY); + var badEnd = !number$1(rs.endX) || !number$1(rs.endY); + var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY); + var minCpADistFactor = 3; + var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + var minCpADist = minCpADistFactor * arrowW; + var startACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.startX, + y: rs.startY + }); + var closeStartACp = startACpDist < minCpADist; + var endACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.endX, + y: rs.endY + }); + var closeEndACp = endACpDist < minCpADist; + var overlapping = false; + + if (badStart || badAStart || closeStartACp) { + overlapping = true; // project control point along line from src centre to outside the src shape + // (otherwise intersection will yield nothing) + + var cpD = { + // delta + x: rs.ctrlpts[0] - srcPos.x, + y: rs.ctrlpts[1] - srcPos.y + }; + var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line + + var cpM = { + // normalised delta + x: cpD.x / cpL, + y: cpD.y / cpL + }; + var radius = Math.max(srcW, srcH); + var cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + cpM.x * 2 * radius, + y: rs.ctrlpts[1] + cpM.y * 2 * radius + }; + var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0); + + if (closeStartACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); + } else { + rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist; + rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist; + } + } + + if (badEnd || badAEnd || closeEndACp) { + overlapping = true; // project control point along line from tgt centre to outside the tgt shape + // (otherwise intersection will yield nothing) + + var _cpD = { + // delta + x: rs.ctrlpts[0] - tgtPos.x, + y: rs.ctrlpts[1] - tgtPos.y + }; + + var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line + + + var _cpM = { + // normalised delta + x: _cpD.x / _cpL, + y: _cpD.y / _cpL + }; + + var _radius = Math.max(srcW, srcH); + + var _cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + _cpM.x * 2 * _radius, + y: rs.ctrlpts[1] + _cpM.y * 2 * _radius + }; + var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0); + + if (closeEndACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); + } else { + rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist; + rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist; + } + } + + if (overlapping) { + // recalc endpts + this.findEndpoints(edge); + } + } + }; + + BRp$c.storeAllpts = function (edge) { + var rs = edge._private.rscratch; + + if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + + for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) { + // ctrl pt itself + rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]); // the midpt between ctrlpts as intermediate destination pts + + if (b + 3 < rs.ctrlpts.length) { + rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2); + } + } + + rs.allpts.push(rs.endX, rs.endY); + var m, mt; + + if (rs.ctrlpts.length / 2 % 2 === 0) { + m = rs.allpts.length / 2 - 1; + rs.midX = rs.allpts[m]; + rs.midY = rs.allpts[m + 1]; + } else { + m = rs.allpts.length / 2 - 3; + mt = 0.5; + rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt); + rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt); + } + } else if (rs.edgeType === 'straight') { + // need to calc these after endpts + rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; // default midpt for labels etc + + rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4; + rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4; + } else if (rs.edgeType === 'segments') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + rs.allpts.push.apply(rs.allpts, rs.segpts); + rs.allpts.push(rs.endX, rs.endY); + + if (rs.segpts.length % 4 === 0) { + var i2 = rs.segpts.length / 2; + var i1 = i2 - 2; + rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2; + rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2; + } else { + var _i = rs.segpts.length / 2 - 1; + + rs.midX = rs.segpts[_i]; + rs.midY = rs.segpts[_i + 1]; + } + } + }; + + BRp$c.checkForInvalidEdgeWarning = function (edge) { + var rs = edge[0]._private.rscratch; + + if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) { + rs.loggedErr = false; + } else { + if (!rs.loggedErr) { + rs.loggedErr = true; + warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.'); + } + } + }; + + BRp$c.findEdgeControlPoints = function (edges) { + var _this = this; + + if (!edges || edges.length === 0) { + return; + } + + var r = this; + var cy = r.cy; + var hasCompounds = cy.hasCompoundNodes(); + var hashTable = { + map: new Map$2(), + get: function get(pairId) { + var map2 = this.map.get(pairId[0]); + + if (map2 != null) { + return map2.get(pairId[1]); + } else { + return null; + } + }, + set: function set(pairId, val) { + var map2 = this.map.get(pairId[0]); + + if (map2 == null) { + map2 = new Map$2(); + this.map.set(pairId[0], map2); + } + + map2.set(pairId[1], val); + } + }; + var pairIds = []; + var haystackEdges = []; // create a table of edge (src, tgt) => list of edges between them + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var curveStyle = edge.pstyle('curve-style').value; // ignore edges who are not to be displayed + // they shouldn't take up space + + if (edge.removed() || !edge.takesUpSpace()) { + continue; + } + + if (curveStyle === 'haystack') { + haystackEdges.push(edge); + continue; + } + + var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle === 'taxi'; + var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier'; + var src = _p.source; + var tgt = _p.target; + var srcIndex = src.poolIndex(); + var tgtIndex = tgt.poolIndex(); + var pairId = [srcIndex, tgtIndex].sort(); + var tableEntry = hashTable.get(pairId); + + if (tableEntry == null) { + tableEntry = { + eles: [] + }; + hashTable.set(pairId, tableEntry); + pairIds.push(pairId); + } + + tableEntry.eles.push(edge); + + if (edgeIsUnbundled) { + tableEntry.hasUnbundled = true; + } + + if (edgeIsBezier) { + tableEntry.hasBezier = true; + } + } // for each pair (src, tgt), create the ctrl pts + // Nested for loop is OK; total number of iterations for both loops = edgeCount + + + var _loop = function _loop(p) { + var pairId = pairIds[p]; + var pairInfo = hashTable.get(pairId); + var swappedpairInfo = void 0; + + if (!pairInfo.hasUnbundled) { + var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) { + return e.isBundledBezier(); + }); + clearArray(pairInfo.eles); + pllEdges.forEach(function (edge) { + return pairInfo.eles.push(edge); + }); // for each pair id, the edges should be sorted by index + + pairInfo.eles.sort(function (edge1, edge2) { + return edge1.poolIndex() - edge2.poolIndex(); + }); + } + + var firstEdge = pairInfo.eles[0]; + var src = firstEdge.source(); + var tgt = firstEdge.target(); // make sure src/tgt distinction is consistent w.r.t. pairId + + if (src.poolIndex() > tgt.poolIndex()) { + var temp = src; + src = tgt; + tgt = temp; + } + + var srcPos = pairInfo.srcPos = src.position(); + var tgtPos = pairInfo.tgtPos = tgt.position(); + var srcW = pairInfo.srcW = src.outerWidth(); + var srcH = pairInfo.srcH = src.outerHeight(); + var tgtW = pairInfo.tgtW = tgt.outerWidth(); + var tgtH = pairInfo.tgtH = tgt.outerHeight(); + + var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)]; + + var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)]; + + pairInfo.dirCounts = { + 'north': 0, + 'west': 0, + 'south': 0, + 'east': 0, + 'northwest': 0, + 'southwest': 0, + 'northeast': 0, + 'southeast': 0 + }; + + for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) { + var _edge = pairInfo.eles[_i2]; + var rs = _edge[0]._private.rscratch; + + var _curveStyle = _edge.pstyle('curve-style').value; + + var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle === 'segments' || _curveStyle === 'taxi'; // whether the normalised pair order is the reverse of the edge's src-tgt order + + + var edgeIsSwapped = !src.same(_edge.source()); + + if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) { + pairInfo.calculatedIntersection = true; // pt outside src shape to calc distance/displacement from src to tgt + + var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0); + var srcIntn = pairInfo.srcIntn = srcOutside; // pt outside tgt shape to calc distance/displacement from src to tgt + + var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0); + var tgtIntn = pairInfo.tgtIntn = tgtOutside; + var intersectionPts = pairInfo.intersectionPts = { + x1: srcOutside[0], + x2: tgtOutside[0], + y1: srcOutside[1], + y2: tgtOutside[1] + }; + var posPts = pairInfo.posPts = { + x1: srcPos.x, + x2: tgtPos.x, + y1: srcPos.y, + y2: tgtPos.y + }; + var dy = tgtOutside[1] - srcOutside[1]; + var dx = tgtOutside[0] - srcOutside[0]; + var l = Math.sqrt(dx * dx + dy * dy); + var vector = pairInfo.vector = { + x: dx, + y: dy + }; + var vectorNorm = pairInfo.vectorNorm = { + x: vector.x / l, + y: vector.y / l + }; + var vectorNormInverse = { + x: -vectorNorm.y, + y: vectorNorm.x + }; // if node shapes overlap, then no ctrl pts to draw + + pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y); + pairInfo.vectorNormInverse = vectorNormInverse; + swappedpairInfo = { + nodesOverlap: pairInfo.nodesOverlap, + dirCounts: pairInfo.dirCounts, + calculatedIntersection: true, + hasBezier: pairInfo.hasBezier, + hasUnbundled: pairInfo.hasUnbundled, + eles: pairInfo.eles, + srcPos: tgtPos, + tgtPos: srcPos, + srcW: tgtW, + srcH: tgtH, + tgtW: srcW, + tgtH: srcH, + srcIntn: tgtIntn, + tgtIntn: srcIntn, + srcShape: tgtShape, + tgtShape: srcShape, + posPts: { + x1: posPts.x2, + y1: posPts.y2, + x2: posPts.x1, + y2: posPts.y1 + }, + intersectionPts: { + x1: intersectionPts.x2, + y1: intersectionPts.y2, + x2: intersectionPts.x1, + y2: intersectionPts.y1 + }, + vector: { + x: -vector.x, + y: -vector.y + }, + vectorNorm: { + x: -vectorNorm.x, + y: -vectorNorm.y + }, + vectorNormInverse: { + x: -vectorNormInverse.x, + y: -vectorNormInverse.y + } + }; + } + + var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; + rs.nodesOverlap = passedPairInfo.nodesOverlap; + rs.srcIntn = passedPairInfo.srcIntn; + rs.tgtIntn = passedPairInfo.tgtIntn; + + if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) { + _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (src === tgt) { + _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (_curveStyle === 'segments') { + _this.findSegmentsPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'taxi') { + _this.findTaxiPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) { + _this.findStraightEdgePoints(_edge); + } else { + _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped); + } + + _this.findEndpoints(_edge); + + _this.tryToCorrectInvalidPoints(_edge, passedPairInfo); + + _this.checkForInvalidEdgeWarning(_edge); + + _this.storeAllpts(_edge); + + _this.storeEdgeProjections(_edge); + + _this.calculateArrowAngles(_edge); + + _this.recalculateEdgeLabelProjections(_edge); + + _this.calculateLabelAngles(_edge); + } // for pair edges + + }; + + for (var p = 0; p < pairIds.length; p++) { + _loop(p); + } // for pair ids + // haystacks avoid the expense of pairInfo stuff (intersections etc.) + + + this.findHaystackPoints(haystackEdges); + }; + + function getPts(pts) { + var retPts = []; + + if (pts == null) { + return; + } + + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push({ + x: x, + y: y + }); + } + + return retPts; + } + + BRp$c.getSegmentPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + + if (type === 'segments') { + this.recalculateRenderedStyle(edge); + return getPts(rs.segpts); + } + }; + + BRp$c.getControlPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + + if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') { + this.recalculateRenderedStyle(edge); + return getPts(rs.ctrlpts); + } + }; + + BRp$c.getEdgeMidpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + return { + x: rs.midX, + y: rs.midY + }; + }; + + var BRp$b = {}; + + BRp$b.manualEndptToPx = function (node, prop) { + var r = this; + var npos = node.position(); + var w = node.outerWidth(); + var h = node.outerHeight(); + + if (prop.value.length === 2) { + var p = [prop.pfValue[0], prop.pfValue[1]]; + + if (prop.units[0] === '%') { + p[0] = p[0] * w; + } + + if (prop.units[1] === '%') { + p[1] = p[1] * h; + } + + p[0] += npos.x; + p[1] += npos.y; + return p; + } else { + var angle = prop.pfValue[0]; + angle = -Math.PI / 2 + angle; // start at 12 o'clock + + var l = 2 * Math.max(w, h); + var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l]; + return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0); + } + }; + + BRp$b.findEndpoints = function (edge) { + var r = this; + var intersect; + var source = edge.source()[0]; + var target = edge.target()[0]; + var srcPos = source.position(); + var tgtPos = target.position(); + var tgtArShape = edge.pstyle('target-arrow-shape').value; + var srcArShape = edge.pstyle('source-arrow-shape').value; + var tgtDist = edge.pstyle('target-distance-from-node').pfValue; + var srcDist = edge.pstyle('source-distance-from-node').pfValue; + var curveStyle = edge.pstyle('curve-style').value; + var rs = edge._private.rscratch; + var et = rs.edgeType; + var taxi = curveStyle === 'taxi'; + var self = et === 'self' || et === 'compound'; + var bezier = et === 'bezier' || et === 'multibezier' || self; + var multi = et !== 'bezier'; + var lines = et === 'straight' || et === 'segments'; + var segments = et === 'segments'; + var hasEndpts = bezier || multi || lines; + var overrideEndpts = self || taxi; + var srcManEndpt = edge.pstyle('source-endpoint'); + var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value; + var tgtManEndpt = edge.pstyle('target-endpoint'); + var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value; + rs.srcManEndpt = srcManEndpt; + rs.tgtManEndpt = tgtManEndpt; + var p1; // last known point of edge on target side + + var p2; // last known point of edge on source side + + var p1_i; // point to intersect with target shape + + var p2_i; // point to intersect with source shape + + if (bezier) { + var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]]; + var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart; + p1 = cpEnd; + p2 = cpStart; + } else if (lines) { + var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2); + var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2); + p1 = tgtArrowFromPt; + p2 = srcArrowFromPt; + } + + if (tgtManEndptVal === 'inside-to-node') { + intersect = [tgtPos.x, tgtPos.y]; + } else if (tgtManEndpt.units) { + intersect = this.manualEndptToPx(target, tgtManEndpt); + } else if (tgtManEndptVal === 'outside-to-line') { + intersect = rs.tgtIntn; // use cached value from ctrlpt calc + } else { + if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') { + p1_i = p1; + } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') { + p1_i = [srcPos.x, srcPos.y]; + } + + intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0); + + if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') { + var trs = target._private.rscratch; + var lw = trs.labelWidth; + var lh = trs.labelHeight; + var lx = trs.labelX; + var ly = trs.labelY; + var lw2 = lw / 2; + var lh2 = lh / 2; + var va = target.pstyle('text-valign').value; + + if (va === 'top') { + ly -= lh2; + } else if (va === 'bottom') { + ly += lh2; + } + + var ha = target.pstyle('text-halign').value; + + if (ha === 'left') { + lx -= lw2; + } else if (ha === 'right') { + lx += lw2; + } + + var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y); + + if (labelIntersect.length > 0) { + var refPt = srcPos; + var intSqdist = sqdist(refPt, array2point(intersect)); + var labIntSqdist = sqdist(refPt, array2point(labelIntersect)); + var minSqDist = intSqdist; + + if (labIntSqdist < intSqdist) { + intersect = labelIntersect; + minSqDist = labIntSqdist; + } + + if (labelIntersect.length > 2) { + var labInt2SqDist = sqdist(refPt, { + x: labelIntersect[2], + y: labelIntersect[3] + }); + + if (labInt2SqDist < minSqDist) { + intersect = [labelIntersect[2], labelIntersect[3]]; + } + } + } + } + } + + var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist); + var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist); + rs.endX = edgeEnd[0]; + rs.endY = edgeEnd[1]; + rs.arrowEndX = arrowEnd[0]; + rs.arrowEndY = arrowEnd[1]; + + if (srcManEndptVal === 'inside-to-node') { + intersect = [srcPos.x, srcPos.y]; + } else if (srcManEndpt.units) { + intersect = this.manualEndptToPx(source, srcManEndpt); + } else if (srcManEndptVal === 'outside-to-line') { + intersect = rs.srcIntn; // use cached value from ctrlpt calc + } else { + if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') { + p2_i = p2; + } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') { + p2_i = [tgtPos.x, tgtPos.y]; + } + + intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0); + + if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') { + var srs = source._private.rscratch; + var _lw = srs.labelWidth; + var _lh = srs.labelHeight; + var _lx = srs.labelX; + var _ly = srs.labelY; + + var _lw2 = _lw / 2; + + var _lh2 = _lh / 2; + + var _va = source.pstyle('text-valign').value; + + if (_va === 'top') { + _ly -= _lh2; + } else if (_va === 'bottom') { + _ly += _lh2; + } + + var _ha = source.pstyle('text-halign').value; + + if (_ha === 'left') { + _lx -= _lw2; + } else if (_ha === 'right') { + _lx += _lw2; + } + + var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y); + + if (_labelIntersect.length > 0) { + var _refPt = tgtPos; + + var _intSqdist = sqdist(_refPt, array2point(intersect)); + + var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect)); + + var _minSqDist = _intSqdist; + + if (_labIntSqdist < _intSqdist) { + intersect = [_labelIntersect[0], _labelIntersect[1]]; + _minSqDist = _labIntSqdist; + } + + if (_labelIntersect.length > 2) { + var _labInt2SqDist = sqdist(_refPt, { + x: _labelIntersect[2], + y: _labelIntersect[3] + }); + + if (_labInt2SqDist < _minSqDist) { + intersect = [_labelIntersect[2], _labelIntersect[3]]; + } + } + } + } + } + + var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist); + var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist); + rs.startX = edgeStart[0]; + rs.startY = edgeStart[1]; + rs.arrowStartX = arrowStart[0]; + rs.arrowStartY = arrowStart[1]; + + if (hasEndpts) { + if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) { + rs.badLine = true; + } else { + rs.badLine = false; + } + } + }; + + BRp$b.getSourceEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[0], + y: rs.haystackPts[1] + }; + + default: + return { + x: rs.arrowStartX, + y: rs.arrowStartY + }; + } + }; + + BRp$b.getTargetEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[2], + y: rs.haystackPts[3] + }; + + default: + return { + x: rs.arrowEndX, + y: rs.arrowEndY + }; + } + }; + + var BRp$a = {}; + + function pushBezierPts(r, edge, pts) { + var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) { + return qbezierAt(p1, p2, p3, t); + }; + + var _p = edge._private; + var bpts = _p.rstyle.bezierPts; + + for (var i = 0; i < r.bezierProjPcts.length; i++) { + var p = r.bezierProjPcts[i]; + bpts.push({ + x: qbezierAt$1(pts[0], pts[2], pts[4], p), + y: qbezierAt$1(pts[1], pts[3], pts[5], p) + }); + } + } + + BRp$a.storeEdgeProjections = function (edge) { + var _p = edge._private; + var rs = _p.rscratch; + var et = rs.edgeType; // clear the cached points state + + _p.rstyle.bezierPts = null; + _p.rstyle.linePts = null; + _p.rstyle.haystackPts = null; + + if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') { + _p.rstyle.bezierPts = []; + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + pushBezierPts(this, edge, rs.allpts.slice(i, i + 6)); + } + } else if (et === 'segments') { + var lpts = _p.rstyle.linePts = []; + + for (var i = 0; i + 1 < rs.allpts.length; i += 2) { + lpts.push({ + x: rs.allpts[i], + y: rs.allpts[i + 1] + }); + } + } else if (et === 'haystack') { + var hpts = rs.haystackPts; + _p.rstyle.haystackPts = [{ + x: hpts[0], + y: hpts[1] + }, { + x: hpts[2], + y: hpts[3] + }]; + } + + _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + }; + + BRp$a.recalculateEdgeProjections = function (edges) { + this.findEdgeControlPoints(edges); + }; + + /* global document */ + + var BRp$9 = {}; + + BRp$9.recalculateNodeLabelProjection = function (node) { + var content = node.pstyle('label').strValue; + + if (emptyString(content)) { + return; + } + + var textX, textY; + var _p = node._private; + var nodeWidth = node.width(); + var nodeHeight = node.height(); + var padding = node.padding(); + var nodePos = node.position(); + var textHalign = node.pstyle('text-halign').strValue; + var textValign = node.pstyle('text-valign').strValue; + var rs = _p.rscratch; + var rstyle = _p.rstyle; + + switch (textHalign) { + case 'left': + textX = nodePos.x - nodeWidth / 2 - padding; + break; + + case 'right': + textX = nodePos.x + nodeWidth / 2 + padding; + break; + + default: + // e.g. center + textX = nodePos.x; + } + + switch (textValign) { + case 'top': + textY = nodePos.y - nodeHeight / 2 - padding; + break; + + case 'bottom': + textY = nodePos.y + nodeHeight / 2 + padding; + break; + + default: + // e.g. middle + textY = nodePos.y; + } + + rs.labelX = textX; + rs.labelY = textY; + rstyle.labelX = textX; + rstyle.labelY = textY; + this.calculateLabelAngles(node); + this.applyLabelDimensions(node); + }; + + var lineAngleFromDelta = function lineAngleFromDelta(dx, dy) { + var angle = Math.atan(dy / dx); + + if (dx === 0 && angle < 0) { + angle = angle * -1; + } + + return angle; + }; + + var lineAngle = function lineAngle(p0, p1) { + var dx = p1.x - p0.x; + var dy = p1.y - p0.y; + return lineAngleFromDelta(dx, dy); + }; + + var bezierAngle = function bezierAngle(p0, p1, p2, t) { + var t0 = bound(0, t - 0.001, 1); + var t1 = bound(0, t + 0.001, 1); + var lp0 = qbezierPtAt(p0, p1, p2, t0); + var lp1 = qbezierPtAt(p0, p1, p2, t1); + return lineAngle(lp0, lp1); + }; + + BRp$9.recalculateEdgeLabelProjections = function (edge) { + var p; + var _p = edge._private; + var rs = _p.rscratch; + var r = this; + var content = { + mid: edge.pstyle('label').strValue, + source: edge.pstyle('source-label').strValue, + target: edge.pstyle('target-label').strValue + }; + + if (content.mid || content.source || content.target) ; else { + return; // no labels => no calcs + } // add center point to style so bounding box calculations can use it + // + + + p = { + x: rs.midX, + y: rs.midY + }; + + var setRs = function setRs(propName, prefix, value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + setPrefixedProperty(_p.rstyle, propName, prefix, value); + }; + + setRs('labelX', null, p.x); + setRs('labelY', null, p.y); + var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY); + setRs('labelAutoAngle', null, midAngle); + + var createControlPointInfo = function createControlPointInfo() { + if (createControlPointInfo.cache) { + return createControlPointInfo.cache; + } // use cache so only 1x per edge + + + var ctrlpts = []; // store each ctrlpt info init + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + var p0 = { + x: rs.allpts[i], + y: rs.allpts[i + 1] + }; + var p1 = { + x: rs.allpts[i + 2], + y: rs.allpts[i + 3] + }; // ctrlpt + + var p2 = { + x: rs.allpts[i + 4], + y: rs.allpts[i + 5] + }; + ctrlpts.push({ + p0: p0, + p1: p1, + p2: p2, + startDist: 0, + length: 0, + segments: [] + }); + } + + var bpts = _p.rstyle.bezierPts; + var nProjs = r.bezierProjPcts.length; + + function addSegment(cp, p0, p1, t0, t1) { + var length = dist(p0, p1); + var prevSegment = cp.segments[cp.segments.length - 1]; + var segment = { + p0: p0, + p1: p1, + t0: t0, + t1: t1, + startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0, + length: length + }; + cp.segments.push(segment); + cp.length += length; + } // update each ctrlpt with segment info + + + for (var _i = 0; _i < ctrlpts.length; _i++) { + var cp = ctrlpts[_i]; + var prevCp = ctrlpts[_i - 1]; + + if (prevCp) { + cp.startDist = prevCp.startDist + prevCp.length; + } + + addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first + + for (var j = 0; j < nProjs - 1; j++) { + addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]); + } + + addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last + } + + return createControlPointInfo.cache = ctrlpts; + }; + + var calculateEndProjection = function calculateEndProjection(prefix) { + var angle; + var isSrc = prefix === 'source'; + + if (!content[prefix]) { + return; + } + + var offset = edge.pstyle(prefix + '-text-offset').pfValue; + + switch (rs.edgeType) { + case 'self': + case 'compound': + case 'bezier': + case 'multibezier': + { + var cps = createControlPointInfo(); + var selected; + var startDist = 0; + var totalDist = 0; // find the segment we're on + + for (var i = 0; i < cps.length; i++) { + var _cp = cps[isSrc ? i : cps.length - 1 - i]; + + for (var j = 0; j < _cp.segments.length; j++) { + var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j]; + var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1; + startDist = totalDist; + totalDist += _seg.length; + + if (totalDist >= offset || lastSeg) { + selected = { + cp: _cp, + segment: _seg + }; + break; + } + } + + if (selected) { + break; + } + } + + var cp = selected.cp; + var seg = selected.segment; + var tSegment = (offset - startDist) / seg.length; + var segDt = seg.t1 - seg.t0; + var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment; + t = bound(0, t, 1); + p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t); + angle = bezierAngle(cp.p0, cp.p1, cp.p2, t); + break; + } + + case 'straight': + case 'segments': + case 'haystack': + { + var d = 0, + di, + d0; + var p0, p1; + var l = rs.allpts.length; + + for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) { + if (isSrc) { + p0 = { + x: rs.allpts[_i2], + y: rs.allpts[_i2 + 1] + }; + p1 = { + x: rs.allpts[_i2 + 2], + y: rs.allpts[_i2 + 3] + }; + } else { + p0 = { + x: rs.allpts[l - 2 - _i2], + y: rs.allpts[l - 1 - _i2] + }; + p1 = { + x: rs.allpts[l - 4 - _i2], + y: rs.allpts[l - 3 - _i2] + }; + } + + di = dist(p0, p1); + d0 = d; + d += di; + + if (d >= offset) { + break; + } + } + + var pD = offset - d0; + + var _t = pD / di; + + _t = bound(0, _t, 1); + p = lineAt(p0, p1, _t); + angle = lineAngle(p0, p1); + break; + } + } + + setRs('labelX', prefix, p.x); + setRs('labelY', prefix, p.y); + setRs('labelAutoAngle', prefix, angle); + }; + + calculateEndProjection('source'); + calculateEndProjection('target'); + this.applyLabelDimensions(edge); + }; + + BRp$9.applyLabelDimensions = function (ele) { + this.applyPrefixedLabelDimensions(ele); + + if (ele.isEdge()) { + this.applyPrefixedLabelDimensions(ele, 'source'); + this.applyPrefixedLabelDimensions(ele, 'target'); + } + }; + + BRp$9.applyPrefixedLabelDimensions = function (ele, prefix) { + var _p = ele._private; + var text = this.getLabelText(ele, prefix); + var labelDims = this.calculateLabelDimensions(ele, text); + var lineHeight = ele.pstyle('line-height').pfValue; + var textWrap = ele.pstyle('text-wrap').strValue; + var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || []; + var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1); + var normPerLineHeight = labelDims.height / numLines; + var labelLineHeight = normPerLineHeight * lineHeight; + var width = labelDims.width; + var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight; + setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight); + }; + + BRp$9.getLabelText = function (ele, prefix) { + var _p = ele._private; + var pfd = prefix ? prefix + '-' : ''; + var text = ele.pstyle(pfd + 'label').strValue; + var textTransform = ele.pstyle('text-transform').value; + + var rscratch = function rscratch(propName, value) { + if (value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + return value; + } else { + return getPrefixedProperty(_p.rscratch, propName, prefix); + } + }; // for empty text, skip all processing + + + if (!text) { + return ''; + } + + if (textTransform == 'none') ; else if (textTransform == 'uppercase') { + text = text.toUpperCase(); + } else if (textTransform == 'lowercase') { + text = text.toLowerCase(); + } + + var wrapStyle = ele.pstyle('text-wrap').value; + + if (wrapStyle === 'wrap') { + var labelKey = rscratch('labelKey'); // save recalc if the label is the same as before + + if (labelKey != null && rscratch('labelWrapKey') === labelKey) { + return rscratch('labelWrapCachedText'); + } + + var zwsp = "\u200B"; + var lines = text.split('\n'); + var maxW = ele.pstyle('text-max-width').pfValue; + var overflow = ele.pstyle('text-overflow-wrap').value; + var overflowAny = overflow === 'anywhere'; + var wrappedLines = []; + var wordsRegex = /[\s\u200b]+/; + var wordSeparator = overflowAny ? '' : ' '; + + for (var l = 0; l < lines.length; l++) { + var line = lines[l]; + var lineDims = this.calculateLabelDimensions(ele, line); + var lineW = lineDims.width; + + if (overflowAny) { + var processedLine = line.split('').join(zwsp); + line = processedLine; + } + + if (lineW > maxW) { + // line is too long + var words = line.split(wordsRegex); + var subline = ''; + + for (var w = 0; w < words.length; w++) { + var word = words[w]; + var testLine = subline.length === 0 ? word : subline + wordSeparator + word; + var testDims = this.calculateLabelDimensions(ele, testLine); + var testW = testDims.width; + + if (testW <= maxW) { + // word fits on current line + subline += word + wordSeparator; + } else { + // word starts new line + if (subline) { + wrappedLines.push(subline); + } + + subline = word + wordSeparator; + } + } // if there's remaining text, put it in a wrapped line + + + if (!subline.match(/^[\s\u200b]+$/)) { + wrappedLines.push(subline); + } + } else { + // line is already short enough + wrappedLines.push(line); + } + } // for + + + rscratch('labelWrapCachedLines', wrappedLines); + text = rscratch('labelWrapCachedText', wrappedLines.join('\n')); + rscratch('labelWrapKey', labelKey); + } else if (wrapStyle === 'ellipsis') { + var _maxW = ele.pstyle('text-max-width').pfValue; + var ellipsized = ''; + var ellipsis = "\u2026"; + var incLastCh = false; + + if (this.calculateLabelDimensions(ele, text).width < _maxW) { + // the label already fits + return text; + } + + for (var i = 0; i < text.length; i++) { + var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width; + + if (widthWithNextCh > _maxW) { + break; + } + + ellipsized += text[i]; + + if (i === text.length - 1) { + incLastCh = true; + } + } + + if (!incLastCh) { + ellipsized += ellipsis; + } + + return ellipsized; + } // if ellipsize + + + return text; + }; + + BRp$9.getLabelJustification = function (ele) { + var justification = ele.pstyle('text-justification').strValue; + var textHalign = ele.pstyle('text-halign').strValue; + + if (justification === 'auto') { + if (ele.isNode()) { + switch (textHalign) { + case 'left': + return 'right'; + + case 'right': + return 'left'; + + default: + return 'center'; + } + } else { + return 'center'; + } + } else { + return justification; + } + }; + + BRp$9.calculateLabelDimensions = function (ele, text) { + var r = this; + var cacheKey = hashString(text, ele._private.labelDimsKey); + var cache = r.labelDimCache || (r.labelDimCache = []); + var existingVal = cache[cacheKey]; + + if (existingVal != null) { + return existingVal; + } + + var padding = 0; // add padding around text dims, as the measurement isn't that accurate + + var fStyle = ele.pstyle('font-style').strValue; + var size = ele.pstyle('font-size').pfValue; + var family = ele.pstyle('font-family').strValue; + var weight = ele.pstyle('font-weight').strValue; + var canvas = this.labelCalcCanvas; + var c2d = this.labelCalcCanvasContext; + + if (!canvas) { + canvas = this.labelCalcCanvas = document.createElement('canvas'); + c2d = this.labelCalcCanvasContext = canvas.getContext('2d'); + var ds = canvas.style; + ds.position = 'absolute'; + ds.left = '-9999px'; + ds.top = '-9999px'; + ds.zIndex = '-1'; + ds.visibility = 'hidden'; + ds.pointerEvents = 'none'; + } + + c2d.font = "".concat(fStyle, " ").concat(weight, " ").concat(size, "px ").concat(family); + var width = 0; + var height = 0; + var lines = text.split('\n'); + + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var metrics = c2d.measureText(line); + var w = Math.ceil(metrics.width); + var h = size; + width = Math.max(w, width); + height += h; + } + + width += padding; + height += padding; + return cache[cacheKey] = { + width: width, + height: height + }; + }; + + BRp$9.calculateLabelAngle = function (ele, prefix) { + var _p = ele._private; + var rs = _p.rscratch; + var isEdge = ele.isEdge(); + var prefixDash = prefix ? prefix + '-' : ''; + var rot = ele.pstyle(prefixDash + 'text-rotation'); + var rotStr = rot.strValue; + + if (rotStr === 'none') { + return 0; + } else if (isEdge && rotStr === 'autorotate') { + return rs.labelAutoAngle; + } else if (rotStr === 'autorotate') { + return 0; + } else { + return rot.pfValue; + } + }; + + BRp$9.calculateLabelAngles = function (ele) { + var r = this; + var isEdge = ele.isEdge(); + var _p = ele._private; + var rs = _p.rscratch; + rs.labelAngle = r.calculateLabelAngle(ele); + + if (isEdge) { + rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source'); + rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target'); + } + }; + + var BRp$8 = {}; + var TOO_SMALL_CUT_RECT = 28; + var warnedCutRect = false; + + BRp$8.getNodeShape = function (node) { + var r = this; + var shape = node.pstyle('shape').value; + + if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) { + if (!warnedCutRect) { + warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead'); + warnedCutRect = true; + } + + return 'rectangle'; + } + + if (node.isParent()) { + if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') { + return shape; + } else { + return 'rectangle'; + } + } + + if (shape === 'polygon') { + var points = node.pstyle('shape-polygon-points').value; + return r.nodeShapes.makePolygon(points).name; + } + + return shape; + }; + + var BRp$7 = {}; + + BRp$7.registerCalculationListeners = function () { + var cy = this.cy; + var elesToUpdate = cy.collection(); + var r = this; + + var enqueue = function enqueue(eles) { + var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + elesToUpdate.merge(eles); + + if (dirtyStyleCaches) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; + rstyle.clean = false; + rstyle.cleanConnected = false; + } + } + }; + + r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) { + var ele = e.target; + enqueue(ele); + }).on('style.* background.*', function onDirtyStyle(e) { + var ele = e.target; + enqueue(ele, false); + }); + + var updateEleCalcs = function updateEleCalcs(willDraw) { + if (willDraw) { + var fns = r.onUpdateEleCalcsFns; // because we need to have up-to-date style (e.g. stylesheet mappers) + // before calculating rendered style (and pstyle might not be called yet) + + elesToUpdate.cleanStyle(); + + for (var i = 0; i < elesToUpdate.length; i++) { + var ele = elesToUpdate[i]; + var rstyle = ele._private.rstyle; + + if (ele.isNode() && !rstyle.cleanConnected) { + enqueue(ele.connectedEdges()); + rstyle.cleanConnected = true; + } + } + + if (fns) { + for (var _i = 0; _i < fns.length; _i++) { + var fn = fns[_i]; + fn(willDraw, elesToUpdate); + } + } + + r.recalculateRenderedStyle(elesToUpdate); + elesToUpdate = cy.collection(); + } + }; + + r.flushRenderedStyleQueue = function () { + updateEleCalcs(true); + }; + + r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs); + }; + + BRp$7.onUpdateEleCalcs = function (fn) { + var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []; + fns.push(fn); + }; + + BRp$7.recalculateRenderedStyle = function (eles, useCache) { + var isCleanConnected = function isCleanConnected(ele) { + return ele._private.rstyle.cleanConnected; + }; + + var edges = []; + var nodes = []; // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox() + + if (this.destroyed) { + return; + } // use cache by default for perf + + + if (useCache === undefined) { + useCache = true; + } + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; // an edge may be implicitly dirty b/c of one of its connected nodes + // (and a request for recalc may come in between frames) + + if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) { + rstyle.clean = false; + } // only update if dirty and in graph + + + if (useCache && rstyle.clean || ele.removed()) { + continue; + } // only update if not display: none + + + if (ele.pstyle('display').value === 'none') { + continue; + } + + if (_p.group === 'nodes') { + nodes.push(ele); + } else { + // edges + edges.push(ele); + } + + rstyle.clean = true; + } // update node data from projections + + + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + var _p2 = _ele._private; + var _rstyle = _p2.rstyle; + + var pos = _ele.position(); + + this.recalculateNodeLabelProjection(_ele); + _rstyle.nodeX = pos.x; + _rstyle.nodeY = pos.y; + _rstyle.nodeW = _ele.pstyle('width').pfValue; + _rstyle.nodeH = _ele.pstyle('height').pfValue; + } + + this.recalculateEdgeProjections(edges); // update edge data from projections + + for (var _i3 = 0; _i3 < edges.length; _i3++) { + var _ele2 = edges[_i3]; + var _p3 = _ele2._private; + var _rstyle2 = _p3.rstyle; + var rs = _p3.rscratch; // update rstyle positions + + _rstyle2.srcX = rs.arrowStartX; + _rstyle2.srcY = rs.arrowStartY; + _rstyle2.tgtX = rs.arrowEndX; + _rstyle2.tgtY = rs.arrowEndY; + _rstyle2.midX = rs.midX; + _rstyle2.midY = rs.midY; + _rstyle2.labelAngle = rs.labelAngle; + _rstyle2.sourceLabelAngle = rs.sourceLabelAngle; + _rstyle2.targetLabelAngle = rs.targetLabelAngle; + } + }; + + var BRp$6 = {}; + + BRp$6.updateCachedGrabbedEles = function () { + var eles = this.cachedZSortedEles; + + if (!eles) { + // just let this be recalculated on the next z sort tick + return; + } + + eles.drag = []; + eles.nondrag = []; + var grabTargets = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + + if (ele.grabbed() && !ele.isParent()) { + grabTargets.push(ele); + } else if (rs.inDragLayer) { + eles.drag.push(ele); + } else { + eles.nondrag.push(ele); + } + } // put the grab target nodes last so it's on top of its neighbourhood + + + for (var i = 0; i < grabTargets.length; i++) { + var ele = grabTargets[i]; + eles.drag.push(ele); + } + }; + + BRp$6.invalidateCachedZSortedEles = function () { + this.cachedZSortedEles = null; + }; + + BRp$6.getCachedZSortedEles = function (forceRecalc) { + if (forceRecalc || !this.cachedZSortedEles) { + var eles = this.cy.mutableElements().toArray(); + eles.sort(zIndexSort); + eles.interactive = eles.filter(function (ele) { + return ele.interactive(); + }); + this.cachedZSortedEles = eles; + this.updateCachedGrabbedEles(); + } else { + eles = this.cachedZSortedEles; + } + + return eles; + }; + + var BRp$5 = {}; + [BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) { + extend(BRp$5, props); + }); + + var BRp$4 = {}; + + BRp$4.getCachedImage = function (url, crossOrigin, onLoad) { + var r = this; + var imageCache = r.imageCache = r.imageCache || {}; + var cache = imageCache[url]; + + if (cache) { + if (!cache.image.complete) { + cache.image.addEventListener('load', onLoad); + } + + return cache.image; + } else { + cache = imageCache[url] = imageCache[url] || {}; + var image = cache.image = new Image(); // eslint-disable-line no-undef + + image.addEventListener('load', onLoad); + image.addEventListener('error', function () { + image.error = true; + }); // #1582 safari doesn't load data uris with crossOrigin properly + // https://bugs.webkit.org/show_bug.cgi?id=123978 + + var dataUriPrefix = 'data:'; + var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix; + + if (!isDataUri) { + // if crossorigin is 'null'(stringified), then manually set it to null + crossOrigin = crossOrigin === 'null' ? null : crossOrigin; + image.crossOrigin = crossOrigin; // prevent tainted canvas + } + + image.src = url; + return image; + } + }; + + var BRp$3 = {}; + /* global document, window, ResizeObserver, MutationObserver */ + + BRp$3.registerBinding = function (target, event, handler, useCapture) { + // eslint-disable-line no-unused-vars + var args = Array.prototype.slice.apply(arguments, [1]); // copy + + var b = this.binder(target); + return b.on.apply(b, args); + }; + + BRp$3.binder = function (tgt) { + var r = this; + var tgtIsDom = tgt === window || tgt === document || tgt === document.body || domElement(tgt); + + if (r.supportsPassiveEvents == null) { + // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + var supportsPassive = false; + + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + supportsPassive = true; + return true; + } + }); + window.addEventListener('test', null, opts); + } catch (err) {// not supported + } + + r.supportsPassiveEvents = supportsPassive; + } + + var on = function on(event, handler, useCapture) { + var args = Array.prototype.slice.call(arguments); + + if (tgtIsDom && r.supportsPassiveEvents) { + // replace useCapture w/ opts obj + args[2] = { + capture: useCapture != null ? useCapture : false, + passive: false, + once: false + }; + } + + r.bindings.push({ + target: tgt, + args: args + }); + (tgt.addEventListener || tgt.on).apply(tgt, args); + return this; + }; + + return { + on: on, + addEventListener: on, + addListener: on, + bind: on + }; + }; + + BRp$3.nodeIsDraggable = function (node) { + return node && node.isNode() && !node.locked() && node.grabbable(); + }; + + BRp$3.nodeIsGrabbable = function (node) { + return this.nodeIsDraggable(node) && node.interactive(); + }; + + BRp$3.load = function () { + var r = this; + + var isSelected = function isSelected(ele) { + return ele.selected(); + }; + + var triggerEvents = function triggerEvents(target, names, e, position) { + if (target == null) { + target = r.cy; + } + + for (var i = 0; i < names.length; i++) { + var name = names[i]; + target.emit({ + originalEvent: e, + type: name, + position: position + }); + } + }; + + var isMultSelKeyDown = function isMultSelKeyDown(e) { + return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey + }; + + var allowPanningPassthrough = function allowPanningPassthrough(down, downs) { + var allowPassthrough = true; + + if (r.cy.hasCompoundNodes() && down && down.pannable()) { + // a grabbable compound node below the ele => no passthrough panning + for (var i = 0; downs && i < downs.length; i++) { + var down = downs[i]; //if any parent node in event hierarchy isn't pannable, reject passthrough + + if (down.isNode() && down.isParent() && !down.pannable()) { + allowPassthrough = false; + break; + } + } + } else { + allowPassthrough = true; + } + + return allowPassthrough; + }; + + var setGrabbed = function setGrabbed(ele) { + ele[0]._private.grabbed = true; + }; + + var setFreed = function setFreed(ele) { + ele[0]._private.grabbed = false; + }; + + var setInDragLayer = function setInDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = true; + }; + + var setOutDragLayer = function setOutDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = false; + }; + + var setGrabTarget = function setGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = true; + }; + + var removeGrabTarget = function removeGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = false; + }; + + var addToDragList = function addToDragList(ele, opts) { + var list = opts.addToList; + var listHasEle = list.has(ele); + + if (!listHasEle && ele.grabbable() && !ele.locked()) { + list.merge(ele); + setGrabbed(ele); + } + }; // helper function to determine which child nodes and inner edges + // of a compound node to be dragged as well as the grabbed and selected nodes + + + var addDescendantsToDrag = function addDescendantsToDrag(node, opts) { + if (!node.cy().hasCompoundNodes()) { + return; + } + + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + + var innerNodes = node.descendants(); + + if (opts.inDragLayer) { + innerNodes.forEach(setInDragLayer); + innerNodes.connectedEdges().forEach(setInDragLayer); + } + + if (opts.addToList) { + addToDragList(innerNodes, opts); + } + }; // adds the given nodes and its neighbourhood to the drag layer + + + var addNodesToDrag = function addNodesToDrag(nodes, opts) { + opts = opts || {}; + var hasCompoundNodes = nodes.cy().hasCompoundNodes(); + + if (opts.inDragLayer) { + nodes.forEach(setInDragLayer); + nodes.neighborhood().stdFilter(function (ele) { + return !hasCompoundNodes || ele.isEdge(); + }).forEach(setInDragLayer); + } + + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + + addDescendantsToDrag(nodes, opts); // always add to drag + // also add nodes and edges related to the topmost ancestor + + updateAncestorsInDragLayer(nodes, { + inDragLayer: opts.inDragLayer + }); + r.updateCachedGrabbedEles(); + }; + + var addNodeToDrag = addNodesToDrag; + + var freeDraggedElements = function freeDraggedElements(grabbedEles) { + if (!grabbedEles) { + return; + } // just go over all elements rather than doing a bunch of (possibly expensive) traversals + + + r.getCachedZSortedEles().forEach(function (ele) { + setFreed(ele); + setOutDragLayer(ele); + removeGrabTarget(ele); + }); + r.updateCachedGrabbedEles(); + }; // helper function to determine which ancestor nodes and edges should go + // to the drag layer (or should be removed from drag layer). + + + var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) { + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + + if (!node.cy().hasCompoundNodes()) { + return; + } // find top-level parent + + + var parent = node.ancestors().orphans(); // no parent node: no nodes to add to the drag layer + + if (parent.same(node)) { + return; + } + + var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants()); + var edges = nodes.connectedEdges(); + + if (opts.inDragLayer) { + edges.forEach(setInDragLayer); + nodes.forEach(setInDragLayer); + } + + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + }; + + var blurActiveDomElement = function blurActiveDomElement() { + if (document.activeElement != null && document.activeElement.blur != null) { + document.activeElement.blur(); + } + }; + + var haveMutationsApi = typeof MutationObserver !== 'undefined'; + var haveResizeObserverApi = typeof ResizeObserver !== 'undefined'; // watch for when the cy container is removed from the dom + + if (haveMutationsApi) { + r.removeObserver = new MutationObserver(function (mutns) { + // eslint-disable-line no-undef + for (var i = 0; i < mutns.length; i++) { + var mutn = mutns[i]; + var rNodes = mutn.removedNodes; + + if (rNodes) { + for (var j = 0; j < rNodes.length; j++) { + var rNode = rNodes[j]; + + if (rNode === r.container) { + r.destroy(); + break; + } + } + } + } + }); + + if (r.container.parentNode) { + r.removeObserver.observe(r.container.parentNode, { + childList: true + }); + } + } else { + r.registerBinding(r.container, 'DOMNodeRemoved', function (e) { + // eslint-disable-line no-unused-vars + r.destroy(); + }); + } + + var onResize = debounce_1(function () { + r.cy.resize(); + }, 100); + + if (haveMutationsApi) { + r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef + + r.styleObserver.observe(r.container, { + attributes: true + }); + } // auto resize + + + r.registerBinding(window, 'resize', onResize); // eslint-disable-line no-undef + + if (haveResizeObserverApi) { + r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef + + r.resizeObserver.observe(r.container); + } + + var forEachUp = function forEachUp(domEle, fn) { + while (domEle != null) { + fn(domEle); + domEle = domEle.parentNode; + } + }; + + var invalidateCoords = function invalidateCoords() { + r.invalidateContainerClientCoordsCache(); + }; + + forEachUp(r.container, function (domEle) { + r.registerBinding(domEle, 'transitionend', invalidateCoords); + r.registerBinding(domEle, 'animationend', invalidateCoords); + r.registerBinding(domEle, 'scroll', invalidateCoords); + }); // stop right click menu from appearing on cy + + r.registerBinding(r.container, 'contextmenu', function (e) { + e.preventDefault(); + }); + + var inBoxSelection = function inBoxSelection() { + return r.selection[4] !== 0; + }; + + var eventInContainer = function eventInContainer(e) { + // save cycles if mouse events aren't to be captured + var containerPageCoords = r.findContainerClientCoords(); + var x = containerPageCoords[0]; + var y = containerPageCoords[1]; + var width = containerPageCoords[2]; + var height = containerPageCoords[3]; + var positions = e.touches ? e.touches : [e]; + var atLeastOnePosInside = false; + + for (var i = 0; i < positions.length; i++) { + var p = positions[i]; + + if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) { + atLeastOnePosInside = true; + break; + } + } + + if (!atLeastOnePosInside) { + return false; + } + + var container = r.container; + var target = e.target; + var tParent = target.parentNode; + var containerIsTarget = false; + + while (tParent) { + if (tParent === container) { + containerIsTarget = true; + break; + } + + tParent = tParent.parentNode; + } + + if (!containerIsTarget) { + return false; + } // if target is outisde cy container, then this event is not for us + + + return true; + }; // Primary key + + + r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) { + if (!eventInContainer(e)) { + return; + } + + e.preventDefault(); + blurActiveDomElement(); + r.hoverData.capture = true; + r.hoverData.which = e.which; + var cy = r.cy; + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var select = r.selection; + var nears = r.findNearestElements(pos[0], pos[1], true, false); + var near = nears[0]; + var draggedElements = r.dragData.possibleDragElements; + r.hoverData.mdownPos = pos; + r.hoverData.mdownGPos = gpos; + + var checkForTaphold = function checkForTaphold() { + r.hoverData.tapholdCancelled = false; + clearTimeout(r.hoverData.tapholdTimeout); + r.hoverData.tapholdTimeout = setTimeout(function () { + if (r.hoverData.tapholdCancelled) { + return; + } else { + var ele = r.hoverData.down; + + if (ele) { + ele.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } else { + cy.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + }, r.tapholdDuration); + }; // Right click button + + + if (e.which == 3) { + r.hoverData.cxtStarted = true; + var cxtEvt = { + originalEvent: e, + type: 'cxttapstart', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (near) { + near.activate(); + near.emit(cxtEvt); + r.hoverData.down = near; + } else { + cy.emit(cxtEvt); + } + + r.hoverData.downTime = new Date().getTime(); + r.hoverData.cxtDragged = false; // Primary button + } else if (e.which == 1) { + if (near) { + near.activate(); + } // Element dragging + + + { + // If something is under the cursor and it is draggable, prepare to grab it + if (near != null) { + if (r.nodeIsGrabbable(near)) { + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: pos[0], + y: pos[1] + } + }; + }; + + var triggerGrab = function triggerGrab(ele) { + ele.emit(makeEvent('grab')); + }; + + setGrabTarget(near); + + if (!near.selected()) { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + addNodeToDrag(near, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')).emit(makeEvent('grab')); + } else { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + var selectedNodes = cy.$(function (ele) { + return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')); + selectedNodes.forEach(triggerGrab); + } + + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + } + + r.hoverData.down = near; + r.hoverData.downs = nears; + r.hoverData.downTime = new Date().getTime(); + } + triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, { + x: pos[0], + y: pos[1] + }); + + if (near == null) { + select[4] = 1; + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } else if (near.pannable()) { + select[4] = 1; // for future pan + } + + checkForTaphold(); + } // Initialize selection box coordinates + + + select[0] = select[2] = pos[0]; + select[1] = select[3] = pos[1]; + }, false); + r.registerBinding(window, 'mousemove', function mousemoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + + if (!capture && !eventInContainer(e)) { + return; + } + + var preventDefault = false; + var cy = r.cy; + var zoom = cy.zoom(); + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var mdownPos = r.hoverData.mdownPos; + var mdownGPos = r.hoverData.mdownGPos; + var select = r.selection; + var near = null; + + if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) { + near = r.findNearestElement(pos[0], pos[1], true, false); + } + + var last = r.hoverData.last; + var down = r.hoverData.down; + var disp = [pos[0] - select[2], pos[1] - select[3]]; + var draggedElements = r.dragData.possibleDragElements; + var isOverThresholdDrag; + + if (mdownGPos) { + var dx = gpos[0] - mdownGPos[0]; + var dx2 = dx * dx; + var dy = gpos[1] - mdownGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2; + } + + var multSelKeyDown = isMultSelKeyDown(e); + + if (isOverThresholdDrag) { + r.hoverData.tapholdCancelled = true; + } + + var updateDragDelta = function updateDragDelta() { + var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || []; + + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + }; + + preventDefault = true; + triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, { + x: pos[0], + y: pos[1] + }); + + var goIntoBoxMode = function goIntoBoxMode() { + r.data.bgActivePosistion = undefined; + + if (!r.hoverData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: pos[0], + y: pos[1] + } + }); + } + + select[4] = 1; + r.hoverData.selecting = true; + r.redrawHint('select', true); + r.redraw(); + }; // trigger context drag if rmouse down + + + if (r.hoverData.which === 3) { + // but only if over threshold + if (isOverThresholdDrag) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + r.hoverData.cxtDragged = true; + + if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) { + if (r.hoverData.cxtOver) { + r.hoverData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: pos[0], + y: pos[1] + } + }); + } + + r.hoverData.cxtOver = near; + + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + } // Check if we are drag panning the entire graph + + } else if (r.hoverData.dragging) { + preventDefault = true; + + if (cy.panningEnabled() && cy.userPanningEnabled()) { + var deltaP; + + if (r.hoverData.justStartedPan) { + var mdPos = r.hoverData.mdownPos; + deltaP = { + x: (pos[0] - mdPos[0]) * zoom, + y: (pos[1] - mdPos[1]) * zoom + }; + r.hoverData.justStartedPan = false; + } else { + deltaP = { + x: disp[0] * zoom, + y: disp[1] * zoom + }; + } + + cy.panBy(deltaP); + cy.emit('dragpan'); + r.hoverData.dragged = true; + } // Needs reproject due to pan changing viewport + + + pos = r.projectIntoViewport(e.clientX, e.clientY); // Checks primary button down & out of time & mouse not moved much + } else if (select[4] == 1 && (down == null || down.pannable())) { + if (isOverThresholdDrag) { + if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) { + goIntoBoxMode(); + } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs); + + if (allowPassthrough) { + r.hoverData.dragging = true; + r.hoverData.justStartedPan = true; + select[4] = 0; + r.data.bgActivePosistion = array2point(mdownPos); + r.redrawHint('select', true); + r.redraw(); + } + } + + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + } + } else { + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + + if ((!down || !down.grabbed()) && near != last) { + if (last) { + triggerEvents(last, ['mouseout', 'tapdragout'], e, { + x: pos[0], + y: pos[1] + }); + } + + if (near) { + triggerEvents(near, ['mouseover', 'tapdragover'], e, { + x: pos[0], + y: pos[1] + }); + } + + r.hoverData.last = near; + } + + if (down) { + if (isOverThresholdDrag) { + // then we can take action + if (cy.boxSelectionEnabled() && multSelKeyDown) { + // then selection overrides + if (down && down.grabbed()) { + freeDraggedElements(draggedElements); + down.emit('freeon'); + draggedElements.emit('free'); + + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + + goIntoBoxMode(); + } else if (down && down.grabbed() && r.nodeIsDraggable(down)) { + // drag node + var justStartedDrag = !r.dragData.didDrag; + + if (justStartedDrag) { + r.redrawHint('eles', true); + } + + r.dragData.didDrag = true; // indicate that we actually did drag the node + // now, add the elements to the drag layer if not done already + + if (!r.hoverData.draggingEles) { + addNodesToDrag(draggedElements, { + inDragLayer: true + }); + } + + var totalShift = { + x: 0, + y: 0 + }; + + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + + if (justStartedDrag) { + var dragDelta = r.hoverData.dragDelta; + + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + + r.hoverData.draggingEles = true; + draggedElements.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + r.redraw(); + } + } else { + // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant + updateDragDelta(); + } + } // prevent the dragging from triggering text selection on the page + + + preventDefault = true; + } + + select[2] = pos[0]; + select[3] = pos[1]; + + if (preventDefault) { + if (e.stopPropagation) e.stopPropagation(); + if (e.preventDefault) e.preventDefault(); + return false; + } + }, false); + var clickTimeout, didDoubleClick, prevClickTimeStamp; + r.registerBinding(window, 'mouseup', function mouseupHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + + if (!capture) { + return; + } + + r.hoverData.capture = false; + var cy = r.cy; + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var select = r.selection; + var near = r.findNearestElement(pos[0], pos[1], true, false); + var draggedElements = r.dragData.possibleDragElements; + var down = r.hoverData.down; + var multSelKeyDown = isMultSelKeyDown(e); + + if (r.data.bgActivePosistion) { + r.redrawHint('select', true); + r.redraw(); + } + + r.hoverData.tapholdCancelled = true; + r.data.bgActivePosistion = undefined; // not active bg now + + if (down) { + down.unactivate(); + } + + if (r.hoverData.which === 3) { + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + if (!r.hoverData.cxtDragged) { + var cxtTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtTap); + } else { + cy.emit(cxtTap); + } + } + + r.hoverData.cxtDragged = false; + r.hoverData.which = null; + } else if (r.hoverData.which === 1) { + triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, { + x: pos[0], + y: pos[1] + }); + + if (!r.dragData.didDrag && // didn't move a node around + !r.hoverData.dragged && // didn't pan + !r.hoverData.selecting && // not box selection + !r.hoverData.isOverThresholdDrag // didn't move too much + ) { + triggerEvents(down, ["click", "tap", "vclick"], e, { + x: pos[0], + y: pos[1] + }); + didDoubleClick = false; + + if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { + clickTimeout && clearTimeout(clickTimeout); + didDoubleClick = true; + prevClickTimeStamp = null; + triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e, { + x: pos[0], + y: pos[1] + }); + } else { + clickTimeout = setTimeout(function () { + if (didDoubleClick) return; + triggerEvents(down, ["oneclick", "onetap", "voneclick"], e, { + x: pos[0], + y: pos[1] + }); + }, cy.multiClickDebounceTime()); + prevClickTimeStamp = e.timeStamp; + } + } // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something + + + if (down == null // not mousedown on node + && !r.dragData.didDrag // didn't move the node around + && !r.hoverData.selecting // not box selection + && !r.hoverData.dragged // didn't pan + && !isMultSelKeyDown(e)) { + cy.$(isSelected).unselect(['tapunselect']); + + if (draggedElements.length > 0) { + r.redrawHint('eles', true); + } + + r.dragData.possibleDragElements = draggedElements = cy.collection(); + } // Single selection + + + if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) { + if (near != null && near._private.selectable) { + if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) { + if (near.selected()) { + near.unselect(['tapunselect']); + } else { + near.select(['tapselect']); + } + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(near).unselect(['tapunselect']); + near.select(['tapselect']); + } + } + + r.redrawHint('eles', true); + } + } + + if (r.hoverData.selecting) { + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + r.redrawHint('select', true); + + if (box.length > 0) { + r.redrawHint('eles', true); + } + + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: pos[0], + y: pos[1] + } + }); + + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + + if (cy.selectionType() === 'additive') { + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(box).unselect(); + } + + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } // always need redraw in case eles unselectable + + + r.redraw(); + } // Cancel drag pan + + + if (r.hoverData.dragging) { + r.hoverData.dragging = false; + r.redrawHint('select', true); + r.redrawHint('eles', true); + r.redraw(); + } + + if (!select[4]) { + r.redrawHint('drag', true); + r.redrawHint('eles', true); + var downWasGrabbed = down && down.grabbed(); + freeDraggedElements(draggedElements); + + if (downWasGrabbed) { + down.emit('freeon'); + draggedElements.emit('free'); + + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + } + } // else not right mouse + + + select[4] = 0; + r.hoverData.down = null; + r.hoverData.cxtStarted = false; + r.hoverData.draggingEles = false; + r.hoverData.selecting = false; + r.hoverData.isOverThresholdDrag = false; + r.dragData.didDrag = false; + r.hoverData.dragged = false; + r.hoverData.dragDelta = []; + r.hoverData.mdownPos = null; + r.hoverData.mdownGPos = null; + }, false); + + var wheelHandler = function wheelHandler(e) { + if (r.scrollingPage) { + return; + } // while scrolling, ignore wheel-to-zoom + + + var cy = r.cy; + var zoom = cy.zoom(); + var pan = cy.pan(); + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y]; + + if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) { + // if pan dragging or cxt dragging, wheel movements make no zoom + e.preventDefault(); + return; + } + + if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) { + e.preventDefault(); + r.data.wheelZooming = true; + clearTimeout(r.data.wheelTimeout); + r.data.wheelTimeout = setTimeout(function () { + r.data.wheelZooming = false; + r.redrawHint('eles', true); + r.redraw(); + }, 150); + var diff; + + if (e.deltaY != null) { + diff = e.deltaY / -250; + } else if (e.wheelDeltaY != null) { + diff = e.wheelDeltaY / 1000; + } else { + diff = e.wheelDelta / 1000; + } + + diff = diff * r.wheelSensitivity; + var needsWheelFix = e.deltaMode === 1; + + if (needsWheelFix) { + // fixes slow wheel events on ff/linux and ff/windows + diff *= 33; + } + + var newZoom = cy.zoom() * Math.pow(10, diff); + + if (e.type === 'gesturechange') { + newZoom = r.gestureStartZoom * e.scale; + } + + cy.zoom({ + level: newZoom, + renderedPosition: { + x: rpos[0], + y: rpos[1] + } + }); + cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom'); + } + }; // Functions to help with whether mouse wheel should trigger zooming + // -- + + + r.registerBinding(r.container, 'wheel', wheelHandler, true); // disable nonstandard wheel events + // r.registerBinding(r.container, 'mousewheel', wheelHandler, true); + // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true); + // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox + + r.registerBinding(window, 'scroll', function scrollHandler(e) { + // eslint-disable-line no-unused-vars + r.scrollingPage = true; + clearTimeout(r.scrollingPageTimeout); + r.scrollingPageTimeout = setTimeout(function () { + r.scrollingPage = false; + }, 250); + }, true); // desktop safari pinch to zoom start + + r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) { + r.gestureStartZoom = r.cy.zoom(); + + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + e.preventDefault(); + } + }, true); + r.registerBinding(r.container, 'gesturechange', function (e) { + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + wheelHandler(e); + } + }, true); // Functions to help with handling mouseout/mouseover on the Cytoscape container + // Handle mouseout on Cytoscape container + + r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseout', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseover', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom + + var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom + + var center1, modelCenter1; // center point on start pinch to zoom + + var offsetLeft, offsetTop; + var containerWidth, containerHeight; + var twoFingersStartInside; + + var distance = function distance(x1, y1, x2, y2) { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + }; + + var distanceSq = function distanceSq(x1, y1, x2, y2) { + return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); + }; + + var touchstartHandler; + r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) { + r.hasTouchStarted = true; + + if (!eventInContainer(e)) { + return; + } + + blurActiveDomElement(); + r.touchData.capture = true; + r.data.bgActivePosistion = undefined; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } // record starting points for pinch-to-zoom + + + if (e.touches[1]) { + r.touchData.singleTouchMoved = true; + freeDraggedElements(r.dragData.touchDragEles); + var offsets = r.findContainerClientCoords(); + offsetLeft = offsets[0]; + offsetTop = offsets[1]; + containerWidth = offsets[2]; + containerHeight = offsets[3]; + f1x1 = e.touches[0].clientX - offsetLeft; + f1y1 = e.touches[0].clientY - offsetTop; + f2x1 = e.touches[1].clientX - offsetLeft; + f2y1 = e.touches[1].clientY - offsetTop; + twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight; + var pan = cy.pan(); + var zoom = cy.zoom(); + distance1 = distance(f1x1, f1y1, f2x1, f2y1); + distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1); + center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2]; + modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom]; // consider context tap + + var cxtDistThreshold = 200; + var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold; + + if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) { + var near1 = r.findNearestElement(now[0], now[1], true, true); + var near2 = r.findNearestElement(now[2], now[3], true, true); + + if (near1 && near1.isNode()) { + near1.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near1; + } else if (near2 && near2.isNode()) { + near2.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near2; + } else { + cy.emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxt = true; + r.touchData.cxtDragged = false; + r.data.bgActivePosistion = undefined; + r.redraw(); + return; + } + } + + if (e.touches[2]) { + // ignore + // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...) + if (cy.boxSelectionEnabled()) { + e.preventDefault(); + } + } else if (e.touches[1]) ; else if (e.touches[0]) { + var nears = r.findNearestElements(now[0], now[1], true, true); + var near = nears[0]; + + if (near != null) { + near.activate(); + r.touchData.start = near; + r.touchData.starts = nears; + + if (r.nodeIsGrabbable(near)) { + var draggedEles = r.dragData.touchDragEles = cy.collection(); + var selectedNodes = null; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + + if (near.selected()) { + // reset drag elements, since near will be added again + selectedNodes = cy.$(function (ele) { + return ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedEles + }); + } else { + addNodeToDrag(near, { + addToList: draggedEles + }); + } + + setGrabTarget(near); + + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: now[0], + y: now[1] + } + }; + }; + + near.emit(makeEvent('grabon')); + + if (selectedNodes) { + selectedNodes.forEach(function (n) { + n.emit(makeEvent('grab')); + }); + } else { + near.emit(makeEvent('grab')); + } + } + } + + triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, { + x: now[0], + y: now[1] + }); + + if (near == null) { + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } // Tap, taphold + // ----- + + + r.touchData.singleTouchMoved = false; + r.touchData.singleTouchStartTime = +new Date(); + clearTimeout(r.touchData.tapholdTimeout); + r.touchData.tapholdTimeout = setTimeout(function () { + if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect + && !r.touchData.selecting // box selection shouldn't allow taphold through + ) { + triggerEvents(r.touchData.start, ['taphold'], e, { + x: now[0], + y: now[1] + }); + } + }, r.tapholdDuration); + } + + if (e.touches.length >= 1) { + var sPos = r.touchData.startPosition = []; + + for (var i = 0; i < now.length; i++) { + sPos[i] = earlier[i] = now[i]; + } + + var touch0 = e.touches[0]; + r.touchData.startGPosition = [touch0.clientX, touch0.clientY]; + } + }, false); + var touchmoveHandler; + r.registerBinding(window, 'touchmove', touchmoveHandler = function touchmoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.touchData.capture; + + if (!capture && !eventInContainer(e)) { + return; + } + + var select = r.selection; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + var zoom = cy.zoom(); + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + var startGPos = r.touchData.startGPosition; + var isOverThresholdDrag; + + if (capture && e.touches[0] && startGPos) { + var disp = []; + + for (var j = 0; j < now.length; j++) { + disp[j] = now[j] - earlier[j]; + } + + var dx = e.touches[0].clientX - startGPos[0]; + var dx2 = dx * dx; + var dy = e.touches[0].clientY - startGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + isOverThresholdDrag = dist2 >= r.touchTapThreshold2; + } // context swipe cancelling + + + if (capture && r.touchData.cxt) { + e.preventDefault(); + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 ); + + var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2); + var factorSq = distance2Sq / distance1Sq; + var distThreshold = 150; + var distThresholdSq = distThreshold * distThreshold; + var factorThreshold = 1.5; + var factorThresholdSq = factorThreshold * factorThreshold; // cancel ctx gestures if the distance b/t the fingers increases + + if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) { + r.touchData.cxt = false; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + + if (r.touchData.start) { + r.touchData.start.unactivate().emit(cxtEvt); + r.touchData.start = null; + } else { + cy.emit(cxtEvt); + } + } + } // context swipe + + + if (capture && r.touchData.cxt) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: now[0], + y: now[1] + } + }; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + + if (r.touchData.start) { + r.touchData.start.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxtDragged = true; + var near = r.findNearestElement(now[0], now[1], true, true); + + if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) { + if (r.touchData.cxtOver) { + r.touchData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + + r.touchData.cxtOver = near; + + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } // box selection + + } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) { + e.preventDefault(); + r.data.bgActivePosistion = undefined; + this.lastThreeTouch = +new Date(); + + if (!r.touchData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: now[0], + y: now[1] + } + }); + } + + r.touchData.selecting = true; + r.touchData.didSelect = true; + select[4] = 1; + + if (!select || select.length === 0 || select[0] === undefined) { + select[0] = (now[0] + now[2] + now[4]) / 3; + select[1] = (now[1] + now[3] + now[5]) / 3; + select[2] = (now[0] + now[2] + now[4]) / 3 + 1; + select[3] = (now[1] + now[3] + now[5]) / 3 + 1; + } else { + select[2] = (now[0] + now[2] + now[4]) / 3; + select[3] = (now[1] + now[3] + now[5]) / 3; + } + + r.redrawHint('select', true); + r.redraw(); // pinch to zoom + } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom + && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) { + // two fingers => pinch to zoom + e.preventDefault(); + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + + if (draggedEles) { + r.redrawHint('drag', true); + + for (var i = 0; i < draggedEles.length; i++) { + var de_p = draggedEles[i]._private; + de_p.grabbed = false; + de_p.rscratch.inDragLayer = false; + } + } + + var _start = r.touchData.start; // (x2, y2) for fingers 1 and 2 + + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; + var distance2 = distance(f1x2, f1y2, f2x2, f2y2); // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 ); + // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq ); + + var factor = distance2 / distance1; + + if (twoFingersStartInside) { + // delta finger1 + var df1x = f1x2 - f1x1; + var df1y = f1y2 - f1y1; // delta finger 2 + + var df2x = f2x2 - f2x1; + var df2y = f2y2 - f2y1; // translation is the normalised vector of the two fingers movement + // i.e. so pinching cancels out and moving together pans + + var tx = (df1x + df2x) / 2; + var ty = (df1y + df2y) / 2; // now calculate the zoom + + var zoom1 = cy.zoom(); + var zoom2 = zoom1 * factor; + var pan1 = cy.pan(); // the model center point converted to the current rendered pos + + var ctrx = modelCenter1[0] * zoom1 + pan1.x; + var ctry = modelCenter1[1] * zoom1 + pan1.y; + var pan2 = { + x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx, + y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry + }; // remove dragged eles + + if (_start && _start.active()) { + var draggedEles = r.dragData.touchDragEles; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + + _start.unactivate().emit('freeon'); + + draggedEles.emit('free'); + + if (r.dragData.didDrag) { + _start.emit('dragfreeon'); + + draggedEles.emit('dragfree'); + } + } + + cy.viewport({ + zoom: zoom2, + pan: pan2, + cancelOnFailedZoom: true + }); + cy.emit('pinchzoom'); + distance1 = distance2; + f1x1 = f1x2; + f1y1 = f1y2; + f2x1 = f2x2; + f2y1 = f2y2; + r.pinching = true; + } // Re-project + + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning + ) { + var start = r.touchData.start; + var last = r.touchData.last; + var near; + + if (!r.hoverData.draggingEles && !r.swipePanning) { + near = r.findNearestElement(now[0], now[1], true, true); + } + + if (capture && start != null) { + e.preventDefault(); + } // dragging nodes + + + if (capture && start != null && r.nodeIsDraggable(start)) { + if (isOverThresholdDrag) { + // then dragging can happen + var draggedEles = r.dragData.touchDragEles; + var justStartedDrag = !r.dragData.didDrag; + + if (justStartedDrag) { + addNodesToDrag(draggedEles, { + inDragLayer: true + }); + } + + r.dragData.didDrag = true; + var totalShift = { + x: 0, + y: 0 + }; + + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + + if (justStartedDrag) { + r.redrawHint('eles', true); + var dragDelta = r.touchData.dragDelta; + + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + + r.hoverData.draggingEles = true; + draggedEles.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + + if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) { + r.redrawHint('eles', true); + } + + r.redraw(); + } else { + // otherwise keep track of drag delta for later + var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || []; + + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + } + } // touchmove + + + { + triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, { + x: now[0], + y: now[1] + }); + + if ((!start || !start.grabbed()) && near != last) { + if (last) { + last.emit({ + originalEvent: e, + type: 'tapdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + + if (near) { + near.emit({ + originalEvent: e, + type: 'tapdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } + + r.touchData.last = near; + } // check to cancel taphold + + if (capture) { + for (var i = 0; i < now.length; i++) { + if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) { + r.touchData.singleTouchMoved = true; + } + } + } // panning + + + if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts); + + if (allowPassthrough) { + e.preventDefault(); + + if (!r.data.bgActivePosistion) { + r.data.bgActivePosistion = array2point(r.touchData.startPosition); + } + + if (r.swipePanning) { + cy.panBy({ + x: disp[0] * zoom, + y: disp[1] * zoom + }); + cy.emit('dragpan'); + } else if (isOverThresholdDrag) { + r.swipePanning = true; + cy.panBy({ + x: dx * zoom, + y: dy * zoom + }); + cy.emit('dragpan'); + + if (start) { + start.unactivate(); + r.redrawHint('select', true); + r.touchData.start = null; + } + } + } // Re-project + + + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + } + + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning + + + if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + r.redraw(); + } + }, false); + var touchcancelHandler; + r.registerBinding(window, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + r.touchData.capture = false; + + if (start) { + start.unactivate(); + } + }); + var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp; + r.registerBinding(window, 'touchend', touchendHandler = function touchendHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + var capture = r.touchData.capture; + + if (capture) { + if (e.touches.length === 0) { + r.touchData.capture = false; + } + + e.preventDefault(); + } else { + return; + } + + var select = r.selection; + r.swipePanning = false; + r.hoverData.draggingEles = false; + var cy = r.cy; + var zoom = cy.zoom(); + var now = r.touchData.now; + var earlier = r.touchData.earlier; + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + if (start) { + start.unactivate(); + } + + var ctxTapend; + + if (r.touchData.cxt) { + ctxTapend = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + + if (start) { + start.emit(ctxTapend); + } else { + cy.emit(ctxTapend); + } + + if (!r.touchData.cxtDragged) { + var ctxTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: now[0], + y: now[1] + } + }; + + if (start) { + start.emit(ctxTap); + } else { + cy.emit(ctxTap); + } + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxt = false; + r.touchData.start = null; + r.redraw(); + return; + } // no more box selection if we don't have three fingers + + + if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) { + r.touchData.selecting = false; + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + select[0] = undefined; + select[1] = undefined; + select[2] = undefined; + select[3] = undefined; + select[4] = 0; + r.redrawHint('select', true); + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: now[0], + y: now[1] + } + }); + + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + + if (box.nonempty()) { + r.redrawHint('eles', true); + } + + r.redraw(); + } + + if (start != null) { + start.unactivate(); + } + + if (e.touches[2]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + + if (start != null) { + var startWasGrabbed = start._private.grabbed; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + + if (startWasGrabbed) { + start.emit('freeon'); + draggedEles.emit('free'); + + if (r.dragData.didDrag) { + start.emit('dragfreeon'); + draggedEles.emit('dragfree'); + } + } + + triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + start.unactivate(); + r.touchData.start = null; + } else { + var near = r.findNearestElement(now[0], now[1], true, true); + triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + } + + var dx = r.touchData.startPosition[0] - now[0]; + var dx2 = dx * dx; + var dy = r.touchData.startPosition[1] - now[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + var rdist2 = dist2 * zoom * zoom; // Tap event, roughly same as mouse click event for touch + + if (!r.touchData.singleTouchMoved) { + if (!start) { + cy.$(':selected').unselect(['tapunselect']); + } + + triggerEvents(start, ['tap', 'vclick'], e, { + x: now[0], + y: now[1] + }); + didDoubleTouch = false; + + if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { + touchTimeout && clearTimeout(touchTimeout); + didDoubleTouch = true; + prevTouchTimeStamp = null; + triggerEvents(start, ['dbltap', 'vdblclick'], e, { + x: now[0], + y: now[1] + }); + } else { + touchTimeout = setTimeout(function () { + if (didDoubleTouch) return; + triggerEvents(start, ['onetap', 'voneclick'], e, { + x: now[0], + y: now[1] + }); + }, cy.multiClickDebounceTime()); + prevTouchTimeStamp = e.timeStamp; + } + } // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance + + + if (start != null && !r.dragData.didDrag // didn't drag nodes around + && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection + ) { + if (cy.selectionType() === 'single') { + cy.$(isSelected).unmerge(start).unselect(['tapunselect']); + start.select(['tapselect']); + } else { + if (start.selected()) { + start.unselect(['tapunselect']); + } else { + start.select(['tapselect']); + } + } + + r.redrawHint('eles', true); + } + + r.touchData.singleTouchMoved = true; + } + + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } + + r.dragData.didDrag = false; // reset for next touchstart + + if (e.touches.length === 0) { + r.touchData.dragDelta = []; + r.touchData.startPosition = null; + r.touchData.startGPosition = null; + r.touchData.didSelect = false; + } + + if (e.touches.length < 2) { + if (e.touches.length === 1) { + // the old start global pos'n may not be the same finger that remains + r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY]; + } + + r.pinching = false; + r.redrawHint('eles', true); + r.redraw(); + } //r.redraw(); + + }, false); // fallback compatibility layer for ms pointer events + + if (typeof TouchEvent === 'undefined') { + var pointers = []; + + var makeTouch = function makeTouch(e) { + return { + clientX: e.clientX, + clientY: e.clientY, + force: 1, + identifier: e.pointerId, + pageX: e.pageX, + pageY: e.pageY, + radiusX: e.width / 2, + radiusY: e.height / 2, + screenX: e.screenX, + screenY: e.screenY, + target: e.target + }; + }; + + var makePointer = function makePointer(e) { + return { + event: e, + touch: makeTouch(e) + }; + }; + + var addPointer = function addPointer(e) { + pointers.push(makePointer(e)); + }; + + var removePointer = function removePointer(e) { + for (var i = 0; i < pointers.length; i++) { + var p = pointers[i]; + + if (p.event.pointerId === e.pointerId) { + pointers.splice(i, 1); + return; + } + } + }; + + var updatePointer = function updatePointer(e) { + var p = pointers.filter(function (p) { + return p.event.pointerId === e.pointerId; + })[0]; + p.event = e; + p.touch = makeTouch(e); + }; + + var addTouchesToEvent = function addTouchesToEvent(e) { + e.touches = pointers.map(function (p) { + return p.touch; + }); + }; + + var pointerIsMouse = function pointerIsMouse(e) { + return e.pointerType === 'mouse' || e.pointerType === 4; + }; + + r.registerBinding(r.container, 'pointerdown', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + e.preventDefault(); + addPointer(e); + addTouchesToEvent(e); + touchstartHandler(e); + }); + r.registerBinding(r.container, 'pointerup', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + removePointer(e); + addTouchesToEvent(e); + touchendHandler(e); + }); + r.registerBinding(r.container, 'pointercancel', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + removePointer(e); + addTouchesToEvent(e); + touchcancelHandler(e); + }); + r.registerBinding(r.container, 'pointermove', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + e.preventDefault(); + updatePointer(e); + addTouchesToEvent(e); + touchmoveHandler(e); + }); + } + }; + + var BRp$2 = {}; + + BRp$2.generatePolygon = function (name, points) { + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: points, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding); + } + }; + }; + + BRp$2.generateEllipse = function () { + return this.nodeShapes['ellipse'] = { + renderer: this, + name: 'ellipse', + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return checkInEllipse(x, y, width, height, centerX, centerY, padding); + } + }; + }; + + BRp$2.generateRoundPolygon = function (name, points) { + // Pre-compute control points + // Since these points depend on the radius length (which in turns depend on the width/height of the node) we will only pre-compute + // the unit vectors. + // For simplicity the layout will be: + // [ p0, UnitVectorP0P1, p1, UniVectorP1P2, ..., pn, UnitVectorPnP0 ] + var allPoints = new Array(points.length * 2); + + for (var i = 0; i < points.length / 2; i++) { + var sourceIndex = i * 2; + var destIndex = void 0; + + if (i < points.length / 2 - 1) { + destIndex = (i + 1) * 2; + } else { + destIndex = 0; + } + + allPoints[i * 4] = points[sourceIndex]; + allPoints[i * 4 + 1] = points[sourceIndex + 1]; + var xDest = points[destIndex] - points[sourceIndex]; + var yDest = points[destIndex + 1] - points[sourceIndex + 1]; + var norm = Math.sqrt(xDest * xDest + yDest * yDest); + allPoints[i * 4 + 2] = xDest / norm; + allPoints[i * 4 + 3] = yDest / norm; + } + + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: allPoints, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height); + } + }; + }; + + BRp$2.generateRoundRectangle = function () { + return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = { + renderer: this, + name: 'round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = cornerRadius * 2; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } // Check top left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } // Check top right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } // Check bottom right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } // Check bottom left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + return false; + } + }; + }; + + BRp$2.generateCutRectangle = function () { + return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = { + renderer: this, + name: 'cut-rectangle', + cornerLength: getCutRectangleCornerLength(), + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY) { + var cl = this.cornerLength; + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; // points are in clockwise order, inner (imaginary) triangle pt on [4, 5] + + return { + topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl], + topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl], + bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl], + bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl] + }; + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * this.cornerLength, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * this.cornerLength, height, [0, -1], padding)) { + return true; + } + + var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY); + return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft); + } + }; + }; + + BRp$2.generateBarrel = function () { + return this.nodeShapes['barrel'] = { + renderer: this, + name: 'barrel', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + // use two fixed t values for the bezier curve approximation + var t0 = 0.15; + var t1 = 0.5; + var t2 = 0.85; + var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + + var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) { + // approximate curve pts based on the two t values + var m0 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t0); + var m1 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t1); + var m2 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t2); + return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]]; + }; + + var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) { + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; + var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width; // points are in clockwise order, inner (imaginary) control pt on [4, 5] + + var pts = { + topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin], + topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset], + bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd], + bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset] + }; + pts.topLeft.isTop = true; + pts.topRight.isTop = true; + pts.bottomLeft.isBottom = true; + pts.bottomRight.isBottom = true; + return pts; + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) { + return true; + } + + var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY); + + var getCurveT = function getCurveT(x, y, curvePts) { + var x0 = curvePts[4]; + var x1 = curvePts[2]; + var x2 = curvePts[0]; + var y0 = curvePts[5]; // var y1 = curvePts[ 3 ]; + + var y2 = curvePts[1]; + var xMin = Math.min(x0, x2); + var xMax = Math.max(x0, x2); + var yMin = Math.min(y0, y2); + var yMax = Math.max(y0, y2); + + if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) { + var coeff = bezierPtsToQuadCoeff(x0, x1, x2); + var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x); + var validRoots = roots.filter(function (r) { + return 0 <= r && r <= 1; + }); + + if (validRoots.length > 0) { + return validRoots[0]; + } + } + + return null; + }; + + var curveRegions = Object.keys(barrelCurvePts); + + for (var i = 0; i < curveRegions.length; i++) { + var corner = curveRegions[i]; + var cornerPts = barrelCurvePts[corner]; + var t = getCurveT(x, y, cornerPts); + + if (t == null) { + continue; + } + + var y0 = cornerPts[5]; + var y1 = cornerPts[3]; + var y2 = cornerPts[1]; + var bezY = qbezierAt(y0, y1, y2, t); + + if (cornerPts.isTop && bezY <= y) { + return true; + } + + if (cornerPts.isBottom && y <= bezY) { + return true; + } + } + + return false; + } + }; + }; + + BRp$2.generateBottomRoundrectangle = function () { + return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = { + renderer: this, + name: 'bottom-round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var topStartX = nodeX - (width / 2 + padding); + var topStartY = nodeY - (height / 2 + padding); + var topEndY = topStartY; + var topEndX = nodeX + (width / 2 + padding); + var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + + if (topIntersections.length > 0) { + return topIntersections; + } + + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = 2 * cornerRadius; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } // check non-rounded top side + + + var outerWidth = width / 2 + 2 * padding; + var outerHeight = height / 2 + 2 * padding; + var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; + + if (pointInsidePolygonPoints(x, y, points)) { + return true; + } // Check bottom right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } // Check bottom left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + return false; + } + }; + }; + + BRp$2.registerNodeShapes = function () { + var nodeShapes = this.nodeShapes = {}; + var renderer = this; + this.generateEllipse(); + this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0)); + nodeShapes['square'] = nodeShapes['rectangle']; + this.generateRoundRectangle(); + this.generateCutRectangle(); + this.generateBarrel(); + this.generateBottomRoundrectangle(); + { + var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0]; + this.generatePolygon('diamond', diamondPoints); + this.generateRoundPolygon('round-diamond', diamondPoints); + } + this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0)); + this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0)); + var star5Points = new Array(20); + { + var outerPoints = generateUnitNgonPoints(5, 0); + var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); // Outer radius is 1; inner radius of star is smaller + + var innerRadius = 0.5 * (3 - Math.sqrt(5)); + innerRadius *= 1.57; + + for (var i = 0; i < innerPoints.length / 2; i++) { + innerPoints[i * 2] *= innerRadius; + innerPoints[i * 2 + 1] *= innerRadius; + } + + for (var i = 0; i < 20 / 4; i++) { + star5Points[i * 4] = outerPoints[i * 2]; + star5Points[i * 4 + 1] = outerPoints[i * 2 + 1]; + star5Points[i * 4 + 2] = innerPoints[i * 2]; + star5Points[i * 4 + 3] = innerPoints[i * 2 + 1]; + } + } + star5Points = fitPolygonToSquare(star5Points); + this.generatePolygon('star', star5Points); + this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]); + this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]); + this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]); + { + var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1]; + this.generatePolygon('tag', tagPoints); + this.generateRoundPolygon('round-tag', tagPoints); + } + + nodeShapes.makePolygon = function (points) { + // use caching on user-specified polygons so they are as fast as native shapes + var key = points.join('$'); + var name = 'polygon-' + key; + var shape; + + if (shape = this[name]) { + // got cached shape + return shape; + } // create and cache new shape + + + return renderer.generatePolygon(name, points); + }; + }; + + var BRp$1 = {}; + + BRp$1.timeToRender = function () { + return this.redrawTotalTime / this.redrawCount; + }; + + BRp$1.redraw = function (options) { + options = options || staticEmptyObject(); + var r = this; + + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = 0; + } + + if (r.lastRedrawTime === undefined) { + r.lastRedrawTime = 0; + } + + if (r.lastDrawTime === undefined) { + r.lastDrawTime = 0; + } + + r.requestedFrame = true; + r.renderOptions = options; + }; + + BRp$1.beforeRender = function (fn, priority) { + // the renderer can't add tick callbacks when destroyed + if (this.destroyed) { + return; + } + + if (priority == null) { + error('Priority is not optional for beforeRender'); + } + + var cbs = this.beforeRenderCallbacks; + cbs.push({ + fn: fn, + priority: priority + }); // higher priority callbacks executed first + + cbs.sort(function (a, b) { + return b.priority - a.priority; + }); + }; + + var beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) { + var cbs = r.beforeRenderCallbacks; + + for (var i = 0; i < cbs.length; i++) { + cbs[i].fn(willDraw, startTime); + } + }; + + BRp$1.startRenderLoop = function () { + var r = this; + var cy = r.cy; + + if (r.renderLoopStarted) { + return; + } else { + r.renderLoopStarted = true; + } + + var renderFn = function renderFn(requestTime) { + if (r.destroyed) { + return; + } + + if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) { + beforeRenderCallbacks(r, true, requestTime); + var startTime = performanceNow(); + r.render(r.renderOptions); + var endTime = r.lastDrawTime = performanceNow(); + + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = endTime - startTime; + } + + if (r.redrawCount === undefined) { + r.redrawCount = 0; + } + + r.redrawCount++; + + if (r.redrawTotalTime === undefined) { + r.redrawTotalTime = 0; + } + + var duration = endTime - startTime; + r.redrawTotalTime += duration; + r.lastRedrawTime = duration; // use a weighted average with a bias from the previous average so we don't spike so easily + + r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2; + r.requestedFrame = false; + } else { + beforeRenderCallbacks(r, false, requestTime); + } + + r.skipFrame = false; + requestAnimationFrame(renderFn); + }; + + requestAnimationFrame(renderFn); + }; + + var BaseRenderer = function BaseRenderer(options) { + this.init(options); + }; + + var BR = BaseRenderer; + var BRp = BR.prototype; + BRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl']; + + BRp.init = function (options) { + var r = this; + r.options = options; + r.cy = options.cy; + var ctr = r.container = options.cy.container(); // prepend a stylesheet in the head such that + + if (window$1) { + var document = window$1.document; + var head = document.head; + var stylesheetId = '__________cytoscape_stylesheet'; + var className = '__________cytoscape_container'; + var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null; + + if (ctr.className.indexOf(className) < 0) { + ctr.className = (ctr.className || '') + ' ' + className; + } + + if (!stylesheetAlreadyExists) { + var stylesheet = document.createElement('style'); + stylesheet.id = stylesheetId; + stylesheet.innerHTML = '.' + className + ' { position: relative; }'; + head.insertBefore(stylesheet, head.children[0]); // first so lowest priority + } + + var computedStyle = window$1.getComputedStyle(ctr); + var position = computedStyle.getPropertyValue('position'); + + if (position === 'static') { + warn('A Cytoscape container has style position:static and so can not use UI extensions properly'); + } + } + + r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag + + r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; //--Pointer-related data + + r.hoverData = { + down: null, + last: null, + downTime: null, + triggerMode: null, + dragging: false, + initialPan: [null, null], + capture: false + }; + r.dragData = { + possibleDragElements: [] + }; + r.touchData = { + start: null, + capture: false, + // These 3 fields related to tap, taphold events + startPosition: [null, null, null, null, null, null], + singleTouchStartTime: null, + singleTouchMoved: true, + now: [null, null, null, null, null, null], + earlier: [null, null, null, null, null, null] + }; + r.redraws = 0; + r.showFps = options.showFps; + r.debug = options.debug; + r.hideEdgesOnViewport = options.hideEdgesOnViewport; + r.textureOnViewport = options.textureOnViewport; + r.wheelSensitivity = options.wheelSensitivity; + r.motionBlurEnabled = options.motionBlur; // on by default + + r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null; + r.motionBlur = options.motionBlur; // for initial kick off + + r.motionBlurOpacity = options.motionBlurOpacity; + r.motionBlurTransparency = 1 - r.motionBlurOpacity; + r.motionBlurPxRatio = 1; + r.mbPxRBlurry = 1; //0.8; + + r.minMbLowQualFrames = 4; + r.fullQualityMb = false; + r.clearedForMotionBlur = []; + r.desktopTapThreshold = options.desktopTapThreshold; + r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold; + r.touchTapThreshold = options.touchTapThreshold; + r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold; + r.tapholdDuration = 500; + r.bindings = []; + r.beforeRenderCallbacks = []; + r.beforeRenderPriorities = { + // higher priority execs before lower one + animations: 400, + eleCalcs: 300, + eleTxrDeq: 200, + lyrTxrDeq: 150, + lyrTxrSkip: 100 + }; + r.registerNodeShapes(); + r.registerArrowShapes(); + r.registerCalculationListeners(); + }; + + BRp.notify = function (eventName, eles) { + var r = this; + var cy = r.cy; // the renderer can't be notified after it's destroyed + + if (this.destroyed) { + return; + } + + if (eventName === 'init') { + r.load(); + return; + } + + if (eventName === 'destroy') { + r.destroy(); + return; + } + + if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') { + r.invalidateCachedZSortedEles(); + } + + if (eventName === 'viewport') { + r.redrawHint('select', true); + } + + if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + } + + r.redrawHint('eles', true); + r.redrawHint('drag', true); + this.startRenderLoop(); + this.redraw(); + }; + + BRp.destroy = function () { + var r = this; + r.destroyed = true; + r.cy.stopAnimationLoop(); + + for (var i = 0; i < r.bindings.length; i++) { + var binding = r.bindings[i]; + var b = binding; + var tgt = b.target; + (tgt.off || tgt.removeEventListener).apply(tgt, b.args); + } + + r.bindings = []; + r.beforeRenderCallbacks = []; + r.onUpdateEleCalcsFns = []; + + if (r.removeObserver) { + r.removeObserver.disconnect(); + } + + if (r.styleObserver) { + r.styleObserver.disconnect(); + } + + if (r.resizeObserver) { + r.resizeObserver.disconnect(); + } + + if (r.labelCalcDiv) { + try { + document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef + } catch (e) {// ie10 issue #1014 + } + } + }; + + BRp.isHeadless = function () { + return false; + }; + + [BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) { + extend(BRp, props); + }); + + var fullFpsTime = 1000 / 60; // assume 60 frames per second + + var defs = { + setupDequeueing: function setupDequeueing(opts) { + return function setupDequeueingImpl() { + var self = this; + var r = this.renderer; + + if (self.dequeueingSetup) { + return; + } else { + self.dequeueingSetup = true; + } + + var queueRedraw = debounce_1(function () { + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, opts.deqRedrawThreshold); + + var dequeue = function dequeue(willDraw, frameStartTime) { + var startTime = performanceNow(); + var avgRenderTime = r.averageRedrawTime; + var renderTime = r.lastRedrawTime; + var deqd = []; + var extent = r.cy.extent(); + var pixelRatio = r.getPixelRatio(); // if we aren't in a tick that causes a draw, then the rendered style + // queue won't automatically be flushed before dequeueing starts + + if (!willDraw) { + r.flushRenderedStyleQueue(); + } + + while (true) { + // eslint-disable-line no-constant-condition + var now = performanceNow(); + var duration = now - startTime; + var frameDuration = now - frameStartTime; + + if (renderTime < fullFpsTime) { + // if we're rendering faster than the ideal fps, then do dequeueing + // during all of the remaining frame time + var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); + + if (frameDuration >= opts.deqFastCost * timeAvailable) { + break; + } + } else { + if (willDraw) { + if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) { + break; + } + } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) { + break; + } + } + + var thisDeqd = opts.deq(self, pixelRatio, extent); + + if (thisDeqd.length > 0) { + for (var i = 0; i < thisDeqd.length; i++) { + deqd.push(thisDeqd[i]); + } + } else { + break; + } + } // callbacks on dequeue + + + if (deqd.length > 0) { + opts.onDeqd(self, deqd); + + if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) { + queueRedraw(); + } + } + }; + + var priority = opts.priority || noop$1; + r.beforeRender(dequeue, priority(self)); + }; + } + }; + + // Uses keys so elements may share the same cache. + + var ElementTextureCacheLookup = /*#__PURE__*/function () { + function ElementTextureCacheLookup(getKey) { + var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify; + + _classCallCheck(this, ElementTextureCacheLookup); + + this.idsByKey = new Map$2(); + this.keyForId = new Map$2(); + this.cachesByLvl = new Map$2(); + this.lvls = []; + this.getKey = getKey; + this.doesEleInvalidateKey = doesEleInvalidateKey; + } + + _createClass(ElementTextureCacheLookup, [{ + key: "getIdsFor", + value: function getIdsFor(key) { + if (key == null) { + error("Can not get id list for null key"); + } + + var idsByKey = this.idsByKey; + var ids = this.idsByKey.get(key); + + if (!ids) { + ids = new Set$1(); + idsByKey.set(key, ids); + } + + return ids; + } + }, { + key: "addIdForKey", + value: function addIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key).add(id); + } + } + }, { + key: "deleteIdForKey", + value: function deleteIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key)["delete"](id); + } + } + }, { + key: "getNumberOfIdsForKey", + value: function getNumberOfIdsForKey(key) { + if (key == null) { + return 0; + } else { + return this.getIdsFor(key).size; + } + } + }, { + key: "updateKeyMappingFor", + value: function updateKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var currKey = this.getKey(ele); + this.deleteIdForKey(prevKey, id); + this.addIdForKey(currKey, id); + this.keyForId.set(id, currKey); + } + }, { + key: "deleteKeyMappingFor", + value: function deleteKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + this.deleteIdForKey(prevKey, id); + this.keyForId["delete"](id); + } + }, { + key: "keyHasChangedFor", + value: function keyHasChangedFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var newKey = this.getKey(ele); + return prevKey !== newKey; + } + }, { + key: "isInvalid", + value: function isInvalid(ele) { + return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele); + } + }, { + key: "getCachesAt", + value: function getCachesAt(lvl) { + var cachesByLvl = this.cachesByLvl, + lvls = this.lvls; + var caches = cachesByLvl.get(lvl); + + if (!caches) { + caches = new Map$2(); + cachesByLvl.set(lvl, caches); + lvls.push(lvl); + } + + return caches; + } + }, { + key: "getCache", + value: function getCache(key, lvl) { + return this.getCachesAt(lvl).get(key); + } + }, { + key: "get", + value: function get(ele, lvl) { + var key = this.getKey(ele); + var cache = this.getCache(key, lvl); // getting for an element may need to add to the id list b/c eles can share keys + + if (cache != null) { + this.updateKeyMappingFor(ele); + } + + return cache; + } + }, { + key: "getForCachedKey", + value: function getForCachedKey(ele, lvl) { + var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key + + var cache = this.getCache(key, lvl); + return cache; + } + }, { + key: "hasCache", + value: function hasCache(key, lvl) { + return this.getCachesAt(lvl).has(key); + } + }, { + key: "has", + value: function has(ele, lvl) { + var key = this.getKey(ele); + return this.hasCache(key, lvl); + } + }, { + key: "setCache", + value: function setCache(key, lvl, cache) { + cache.key = key; + this.getCachesAt(lvl).set(key, cache); + } + }, { + key: "set", + value: function set(ele, lvl, cache) { + var key = this.getKey(ele); + this.setCache(key, lvl, cache); + this.updateKeyMappingFor(ele); + } + }, { + key: "deleteCache", + value: function deleteCache(key, lvl) { + this.getCachesAt(lvl)["delete"](key); + } + }, { + key: "delete", + value: function _delete(ele, lvl) { + var key = this.getKey(ele); + this.deleteCache(key, lvl); + } + }, { + key: "invalidateKey", + value: function invalidateKey(key) { + var _this = this; + + this.lvls.forEach(function (lvl) { + return _this.deleteCache(key, lvl); + }); + } // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key) + + }, { + key: "invalidate", + value: function invalidate(ele) { + var id = ele.id(); + var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key) + + this.deleteKeyMappingFor(ele); + var entireKeyInvalidated = this.doesEleInvalidateKey(ele); + + if (entireKeyInvalidated) { + // clear mapping for current key + this.invalidateKey(key); + } + + return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; + } + }]); + + return ElementTextureCacheLookup; + }(); + + var minTxrH = 25; // the size of the texture cache for small height eles (special case) + + var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up + + var minLvl$1 = -4; // when scaling smaller than that we don't need to re-render + + var maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful) + + var maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used + + var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps + + var defTxrWidth = 1024; // default/minimum texture width + + var maxTxrW = 1024; // the maximum width of a texture + + var maxTxrH = 1024; // the maximum height of a texture + + var minUtility = 0.2; // if usage of texture is less than this, it is retired + + var maxFullness = 0.8; // fullness of texture after which queue removal is checked + + var maxFullnessChecks = 10; // dequeued after this many checks + + var deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame + + var deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time + + var deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing + + var deqFastCost$1 = 0.9; // % of frame time to be used when >60fps + + var deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile + + var maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch + + var getTxrReasons = { + dequeue: 'dequeue', + downscale: 'downscale', + highQuality: 'highQuality' + }; + var initDefaults = defaults$g({ + getKey: null, + doesEleInvalidateKey: falsify, + drawElement: null, + getBoundingBox: null, + getRotationPoint: null, + getRotationOffset: null, + isVisible: trueify, + allowEdgeTxrCaching: true, + allowParentTxrCaching: true + }); + + var ElementTextureCache = function ElementTextureCache(renderer, initOptions) { + var self = this; + self.renderer = renderer; + self.onDequeues = []; + var opts = initDefaults(initOptions); + extend(self, opts); + self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey); + self.setupDequeueing(); + }; + + var ETCp = ElementTextureCache.prototype; + ETCp.reasons = getTxrReasons; // the list of textures in which new subtextures for elements can be placed + + ETCp.getTextureQueue = function (txrH) { + var self = this; + self.eleImgCaches = self.eleImgCaches || {}; + return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || []; + }; // the list of usused textures which can be recycled (in use in texture queue) + + + ETCp.getRetiredTextureQueue = function (txrH) { + var self = this; + var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {}; + var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || []; + return rtxtrQ; + }; // queue of element draw requests at different scale levels + + + ETCp.getElementQueue = function () { + var self = this; + var q = self.eleCacheQueue = self.eleCacheQueue || new heap(function (a, b) { + return b.reqs - a.reqs; + }); + return q; + }; // queue of element draw requests at different scale levels (element id lookup) + + + ETCp.getElementKeyToQueue = function () { + var self = this; + var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {}; + return k2q; + }; + + ETCp.getElement = function (ele, bb, pxRatio, lvl, reason) { + var self = this; + var r = this.renderer; + var zoom = r.cy.zoom(); + var lookup = this.lookup; + + if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) { + return null; + } + + if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) { + return null; + } + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + } + + if (lvl < minLvl$1) { + lvl = minLvl$1; + } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) { + return null; + } + + var scale = Math.pow(2, lvl); + var eleScaledH = bb.h * scale; + var eleScaledW = bb.w * scale; + var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale); + + if (!this.isVisible(ele, scaledLabelShown)) { + return null; + } + + var eleCache = lookup.get(ele, lvl); // if this get was on an unused/invalidated cache, then restore the texture usage metric + + if (eleCache && eleCache.invalidated) { + eleCache.invalidated = false; + eleCache.texture.invalidatedWidth -= eleCache.width; + } + + if (eleCache) { + return eleCache; + } + + var txrH; // which texture height this ele belongs to + + if (eleScaledH <= minTxrH) { + txrH = minTxrH; + } else if (eleScaledH <= txrStepH) { + txrH = txrStepH; + } else { + txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH; + } + + if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) { + return null; // caching large elements is not efficient + } + + var txrQ = self.getTextureQueue(txrH); // first try the second last one in case it has space at the end + + var txr = txrQ[txrQ.length - 2]; + + var addNewTxr = function addNewTxr() { + return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW); + }; // try the last one if there is no second last one + + + if (!txr) { + txr = txrQ[txrQ.length - 1]; + } // if the last one doesn't exist, we need a first one + + + if (!txr) { + txr = addNewTxr(); + } // if there's no room in the current texture, we need a new one + + + if (txr.width - txr.usedWidth < eleScaledW) { + txr = addNewTxr(); + } + + var scalableFrom = function scalableFrom(otherCache) { + return otherCache && otherCache.scaledLabelShown === scaledLabelShown; + }; + + var deqing = reason && reason === getTxrReasons.dequeue; + var highQualityReq = reason && reason === getTxrReasons.highQuality; + var downscaleReq = reason && reason === getTxrReasons.downscale; + var higherCache; // the nearest cache with a higher level + + for (var l = lvl + 1; l <= maxLvl$1; l++) { + var c = lookup.get(ele, l); + + if (c) { + higherCache = c; + break; + } + } + + var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null; + + var downscale = function downscale() { + txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH); + }; // reset ele area in texture + + + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH); + + if (scalableFrom(oneUpCache)) { + // then we can relatively cheaply rescale the existing image w/o rerendering + downscale(); + } else if (scalableFrom(higherCache)) { + // then use the higher cache for now and queue the next level down + // to cheaply scale towards the smaller level + if (highQualityReq) { + for (var _l = higherCache.level; _l > lvl; _l--) { + oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale); + } + + downscale(); + } else { + self.queueElement(ele, higherCache.level - 1); + return higherCache; + } + } else { + var lowerCache; // the nearest cache with a lower level + + if (!deqing && !highQualityReq && !downscaleReq) { + for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) { + var _c = lookup.get(ele, _l2); + + if (_c) { + lowerCache = _c; + break; + } + } + } + + if (scalableFrom(lowerCache)) { + // then use the lower quality cache for now and queue the better one for later + self.queueElement(ele, lvl); + return lowerCache; + } + + txr.context.translate(txr.usedWidth, 0); + txr.context.scale(scale, scale); + this.drawElement(txr.context, ele, bb, scaledLabelShown, false); + txr.context.scale(1 / scale, 1 / scale); + txr.context.translate(-txr.usedWidth, 0); + } + + eleCache = { + x: txr.usedWidth, + texture: txr, + level: lvl, + scale: scale, + width: eleScaledW, + height: eleScaledH, + scaledLabelShown: scaledLabelShown + }; + txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing); + txr.eleCaches.push(eleCache); + lookup.set(ele, lvl, eleCache); + self.checkTextureFullness(txr); + return eleCache; + }; + + ETCp.invalidateElements = function (eles) { + for (var i = 0; i < eles.length; i++) { + this.invalidateElement(eles[i]); + } + }; + + ETCp.invalidateElement = function (ele) { + var self = this; + var lookup = self.lookup; + var caches = []; + var invalid = lookup.isInvalid(ele); + + if (!invalid) { + return; // override the invalidation request if the element key has not changed + } + + for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) { + var cache = lookup.getForCachedKey(ele, lvl); + + if (cache) { + caches.push(cache); + } + } + + var noOtherElesUseCache = lookup.invalidate(ele); + + if (noOtherElesUseCache) { + for (var i = 0; i < caches.length; i++) { + var _cache = caches[i]; + var txr = _cache.texture; // remove space from the texture it belongs to + + txr.invalidatedWidth += _cache.width; // mark the cache as invalidated + + _cache.invalidated = true; // retire the texture if its utility is low + + self.checkTextureUtility(txr); + } + } // remove from queue since the old req was for the old state + + + self.removeFromQueue(ele); + }; + + ETCp.checkTextureUtility = function (txr) { + // invalidate all entries in the cache if the cache size is small + if (txr.invalidatedWidth >= minUtility * txr.width) { + this.retireTexture(txr); + } + }; + + ETCp.checkTextureFullness = function (txr) { + // if texture has been mostly filled and passed over several times, remove + // it from the queue so we don't need to waste time looking at it to put new things + var self = this; + var txrQ = self.getTextureQueue(txr.height); + + if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) { + removeFromArray(txrQ, txr); + } else { + txr.fullnessChecks++; + } + }; + + ETCp.retireTexture = function (txr) { + var self = this; + var txrH = txr.height; + var txrQ = self.getTextureQueue(txrH); + var lookup = this.lookup; // retire the texture from the active / searchable queue: + + removeFromArray(txrQ, txr); + txr.retired = true; // remove the refs from the eles to the caches: + + var eleCaches = txr.eleCaches; + + for (var i = 0; i < eleCaches.length; i++) { + var eleCache = eleCaches[i]; + lookup.deleteCache(eleCache.key, eleCache.level); + } + + clearArray(eleCaches); // add the texture to a retired queue so it can be recycled in future: + + var rtxtrQ = self.getRetiredTextureQueue(txrH); + rtxtrQ.push(txr); + }; + + ETCp.addTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var txr = {}; + txrQ.push(txr); + txr.eleCaches = []; + txr.height = txrH; + txr.width = Math.max(defTxrWidth, minW); + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height); + txr.context = txr.canvas.getContext('2d'); + return txr; + }; + + ETCp.recycleTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var rtxtrQ = self.getRetiredTextureQueue(txrH); + + for (var i = 0; i < rtxtrQ.length; i++) { + var txr = rtxtrQ[i]; + + if (txr.width >= minW) { + txr.retired = false; + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + clearArray(txr.eleCaches); + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(0, 0, txr.width, txr.height); + removeFromArray(rtxtrQ, txr); + txrQ.push(txr); + return txr; + } + } + }; + + ETCp.queueElement = function (ele, lvl) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var existingReq = k2q[key]; + + if (existingReq) { + // use the max lvl b/c in between lvls are cheap to make + existingReq.level = Math.max(existingReq.level, lvl); + existingReq.eles.merge(ele); + existingReq.reqs++; + q.updateItem(existingReq); + } else { + var req = { + eles: ele.spawn().merge(ele), + level: lvl, + reqs: 1, + key: key + }; + q.push(req); + k2q[key] = req; + } + }; + + ETCp.dequeue = function (pxRatio + /*, extent*/ + ) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var dequeued = []; + var lookup = self.lookup; + + for (var i = 0; i < maxDeqSize$1; i++) { + if (q.size() > 0) { + var req = q.pop(); + var key = req.key; + var ele = req.eles[0]; // all eles have the same key + + var cacheExists = lookup.hasCache(ele, req.level); // clear out the key to req lookup + + k2q[key] = null; // dequeueing isn't necessary with an existing cache + + if (cacheExists) { + continue; + } + + dequeued.push(req); + var bb = self.getBoundingBox(ele); + self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue); + } else { + break; + } + } + + return dequeued; + }; + + ETCp.removeFromQueue = function (ele) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var req = k2q[key]; + + if (req != null) { + if (req.eles.length === 1) { + // remove if last ele in the req + // bring to front of queue + req.reqs = MAX_INT$1; + q.updateItem(req); + q.pop(); // remove from queue + + k2q[key] = null; // remove from lookup map + } else { + // otherwise just remove ele from req + req.eles.unmerge(ele); + } + } + }; + + ETCp.onDequeue = function (fn) { + this.onDequeues.push(fn); + }; + + ETCp.offDequeue = function (fn) { + removeFromArray(this.onDequeues, fn); + }; + + ETCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold$1, + deqCost: deqCost$1, + deqAvgCost: deqAvgCost$1, + deqNoDrawCost: deqNoDrawCost$1, + deqFastCost: deqFastCost$1, + deq: function deq(self, pxRatio, extent) { + return self.dequeue(pxRatio, extent); + }, + onDeqd: function onDeqd(self, deqd) { + for (var i = 0; i < self.onDequeues.length; i++) { + var fn = self.onDequeues[i]; + fn(deqd); + } + }, + shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) { + for (var i = 0; i < deqd.length; i++) { + var eles = deqd[i].eles; + + for (var j = 0; j < eles.length; j++) { + var bb = eles[j].boundingBox(); + + if (boundingBoxesIntersect(bb, extent)) { + return true; + } + } + } + + return false; + }, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.eleTxrDeq; + } + }); + + var defNumLayers = 1; // default number of layers to use + + var minLvl = -4; // when scaling smaller than that we don't need to re-render + + var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful) + + var maxZoom = 3.99; // beyond this zoom level, layered textures are not used + + var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile + + var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates + + var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame + + var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time + + var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing + + var deqFastCost = 0.9; // % of frame time to be used when >60fps + + var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch + + var invalidThreshold = 250; // time threshold for disabling b/c of invalidations + + var maxLayerArea = 4000 * 4000; // layers can't be bigger than this + + var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm) + // var log = function(){ console.log.apply( console, arguments ); }; + + var LayeredTextureCache = function LayeredTextureCache(renderer) { + var self = this; + var r = self.renderer = renderer; + var cy = r.cy; + self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ] + + self.firstGet = true; + self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; + self.skipping = false; + self.eleTxrDeqs = cy.collection(); + self.scheduleElementRefinement = debounce_1(function () { + self.refineElementTextures(self.eleTxrDeqs); + self.eleTxrDeqs.unmerge(self.eleTxrDeqs); + }, refineEleDebounceTime); + r.beforeRender(function (willDraw, now) { + if (now - self.lastInvalidationTime <= invalidThreshold) { + self.skipping = true; + } else { + self.skipping = false; + } + }, r.beforeRenderPriorities.lyrTxrSkip); + + var qSort = function qSort(a, b) { + return b.reqs - a.reqs; + }; + + self.layersQueue = new heap(qSort); + self.setupDequeueing(); + }; + + var LTCp = LayeredTextureCache.prototype; + var layerIdPool = 0; + var MAX_INT = Math.pow(2, 53) - 1; + + LTCp.makeLayer = function (bb, lvl) { + var scale = Math.pow(2, lvl); + var w = Math.ceil(bb.w * scale); + var h = Math.ceil(bb.h * scale); + var canvas = this.renderer.makeOffscreenCanvas(w, h); + var layer = { + id: layerIdPool = ++layerIdPool % MAX_INT, + bb: bb, + level: lvl, + width: w, + height: h, + canvas: canvas, + context: canvas.getContext('2d'), + eles: [], + elesQueue: [], + reqs: 0 + }; // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level); + + var cxt = layer.context; + var dx = -layer.bb.x1; + var dy = -layer.bb.y1; // do the transform on creation to save cycles (it's the same for all eles) + + cxt.scale(scale, scale); + cxt.translate(dx, dy); + return layer; + }; + + LTCp.getLayers = function (eles, pxRatio, lvl) { + var self = this; + var r = self.renderer; + var cy = r.cy; + var zoom = cy.zoom(); + var firstGet = self.firstGet; + self.firstGet = false; // log('--\nget layers with %s eles', eles.length); + //log eles.map(function(ele){ return ele.id() }) ); + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + + if (lvl < minLvl) { + lvl = minLvl; + } else if (zoom >= maxZoom || lvl > maxLvl) { + return null; + } + } + + self.validateLayersElesOrdering(lvl, eles); + var layersByLvl = self.layersByLevel; + var scale = Math.pow(2, lvl); + var layers = layersByLvl[lvl] = layersByLvl[lvl] || []; + var bb; + var lvlComplete = self.levelIsComplete(lvl, eles); + var tmpLayers; + + var checkTempLevels = function checkTempLevels() { + var canUseAsTmpLvl = function canUseAsTmpLvl(l) { + self.validateLayersElesOrdering(l, eles); + + if (self.levelIsComplete(l, eles)) { + tmpLayers = layersByLvl[l]; + return true; + } + }; + + var checkLvls = function checkLvls(dir) { + if (tmpLayers) { + return; + } + + for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) { + if (canUseAsTmpLvl(l)) { + break; + } + } + }; + + checkLvls(+1); + checkLvls(-1); // remove the invalid layers; they will be replaced as needed later in this function + + for (var i = layers.length - 1; i >= 0; i--) { + var layer = layers[i]; + + if (layer.invalid) { + removeFromArray(layers, layer); + } + } + }; + + if (!lvlComplete) { + // if the current level is incomplete, then use the closest, best quality layerset temporarily + // and later queue the current layerset so we can get the proper quality level soon + checkTempLevels(); + } else { + // log('level complete, using existing layers\n--'); + return layers; + } + + var getBb = function getBb() { + if (!bb) { + bb = makeBoundingBox(); + + for (var i = 0; i < eles.length; i++) { + updateBoundingBox(bb, eles[i].boundingBox()); + } + } + + return bb; + }; + + var makeLayer = function makeLayer(opts) { + opts = opts || {}; + var after = opts.after; + getBb(); + var area = bb.w * scale * (bb.h * scale); + + if (area > maxLayerArea) { + return null; + } + + var layer = self.makeLayer(bb, lvl); + + if (after != null) { + var index = layers.indexOf(after) + 1; + layers.splice(index, 0, layer); + } else if (opts.insert === undefined || opts.insert) { + // no after specified => first layer made so put at start + layers.unshift(layer); + } // if( tmpLayers ){ + //self.queueLayer( layer ); + // } + + + return layer; + }; + + if (self.skipping && !firstGet) { + // log('skip layers'); + return null; + } // log('do layers'); + + + var layer = null; + var maxElesPerLayer = eles.length / defNumLayers; + var allowLazyQueueing = !firstGet; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; // log('look at ele', ele.id()); + + var existingLayer = caches[lvl]; + + if (existingLayer) { + // reuse layer for later eles + // log('reuse layer for', ele.id()); + layer = existingLayer; + continue; + } + + if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) { + // log('make new layer for ele %s', ele.id()); + layer = makeLayer({ + insert: true, + after: layer + }); // if now layer can be built then we can't use layers at this level + + if (!layer) { + return null; + } // log('new layer with id %s', layer.id); + + } + + if (tmpLayers || allowLazyQueueing) { + // log('queue ele %s in layer %s', ele.id(), layer.id); + self.queueLayer(layer, ele); + } else { + // log('draw ele %s in layer %s', ele.id(), layer.id); + self.drawEleInLayer(layer, ele, lvl, pxRatio); + } + + layer.eles.push(ele); + caches[lvl] = layer; + } // log('--'); + + + if (tmpLayers) { + // then we only queued the current layerset and can't draw it yet + return tmpLayers; + } + + if (allowLazyQueueing) { + // log('lazy queue level', lvl); + return null; + } + + return layers; + }; // a layer may want to use an ele cache of a higher level to avoid blurriness + // so the layer level might not equal the ele level + + + LTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) { + return lvl; + }; + + LTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) { + var self = this; + var r = this.renderer; + var context = layer.context; + var bb = ele.boundingBox(); + + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + + lvl = self.getEleLevelForLayerLevel(lvl, pxRatio); + + { + r.setImgSmoothing(context, false); + } + + { + r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs); + } + + { + r.setImgSmoothing(context, true); + } + }; + + LTCp.levelIsComplete = function (lvl, eles) { + var self = this; + var layers = self.layersByLevel[lvl]; + + if (!layers || layers.length === 0) { + return false; + } + + var numElesInLayers = 0; + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; // if there are any eles needed to be drawn yet, the level is not complete + + if (layer.reqs > 0) { + return false; + } // if the layer is invalid, the level is not complete + + + if (layer.invalid) { + return false; + } + + numElesInLayers += layer.eles.length; + } // we should have exactly the number of eles passed in to be complete + + + if (numElesInLayers !== eles.length) { + return false; + } + + return true; + }; + + LTCp.validateLayersElesOrdering = function (lvl, eles) { + var layers = this.layersByLevel[lvl]; + + if (!layers) { + return; + } // if in a layer the eles are not in the same order, then the layer is invalid + // (i.e. there is an ele in between the eles in the layer) + + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var offset = -1; // find the offset + + for (var j = 0; j < eles.length; j++) { + if (layer.eles[0] === eles[j]) { + offset = j; + break; + } + } + + if (offset < 0) { + // then the layer has nonexistent elements and is invalid + this.invalidateLayer(layer); + continue; + } // the eles in the layer must be in the same continuous order, else the layer is invalid + + + var o = offset; + + for (var j = 0; j < layer.eles.length; j++) { + if (layer.eles[j] !== eles[o + j]) { + // log('invalidate based on ordering', layer.id); + this.invalidateLayer(layer); + break; + } + } + } + }; + + LTCp.updateElementsInLayers = function (eles, update) { + var self = this; + var isEles = element(eles[0]); // collect udpated elements (cascaded from the layers) and update each + // layer itself along the way + + for (var i = 0; i < eles.length; i++) { + var req = isEles ? null : eles[i]; + var ele = isEles ? eles[i] : eles[i].ele; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; + + for (var l = minLvl; l <= maxLvl; l++) { + var layer = caches[l]; + + if (!layer) { + continue; + } // if update is a request from the ele cache, then it affects only + // the matching level + + + if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) { + continue; + } + + update(layer, ele, req); + } + } + }; + + LTCp.haveLayers = function () { + var self = this; + var haveLayers = false; + + for (var l = minLvl; l <= maxLvl; l++) { + var layers = self.layersByLevel[l]; + + if (layers && layers.length > 0) { + haveLayers = true; + break; + } + } + + return haveLayers; + }; + + LTCp.invalidateElements = function (eles) { + var self = this; + + if (eles.length === 0) { + return; + } + + self.lastInvalidationTime = performanceNow(); // log('update invalidate layer time from eles'); + + if (eles.length === 0 || !self.haveLayers()) { + return; + } + + self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) { + self.invalidateLayer(layer); + }); + }; + + LTCp.invalidateLayer = function (layer) { + // log('update invalidate layer time'); + this.lastInvalidationTime = performanceNow(); + + if (layer.invalid) { + return; + } // save cycles + + + var lvl = layer.level; + var eles = layer.eles; + var layers = this.layersByLevel[lvl]; // log('invalidate layer', layer.id ); + + removeFromArray(layers, layer); // layer.eles = []; + + layer.elesQueue = []; + layer.invalid = true; + + if (layer.replacement) { + layer.replacement.invalid = true; + } + + for (var i = 0; i < eles.length; i++) { + var caches = eles[i]._private.rscratch.imgLayerCaches; + + if (caches) { + caches[lvl] = null; + } + } + }; + + LTCp.refineElementTextures = function (eles) { + var self = this; // log('refine', eles.length); + + self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) { + var rLyr = layer.replacement; + + if (!rLyr) { + rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level); + rLyr.replaces = layer; + rLyr.eles = layer.eles; // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level); + } + + if (!rLyr.reqs) { + for (var i = 0; i < rLyr.eles.length; i++) { + self.queueLayer(rLyr, rLyr.eles[i]); + } // log('queue replacement layer refinement', rLyr.id); + + } + }); + }; + + LTCp.enqueueElementRefinement = function (ele) { + + this.eleTxrDeqs.merge(ele); + this.scheduleElementRefinement(); + }; + + LTCp.queueLayer = function (layer, ele) { + var self = this; + var q = self.layersQueue; + var elesQ = layer.elesQueue; + var hasId = elesQ.hasId = elesQ.hasId || {}; // if a layer is going to be replaced, queuing is a waste of time + + if (layer.replacement) { + return; + } + + if (ele) { + if (hasId[ele.id()]) { + return; + } + + elesQ.push(ele); + hasId[ele.id()] = true; + } + + if (layer.reqs) { + layer.reqs++; + q.updateItem(layer); + } else { + layer.reqs = 1; + q.push(layer); + } + }; + + LTCp.dequeue = function (pxRatio) { + var self = this; + var q = self.layersQueue; + var deqd = []; + var eleDeqs = 0; + + while (eleDeqs < maxDeqSize) { + if (q.size() === 0) { + break; + } + + var layer = q.peek(); // if a layer has been or will be replaced, then don't waste time with it + + if (layer.replacement) { + // log('layer %s in queue skipped b/c it already has a replacement', layer.id); + q.pop(); + continue; + } // if this is a replacement layer that has been superceded, then forget it + + + if (layer.replaces && layer !== layer.replaces.replacement) { + // log('layer is no longer the most uptodate replacement; dequeued', layer.id) + q.pop(); + continue; + } + + if (layer.invalid) { + // log('replacement layer %s is invalid; dequeued', layer.id); + q.pop(); + continue; + } + + var ele = layer.elesQueue.shift(); + + if (ele) { + // log('dequeue layer %s', layer.id); + self.drawEleInLayer(layer, ele, layer.level, pxRatio); + eleDeqs++; + } + + if (deqd.length === 0) { + // we need only one entry in deqd to queue redrawing etc + deqd.push(true); + } // if the layer has all its eles done, then remove from the queue + + + if (layer.elesQueue.length === 0) { + q.pop(); + layer.reqs = 0; // log('dequeue of layer %s complete', layer.id); + // when a replacement layer is dequeued, it replaces the old layer in the level + + if (layer.replaces) { + self.applyLayerReplacement(layer); + } + + self.requestRedraw(); + } + } + + return deqd; + }; + + LTCp.applyLayerReplacement = function (layer) { + var self = this; + var layersInLevel = self.layersByLevel[layer.level]; + var replaced = layer.replaces; + var index = layersInLevel.indexOf(replaced); // if the replaced layer is not in the active list for the level, then replacing + // refs would be a mistake (i.e. overwriting the true active layer) + + if (index < 0 || replaced.invalid) { + // log('replacement layer would have no effect', layer.id); + return; + } + + layersInLevel[index] = layer; // replace level ref + // replace refs in eles + + for (var i = 0; i < layer.eles.length; i++) { + var _p = layer.eles[i]._private; + var cache = _p.imgLayerCaches = _p.imgLayerCaches || {}; + + if (cache) { + cache[layer.level] = layer; + } + } // log('apply replacement layer %s over %s', layer.id, replaced.id); + + + self.requestRedraw(); + }; + + LTCp.requestRedraw = debounce_1(function () { + var r = this.renderer; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, 100); + LTCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold, + deqCost: deqCost, + deqAvgCost: deqAvgCost, + deqNoDrawCost: deqNoDrawCost, + deqFastCost: deqFastCost, + deq: function deq(self, pxRatio) { + return self.dequeue(pxRatio); + }, + onDeqd: noop$1, + shouldRedraw: trueify, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.lyrTxrDeq; + } + }); + + var CRp$a = {}; + var impl; + + function polygon(context, points) { + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + context.lineTo(pt.x, pt.y); + } + } + + function triangleBackcurve(context, points, controlPoint) { + var firstPt; + + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + + if (i === 0) { + firstPt = pt; + } + + context.lineTo(pt.x, pt.y); + } + + context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y); + } + + function triangleTee(context, trianglePoints, teePoints) { + if (context.beginPath) { + context.beginPath(); + } + + var triPts = trianglePoints; + + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + + var teePts = teePoints; + var firstTeePt = teePoints[0]; + context.moveTo(firstTeePt.x, firstTeePt.y); + + for (var i = 1; i < teePts.length; i++) { + var pt = teePts[i]; + context.lineTo(pt.x, pt.y); + } + + if (context.closePath) { + context.closePath(); + } + } + + function circleTriangle(context, trianglePoints, rx, ry, r) { + if (context.beginPath) { + context.beginPath(); + } + + context.arc(rx, ry, r, 0, Math.PI * 2, false); + var triPts = trianglePoints; + var firstTrPt = triPts[0]; + context.moveTo(firstTrPt.x, firstTrPt.y); + + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + + if (context.closePath) { + context.closePath(); + } + } + + function circle(context, rx, ry, r) { + context.arc(rx, ry, r, 0, Math.PI * 2, false); + } + + CRp$a.arrowShapeImpl = function (name) { + return (impl || (impl = { + 'polygon': polygon, + 'triangle-backcurve': triangleBackcurve, + 'triangle-tee': triangleTee, + 'circle-triangle': circleTriangle, + 'triangle-cross': triangleTee, + 'circle': circle + }))[name]; + }; + + var CRp$9 = {}; + + CRp$9.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) { + var r = this; + + if (ele.isNode()) { + r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } else { + r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } + }; + + CRp$9.drawElementOverlay = function (context, ele) { + var r = this; + + if (ele.isNode()) { + r.drawNodeOverlay(context, ele); + } else { + r.drawEdgeOverlay(context, ele); + } + }; + + CRp$9.drawElementUnderlay = function (context, ele) { + var r = this; + + if (ele.isNode()) { + r.drawNodeUnderlay(context, ele); + } else { + r.drawEdgeUnderlay(context, ele); + } + }; + + CRp$9.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) { + var r = this; + var bb = eleTxrCache.getBoundingBox(ele); + + if (bb.w === 0 || bb.h === 0) { + return; + } // ignore zero size case + + + var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason); + + if (eleCache != null) { + var opacity = getOpacity(r, ele); + + if (opacity === 0) { + return; + } + + var theta = getRotation(r, ele); + var x1 = bb.x1, + y1 = bb.y1, + w = bb.w, + h = bb.h; + var x, y, sx, sy, smooth; + + if (theta !== 0) { + var rotPt = eleTxrCache.getRotationPoint(ele); + sx = rotPt.x; + sy = rotPt.y; + context.translate(sx, sy); + context.rotate(theta); + smooth = r.getImgSmoothing(context); + + if (!smooth) { + r.setImgSmoothing(context, true); + } + + var off = eleTxrCache.getRotationOffset(ele); + x = off.x; + y = off.y; + } else { + x = x1; + y = y1; + } + + var oldGlobalAlpha; + + if (opacity !== 1) { + oldGlobalAlpha = context.globalAlpha; + context.globalAlpha = oldGlobalAlpha * opacity; + } + + context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h); + + if (opacity !== 1) { + context.globalAlpha = oldGlobalAlpha; + } + + if (theta !== 0) { + context.rotate(-theta); + context.translate(-sx, -sy); + + if (!smooth) { + r.setImgSmoothing(context, false); + } + } + } else { + eleTxrCache.drawElement(context, ele); // direct draw fallback + } + }; + + var getZeroRotation = function getZeroRotation() { + return 0; + }; + + var getLabelRotation = function getLabelRotation(r, ele) { + return r.getTextAngle(ele, null); + }; + + var getSourceLabelRotation = function getSourceLabelRotation(r, ele) { + return r.getTextAngle(ele, 'source'); + }; + + var getTargetLabelRotation = function getTargetLabelRotation(r, ele) { + return r.getTextAngle(ele, 'target'); + }; + + var getOpacity = function getOpacity(r, ele) { + return ele.effectiveOpacity(); + }; + + var getTextOpacity = function getTextOpacity(e, ele) { + return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity(); + }; + + CRp$9.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) { + var r = this; + var _r$data = r.data, + eleTxrCache = _r$data.eleTxrCache, + lblTxrCache = _r$data.lblTxrCache, + slbTxrCache = _r$data.slbTxrCache, + tlbTxrCache = _r$data.tlbTxrCache; + var bb = ele.boundingBox(); + var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null; + + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + + if (!extent || boundingBoxesIntersect(bb, extent)) { + var isEdge = ele.isEdge(); + + var badLine = ele.element()._private.rscratch.badLine; + + r.drawElementUnderlay(context, ele); + r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity); + + if (!isEdge || !badLine) { + r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity); + } + + if (isEdge && !badLine) { + r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity); + r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity); + } + + r.drawElementOverlay(context, ele); + } + }; + + CRp$9.drawElements = function (context, eles) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawElement(context, ele); + } + }; + + CRp$9.drawCachedElements = function (context, eles, pxRatio, extent) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawCachedElement(context, ele, pxRatio, extent); + } + }; + + CRp$9.drawCachedNodes = function (context, eles, pxRatio, extent) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + r.drawCachedElement(context, ele, pxRatio, extent); + } + }; + + CRp$9.drawLayeredElements = function (context, eles, pxRatio, extent) { + var r = this; + var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio); + + if (layers) { + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var bb = layer.bb; + + if (bb.w === 0 || bb.h === 0) { + continue; + } + + context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h); + } + } else { + // fall back on plain caching if no layers + r.drawCachedElements(context, eles, pxRatio, extent); + } + }; + + /* global Path2D */ + var CRp$8 = {}; + + CRp$8.drawEdge = function (context, edge, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var rs = edge._private.rscratch; + + if (shouldDrawOpacity && !edge.visible()) { + return; + } // if bezier ctrl pts can not be calculated, then die + + + if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { + // isNaN in case edge is impossible and browser bugs (e.g. safari) + return; + } + + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1; + var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1; + var curveStyle = edge.pstyle('curve-style').value; + var lineStyle = edge.pstyle('line-style').value; + var edgeWidth = edge.pstyle('width').pfValue; + var lineCap = edge.pstyle('line-cap').value; + var effectiveLineOpacity = opacity * lineOpacity; // separate arrow opacity would require arrow-opacity property + + var effectiveArrowOpacity = opacity * lineOpacity; + + var drawLine = function drawLine() { + var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity; + + if (curveStyle === 'straight-triangle') { + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgeTrianglePath(edge, context, rs.allpts); + } else { + context.lineWidth = edgeWidth; + context.lineCap = lineCap; + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgePath(edge, context, rs.allpts, lineStyle); + context.lineCap = 'butt'; // reset for other drawing functions + } + }; + + var drawOverlay = function drawOverlay() { + if (!shouldDrawOverlay) { + return; + } + + r.drawEdgeOverlay(context, edge); + }; + + var drawUnderlay = function drawUnderlay() { + if (!shouldDrawOverlay) { + return; + } + + r.drawEdgeUnderlay(context, edge); + }; + + var drawArrows = function drawArrows() { + var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity; + r.drawArrowheads(context, edge, arrowOpacity); + }; + + var drawText = function drawText() { + r.drawElementText(context, edge, null, drawLabel); + }; + + context.lineJoin = 'round'; + var ghost = edge.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = edge.pstyle('ghost-offset-x').pfValue; + var gy = edge.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = edge.pstyle('ghost-opacity').value; + var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity; + context.translate(gx, gy); + drawLine(effectiveGhostOpacity); + drawArrows(effectiveGhostOpacity); + context.translate(-gx, -gy); + } + + drawUnderlay(); + drawLine(); + drawArrows(); + drawOverlay(); + drawText(); + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + var drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + + return function (context, edge) { + if (!edge.visible()) { + return; + } + + var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + + if (opacity === 0) { + return; + } + + var r = this; + var usePaths = r.usePaths(); + var rs = edge._private.rscratch; + var padding = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var width = 2 * padding; + var color = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value; + context.lineWidth = width; + + if (rs.edgeType === 'self' && !usePaths) { + context.lineCap = 'butt'; + } else { + context.lineCap = 'round'; + } + + r.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + r.drawEdgePath(edge, context, rs.allpts, 'solid'); + }; + }; + + CRp$8.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay'); + CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay'); + + CRp$8.drawEdgePath = function (edge, context, pts, type) { + var rs = edge._private.rscratch; + var canvasCxt = context; + var path; + var pathCacheHit = false; + var usePaths = this.usePaths(); + var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue; + var lineDashOffset = edge.pstyle('line-dash-offset').pfValue; + + if (usePaths) { + var pathCacheKey = pts.join('$'); + var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey; + + if (keyMatches) { + path = context = rs.pathCache; + pathCacheHit = true; + } else { + path = context = new Path2D(); + rs.pathCacheKey = pathCacheKey; + rs.pathCache = path; + } + } + + if (canvasCxt.setLineDash) { + // for very outofdate browsers + switch (type) { + case 'dotted': + canvasCxt.setLineDash([1, 1]); + break; + + case 'dashed': + canvasCxt.setLineDash(lineDashPattern); + canvasCxt.lineDashOffset = lineDashOffset; + break; + + case 'solid': + canvasCxt.setLineDash([]); + break; + } + } + + if (!pathCacheHit && !rs.badLine) { + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(pts[0], pts[1]); + + switch (rs.edgeType) { + case 'bezier': + case 'self': + case 'compound': + case 'multibezier': + for (var i = 2; i + 3 < pts.length; i += 4) { + context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]); + } + + break; + + case 'straight': + case 'segments': + case 'haystack': + for (var _i = 2; _i + 1 < pts.length; _i += 2) { + context.lineTo(pts[_i], pts[_i + 1]); + } + + break; + } + } + + context = canvasCxt; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } // reset any line dashes + + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + }; + + CRp$8.drawEdgeTrianglePath = function (edge, context, pts) { + // use line stroke style for triangle fill style + context.fillStyle = context.strokeStyle; + var edgeWidth = edge.pstyle('width').pfValue; + + for (var i = 0; i + 1 < pts.length; i += 2) { + var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]]; + var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]); + var normal = [vector[1] / length, -vector[0] / length]; + var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2]; + context.beginPath(); + context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]); + context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]); + context.lineTo(pts[i + 2], pts[i + 3]); + context.closePath(); + context.fill(); + } + }; + + CRp$8.drawArrowheads = function (context, edge, opacity) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + + if (!isHaystack) { + this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity); + } + + this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity); + this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity); + + if (!isHaystack) { + this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity); + } + }; + + CRp$8.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) { + if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) { + return; + } + + var self = this; + var arrowShape = edge.pstyle(prefix + '-arrow-shape').value; + + if (arrowShape === 'none') { + return; + } + + var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled'; + var arrowFill = edge.pstyle(prefix + '-arrow-fill').value; + var edgeWidth = edge.pstyle('width').pfValue; + var edgeOpacity = edge.pstyle('opacity').value; + + if (opacity === undefined) { + opacity = edgeOpacity; + } + + var gco = context.globalCompositeOperation; + + if (opacity !== 1 || arrowFill === 'hollow') { + // then extra clear is needed + context.globalCompositeOperation = 'destination-out'; + self.colorFillStyle(context, 255, 255, 255, 1); + self.colorStrokeStyle(context, 255, 255, 255, 1); + self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, x, y, angle); + context.globalCompositeOperation = gco; + } // otherwise, the opaque arrow clears it for free :) + + + var color = edge.pstyle(prefix + '-arrow-color').value; + self.colorFillStyle(context, color[0], color[1], color[2], opacity); + self.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, x, y, angle); + }; + + CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, x, y, angle) { + var r = this; + var usePaths = this.usePaths() && shape !== 'triangle-cross'; + var pathCacheHit = false; + var path; + var canvasContext = context; + var translation = { + x: x, + y: y + }; + var scale = edge.pstyle('arrow-scale').value; + var size = this.getArrowWidth(edgeWidth, scale); + var shapeImpl = r.arrowShapes[shape]; + + if (usePaths) { + var cache = r.arrowPathCache = r.arrowPathCache || []; + var key = hashString(shape); + var cachedPath = cache[key]; + + if (cachedPath != null) { + path = context = cachedPath; + pathCacheHit = true; + } else { + path = context = new Path2D(); + cache[key] = path; + } + } + + if (!pathCacheHit) { + if (context.beginPath) { + context.beginPath(); + } + + if (usePaths) { + // store in the path cache with values easily manipulated later + shapeImpl.draw(context, 1, 0, { + x: 0, + y: 0 + }, 1); + } else { + shapeImpl.draw(context, size, angle, translation, edgeWidth); + } + + if (context.closePath) { + context.closePath(); + } + } + + context = canvasContext; + + if (usePaths) { + // set transform to arrow position/orientation + context.translate(x, y); + context.rotate(angle); + context.scale(size, size); + } + + if (fill === 'filled' || fill === 'both') { + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + + if (fill === 'hollow' || fill === 'both') { + context.lineWidth = (shapeImpl.matchEdgeWidth ? edgeWidth : 1) / (usePaths ? size : 1); + context.lineJoin = 'miter'; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + } + + if (usePaths) { + // reset transform by applying inverse + context.scale(1 / size, 1 / size); + context.rotate(-angle); + context.translate(-x, -y); + } + }; + + var CRp$7 = {}; + + CRp$7.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) { + // detect problematic cases for old browsers with bad images (cheaper than try-catch) + if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) { + return; + } + + try { + context.drawImage(img, ix, iy, iw, ih, x, y, w, h); + } catch (e) { + warn(e); + } + }; + + CRp$7.drawInscribedImage = function (context, img, node, index, nodeOpacity) { + var r = this; + var pos = node.position(); + var nodeX = pos.x; + var nodeY = pos.y; + var styleObj = node.cy().style(); + var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj); + var fit = getIndexedStyle(node, 'background-fit', 'value', index); + var repeat = getIndexedStyle(node, 'background-repeat', 'value', index); + var nodeW = node.width(); + var nodeH = node.height(); + var paddingX2 = node.padding() * 2; + var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var rs = node._private.rscratch; + var clip = getIndexedStyle(node, 'background-clip', 'value', index); + var shouldClip = clip === 'node'; + var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity; + var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index); + var imgW = img.width || img.cachedW; + var imgH = img.height || img.cachedH; // workaround for broken browsers like ie + + if (null == imgW || null == imgH) { + document.body.appendChild(img); // eslint-disable-line no-undef + + imgW = img.cachedW = img.width || img.offsetWidth; + imgH = img.cachedH = img.height || img.offsetHeight; + document.body.removeChild(img); // eslint-disable-line no-undef + } + + var w = imgW; + var h = imgH; + + if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-width', 'units', index) === '%') { + w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW; + } else { + w = getIndexedStyle(node, 'background-width', 'pfValue', index); + } + } + + if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-height', 'units', index) === '%') { + h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH; + } else { + h = getIndexedStyle(node, 'background-height', 'pfValue', index); + } + } + + if (w === 0 || h === 0) { + return; // no point in drawing empty image (and chrome is broken in this case) + } + + if (fit === 'contain') { + var scale = Math.min(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } else if (fit === 'cover') { + var scale = Math.max(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } + + var x = nodeX - nodeTW / 2; // left + + var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index); + var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index); + + if (posXUnits === '%') { + x += (nodeTW - w) * posXPfVal; + } else { + x += posXPfVal; + } + + var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index); + var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index); + + if (offXUnits === '%') { + x += (nodeTW - w) * offXPfVal; + } else { + x += offXPfVal; + } + + var y = nodeY - nodeTH / 2; // top + + var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index); + var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index); + + if (posYUnits === '%') { + y += (nodeTH - h) * posYPfVal; + } else { + y += posYPfVal; + } + + var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index); + var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index); + + if (offYUnits === '%') { + y += (nodeTH - h) * offYPfVal; + } else { + y += offYPfVal; + } + + if (rs.pathCache) { + x -= nodeX; + y -= nodeY; + nodeX = 0; + nodeY = 0; + } + + var gAlpha = context.globalAlpha; + context.globalAlpha = imgOpacity; + var smoothingEnabled = r.getImgSmoothing(context); + var isSmoothingSwitched = false; + + if (smooth === 'no' && smoothingEnabled) { + r.setImgSmoothing(context, false); + isSmoothingSwitched = true; + } else if (smooth === 'yes' && !smoothingEnabled) { + r.setImgSmoothing(context, true); + isSmoothingSwitched = true; + } + + if (repeat === 'no-repeat') { + if (shouldClip) { + context.save(); + + if (rs.pathCache) { + context.clip(rs.pathCache); + } else { + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.clip(); + } + } + + r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h); + + if (shouldClip) { + context.restore(); + } + } else { + var pattern = context.createPattern(img, repeat); + context.fillStyle = pattern; + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.translate(x, y); + context.fill(); + context.translate(-x, -y); + } + + context.globalAlpha = gAlpha; + + if (isSmoothingSwitched) { + r.setImgSmoothing(context, smoothingEnabled); + } + }; + + var CRp$6 = {}; + + CRp$6.eleTextBiggerThanMin = function (ele, scale) { + if (!scale) { + var zoom = ele.cy().zoom(); + var pxRatio = this.getPixelRatio(); + var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level + + scale = Math.pow(2, lvl); + } + + var computedSize = ele.pstyle('font-size').pfValue * scale; + var minSize = ele.pstyle('min-zoomed-font-size').pfValue; + + if (computedSize < minSize) { + return false; + } + + return true; + }; + + CRp$6.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) { + var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + + if (force == null) { + if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) { + return; + } + } else if (force === false) { + return; + } + + if (ele.isNode()) { + var label = ele.pstyle('label'); + + if (!label || !label.value) { + return; + } + + var justification = r.getLabelJustification(ele); + context.textAlign = justification; + context.textBaseline = 'bottom'; + } else { + var badLine = ele.element()._private.rscratch.badLine; + + var _label = ele.pstyle('label'); + + var srcLabel = ele.pstyle('source-label'); + var tgtLabel = ele.pstyle('target-label'); + + if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) { + return; + } + + context.textAlign = 'center'; + context.textBaseline = 'bottom'; + } + + var applyRotation = !shiftToOriginWithBb; + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + if (prefix == null) { + r.drawText(context, ele, null, applyRotation, useEleOpacity); + + if (ele.isEdge()) { + r.drawText(context, ele, 'source', applyRotation, useEleOpacity); + r.drawText(context, ele, 'target', applyRotation, useEleOpacity); + } + } else { + r.drawText(context, ele, prefix, applyRotation, useEleOpacity); + } + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + CRp$6.getFontCache = function (context) { + var cache; + this.fontCaches = this.fontCaches || []; + + for (var i = 0; i < this.fontCaches.length; i++) { + cache = this.fontCaches[i]; + + if (cache.context === context) { + return cache; + } + } + + cache = { + context: context + }; + this.fontCaches.push(cache); + return cache; + }; // set up canvas context with font + // returns transformed text string + + + CRp$6.setupTextStyle = function (context, ele) { + var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + // Font style + var labelStyle = ele.pstyle('font-style').strValue; + var labelSize = ele.pstyle('font-size').pfValue + 'px'; + var labelFamily = ele.pstyle('font-family').strValue; + var labelWeight = ele.pstyle('font-weight').strValue; + var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1; + var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity; + var color = ele.pstyle('color').value; + var outlineColor = ele.pstyle('text-outline-color').value; + context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily; + context.lineJoin = 'round'; // so text outlines aren't jagged + + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); + }; // TODO ensure re-used + + + function roundRect(ctx, x, y, width, height) { + var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5; + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + ctx.fill(); + } + + CRp$6.getTextAngle = function (ele, prefix) { + var theta; + var _p = ele._private; + var rscratch = _p.rscratch; + var pdash = prefix ? prefix + '-' : ''; + var rotation = ele.pstyle(pdash + 'text-rotation'); + var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix); + + if (rotation.strValue === 'autorotate') { + theta = ele.isEdge() ? textAngle : 0; + } else if (rotation.strValue === 'none') { + theta = 0; + } else { + theta = rotation.pfValue; + } + + return theta; + }; + + CRp$6.drawText = function (context, ele, prefix) { + var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var _p = ele._private; + var rscratch = _p.rscratch; + var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1; + + if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) { + return; + } // use 'main' as an alias for the main label (i.e. null prefix) + + + if (prefix === 'main') { + prefix = null; + } + + var textX = getPrefixedProperty(rscratch, 'labelX', prefix); + var textY = getPrefixedProperty(rscratch, 'labelY', prefix); + var orgTextX, orgTextY; // used for rotation + + var text = this.getLabelText(ele, prefix); + + if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) { + this.setupTextStyle(context, ele, useEleOpacity); + var pdash = prefix ? prefix + '-' : ''; + var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix); + var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix); + var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var halign = ele.pstyle('text-halign').value; + var valign = ele.pstyle('text-valign').value; + + if (isEdge) { + halign = 'center'; + valign = 'center'; + } + + textX += marginX; + textY += marginY; + var theta; + + if (!applyRotation) { + theta = 0; + } else { + theta = this.getTextAngle(ele, prefix); + } + + if (theta !== 0) { + orgTextX = textX; + orgTextY = textY; + context.translate(orgTextX, orgTextY); + context.rotate(theta); + textX = 0; + textY = 0; + } + + switch (valign) { + case 'top': + break; + + case 'center': + textY += textH / 2; + break; + + case 'bottom': + textY += textH; + break; + } + + var backgroundOpacity = ele.pstyle('text-background-opacity').value; + var borderOpacity = ele.pstyle('text-border-opacity').value; + var textBorderWidth = ele.pstyle('text-border-width').pfValue; + var backgroundPadding = ele.pstyle('text-background-padding').pfValue; + + if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) { + var bgX = textX - backgroundPadding; + + switch (halign) { + case 'left': + bgX -= textW; + break; + + case 'center': + bgX -= textW / 2; + break; + } + + var bgY = textY - textH - backgroundPadding; + var bgW = textW + 2 * backgroundPadding; + var bgH = textH + 2 * backgroundPadding; + + if (backgroundOpacity > 0) { + var textFill = context.fillStyle; + var textBackgroundColor = ele.pstyle('text-background-color').value; + context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')'; + var styleShape = ele.pstyle('text-background-shape').strValue; + + if (styleShape.indexOf('round') === 0) { + roundRect(context, bgX, bgY, bgW, bgH, 2); + } else { + context.fillRect(bgX, bgY, bgW, bgH); + } + + context.fillStyle = textFill; + } + + if (textBorderWidth > 0 && borderOpacity > 0) { + var textStroke = context.strokeStyle; + var textLineWidth = context.lineWidth; + var textBorderColor = ele.pstyle('text-border-color').value; + var textBorderStyle = ele.pstyle('text-border-style').value; + context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')'; + context.lineWidth = textBorderWidth; + + if (context.setLineDash) { + // for very outofdate browsers + switch (textBorderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + + case 'dashed': + context.setLineDash([4, 2]); + break; + + case 'double': + context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders + + context.setLineDash([]); + break; + + case 'solid': + context.setLineDash([]); + break; + } + } + + context.strokeRect(bgX, bgY, bgW, bgH); + + if (textBorderStyle === 'double') { + var whiteWidth = textBorderWidth / 2; + context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2); + } + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + + context.lineWidth = textLineWidth; + context.strokeStyle = textStroke; + } + } + + var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle + + if (lineWidth > 0) { + context.lineWidth = lineWidth; + } + + if (ele.pstyle('text-wrap').value === 'wrap') { + var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix); + var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix); + var halfTextW = textW / 2; + var justification = this.getLabelJustification(ele); + + if (justification === 'auto') ; else if (halign === 'left') { + // auto justification : right + if (justification === 'left') { + textX += -textW; + } else if (justification === 'center') { + textX += -halfTextW; + } // else same as auto + + } else if (halign === 'center') { + // auto justfication : center + if (justification === 'left') { + textX += -halfTextW; + } else if (justification === 'right') { + textX += halfTextW; + } // else same as auto + + } else if (halign === 'right') { + // auto justification : left + if (justification === 'center') { + textX += halfTextW; + } else if (justification === 'right') { + textX += textW; + } // else same as auto + + } + + switch (valign) { + case 'top': + textY -= (lines.length - 1) * lineHeight; + break; + + case 'center': + case 'bottom': + textY -= (lines.length - 1) * lineHeight; + break; + } + + for (var l = 0; l < lines.length; l++) { + if (lineWidth > 0) { + context.strokeText(lines[l], textX, textY); + } + + context.fillText(lines[l], textX, textY); + textY += lineHeight; + } + } else { + if (lineWidth > 0) { + context.strokeText(text, textX, textY); + } + + context.fillText(text, textX, textY); + } + + if (theta !== 0) { + context.rotate(-theta); + context.translate(-orgTextX, -orgTextY); + } + } + }; + + /* global Path2D */ + var CRp$5 = {}; + + CRp$5.drawNode = function (context, node, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var nodeWidth, nodeHeight; + var _p = node._private; + var rs = _p.rscratch; + var pos = node.position(); + + if (!number$1(pos.x) || !number$1(pos.y)) { + return; // can't draw node with undefined position + } + + if (shouldDrawOpacity && !node.visible()) { + return; + } + + var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1; + var usePaths = r.usePaths(); + var path; + var pathCacheHit = false; + var padding = node.padding(); + nodeWidth = node.width() + 2 * padding; + nodeHeight = node.height() + 2 * padding; // + // setup shift + + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } // + // load bg image + + + var bgImgProp = node.pstyle('background-image'); + var urls = bgImgProp.value; + var urlDefined = new Array(urls.length); + var image = new Array(urls.length); + var numImages = 0; + + for (var i = 0; i < urls.length; i++) { + var url = urls[i]; + var defd = urlDefined[i] = url != null && url !== 'none'; + + if (defd) { + var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i); + numImages++; // get image, and if not loaded then ask to redraw when later loaded + + image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () { + _p.backgroundTimestamp = Date.now(); + node.emitAndNotify('background'); + }); + } + } // + // setup styles + + + var darkness = node.pstyle('background-blacken').value; + var borderWidth = node.pstyle('border-width').pfValue; + var bgOpacity = node.pstyle('background-opacity').value * eleOpacity; + var borderColor = node.pstyle('border-color').value; + var borderStyle = node.pstyle('border-style').value; + var borderOpacity = node.pstyle('border-opacity').value * eleOpacity; + context.lineJoin = 'miter'; // so borders are square with the node shape + + var setupShapeColor = function setupShapeColor() { + var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity; + r.eleFillStyle(context, node, bgOpy); + }; + + var setupBorderColor = function setupBorderColor() { + var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity; + r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy); + }; // + // setup shape + + + var styleShape = node.pstyle('shape').strValue; + var shapePts = node.pstyle('shape-polygon-points').pfValue; + + if (usePaths) { + context.translate(pos.x, pos.y); + var pathCache = r.nodePathCache = r.nodePathCache || []; + var key = hashStrings(styleShape === 'polygon' ? styleShape + ',' + shapePts.join(',') : styleShape, '' + nodeHeight, '' + nodeWidth); + var cachedPath = pathCache[key]; + + if (cachedPath != null) { + path = cachedPath; + pathCacheHit = true; + rs.pathCache = path; + } else { + path = new Path2D(); + pathCache[key] = rs.pathCache = path; + } + } + + var drawShape = function drawShape() { + if (!pathCacheHit) { + var npos = pos; + + if (usePaths) { + npos = { + x: 0, + y: 0 + }; + } + + r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight); + } + + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + }; + + var drawImages = function drawImages() { + var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var prevBging = _p.backgrounding; + var totalCompleted = 0; + + for (var _i = 0; _i < image.length; _i++) { + var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i); + + if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') { + totalCompleted++; + continue; + } + + if (urlDefined[_i] && image[_i].complete && !image[_i].error) { + totalCompleted++; + r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity); + } + } + + _p.backgrounding = !(totalCompleted === numImages); + + if (prevBging !== _p.backgrounding) { + // update style b/c :backgrounding state changed + node.updateStyle(false); + } + }; + + var drawPie = function drawPie() { + var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity; + + if (r.hasPie(node)) { + r.drawPie(context, node, pieOpacity); // redraw/restore path if steps after pie need it + + if (redrawShape) { + if (!usePaths) { + r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight); + } + } + } + }; + + var darken = function darken() { + var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity; + var c = darkness > 0 ? 0 : 255; + + if (darkness !== 0) { + r.colorFillStyle(context, c, c, c, opacity); + + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + }; + + var drawBorder = function drawBorder() { + if (borderWidth > 0) { + context.lineWidth = borderWidth; + context.lineCap = 'butt'; + + if (context.setLineDash) { + // for very outofdate browsers + switch (borderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + + case 'dashed': + context.setLineDash([4, 2]); + break; + + case 'solid': + case 'double': + context.setLineDash([]); + break; + } + } + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + if (borderStyle === 'double') { + context.lineWidth = borderWidth / 3; + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + context.globalCompositeOperation = gco; + } // reset in case we changed the border style + + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + } + }; + + var drawOverlay = function drawOverlay() { + if (shouldDrawOverlay) { + r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + + var drawUnderlay = function drawUnderlay() { + if (shouldDrawOverlay) { + r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + + var drawText = function drawText() { + r.drawElementText(context, node, null, drawLabel); + }; + + var ghost = node.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = node.pstyle('ghost-offset-x').pfValue; + var gy = node.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = node.pstyle('ghost-opacity').value; + var effGhostOpacity = ghostOpacity * eleOpacity; + context.translate(gx, gy); + setupShapeColor(ghostOpacity * bgOpacity); + drawShape(); + drawImages(effGhostOpacity, true); + setupBorderColor(ghostOpacity * borderOpacity); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(effGhostOpacity, false); + darken(effGhostOpacity); + context.translate(-gx, -gy); + } + + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + + drawUnderlay(); + + if (usePaths) { + context.translate(pos.x, pos.y); + } + + setupShapeColor(); + drawShape(); + drawImages(eleOpacity, true); + setupBorderColor(); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(eleOpacity, false); + darken(); + + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + + drawText(); + drawOverlay(); // + // clean up shift + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + var drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + + return function (context, node, pos, nodeWidth, nodeHeight) { + var r = this; + + if (!node.visible()) { + return; + } + + var padding = node.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var opacity = node.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + var color = node.pstyle("".concat(overlayOrUnderlay, "-color")).value; + var shape = node.pstyle("".concat(overlayOrUnderlay, "-shape")).value; + + if (opacity > 0) { + pos = pos || node.position(); + + if (nodeWidth == null || nodeHeight == null) { + var _padding = node.padding(); + + nodeWidth = node.width() + 2 * _padding; + nodeHeight = node.height() + 2 * _padding; + } + + r.colorFillStyle(context, color[0], color[1], color[2], opacity); + r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2); + context.fill(); + } + }; + }; + + CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay'); + CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); // does the node have at least one pie piece? + + CRp$5.hasPie = function (node) { + node = node[0]; // ensure ele ref + + return node._private.hasPie; + }; + + CRp$5.drawPie = function (context, node, nodeOpacity, pos) { + node = node[0]; // ensure ele ref + + pos = pos || node.position(); + var cyStyle = node.cy().style(); + var pieSize = node.pstyle('pie-size'); + var x = pos.x; + var y = pos.y; + var nodeW = node.width(); + var nodeH = node.height(); + var radius = Math.min(nodeW, nodeH) / 2; // must fit in node + + var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1] + + var usePaths = this.usePaths(); + + if (usePaths) { + x = 0; + y = 0; + } + + if (pieSize.units === '%') { + radius = radius * pieSize.pfValue; + } else if (pieSize.pfValue !== undefined) { + radius = pieSize.pfValue / 2; + } + + for (var i = 1; i <= cyStyle.pieBackgroundN; i++) { + // 1..N + var size = node.pstyle('pie-' + i + '-background-size').value; + var color = node.pstyle('pie-' + i + '-background-color').value; + var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity; + var percent = size / 100; // map integer range [0, 100] to [0, 1] + // percent can't push beyond 1 + + if (percent + lastPercent > 1) { + percent = 1 - lastPercent; + } + + var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise + + var angleDelta = 2 * Math.PI * percent; + var angleEnd = angleStart + angleDelta; // ignore if + // - zero size + // - we're already beyond the full circle + // - adding the current slice would go beyond the full circle + + if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) { + continue; + } + + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, angleStart, angleEnd); + context.closePath(); + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + context.fill(); + lastPercent += percent; + } + }; + + var CRp$4 = {}; + var motionBlurDelay = 100; // var isFirefox = typeof InstallTrigger !== 'undefined'; + + CRp$4.getPixelRatio = function () { + var context = this.data.contexts[0]; + + if (this.forcedPixelRatio != null) { + return this.forcedPixelRatio; + } + + var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef + }; + + CRp$4.paintCache = function (context) { + var caches = this.paintCaches = this.paintCaches || []; + var needToCreateCache = true; + var cache; + + for (var i = 0; i < caches.length; i++) { + cache = caches[i]; + + if (cache.context === context) { + needToCreateCache = false; + break; + } + } + + if (needToCreateCache) { + cache = { + context: context + }; + caches.push(cache); + } + + return cache; + }; + + CRp$4.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) { + var gradientStyle; + var usePaths = this.usePaths(); + var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value, + positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue; + + if (fill === 'radial-gradient') { + if (ele.isEdge()) { + var start = ele.sourceEndpoint(), + end = ele.targetEndpoint(), + mid = ele.midpoint(); + var d1 = dist(start, mid); + var d2 = dist(end, mid); + gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2)); + } else { + var pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + width = ele.paddedWidth(), + height = ele.paddedHeight(); + gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height)); + } + } else { + if (ele.isEdge()) { + var _start = ele.sourceEndpoint(), + _end = ele.targetEndpoint(); + + gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y); + } else { + var _pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + _width = ele.paddedWidth(), + _height = ele.paddedHeight(), + halfWidth = _width / 2, + halfHeight = _height / 2; + + var direction = ele.pstyle('background-gradient-direction').value; + + switch (direction) { + case 'to-bottom': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight); + break; + + case 'to-top': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight); + break; + + case 'to-left': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y); + break; + + case 'to-right': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y); + break; + + case 'to-bottom-right': + case 'to-right-bottom': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight); + break; + + case 'to-top-right': + case 'to-right-top': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight); + break; + + case 'to-bottom-left': + case 'to-left-bottom': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight); + break; + + case 'to-top-left': + case 'to-left-top': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight); + break; + } + } + } + + if (!gradientStyle) return null; // invalid gradient style + + var hasPositions = positions.length === colors.length; + var length = colors.length; + + for (var i = 0; i < length; i++) { + gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')'); + } + + return gradientStyle; + }; + + CRp$4.gradientFillStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity); + if (!gradientStyle) return null; // error + + context.fillStyle = gradientStyle; + }; + + CRp$4.colorFillStyle = function (context, r, g, b, a) { + context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching + // var cache = this.paintCache(context); + // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // if( cache.fillStyle !== fillStyle ){ + // context.fillStyle = cache.fillStyle = fillStyle; + // } + }; + + CRp$4.eleFillStyle = function (context, ele, opacity) { + var backgroundFill = ele.pstyle('background-fill').value; + + if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') { + this.gradientFillStyle(context, ele, backgroundFill, opacity); + } else { + var backgroundColor = ele.pstyle('background-color').value; + this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity); + } + }; + + CRp$4.gradientStrokeStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity); + if (!gradientStyle) return null; // error + + context.strokeStyle = gradientStyle; + }; + + CRp$4.colorStrokeStyle = function (context, r, g, b, a) { + context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching + // var cache = this.paintCache(context); + // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // if( cache.strokeStyle !== strokeStyle ){ + // context.strokeStyle = cache.strokeStyle = strokeStyle; + // } + }; + + CRp$4.eleStrokeStyle = function (context, ele, opacity) { + var lineFill = ele.pstyle('line-fill').value; + + if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') { + this.gradientStrokeStyle(context, ele, lineFill, opacity); + } else { + var lineColor = ele.pstyle('line-color').value; + this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity); + } + }; // Resize canvas + + + CRp$4.matchCanvasSize = function (container) { + var r = this; + var data = r.data; + var bb = r.findContainerClientCoords(); + var width = bb[2]; + var height = bb[3]; + var pixelRatio = r.getPixelRatio(); + var mbPxRatio = r.motionBlurPxRatio; + + if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) { + pixelRatio = mbPxRatio; + } + + var canvasWidth = width * pixelRatio; + var canvasHeight = height * pixelRatio; + var canvas; + + if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) { + return; // save cycles if same + } + + r.fontCaches = null; // resizing resets the style + + var canvasContainer = data.canvasContainer; + canvasContainer.style.width = width + 'px'; + canvasContainer.style.height = height + 'px'; + + for (var i = 0; i < r.CANVAS_LAYERS; i++) { + canvas = data.canvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + for (var i = 0; i < r.BUFFER_COUNT; i++) { + canvas = data.bufferCanvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + r.textureMult = 1; + + if (pixelRatio <= 1) { + canvas = data.bufferCanvases[r.TEXTURE_BUFFER]; + r.textureMult = 2; + canvas.width = canvasWidth * r.textureMult; + canvas.height = canvasHeight * r.textureMult; + } + + r.canvasWidth = canvasWidth; + r.canvasHeight = canvasHeight; + }; + + CRp$4.renderTo = function (cxt, zoom, pan, pxRatio) { + this.render({ + forcedContext: cxt, + forcedZoom: zoom, + forcedPan: pan, + drawAllLayers: true, + forcedPxRatio: pxRatio + }); + }; + + CRp$4.render = function (options) { + options = options || staticEmptyObject(); + var forcedContext = options.forcedContext; + var drawAllLayers = options.drawAllLayers; + var drawOnlyNodeLayer = options.drawOnlyNodeLayer; + var forcedZoom = options.forcedZoom; + var forcedPan = options.forcedPan; + var r = this; + var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio; + var cy = r.cy; + var data = r.data; + var needDraw = data.canvasNeedsRedraw; + var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming); + var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur; + var mbPxRatio = r.motionBlurPxRatio; + var hasCompoundNodes = cy.hasCompoundNodes(); + var inNodeDragGesture = r.hoverData.draggingEles; + var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false; + motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection; + var motionBlurFadeEffect = motionBlur; + + if (!forcedContext) { + if (r.prevPxRatio !== pixelRatio) { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + + r.prevPxRatio = pixelRatio; + } + + if (!forcedContext && r.motionBlurTimeout) { + clearTimeout(r.motionBlurTimeout); + } + + if (motionBlur) { + if (r.mbFrames == null) { + r.mbFrames = 0; + } + + r.mbFrames++; + + if (r.mbFrames < 3) { + // need several frames before even high quality motionblur + motionBlurFadeEffect = false; + } // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing) + + + if (r.mbFrames > r.minMbLowQualFrames) { + //r.fullQualityMb = false; + r.motionBlurPxRatio = r.mbPxRBlurry; + } + } + + if (r.clearingMotionBlur) { + r.motionBlurPxRatio = 1; + } // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame + // because a rogue async texture frame would clear needDraw + + + if (r.textureDrawLastFrame && !textureDraw) { + needDraw[r.NODE] = true; + needDraw[r.SELECT_BOX] = true; + } + + var style = cy.style(); + var zoom = cy.zoom(); + var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom; + var pan = cy.pan(); + var effectivePan = { + x: pan.x, + y: pan.y + }; + var vp = { + zoom: zoom, + pan: { + x: pan.x, + y: pan.y + } + }; + var prevVp = r.prevViewport; + var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed) + + if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) { + r.motionBlurPxRatio = 1; + } + + if (forcedPan) { + effectivePan = forcedPan; + } // apply pixel ratio + + + effectiveZoom *= pixelRatio; + effectivePan.x *= pixelRatio; + effectivePan.y *= pixelRatio; + var eles = r.getCachedZSortedEles(); + + function mbclear(context, x, y, w, h) { + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency); + context.fillRect(x, y, w, h); + context.globalCompositeOperation = gco; + } + + function setContextTransform(context, clear) { + var ePan, eZoom, w, h; + + if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) { + ePan = { + x: pan.x * mbPxRatio, + y: pan.y * mbPxRatio + }; + eZoom = zoom * mbPxRatio; + w = r.canvasWidth * mbPxRatio; + h = r.canvasHeight * mbPxRatio; + } else { + ePan = effectivePan; + eZoom = effectiveZoom; + w = r.canvasWidth; + h = r.canvasHeight; + } + + context.setTransform(1, 0, 0, 1, 0, 0); + + if (clear === 'motionBlur') { + mbclear(context, 0, 0, w, h); + } else if (!forcedContext && (clear === undefined || clear)) { + context.clearRect(0, 0, w, h); + } + + if (!drawAllLayers) { + context.translate(ePan.x, ePan.y); + context.scale(eZoom, eZoom); + } + + if (forcedPan) { + context.translate(forcedPan.x, forcedPan.y); + } + + if (forcedZoom) { + context.scale(forcedZoom, forcedZoom); + } + } + + if (!textureDraw) { + r.textureDrawLastFrame = false; + } + + if (textureDraw) { + r.textureDrawLastFrame = true; + + if (!r.textureCache) { + r.textureCache = {}; + r.textureCache.bb = cy.mutableElements().boundingBox(); + r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER]; + var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER]; + cxt.setTransform(1, 0, 0, 1, 0, 0); + cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult); + r.render({ + forcedContext: cxt, + drawOnlyNodeLayer: true, + forcedPxRatio: pixelRatio * r.textureMult + }); + var vp = r.textureCache.viewport = { + zoom: cy.zoom(), + pan: cy.pan(), + width: r.canvasWidth, + height: r.canvasHeight + }; + vp.mpan = { + x: (0 - vp.pan.x) / vp.zoom, + y: (0 - vp.pan.y) / vp.zoom + }; + } + + needDraw[r.DRAG] = false; + needDraw[r.NODE] = false; + var context = data.contexts[r.NODE]; + var texture = r.textureCache.texture; + var vp = r.textureCache.viewport; + context.setTransform(1, 0, 0, 1, 0, 0); + + if (motionBlur) { + mbclear(context, 0, 0, vp.width, vp.height); + } else { + context.clearRect(0, 0, vp.width, vp.height); + } + + var outsideBgColor = style.core('outside-texture-bg-color').value; + var outsideBgOpacity = style.core('outside-texture-bg-opacity').value; + r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity); + context.fillRect(0, 0, vp.width, vp.height); + var zoom = cy.zoom(); + setContextTransform(context, false); + context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + } else if (r.textureOnViewport && !forcedContext) { + // clear the cache since we don't need it + r.textureCache = null; + } + + var extent = cy.extent(); + var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated(); + var hideEdges = r.hideEdgesOnViewport && vpManip; + var needMbClear = []; + needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur; + + if (needMbClear[r.NODE]) { + r.clearedForMotionBlur[r.NODE] = true; + } + + needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur; + + if (needMbClear[r.DRAG]) { + r.clearedForMotionBlur[r.DRAG] = true; + } + + if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) { + var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]); + var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined; + setContextTransform(context, clear); + + if (hideEdges) { + r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent); + } else { + r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent); + } + + if (r.debug) { + r.drawDebugPoints(context, eles.nondrag); + } + + if (!drawAllLayers && !motionBlur) { + needDraw[r.NODE] = false; + } + } + + if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) { + var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]); + setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined); + + if (hideEdges) { + r.drawCachedNodes(context, eles.drag, pixelRatio, extent); + } else { + r.drawCachedElements(context, eles.drag, pixelRatio, extent); + } + + if (r.debug) { + r.drawDebugPoints(context, eles.drag); + } + + if (!drawAllLayers && !motionBlur) { + needDraw[r.DRAG] = false; + } + } + + if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) { + var context = forcedContext || data.contexts[r.SELECT_BOX]; + setContextTransform(context); + + if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) { + var zoom = r.cy.zoom(); + var borderWidth = style.core('selection-box-border-width').value / zoom; + context.lineWidth = borderWidth; + context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + + if (borderWidth > 0) { + context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + } + } + + if (data.bgActivePosistion && !r.hoverData.selecting) { + var zoom = r.cy.zoom(); + var pos = data.bgActivePosistion; + context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')'; + context.beginPath(); + context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI); + context.fill(); + } + + var timeToRender = r.lastRedrawTime; + + if (r.showFps && timeToRender) { + timeToRender = Math.round(timeToRender); + var fps = Math.round(1000 / timeToRender); + context.setTransform(1, 0, 0, 1, 0, 0); + context.fillStyle = 'rgba(255, 0, 0, 0.75)'; + context.strokeStyle = 'rgba(255, 0, 0, 0.75)'; + context.lineWidth = 1; + context.fillText('1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20); + var maxFps = 60; + context.strokeRect(0, 30, 250, 20); + context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20); + } + + if (!drawAllLayers) { + needDraw[r.SELECT_BOX] = false; + } + } // motionblur: blit rendered blurry frames + + + if (motionBlur && mbPxRatio !== 1) { + var cxtNode = data.contexts[r.NODE]; + var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE]; + var cxtDrag = data.contexts[r.DRAG]; + var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]; + + var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) { + cxt.setTransform(1, 0, 0, 1, 0, 0); + + if (needClear || !motionBlurFadeEffect) { + cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight); + } else { + mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight); + } + + var pxr = mbPxRatio; + cxt.drawImage(txt, // img + 0, 0, // sx, sy + r.canvasWidth * pxr, r.canvasHeight * pxr, // sw, sh + 0, 0, // x, y + r.canvasWidth, r.canvasHeight // w, h + ); + }; + + if (needDraw[r.NODE] || needMbClear[r.NODE]) { + drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]); + needDraw[r.NODE] = false; + } + + if (needDraw[r.DRAG] || needMbClear[r.DRAG]) { + drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]); + needDraw[r.DRAG] = false; + } + } + + r.prevViewport = vp; + + if (r.clearingMotionBlur) { + r.clearingMotionBlur = false; + r.motionBlurCleared = true; + r.motionBlur = true; + } + + if (motionBlur) { + r.motionBlurTimeout = setTimeout(function () { + r.motionBlurTimeout = null; + r.clearedForMotionBlur[r.NODE] = false; + r.clearedForMotionBlur[r.DRAG] = false; + r.motionBlur = false; + r.clearingMotionBlur = !textureDraw; + r.mbFrames = 0; + needDraw[r.NODE] = true; + needDraw[r.DRAG] = true; + r.redraw(); + }, motionBlurDelay); + } + + if (!forcedContext) { + cy.emit('render'); + } + }; + + var CRp$3 = {}; // @O Polygon drawing + + CRp$3.drawPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(x + halfW * points[0], y + halfH * points[1]); + + for (var i = 1; i < points.length / 2; i++) { + context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]); + } + + context.closePath(); + }; + + CRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } + + for (var _i = 0; _i < points.length / 4; _i++) { + var sourceUv = void 0, + destUv = void 0; + + if (_i === 0) { + sourceUv = points.length - 2; + } else { + sourceUv = _i * 4 - 2; + } + + destUv = _i * 4 + 2; + var px = x + halfW * points[_i * 4]; + var py = y + halfH * points[_i * 4 + 1]; + var cosTheta = -points[sourceUv] * points[destUv] - points[sourceUv + 1] * points[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * points[sourceUv]; + var cp0y = py - offset * points[sourceUv + 1]; + var cp1x = px + offset * points[destUv]; + var cp1y = py + offset * points[destUv + 1]; + + if (_i === 0) { + context.moveTo(cp0x, cp0y); + } else { + context.lineTo(cp0x, cp0y); + } + + context.arcTo(px, py, cp1x, cp1y, cornerRadius); + } + + context.closePath(); + }; // Round rectangle drawing + + + CRp$3.drawRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } // Start at top middle + + + context.moveTo(x, y - halfHeight); // Arc from middle top to right side + + context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius); // Arc from right side to bottom + + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); // Arc from bottom to left side + + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); // Arc from left side to topBorder + + context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius); // Join line + + context.lineTo(x, y - halfHeight); + context.closePath(); + }; + + CRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } // Start at top middle + + + context.moveTo(x, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight); + context.lineTo(x + halfWidth, y); + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); + context.lineTo(x - halfWidth, y - halfHeight); + context.lineTo(x, y - halfHeight); + context.closePath(); + }; + + CRp$3.drawCutRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerLength = getCutRectangleCornerLength(); + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(x - halfWidth + cornerLength, y - halfHeight); + context.lineTo(x + halfWidth - cornerLength, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight + cornerLength); + context.lineTo(x + halfWidth, y + halfHeight - cornerLength); + context.lineTo(x + halfWidth - cornerLength, y + halfHeight); + context.lineTo(x - halfWidth + cornerLength, y + halfHeight); + context.lineTo(x - halfWidth, y + halfHeight - cornerLength); + context.lineTo(x - halfWidth, y - halfHeight + cornerLength); + context.closePath(); + }; + + CRp$3.drawBarrelPath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var xBegin = x - halfWidth; + var xEnd = x + halfWidth; + var yBegin = y - halfHeight; + var yEnd = y + halfHeight; + var barrelCurveConstants = getBarrelCurveConstants(width, height); + var wOffset = barrelCurveConstants.widthOffset; + var hOffset = barrelCurveConstants.heightOffset; + var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset; + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(xBegin, yBegin + hOffset); + context.lineTo(xBegin, yEnd - hOffset); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd); + context.lineTo(xEnd - wOffset, yEnd); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset); + context.lineTo(xEnd, yBegin + hOffset); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin); + context.lineTo(xBegin + wOffset, yBegin); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset); + context.closePath(); + }; + + var sin0 = Math.sin(0); + var cos0 = Math.cos(0); + var sin = {}; + var cos = {}; + var ellipseStepSize = Math.PI / 40; + + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + sin[i] = Math.sin(i); + cos[i] = Math.cos(i); + } + + CRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) { + if (context.beginPath) { + context.beginPath(); + } + + if (context.ellipse) { + context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + var xPos, yPos; + var rw = width / 2; + var rh = height / 2; + + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0; + yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0; + + if (i === 0) { + context.moveTo(xPos, yPos); + } else { + context.lineTo(xPos, yPos); + } + } + } + + context.closePath(); + }; + + /* global atob, ArrayBuffer, Uint8Array, Blob */ + var CRp$2 = {}; + + CRp$2.createBuffer = function (w, h) { + var buffer = document.createElement('canvas'); // eslint-disable-line no-undef + + buffer.width = w; + buffer.height = h; + return [buffer, buffer.getContext('2d')]; + }; + + CRp$2.bufferCanvasImage = function (options) { + var cy = this.cy; + var eles = cy.mutableElements(); + var bb = eles.boundingBox(); + var ctrRect = this.findContainerClientCoords(); + var width = options.full ? Math.ceil(bb.w) : ctrRect[2]; + var height = options.full ? Math.ceil(bb.h) : ctrRect[3]; + var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight); + var pxRatio = this.getPixelRatio(); + var scale = 1; + + if (options.scale !== undefined) { + width *= options.scale; + height *= options.scale; + scale = options.scale; + } else if (specdMaxDims) { + var maxScaleW = Infinity; + var maxScaleH = Infinity; + + if (number$1(options.maxWidth)) { + maxScaleW = scale * options.maxWidth / width; + } + + if (number$1(options.maxHeight)) { + maxScaleH = scale * options.maxHeight / height; + } + + scale = Math.min(maxScaleW, maxScaleH); + width *= scale; + height *= scale; + } + + if (!specdMaxDims) { + width *= pxRatio; + height *= pxRatio; + scale *= pxRatio; + } + + var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef + + buffCanvas.width = width; + buffCanvas.height = height; + buffCanvas.style.width = width + 'px'; + buffCanvas.style.height = height + 'px'; + var buffCxt = buffCanvas.getContext('2d'); // Rasterize the layers, but only if container has nonzero size + + if (width > 0 && height > 0) { + buffCxt.clearRect(0, 0, width, height); + buffCxt.globalCompositeOperation = 'source-over'; + var zsortedEles = this.getCachedZSortedEles(); + + if (options.full) { + // draw the full bounds of the graph + buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(bb.x1 * scale, bb.y1 * scale); + } else { + // draw the current view + var pan = cy.pan(); + var translation = { + x: pan.x * scale, + y: pan.y * scale + }; + scale *= cy.zoom(); + buffCxt.translate(translation.x, translation.y); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(-translation.x, -translation.y); + } // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs + + + if (options.bg) { + buffCxt.globalCompositeOperation = 'destination-over'; + buffCxt.fillStyle = options.bg; + buffCxt.rect(0, 0, width, height); + buffCxt.fill(); + } + } + + return buffCanvas; + }; + + function b64ToBlob(b64, mimeType) { + var bytes = atob(b64); + var buff = new ArrayBuffer(bytes.length); + var buffUint8 = new Uint8Array(buff); + + for (var i = 0; i < bytes.length; i++) { + buffUint8[i] = bytes.charCodeAt(i); + } + + return new Blob([buff], { + type: mimeType + }); + } + + function b64UriToB64(b64uri) { + var i = b64uri.indexOf(','); + return b64uri.substr(i + 1); + } + + function output(options, canvas, mimeType) { + var getB64Uri = function getB64Uri() { + return canvas.toDataURL(mimeType, options.quality); + }; + + switch (options.output) { + case 'blob-promise': + return new Promise$1(function (resolve, reject) { + try { + canvas.toBlob(function (blob) { + if (blob != null) { + resolve(blob); + } else { + reject(new Error('`canvas.toBlob()` sent a null value in its callback')); + } + }, mimeType, options.quality); + } catch (err) { + reject(err); + } + }); + + case 'blob': + return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); + + case 'base64': + return b64UriToB64(getB64Uri()); + + case 'base64uri': + default: + return getB64Uri(); + } + } + + CRp$2.png = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/png'); + }; + + CRp$2.jpg = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/jpeg'); + }; + + var CRp$1 = {}; + + CRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points) { + switch (name) { + case 'ellipse': + return this.drawEllipsePath(context, centerX, centerY, width, height); + + case 'polygon': + return this.drawPolygonPath(context, centerX, centerY, width, height, points); + + case 'round-polygon': + return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points); + + case 'roundrectangle': + case 'round-rectangle': + return this.drawRoundRectanglePath(context, centerX, centerY, width, height); + + case 'cutrectangle': + case 'cut-rectangle': + return this.drawCutRectanglePath(context, centerX, centerY, width, height); + + case 'bottomroundrectangle': + case 'bottom-round-rectangle': + return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height); + + case 'barrel': + return this.drawBarrelPath(context, centerX, centerY, width, height); + } + }; + + var CR = CanvasRenderer; + var CRp = CanvasRenderer.prototype; + CRp.CANVAS_LAYERS = 3; // + + CRp.SELECT_BOX = 0; + CRp.DRAG = 1; + CRp.NODE = 2; + CRp.BUFFER_COUNT = 3; // + + CRp.TEXTURE_BUFFER = 0; + CRp.MOTIONBLUR_BUFFER_NODE = 1; + CRp.MOTIONBLUR_BUFFER_DRAG = 2; + + function CanvasRenderer(options) { + var r = this; + r.data = { + canvases: new Array(CRp.CANVAS_LAYERS), + contexts: new Array(CRp.CANVAS_LAYERS), + canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS), + bufferCanvases: new Array(CRp.BUFFER_COUNT), + bufferContexts: new Array(CRp.CANVAS_LAYERS) + }; + var tapHlOffAttr = '-webkit-tap-highlight-color'; + var tapHlOffStyle = 'rgba(0,0,0,0)'; + r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef + + var containerStyle = r.data.canvasContainer.style; + r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle; + containerStyle.position = 'relative'; + containerStyle.zIndex = '0'; + containerStyle.overflow = 'hidden'; + var container = options.cy.container(); + container.appendChild(r.data.canvasContainer); + container.style[tapHlOffAttr] = tapHlOffStyle; + var styleMap = { + '-webkit-user-select': 'none', + '-moz-user-select': '-moz-none', + 'user-select': 'none', + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', + 'outline-style': 'none' + }; + + if (ms()) { + styleMap['-ms-touch-action'] = 'none'; + styleMap['touch-action'] = 'none'; + } + + for (var i = 0; i < CRp.CANVAS_LAYERS; i++) { + var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + + r.data.contexts[i] = canvas.getContext('2d'); + Object.keys(styleMap).forEach(function (k) { + canvas.style[k] = styleMap[k]; + }); + canvas.style.position = 'absolute'; + canvas.setAttribute('data-id', 'layer' + i); + canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i); + r.data.canvasContainer.appendChild(canvas); + r.data.canvasNeedsRedraw[i] = false; + } + + r.data.topCanvas = r.data.canvases[0]; + r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node'); + r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox'); + r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag'); + + for (var i = 0; i < CRp.BUFFER_COUNT; i++) { + r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + + r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d'); + r.data.bufferCanvases[i].style.position = 'absolute'; + r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i); + r.data.bufferCanvases[i].style.zIndex = String(-i - 1); + r.data.bufferCanvases[i].style.visibility = 'hidden'; //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]); + } + + r.pathsEnabled = true; + var emptyBb = makeBoundingBox(); + + var getBoxCenter = function getBoxCenter(bb) { + return { + x: (bb.x1 + bb.x2) / 2, + y: (bb.y1 + bb.y2) / 2 + }; + }; + + var getCenterOffset = function getCenterOffset(bb) { + return { + x: -bb.w / 2, + y: -bb.h / 2 + }; + }; + + var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) { + var _p = ele[0]._private; + var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp; + return !same; + }; + + var getStyleKey = function getStyleKey(ele) { + return ele[0]._private.nodeKey; + }; + + var getLabelKey = function getLabelKey(ele) { + return ele[0]._private.labelStyleKey; + }; + + var getSourceLabelKey = function getSourceLabelKey(ele) { + return ele[0]._private.sourceLabelStyleKey; + }; + + var getTargetLabelKey = function getTargetLabelKey(ele) { + return ele[0]._private.targetLabelStyleKey; + }; + + var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElement(context, ele, bb, false, false, useEleOpacity); + }; + + var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity); + }; + + var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity); + }; + + var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity); + }; + + var getElementBox = function getElementBox(ele) { + ele.boundingBox(); + return ele[0]._private.bodyBounds; + }; + + var getLabelBox = function getLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.main || emptyBb; + }; + + var getSourceLabelBox = function getSourceLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.source || emptyBb; + }; + + var getTargetLabelBox = function getTargetLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.target || emptyBb; + }; + + var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) { + return scaledLabelShown; + }; + + var getElementRotationPoint = function getElementRotationPoint(ele) { + return getBoxCenter(getElementBox(ele)); + }; + + var addTextMargin = function addTextMargin(prefix, pt, ele) { + var pre = prefix ? prefix + '-' : ''; + return { + x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue, + y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue + }; + }; + + var getRsPt = function getRsPt(ele, x, y) { + var rs = ele[0]._private.rscratch; + return { + x: rs[x], + y: rs[y] + }; + }; + + var getLabelRotationPoint = function getLabelRotationPoint(ele) { + return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele); + }; + + var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) { + return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele); + }; + + var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) { + return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele); + }; + + var getElementRotationOffset = function getElementRotationOffset(ele) { + return getCenterOffset(getElementBox(ele)); + }; + + var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) { + return getCenterOffset(getSourceLabelBox(ele)); + }; + + var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) { + return getCenterOffset(getTargetLabelBox(ele)); + }; + + var getLabelRotationOffset = function getLabelRotationOffset(ele) { + var bb = getLabelBox(ele); + var p = getCenterOffset(getLabelBox(ele)); + + if (ele.isNode()) { + switch (ele.pstyle('text-halign').value) { + case 'left': + p.x = -bb.w; + break; + + case 'right': + p.x = 0; + break; + } + + switch (ele.pstyle('text-valign').value) { + case 'top': + p.y = -bb.h; + break; + + case 'bottom': + p.y = 0; + break; + } + } + + return p; + }; + + var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, { + getKey: getStyleKey, + doesEleInvalidateKey: backgroundTimestampHasChanged, + drawElement: drawElement, + getBoundingBox: getElementBox, + getRotationPoint: getElementRotationPoint, + getRotationOffset: getElementRotationOffset, + allowEdgeTxrCaching: false, + allowParentTxrCaching: false + }); + var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, { + getKey: getLabelKey, + drawElement: drawLabel, + getBoundingBox: getLabelBox, + getRotationPoint: getLabelRotationPoint, + getRotationOffset: getLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, { + getKey: getSourceLabelKey, + drawElement: drawSourceLabel, + getBoundingBox: getSourceLabelBox, + getRotationPoint: getSourceLabelRotationPoint, + getRotationOffset: getSourceLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, { + getKey: getTargetLabelKey, + drawElement: drawTargetLabel, + getBoundingBox: getTargetLabelBox, + getRotationPoint: getTargetLabelRotationPoint, + getRotationOffset: getTargetLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r); + r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) { + // each cache should check for sub-key diff to see that the update affects that cache particularly + eleTxrCache.invalidateElements(eles); + lblTxrCache.invalidateElements(eles); + slbTxrCache.invalidateElements(eles); + tlbTxrCache.invalidateElements(eles); // any change invalidates the layers + + lyrTxrCache.invalidateElements(eles); // update the old bg timestamp so diffs can be done in the ele txr caches + + for (var _i = 0; _i < eles.length; _i++) { + var _p = eles[_i]._private; + _p.oldBackgroundTimestamp = _p.backgroundTimestamp; + } + }); + + var refineInLayers = function refineInLayers(reqs) { + for (var i = 0; i < reqs.length; i++) { + lyrTxrCache.enqueueElementRefinement(reqs[i].ele); + } + }; + + eleTxrCache.onDequeue(refineInLayers); + lblTxrCache.onDequeue(refineInLayers); + slbTxrCache.onDequeue(refineInLayers); + tlbTxrCache.onDequeue(refineInLayers); + } + + CRp.redrawHint = function (group, bool) { + var r = this; + + switch (group) { + case 'eles': + r.data.canvasNeedsRedraw[CRp.NODE] = bool; + break; + + case 'drag': + r.data.canvasNeedsRedraw[CRp.DRAG] = bool; + break; + + case 'select': + r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool; + break; + } + }; // whether to use Path2D caching for drawing + + + var pathsImpld = typeof Path2D !== 'undefined'; + + CRp.path2dEnabled = function (on) { + if (on === undefined) { + return this.pathsEnabled; + } + + this.pathsEnabled = on ? true : false; + }; + + CRp.usePaths = function () { + return pathsImpld && this.pathsEnabled; + }; + + CRp.setImgSmoothing = function (context, bool) { + if (context.imageSmoothingEnabled != null) { + context.imageSmoothingEnabled = bool; + } else { + context.webkitImageSmoothingEnabled = bool; + context.mozImageSmoothingEnabled = bool; + context.msImageSmoothingEnabled = bool; + } + }; + + CRp.getImgSmoothing = function (context) { + if (context.imageSmoothingEnabled != null) { + return context.imageSmoothingEnabled; + } else { + return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled; + } + }; + + CRp.makeOffscreenCanvas = function (width, height) { + var canvas; + + if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== ("undefined" )) { + canvas = new OffscreenCanvas(width, height); + } else { + canvas = document.createElement('canvas'); // eslint-disable-line no-undef + + canvas.width = width; + canvas.height = height; + } + + return canvas; + }; + + [CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) { + extend(CRp, props); + }); + + var renderer = [{ + name: 'null', + impl: NullRenderer + }, { + name: 'base', + impl: BR + }, { + name: 'canvas', + impl: CR + }]; + + var incExts = [{ + type: 'layout', + extensions: layout + }, { + type: 'renderer', + extensions: renderer + }]; + + var extensions = {}; // registered modules for extensions, indexed by name + + var modules = {}; + + function setExtension(type, name, registrant) { + var ext = registrant; + + var overrideErr = function overrideErr(field) { + warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden'); + }; + + if (type === 'core') { + if (Core.prototype[name]) { + return overrideErr(name); + } else { + Core.prototype[name] = registrant; + } + } else if (type === 'collection') { + if (Collection.prototype[name]) { + return overrideErr(name); + } else { + Collection.prototype[name] = registrant; + } + } else if (type === 'layout') { + // fill in missing layout functions in the prototype + var Layout = function Layout(options) { + this.options = options; + registrant.call(this, options); // make sure layout has _private for use w/ std apis like .on() + + if (!plainObject(this._private)) { + this._private = {}; + } + + this._private.cy = options.cy; + this._private.listeners = []; + this.createEmitter(); + }; + + var layoutProto = Layout.prototype = Object.create(registrant.prototype); + var optLayoutFns = []; + + for (var i = 0; i < optLayoutFns.length; i++) { + var fnName = optLayoutFns[i]; + + layoutProto[fnName] = layoutProto[fnName] || function () { + return this; + }; + } // either .start() or .run() is defined, so autogen the other + + + if (layoutProto.start && !layoutProto.run) { + layoutProto.run = function () { + this.start(); + return this; + }; + } else if (!layoutProto.start && layoutProto.run) { + layoutProto.start = function () { + this.run(); + return this; + }; + } + + var regStop = registrant.prototype.stop; + + layoutProto.stop = function () { + var opts = this.options; + + if (opts && opts.animate) { + var anis = this.animations; + + if (anis) { + for (var _i = 0; _i < anis.length; _i++) { + anis[_i].stop(); + } + } + } + + if (regStop) { + regStop.call(this); + } else { + this.emit('layoutstop'); + } + + return this; + }; + + if (!layoutProto.destroy) { + layoutProto.destroy = function () { + return this; + }; + } + + layoutProto.cy = function () { + return this._private.cy; + }; + + var getCy = function getCy(layout) { + return layout._private.cy; + }; + + var emitterOpts = { + addEventFields: function addEventFields(layout, evt) { + evt.layout = layout; + evt.cy = getCy(layout); + evt.target = layout; + }, + bubble: function bubble() { + return true; + }, + parent: function parent(layout) { + return getCy(layout); + } + }; + extend(layoutProto, { + createEmitter: function createEmitter() { + this._private.emitter = new Emitter(emitterOpts, this); + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(evt, cb) { + this.emitter().on(evt, cb); + return this; + }, + one: function one(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + once: function once(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + removeListener: function removeListener(evt, cb) { + this.emitter().removeListener(evt, cb); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + emit: function emit(evt, params) { + this.emitter().emit(evt, params); + return this; + } + }); + define.eventAliasesOn(layoutProto); + ext = Layout; // replace with our wrapped layout + } else if (type === 'renderer' && name !== 'null' && name !== 'base') { + // user registered renderers inherit from base + var BaseRenderer = getExtension('renderer', 'base'); + var bProto = BaseRenderer.prototype; + var RegistrantRenderer = registrant; + var rProto = registrant.prototype; + + var Renderer = function Renderer() { + BaseRenderer.apply(this, arguments); + RegistrantRenderer.apply(this, arguments); + }; + + var proto = Renderer.prototype; + + for (var pName in bProto) { + var pVal = bProto[pName]; + var existsInR = rProto[pName] != null; + + if (existsInR) { + return overrideErr(pName); + } + + proto[pName] = pVal; // take impl from base + } + + for (var _pName in rProto) { + proto[_pName] = rProto[_pName]; // take impl from registrant + } + + bProto.clientFunctions.forEach(function (name) { + proto[name] = proto[name] || function () { + error('Renderer does not implement `renderer.' + name + '()` on its prototype'); + }; + }); + ext = Renderer; + } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') { + // to avoid potential prototype pollution + return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions'); + } + + return setMap({ + map: extensions, + keys: [type, name], + value: ext + }); + } + + function getExtension(type, name) { + return getMap({ + map: extensions, + keys: [type, name] + }); + } + + function setModule(type, name, moduleType, moduleName, registrant) { + return setMap({ + map: modules, + keys: [type, name, moduleType, moduleName], + value: registrant + }); + } + + function getModule(type, name, moduleType, moduleName) { + return getMap({ + map: modules, + keys: [type, name, moduleType, moduleName] + }); + } + + var extension = function extension() { + // e.g. extension('renderer', 'svg') + if (arguments.length === 2) { + return getExtension.apply(null, arguments); + } // e.g. extension('renderer', 'svg', { ... }) + else if (arguments.length === 3) { + return setExtension.apply(null, arguments); + } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') + else if (arguments.length === 4) { + return getModule.apply(null, arguments); + } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... }) + else if (arguments.length === 5) { + return setModule.apply(null, arguments); + } else { + error('Invalid extension access syntax'); + } + }; // allows a core instance to access extensions internally + + + Core.prototype.extension = extension; // included extensions + + incExts.forEach(function (group) { + group.extensions.forEach(function (ext) { + setExtension(group.type, ext.name, ext.impl); + }); + }); + + // (useful for init) + + var Stylesheet = function Stylesheet() { + if (!(this instanceof Stylesheet)) { + return new Stylesheet(); + } + + this.length = 0; + }; + + var sheetfn = Stylesheet.prototype; + + sheetfn.instanceString = function () { + return 'stylesheet'; + }; // just store the selector to be parsed later + + + sheetfn.selector = function (selector) { + var i = this.length++; + this[i] = { + selector: selector, + properties: [] + }; + return this; // chaining + }; // just store the property to be parsed later + + + sheetfn.css = function (name, value) { + var i = this.length - 1; + + if (string(name)) { + this[i].properties.push({ + name: name, + value: value + }); + } else if (plainObject(name)) { + var map = name; + var propNames = Object.keys(map); + + for (var j = 0; j < propNames.length; j++) { + var key = propNames[j]; + var mapVal = map[key]; + + if (mapVal == null) { + continue; + } + + var prop = Style.properties[key] || Style.properties[dash2camel(key)]; + + if (prop == null) { + continue; + } + + var _name = prop.name; + var _value = mapVal; + this[i].properties.push({ + name: _name, + value: _value + }); + } + } + + return this; // chaining + }; + + sheetfn.style = sheetfn.css; // generate a real style object from the dummy stylesheet + + sheetfn.generateStyle = function (cy) { + var style = new Style(cy); + return this.appendToStyle(style); + }; // append a dummy stylesheet object on a real style object + + + sheetfn.appendToStyle = function (style) { + for (var i = 0; i < this.length; i++) { + var context = this[i]; + var selector = context.selector; + var props = context.properties; + style.selector(selector); // apply selector + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + style.css(prop.name, prop.value); // apply property + } + } + + return style; + }; + + var version = "3.24.0"; + + var cytoscape = function cytoscape(options) { + // if no options specified, use default + if (options === undefined) { + options = {}; + } // create instance + + + if (plainObject(options)) { + return new Core(options); + } // allow for registration of extensions + else if (string(options)) { + return extension.apply(extension, arguments); + } + }; // e.g. cytoscape.use( require('cytoscape-foo'), bar ) + + + cytoscape.use = function (ext) { + var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext + + args.unshift(cytoscape); // cytoscape is first arg to ext + + ext.apply(null, args); + return this; + }; + + cytoscape.warnings = function (bool) { + return warnings(bool); + }; // replaced by build system + + + cytoscape.version = version; // expose public apis (mostly for extensions) + + cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet; + + return cytoscape; + +})); + + +/***/ }), + +/***/ 82241: +/***/ (function(module) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(); + else {} +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_543__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_543__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_543__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_543__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_543__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_543__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_543__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_543__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_543__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_543__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_543__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_543__(__nested_webpack_require_543__.s = 26); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LayoutConstants() {} + +/** + * Layout Quality: 0:draft, 1:default, 2:proof + */ +LayoutConstants.QUALITY = 1; + +/** + * Default parameters + */ +LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; +LayoutConstants.DEFAULT_INCREMENTAL = false; +LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; +LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; +LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; +LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; + +// ----------------------------------------------------------------------------- +// Section: General other constants +// ----------------------------------------------------------------------------- +/* + * Margins of a graph to be applied on bouding rectangle of its contents. We + * assume margins on all four sides to be uniform. + */ +LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; + +/* + * Whether to consider labels in node dimensions or not + */ +LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_SIZE = 40; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; + +/* + * Empty compound node size. When a compound node is empty, its both + * dimensions should be of this value. + */ +LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; + +/* + * Minimum length that an edge should take during layout + */ +LayoutConstants.MIN_EDGE_LENGTH = 1; + +/* + * World boundaries that layout operates on + */ +LayoutConstants.WORLD_BOUNDARY = 1000000; + +/* + * World boundaries that random positioning can be performed with + */ +LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000; + +/* + * Coordinates of the world center + */ +LayoutConstants.WORLD_CENTER_X = 1200; +LayoutConstants.WORLD_CENTER_Y = 900; + +module.exports = LayoutConstants; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_4947__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_4947__(2); +var IGeometry = __nested_webpack_require_4947__(8); +var IMath = __nested_webpack_require_4947__(9); + +function LEdge(source, target, vEdge) { + LGraphObject.call(this, vEdge); + + this.isOverlapingSourceAndTarget = false; + this.vGraphObject = vEdge; + this.bendpoints = []; + this.source = source; + this.target = target; +} + +LEdge.prototype = Object.create(LGraphObject.prototype); + +for (var prop in LGraphObject) { + LEdge[prop] = LGraphObject[prop]; +} + +LEdge.prototype.getSource = function () { + return this.source; +}; + +LEdge.prototype.getTarget = function () { + return this.target; +}; + +LEdge.prototype.isInterGraph = function () { + return this.isInterGraph; +}; + +LEdge.prototype.getLength = function () { + return this.length; +}; + +LEdge.prototype.isOverlapingSourceAndTarget = function () { + return this.isOverlapingSourceAndTarget; +}; + +LEdge.prototype.getBendpoints = function () { + return this.bendpoints; +}; + +LEdge.prototype.getLca = function () { + return this.lca; +}; + +LEdge.prototype.getSourceInLca = function () { + return this.sourceInLca; +}; + +LEdge.prototype.getTargetInLca = function () { + return this.targetInLca; +}; + +LEdge.prototype.getOtherEnd = function (node) { + if (this.source === node) { + return this.target; + } else if (this.target === node) { + return this.source; + } else { + throw "Node is not incident with this edge"; + } +}; + +LEdge.prototype.getOtherEndInGraph = function (node, graph) { + var otherEnd = this.getOtherEnd(node); + var root = graph.getGraphManager().getRoot(); + + while (true) { + if (otherEnd.getOwner() == graph) { + return otherEnd; + } + + if (otherEnd.getOwner() == root) { + break; + } + + otherEnd = otherEnd.getOwner().getParent(); + } + + return null; +}; + +LEdge.prototype.updateLength = function () { + var clipPointCoordinates = new Array(4); + + this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); + + if (!this.isOverlapingSourceAndTarget) { + this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; + this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); + } +}; + +LEdge.prototype.updateLengthSimple = function () { + this.lengthX = this.target.getCenterX() - this.source.getCenterX(); + this.lengthY = this.target.getCenterY() - this.source.getCenterY(); + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); +}; + +module.exports = LEdge; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LGraphObject(vGraphObject) { + this.vGraphObject = vGraphObject; +} + +module.exports = LGraphObject; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_8167__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_8167__(2); +var Integer = __nested_webpack_require_8167__(10); +var RectangleD = __nested_webpack_require_8167__(13); +var LayoutConstants = __nested_webpack_require_8167__(0); +var RandomSeed = __nested_webpack_require_8167__(16); +var PointD = __nested_webpack_require_8167__(4); + +function LNode(gm, loc, size, vNode) { + //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode) + if (size == null && vNode == null) { + vNode = loc; + } + + LGraphObject.call(this, vNode); + + //Alternative constructor 2 : LNode(Layout layout, Object vNode) + if (gm.graphManager != null) gm = gm.graphManager; + + this.estimatedSize = Integer.MIN_VALUE; + this.inclusionTreeDepth = Integer.MAX_VALUE; + this.vGraphObject = vNode; + this.edges = []; + this.graphManager = gm; + + if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD(); +} + +LNode.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LNode[prop] = LGraphObject[prop]; +} + +LNode.prototype.getEdges = function () { + return this.edges; +}; + +LNode.prototype.getChild = function () { + return this.child; +}; + +LNode.prototype.getOwner = function () { + // if (this.owner != null) { + // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) { + // throw "assert failed"; + // } + // } + + return this.owner; +}; + +LNode.prototype.getWidth = function () { + return this.rect.width; +}; + +LNode.prototype.setWidth = function (width) { + this.rect.width = width; +}; + +LNode.prototype.getHeight = function () { + return this.rect.height; +}; + +LNode.prototype.setHeight = function (height) { + this.rect.height = height; +}; + +LNode.prototype.getCenterX = function () { + return this.rect.x + this.rect.width / 2; +}; + +LNode.prototype.getCenterY = function () { + return this.rect.y + this.rect.height / 2; +}; + +LNode.prototype.getCenter = function () { + return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); +}; + +LNode.prototype.getLocation = function () { + return new PointD(this.rect.x, this.rect.y); +}; + +LNode.prototype.getRect = function () { + return this.rect; +}; + +LNode.prototype.getDiagonal = function () { + return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); +}; + +/** + * This method returns half the diagonal length of this node. + */ +LNode.prototype.getHalfTheDiagonal = function () { + return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; +}; + +LNode.prototype.setRect = function (upperLeft, dimension) { + this.rect.x = upperLeft.x; + this.rect.y = upperLeft.y; + this.rect.width = dimension.width; + this.rect.height = dimension.height; +}; + +LNode.prototype.setCenter = function (cx, cy) { + this.rect.x = cx - this.rect.width / 2; + this.rect.y = cy - this.rect.height / 2; +}; + +LNode.prototype.setLocation = function (x, y) { + this.rect.x = x; + this.rect.y = y; +}; + +LNode.prototype.moveBy = function (dx, dy) { + this.rect.x += dx; + this.rect.y += dy; +}; + +LNode.prototype.getEdgeListToNode = function (to) { + var edgeList = []; + var edge; + var self = this; + + self.edges.forEach(function (edge) { + + if (edge.target == to) { + if (edge.source != self) throw "Incorrect edge source!"; + + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getEdgesBetween = function (other) { + var edgeList = []; + var edge; + + var self = this; + self.edges.forEach(function (edge) { + + if (!(edge.source == self || edge.target == self)) throw "Incorrect edge source and/or target"; + + if (edge.target == other || edge.source == other) { + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getNeighborsList = function () { + var neighbors = new Set(); + + var self = this; + self.edges.forEach(function (edge) { + + if (edge.source == self) { + neighbors.add(edge.target); + } else { + if (edge.target != self) { + throw "Incorrect incidency!"; + } + + neighbors.add(edge.source); + } + }); + + return neighbors; +}; + +LNode.prototype.withChildren = function () { + var withNeighborsList = new Set(); + var childNode; + var children; + + withNeighborsList.add(this); + + if (this.child != null) { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + children = childNode.withChildren(); + children.forEach(function (node) { + withNeighborsList.add(node); + }); + } + } + + return withNeighborsList; +}; + +LNode.prototype.getNoOfChildren = function () { + var noOfChildren = 0; + var childNode; + + if (this.child == null) { + noOfChildren = 1; + } else { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + + noOfChildren += childNode.getNoOfChildren(); + } + } + + if (noOfChildren == 0) { + noOfChildren = 1; + } + return noOfChildren; +}; + +LNode.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LNode.prototype.calcEstimatedSize = function () { + if (this.child == null) { + return this.estimatedSize = (this.rect.width + this.rect.height) / 2; + } else { + this.estimatedSize = this.child.calcEstimatedSize(); + this.rect.width = this.estimatedSize; + this.rect.height = this.estimatedSize; + + return this.estimatedSize; + } +}; + +LNode.prototype.scatter = function () { + var randomCenterX; + var randomCenterY; + + var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; + + var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; + + this.rect.x = randomCenterX; + this.rect.y = randomCenterY; +}; + +LNode.prototype.updateBounds = function () { + if (this.getChild() == null) { + throw "assert failed"; + } + if (this.getChild().getNodes().length != 0) { + // wrap the children nodes by re-arranging the boundaries + var childGraph = this.getChild(); + childGraph.updateBounds(true); + + this.rect.x = childGraph.getLeft(); + this.rect.y = childGraph.getTop(); + + this.setWidth(childGraph.getRight() - childGraph.getLeft()); + this.setHeight(childGraph.getBottom() - childGraph.getTop()); + + // Update compound bounds considering its label properties + if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { + + var width = childGraph.getRight() - childGraph.getLeft(); + var height = childGraph.getBottom() - childGraph.getTop(); + + if (this.labelWidth > width) { + this.rect.x -= (this.labelWidth - width) / 2; + this.setWidth(this.labelWidth); + } + + if (this.labelHeight > height) { + if (this.labelPos == "center") { + this.rect.y -= (this.labelHeight - height) / 2; + } else if (this.labelPos == "top") { + this.rect.y -= this.labelHeight - height; + } + this.setHeight(this.labelHeight); + } + } + } +}; + +LNode.prototype.getInclusionTreeDepth = function () { + if (this.inclusionTreeDepth == Integer.MAX_VALUE) { + throw "assert failed"; + } + return this.inclusionTreeDepth; +}; + +LNode.prototype.transform = function (trans) { + var left = this.rect.x; + + if (left > LayoutConstants.WORLD_BOUNDARY) { + left = LayoutConstants.WORLD_BOUNDARY; + } else if (left < -LayoutConstants.WORLD_BOUNDARY) { + left = -LayoutConstants.WORLD_BOUNDARY; + } + + var top = this.rect.y; + + if (top > LayoutConstants.WORLD_BOUNDARY) { + top = LayoutConstants.WORLD_BOUNDARY; + } else if (top < -LayoutConstants.WORLD_BOUNDARY) { + top = -LayoutConstants.WORLD_BOUNDARY; + } + + var leftTop = new PointD(left, top); + var vLeftTop = trans.inverseTransformPoint(leftTop); + + this.setLocation(vLeftTop.x, vLeftTop.y); +}; + +LNode.prototype.getLeft = function () { + return this.rect.x; +}; + +LNode.prototype.getRight = function () { + return this.rect.x + this.rect.width; +}; + +LNode.prototype.getTop = function () { + return this.rect.y; +}; + +LNode.prototype.getBottom = function () { + return this.rect.y + this.rect.height; +}; + +LNode.prototype.getParent = function () { + if (this.owner == null) { + return null; + } + + return this.owner.getParent(); +}; + +module.exports = LNode; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function PointD(x, y) { + if (x == null && y == null) { + this.x = 0; + this.y = 0; + } else { + this.x = x; + this.y = y; + } +} + +PointD.prototype.getX = function () { + return this.x; +}; + +PointD.prototype.getY = function () { + return this.y; +}; + +PointD.prototype.setX = function (x) { + this.x = x; +}; + +PointD.prototype.setY = function (y) { + this.y = y; +}; + +PointD.prototype.getDifference = function (pt) { + return new DimensionD(this.x - pt.x, this.y - pt.y); +}; + +PointD.prototype.getCopy = function () { + return new PointD(this.x, this.y); +}; + +PointD.prototype.translate = function (dim) { + this.x += dim.width; + this.y += dim.height; + return this; +}; + +module.exports = PointD; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_17549__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_17549__(2); +var Integer = __nested_webpack_require_17549__(10); +var LayoutConstants = __nested_webpack_require_17549__(0); +var LGraphManager = __nested_webpack_require_17549__(6); +var LNode = __nested_webpack_require_17549__(3); +var LEdge = __nested_webpack_require_17549__(1); +var RectangleD = __nested_webpack_require_17549__(13); +var Point = __nested_webpack_require_17549__(12); +var LinkedList = __nested_webpack_require_17549__(11); + +function LGraph(parent, obj2, vGraph) { + LGraphObject.call(this, vGraph); + this.estimatedSize = Integer.MIN_VALUE; + this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; + this.edges = []; + this.nodes = []; + this.isConnected = false; + this.parent = parent; + + if (obj2 != null && obj2 instanceof LGraphManager) { + this.graphManager = obj2; + } else if (obj2 != null && obj2 instanceof Layout) { + this.graphManager = obj2.graphManager; + } +} + +LGraph.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LGraph[prop] = LGraphObject[prop]; +} + +LGraph.prototype.getNodes = function () { + return this.nodes; +}; + +LGraph.prototype.getEdges = function () { + return this.edges; +}; + +LGraph.prototype.getGraphManager = function () { + return this.graphManager; +}; + +LGraph.prototype.getParent = function () { + return this.parent; +}; + +LGraph.prototype.getLeft = function () { + return this.left; +}; + +LGraph.prototype.getRight = function () { + return this.right; +}; + +LGraph.prototype.getTop = function () { + return this.top; +}; + +LGraph.prototype.getBottom = function () { + return this.bottom; +}; + +LGraph.prototype.isConnected = function () { + return this.isConnected; +}; + +LGraph.prototype.add = function (obj1, sourceNode, targetNode) { + if (sourceNode == null && targetNode == null) { + var newNode = obj1; + if (this.graphManager == null) { + throw "Graph has no graph mgr!"; + } + if (this.getNodes().indexOf(newNode) > -1) { + throw "Node already in graph!"; + } + newNode.owner = this; + this.getNodes().push(newNode); + + return newNode; + } else { + var newEdge = obj1; + if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { + throw "Source or target not in graph!"; + } + + if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { + throw "Both owners must be this graph!"; + } + + if (sourceNode.owner != targetNode.owner) { + return null; + } + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // set as intra-graph edge + newEdge.isInterGraph = false; + + // add to graph edge list + this.getEdges().push(newEdge); + + // add to incidency lists + sourceNode.edges.push(newEdge); + + if (targetNode != sourceNode) { + targetNode.edges.push(newEdge); + } + + return newEdge; + } +}; + +LGraph.prototype.remove = function (obj) { + var node = obj; + if (obj instanceof LNode) { + if (node == null) { + throw "Node is null!"; + } + if (!(node.owner != null && node.owner == this)) { + throw "Owner graph is invalid!"; + } + if (this.graphManager == null) { + throw "Owner graph manager is invalid!"; + } + // remove incident edges first (make a copy to do it safely) + var edgesToBeRemoved = node.edges.slice(); + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + + if (edge.isInterGraph) { + this.graphManager.remove(edge); + } else { + edge.source.owner.remove(edge); + } + } + + // now the node itself + var index = this.nodes.indexOf(node); + if (index == -1) { + throw "Node not in owner node list!"; + } + + this.nodes.splice(index, 1); + } else if (obj instanceof LEdge) { + var edge = obj; + if (edge == null) { + throw "Edge is null!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { + throw "Source and/or target owner is invalid!"; + } + + var sourceIndex = edge.source.edges.indexOf(edge); + var targetIndex = edge.target.edges.indexOf(edge); + if (!(sourceIndex > -1 && targetIndex > -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + edge.source.edges.splice(sourceIndex, 1); + + if (edge.target != edge.source) { + edge.target.edges.splice(targetIndex, 1); + } + + var index = edge.source.owner.getEdges().indexOf(edge); + if (index == -1) { + throw "Not in owner's edge list!"; + } + + edge.source.owner.getEdges().splice(index, 1); + } +}; + +LGraph.prototype.updateLeftTop = function () { + var top = Integer.MAX_VALUE; + var left = Integer.MAX_VALUE; + var nodeTop; + var nodeLeft; + var margin; + + var nodes = this.getNodes(); + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeTop = lNode.getTop(); + nodeLeft = lNode.getLeft(); + + if (top > nodeTop) { + top = nodeTop; + } + + if (left > nodeLeft) { + left = nodeLeft; + } + } + + // Do we have any nodes in this graph? + if (top == Integer.MAX_VALUE) { + return null; + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = left - margin; + this.top = top - margin; + + // Apply the margins and return the result + return new Point(this.left, this.top); +}; + +LGraph.prototype.updateBounds = function (recursive) { + // calculate bounds + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + var margin; + + var nodes = this.nodes; + var s = nodes.length; + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + + if (recursive && lNode.child != null) { + lNode.updateBounds(); + } + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + if (left == Integer.MAX_VALUE) { + this.left = this.parent.getLeft(); + this.right = this.parent.getRight(); + this.top = this.parent.getTop(); + this.bottom = this.parent.getBottom(); + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = boundingRect.x - margin; + this.right = boundingRect.x + boundingRect.width + margin; + this.top = boundingRect.y - margin; + this.bottom = boundingRect.y + boundingRect.height + margin; +}; + +LGraph.calculateBounds = function (nodes) { + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + + return boundingRect; +}; + +LGraph.prototype.getInclusionTreeDepth = function () { + if (this == this.graphManager.getRoot()) { + return 1; + } else { + return this.parent.getInclusionTreeDepth(); + } +}; + +LGraph.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LGraph.prototype.calcEstimatedSize = function () { + var size = 0; + var nodes = this.nodes; + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + size += lNode.calcEstimatedSize(); + } + + if (size == 0) { + this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; + } else { + this.estimatedSize = size / Math.sqrt(this.nodes.length); + } + + return this.estimatedSize; +}; + +LGraph.prototype.updateConnected = function () { + var self = this; + if (this.nodes.length == 0) { + this.isConnected = true; + return; + } + + var queue = new LinkedList(); + var visited = new Set(); + var currentNode = this.nodes[0]; + var neighborEdges; + var currentNeighbor; + var childrenOfNode = currentNode.withChildren(); + childrenOfNode.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + + while (queue.length !== 0) { + currentNode = queue.shift(); + + // Traverse all neighbors of this node + neighborEdges = currentNode.getEdges(); + var size = neighborEdges.length; + for (var i = 0; i < size; i++) { + var neighborEdge = neighborEdges[i]; + currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); + + // Add unvisited neighbors to the list to visit + if (currentNeighbor != null && !visited.has(currentNeighbor)) { + var childrenOfNeighbor = currentNeighbor.withChildren(); + + childrenOfNeighbor.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + } + } + } + + this.isConnected = false; + + if (visited.size >= this.nodes.length) { + var noOfVisitedInThisGraph = 0; + + visited.forEach(function (visitedNode) { + if (visitedNode.owner == self) { + noOfVisitedInThisGraph++; + } + }); + + if (noOfVisitedInThisGraph == this.nodes.length) { + this.isConnected = true; + } + } +}; + +module.exports = LGraph; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_27617__) { + +"use strict"; + + +var LGraph; +var LEdge = __nested_webpack_require_27617__(1); + +function LGraphManager(layout) { + LGraph = __nested_webpack_require_27617__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now. + this.layout = layout; + + this.graphs = []; + this.edges = []; +} + +LGraphManager.prototype.addRoot = function () { + var ngraph = this.layout.newGraph(); + var nnode = this.layout.newNode(null); + var root = this.add(ngraph, nnode); + this.setRootGraph(root); + return this.rootGraph; +}; + +LGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) { + //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge + if (newEdge == null && sourceNode == null && targetNode == null) { + if (newGraph == null) { + throw "Graph is null!"; + } + if (parentNode == null) { + throw "Parent node is null!"; + } + if (this.graphs.indexOf(newGraph) > -1) { + throw "Graph already in this graph mgr!"; + } + + this.graphs.push(newGraph); + + if (newGraph.parent != null) { + throw "Already has a parent!"; + } + if (parentNode.child != null) { + throw "Already has a child!"; + } + + newGraph.parent = parentNode; + parentNode.child = newGraph; + + return newGraph; + } else { + //change the order of the parameters + targetNode = newEdge; + sourceNode = parentNode; + newEdge = newGraph; + var sourceGraph = sourceNode.getOwner(); + var targetGraph = targetNode.getOwner(); + + if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { + throw "Source not in this graph mgr!"; + } + if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { + throw "Target not in this graph mgr!"; + } + + if (sourceGraph == targetGraph) { + newEdge.isInterGraph = false; + return sourceGraph.add(newEdge, sourceNode, targetNode); + } else { + newEdge.isInterGraph = true; + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // add edge to inter-graph edge list + if (this.edges.indexOf(newEdge) > -1) { + throw "Edge already in inter-graph edge list!"; + } + + this.edges.push(newEdge); + + // add edge to source and target incidency lists + if (!(newEdge.source != null && newEdge.target != null)) { + throw "Edge source and/or target is null!"; + } + + if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { + throw "Edge already in source and/or target incidency list!"; + } + + newEdge.source.edges.push(newEdge); + newEdge.target.edges.push(newEdge); + + return newEdge; + } + } +}; + +LGraphManager.prototype.remove = function (lObj) { + if (lObj instanceof LGraph) { + var graph = lObj; + if (graph.getGraphManager() != this) { + throw "Graph not in this graph mgr"; + } + if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { + throw "Invalid parent node!"; + } + + // first the edges (make a copy to do it safely) + var edgesToBeRemoved = []; + + edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); + + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + graph.remove(edge); + } + + // then the nodes (make a copy to do it safely) + var nodesToBeRemoved = []; + + nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); + + var node; + s = nodesToBeRemoved.length; + for (var i = 0; i < s; i++) { + node = nodesToBeRemoved[i]; + graph.remove(node); + } + + // check if graph is the root + if (graph == this.rootGraph) { + this.setRootGraph(null); + } + + // now remove the graph itself + var index = this.graphs.indexOf(graph); + this.graphs.splice(index, 1); + + // also reset the parent of the graph + graph.parent = null; + } else if (lObj instanceof LEdge) { + edge = lObj; + if (edge == null) { + throw "Edge is null!"; + } + if (!edge.isInterGraph) { + throw "Not an inter-graph edge!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + + // remove edge from source and target nodes' incidency lists + + if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + var index = edge.source.edges.indexOf(edge); + edge.source.edges.splice(index, 1); + index = edge.target.edges.indexOf(edge); + edge.target.edges.splice(index, 1); + + // remove edge from owner graph manager's inter-graph edge list + + if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { + throw "Edge owner graph or owner graph manager is null!"; + } + if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { + throw "Not in owner graph manager's edge list!"; + } + + var index = edge.source.owner.getGraphManager().edges.indexOf(edge); + edge.source.owner.getGraphManager().edges.splice(index, 1); + } +}; + +LGraphManager.prototype.updateBounds = function () { + this.rootGraph.updateBounds(true); +}; + +LGraphManager.prototype.getGraphs = function () { + return this.graphs; +}; + +LGraphManager.prototype.getAllNodes = function () { + if (this.allNodes == null) { + var nodeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < s; i++) { + nodeList = nodeList.concat(graphs[i].getNodes()); + } + this.allNodes = nodeList; + } + return this.allNodes; +}; + +LGraphManager.prototype.resetAllNodes = function () { + this.allNodes = null; +}; + +LGraphManager.prototype.resetAllEdges = function () { + this.allEdges = null; +}; + +LGraphManager.prototype.resetAllNodesToApplyGravitation = function () { + this.allNodesToApplyGravitation = null; +}; + +LGraphManager.prototype.getAllEdges = function () { + if (this.allEdges == null) { + var edgeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < graphs.length; i++) { + edgeList = edgeList.concat(graphs[i].getEdges()); + } + + edgeList = edgeList.concat(this.edges); + + this.allEdges = edgeList; + } + return this.allEdges; +}; + +LGraphManager.prototype.getAllNodesToApplyGravitation = function () { + return this.allNodesToApplyGravitation; +}; + +LGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) { + if (this.allNodesToApplyGravitation != null) { + throw "assert failed"; + } + + this.allNodesToApplyGravitation = nodeList; +}; + +LGraphManager.prototype.getRoot = function () { + return this.rootGraph; +}; + +LGraphManager.prototype.setRootGraph = function (graph) { + if (graph.getGraphManager() != this) { + throw "Root not in this graph mgr!"; + } + + this.rootGraph = graph; + // root graph must have a root node associated with it for convenience + if (graph.parent == null) { + graph.parent = this.layout.newNode("Root node"); + } +}; + +LGraphManager.prototype.getLayout = function () { + return this.layout; +}; + +LGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) { + if (!(firstNode != null && secondNode != null)) { + throw "assert failed"; + } + + if (firstNode == secondNode) { + return true; + } + // Is second node an ancestor of the first one? + var ownerGraph = firstNode.getOwner(); + var parentNode; + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == secondNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + // Is first node an ancestor of the second one? + ownerGraph = secondNode.getOwner(); + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == firstNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + + return false; +}; + +LGraphManager.prototype.calcLowestCommonAncestors = function () { + var edge; + var sourceNode; + var targetNode; + var sourceAncestorGraph; + var targetAncestorGraph; + + var edges = this.getAllEdges(); + var s = edges.length; + for (var i = 0; i < s; i++) { + edge = edges[i]; + + sourceNode = edge.source; + targetNode = edge.target; + edge.lca = null; + edge.sourceInLca = sourceNode; + edge.targetInLca = targetNode; + + if (sourceNode == targetNode) { + edge.lca = sourceNode.getOwner(); + continue; + } + + sourceAncestorGraph = sourceNode.getOwner(); + + while (edge.lca == null) { + edge.targetInLca = targetNode; + targetAncestorGraph = targetNode.getOwner(); + + while (edge.lca == null) { + if (targetAncestorGraph == sourceAncestorGraph) { + edge.lca = targetAncestorGraph; + break; + } + + if (targetAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca != null) { + throw "assert failed"; + } + edge.targetInLca = targetAncestorGraph.getParent(); + targetAncestorGraph = edge.targetInLca.getOwner(); + } + + if (sourceAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca == null) { + edge.sourceInLca = sourceAncestorGraph.getParent(); + sourceAncestorGraph = edge.sourceInLca.getOwner(); + } + } + + if (edge.lca == null) { + throw "assert failed"; + } + } +}; + +LGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) { + if (firstNode == secondNode) { + return firstNode.getOwner(); + } + var firstOwnerGraph = firstNode.getOwner(); + + do { + if (firstOwnerGraph == null) { + break; + } + var secondOwnerGraph = secondNode.getOwner(); + + do { + if (secondOwnerGraph == null) { + break; + } + + if (secondOwnerGraph == firstOwnerGraph) { + return secondOwnerGraph; + } + secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); + } while (true); + + firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); + } while (true); + + return firstOwnerGraph; +}; + +LGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) { + if (graph == null && depth == null) { + graph = this.rootGraph; + depth = 1; + } + var node; + + var nodes = graph.getNodes(); + var s = nodes.length; + for (var i = 0; i < s; i++) { + node = nodes[i]; + node.inclusionTreeDepth = depth; + + if (node.child != null) { + this.calcInclusionTreeDepths(node.child, depth + 1); + } + } +}; + +LGraphManager.prototype.includesInvalidEdge = function () { + var edge; + + var s = this.edges.length; + for (var i = 0; i < s; i++) { + edge = this.edges[i]; + + if (this.isOneAncestorOfOther(edge.source, edge.target)) { + return true; + } + } + return false; +}; + +module.exports = LGraphManager; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_38707__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_38707__(0); + +function FDLayoutConstants() {} + +//FDLayoutConstants inherits static props in LayoutConstants +for (var prop in LayoutConstants) { + FDLayoutConstants[prop] = LayoutConstants[prop]; +} + +FDLayoutConstants.MAX_ITERATIONS = 2500; + +FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; +FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; +FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0; +FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0; +FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; +FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; +FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; +FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; +FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; +FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000; +FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000; +FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0; +FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; +FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0; +FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; +FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; +FDLayoutConstants.MIN_EDGE_LENGTH = 1; +FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; + +module.exports = FDLayoutConstants; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __nested_webpack_require_40298__) { + +"use strict"; + + +/** + * This class maintains a list of static geometry related utility methods. + * + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var Point = __nested_webpack_require_40298__(12); + +function IGeometry() {} + +/** + * This method calculates *half* the amount in x and y directions of the two + * input rectangles needed to separate them keeping their respective + * positioning, and returns the result in the input array. An input + * separation buffer added to the amount in both directions. We assume that + * the two rectangles do intersect. + */ +IGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) { + if (!rectA.intersects(rectB)) { + throw "assert failed"; + } + + var directions = new Array(2); + + this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); + + overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); + overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); + + // update the overlapping amounts for the following cases: + if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { + /* Case x.1: + * + * rectA + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectB + */ + overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); + } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { + /* Case x.2: + * + * rectB + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectA + */ + overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); + } + if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { + /* Case y.1: + * ________ rectA + * | + * | + * ______|____ rectB + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); + } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { + /* Case y.2: + * ________ rectB + * | + * | + * ______|____ rectA + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); + } + + // find slope of the line passes two centers + var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); + // if centers are overlapped + if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { + // assume the slope is 1 (45 degree) + slope = 1.0; + } + + var moveByY = slope * overlapAmount[0]; + var moveByX = overlapAmount[1] / slope; + if (overlapAmount[0] < moveByX) { + moveByX = overlapAmount[0]; + } else { + moveByY = overlapAmount[1]; + } + // return half the amount so that if each rectangle is moved by these + // amounts in opposite directions, overlap will be resolved + overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); + overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); +}; + +/** + * This method decides the separation direction of overlapping nodes + * + * if directions[0] = -1, then rectA goes left + * if directions[0] = 1, then rectA goes right + * if directions[1] = -1, then rectA goes up + * if directions[1] = 1, then rectA goes down + */ +IGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) { + if (rectA.getCenterX() < rectB.getCenterX()) { + directions[0] = -1; + } else { + directions[0] = 1; + } + + if (rectA.getCenterY() < rectB.getCenterY()) { + directions[1] = -1; + } else { + directions[1] = 1; + } +}; + +/** + * This method calculates the intersection (clipping) points of the two + * input rectangles with line segment defined by the centers of these two + * rectangles. The clipping points are saved in the input double array and + * whether or not the two rectangles overlap is returned. + */ +IGeometry.getIntersection2 = function (rectA, rectB, result) { + //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB + var p1x = rectA.getCenterX(); + var p1y = rectA.getCenterY(); + var p2x = rectB.getCenterX(); + var p2y = rectB.getCenterY(); + + //if two rectangles intersect, then clipping points are centers + if (rectA.intersects(rectB)) { + result[0] = p1x; + result[1] = p1y; + result[2] = p2x; + result[3] = p2y; + return true; + } + //variables for rectA + var topLeftAx = rectA.getX(); + var topLeftAy = rectA.getY(); + var topRightAx = rectA.getRight(); + var bottomLeftAx = rectA.getX(); + var bottomLeftAy = rectA.getBottom(); + var bottomRightAx = rectA.getRight(); + var halfWidthA = rectA.getWidthHalf(); + var halfHeightA = rectA.getHeightHalf(); + //variables for rectB + var topLeftBx = rectB.getX(); + var topLeftBy = rectB.getY(); + var topRightBx = rectB.getRight(); + var bottomLeftBx = rectB.getX(); + var bottomLeftBy = rectB.getBottom(); + var bottomRightBx = rectB.getRight(); + var halfWidthB = rectB.getWidthHalf(); + var halfHeightB = rectB.getHeightHalf(); + + //flag whether clipping points are found + var clipPointAFound = false; + var clipPointBFound = false; + + // line is vertical + if (p1x === p2x) { + if (p1y > p2y) { + result[0] = p1x; + result[1] = topLeftAy; + result[2] = p2x; + result[3] = bottomLeftBy; + return false; + } else if (p1y < p2y) { + result[0] = p1x; + result[1] = bottomLeftAy; + result[2] = p2x; + result[3] = topLeftBy; + return false; + } else { + //not line, return null; + } + } + // line is horizontal + else if (p1y === p2y) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = p1y; + result[2] = topRightBx; + result[3] = p2y; + return false; + } else if (p1x < p2x) { + result[0] = topRightAx; + result[1] = p1y; + result[2] = topLeftBx; + result[3] = p2y; + return false; + } else { + //not valid line, return null; + } + } else { + //slopes of rectA's and rectB's diagonals + var slopeA = rectA.height / rectA.width; + var slopeB = rectB.height / rectB.width; + + //slope of line between center of rectA and center of rectB + var slopePrime = (p2y - p1y) / (p2x - p1x); + var cardinalDirectionA = void 0; + var cardinalDirectionB = void 0; + var tempPointAx = void 0; + var tempPointAy = void 0; + var tempPointBx = void 0; + var tempPointBy = void 0; + + //determine whether clipping point is the corner of nodeA + if (-slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = bottomLeftAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } else { + result[0] = topRightAx; + result[1] = topLeftAy; + clipPointAFound = true; + } + } else if (slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = topLeftAy; + clipPointAFound = true; + } else { + result[0] = bottomRightAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } + } + + //determine whether clipping point is the corner of nodeB + if (-slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = bottomLeftBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } else { + result[2] = topRightBx; + result[3] = topLeftBy; + clipPointBFound = true; + } + } else if (slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = topLeftBx; + result[3] = topLeftBy; + clipPointBFound = true; + } else { + result[2] = bottomRightBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } + } + + //if both clipping points are corners + if (clipPointAFound && clipPointBFound) { + return false; + } + + //determine Cardinal Direction of rectangles + if (p1x > p2x) { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); + } else { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); + } + } else { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); + } else { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); + } + } + //calculate clipping Point if it is not found before + if (!clipPointAFound) { + switch (cardinalDirectionA) { + case 1: + tempPointAy = topLeftAy; + tempPointAx = p1x + -halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 2: + tempPointAx = bottomRightAx; + tempPointAy = p1y + halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 3: + tempPointAy = bottomLeftAy; + tempPointAx = p1x + halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 4: + tempPointAx = bottomLeftAx; + tempPointAy = p1y + -halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + } + } + if (!clipPointBFound) { + switch (cardinalDirectionB) { + case 1: + tempPointBy = topLeftBy; + tempPointBx = p2x + -halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 2: + tempPointBx = bottomRightBx; + tempPointBy = p2y + halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 3: + tempPointBy = bottomLeftBy; + tempPointBx = p2x + halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 4: + tempPointBx = bottomLeftBx; + tempPointBy = p2y + -halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + } + } + } + return false; +}; + +/** + * This method returns in which cardinal direction does input point stays + * 1: North + * 2: East + * 3: South + * 4: West + */ +IGeometry.getCardinalDirection = function (slope, slopePrime, line) { + if (slope > slopePrime) { + return line; + } else { + return 1 + line % 4; + } +}; + +/** + * This method calculates the intersection of the two lines defined by + * point pairs (s1,s2) and (f1,f2). + */ +IGeometry.getIntersection = function (s1, s2, f1, f2) { + if (f2 == null) { + return this.getIntersection2(s1, s2, f1); + } + + var x1 = s1.x; + var y1 = s1.y; + var x2 = s2.x; + var y2 = s2.y; + var x3 = f1.x; + var y3 = f1.y; + var x4 = f2.x; + var y4 = f2.y; + var x = void 0, + y = void 0; // intersection point + var a1 = void 0, + a2 = void 0, + b1 = void 0, + b2 = void 0, + c1 = void 0, + c2 = void 0; // coefficients of line eqns. + var denom = void 0; + + a1 = y2 - y1; + b1 = x1 - x2; + c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 } + + a2 = y4 - y3; + b2 = x3 - x4; + c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 } + + denom = a1 * b2 - a2 * b1; + + if (denom === 0) { + return null; + } + + x = (b1 * c2 - b2 * c1) / denom; + y = (a2 * c1 - a1 * c2) / denom; + + return new Point(x, y); +}; + +/** + * This method finds and returns the angle of the vector from the + x-axis + * in clockwise direction (compatible w/ Java coordinate system!). + */ +IGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) { + var C_angle = void 0; + + if (Cx !== Nx) { + C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); + + if (Nx < Cx) { + C_angle += Math.PI; + } else if (Ny < Cy) { + C_angle += this.TWO_PI; + } + } else if (Ny < Cy) { + C_angle = this.ONE_AND_HALF_PI; // 270 degrees + } else { + C_angle = this.HALF_PI; // 90 degrees + } + + return C_angle; +}; + +/** + * This method checks whether the given two line segments (one with point + * p1 and p2, the other with point p3 and p4) intersect at a point other + * than these points. + */ +IGeometry.doIntersect = function (p1, p2, p3, p4) { + var a = p1.x; + var b = p1.y; + var c = p2.x; + var d = p2.y; + var p = p3.x; + var q = p3.y; + var r = p4.x; + var s = p4.y; + var det = (c - a) * (s - q) - (r - p) * (d - b); + + if (det === 0) { + return false; + } else { + var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det; + var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det; + return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1; + } +}; + +// ----------------------------------------------------------------------------- +// Section: Class Constants +// ----------------------------------------------------------------------------- +/** + * Some useful pre-calculated constants + */ +IGeometry.HALF_PI = 0.5 * Math.PI; +IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; +IGeometry.TWO_PI = 2.0 * Math.PI; +IGeometry.THREE_PI = 3.0 * Math.PI; + +module.exports = IGeometry; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function IMath() {} + +/** + * This method returns the sign of the input value. + */ +IMath.sign = function (value) { + if (value > 0) { + return 1; + } else if (value < 0) { + return -1; + } else { + return 0; + } +}; + +IMath.floor = function (value) { + return value < 0 ? Math.ceil(value) : Math.floor(value); +}; + +IMath.ceil = function (value) { + return value < 0 ? Math.floor(value) : Math.ceil(value); +}; + +module.exports = IMath; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Integer() {} + +Integer.MAX_VALUE = 2147483647; +Integer.MIN_VALUE = -2147483648; + +module.exports = Integer; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var nodeFrom = function nodeFrom(value) { + return { value: value, next: null, prev: null }; +}; + +var add = function add(prev, node, next, list) { + if (prev !== null) { + prev.next = node; + } else { + list.head = node; + } + + if (next !== null) { + next.prev = node; + } else { + list.tail = node; + } + + node.prev = prev; + node.next = next; + + list.length++; + + return node; +}; + +var _remove = function _remove(node, list) { + var prev = node.prev, + next = node.next; + + + if (prev !== null) { + prev.next = next; + } else { + list.head = next; + } + + if (next !== null) { + next.prev = prev; + } else { + list.tail = prev; + } + + node.prev = node.next = null; + + list.length--; + + return node; +}; + +var LinkedList = function () { + function LinkedList(vals) { + var _this = this; + + _classCallCheck(this, LinkedList); + + this.length = 0; + this.head = null; + this.tail = null; + + if (vals != null) { + vals.forEach(function (v) { + return _this.push(v); + }); + } + } + + _createClass(LinkedList, [{ + key: "size", + value: function size() { + return this.length; + } + }, { + key: "insertBefore", + value: function insertBefore(val, otherNode) { + return add(otherNode.prev, nodeFrom(val), otherNode, this); + } + }, { + key: "insertAfter", + value: function insertAfter(val, otherNode) { + return add(otherNode, nodeFrom(val), otherNode.next, this); + } + }, { + key: "insertNodeBefore", + value: function insertNodeBefore(newNode, otherNode) { + return add(otherNode.prev, newNode, otherNode, this); + } + }, { + key: "insertNodeAfter", + value: function insertNodeAfter(newNode, otherNode) { + return add(otherNode, newNode, otherNode.next, this); + } + }, { + key: "push", + value: function push(val) { + return add(this.tail, nodeFrom(val), null, this); + } + }, { + key: "unshift", + value: function unshift(val) { + return add(null, nodeFrom(val), this.head, this); + } + }, { + key: "remove", + value: function remove(node) { + return _remove(node, this); + } + }, { + key: "pop", + value: function pop() { + return _remove(this.tail, this).value; + } + }, { + key: "popNode", + value: function popNode() { + return _remove(this.tail, this); + } + }, { + key: "shift", + value: function shift() { + return _remove(this.head, this).value; + } + }, { + key: "shiftNode", + value: function shiftNode() { + return _remove(this.head, this); + } + }, { + key: "get_object_at", + value: function get_object_at(index) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + return current.value; + } + } + }, { + key: "set_object_at", + value: function set_object_at(index, value) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + current.value = value; + } + } + }]); + + return LinkedList; +}(); + +module.exports = LinkedList; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* + *This class is the javascript implementation of the Point.java class in jdk + */ +function Point(x, y, p) { + this.x = null; + this.y = null; + if (x == null && y == null && p == null) { + this.x = 0; + this.y = 0; + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + this.x = x; + this.y = y; + } else if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.x = p.x; + this.y = p.y; + } +} + +Point.prototype.getX = function () { + return this.x; +}; + +Point.prototype.getY = function () { + return this.y; +}; + +Point.prototype.getLocation = function () { + return new Point(this.x, this.y); +}; + +Point.prototype.setLocation = function (x, y, p) { + if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.setLocation(p.x, p.y); + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + //if both parameters are integer just move (x,y) location + if (parseInt(x) == x && parseInt(y) == y) { + this.move(x, y); + } else { + this.x = Math.floor(x + 0.5); + this.y = Math.floor(y + 0.5); + } + } +}; + +Point.prototype.move = function (x, y) { + this.x = x; + this.y = y; +}; + +Point.prototype.translate = function (dx, dy) { + this.x += dx; + this.y += dy; +}; + +Point.prototype.equals = function (obj) { + if (obj.constructor.name == "Point") { + var pt = obj; + return this.x == pt.x && this.y == pt.y; + } + return this == obj; +}; + +Point.prototype.toString = function () { + return new Point().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; +}; + +module.exports = Point; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RectangleD(x, y, width, height) { + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + + if (x != null && y != null && width != null && height != null) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } +} + +RectangleD.prototype.getX = function () { + return this.x; +}; + +RectangleD.prototype.setX = function (x) { + this.x = x; +}; + +RectangleD.prototype.getY = function () { + return this.y; +}; + +RectangleD.prototype.setY = function (y) { + this.y = y; +}; + +RectangleD.prototype.getWidth = function () { + return this.width; +}; + +RectangleD.prototype.setWidth = function (width) { + this.width = width; +}; + +RectangleD.prototype.getHeight = function () { + return this.height; +}; + +RectangleD.prototype.setHeight = function (height) { + this.height = height; +}; + +RectangleD.prototype.getRight = function () { + return this.x + this.width; +}; + +RectangleD.prototype.getBottom = function () { + return this.y + this.height; +}; + +RectangleD.prototype.intersects = function (a) { + if (this.getRight() < a.x) { + return false; + } + + if (this.getBottom() < a.y) { + return false; + } + + if (a.getRight() < this.x) { + return false; + } + + if (a.getBottom() < this.y) { + return false; + } + + return true; +}; + +RectangleD.prototype.getCenterX = function () { + return this.x + this.width / 2; +}; + +RectangleD.prototype.getMinX = function () { + return this.getX(); +}; + +RectangleD.prototype.getMaxX = function () { + return this.getX() + this.width; +}; + +RectangleD.prototype.getCenterY = function () { + return this.y + this.height / 2; +}; + +RectangleD.prototype.getMinY = function () { + return this.getY(); +}; + +RectangleD.prototype.getMaxY = function () { + return this.getY() + this.height; +}; + +RectangleD.prototype.getWidthHalf = function () { + return this.width / 2; +}; + +RectangleD.prototype.getHeightHalf = function () { + return this.height / 2; +}; + +module.exports = RectangleD; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _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; }; + +function UniqueIDGeneretor() {} + +UniqueIDGeneretor.lastID = 0; + +UniqueIDGeneretor.createID = function (obj) { + if (UniqueIDGeneretor.isPrimitive(obj)) { + return obj; + } + if (obj.uniqueID != null) { + return obj.uniqueID; + } + obj.uniqueID = UniqueIDGeneretor.getString(); + UniqueIDGeneretor.lastID++; + return obj.uniqueID; +}; + +UniqueIDGeneretor.getString = function (id) { + if (id == null) id = UniqueIDGeneretor.lastID; + return "Object#" + id + ""; +}; + +UniqueIDGeneretor.isPrimitive = function (arg) { + var type = typeof arg === "undefined" ? "undefined" : _typeof(arg); + return arg == null || type != "object" && type != "function"; +}; + +module.exports = UniqueIDGeneretor; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __nested_webpack_require_64072__) { + +"use strict"; + + +function _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); } } + +var LayoutConstants = __nested_webpack_require_64072__(0); +var LGraphManager = __nested_webpack_require_64072__(6); +var LNode = __nested_webpack_require_64072__(3); +var LEdge = __nested_webpack_require_64072__(1); +var LGraph = __nested_webpack_require_64072__(5); +var PointD = __nested_webpack_require_64072__(4); +var Transform = __nested_webpack_require_64072__(17); +var Emitter = __nested_webpack_require_64072__(27); + +function Layout(isRemoteUse) { + Emitter.call(this); + + //Layout Quality: 0:draft, 1:default, 2:proof + this.layoutQuality = LayoutConstants.QUALITY; + //Whether layout should create bendpoints as needed or not + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + //Whether layout should be incremental or not + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + //Whether we animate from before to after layout node positions + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + //Whether we animate the layout process or not + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + //Number iterations that should be done between two successive animations + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + /** + * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When + * they are, both spring and repulsion forces between two leaf nodes can be + * calculated without the expensive clipping point calculations, resulting + * in major speed-up. + */ + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + /** + * This is used for creation of bendpoints by using dummy nodes and edges. + * Maps an LEdge to its dummy bendpoint path. + */ + this.edgeToDummyNodes = new Map(); + this.graphManager = new LGraphManager(this); + this.isLayoutFinished = false; + this.isSubLayout = false; + this.isRemoteUse = false; + + if (isRemoteUse != null) { + this.isRemoteUse = isRemoteUse; + } +} + +Layout.RANDOM_SEED = 1; + +Layout.prototype = Object.create(Emitter.prototype); + +Layout.prototype.getGraphManager = function () { + return this.graphManager; +}; + +Layout.prototype.getAllNodes = function () { + return this.graphManager.getAllNodes(); +}; + +Layout.prototype.getAllEdges = function () { + return this.graphManager.getAllEdges(); +}; + +Layout.prototype.getAllNodesToApplyGravitation = function () { + return this.graphManager.getAllNodesToApplyGravitation(); +}; + +Layout.prototype.newGraphManager = function () { + var gm = new LGraphManager(this); + this.graphManager = gm; + return gm; +}; + +Layout.prototype.newGraph = function (vGraph) { + return new LGraph(null, this.graphManager, vGraph); +}; + +Layout.prototype.newNode = function (vNode) { + return new LNode(this.graphManager, vNode); +}; + +Layout.prototype.newEdge = function (vEdge) { + return new LEdge(null, null, vEdge); +}; + +Layout.prototype.checkLayoutSuccess = function () { + return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); +}; + +Layout.prototype.runLayout = function () { + this.isLayoutFinished = false; + + if (this.tilingPreLayout) { + this.tilingPreLayout(); + } + + this.initParameters(); + var isLayoutSuccessfull; + + if (this.checkLayoutSuccess()) { + isLayoutSuccessfull = false; + } else { + isLayoutSuccessfull = this.layout(); + } + + if (LayoutConstants.ANIMATE === 'during') { + // If this is a 'during' layout animation. Layout is not finished yet. + // We need to perform these in index.js when layout is really finished. + return false; + } + + if (isLayoutSuccessfull) { + if (!this.isSubLayout) { + this.doPostLayout(); + } + } + + if (this.tilingPostLayout) { + this.tilingPostLayout(); + } + + this.isLayoutFinished = true; + + return isLayoutSuccessfull; +}; + +/** + * This method performs the operations required after layout. + */ +Layout.prototype.doPostLayout = function () { + //assert !isSubLayout : "Should not be called on sub-layout!"; + // Propagate geometric changes to v-level objects + if (!this.incremental) { + this.transform(); + } + this.update(); +}; + +/** + * This method updates the geometry of the target graph according to + * calculated layout. + */ +Layout.prototype.update2 = function () { + // update bend points + if (this.createBendsAsNeeded) { + this.createBendpointsFromDummyNodes(); + + // reset all edges, since the topology has changed + this.graphManager.resetAllEdges(); + } + + // perform edge, node and root updates if layout is not called + // remotely + if (!this.isRemoteUse) { + // update all edges + var edge; + var allEdges = this.graphManager.getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + // this.update(edge); + } + + // recursively update nodes + var node; + var nodes = this.graphManager.getRoot().getNodes(); + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + // this.update(node); + } + + // update root graph + this.update(this.graphManager.getRoot()); + } +}; + +Layout.prototype.update = function (obj) { + if (obj == null) { + this.update2(); + } else if (obj instanceof LNode) { + var node = obj; + if (node.getChild() != null) { + // since node is compound, recursively update child nodes + var nodes = node.getChild().getNodes(); + for (var i = 0; i < nodes.length; i++) { + update(nodes[i]); + } + } + + // if the l-level node is associated with a v-level graph object, + // then it is assumed that the v-level node implements the + // interface Updatable. + if (node.vGraphObject != null) { + // cast to Updatable without any type check + var vNode = node.vGraphObject; + + // call the update method of the interface + vNode.update(node); + } + } else if (obj instanceof LEdge) { + var edge = obj; + // if the l-level edge is associated with a v-level graph object, + // then it is assumed that the v-level edge implements the + // interface Updatable. + + if (edge.vGraphObject != null) { + // cast to Updatable without any type check + var vEdge = edge.vGraphObject; + + // call the update method of the interface + vEdge.update(edge); + } + } else if (obj instanceof LGraph) { + var graph = obj; + // if the l-level graph is associated with a v-level graph object, + // then it is assumed that the v-level object implements the + // interface Updatable. + + if (graph.vGraphObject != null) { + // cast to Updatable without any type check + var vGraph = graph.vGraphObject; + + // call the update method of the interface + vGraph.update(graph); + } + } +}; + +/** + * This method is used to set all layout parameters to default values + * determined at compile time. + */ +Layout.prototype.initParameters = function () { + if (!this.isSubLayout) { + this.layoutQuality = LayoutConstants.QUALITY; + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + } + + if (this.animationDuringLayout) { + this.animationOnLayout = false; + } +}; + +Layout.prototype.transform = function (newLeftTop) { + if (newLeftTop == undefined) { + this.transform(new PointD(0, 0)); + } else { + // create a transformation object (from Eclipse to layout). When an + // inverse transform is applied, we get upper-left coordinate of the + // drawing or the root graph at given input coordinate (some margins + // already included in calculation of left-top). + + var trans = new Transform(); + var leftTop = this.graphManager.getRoot().updateLeftTop(); + + if (leftTop != null) { + trans.setWorldOrgX(newLeftTop.x); + trans.setWorldOrgY(newLeftTop.y); + + trans.setDeviceOrgX(leftTop.x); + trans.setDeviceOrgY(leftTop.y); + + var nodes = this.getAllNodes(); + var node; + + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + node.transform(trans); + } + } + } +}; + +Layout.prototype.positionNodesRandomly = function (graph) { + + if (graph == undefined) { + //assert !this.incremental; + this.positionNodesRandomly(this.getGraphManager().getRoot()); + this.getGraphManager().getRoot().updateBounds(true); + } else { + var lNode; + var childGraph; + + var nodes = graph.getNodes(); + for (var i = 0; i < nodes.length; i++) { + lNode = nodes[i]; + childGraph = lNode.getChild(); + + if (childGraph == null) { + lNode.scatter(); + } else if (childGraph.getNodes().length == 0) { + lNode.scatter(); + } else { + this.positionNodesRandomly(childGraph); + lNode.updateBounds(); + } + } + } +}; + +/** + * This method returns a list of trees where each tree is represented as a + * list of l-nodes. The method returns a list of size 0 when: + * - The graph is not flat or + * - One of the component(s) of the graph is not a tree. + */ +Layout.prototype.getFlatForest = function () { + var flatForest = []; + var isForest = true; + + // Quick reference for all nodes in the graph manager associated with + // this layout. The list should not be changed. + var allNodes = this.graphManager.getRoot().getNodes(); + + // First be sure that the graph is flat + var isFlat = true; + + for (var i = 0; i < allNodes.length; i++) { + if (allNodes[i].getChild() != null) { + isFlat = false; + } + } + + // Return empty forest if the graph is not flat. + if (!isFlat) { + return flatForest; + } + + // Run BFS for each component of the graph. + + var visited = new Set(); + var toBeVisited = []; + var parents = new Map(); + var unProcessedNodes = []; + + unProcessedNodes = unProcessedNodes.concat(allNodes); + + // Each iteration of this loop finds a component of the graph and + // decides whether it is a tree or not. If it is a tree, adds it to the + // forest and continued with the next component. + + while (unProcessedNodes.length > 0 && isForest) { + toBeVisited.push(unProcessedNodes[0]); + + // Start the BFS. Each iteration of this loop visits a node in a + // BFS manner. + while (toBeVisited.length > 0 && isForest) { + //pool operation + var currentNode = toBeVisited[0]; + toBeVisited.splice(0, 1); + visited.add(currentNode); + + // Traverse all neighbors of this node + var neighborEdges = currentNode.getEdges(); + + for (var i = 0; i < neighborEdges.length; i++) { + var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode); + + // If BFS is not growing from this neighbor. + if (parents.get(currentNode) != currentNeighbor) { + // We haven't previously visited this neighbor. + if (!visited.has(currentNeighbor)) { + toBeVisited.push(currentNeighbor); + parents.set(currentNeighbor, currentNode); + } + // Since we have previously visited this neighbor and + // this neighbor is not parent of currentNode, given + // graph contains a component that is not tree, hence + // it is not a forest. + else { + isForest = false; + break; + } + } + } + } + + // The graph contains a component that is not a tree. Empty + // previously found trees. The method will end. + if (!isForest) { + flatForest = []; + } + // Save currently visited nodes as a tree in our forest. Reset + // visited and parents lists. Continue with the next component of + // the graph, if any. + else { + var temp = [].concat(_toConsumableArray(visited)); + flatForest.push(temp); + //flatForest = flatForest.concat(temp); + //unProcessedNodes.removeAll(visited); + for (var i = 0; i < temp.length; i++) { + var value = temp[i]; + var index = unProcessedNodes.indexOf(value); + if (index > -1) { + unProcessedNodes.splice(index, 1); + } + } + visited = new Set(); + parents = new Map(); + } + } + + return flatForest; +}; + +/** + * This method creates dummy nodes (an l-level node with minimal dimensions) + * for the given edge (one per bendpoint). The existing l-level structure + * is updated accordingly. + */ +Layout.prototype.createDummyNodesForBendpoints = function (edge) { + var dummyNodes = []; + var prev = edge.source; + + var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); + + for (var i = 0; i < edge.bendpoints.length; i++) { + // create new dummy node + var dummyNode = this.newNode(null); + dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); + + graph.add(dummyNode); + + // create new dummy edge between prev and dummy node + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, dummyNode); + + dummyNodes.add(dummyNode); + prev = dummyNode; + } + + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, edge.target); + + this.edgeToDummyNodes.set(edge, dummyNodes); + + // remove real edge from graph manager if it is inter-graph + if (edge.isInterGraph()) { + this.graphManager.remove(edge); + } + // else, remove the edge from the current graph + else { + graph.remove(edge); + } + + return dummyNodes; +}; + +/** + * This method creates bendpoints for edges from the dummy nodes + * at l-level. + */ +Layout.prototype.createBendpointsFromDummyNodes = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges); + + for (var k = 0; k < edges.length; k++) { + var lEdge = edges[k]; + + if (lEdge.bendpoints.length > 0) { + var path = this.edgeToDummyNodes.get(lEdge); + + for (var i = 0; i < path.length; i++) { + var dummyNode = path[i]; + var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); + + // update bendpoint's location according to dummy node + var ebp = lEdge.bendpoints.get(i); + ebp.x = p.x; + ebp.y = p.y; + + // remove the dummy node, dummy edges incident with this + // dummy node is also removed (within the remove method) + dummyNode.getOwner().remove(dummyNode); + } + + // add the real edge to graph + this.graphManager.add(lEdge, lEdge.source, lEdge.target); + } + } +}; + +Layout.transform = function (sliderValue, defaultValue, minDiv, maxMul) { + if (minDiv != undefined && maxMul != undefined) { + var value = defaultValue; + + if (sliderValue <= 50) { + var minValue = defaultValue / minDiv; + value -= (defaultValue - minValue) / 50 * (50 - sliderValue); + } else { + var maxValue = defaultValue * maxMul; + value += (maxValue - defaultValue) / 50 * (sliderValue - 50); + } + + return value; + } else { + var a, b; + + if (sliderValue <= 50) { + a = 9.0 * defaultValue / 500.0; + b = defaultValue / 10.0; + } else { + a = 9.0 * defaultValue / 50.0; + b = -8 * defaultValue; + } + + return a * sliderValue + b; + } +}; + +/** + * This method finds and returns the center of the given nodes, assuming + * that the given nodes form a tree in themselves. + */ +Layout.findCenterOfTree = function (nodes) { + var list = []; + list = list.concat(nodes); + + var removedNodes = []; + var remainingDegrees = new Map(); + var foundCenter = false; + var centerNode = null; + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + var degree = node.getNeighborsList().size; + remainingDegrees.set(node, node.getNeighborsList().size); + + if (degree == 1) { + removedNodes.push(node); + } + } + + var tempList = []; + tempList = tempList.concat(removedNodes); + + while (!foundCenter) { + var tempList2 = []; + tempList2 = tempList2.concat(tempList); + tempList = []; + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + + var index = list.indexOf(node); + if (index >= 0) { + list.splice(index, 1); + } + + var neighbours = node.getNeighborsList(); + + neighbours.forEach(function (neighbour) { + if (removedNodes.indexOf(neighbour) < 0) { + var otherDegree = remainingDegrees.get(neighbour); + var newDegree = otherDegree - 1; + + if (newDegree == 1) { + tempList.push(neighbour); + } + + remainingDegrees.set(neighbour, newDegree); + } + }); + } + + removedNodes = removedNodes.concat(tempList); + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + } + + return centerNode; +}; + +/** + * During the coarsening process, this layout may be referenced by two graph managers + * this setter function grants access to change the currently being used graph manager + */ +Layout.prototype.setGraphManager = function (gm) { + this.graphManager = gm; +}; + +module.exports = Layout; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RandomSeed() {} +// adapted from: https://stackoverflow.com/a/19303725 +RandomSeed.seed = 1; +RandomSeed.x = 0; + +RandomSeed.nextDouble = function () { + RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000; + return RandomSeed.x - Math.floor(RandomSeed.x); +}; + +module.exports = RandomSeed; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __nested_webpack_require_81860__) { + +"use strict"; + + +var PointD = __nested_webpack_require_81860__(4); + +function Transform(x, y) { + this.lworldOrgX = 0.0; + this.lworldOrgY = 0.0; + this.ldeviceOrgX = 0.0; + this.ldeviceOrgY = 0.0; + this.lworldExtX = 1.0; + this.lworldExtY = 1.0; + this.ldeviceExtX = 1.0; + this.ldeviceExtY = 1.0; +} + +Transform.prototype.getWorldOrgX = function () { + return this.lworldOrgX; +}; + +Transform.prototype.setWorldOrgX = function (wox) { + this.lworldOrgX = wox; +}; + +Transform.prototype.getWorldOrgY = function () { + return this.lworldOrgY; +}; + +Transform.prototype.setWorldOrgY = function (woy) { + this.lworldOrgY = woy; +}; + +Transform.prototype.getWorldExtX = function () { + return this.lworldExtX; +}; + +Transform.prototype.setWorldExtX = function (wex) { + this.lworldExtX = wex; +}; + +Transform.prototype.getWorldExtY = function () { + return this.lworldExtY; +}; + +Transform.prototype.setWorldExtY = function (wey) { + this.lworldExtY = wey; +}; + +/* Device related */ + +Transform.prototype.getDeviceOrgX = function () { + return this.ldeviceOrgX; +}; + +Transform.prototype.setDeviceOrgX = function (dox) { + this.ldeviceOrgX = dox; +}; + +Transform.prototype.getDeviceOrgY = function () { + return this.ldeviceOrgY; +}; + +Transform.prototype.setDeviceOrgY = function (doy) { + this.ldeviceOrgY = doy; +}; + +Transform.prototype.getDeviceExtX = function () { + return this.ldeviceExtX; +}; + +Transform.prototype.setDeviceExtX = function (dex) { + this.ldeviceExtX = dex; +}; + +Transform.prototype.getDeviceExtY = function () { + return this.ldeviceExtY; +}; + +Transform.prototype.setDeviceExtY = function (dey) { + this.ldeviceExtY = dey; +}; + +Transform.prototype.transformX = function (x) { + var xDevice = 0.0; + var worldExtX = this.lworldExtX; + if (worldExtX != 0.0) { + xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX; + } + + return xDevice; +}; + +Transform.prototype.transformY = function (y) { + var yDevice = 0.0; + var worldExtY = this.lworldExtY; + if (worldExtY != 0.0) { + yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY; + } + + return yDevice; +}; + +Transform.prototype.inverseTransformX = function (x) { + var xWorld = 0.0; + var deviceExtX = this.ldeviceExtX; + if (deviceExtX != 0.0) { + xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; + } + + return xWorld; +}; + +Transform.prototype.inverseTransformY = function (y) { + var yWorld = 0.0; + var deviceExtY = this.ldeviceExtY; + if (deviceExtY != 0.0) { + yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; + } + return yWorld; +}; + +Transform.prototype.inverseTransformPoint = function (inPoint) { + var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); + return outPoint; +}; + +module.exports = Transform; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __nested_webpack_require_84747__) { + +"use strict"; + + +function _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); } } + +var Layout = __nested_webpack_require_84747__(15); +var FDLayoutConstants = __nested_webpack_require_84747__(7); +var LayoutConstants = __nested_webpack_require_84747__(0); +var IGeometry = __nested_webpack_require_84747__(8); +var IMath = __nested_webpack_require_84747__(9); + +function FDLayout() { + Layout.call(this); + + this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.totalDisplacement = 0.0; + this.oldTotalDisplacement = 0.0; + this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; +} + +FDLayout.prototype = Object.create(Layout.prototype); + +for (var prop in Layout) { + FDLayout[prop] = Layout[prop]; +} + +FDLayout.prototype.initParameters = function () { + Layout.prototype.initParameters.call(this, arguments); + + this.totalIterations = 0; + this.notAnimatedIterations = 0; + + this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; + + this.grid = []; +}; + +FDLayout.prototype.calcIdealEdgeLengths = function () { + var edge; + var lcaDepth; + var source; + var target; + var sizeOfSourceInLca; + var sizeOfTargetInLca; + + var allEdges = this.getGraphManager().getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + + edge.idealLength = this.idealEdgeLength; + + if (edge.isInterGraph) { + source = edge.getSource(); + target = edge.getTarget(); + + sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); + sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); + + if (this.useSmartIdealEdgeLengthCalculation) { + edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; + } + + lcaDepth = edge.getLca().getInclusionTreeDepth(); + + edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); + } + } +}; + +FDLayout.prototype.initSpringEmbedder = function () { + + var s = this.getAllNodes().length; + if (this.incremental) { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; + } else { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } else { + this.coolingFactor = 1.0; + } + this.initialCoolingFactor = this.coolingFactor; + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; + } + + this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); + + this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; + + this.repulsionRange = this.calcRepulsionRange(); +}; + +FDLayout.prototype.calcSpringForces = function () { + var lEdges = this.getAllEdges(); + var edge; + + for (var i = 0; i < lEdges.length; i++) { + edge = lEdges[i]; + + this.calcSpringForce(edge, edge.idealLength); + } +}; + +FDLayout.prototype.calcRepulsionForces = function () { + var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var i, j; + var nodeA, nodeB; + var lNodes = this.getAllNodes(); + var processedNodeSet; + + if (this.useFRGridVariant) { + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { + this.updateGrid(); + } + + processedNodeSet = new Set(); + + // calculate repulsion forces between each nodes and its surrounding + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); + processedNodeSet.add(nodeA); + } + } else { + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + + for (j = i + 1; j < lNodes.length; j++) { + nodeB = lNodes[j]; + + // If both nodes are not members of the same graph, skip. + if (nodeA.getOwner() != nodeB.getOwner()) { + continue; + } + + this.calcRepulsionForce(nodeA, nodeB); + } + } + } +}; + +FDLayout.prototype.calcGravitationalForces = function () { + var node; + var lNodes = this.getAllNodesToApplyGravitation(); + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + this.calcGravitationalForce(node); + } +}; + +FDLayout.prototype.moveNodes = function () { + var lNodes = this.getAllNodes(); + var node; + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + node.move(); + } +}; + +FDLayout.prototype.calcSpringForce = function (edge, idealLength) { + var sourceNode = edge.getSource(); + var targetNode = edge.getTarget(); + + var length; + var springForce; + var springForceX; + var springForceY; + + // Update edge length + if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { + edge.updateLengthSimple(); + } else { + edge.updateLength(); + + if (edge.isOverlapingSourceAndTarget) { + return; + } + } + + length = edge.getLength(); + + if (length == 0) return; + + // Calculate spring forces + springForce = this.springConstant * (length - idealLength); + + // Project force onto x and y axes + springForceX = springForce * (edge.lengthX / length); + springForceY = springForce * (edge.lengthY / length); + + // Apply forces on the end nodes + sourceNode.springForceX += springForceX; + sourceNode.springForceY += springForceY; + targetNode.springForceX -= springForceX; + targetNode.springForceY -= springForceY; +}; + +FDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) { + var rectA = nodeA.getRect(); + var rectB = nodeB.getRect(); + var overlapAmount = new Array(2); + var clipPoints = new Array(4); + var distanceX; + var distanceY; + var distanceSquared; + var distance; + var repulsionForce; + var repulsionForceX; + var repulsionForceY; + + if (rectA.intersects(rectB)) // two nodes overlap + { + // calculate separation amount in x and y directions + IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0); + + repulsionForceX = 2 * overlapAmount[0]; + repulsionForceY = 2 * overlapAmount[1]; + + var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); + + // Apply forces on the two nodes + nodeA.repulsionForceX -= childrenConstant * repulsionForceX; + nodeA.repulsionForceY -= childrenConstant * repulsionForceY; + nodeB.repulsionForceX += childrenConstant * repulsionForceX; + nodeB.repulsionForceY += childrenConstant * repulsionForceY; + } else // no overlap + { + // calculate distance + + if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers + { + distanceX = rectB.getCenterX() - rectA.getCenterX(); + distanceY = rectB.getCenterY() - rectA.getCenterY(); + } else // use clipping points + { + IGeometry.getIntersection(rectA, rectB, clipPoints); + + distanceX = clipPoints[2] - clipPoints[0]; + distanceY = clipPoints[3] - clipPoints[1]; + } + + // No repulsion range. FR grid variant should take care of this. + if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + distanceSquared = distanceX * distanceX + distanceY * distanceY; + distance = Math.sqrt(distanceSquared); + + repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; + + // Project force onto x and y axes + repulsionForceX = repulsionForce * distanceX / distance; + repulsionForceY = repulsionForce * distanceY / distance; + + // Apply forces on the two nodes + nodeA.repulsionForceX -= repulsionForceX; + nodeA.repulsionForceY -= repulsionForceY; + nodeB.repulsionForceX += repulsionForceX; + nodeB.repulsionForceY += repulsionForceY; + } +}; + +FDLayout.prototype.calcGravitationalForce = function (node) { + var ownerGraph; + var ownerCenterX; + var ownerCenterY; + var distanceX; + var distanceY; + var absDistanceX; + var absDistanceY; + var estimatedSize; + ownerGraph = node.getOwner(); + + ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; + ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; + distanceX = node.getCenterX() - ownerCenterX; + distanceY = node.getCenterY() - ownerCenterY; + absDistanceX = Math.abs(distanceX) + node.getWidth() / 2; + absDistanceY = Math.abs(distanceY) + node.getHeight() / 2; + + if (node.getOwner() == this.graphManager.getRoot()) // in the root graph + { + estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX; + node.gravitationForceY = -this.gravityConstant * distanceY; + } + } else // inside a compound + { + estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; + node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; + } + } +}; + +FDLayout.prototype.isConverged = function () { + var converged; + var oscilating = false; + + if (this.totalIterations > this.maxIterations / 3) { + oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; + } + + converged = this.totalDisplacement < this.totalDisplacementThreshold; + + this.oldTotalDisplacement = this.totalDisplacement; + + return converged || oscilating; +}; + +FDLayout.prototype.animate = function () { + if (this.animationDuringLayout && !this.isSubLayout) { + if (this.notAnimatedIterations == this.animationPeriod) { + this.update(); + this.notAnimatedIterations = 0; + } else { + this.notAnimatedIterations++; + } + } +}; + +//This method calculates the number of children (weight) for all nodes +FDLayout.prototype.calcNoOfChildrenForAllNodes = function () { + var node; + var allNodes = this.graphManager.getAllNodes(); + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + node.noOfChildren = node.getNoOfChildren(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: FR-Grid Variant Repulsion Force Calculation +// ----------------------------------------------------------------------------- + +FDLayout.prototype.calcGrid = function (graph) { + + var sizeX = 0; + var sizeY = 0; + + sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); + sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); + + var grid = new Array(sizeX); + + for (var i = 0; i < sizeX; i++) { + grid[i] = new Array(sizeY); + } + + for (var i = 0; i < sizeX; i++) { + for (var j = 0; j < sizeY; j++) { + grid[i][j] = new Array(); + } + } + + return grid; +}; + +FDLayout.prototype.addNodeToGrid = function (v, left, top) { + + var startX = 0; + var finishX = 0; + var startY = 0; + var finishY = 0; + + startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange)); + finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange)); + startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange)); + finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange)); + + for (var i = startX; i <= finishX; i++) { + for (var j = startY; j <= finishY; j++) { + this.grid[i][j].push(v); + v.setGridCoordinates(startX, finishX, startY, finishY); + } + } +}; + +FDLayout.prototype.updateGrid = function () { + var i; + var nodeA; + var lNodes = this.getAllNodes(); + + this.grid = this.calcGrid(this.graphManager.getRoot()); + + // put all nodes to proper grid cells + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); + } +}; + +FDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { + + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { + var surrounding = new Set(); + nodeA.surrounding = new Array(); + var nodeB; + var grid = this.grid; + + for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) { + for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) { + if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) { + for (var k = 0; k < grid[i][j].length; k++) { + nodeB = grid[i][j][k]; + + // If both nodes are not members of the same graph, + // or both nodes are the same, skip. + if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { + continue; + } + + // check if the repulsion force between + // nodeA and nodeB has already been calculated + if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { + var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); + var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); + + // if the distance between nodeA and nodeB + // is less then calculation range + if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { + //then add nodeB to surrounding of nodeA + surrounding.add(nodeB); + } + } + } + } + } + } + + nodeA.surrounding = [].concat(_toConsumableArray(surrounding)); + } + for (i = 0; i < nodeA.surrounding.length; i++) { + this.calcRepulsionForce(nodeA, nodeA.surrounding[i]); + } +}; + +FDLayout.prototype.calcRepulsionRange = function () { + return 0.0; +}; + +module.exports = FDLayout; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __nested_webpack_require_100902__) { + +"use strict"; + + +var LEdge = __nested_webpack_require_100902__(1); +var FDLayoutConstants = __nested_webpack_require_100902__(7); + +function FDLayoutEdge(source, target, vEdge) { + LEdge.call(this, source, target, vEdge); + this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +} + +FDLayoutEdge.prototype = Object.create(LEdge.prototype); + +for (var prop in LEdge) { + FDLayoutEdge[prop] = LEdge[prop]; +} + +module.exports = FDLayoutEdge; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __nested_webpack_require_101387__) { + +"use strict"; + + +var LNode = __nested_webpack_require_101387__(3); + +function FDLayoutNode(gm, loc, size, vNode) { + // alternative constructor is handled inside LNode + LNode.call(this, gm, loc, size, vNode); + //Spring, repulsion and gravitational forces acting on this node + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + //Amount by which this node is to be moved in this iteration + this.displacementX = 0; + this.displacementY = 0; + + //Start and finish grid coordinates that this node is fallen into + this.startX = 0; + this.finishX = 0; + this.startY = 0; + this.finishY = 0; + + //Geometric neighbors of this node + this.surrounding = []; +} + +FDLayoutNode.prototype = Object.create(LNode.prototype); + +for (var prop in LNode) { + FDLayoutNode[prop] = LNode[prop]; +} + +FDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) { + this.startX = _startX; + this.finishX = _finishX; + this.startY = _startY; + this.finishY = _finishY; +}; + +module.exports = FDLayoutNode; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function DimensionD(width, height) { + this.width = 0; + this.height = 0; + if (width !== null && height !== null) { + this.height = height; + this.width = width; + } +} + +DimensionD.prototype.getWidth = function () { + return this.width; +}; + +DimensionD.prototype.setWidth = function (width) { + this.width = width; +}; + +DimensionD.prototype.getHeight = function () { + return this.height; +}; + +DimensionD.prototype.setHeight = function (height) { + this.height = height; +}; + +module.exports = DimensionD; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __nested_webpack_require_103173__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103173__(14); + +function HashMap() { + this.map = {}; + this.keys = []; +} + +HashMap.prototype.put = function (key, value) { + var theId = UniqueIDGeneretor.createID(key); + if (!this.contains(theId)) { + this.map[theId] = value; + this.keys.push(key); + } +}; + +HashMap.prototype.contains = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[key] != null; +}; + +HashMap.prototype.get = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[theId]; +}; + +HashMap.prototype.keySet = function () { + return this.keys; +}; + +module.exports = HashMap; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __nested_webpack_require_103901__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103901__(14); + +function HashSet() { + this.set = {}; +} +; + +HashSet.prototype.add = function (obj) { + var theId = UniqueIDGeneretor.createID(obj); + if (!this.contains(theId)) this.set[theId] = obj; +}; + +HashSet.prototype.remove = function (obj) { + delete this.set[UniqueIDGeneretor.createID(obj)]; +}; + +HashSet.prototype.clear = function () { + this.set = {}; +}; + +HashSet.prototype.contains = function (obj) { + return this.set[UniqueIDGeneretor.createID(obj)] == obj; +}; + +HashSet.prototype.isEmpty = function () { + return this.size() === 0; +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +//concats this.set to the given list +HashSet.prototype.addAllTo = function (list) { + var keys = Object.keys(this.set); + var length = keys.length; + for (var i = 0; i < length; i++) { + list.push(this.set[keys[i]]); + } +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +HashSet.prototype.addAll = function (list) { + var s = list.length; + for (var i = 0; i < s; i++) { + var v = list[i]; + this.add(v); + } +}; + +module.exports = HashSet; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __nested_webpack_require_105138__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * A classic Quicksort algorithm with Hoare's partition + * - Works also on LinkedList objects + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var LinkedList = __nested_webpack_require_105138__(11); + +var Quicksort = function () { + function Quicksort(A, compareFunction) { + _classCallCheck(this, Quicksort); + + if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction; + + var length = void 0; + if (A instanceof LinkedList) length = A.size();else length = A.length; + + this._quicksort(A, 0, length - 1); + } + + _createClass(Quicksort, [{ + key: '_quicksort', + value: function _quicksort(A, p, r) { + if (p < r) { + var q = this._partition(A, p, r); + this._quicksort(A, p, q); + this._quicksort(A, q + 1, r); + } + } + }, { + key: '_partition', + value: function _partition(A, p, r) { + var x = this._get(A, p); + var i = p; + var j = r; + while (true) { + while (this.compareFunction(x, this._get(A, j))) { + j--; + }while (this.compareFunction(this._get(A, i), x)) { + i++; + }if (i < j) { + this._swap(A, i, j); + i++; + j--; + } else return j; + } + } + }, { + key: '_get', + value: function _get(object, index) { + if (object instanceof LinkedList) return object.get_object_at(index);else return object[index]; + } + }, { + key: '_set', + value: function _set(object, index, value) { + if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value; + } + }, { + key: '_swap', + value: function _swap(A, i, j) { + var temp = this._get(A, i); + this._set(A, i, this._get(A, j)); + this._set(A, j, temp); + } + }, { + key: '_defaultCompareFunction', + value: function _defaultCompareFunction(a, b) { + return b > a; + } + }]); + + return Quicksort; +}(); + +module.exports = Quicksort; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string + * sequences by S.B.Needleman and C.D.Wunsch (1970). + * + * Aside from the inputs, you can assign the scores for, + * - Match: The two characters at the current index are same. + * - Mismatch: The two characters at the current index are different. + * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string. + */ + +var NeedlemanWunsch = function () { + function NeedlemanWunsch(sequence1, sequence2) { + var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; + var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + + _classCallCheck(this, NeedlemanWunsch); + + this.sequence1 = sequence1; + this.sequence2 = sequence2; + this.match_score = match_score; + this.mismatch_penalty = mismatch_penalty; + this.gap_penalty = gap_penalty; + + // Just the remove redundancy + this.iMax = sequence1.length + 1; + this.jMax = sequence2.length + 1; + + // Grid matrix of scores + this.grid = new Array(this.iMax); + for (var i = 0; i < this.iMax; i++) { + this.grid[i] = new Array(this.jMax); + + for (var j = 0; j < this.jMax; j++) { + this.grid[i][j] = 0; + } + } + + // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions) + this.tracebackGrid = new Array(this.iMax); + for (var _i = 0; _i < this.iMax; _i++) { + this.tracebackGrid[_i] = new Array(this.jMax); + + for (var _j = 0; _j < this.jMax; _j++) { + this.tracebackGrid[_i][_j] = [null, null, null]; + } + } + + // The aligned sequences (return multiple possibilities) + this.alignments = []; + + // Final alignment score + this.score = -1; + + // Calculate scores and tracebacks + this.computeGrids(); + } + + _createClass(NeedlemanWunsch, [{ + key: "getScore", + value: function getScore() { + return this.score; + } + }, { + key: "getAlignments", + value: function getAlignments() { + return this.alignments; + } + + // Main dynamic programming procedure + + }, { + key: "computeGrids", + value: function computeGrids() { + // Fill in the first row + for (var j = 1; j < this.jMax; j++) { + this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty; + this.tracebackGrid[0][j] = [false, false, true]; + } + + // Fill in the first column + for (var i = 1; i < this.iMax; i++) { + this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty; + this.tracebackGrid[i][0] = [false, true, false]; + } + + // Fill the rest of the grid + for (var _i2 = 1; _i2 < this.iMax; _i2++) { + for (var _j2 = 1; _j2 < this.jMax; _j2++) { + // Find the max score(s) among [`Diag`, `Up`, `Left`] + var diag = void 0; + if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; + + var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; + var left = this.grid[_i2][_j2 - 1] + this.gap_penalty; + + // If there exists multiple max values, capture them for multiple paths + var maxOf = [diag, up, left]; + var indices = this.arrayAllMaxIndexes(maxOf); + + // Update Grids + this.grid[_i2][_j2] = maxOf[indices[0]]; + this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; + } + } + + // Update alignment score + this.score = this.grid[this.iMax - 1][this.jMax - 1]; + } + + // Gets all possible valid sequence combinations + + }, { + key: "alignmentTraceback", + value: function alignmentTraceback() { + var inProcessAlignments = []; + + inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], + seq1: "", + seq2: "" + }); + + while (inProcessAlignments[0]) { + var current = inProcessAlignments[0]; + var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; + + if (directions[0]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + if (directions[1]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: '-' + current.seq2 + }); + } + if (directions[2]) { + inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], + seq1: '-' + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + + if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, + sequence2: current.seq2 + }); + + inProcessAlignments.shift(); + } + + return this.alignments; + } + + // Helper Functions + + }, { + key: "getAllIndexes", + value: function getAllIndexes(arr, val) { + var indexes = [], + i = -1; + while ((i = arr.indexOf(val, i + 1)) !== -1) { + indexes.push(i); + } + return indexes; + } + }, { + key: "arrayAllMaxIndexes", + value: function arrayAllMaxIndexes(array) { + return this.getAllIndexes(array, Math.max.apply(null, array)); + } + }]); + + return NeedlemanWunsch; +}(); + +module.exports = NeedlemanWunsch; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __nested_webpack_require_115611__) { + +"use strict"; + + +var layoutBase = function layoutBase() { + return; +}; + +layoutBase.FDLayout = __nested_webpack_require_115611__(18); +layoutBase.FDLayoutConstants = __nested_webpack_require_115611__(7); +layoutBase.FDLayoutEdge = __nested_webpack_require_115611__(19); +layoutBase.FDLayoutNode = __nested_webpack_require_115611__(20); +layoutBase.DimensionD = __nested_webpack_require_115611__(21); +layoutBase.HashMap = __nested_webpack_require_115611__(22); +layoutBase.HashSet = __nested_webpack_require_115611__(23); +layoutBase.IGeometry = __nested_webpack_require_115611__(8); +layoutBase.IMath = __nested_webpack_require_115611__(9); +layoutBase.Integer = __nested_webpack_require_115611__(10); +layoutBase.Point = __nested_webpack_require_115611__(12); +layoutBase.PointD = __nested_webpack_require_115611__(4); +layoutBase.RandomSeed = __nested_webpack_require_115611__(16); +layoutBase.RectangleD = __nested_webpack_require_115611__(13); +layoutBase.Transform = __nested_webpack_require_115611__(17); +layoutBase.UniqueIDGeneretor = __nested_webpack_require_115611__(14); +layoutBase.Quicksort = __nested_webpack_require_115611__(24); +layoutBase.LinkedList = __nested_webpack_require_115611__(11); +layoutBase.LGraphObject = __nested_webpack_require_115611__(2); +layoutBase.LGraph = __nested_webpack_require_115611__(5); +layoutBase.LEdge = __nested_webpack_require_115611__(1); +layoutBase.LGraphManager = __nested_webpack_require_115611__(6); +layoutBase.LNode = __nested_webpack_require_115611__(3); +layoutBase.Layout = __nested_webpack_require_115611__(15); +layoutBase.LayoutConstants = __nested_webpack_require_115611__(0); +layoutBase.NeedlemanWunsch = __nested_webpack_require_115611__(25); + +module.exports = layoutBase; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Emitter() { + this.listeners = []; +} + +var p = Emitter.prototype; + +p.addListener = function (event, callback) { + this.listeners.push({ + event: event, + callback: callback + }); +}; + +p.removeListener = function (event, callback) { + for (var i = this.listeners.length; i >= 0; i--) { + var l = this.listeners[i]; + + if (l.event === event && l.callback === callback) { + this.listeners.splice(i, 1); + } + } +}; + +p.emit = function (event, data) { + for (var i = 0; i < this.listeners.length; i++) { + var l = this.listeners[i]; + + if (event === l.event) { + l.callback(data); + } + } +}; + +module.exports = Emitter; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 3502: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (/* binding */ SimpleMarkdown) +/* harmony export */ }); +/* eslint-disable prefer-spread, no-regex-spaces, no-unused-vars, guard-for-in, no-console, no-var */ + +/** + * Simple-Markdown + * =============== + * + * Simple-Markdown's primary goal is to be easy to adapt. It aims + * to be compliant with John Gruber's [Markdown Syntax page][1], + * but compatiblity with other markdown implementations' edge-cases + * will be sacrificed where it conflicts with simplicity or + * extensibility. + * + * If your goal is to simply embed a standard markdown implementation + * in your website, simple-markdown is probably not the best library + * for you (although it should work). But if you have struggled to + * customize an existing library to meet your needs, simple-markdown + * might be able to help. + * + * Many of the regexes and original logic has been adapted from + * the wonderful [marked.js](https://github.com/chjj/marked) + */ +// Flow Type Definitions: +// We want to clarify our defaultRules types a little bit more so clients can +// reuse defaultRules built-ins. So we make some stronger guarantess when +// we can: +// End Flow Definitions +var CR_NEWLINE_R = /\r\n?/g; +var TAB_R = /\t/g; +var FORMFEED_R = /\f/g; +/** + * Turn various whitespace into easy-to-process whitespace + */ + +var preprocess = function preprocess(source) { + return source.replace(CR_NEWLINE_R, "\n").replace(FORMFEED_R, "").replace(TAB_R, " "); +}; + +var populateInitialState = function populateInitialState(givenState, defaultState) { + var state = givenState || {}; + + if (defaultState != null) { + for (var prop in defaultState) { + // $FlowFixMe + if (Object.prototype.hasOwnProperty.call(defaultState, prop)) { + state[prop] = defaultState[prop]; + } + } + } + + return state; +}; +/** + * Creates a parser for a given set of rules, with the precedence + * specified as a list of rules. + * + * @param {SimpleMarkdown.ParserRules} rules + * an object containing + * rule type -> {match, order, parse} objects + * (lower order is higher precedence) + * @param {SimpleMarkdown.OptionalState} [defaultState] + * + * @returns {SimpleMarkdown.Parser} + * The resulting parse function, with the following parameters: + * @source: the input source string to be parsed + * @state: an optional object to be threaded through parse + * calls. Allows clients to add stateful operations to + * parsing, such as keeping track of how many levels deep + * some nesting is. For an example use-case, see passage-ref + * parsing in src/widgets/passage/passage-markdown.jsx + */ + + +var parserFor = function parserFor(rules, defaultState) { + // Sorts rules in order of increasing order, then + // ascending rule name in case of ties. + var ruleList = Object.keys(rules).filter(function (type) { + var rule = rules[type]; + + if (rule == null || rule.match == null) { + return false; + } + + var order = rule.order; + + if ((typeof order !== "number" || !isFinite(order)) && typeof console !== "undefined") { + console.warn("simple-markdown: Invalid order for rule `" + type + "`: " + String(order)); + } + + return true; + }); + ruleList.sort(function (typeA, typeB) { + var ruleA = rules[typeA]; + var ruleB = rules[typeB]; + var orderA = ruleA.order; + var orderB = ruleB.order; // First sort based on increasing order + + if (orderA !== orderB) { + return orderA - orderB; + } + + var secondaryOrderA = ruleA.quality ? 0 : 1; + var secondaryOrderB = ruleB.quality ? 0 : 1; + + if (secondaryOrderA !== secondaryOrderB) { + return secondaryOrderA - secondaryOrderB; // Then based on increasing unicode lexicographic ordering + } else if (typeA < typeB) { + return -1; + } else if (typeA > typeB) { + return 1; + } else { + // Rules should never have the same name, + // but this is provided for completeness. + return 0; + } + }); + var latestState; + + var nestedParse = function nestedParse(source, state) { + var result = []; + state = state || latestState; + latestState = state; + + while (source) { + // store the best match, it's rule, and quality: + var ruleType = null; + var rule = null; + var capture = null; + var quality = NaN; // loop control variables: + + var i = 0; + var currRuleType = ruleList[0]; // $FlowFixMe + + var currRule = rules[currRuleType]; + + do { + var currOrder = currRule.order; + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var currCapture = currRule.match(source, state, prevCaptureStr); + + if (currCapture) { + var currQuality = currRule.quality ? currRule.quality(currCapture, state, prevCaptureStr) : 0; // This should always be true the first time because + // the initial quality is NaN (that's why there's the + // condition negation). + + if (!(currQuality <= quality)) { + ruleType = currRuleType; + rule = currRule; + capture = currCapture; + quality = currQuality; + } + } // Move on to the next item. + // Note that this makes `currRule` be the next item + + + i++; + currRuleType = ruleList[i]; // $FlowFixMe + + currRule = rules[currRuleType]; + } while ( // keep looping while we're still within the ruleList + currRule && ( // if we don't have a match yet, continue + !capture || // or if we have a match, but the next rule is + // at the same order, and has a quality measurement + // functions, then this rule must have a quality + // measurement function (since they are sorted before + // those without), and we need to check if there is + // a better quality match + currRule.order === currOrder && currRule.quality)); // TODO(aria): Write tests for these + + + if (rule == null || capture == null) { + throw new Error("Could not find a matching rule for the below " + "content. The rule with highest `order` should " + "always match content provided to it. Check " + "the definition of `match` for '" + ruleList[ruleList.length - 1] + "'. It seems to not match the following source:\n" + source); + } + + if (capture.index) { + // If present and non-zero, i.e. a non-^ regexp result: + throw new Error("`match` must return a capture starting at index 0 " + "(the current parse index). Did you forget a ^ at the " + "start of the RegExp?"); + } + + var parsed = rule.parse(capture, nestedParse, state); // We maintain the same object here so that rules can + // store references to the objects they return and + // modify them later. (oops sorry! but this adds a lot + // of power--see reflinks.) + + if (Array.isArray(parsed)) { + // $FlowFixMe + Array.prototype.push.apply(result, parsed); + } else { + if (parsed == null || typeof parsed !== "object") { + throw new Error("parse() function returned invalid parse result: '".concat(parsed, "'")); + } // We also let rules override the default type of + // their parsed node if they would like to, so that + // there can be a single output function for all links, + // even if there are several rules to parse them. + + + if (parsed.type == null) { + // $FlowFixMe + parsed.type = ruleType; + } + + result.push(parsed); + } + + state.prevCapture = capture; + source = source.substring(state.prevCapture[0].length); + } // $FlowFixMe + + + return result; + }; + + var outerParse = function outerParse(source, state) { + latestState = populateInitialState(state, defaultState); + + if (!latestState.inline && !latestState.disableAutoBlockNewlines) { + source = source + "\n\n"; + } // We store the previous capture so that match functions can + // use some limited amount of lookbehind. Lists use this to + // ensure they don't match arbitrary '- ' or '* ' in inline + // text (see the list rule for more information). This stores + // the full regex capture object, if there is one. + + + latestState.prevCapture = null; + return nestedParse(preprocess(source), latestState); + }; // $FlowFixMe + + + return outerParse; +}; // Creates a match function for an inline scoped element from a regex + + +var inlineRegex = function inlineRegex(regex) { + var match = function match(source, state, prevCapture) { + if (state.inline) { + // $FlowFixMe + return regex.exec(source); + } else { + return null; + } + }; + + match.regex = regex; + return match; +}; // Creates a match function for a block scoped element from a regex + + +var blockRegex = function blockRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + if (state.inline) { + return null; + } else { + return regex.exec(source); + } + }; + + match.regex = regex; + return match; +}; // Creates a match function from a regex, ignoring block/inline scope + + +var anyScopeRegex = function anyScopeRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + return regex.exec(source); + }; + + match.regex = regex; + return match; +}; + +var TYPE_SYMBOL = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; + +var reactElement = function reactElement(type, key, props) { + var element = { + $$typeof: TYPE_SYMBOL, + type: type, + key: key == null ? undefined : key, + ref: null, + props: props, + _owner: null + }; + return element; +}; +/** Returns a closed HTML tag. + * @param {string} tagName - Name of HTML tag (eg. "em" or "a") + * @param {string} content - Inner content of tag + * @param {{ [attr: string]: SimpleMarkdown.Attr }} [attributes] - Optional extra attributes of tag as an object of key-value pairs + * eg. { "href": "http://google.com" }. Falsey attributes are filtered out. + * @param {boolean} [isClosed] - boolean that controls whether tag is closed or not (eg. img tags). + * defaults to true + */ + + +var htmlTag = function htmlTag(tagName, content, attributes, isClosed) { + attributes = attributes || {}; + isClosed = typeof isClosed !== "undefined" ? isClosed : true; + var attributeString = ""; + + for (var attr in attributes) { + var attribute = attributes[attr]; // Removes falsey attributes + + if ( // $FlowFixMe + Object.prototype.hasOwnProperty.call(attributes, attr) && attribute) { + attributeString += " " + sanitizeText(attr) + '="' + sanitizeText(attribute) + '"'; + } + } + + var unclosedTag = "<" + tagName + attributeString + ">"; + + if (isClosed) { + return unclosedTag + content + "</" + tagName + ">"; + } else { + return unclosedTag; + } +}; + +var EMPTY_PROPS = {}; +/** + * @param {string | null | undefined} url - url to sanitize + * @returns {string | null} - url if safe, or null if a safe url could not be made + */ + +var sanitizeUrl = function sanitizeUrl(url) { + if (url == null) { + return null; + } + + try { + var prot = new URL(url, "https://localhost").protocol; + + if (prot.indexOf("javascript:") === 0 || prot.indexOf("vbscript:") === 0 || prot.indexOf("data:") === 0) { + return null; + } + } catch (e) { + // invalid URLs should throw a TypeError + // see for instance: `new URL("");` + return null; + } + + return url; +}; + +var SANITIZE_TEXT_R = /[<>&"']/g; +var SANITIZE_TEXT_CODES = { + "<": "<", + ">": ">", + "&": "&", + '"': """, + "'": "'", + "/": "/", + "`": "`" +}; + +var sanitizeText = function sanitizeText(text) { + return String(text).replace(SANITIZE_TEXT_R, function (chr) { + return SANITIZE_TEXT_CODES[chr]; + }); +}; + +var UNESCAPE_URL_R = /\\([^0-9A-Za-z\s])/g; + +var unescapeUrl = function unescapeUrl(rawUrlString) { + return rawUrlString.replace(UNESCAPE_URL_R, "$1"); +}; +/** + * Parse some content with the parser `parse`, with state.inline + * set to true. Useful for block elements; not generally necessary + * to be used by inline elements (where state.inline is already true. + */ + + +var parseInline = function parseInline(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = true; + var result = parse(content, state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseBlock = function parseBlock(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = false; + var result = parse(content + "\n\n", state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseCaptureInline = function parseCaptureInline(capture, parse, state) { + return { + content: parseInline(parse, capture[1], state) + }; +}; + +var ignoreCapture = function ignoreCapture() { + return {}; +}; // recognize a `*` `-`, `+`, `1.`, `2.`... list bullet + + +var LIST_BULLET = "(?:[*+-]|\\d+\\.)"; // recognize the start of a list item: +// leading space plus a bullet plus a space (` * `) + +var LIST_ITEM_PREFIX = "( *)(" + LIST_BULLET + ") +"; +var LIST_ITEM_PREFIX_R = new RegExp("^" + LIST_ITEM_PREFIX); // recognize an individual list item: +// * hi +// this is part of the same item +// +// as is this, which is a new paragraph in the same item +// +// * but this is not part of the same item + +var LIST_ITEM_R = new RegExp(LIST_ITEM_PREFIX + "[^\\n]*(?:\\n" + "(?!\\1" + LIST_BULLET + " )[^\\n]*)*(\n|$)", "gm"); +var BLOCK_END_R = /\n{2,}$/; +var INLINE_CODE_ESCAPE_BACKTICKS_R = /^ (?= *`)|(` *) $/g; // recognize the end of a paragraph block inside a list item: +// two or more newlines at end end of the item + +var LIST_BLOCK_END_R = BLOCK_END_R; +var LIST_ITEM_END_R = / *\n+$/; // check whether a list item has paragraphs: if it does, +// we leave the newlines at the end + +var LIST_R = new RegExp("^( *)(" + LIST_BULLET + ") " + "[\\s\\S]+?(?:\n{2,}(?! )" + "(?!\\1" + LIST_BULLET + " )\\n*" + // the \\s*$ here is so that we can parse the inside of nested +// lists, where our content might end before we receive two `\n`s +"|\\s*\n*$)"); +var LIST_LOOKBEHIND_R = /(?:^|\n)( *)$/; + +var TABLES = function () { + var TABLE_ROW_SEPARATOR_TRIM = /^ *\| *| *\| *$/g; + var TABLE_CELL_END_TRIM = / *$/; + var TABLE_RIGHT_ALIGN = /^ *-+: *$/; + var TABLE_CENTER_ALIGN = /^ *:-+: *$/; + var TABLE_LEFT_ALIGN = /^ *:-+ *$/; // TODO: This needs a real type + + var parseTableAlignCapture = function parseTableAlignCapture(alignCapture) { + if (TABLE_RIGHT_ALIGN.test(alignCapture)) { + return "right"; + } else if (TABLE_CENTER_ALIGN.test(alignCapture)) { + return "center"; + } else if (TABLE_LEFT_ALIGN.test(alignCapture)) { + return "left"; + } else { + return null; + } + }; + + var parseTableAlign = function parseTableAlign(source, parse, state, trimEndSeparators) { + if (trimEndSeparators) { + source = source.replace(TABLE_ROW_SEPARATOR_TRIM, ""); + } + + var alignText = source.trim().split("|"); + return alignText.map(parseTableAlignCapture); + }; + + var parseTableRow = function parseTableRow(source, parse, state, trimEndSeparators) { + var prevInTable = state.inTable; + state.inTable = true; + var tableRow = parse(source.trim(), state); + state.inTable = prevInTable; + var cells = [[]]; + tableRow.forEach(function (node, i) { + if (node.type === "tableSeparator") { + // Filter out empty table separators at the start/end: + if (!trimEndSeparators || i !== 0 && i !== tableRow.length - 1) { + // Split the current row: + cells.push([]); + } + } else { + if (node.type === "text" && (tableRow[i + 1] == null || tableRow[i + 1].type === "tableSeparator")) { + node.content = node.content.replace(TABLE_CELL_END_TRIM, ""); + } + + cells[cells.length - 1].push(node); + } + }); + return cells; + }; + /** + * @param {string} source + * @param {SimpleMarkdown.Parser} parse + * @param {SimpleMarkdown.State} state + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.ASTNode[][]} + */ + + + var parseTableCells = function parseTableCells(source, parse, state, trimEndSeparators) { + var rowsText = source.trim().split("\n"); + return rowsText.map(function (rowText) { + // $FlowFixMe + return parseTableRow(rowText, parse, state, trimEndSeparators); + }); + }; + /** + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.SingleNodeParseFunction} + */ + + + var parseTable = function parseTable(trimEndSeparators) { + return function (capture, parse, state) { + state.inline = true; + var header = parseTableRow(capture[1], parse, state, trimEndSeparators); + var align = parseTableAlign(capture[2], parse, state, trimEndSeparators); + var cells = parseTableCells(capture[3], parse, state, trimEndSeparators); + state.inline = false; + return { + type: "table", + header: header, + align: align, + cells: cells + }; + }; + }; + + return { + parseTable: parseTable(true), + parseNpTable: parseTable(false), + TABLE_REGEX: /^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/, + NPTABLE_REGEX: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/ + }; +}(); + +var LINK_INSIDE = "(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*"; +var LINK_HREF_AND_TITLE = "\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*"; +var AUTOLINK_MAILTO_CHECK_R = /mailto:/i; + +var parseRef = function parseRef(capture, state, refNode) { + var ref = (capture[2] || capture[1]).replace(/\s+/g, " ").toLowerCase(); // We store information about previously seen defs on + // state._defs (_ to deconflict with client-defined + // state). If the def for this reflink/refimage has + // already been seen, we can use its target/source + // and title here: + + if (state._defs && state._defs[ref]) { + var def = state._defs[ref]; // `refNode` can be a link or an image. Both use + // target and title properties. + + refNode.target = def.target; + refNode.title = def.title; + } // In case we haven't seen our def yet (or if someone + // overwrites that def later on), we add this node + // to the list of ref nodes for that def. Then, when + // we find the def, we can modify this link/image AST + // node :). + // I'm sorry. + + + state._refs = state._refs || {}; + state._refs[ref] = state._refs[ref] || []; + + state._refs[ref].push(refNode); + + return refNode; +}; + +var currOrder = 0; +var defaultRules = { + Array: { + react: function react(arr, output, state) { + var oldKey = state.key; + var result = []; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0, key = 0; i < arr.length; i++, key++) { + // `key` is our numerical `state.key`, which we increment for + // every output node, but don't change for joined text nodes. + // (i, however, must change for joined text nodes) + state.key = "" + i; + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result.push(output(node, state)); + } + + state.key = oldKey; + return result; + }, + html: function html(arr, output, state) { + var result = ""; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0; i < arr.length; i++) { + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result += output(node, state); + } + + return result; + } + }, + heading: { + order: currOrder++, + match: blockRegex(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/), + parse: function (_parse) { + function parse(_x, _x2, _x3) { + return _parse.apply(this, arguments); + } + + parse.toString = function () { + return _parse.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + level: capture[1].length, + content: parseInline(parse, capture[2].trim(), state) + }; + }), + react: function react(node, output, state) { + return reactElement("h" + node.level, state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("h" + node.level, output(node.content, state)); + } + }, + nptable: { + order: currOrder++, + match: blockRegex(TABLES.NPTABLE_REGEX), + parse: TABLES.parseNpTable, + react: null, + html: null + }, + lheading: { + order: currOrder++, + match: blockRegex(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/), + parse: function (_parse2) { + function parse(_x4, _x5, _x6) { + return _parse2.apply(this, arguments); + } + + parse.toString = function () { + return _parse2.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "heading", + level: capture[2] === "=" ? 1 : 2, + content: parseInline(parse, capture[1], state) + }; + }), + react: null, + html: null + }, + hr: { + order: currOrder++, + match: blockRegex(/^( *[-*_]){3,} *(?:\n *)+\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("hr", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<hr>"; + } + }, + codeBlock: { + order: currOrder++, + match: blockRegex(/^(?: [^\n]+\n*)+(?:\n *)+\n/), + parse: function (_parse3) { + function parse(_x7, _x8, _x9) { + return _parse3.apply(this, arguments); + } + + parse.toString = function () { + return _parse3.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ /gm, "").replace(/\n+$/, ""); + return { + lang: undefined, + content: content + }; + }), + react: function react(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + return reactElement("pre", state.key, { + children: reactElement("code", null, { + className: className, + children: node.content + }) + }); + }, + html: function html(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + var codeBlock = htmlTag("code", sanitizeText(node.content), { + class: className + }); + return htmlTag("pre", codeBlock); + } + }, + fence: { + order: currOrder++, + match: blockRegex(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/), + parse: function (_parse4) { + function parse(_x10, _x11, _x12) { + return _parse4.apply(this, arguments); + } + + parse.toString = function () { + return _parse4.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "codeBlock", + lang: capture[2] || undefined, + content: capture[3] + }; + }), + react: null, + html: null + }, + blockQuote: { + order: currOrder++, + match: blockRegex(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/), + parse: function (_parse5) { + function parse(_x13, _x14, _x15) { + return _parse5.apply(this, arguments); + } + + parse.toString = function () { + return _parse5.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ *> ?/gm, ""); + return { + content: parse(content, state) + }; + }), + react: function react(node, output, state) { + return reactElement("blockquote", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("blockquote", output(node.content, state)); + } + }, + list: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + // We only want to break into a list if we are at the start of a + // line. This is to avoid parsing "hi * there" with "* there" + // becoming a part of a list. + // You might wonder, "but that's inline, so of course it wouldn't + // start a list?". You would be correct! Except that some of our + // lists can be inline, because they might be inside another list, + // in which case we can parse with inline scope, but need to allow + // nested lists inside this inline scope. + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var isStartOfLineCapture = LIST_LOOKBEHIND_R.exec(prevCaptureStr); + var isListBlock = state._list || !state.inline; + + if (isStartOfLineCapture && isListBlock) { + source = isStartOfLineCapture[1] + source; + return LIST_R.exec(source); + } else { + return null; + } + }, + parse: function (_parse6) { + function parse(_x16, _x17, _x18) { + return _parse6.apply(this, arguments); + } + + parse.toString = function () { + return _parse6.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var bullet = capture[2]; + var ordered = bullet.length > 1; + var start = ordered ? +bullet : undefined; + var items = capture[0].replace(LIST_BLOCK_END_R, "\n").match(LIST_ITEM_R); // We know this will match here, because of how the regexes are + // defined + + var lastItemWasAParagraph = false; + var itemContent = items.map(function (item, i) { + // We need to see how far indented this item is: + var prefixCapture = LIST_ITEM_PREFIX_R.exec(item); + var space = prefixCapture ? prefixCapture[0].length : 0; // And then we construct a regex to "unindent" the subsequent + // lines of the items by that amount: + + var spaceRegex = new RegExp("^ {1," + space + "}", "gm"); // Before processing the item, we need a couple things + + var content = item // remove indents on trailing lines: + .replace(spaceRegex, "") // remove the bullet: + .replace(LIST_ITEM_PREFIX_R, ""); // I'm not sur4 why this is necessary again? + // Handling "loose" lists, like: + // + // * this is wrapped in a paragraph + // + // * as is this + // + // * as is this + + var isLastItem = i === items.length - 1; + var containsBlocks = content.indexOf("\n\n") !== -1; // Any element in a list is a block if it contains multiple + // newlines. The last element in the list can also be a block + // if the previous item in the list was a block (this is + // because non-last items in the list can end with \n\n, but + // the last item can't, so we just "inherit" this property + // from our previous element). + + var thisItemIsAParagraph = containsBlocks || isLastItem && lastItemWasAParagraph; + lastItemWasAParagraph = thisItemIsAParagraph; // backup our state for restoration afterwards. We're going to + // want to set state._list to true, and state.inline depending + // on our list's looseness. + + var oldStateInline = state.inline; + var oldStateList = state._list; + state._list = true; // Parse inline if we're in a tight list, or block if we're in + // a loose list. + + var adjustedContent; + + if (thisItemIsAParagraph) { + state.inline = false; + adjustedContent = content.replace(LIST_ITEM_END_R, "\n\n"); + } else { + state.inline = true; + adjustedContent = content.replace(LIST_ITEM_END_R, ""); + } + + var result = parse(adjustedContent, state); // Restore our state before returning + + state.inline = oldStateInline; + state._list = oldStateList; + return result; + }); + return { + ordered: ordered, + start: start, + items: itemContent + }; + }), + react: function react(node, output, state) { + var ListWrapper = node.ordered ? "ol" : "ul"; + return reactElement(ListWrapper, state.key, { + start: node.start, + children: node.items.map(function (item, i) { + return reactElement("li", "" + i, { + children: output(item, state) + }); + }) + }); + }, + html: function html(node, output, state) { + var listItems = node.items.map(function (item) { + return htmlTag("li", output(item, state)); + }).join(""); + var listTag = node.ordered ? "ol" : "ul"; + var attributes = { + start: node.start + }; + return htmlTag(listTag, listItems, attributes); + } + }, + def: { + order: currOrder++, + // TODO(aria): This will match without a blank line before the next + // block element, which is inconsistent with most of the rest of + // simple-markdown. + match: blockRegex(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/), + parse: function (_parse7) { + function parse(_x19, _x20, _x21) { + return _parse7.apply(this, arguments); + } + + parse.toString = function () { + return _parse7.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var def = capture[1].replace(/\s+/g, " ").toLowerCase(); + var target = capture[2]; + var title = capture[3]; // Look for previous links/images using this def + // If any links/images using this def have already been declared, + // they will have added themselves to the state._refs[def] list + // (_ to deconflict with client-defined state). We look through + // that list of reflinks for this def, and modify those AST nodes + // with our newly found information now. + // Sorry :(. + + if (state._refs && state._refs[def]) { + // `refNode` can be a link or an image + state._refs[def].forEach(function (refNode) { + refNode.target = target; + refNode.title = title; + }); + } // Add this def to our map of defs for any future links/images + // In case we haven't found any or all of the refs referring to + // this def yet, we add our def to the table of known defs, so + // that future reflinks can modify themselves appropriately with + // this information. + + + state._defs = state._defs || {}; + state._defs[def] = { + target: target, + title: title + }; // return the relevant parsed information + // for debugging only. + + return { + def: def, + target: target, + title: title + }; + }), + react: function react() { + return null; + }, + html: function html() { + return ""; + } + }, + table: { + order: currOrder++, + match: blockRegex(TABLES.TABLE_REGEX), + parse: TABLES.parseTable, + react: function react(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? {} : { + textAlign: node.align[colIndex] + }; + }; + + var headers = node.header.map(function (content, i) { + return reactElement("th", "" + i, { + style: getStyle(i), + scope: "col", + children: output(content, state) + }); + }); + var rows = node.cells.map(function (row, r) { + return reactElement("tr", "" + r, { + children: row.map(function (content, c) { + return reactElement("td", "" + c, { + style: getStyle(c), + children: output(content, state) + }); + }) + }); + }); + return reactElement("table", state.key, { + children: [reactElement("thead", "thead", { + children: reactElement("tr", null, { + children: headers + }) + }), reactElement("tbody", "tbody", { + children: rows + })] + }); + }, + html: function html(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? "" : "text-align:" + node.align[colIndex] + ";"; + }; + + var headers = node.header.map(function (content, i) { + return htmlTag("th", output(content, state), { + style: getStyle(i), + scope: "col" + }); + }).join(""); + var rows = node.cells.map(function (row) { + var cols = row.map(function (content, c) { + return htmlTag("td", output(content, state), { + style: getStyle(c) + }); + }).join(""); + return htmlTag("tr", cols); + }).join(""); + var thead = htmlTag("thead", htmlTag("tr", headers)); + var tbody = htmlTag("tbody", rows); + return htmlTag("table", thead + tbody); + } + }, + newline: { + order: currOrder++, + match: blockRegex(/^(?:\n *)*\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return "\n"; + }, + html: function html(node, output, state) { + return "\n"; + } + }, + paragraph: { + order: currOrder++, + match: blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("div", state.key, { + className: "paragraph", + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + class: "paragraph" + }; + return htmlTag("div", output(node.content, state), attributes); + } + }, + escape: { + order: currOrder++, + // We don't allow escaping numbers, letters, or spaces here so that + // backslashes used in plain text still get rendered. But allowing + // escaping anything else provides a very flexible escape mechanism, + // regardless of how this grammar is extended. + match: inlineRegex(/^\\([^0-9A-Za-z\s])/), + parse: function (_parse8) { + function parse(_x22, _x23, _x24) { + return _parse8.apply(this, arguments); + } + + parse.toString = function () { + return _parse8.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "text", + content: capture[1] + }; + }), + react: null, + html: null + }, + tableSeparator: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + if (!state.inTable) { + return null; + } + + return /^ *\| */.exec(source); + }, + parse: function parse() { + return { + type: "tableSeparator" + }; + }, + // These shouldn't be reached, but in case they are, be reasonable: + react: function react() { + return " | "; + }, + html: function html() { + return " | "; + } + }, + autolink: { + order: currOrder++, + match: inlineRegex(/^<([^: >]+:\/[^ >]+)>/), + parse: function (_parse9) { + function parse(_x25, _x26, _x27) { + return _parse9.apply(this, arguments); + } + + parse.toString = function () { + return _parse9.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1] + }; + }), + react: null, + html: null + }, + mailto: { + order: currOrder++, + match: inlineRegex(/^<([^ >]+@[^ >]+)>/), + parse: function (_parse10) { + function parse(_x28, _x29, _x30) { + return _parse10.apply(this, arguments); + } + + parse.toString = function () { + return _parse10.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var address = capture[1]; + var target = capture[1]; // Check for a `mailto:` already existing in the link: + + if (!AUTOLINK_MAILTO_CHECK_R.test(target)) { + target = "mailto:" + target; + } + + return { + type: "link", + content: [{ + type: "text", + content: address + }], + target: target + }; + }), + react: null, + html: null + }, + url: { + order: currOrder++, + match: inlineRegex(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/), + parse: function (_parse11) { + function parse(_x31, _x32, _x33) { + return _parse11.apply(this, arguments); + } + + parse.toString = function () { + return _parse11.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1], + title: undefined + }; + }), + react: null, + html: null + }, + link: { + order: currOrder++, + match: inlineRegex(new RegExp("^\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse12) { + function parse(_x34, _x35, _x36) { + return _parse12.apply(this, arguments); + } + + parse.toString = function () { + return _parse12.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var link = { + content: parse(capture[1], state), + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return link; + }), + react: function react(node, output, state) { + return reactElement("a", state.key, { + href: sanitizeUrl(node.target), + title: node.title, + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + href: sanitizeUrl(node.target), + title: node.title + }; + return htmlTag("a", output(node.content, state), attributes); + } + }, + image: { + order: currOrder++, + match: inlineRegex(new RegExp("^!\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse13) { + function parse(_x37, _x38, _x39) { + return _parse13.apply(this, arguments); + } + + parse.toString = function () { + return _parse13.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var image = { + alt: capture[1], + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return image; + }), + react: function react(node, output, state) { + return reactElement("img", state.key, { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }); + }, + html: function html(node, output, state) { + var attributes = { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }; + return htmlTag("img", "", attributes, false); + } + }, + reflink: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse14) { + function parse(_x40, _x41, _x42) { + return _parse14.apply(this, arguments); + } + + parse.toString = function () { + return _parse14.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "link", + content: parse(capture[1], state) + }); + }), + react: null, + html: null + }, + refimage: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^!\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse15) { + function parse(_x43, _x44, _x45) { + return _parse15.apply(this, arguments); + } + + parse.toString = function () { + return _parse15.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "image", + alt: capture[1] + }); + }), + react: null, + html: null + }, + em: { + order: currOrder + /* same as strong/u */ + , + match: inlineRegex(new RegExp( // only match _s surrounding words. + "^\\b_" + "((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_" + "\\b" + // Or match *s: + "|" + // Only match *s that are followed by a non-space: + "^\\*(?=\\S)(" + // Match at least one of: + "(?:" + // - `**`: so that bolds inside italics don't close the + // italics + "\\*\\*|" + // - escape sequence: so escaped *s don't close us + "\\\\[\\s\\S]|" + // - whitespace: followed by a non-* (we don't + // want ' *' to close an italics--it might + // start a list) + "\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|" + // - non-whitespace, non-*, non-backslash characters + "[^\\s\\*\\\\]" + ")+?" + // followed by a non-space, non-* then * + ")\\*(?!\\*)")), + quality: function quality(capture) { + // precedence by length, `em` wins ties: + return capture[0].length + 0.2; + }, + parse: function (_parse16) { + function parse(_x46, _x47, _x48) { + return _parse16.apply(this, arguments); + } + + parse.toString = function () { + return _parse16.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: parse(capture[2] || capture[1], state) + }; + }), + react: function react(node, output, state) { + return reactElement("em", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("em", output(node.content, state)); + } + }, + strong: { + order: currOrder + /* same as em */ + , + match: inlineRegex(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/), + quality: function quality(capture) { + // precedence by length, wins ties vs `u`: + return capture[0].length + 0.1; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("strong", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("strong", output(node.content, state)); + } + }, + u: { + order: currOrder++ + /* same as em&strong; increment for next rule */ + , + match: inlineRegex(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/), + quality: function quality(capture) { + // precedence by length, loses all ties + return capture[0].length; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("u", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("u", output(node.content, state)); + } + }, + del: { + order: currOrder++, + match: inlineRegex(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("del", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("del", output(node.content, state)); + } + }, + inlineCode: { + order: currOrder++, + match: inlineRegex(/^(`+)([\s\S]*?[^`])\1(?!`)/), + parse: function (_parse17) { + function parse(_x49, _x50, _x51) { + return _parse17.apply(this, arguments); + } + + parse.toString = function () { + return _parse17.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[2].replace(INLINE_CODE_ESCAPE_BACKTICKS_R, "$1") + }; + }), + react: function react(node, output, state) { + return reactElement("code", state.key, { + children: node.content + }); + }, + html: function html(node, output, state) { + return htmlTag("code", sanitizeText(node.content)); + } + }, + br: { + order: currOrder++, + match: anyScopeRegex(/^ {2,}\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("br", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<br>"; + } + }, + text: { + order: currOrder++, + // Here we look for anything followed by non-symbols, + // double newlines, or double-space-newlines + // We break on any symbol characters so that this grammar + // is easy to extend without needing to modify this regex + match: anyScopeRegex(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/), + parse: function (_parse18) { + function parse(_x52, _x53, _x54) { + return _parse18.apply(this, arguments); + } + + parse.toString = function () { + return _parse18.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[0] + }; + }), + react: function react(node, output, state) { + return node.content; + }, + html: function html(node, output, state) { + return sanitizeText(node.content); + } + } +}; +/** (deprecated) */ + +var ruleOutput = function ruleOutput( // $FlowFixMe +rules, property) { + if (!property && typeof console !== "undefined") { + console.warn("simple-markdown ruleOutput should take 'react' or " + "'html' as the second argument."); + } + + var nestedRuleOutput = function nestedRuleOutput(ast, outputFunc, state) { + return rules[ast.type][property](ast, outputFunc, state); + }; + + return nestedRuleOutput; +}; +/** (deprecated) + */ + + +var reactFor = function reactFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + var oldKey = state.key; + var result = []; // map nestedOutput over the ast, except group any text + // nodes together into a single string output. + + var lastResult = null; + + for (var i = 0; i < ast.length; i++) { + state.key = "" + i; + var nodeOut = nestedOutput(ast[i], state); + + if (typeof nodeOut === "string" && typeof lastResult === "string") { + lastResult = lastResult + nodeOut; + result[result.length - 1] = lastResult; + } else { + result.push(nodeOut); + lastResult = nodeOut; + } + } + + state.key = oldKey; + return result; + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; +/** (deprecated) + */ + + +var htmlFor = function htmlFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + return ast.map(function (node) { + return nestedOutput(node, state); + }).join(""); + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; + +var outputFor = function outputFor(rules, property) { + var defaultState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!property) { + throw new Error("simple-markdown: outputFor: `property` must be " + "defined. " + "if you just upgraded, you probably need to replace `outputFor` " + "with `reactFor`"); + } + + var latestState; // $FlowFixMe[incompatible-type] + + var arrayRule = rules.Array || defaultRules.Array; // Tricks to convince tsc that this var is not null: + + var arrayRuleCheck = arrayRule[property]; + + if (!arrayRuleCheck) { + throw new Error("simple-markdown: outputFor: to join nodes of type `" + property + "` you must provide an `Array:` joiner rule with that type, " + "Please see the docs for details on specifying an Array rule."); + } + + var arrayRuleOutput = arrayRuleCheck; + + var nestedOutput = function nestedOutput(ast, state) { + state = state || latestState; + latestState = state; + + if (Array.isArray(ast)) { + return arrayRuleOutput(ast, nestedOutput, state); + } else { + return rules[ast.type][property](ast, nestedOutput, state); + } + }; + + var outerOutput = function outerOutput(ast, state) { + latestState = populateInitialState(state, defaultState); + return nestedOutput(ast, latestState); + }; + + return outerOutput; +}; // $FlowFixMe[incompatible-call] + + +var defaultRawParse = parserFor(defaultRules); + +var defaultBlockParse = function defaultBlockParse(source, state) { + state = state || {}; + state.inline = false; + return defaultRawParse(source, state); +}; + +var defaultInlineParse = function defaultInlineParse(source, state) { + state = state || {}; + state.inline = true; + return defaultRawParse(source, state); +}; + +var defaultImplicitParse = function defaultImplicitParse(source, state) { + var isBlock = BLOCK_END_R.test(source); + state = state || {}; + state.inline = !isBlock; + return defaultRawParse(source, state); +}; // $FlowFixMe[incompatible-call] + + +var defaultReactOutput = outputFor(defaultRules, "react"); // $FlowFixMe[incompatible-call] + +var defaultHtmlOutput = outputFor(defaultRules, "html"); + +var markdownToReact = function markdownToReact(source, state) { + return defaultReactOutput(defaultBlockParse(source, state), state); +}; + +var markdownToHtml = function markdownToHtml(source, state) { + return defaultHtmlOutput(defaultBlockParse(source, state), state); +}; // TODO: This needs definition + + +var ReactMarkdown = function ReactMarkdown(props) { + var divProps = {}; + + for (var prop in props) { + if (prop !== "source" && // $FlowFixMe + Object.prototype.hasOwnProperty.call(props, prop)) { + divProps[prop] = props[prop]; + } + } + + divProps.children = markdownToReact(props.source); + return reactElement("div", null, divProps); +}; + +// $FlowFixMe +var SimpleMarkdown = { + defaultRules: defaultRules, + parserFor: parserFor, + outputFor: outputFor, + inlineRegex: inlineRegex, + blockRegex: blockRegex, + anyScopeRegex: anyScopeRegex, + parseInline: parseInline, + parseBlock: parseBlock, + // default wrappers: + markdownToReact: markdownToReact, + markdownToHtml: markdownToHtml, + ReactMarkdown: ReactMarkdown, + defaultBlockParse: defaultBlockParse, + defaultInlineParse: defaultInlineParse, + defaultImplicitParse: defaultImplicitParse, + defaultReactOutput: defaultReactOutput, + defaultHtmlOutput: defaultHtmlOutput, + preprocess: preprocess, + sanitizeText: sanitizeText, + sanitizeUrl: sanitizeUrl, + unescapeUrl: unescapeUrl, + htmlTag: htmlTag, + reactElement: reactElement, + // deprecated: + defaultRawParse: defaultRawParse, + ruleOutput: ruleOutput, + reactFor: reactFor, + htmlFor: htmlFor, + defaultParse: function defaultParse() { + if (typeof console !== "undefined") { + console.warn("defaultParse is deprecated, please use `defaultImplicitParse`"); + } + + return defaultImplicitParse.apply(null, arguments); + }, + defaultOutput: function defaultOutput() { + if (typeof console !== "undefined") { + console.warn("defaultOutput is deprecated, please use `defaultReactOutput`"); + } + + return defaultReactOutput.apply(null, arguments); + } +}; + + +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 91619: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ is_dark) +}); + +// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(61691); +// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(71610); +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/luminance.js +/* IMPORT */ + + +/* MAIN */ +//SOURCE: https://planetcalc.com/7779 +const luminance = (color) => { + const { r, g, b } = dist_color/* default.parse */.Z.parse(color); + const luminance = .2126 * utils/* default.channel.toLinear */.Z.channel.toLinear(r) + .7152 * utils/* default.channel.toLinear */.Z.channel.toLinear(g) + .0722 * utils/* default.channel.toLinear */.Z.channel.toLinear(b); + return utils/* default.lang.round */.Z.lang.round(luminance); +}; +/* EXPORT */ +/* harmony default export */ const methods_luminance = (luminance); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_light.js +/* IMPORT */ + +/* MAIN */ +const isLight = (color) => { + return methods_luminance(color) >= .5; +}; +/* EXPORT */ +/* harmony default export */ const is_light = (isLight); + +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_dark.js +/* IMPORT */ + +/* MAIN */ +const isDark = (color) => { + return !is_light(color); +}; +/* EXPORT */ +/* harmony default export */ const is_dark = (isDark); + + +/***/ }), + +/***/ 211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "c": () => (/* binding */ createText) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43047); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3502); + + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = withoutMultipleNewlines.replace(/^\s+/gm, ""); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(preprocessedMarkdown); + let lines = [[]]; + let currentLine = 0; + function processNode(node, parentType) { + if (node.type === "text") { + const textLines = node.content.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType || "normal" }); + } + }); + }); + } else if (node.type === "strong" || node.type === "em") { + node.content.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + syntaxTree.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.content.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(markdown); + function output(node) { + if (node.type === "text") { + return node.content.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.content.map(output).join("")}</strong>`; + } else if (node.type === "em") { + return `<em>${node.content.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.content.map(output).join("")}</p>`; + } else { + return ""; + } + } + return syntaxTree.map(output).join(""); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + `<span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + let bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = -1; + structuredText.forEach((line) => { + lineIndex++; + let tspan = createTspan(textElement, lineIndex, lineHeight); + let words = [...line].reverse(); + let currentWord; + let wrappedLine = []; + while (words.length) { + currentWord = words.pop(); + wrappedLine.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + if (tspan.node().getComputedTextLength() > width) { + wrappedLine.pop(); + words.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + wrappedLine = []; + lineIndex++; + tspan = createTspan(textElement, lineIndex, lineHeight); + } + } + }); + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "em" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width, + addSvgBackground = false +} = {}) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__.d)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlSpan(el, node, width, classes); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const special = ['"', "'", ".", ",", ":", ";", "!", "?", "(", ")", "[", "]", "{", "}"]; + let lastWord; + structuredText.forEach((line) => { + line.forEach((word) => { + if (special.includes(word.content) && lastWord) { + lastWord.content += word.content; + word.content = ""; + } + lastWord = word; + }); + }); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + +//# sourceMappingURL=createText-1f5f8f92.js.map + + +/***/ }), + +/***/ 37926: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(81188); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(211); +/* harmony import */ var cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71377); +/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14607); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7201); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17967); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3502); + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" }, + productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 6: + case 7: + return yy; + case 8: + yy.getLogger().trace("Stop NL "); + break; + case 9: + yy.getLogger().trace("Stop EOF "); + break; + case 11: + yy.getLogger().trace("Stop NL2 "); + break; + case 12: + yy.getLogger().trace("Stop EOF2 "); + break; + case 15: + yy.getLogger().info("Node: ", $$[$0].id); + yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 16: + yy.getLogger().trace("Icon: ", $$[$0]); + yy.decorateNode({ icon: $$[$0] }); + break; + case 17: + case 21: + yy.decorateNode({ class: $$[$0] }); + break; + case 18: + yy.getLogger().trace("SPACELIST"); + break; + case 19: + yy.getLogger().trace("Node: ", $$[$0].id); + yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 20: + yy.decorateNode({ icon: $$[$0] }); + break; + case 25: + yy.getLogger().trace("node found ..", $$[$0 - 2]); + this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + case 26: + this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; + break; + case 27: + yy.getLogger().trace("node found ..", $$[$0 - 3]); + this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($V7, [2, 3]), { 1: [2, 2] }, o($V7, [2, 4]), o($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o($Vb, [2, 18]), o($Vb, [2, 19]), o($Vb, [2, 20]), o($Vb, [2, 21]), o($Vb, [2, 23]), o($Vb, [2, 24]), o($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o($Vf, [2, 8]), o($Vf, [2, 9]), o($Vf, [2, 10]), o($Vb, [2, 15]), o($Vb, [2, 16]), o($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o($Vf, [2, 11]), o($Vf, [2, 12]), { 21: [1, 37] }, o($Vb, [2, 25]), o($Vb, [2, 27])], + defaultActions: { 2: [2, 1], 6: [2, 2] }, + parseError: function parseError2(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError2(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + yy.getLogger().trace("Found comment", yy_.yytext); + return 6; + case 1: + return 8; + case 2: + this.begin("CLASS"); + break; + case 3: + this.popState(); + return 16; + case 4: + this.popState(); + break; + case 5: + yy.getLogger().trace("Begin icon"); + this.begin("ICON"); + break; + case 6: + yy.getLogger().trace("SPACELINE"); + return 6; + case 7: + return 7; + case 8: + return 15; + case 9: + yy.getLogger().trace("end icon"); + this.popState(); + break; + case 10: + yy.getLogger().trace("Exploding node"); + this.begin("NODE"); + return 19; + case 11: + yy.getLogger().trace("Cloud"); + this.begin("NODE"); + return 19; + case 12: + yy.getLogger().trace("Explosion Bang"); + this.begin("NODE"); + return 19; + case 13: + yy.getLogger().trace("Cloud Bang"); + this.begin("NODE"); + return 19; + case 14: + this.begin("NODE"); + return 19; + case 15: + this.begin("NODE"); + return 19; + case 16: + this.begin("NODE"); + return 19; + case 17: + this.begin("NODE"); + return 19; + case 18: + return 13; + case 19: + return 22; + case 20: + return 11; + case 21: + this.begin("NSTR2"); + break; + case 22: + return "NODE_DESCR"; + case 23: + this.popState(); + break; + case 24: + yy.getLogger().trace("Starting NSTR"); + this.begin("NSTR"); + break; + case 25: + yy.getLogger().trace("description:", yy_.yytext); + return "NODE_DESCR"; + case 26: + this.popState(); + break; + case 27: + this.popState(); + yy.getLogger().trace("node end ))"); + return "NODE_DEND"; + case 28: + this.popState(); + yy.getLogger().trace("node end )"); + return "NODE_DEND"; + case 29: + this.popState(); + yy.getLogger().trace("node end ...", yy_.yytext); + return "NODE_DEND"; + case 30: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 31: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 32: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 33: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 34: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 35: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + case 36: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + } + }, + rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\-\)\{\}]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], + conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR2": { "rules": [22, 23], "inclusive": false }, "NSTR": { "rules": [25, 26], "inclusive": false }, "NODE": { "rules": [21, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const mindmapParser = parser; +const sanitizeText = (text) => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.b)(text, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)()); +let nodes = []; +let cnt = 0; +let elements = {}; +const clear = () => { + nodes = []; + cnt = 0; + elements = {}; +}; +const getParent = function(level) { + for (let i = nodes.length - 1; i >= 0; i--) { + if (nodes[i].level < level) { + return nodes[i]; + } + } + return null; +}; +const getMindmap = () => { + return nodes.length > 0 ? nodes[0] : null; +}; +const addNode = (level, id, descr, type) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("addNode", level, id, descr, type); + const conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)(); + const node = { + id: cnt++, + nodeId: sanitizeText(id), + level, + descr: sanitizeText(descr), + type, + children: [], + width: (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)().mindmap.maxNodeWidth + }; + switch (node.type) { + case nodeType.ROUNDED_RECT: + node.padding = 2 * conf.mindmap.padding; + break; + case nodeType.RECT: + node.padding = 2 * conf.mindmap.padding; + break; + case nodeType.HEXAGON: + node.padding = 2 * conf.mindmap.padding; + break; + default: + node.padding = conf.mindmap.padding; + } + const parent = getParent(level); + if (parent) { + parent.children.push(node); + nodes.push(node); + } else { + if (nodes.length === 0) { + nodes.push(node); + } else { + let error = new Error( + 'There can be only one root. No parent could be found for ("' + node.descr + '")' + ); + error.hash = { + text: "branch " + name, + token: "branch " + name, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"checkout ' + name + '"'] + }; + throw error; + } + } +}; +const nodeType = { + DEFAULT: 0, + NO_BORDER: 0, + ROUNDED_RECT: 1, + RECT: 2, + CIRCLE: 3, + CLOUD: 4, + BANG: 5, + HEXAGON: 6 +}; +const getType = (startStr, endStr) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("In get type", startStr, endStr); + switch (startStr) { + case "[": + return nodeType.RECT; + case "(": + return endStr === ")" ? nodeType.ROUNDED_RECT : nodeType.CLOUD; + case "((": + return nodeType.CIRCLE; + case ")": + return nodeType.CLOUD; + case "))": + return nodeType.BANG; + case "{{": + return nodeType.HEXAGON; + default: + return nodeType.DEFAULT; + } +}; +const setElementForId = (id, element) => { + elements[id] = element; +}; +const decorateNode = (decoration) => { + const node = nodes[nodes.length - 1]; + if (decoration && decoration.icon) { + node.icon = sanitizeText(decoration.icon); + } + if (decoration && decoration.class) { + node.class = sanitizeText(decoration.class); + } +}; +const type2Str = (type) => { + switch (type) { + case nodeType.DEFAULT: + return "no-border"; + case nodeType.RECT: + return "rect"; + case nodeType.ROUNDED_RECT: + return "rounded-rect"; + case nodeType.CIRCLE: + return "circle"; + case nodeType.CLOUD: + return "cloud"; + case nodeType.BANG: + return "bang"; + case nodeType.HEXAGON: + return "hexgon"; + default: + return "no-border"; + } +}; +let parseError; +const setErrorHandler = (handler) => { + parseError = handler; +}; +const getLogger = () => _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l; +const getNodeById = (id) => nodes[id]; +const getElementById = (id) => elements[id]; +const mindmapDb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addNode, + clear, + decorateNode, + getElementById, + getLogger, + getMindmap, + getNodeById, + getType, + nodeType, + get parseError() { + return parseError; + }, + sanitizeText, + setElementForId, + setErrorHandler, + type2Str +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const rectBkg = function(elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("width", node.width); +}; +const cloudBkg = function(elem, node) { + const w = node.width; + const h = node.height; + const r1 = 0.15 * w; + const r2 = 0.25 * w; + const r3 = 0.35 * w; + const r4 = 0.2 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1} + a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1} + a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2} + + a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35} + a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65} + + a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15} + a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0} + a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15} + + a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35} + a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65} + + H0 V0 Z` + ); +}; +const bangBkg = function(elem, node) { + const w = node.width; + const h = node.height; + const r = 0.15 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1} + + a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34} + a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33} + + a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15} + + a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34} + a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33} + + H0 V0 Z` + ); +}; +const circleBkg = function(elem, node) { + elem.append("circle").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("r", node.width / 2); +}; +function insertPolygonShape(parent, w, h, points, node) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + (node.width - w) / 2 + ", " + h + ")"); +} +const hexagonBkg = function(elem, node) { + const h = node.height; + const f = 4; + const m = h / f; + const w = node.width - node.padding + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + insertPolygonShape(elem, w, h, points, node); +}; +const roundedRectBkg = function(elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("rx", node.padding).attr("ry", node.padding).attr("width", node.width); +}; +const drawNode = function(elem, node, fullSection, conf) { + const htmlLabels = conf.htmlLabels; + const section = fullSection % (MAX_SECTIONS - 1); + const nodeElem = elem.append("g"); + node.section = section; + let sectionClass = "section-" + section; + if (section < 0) { + sectionClass += " section-root"; + } + nodeElem.attr("class", (node.class ? node.class + " " : "") + "mindmap-node " + sectionClass); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const description = node.descr.replace(/(<br\/*>)/g, "\n"); + (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_8__.c)(textElem, description, { + useHtmlLabels: htmlLabels, + width: node.width, + classes: "mindmap-node-label" + }); + if (!htmlLabels) { + textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle"); + } + const bbox = textElem.node().getBBox(); + const fontSize = conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.width = bbox.width + 2 * node.padding; + if (node.icon) { + if (node.type === nodeType.CIRCLE) { + node.height += 50; + node.width += 50; + const icon = nodeElem.append("foreignObject").attr("height", "50px").attr("width", node.width).attr("style", "text-align: center;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + node.width / 2 + ", " + (node.height / 2 - 1.5 * node.padding) + ")" + ); + } else { + node.width += 50; + const orgHeight = node.height; + node.height = Math.max(orgHeight, 60); + const heightDiff = Math.abs(node.height - orgHeight); + const icon = nodeElem.append("foreignObject").attr("width", "60px").attr("height", node.height).attr("style", "text-align: center;margin-top:" + heightDiff / 2 + "px;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + (25 + node.width / 2) + ", " + (heightDiff / 2 + node.padding / 2) + ")" + ); + } + } else { + if (!htmlLabels) { + const dx = node.width / 2; + const dy = node.padding / 2; + textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); + } else { + const dx = (node.width - bbox.width) / 2; + const dy = (node.height - bbox.height) / 2; + textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); + } + } + switch (node.type) { + case nodeType.DEFAULT: + defaultBkg(bkgElem, node, section); + break; + case nodeType.ROUNDED_RECT: + roundedRectBkg(bkgElem, node); + break; + case nodeType.RECT: + rectBkg(bkgElem, node); + break; + case nodeType.CIRCLE: + bkgElem.attr("transform", "translate(" + node.width / 2 + ", " + +node.height / 2 + ")"); + circleBkg(bkgElem, node); + break; + case nodeType.CLOUD: + cloudBkg(bkgElem, node); + break; + case nodeType.BANG: + bangBkg(bkgElem, node); + break; + case nodeType.HEXAGON: + hexagonBkg(bkgElem, node); + break; + } + setElementForId(node.id, nodeElem); + return node.height; +}; +const drawEdge = function drawEdge2(edgesElem, mindmap, parent, depth, fullSection) { + const section = fullSection % (MAX_SECTIONS - 1); + const sx = parent.x + parent.width / 2; + const sy = parent.y + parent.height / 2; + const ex = mindmap.x + mindmap.width / 2; + const ey = mindmap.y + mindmap.height / 2; + const mx = ex > sx ? sx + Math.abs(sx - ex) / 2 : sx - Math.abs(sx - ex) / 2; + const my = ey > sy ? sy + Math.abs(sy - ey) / 2 : sy - Math.abs(sy - ey) / 2; + const qx = ex > sx ? Math.abs(sx - mx) / 2 + sx : -Math.abs(sx - mx) / 2 + sx; + const qy = ey > sy ? Math.abs(sy - my) / 2 + sy : -Math.abs(sy - my) / 2 + sy; + edgesElem.append("path").attr( + "d", + parent.direction === "TB" || parent.direction === "BT" ? `M${sx},${sy} Q${sx},${qy} ${mx},${my} T${ex},${ey}` : `M${sx},${sy} Q${qx},${sy} ${mx},${my} T${ex},${ey}` + ).attr("class", "edge section-edge-" + section + " edge-depth-" + depth); +}; +const positionNode = function(node) { + const nodeElem = getElementById(node.id); + const x = node.x || 0; + const y = node.y || 0; + nodeElem.attr("transform", "translate(" + x + "," + y + ")"); +}; +const svgDraw = { drawNode, positionNode, drawEdge }; +cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__.use(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__); +function drawNodes(svg, mindmap, section, conf) { + svgDraw.drawNode(svg, mindmap, section, conf); + if (mindmap.children) { + mindmap.children.forEach((child, index) => { + drawNodes(svg, child, section < 0 ? index : section, conf); + }); + } +} +function drawEdges(edgesEl, cy) { + cy.edges().map((edge, id) => { + const data = edge.data(); + if (edge[0]._private.bodyBounds) { + const bounds = edge[0]._private.rscratch; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.trace("Edge: ", id, data); + edgesEl.insert("path").attr( + "d", + `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} ` + ).attr("class", "edge section-edge-" + data.section + " edge-depth-" + data.depth); + } + }); +} +function addNodes(mindmap, cy, conf, level) { + cy.add({ + group: "nodes", + data: { + id: mindmap.id, + labelText: mindmap.descr, + height: mindmap.height, + width: mindmap.width, + level, + nodeId: mindmap.id, + padding: mindmap.padding, + type: mindmap.type + }, + position: { + x: mindmap.x, + y: mindmap.y + } + }); + if (mindmap.children) { + mindmap.children.forEach((child) => { + addNodes(child, cy, conf, level + 1); + cy.add({ + group: "edges", + data: { + id: `${mindmap.id}_${child.id}`, + source: mindmap.id, + target: child.id, + depth: level, + section: child.section + } + }); + }); + } +} +function layoutMindmap(node, conf) { + return new Promise((resolve) => { + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("id", "cy").attr("style", "display:none"); + const cy = cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__({ + container: document.getElementById("cy"), + // container to render in + style: [ + { + selector: "edge", + style: { + "curve-style": "bezier" + } + } + ] + }); + renderEl.remove(); + addNodes(node, cy, conf, 0); + cy.nodes().forEach(function(n) { + n.layoutDimensions = () => { + const data = n.data(); + return { w: data.width, h: data.height }; + }; + }); + cy.layout({ + name: "cose-bilkent", + quality: "proof", + // headless: true, + styleEnabled: false, + animate: false + }).run(); + cy.ready((e) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Ready", e); + resolve(cy); + }); + }); +} +function positionNodes(cy) { + cy.nodes().map((node, id) => { + const data = node.data(); + data.x = node.position().x; + data.y = node.position().y; + svgDraw.positionNode(data); + const el = getElementById(data.nodeId); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Id:", id, "Position: (", node.position().x, ", ", node.position().y, ")", data); + el.attr( + "transform", + `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})` + ); + el.attr("attr", `apa-${id})`); + }); +} +const draw = async (text, id, version, diagObj) => { + const conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)(); + conf.htmlLabels = false; + diagObj.db.clear(); + diagObj.parser.parse(text); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Rendering mindmap diagram\n" + text, diagObj.parser); + const securityLevel = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const mm = diagObj.db.getMindmap(); + const edgesElem = svg.append("g"); + edgesElem.attr("class", "mindmap-edges"); + const nodesElem = svg.append("g"); + nodesElem.attr("class", "mindmap-nodes"); + drawNodes(nodesElem, mm, -1, conf); + const cy = await layoutMindmap(mm, conf); + drawEdges(edgesElem, cy); + positionNodes(cy); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_9__.s)(void 0, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); +}; +const mindmapRenderer = { + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} polygon, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`; +const mindmapStyles = getStyles; +const diagram = { + db: mindmapDb, + renderer: mindmapRenderer, + parser: mindmapParser, + styles: mindmapStyles +}; + +//# sourceMappingURL=mindmap-definition-65b51176.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/935f2afb.7432cd38.js b/assets/js/935f2afb.7432cd38.js new file mode 100644 index 0000000000..1311774a81 --- /dev/null +++ b/assets/js/935f2afb.7432cd38.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"about":[{"type":"link","label":"Introduction","href":"/ecalc/docs/about/","docId":"about/index"},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"CLI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"FAQ / Troubleshooting","href":"/ecalc/docs/about/getting_started/cli/faq","docId":"about/getting_started/cli/faq"}],"href":"/ecalc/docs/about/getting_started/cli/"},{"type":"link","label":"Python Library","href":"/ecalc/docs/about/getting_started/library/","docId":"about/getting_started/library/index"},{"type":"link","label":"YAML","href":"/ecalc/docs/about/getting_started/yaml/","docId":"about/getting_started/yaml/index"}],"href":"/ecalc/docs/about/getting_started/"},{"type":"category","label":"Modelling guide","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Theory","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pump modelling","href":"/ecalc/docs/about/modelling/theory/pump_modelling","docId":"about/modelling/theory/pump_modelling"},{"type":"link","label":"Compressor modelling","href":"/ecalc/docs/about/modelling/theory/compressor_modelling","docId":"about/modelling/theory/compressor_modelling"}],"href":"/ecalc/docs/about/modelling/theory/"},{"type":"category","label":"Setup an eCalc\u2122 Model","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"File format and syntax","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Expressions","href":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","docId":"about/modelling/setup/file_format_and_syntax/expressions"}],"href":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"},{"type":"link","label":"Time series","href":"/ecalc/docs/about/modelling/setup/time_series","docId":"about/modelling/setup/time_series"},{"type":"category","label":"Facility inputs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generator modelling","href":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","docId":"about/modelling/setup/facility_inputs/generator_modelling"},{"type":"category","label":"Pump modelling","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pump chart","href":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","docId":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts"}],"href":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"},{"type":"link","label":"Sampled compressor model","href":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","docId":"about/modelling/setup/facility_inputs/sampled_compressor_model"},{"type":"link","label":"Tabular models","href":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","docId":"about/modelling/setup/facility_inputs/tabular"}],"href":"/ecalc/docs/about/modelling/setup/facility_inputs/"},{"type":"category","label":"Models","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fluid model","href":"/ecalc/docs/about/modelling/setup/models/fluid_model","docId":"about/modelling/setup/models/fluid_model"},{"type":"category","label":"Compressor modelling","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Compressor charts","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","docId":"about/modelling/setup/models/compressor_modelling/compressor_charts/index"},{"type":"category","label":"Compressor train types","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Single speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},{"type":"link","label":"Simplified variable speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},{"type":"link","label":"Variable speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},{"type":"link","label":"Variable speed compressor train model with multiple streams and pressures","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}],"href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},{"type":"link","label":"Fixed speed pressure control","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","docId":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index"}],"href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"},{"type":"link","label":"Turbine modelling","href":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","docId":"about/modelling/setup/models/turbine_modeling"}],"href":"/ecalc/docs/about/modelling/setup/models/"},{"type":"link","label":"Fuel types","href":"/ecalc/docs/about/modelling/setup/fuel_types","docId":"about/modelling/setup/fuel_types"},{"type":"link","label":"Variables","href":"/ecalc/docs/about/modelling/setup/variables","docId":"about/modelling/setup/variables"},{"type":"category","label":"Installations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generator sets","href":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","docId":"about/modelling/setup/installations/generator_sets_in_calculations"},{"type":"link","label":"Pump models","href":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","docId":"about/modelling/setup/installations/pump_models_in_calculations"},{"type":"category","label":"Compressor models","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Compressor","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","docId":"about/modelling/setup/installations/compressor_models_in_calculations/compressor"},{"type":"link","label":"Compressor system","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","docId":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system"},{"type":"link","label":"Variable speed compressor train multiple streams and pressures","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","docId":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}],"href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"},{"type":"link","label":"Tabular models","href":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","docId":"about/modelling/setup/installations/tabular_models_in_calculations"},{"type":"link","label":"Direct consumers","href":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","docId":"about/modelling/setup/installations/direct_consumers"}],"href":"/ecalc/docs/about/modelling/setup/installations/"}],"href":"/ecalc/docs/about/modelling/setup/"},{"type":"category","label":"eCalc\u2122 Workflow","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generic Workflow","href":"/ecalc/docs/about/modelling/workflow/generic_workflow","docId":"about/modelling/workflow/generic_workflow"}],"href":"/ecalc/docs/about/modelling/workflow/"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple model","href":"/ecalc/docs/about/modelling/examples/simple","docId":"about/modelling/examples/simple"},{"type":"link","label":"Advanced model","href":"/ecalc/docs/about/modelling/examples/advanced","docId":"about/modelling/examples/advanced"},{"type":"link","label":"Drogon model","href":"/ecalc/docs/about/modelling/examples/drogon","docId":"about/modelling/examples/drogon"}],"href":"/ecalc/docs/about/modelling/examples/"}],"href":"/ecalc/docs/about/modelling/"},{"type":"category","label":"Reference Documentation","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"YAML keywords","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"ADJUSTMENT","href":"/ecalc/docs/about/references/keywords/ADJUSTMENT","docId":"about/references/keywords/ADJUSTMENT"},{"type":"link","label":"CATEGORY","href":"/ecalc/docs/about/references/keywords/CATEGORY","docId":"about/references/keywords/CATEGORY"},{"type":"link","label":"COMPRESSOR_MODEL","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","docId":"about/references/keywords/COMPRESSOR_MODEL"},{"type":"link","label":"COMPRESSORS","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","docId":"about/references/keywords/COMPRESSOR_SYSTEM"},{"type":"link","label":"COMPRESSOR_TRAIN_MODEL","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","docId":"about/references/keywords/COMPRESSOR_TRAIN_MODEL"},{"type":"link","label":"CONDITION","href":"/ecalc/docs/about/references/keywords/CONDITION","docId":"about/references/keywords/CONDITION"},{"type":"link","label":"CONDITIONS","href":"/ecalc/docs/about/references/keywords/CONDITIONS","docId":"about/references/keywords/CONDITIONS"},{"type":"link","label":"CONSTANT","href":"/ecalc/docs/about/references/keywords/CONSTANT","docId":"about/references/keywords/CONSTANT"},{"type":"link","label":"CONSUMERS","href":"/ecalc/docs/about/references/keywords/CONSUMERS","docId":"about/references/keywords/CONSUMERS"},{"type":"link","label":"CONSUMPTION_RATE_TYPE","href":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","docId":"about/references/keywords/CONSUMPTION_RATE_TYPE"},{"type":"link","label":"CONTROL_MARGIN","href":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","docId":"about/references/keywords/CONTROL_MARGIN"},{"type":"link","label":"CONTROL_MARGIN_UNIT","href":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","docId":"about/references/keywords/CONTROL_MARGIN_UNIT"},{"type":"link","label":"CROSSOVER","href":"/ecalc/docs/about/references/keywords/CROSSOVER","docId":"about/references/keywords/CROSSOVER"},{"type":"link","label":"CURVE","href":"/ecalc/docs/about/references/keywords/CURVE","docId":"about/references/keywords/CURVE"},{"type":"link","label":"CURVES","href":"/ecalc/docs/about/references/keywords/CURVES","docId":"about/references/keywords/CURVES"},{"type":"link","label":"DIRECT_EMITTERS","href":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","docId":"about/references/keywords/DIRECT_EMITTERS"},{"type":"link","label":"DISCHARGE_PRESSURE","href":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","docId":"about/references/keywords/DISCHARGE_PRESSURE"},{"type":"link","label":"DOWNSTREAM_PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","docId":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"},{"type":"link","label":"EFFICIENCY","href":"/ecalc/docs/about/references/keywords/EFFICIENCY","docId":"about/references/keywords/EFFICIENCY"},{"type":"link","label":"ELECTRICITY2FUEL","href":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","docId":"about/references/keywords/ELECTRICITY2FUEL"},{"type":"link","label":"EMISSIONS","href":"/ecalc/docs/about/references/keywords/EMISSIONS","docId":"about/references/keywords/EMISSIONS"},{"type":"link","label":"EMISSION_NAME","href":"/ecalc/docs/about/references/keywords/EMISSION_NAME","docId":"about/references/keywords/EMISSION_NAME"},{"type":"link","label":"EMISSION_RATE","href":"/ecalc/docs/about/references/keywords/EMISSION_RATE","docId":"about/references/keywords/EMISSION_RATE"},{"type":"link","label":"EMITTER_MODEL","href":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","docId":"about/references/keywords/EMITTER_MODEL"},{"type":"link","label":"END","href":"/ecalc/docs/about/references/keywords/END","docId":"about/references/keywords/END"},{"type":"link","label":"ENERGYFUNCTION","href":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","docId":"about/references/keywords/ENERGYFUNCTION"},{"type":"link","label":"ENERGY_USAGE_MODEL","href":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","docId":"about/references/keywords/ENERGY_USAGE_MODEL"},{"type":"link","label":"EXPRESSION","href":"/ecalc/docs/about/references/keywords/EXPRESSION","docId":"about/references/keywords/EXPRESSION"},{"type":"link","label":"EXTRAPOLATION","href":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","docId":"about/references/keywords/EXTRAPOLATION"},{"type":"link","label":"FACILITY_INPUTS","href":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","docId":"about/references/keywords/FACILITY_INPUTS"},{"type":"link","label":"FACTOR","href":"/ecalc/docs/about/references/keywords/FACTOR","docId":"about/references/keywords/FACTOR"},{"type":"link","label":"FILE","href":"/ecalc/docs/about/references/keywords/FILE","docId":"about/references/keywords/FILE"},{"type":"link","label":"FLUID_DENSITY","href":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","docId":"about/references/keywords/FLUID_DENSITY"},{"type":"link","label":"FLUID_MODEL","href":"/ecalc/docs/about/references/keywords/FLUID_MODEL","docId":"about/references/keywords/FLUID_MODEL"},{"type":"link","label":"FUEL","href":"/ecalc/docs/about/references/keywords/FUEL","docId":"about/references/keywords/FUEL"},{"type":"link","label":"FUELCONSUMERS","href":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","docId":"about/references/keywords/FUELCONSUMERS"},{"type":"link","label":"FUELRATE","href":"/ecalc/docs/about/references/keywords/FUELRATE","docId":"about/references/keywords/FUELRATE"},{"type":"link","label":"FUEL_TYPES","href":"/ecalc/docs/about/references/keywords/FUEL_TYPES","docId":"about/references/keywords/FUEL_TYPES"},{"type":"link","label":"GENERATORSETS","href":"/ecalc/docs/about/references/keywords/GENERATORSETS","docId":"about/references/keywords/GENERATORSETS"},{"type":"link","label":"HCEXPORT","href":"/ecalc/docs/about/references/keywords/HCEXPORT","docId":"about/references/keywords/HCEXPORT"},{"type":"link","label":"HEAD","href":"/ecalc/docs/about/references/keywords/HEAD","docId":"about/references/keywords/HEAD"},{"type":"link","label":"HEAD_MARGIN","href":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","docId":"about/references/keywords/HEAD_MARGIN"},{"type":"link","label":"INFLUENCE_TIME_VECTOR","href":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","docId":"about/references/keywords/INFLUENCE_TIME_VECTOR"},{"type":"link","label":"INLET_TEMPERATURE","href":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","docId":"about/references/keywords/INLET_TEMPERATURE"},{"type":"link","label":"INSTALLATIONS","href":"/ecalc/docs/about/references/keywords/INSTALLATIONS","docId":"about/references/keywords/INSTALLATIONS"},{"type":"link","label":"INTERPOLATION_TYPE","href":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","docId":"about/references/keywords/INTERPOLATION_TYPE"},{"type":"link","label":"INTERSTAGE_CONTROL_PRESSURE","href":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","docId":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},{"type":"link","label":"LOAD","href":"/ecalc/docs/about/references/keywords/LOAD","docId":"about/references/keywords/LOAD"},{"type":"link","label":"LOWER_HEATING_VALUE","href":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","docId":"about/references/keywords/LOWER_HEATING_VALUE"},{"type":"link","label":"MAXIMUM_DISCHARGE_PRESSURE","href":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","docId":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE"},{"type":"link","label":"MODELS","href":"/ecalc/docs/about/references/keywords/MODELS","docId":"about/references/keywords/MODELS"},{"type":"link","label":"NAME","href":"/ecalc/docs/about/references/keywords/NAME","docId":"about/references/keywords/NAME"},{"type":"link","label":"OPERATIONAL_SETTINGS","href":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","docId":"about/references/keywords/OPERATIONAL_SETTINGS"},{"type":"link","label":"POWERLOSSFACTOR","href":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","docId":"about/references/keywords/POWERLOSSFACTOR"},{"type":"link","label":"POWER_ADJUSTMENT_CONSTANT","href":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","docId":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT"},{"type":"link","label":"PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","docId":"about/references/keywords/PRESSURE_CONTROL"},{"type":"link","label":"PRICE","href":"/ecalc/docs/about/references/keywords/PRICE","docId":"about/references/keywords/PRICE"},{"type":"link","label":"PUMPS","href":"/ecalc/docs/about/references/keywords/PUMPS","docId":"about/references/keywords/PUMPS"},{"type":"link","label":"QUOTA","href":"/ecalc/docs/about/references/keywords/QUOTA","docId":"about/references/keywords/QUOTA"},{"type":"link","label":"RATE","href":"/ecalc/docs/about/references/keywords/RATE","docId":"about/references/keywords/RATE"},{"type":"link","label":"RATE_FRACTIONS","href":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","docId":"about/references/keywords/RATE_FRACTIONS"},{"type":"link","label":"RATE_PER_STREAM","href":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","docId":"about/references/keywords/RATE_PER_STREAM"},{"type":"link","label":"REGULARITY","href":"/ecalc/docs/about/references/keywords/REGULARITY","docId":"about/references/keywords/REGULARITY"},{"type":"link","label":"STAGES","href":"/ecalc/docs/about/references/keywords/STAGES","docId":"about/references/keywords/STAGES"},{"type":"link","label":"START","href":"/ecalc/docs/about/references/keywords/START","docId":"about/references/keywords/START"},{"type":"link","label":"STREAM","href":"/ecalc/docs/about/references/keywords/STREAM","docId":"about/references/keywords/STREAM"},{"type":"link","label":"STREAMS","href":"/ecalc/docs/about/references/keywords/STREAMS","docId":"about/references/keywords/STREAMS"},{"type":"link","label":"SUCTION_PRESSURE","href":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","docId":"about/references/keywords/SUCTION_PRESSURE"},{"type":"link","label":"TAX","href":"/ecalc/docs/about/references/keywords/TAX","docId":"about/references/keywords/TAX"},{"type":"link","label":"TIME_SERIES","href":"/ecalc/docs/about/references/keywords/TIME_SERIES","docId":"about/references/keywords/TIME_SERIES"},{"type":"link","label":"TOTAL_SYSTEM_RATE","href":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","docId":"about/references/keywords/TOTAL_SYSTEM_RATE"},{"type":"link","label":"TURBINE_EFFICIENCIES","href":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","docId":"about/references/keywords/TURBINE_EFFICIENCIES"},{"type":"link","label":"TURBINE_LOAD","href":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","docId":"about/references/keywords/TURBINE_LOAD"},{"type":"link","label":"TURBINE_MODEL","href":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","docId":"about/references/keywords/TURBINE_MODEL"},{"type":"link","label":"TYPE","href":"/ecalc/docs/about/references/keywords/TYPE","docId":"about/references/keywords/TYPE"},{"type":"link","label":"UNITS","href":"/ecalc/docs/about/references/keywords/UNITS","docId":"about/references/keywords/UNITS"},{"type":"link","label":"UPSTREAM_PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","docId":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL"},{"type":"link","label":"VARIABLES","href":"/ecalc/docs/about/references/keywords/VARIABLES","docId":"about/references/keywords/VARIABLES"},{"type":"link","label":"!include","href":"/ecalc/docs/about/references/keywords/include","docId":"about/references/keywords/include"}],"href":"/ecalc/docs/about/references/keywords/"},{"type":"link","label":"API reference","href":"/ecalc/docs/about/references/api/","docId":"about/references/api/index"},{"type":"link","label":"CLI","href":"/ecalc/docs/about/references/cli_reference","docId":"about/references/cli_reference"}],"href":"/ecalc/docs/about/references/"},{"type":"category","label":"Migrating eCalc versions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"v7 to v8","href":"/ecalc/docs/about/migration_guides/v7_to_v8","docId":"about/migration_guides/v7_to_v8"},{"type":"link","label":"v8 to v8.1","href":"/ecalc/docs/about/migration_guides/v8_to_v81","docId":"about/migration_guides/v8_to_v81"},{"type":"link","label":"v8.1 to v8.2","href":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","docId":"about/migration_guides/v8-1_to_v8-2"},{"type":"link","label":"v8.2 to v8.3","href":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","docId":"about/migration_guides/v8-2_to_v8-3"},{"type":"link","label":"v8.3 to v8.4","href":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","docId":"about/migration_guides/v8-3_to_v8-4"}],"href":"/ecalc/docs/about/migration_guides/"},{"type":"link","label":"Output data","href":"/ecalc/docs/about/miscellaneous/","docId":"about/miscellaneous/index"}],"contribute":[{"type":"link","label":"Get started","href":"/ecalc/docs/contribute/get-started","docId":"contribute/get-started"},{"type":"category","label":"Documentation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/ecalc/docs/contribute/documentation-guide/documentation","docId":"contribute/documentation-guide/documentation"},{"type":"link","label":"Markdown","href":"/ecalc/docs/contribute/documentation-guide/markdown","docId":"contribute/documentation-guide/markdown"}],"href":"/ecalc/docs/category/documentation"},{"type":"category","label":"Guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Git","href":"/ecalc/docs/contribute/guides/git","docId":"contribute/guides/git"},{"type":"link","label":"Conventional Commits","href":"/ecalc/docs/contribute/guides/conventional-commits","docId":"contribute/guides/conventional-commits"}],"href":"/ecalc/docs/category/guides"}],"changelog":[{"type":"link","label":"v8.5 (Latest)","href":"/ecalc/docs/changelog/v8.5-release","docId":"changelog/v8-5"},{"type":"link","label":"Next","href":"/ecalc/docs/changelog/latest","docId":"changelog/next"},{"type":"link","label":"---","href":"/ecalc/docs/changelog/separator","docId":"changelog/separator"},{"type":"link","label":"v7.0","href":"/ecalc/docs/changelog/v7-0-release","docId":"changelog/v7-0"},{"type":"link","label":"v7.1","href":"/ecalc/docs/changelog/v7-1-release","docId":"changelog/v7-1"},{"type":"link","label":"v7.2","href":"/ecalc/docs/changelog/v7-2-release","docId":"changelog/v7-2"},{"type":"link","label":"v7.3","href":"/ecalc/docs/changelog/v7-3-release","docId":"changelog/v7-3"},{"type":"link","label":"v7.4","href":"/ecalc/docs/changelog/v7-4-release","docId":"changelog/v7-4"},{"type":"link","label":"v7.5","href":"/ecalc/docs/changelog/v7-5-release","docId":"changelog/v7-5"},{"type":"link","label":"v7.6","href":"/ecalc/docs/changelog/v7-6-release","docId":"changelog/v7-6"},{"type":"link","label":"v8.0","href":"/ecalc/docs/changelog/v8.0-release","docId":"changelog/v8-0"},{"type":"link","label":"v8.1","href":"/ecalc/docs/changelog/v8.1-release","docId":"changelog/v8-1"},{"type":"link","label":"v8.2","href":"/ecalc/docs/changelog/v8.2-release","docId":"changelog/v8-2"},{"type":"link","label":"v8.3","href":"/ecalc/docs/changelog/v8.3-release","docId":"changelog/v8-3"},{"type":"link","label":"v8.4 (Latest)","href":"/ecalc/docs/changelog/v8.4-release","docId":"changelog/v8-4"},{"type":"link","label":"Changelog","href":"/ecalc/docs/changelog/","docId":"changelog/changelog"}]},"docs":{"about/getting_started/cli/faq":{"id":"about/getting_started/cli/faq","title":"FAQ / Troubleshooting","description":"eCalc FAQ","sidebar":"about"},"about/getting_started/cli/index":{"id":"about/getting_started/cli/index","title":"CLI","description":"Getting started with eCalc CLI","sidebar":"about"},"about/getting_started/index":{"id":"about/getting_started/index","title":"Getting started","description":"Getting started with eCalc","sidebar":"about"},"about/getting_started/library/index":{"id":"about/getting_started/library/index","title":"Python Library","description":"Getting started with eCalc Python Library","sidebar":"about"},"about/getting_started/yaml/index":{"id":"about/getting_started/yaml/index","title":"YAML","description":"Getting started with YAML","sidebar":"about"},"about/index":{"id":"about/index","title":"Introduction","description":"Introduction to eCalc documentation","sidebar":"about"},"about/migration_guides/index":{"id":"about/migration_guides/index","title":"Migrating eCalc versions","description":"Getting started with eCalc","sidebar":"about"},"about/migration_guides/v7_to_v8":{"id":"about/migration_guides/v7_to_v8","title":"v7 to v8","description":"v7 to v8 migration","sidebar":"about"},"about/migration_guides/v8_to_v81":{"id":"about/migration_guides/v8_to_v81","title":"v8 to v8.1","description":"v8 to v8.1 migration","sidebar":"about"},"about/migration_guides/v8-1_to_v8-2":{"id":"about/migration_guides/v8-1_to_v8-2","title":"v8.1 to v8.2","description":"v8.1 to v8.2 migration","sidebar":"about"},"about/migration_guides/v8-2_to_v8-3":{"id":"about/migration_guides/v8-2_to_v8-3","title":"v8.2 to v8.3","description":"v8.2 to v8.3 migration","sidebar":"about"},"about/migration_guides/v8-3_to_v8-4":{"id":"about/migration_guides/v8-3_to_v8-4","title":"v8.3 to v8.4","description":"v8.3 to v8.4 migration","sidebar":"about"},"about/miscellaneous/index":{"id":"about/miscellaneous/index","title":"Output data","description":"Output data","sidebar":"about"},"about/modelling/examples/advanced":{"id":"about/modelling/examples/advanced","title":"Advanced model","description":"An advanced model using consumer systems and two installations","sidebar":"about"},"about/modelling/examples/drogon":{"id":"about/modelling/examples/drogon","title":"Drogon model","description":"Model using Drogon input data","sidebar":"about"},"about/modelling/examples/index":{"id":"about/modelling/examples/index","title":"Examples","description":"Examples of eCalc usage","sidebar":"about"},"about/modelling/examples/simple":{"id":"about/modelling/examples/simple","title":"Simple model","description":"A simple model with a single installation","sidebar":"about"},"about/modelling/index":{"id":"about/modelling/index","title":"Modelling guide","description":"eCalc modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/generator_modelling":{"id":"about/modelling/setup/facility_inputs/generator_modelling","title":"Generator modelling","description":"Generator modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/index":{"id":"about/modelling/setup/facility_inputs/index","title":"Facility inputs","description":"Guide on how to use facility inputs","sidebar":"about"},"about/modelling/setup/facility_inputs/pump_modelling/index":{"id":"about/modelling/setup/facility_inputs/pump_modelling/index","title":"Pump modelling","description":"Pump modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/pump_modelling/pump_charts":{"id":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts","title":"Pump chart","description":"Energy usage for pumps is not based on pre-sampled data between rates,","sidebar":"about"},"about/modelling/setup/facility_inputs/sampled_compressor_model":{"id":"about/modelling/setup/facility_inputs/sampled_compressor_model","title":"Sampled compressor model","description":"Sampled compressor model","sidebar":"about"},"about/modelling/setup/facility_inputs/tabular":{"id":"about/modelling/setup/facility_inputs/tabular","title":"Tabular models","description":"Tabular models","sidebar":"about"},"about/modelling/setup/file_format_and_syntax/expressions":{"id":"about/modelling/setup/file_format_and_syntax/expressions","title":"Expressions","description":"eCalc EXPRESSIONS","sidebar":"about"},"about/modelling/setup/file_format_and_syntax/index":{"id":"about/modelling/setup/file_format_and_syntax/index","title":"File format and syntax","description":"YAML file format and syntax guide","sidebar":"about"},"about/modelling/setup/fuel_types":{"id":"about/modelling/setup/fuel_types","title":"Fuel types","description":"Guide on how to use fuel types","sidebar":"about"},"about/modelling/setup/index":{"id":"about/modelling/setup/index","title":"Setup an eCalc\u2122 Model","description":"Guide on how to setup an eCalc\u2122 model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/compressor":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor","title":"Compressor","description":"COMPRESSOR Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","title":"Compressor system","description":"COMPRESSOR_SYSTEM Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/index":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/index","title":"Compressor models","description":"Using compressor models in calculations","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","title":"Variable speed compressor train multiple streams and pressures","description":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/direct_consumers":{"id":"about/modelling/setup/installations/direct_consumers","title":"Direct consumers","description":"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either","sidebar":"about"},"about/modelling/setup/installations/generator_sets_in_calculations":{"id":"about/modelling/setup/installations/generator_sets_in_calculations","title":"Generator sets","description":"Using generator sets in calculations","sidebar":"about"},"about/modelling/setup/installations/index":{"id":"about/modelling/setup/installations/index","title":"Installations","description":"Guide on how to use installations","sidebar":"about"},"about/modelling/setup/installations/pump_models_in_calculations":{"id":"about/modelling/setup/installations/pump_models_in_calculations","title":"Pump models","description":"Using pumps in calculations","sidebar":"about"},"about/modelling/setup/installations/tabular_models_in_calculations":{"id":"about/modelling/setup/installations/tabular_models_in_calculations","title":"Tabular models","description":"Using tabular models in calculations","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_charts/index":{"id":"about/modelling/setup/models/compressor_modelling/compressor_charts/index","title":"Compressor charts","description":"Introduction into compressor charts","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/index":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/index","title":"Compressor train types","description":"This section outlines the various compressor train types that are available in eCalc\u2122.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","title":"Simplified variable speed compressor train","description":"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","title":"Single speed compressor train","description":"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","title":"Variable speed compressor train","description":"In this model all compressors in the train have the same speed, and the model is build on a forward model of","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","title":"Variable speed compressor train model with multiple streams and pressures","description":"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index":{"id":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index","title":"Fixed speed pressure control","description":"Introduction to fixed speed pressure control","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/index":{"id":"about/modelling/setup/models/compressor_modelling/index","title":"Compressor modelling","description":"Compressor modelling","sidebar":"about"},"about/modelling/setup/models/fluid_model":{"id":"about/modelling/setup/models/fluid_model","title":"Fluid model","description":"Selecting a fluid model in eCalc","sidebar":"about"},"about/modelling/setup/models/index":{"id":"about/modelling/setup/models/index","title":"Models","description":"Guide on how to use models in eCalc\u2122","sidebar":"about"},"about/modelling/setup/models/turbine_modeling":{"id":"about/modelling/setup/models/turbine_modeling","title":"Turbine modelling","description":"Turbine modelling","sidebar":"about"},"about/modelling/setup/time_series":{"id":"about/modelling/setup/time_series","title":"Time series","description":"Time series guide and description","sidebar":"about"},"about/modelling/setup/variables":{"id":"about/modelling/setup/variables","title":"Variables","description":"Variables guide and description","sidebar":"about"},"about/modelling/theory/compressor_modelling":{"id":"about/modelling/theory/compressor_modelling","title":"Compressor modelling","description":"Compressor modelling theory","sidebar":"about"},"about/modelling/theory/index":{"id":"about/modelling/theory/index","title":"Theory","description":"Core theory about eCalc\u2122","sidebar":"about"},"about/modelling/theory/pump_modelling":{"id":"about/modelling/theory/pump_modelling","title":"Pump modelling","description":"Pump modelling theory","sidebar":"about"},"about/modelling/workflow/generic_workflow":{"id":"about/modelling/workflow/generic_workflow","title":"Generic Workflow","description":"Generic workflow","sidebar":"about"},"about/modelling/workflow/index":{"id":"about/modelling/workflow/index","title":"eCalc\u2122 Workflow","description":"eCalc modelling","sidebar":"about"},"about/references/api/index":{"id":"about/references/api/index","title":"API reference","description":"Generated API reference for the libecalc library can be found here.","sidebar":"about"},"about/references/cli_reference":{"id":"about/references/cli_reference","title":"ecalc","description":"Args:","sidebar":"about"},"about/references/index":{"id":"about/references/index","title":"Reference documentation","description":"Getting started with eCalc","sidebar":"about"},"about/references/keywords/ADJUSTMENT":{"id":"about/references/keywords/ADJUSTMENT","title":"ADJUSTMENT","description":"eCalc Model","sidebar":"about"},"about/references/keywords/CATEGORY":{"id":"about/references/keywords/CATEGORY","title":"CATEGORY","description":"eCalc Model","sidebar":"about"},"about/references/keywords/COMPRESSOR_MODEL":{"id":"about/references/keywords/COMPRESSOR_MODEL","title":"COMPRESSOR_MODEL","description":"ENERGYUSAGEMODEL / COMPRESSORMODEL","sidebar":"about"},"about/references/keywords/COMPRESSOR_SYSTEM":{"id":"about/references/keywords/COMPRESSOR_SYSTEM","title":"COMPRESSORS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/COMPRESSOR_TRAIN_MODEL":{"id":"about/references/keywords/COMPRESSOR_TRAIN_MODEL","title":"COMPRESSOR_TRAIN_MODEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONDITION":{"id":"about/references/keywords/CONDITION","title":"CONDITION","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONDITIONS":{"id":"about/references/keywords/CONDITIONS","title":"CONDITIONS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONSTANT":{"id":"about/references/keywords/CONSTANT","title":"CONSTANT","description":"FACILITYINPUTS /","sidebar":"about"},"about/references/keywords/CONSUMERS":{"id":"about/references/keywords/CONSUMERS","title":"CONSUMERS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONSUMPTION_RATE_TYPE":{"id":"about/references/keywords/CONSUMPTION_RATE_TYPE","title":"CONSUMPTION_RATE_TYPE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONTROL_MARGIN":{"id":"about/references/keywords/CONTROL_MARGIN","title":"CONTROL_MARGIN","description":"MODELS /","sidebar":"about"},"about/references/keywords/CONTROL_MARGIN_UNIT":{"id":"about/references/keywords/CONTROL_MARGIN_UNIT","title":"CONTROL_MARGIN_UNIT","description":"MODELS /","sidebar":"about"},"about/references/keywords/CROSSOVER":{"id":"about/references/keywords/CROSSOVER","title":"CROSSOVER","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CURVE":{"id":"about/references/keywords/CURVE","title":"CURVE","description":"Description","sidebar":"about"},"about/references/keywords/CURVES":{"id":"about/references/keywords/CURVES","title":"CURVES","description":"Description","sidebar":"about"},"about/references/keywords/DIRECT_EMITTERS":{"id":"about/references/keywords/DIRECT_EMITTERS","title":"DIRECT_EMITTERS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/DISCHARGE_PRESSURE":{"id":"about/references/keywords/DISCHARGE_PRESSURE","title":"DISCHARGE_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL":{"id":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","title":"DOWNSTREAM_PRESSURE_CONTROL","description":"MODELS /","sidebar":"about"},"about/references/keywords/EFFICIENCY":{"id":"about/references/keywords/EFFICIENCY","title":"EFFICIENCY","description":"Description","sidebar":"about"},"about/references/keywords/ELECTRICITY2FUEL":{"id":"about/references/keywords/ELECTRICITY2FUEL","title":"ELECTRICITY2FUEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/EMISSION_NAME":{"id":"about/references/keywords/EMISSION_NAME","title":"EMISSION_NAME","description":"[...] /","sidebar":"about"},"about/references/keywords/EMISSION_RATE":{"id":"about/references/keywords/EMISSION_RATE","title":"EMISSION_RATE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/EMISSIONS":{"id":"about/references/keywords/EMISSIONS","title":"EMISSIONS","description":"FUELTYPES /","sidebar":"about"},"about/references/keywords/EMITTER_MODEL":{"id":"about/references/keywords/EMITTER_MODEL","title":"EMITTER_MODEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/END":{"id":"about/references/keywords/END","title":"END","description":"END","sidebar":"about"},"about/references/keywords/ENERGY_USAGE_MODEL":{"id":"about/references/keywords/ENERGY_USAGE_MODEL","title":"ENERGY_USAGE_MODEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/ENERGYFUNCTION":{"id":"about/references/keywords/ENERGYFUNCTION","title":"ENERGYFUNCTION","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/EXPRESSION":{"id":"about/references/keywords/EXPRESSION","title":"EXPRESSION","description":"VARIABLES /","sidebar":"about"},"about/references/keywords/EXTRAPOLATION":{"id":"about/references/keywords/EXTRAPOLATION","title":"EXTRAPOLATION","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/FACILITY_INPUTS":{"id":"about/references/keywords/FACILITY_INPUTS","title":"FACILITY_INPUTS","description":"FACILITYINPUTS","sidebar":"about"},"about/references/keywords/FACTOR":{"id":"about/references/keywords/FACTOR","title":"FACTOR","description":"[...] /","sidebar":"about"},"about/references/keywords/FILE":{"id":"about/references/keywords/FILE","title":"FILE","description":"... /","sidebar":"about"},"about/references/keywords/FLUID_DENSITY":{"id":"about/references/keywords/FLUID_DENSITY","title":"FLUID_DENSITY","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/FLUID_MODEL":{"id":"about/references/keywords/FLUID_MODEL","title":"FLUID_MODEL","description":"Description","sidebar":"about"},"about/references/keywords/FUEL":{"id":"about/references/keywords/FUEL","title":"FUEL","description":"... /","sidebar":"about"},"about/references/keywords/FUEL_TYPES":{"id":"about/references/keywords/FUEL_TYPES","title":"FUEL_TYPES","description":"FUELTYPES","sidebar":"about"},"about/references/keywords/FUELCONSUMERS":{"id":"about/references/keywords/FUELCONSUMERS","title":"FUELCONSUMERS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/FUELRATE":{"id":"about/references/keywords/FUELRATE","title":"FUELRATE","description":"INSTALLATIONS","sidebar":"about"},"about/references/keywords/GENERATORSETS":{"id":"about/references/keywords/GENERATORSETS","title":"GENERATORSETS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/HCEXPORT":{"id":"about/references/keywords/HCEXPORT","title":"HCEXPORT","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/HEAD":{"id":"about/references/keywords/HEAD","title":"HEAD","description":"Description","sidebar":"about"},"about/references/keywords/HEAD_MARGIN":{"id":"about/references/keywords/HEAD_MARGIN","title":"HEAD_MARGIN","description":"FACILITYINPUTS /","sidebar":"about"},"about/references/keywords/include":{"id":"about/references/keywords/include","title":"!include","description":"Description","sidebar":"about"},"about/references/keywords/index":{"id":"about/references/keywords/index","title":"YAML keywords","description":"eCalc KEYWORDS","sidebar":"about"},"about/references/keywords/INFLUENCE_TIME_VECTOR":{"id":"about/references/keywords/INFLUENCE_TIME_VECTOR","title":"INFLUENCE_TIME_VECTOR","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/INLET_TEMPERATURE":{"id":"about/references/keywords/INLET_TEMPERATURE","title":"INLET_TEMPERATURE","description":"MODELS / INLETTEMPERATURE","sidebar":"about"},"about/references/keywords/INSTALLATIONS":{"id":"about/references/keywords/INSTALLATIONS","title":"INSTALLATIONS","description":"INSTALLATIONS","sidebar":"about"},"about/references/keywords/INTERPOLATION_TYPE":{"id":"about/references/keywords/INTERPOLATION_TYPE","title":"INTERPOLATION_TYPE","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE":{"id":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","title":"INTERSTAGE_CONTROL_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/LOAD":{"id":"about/references/keywords/LOAD","title":"LOAD","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/LOWER_HEATING_VALUE":{"id":"about/references/keywords/LOWER_HEATING_VALUE","title":"LOWER_HEATING_VALUE","description":"Description","sidebar":"about"},"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE":{"id":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","title":"MAXIMUM_DISCHARGE_PRESSURE","description":"MODELS /","sidebar":"about"},"about/references/keywords/MODELS":{"id":"about/references/keywords/MODELS","title":"MODELS","description":"MODELS","sidebar":"about"},"about/references/keywords/NAME":{"id":"about/references/keywords/NAME","title":"NAME","description":"[...] /","sidebar":"about"},"about/references/keywords/OPERATIONAL_SETTINGS":{"id":"about/references/keywords/OPERATIONAL_SETTINGS","title":"OPERATIONAL_SETTINGS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/POWER_ADJUSTMENT_CONSTANT":{"id":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT","title":"POWER_ADJUSTMENT_CONSTANT","description":"MODELS /","sidebar":"about"},"about/references/keywords/POWERLOSSFACTOR":{"id":"about/references/keywords/POWERLOSSFACTOR","title":"POWERLOSSFACTOR","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/PRESSURE_CONTROL":{"id":"about/references/keywords/PRESSURE_CONTROL","title":"PRESSURE_CONTROL","description":"Description","sidebar":"about"},"about/references/keywords/PRICE":{"id":"about/references/keywords/PRICE","title":"PRICE","description":"FUELTYPES /","sidebar":"about"},"about/references/keywords/PUMPS":{"id":"about/references/keywords/PUMPS","title":"PUMPS","description":"INSTALLATIONS / [...] /","sidebar":"about"},"about/references/keywords/QUOTA":{"id":"about/references/keywords/QUOTA","title":"QUOTA","description":"[...] /","sidebar":"about"},"about/references/keywords/RATE":{"id":"about/references/keywords/RATE","title":"RATE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/RATE_FRACTIONS":{"id":"about/references/keywords/RATE_FRACTIONS","title":"RATE_FRACTIONS","description":"Description","sidebar":"about"},"about/references/keywords/RATE_PER_STREAM":{"id":"about/references/keywords/RATE_PER_STREAM","title":"RATE_PER_STREAM","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/REGULARITY":{"id":"about/references/keywords/REGULARITY","title":"REGULARITY","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/STAGES":{"id":"about/references/keywords/STAGES","title":"STAGES","description":"MODELS /","sidebar":"about"},"about/references/keywords/START":{"id":"about/references/keywords/START","title":"START","description":"START","sidebar":"about"},"about/references/keywords/STREAM":{"id":"about/references/keywords/STREAM","title":"STREAM","description":"MODELS /","sidebar":"about"},"about/references/keywords/STREAMS":{"id":"about/references/keywords/STREAMS","title":"STREAMS","description":"MODELS /","sidebar":"about"},"about/references/keywords/SUCTION_PRESSURE":{"id":"about/references/keywords/SUCTION_PRESSURE","title":"SUCTION_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/TAX":{"id":"about/references/keywords/TAX","title":"TAX","description":"FUELTYPES /","sidebar":"about"},"about/references/keywords/TIME_SERIES":{"id":"about/references/keywords/TIME_SERIES","title":"TIME_SERIES","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/TOTAL_SYSTEM_RATE":{"id":"about/references/keywords/TOTAL_SYSTEM_RATE","title":"TOTAL_SYSTEM_RATE","description":"INSTALLATIONS / [...] /","sidebar":"about"},"about/references/keywords/TURBINE_EFFICIENCIES":{"id":"about/references/keywords/TURBINE_EFFICIENCIES","title":"TURBINE_EFFICIENCIES","description":"Description","sidebar":"about"},"about/references/keywords/TURBINE_LOAD":{"id":"about/references/keywords/TURBINE_LOAD","title":"TURBINE_LOAD","description":"Description","sidebar":"about"},"about/references/keywords/TURBINE_MODEL":{"id":"about/references/keywords/TURBINE_MODEL","title":"TURBINE_MODEL","description":"Description","sidebar":"about"},"about/references/keywords/TYPE":{"id":"about/references/keywords/TYPE","title":"TYPE","description":"[...] /","sidebar":"about"},"about/references/keywords/UNITS":{"id":"about/references/keywords/UNITS","title":"UNITS","description":"Description","sidebar":"about"},"about/references/keywords/UPSTREAM_PRESSURE_CONTROL":{"id":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL","title":"UPSTREAM_PRESSURE_CONTROL","description":"MODELS /","sidebar":"about"},"about/references/keywords/VARIABLES":{"id":"about/references/keywords/VARIABLES","title":"VARIABLES","description":"VARIABLES","sidebar":"about"},"changelog/changelog":{"id":"changelog/changelog","title":"Changelog","description":"8.5.0 (2023-10-30)","sidebar":"changelog"},"changelog/next":{"id":"changelog/next","title":"Next","description":"New Features","sidebar":"changelog"},"changelog/separator":{"id":"changelog/separator","title":"---","description":"","sidebar":"changelog"},"changelog/v7-0":{"id":"changelog/v7-0","title":"v7.0","description":"Features","sidebar":"changelog"},"changelog/v7-1":{"id":"changelog/v7-1","title":"v7.1","description":"Features","sidebar":"changelog"},"changelog/v7-2":{"id":"changelog/v7-2","title":"v7.2","description":"Features","sidebar":"changelog"},"changelog/v7-3":{"id":"changelog/v7-3","title":"v7.3","description":"Features","sidebar":"changelog"},"changelog/v7-4":{"id":"changelog/v7-4","title":"v7.4","description":"Features","sidebar":"changelog"},"changelog/v7-5":{"id":"changelog/v7-5","title":"v7.5","description":"Features","sidebar":"changelog"},"changelog/v7-6":{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","sidebar":"changelog"},"changelog/v8-0":{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","sidebar":"changelog"},"changelog/v8-1":{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","sidebar":"changelog"},"changelog/v8-2":{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","sidebar":"changelog"},"changelog/v8-3":{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","sidebar":"changelog"},"changelog/v8-4":{"id":"changelog/v8-4","title":"v8.4 (Latest)","description":"New Features","sidebar":"changelog"},"changelog/v8-5":{"id":"changelog/v8-5","title":"v8.5 (Latest)","description":"New Features","sidebar":"changelog"},"contribute/documentation-guide/documentation":{"id":"contribute/documentation-guide/documentation","title":"Overview","description":"This site was generated from the contents of your documentation folder using Docusaurus.","sidebar":"contribute"},"contribute/documentation-guide/markdown":{"id":"contribute/documentation-guide/markdown","title":"Markdown","description":"Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.","sidebar":"contribute"},"contribute/get-started":{"id":"contribute/get-started","title":"Get started","description":"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96","sidebar":"contribute"},"contribute/guides/conventional-commits":{"id":"contribute/guides/conventional-commits","title":"Conventional Commits","description":"Git commits are required to follow conventional commits.","sidebar":"contribute"},"contribute/guides/git":{"id":"contribute/guides/git","title":"Git","description":"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base.","sidebar":"contribute"}}}')}}]); \ No newline at end of file diff --git a/assets/js/941.1bbe0034.js b/assets/js/941.1bbe0034.js new file mode 100644 index 0000000000..02c2b4816f --- /dev/null +++ b/assets/js/941.1bbe0034.js @@ -0,0 +1,11693 @@ +"use strict"; +exports.id = 941; +exports.ids = [941]; +exports.modules = { + +/***/ 42494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "bK": () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js + + + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue/* default */.Z)(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js +var isPlainObject = __webpack_require__(37514); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = (0,isArray/* default */.Z)(srcValue), + isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue), + isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if ((0,isArray/* default */.Z)(objValue)) { + newValue = objValue; + } + else if ((0,isArrayLikeObject/* default */.Z)(objValue)) { + newValue = (0,_copyArray/* default */.Z)(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true); + } + else { + newValue = []; + } + } + else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) { + newValue = objValue; + if ((0,isArguments/* default */.Z)(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) { + newValue = (0,_initCloneObject/* default */.Z)(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + (0,_baseFor/* default */.Z)(source, function(srcValue, key) { + stack || (stack = new _Stack/* default */.Z); + if ((0,isObject/* default */.Z)(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, keysIn/* default */.Z); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return (0,_baseRest/* default */.Z)(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default.Date.now */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "k": () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 31667: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _Stack) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules +var _ListCache = __webpack_require__(67308); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache/* default */.Z; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js +var _Map = __webpack_require__(86183); +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache/* default */.Z) { + var pairs = data.__data__; + if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache/* default */.Z(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache/* default */.Z(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + + +/***/ }), + +/***/ 84073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Built-in value references. */ +var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 87668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _arrayLikeKeys) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = (0,isArray/* default */.Z)(value), + isArg = !isArr && (0,isArguments/* default */.Z)(value), + isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value), + isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + (0,_isIndex/* default */.Z)(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 72954: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value); + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue); + + +/***/ }), + +/***/ 74752: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904); + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) { + (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 61395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFor) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 69581: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203); +/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211); +/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227); + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + ''); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 41884: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073); + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer)); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer); + + +/***/ }), + +/***/ 91050: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer); + + +/***/ }), + +/***/ 12701: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884); + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray); + + +/***/ }), + +/***/ 87215: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray); + + +/***/ }), + +/***/ 31899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752); + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue); + } else { + (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject); + + +/***/ }), + +/***/ 77904: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508); + + +var defineProperty = (function() { + try { + var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 12513: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851); + + +/** Built-in value references. */ +var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 73658: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _initCloneObject) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!(0,isObject/* default */.Z)(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object)) + ? _baseCreate((0,_getPrototype/* default */.Z)(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + + +/***/ }), + +/***/ 56009: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex); + + +/***/ }), + +/***/ 50439: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226); + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length)) + : (type == 'string' && index in object) + ) { + return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value); + } + return false; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 81211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _overRest) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 27227: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _setToString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js +var _defineProperty = __webpack_require__(77904); +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) { + return (0,_defineProperty/* default */.Z)(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': (0,constant/* default */.Z)(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 62002: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 69203: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity); + + +/***/ }), + +/***/ 836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject); + + +/***/ }), + +/***/ 37514: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) { + return false; + } + var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 32957: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_keysIn) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules +var _arrayLikeKeys = __webpack_require__(87668); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!(0,isObject/* default */.Z)(object)) { + return _nativeKeysIn(object); + } + var isProto = (0,_isPrototype/* default */.Z)(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 56941: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(43047); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(81188); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17967); + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 8], $V5 = [5, 6, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 71, 72], $V6 = [1, 22], $V7 = [2, 13], $V8 = [1, 26], $V9 = [1, 27], $Va = [1, 28], $Vb = [1, 29], $Vc = [1, 30], $Vd = [1, 31], $Ve = [1, 24], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 36], $Vi = [71, 72], $Vj = [5, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 60, 62, 71, 72], $Vk = [1, 56], $Vl = [1, 57], $Vm = [1, 58], $Vn = [1, 59], $Vo = [1, 60], $Vp = [1, 61], $Vq = [1, 62], $Vr = [62, 63], $Vs = [1, 74], $Vt = [1, 70], $Vu = [1, 71], $Vv = [1, 72], $Vw = [1, 73], $Vx = [1, 75], $Vy = [1, 79], $Vz = [1, 80], $VA = [1, 77], $VB = [1, 78], $VC = [5, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 71, 72]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "directive": 4, "NEWLINE": 5, "RD": 6, "diagram": 7, "EOF": 8, "openDirective": 9, "typeDirective": 10, "closeDirective": 11, ":": 12, "argDirective": 13, "acc_title": 14, "acc_title_value": 15, "acc_descr": 16, "acc_descr_value": 17, "acc_descr_multiline_value": 18, "open_directive": 19, "type_directive": 20, "arg_directive": 21, "close_directive": 22, "requirementDef": 23, "elementDef": 24, "relationshipDef": 25, "requirementType": 26, "requirementName": 27, "STRUCT_START": 28, "requirementBody": 29, "ID": 30, "COLONSEP": 31, "id": 32, "TEXT": 33, "text": 34, "RISK": 35, "riskLevel": 36, "VERIFYMTHD": 37, "verifyType": 38, "STRUCT_STOP": 39, "REQUIREMENT": 40, "FUNCTIONAL_REQUIREMENT": 41, "INTERFACE_REQUIREMENT": 42, "PERFORMANCE_REQUIREMENT": 43, "PHYSICAL_REQUIREMENT": 44, "DESIGN_CONSTRAINT": 45, "LOW_RISK": 46, "MED_RISK": 47, "HIGH_RISK": 48, "VERIFY_ANALYSIS": 49, "VERIFY_DEMONSTRATION": 50, "VERIFY_INSPECTION": 51, "VERIFY_TEST": 52, "ELEMENT": 53, "elementName": 54, "elementBody": 55, "TYPE": 56, "type": 57, "DOCREF": 58, "ref": 59, "END_ARROW_L": 60, "relationship": 61, "LINE": 62, "END_ARROW_R": 63, "CONTAINS": 64, "COPIES": 65, "DERIVES": 66, "SATISFIES": 67, "VERIFIES": 68, "REFINES": 69, "TRACES": 70, "unqString": 71, "qString": 72, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "NEWLINE", 6: "RD", 8: "EOF", 12: ":", 14: "acc_title", 15: "acc_title_value", 16: "acc_descr", 17: "acc_descr_value", 18: "acc_descr_multiline_value", 19: "open_directive", 20: "type_directive", 21: "arg_directive", 22: "close_directive", 28: "STRUCT_START", 30: "ID", 31: "COLONSEP", 33: "TEXT", 35: "RISK", 37: "VERIFYMTHD", 39: "STRUCT_STOP", 40: "REQUIREMENT", 41: "FUNCTIONAL_REQUIREMENT", 42: "INTERFACE_REQUIREMENT", 43: "PERFORMANCE_REQUIREMENT", 44: "PHYSICAL_REQUIREMENT", 45: "DESIGN_CONSTRAINT", 46: "LOW_RISK", 47: "MED_RISK", 48: "HIGH_RISK", 49: "VERIFY_ANALYSIS", 50: "VERIFY_DEMONSTRATION", 51: "VERIFY_INSPECTION", 52: "VERIFY_TEST", 53: "ELEMENT", 56: "TYPE", 58: "DOCREF", 60: "END_ARROW_L", 62: "LINE", 63: "END_ARROW_R", 64: "CONTAINS", 65: "COPIES", 66: "DERIVES", 67: "SATISFIES", 68: "VERIFIES", 69: "REFINES", 70: "TRACES", 71: "unqString", 72: "qString" }, + productions_: [0, [3, 3], [3, 2], [3, 4], [4, 3], [4, 5], [4, 2], [4, 2], [4, 1], [9, 1], [10, 1], [13, 1], [11, 1], [7, 0], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [23, 5], [29, 5], [29, 5], [29, 5], [29, 5], [29, 2], [29, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [36, 1], [36, 1], [36, 1], [38, 1], [38, 1], [38, 1], [38, 1], [24, 5], [55, 5], [55, 5], [55, 2], [55, 1], [25, 5], [25, 5], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [27, 1], [27, 1], [32, 1], [32, 1], [34, 1], [34, 1], [54, 1], [54, 1], [57, 1], [57, 1], [59, 1], [59, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 6: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 7: + case 8: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 9: + yy.parseDirective("%%{", "open_directive"); + break; + case 10: + yy.parseDirective($$[$0], "type_directive"); + break; + case 11: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 12: + yy.parseDirective("}%%", "close_directive", "pie"); + break; + case 13: + this.$ = []; + break; + case 19: + yy.addRequirement($$[$0 - 3], $$[$0 - 4]); + break; + case 20: + yy.setNewReqId($$[$0 - 2]); + break; + case 21: + yy.setNewReqText($$[$0 - 2]); + break; + case 22: + yy.setNewReqRisk($$[$0 - 2]); + break; + case 23: + yy.setNewReqVerifyMethod($$[$0 - 2]); + break; + case 26: + this.$ = yy.RequirementType.REQUIREMENT; + break; + case 27: + this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT; + break; + case 28: + this.$ = yy.RequirementType.INTERFACE_REQUIREMENT; + break; + case 29: + this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT; + break; + case 30: + this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT; + break; + case 31: + this.$ = yy.RequirementType.DESIGN_CONSTRAINT; + break; + case 32: + this.$ = yy.RiskLevel.LOW_RISK; + break; + case 33: + this.$ = yy.RiskLevel.MED_RISK; + break; + case 34: + this.$ = yy.RiskLevel.HIGH_RISK; + break; + case 35: + this.$ = yy.VerifyType.VERIFY_ANALYSIS; + break; + case 36: + this.$ = yy.VerifyType.VERIFY_DEMONSTRATION; + break; + case 37: + this.$ = yy.VerifyType.VERIFY_INSPECTION; + break; + case 38: + this.$ = yy.VerifyType.VERIFY_TEST; + break; + case 39: + yy.addElement($$[$0 - 3]); + break; + case 40: + yy.setNewElementType($$[$0 - 2]); + break; + case 41: + yy.setNewElementDocRef($$[$0 - 2]); + break; + case 44: + yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 45: + yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 46: + this.$ = yy.Relationships.CONTAINS; + break; + case 47: + this.$ = yy.Relationships.COPIES; + break; + case 48: + this.$ = yy.Relationships.DERIVES; + break; + case 49: + this.$ = yy.Relationships.SATISFIES; + break; + case 50: + this.$ = yy.Relationships.VERIFIES; + break; + case 51: + this.$ = yy.Relationships.REFINES; + break; + case 52: + this.$ = yy.Relationships.TRACES; + break; + } + }, + table: [{ 3: 1, 4: 2, 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: [1, 9], 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 5: [1, 11] }, { 10: 12, 20: [1, 13] }, { 15: [1, 14] }, { 17: [1, 15] }, o($V5, [2, 8]), { 20: [2, 9] }, { 3: 16, 4: 2, 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 1: [2, 2] }, { 4: 21, 5: $V6, 7: 17, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 11: 34, 12: [1, 35], 22: $Vh }, o([12, 22], [2, 10]), o($V5, [2, 6]), o($V5, [2, 7]), { 1: [2, 1] }, { 8: [1, 37] }, { 4: 21, 5: $V6, 7: 38, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 39, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 40, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 41, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 42, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 27: 43, 71: [1, 44], 72: [1, 45] }, { 54: 46, 71: [1, 47], 72: [1, 48] }, { 60: [1, 49], 62: [1, 50] }, o($Vi, [2, 26]), o($Vi, [2, 27]), o($Vi, [2, 28]), o($Vi, [2, 29]), o($Vi, [2, 30]), o($Vi, [2, 31]), o($Vj, [2, 55]), o($Vj, [2, 56]), o($V5, [2, 4]), { 13: 51, 21: [1, 52] }, o($V5, [2, 12]), { 1: [2, 3] }, { 8: [2, 14] }, { 8: [2, 15] }, { 8: [2, 16] }, { 8: [2, 17] }, { 8: [2, 18] }, { 28: [1, 53] }, { 28: [2, 53] }, { 28: [2, 54] }, { 28: [1, 54] }, { 28: [2, 59] }, { 28: [2, 60] }, { 61: 55, 64: $Vk, 65: $Vl, 66: $Vm, 67: $Vn, 68: $Vo, 69: $Vp, 70: $Vq }, { 61: 63, 64: $Vk, 65: $Vl, 66: $Vm, 67: $Vn, 68: $Vo, 69: $Vp, 70: $Vq }, { 11: 64, 22: $Vh }, { 22: [2, 11] }, { 5: [1, 65] }, { 5: [1, 66] }, { 62: [1, 67] }, o($Vr, [2, 46]), o($Vr, [2, 47]), o($Vr, [2, 48]), o($Vr, [2, 49]), o($Vr, [2, 50]), o($Vr, [2, 51]), o($Vr, [2, 52]), { 63: [1, 68] }, o($V5, [2, 5]), { 5: $Vs, 29: 69, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vy, 39: $Vz, 55: 76, 56: $VA, 58: $VB }, { 32: 81, 71: $Vf, 72: $Vg }, { 32: 82, 71: $Vf, 72: $Vg }, o($VC, [2, 19]), { 31: [1, 83] }, { 31: [1, 84] }, { 31: [1, 85] }, { 31: [1, 86] }, { 5: $Vs, 29: 87, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, o($VC, [2, 25]), o($VC, [2, 39]), { 31: [1, 88] }, { 31: [1, 89] }, { 5: $Vy, 39: $Vz, 55: 90, 56: $VA, 58: $VB }, o($VC, [2, 43]), o($VC, [2, 44]), o($VC, [2, 45]), { 32: 91, 71: $Vf, 72: $Vg }, { 34: 92, 71: [1, 93], 72: [1, 94] }, { 36: 95, 46: [1, 96], 47: [1, 97], 48: [1, 98] }, { 38: 99, 49: [1, 100], 50: [1, 101], 51: [1, 102], 52: [1, 103] }, o($VC, [2, 24]), { 57: 104, 71: [1, 105], 72: [1, 106] }, { 59: 107, 71: [1, 108], 72: [1, 109] }, o($VC, [2, 42]), { 5: [1, 110] }, { 5: [1, 111] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: [1, 112] }, { 5: [2, 32] }, { 5: [2, 33] }, { 5: [2, 34] }, { 5: [1, 113] }, { 5: [2, 35] }, { 5: [2, 36] }, { 5: [2, 37] }, { 5: [2, 38] }, { 5: [1, 114] }, { 5: [2, 61] }, { 5: [2, 62] }, { 5: [1, 115] }, { 5: [2, 63] }, { 5: [2, 64] }, { 5: $Vs, 29: 116, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 117, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 118, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 119, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vy, 39: $Vz, 55: 120, 56: $VA, 58: $VB }, { 5: $Vy, 39: $Vz, 55: 121, 56: $VA, 58: $VB }, o($VC, [2, 20]), o($VC, [2, 21]), o($VC, [2, 22]), o($VC, [2, 23]), o($VC, [2, 40]), o($VC, [2, 41])], + defaultActions: { 8: [2, 9], 10: [2, 2], 16: [2, 1], 37: [2, 3], 38: [2, 14], 39: [2, 15], 40: [2, 16], 41: [2, 17], 42: [2, 18], 44: [2, 53], 45: [2, 54], 47: [2, 59], 48: [2, 60], 52: [2, 11], 93: [2, 57], 94: [2, 58], 96: [2, 32], 97: [2, 33], 98: [2, 34], 100: [2, 35], 101: [2, 36], 102: [2, 37], 103: [2, 38], 105: [2, 61], 106: [2, 62], 108: [2, 63], 109: [2, 64] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 19; + case 1: + this.begin("type_directive"); + return 20; + case 2: + this.popState(); + this.begin("arg_directive"); + return 12; + case 3: + this.popState(); + this.popState(); + return 22; + case 4: + return 21; + case 5: + return "title"; + case 6: + this.begin("acc_title"); + return 14; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 16; + case 9: + this.popState(); + return "acc_descr_value"; + case 10: + this.begin("acc_descr_multiline"); + break; + case 11: + this.popState(); + break; + case 12: + return "acc_descr_multiline_value"; + case 13: + return 5; + case 14: + break; + case 15: + break; + case 16: + break; + case 17: + return 8; + case 18: + return 6; + case 19: + return 28; + case 20: + return 39; + case 21: + return 31; + case 22: + return 30; + case 23: + return 33; + case 24: + return 35; + case 25: + return 37; + case 26: + return 40; + case 27: + return 41; + case 28: + return 42; + case 29: + return 43; + case 30: + return 44; + case 31: + return 45; + case 32: + return 46; + case 33: + return 47; + case 34: + return 48; + case 35: + return 49; + case 36: + return 50; + case 37: + return 51; + case 38: + return 52; + case 39: + return 53; + case 40: + return 64; + case 41: + return 65; + case 42: + return 66; + case 43: + return 67; + case 44: + return 68; + case 45: + return 69; + case 46: + return 70; + case 47: + return 56; + case 48: + return 58; + case 49: + return 60; + case 50: + return 63; + case 51: + return 62; + case 52: + this.begin("string"); + break; + case 53: + this.popState(); + break; + case 54: + return "qString"; + case 55: + yy_.yytext = yy_.yytext.trim(); + return 71; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\b)/i, /^(?:\{)/i, /^(?:\})/i, /^(?::)/i, /^(?:id\b)/i, /^(?:text\b)/i, /^(?:risk\b)/i, /^(?:verifyMethod\b)/i, /^(?:requirement\b)/i, /^(?:functionalRequirement\b)/i, /^(?:interfaceRequirement\b)/i, /^(?:performanceRequirement\b)/i, /^(?:physicalRequirement\b)/i, /^(?:designConstraint\b)/i, /^(?:low\b)/i, /^(?:medium\b)/i, /^(?:high\b)/i, /^(?:analysis\b)/i, /^(?:demonstration\b)/i, /^(?:inspection\b)/i, /^(?:test\b)/i, /^(?:element\b)/i, /^(?:contains\b)/i, /^(?:copies\b)/i, /^(?:derives\b)/i, /^(?:satisfies\b)/i, /^(?:verifies\b)/i, /^(?:refines\b)/i, /^(?:traces\b)/i, /^(?:type\b)/i, /^(?:docref\b)/i, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[\w][^\r\n\{\<\>\-\=]*)/i], + conditions: { "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "unqString": { "rules": [], "inclusive": false }, "token": { "rules": [], "inclusive": false }, "string": { "rules": [53, 54], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 55], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let relations = []; +let latestRequirement = {}; +let requirements = {}; +let latestElement = {}; +let elements = {}; +const RequirementType = { + REQUIREMENT: "Requirement", + FUNCTIONAL_REQUIREMENT: "Functional Requirement", + INTERFACE_REQUIREMENT: "Interface Requirement", + PERFORMANCE_REQUIREMENT: "Performance Requirement", + PHYSICAL_REQUIREMENT: "Physical Requirement", + DESIGN_CONSTRAINT: "Design Constraint" +}; +const RiskLevel = { + LOW_RISK: "Low", + MED_RISK: "Medium", + HIGH_RISK: "High" +}; +const VerifyType = { + VERIFY_ANALYSIS: "Analysis", + VERIFY_DEMONSTRATION: "Demonstration", + VERIFY_INSPECTION: "Inspection", + VERIFY_TEST: "Test" +}; +const Relationships = { + CONTAINS: "contains", + COPIES: "copies", + DERIVES: "derives", + SATISFIES: "satisfies", + VERIFIES: "verifies", + REFINES: "refines", + TRACES: "traces" +}; +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_6__.m.parseDirective(this, statement, context, type); +}; +const addRequirement = (name, type) => { + if (requirements[name] === void 0) { + requirements[name] = { + name, + type, + id: latestRequirement.id, + text: latestRequirement.text, + risk: latestRequirement.risk, + verifyMethod: latestRequirement.verifyMethod + }; + } + latestRequirement = {}; + return requirements[name]; +}; +const getRequirements = () => requirements; +const setNewReqId = (id) => { + if (latestRequirement !== void 0) { + latestRequirement.id = id; + } +}; +const setNewReqText = (text) => { + if (latestRequirement !== void 0) { + latestRequirement.text = text; + } +}; +const setNewReqRisk = (risk) => { + if (latestRequirement !== void 0) { + latestRequirement.risk = risk; + } +}; +const setNewReqVerifyMethod = (verifyMethod) => { + if (latestRequirement !== void 0) { + latestRequirement.verifyMethod = verifyMethod; + } +}; +const addElement = (name) => { + if (elements[name] === void 0) { + elements[name] = { + name, + type: latestElement.type, + docRef: latestElement.docRef + }; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Added new requirement: ", name); + } + latestElement = {}; + return elements[name]; +}; +const getElements = () => elements; +const setNewElementType = (type) => { + if (latestElement !== void 0) { + latestElement.type = type; + } +}; +const setNewElementDocRef = (docRef) => { + if (latestElement !== void 0) { + latestElement.docRef = docRef; + } +}; +const addRelationship = (type, src, dst) => { + relations.push({ + type, + src, + dst + }); +}; +const getRelationships = () => relations; +const clear = () => { + relations = []; + latestRequirement = {}; + requirements = {}; + latestElement = {}; + elements = {}; + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.y)(); +}; +const db = { + RequirementType, + RiskLevel, + VerifyType, + Relationships, + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)().req, + addRequirement, + getRequirements, + setNewReqId, + setNewReqText, + setNewReqRisk, + setNewReqVerifyMethod, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.o, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.p, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.v, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.q, + addElement, + getElements, + setNewElementType, + setNewElementDocRef, + addRelationship, + getRelationships, + clear +}; +const getStyles = (options) => ` + + marker { + fill: ${options.relationColor}; + stroke: ${options.relationColor}; + } + + marker.cross { + stroke: ${options.lineColor}; + } + + svg { + font-family: ${options.fontFamily}; + font-size: ${options.fontSize}; + } + + .reqBox { + fill: ${options.requirementBackground}; + fill-opacity: 100%; + stroke: ${options.requirementBorderColor}; + stroke-width: ${options.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${options.requirementTextColor}; + } + .reqLabelBox { + fill: ${options.relationLabelBackground}; + fill-opacity: 100%; + } + + .req-title-line { + stroke: ${options.requirementBorderColor}; + stroke-width: ${options.requirementBorderSize}; + } + .relationshipLine { + stroke: ${options.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${options.relationLabelColor}; + } + +`; +const styles = getStyles; +const ReqMarkers = { + CONTAINS: "contains", + ARROW: "arrow" +}; +const insertLineEndings = (parentNode, conf2) => { + let containsNode = parentNode.append("defs").append("marker").attr("id", ReqMarkers.CONTAINS + "_line_ending").attr("refX", 0).attr("refY", conf2.line_height / 2).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("g"); + containsNode.append("circle").attr("cx", conf2.line_height / 2).attr("cy", conf2.line_height / 2).attr("r", conf2.line_height / 2).attr("fill", "none"); + containsNode.append("line").attr("x1", 0).attr("x2", conf2.line_height).attr("y1", conf2.line_height / 2).attr("y2", conf2.line_height / 2).attr("stroke-width", 1); + containsNode.append("line").attr("y1", 0).attr("y2", conf2.line_height).attr("x1", conf2.line_height / 2).attr("x2", conf2.line_height / 2).attr("stroke-width", 1); + parentNode.append("defs").append("marker").attr("id", ReqMarkers.ARROW + "_line_ending").attr("refX", conf2.line_height).attr("refY", 0.5 * conf2.line_height).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("path").attr( + "d", + `M0,0 + L${conf2.line_height},${conf2.line_height / 2} + M${conf2.line_height},${conf2.line_height / 2} + L0,${conf2.line_height}` + ).attr("stroke-width", 1); +}; +const markers = { + ReqMarkers, + insertLineEndings +}; +let conf = {}; +let relCnt = 0; +const newRectNode = (parentNode, id) => { + return parentNode.insert("rect", "#" + id).attr("class", "req reqBox").attr("x", 0).attr("y", 0).attr("width", conf.rect_min_width + "px").attr("height", conf.rect_min_height + "px"); +}; +const newTitleNode = (parentNode, id, txts) => { + let x = conf.rect_min_width / 2; + let title = parentNode.append("text").attr("class", "req reqLabel reqTitle").attr("id", id).attr("x", x).attr("y", conf.rect_padding).attr("dominant-baseline", "hanging"); + let i = 0; + txts.forEach((textStr) => { + if (i == 0) { + title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", 0).text(textStr); + } else { + title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", conf.line_height * 0.75).text(textStr); + } + i++; + }); + let yPadding = 1.5 * conf.rect_padding; + let linePadding = i * conf.line_height * 0.75; + let totalY = yPadding + linePadding; + parentNode.append("line").attr("class", "req-title-line").attr("x1", "0").attr("x2", conf.rect_min_width).attr("y1", totalY).attr("y2", totalY); + return { + titleNode: title, + y: totalY + }; +}; +const newBodyNode = (parentNode, id, txts, yStart) => { + let body = parentNode.append("text").attr("class", "req reqLabel").attr("id", id).attr("x", conf.rect_padding).attr("y", yStart).attr("dominant-baseline", "hanging"); + let currentRow = 0; + const charLimit = 30; + let wrappedTxts = []; + txts.forEach((textStr) => { + let currentTextLen = textStr.length; + while (currentTextLen > charLimit && currentRow < 3) { + let firstPart = textStr.substring(0, charLimit); + textStr = textStr.substring(charLimit, textStr.length); + currentTextLen = textStr.length; + wrappedTxts[wrappedTxts.length] = firstPart; + currentRow++; + } + if (currentRow == 3) { + let lastStr = wrappedTxts[wrappedTxts.length - 1]; + wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + "..."; + } else { + wrappedTxts[wrappedTxts.length] = textStr; + } + currentRow = 0; + }); + wrappedTxts.forEach((textStr) => { + body.append("tspan").attr("x", conf.rect_padding).attr("dy", conf.line_height).text(textStr); + }); + return body; +}; +const addEdgeLabel = (parentNode, svgPath, conf2, txt) => { + const len = svgPath.node().getTotalLength(); + const labelPoint = svgPath.node().getPointAtLength(len * 0.5); + const labelId = "rel" + relCnt; + relCnt++; + const labelNode = parentNode.append("text").attr("class", "req relationshipLabel").attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(txt); + const labelBBox = labelNode.node().getBBox(); + parentNode.insert("rect", "#" + labelId).attr("class", "req reqLabelBox").attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height).attr("fill", "white").attr("fill-opacity", "85%"); +}; +const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { + const edge = g.edge(elementString(rel.src), elementString(rel.dst)); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }); + const svgPath = svg.insert("path", "#" + insert).attr("class", "er relationshipLine").attr("d", lineFunction(edge.points)).attr("fill", "none"); + if (rel.type == diagObj.db.Relationships.CONTAINS) { + svgPath.attr( + "marker-start", + "url(" + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + rel.type + "_line_ending)" + ); + } else { + svgPath.attr("stroke-dasharray", "10,7"); + svgPath.attr( + "marker-end", + "url(" + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + markers.ReqMarkers.ARROW + "_line_ending)" + ); + } + addEdgeLabel(svg, svgPath, conf, `<<${rel.type}>>`); + return; +}; +const drawReqs = (reqs, graph, svgNode) => { + Object.keys(reqs).forEach((reqName) => { + let req = reqs[reqName]; + reqName = elementString(reqName); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Added new requirement: ", reqName); + const groupNode = svgNode.append("g").attr("id", reqName); + const textId = "req-" + reqName; + const rectNode = newRectNode(groupNode, textId); + let titleNodeInfo = newTitleNode(groupNode, reqName + "_title", [ + `<<${req.type}>>`, + `${req.name}` + ]); + newBodyNode( + groupNode, + reqName + "_body", + [ + `Id: ${req.id}`, + `Text: ${req.text}`, + `Risk: ${req.risk}`, + `Verification: ${req.verifyMethod}` + ], + titleNodeInfo.y + ); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(reqName, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id: reqName + }); + }); +}; +const drawElements = (els, graph, svgNode) => { + Object.keys(els).forEach((elName) => { + let el = els[elName]; + const id = elementString(elName); + const groupNode = svgNode.append("g").attr("id", id); + const textId = "element-" + id; + const rectNode = newRectNode(groupNode, textId); + let titleNodeInfo = newTitleNode(groupNode, textId + "_title", [`<<Element>>`, `${elName}`]); + newBodyNode( + groupNode, + textId + "_body", + [`Type: ${el.type || "Not Specified"}`, `Doc Ref: ${el.docRef || "None"}`], + titleNodeInfo.y + ); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(id, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id + }); + }); +}; +const addRelationships = (relationships, g) => { + relationships.forEach(function(r) { + let src = elementString(r.src); + let dst = elementString(r.dst); + g.setEdge(src, dst, { relationship: r }); + }); + return relationships; +}; +const adjustEntities = function(svgNode, graph) { + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + svgNode.select("#" + v); + svgNode.select("#" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" + ); + } + }); + return; +}; +const elementString = (str) => { + return str.replace(/\s/g, "").replace(/\./g, "_"); +}; +const draw = (text, id, _version, diagObj) => { + conf = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_7__.g)().requirement; + diagObj.db.clear(); + diagObj.parser.parse(text); + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id='${id}']`); + markers.insertLineEndings(svg, conf); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: false, + compound: false, + directed: true + }).setGraph({ + rankdir: conf.layoutDirection, + marginx: 20, + marginy: 20, + nodesep: 100, + edgesep: 100, + ranksep: 100 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let requirements2 = diagObj.db.getRequirements(); + let elements2 = diagObj.db.getElements(); + let relationships = diagObj.db.getRelationships(); + drawReqs(requirements2, g, svg); + drawElements(elements2, g, svg); + addRelationships(relationships, g); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(g); + adjustEntities(svg, g); + relationships.forEach(function(rel) { + drawRelationshipFromLayout(svg, rel, g, id, diagObj); + }); + const padding = conf.rect_padding; + const svgBounds = svg.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_8__.k)(svg, height, width, conf.useMaxWidth); + svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + +//# sourceMappingURL=requirementDiagram-b9649942.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/9478.7e43e328.js b/assets/js/9478.7e43e328.js new file mode 100644 index 0000000000..f4693136eb --- /dev/null +++ b/assets/js/9478.7e43e328.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9478],{3349:(e,t,r)=>{r.d(t,{a:()=>l});var n=r(6225);function l(e,t){var r=e.append("foreignObject").attr("width","100000"),l=r.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}n.bg(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return r.attr("width",a.width).attr("height",a.height),r}},6225:(e,t,r)=>{r.d(t,{$p:()=>d,O1:()=>a,WR:()=>p,bF:()=>o,bg:()=>c});var n=r(7514),l=r(3234);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,r){t&&e.attr("class",t).attr("class",r+" "+e.attr("class"))}function p(e,t){var r=t.graph();if(n.Z(r)){var o=r.transition;if(l.Z(o))return o(e)}return e}},9478:(e,t,r)=>{r.d(t,{diagram:()=>a});var n=r(9863),l=r(755),o=r(44);r(9373),r(7967),r(7856),r(5625),r(2494),r(9354),r(3502),r(7484);const a={parser:n.p,db:n.f,renderer:l.f,styles:l.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,(0,o.h)({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}}),l.f.setConf(e.flowchart),n.f.clear(),n.f.setGen("gen-2")}}},755:(e,t,r)=>{r.d(t,{a:()=>w,f:()=>f});var n=r(5625),l=r(9373),o=r(9863),a=r(44),s=r(1188),i=r(2566),c=r(3349);const d={},p=function(e,t,r,n,l,o){const i=n.select(`[id="${r}"]`);Object.keys(e).forEach((function(r){const n=e[r];let d="default";n.classes.length>0&&(d=n.classes.join(" ")),d+=" flowchart-label";const p=(0,s.n)(n.styles);let b,f=void 0!==n.text?n.text:n.id;if(a.l.info("vertex",n,n.labelType),"markdown"===n.labelType)a.l.info("vertex",n,n.labelType);else if((0,a.k)((0,a.g)().flowchart.htmlLabels)){const e={label:f.replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`))};b=(0,c.a)(i,e).node(),b.parentNode.removeChild(b)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",p.labelStyle.replace("color:","fill:"));const t=f.split(a.e.lineBreakRegex);for(const r of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=r,e.appendChild(t)}b=e}let w=0,u="";switch(n.type){case"round":w=5,u="rect";break;case"square":case"group":default:u="rect";break;case"diamond":u="question";break;case"hexagon":u="hexagon";break;case"odd":case"odd_right":u="rect_left_inv_arrow";break;case"lean_right":u="lean_right";break;case"lean_left":u="lean_left";break;case"trapezoid":u="trapezoid";break;case"inv_trapezoid":u="inv_trapezoid";break;case"circle":u="circle";break;case"ellipse":u="ellipse";break;case"stadium":u="stadium";break;case"subroutine":u="subroutine";break;case"cylinder":u="cylinder";break;case"doublecircle":u="doublecircle"}t.setNode(n.id,{labelStyle:p.labelStyle,shape:u,labelText:f,labelType:n.labelType,rx:w,ry:w,class:d,style:p.style,id:n.id,link:n.link,linkTarget:n.linkTarget,tooltip:o.db.getTooltip(n.id)||"",domId:o.db.lookUpDomId(n.id),haveCallback:n.haveCallback,width:"group"===n.type?500:void 0,dir:n.dir,type:n.type,props:n.props,padding:(0,a.g)().flowchart.padding}),a.l.info("setNode",{labelStyle:p.labelStyle,labelType:n.labelType,shape:u,labelText:f,rx:w,ry:w,class:d,style:p.style,id:n.id,domId:o.db.lookUpDomId(n.id),width:"group"===n.type?500:void 0,type:n.type,dir:n.dir,props:n.props,padding:(0,a.g)().flowchart.padding})}))},b=function(e,t,r){a.l.info("abc78 edges = ",e);let n,o,i=0,c={};if(void 0!==e.defaultStyle){const t=(0,s.n)(e.defaultStyle);n=t.style,o=t.labelStyle}e.forEach((function(r){i++;var p="L-"+r.start+"-"+r.end;void 0===c[p]?(c[p]=0,a.l.info("abc78 new entry",p,c[p])):(c[p]++,a.l.info("abc78 new entry",p,c[p]));let b=p+"-"+c[p];a.l.info("abc78 new link id to be used is",p,b,c[p]);var f="LS-"+r.start,w="LE-"+r.end;const u={style:"",labelStyle:""};switch(u.minlen=r.length||1,"arrow_open"===r.type?u.arrowhead="none":u.arrowhead="normal",u.arrowTypeStart="arrow_open",u.arrowTypeEnd="arrow_open",r.type){case"double_arrow_cross":u.arrowTypeStart="arrow_cross";case"arrow_cross":u.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":u.arrowTypeStart="arrow_point";case"arrow_point":u.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":u.arrowTypeStart="arrow_circle";case"arrow_circle":u.arrowTypeEnd="arrow_circle"}let h="",g="";switch(r.stroke){case"normal":h="fill:none;",void 0!==n&&(h=n),void 0!==o&&(g=o),u.thickness="normal",u.pattern="solid";break;case"dotted":u.thickness="normal",u.pattern="dotted",u.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":u.thickness="thick",u.pattern="solid",u.style="stroke-width: 3.5px;fill:none;";break;case"invisible":u.thickness="invisible",u.pattern="solid",u.style="stroke-width: 0;fill:none;"}if(void 0!==r.style){const e=(0,s.n)(r.style);h=e.style,g=e.labelStyle}u.style=u.style+=h,u.labelStyle=u.labelStyle+=g,void 0!==r.interpolate?u.curve=(0,s.o)(r.interpolate,l.c_6):void 0!==e.defaultInterpolate?u.curve=(0,s.o)(e.defaultInterpolate,l.c_6):u.curve=(0,s.o)(d.curve,l.c_6),void 0===r.text?void 0!==r.style&&(u.arrowheadStyle="fill: #333"):(u.arrowheadStyle="fill: #333",u.labelpos="c"),u.labelType=r.labelType,u.label=r.text.replace(a.e.lineBreakRegex,"\n"),void 0===r.style&&(u.style=u.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),u.labelStyle=u.labelStyle.replace("color:","fill:"),u.id=b,u.classes="flowchart-link "+f+" "+w,t.setEdge(r.start,r.end,u,i)}))},f={setConf:function(e){const t=Object.keys(e);for(const r of t)d[r]=e[r]},addVertices:p,addEdges:b,getClasses:function(e,t){a.l.info("Extracting classes"),t.db.clear();try{return t.parse(e),t.db.getClasses()}catch(r){return}},draw:function(e,t,r,c){a.l.info("Drawing flowchart"),c.db.clear(),o.f.setGen("gen-2"),c.parser.parse(e);let d=c.db.getDirection();void 0===d&&(d="TD");const{securityLevel:f,flowchart:w}=(0,a.g)(),u=w.nodeSpacing||50,h=w.rankSpacing||50;let g;"sandbox"===f&&(g=(0,l.Ys)("#i"+t));const y="sandbox"===f?(0,l.Ys)(g.nodes()[0].contentDocument.body):(0,l.Ys)("body"),k="sandbox"===f?g.nodes()[0].contentDocument:document,x=new n.k({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:u,ranksep:h,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let v;const m=c.db.getSubGraphs();a.l.info("Subgraphs - ",m);for(let n=m.length-1;n>=0;n--)v=m[n],a.l.info("Subgraph - ",v),c.db.addVertex(v.id,{text:v.title,type:v.labelType},"group",void 0,v.classes,v.dir);const S=c.db.getVertices(),T=c.db.getEdges();a.l.info("Edges",T);let _=0;for(_=m.length-1;_>=0;_--){v=m[_],(0,l.td_)("cluster").append("text");for(let e=0;e<v.nodes.length;e++)a.l.info("Setting up subgraphs",v.nodes[e],v.id),x.setParent(v.nodes[e],v.id)}p(S,x,t,y,k,c),b(T,x);const C=y.select(`[id="${t}"]`),$=y.select("#"+t+" g");if((0,i.r)($,x,["point","circle","cross"],"flowchart",t),s.u.insertTitle(C,"flowchartTitleText",w.titleTopMargin,c.db.getDiagramTitle()),(0,s.s)(x,C,w.diagramPadding,w.useMaxWidth),c.db.indexNodes("subGraph"+_),!w.htmlLabels){const e=k.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),r=k.createElementNS("http://www.w3.org/2000/svg","rect");r.setAttribute("rx",0),r.setAttribute("ry",0),r.setAttribute("width",e.width),r.setAttribute("height",e.height),t.insertBefore(r,t.firstChild)}}Object.keys(S).forEach((function(e){const r=S[e];if(r.link){const n=(0,l.Ys)("#"+t+' [id="'+e+'"]');if(n){const e=k.createElementNS("http://www.w3.org/2000/svg","a");e.setAttributeNS("http://www.w3.org/2000/svg","class",r.classes.join(" ")),e.setAttributeNS("http://www.w3.org/2000/svg","href",r.link),e.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===f?e.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):r.linkTarget&&e.setAttributeNS("http://www.w3.org/2000/svg","target",r.linkTarget);const t=n.insert((function(){return e}),":first-child"),l=n.select(".label-container");l&&t.append((function(){return l.node()}));const o=n.select(".label");o&&t.append((function(){return o.node()}))}}}))}},w=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/assets/js/964.6f61a7fe.js b/assets/js/964.6f61a7fe.js new file mode 100644 index 0000000000..e591a8f09a --- /dev/null +++ b/assets/js/964.6f61a7fe.js @@ -0,0 +1,16707 @@ +"use strict"; +exports.id = 964; +exports.ids = [964]; +exports.modules = { + +/***/ 3502: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (/* binding */ SimpleMarkdown) +/* harmony export */ }); +/* eslint-disable prefer-spread, no-regex-spaces, no-unused-vars, guard-for-in, no-console, no-var */ + +/** + * Simple-Markdown + * =============== + * + * Simple-Markdown's primary goal is to be easy to adapt. It aims + * to be compliant with John Gruber's [Markdown Syntax page][1], + * but compatiblity with other markdown implementations' edge-cases + * will be sacrificed where it conflicts with simplicity or + * extensibility. + * + * If your goal is to simply embed a standard markdown implementation + * in your website, simple-markdown is probably not the best library + * for you (although it should work). But if you have struggled to + * customize an existing library to meet your needs, simple-markdown + * might be able to help. + * + * Many of the regexes and original logic has been adapted from + * the wonderful [marked.js](https://github.com/chjj/marked) + */ +// Flow Type Definitions: +// We want to clarify our defaultRules types a little bit more so clients can +// reuse defaultRules built-ins. So we make some stronger guarantess when +// we can: +// End Flow Definitions +var CR_NEWLINE_R = /\r\n?/g; +var TAB_R = /\t/g; +var FORMFEED_R = /\f/g; +/** + * Turn various whitespace into easy-to-process whitespace + */ + +var preprocess = function preprocess(source) { + return source.replace(CR_NEWLINE_R, "\n").replace(FORMFEED_R, "").replace(TAB_R, " "); +}; + +var populateInitialState = function populateInitialState(givenState, defaultState) { + var state = givenState || {}; + + if (defaultState != null) { + for (var prop in defaultState) { + // $FlowFixMe + if (Object.prototype.hasOwnProperty.call(defaultState, prop)) { + state[prop] = defaultState[prop]; + } + } + } + + return state; +}; +/** + * Creates a parser for a given set of rules, with the precedence + * specified as a list of rules. + * + * @param {SimpleMarkdown.ParserRules} rules + * an object containing + * rule type -> {match, order, parse} objects + * (lower order is higher precedence) + * @param {SimpleMarkdown.OptionalState} [defaultState] + * + * @returns {SimpleMarkdown.Parser} + * The resulting parse function, with the following parameters: + * @source: the input source string to be parsed + * @state: an optional object to be threaded through parse + * calls. Allows clients to add stateful operations to + * parsing, such as keeping track of how many levels deep + * some nesting is. For an example use-case, see passage-ref + * parsing in src/widgets/passage/passage-markdown.jsx + */ + + +var parserFor = function parserFor(rules, defaultState) { + // Sorts rules in order of increasing order, then + // ascending rule name in case of ties. + var ruleList = Object.keys(rules).filter(function (type) { + var rule = rules[type]; + + if (rule == null || rule.match == null) { + return false; + } + + var order = rule.order; + + if ((typeof order !== "number" || !isFinite(order)) && typeof console !== "undefined") { + console.warn("simple-markdown: Invalid order for rule `" + type + "`: " + String(order)); + } + + return true; + }); + ruleList.sort(function (typeA, typeB) { + var ruleA = rules[typeA]; + var ruleB = rules[typeB]; + var orderA = ruleA.order; + var orderB = ruleB.order; // First sort based on increasing order + + if (orderA !== orderB) { + return orderA - orderB; + } + + var secondaryOrderA = ruleA.quality ? 0 : 1; + var secondaryOrderB = ruleB.quality ? 0 : 1; + + if (secondaryOrderA !== secondaryOrderB) { + return secondaryOrderA - secondaryOrderB; // Then based on increasing unicode lexicographic ordering + } else if (typeA < typeB) { + return -1; + } else if (typeA > typeB) { + return 1; + } else { + // Rules should never have the same name, + // but this is provided for completeness. + return 0; + } + }); + var latestState; + + var nestedParse = function nestedParse(source, state) { + var result = []; + state = state || latestState; + latestState = state; + + while (source) { + // store the best match, it's rule, and quality: + var ruleType = null; + var rule = null; + var capture = null; + var quality = NaN; // loop control variables: + + var i = 0; + var currRuleType = ruleList[0]; // $FlowFixMe + + var currRule = rules[currRuleType]; + + do { + var currOrder = currRule.order; + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var currCapture = currRule.match(source, state, prevCaptureStr); + + if (currCapture) { + var currQuality = currRule.quality ? currRule.quality(currCapture, state, prevCaptureStr) : 0; // This should always be true the first time because + // the initial quality is NaN (that's why there's the + // condition negation). + + if (!(currQuality <= quality)) { + ruleType = currRuleType; + rule = currRule; + capture = currCapture; + quality = currQuality; + } + } // Move on to the next item. + // Note that this makes `currRule` be the next item + + + i++; + currRuleType = ruleList[i]; // $FlowFixMe + + currRule = rules[currRuleType]; + } while ( // keep looping while we're still within the ruleList + currRule && ( // if we don't have a match yet, continue + !capture || // or if we have a match, but the next rule is + // at the same order, and has a quality measurement + // functions, then this rule must have a quality + // measurement function (since they are sorted before + // those without), and we need to check if there is + // a better quality match + currRule.order === currOrder && currRule.quality)); // TODO(aria): Write tests for these + + + if (rule == null || capture == null) { + throw new Error("Could not find a matching rule for the below " + "content. The rule with highest `order` should " + "always match content provided to it. Check " + "the definition of `match` for '" + ruleList[ruleList.length - 1] + "'. It seems to not match the following source:\n" + source); + } + + if (capture.index) { + // If present and non-zero, i.e. a non-^ regexp result: + throw new Error("`match` must return a capture starting at index 0 " + "(the current parse index). Did you forget a ^ at the " + "start of the RegExp?"); + } + + var parsed = rule.parse(capture, nestedParse, state); // We maintain the same object here so that rules can + // store references to the objects they return and + // modify them later. (oops sorry! but this adds a lot + // of power--see reflinks.) + + if (Array.isArray(parsed)) { + // $FlowFixMe + Array.prototype.push.apply(result, parsed); + } else { + if (parsed == null || typeof parsed !== "object") { + throw new Error("parse() function returned invalid parse result: '".concat(parsed, "'")); + } // We also let rules override the default type of + // their parsed node if they would like to, so that + // there can be a single output function for all links, + // even if there are several rules to parse them. + + + if (parsed.type == null) { + // $FlowFixMe + parsed.type = ruleType; + } + + result.push(parsed); + } + + state.prevCapture = capture; + source = source.substring(state.prevCapture[0].length); + } // $FlowFixMe + + + return result; + }; + + var outerParse = function outerParse(source, state) { + latestState = populateInitialState(state, defaultState); + + if (!latestState.inline && !latestState.disableAutoBlockNewlines) { + source = source + "\n\n"; + } // We store the previous capture so that match functions can + // use some limited amount of lookbehind. Lists use this to + // ensure they don't match arbitrary '- ' or '* ' in inline + // text (see the list rule for more information). This stores + // the full regex capture object, if there is one. + + + latestState.prevCapture = null; + return nestedParse(preprocess(source), latestState); + }; // $FlowFixMe + + + return outerParse; +}; // Creates a match function for an inline scoped element from a regex + + +var inlineRegex = function inlineRegex(regex) { + var match = function match(source, state, prevCapture) { + if (state.inline) { + // $FlowFixMe + return regex.exec(source); + } else { + return null; + } + }; + + match.regex = regex; + return match; +}; // Creates a match function for a block scoped element from a regex + + +var blockRegex = function blockRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + if (state.inline) { + return null; + } else { + return regex.exec(source); + } + }; + + match.regex = regex; + return match; +}; // Creates a match function from a regex, ignoring block/inline scope + + +var anyScopeRegex = function anyScopeRegex(regex) { + // $FlowFixMe + var match = function match(source, state) { + return regex.exec(source); + }; + + match.regex = regex; + return match; +}; + +var TYPE_SYMBOL = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; + +var reactElement = function reactElement(type, key, props) { + var element = { + $$typeof: TYPE_SYMBOL, + type: type, + key: key == null ? undefined : key, + ref: null, + props: props, + _owner: null + }; + return element; +}; +/** Returns a closed HTML tag. + * @param {string} tagName - Name of HTML tag (eg. "em" or "a") + * @param {string} content - Inner content of tag + * @param {{ [attr: string]: SimpleMarkdown.Attr }} [attributes] - Optional extra attributes of tag as an object of key-value pairs + * eg. { "href": "http://google.com" }. Falsey attributes are filtered out. + * @param {boolean} [isClosed] - boolean that controls whether tag is closed or not (eg. img tags). + * defaults to true + */ + + +var htmlTag = function htmlTag(tagName, content, attributes, isClosed) { + attributes = attributes || {}; + isClosed = typeof isClosed !== "undefined" ? isClosed : true; + var attributeString = ""; + + for (var attr in attributes) { + var attribute = attributes[attr]; // Removes falsey attributes + + if ( // $FlowFixMe + Object.prototype.hasOwnProperty.call(attributes, attr) && attribute) { + attributeString += " " + sanitizeText(attr) + '="' + sanitizeText(attribute) + '"'; + } + } + + var unclosedTag = "<" + tagName + attributeString + ">"; + + if (isClosed) { + return unclosedTag + content + "</" + tagName + ">"; + } else { + return unclosedTag; + } +}; + +var EMPTY_PROPS = {}; +/** + * @param {string | null | undefined} url - url to sanitize + * @returns {string | null} - url if safe, or null if a safe url could not be made + */ + +var sanitizeUrl = function sanitizeUrl(url) { + if (url == null) { + return null; + } + + try { + var prot = new URL(url, "https://localhost").protocol; + + if (prot.indexOf("javascript:") === 0 || prot.indexOf("vbscript:") === 0 || prot.indexOf("data:") === 0) { + return null; + } + } catch (e) { + // invalid URLs should throw a TypeError + // see for instance: `new URL("");` + return null; + } + + return url; +}; + +var SANITIZE_TEXT_R = /[<>&"']/g; +var SANITIZE_TEXT_CODES = { + "<": "<", + ">": ">", + "&": "&", + '"': """, + "'": "'", + "/": "/", + "`": "`" +}; + +var sanitizeText = function sanitizeText(text) { + return String(text).replace(SANITIZE_TEXT_R, function (chr) { + return SANITIZE_TEXT_CODES[chr]; + }); +}; + +var UNESCAPE_URL_R = /\\([^0-9A-Za-z\s])/g; + +var unescapeUrl = function unescapeUrl(rawUrlString) { + return rawUrlString.replace(UNESCAPE_URL_R, "$1"); +}; +/** + * Parse some content with the parser `parse`, with state.inline + * set to true. Useful for block elements; not generally necessary + * to be used by inline elements (where state.inline is already true. + */ + + +var parseInline = function parseInline(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = true; + var result = parse(content, state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseBlock = function parseBlock(parse, content, state) { + var isCurrentlyInline = state.inline || false; + state.inline = false; + var result = parse(content + "\n\n", state); + state.inline = isCurrentlyInline; + return result; +}; + +var parseCaptureInline = function parseCaptureInline(capture, parse, state) { + return { + content: parseInline(parse, capture[1], state) + }; +}; + +var ignoreCapture = function ignoreCapture() { + return {}; +}; // recognize a `*` `-`, `+`, `1.`, `2.`... list bullet + + +var LIST_BULLET = "(?:[*+-]|\\d+\\.)"; // recognize the start of a list item: +// leading space plus a bullet plus a space (` * `) + +var LIST_ITEM_PREFIX = "( *)(" + LIST_BULLET + ") +"; +var LIST_ITEM_PREFIX_R = new RegExp("^" + LIST_ITEM_PREFIX); // recognize an individual list item: +// * hi +// this is part of the same item +// +// as is this, which is a new paragraph in the same item +// +// * but this is not part of the same item + +var LIST_ITEM_R = new RegExp(LIST_ITEM_PREFIX + "[^\\n]*(?:\\n" + "(?!\\1" + LIST_BULLET + " )[^\\n]*)*(\n|$)", "gm"); +var BLOCK_END_R = /\n{2,}$/; +var INLINE_CODE_ESCAPE_BACKTICKS_R = /^ (?= *`)|(` *) $/g; // recognize the end of a paragraph block inside a list item: +// two or more newlines at end end of the item + +var LIST_BLOCK_END_R = BLOCK_END_R; +var LIST_ITEM_END_R = / *\n+$/; // check whether a list item has paragraphs: if it does, +// we leave the newlines at the end + +var LIST_R = new RegExp("^( *)(" + LIST_BULLET + ") " + "[\\s\\S]+?(?:\n{2,}(?! )" + "(?!\\1" + LIST_BULLET + " )\\n*" + // the \\s*$ here is so that we can parse the inside of nested +// lists, where our content might end before we receive two `\n`s +"|\\s*\n*$)"); +var LIST_LOOKBEHIND_R = /(?:^|\n)( *)$/; + +var TABLES = function () { + var TABLE_ROW_SEPARATOR_TRIM = /^ *\| *| *\| *$/g; + var TABLE_CELL_END_TRIM = / *$/; + var TABLE_RIGHT_ALIGN = /^ *-+: *$/; + var TABLE_CENTER_ALIGN = /^ *:-+: *$/; + var TABLE_LEFT_ALIGN = /^ *:-+ *$/; // TODO: This needs a real type + + var parseTableAlignCapture = function parseTableAlignCapture(alignCapture) { + if (TABLE_RIGHT_ALIGN.test(alignCapture)) { + return "right"; + } else if (TABLE_CENTER_ALIGN.test(alignCapture)) { + return "center"; + } else if (TABLE_LEFT_ALIGN.test(alignCapture)) { + return "left"; + } else { + return null; + } + }; + + var parseTableAlign = function parseTableAlign(source, parse, state, trimEndSeparators) { + if (trimEndSeparators) { + source = source.replace(TABLE_ROW_SEPARATOR_TRIM, ""); + } + + var alignText = source.trim().split("|"); + return alignText.map(parseTableAlignCapture); + }; + + var parseTableRow = function parseTableRow(source, parse, state, trimEndSeparators) { + var prevInTable = state.inTable; + state.inTable = true; + var tableRow = parse(source.trim(), state); + state.inTable = prevInTable; + var cells = [[]]; + tableRow.forEach(function (node, i) { + if (node.type === "tableSeparator") { + // Filter out empty table separators at the start/end: + if (!trimEndSeparators || i !== 0 && i !== tableRow.length - 1) { + // Split the current row: + cells.push([]); + } + } else { + if (node.type === "text" && (tableRow[i + 1] == null || tableRow[i + 1].type === "tableSeparator")) { + node.content = node.content.replace(TABLE_CELL_END_TRIM, ""); + } + + cells[cells.length - 1].push(node); + } + }); + return cells; + }; + /** + * @param {string} source + * @param {SimpleMarkdown.Parser} parse + * @param {SimpleMarkdown.State} state + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.ASTNode[][]} + */ + + + var parseTableCells = function parseTableCells(source, parse, state, trimEndSeparators) { + var rowsText = source.trim().split("\n"); + return rowsText.map(function (rowText) { + // $FlowFixMe + return parseTableRow(rowText, parse, state, trimEndSeparators); + }); + }; + /** + * @param {boolean} trimEndSeparators + * @returns {SimpleMarkdown.SingleNodeParseFunction} + */ + + + var parseTable = function parseTable(trimEndSeparators) { + return function (capture, parse, state) { + state.inline = true; + var header = parseTableRow(capture[1], parse, state, trimEndSeparators); + var align = parseTableAlign(capture[2], parse, state, trimEndSeparators); + var cells = parseTableCells(capture[3], parse, state, trimEndSeparators); + state.inline = false; + return { + type: "table", + header: header, + align: align, + cells: cells + }; + }; + }; + + return { + parseTable: parseTable(true), + parseNpTable: parseTable(false), + TABLE_REGEX: /^ *(\|.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/, + NPTABLE_REGEX: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/ + }; +}(); + +var LINK_INSIDE = "(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*"; +var LINK_HREF_AND_TITLE = "\\s*<?((?:\\([^)]*\\)|[^\\s\\\\]|\\\\.)*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*"; +var AUTOLINK_MAILTO_CHECK_R = /mailto:/i; + +var parseRef = function parseRef(capture, state, refNode) { + var ref = (capture[2] || capture[1]).replace(/\s+/g, " ").toLowerCase(); // We store information about previously seen defs on + // state._defs (_ to deconflict with client-defined + // state). If the def for this reflink/refimage has + // already been seen, we can use its target/source + // and title here: + + if (state._defs && state._defs[ref]) { + var def = state._defs[ref]; // `refNode` can be a link or an image. Both use + // target and title properties. + + refNode.target = def.target; + refNode.title = def.title; + } // In case we haven't seen our def yet (or if someone + // overwrites that def later on), we add this node + // to the list of ref nodes for that def. Then, when + // we find the def, we can modify this link/image AST + // node :). + // I'm sorry. + + + state._refs = state._refs || {}; + state._refs[ref] = state._refs[ref] || []; + + state._refs[ref].push(refNode); + + return refNode; +}; + +var currOrder = 0; +var defaultRules = { + Array: { + react: function react(arr, output, state) { + var oldKey = state.key; + var result = []; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0, key = 0; i < arr.length; i++, key++) { + // `key` is our numerical `state.key`, which we increment for + // every output node, but don't change for joined text nodes. + // (i, however, must change for joined text nodes) + state.key = "" + i; + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result.push(output(node, state)); + } + + state.key = oldKey; + return result; + }, + html: function html(arr, output, state) { + var result = ""; // map output over the ast, except group any text + // nodes together into a single string output. + + for (var i = 0; i < arr.length; i++) { + var node = arr[i]; + + if (node.type === "text") { + node = { + type: "text", + content: node.content + }; + + for (; i + 1 < arr.length && arr[i + 1].type === "text"; i++) { + node.content += arr[i + 1].content; + } + } + + result += output(node, state); + } + + return result; + } + }, + heading: { + order: currOrder++, + match: blockRegex(/^ *(#{1,6})([^\n]+?)#* *(?:\n *)+\n/), + parse: function (_parse) { + function parse(_x, _x2, _x3) { + return _parse.apply(this, arguments); + } + + parse.toString = function () { + return _parse.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + level: capture[1].length, + content: parseInline(parse, capture[2].trim(), state) + }; + }), + react: function react(node, output, state) { + return reactElement("h" + node.level, state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("h" + node.level, output(node.content, state)); + } + }, + nptable: { + order: currOrder++, + match: blockRegex(TABLES.NPTABLE_REGEX), + parse: TABLES.parseNpTable, + react: null, + html: null + }, + lheading: { + order: currOrder++, + match: blockRegex(/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/), + parse: function (_parse2) { + function parse(_x4, _x5, _x6) { + return _parse2.apply(this, arguments); + } + + parse.toString = function () { + return _parse2.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "heading", + level: capture[2] === "=" ? 1 : 2, + content: parseInline(parse, capture[1], state) + }; + }), + react: null, + html: null + }, + hr: { + order: currOrder++, + match: blockRegex(/^( *[-*_]){3,} *(?:\n *)+\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("hr", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<hr>"; + } + }, + codeBlock: { + order: currOrder++, + match: blockRegex(/^(?: [^\n]+\n*)+(?:\n *)+\n/), + parse: function (_parse3) { + function parse(_x7, _x8, _x9) { + return _parse3.apply(this, arguments); + } + + parse.toString = function () { + return _parse3.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ /gm, "").replace(/\n+$/, ""); + return { + lang: undefined, + content: content + }; + }), + react: function react(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + return reactElement("pre", state.key, { + children: reactElement("code", null, { + className: className, + children: node.content + }) + }); + }, + html: function html(node, output, state) { + var className = node.lang ? "markdown-code-" + node.lang : undefined; + var codeBlock = htmlTag("code", sanitizeText(node.content), { + class: className + }); + return htmlTag("pre", codeBlock); + } + }, + fence: { + order: currOrder++, + match: blockRegex(/^ *(`{3,}|~{3,}) *(?:(\S+) *)?\n([\s\S]+?)\n?\1 *(?:\n *)+\n/), + parse: function (_parse4) { + function parse(_x10, _x11, _x12) { + return _parse4.apply(this, arguments); + } + + parse.toString = function () { + return _parse4.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "codeBlock", + lang: capture[2] || undefined, + content: capture[3] + }; + }), + react: null, + html: null + }, + blockQuote: { + order: currOrder++, + match: blockRegex(/^( *>[^\n]+(\n[^\n]+)*\n*)+\n{2,}/), + parse: function (_parse5) { + function parse(_x13, _x14, _x15) { + return _parse5.apply(this, arguments); + } + + parse.toString = function () { + return _parse5.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var content = capture[0].replace(/^ *> ?/gm, ""); + return { + content: parse(content, state) + }; + }), + react: function react(node, output, state) { + return reactElement("blockquote", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("blockquote", output(node.content, state)); + } + }, + list: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + // We only want to break into a list if we are at the start of a + // line. This is to avoid parsing "hi * there" with "* there" + // becoming a part of a list. + // You might wonder, "but that's inline, so of course it wouldn't + // start a list?". You would be correct! Except that some of our + // lists can be inline, because they might be inside another list, + // in which case we can parse with inline scope, but need to allow + // nested lists inside this inline scope. + var prevCaptureStr = state.prevCapture == null ? "" : state.prevCapture[0]; + var isStartOfLineCapture = LIST_LOOKBEHIND_R.exec(prevCaptureStr); + var isListBlock = state._list || !state.inline; + + if (isStartOfLineCapture && isListBlock) { + source = isStartOfLineCapture[1] + source; + return LIST_R.exec(source); + } else { + return null; + } + }, + parse: function (_parse6) { + function parse(_x16, _x17, _x18) { + return _parse6.apply(this, arguments); + } + + parse.toString = function () { + return _parse6.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var bullet = capture[2]; + var ordered = bullet.length > 1; + var start = ordered ? +bullet : undefined; + var items = capture[0].replace(LIST_BLOCK_END_R, "\n").match(LIST_ITEM_R); // We know this will match here, because of how the regexes are + // defined + + var lastItemWasAParagraph = false; + var itemContent = items.map(function (item, i) { + // We need to see how far indented this item is: + var prefixCapture = LIST_ITEM_PREFIX_R.exec(item); + var space = prefixCapture ? prefixCapture[0].length : 0; // And then we construct a regex to "unindent" the subsequent + // lines of the items by that amount: + + var spaceRegex = new RegExp("^ {1," + space + "}", "gm"); // Before processing the item, we need a couple things + + var content = item // remove indents on trailing lines: + .replace(spaceRegex, "") // remove the bullet: + .replace(LIST_ITEM_PREFIX_R, ""); // I'm not sur4 why this is necessary again? + // Handling "loose" lists, like: + // + // * this is wrapped in a paragraph + // + // * as is this + // + // * as is this + + var isLastItem = i === items.length - 1; + var containsBlocks = content.indexOf("\n\n") !== -1; // Any element in a list is a block if it contains multiple + // newlines. The last element in the list can also be a block + // if the previous item in the list was a block (this is + // because non-last items in the list can end with \n\n, but + // the last item can't, so we just "inherit" this property + // from our previous element). + + var thisItemIsAParagraph = containsBlocks || isLastItem && lastItemWasAParagraph; + lastItemWasAParagraph = thisItemIsAParagraph; // backup our state for restoration afterwards. We're going to + // want to set state._list to true, and state.inline depending + // on our list's looseness. + + var oldStateInline = state.inline; + var oldStateList = state._list; + state._list = true; // Parse inline if we're in a tight list, or block if we're in + // a loose list. + + var adjustedContent; + + if (thisItemIsAParagraph) { + state.inline = false; + adjustedContent = content.replace(LIST_ITEM_END_R, "\n\n"); + } else { + state.inline = true; + adjustedContent = content.replace(LIST_ITEM_END_R, ""); + } + + var result = parse(adjustedContent, state); // Restore our state before returning + + state.inline = oldStateInline; + state._list = oldStateList; + return result; + }); + return { + ordered: ordered, + start: start, + items: itemContent + }; + }), + react: function react(node, output, state) { + var ListWrapper = node.ordered ? "ol" : "ul"; + return reactElement(ListWrapper, state.key, { + start: node.start, + children: node.items.map(function (item, i) { + return reactElement("li", "" + i, { + children: output(item, state) + }); + }) + }); + }, + html: function html(node, output, state) { + var listItems = node.items.map(function (item) { + return htmlTag("li", output(item, state)); + }).join(""); + var listTag = node.ordered ? "ol" : "ul"; + var attributes = { + start: node.start + }; + return htmlTag(listTag, listItems, attributes); + } + }, + def: { + order: currOrder++, + // TODO(aria): This will match without a blank line before the next + // block element, which is inconsistent with most of the rest of + // simple-markdown. + match: blockRegex(/^ *\[([^\]]+)\]: *<?([^\s>]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/), + parse: function (_parse7) { + function parse(_x19, _x20, _x21) { + return _parse7.apply(this, arguments); + } + + parse.toString = function () { + return _parse7.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var def = capture[1].replace(/\s+/g, " ").toLowerCase(); + var target = capture[2]; + var title = capture[3]; // Look for previous links/images using this def + // If any links/images using this def have already been declared, + // they will have added themselves to the state._refs[def] list + // (_ to deconflict with client-defined state). We look through + // that list of reflinks for this def, and modify those AST nodes + // with our newly found information now. + // Sorry :(. + + if (state._refs && state._refs[def]) { + // `refNode` can be a link or an image + state._refs[def].forEach(function (refNode) { + refNode.target = target; + refNode.title = title; + }); + } // Add this def to our map of defs for any future links/images + // In case we haven't found any or all of the refs referring to + // this def yet, we add our def to the table of known defs, so + // that future reflinks can modify themselves appropriately with + // this information. + + + state._defs = state._defs || {}; + state._defs[def] = { + target: target, + title: title + }; // return the relevant parsed information + // for debugging only. + + return { + def: def, + target: target, + title: title + }; + }), + react: function react() { + return null; + }, + html: function html() { + return ""; + } + }, + table: { + order: currOrder++, + match: blockRegex(TABLES.TABLE_REGEX), + parse: TABLES.parseTable, + react: function react(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? {} : { + textAlign: node.align[colIndex] + }; + }; + + var headers = node.header.map(function (content, i) { + return reactElement("th", "" + i, { + style: getStyle(i), + scope: "col", + children: output(content, state) + }); + }); + var rows = node.cells.map(function (row, r) { + return reactElement("tr", "" + r, { + children: row.map(function (content, c) { + return reactElement("td", "" + c, { + style: getStyle(c), + children: output(content, state) + }); + }) + }); + }); + return reactElement("table", state.key, { + children: [reactElement("thead", "thead", { + children: reactElement("tr", null, { + children: headers + }) + }), reactElement("tbody", "tbody", { + children: rows + })] + }); + }, + html: function html(node, output, state) { + var getStyle = function getStyle(colIndex) { + return node.align[colIndex] == null ? "" : "text-align:" + node.align[colIndex] + ";"; + }; + + var headers = node.header.map(function (content, i) { + return htmlTag("th", output(content, state), { + style: getStyle(i), + scope: "col" + }); + }).join(""); + var rows = node.cells.map(function (row) { + var cols = row.map(function (content, c) { + return htmlTag("td", output(content, state), { + style: getStyle(c) + }); + }).join(""); + return htmlTag("tr", cols); + }).join(""); + var thead = htmlTag("thead", htmlTag("tr", headers)); + var tbody = htmlTag("tbody", rows); + return htmlTag("table", thead + tbody); + } + }, + newline: { + order: currOrder++, + match: blockRegex(/^(?:\n *)*\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return "\n"; + }, + html: function html(node, output, state) { + return "\n"; + } + }, + paragraph: { + order: currOrder++, + match: blockRegex(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("div", state.key, { + className: "paragraph", + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + class: "paragraph" + }; + return htmlTag("div", output(node.content, state), attributes); + } + }, + escape: { + order: currOrder++, + // We don't allow escaping numbers, letters, or spaces here so that + // backslashes used in plain text still get rendered. But allowing + // escaping anything else provides a very flexible escape mechanism, + // regardless of how this grammar is extended. + match: inlineRegex(/^\\([^0-9A-Za-z\s])/), + parse: function (_parse8) { + function parse(_x22, _x23, _x24) { + return _parse8.apply(this, arguments); + } + + parse.toString = function () { + return _parse8.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "text", + content: capture[1] + }; + }), + react: null, + html: null + }, + tableSeparator: { + order: currOrder++, + // $FlowFixMe + match: function match(source, state) { + if (!state.inTable) { + return null; + } + + return /^ *\| */.exec(source); + }, + parse: function parse() { + return { + type: "tableSeparator" + }; + }, + // These shouldn't be reached, but in case they are, be reasonable: + react: function react() { + return " | "; + }, + html: function html() { + return " | "; + } + }, + autolink: { + order: currOrder++, + match: inlineRegex(/^<([^: >]+:\/[^ >]+)>/), + parse: function (_parse9) { + function parse(_x25, _x26, _x27) { + return _parse9.apply(this, arguments); + } + + parse.toString = function () { + return _parse9.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1] + }; + }), + react: null, + html: null + }, + mailto: { + order: currOrder++, + match: inlineRegex(/^<([^ >]+@[^ >]+)>/), + parse: function (_parse10) { + function parse(_x28, _x29, _x30) { + return _parse10.apply(this, arguments); + } + + parse.toString = function () { + return _parse10.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var address = capture[1]; + var target = capture[1]; // Check for a `mailto:` already existing in the link: + + if (!AUTOLINK_MAILTO_CHECK_R.test(target)) { + target = "mailto:" + target; + } + + return { + type: "link", + content: [{ + type: "text", + content: address + }], + target: target + }; + }), + react: null, + html: null + }, + url: { + order: currOrder++, + match: inlineRegex(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/), + parse: function (_parse11) { + function parse(_x31, _x32, _x33) { + return _parse11.apply(this, arguments); + } + + parse.toString = function () { + return _parse11.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + type: "link", + content: [{ + type: "text", + content: capture[1] + }], + target: capture[1], + title: undefined + }; + }), + react: null, + html: null + }, + link: { + order: currOrder++, + match: inlineRegex(new RegExp("^\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse12) { + function parse(_x34, _x35, _x36) { + return _parse12.apply(this, arguments); + } + + parse.toString = function () { + return _parse12.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var link = { + content: parse(capture[1], state), + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return link; + }), + react: function react(node, output, state) { + return reactElement("a", state.key, { + href: sanitizeUrl(node.target), + title: node.title, + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + var attributes = { + href: sanitizeUrl(node.target), + title: node.title + }; + return htmlTag("a", output(node.content, state), attributes); + } + }, + image: { + order: currOrder++, + match: inlineRegex(new RegExp("^!\\[(" + LINK_INSIDE + ")\\]\\(" + LINK_HREF_AND_TITLE + "\\)")), + parse: function (_parse13) { + function parse(_x37, _x38, _x39) { + return _parse13.apply(this, arguments); + } + + parse.toString = function () { + return _parse13.toString(); + }; + + return parse; + }(function (capture, parse, state) { + var image = { + alt: capture[1], + target: unescapeUrl(capture[2]), + title: capture[3] + }; + return image; + }), + react: function react(node, output, state) { + return reactElement("img", state.key, { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }); + }, + html: function html(node, output, state) { + var attributes = { + src: sanitizeUrl(node.target), + alt: node.alt, + title: node.title + }; + return htmlTag("img", "", attributes, false); + } + }, + reflink: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse14) { + function parse(_x40, _x41, _x42) { + return _parse14.apply(this, arguments); + } + + parse.toString = function () { + return _parse14.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "link", + content: parse(capture[1], state) + }); + }), + react: null, + html: null + }, + refimage: { + order: currOrder++, + match: inlineRegex(new RegExp( // The first [part] of the link + "^!\\[(" + LINK_INSIDE + ")\\]" + // The [ref] target of the link + "\\s*\\[([^\\]]*)\\]")), + parse: function (_parse15) { + function parse(_x43, _x44, _x45) { + return _parse15.apply(this, arguments); + } + + parse.toString = function () { + return _parse15.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return parseRef(capture, state, { + type: "image", + alt: capture[1] + }); + }), + react: null, + html: null + }, + em: { + order: currOrder + /* same as strong/u */ + , + match: inlineRegex(new RegExp( // only match _s surrounding words. + "^\\b_" + "((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_" + "\\b" + // Or match *s: + "|" + // Only match *s that are followed by a non-space: + "^\\*(?=\\S)(" + // Match at least one of: + "(?:" + // - `**`: so that bolds inside italics don't close the + // italics + "\\*\\*|" + // - escape sequence: so escaped *s don't close us + "\\\\[\\s\\S]|" + // - whitespace: followed by a non-* (we don't + // want ' *' to close an italics--it might + // start a list) + "\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|" + // - non-whitespace, non-*, non-backslash characters + "[^\\s\\*\\\\]" + ")+?" + // followed by a non-space, non-* then * + ")\\*(?!\\*)")), + quality: function quality(capture) { + // precedence by length, `em` wins ties: + return capture[0].length + 0.2; + }, + parse: function (_parse16) { + function parse(_x46, _x47, _x48) { + return _parse16.apply(this, arguments); + } + + parse.toString = function () { + return _parse16.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: parse(capture[2] || capture[1], state) + }; + }), + react: function react(node, output, state) { + return reactElement("em", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("em", output(node.content, state)); + } + }, + strong: { + order: currOrder + /* same as em */ + , + match: inlineRegex(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/), + quality: function quality(capture) { + // precedence by length, wins ties vs `u`: + return capture[0].length + 0.1; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("strong", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("strong", output(node.content, state)); + } + }, + u: { + order: currOrder++ + /* same as em&strong; increment for next rule */ + , + match: inlineRegex(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/), + quality: function quality(capture) { + // precedence by length, loses all ties + return capture[0].length; + }, + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("u", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("u", output(node.content, state)); + } + }, + del: { + order: currOrder++, + match: inlineRegex(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/), + parse: parseCaptureInline, + react: function react(node, output, state) { + return reactElement("del", state.key, { + children: output(node.content, state) + }); + }, + html: function html(node, output, state) { + return htmlTag("del", output(node.content, state)); + } + }, + inlineCode: { + order: currOrder++, + match: inlineRegex(/^(`+)([\s\S]*?[^`])\1(?!`)/), + parse: function (_parse17) { + function parse(_x49, _x50, _x51) { + return _parse17.apply(this, arguments); + } + + parse.toString = function () { + return _parse17.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[2].replace(INLINE_CODE_ESCAPE_BACKTICKS_R, "$1") + }; + }), + react: function react(node, output, state) { + return reactElement("code", state.key, { + children: node.content + }); + }, + html: function html(node, output, state) { + return htmlTag("code", sanitizeText(node.content)); + } + }, + br: { + order: currOrder++, + match: anyScopeRegex(/^ {2,}\n/), + parse: ignoreCapture, + react: function react(node, output, state) { + return reactElement("br", state.key, EMPTY_PROPS); + }, + html: function html(node, output, state) { + return "<br>"; + } + }, + text: { + order: currOrder++, + // Here we look for anything followed by non-symbols, + // double newlines, or double-space-newlines + // We break on any symbol characters so that this grammar + // is easy to extend without needing to modify this regex + match: anyScopeRegex(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/), + parse: function (_parse18) { + function parse(_x52, _x53, _x54) { + return _parse18.apply(this, arguments); + } + + parse.toString = function () { + return _parse18.toString(); + }; + + return parse; + }(function (capture, parse, state) { + return { + content: capture[0] + }; + }), + react: function react(node, output, state) { + return node.content; + }, + html: function html(node, output, state) { + return sanitizeText(node.content); + } + } +}; +/** (deprecated) */ + +var ruleOutput = function ruleOutput( // $FlowFixMe +rules, property) { + if (!property && typeof console !== "undefined") { + console.warn("simple-markdown ruleOutput should take 'react' or " + "'html' as the second argument."); + } + + var nestedRuleOutput = function nestedRuleOutput(ast, outputFunc, state) { + return rules[ast.type][property](ast, outputFunc, state); + }; + + return nestedRuleOutput; +}; +/** (deprecated) + */ + + +var reactFor = function reactFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + var oldKey = state.key; + var result = []; // map nestedOutput over the ast, except group any text + // nodes together into a single string output. + + var lastResult = null; + + for (var i = 0; i < ast.length; i++) { + state.key = "" + i; + var nodeOut = nestedOutput(ast[i], state); + + if (typeof nodeOut === "string" && typeof lastResult === "string") { + lastResult = lastResult + nodeOut; + result[result.length - 1] = lastResult; + } else { + result.push(nodeOut); + lastResult = nodeOut; + } + } + + state.key = oldKey; + return result; + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; +/** (deprecated) + */ + + +var htmlFor = function htmlFor(outputFunc) { + var nestedOutput = function nestedOutput(ast, state) { + state = state || {}; + + if (Array.isArray(ast)) { + return ast.map(function (node) { + return nestedOutput(node, state); + }).join(""); + } else { + return outputFunc(ast, nestedOutput, state); + } + }; + + return nestedOutput; +}; + +var outputFor = function outputFor(rules, property) { + var defaultState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!property) { + throw new Error("simple-markdown: outputFor: `property` must be " + "defined. " + "if you just upgraded, you probably need to replace `outputFor` " + "with `reactFor`"); + } + + var latestState; // $FlowFixMe[incompatible-type] + + var arrayRule = rules.Array || defaultRules.Array; // Tricks to convince tsc that this var is not null: + + var arrayRuleCheck = arrayRule[property]; + + if (!arrayRuleCheck) { + throw new Error("simple-markdown: outputFor: to join nodes of type `" + property + "` you must provide an `Array:` joiner rule with that type, " + "Please see the docs for details on specifying an Array rule."); + } + + var arrayRuleOutput = arrayRuleCheck; + + var nestedOutput = function nestedOutput(ast, state) { + state = state || latestState; + latestState = state; + + if (Array.isArray(ast)) { + return arrayRuleOutput(ast, nestedOutput, state); + } else { + return rules[ast.type][property](ast, nestedOutput, state); + } + }; + + var outerOutput = function outerOutput(ast, state) { + latestState = populateInitialState(state, defaultState); + return nestedOutput(ast, latestState); + }; + + return outerOutput; +}; // $FlowFixMe[incompatible-call] + + +var defaultRawParse = parserFor(defaultRules); + +var defaultBlockParse = function defaultBlockParse(source, state) { + state = state || {}; + state.inline = false; + return defaultRawParse(source, state); +}; + +var defaultInlineParse = function defaultInlineParse(source, state) { + state = state || {}; + state.inline = true; + return defaultRawParse(source, state); +}; + +var defaultImplicitParse = function defaultImplicitParse(source, state) { + var isBlock = BLOCK_END_R.test(source); + state = state || {}; + state.inline = !isBlock; + return defaultRawParse(source, state); +}; // $FlowFixMe[incompatible-call] + + +var defaultReactOutput = outputFor(defaultRules, "react"); // $FlowFixMe[incompatible-call] + +var defaultHtmlOutput = outputFor(defaultRules, "html"); + +var markdownToReact = function markdownToReact(source, state) { + return defaultReactOutput(defaultBlockParse(source, state), state); +}; + +var markdownToHtml = function markdownToHtml(source, state) { + return defaultHtmlOutput(defaultBlockParse(source, state), state); +}; // TODO: This needs definition + + +var ReactMarkdown = function ReactMarkdown(props) { + var divProps = {}; + + for (var prop in props) { + if (prop !== "source" && // $FlowFixMe + Object.prototype.hasOwnProperty.call(props, prop)) { + divProps[prop] = props[prop]; + } + } + + divProps.children = markdownToReact(props.source); + return reactElement("div", null, divProps); +}; + +// $FlowFixMe +var SimpleMarkdown = { + defaultRules: defaultRules, + parserFor: parserFor, + outputFor: outputFor, + inlineRegex: inlineRegex, + blockRegex: blockRegex, + anyScopeRegex: anyScopeRegex, + parseInline: parseInline, + parseBlock: parseBlock, + // default wrappers: + markdownToReact: markdownToReact, + markdownToHtml: markdownToHtml, + ReactMarkdown: ReactMarkdown, + defaultBlockParse: defaultBlockParse, + defaultInlineParse: defaultInlineParse, + defaultImplicitParse: defaultImplicitParse, + defaultReactOutput: defaultReactOutput, + defaultHtmlOutput: defaultHtmlOutput, + preprocess: preprocess, + sanitizeText: sanitizeText, + sanitizeUrl: sanitizeUrl, + unescapeUrl: unescapeUrl, + htmlTag: htmlTag, + reactElement: reactElement, + // deprecated: + defaultRawParse: defaultRawParse, + ruleOutput: ruleOutput, + reactFor: reactFor, + htmlFor: htmlFor, + defaultParse: function defaultParse() { + if (typeof console !== "undefined") { + console.warn("defaultParse is deprecated, please use `defaultImplicitParse`"); + } + + return defaultImplicitParse.apply(null, arguments); + }, + defaultOutput: function defaultOutput() { + if (typeof console !== "undefined") { + console.warn("defaultOutput is deprecated, please use `defaultReactOutput`"); + } + + return defaultReactOutput.apply(null, arguments); + } +}; + + +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 42494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "bK": () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js + + + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue/* default */.Z)(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js +var isPlainObject = __webpack_require__(37514); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = (0,isArray/* default */.Z)(srcValue), + isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue), + isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if ((0,isArray/* default */.Z)(objValue)) { + newValue = objValue; + } + else if ((0,isArrayLikeObject/* default */.Z)(objValue)) { + newValue = (0,_copyArray/* default */.Z)(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true); + } + else { + newValue = []; + } + } + else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) { + newValue = objValue; + if ((0,isArguments/* default */.Z)(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) { + newValue = (0,_initCloneObject/* default */.Z)(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + (0,_baseFor/* default */.Z)(source, function(srcValue, key) { + stack || (stack = new _Stack/* default */.Z); + if ((0,isObject/* default */.Z)(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, keysIn/* default */.Z); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return (0,_baseRest/* default */.Z)(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default.Date.now */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "k": () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 39354: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "c": () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/clone.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 31667: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _Stack) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules +var _ListCache = __webpack_require__(67308); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache/* default */.Z; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js +var _Map = __webpack_require__(86183); +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache/* default */.Z) { + var pairs = data.__data__; + if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache/* default */.Z(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache/* default */.Z(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + + +/***/ }), + +/***/ 84073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Built-in value references. */ +var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 87668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _arrayLikeKeys) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = (0,isArray/* default */.Z)(value), + isArg = !isArr && (0,isArguments/* default */.Z)(value), + isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value), + isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + (0,_isIndex/* default */.Z)(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 72954: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) || + (value === undefined && !(key in object))) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value); + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue); + + +/***/ }), + +/***/ 74752: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904); + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) { + (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 61395: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseFor) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 69581: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203); +/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211); +/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227); + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + ''); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 41884: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073); + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer)); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer); + + +/***/ }), + +/***/ 91050: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092); + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer); + + +/***/ }), + +/***/ 12701: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884); + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray); + + +/***/ }), + +/***/ 87215: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray); + + +/***/ }), + +/***/ 31899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954); +/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752); + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue); + } else { + (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject); + + +/***/ }), + +/***/ 77904: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508); + + +var defineProperty = (function() { + try { + var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 12513: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851); + + +/** Built-in value references. */ +var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 73658: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _initCloneObject) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!(0,isObject/* default */.Z)(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object)) + ? _baseCreate((0,_getPrototype/* default */.Z)(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + + +/***/ }), + +/***/ 56009: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex); + + +/***/ }), + +/***/ 50439: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226); + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length)) + : (type == 'string' && index in object) + ) { + return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value); + } + return false; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 81211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _overRest) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 27227: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ _setToString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js +var _defineProperty = __webpack_require__(77904); +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) { + return (0,_defineProperty/* default */.Z)(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': (0,constant/* default */.Z)(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 62002: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 69203: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity); + + +/***/ }), + +/***/ 836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject); + + +/***/ }), + +/***/ 37514: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) { + return false; + } + var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 32957: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_keysIn) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules +var _arrayLikeKeys = __webpack_require__(87668); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js +var _isPrototype = __webpack_require__(72764); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!(0,isObject/* default */.Z)(object)) { + return _nativeKeysIn(object); + } + var isProto = (0,_isPrototype/* default */.Z)(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "Z": () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 211: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "c": () => (/* binding */ createText) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43047); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3502); + + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = withoutMultipleNewlines.replace(/^\s+/gm, ""); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(preprocessedMarkdown); + let lines = [[]]; + let currentLine = 0; + function processNode(node, parentType) { + if (node.type === "text") { + const textLines = node.content.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType || "normal" }); + } + }); + }); + } else if (node.type === "strong" || node.type === "em") { + node.content.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + syntaxTree.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.content.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const mdParse = _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_1__/* ["default"].defaultBlockParse */ .Z.defaultBlockParse; + const syntaxTree = mdParse(markdown); + function output(node) { + if (node.type === "text") { + return node.content.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.content.map(output).join("")}</strong>`; + } else if (node.type === "em") { + return `<em>${node.content.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.content.map(output).join("")}</p>`; + } else { + return ""; + } + } + return syntaxTree.map(output).join(""); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + `<span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + let bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = -1; + structuredText.forEach((line) => { + lineIndex++; + let tspan = createTspan(textElement, lineIndex, lineHeight); + let words = [...line].reverse(); + let currentWord; + let wrappedLine = []; + while (words.length) { + currentWord = words.pop(); + wrappedLine.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + if (tspan.node().getComputedTextLength() > width) { + wrappedLine.pop(); + words.push(currentWord); + updateTextContentAndStyles(tspan, wrappedLine); + wrappedLine = []; + lineIndex++; + tspan = createTspan(textElement, lineIndex, lineHeight); + } + } + }); + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "em" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width, + addSvgBackground = false +} = {}) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_3__.d)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlSpan(el, node, width, classes); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const special = ['"', "'", ".", ",", ":", ";", "!", "?", "(", ")", "[", "]", "{", "}"]; + let lastWord; + structuredText.forEach((line) => { + line.forEach((word) => { + if (special.includes(word.content) && lastWord) { + lastWord.content += word.content; + word.content = ""; + } + lastWord = word; + }); + }); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + +//# sourceMappingURL=createText-1f5f8f92.js.map + + +/***/ }), + +/***/ 48099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "a": () => (/* binding */ insertMarkers$1), +/* harmony export */ "b": () => (/* binding */ clear$1), +/* harmony export */ "c": () => (/* binding */ createLabel$1), +/* harmony export */ "d": () => (/* binding */ clear), +/* harmony export */ "e": () => (/* binding */ insertNode), +/* harmony export */ "f": () => (/* binding */ insertEdgeLabel), +/* harmony export */ "g": () => (/* binding */ insertEdge), +/* harmony export */ "h": () => (/* binding */ positionEdgeLabel), +/* harmony export */ "i": () => (/* binding */ intersectRect$1), +/* harmony export */ "l": () => (/* binding */ labelHelper), +/* harmony export */ "p": () => (/* binding */ positionNode), +/* harmony export */ "s": () => (/* binding */ setNodeElem), +/* harmony export */ "u": () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(211); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43047); +/* harmony import */ var _svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(77657); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(81188); + + + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 12 20").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(label, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), { + useHtmlLabels, + width: node.width || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.b)((0,_mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_2__.d)(labelText), (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(" + 0 + ", " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const question = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = (parent, node) => { + const { shapeSvg } = labelHelper(parent, node, "label", true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", " + 0 + ")" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = (parent, node) => { + const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = (parent, node) => { + const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_2526cba0_js__WEBPACK_IMPORTED_MODULE_4__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = shapes[node.shape](newEl, node, dir); + } else { + el = shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_3__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcLabelPosition(path); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_5__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().flowchart.arrowMarkerAbsolute || (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + +//# sourceMappingURL=edges-2e77835f.js.map + + +/***/ }), + +/***/ 12566: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "r": () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39354); +/* harmony import */ var _edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(48099); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70044); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(211); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(59373); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = JSON.parse(JSON.stringify(edge)); + const edge2 = JSON.parse(JSON.stringify(edge)); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_1f5f8f92_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.k)((0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.g)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = (_elem, graph, diagramtype, parentCluster) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + graph.nodes().forEach(function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); + const newEl = o.elem; + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = (elem, graph, markers, diagramtype, id) => { + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_2e77835f_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + adjustClustersAndEdges(graph); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + recursiveRender(elem, graph, diagramtype); +}; + +//# sourceMappingURL=index-5219d011.js.map + + +/***/ }), + +/***/ 6964: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "diagram": () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(1341); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45625); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59373); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(70044); +/* harmony import */ var _index_5219d011_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(12566); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(81188); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20683); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42494); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39354); +/* harmony import */ var _khanacademy_simple_markdown__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3502); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(17967); + + + + + + + + + + + + + + + + + + + + +const SHAPE_STATE = "rect"; +const SHAPE_STATE_WITH_DESC = "rectWithTitle"; +const SHAPE_START = "start"; +const SHAPE_END = "end"; +const SHAPE_DIVIDER = "divider"; +const SHAPE_GROUP = "roundedWithTitle"; +const SHAPE_NOTE = "note"; +const SHAPE_NOTEGROUP = "noteGroup"; +const CSS_DIAGRAM = "statediagram"; +const CSS_STATE = "state"; +const CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`; +const CSS_EDGE = "transition"; +const CSS_NOTE = "note"; +const CSS_NOTE_EDGE = "note-edge"; +const CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`; +const CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`; +const CSS_CLUSTER = "cluster"; +const CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`; +const CSS_CLUSTER_ALT = "cluster-alt"; +const CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`; +const PARENT = "parent"; +const NOTE = "note"; +const DOMID_STATE = "state"; +const DOMID_TYPE_SPACER = "----"; +const NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`; +const PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`; +const G_EDGE_STYLE = "fill:none"; +const G_EDGE_ARROWHEADSTYLE = "fill: #333"; +const G_EDGE_LABELPOS = "c"; +const G_EDGE_LABELTYPE = "text"; +const G_EDGE_THICKNESS = "normal"; +let nodeDb = {}; +let graphItemCount = 0; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + cnf[key]; + } +}; +const getClasses = function(text, diagramObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Extracting classes"); + diagramObj.db.clear(); + try { + diagramObj.parser.parse(text); + diagramObj.db.extract(diagramObj.db.getRootDocV2()); + return diagramObj.db.getClasses(); + } catch (e) { + return e; + } +}; +function getClassesFromDbInfo(dbInfoItem) { + if (dbInfoItem === void 0 || dbInfoItem === null) { + return ""; + } else { + if (dbInfoItem.classes) { + return dbInfoItem.classes.join(" "); + } else { + return ""; + } + } +} +function stateDomId(itemId = "", counter = 0, type = "", typeSpacer = DOMID_TYPE_SPACER) { + const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : ""; + return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`; +} +const setupNode = (g, parent, parsedItem, diagramStates, diagramDb, altFlag) => { + const itemId = parsedItem.id; + const classStr = getClassesFromDbInfo(diagramStates[itemId]); + if (itemId !== "root") { + let shape = SHAPE_STATE; + if (parsedItem.start === true) { + shape = SHAPE_START; + } + if (parsedItem.start === false) { + shape = SHAPE_END; + } + if (parsedItem.type !== _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.a) { + shape = parsedItem.type; + } + if (!nodeDb[itemId]) { + nodeDb[itemId] = { + id: itemId, + shape, + description: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(itemId, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)()), + classes: `${classStr} ${CSS_DIAGRAM_STATE}` + }; + } + const newNode = nodeDb[itemId]; + if (parsedItem.description) { + if (Array.isArray(newNode.description)) { + newNode.shape = SHAPE_STATE_WITH_DESC; + newNode.description.push(parsedItem.description); + } else { + if (newNode.description.length > 0) { + newNode.shape = SHAPE_STATE_WITH_DESC; + if (newNode.description === itemId) { + newNode.description = [parsedItem.description]; + } else { + newNode.description = [newNode.description, parsedItem.description]; + } + } else { + newNode.shape = SHAPE_STATE; + newNode.description = parsedItem.description; + } + } + newNode.description = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeTextOrArray(newNode.description, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)()); + } + if (newNode.description.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) { + newNode.shape = SHAPE_STATE; + } + if (!newNode.type && parsedItem.doc) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Setting cluster for ", itemId, getDir(parsedItem)); + newNode.type = "group"; + newNode.dir = getDir(parsedItem); + newNode.shape = parsedItem.type === _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.b ? SHAPE_DIVIDER : SHAPE_GROUP; + newNode.classes = newNode.classes + " " + CSS_DIAGRAM_CLUSTER + " " + (altFlag ? CSS_DIAGRAM_CLUSTER_ALT : ""); + } + const nodeData = { + labelStyle: "", + shape: newNode.shape, + labelText: newNode.description, + // typeof newNode.description === 'object' + // ? newNode.description[0] + // : newNode.description, + classes: newNode.classes, + style: "", + //styles.style, + id: itemId, + dir: newNode.dir, + domId: stateDomId(itemId, graphItemCount), + type: newNode.type, + padding: 15 + //getConfig().flowchart.padding + }; + nodeData.centerLabel = true; + if (parsedItem.note) { + const noteData = { + labelStyle: "", + shape: SHAPE_NOTE, + labelText: parsedItem.note.text, + classes: CSS_DIAGRAM_NOTE, + // useHtmlLabels: false, + style: "", + // styles.style, + id: itemId + NOTE_ID + "-" + graphItemCount, + domId: stateDomId(itemId, graphItemCount, NOTE), + type: newNode.type, + padding: 15 + //getConfig().flowchart.padding + }; + const groupData = { + labelStyle: "", + shape: SHAPE_NOTEGROUP, + labelText: parsedItem.note.text, + classes: newNode.classes, + style: "", + // styles.style, + id: itemId + PARENT_ID, + domId: stateDomId(itemId, graphItemCount, PARENT), + type: "group", + padding: 0 + //getConfig().flowchart.padding + }; + graphItemCount++; + const parentNodeId = itemId + PARENT_ID; + g.setNode(parentNodeId, groupData); + g.setNode(noteData.id, noteData); + g.setNode(itemId, nodeData); + g.setParent(itemId, parentNodeId); + g.setParent(noteData.id, parentNodeId); + let from = itemId; + let to = noteData.id; + if (parsedItem.note.position === "left of") { + from = noteData.id; + to = itemId; + } + g.setEdge(from, to, { + arrowhead: "none", + arrowType: "", + style: G_EDGE_STYLE, + labelStyle: "", + classes: CSS_EDGE_NOTE_EDGE, + arrowheadStyle: G_EDGE_ARROWHEADSTYLE, + labelpos: G_EDGE_LABELPOS, + labelType: G_EDGE_LABELTYPE, + thickness: G_EDGE_THICKNESS + }); + } else { + g.setNode(itemId, nodeData); + } + } + if (parent && parent.id !== "root") { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Setting node ", itemId, " to be child of its parent ", parent.id); + g.setParent(itemId, parent.id); + } + if (parsedItem.doc) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Adding nodes children "); + setupDoc(g, parsedItem, parsedItem.doc, diagramStates, diagramDb, !altFlag); + } +}; +const setupDoc = (g, parentParsedItem, doc, diagramStates, diagramDb, altFlag) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("items", doc); + doc.forEach((item) => { + switch (item.stmt) { + case _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.c: + setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); + break; + case _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.a: + setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); + break; + case _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.S: + { + setupNode(g, parentParsedItem, item.state1, diagramStates, diagramDb, altFlag); + setupNode(g, parentParsedItem, item.state2, diagramStates, diagramDb, altFlag); + const edgeData = { + id: "edge" + graphItemCount, + arrowhead: "normal", + arrowTypeEnd: "arrow_barb", + style: G_EDGE_STYLE, + labelStyle: "", + label: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(item.description, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)()), + arrowheadStyle: G_EDGE_ARROWHEADSTYLE, + labelpos: G_EDGE_LABELPOS, + labelType: G_EDGE_LABELTYPE, + thickness: G_EDGE_THICKNESS, + classes: CSS_EDGE + }; + g.setEdge(item.state1.id, item.state2.id, edgeData, graphItemCount); + graphItemCount++; + } + break; + } + }); +}; +const getDir = (parsedItem, defaultDir = _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.e) => { + let dir = defaultDir; + if (parsedItem.doc) { + for (let i = 0; i < parsedItem.doc.length; i++) { + const parsedItemDoc = parsedItem.doc[i]; + if (parsedItemDoc.stmt === "dir") { + dir = parsedItemDoc.value; + } + } + } + return dir; +}; +const draw = function(text, id, _version, diag) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Drawing state diagram (v2)", id); + nodeDb = {}; + let dir = diag.db.getDirection(); + if (dir === void 0) { + dir = _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.D; + } + const { securityLevel, state: conf } = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.g)(); + const nodeSpacing = conf.nodeSpacing || 50; + const rankSpacing = conf.rankSpacing || 50; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); + diag.db.extract(diag.db.getRootDocV2()); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); + const diagramStates = diag.db.getStates(); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: getDir(diag.db.getRootDocV2()), + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + setupNode(g, void 0, diag.db.getRootDocV2(), diagramStates, diag.db, true); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + (0,_index_5219d011_js__WEBPACK_IMPORTED_MODULE_10__.r)(element, g, ["barb"], CSS_DIAGRAM, id); + const padding = 8; + _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_11__.u.insertTitle(svg, "statediagramTitleText", conf.titleTopMargin, diag.db.getDiagramTitle()); + const bounds = svg.node().getBBox(); + const width = bounds.width + padding * 2; + const height = bounds.height + padding * 2; + svg.attr("class", CSS_DIAGRAM); + const svgBounds = svg.node().getBBox(); + (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_11__.k)(svg, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(`viewBox ${vBox}`); + svg.attr("viewBox", vBox); + const labels = document.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = document.createElementNS("http://www.w3.org/2000/svg", SHAPE_STATE); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } +}; +const renderer = { + setConf, + getClasses, + draw +}; +const diagram = { + parser: _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.p, + db: _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.d, + renderer, + styles: _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_47a825a5_js__WEBPACK_IMPORTED_MODULE_9__.d.clear(); + } +}; + +//# sourceMappingURL=stateDiagram-v2-9765461d.js.map + + +/***/ }), + +/***/ 1341: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "D": () => (/* binding */ DEFAULT_DIAGRAM_DIRECTION), +/* harmony export */ "S": () => (/* binding */ STMT_RELATION), +/* harmony export */ "a": () => (/* binding */ DEFAULT_STATE_TYPE), +/* harmony export */ "b": () => (/* binding */ DIVIDER_TYPE), +/* harmony export */ "c": () => (/* binding */ STMT_STATE), +/* harmony export */ "d": () => (/* binding */ db), +/* harmony export */ "e": () => (/* binding */ DEFAULT_NESTED_DOC_DIR), +/* harmony export */ "p": () => (/* binding */ parser$1), +/* harmony export */ "s": () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70044); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(81188); +/* harmony import */ var _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43047); + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 37], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 32], $Vi = [1, 33], $Vj = [1, 34], $Vk = [1, 35], $Vl = [1, 36], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 38], $Vr = [1, 45], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vu = [1, 4, 5, 7, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vv = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "directive": 6, "SD": 7, "document": 8, "line": 9, "statement": 10, "classDefStatement": 11, "cssClassStatement": 12, "idStatement": 13, "DESCR": 14, "-->": 15, "HIDE_EMPTY": 16, "scale": 17, "WIDTH": 18, "COMPOSIT_STATE": 19, "STRUCT_START": 20, "STRUCT_STOP": 21, "STATE_DESCR": 22, "AS": 23, "ID": 24, "FORK": 25, "JOIN": 26, "CHOICE": 27, "CONCURRENT": 28, "note": 29, "notePosition": 30, "NOTE_TEXT": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "classDef": 38, "CLASSDEF_ID": 39, "CLASSDEF_STYLEOPTS": 40, "DEFAULT": 41, "class": 42, "CLASSENTITY_IDS": 43, "STYLECLASS": 44, "openDirective": 45, "typeDirective": 46, "closeDirective": 47, ":": 48, "argDirective": 49, "direction_tb": 50, "direction_bt": 51, "direction_rl": 52, "direction_lr": 53, "eol": 54, ";": 55, "EDGE_STATE": 56, "STYLE_SEPARATOR": 57, "left_of": 58, "right_of": 59, "open_directive": 60, "type_directive": 61, "arg_directive": 62, "close_directive": 63, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NL", 7: "SD", 14: "DESCR", 15: "-->", 16: "HIDE_EMPTY", 17: "scale", 18: "WIDTH", 19: "COMPOSIT_STATE", 20: "STRUCT_START", 21: "STRUCT_STOP", 22: "STATE_DESCR", 23: "AS", 24: "ID", 25: "FORK", 26: "JOIN", 27: "CHOICE", 28: "CONCURRENT", 29: "note", 31: "NOTE_TEXT", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 38: "classDef", 39: "CLASSDEF_ID", 40: "CLASSDEF_STYLEOPTS", 41: "DEFAULT", 42: "class", 43: "CLASSENTITY_IDS", 44: "STYLECLASS", 48: ":", 50: "direction_tb", 51: "direction_bt", 52: "direction_rl", 53: "direction_lr", 55: ";", 56: "EDGE_STATE", 57: "STYLE_SEPARATOR", 58: "left_of", 59: "right_of", 60: "open_directive", 61: "type_directive", 62: "arg_directive", 63: "close_directive" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 3], [10, 4], [10, 1], [10, 2], [10, 1], [10, 4], [10, 3], [10, 6], [10, 1], [10, 1], [10, 1], [10, 1], [10, 4], [10, 4], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [11, 3], [11, 3], [12, 3], [6, 3], [6, 5], [32, 1], [32, 1], [32, 1], [32, 1], [54, 1], [54, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1], [45, 1], [46, 1], [49, 1], [47, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setRootDoc($$[$0]); + return $$[$0]; + case 5: + this.$ = []; + break; + case 6: + if ($$[$0] != "nl") { + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + } + break; + case 7: + case 8: + this.$ = $$[$0]; + break; + case 9: + this.$ = "nl"; + break; + case 12: + this.$ = $$[$0]; + break; + case 13: + const stateStmt = $$[$0 - 1]; + stateStmt.description = yy.trimColon($$[$0]); + this.$ = stateStmt; + break; + case 14: + this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; + break; + case 15: + const relDescription = yy.trimColon($$[$0]); + this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; + break; + case 19: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; + break; + case 20: + var id = $$[$0]; + var description = $$[$0 - 2].trim(); + if ($$[$0].match(":")) { + var parts = $$[$0].split(":"); + id = parts[0]; + description = [description, parts[1]]; + } + this.$ = { stmt: "state", id, type: "default", description }; + break; + case 21: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; + break; + case 22: + this.$ = { stmt: "state", id: $$[$0], type: "fork" }; + break; + case 23: + this.$ = { stmt: "state", id: $$[$0], type: "join" }; + break; + case 24: + this.$ = { stmt: "state", id: $$[$0], type: "choice" }; + break; + case 25: + this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; + break; + case 26: + this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; + break; + case 30: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 31: + case 32: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 33: + case 34: + this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; + break; + case 35: + this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 38: + yy.setDirection("TB"); + this.$ = { stmt: "dir", value: "TB" }; + break; + case 39: + yy.setDirection("BT"); + this.$ = { stmt: "dir", value: "BT" }; + break; + case 40: + yy.setDirection("RL"); + this.$ = { stmt: "dir", value: "RL" }; + break; + case 41: + yy.setDirection("LR"); + this.$ = { stmt: "dir", value: "LR" }; + break; + case 44: + case 45: + this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; + break; + case 46: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 47: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 50: + yy.parseDirective("%%{", "open_directive"); + break; + case 51: + yy.parseDirective($$[$0], "type_directive"); + break; + case 52: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 53: + yy.parseDirective("}%%", "close_directive", "state"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, o([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $V4, { 8: 11 }), { 46: 12, 61: [1, 13] }, { 61: [2, 50] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, { 47: 43, 48: [1, 44], 63: $Vr }, o([48, 63], [2, 51]), o($Vs, [2, 6]), { 6: 30, 10: 46, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 8]), o($Vs, [2, 9]), o($Vs, [2, 10]), o($Vs, [2, 11]), o($Vs, [2, 12], { 14: [1, 47], 15: [1, 48] }), o($Vs, [2, 16]), { 18: [1, 49] }, o($Vs, [2, 18], { 20: [1, 50] }), { 23: [1, 51] }, o($Vs, [2, 22]), o($Vs, [2, 23]), o($Vs, [2, 24]), o($Vs, [2, 25]), { 30: 52, 31: [1, 53], 58: [1, 54], 59: [1, 55] }, o($Vs, [2, 28]), o($Vs, [2, 29]), { 34: [1, 56] }, { 36: [1, 57] }, o($Vs, [2, 32]), { 39: [1, 58], 41: [1, 59] }, { 43: [1, 60] }, o($Vt, [2, 44], { 57: [1, 61] }), o($Vt, [2, 45], { 57: [1, 62] }), o($Vs, [2, 38]), o($Vs, [2, 39]), o($Vs, [2, 40]), o($Vs, [2, 41]), o($Vu, [2, 36]), { 49: 63, 62: [1, 64] }, o($Vu, [2, 53]), o($Vs, [2, 7]), o($Vs, [2, 13]), { 13: 65, 24: $Vb, 56: $Vq }, o($Vs, [2, 17]), o($Vv, $V4, { 8: 66 }), { 24: [1, 67] }, { 24: [1, 68] }, { 23: [1, 69] }, { 24: [2, 48] }, { 24: [2, 49] }, o($Vs, [2, 30]), o($Vs, [2, 31]), { 40: [1, 70] }, { 40: [1, 71] }, { 44: [1, 72] }, { 24: [1, 73] }, { 24: [1, 74] }, { 47: 75, 63: $Vr }, { 63: [2, 52] }, o($Vs, [2, 14], { 14: [1, 76] }), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 77], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 20], { 20: [1, 78] }), { 31: [1, 79] }, { 24: [1, 80] }, o($Vs, [2, 33]), o($Vs, [2, 34]), o($Vs, [2, 35]), o($Vt, [2, 46]), o($Vt, [2, 47]), o($Vu, [2, 37]), o($Vs, [2, 15]), o($Vs, [2, 19]), o($Vv, $V4, { 8: 81 }), o($Vs, [2, 26]), o($Vs, [2, 27]), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 82], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 21])], + defaultActions: { 7: [2, 50], 8: [2, 1], 9: [2, 2], 10: [2, 3], 54: [2, 48], 55: [2, 49], 64: [2, 52] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 41; + case 1: + return 50; + case 2: + return 51; + case 3: + return 52; + case 4: + return 53; + case 5: + this.begin("open_directive"); + return 60; + case 6: + this.begin("type_directive"); + return 61; + case 7: + this.popState(); + this.begin("arg_directive"); + return 48; + case 8: + this.popState(); + this.popState(); + return 63; + case 9: + return 62; + case 10: + break; + case 11: + break; + case 12: + return 5; + case 13: + break; + case 14: + break; + case 15: + break; + case 16: + break; + case 17: + this.pushState("SCALE"); + return 17; + case 18: + return 18; + case 19: + this.popState(); + break; + case 20: + this.begin("acc_title"); + return 33; + case 21: + this.popState(); + return "acc_title_value"; + case 22: + this.begin("acc_descr"); + return 35; + case 23: + this.popState(); + return "acc_descr_value"; + case 24: + this.begin("acc_descr_multiline"); + break; + case 25: + this.popState(); + break; + case 26: + return "acc_descr_multiline_value"; + case 27: + this.pushState("CLASSDEF"); + return 38; + case 28: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 29: + this.popState(); + this.pushState("CLASSDEFID"); + return 39; + case 30: + this.popState(); + return 40; + case 31: + this.pushState("CLASS"); + return 42; + case 32: + this.popState(); + this.pushState("CLASS_STYLE"); + return 43; + case 33: + this.popState(); + return 44; + case 34: + this.pushState("SCALE"); + return 17; + case 35: + return 18; + case 36: + this.popState(); + break; + case 37: + this.pushState("STATE"); + break; + case 38: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 39: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 26; + case 40: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 27; + case 41: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 42: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 26; + case 43: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 27; + case 44: + return 50; + case 45: + return 51; + case 46: + return 52; + case 47: + return 53; + case 48: + this.pushState("STATE_STRING"); + break; + case 49: + this.pushState("STATE_ID"); + return "AS"; + case 50: + this.popState(); + return "ID"; + case 51: + this.popState(); + break; + case 52: + return "STATE_DESCR"; + case 53: + return 19; + case 54: + this.popState(); + break; + case 55: + this.popState(); + this.pushState("struct"); + return 20; + case 56: + break; + case 57: + this.popState(); + return 21; + case 58: + break; + case 59: + this.begin("NOTE"); + return 29; + case 60: + this.popState(); + this.pushState("NOTE_ID"); + return 58; + case 61: + this.popState(); + this.pushState("NOTE_ID"); + return 59; + case 62: + this.popState(); + this.pushState("FLOATING_NOTE"); + break; + case 63: + this.popState(); + this.pushState("FLOATING_NOTE_ID"); + return "AS"; + case 64: + break; + case 65: + return "NOTE_TEXT"; + case 66: + this.popState(); + return "ID"; + case 67: + this.popState(); + this.pushState("NOTE_TEXT"); + return 24; + case 68: + this.popState(); + yy_.yytext = yy_.yytext.substr(2).trim(); + return 31; + case 69: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 31; + case 70: + return 7; + case 71: + return 7; + case 72: + return 16; + case 73: + return 56; + case 74: + return 24; + case 75: + yy_.yytext = yy_.yytext.trim(); + return 14; + case 76: + return 15; + case 77: + return 28; + case 78: + return 57; + case 79: + return 5; + case 80: + return "INVALID"; + } + }, + rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "LINE": { "rules": [14, 15], "inclusive": false }, "close_directive": { "rules": [14, 15], "inclusive": false }, "arg_directive": { "rules": [8, 9, 14, 15], "inclusive": false }, "type_directive": { "rules": [7, 8, 14, 15], "inclusive": false }, "open_directive": { "rules": [6, 14, 15], "inclusive": false }, "struct": { "rules": [14, 15, 27, 31, 37, 44, 45, 46, 47, 56, 57, 58, 59, 73, 74, 75, 76, 77], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [66], "inclusive": false }, "FLOATING_NOTE": { "rules": [63, 64, 65], "inclusive": false }, "NOTE_TEXT": { "rules": [68, 69], "inclusive": false }, "NOTE_ID": { "rules": [67], "inclusive": false }, "NOTE": { "rules": [60, 61, 62], "inclusive": false }, "CLASS_STYLE": { "rules": [33], "inclusive": false }, "CLASS": { "rules": [32], "inclusive": false }, "CLASSDEFID": { "rules": [30], "inclusive": false }, "CLASSDEF": { "rules": [28, 29], "inclusive": false }, "acc_descr_multiline": { "rules": [25, 26], "inclusive": false }, "acc_descr": { "rules": [23], "inclusive": false }, "acc_title": { "rules": [21], "inclusive": false }, "SCALE": { "rules": [18, 19, 35, 36], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [50], "inclusive": false }, "STATE_STRING": { "rules": [51, 52], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [14, 15, 38, 39, 40, 41, 42, 43, 48, 49, 53, 54, 55], "inclusive": false }, "ID": { "rules": [14, 15], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 15, 16, 17, 20, 22, 24, 27, 31, 34, 37, 55, 59, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_DIAGRAM_DIRECTION = "LR"; +const DEFAULT_NESTED_DOC_DIR = "TB"; +const STMT_STATE = "state"; +const STMT_RELATION = "relation"; +const STMT_CLASSDEF = "classDef"; +const STMT_APPLYCLASS = "applyClass"; +const DEFAULT_STATE_TYPE = "default"; +const DIVIDER_TYPE = "divider"; +const START_NODE = "[*]"; +const START_TYPE = "start"; +const END_NODE = START_NODE; +const END_TYPE = "end"; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +function newClassesList() { + return {}; +} +let direction = DEFAULT_DIAGRAM_DIRECTION; +let rootDoc = []; +let classes = newClassesList(); +const newDoc = () => { + return { + relations: [], + states: {}, + documents: {} + }; +}; +let documents = { + root: newDoc() +}; +let currentDocument = documents.root; +let startEndCount = 0; +let dividerCnt = 0; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3 +}; +const clone = (o) => JSON.parse(JSON.stringify(o)); +const parseDirective = function(statement, context, type) { + _mermaidAPI_3ae0f2f0_js__WEBPACK_IMPORTED_MODULE_0__.m.parseDirective(this, statement, context, type); +}; +const setRootDoc = (o) => { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting root doc", o); + rootDoc = o; +}; +const getRootDoc = () => rootDoc; +const docTranslator = (parent, node, first) => { + if (node.stmt === STMT_RELATION) { + docTranslator(parent, node.state1, true); + docTranslator(parent, node.state2, false); + } else { + if (node.stmt === STMT_STATE) { + if (node.id === "[*]") { + node.id = first ? parent.id + "_start" : parent.id + "_end"; + node.start = first; + } else { + node.id = node.id.trim(); + } + } + if (node.doc) { + const doc = []; + let currentDoc = []; + let i; + for (i = 0; i < node.doc.length; i++) { + if (node.doc[i].type === DIVIDER_TYPE) { + const newNode = clone(node.doc[i]); + newNode.doc = clone(currentDoc); + doc.push(newNode); + currentDoc = []; + } else { + currentDoc.push(node.doc[i]); + } + } + if (doc.length > 0 && currentDoc.length > 0) { + const newNode = { + stmt: STMT_STATE, + id: (0,_utils_d622194a_js__WEBPACK_IMPORTED_MODULE_2__.y)(), + type: "divider", + doc: clone(currentDoc) + }; + doc.push(clone(newNode)); + node.doc = doc; + } + node.doc.forEach((docNode) => docTranslator(node, docNode, true)); + } + } +}; +const getRootDocV2 = () => { + docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); + return { id: "root", doc: rootDoc }; +}; +const extract = (_doc) => { + let doc; + if (_doc.doc) { + doc = _doc.doc; + } else { + doc = _doc; + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info(doc); + clear(true); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Extract", doc); + doc.forEach((item) => { + switch (item.stmt) { + case STMT_STATE: + addState( + item.id.trim(), + item.type, + item.doc, + item.description, + item.note, + item.classes, + item.styles, + item.textStyles + ); + break; + case STMT_RELATION: + addRelation(item.state1, item.state2, item.description); + break; + case STMT_CLASSDEF: + addStyleClass(item.id.trim(), item.classes); + break; + case STMT_APPLYCLASS: + setCssClass(item.id.trim(), item.styleClass); + break; + } + }); +}; +const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { + const trimmedId = id == null ? void 0 : id.trim(); + if (currentDocument.states[trimmedId] === void 0) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding state ", trimmedId, descr); + currentDocument.states[trimmedId] = { + id: trimmedId, + descriptions: [], + type, + doc, + note, + classes: [], + styles: [], + textStyles: [] + }; + } else { + if (!currentDocument.states[trimmedId].doc) { + currentDocument.states[trimmedId].doc = doc; + } + if (!currentDocument.states[trimmedId].type) { + currentDocument.states[trimmedId].type = type; + } + } + if (descr) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting state description", trimmedId, descr); + if (typeof descr === "string") { + addDescription(trimmedId, descr.trim()); + } + if (typeof descr === "object") { + descr.forEach((des) => addDescription(trimmedId, des.trim())); + } + } + if (note) { + currentDocument.states[trimmedId].note = note; + currentDocument.states[trimmedId].note.text = _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)() + ); + } + if (classes2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + } + if (styles2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting state styles", trimmedId, styles2); + const stylesList = typeof styles2 === "string" ? [styles2] : styles2; + stylesList.forEach((style) => setStyle(trimmedId, style.trim())); + } + if (textStyles) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Setting state styles", trimmedId, styles2); + const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; + textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); + } +}; +const clear = function(saveCommon) { + documents = { + root: newDoc() + }; + currentDocument = documents.root; + startEndCount = 0; + classes = newClassesList(); + if (!saveCommon) { + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.y)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Documents = ", documents); +}; +const getRelations = function() { + return currentDocument.relations; +}; +function startIdIfNeeded(id = "") { + let fixedId = id; + if (id === START_NODE) { + startEndCount++; + fixedId = `${START_TYPE}${startEndCount}`; + } + return fixedId; +} +function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === START_NODE ? START_TYPE : type; +} +function endIdIfNeeded(id = "") { + let fixedId = id; + if (id === END_NODE) { + startEndCount++; + fixedId = `${END_TYPE}${startEndCount}`; + } + return fixedId; +} +function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === END_NODE ? END_TYPE : type; +} +function addRelationObjs(item1, item2, relationTitle) { + let id1 = startIdIfNeeded(item1.id.trim()); + let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); + let id2 = startIdIfNeeded(item2.id.trim()); + let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); + addState( + id1, + type1, + item1.doc, + item1.description, + item1.note, + item1.classes, + item1.styles, + item1.textStyles + ); + addState( + id2, + type2, + item2.doc, + item2.description, + item2.note, + item2.classes, + item2.styles, + item2.textStyles + ); + currentDocument.relations.push({ + id1, + id2, + relationTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relationTitle, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()) + }); +} +const addRelation = function(item1, item2, title) { + if (typeof item1 === "object") { + addRelationObjs(item1, item2, title); + } else { + const id1 = startIdIfNeeded(item1.trim()); + const type1 = startTypeIfNeeded(item1); + const id2 = endIdIfNeeded(item2.trim()); + const type2 = endTypeIfNeeded(item2); + addState(id1, type1); + addState(id2, type2); + currentDocument.relations.push({ + id1, + id2, + title: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(title, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)()) + }); + } +}; +const addDescription = function(id, descr) { + const theState = currentDocument.states[id]; + const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; + theState.descriptions.push(_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_descr, (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)())); +}; +const cleanupLabel = function(label) { + if (label.substring(0, 1) === ":") { + return label.substr(2).trim(); + } else { + return label.trim(); + } +}; +const getDividerId = () => { + dividerCnt++; + return "divider-id-" + dividerCnt; +}; +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const getClasses = function() { + return classes; +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundState = getState(id); + if (foundState === void 0) { + const trimmedId = id.trim(); + addState(trimmedId); + foundState = getState(trimmedId); + } + foundState.classes.push(cssClassName); + }); +}; +const setStyle = function(itemId, styleText) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(styleText); + } +}; +const setTextStyle = function(itemId, cssClassName) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(cssClassName); + } +}; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); +const db = { + parseDirective, + getConfig: () => (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.g)().state, + addState, + clear, + getState, + getStates, + getRelations, + getClasses, + getDirection, + addRelation, + getDividerId, + setDirection, + cleanupLabel, + lineType, + relationType, + logDocuments, + getRootDoc, + setRootDoc, + getRootDocV2, + extract, + trimColon, + getAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.p, + setAccTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.o, + getAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.q, + setAccDescription: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.v, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.w, + getDiagramTitle: _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_1__.x +}; +const getStyles = (options) => ` +defs #statediagram-barbEnd { + fill: ${options.transitionColor}; + stroke: ${options.transitionColor}; + } +g.stateGroup text { + fill: ${options.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${options.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${options.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.stateGroup line { + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${options.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${options.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + + text { + fill: ${options.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${options.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel .label text { + fill: ${options.transitionLabelColor || options.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${options.transitionLabelColor || options.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${options.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node .fork-join { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node circle.state-end { + fill: ${options.innerEndBackground}; + stroke: ${options.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${options.compositeBackground || options.background}; + // stroke: ${options.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${options.stateBkg || options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${options.lineColor}; +} + +.statediagram-cluster rect { + fill: ${options.compositeTitleBackground}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${options.stateLabelColor}; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${options.stateBorder || options.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${options.compositeBackground || options.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${options.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${options.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${options.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${options.lineColor}; + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + +//# sourceMappingURL=styles-47a825a5.js.map + + +/***/ }), + +/***/ 77657: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "p": () => (/* binding */ parseMember), +/* harmony export */ "s": () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); +/* harmony import */ var _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81188); +/* harmony import */ var _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70044); + + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _utils_d622194a_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = classDef.id; + if (classDef.type !== void 0 && classDef.type !== "") { + classTitleString += "<" + classDef.type + ">"; + } + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const drawNote = function(elem, note, conf, diagObj) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + const fieldRegEx = /^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/; + const methodRegEx = /^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/; + let fieldMatch = text.match(fieldRegEx); + let methodMatch = text.match(methodRegEx); + if (fieldMatch && !methodMatch) { + return buildFieldDisplay(fieldMatch); + } else if (methodMatch) { + return buildMethodDisplay(methodMatch); + } else { + return buildLegacyDisplay(text); + } +}; +const buildFieldDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let fieldType = parsedText[2] ? parsedText[2].trim() : ""; + let genericType = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let fieldName = parsedText[4] ? parsedText[4].trim() : ""; + let classifier = parsedText[5] ? parsedText[5].trim() : ""; + displayText = visibility + fieldType + genericType + " " + fieldName; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildMethodDisplay = function(parsedText) { + let cssStyle = ""; + let displayText = ""; + try { + let visibility = parsedText[1] ? parsedText[1].trim() : ""; + let methodName = parsedText[2] ? parsedText[2].trim() : ""; + let parameters = parsedText[3] ? (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[3].trim()) : ""; + let classifier = parsedText[4] ? parsedText[4].trim() : ""; + let returnType = parsedText[5] ? " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parsedText[5]).trim() : ""; + displayText = visibility + methodName + "(" + parameters + ")" + returnType; + cssStyle = parseClassifier(classifier); + } catch (err) { + displayText = parsedText; + } + return { + displayText, + cssStyle + }; +}; +const buildLegacyDisplay = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let methodStart = text.indexOf("("); + let methodEnd = text.indexOf(")"); + if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) { + let visibility = ""; + let methodName = ""; + let firstChar = text.substring(0, 1); + if (firstChar.match(/\w/)) { + methodName = text.substring(0, methodStart).trim(); + } else { + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + methodName = text.substring(1, methodStart).trim(); + } + const parameters = text.substring(methodStart + 1, methodEnd); + text.substring(methodEnd + 1, 1); + cssStyle = parseClassifier(text.substring(methodEnd + 1, methodEnd + 2)); + displayText = visibility + methodName + "(" + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + returnType = text.substring(methodEnd + 2).trim(); + if (returnType !== "") { + returnType = " : " + (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(returnType); + displayText += returnType; + } + } + } else { + displayText = (0,_commonDb_573409be_js__WEBPACK_IMPORTED_MODULE_2__.z)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + drawClass, + drawEdge, + drawNote, + parseMember +}; + +//# sourceMappingURL=svgDraw-2526cba0.js.map + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/97732f4b.455cc213.js b/assets/js/97732f4b.455cc213.js new file mode 100644 index 0000000000..8a908c0927 --- /dev/null +++ b/assets/js/97732f4b.455cc213.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7594],{5628:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>T,contentTitle:()=>s,default:()=>E,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var a=r(7462),n=(r(7294),r(3905));r(5657);const o={},s="POWER_ADJUSTMENT_CONSTANT",c={unversionedId:"about/references/keywords/POWER_ADJUSTMENT_CONSTANT",id:"about/references/keywords/POWER_ADJUSTMENT_CONSTANT",title:"POWER_ADJUSTMENT_CONSTANT",description:"MODELS /",source:"@site/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"},next:{title:"PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL"}},T={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],l={toc:d},N="wrapper";function E(e){let{components:t,...r}=e;return(0,n.kt)(N,(0,a.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"power_adjustment_constant"},"POWER_ADJUSTMENT_CONSTANT"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT"},"POWER_ADJUSTMENT_CONSTANT")),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Optional constant MW adjustment added to the model. Only added if (electrical) POWER > 0."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: <model type>\n ...\n POWER_ADJUSTMENT_CONSTANT: <value in MW>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: simple_compressor\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n ...\n POWER_ADJUSTMENT_CONSTANT: 10 #MW\n")))}E.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/977fea76.eec18e09.js b/assets/js/977fea76.eec18e09.js new file mode 100644 index 0000000000..a9ae0612c1 --- /dev/null +++ b/assets/js/977fea76.eec18e09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8023],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/9863.ac97c275.js b/assets/js/9863.ac97c275.js new file mode 100644 index 0000000000..48ad6ee6bc --- /dev/null +++ b/assets/js/9863.ac97c275.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9863],{9863:(t,e,u)=>{u.d(e,{d:()=>rt,f:()=>it,p:()=>c});var s=u(9373),i=u(1188),r=u(44),n=u(3047),a=function(){var t=function(t,e,u,s){for(u=u||{},s=t.length;s--;u[t[s]]=e);return u},e=[1,9],u=[1,7],s=[1,6],i=[1,8],r=[1,20,21,22,23,38,44,46,48,52,66,67,87,88,89,90,91,92,96,106,107,110,112,113,119,120,121,122,123,124,125,126,127,128],n=[2,10],a=[1,20],c=[1,21],o=[1,22],l=[1,23],h=[1,30],A=[1,32],d=[1,33],p=[1,34],y=[1,62],E=[1,48],f=[1,52],D=[1,36],k=[1,37],b=[1,38],g=[1,39],_=[1,40],F=[1,56],C=[1,63],B=[1,51],T=[1,53],m=[1,55],S=[1,59],v=[1,60],x=[1,41],L=[1,42],R=[1,43],I=[1,44],N=[1,61],$=[1,50],O=[1,54],P=[1,57],w=[1,58],U=[1,49],V=[1,66],M=[1,71],G=[1,20,21,22,23,38,42,44,46,48,52,66,67,87,88,89,90,91,92,96,106,107,110,112,113,119,120,121,122,123,124,125,126,127,128],Y=[1,75],K=[1,74],W=[1,76],j=[20,21,23,81,82],H=[1,99],Q=[1,104],z=[1,107],X=[1,108],q=[1,101],Z=[1,106],J=[1,109],tt=[1,102],et=[1,114],ut=[1,113],st=[1,103],it=[1,105],rt=[1,110],nt=[1,111],at=[1,112],ct=[1,115],ot=[20,21,22,23,81,82],lt=[20,21,22,23,53,81,82],ht=[20,21,22,23,40,52,53,55,57,59,61,63,65,66,67,69,71,73,74,76,81,82,92,96,106,107,110,112,113,123,124,125,126,127,128],At=[20,21,23],dt=[20,21,23,52,66,67,81,82,92,96,106,107,110,112,113,123,124,125,126,127,128],pt=[1,12,20,21,22,23,24,38,42,44,46,48,52,66,67,87,88,89,90,91,92,96,106,107,110,112,113,119,120,121,122,123,124,125,126,127,128],yt=[52,66,67,92,96,106,107,110,112,113,123,124,125,126,127,128],Et=[1,150],ft=[1,158],Dt=[1,159],kt=[1,160],bt=[1,161],gt=[1,145],_t=[1,146],Ft=[1,141],Ct=[1,142],Bt=[1,153],Tt=[1,154],mt=[1,155],St=[1,156],vt=[1,157],xt=[1,162],Lt=[1,163],Rt=[1,148],It=[1,151],Nt=[1,147],$t=[1,144],Ot=[20,21,22,23,38,42,44,46,48,52,66,67,87,88,89,90,91,92,96,106,107,110,112,113,119,120,121,122,123,124,125,126,127,128],Pt=[1,166],wt=[20,21,22,23,26,52,66,67,92,106,107,110,112,113,123,124,125,126,127,128],Ut=[20,21,22,23,24,26,38,40,41,42,52,56,58,60,62,64,66,67,68,70,72,73,75,77,81,82,87,88,89,90,91,92,93,96,106,107,110,112,113,114,115,123,124,125,126,127,128],Vt=[12,21,22,24],Mt=[22,107],Gt=[1,251],Yt=[1,246],Kt=[1,247],Wt=[1,255],jt=[1,252],Ht=[1,249],Qt=[1,248],zt=[1,250],Xt=[1,253],qt=[1,254],Zt=[1,256],Jt=[1,274],te=[20,21,23,107],ee=[20,21,22,23,66,67,87,103,106,107,110,111,112,113,114],ue={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,link:49,node:50,vertex:51,AMP:52,STYLE_SEPARATOR:53,idString:54,DOUBLECIRCLESTART:55,DOUBLECIRCLEEND:56,PS:57,PE:58,"(-":59,"-)":60,STADIUMSTART:61,STADIUMEND:62,SUBROUTINESTART:63,SUBROUTINEEND:64,VERTEX_WITH_PROPS_START:65,ALPHA:66,COLON:67,PIPE:68,CYLINDERSTART:69,CYLINDEREND:70,DIAMOND_START:71,DIAMOND_STOP:72,TAGEND:73,TRAPSTART:74,TRAPEND:75,INVTRAPSTART:76,INVTRAPEND:77,linkStatement:78,arrowText:79,TESTSTR:80,START_LINK:81,LINK:82,textToken:83,STR:84,MD_STR:85,keywords:86,STYLE:87,LINKSTYLE:88,CLASSDEF:89,CLASS:90,CLICK:91,DOWN:92,UP:93,textNoTags:94,textNoTagsToken:95,DEFAULT:96,stylesOpt:97,alphaNum:98,CALLBACKNAME:99,CALLBACKARGS:100,HREF:101,LINK_TARGET:102,HEX:103,numList:104,INTERPOLATE:105,NUM:106,COMMA:107,style:108,styleComponent:109,MINUS:110,UNIT:111,BRKT:112,DOT:113,PCT:114,TAGSTART:115,alphaNumToken:116,idStringToken:117,alphaNumStatement:118,direction_tb:119,direction_bt:120,direction_rl:121,direction_lr:122,PUNCTUATION:123,UNICODE_TEXT:124,PLUS:125,EQUALS:126,MULT:127,UNDERSCORE:128,graphCodeTokens:129,ARROW_CROSS:130,ARROW_POINT:131,ARROW_CIRCLE:132,ARROW_OPEN:133,QUOTE:134,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",52:"AMP",53:"STYLE_SEPARATOR",55:"DOUBLECIRCLESTART",56:"DOUBLECIRCLEEND",57:"PS",58:"PE",59:"(-",60:"-)",61:"STADIUMSTART",62:"STADIUMEND",63:"SUBROUTINESTART",64:"SUBROUTINEEND",65:"VERTEX_WITH_PROPS_START",66:"ALPHA",67:"COLON",68:"PIPE",69:"CYLINDERSTART",70:"CYLINDEREND",71:"DIAMOND_START",72:"DIAMOND_STOP",73:"TAGEND",74:"TRAPSTART",75:"TRAPEND",76:"INVTRAPSTART",77:"INVTRAPEND",80:"TESTSTR",81:"START_LINK",82:"LINK",84:"STR",85:"MD_STR",87:"STYLE",88:"LINKSTYLE",89:"CLASSDEF",90:"CLASS",91:"CLICK",92:"DOWN",93:"UP",96:"DEFAULT",99:"CALLBACKNAME",100:"CALLBACKARGS",101:"HREF",102:"LINK_TARGET",103:"HEX",105:"INTERPOLATE",106:"NUM",107:"COMMA",110:"MINUS",111:"UNIT",112:"BRKT",113:"DOT",114:"PCT",115:"TAGSTART",119:"direction_tb",120:"direction_bt",121:"direction_rl",122:"direction_lr",123:"PUNCTUATION",124:"UNICODE_TEXT",125:"PLUS",126:"EQUALS",127:"MULT",128:"UNDERSCORE",130:"ARROW_CROSS",131:"ARROW_POINT",132:"ARROW_CIRCLE",133:"ARROW_OPEN",134:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[50,3],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,8],[51,4],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,4],[51,4],[51,1],[49,2],[49,3],[49,3],[49,1],[49,3],[78,1],[79,3],[39,1],[39,2],[39,1],[39,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[94,1],[94,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[104,1],[104,3],[97,1],[97,3],[108,1],[108,2],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[109,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[95,1],[95,1],[95,1],[95,1],[54,1],[54,2],[98,1],[98,2],[118,1],[118,1],[118,1],[118,1],[43,1],[43,1],[43,1],[43,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1],[129,1]],performAction:function(t,e,u,s,i,r,n){var a=r.length-1;switch(i){case 5:s.parseDirective("%%{","open_directive");break;case 6:s.parseDirective(r[a],"type_directive");break;case 7:r[a]=r[a].trim().replace(/'/g,'"'),s.parseDirective(r[a],"arg_directive");break;case 8:s.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:(!Array.isArray(r[a])||r[a].length>0)&&r[a-1].push(r[a]),this.$=r[a-1];break;case 12:case 97:case 153:case 155:case 156:case 78:case 151:this.$=r[a];break;case 19:s.setDirection("TB"),this.$="TB";break;case 20:s.setDirection(r[a-1]),this.$=r[a-1];break;case 35:this.$=r[a-1].nodes;break;case 41:this.$=s.addSubGraph(r[a-6],r[a-1],r[a-4]);break;case 42:this.$=s.addSubGraph(r[a-3],r[a-1],r[a-3]);break;case 43:this.$=s.addSubGraph(void 0,r[a-1],void 0);break;case 45:this.$=r[a].trim(),s.setAccTitle(this.$);break;case 46:case 47:this.$=r[a].trim(),s.setAccDescription(this.$);break;case 51:s.addLink(r[a-2].stmt,r[a],r[a-1]),this.$={stmt:r[a],nodes:r[a].concat(r[a-2].nodes)};break;case 52:s.addLink(r[a-3].stmt,r[a-1],r[a-2]),this.$={stmt:r[a-1],nodes:r[a-1].concat(r[a-3].nodes)};break;case 53:this.$={stmt:r[a-1],nodes:r[a-1]};break;case 54:this.$={stmt:r[a],nodes:r[a]};break;case 55:case 124:case 126:this.$=[r[a]];break;case 56:this.$=r[a-4].concat(r[a]);break;case 57:this.$=[r[a-2]],s.setClass(r[a-2],r[a]);break;case 58:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"square");break;case 59:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"doublecircle");break;case 60:this.$=r[a-5],s.addVertex(r[a-5],r[a-2],"circle");break;case 61:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"ellipse");break;case 62:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"stadium");break;case 63:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"subroutine");break;case 64:this.$=r[a-7],s.addVertex(r[a-7],r[a-1],"rect",void 0,void 0,void 0,Object.fromEntries([[r[a-5],r[a-3]]]));break;case 65:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"cylinder");break;case 66:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"round");break;case 67:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"diamond");break;case 68:this.$=r[a-5],s.addVertex(r[a-5],r[a-2],"hexagon");break;case 69:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"odd");break;case 70:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"trapezoid");break;case 71:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"inv_trapezoid");break;case 72:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"lean_right");break;case 73:this.$=r[a-3],s.addVertex(r[a-3],r[a-1],"lean_left");break;case 74:this.$=r[a],s.addVertex(r[a]);break;case 75:r[a-1].text=r[a],this.$=r[a-1];break;case 76:case 77:r[a-2].text=r[a-1],this.$=r[a-2];break;case 79:var c=s.destructLink(r[a],r[a-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:r[a-1]};break;case 80:c=s.destructLink(r[a]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 81:this.$=r[a-1];break;case 82:case 84:this.$={text:r[a],type:"text"};break;case 83:this.$={text:r[a-1].text+""+r[a],type:r[a-1].type};break;case 85:this.$={text:r[a],type:"markdown"};break;case 98:case 154:case 152:this.$=r[a-1]+""+r[a];break;case 99:case 100:this.$=r[a-4],s.addClass(r[a-2],r[a]);break;case 101:this.$=r[a-4],s.setClass(r[a-2],r[a]);break;case 102:case 110:this.$=r[a-1],s.setClickEvent(r[a-1],r[a]);break;case 103:case 111:this.$=r[a-3],s.setClickEvent(r[a-3],r[a-2]),s.setTooltip(r[a-3],r[a]);break;case 104:this.$=r[a-2],s.setClickEvent(r[a-2],r[a-1],r[a]);break;case 105:this.$=r[a-4],s.setClickEvent(r[a-4],r[a-3],r[a-2]),s.setTooltip(r[a-4],r[a]);break;case 106:case 112:this.$=r[a-1],s.setLink(r[a-1],r[a]);break;case 107:case 113:this.$=r[a-3],s.setLink(r[a-3],r[a-2]),s.setTooltip(r[a-3],r[a]);break;case 108:case 114:this.$=r[a-3],s.setLink(r[a-3],r[a-2],r[a]);break;case 109:case 115:this.$=r[a-5],s.setLink(r[a-5],r[a-4],r[a]),s.setTooltip(r[a-5],r[a-2]);break;case 116:this.$=r[a-4],s.addVertex(r[a-2],void 0,void 0,r[a]);break;case 117:case 119:this.$=r[a-4],s.updateLink(r[a-2],r[a]);break;case 118:this.$=r[a-4],s.updateLink([r[a-2]],r[a]);break;case 120:this.$=r[a-8],s.updateLinkInterpolate([r[a-6]],r[a-2]),s.updateLink([r[a-6]],r[a]);break;case 121:this.$=r[a-8],s.updateLinkInterpolate(r[a-6],r[a-2]),s.updateLink(r[a-6],r[a]);break;case 122:this.$=r[a-6],s.updateLinkInterpolate([r[a-4]],r[a]);break;case 123:this.$=r[a-6],s.updateLinkInterpolate(r[a-4],r[a]);break;case 125:case 127:r[a-2].push(r[a]),this.$=r[a-2];break;case 129:this.$=r[a-1]+r[a];break;case 157:this.$="v";break;case 158:this.$="-";break;case 159:this.$={stmt:"dir",value:"TB"};break;case 160:this.$={stmt:"dir",value:"BT"};break;case 161:this.$={stmt:"dir",value:"RL"};break;case 162:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:u,22:s,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:u,22:s,24:i},t(r,n,{17:11}),{7:12,13:[1,13]},{16:14,21:u,22:s,24:i},{16:15,21:u,22:s,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:a,21:c,22:o,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,44:A,46:d,48:p,50:35,51:45,52:y,54:46,66:E,67:f,87:D,88:k,89:b,90:g,91:_,92:F,96:C,106:B,107:T,110:m,112:S,113:v,117:47,119:x,120:L,121:R,122:I,123:N,124:$,125:O,126:P,127:w,128:U},{8:64,10:[1,65],15:V},t([10,15],[2,6]),t(r,[2,17]),t(r,[2,18]),t(r,[2,19]),{20:[1,68],21:[1,69],22:M,27:67,30:70},t(G,[2,11]),t(G,[2,12]),t(G,[2,13]),t(G,[2,14]),t(G,[2,15]),t(G,[2,16]),{9:72,20:Y,21:K,23:W,49:73,78:77,81:[1,78],82:[1,79]},{9:80,20:Y,21:K,23:W},{9:81,20:Y,21:K,23:W},{9:82,20:Y,21:K,23:W},{9:83,20:Y,21:K,23:W},{9:84,20:Y,21:K,23:W},{9:86,20:Y,21:K,22:[1,85],23:W},t(G,[2,44]),{45:[1,87]},{47:[1,88]},t(G,[2,47]),t(j,[2,54],{30:89,22:M}),{22:[1,90]},{22:[1,91]},{22:[1,92]},{22:[1,93]},{26:H,52:Q,66:z,67:X,84:[1,97],92:q,98:96,99:[1,94],101:[1,95],106:Z,107:J,110:tt,112:et,113:ut,116:100,118:98,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(G,[2,159]),t(G,[2,160]),t(G,[2,161]),t(G,[2,162]),t(ot,[2,55],{53:[1,116]}),t(lt,[2,74],{117:129,40:[1,117],52:y,55:[1,118],57:[1,119],59:[1,120],61:[1,121],63:[1,122],65:[1,123],66:E,67:f,69:[1,124],71:[1,125],73:[1,126],74:[1,127],76:[1,128],92:F,96:C,106:B,107:T,110:m,112:S,113:v,123:N,124:$,125:O,126:P,127:w,128:U}),t(ht,[2,151]),t(ht,[2,176]),t(ht,[2,177]),t(ht,[2,178]),t(ht,[2,179]),t(ht,[2,180]),t(ht,[2,181]),t(ht,[2,182]),t(ht,[2,183]),t(ht,[2,184]),t(ht,[2,185]),t(ht,[2,186]),t(ht,[2,187]),t(ht,[2,188]),t(ht,[2,189]),t(ht,[2,190]),t(ht,[2,191]),{9:130,20:Y,21:K,23:W},{11:131,14:[1,132]},t(At,[2,8]),t(r,[2,20]),t(r,[2,26]),t(r,[2,27]),{21:[1,133]},t(dt,[2,34],{30:134,22:M}),t(G,[2,35]),{50:135,51:45,52:y,54:46,66:E,67:f,92:F,96:C,106:B,107:T,110:m,112:S,113:v,117:47,123:N,124:$,125:O,126:P,127:w,128:U},t(pt,[2,48]),t(pt,[2,49]),t(pt,[2,50]),t(yt,[2,78],{79:136,68:[1,138],80:[1,137]}),{22:Et,24:ft,26:Dt,38:kt,39:139,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t([52,66,67,68,80,92,96,106,107,110,112,113,123,124,125,126,127,128],[2,80]),t(G,[2,36]),t(G,[2,37]),t(G,[2,38]),t(G,[2,39]),t(G,[2,40]),{22:Et,24:ft,26:Dt,38:kt,39:164,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(Ot,n,{17:165}),t(G,[2,45]),t(G,[2,46]),t(j,[2,53],{52:Pt}),{26:H,52:Q,66:z,67:X,92:q,98:167,103:[1,168],106:Z,107:J,110:tt,112:et,113:ut,116:100,118:98,123:st,124:it,125:rt,126:nt,127:at,128:ct},{96:[1,169],104:170,106:[1,171]},{26:H,52:Q,66:z,67:X,92:q,96:[1,172],98:173,106:Z,107:J,110:tt,112:et,113:ut,116:100,118:98,123:st,124:it,125:rt,126:nt,127:at,128:ct},{26:H,52:Q,66:z,67:X,92:q,98:174,106:Z,107:J,110:tt,112:et,113:ut,116:100,118:98,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(At,[2,102],{22:[1,175],100:[1,176]}),t(At,[2,106],{22:[1,177]}),t(At,[2,110],{116:100,118:179,22:[1,178],26:H,52:Q,66:z,67:X,92:q,106:Z,107:J,110:tt,112:et,113:ut,123:st,124:it,125:rt,126:nt,127:at,128:ct}),t(At,[2,112],{22:[1,180]}),t(wt,[2,153]),t(wt,[2,155]),t(wt,[2,156]),t(wt,[2,157]),t(wt,[2,158]),t(Ut,[2,163]),t(Ut,[2,164]),t(Ut,[2,165]),t(Ut,[2,166]),t(Ut,[2,167]),t(Ut,[2,168]),t(Ut,[2,169]),t(Ut,[2,170]),t(Ut,[2,171]),t(Ut,[2,172]),t(Ut,[2,173]),t(Ut,[2,174]),t(Ut,[2,175]),{52:y,54:181,66:E,67:f,92:F,96:C,106:B,107:T,110:m,112:S,113:v,117:47,123:N,124:$,125:O,126:P,127:w,128:U},{22:Et,24:ft,26:Dt,38:kt,39:182,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:183,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:185,42:bt,52:Q,57:[1,184],66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:186,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:187,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:188,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{66:[1,189]},{22:Et,24:ft,26:Dt,38:kt,39:190,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:191,42:bt,52:Q,66:z,67:X,71:[1,192],73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:193,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:194,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:195,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(ht,[2,152]),t(Vt,[2,3]),{8:196,15:V},{15:[2,7]},t(r,[2,28]),t(dt,[2,33]),t(j,[2,51],{30:197,22:M}),t(yt,[2,75],{22:[1,198]}),{22:[1,199]},{22:Et,24:ft,26:Dt,38:kt,39:200,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,66:z,67:X,73:gt,81:_t,82:[1,201],83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(Ut,[2,82]),t(Ut,[2,84]),t(Ut,[2,85]),t(Ut,[2,141]),t(Ut,[2,142]),t(Ut,[2,143]),t(Ut,[2,144]),t(Ut,[2,145]),t(Ut,[2,146]),t(Ut,[2,147]),t(Ut,[2,148]),t(Ut,[2,149]),t(Ut,[2,150]),t(Ut,[2,86]),t(Ut,[2,87]),t(Ut,[2,88]),t(Ut,[2,89]),t(Ut,[2,90]),t(Ut,[2,91]),t(Ut,[2,92]),t(Ut,[2,93]),t(Ut,[2,94]),t(Ut,[2,95]),t(Ut,[2,96]),{9:204,20:Y,21:K,22:Et,23:W,24:ft,26:Dt,38:kt,40:[1,203],42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{18:18,19:19,20:a,21:c,22:o,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,205],43:31,44:A,46:d,48:p,50:35,51:45,52:y,54:46,66:E,67:f,87:D,88:k,89:b,90:g,91:_,92:F,96:C,106:B,107:T,110:m,112:S,113:v,117:47,119:x,120:L,121:R,122:I,123:N,124:$,125:O,126:P,127:w,128:U},{22:M,30:206},{22:[1,207],26:H,52:Q,66:z,67:X,92:q,106:Z,107:J,110:tt,112:et,113:ut,116:100,118:179,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:[1,208]},{22:[1,209]},{22:[1,210],107:[1,211]},t(Mt,[2,124]),{22:[1,212]},{22:[1,213],26:H,52:Q,66:z,67:X,92:q,106:Z,107:J,110:tt,112:et,113:ut,116:100,118:179,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:[1,214],26:H,52:Q,66:z,67:X,92:q,106:Z,107:J,110:tt,112:et,113:ut,116:100,118:179,123:st,124:it,125:rt,126:nt,127:at,128:ct},{84:[1,215]},t(At,[2,104],{22:[1,216]}),{84:[1,217],102:[1,218]},{84:[1,219]},t(wt,[2,154]),{84:[1,220],102:[1,221]},t(ot,[2,57],{117:129,52:y,66:E,67:f,92:F,96:C,106:B,107:T,110:m,112:S,113:v,123:N,124:$,125:O,126:P,127:w,128:U}),{22:Et,24:ft,26:Dt,38:kt,41:[1,222],42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,56:[1,223],66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:224,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,58:[1,225],66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,60:[1,226],66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,62:[1,227],66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,64:[1,228],66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{67:[1,229]},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,66:z,67:X,70:[1,230],73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,66:z,67:X,72:[1,231],73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,39:232,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,41:[1,233],42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,66:z,67:X,73:gt,75:[1,234],77:[1,235],81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,66:z,67:X,73:gt,75:[1,237],77:[1,236],81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{9:238,20:Y,21:K,23:W},t(j,[2,52],{52:Pt}),t(yt,[2,77]),t(yt,[2,76]),{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,66:z,67:X,68:[1,239],73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(yt,[2,79]),t(Ut,[2,83]),{22:Et,24:ft,26:Dt,38:kt,39:240,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(Ot,n,{17:241}),t(G,[2,43]),{51:242,52:y,54:46,66:E,67:f,92:F,96:C,106:B,107:T,110:m,112:S,113:v,117:47,123:N,124:$,125:O,126:P,127:w,128:U},{22:Gt,66:Yt,67:Kt,87:Wt,97:243,103:jt,106:Ht,108:244,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},{22:Gt,66:Yt,67:Kt,87:Wt,97:257,103:jt,106:Ht,108:244,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},{22:Gt,66:Yt,67:Kt,87:Wt,97:258,103:jt,105:[1,259],106:Ht,108:244,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},{22:Gt,66:Yt,67:Kt,87:Wt,97:260,103:jt,105:[1,261],106:Ht,108:244,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},{106:[1,262]},{22:Gt,66:Yt,67:Kt,87:Wt,97:263,103:jt,106:Ht,108:244,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},{22:Gt,66:Yt,67:Kt,87:Wt,97:264,103:jt,106:Ht,108:244,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},{26:H,52:Q,66:z,67:X,92:q,98:265,106:Z,107:J,110:tt,112:et,113:ut,116:100,118:98,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(At,[2,103]),{84:[1,266]},t(At,[2,107],{22:[1,267]}),t(At,[2,108]),t(At,[2,111]),t(At,[2,113],{22:[1,268]}),t(At,[2,114]),t(lt,[2,58]),t(lt,[2,59]),{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,58:[1,269],66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(lt,[2,66]),t(lt,[2,61]),t(lt,[2,62]),t(lt,[2,63]),{66:[1,270]},t(lt,[2,65]),t(lt,[2,67]),{22:Et,24:ft,26:Dt,38:kt,42:bt,52:Q,66:z,67:X,72:[1,271],73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(lt,[2,69]),t(lt,[2,70]),t(lt,[2,72]),t(lt,[2,71]),t(lt,[2,73]),t(Vt,[2,4]),t([22,52,66,67,92,96,106,107,110,112,113,123,124,125,126,127,128],[2,81]),{22:Et,24:ft,26:Dt,38:kt,41:[1,272],42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{18:18,19:19,20:a,21:c,22:o,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,273],43:31,44:A,46:d,48:p,50:35,51:45,52:y,54:46,66:E,67:f,87:D,88:k,89:b,90:g,91:_,92:F,96:C,106:B,107:T,110:m,112:S,113:v,117:47,119:x,120:L,121:R,122:I,123:N,124:$,125:O,126:P,127:w,128:U},t(ot,[2,56]),t(At,[2,116],{107:Jt}),t(te,[2,126],{109:275,22:Gt,66:Yt,67:Kt,87:Wt,103:jt,106:Ht,110:Qt,111:zt,112:Xt,113:qt,114:Zt}),t(ee,[2,128]),t(ee,[2,130]),t(ee,[2,131]),t(ee,[2,132]),t(ee,[2,133]),t(ee,[2,134]),t(ee,[2,135]),t(ee,[2,136]),t(ee,[2,137]),t(ee,[2,138]),t(ee,[2,139]),t(ee,[2,140]),t(At,[2,117],{107:Jt}),t(At,[2,118],{107:Jt}),{22:[1,276]},t(At,[2,119],{107:Jt}),{22:[1,277]},t(Mt,[2,125]),t(At,[2,99],{107:Jt}),t(At,[2,100],{107:Jt}),t(At,[2,101],{116:100,118:179,26:H,52:Q,66:z,67:X,92:q,106:Z,107:J,110:tt,112:et,113:ut,123:st,124:it,125:rt,126:nt,127:at,128:ct}),t(At,[2,105]),{102:[1,278]},{102:[1,279]},{58:[1,280]},{68:[1,281]},{72:[1,282]},{9:283,20:Y,21:K,23:W},t(G,[2,42]),{22:Gt,66:Yt,67:Kt,87:Wt,103:jt,106:Ht,108:284,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},t(ee,[2,129]),{26:H,52:Q,66:z,67:X,92:q,98:285,106:Z,107:J,110:tt,112:et,113:ut,116:100,118:98,123:st,124:it,125:rt,126:nt,127:at,128:ct},{26:H,52:Q,66:z,67:X,92:q,98:286,106:Z,107:J,110:tt,112:et,113:ut,116:100,118:98,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(At,[2,109]),t(At,[2,115]),t(lt,[2,60]),{22:Et,24:ft,26:Dt,38:kt,39:287,42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:140,84:Ft,85:Ct,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},t(lt,[2,68]),t(Ot,n,{17:288}),t(te,[2,127],{109:275,22:Gt,66:Yt,67:Kt,87:Wt,103:jt,106:Ht,110:Qt,111:zt,112:Xt,113:qt,114:Zt}),t(At,[2,122],{116:100,118:179,22:[1,289],26:H,52:Q,66:z,67:X,92:q,106:Z,107:J,110:tt,112:et,113:ut,123:st,124:it,125:rt,126:nt,127:at,128:ct}),t(At,[2,123],{116:100,118:179,22:[1,290],26:H,52:Q,66:z,67:X,92:q,106:Z,107:J,110:tt,112:et,113:ut,123:st,124:it,125:rt,126:nt,127:at,128:ct}),{22:Et,24:ft,26:Dt,38:kt,41:[1,291],42:bt,52:Q,66:z,67:X,73:gt,81:_t,83:202,86:152,87:Bt,88:Tt,89:mt,90:St,91:vt,92:xt,93:Lt,95:143,96:Rt,106:Z,107:J,110:It,112:et,113:ut,114:Nt,115:$t,116:149,123:st,124:it,125:rt,126:nt,127:at,128:ct},{18:18,19:19,20:a,21:c,22:o,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,292],43:31,44:A,46:d,48:p,50:35,51:45,52:y,54:46,66:E,67:f,87:D,88:k,89:b,90:g,91:_,92:F,96:C,106:B,107:T,110:m,112:S,113:v,117:47,119:x,120:L,121:R,122:I,123:N,124:$,125:O,126:P,127:w,128:U},{22:Gt,66:Yt,67:Kt,87:Wt,97:293,103:jt,106:Ht,108:244,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},{22:Gt,66:Yt,67:Kt,87:Wt,97:294,103:jt,106:Ht,108:244,109:245,110:Qt,111:zt,112:Xt,113:qt,114:Zt},t(lt,[2,64]),t(G,[2,41]),t(At,[2,120],{107:Jt}),t(At,[2,121],{107:Jt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],132:[2,7]},parseError:function(t,e){if(!e.recoverable){var u=new Error(t);throw u.hash=e,u}this.trace(t)},parse:function(t){var e=this,u=[0],s=[],i=[null],r=[],n=this.table,a="",c=0,o=0,l=1,h=r.slice.call(arguments,1),A=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);A.setInput(t,d.yy),d.yy.lexer=A,d.yy.parser=this,void 0===A.yylloc&&(A.yylloc={});var y=A.yylloc;r.push(y);var E=A.options&&A.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,D,k,b,g,_,F,C,B,T={};;){if(D=u[u.length-1],this.defaultActions[D]?k=this.defaultActions[D]:(null==f&&(B=void 0,"number"!=typeof(B=s.pop()||A.lex()||l)&&(B instanceof Array&&(B=(s=B).pop()),B=e.symbols_[B]||B),f=B),k=n[D]&&n[D][f]),void 0===k||!k.length||!k[0]){var m="";for(g in C=[],n[D])this.terminals_[g]&&g>2&&C.push("'"+this.terminals_[g]+"'");m=A.showPosition?"Parse error on line "+(c+1)+":\n"+A.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(f==l?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(m,{text:A.match,token:this.terminals_[f]||f,line:A.yylineno,loc:y,expected:C})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+D+", token: "+f);switch(k[0]){case 1:u.push(f),i.push(A.yytext),r.push(A.yylloc),u.push(k[1]),f=null,o=A.yyleng,a=A.yytext,c=A.yylineno,y=A.yylloc;break;case 2:if(_=this.productions_[k[1]][1],T.$=i[i.length-_],T._$={first_line:r[r.length-(_||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(_||1)].first_column,last_column:r[r.length-1].last_column},E&&(T._$.range=[r[r.length-(_||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply(T,[a,o,c,d.yy,k[1],i,r].concat(h))))return b;_&&(u=u.slice(0,-1*_*2),i=i.slice(0,-1*_),r=r.slice(0,-1*_)),u.push(this.productions_[k[1]][0]),i.push(T.$),r.push(T._$),F=n[u[u.length-2]][u[u.length-1]],u.push(F);break;case 3:return!0}}return!0}},se={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,u=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===s.length?this.yylloc.first_column:0)+s[s.length-u.length].length-u[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var u,s,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],u=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),u)return u;if(this._backtrack){for(var r in i)this[r]=i[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,u,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),r=0;r<i.length;r++)if((u=this._input.match(this.rules[i[r]]))&&(!e||u[0].length>e[0].length)){if(e=u,s=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(u,i[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,u,s){switch(u){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:return this.begin("acc_title"),44;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),46;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 14:case 16:case 25:case 28:case 31:case 34:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:this.begin("md_string");break;case 13:return"MD_STR";case 15:this.begin("string");break;case 17:return"STR";case 18:return 87;case 19:return 96;case 20:return 88;case 21:return 105;case 22:return 89;case 23:return 90;case 24:this.begin("href");break;case 26:return 101;case 27:this.begin("callbackname");break;case 29:this.popState(),this.begin("callbackargs");break;case 30:return 99;case 32:return 100;case 33:this.begin("click");break;case 35:return 91;case 36:case 37:case 38:return t.lex.firstGraph()&&this.begin("dir"),24;case 39:return 38;case 40:return 42;case 41:case 42:case 43:case 44:return 102;case 45:return this.popState(),25;case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:return this.popState(),26;case 56:return 119;case 57:return 120;case 58:return 121;case 59:return 122;case 60:return 106;case 61:return 112;case 62:return 53;case 63:return 67;case 64:return 52;case 65:return 20;case 66:return 107;case 67:return 127;case 68:case 69:case 70:case 71:return 82;case 72:case 73:case 74:return 81;case 75:return 59;case 76:return 60;case 77:return 61;case 78:return 62;case 79:return 63;case 80:return 64;case 81:return 65;case 82:return 69;case 83:return 70;case 84:return 55;case 85:return 56;case 86:return 110;case 87:return 113;case 88:return 128;case 89:return 125;case 90:return 114;case 91:case 92:return 126;case 93:return 115;case 94:return 73;case 95:return 93;case 96:return"SEP";case 97:return 92;case 98:return 66;case 99:return 75;case 100:return 74;case 101:return 77;case 102:return 76;case 103:return 123;case 104:return 124;case 105:return 68;case 106:return 57;case 107:return 58;case 108:return 40;case 109:return 41;case 110:return 71;case 111:return 72;case 112:return 134;case 113:return 21;case 114:return 22;case 115:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\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]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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-\u0C33\u0C35-\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\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\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\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\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])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[31,32],inclusive:!1},callbackname:{rules:[28,29,30],inclusive:!1},href:{rules:[25,26],inclusive:!1},click:{rules:[34,35],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[45,46,47,48,49,50,51,52,53,54,55],inclusive:!1},acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},md_string:{rules:[13,14],inclusive:!1},string:{rules:[16,17],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,15,18,19,20,21,22,23,24,27,33,36,37,38,39,40,41,42,43,44,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115],inclusive:!0}}};function ie(){this.yy={}}return ue.lexer=se,ie.prototype=ue,ue.Parser=ie,new ie}();a.parser=a;const c=a;let o,l,h=0,A=(0,r.g)(),d={},p=[],y={},E=[],f={},D={},k=0,b=!0,g=[];const _=t=>r.e.sanitizeText(t,A),F=function(t,e,u){n.m.parseDirective(this,t,e,u)},C=function(t){const e=Object.keys(d);for(const u of e)if(d[u].id===t)return d[u].domId;return t},B=function(t,e,u,s,i,n,a={}){let c,o=t;void 0!==o&&0!==o.trim().length&&(void 0===d[o]&&(d[o]={id:o,labelType:"text",domId:"flowchart-"+o+"-"+h,styles:[],classes:[]}),h++,void 0!==e?(A=(0,r.g)(),c=_(e.text.trim()),d[o].labelType=e.type,'"'===c[0]&&'"'===c[c.length-1]&&(c=c.substring(1,c.length-1)),d[o].text=c):void 0===d[o].text&&(d[o].text=t),void 0!==u&&(d[o].type=u),null!=s&&s.forEach((function(t){d[o].styles.push(t)})),null!=i&&i.forEach((function(t){d[o].classes.push(t)})),void 0!==n&&(d[o].dir=n),void 0===d[o].props?d[o].props=a:void 0!==a&&Object.assign(d[o].props,a))},T=function(t,e,u){const s={start:t,end:e,type:void 0,text:"",labelType:"text"};r.l.info("abc78 Got edge...",s);const i=u.text;void 0!==i&&(s.text=_(i.text.trim()),'"'===s.text[0]&&'"'===s.text[s.text.length-1]&&(s.text=s.text.substring(1,s.text.length-1)),s.labelType=i.type),void 0!==u&&(s.type=u.type,s.stroke=u.stroke,s.length=u.length),p.push(s)},m=function(t,e,u){let s,i;for(r.l.info("addLink (abc78)",t,e,u),s=0;s<t.length;s++)for(i=0;i<e.length;i++)T(t[s],e[i],u)},S=function(t,e){t.forEach((function(t){"default"===t?p.defaultInterpolate=e:p[t].interpolate=e}))},v=function(t,e){t.forEach((function(t){"default"===t?p.defaultStyle=e:(-1===i.u.isSubstringInArray("fill",e)&&e.push("fill:none"),p[t].style=e)}))},x=function(t,e){void 0===y[t]&&(y[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const u=e.replace("fill","bgFill").replace("color","fill");y[t].textStyles.push(u)}y[t].styles.push(e)}))},L=function(t){o=t,o.match(/.*</)&&(o="RL"),o.match(/.*\^/)&&(o="BT"),o.match(/.*>/)&&(o="LR"),o.match(/.*v/)&&(o="TB"),"TD"===o&&(o="TB")},R=function(t,e){t.split(",").forEach((function(t){let u=t;void 0!==d[u]&&d[u].classes.push(e),void 0!==f[u]&&f[u].classes.push(e)}))},I=function(t,e,u){t.split(",").forEach((function(t){void 0!==d[t]&&(d[t].link=i.u.formatUrl(e,A),d[t].linkTarget=u)})),R(t,"clickable")},N=function(t){return D[t]},$=function(t,e,u){t.split(",").forEach((function(t){!function(t,e,u){let s=C(t);if("loose"!==(0,r.g)().securityLevel)return;if(void 0===e)return;let n=[];if("string"==typeof u){n=u.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<n.length;t++){let e=n[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),n[t]=e}}0===n.length&&n.push(t),void 0!==d[t]&&(d[t].haveCallback=!0,g.push((function(){const t=document.querySelector(`[id="${s}"]`);null!==t&&t.addEventListener("click",(function(){i.u.runFunc(e,...n)}),!1)})))}(t,e,u)})),R(t,"clickable")},O=function(t){g.forEach((function(e){e(t)}))},P=function(){return o.trim()},w=function(){return d},U=function(){return p},V=function(){return y},M=function(t){let e=(0,s.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,s.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,s.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,s.Ys)(this);if(null===t.attr("title"))return;const u=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,s.Ys)(this).classed("hover",!1)}))};g.push(M);const G=function(t="gen-1"){d={},y={},p=[],g=[M],E=[],f={},k=0,D=[],b=!0,l=t,(0,r.y)()},Y=t=>{l=t||"gen-2"},K=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},W=function(t,e,u){let s=t.text.trim(),i=u.text;t===u&&u.text.match(/\s/)&&(s=void 0);let n=[];const{nodeList:a,dir:c}=function(t){const e={boolean:{},number:{},string:{}},u=[];let s;return{nodeList:t.filter((function(t){const i=typeof t;return t.stmt&&"dir"===t.stmt?(s=t.value,!1):""!==t.trim()&&(i in e?!e[i].hasOwnProperty(t)&&(e[i][t]=!0):!u.includes(t)&&u.push(t))})),dir:s}}(n.concat.apply(n,e));if(n=a,"gen-1"===l)for(let r=0;r<n.length;r++)n[r]=C(n[r]);s=s||"subGraph"+k,i=i||"",i=_(i),k+=1;const o={id:s,nodes:n,title:i.trim(),classes:[],dir:c,labelType:u.type};return r.l.info("Adding",o.id,o.nodes,o.dir),o.nodes=ut(o,E).nodes,E.push(o),f[s]=o,s},j=function(t){for(const[e,u]of E.entries())if(u.id===t)return e;return-1};let H=-1;const Q=[],z=function(t,e){const u=E[e].nodes;if(H+=1,H>2e3)return;if(Q[H]=e,E[e].id===t)return{result:!0,count:0};let s=0,i=1;for(;s<u.length;){const e=j(u[s]);if(e>=0){const u=z(t,e);if(u.result)return{result:!0,count:i+u.count};i+=u.count}s+=1}return{result:!1,count:i}},X=function(t){return Q[t]},q=function(){H=-1,E.length>0&&z("none",E.length-1)},Z=function(){return E},J=()=>!!b&&(b=!1,!0),tt=(t,e)=>{const u=(t=>{const e=t.trim();let u=e.slice(0,-1),s="arrow_open";switch(e.slice(-1)){case"x":s="arrow_cross","x"===e[0]&&(s="double_"+s,u=u.slice(1));break;case">":s="arrow_point","<"===e[0]&&(s="double_"+s,u=u.slice(1));break;case"o":s="arrow_circle","o"===e[0]&&(s="double_"+s,u=u.slice(1))}let i="normal",r=u.length-1;"="===u[0]&&(i="thick"),"~"===u[0]&&(i="invisible");let n=((t,e)=>{const u=e.length;let s=0;for(let i=0;i<u;++i)e[i]===t&&++s;return s})(".",u);return n&&(i="dotted",r=n),{type:s,stroke:i,length:r}})(t);let s;if(e){if(s=(t=>{let e=t.trim(),u="arrow_open";switch(e[0]){case"<":u="arrow_point",e=e.slice(1);break;case"x":u="arrow_cross",e=e.slice(1);break;case"o":u="arrow_circle",e=e.slice(1)}let s="normal";return e.includes("=")&&(s="thick"),e.includes(".")&&(s="dotted"),{type:u,stroke:s}})(e),s.stroke!==u.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===s.type)s.type=u.type;else{if(s.type!==u.type)return{type:"INVALID",stroke:"INVALID"};s.type="double_"+s.type}return"double_arrow"===s.type&&(s.type="double_arrow_point"),s.length=u.length,s}return u},et=(t,e)=>{let u=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(u=!0)})),u},ut=(t,e)=>{const u=[];return t.nodes.forEach(((s,i)=>{et(e,s)||u.push(t.nodes[i])})),{nodes:u}},st={firstGraph:J},it={parseDirective:F,defaultConfig:()=>r.j.flowchart,setAccTitle:r.o,getAccTitle:r.p,getAccDescription:r.q,setAccDescription:r.v,addVertex:B,lookUpDomId:C,addLink:m,updateLinkInterpolate:S,updateLink:v,addClass:x,setDirection:L,setClass:R,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(D["gen-1"===l?C(t):t]=_(e))}))},getTooltip:N,setClickEvent:$,setLink:I,bindFunctions:O,getDirection:P,getVertices:w,getEdges:U,getClasses:V,clear:G,setGen:Y,defaultStyle:K,addSubGraph:W,getDepthFirstPos:X,indexNodes:q,getSubGraphs:Z,destructLink:tt,lex:st,exists:et,makeUniq:ut,setDiagramTitle:r.w,getDiagramTitle:r.x},rt=Object.freeze(Object.defineProperty({__proto__:null,addClass:x,addLink:m,addSingleLink:T,addSubGraph:W,addVertex:B,bindFunctions:O,clear:G,default:it,defaultStyle:K,destructLink:tt,firstGraph:J,getClasses:V,getDepthFirstPos:X,getDirection:P,getEdges:U,getSubGraphs:Z,getTooltip:N,getVertices:w,indexNodes:q,lex:st,lookUpDomId:C,parseDirective:F,setClass:R,setClickEvent:$,setDirection:L,setGen:Y,setLink:I,updateLink:v,updateLinkInterpolate:S},Symbol.toStringTag,{value:"Module"}))}}]); \ No newline at end of file diff --git a/assets/js/9a118db7.8d5609b7.js b/assets/js/9a118db7.8d5609b7.js new file mode 100644 index 0000000000..62f26adfb5 --- /dev/null +++ b/assets/js/9a118db7.8d5609b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9364],{5637:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var t=n(7462),i=(n(7294),n(3905));n(5657);const l={title:"Variables",sidebar_position:6,description:"Variables guide and description"},s=void 0,r={unversionedId:"about/modelling/setup/variables",id:"about/modelling/setup/variables",title:"Variables",description:"Variables guide and description",source:"@site/docs/about/modelling/setup/variables.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/variables",permalink:"/ecalc/docs/about/modelling/setup/variables",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/variables.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Variables",sidebar_position:6,description:"Variables guide and description"},sidebar:"about",previous:{title:"Fuel types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types"},next:{title:"Installations",permalink:"/ecalc/docs/about/modelling/setup/installations/"}},o={},d=[{value:"Defining variables",id:"defining-variables",level:2},{value:"Format",id:"format",level:3},{value:"Examples",id:"examples",level:3},{value:"Using variables",id:"using-variables",level:2},{value:"Example",id:"example",level:3}],p={toc:d},u="wrapper";function m(e){let{components:a,...n}=e;return(0,i.kt)(u,(0,t.Z)({},p,n,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES")," keyword is ",(0,i.kt)("strong",{parentName:"p"},"optional")," for an eCalc\u2122 model to run.")),(0,i.kt)("h2",{id:"defining-variables"},"Defining variables"),(0,i.kt)("p",null,"Variables are defined in their own section in the YAML file, they can either be defined without link to time, or linked to time."),(0,i.kt)("h3",{id:"format"},"Format"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"VARIABLES:\n <variable name>:\n VALUE: <expression>\n")),(0,i.kt)("p",null,"With time link: "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"VARIABLES:\n <variable name>:\n <YYYY-MM-DD [HH:mm:ss]>:\n VALUE: <expression>\n")),(0,i.kt)("h3",{id:"examples"},"Examples"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"VARIABLES:\n salt_water_injection:\n VALUE: SIM1:COL1 {*} 2\n")),(0,i.kt)("p",null,"With time link: "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"VARIABLES:\n salt_water_injection:\n 2010-01-01:\n VALUE: SIM1:COL1 {*} 2\n 2020-01-01:\n VALUE: SIM1:COL1\n")),(0,i.kt)("h2",{id:"using-variables"},"Using variables"),(0,i.kt)("p",null,"Variables can be used in any expression throughout the YAML file and can even be used within defining other variables."),(0,i.kt)("h3",{id:"example"},"Example"),(0,i.kt)("p",null,"Using variables in the ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/installations/"},"INSTALLATION")," section:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"VARIABLES:\n gas_rateA:\n VALUE: SIM;COL1\n gas_rateB:\n VALUE: SIM;COL2\n\nINSTALLATIONS: \n - NAME: installationA\n CATEGORY: FIXED\n ...\n - NAME: sample_compressor\n CATEGORY: COMPRESSOR\n ENERGYFUNCTION: compressorA\n RATE: $var.gas_rateA {+} $var.gas_rateB\n ...\n")),(0,i.kt)("p",null,"Using variables in defining another variable:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"VARIABLES:\n salt_water_injection:\n VALUE: SIM1:COL1 {*} 2\n double_injection_rate:\n VALUE: $var.salt_water_injection {*} 2\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e136365.a92e9543.js b/assets/js/9e136365.a92e9543.js new file mode 100644 index 0000000000..532f7a6e09 --- /dev/null +++ b/assets/js/9e136365.a92e9543.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9591],{8738:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>a,contentTitle:()=>m,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var r=s(7462),t=(s(7294),s(3905));s(5657);const l={title:"Compressor train types",sidebar_position:2},m=void 0,i={unversionedId:"about/modelling/setup/models/compressor_modelling/compressor_models_types/index",id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/index",title:"Compressor train types",description:"This section outlines the various compressor train types that are available in eCalc\u2122.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor train types",sidebar_position:2},sidebar:"about",previous:{title:"Compressor charts",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},next:{title:"Single speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"}},a={},p=[],n={toc:p},d="wrapper";function c(e){let{components:o,...s}=e;return(0,t.kt)(d,(0,r.Z)({},n,s,{components:o,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"This section outlines the various compressor train types that are available in eCalc\u2122.\nThese are as follows:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},(0,t.kt)("inlineCode",{parentName:"a"},"Single speed compressor train model"))),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},(0,t.kt)("inlineCode",{parentName:"a"},"Variable speed compressor train model"))),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},(0,t.kt)("inlineCode",{parentName:"a"},"Simplified variable speed compressor train model"))),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},(0,t.kt)("inlineCode",{parentName:"a"},"Variable speed compressor train model with multiple streams and pressures")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e4a10de.50a40090.js b/assets/js/9e4a10de.50a40090.js new file mode 100644 index 0000000000..40300d64b4 --- /dev/null +++ b/assets/js/9e4a10de.50a40090.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4395],{5670:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));n(5657);const o={},i="TURBINE_MODEL",s={unversionedId:"about/references/keywords/TURBINE_MODEL",id:"about/references/keywords/TURBINE_MODEL",title:"TURBINE_MODEL",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD"},next:{title:"TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE"}},d={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],E={toc:c},l="wrapper";function p(e){let{components:t,...n}=e;return(0,a.kt)(l,(0,r.Z)({},E,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"turbine_model"},"TURBINE_MODEL"),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"When using a ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/turbine_modeling"},"TURBINE")," it is required for a ",(0,a.kt)("inlineCode",{parentName:"p"},"TURBINE_MODEL")," to be specified. This is done under the ",(0,a.kt)("inlineCode",{parentName:"p"},"MODELS")," section."),(0,a.kt)("p",null,"A turbine model describes a gas-fired turbine that is coupled to a compressor or compression train. It is specified in a similar way to a ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSET"),". ",(0,a.kt)("inlineCode",{parentName:"p"},"TURBINE_LOAD"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"TURBINE_EFFICIENCY")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"LOWER_HEATING_VALUE")," needs to be inputted here."),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n TURBINE_LOADS: <list of power values in mega watt>\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e7755e6.b2ff83c7.js b/assets/js/9e7755e6.b2ff83c7.js new file mode 100644 index 0000000000..196e468f76 --- /dev/null +++ b/assets/js/9e7755e6.b2ff83c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7212],{452:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>i,frontMatter:()=>o,metadata:()=>E,toc:()=>c});var a=r(7462),n=(r(7294),r(3905));r(5657);const o={},s="DISCHARGE_PRESSURE",E={unversionedId:"about/references/keywords/DISCHARGE_PRESSURE",id:"about/references/keywords/DISCHARGE_PRESSURE",title:"DISCHARGE_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/DISCHARGE_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DISCHARGE_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"},next:{title:"DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"}},l={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:c},S="wrapper";function i(e){let{components:t,...r}=e;return(0,n.kt)(S,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"discharge_pressure"},"DISCHARGE_PRESSURE"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n","[...]"," / ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"},"DISCHARGE_PRESSURE")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Yes"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"ENERGY_USAGE_MODEL")," ",(0,n.kt)("br",null)," ",(0,n.kt)("inlineCode",{parentName:"td"},"OPERATIONAL_SETTINGS")),(0,n.kt)("td",{parentName:"tr",align:null},"None")))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Used to define the discharge pressure for some ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"\ntypes and in ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},"OPERATIONAL_SETTINGS")," using an\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EXPRESSION"},"Expressions"),"."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"DISCHARGE_PRESSURE: <discharge pressure expression>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"DISCHARGE_PRESSURE: 200 # [bar]\n")))}i.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e91bf8d.d07b3cc0.js b/assets/js/9e91bf8d.d07b3cc0.js new file mode 100644 index 0000000000..f8598cfd59 --- /dev/null +++ b/assets/js/9e91bf8d.d07b3cc0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4631],{9221:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>n,metadata:()=>i,toc:()=>d});var s=r(7462),o=(r(7294),r(3905));r(5657);const n={title:"Fixed speed pressure control",sidebar_position:3,description:"Introduction to fixed speed pressure control"},a="Fixed speed pressure control",i={unversionedId:"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index",id:"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index",title:"Fixed speed pressure control",description:"Introduction to fixed speed pressure control",source:"@site/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control",slug:"/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Fixed speed pressure control",sidebar_position:3,description:"Introduction to fixed speed pressure control"},sidebar:"about",previous:{title:"Variable speed compressor train model with multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},next:{title:"Turbine modelling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling"}},l={},d=[{value:"Theory",id:"theory",level:2},{value:"Control modelling in eCalc\u2122",id:"control-modelling-in-ecalc",level:2},{value:"Pressure control methods - choking options",id:"pressure-control-methods---choking-options",level:3},{value:"UPSTREAM_CHOKE",id:"upstream_choke",level:4},{value:"DOWNSTREAM_CHOKE",id:"downstream_choke",level:4},{value:"Pressure control methods - recirculation options",id:"pressure-control-methods---recirculation-options",level:3},{value:"INDIVIDUAL_ASV_PRESSURE",id:"individual_asv_pressure",level:4},{value:"INDIVIDUAL_ASV_RATE",id:"individual_asv_rate",level:4},{value:"COMMON_ASV",id:"common_asv",level:4}],c={toc:d},h="wrapper";function p(e){let{components:t,...n}=e;return(0,o.kt)(h,(0,s.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"fixed-speed-pressure-control"},"Fixed speed pressure control"),(0,o.kt)("h2",{id:"theory"},"Theory"),(0,o.kt)("p",null,"Compressors are typically controlled by changing the rotational speed of the compressor train shaft, which can either increase or decrease the work performed.\nIn the case where this is not possible (",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},"single speed compressors"),"), or this is not sufficient to control the compressor, other methods of control need to be used.\nIn eCalc\u2122, there are three main compressor control methods considered (aside from rotational speed control), these are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Upstream choking/throttling"),(0,o.kt)("li",{parentName:"ul"},"Downstream choking/throttling"),(0,o.kt)("li",{parentName:"ul"},"Anti-surge recycling")),(0,o.kt)("p",null,"Each of these methods are used depending on the situation and placement of the compressor's operating points.\nA summary of how these methods work in practice are seen below.\nIn these figures, the red point represents a singular operating point, which is shifted with the given control mechanism. The operating point first starts below the compressor curve and is then adjusted toward the curve (by either changing head or rate). The different pressure control methods will change the operating points in the follow way:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Upstream throttling will decrease the inlet pressure, and in turn increase the head and the inlet volumetric flow rate (lower pressure = lower density = lower flow rate). "),(0,o.kt)("li",{parentName:"ul"},"Downstream throttling will increase the head, as the outlet pressure is increased. There is no influence on the inlet rate in this case.\nHowever, when the operating points is on the compressor curve, and the head is further increased (by increasing the outlet pressure), the rate of the compressor will thus be reduced. "),(0,o.kt)("li",{parentName:"ul"},"ASV recycling will simply increase the throughout of the compressor without influencing the head.\nHowever, when the operating points is on the compressor curve, and the mass rate through is further increased, compressor head will in turn be reduced (along the curve). ")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"Upstream Choking"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Downstream Choking"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("img",{src:r(3232).Z,width:"2990",height:"1906"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("img",{src:r(4548).Z,width:"2990",height:"1906"}))))),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"ASV Recycling"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("img",{src:r(2366).Z,width:"2990",height:"1906"}))))),(0,o.kt)("h2",{id:"control-modelling-in-ecalc"},"Control modelling in eCalc\u2122"),(0,o.kt)("p",null,"In eCalc\u2122, upstream and downstream choking is modelled as described in the ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/#theory"},"theory section"),".\nASV recycling on the other hand is done in three separate ways.\nThese three modelling methods are important for a compression train with more than one stage. This is due the fact that when each compressor stage has an individual ASV, the solution is under determined.\nFor a single stage compressor, the results of these methods will be identical.\nThis will further be elaborated upon in the ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/#pressure-control-methods---recirculation-options"},"recirculation options")," section. "),(0,o.kt)("p",null,"Some scenarios where additional pressure control is required can be when:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The compressor train only operates at one speed (",(0,o.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},"SINGLE_SPEED_COMPRESSOR_TRAIN"),"),\nand the given rate and suction pressure gives a too high discharge pressure."),(0,o.kt)("li",{parentName:"ul"},"The compressor train is a ",(0,o.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},"VARIABLE_SPEED_COMPRESSOR_TRAIN"),",\nbut it already operates at the minimum speed, and still the discharge pressure is too high."),(0,o.kt)("li",{parentName:"ul"},"The compressor train is a ",(0,o.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"),"\nrequired to meet an export pressure, before compressing gas further for injection. Here the\nrotational speed required to bring the gas from inlet pressure to export pressure may be higher than the speed\nrequired to bring the gas from export pressure to discharge pressure. Hence, the rotational speed giving\nthe correct export pressure will give a too high discharge pressure. ")),(0,o.kt)("h3",{id:"pressure-control-methods---choking-options"},"Pressure control methods - choking options"),(0,o.kt)("p",null,"In a situation where the rotational speed of the shaft can not be varied here are only two degrees of freedom.\nThis means that if you give the suction pressure and the flow rate as input, the discharge pressure is decided by those\ntwo inputs. Similarly, if you give the rate and the discharge pressure as input, the suction pressure is decided by\nthose two inputs. Hence, to calculate the energy usage for a given rate, suction pressure and discharge pressure, a\nmethod for fixed speed pressure control must be defined. This can be done by a choke valve upstream or downstream\nof the compressor train, or by recirculating fluid inside the compressor train. "),(0,o.kt)("p",null,"Currently, there are two options for choking the pressure in eCalc\u2122:"),(0,o.kt)("h4",{id:"upstream_choke"},"UPSTREAM_CHOKE"),(0,o.kt)("p",null,"The suction pressure is reduced such that the resulting suction pressure after choking together with the given speed results in the required discharge pressure.\nAs the inlet pressure is reduced, the inlet flow rate will also increase. "),(0,o.kt)("h4",{id:"downstream_choke"},"DOWNSTREAM_CHOKE"),(0,o.kt)("p",null,"The pressure is choked to the required discharge pressure after the compressor train. So the compressor's head will increase, as the compressor will compress the gas to a higher discharge pressure - which will subsequently be choked to the desired pressure."),(0,o.kt)("h3",{id:"pressure-control-methods---recirculation-options"},"Pressure control methods - recirculation options"),(0,o.kt)("p",null,"As previously mentioned, there are three different methods in eCalc\u2122 for modelling ASV recycling.\nThis is necessary as when there is more than one compressor stage, there will be individual ASVs per stage.\nThus, the problem is under determined, and there are multiple possible solutions.\nTherefore, some modelling choices must\nbe done.\nThere are currently three options available in eCalc\u2122: "),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"INDIVIDUAL_ASV_PRESSURE "),(0,o.kt)("li",{parentName:"ul"},"INDIVIDUAL_ASV_RATE"),(0,o.kt)("li",{parentName:"ul"},"COMMON_ASV")),(0,o.kt)("admonition",{title:"Note",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"With only one compressor stage or only one recirculation loop (common asv over the entire compressor train),\na unique solution to how much volume to recirculate is available. "),(0,o.kt)("p",{parentName:"admonition"},"For a single stage compressor, all recirculation options should give the same result.")),(0,o.kt)("p",null,"A further explanation of ASV recycling can be seen in the figure below.\nHere, it can be seen that the head of a compressor is reduced when the rate is increased.\nThis means that recirculation can reduce the\ndischarge pressure for a single speed compressor."),(0,o.kt)("p",null,(0,o.kt)("img",{src:r(6374).Z,width:"512",height:"384"})),(0,o.kt)("p",null,"Looking at the figure above, for an actual volume rate of 1882 am3/hr, the head is 93 kJ/kg (blue dashed line). If this head leads to a too large discharge pressure, it can be reduced by recirculation\nusing the anti-surge valve. As the actual flow rate through the compressor increases, the head is also reduced,\nmeaning that a higher actual flow rate leads to a lower discharge pressure. "),(0,o.kt)("p",null,"For example, by increasing the actual volume rate\nto 2322 am3/hr (by recirculating 440 am3/hr through the ASV), the head is reduced to about 81.3 kJ/kg (red dashed lines)\n, in turn leading to a lower discharge pressure. The head can be reduced further down to 42.5 kJ/kg at the maximum flow\nrate (3201 am3/hr) for the compressor (yellow dashed lines). The difference between the flow rate entering the\ncompressor train and the maximum flow rate for the compressor gives the amount of additional volume that can be\nrecirculated through the compressor - the available capacity."),(0,o.kt)("h4",{id:"individual_asv_pressure"},"INDIVIDUAL_ASV_PRESSURE"),(0,o.kt)("p",null,"The pressure ratio (discharge pressure/suction pressure) over each compressor stage is constant.\nEssentially, with each time step there will be no change in the pressure ratio, but the volume flow will adjust to keep the pressure ratio constant. "),(0,o.kt)("h4",{id:"individual_asv_rate"},"INDIVIDUAL_ASV_RATE"),(0,o.kt)("p",null,"The flow rate through each compressor stage is increased with the same fraction of the available capacity in that stage."),(0,o.kt)("p",null,"For example, if you have a 2-stage compressor and the first stage has 500 Am",(0,o.kt)("sup",null,"3"),"/h available capacity and the second has 400 Am",(0,o.kt)("sup",null,"3"),"/h available capacity.\nIf the first stage increases by 25 % of the available capacity (125 Am",(0,o.kt)("sup",null,"3"),"/h), the second stage increase by 25 % too (100 Am",(0,o.kt)("sup",null,"3"),"/h) - given that this matches the required output. "),(0,o.kt)("h4",{id:"common_asv"},"COMMON_ASV"),(0,o.kt)("p",null,"The same volume is recirculated through the entire compressor train.\nThus, each compression stage will have the same mass throughput."))}p.isMDXComponent=!0},2366:(e,t,r)=>{r.d(t,{Z:()=>s});const s=r.p+"assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png"},4548:(e,t,r)=>{r.d(t,{Z:()=>s});const s=r.p+"assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png"},6374:(e,t,r)=>{r.d(t,{Z:()=>s});const s=r.p+"assets/images/make_recirculation_pressure_control_plot-527cac79a8c53527147492b170308459.png"},3232:(e,t,r)=>{r.d(t,{Z:()=>s});const s=r.p+"assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png"}}]); \ No newline at end of file diff --git a/assets/js/a2e97e20.774d964a.js b/assets/js/a2e97e20.774d964a.js new file mode 100644 index 0000000000..3b251a719c --- /dev/null +++ b/assets/js/a2e97e20.774d964a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8988],{9848:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>s});var n=o(7462),a=(o(7294),o(3905));o(5657);const i={title:"Models",sidebar_position:4,description:"Guide on how to use models in eCalc\u2122"},l=void 0,r={unversionedId:"about/modelling/setup/models/index",id:"about/modelling/setup/models/index",title:"Models",description:"Guide on how to use models in eCalc\u2122",source:"@site/docs/about/modelling/setup/models/index.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/",permalink:"/ecalc/docs/about/modelling/setup/models/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Models",sidebar_position:4,description:"Guide on how to use models in eCalc\u2122"},sidebar:"about",previous:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular"},next:{title:"Fluid model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model"}},d={},s=[{value:"Format",id:"format",level:2},{value:"Supported types",id:"supported-types",level:2}],p={toc:s},u="wrapper";function m(e){let{components:t,...o}=e;return(0,a.kt)(u,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"The ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," keyword is ",(0,a.kt)("strong",{parentName:"p"},"optional")," for an eCalc\u2122 model to run. However, it is critical for compressor and turbine modelling.")),(0,a.kt)("p",null,"This part of the setup defines input files that characterize various fluid, compressor and turbine models. These are later used as input in the ",(0,a.kt)("a",{parentName:"p",href:"../../../references/keywords/INSTALLATIONS"},"INSTALLATIONS")," part of the setup by referencing their ",(0,a.kt)("a",{parentName:"p",href:"../../../references/keywords/NAME"},"NAME"),"."),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of model, for reference>\n TYPE: <model type>\n <other keywords according to TYPE>\n")),(0,a.kt)("h2",{id:"supported-types"},"Supported types"),(0,a.kt)("p",null,"The supported types are:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"FLUID")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_CHART")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"SINGLE_SPEED_COMPRESSOR_TRAIN")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"VARIABLE_SPEED_COMPRESSOR_TRAIN")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"TURBINE")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_WITH_TURBINE"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a5dcc804.f087fd6d.js b/assets/js/a5dcc804.f087fd6d.js new file mode 100644 index 0000000000..254b239248 --- /dev/null +++ b/assets/js/a5dcc804.f087fd6d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8276],{8289:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var a=i(7462),n=(i(7294),i(3905));i(5657);const s={title:"Output data",sidebar_position:1e3,description:"Output data"},l="Output data",o={unversionedId:"about/miscellaneous/index",id:"about/miscellaneous/index",title:"Output data",description:"Output data",source:"@site/docs/about/miscellaneous/index.md",sourceDirName:"about/miscellaneous",slug:"/about/miscellaneous/",permalink:"/ecalc/docs/about/miscellaneous/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/miscellaneous/index.md",tags:[],version:"current",sidebarPosition:1e3,frontMatter:{title:"Output data",sidebar_position:1e3,description:"Output data"},sidebar:"about",previous:{title:"v8.3 to v8.4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4"}},r={},u=[{value:"Decimals and significant digits in eCalc",id:"decimals-and-significant-digits-in-ecalc",level:2},{value:"Quality control",id:"quality-control",level:2}],d={toc:u},c="wrapper";function h(e){let{components:t,...s}=e;return(0,n.kt)(c,(0,a.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"output-data"},"Output data"),(0,n.kt)("p",null,"In general, each model is outputted to a .csv file with what is viewed as necessary information for an operator.\nFurther details, if necessary, can be seen in a .json file."),(0,n.kt)("h2",{id:"decimals-and-significant-digits-in-ecalc"},"Decimals and significant digits in eCalc"),(0,n.kt)("p",null,'Output numbers/result in eCalc are currently given at "6 significant digits/figures accuracy". This statement is valid\nfor positive and negative integers and float numbers. Read more about significant digits ',(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Significant_figures"},"here"),"."),(0,n.kt)("admonition",{type:"caution"},(0,n.kt)("p",{parentName:"admonition"},'Be aware that the output is never more accurate than the input (ie the measurements/prognosis). So, e.g. if your input\nis rounded off to "nearest million", then that is also how you should consider the accuracy of the output. The output accuracy\nis not more reliable than the lowest input accuracy given.')),(0,n.kt)("p",null,"In practice, for the output, this means:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Numbers higher than 1e6 (and lower than -1e6) will not have digits after decimal sign"),(0,n.kt)("li",{parentName:"ul"},"Numbers smaller than 1e-6 (and -1e-6) is considered to be 0 (rounded to 0), and we will\nnot operate with more than 6 digits after the decimal sign."),(0,n.kt)("li",{parentName:"ul"},'We only round numbers in the decimal part, to within the "significant digits"')),(0,n.kt)("p",null,"We may in the future allow user to specify number of significant digits in output, but for now it is fixed."),(0,n.kt)("h2",{id:"quality-control"},"Quality control"),(0,n.kt)("p",null,"eCalc\u2122 has a quality control function, which is represented by a validity flag. This validity flag gives the user information to whether or not their model is valid.\nThis flag can either be seen in the .csv or .json output file.\nEssentially, if the ",(0,n.kt)("inlineCode",{parentName:"p"},"<name>.is_valid")," is shown as a ",(0,n.kt)("inlineCode",{parentName:"p"},"1"),", the level is considered to be valid, and on the opposite end if it is shown to be ",(0,n.kt)("inlineCode",{parentName:"p"},"0"),", it can be considered invalid."),(0,n.kt)("p",null,"The most likely reason for an invalid flag is that a consumer (pump, compressor) is operating outside its operational limit (potentially outside the pump/compressor chart)."),(0,n.kt)("p",null,"This validity flag can be seen on multiple component levels:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The highest level being the eCalc\u2122 model (or otherwise known as the asset level). If the highest level flag is given as invalid, this means that any number of the installations in the model can have one or more invalid consumer."),(0,n.kt)("li",{parentName:"ul"},"If you dig further down in the component levels, the next would be on installation level. This means that if this flag is given as invalid, any consumer within that installation can be invalid."),(0,n.kt)("li",{parentName:"ul"},"Past the installation level, is the consumer level. Here, the validity of the individual consumers can be seen."),(0,n.kt)("li",{parentName:"ul"},"If the consumer is a multi-stage compressor (for example), the validity of each compression stage can be viewed (only in the .json file when detailed output is selected)")),(0,n.kt)("p",null,"This is further illustrated in the diagram below:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Validity flag example",src:i(3773).Z,width:"4331",height:"2500"})))}h.isMDXComponent=!0},3773:(e,t,i)=>{i.d(t,{Z:()=>a});const a=i.p+"assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png"}}]); \ No newline at end of file diff --git a/assets/js/ad129716.61a8f70c.js b/assets/js/ad129716.61a8f70c.js new file mode 100644 index 0000000000..13212f57f0 --- /dev/null +++ b/assets/js/ad129716.61a8f70c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[754],{1099:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>r,contentTitle:()=>l,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=s(7462),n=(s(7294),s(3905));s(5657);const i={title:"Compressor models",sidebar_position:3,description:"Using compressor models in calculations"},l="Compressor models in calculations",a={unversionedId:"about/modelling/setup/installations/compressor_models_in_calculations/index",id:"about/modelling/setup/installations/compressor_models_in_calculations/index",title:"Compressor models",description:"Using compressor models in calculations",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Compressor models",sidebar_position:3,description:"Using compressor models in calculations"},sidebar:"about",previous:{title:"Pump models",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations"},next:{title:"Compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor"}},r={},c=[],d={toc:c},m="wrapper";function p(e){let{components:o,...s}=e;return(0,n.kt)(m,(0,t.Z)({},d,s,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"compressor-models-in-calculations"},"Compressor models in calculations"),(0,n.kt)("p",null,"There are different options on how to utilise compressor models in the calculations within the\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," section in ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),". Three different options will be illustrated here:"),(0,n.kt)("p",null,"No matter the compressor model type, it can either be placed in two sections, which can be:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Under the ",(0,n.kt)("inlineCode",{parentName:"li"},"CONSUMERS")," section under ",(0,n.kt)("inlineCode",{parentName:"li"},"GENERATORSETS"),". This is applicable for electrical motor driven compressors where electricity is generated in de-coupled gas turbines and distributed to the individual process units."),(0,n.kt)("li",{parentName:"ul"},"Under the ",(0,n.kt)("inlineCode",{parentName:"li"},"FUELCONSUMERS")," section. Here it is necessary for the compressor model to be coupled to a gas turbine model. The coupled turbine is solely driving the compressor system to which it is attached to.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Example")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n - NAME: InstallationA\n CATEGORY: FIXED\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: gensetA\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n ...\n\n FUELCONSUMERS:\n - NAME: Gas export compressor\n CATEGORY: GAS-DRIVEN-COMPRESSOR \n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n ...\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/af105519.fcdf0f36.js b/assets/js/af105519.fcdf0f36.js new file mode 100644 index 0000000000..83cf931c6b --- /dev/null +++ b/assets/js/af105519.fcdf0f36.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4199],{7067:(t,o,e)=>{e.r(o),e.d(o,{assets:()=>v,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var i=e(7462),n=(e(7294),e(3905));e(5657);const a={title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",sidebar_position:3},s="v8.2 to v8.3",r={unversionedId:"about/migration_guides/v8-2_to_v8-3",id:"about/migration_guides/v8-2_to_v8-3",title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",source:"@site/docs/about/migration_guides/v8-2_to_v8-3.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-2_to_v8-3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-2_to_v8-3.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",sidebar_position:3},sidebar:"about",previous:{title:"v8.1 to v8.2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2"},next:{title:"v8.3 to v8.4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4"}},v={},d=[],u={toc:d},c="wrapper";function m(t){let{components:o,...e}=t;return(0,n.kt)(c,(0,i.Z)({},u,e,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"v82-to-v83"},"v8.2 to v8.3"),(0,n.kt)("p",null,"It is no longer accepted to change ",(0,n.kt)("inlineCode",{parentName:"p"},"ENERGY_USAGE_MODEL TYPE")," over time, within one consumer. In case ",(0,n.kt)("inlineCode",{parentName:"p"},"TYPE")," evolution is needed, the model can be split in two consumers."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b0a5d2c7.0057ab0a.js b/assets/js/b0a5d2c7.0057ab0a.js new file mode 100644 index 0000000000..f791869f61 --- /dev/null +++ b/assets/js/b0a5d2c7.0057ab0a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3414],{2528:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>a,default:()=>E,frontMatter:()=>s,metadata:()=>l,toc:()=>m});var t=n(7462),o=(n(7294),n(3905));n(5657);const s={},a="CONTROL_MARGIN",l={unversionedId:"about/references/keywords/CONTROL_MARGIN",id:"about/references/keywords/CONTROL_MARGIN",title:"CONTROL_MARGIN",description:"MODELS /",source:"@site/docs/about/references/keywords/CONTROL_MARGIN.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONTROL_MARGIN.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"},next:{title:"CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT"}},i={},m=[{value:"Description",id:"description",level:2},{value:"Use in Variable speed compressor train model",id:"use-in-variable-speed-compressor-train-model",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Use in Variable speed compressor train model with multiple streams and pressures",id:"use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example-1",level:3}],d={toc:m},_="wrapper";function E(e){let{components:r,...n}=e;return(0,o.kt)(_,(0,t.Z)({},d,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"control_margin"},"CONTROL_MARGIN"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n","[...]"," /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STAGES"},"STAGES")),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"This keyword defines the surge control margin for a variable speed compressor chart."),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"CONTROL_MARGIN")," behaves as an alternate to the minimum flow line: The input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line."),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"CONTROL_MARGIN")," is given as a percentage or fraction (",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT"},"CONTROL_MARGIN_UNIT"),") of the rate difference between minimum- and maximum flow,\nfor the given speed. It is used to calculate the increase in minimum flow for each individual speed curve.\nIt is defined when setting up the stages in a ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},"Variable speed compressor train model")," or ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"Variable speed compressor train model with multiple streams and pressures"),"."),(0,o.kt)("p",null,"It is currently only possible to define a surge control margin for variable speed compressors."),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"Surge control margin for variable speed compressor chart")," for more details."),(0,o.kt)("h2",{id:"use-in-variable-speed-compressor-train-model"},"Use in ",(0,o.kt)("a",{parentName:"h2",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},"Variable speed compressor train model")),(0,o.kt)("h3",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n ....\n")),(0,o.kt)("h3",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20\n COMPRESSOR_CHART: 1_stage_chart\n CONTROL_MARGIN: 0.1\n CONTROL_MARGIN_UNIT: FRACTION\n ....\n")),(0,o.kt)("h2",{id:"use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures"},"Use in ",(0,o.kt)("a",{parentName:"h2",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"Variable speed compressor train model with multiple streams and pressures")),(0,o.kt)("h3",{id:"format-1"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STREAMS:\n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING # NB: No fluid definition for outgoing streams!\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n")),(0,o.kt)("h3",{id:"example-1"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STREAMS:\n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n CONTROL_MARGIN: 10\n CONTROL_MARGIN_UNIT: PERCENTAGE\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n CONTROL_MARGIN: 15\n CONTROL_MARGIN_UNIT: PERCENTAGE\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n")))}E.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b15ba3bd.4093f573.js b/assets/js/b15ba3bd.4093f573.js new file mode 100644 index 0000000000..b803f5fd29 --- /dev/null +++ b/assets/js/b15ba3bd.4093f573.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2547],{695:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>l,frontMatter:()=>p,metadata:()=>E,toc:()=>i});var a=t(7462),r=(t(7294),t(3905));t(5657);const p={},o="PUMPS",E={unversionedId:"about/references/keywords/PUMPS",id:"about/references/keywords/PUMPS",title:"PUMPS",description:"INSTALLATIONS / [...] /",source:"@site/docs/about/references/keywords/PUMPS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/PUMPS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"PRICE",permalink:"/ecalc/docs/about/references/keywords/PRICE"},next:{title:"QUOTA",permalink:"/ecalc/docs/about/references/keywords/QUOTA"}},c={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1",id:"example-1",level:2},{value:"Example 2 (Detailed)",id:"example-2-detailed",level:2}],S={toc:i},s="wrapper";function l(e){let{components:n,...t}=e;return(0,r.kt)(s,(0,a.Z)({},S,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"pumps"},"PUMPS"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," / ","[...]"," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/PUMPS"},"PUMPS")),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"Used to define a list of pumps in a ",(0,r.kt)("inlineCode",{parentName:"p"},"PUMP_SYSTEM ENERGY USAGE MODEL"),". Each pump is defined with a name and with a\n",(0,r.kt)("inlineCode",{parentName:"p"},"facility input<FACILITY_INPUTS>")," reference to a pump type energy function."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: <name of compressor>\n CHART: <reference to pump model in facility inputs>\n")),(0,r.kt)("h2",{id:"example-1"},"Example 1"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n")),(0,r.kt)("h2",{id:"example-2-detailed"},"Example 2 (Detailed)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- NAME: waterinjection\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n 2019-01-01:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a\n CHART: winj_pumpchart_PA03A\n - NAME: pump_b\n CHART: winj_pumpchart_PA03B\n - NAME: pump_c\n CHART: winj_pumpchart_PA03C\n - NAME: pump_d\n CHART: winj_pumpchart_PA03D\n - NAME: pump_e\n CHART: winj_pumpchart_PA03E\n TOTAL_SYSTEM_RATE: SIM8;WATER_INJ\n FLUID_DENSITY: 1030\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.2, 0.2, 0.2, 0.2, 0.2]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b2773e31.cf7436d1.js b/assets/js/b2773e31.cf7436d1.js new file mode 100644 index 0000000000..5262b96b7b --- /dev/null +++ b/assets/js/b2773e31.cf7436d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4405],{4160:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>i,contentTitle:()=>r,default:()=>k,frontMatter:()=>s,metadata:()=>p,toc:()=>l});var n=t(7462),m=(t(7294),t(3905));t(5657);const s={},r="ADJUSTMENT",p={unversionedId:"about/references/keywords/ADJUSTMENT",id:"about/references/keywords/ADJUSTMENT",title:"ADJUSTMENT",description:"eCalc Model",source:"@site/docs/about/references/keywords/ADJUSTMENT.mdx",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ADJUSTMENT.mdx",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"YAML keywords",permalink:"/ecalc/docs/about/references/keywords/"},next:{title:"CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],N={toc:l},o="wrapper";function k(a){let{components:e,...t}=a;return(0,m.kt)(o,(0,n.Z)({},N,t,{components:e,mdxType:"MDXLayout"}),(0,m.kt)("h1",{id:"adjustment"},"ADJUSTMENT"),(0,m.kt)("p",null,(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/"},"eCalc Model"),"\n/ ",(0,m.kt)("a",{parentName:"p",href:"FACILITY_INPUTS"},"FACILITY_INPUTS"),"\n/ ",(0,m.kt)("a",{parentName:"p",href:"ADJUSTMENT"},"ADJUSTMENT")),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:null},"Required"),(0,m.kt)("th",{parentName:"tr",align:null},"Child of"),(0,m.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"No"),(0,m.kt)("td",{parentName:"tr",align:null},"FACILITY_INPUTS"),(0,m.kt)("td",{parentName:"tr",align:null},"CONSTANT ",(0,m.kt)("br",null)," FACTOR")))),(0,m.kt)("h2",{id:"description"},"Description"),(0,m.kt)("p",null,"For various reasons (degenerated equipment, liquid pumps, etc.), the predicted energy usage from\nthe facility input does not always match the historic usage. To account for this, adjustments\nmay be added to the facility input. Currently, linear adjustment to the energy usage is supported."),(0,m.kt)("admonition",{type:"warning"},(0,m.kt)("p",{parentName:"admonition"},"Even though The ",(0,m.kt)("a",{parentName:"p",href:"ADJUSTMENT"},"ADJUSTMENT")," factor and constant can be added to any\n",(0,m.kt)("a",{parentName:"p",href:"FACILITY_INPUTS"},"FACILITY_INPUTS"),", it is only\nimplemented and used for a small subset of equipment, namely: SAMPLED COMPRESSOR MODEL, TABULATED ENERGY USAGE MODEL,\n",(0,m.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS"),"\n, PUMP MODEL (Single Speed, Variable Speed and System) and compressors in a compressor system.\nIf you are not sure, give it a test first.")),(0,m.kt)("h2",{id:"format"},"Format"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-yaml"},"ADJUSTMENT:\n <ADJUSTMENT 1>: <VALUE>\n <ADJUSTMENT 2>: <VALUE>\n")),(0,m.kt)("h2",{id:"example"},"Example"),(0,m.kt)("p",null,"Say you have input that is off by a constant and percentage. You could fix this in the following way:"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-yaml"},"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n CONSTANT: 2\n FACTOR: 1.05\n")),(0,m.kt)("p",null,"The resulting energy consumption ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"E"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"j"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"u"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"s"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"t"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"e"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{adjusted}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"adjusted"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", i.e. fuel or power, will then be"),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"E"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"j"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"u"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"s"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"t"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"e"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"))),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mn",{parentName:"mrow"},"2"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mn",{parentName:"mrow"},"1.05"),(0,m.kt)("mo",{parentName:"mrow"},"\xd7"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"E"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"o"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"r"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"g"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"n"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"l")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{adjusted} = 2 + 1.05 \\times E_\\mathrm{original}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"adjusted"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1.05"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\xd7"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"original"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"}))))))))))),(0,m.kt)("p",null,"where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"E"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"o"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"r"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"g"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"n"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"l")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{original}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"original"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," is the energy consumption before the adjustment."))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b2781c74.5c448432.js b/assets/js/b2781c74.5c448432.js new file mode 100644 index 0000000000..ad30f9ba45 --- /dev/null +++ b/assets/js/b2781c74.5c448432.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4278],{2776:e=>{e.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/b2b17913.22f973b5.js b/assets/js/b2b17913.22f973b5.js new file mode 100644 index 0000000000..fadebe3ecb --- /dev/null +++ b/assets/js/b2b17913.22f973b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3190],{2004:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>N,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));a(5657);const l={},o="CATEGORY",d={unversionedId:"about/references/keywords/CATEGORY",id:"about/references/keywords/CATEGORY",title:"CATEGORY",description:"eCalc Model",source:"@site/docs/about/references/keywords/CATEGORY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CATEGORY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT"},next:{title:"COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL"}},i={},p=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],s={toc:p},m="wrapper";function N(e){let{components:t,...a}=e;return(0,r.kt)(m,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"category"},"CATEGORY"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/"},"eCalc Model"),"\n/ ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),"\n/ ","[...]"," / ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Required"),(0,r.kt)("th",{parentName:"tr",align:null},"Child of"),(0,r.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"/ecalc/docs/about/references/keywords/CONSUMERS"},"CONSUMERS")," ",(0,r.kt)("br",null)," ",(0,r.kt)("a",{parentName:"td",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS")," ",(0,r.kt)("br",null)," ",(0,r.kt)("a",{parentName:"td",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," ",(0,r.kt)("br",null)," ",(0,r.kt)("a",{parentName:"td",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," ",(0,r.kt)("br",null)),(0,r.kt)("td",{parentName:"tr",align:null},"None")))),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")," keyword is used to specify which category certain data types belong to - these data types are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/CONSUMERS"},"CONSUMERS")," and ",(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS"),": Required"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),": Optional"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPE"),": Optional")),(0,r.kt)("p",null,"Only a limited pre-defined set of categories is valid input to the\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")," keyword. The complete list of possible categories is given below.\nPlease note that the input is case-sensitive. The names should be in upper-case and the spelling/dash must match the names in the list exactly."),(0,r.kt)("p",null,"Allowed categories for ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMERS"},"CONSUMERS")," and ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS"),":"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Category"),(0,r.kt)("th",{parentName:"tr",align:null},"Description/Examples"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"BASE-LOAD")),(0,r.kt)("td",{parentName:"tr",align:null},"Consumers that do not vary with production")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"COLD-VENTING-FUGITIVE")),(0,r.kt)("td",{parentName:"tr",align:null},"Direct emissions through cold venting and fugitive emissions")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"COMPRESSOR")),(0,r.kt)("td",{parentName:"tr",align:null},"Gas injection compressors, export compressors, etc.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"FIXED-PRODUCTION-LOAD")),(0,r.kt)("td",{parentName:"tr",align:null},"Consumer that is fixed/constant when production stream is on. Note that this is simply the name of the category. eCalc\u2122 does ",(0,r.kt)("strong",{parentName:"td"},"not")," imply any condition (that production must be > 0) when this keyword is applied. For this to occur, ",(0,r.kt)("a",{parentName:"td",href:"/ecalc/docs/about/references/keywords/CONDITION"},"CONDITION")," must be used. See example below.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"FLARE")),(0,r.kt)("td",{parentName:"tr",align:null},"Flaring related energy usage/emissions")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"MISCELLANEOUS")),(0,r.kt)("td",{parentName:"tr",align:null},"Anything that don't apply other categories. Compressor and Genset (New in ",(0,r.kt)("strong",{parentName:"td"},"v7.2"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"PUMP")),(0,r.kt)("td",{parentName:"tr",align:null},"Single speed pumps, variable speed pumps.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"GAS-DRIVEN-COMPRESSOR")),(0,r.kt)("td",{parentName:"tr",align:null},"Compressor only. New in ",(0,r.kt)("strong",{parentName:"td"},"v7.1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"TURBINE-GENERATOR")),(0,r.kt)("td",{parentName:"tr",align:null},"Genset only. New in ",(0,r.kt)("strong",{parentName:"td"},"v7.1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"POWER-FROM-SHORE")),(0,r.kt)("td",{parentName:"tr",align:null},"Genset only. Dummy Genset (should have e.g. 0 fuel). New in ",(0,r.kt)("strong",{parentName:"td"},"v7.1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"OFFSHORE-WIND")),(0,r.kt)("td",{parentName:"tr",align:null},"Direct load consumer only. Negative load. Indicate external power. New in ",(0,r.kt)("strong",{parentName:"td"},"v7.1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"LOADING")),(0,r.kt)("td",{parentName:"tr",align:null},"Direct load consumer only. Indicate oil volume to be loaded. New in ",(0,r.kt)("strong",{parentName:"td"},"v8.0"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"STORAGE")),(0,r.kt)("td",{parentName:"tr",align:null},"Direct load consumer only. Indicate oil volume to be stored. New in ",(0,r.kt)("strong",{parentName:"td"},"v8.0"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"STEAM-TURBINE-GENERATOR")),(0,r.kt)("td",{parentName:"tr",align:null},"Direct load consumer only. Negative load. Indicate power generated steam turbine. New in ",(0,r.kt)("strong",{parentName:"td"},"v8.1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"BOILER")),(0,r.kt)("td",{parentName:"tr",align:null},"Genset only. Indicate steam generated. New in ",(0,r.kt)("strong",{parentName:"td"},"v8.2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"HEATER")),(0,r.kt)("td",{parentName:"tr",align:null},"Genset only. Indicate hot medium generated. New in ",(0,r.kt)("strong",{parentName:"td"},"v8.2"))))),(0,r.kt)("p",null,"Allowed categories for ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),":"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Category"),(0,r.kt)("th",{parentName:"tr",align:null},"Description/Examples"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"FIXED")),(0,r.kt)("td",{parentName:"tr",align:null},"Fixed installation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"MOBILE")),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile/satellite installation.")))),(0,r.kt)("p",null,"Allowed categories for ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES"),":"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Category"),(0,r.kt)("th",{parentName:"tr",align:null},"Description/Examples"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"FUEL-GAS")),(0,r.kt)("td",{parentName:"tr",align:null},"Normally associated with a fixed installation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"DIESEL")),(0,r.kt)("td",{parentName:"tr",align:null},"Normally associated with a mobile installation")))),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"CATEGORY: <CATEGORY>\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- NAME: name_of_my_electrical_consumer\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n LOAD: 5\n CONDITION: SIM;OIL_PROD > 0\n")))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b677d687.9fe87b82.js b/assets/js/b677d687.9fe87b82.js new file mode 100644 index 0000000000..d5f7ec45f2 --- /dev/null +++ b/assets/js/b677d687.9fe87b82.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[262],{3420:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>s,toc:()=>E});var r=n(7462),a=(n(7294),n(3905));n(5657);const o={},i="RATE_FRACTIONS",s={unversionedId:"about/references/keywords/RATE_FRACTIONS",id:"about/references/keywords/RATE_FRACTIONS",title:"RATE_FRACTIONS",description:"Description",source:"@site/docs/about/references/keywords/RATE_FRACTIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE_FRACTIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE",permalink:"/ecalc/docs/about/references/keywords/RATE"},next:{title:"RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM"}},c={},E=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],T={toc:E},p="wrapper";function l(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},T,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"rate_fractions"},"RATE_FRACTIONS"),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, ",(0,a.kt)("inlineCode",{parentName:"p"},"TOTAL_SYSTEM_RATE")," for the ",(0,a.kt)("inlineCode",{parentName:"p"},"ENERGY_USAGE_MODEL")," is also required. You can use either ",(0,a.kt)("inlineCode",{parentName:"p"},"RATES")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"RATE_FRACTIONS"),"; however, not both in one operational setting."),(0,a.kt)("p",null,"When specifying the rate fraction, the first fraction will relate to the first operational unit mentioned - i.e. if a pump system has two pumps, the first pump mentioned will relate to the rate fraction."),(0,a.kt)("p",null,"Note that in the case of a compressor, the same method is utilised for specifying rate fractions."),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: <pump name>\n CHART: <chart reference>\n - NAME: <pump name>\n CHART: <chart reference>\n TOTAL_SYSTEM_RATE: <system rate>\n FLUID_DENSITY: <fluid density>\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: <[fraction 1, fraction 2]>\n ...\n - RATE_FRACTIONS: <[fraction 1, fraction 2]>\n ...\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1030\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITIES:\n - 1000\n - 1050\n")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b8c59810.5a911fd5.js b/assets/js/b8c59810.5a911fd5.js new file mode 100644 index 0000000000..ba0eb62c7f --- /dev/null +++ b/assets/js/b8c59810.5a911fd5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9643],{1414:e=>{e.exports=JSON.parse('{"label":"eCalc","permalink":"/ecalc/docs/tags/e-calc","allTagsPath":"/ecalc/docs/tags","count":15,"items":[{"id":"changelog/separator","title":"---","description":"","permalink":"/ecalc/docs/changelog/separator"},{"id":"changelog/next","title":"Next","description":"New Features","permalink":"/ecalc/docs/changelog/latest"},{"id":"changelog/v7-0","title":"v7.0","description":"Features","permalink":"/ecalc/docs/changelog/v7-0-release"},{"id":"changelog/v7-1","title":"v7.1","description":"Features","permalink":"/ecalc/docs/changelog/v7-1-release"},{"id":"changelog/v7-2","title":"v7.2","description":"Features","permalink":"/ecalc/docs/changelog/v7-2-release"},{"id":"changelog/v7-3","title":"v7.3","description":"Features","permalink":"/ecalc/docs/changelog/v7-3-release"},{"id":"changelog/v7-4","title":"v7.4","description":"Features","permalink":"/ecalc/docs/changelog/v7-4-release"},{"id":"changelog/v7-5","title":"v7.5","description":"Features","permalink":"/ecalc/docs/changelog/v7-5-release"},{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","permalink":"/ecalc/docs/changelog/v7-6-release"},{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","permalink":"/ecalc/docs/changelog/v8.0-release"},{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","permalink":"/ecalc/docs/changelog/v8.1-release"},{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.2-release"},{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.3-release"},{"id":"changelog/v8-4","title":"v8.4 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.4-release"},{"id":"changelog/v8-5","title":"v8.5 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.5-release"}]}')}}]); \ No newline at end of file diff --git a/assets/js/bb45b332.a011fd75.js b/assets/js/bb45b332.a011fd75.js new file mode 100644 index 0000000000..c675bc9126 --- /dev/null +++ b/assets/js/bb45b332.a011fd75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4103],{1683:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>d,toc:()=>c});var o=t(7462),i=(t(7294),t(3905));t(5657);const a={title:"Modelling guide",sidebar_position:4,description:"eCalc modelling"},l="Modelling",d={unversionedId:"about/modelling/index",id:"about/modelling/index",title:"Modelling guide",description:"eCalc modelling",source:"@site/docs/about/modelling/index.md",sourceDirName:"about/modelling",slug:"/about/modelling/",permalink:"/ecalc/docs/about/modelling/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Modelling guide",sidebar_position:4,description:"eCalc modelling"},sidebar:"about",previous:{title:"YAML",permalink:"/ecalc/docs/about/getting_started/yaml/"},next:{title:"Theory",permalink:"/ecalc/docs/about/modelling/theory/"}},s={},c=[],r={toc:c},u="wrapper";function m(e){let{components:n,...t}=e;return(0,i.kt)(u,(0,o.Z)({},r,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"modelling"},"Modelling"),(0,i.kt)("p",null,"This section describes how to use eCalc."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"It is good practice when writing the eCalc YAML setup file to include, as comments, the version it was written for, your name and a \u2018change log\u2019 which should include the date and changes made.")),(0,i.kt)("p",null,"The YAML setup file:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"# ecalc version v5.3.1\n# input by: john.doe@example.com\n#\n# change log - add comments regarding relevant changes made to the file\n# date: YYYYMMDD, john doe\n# extended suction and discharge pressure range for precompressor\n# date: YYYYMMDD, jane doe\n# updated gensetA\n\nTIME_SERIES:\n - NAME: SIM1\n FILE: examplecase_inputvariables.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n...\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bdf25f4c.8a60e1cf.js b/assets/js/bdf25f4c.8a60e1cf.js new file mode 100644 index 0000000000..6fd51290a0 --- /dev/null +++ b/assets/js/bdf25f4c.8a60e1cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4025],{591:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var r=a(7462),n=(a(7294),a(3905));a(5657);const o={slug:"v7-1-release",title:"v7.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:4},l="eCalc v7.1",i={unversionedId:"changelog/v7-1",id:"changelog/v7-1",title:"v7.1",description:"Features",source:"@site/docs/changelog/v7-1.md",sourceDirName:"changelog",slug:"/changelog/v7-1-release",permalink:"/ecalc/docs/changelog/v7-1-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-1.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:4,frontMatter:{slug:"v7-1-release",title:"v7.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:4},sidebar:"changelog",previous:{title:"v7.0",permalink:"/ecalc/docs/changelog/v7-0-release"},next:{title:"v7.2",permalink:"/ecalc/docs/changelog/v7-2-release"}},p={},s=[{value:"<em>Features</em>",id:"features",level:2},{value:"CLI",id:"cli",level:2}],m={toc:s},c="wrapper";function d(e){let{components:t,...a}=e;return(0,n.kt)(c,(0,r.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"ecalc-v71"},"eCalc v7.1"),(0,n.kt)("h2",{id:"features"},(0,n.kt)("em",{parentName:"h2"},"Features")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add new ",(0,n.kt)("a",{parentName:"p",href:"../about/references/keywords/CATEGORY"},"CATEGORY")," with name ",(0,n.kt)("em",{parentName:"p"},"OFFSHORE-WIND")," to report power usage from offshore windfarms. Should be negative load to deduct from genset, if what is supplied externally. Also added to ",(0,n.kt)("inlineCode",{parentName:"p"},"LTP Reporting"),". See excerpt example below:"),(0,n.kt)("p",{parentName:"li"},".. code-block:: yaml"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"NAME: wind_turbine\nCATEGORY: OFFSHORE-WIND\nENERGY_USAGE_MODEL:\nTYPE: DIRECT\nLOAD: -4.4 # MW"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add new ",(0,n.kt)("a",{parentName:"p",href:"../about/references/keywords/CATEGORY"},"CATEGORY")," with name ",(0,n.kt)("em",{parentName:"p"},"TURBINE-GENERATOR")," and ",(0,n.kt)("em",{parentName:"p"},"POWER-FROM-SHORE")," to report power consumption separately from installation and onshore (land) for generators. If not set,\ndefaults to ",(0,n.kt)("em",{parentName:"p"},"TURBINE-GENERATOR"),". See excerpt example below:"),(0,n.kt)("p",{parentName:"li"},".. code-block:: yaml"),(0,n.kt)("p",{parentName:"li"}," GENERATORSETS:"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre"},"- NAME: genset\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: A_genset\n ...\n ...\n- NAME: power_from_shore\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: onshore_power\n ...\n")))),(0,n.kt)("p",null,"where ",(0,n.kt)("em",{parentName:"p"},"electricity2fuel")," for onshore power in general would have power map to 0 fuel usage"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add new ",(0,n.kt)("a",{parentName:"p",href:"../about/references/keywords/CATEGORY"},"CATEGORY")," with name ",(0,n.kt)("em",{parentName:"p"},"GAS-DRIVEN-COMPRESSOR")," to report power consumption for gas(-turbine)-driven compressors for LTP. Also added to ",(0,n.kt)("inlineCode",{parentName:"p"},"LTP Reporting"),". See excerpt example below:"),(0,n.kt)("p",{parentName:"li"},".. code-block:: yaml"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"NAME: gascompression_2\nCATEGORY: GAS-DRIVEN-COMPRESSOR\nENERGY_USAGE_MODEL:\nTYPE: COMPRESSOR"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Allow single speed and variable speed compressor train to run with zero pressure and non-zero rate. Will raise warning, and affected time steps will not be calculated, but eCalc will run.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add a ",(0,n.kt)("em",{parentName:"p"},"POWER")," column data to the ",(0,n.kt)("em",{parentName:"p"},"COMPRESSOR_TABULAR")," csv-file for a fuel-driven ",(0,n.kt)("em",{parentName:"p"},"SAMPLED_COMPRESSOR")," in order to also get energy reported as power (MW). See ",(0,n.kt)("inlineCode",{parentName:"p"},"Header requirements for the sampled compressor csv file"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Add surge control margin to variable speed compressor charts. See ",(0,n.kt)("inlineCode",{parentName:"p"},"Surge control margin for variable speed compressor chart"),".")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Ensure non-infinite loops by setting max 50 iterations for compressor models. Will raise warning in the logger if not converged.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Bug in max rate calculation for simplified compressor train. Wrong convergence criterion leading to too early exit from iteration.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"VARIABLES can be specified in yaml and referred to in expressions."),(0,n.kt)("p",{parentName:"li"},".. code-block:: yaml"),(0,n.kt)("p",{parentName:"li"}," VARIABLES:\nsalt_water_injection:\nVALUE: SIM1:COL1 {*} 2"),(0,n.kt)("p",{parentName:"li"},"Use this variable by referencing it as ",(0,n.kt)("inlineCode",{parentName:"p"},"$var.salt_water_injection")," in an\nexpression."),(0,n.kt)("p",{parentName:"li"},".. code-block:: yaml"),(0,n.kt)("p",{parentName:"li"},' EXPRESSION: "$var.salt_water_injection {/} 2"'),(0,n.kt)("p",{parentName:"li"},"See ",(0,n.kt)("a",{parentName:"p",href:"../about/references/keywords/VARIABLES"},"VARIABLES")," for more information."))),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"Breaking changes")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"CONVERT_TO_RATE no longer supported. If this was something you used, let us know so we can know the use case.")),(0,n.kt)("h2",{id:"cli"},"CLI"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Experimental: Add JSON v3 output to cover needs that are no longer supported by v2 because of tight coupling with core code. Both new and old format is provided, and will be stored when using the --json argument.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bfdf430b.7da059bb.js b/assets/js/bfdf430b.7da059bb.js new file mode 100644 index 0000000000..be325aab32 --- /dev/null +++ b/assets/js/bfdf430b.7da059bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8583],{5370:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var l=t(7462),n=(t(7294),t(3905));t(5657);const r={slug:"v8.0-release",title:"v8.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:10},i="eCalc v8.0",o={unversionedId:"changelog/v8-0",id:"changelog/v8-0",title:"v8.0",description:"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some",source:"@site/docs/changelog/v8-0.md",sourceDirName:"changelog",slug:"/changelog/v8.0-release",permalink:"/ecalc/docs/changelog/v8.0-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-0.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:10,frontMatter:{slug:"v8.0-release",title:"v8.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:10},sidebar:"changelog",previous:{title:"v7.6",permalink:"/ecalc/docs/changelog/v7-6-release"},next:{title:"v8.1",permalink:"/ecalc/docs/changelog/v8.1-release"}},s={},u=[{value:"New features",id:"new-features",level:2},{value:"Experimental features",id:"experimental-features",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"YAML",id:"yaml",level:3},{value:"CLI",id:"cli",level:3}],c={toc:u},m="wrapper";function d(e){let{components:a,...t}=e;return(0,n.kt)(m,(0,l.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"ecalc-v80"},"eCalc v8.0"),(0,n.kt)("p",null,"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some\nof the highlights:"),(0,n.kt)("h2",{id:"new-features"},"New features"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Improved the accuracy of the compressor and pump models"),(0,n.kt)("li",{parentName:"ul"},"Changes to CSV output ",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"reduced the number of columns"),(0,n.kt)("li",{parentName:"ul"},"simplified headers, added units"),(0,n.kt)("li",{parentName:"ul"},"renamed power_rate to power"),(0,n.kt)("li",{parentName:"ul"},"the is_invalid column is now reported as is_valid"))),(0,n.kt)("li",{parentName:"ul"},"Changes to LTP:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"renamed loading and storage columns"),(0,n.kt)("li",{parentName:"ul"},"added categories for flare, fugitive emissions, name should no longer be used"))),(0,n.kt)("li",{parentName:"ul"},"Changes to JSON:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"json_v1 and json_v2 has been removed.")))),(0,n.kt)("h2",{id:"experimental-features"},"Experimental features"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Add maximum power limit for compressor models")),(0,n.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,n.kt)("p",null,"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"),(0,n.kt)("h3",{id:"yaml"},"YAML"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"All component names must be unique to avoid ambiguity in reporting"),(0,n.kt)("li",{parentName:"ol"},"UNITS are required when setting up compressor and pump charts"),(0,n.kt)("li",{parentName:"ol"},"Restrict allowed characters in component names and emission names"),(0,n.kt)("li",{parentName:"ol"},"NAME no longer used for LTP reporting, use CATEGORY instead"),(0,n.kt)("li",{parentName:"ol"},"Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)")),(0,n.kt)("h3",{id:"cli"},"CLI"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Invoking eCalc\u2122 directly is no longer supported, use ",(0,n.kt)("inlineCode",{parentName:"li"},"ecalc run")," instead."),(0,n.kt)("li",{parentName:"ol"},"Log level should be specified as the first argument + log to file"),(0,n.kt)("li",{parentName:"ol"},"Model yaml-file needs to come last"),(0,n.kt)("li",{parentName:"ol"},"Extrapolation (correction) is now always used and cannot be disabled"),(0,n.kt)("li",{parentName:"ol"},"Argument for LTP export has changed from: ",(0,n.kt)("inlineCode",{parentName:"li"},"--centuries-ltp-export")," to ",(0,n.kt)("inlineCode",{parentName:"li"},"--ltp-export")),(0,n.kt)("li",{parentName:"ol"},"Simple results are now default for json")),(0,n.kt)("p",null,"Check out the ",(0,n.kt)("a",{parentName:"p",href:"../about/migration_guides/v7_to_v8"},"migration guide")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c21bc46a.9005f607.js b/assets/js/c21bc46a.9005f607.js new file mode 100644 index 0000000000..06b68b3de9 --- /dev/null +++ b/assets/js/c21bc46a.9005f607.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3443],{6997:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var o=r(7462),a=(r(7294),r(3905));r(5657);const n={},l="MODELS",s={unversionedId:"about/references/keywords/MODELS",id:"about/references/keywords/MODELS",title:"MODELS",description:"MODELS",source:"@site/docs/about/references/keywords/MODELS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/MODELS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE"},next:{title:"NAME",permalink:"/ecalc/docs/about/references/keywords/NAME"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Supported Model types",id:"supported-model-types",level:2}],p={toc:d},c="wrapper";function u(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"models"},"MODELS"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"Each element is specified in a list. These are later used as input to other models, or in the\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," part of the setup by referencing their\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME"),"."),(0,a.kt)("p",null,"This part of the setup specifies models not having any input data and/or multi level models, that is models which use\nother models (from both ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," and from ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),")."),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of model, for reference>\n TYPE: <model type>\n <other keywords according to TYPE>\n")),(0,a.kt)("h2",{id:"supported-model-types"},"Supported Model types"),(0,a.kt)("p",null,"The supported types are:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"FLUID")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_CHART")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"SINGLE_SPEED_COMPRESSOR_TRAIN")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"VARIABLE_SPEED_COMPRESSOR_TRAIN")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"TURBINE")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"COMPRESSOR_WITH_TURBINE"))),(0,a.kt)("p",null,"The documentation of each of these is found on the ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},"Compressor Modelling")," page."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c3d1f0cd.15f28b48.js b/assets/js/c3d1f0cd.15f28b48.js new file mode 100644 index 0000000000..79bfb9d7d7 --- /dev/null +++ b/assets/js/c3d1f0cd.15f28b48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4733],{9325:(e,t,l)=>{l.r(t),l.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var a=l(7462),n=(l(7294),l(3905));l(5657);const i={sidebar_label:"CLI"},o="ecalc",r={unversionedId:"about/references/cli_reference",id:"about/references/cli_reference",title:"ecalc",description:"Args:",source:"@site/docs/about/references/cli_reference.md",sourceDirName:"about/references",slug:"/about/references/cli_reference",permalink:"/ecalc/docs/about/references/cli_reference",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/cli_reference.md",tags:[],version:"current",frontMatter:{sidebar_label:"CLI"},sidebar:"about",previous:{title:"API reference",permalink:"/ecalc/docs/about/references/api/"},next:{title:"Migrating eCalc versions",permalink:"/ecalc/docs/about/migration_guides/"}},s={},u=[{value:"<code>ecalc run</code>",id:"ecalc-run",level:2},{value:"<code>ecalc selftest</code>",id:"ecalc-selftest",level:2},{value:"<code>ecalc show</code>",id:"ecalc-show",level:2},{value:"<code>ecalc show results</code>",id:"ecalc-show-results",level:3},{value:"<code>ecalc show yaml</code>",id:"ecalc-show-yaml",level:3}],p={toc:u},c="wrapper";function m(e){let{components:t,...l}=e;return(0,n.kt)(c,(0,a.Z)({},p,l,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"ecalc"},(0,n.kt)("inlineCode",{parentName:"h1"},"ecalc")),(0,n.kt)("p",null,"Args:\nlog_level: Log level of the CLI logger, defaults to INFO\nlog_folder: Path to location of log files\nversion: Option to show libecalc version."),(0,n.kt)("p",null,"Returns:"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Usage"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"$ ecalc [OPTIONS] COMMAND [ARGS]...\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Options"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--log [ERROR|WARNING|INFO|DEBUG]"),": Set the loglevel. ","[default: INFO]"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--log-folder PATH"),": Store log files in a folder"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--version"),": Show current eCalc\u2122 version."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--install-completion [bash|zsh|fish|powershell|pwsh]"),": Install completion for the specified shell."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--show-completion [bash|zsh|fish|powershell|pwsh]"),": Show completion for the specified shell, to copy it or customize the installation."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--help"),": Show this message and exit.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Commands"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"run"),": CLI command to run a ecalc model."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"selftest"),": Test that eCalc has been successfully..."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"show"),": Command to show information in the model...")),(0,n.kt)("h2",{id:"ecalc-run"},(0,n.kt)("inlineCode",{parentName:"h2"},"ecalc run")),(0,n.kt)("p",null,"CLI command to run a ecalc model."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Usage"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"$ ecalc run [OPTIONS] MODEL_FILE\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"MODEL_FILE"),": The Model YAML-file specifying time series inputs, facility inputs and the relationship between energy consumers. ","[required]")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Options"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"-f, --output-frequency, --outputfrequency [NONE|YEAR|MONTH|DAY]"),": Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values ","[default: NONE]"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"-c, --csv"),": Toggle output of csv data. ","[default: True]"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--json"),": Toggle output of json output."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"-o, --output-folder, --outputfolder PATH"),": Outputfolder. Defaults to output/ relative to the yml setup file"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"-n, --name-prefix, --nameprefix TEXT"),": Name prefix for output data. Defaults to name of setup file."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--ltp-export"),": In addition to standard output, a specific Long Term Prognosis (LTP) file will be provided for simple export of LTP relevant data (Tabular Separated Values)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--stp-export"),": In addition to standard output, a specific Short Term Prognosis (STP) file will be provided for simple export of STP relevant data (Tabular Separated Values)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--flow-diagram"),": Output the input model formatted to be displayed in a custom flow diagram format in JSON"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--detailed-output, --detailedoutput"),": Output detailed output. When False you will get basic results such as energy usage, power, time vector."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--date-format-option [0|1|2]"),': Date format option. 0: "YYYY-MM-DD HH:MM:SS" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM:SS" (ISO8601), 2: "DD.MM.YYYY HH:MM:SS". Default 0 (ISO 8601) ',"[default: 0]"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--help"),": Show this message and exit.")),(0,n.kt)("h2",{id:"ecalc-selftest"},(0,n.kt)("inlineCode",{parentName:"h2"},"ecalc selftest")),(0,n.kt)("p",null,"Test that eCalc has been successfully installed"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Usage"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"$ ecalc selftest [OPTIONS]\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Options"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--help"),": Show this message and exit.")),(0,n.kt)("h2",{id:"ecalc-show"},(0,n.kt)("inlineCode",{parentName:"h2"},"ecalc show")),(0,n.kt)("p",null,"Command to show information in the model or results."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Usage"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"$ ecalc show [OPTIONS] COMMAND [ARGS]...\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Options"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--help"),": Show this message and exit.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Commands"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"results"),": Show results."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"yaml"),": Show yaml model.")),(0,n.kt)("h3",{id:"ecalc-show-results"},(0,n.kt)("inlineCode",{parentName:"h3"},"ecalc show results")),(0,n.kt)("p",null,"Show results. You need to run eCalc\u2122 before this will be available."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Usage"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"$ ecalc show results [OPTIONS]\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Options"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"-n, --name TEXT"),": Filter the results to only show the component with this name"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--output-format [csv|json]"),": Show the data in this format. ","[default: json]"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--file PATH"),": Write the data to a file with the specified name."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--output-folder PATH"),": Output folder. Defaults to current working directory"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--detailed-output"),": Output detailed output. When False you will get basic energy usage and emissions results"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--date-format-option [0|1|2]"),': Date format option. 0: "YYYY-MM-DD HH:MM:SS" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM:SS" (ISO8601), 2: "DD.MM.YYYY HH:MM:SS". Default 0 (ISO 8601) ',"[default: 0]"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"-f, --output-frequency [NONE|YEAR|MONTH|DAY]"),": Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values ","[default: NONE]"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--help"),": Show this message and exit.")),(0,n.kt)("h3",{id:"ecalc-show-yaml"},(0,n.kt)("inlineCode",{parentName:"h3"},"ecalc show yaml")),(0,n.kt)("p",null,"Show yaml model. This will show the yaml after processing !include."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Usage"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"$ ecalc show yaml [OPTIONS] MODEL_FILE\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"MODEL_FILE"),": YAML file specifying time series inputs, facility inputs and the relationship between energy consumers. ","[required]")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Options"),":"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--file PATH"),": Write the data to a file with the specified name."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"--help"),": Show this message and exit.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c5daebe9.74d79f5d.js b/assets/js/c5daebe9.74d79f5d.js new file mode 100644 index 0000000000..2adb9f2a9d --- /dev/null +++ b/assets/js/c5daebe9.74d79f5d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2013],{8392:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var n=r(7462),a=(r(7294),r(3905));r(5657);const o={},s="TURBINE_LOAD",i={unversionedId:"about/references/keywords/TURBINE_LOAD",id:"about/references/keywords/TURBINE_LOAD",title:"TURBINE_LOAD",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_LOAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_LOAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES"},next:{title:"TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],l={toc:d},E="wrapper";function u(e){let{components:t,...r}=e;return(0,a.kt)(E,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"turbine_load"},"TURBINE_LOAD"),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"TURBINE_LOAD")," is a required to be specified under the ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"},"TURBINE_MODEL")," keyword."),(0,a.kt)("p",null,"This ",(0,a.kt)("strong",{parentName:"p"},"must")," be specified in MW (Mega-Watts) and ",(0,a.kt)("strong",{parentName:"p"},"must")," have equal length to the corresponding ",(0,a.kt)("inlineCode",{parentName:"p"},"TURBINE_EFFICIENCY")," values."),(0,a.kt)("h2",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n TURBINE_LOADS: <list of power values in mega watt>\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c8caddd1.a7d8bbbe.js b/assets/js/c8caddd1.a7d8bbbe.js new file mode 100644 index 0000000000..4569d44ccb --- /dev/null +++ b/assets/js/c8caddd1.a7d8bbbe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6721],{46:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>r,toc:()=>u});var i=o(7462),n=(o(7294),o(3905));o(5657);const a={},l="Get started",r={unversionedId:"contribute/get-started",id:"contribute/get-started",title:"Get started",description:"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96",source:"@site/docs/contribute/01-get-started.md",sourceDirName:"contribute",slug:"/contribute/get-started",permalink:"/ecalc/docs/contribute/get-started",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/01-get-started.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",next:{title:"Documentation",permalink:"/ecalc/docs/category/documentation"}},s={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"How to contribute",id:"how-to-contribute",level:2},{value:"Initiate change",id:"initiate-change",level:3},{value:"Make a Pull Request",id:"make-a-pull-request",level:3},{value:"Get code review",id:"get-code-review",level:3},{value:"Guidelines",id:"guidelines",level:2},{value:"Pull Requests",id:"pull-requests",level:2},{value:"Git commit format",id:"git-commit-format",level:2},{value:"Readability",id:"readability",level:2},{value:"Code style",id:"code-style",level:3}],p={toc:u},c="wrapper";function d(e){let{components:t,...o}=e;return(0,n.kt)(c,(0,i.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"get-started"},"Get started"),(0,n.kt)("p",null,"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96"),(0,n.kt)("p",null,"This project accepts contributions via GitHub Pull Requests."),(0,n.kt)("p",null,"This document outlines the process to help get your contribution accepted."),(0,n.kt)("p",null,"There are many ways to contribute:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Suggest ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=&template=feature_request.md&title="},"features")),(0,n.kt)("li",{parentName:"ul"},"Suggest ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=bug&template=code-maintainer.md&title="},"changes")),(0,n.kt)("li",{parentName:"ul"},"Report ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=bug&template=bug_report.md&title="},"bugs"))),(0,n.kt)("p",null,"You can start by looking through the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/equinor/ecalc/issues"},"GitHub Issues")," filtered by labels."),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"We follow some contributor guidelines that you will find in our ",(0,n.kt)("a",{parentName:"p",href:"#guidelines"},"contributor guidelines"),"."),(0,n.kt)("p",{parentName:"admonition"},"Don't worry if your contribution does not follow all the guidelines. We will guide you in the ",(0,n.kt)("a",{parentName:"p",href:"#3-get-code-review"},"code review process"),".\nThe threshold for contributing is low, and we appreciate any contribution great or small. \ud83d\ude4f")),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"See ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/contribute/documentation-guide/documentation"},"Documentation guide")," for how to get started with contributions to this\ndocumentation.")),(0,n.kt)("h2",{id:"how-to-contribute"},"How to contribute"),(0,n.kt)("p",null,"Contribution is done in 3 simple steps:"),(0,n.kt)("h3",{id:"initiate-change"},"Initiate change"),(0,n.kt)("p",null,"For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient\nto explain the change without referring to an issue."),(0,n.kt)("h3",{id:"make-a-pull-request"},"Make a Pull Request"),(0,n.kt)("p",null,"To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Equinor internal contributors, you may open a ",(0,n.kt)("a",{parentName:"li",href:"guides/git#pull-requests---internal-contributors"},"Pull Request directly"),","),(0,n.kt)("li",{parentName:"ol"},"Independent contributors, you will ",(0,n.kt)("a",{parentName:"li",href:"guides/git#fork-the-repository---independent-contributors"},"Fork the repository"),".")),(0,n.kt)("h3",{id:"get-code-review"},"Get code review"),(0,n.kt)("p",null,"Once a Pull Request has been made, we will give you feedback and maybe suggest changes."),(0,n.kt)("p",null,"The core team looks at pull requests on a regular basis, we review the code and guide you if needed.\nHere you will find more information about the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews"},"GitHub Code Review Process")),(0,n.kt)("h2",{id:"guidelines"},"Guidelines"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"For major changes, please open an issue first to discuss what you would like to change"),(0,n.kt)("li",{parentName:"ul"},"Work on your own fork of the main repo"),(0,n.kt)("li",{parentName:"ul"},"Use a separate branch for each issue you\u2019re working on"),(0,n.kt)("li",{parentName:"ul"},"Use conventional commit. See our ",(0,n.kt)("a",{parentName:"li",href:"#git-commit-format"},"Git commit format")," for details,\nand our ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/contribute/guides/git"},"Git guide")," for our full guide"),(0,n.kt)("li",{parentName:"ul"},"Please include ",(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Unit_testing"},"unit tests")," with all your code changes"),(0,n.kt)("li",{parentName:"ul"},"We follow ",(0,n.kt)("a",{parentName:"li",href:"https://trunkbaseddevelopment.com/"},"Trunk Based Development")," style of working with short-lived feature\nbranches.")),(0,n.kt)("h2",{id:"pull-requests"},"Pull Requests"),(0,n.kt)("p",null,"Please try to make your ",(0,n.kt)("a",{parentName:"p",href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests"},"Pull Requests")," easy to review for us."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon."),(0,n.kt)("li",{parentName:"ul"},"Don't make changes unrelated to the goals of your PR. ")),(0,n.kt)("p",null,"While you're writing up the pull request, you can add ",(0,n.kt)("inlineCode",{parentName:"p"},"closes #<issue number>")," in the message body where issue number\nis the issue you're fixing. Therefore, an example would be ",(0,n.kt)("inlineCode",{parentName:"p"},"closes #42")," would close issue #42."),(0,n.kt)("h2",{id:"git-commit-format"},"Git commit format"),(0,n.kt)("p",null,"Git commits are required to follow ",(0,n.kt)("a",{parentName:"p",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits"),". Please see\nour ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/contribute/guides/conventional-commits"},"Conventional Commit Guide")," for examples."),(0,n.kt)("h2",{id:"readability"},"Readability"),(0,n.kt)("p",null,"We use the ",(0,n.kt)("a",{parentName:"p",href:"https://pre-commit.com/"},"pre-commit hooks")," in order to ensure uniform formatting and to exclude potential code issues."),(0,n.kt)("p",null,"We strive for readable code. A few good tips are:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Self-documenting_code"},"Self-documenting code")," with self-explaining variable names"),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Composition_over_inheritance"},"Composition over inheritance")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Functional_programming"},"Functional code")," over Object-Oriented Code"),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://ruggedsoftware.org/"},"Rugged code")," to write more robust code"),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Domain-driven_design"},"Domain Driven Design")," to to match the code with the domain we are working on")),(0,n.kt)("h3",{id:"code-style"},"Code style"),(0,n.kt)("p",null,"Except for the pre-commits hooks mentioned above, we also strive to follow the following code style:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Use capital letters for constants i.e. SECONDS_PER_HOUR"),(0,n.kt)("li",{parentName:"ul"},"Try to split methods/modules/classes into smaller bits of code"),(0,n.kt)("li",{parentName:"ul"},"Remove, do not comment out, unused code"),(0,n.kt)("li",{parentName:"ul"},"Use types and type hinting"),(0,n.kt)("li",{parentName:"ul"},"We comment the code when it is not self-explanatory"),(0,n.kt)("li",{parentName:"ul"},"Be consistent with existing code style - try to make it look like the code is written by ",(0,n.kt)("strong",{parentName:"li"},"one")," developer"),(0,n.kt)("li",{parentName:"ul"},"For Python, we follow ",(0,n.kt)("a",{parentName:"li",href:"https://peps.python.org/pep-0008/"},"PEP 8 \u2013 Style Guide for Python Code")," and ",(0,n.kt)("a",{parentName:"li",href:"https://peps.python.org/pep-0020/"},"PEP 20 - The Zen of Python"),":")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.\nReadability counts.\nSpecial cases aren't special enough to break the rules.\nAlthough practicality beats purity.\nErrors should never pass silently.\nUnless explicitly silenced.\nIn the face of ambiguity, refuse the temptation to guess.\nThere should be one-- and preferably only one --obvious way to do it.\nAlthough that way may not be obvious at first unless you're Dutch.\nNow is better than never.\nAlthough never is often better than *right* now.\nIf the implementation is hard to explain, it's a bad idea.\nIf the implementation is easy to explain, it may be a good idea.\nNamespaces are one honking great idea -- let's do more of those!\n")),(0,n.kt)("p",null,"Please reach out to us if you have any questions. \ud83d\udc4b"),(0,n.kt)("p",null,"Thank you for your contribution! \ud83c\udf89"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c90bf1e8.ecbb565d.js b/assets/js/c90bf1e8.ecbb565d.js new file mode 100644 index 0000000000..d1b32920d2 --- /dev/null +++ b/assets/js/c90bf1e8.ecbb565d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8186],{4897:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var l=t(7462),n=(t(7294),t(3905));t(5657);const r={slug:"v7-3-release",title:"v7.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:6},o="eCalc v7.3",s={unversionedId:"changelog/v7-3",id:"changelog/v7-3",title:"v7.3",description:"Features",source:"@site/docs/changelog/v7-3.md",sourceDirName:"changelog",slug:"/changelog/v7-3-release",permalink:"/ecalc/docs/changelog/v7-3-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-3.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:6,frontMatter:{slug:"v7-3-release",title:"v7.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:6},sidebar:"changelog",previous:{title:"v7.2",permalink:"/ecalc/docs/changelog/v7-2-release"},next:{title:"v7.4",permalink:"/ecalc/docs/changelog/v7-4-release"}},i={},c=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}],d={toc:c},m="wrapper";function p(e){let{components:a,...t}=e;return(0,n.kt)(m,(0,l.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"ecalc-v73"},"eCalc v7.3"),(0,n.kt)("h2",{id:"features"},(0,n.kt)("em",{parentName:"h2"},"Features")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"BREAKING CHANGE!:\n",(0,n.kt)("inlineCode",{parentName:"p"},"Fixed speed pressure control")," options changed. One option is added, where the ASV is modelled as\nbeing common for the entire train, and the names of the options with individual ASVs have changed.\nThe available options for pressure control in a single speed compressor train are now:"),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"UPSTREAM_CHOKE"),(0,n.kt)("li",{parentName:"ul"},"DOWNSTREAM_CHOKE"),(0,n.kt)("li",{parentName:"ul"},"COMMON_ASV (NEW)"),(0,n.kt)("li",{parentName:"ul"},"INDIVIDUAL_ASV_RATE (changed from ASV_BALANCED_MARGIN)"),(0,n.kt)("li",{parentName:"ul"},"INDIVIDUAL_ASV_PRESSURE (changed from ASV_WITH_BALANCED_PRESSURE_RATIOS)")))),(0,n.kt)("h2",{id:"fixes"},(0,n.kt)("em",{parentName:"h2"},"Fixes")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Power rate reporting now works for consumer systems for supported compressor models for LTP reporting.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c93dcb87.ce524b6d.js b/assets/js/c93dcb87.ce524b6d.js new file mode 100644 index 0000000000..28f686c50b --- /dev/null +++ b/assets/js/c93dcb87.ce524b6d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4168],{9509:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>i,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=a(7462),n=(a(7294),a(3905));a(5657);const o={},l="CONSUMERS",s={unversionedId:"about/references/keywords/CONSUMERS",id:"about/references/keywords/CONSUMERS",title:"CONSUMERS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONSUMERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSUMERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT"},next:{title:"CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],E={toc:d},N="wrapper";function i(e){let{components:t,...a}=e;return(0,n.kt)(N,(0,r.Z)({},E,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"consumers"},"CONSUMERS"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMERS"},"CONSUMERS")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Yes"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"GENERATORSETS")),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"CATEGORY")," ",(0,n.kt)("br",null)," ",(0,n.kt)("inlineCode",{parentName:"td"},"NAME")," ",(0,n.kt)("br",null)," ",(0,n.kt)("inlineCode",{parentName:"td"},"ENERGY_USAGE_MODEL"))))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Consumers getting electrical power from the generator set. The attributes ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME"),",\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY")," and ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"\nare all required"),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"CONSUMERS:\n - NAME: <consumer name>\n CATEGORY: <category>\n ENERGY_USAGE_MODEL: <energy usage model>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"CONSUMERS:\n - NAME: SomeElectricalConsumer\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n - NAME: SomeOtherElectricalConsumer\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n ...\n - NAME: ElectricalConsumerN\n CATEGORY: MISCELLANEOUS\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n")))}i.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9b29382.541e041a.js b/assets/js/c9b29382.541e041a.js new file mode 100644 index 0000000000..ad292a2d7c --- /dev/null +++ b/assets/js/c9b29382.541e041a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8285],{8577:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>E,contentTitle:()=>S,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(7462),r=(n(7294),n(3905));n(5657);const o={},S="COMPRESSORS",s={unversionedId:"about/references/keywords/COMPRESSOR_SYSTEM",id:"about/references/keywords/COMPRESSOR_SYSTEM",title:"COMPRESSORS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_SYSTEM",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL"},next:{title:"COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"}},E={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1",id:"example-1",level:2},{value:"Example 2 (Detailed)",id:"example-2-detailed",level:2}],c={toc:l},O="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(O,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"compressors"},"COMPRESSORS"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"},"COMPRESSOR_SYSTEM")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Required"),(0,r.kt)("th",{parentName:"tr",align:null},"Child of"),(0,r.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"ENERGY_USAGE_MODEL")),(0,r.kt)("td",{parentName:"tr",align:null},"None")))),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"Used to define a list of compressors in a compressor system model ("),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," of type ",(0,r.kt)("inlineCode",{parentName:"p"},"COMPRESSOR_SYSTEM"),").\nEach compressor is defined with a name and a reference to a compressor energy function defined in either\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")," or ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model in facility inputs>\n TOTAL_SYSTEM_RATE: <optional total system rate [Sm3/day]>\n OPERATIONAL_SETTINGS: <operational settings>\n")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},"OPERATIONAL_SETTINGS")," for details."),(0,r.kt)("h2",{id:"example-1"},"Example 1"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n")),(0,r.kt)("h2",{id:"example-2-detailed"},"Example 2 (Detailed)"),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"When adding a \u201cDATE\u201d the next line is indented.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- NAME: gassys27\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n 2020-04-01:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: gassys27a\n COMPRESSOR_MODEL: gas3da\n - NAME: gassys27b\n COMPRESSOR_MODEL: gas3db\n TOTAL_SYSTEM_RATE: SIM8;GAS_PROD # [Sm3/day]\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURE: 155\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURE: 155\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cb266b33.ed377a67.js b/assets/js/cb266b33.ed377a67.js new file mode 100644 index 0000000000..c6c9db3ef8 --- /dev/null +++ b/assets/js/cb266b33.ed377a67.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2706],{6686:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var o=r(7462),n=(r(7294),r(3905));r(5657);const a={},s="LOAD",c={unversionedId:"about/references/keywords/LOAD",id:"about/references/keywords/LOAD",title:"LOAD",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/LOAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/LOAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},next:{title:"LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE"}},d={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],i={toc:l},p="wrapper";function u(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},i,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"load"},"LOAD"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/LOAD"},"LOAD")),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Used for direct load ",(0,n.kt)("inlineCode",{parentName:"p"},"energy usage models<ENERGY_USAGE_MODEL>")," to define electrical power load directly\nwith an ",(0,n.kt)("inlineCode",{parentName:"p"},"expression <Expressions>")),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: <load expression>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION: <condition expression>\n POWERLOSSFACTOR: <power loss factor (number)>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cbe196b2.0efb19dc.js b/assets/js/cbe196b2.0efb19dc.js new file mode 100644 index 0000000000..787856459c --- /dev/null +++ b/assets/js/cbe196b2.0efb19dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4734],{3785:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=r(7462),o=(r(7294),r(3905));r(5657);const s={},n="FILE",i={unversionedId:"about/references/keywords/FILE",id:"about/references/keywords/FILE",title:"FILE",description:"... /",source:"@site/docs/about/references/keywords/FILE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FILE",permalink:"/ecalc/docs/about/references/keywords/FILE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FILE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR"},next:{title:"FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],d={toc:l},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"file"},"FILE"),(0,o.kt)("p",null,"... /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FILE"},"FILE")),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"Specifies the path (relative or absolute) to the input file."),(0,o.kt)("p",null,"The path should be a reference to a ",(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Comma-separated_values"},"CSV")," file."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"FILE: </path/to/file.csv>\n")),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," ",(0,o.kt)("inlineCode",{parentName:"p"},"time_series_format"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cc88a418.bba1d58a.js b/assets/js/cc88a418.bba1d58a.js new file mode 100644 index 0000000000..ee9d36f1d7 --- /dev/null +++ b/assets/js/cc88a418.bba1d58a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2e3],{24:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>E,default:()=>R,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=r(7462),n=(r(7294),r(3905));r(5657);const o={},E="COMPRESSOR_TRAIN_MODEL",s={unversionedId:"about/references/keywords/COMPRESSOR_TRAIN_MODEL",id:"about/references/keywords/COMPRESSOR_TRAIN_MODEL",title:"COMPRESSOR_TRAIN_MODEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSORS",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"},next:{title:"CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],S={toc:l},_="wrapper";function R(e){let{components:t,...r}=e;return(0,n.kt)(_,(0,a.Z)({},S,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"compressor_train_model"},"COMPRESSOR_TRAIN_MODEL"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"},"COMPRESSOR_TRAIN_MODEL")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Yes"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"ENERGY_USAGE_MODEL")),(0,n.kt)("td",{parentName:"tr",align:null},"None")))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"Reference to an compressor train model defined in ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")," or\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," used for ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"\nTYPE ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL#variable_speed_compressor_train_multiple_streams_and_pressures-energy-usage-model"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"),"."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n COMPRESSOR_TRAIN_MODEL: <reference to compressor train model in facility inputs or models of compressor type>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: advanced_compressor_train\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS:\n -\n -\n\n...\n\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n COMPRESSOR_TRAIN_MODEL: advanced_compressor_train\n")))}R.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ccf7588a.011a0759.js b/assets/js/ccf7588a.011a0759.js new file mode 100644 index 0000000000..abb3a3d998 --- /dev/null +++ b/assets/js/ccf7588a.011a0759.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8967],{1882:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>i,contentTitle:()=>r,default:()=>k,frontMatter:()=>m,metadata:()=>p,toc:()=>l});var n=t(7462),s=(t(7294),t(3905));t(5657);const m={},r="FACTOR",p={unversionedId:"about/references/keywords/FACTOR",id:"about/references/keywords/FACTOR",title:"FACTOR",description:"[...] /",source:"@site/docs/about/references/keywords/FACTOR.mdx",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FACTOR.mdx",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},next:{title:"FILE",permalink:"/ecalc/docs/about/references/keywords/FILE"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Use in ADJUSTMENT",id:"use-in-adjustment",level:3},{value:"Use in EMISSIONS",id:"use-in-emissions",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Use in ADJUSTMENT",id:"use-in-adjustment-1",level:3},{value:"Use in EMISSIONS",id:"use-in-emissions-1",level:3}],N={toc:l},o="wrapper";function k(a){let{components:e,...t}=a;return(0,s.kt)(o,(0,n.Z)({},N,t,{components:e,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"factor"},"FACTOR"),(0,s.kt)("p",null,"[...]"," /\n",(0,s.kt)("a",{parentName:"p",href:"FACTOR"},"FACTOR")),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,"The keyword ",(0,s.kt)("a",{parentName:"p",href:"FACTOR"},"FACTOR")," can be used to add a multiplier. The\n",(0,s.kt)("a",{parentName:"p",href:"FACTOR"},"FACTOR")," keyword can be used in various places in the eCalc configuration file.\nA factor can either be a number, or an ",(0,s.kt)("inlineCode",{parentName:"p"},"expression <Expressions>"),"."),(0,s.kt)("admonition",{title:"Warning",type:"warning"},(0,s.kt)("p",{parentName:"admonition"},"The ",(0,s.kt)("a",{parentName:"p",href:"FACTOR"},"FACTOR")," keyword will have slightly different behavior depending on in which keyword\nit is used. Carefully read the documentation below!")),(0,s.kt)("h3",{id:"use-in-adjustment"},"Use in ",(0,s.kt)("a",{parentName:"h3",href:"ADJUSTMENT"},"ADJUSTMENT")),(0,s.kt)("p",null,"Adjustment of input data with a factor."),(0,s.kt)("h3",{id:"use-in-emissions"},"Use in ",(0,s.kt)("a",{parentName:"h3",href:"/ecalc/docs/about/references/keywords/EMISSIONS"},"EMISSIONS")),(0,s.kt)("p",null,"A single value with unit kg/Sm",(0,s.kt)("sup",null,"3")," defines the CO",(0,s.kt)("sub",null,"2")," factor for the fuel gas used on the\ninstallation. That is, how many kilograms of CO",(0,s.kt)("sub",null,"2")," are emitted"),(0,s.kt)("h2",{id:"format"},"Format"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"FACTOR: <VALUE>\n")),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("h3",{id:"use-in-adjustment-1"},"Use in ",(0,s.kt)("a",{parentName:"h3",href:"ADJUSTMENT"},"ADJUSTMENT")),(0,s.kt)("p",null,"Say you have input that that is of by 3% percentage.\nYou could fix this like:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n FACTOR: 1.03\n")),(0,s.kt)("p",null,"The resulting energy consumption ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"E"),(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"j"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"u"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"s"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"t"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"e"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d")))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{adjusted}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"adjusted"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,s.kt)("span",{parentName:"span"})))))))))),", i.e. fuel or power, will then be"),(0,s.kt)("div",{className:"math math-display"},(0,s.kt)("span",{parentName:"div",className:"katex-display"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"E"),(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"j"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"u"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"s"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"t"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"e"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"))),(0,s.kt)("mo",{parentName:"mrow"},"="),(0,s.kt)("mn",{parentName:"mrow"},"1.03"),(0,s.kt)("mo",{parentName:"mrow"},"\xd7"),(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"E"),(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"o"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"r"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"g"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"n"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"l")))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{adjusted} = 1.03 \\times E_\\mathrm{original}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"adjusted"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,s.kt)("span",{parentName:"span"})))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"="),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"1.03"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\xd7"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"original"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,s.kt)("span",{parentName:"span"}))))))))))),(0,s.kt)("p",null,"where ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("msub",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msub"},"E"),(0,s.kt)("mrow",{parentName:"msub"},(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"o"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"r"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"g"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"n"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,s.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"l")))),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{original}")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"original"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,s.kt)("span",{parentName:"span"}))))))))))," is the energy consumption before the adjustment."),(0,s.kt)("h3",{id:"use-in-emissions-1"},"Use in ",(0,s.kt)("a",{parentName:"h3",href:"/ecalc/docs/about/references/keywords/EMISSIONS"},"EMISSIONS")),(0,s.kt)("p",null,"Say your fuel emits 2.5 kg CO",(0,s.kt)("sub",null,"2")," per Sm",(0,s.kt)("sup",null,"3")," of burned fuel, you can model this like:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL_TYPES:\n - NAME: my_fuel\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cda37ba5.192ff86a.js b/assets/js/cda37ba5.192ff86a.js new file mode 100644 index 0000000000..29753fbd91 --- /dev/null +++ b/assets/js/cda37ba5.192ff86a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4189],{1418:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>n,default:()=>u,frontMatter:()=>c,metadata:()=>r,toc:()=>i});var l=t(7462),s=(t(7294),t(3905));t(5657);const c={slug:"v7-6-release",title:"v7.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:9},n="eCalc v7.6",r={unversionedId:"changelog/v7-6",id:"changelog/v7-6",title:"v7.6",description:"Breaking changes",source:"@site/docs/changelog/v7-6.md",sourceDirName:"changelog",slug:"/changelog/v7-6-release",permalink:"/ecalc/docs/changelog/v7-6-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-6.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:9,frontMatter:{slug:"v7-6-release",title:"v7.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:9},sidebar:"changelog",previous:{title:"v7.5",permalink:"/ecalc/docs/changelog/v7-5-release"},next:{title:"v8.0",permalink:"/ecalc/docs/changelog/v8.0-release"}},o={},i=[{value:"Breaking changes",id:"breaking-changes",level:2}],g={toc:i},d="wrapper";function u(e){let{components:a,...t}=e;return(0,s.kt)(d,(0,l.Z)({},g,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"ecalc-v76"},"eCalc v7.6"),(0,s.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"UNITS are now required for PUMP_CHART and COMPRESSOR_CHART, see ",(0,s.kt)("a",{parentName:"li",href:"../about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},"pump charts"),"\nand ",(0,s.kt)("a",{parentName:"li",href:"../about/modelling/setup/models/compressor_modelling/compressor_charts/"},"compressor charts"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/common.ccbc84e3.js b/assets/js/common.ccbc84e3.js new file mode 100644 index 0000000000..55bfb0d437 --- /dev/null +++ b/assets/js/common.ccbc84e3.js @@ -0,0 +1,2 @@ +/*! For license information please see common.ccbc84e3.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8592],{7967:(t,e)=>{"use strict";e.N=void 0;var i=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,n=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];e.N=function(t){var e,l=(e=t||"",e.replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(n,"").replace(o,"").trim();if(!l)return"about:blank";if(function(t){return s.indexOf(t[0])>-1}(l))return l;var c=l.match(a);if(!c)return l;var h=c[0];return i.test(h)?"about:blank":l}},3905:(t,e,i)=>{"use strict";i.d(e,{Zo:()=>h,kt:()=>p});var r=i(7294);function n(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function o(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,r)}return i}function a(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?o(Object(i),!0).forEach((function(e){n(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):o(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function s(t,e){if(null==t)return{};var i,r,n=function(t,e){if(null==t)return{};var i,r,n={},o=Object.keys(t);for(r=0;r<o.length;r++)i=o[r],e.indexOf(i)>=0||(n[i]=t[i]);return n}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r<o.length;r++)i=o[r],e.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(t,i)&&(n[i]=t[i])}return n}var l=r.createContext({}),c=function(t){var e=r.useContext(l),i=e;return t&&(i="function"==typeof t?t(e):a(a({},e),t)),i},h=function(t){var e=c(t.components);return r.createElement(l.Provider,{value:e},t.children)},u="mdxType",f={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},d=r.forwardRef((function(t,e){var i=t.components,n=t.mdxType,o=t.originalType,l=t.parentName,h=s(t,["components","mdxType","originalType","parentName"]),u=c(i),d=n,p=u["".concat(l,".").concat(d)]||u[d]||f[d]||o;return i?r.createElement(p,a(a({ref:e},h),{},{components:i})):r.createElement(p,a({ref:e},h))}));function p(t,e){var i=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var o=i.length,a=new Array(o);a[0]=d;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=t,s[u]="string"==typeof t?t:n,a[1]=s;for(var c=2;c<o;c++)a[c]=i[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,i)}d.displayName="MDXCreateElement"},7484:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,i=36e5,r="millisecond",n="second",o="minute",a="hour",s="day",l="week",c="month",h="quarter",u="year",f="date",d="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},y=function(t,e,i){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(i)+t},_={s:y,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),r=Math.floor(i/60),n=i%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(n,2,"0")},m:function t(e,i){if(e.date()<i.date())return-t(i,e);var r=12*(i.year()-e.year())+(i.month()-e.month()),n=e.clone().add(r,c),o=i-n<0,a=e.clone().add(r+(o?-1:1),c);return+(-(r+(i-n)/(o?n-a:a-n))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:u,w:l,d:s,D:f,h:a,m:o,s:n,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},b="en",C={};C[b]=m;var x=function(t){return t instanceof T},v=function t(e,i,r){var n;if(!e)return b;if("string"==typeof e){var o=e.toLowerCase();C[o]&&(n=o),i&&(C[o]=i,n=o);var a=e.split("-");if(!n&&a.length>1)return t(a[0])}else{var s=e.name;C[s]=e,n=s}return!r&&n&&(b=n),n||!r&&b},k=function(t,e){if(x(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new T(i)},w=_;w.l=v,w.i=x,w.w=function(t,e){return k(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var T=function(){function m(t){this.$L=v(t.locale,null,!0),this.parse(t)}var y=m.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(w.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(p);if(r){var n=r[2]-1||0,o=(r[7]||"0").substring(0,3);return i?new Date(Date.UTC(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return w},y.isValid=function(){return!(this.$d.toString()===d)},y.isSame=function(t,e){var i=k(t);return this.startOf(e)<=i&&i<=this.endOf(e)},y.isAfter=function(t,e){return k(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<k(t)},y.$g=function(t,e,i){return w.u(t)?this[e]:this.set(i,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var i=this,r=!!w.u(e)||e,h=w.p(t),d=function(t,e){var n=w.w(i.$u?Date.UTC(i.$y,e,t):new Date(i.$y,e,t),i);return r?n:n.endOf(s)},p=function(t,e){return w.w(i.toDate()[t].apply(i.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),i)},g=this.$W,m=this.$M,y=this.$D,_="set"+(this.$u?"UTC":"");switch(h){case u:return r?d(1,0):d(31,11);case c:return r?d(1,m):d(0,m+1);case l:var b=this.$locale().weekStart||0,C=(g<b?g+7:g)-b;return d(r?y-C:y+(6-C),m);case s:case f:return p(_+"Hours",0);case a:return p(_+"Minutes",1);case o:return p(_+"Seconds",2);case n:return p(_+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var i,l=w.p(t),h="set"+(this.$u?"UTC":""),d=(i={},i[s]=h+"Date",i[f]=h+"Date",i[c]=h+"Month",i[u]=h+"FullYear",i[a]=h+"Hours",i[o]=h+"Minutes",i[n]=h+"Seconds",i[r]=h+"Milliseconds",i)[l],p=l===s?this.$D+(e-this.$W):e;if(l===c||l===u){var g=this.clone().set(f,1);g.$d[d](p),g.init(),this.$d=g.set(f,Math.min(this.$D,g.daysInMonth())).$d}else d&&this.$d[d](p);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[w.p(t)]()},y.add=function(r,h){var f,d=this;r=Number(r);var p=w.p(h),g=function(t){var e=k(d);return w.w(e.date(e.date()+Math.round(t*r)),d)};if(p===c)return this.set(c,this.$M+r);if(p===u)return this.set(u,this.$y+r);if(p===s)return g(1);if(p===l)return g(7);var m=(f={},f[o]=e,f[a]=i,f[n]=t,f)[p]||1,y=this.$d.getTime()+r*m;return w.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,i=this.$locale();if(!this.isValid())return i.invalidDate||d;var r=t||"YYYY-MM-DDTHH:mm:ssZ",n=w.z(this),o=this.$H,a=this.$m,s=this.$M,l=i.weekdays,c=i.months,h=function(t,i,n,o){return t&&(t[i]||t(e,r))||n[i].slice(0,o)},u=function(t){return w.s(o%12||12,t,"0")},f=i.meridiem||function(t,e,i){var r=t<12?"AM":"PM";return i?r.toLowerCase():r},p={YY:String(this.$y).slice(-2),YYYY:this.$y,M:s+1,MM:w.s(s+1,2,"0"),MMM:h(i.monthsShort,s,c,3),MMMM:h(c,s),D:this.$D,DD:w.s(this.$D,2,"0"),d:String(this.$W),dd:h(i.weekdaysMin,this.$W,l,2),ddd:h(i.weekdaysShort,this.$W,l,3),dddd:l[this.$W],H:String(o),HH:w.s(o,2,"0"),h:u(1),hh:u(2),a:f(o,a,!0),A:f(o,a,!1),m:String(a),mm:w.s(a,2,"0"),s:String(this.$s),ss:w.s(this.$s,2,"0"),SSS:w.s(this.$ms,3,"0"),Z:n};return r.replace(g,(function(t,e){return e||p[t]||n.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,f,d){var p,g=w.p(f),m=k(r),y=(m.utcOffset()-this.utcOffset())*e,_=this-m,b=w.m(this,m);return b=(p={},p[u]=b/12,p[c]=b,p[h]=b/3,p[l]=(_-y)/6048e5,p[s]=(_-y)/864e5,p[a]=_/i,p[o]=_/e,p[n]=_/t,p)[g]||_,d?b:w.a(b)},y.daysInMonth=function(){return this.endOf(c).$D},y.$locale=function(){return C[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var i=this.clone(),r=v(t,e,!0);return r&&(i.$L=r),i},y.clone=function(){return w.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},m}(),S=T.prototype;return k.prototype=S,[["$ms",r],["$s",n],["$m",o],["$H",a],["$W",s],["$M",c],["$y",u],["$D",f]].forEach((function(t){S[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),k.extend=function(t,e){return t.$i||(t(e,T,k),t.$i=!0),k},k.locale=v,k.isDayjs=x,k.unix=function(t){return k(1e3*t)},k.en=C[b],k.Ls=C,k.p={},k}()},7856:function(t){t.exports=function(){"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,i){return e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(t,i)}function i(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function r(t,n,o){return r=i()?Reflect.construct:function(t,i,r){var n=[null];n.push.apply(n,i);var o=new(Function.bind.apply(t,n));return r&&e(o,r.prototype),o},r.apply(null,arguments)}function n(t){return o(t)||a(t)||s(t)||c()}function o(t){if(Array.isArray(t))return l(t)}function a(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function s(t,e){if(t){if("string"==typeof t)return l(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=new Array(e);i<e;i++)r[i]=t[i];return r}function c(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var h=Object.hasOwnProperty,u=Object.setPrototypeOf,f=Object.isFrozen,d=Object.getPrototypeOf,p=Object.getOwnPropertyDescriptor,g=Object.freeze,m=Object.seal,y=Object.create,_="undefined"!=typeof Reflect&&Reflect,b=_.apply,C=_.construct;b||(b=function(t,e,i){return t.apply(e,i)}),g||(g=function(t){return t}),m||(m=function(t){return t}),C||(C=function(t,e){return r(t,n(e))});var x=E(Array.prototype.forEach),v=E(Array.prototype.pop),k=E(Array.prototype.push),w=E(String.prototype.toLowerCase),T=E(String.prototype.toString),S=E(String.prototype.match),B=E(String.prototype.replace),M=E(String.prototype.indexOf),F=E(String.prototype.trim),L=E(RegExp.prototype.test),A=O(TypeError);function E(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return b(t,e,r)}}function O(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return C(t,i)}}function N(t,e,i){i=i||w,u&&u(t,null);for(var r=e.length;r--;){var n=e[r];if("string"==typeof n){var o=i(n);o!==n&&(f(e)||(e[r]=o),n=o)}t[n]=!0}return t}function D(t){var e,i=y(null);for(e in t)!0===b(h,t,[e])&&(i[e]=t[e]);return i}function I(t,e){for(;null!==t;){var i=p(t,e);if(i){if(i.get)return E(i.get);if("function"==typeof i.value)return E(i.value)}t=d(t)}function r(t){return console.warn("fallback value for",t),null}return r}var $=g(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),z=g(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Z=g(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),j=g(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),R=g(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),q=g(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=g(["#text"]),W=g(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),U=g(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),H=g(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Y=g(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),V=m(/\{\{[\w\W]*|[\w\W]*\}\}/gm),G=m(/<%[\w\W]*|[\w\W]*%>/gm),X=m(/\${[\w\W]*}/gm),J=m(/^data-[\-\w.\u00B7-\uFFFF]/),Q=m(/^aria-[\-\w]+$/),K=m(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),tt=m(/^(?:\w+script|data):/i),et=m(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),it=m(/^html$/i),rt=function(){return"undefined"==typeof window?null:window},nt=function(e,i){if("object"!==t(e)||"function"!=typeof e.createPolicy)return null;var r=null,n="data-tt-policy-suffix";i.currentScript&&i.currentScript.hasAttribute(n)&&(r=i.currentScript.getAttribute(n));var o="dompurify"+(r?"#"+r:"");try{return e.createPolicy(o,{createHTML:function(t){return t},createScriptURL:function(t){return t}})}catch(a){return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function ot(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:rt(),i=function(t){return ot(t)};if(i.version="2.4.5",i.removed=[],!e||!e.document||9!==e.document.nodeType)return i.isSupported=!1,i;var r=e.document,o=e.document,a=e.DocumentFragment,s=e.HTMLTemplateElement,l=e.Node,c=e.Element,h=e.NodeFilter,u=e.NamedNodeMap,f=void 0===u?e.NamedNodeMap||e.MozNamedAttrMap:u,d=e.HTMLFormElement,p=e.DOMParser,m=e.trustedTypes,y=c.prototype,_=I(y,"cloneNode"),b=I(y,"nextSibling"),C=I(y,"childNodes"),E=I(y,"parentNode");if("function"==typeof s){var O=o.createElement("template");O.content&&O.content.ownerDocument&&(o=O.content.ownerDocument)}var at=nt(m,r),st=at?at.createHTML(""):"",lt=o,ct=lt.implementation,ht=lt.createNodeIterator,ut=lt.createDocumentFragment,ft=lt.getElementsByTagName,dt=r.importNode,pt={};try{pt=D(o).documentMode?o.documentMode:{}}catch(Oe){}var gt={};i.isSupported="function"==typeof E&&ct&&void 0!==ct.createHTMLDocument&&9!==pt;var mt,yt,_t=V,bt=G,Ct=X,xt=J,vt=Q,kt=tt,wt=et,Tt=K,St=null,Bt=N({},[].concat(n($),n(z),n(Z),n(R),n(P))),Mt=null,Ft=N({},[].concat(n(W),n(U),n(H),n(Y))),Lt=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),At=null,Et=null,Ot=!0,Nt=!0,Dt=!1,It=!0,$t=!1,zt=!1,Zt=!1,jt=!1,Rt=!1,qt=!1,Pt=!1,Wt=!0,Ut=!1,Ht="user-content-",Yt=!0,Vt=!1,Gt={},Xt=null,Jt=N({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Qt=null,Kt=N({},["audio","video","img","source","image","track"]),te=null,ee=N({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ie="http://www.w3.org/1998/Math/MathML",re="http://www.w3.org/2000/svg",ne="http://www.w3.org/1999/xhtml",oe=ne,ae=!1,se=null,le=N({},[ie,re,ne],T),ce=["application/xhtml+xml","text/html"],he="text/html",ue=null,fe=o.createElement("form"),de=function(t){return t instanceof RegExp||t instanceof Function},pe=function(e){ue&&ue===e||(e&&"object"===t(e)||(e={}),e=D(e),mt=mt=-1===ce.indexOf(e.PARSER_MEDIA_TYPE)?he:e.PARSER_MEDIA_TYPE,yt="application/xhtml+xml"===mt?T:w,St="ALLOWED_TAGS"in e?N({},e.ALLOWED_TAGS,yt):Bt,Mt="ALLOWED_ATTR"in e?N({},e.ALLOWED_ATTR,yt):Ft,se="ALLOWED_NAMESPACES"in e?N({},e.ALLOWED_NAMESPACES,T):le,te="ADD_URI_SAFE_ATTR"in e?N(D(ee),e.ADD_URI_SAFE_ATTR,yt):ee,Qt="ADD_DATA_URI_TAGS"in e?N(D(Kt),e.ADD_DATA_URI_TAGS,yt):Kt,Xt="FORBID_CONTENTS"in e?N({},e.FORBID_CONTENTS,yt):Jt,At="FORBID_TAGS"in e?N({},e.FORBID_TAGS,yt):{},Et="FORBID_ATTR"in e?N({},e.FORBID_ATTR,yt):{},Gt="USE_PROFILES"in e&&e.USE_PROFILES,Ot=!1!==e.ALLOW_ARIA_ATTR,Nt=!1!==e.ALLOW_DATA_ATTR,Dt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,It=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,$t=e.SAFE_FOR_TEMPLATES||!1,zt=e.WHOLE_DOCUMENT||!1,Rt=e.RETURN_DOM||!1,qt=e.RETURN_DOM_FRAGMENT||!1,Pt=e.RETURN_TRUSTED_TYPE||!1,jt=e.FORCE_BODY||!1,Wt=!1!==e.SANITIZE_DOM,Ut=e.SANITIZE_NAMED_PROPS||!1,Yt=!1!==e.KEEP_CONTENT,Vt=e.IN_PLACE||!1,Tt=e.ALLOWED_URI_REGEXP||Tt,oe=e.NAMESPACE||ne,Lt=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&de(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Lt.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&de(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Lt.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Lt.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),$t&&(Nt=!1),qt&&(Rt=!0),Gt&&(St=N({},n(P)),Mt=[],!0===Gt.html&&(N(St,$),N(Mt,W)),!0===Gt.svg&&(N(St,z),N(Mt,U),N(Mt,Y)),!0===Gt.svgFilters&&(N(St,Z),N(Mt,U),N(Mt,Y)),!0===Gt.mathMl&&(N(St,R),N(Mt,H),N(Mt,Y))),e.ADD_TAGS&&(St===Bt&&(St=D(St)),N(St,e.ADD_TAGS,yt)),e.ADD_ATTR&&(Mt===Ft&&(Mt=D(Mt)),N(Mt,e.ADD_ATTR,yt)),e.ADD_URI_SAFE_ATTR&&N(te,e.ADD_URI_SAFE_ATTR,yt),e.FORBID_CONTENTS&&(Xt===Jt&&(Xt=D(Xt)),N(Xt,e.FORBID_CONTENTS,yt)),Yt&&(St["#text"]=!0),zt&&N(St,["html","head","body"]),St.table&&(N(St,["tbody"]),delete At.tbody),g&&g(e),ue=e)},ge=N({},["mi","mo","mn","ms","mtext"]),me=N({},["foreignobject","desc","title","annotation-xml"]),ye=N({},["title","style","font","a","script"]),_e=N({},z);N(_e,Z),N(_e,j);var be=N({},R);N(be,q);var Ce=function(t){var e=E(t);e&&e.tagName||(e={namespaceURI:oe,tagName:"template"});var i=w(t.tagName),r=w(e.tagName);return!!se[t.namespaceURI]&&(t.namespaceURI===re?e.namespaceURI===ne?"svg"===i:e.namespaceURI===ie?"svg"===i&&("annotation-xml"===r||ge[r]):Boolean(_e[i]):t.namespaceURI===ie?e.namespaceURI===ne?"math"===i:e.namespaceURI===re?"math"===i&&me[r]:Boolean(be[i]):t.namespaceURI===ne?!(e.namespaceURI===re&&!me[r])&&!(e.namespaceURI===ie&&!ge[r])&&!be[i]&&(ye[i]||!_e[i]):!("application/xhtml+xml"!==mt||!se[t.namespaceURI]))},xe=function(t){k(i.removed,{element:t});try{t.parentNode.removeChild(t)}catch(Oe){try{t.outerHTML=st}catch(Oe){t.remove()}}},ve=function(t,e){try{k(i.removed,{attribute:e.getAttributeNode(t),from:e})}catch(Oe){k(i.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!Mt[t])if(Rt||qt)try{xe(e)}catch(Oe){}else try{e.setAttribute(t,"")}catch(Oe){}},ke=function(t){var e,i;if(jt)t="<remove></remove>"+t;else{var r=S(t,/^[\r\n\t ]+/);i=r&&r[0]}"application/xhtml+xml"===mt&&oe===ne&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");var n=at?at.createHTML(t):t;if(oe===ne)try{e=(new p).parseFromString(n,mt)}catch(Oe){}if(!e||!e.documentElement){e=ct.createDocument(oe,"template",null);try{e.documentElement.innerHTML=ae?st:n}catch(Oe){}}var a=e.body||e.documentElement;return t&&i&&a.insertBefore(o.createTextNode(i),a.childNodes[0]||null),oe===ne?ft.call(e,zt?"html":"body")[0]:zt?e.documentElement:a},we=function(t){return ht.call(t.ownerDocument||t,t,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT,null,!1)},Te=function(t){return t instanceof d&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof f)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},Se=function(e){return"object"===t(l)?e instanceof l:e&&"object"===t(e)&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},Be=function(t,e,r){gt[t]&&x(gt[t],(function(t){t.call(i,e,r,ue)}))},Me=function(t){var e;if(Be("beforeSanitizeElements",t,null),Te(t))return xe(t),!0;if(L(/[\u0080-\uFFFF]/,t.nodeName))return xe(t),!0;var r=yt(t.nodeName);if(Be("uponSanitizeElement",t,{tagName:r,allowedTags:St}),t.hasChildNodes()&&!Se(t.firstElementChild)&&(!Se(t.content)||!Se(t.content.firstElementChild))&&L(/<[/\w]/g,t.innerHTML)&&L(/<[/\w]/g,t.textContent))return xe(t),!0;if("select"===r&&L(/<template/i,t.innerHTML))return xe(t),!0;if(!St[r]||At[r]){if(!At[r]&&Le(r)){if(Lt.tagNameCheck instanceof RegExp&&L(Lt.tagNameCheck,r))return!1;if(Lt.tagNameCheck instanceof Function&&Lt.tagNameCheck(r))return!1}if(Yt&&!Xt[r]){var n=E(t)||t.parentNode,o=C(t)||t.childNodes;if(o&&n)for(var a=o.length-1;a>=0;--a)n.insertBefore(_(o[a],!0),b(t))}return xe(t),!0}return t instanceof c&&!Ce(t)?(xe(t),!0):"noscript"!==r&&"noembed"!==r||!L(/<\/no(script|embed)/i,t.innerHTML)?($t&&3===t.nodeType&&(e=t.textContent,e=B(e,_t," "),e=B(e,bt," "),e=B(e,Ct," "),t.textContent!==e&&(k(i.removed,{element:t.cloneNode()}),t.textContent=e)),Be("afterSanitizeElements",t,null),!1):(xe(t),!0)},Fe=function(t,e,i){if(Wt&&("id"===e||"name"===e)&&(i in o||i in fe))return!1;if(Nt&&!Et[e]&&L(xt,e));else if(Ot&&L(vt,e));else if(!Mt[e]||Et[e]){if(!(Le(t)&&(Lt.tagNameCheck instanceof RegExp&&L(Lt.tagNameCheck,t)||Lt.tagNameCheck instanceof Function&&Lt.tagNameCheck(t))&&(Lt.attributeNameCheck instanceof RegExp&&L(Lt.attributeNameCheck,e)||Lt.attributeNameCheck instanceof Function&&Lt.attributeNameCheck(e))||"is"===e&&Lt.allowCustomizedBuiltInElements&&(Lt.tagNameCheck instanceof RegExp&&L(Lt.tagNameCheck,i)||Lt.tagNameCheck instanceof Function&&Lt.tagNameCheck(i))))return!1}else if(te[e]);else if(L(Tt,B(i,wt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==M(i,"data:")||!Qt[t])if(Dt&&!L(kt,B(i,wt,"")));else if(i)return!1;return!0},Le=function(t){return t.indexOf("-")>0},Ae=function(e){var r,n,o,a;Be("beforeSanitizeAttributes",e,null);var s=e.attributes;if(s){var l={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Mt};for(a=s.length;a--;){var c=r=s[a],h=c.name,u=c.namespaceURI;if(n="value"===h?r.value:F(r.value),o=yt(h),l.attrName=o,l.attrValue=n,l.keepAttr=!0,l.forceKeepAttr=void 0,Be("uponSanitizeAttribute",e,l),n=l.attrValue,!l.forceKeepAttr&&(ve(h,e),l.keepAttr))if(It||!L(/\/>/i,n)){$t&&(n=B(n,_t," "),n=B(n,bt," "),n=B(n,Ct," "));var f=yt(e.nodeName);if(Fe(f,o,n)){if(!Ut||"id"!==o&&"name"!==o||(ve(h,e),n=Ht+n),at&&"object"===t(m)&&"function"==typeof m.getAttributeType)if(u);else switch(m.getAttributeType(f,o)){case"TrustedHTML":n=at.createHTML(n);break;case"TrustedScriptURL":n=at.createScriptURL(n)}try{u?e.setAttributeNS(u,h,n):e.setAttribute(h,n),v(i.removed)}catch(Oe){}}}else ve(h,e)}Be("afterSanitizeAttributes",e,null)}},Ee=function t(e){var i,r=we(e);for(Be("beforeSanitizeShadowDOM",e,null);i=r.nextNode();)Be("uponSanitizeShadowNode",i,null),Me(i)||(i.content instanceof a&&t(i.content),Ae(i));Be("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(n){var o,s,c,h,u,f=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((ae=!n)&&(n="\x3c!--\x3e"),"string"!=typeof n&&!Se(n)){if("function"!=typeof n.toString)throw A("toString is not a function");if("string"!=typeof(n=n.toString()))throw A("dirty is not a string, aborting")}if(!i.isSupported){if("object"===t(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof n)return e.toStaticHTML(n);if(Se(n))return e.toStaticHTML(n.outerHTML)}return n}if(Zt||pe(f),i.removed=[],"string"==typeof n&&(Vt=!1),Vt){if(n.nodeName){var d=yt(n.nodeName);if(!St[d]||At[d])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(n instanceof l)1===(s=(o=ke("\x3c!----\x3e")).ownerDocument.importNode(n,!0)).nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?o=s:o.appendChild(s);else{if(!Rt&&!$t&&!zt&&-1===n.indexOf("<"))return at&&Pt?at.createHTML(n):n;if(!(o=ke(n)))return Rt?null:Pt?st:""}o&&jt&&xe(o.firstChild);for(var p=we(Vt?n:o);c=p.nextNode();)3===c.nodeType&&c===h||Me(c)||(c.content instanceof a&&Ee(c.content),Ae(c),h=c);if(h=null,Vt)return n;if(Rt){if(qt)for(u=ut.call(o.ownerDocument);o.firstChild;)u.appendChild(o.firstChild);else u=o;return(Mt.shadowroot||Mt.shadowrootmod)&&(u=dt.call(r,u,!0)),u}var g=zt?o.outerHTML:o.innerHTML;return zt&&St["!doctype"]&&o.ownerDocument&&o.ownerDocument.doctype&&o.ownerDocument.doctype.name&&L(it,o.ownerDocument.doctype.name)&&(g="<!DOCTYPE "+o.ownerDocument.doctype.name+">\n"+g),$t&&(g=B(g,_t," "),g=B(g,bt," "),g=B(g,Ct," ")),at&&Pt?at.createHTML(g):g},i.setConfig=function(t){pe(t),Zt=!0},i.clearConfig=function(){ue=null,Zt=!1},i.isValidAttribute=function(t,e,i){ue||pe({});var r=yt(t),n=yt(e);return Fe(r,n,i)},i.addHook=function(t,e){"function"==typeof e&&(gt[t]=gt[t]||[],k(gt[t],e))},i.removeHook=function(t){if(gt[t])return v(gt[t])},i.removeHooks=function(t){gt[t]&&(gt[t]=[])},i.removeAllHooks=function(){gt={}},i}return ot()}()},9373:(t,e,i)=>{"use strict";function r(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i<r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i<n||void 0===i&&n>=n)&&(i=n)}return i}function n(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i>r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i>n||void 0===i&&n>=n)&&(i=n)}return i}function o(t){return t}i.d(e,{Nb1:()=>ls,LLu:()=>_,F5q:()=>y,$0Z:()=>xs,Dts:()=>ks,WQY:()=>Ts,qpX:()=>Bs,u93:()=>Ms,tFB:()=>Ls,YY7:()=>Os,OvA:()=>Ds,dCK:()=>$s,zgE:()=>js,fGX:()=>qs,$m7:()=>Ws,c_6:()=>us,fxm:()=>Hs,FdL:()=>tl,ak_:()=>el,SxZ:()=>nl,eA_:()=>al,jsv:()=>ll,iJ:()=>sl,JHv:()=>pr,jvg:()=>ps,Fp7:()=>r,VV$:()=>n,ve8:()=>ys,BYU:()=>ln,PKp:()=>mn,Xf:()=>Oa,Ys:()=>Na,td_:()=>Da,YPS:()=>Yi,rr1:()=>On,i$Z:()=>uo,WQD:()=>An,Z_i:()=>Fn,F0B:()=>Qn,NGh:()=>$n});var a=1,s=2,l=3,c=4,h=1e-6;function u(t){return"translate("+t+",0)"}function f(t){return"translate(0,"+t+")"}function d(t){return e=>+t(e)}function p(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),i=>+t(i)+e}function g(){return!this.__axis}function m(t,e){var i=[],r=null,n=null,m=6,y=6,_=3,b="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,C=t===a||t===c?-1:1,x=t===c||t===s?"x":"y",v=t===a||t===l?u:f;function k(u){var f=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,k=null==n?e.tickFormat?e.tickFormat.apply(e,i):o:n,w=Math.max(m,0)+_,T=e.range(),S=+T[0]+b,B=+T[T.length-1]+b,M=(e.bandwidth?p:d)(e.copy(),b),F=u.selection?u.selection():u,L=F.selectAll(".domain").data([null]),A=F.selectAll(".tick").data(f,e).order(),E=A.exit(),O=A.enter().append("g").attr("class","tick"),N=A.select("line"),D=A.select("text");L=L.merge(L.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),A=A.merge(O),N=N.merge(O.append("line").attr("stroke","currentColor").attr(x+"2",C*m)),D=D.merge(O.append("text").attr("fill","currentColor").attr(x,C*w).attr("dy",t===a?"0em":t===l?"0.71em":"0.32em")),u!==F&&(L=L.transition(u),A=A.transition(u),N=N.transition(u),D=D.transition(u),E=E.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=M(t))?v(t+b):this.getAttribute("transform")})),O.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:M(t))+b)}))),E.remove(),L.attr("d",t===c||t===s?y?"M"+C*y+","+S+"H"+b+"V"+B+"H"+C*y:"M"+b+","+S+"V"+B:y?"M"+S+","+C*y+"V"+b+"H"+B+"V"+C*y:"M"+S+","+b+"H"+B),A.attr("opacity",1).attr("transform",(function(t){return v(M(t)+b)})),N.attr(x+"2",C*m),D.attr(x,C*w).text(k),F.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===s?"start":t===c?"end":"middle"),F.each((function(){this.__axis=M}))}return k.scale=function(t){return arguments.length?(e=t,k):e},k.ticks=function(){return i=Array.from(arguments),k},k.tickArguments=function(t){return arguments.length?(i=null==t?[]:Array.from(t),k):i.slice()},k.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),k):r&&r.slice()},k.tickFormat=function(t){return arguments.length?(n=t,k):n},k.tickSize=function(t){return arguments.length?(m=y=+t,k):m},k.tickSizeInner=function(t){return arguments.length?(m=+t,k):m},k.tickSizeOuter=function(t){return arguments.length?(y=+t,k):y},k.tickPadding=function(t){return arguments.length?(_=+t,k):_},k.offset=function(t){return arguments.length?(b=+t,k):b},k}function y(t){return m(a,t)}function _(t){return m(l,t)}function b(){}function C(t){return null==t?b:function(){return this.querySelector(t)}}function x(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function v(){return[]}function k(t){return null==t?v:function(){return this.querySelectorAll(t)}}function w(t){return function(){return this.matches(t)}}function T(t){return function(e){return e.matches(t)}}var S=Array.prototype.find;function B(){return this.firstElementChild}var M=Array.prototype.filter;function F(){return Array.from(this.children)}function L(t){return new Array(t.length)}function A(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function E(t,e,i,r,n,o){for(var a,s=0,l=e.length,c=o.length;s<c;++s)(a=e[s])?(a.__data__=o[s],r[s]=a):i[s]=new A(t,o[s]);for(;s<l;++s)(a=e[s])&&(n[s]=a)}function O(t,e,i,r,n,o,a){var s,l,c,h=new Map,u=e.length,f=o.length,d=new Array(u);for(s=0;s<u;++s)(l=e[s])&&(d[s]=c=a.call(l,l.__data__,s,e)+"",h.has(c)?n[s]=l:h.set(c,l));for(s=0;s<f;++s)c=a.call(t,o[s],s,o)+"",(l=h.get(c))?(r[s]=l,l.__data__=o[s],h.delete(c)):i[s]=new A(t,o[s]);for(s=0;s<u;++s)(l=e[s])&&h.get(d[s])===l&&(n[s]=l)}function N(t){return t.__data__}function D(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function I(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}A.prototype={constructor:A,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var $="http://www.w3.org/1999/xhtml";const z={svg:"http://www.w3.org/2000/svg",xhtml:$,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Z(t){var e=t+="",i=e.indexOf(":");return i>=0&&"xmlns"!==(e=t.slice(0,i))&&(t=t.slice(i+1)),z.hasOwnProperty(e)?{space:z[e],local:t}:t}function j(t){return function(){this.removeAttribute(t)}}function R(t){return function(){this.removeAttributeNS(t.space,t.local)}}function q(t,e){return function(){this.setAttribute(t,e)}}function P(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function W(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttribute(t):this.setAttribute(t,i)}}function U(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,i)}}function H(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Y(t){return function(){this.style.removeProperty(t)}}function V(t,e,i){return function(){this.style.setProperty(t,e,i)}}function G(t,e,i){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,i)}}function X(t,e){return t.style.getPropertyValue(e)||H(t).getComputedStyle(t,null).getPropertyValue(e)}function J(t){return function(){delete this[t]}}function Q(t,e){return function(){this[t]=e}}function K(t,e){return function(){var i=e.apply(this,arguments);null==i?delete this[t]:this[t]=i}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new it(t)}function it(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function rt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.add(e[r])}function nt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.remove(e[r])}function ot(t){return function(){rt(this,t)}}function at(t){return function(){nt(this,t)}}function st(t,e){return function(){(e.apply(this,arguments)?rt:nt)(this,t)}}function lt(){this.textContent=""}function ct(t){return function(){this.textContent=t}}function ht(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ut(){this.innerHTML=""}function ft(t){return function(){this.innerHTML=t}}function dt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function pt(){this.nextSibling&&this.parentNode.appendChild(this)}function gt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mt(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===$&&e.documentElement.namespaceURI===$?e.createElement(t):e.createElementNS(i,t)}}function yt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function _t(t){var e=Z(t);return(e.local?yt:mt)(e)}function bt(){return null}function Ct(){var t=this.parentNode;t&&t.removeChild(this)}function xt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function vt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(t){return function(){var e=this.__on;if(e){for(var i,r=0,n=-1,o=e.length;r<o;++r)i=e[r],t.type&&i.type!==t.type||i.name!==t.name?e[++n]=i:this.removeEventListener(i.type,i.listener,i.options);++n?e.length=n:delete this.__on}}}function wt(t,e,i){return function(){var r,n=this.__on,o=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(n)for(var a=0,s=n.length;a<s;++a)if((r=n[a]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=o,r.options=i),void(r.value=e);this.addEventListener(t.type,o,i),r={type:t.type,name:t.name,value:e,listener:o,options:i},n?n.push(r):this.__on=[r]}}function Tt(t,e,i){var r=H(t),n=r.CustomEvent;"function"==typeof n?n=new n(e,i):(n=r.document.createEvent("Event"),i?(n.initEvent(e,i.bubbles,i.cancelable),n.detail=i.detail):n.initEvent(e,!1,!1)),t.dispatchEvent(n)}function St(t,e){return function(){return Tt(this,t,e)}}function Bt(t,e){return function(){return Tt(this,t,e.apply(this,arguments))}}it.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Mt=[null];function Ft(t,e){this._groups=t,this._parents=e}function Lt(){return new Ft([[document.documentElement]],Mt)}Ft.prototype=Lt.prototype={constructor:Ft,select:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a,s=e[n],l=s.length,c=r[n]=new Array(l),h=0;h<l;++h)(o=s[h])&&(a=t.call(o,o.__data__,h,s))&&("__data__"in o&&(a.__data__=o.__data__),c[h]=a);return new Ft(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return x(t.apply(this,arguments))}}(t):k(t);for(var e=this._groups,i=e.length,r=[],n=[],o=0;o<i;++o)for(var a,s=e[o],l=s.length,c=0;c<l;++c)(a=s[c])&&(r.push(t.call(a,a.__data__,c,s)),n.push(a));return new Ft(r,n)},selectChild:function(t){return this.select(null==t?B:function(t){return function(){return S.call(this.children,t)}}("function"==typeof t?t:T(t)))},selectChildren:function(t){return this.selectAll(null==t?F:function(t){return function(){return M.call(this.children,t)}}("function"==typeof t?t:T(t)))},filter:function(t){"function"!=typeof t&&(t=w(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new Ft(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,N);var i,r=e?O:E,n=this._parents,o=this._groups;"function"!=typeof t&&(i=t,t=function(){return i});for(var a=o.length,s=new Array(a),l=new Array(a),c=new Array(a),h=0;h<a;++h){var u=n[h],f=o[h],d=f.length,p=D(t.call(u,u&&u.__data__,h,n)),g=p.length,m=l[h]=new Array(g),y=s[h]=new Array(g);r(u,f,m,y,c[h]=new Array(d),p,e);for(var _,b,C=0,x=0;C<g;++C)if(_=m[C]){for(C>=x&&(x=C+1);!(b=y[x])&&++x<g;);_._next=b||null}}return(s=new Ft(s,n))._enter=l,s._exit=c,s},enter:function(){return new Ft(this._enter||this._groups.map(L),this._parents)},exit:function(){return new Ft(this._exit||this._groups.map(L),this._parents)},join:function(t,e,i){var r=this.enter(),n=this,o=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(n=e(n))&&(n=n.selection()),null==i?o.remove():i(o),r&&n?r.merge(n).order():n},merge:function(t){for(var e=t.selection?t.selection():t,i=this._groups,r=e._groups,n=i.length,o=r.length,a=Math.min(n,o),s=new Array(n),l=0;l<a;++l)for(var c,h=i[l],u=r[l],f=h.length,d=s[l]=new Array(f),p=0;p<f;++p)(c=h[p]||u[p])&&(d[p]=c);for(;l<n;++l)s[l]=i[l];return new Ft(s,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,i=t.length;++e<i;)for(var r,n=t[e],o=n.length-1,a=n[o];--o>=0;)(r=n[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function e(e,i){return e&&i?t(e.__data__,i.__data__):!e-!i}t||(t=I);for(var i=this._groups,r=i.length,n=new Array(r),o=0;o<r;++o){for(var a,s=i[o],l=s.length,c=n[o]=new Array(l),h=0;h<l;++h)(a=s[h])&&(c[h]=a);c.sort(e)}return new Ft(n,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r=t[e],n=0,o=r.length;n<o;++n){var a=r[n];if(a)return a}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,i=0,r=e.length;i<r;++i)for(var n,o=e[i],a=0,s=o.length;a<s;++a)(n=o[a])&&t.call(n,n.__data__,a,o);return this},attr:function(t,e){var i=Z(t);if(arguments.length<2){var r=this.node();return i.local?r.getAttributeNS(i.space,i.local):r.getAttribute(i)}return this.each((null==e?i.local?R:j:"function"==typeof e?i.local?U:W:i.local?P:q)(i,e))},style:function(t,e,i){return arguments.length>1?this.each((null==e?Y:"function"==typeof e?G:V)(t,e,null==i?"":i)):X(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?J:"function"==typeof e?K:Q)(t,e)):this.node()[t]},classed:function(t,e){var i=tt(t+"");if(arguments.length<2){for(var r=et(this.node()),n=-1,o=i.length;++n<o;)if(!r.contains(i[n]))return!1;return!0}return this.each(("function"==typeof e?st:e?ot:at)(i,e))},text:function(t){return arguments.length?this.each(null==t?lt:("function"==typeof t?ht:ct)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?ut:("function"==typeof t?dt:ft)(t)):this.node().innerHTML},raise:function(){return this.each(pt)},lower:function(){return this.each(gt)},append:function(t){var e="function"==typeof t?t:_t(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var i="function"==typeof t?t:_t(t),r=null==e?bt:"function"==typeof e?e:C(e);return this.select((function(){return this.insertBefore(i.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(Ct)},clone:function(t){return this.select(t?vt:xt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,i){var r,n,o=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");return i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),{type:t,name:e}}))}(t+""),a=o.length;if(!(arguments.length<2)){for(s=e?wt:kt,r=0;r<a;++r)this.each(s(o[r],e,i));return this}var s=this.node().__on;if(s)for(var l,c=0,h=s.length;c<h;++c)for(r=0,l=s[c];r<a;++r)if((n=o[r]).type===l.type&&n.name===l.name)return l.value},dispatch:function(t,e){return this.each(("function"==typeof e?Bt:St)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r,n=t[e],o=0,a=n.length;o<a;++o)(r=n[o])&&(yield r)}};const At=Lt;var Et={value:()=>{}};function Ot(){for(var t,e=0,i=arguments.length,r={};e<i;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new Nt(r)}function Nt(t){this._=t}function Dt(t,e){for(var i,r=0,n=t.length;r<n;++r)if((i=t[r]).name===e)return i.value}function It(t,e,i){for(var r=0,n=t.length;r<n;++r)if(t[r].name===e){t[r]=Et,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=i&&t.push({name:e,value:i}),t}Nt.prototype=Ot.prototype={constructor:Nt,on:function(t,e){var i,r,n=this._,o=(r=n,(t+"").trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");if(i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,s=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=o[a]).type)n[i]=It(n[i],t.name,e);else if(null==e)for(i in n)n[i]=It(n[i],t.name,null);return this}for(;++a<s;)if((i=(t=o[a]).type)&&(i=Dt(n[i],t.name)))return i},copy:function(){var t={},e=this._;for(var i in e)t[i]=e[i].slice();return new Nt(t)},call:function(t,e){if((i=arguments.length-2)>0)for(var i,r,n=new Array(i),o=0;o<i;++o)n[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,i=(r=this._[t]).length;o<i;++o)r[o].value.apply(e,n)},apply:function(t,e,i){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],n=0,o=r.length;n<o;++n)r[n].value.apply(e,i)}};const $t=Ot;var zt,Zt,jt=0,Rt=0,qt=0,Pt=1e3,Wt=0,Ut=0,Ht=0,Yt="object"==typeof performance&&performance.now?performance:Date,Vt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Gt(){return Ut||(Vt(Xt),Ut=Yt.now()+Ht)}function Xt(){Ut=0}function Jt(){this._call=this._time=this._next=null}function Qt(t,e,i){var r=new Jt;return r.restart(t,e,i),r}function Kt(){Ut=(Wt=Yt.now())+Ht,jt=Rt=0;try{!function(){Gt(),++jt;for(var t,e=zt;e;)(t=Ut-e._time)>=0&&e._call.call(void 0,t),e=e._next;--jt}()}finally{jt=0,function(){var t,e,i=zt,r=1/0;for(;i;)i._call?(r>i._time&&(r=i._time),t=i,i=i._next):(e=i._next,i._next=null,i=t?t._next=e:zt=e);Zt=t,ee(r)}(),Ut=0}}function te(){var t=Yt.now(),e=t-Wt;e>Pt&&(Ht-=e,Wt=t)}function ee(t){jt||(Rt&&(Rt=clearTimeout(Rt)),t-Ut>24?(t<1/0&&(Rt=setTimeout(Kt,t-Yt.now()-Ht)),qt&&(qt=clearInterval(qt))):(qt||(Wt=Yt.now(),qt=setInterval(te,Pt)),jt=1,Vt(Kt)))}function ie(t,e,i){var r=new Jt;return e=null==e?0:+e,r.restart((i=>{r.stop(),t(i+e)}),e,i),r}Jt.prototype=Qt.prototype={constructor:Jt,restart:function(t,e,i){if("function"!=typeof t)throw new TypeError("callback is not a function");i=(null==i?Gt():+i)+(null==e?0:+e),this._next||Zt===this||(Zt?Zt._next=this:zt=this,Zt=this),this._call=t,this._time=i,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=$t("start","end","cancel","interrupt"),ne=[],oe=0,ae=1,se=2,le=3,ce=4,he=5,ue=6;function fe(t,e,i,r,n,o){var a=t.__transition;if(a){if(i in a)return}else t.__transition={};!function(t,e,i){var r,n=t.__transition;function o(t){i.state=ae,i.timer.restart(a,i.delay,i.time),i.delay<=t&&a(t-i.delay)}function a(o){var c,h,u,f;if(i.state!==ae)return l();for(c in n)if((f=n[c]).name===i.name){if(f.state===le)return ie(a);f.state===ce?(f.state=ue,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete n[c]):+c<e&&(f.state=ue,f.timer.stop(),f.on.call("cancel",t,t.__data__,f.index,f.group),delete n[c])}if(ie((function(){i.state===le&&(i.state=ce,i.timer.restart(s,i.delay,i.time),s(o))})),i.state=se,i.on.call("start",t,t.__data__,i.index,i.group),i.state===se){for(i.state=le,r=new Array(u=i.tween.length),c=0,h=-1;c<u;++c)(f=i.tween[c].value.call(t,t.__data__,i.index,i.group))&&(r[++h]=f);r.length=h+1}}function s(e){for(var n=e<i.duration?i.ease.call(null,e/i.duration):(i.timer.restart(l),i.state=he,1),o=-1,a=r.length;++o<a;)r[o].call(t,n);i.state===he&&(i.on.call("end",t,t.__data__,i.index,i.group),l())}function l(){for(var r in i.state=ue,i.timer.stop(),delete n[e],n)return;delete t.__transition}n[e]=i,i.timer=Qt(o,0,i.time)}(t,i,{name:e,index:r,group:n,on:re,tween:ne,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:oe})}function de(t,e){var i=ge(t,e);if(i.state>oe)throw new Error("too late; already scheduled");return i}function pe(t,e){var i=ge(t,e);if(i.state>le)throw new Error("too late; already running");return i}function ge(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function me(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var ye,_e=180/Math.PI,be={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Ce(t,e,i,r,n,o){var a,s,l;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(l=t*i+e*r)&&(i-=t*l,r-=e*l),(s=Math.sqrt(i*i+r*r))&&(i/=s,r/=s,l/=s),t*r<e*i&&(t=-t,e=-e,l=-l,a=-a),{translateX:n,translateY:o,rotate:Math.atan2(e,t)*_e,skewX:Math.atan(l)*_e,scaleX:a,scaleY:s}}function xe(t,e,i,r){function n(t){return t.length?t.pop()+" ":""}return function(o,a){var s=[],l=[];return o=t(o),a=t(a),function(t,r,n,o,a,s){if(t!==n||r!==o){var l=a.push("translate(",null,e,null,i);s.push({i:l-4,x:me(t,n)},{i:l-2,x:me(r,o)})}else(n||o)&&a.push("translate("+n+e+o+i)}(o.translateX,o.translateY,a.translateX,a.translateY,s,l),function(t,e,i,o){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),o.push({i:i.push(n(i)+"rotate(",null,r)-2,x:me(t,e)})):e&&i.push(n(i)+"rotate("+e+r)}(o.rotate,a.rotate,s,l),function(t,e,i,o){t!==e?o.push({i:i.push(n(i)+"skewX(",null,r)-2,x:me(t,e)}):e&&i.push(n(i)+"skewX("+e+r)}(o.skewX,a.skewX,s,l),function(t,e,i,r,o,a){if(t!==i||e!==r){var s=o.push(n(o)+"scale(",null,",",null,")");a.push({i:s-4,x:me(t,i)},{i:s-2,x:me(e,r)})}else 1===i&&1===r||o.push(n(o)+"scale("+i+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,s,l),o=a=null,function(t){for(var e,i=-1,r=l.length;++i<r;)s[(e=l[i]).i]=e.x(t);return s.join("")}}}var ve=xe((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?be:Ce(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),ke=xe((function(t){return null==t?be:(ye||(ye=document.createElementNS("http://www.w3.org/2000/svg","g")),ye.setAttribute("transform",t),(t=ye.transform.baseVal.consolidate())?Ce((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):be)}),", ",")",")");function we(t,e){var i,r;return function(){var n=pe(this,t),o=n.tween;if(o!==i)for(var a=0,s=(r=i=o).length;a<s;++a)if(r[a].name===e){(r=r.slice()).splice(a,1);break}n.tween=r}}function Te(t,e,i){var r,n;if("function"!=typeof i)throw new Error;return function(){var o=pe(this,t),a=o.tween;if(a!==r){n=(r=a).slice();for(var s={name:e,value:i},l=0,c=n.length;l<c;++l)if(n[l].name===e){n[l]=s;break}l===c&&n.push(s)}o.tween=n}}function Se(t,e,i){var r=t._id;return t.each((function(){var t=pe(this,r);(t.value||(t.value={}))[e]=i.apply(this,arguments)})),function(t){return ge(t,r).value[e]}}function Be(t,e,i){t.prototype=e.prototype=i,i.constructor=t}function Me(t,e){var i=Object.create(t.prototype);for(var r in e)i[r]=e[r];return i}function Fe(){}var Le=.7,Ae=1/Le,Ee="\\s*([+-]?\\d+)\\s*",Oe="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ne="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",De=/^#([0-9a-f]{3,8})$/,Ie=new RegExp(`^rgb\\(${Ee},${Ee},${Ee}\\)$`),$e=new RegExp(`^rgb\\(${Ne},${Ne},${Ne}\\)$`),ze=new RegExp(`^rgba\\(${Ee},${Ee},${Ee},${Oe}\\)$`),Ze=new RegExp(`^rgba\\(${Ne},${Ne},${Ne},${Oe}\\)$`),je=new RegExp(`^hsl\\(${Oe},${Ne},${Ne}\\)$`),Re=new RegExp(`^hsla\\(${Oe},${Ne},${Ne},${Oe}\\)$`),qe={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Pe(){return this.rgb().formatHex()}function We(){return this.rgb().formatRgb()}function Ue(t){var e,i;return t=(t+"").trim().toLowerCase(),(e=De.exec(t))?(i=e[1].length,e=parseInt(e[1],16),6===i?He(e):3===i?new Xe(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?Ye(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?Ye(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ie.exec(t))?new Xe(e[1],e[2],e[3],1):(e=$e.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=ze.exec(t))?Ye(e[1],e[2],e[3],e[4]):(e=Ze.exec(t))?Ye(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=je.exec(t))?ii(e[1],e[2]/100,e[3]/100,1):(e=Re.exec(t))?ii(e[1],e[2]/100,e[3]/100,e[4]):qe.hasOwnProperty(t)?He(qe[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function He(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function Ye(t,e,i,r){return r<=0&&(t=e=i=NaN),new Xe(t,e,i,r)}function Ve(t){return t instanceof Fe||(t=Ue(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,i,r){return 1===arguments.length?Ve(t):new Xe(t,e,i,null==r?1:r)}function Xe(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}function Je(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}`}function Qe(){const t=Ke(this.opacity);return`${1===t?"rgb(":"rgba("}${ti(this.r)}, ${ti(this.g)}, ${ti(this.b)}${1===t?")":`, ${t})`}`}function Ke(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ti(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ei(t){return((t=ti(t))<16?"0":"")+t.toString(16)}function ii(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new ni(t,e,i,r)}function ri(t){if(t instanceof ni)return new ni(t.h,t.s,t.l,t.opacity);if(t instanceof Fe||(t=Ue(t)),!t)return new ni;if(t instanceof ni)return t;var e=(t=t.rgb()).r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),a=NaN,s=o-n,l=(o+n)/2;return s?(a=e===o?(i-r)/s+6*(i<r):i===o?(r-e)/s+2:(e-i)/s+4,s/=l<.5?o+n:2-o-n,a*=60):s=l>0&&l<1?0:a,new ni(a,s,l,t.opacity)}function ni(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}function oi(t){return(t=(t||0)%360)<0?t+360:t}function ai(t){return Math.max(0,Math.min(1,t||0))}function si(t,e,i){return 255*(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)}function li(t,e,i,r,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*i+(1+3*t+3*o-3*a)*r+a*n)/6}Be(Fe,Ue,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Pe,formatHex:Pe,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ri(this).formatHsl()},formatRgb:We,toString:We}),Be(Xe,Ge,Me(Fe,{brighter(t){return t=null==t?Ae:Math.pow(Ae,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Xe(ti(this.r),ti(this.g),ti(this.b),Ke(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Je,formatHex:Je,formatHex8:function(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}${ei(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Qe,toString:Qe})),Be(ni,(function(t,e,i,r){return 1===arguments.length?ri(t):new ni(t,e,i,null==r?1:r)}),Me(Fe,{brighter(t){return t=null==t?Ae:Math.pow(Ae,t),new ni(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new ni(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new Xe(si(t>=240?t-240:t+120,n,r),si(t,n,r),si(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new ni(oi(this.h),ai(this.s),ai(this.l),Ke(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ke(this.opacity);return`${1===t?"hsl(":"hsla("}${oi(this.h)}, ${100*ai(this.s)}%, ${100*ai(this.l)}%${1===t?")":`, ${t})`}`}}));const ci=t=>()=>t;function hi(t,e){return function(i){return t+i*e}}function ui(t){return 1==(t=+t)?fi:function(e,i){return i-e?function(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}(e,i,t):ci(isNaN(e)?i:e)}}function fi(t,e){var i=e-t;return i?hi(t,i):ci(isNaN(t)?e:t)}const di=function t(e){var i=ui(e);function r(t,e){var r=i((t=Ge(t)).r,(e=Ge(e)).r),n=i(t.g,e.g),o=i(t.b,e.b),a=fi(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=n(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function pi(t){return function(e){var i,r,n=e.length,o=new Array(n),a=new Array(n),s=new Array(n);for(i=0;i<n;++i)r=Ge(e[i]),o[i]=r.r||0,a[i]=r.g||0,s[i]=r.b||0;return o=t(o),a=t(a),s=t(s),r.opacity=1,function(t){return r.r=o(t),r.g=a(t),r.b=s(t),r+""}}}pi((function(t){var e=t.length-1;return function(i){var r=i<=0?i=0:i>=1?(i=1,e-1):Math.floor(i*e),n=t[r],o=t[r+1],a=r>0?t[r-1]:2*n-o,s=r<e-1?t[r+2]:2*o-n;return li((i-r/e)*e,a,n,o,s)}})),pi((function(t){var e=t.length;return function(i){var r=Math.floor(((i%=1)<0?++i:i)*e),n=t[(r+e-1)%e],o=t[r%e],a=t[(r+1)%e],s=t[(r+2)%e];return li((i-r/e)*e,n,o,a,s)}}));var gi=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,mi=new RegExp(gi.source,"g");function yi(t,e){var i,r,n,o=gi.lastIndex=mi.lastIndex=0,a=-1,s=[],l=[];for(t+="",e+="";(i=gi.exec(t))&&(r=mi.exec(e));)(n=r.index)>o&&(n=e.slice(o,n),s[a]?s[a]+=n:s[++a]=n),(i=i[0])===(r=r[0])?s[a]?s[a]+=r:s[++a]=r:(s[++a]=null,l.push({i:a,x:me(i,r)})),o=mi.lastIndex;return o<e.length&&(n=e.slice(o),s[a]?s[a]+=n:s[++a]=n),s.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var i,r=0;r<e;++r)s[(i=l[r]).i]=i.x(t);return s.join("")})}function _i(t,e){var i;return("number"==typeof e?me:e instanceof Ue?di:(i=Ue(e))?(e=i,di):yi)(t,e)}function bi(t){return function(){this.removeAttribute(t)}}function Ci(t){return function(){this.removeAttributeNS(t.space,t.local)}}function xi(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttribute(t);return a===o?null:a===r?n:n=e(r=a,i)}}function vi(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttributeNS(t.space,t.local);return a===o?null:a===r?n:n=e(r=a,i)}}function ki(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttribute(t))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttribute(t)}}function wi(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttributeNS(t.space,t.local))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttributeNS(t.space,t.local)}}function Ti(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttributeNS(t.space,t.local,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Si(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttribute(t,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Bi(t,e){return function(){de(this,t).delay=+e.apply(this,arguments)}}function Mi(t,e){return e=+e,function(){de(this,t).delay=e}}function Fi(t,e){return function(){pe(this,t).duration=+e.apply(this,arguments)}}function Li(t,e){return e=+e,function(){pe(this,t).duration=e}}var Ai=At.prototype.constructor;function Ei(t){return function(){this.style.removeProperty(t)}}var Oi=0;function Ni(t,e,i,r){this._groups=t,this._parents=e,this._name=i,this._id=r}function Di(){return++Oi}var Ii=At.prototype;Ni.prototype=function(t){return At().transition(t)}.prototype={constructor:Ni,select:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=C(t));for(var r=this._groups,n=r.length,o=new Array(n),a=0;a<n;++a)for(var s,l,c=r[a],h=c.length,u=o[a]=new Array(h),f=0;f<h;++f)(s=c[f])&&(l=t.call(s,s.__data__,f,c))&&("__data__"in s&&(l.__data__=s.__data__),u[f]=l,fe(u[f],e,i,f,u,ge(s,i)));return new Ni(o,this._parents,e,i)},selectAll:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=k(t));for(var r=this._groups,n=r.length,o=[],a=[],s=0;s<n;++s)for(var l,c=r[s],h=c.length,u=0;u<h;++u)if(l=c[u]){for(var f,d=t.call(l,l.__data__,u,c),p=ge(l,i),g=0,m=d.length;g<m;++g)(f=d[g])&&fe(f,e,i,g,d,p);o.push(d),a.push(l)}return new Ni(o,a,e,i)},selectChild:Ii.selectChild,selectChildren:Ii.selectChildren,filter:function(t){"function"!=typeof t&&(t=w(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new Ni(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,i=t._groups,r=e.length,n=i.length,o=Math.min(r,n),a=new Array(r),s=0;s<o;++s)for(var l,c=e[s],h=i[s],u=c.length,f=a[s]=new Array(u),d=0;d<u;++d)(l=c[d]||h[d])&&(f[d]=l);for(;s<r;++s)a[s]=e[s];return new Ni(a,this._parents,this._name,this._id)},selection:function(){return new Ai(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,i=Di(),r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,c=0;c<l;++c)if(a=s[c]){var h=ge(a,e);fe(a,t,i,c,s,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Ni(r,this._parents,t,i)},call:Ii.call,nodes:Ii.nodes,node:Ii.node,size:Ii.size,empty:Ii.empty,each:Ii.each,on:function(t,e){var i=this._id;return arguments.length<2?ge(this.node(),i).on.on(t):this.each(function(t,e,i){var r,n,o=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?de:pe;return function(){var a=o(this,t),s=a.on;s!==r&&(n=(r=s).copy()).on(e,i),a.on=n}}(i,t,e))},attr:function(t,e){var i=Z(t),r="transform"===i?ke:_i;return this.attrTween(t,"function"==typeof e?(i.local?wi:ki)(i,r,Se(this,"attr."+t,e)):null==e?(i.local?Ci:bi)(i):(i.local?vi:xi)(i,r,e))},attrTween:function(t,e){var i="attr."+t;if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;var r=Z(t);return this.tween(i,(r.local?Ti:Si)(r,e))},style:function(t,e,i){var r="transform"==(t+="")?ve:_i;return null==e?this.styleTween(t,function(t,e){var i,r,n;return function(){var o=X(this,t),a=(this.style.removeProperty(t),X(this,t));return o===a?null:o===i&&a===r?n:n=e(i=o,r=a)}}(t,r)).on("end.style."+t,Ei(t)):"function"==typeof e?this.styleTween(t,function(t,e,i){var r,n,o;return function(){var a=X(this,t),s=i(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=X(this,t)),a===l?null:a===r&&l===n?o:(n=l,o=e(r=a,s))}}(t,r,Se(this,"style."+t,e))).each(function(t,e){var i,r,n,o,a="style."+e,s="end."+a;return function(){var l=pe(this,t),c=l.on,h=null==l.value[a]?o||(o=Ei(e)):void 0;c===i&&n===h||(r=(i=c).copy()).on(s,n=h),l.on=r}}(this._id,t)):this.styleTween(t,function(t,e,i){var r,n,o=i+"";return function(){var a=X(this,t);return a===o?null:a===r?n:n=e(r=a,i)}}(t,r,e),i).on("end.style."+t,null)},styleTween:function(t,e,i){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,i){var r,n;function o(){var o=e.apply(this,arguments);return o!==n&&(r=(n=o)&&function(t,e,i){return function(r){this.style.setProperty(t,e.call(this,r),i)}}(t,o,i)),r}return o._value=e,o}(t,e,null==i?"":i))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Se(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,i;function r(){var r=t.apply(this,arguments);return r!==i&&(e=(i=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var i=this._id;if(t+="",arguments.length<2){for(var r,n=ge(this.node(),i).tween,o=0,a=n.length;o<a;++o)if((r=n[o]).name===t)return r.value;return null}return this.each((null==e?we:Te)(i,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Bi:Mi)(e,t)):ge(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Fi:Li)(e,t)):ge(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){pe(this,t).ease=e}}(e,t)):ge(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var i=e.apply(this,arguments);if("function"!=typeof i)throw new Error;pe(this,t).ease=i}}(this._id,t))},end:function(){var t,e,i=this,r=i._id,n=i.size();return new Promise((function(o,a){var s={value:a},l={value:function(){0==--n&&o()}};i.each((function(){var i=pe(this,r),n=i.on;n!==t&&((e=(t=n).copy())._.cancel.push(s),e._.interrupt.push(s),e._.end.push(l)),i.on=e})),0===n&&o()}))},[Symbol.iterator]:Ii[Symbol.iterator]};var $i={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function zi(t,e){for(var i;!(i=t.__transition)||!(i=i[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return i}At.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var i,r,n,o=t.__transition,a=!0;if(o){for(n in e=null==e?null:e+"",o)(i=o[n]).name===e?(r=i.state>se&&i.state<he,i.state=ue,i.timer.stop(),i.on.call(r?"interrupt":"cancel",t,t.__data__,i.index,i.group),delete o[n]):a=!1;a&&delete t.__transition}}(this,t)}))},At.prototype.transition=function(t){var e,i;t instanceof Ni?(e=t._id,t=t._name):(e=Di(),(i=$i).time=Gt(),t=null==t?null:t+"");for(var r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,c=0;c<l;++c)(a=s[c])&&fe(a,t,e,c,s,i||zi(a,e));return new Ni(r,this._parents,t,e)};const{abs:Zi,max:ji,min:Ri}=Math;function qi(t){return[+t[0],+t[1]]}function Pi(t){return[qi(t[0]),qi(t[1])]}["w","e"].map(Wi),["n","s"].map(Wi),["n","w","e","s","nw","ne","sw","se"].map(Wi);function Wi(t){return{type:t}}function Ui(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Hi(t){return(e,i)=>function(t,e){return fetch(t,e).then(Ui)}(e,i).then((e=>(new DOMParser).parseFromString(e,t)))}Hi("application/xml");Hi("text/html");var Yi=Hi("image/svg+xml");const Vi=Math.PI/180,Gi=180/Math.PI,Xi=.96422,Ji=1,Qi=.82521,Ki=4/29,tr=6/29,er=3*tr*tr,ir=tr*tr*tr;function rr(t){if(t instanceof nr)return new nr(t.l,t.a,t.b,t.opacity);if(t instanceof ur)return fr(t);t instanceof Xe||(t=Ve(t));var e,i,r=lr(t.r),n=lr(t.g),o=lr(t.b),a=or((.2225045*r+.7168786*n+.0606169*o)/Ji);return r===n&&n===o?e=i=a:(e=or((.4360747*r+.3850649*n+.1430804*o)/Xi),i=or((.0139322*r+.0971045*n+.7141733*o)/Qi)),new nr(116*a-16,500*(e-a),200*(a-i),t.opacity)}function nr(t,e,i,r){this.l=+t,this.a=+e,this.b=+i,this.opacity=+r}function or(t){return t>ir?Math.pow(t,1/3):t/er+Ki}function ar(t){return t>tr?t*t*t:er*(t-Ki)}function sr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function lr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function cr(t){if(t instanceof ur)return new ur(t.h,t.c,t.l,t.opacity);if(t instanceof nr||(t=rr(t)),0===t.a&&0===t.b)return new ur(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Gi;return new ur(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function hr(t,e,i,r){return 1===arguments.length?cr(t):new ur(t,e,i,null==r?1:r)}function ur(t,e,i,r){this.h=+t,this.c=+e,this.l=+i,this.opacity=+r}function fr(t){if(isNaN(t.h))return new nr(t.l,0,0,t.opacity);var e=t.h*Vi;return new nr(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function dr(t){return function(e,i){var r=t((e=hr(e)).h,(i=hr(i)).h),n=fi(e.c,i.c),o=fi(e.l,i.l),a=fi(e.opacity,i.opacity);return function(t){return e.h=r(t),e.c=n(t),e.l=o(t),e.opacity=a(t),e+""}}}Be(nr,(function(t,e,i,r){return 1===arguments.length?rr(t):new nr(t,e,i,null==r?1:r)}),Me(Fe,{brighter(t){return new nr(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new nr(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,i=isNaN(this.b)?t:t-this.b/200;return new Xe(sr(3.1338561*(e=Xi*ar(e))-1.6168667*(t=Ji*ar(t))-.4906146*(i=Qi*ar(i))),sr(-.9787684*e+1.9161415*t+.033454*i),sr(.0719453*e-.2289914*t+1.4052427*i),this.opacity)}})),Be(ur,hr,Me(Fe,{brighter(t){return new ur(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new ur(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return fr(this).rgb()}}));const pr=dr((function(t,e){var i=e-t;return i?hi(t,i>180||i<-180?i-360*Math.round(i/360):i):ci(isNaN(t)?e:t)}));dr(fi);const gr=Math.sqrt(50),mr=Math.sqrt(10),yr=Math.sqrt(2);function _r(t,e,i){const r=(e-t)/Math.max(0,i),n=Math.floor(Math.log10(r)),o=r/Math.pow(10,n),a=o>=gr?10:o>=mr?5:o>=yr?2:1;let s,l,c;return n<0?(c=Math.pow(10,-n)/a,s=Math.round(t*c),l=Math.round(e*c),s/c<t&&++s,l/c>e&&--l,c=-c):(c=Math.pow(10,n)*a,s=Math.round(t/c),l=Math.round(e/c),s*c<t&&++s,l*c>e&&--l),l<s&&.5<=i&&i<2?_r(t,e,2*i):[s,l,c]}function br(t,e,i){return _r(t=+t,e=+e,i=+i)[2]}function Cr(t,e,i){i=+i;const r=(e=+e)<(t=+t),n=r?br(e,t,i):br(t,e,i);return(r?-1:1)*(n<0?1/-n:n)}function xr(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function vr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function kr(t){let e,i,r;function n(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<0?n=e+1:o=e}while(n<o)}return n}return 2!==t.length?(e=xr,i=(e,i)=>xr(t(e),i),r=(e,i)=>t(e)-i):(e=t===xr||t===vr?t:wr,i=t,r=t),{left:n,center:function(t,e,i=0,o=t.length){const a=n(t,e,i,o-1);return a>i&&r(t[a-1],e)>-r(t[a],e)?a-1:a},right:function(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<=0?n=e+1:o=e}while(n<o)}return n}}}function wr(){return 0}const Tr=kr(xr),Sr=Tr.right,Br=(Tr.left,kr((function(t){return null===t?NaN:+t})).center,Sr);function Mr(t,e){var i,r=e?e.length:0,n=t?Math.min(r,t.length):0,o=new Array(n),a=new Array(r);for(i=0;i<n;++i)o[i]=Er(t[i],e[i]);for(;i<r;++i)a[i]=e[i];return function(t){for(i=0;i<n;++i)a[i]=o[i](t);return a}}function Fr(t,e){var i=new Date;return t=+t,e=+e,function(r){return i.setTime(t*(1-r)+e*r),i}}function Lr(t,e){var i,r={},n={};for(i in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)i in t?r[i]=Er(t[i],e[i]):n[i]=e[i];return function(t){for(i in r)n[i]=r[i](t);return n}}function Ar(t,e){e||(e=[]);var i,r=t?Math.min(e.length,t.length):0,n=e.slice();return function(o){for(i=0;i<r;++i)n[i]=t[i]*(1-o)+e[i]*o;return n}}function Er(t,e){var i,r,n=typeof e;return null==e||"boolean"===n?ci(e):("number"===n?me:"string"===n?(i=Ue(e))?(e=i,di):yi:e instanceof Ue?di:e instanceof Date?Fr:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?Mr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Lr:me:Ar))(t,e)}function Or(t,e){return t=+t,e=+e,function(i){return Math.round(t*(1-i)+e*i)}}function Nr(t){return+t}var Dr=[0,1];function Ir(t){return t}function $r(t,e){return(e-=t=+t)?function(i){return(i-t)/e}:(i=isNaN(e)?NaN:.5,function(){return i});var i}function zr(t,e,i){var r=t[0],n=t[1],o=e[0],a=e[1];return n<r?(r=$r(n,r),o=i(a,o)):(r=$r(r,n),o=i(o,a)),function(t){return o(r(t))}}function Zr(t,e,i){var r=Math.min(t.length,e.length)-1,n=new Array(r),o=new Array(r),a=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++a<r;)n[a]=$r(t[a],t[a+1]),o[a]=i(e[a],e[a+1]);return function(e){var i=Br(t,e,1,r)-1;return o[i](n[i](e))}}function jr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Rr(){var t,e,i,r,n,o,a=Dr,s=Dr,l=Er,c=Ir;function h(){var t,e,i,l=Math.min(a.length,s.length);return c!==Ir&&(t=a[0],e=a[l-1],t>e&&(i=t,t=e,e=i),c=function(i){return Math.max(t,Math.min(e,i))}),r=l>2?Zr:zr,n=o=null,u}function u(e){return null==e||isNaN(e=+e)?i:(n||(n=r(a.map(t),s,l)))(t(c(e)))}return u.invert=function(i){return c(e((o||(o=r(s,a.map(t),me)))(i)))},u.domain=function(t){return arguments.length?(a=Array.from(t,Nr),h()):a.slice()},u.range=function(t){return arguments.length?(s=Array.from(t),h()):s.slice()},u.rangeRound=function(t){return s=Array.from(t),l=Or,h()},u.clamp=function(t){return arguments.length?(c=!!t||Ir,h()):c!==Ir},u.interpolate=function(t){return arguments.length?(l=t,h()):l},u.unknown=function(t){return arguments.length?(i=t,u):i},function(i,r){return t=i,e=r,h()}}function qr(){return Rr()(Ir,Ir)}function Pr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}var Wr,Ur=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Hr(t){if(!(e=Ur.exec(t)))throw new Error("invalid format: "+t);var e;return new Yr({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Yr(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Vr(t,e){if((i=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var i,r=t.slice(0,i);return[r.length>1?r[0]+r.slice(2):r,+t.slice(i+1)]}function Gr(t){return(t=Vr(Math.abs(t)))?t[1]:NaN}function Xr(t,e){var i=Vr(t,e);if(!i)return t+"";var r=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+r:r.length>n+1?r.slice(0,n+1)+"."+r.slice(n+1):r+new Array(n-r.length+2).join("0")}Hr.prototype=Yr.prototype,Yr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const Jr={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Xr(100*t,e),r:Xr,s:function(t,e){var i=Vr(t,e);if(!i)return t+"";var r=i[0],n=i[1],o=n-(Wr=3*Math.max(-8,Math.min(8,Math.floor(n/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Vr(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Qr(t){return t}var Kr,tn,en,rn=Array.prototype.map,nn=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function on(t){var e,i,r=void 0===t.grouping||void 0===t.thousands?Qr:(e=rn.call(t.grouping,Number),i=t.thousands+"",function(t,r){for(var n=t.length,o=[],a=0,s=e[0],l=0;n>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(t.substring(n-=s,n+s)),!((l+=s+1)>r));)s=e[a=(a+1)%e.length];return o.reverse().join(i)}),n=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Qr:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(rn.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",c=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=Hr(t)).fill,i=t.align,u=t.sign,f=t.symbol,d=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,_=t.type;"n"===_?(g=!0,_="g"):Jr[_]||(void 0===m&&(m=12),y=!0,_="g"),(d||"0"===e&&"="===i)&&(d=!0,e="0",i="=");var b="$"===f?n:"#"===f&&/[boxX]/.test(_)?"0"+_.toLowerCase():"",C="$"===f?o:/[%p]/.test(_)?l:"",x=Jr[_],v=/[defgprs%]/.test(_);function k(t){var n,o,l,f=b,k=C;if("c"===_)k=x(t)+k,t="";else{var w=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:x(Math.abs(t),m),y&&(t=function(t){t:for(var e,i=t.length,r=1,n=-1;r<i;++r)switch(t[r]){case".":n=e=r;break;case"0":0===n&&(n=r),e=r;break;default:if(!+t[r])break t;n>0&&(n=0)}return n>0?t.slice(0,n)+t.slice(e+1):t}(t)),w&&0==+t&&"+"!==u&&(w=!1),f=(w?"("===u?u:c:"-"===u||"("===u?"":u)+f,k=("s"===_?nn[8+Wr/3]:"")+k+(w&&"("===u?")":""),v)for(n=-1,o=t.length;++n<o;)if(48>(l=t.charCodeAt(n))||l>57){k=(46===l?a+t.slice(n+1):t.slice(n))+k,t=t.slice(0,n);break}}g&&!d&&(t=r(t,1/0));var T=f.length+t.length+k.length,S=T<p?new Array(p-T+1).join(e):"";switch(g&&d&&(t=r(S+t,S.length?p-k.length:1/0),S=""),i){case"<":t=f+t+k+S;break;case"=":t=f+S+t+k;break;case"^":t=S.slice(0,T=S.length>>1)+f+t+k+S.slice(T);break;default:t=S+f+t+k}return s(t)}return m=void 0===m?6:/[gprs]/.test(_)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:u,formatPrefix:function(t,e){var i=u(((t=Hr(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Gr(e)/3))),n=Math.pow(10,-r),o=nn[8+r/3];return function(t){return i(n*t)+o}}}}function an(t,e,i,r){var n,o=Cr(t,e,i);switch((r=Hr(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(n=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Gr(e)/3)))-Gr(Math.abs(t)))}(o,a))||(r.precision=n),en(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(n=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Gr(e)-Gr(t))+1}(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=n-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(n=function(t){return Math.max(0,-Gr(Math.abs(t)))}(o))||(r.precision=n-2*("%"===r.type))}return tn(r)}function sn(t){var e=t.domain;return t.ticks=function(t){var i=e();return function(t,e,i){if(!((i=+i)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[n,o,a]=r?_r(e,t,i):_r(t,e,i);if(!(o>=n))return[];const s=o-n+1,l=new Array(s);if(r)if(a<0)for(let c=0;c<s;++c)l[c]=(o-c)/-a;else for(let c=0;c<s;++c)l[c]=(o-c)*a;else if(a<0)for(let c=0;c<s;++c)l[c]=(n+c)/-a;else for(let c=0;c<s;++c)l[c]=(n+c)*a;return l}(i[0],i[i.length-1],null==t?10:t)},t.tickFormat=function(t,i){var r=e();return an(r[0],r[r.length-1],null==t?10:t,i)},t.nice=function(i){null==i&&(i=10);var r,n,o=e(),a=0,s=o.length-1,l=o[a],c=o[s],h=10;for(c<l&&(n=l,l=c,c=n,n=a,a=s,s=n);h-- >0;){if((n=br(l,c,i))===r)return o[a]=l,o[s]=c,e(o);if(n>0)l=Math.floor(l/n)*n,c=Math.ceil(c/n)*n;else{if(!(n<0))break;l=Math.ceil(l*n)/n,c=Math.floor(c*n)/n}r=n}return t},t}function ln(){var t=qr();return t.copy=function(){return jr(t,ln())},Pr.apply(t,arguments),sn(t)}Kr=on({thousands:",",grouping:[3],currency:["$",""]}),tn=Kr.format,en=Kr.formatPrefix;class cn extends Map{constructor(t,e=pn){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[i,r]of t)this.set(i,r)}get(t){return super.get(un(this,t))}has(t){return super.has(un(this,t))}set(t,e){return super.set(fn(this,t),e)}delete(t){return super.delete(dn(this,t))}}class hn extends Set{constructor(t,e=pn){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const i of t)this.add(i)}has(t){return super.has(un(this,t))}add(t){return super.add(fn(this,t))}delete(t){return super.delete(dn(this,t))}}function un({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):i}function fn({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):(t.set(r,i),i)}function dn({_intern:t,_key:e},i){const r=e(i);return t.has(r)&&(i=t.get(r),t.delete(r)),i}function pn(t){return null!==t&&"object"==typeof t?t.valueOf():t}const gn=Symbol("implicit");function mn(){var t=new cn,e=[],i=[],r=gn;function n(n){let o=t.get(n);if(void 0===o){if(r!==gn)return r;t.set(n,o=e.push(n)-1)}return i[o%i.length]}return n.domain=function(i){if(!arguments.length)return e.slice();e=[],t=new cn;for(const r of i)t.has(r)||t.set(r,e.push(r)-1);return n},n.range=function(t){return arguments.length?(i=Array.from(t),n):i.slice()},n.unknown=function(t){return arguments.length?(r=t,n):r},n.copy=function(){return mn(e,i).unknown(r)},Pr.apply(n,arguments),n}const yn=1e3,_n=6e4,bn=60*_n,Cn=24*bn,xn=7*Cn,vn=30*Cn,kn=365*Cn,wn=new Date,Tn=new Date;function Sn(t,e,i,r){function n(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return n.floor=e=>(t(e=new Date(+e)),e),n.ceil=i=>(t(i=new Date(i-1)),e(i,1),t(i),i),n.round=t=>{const e=n(t),i=n.ceil(t);return t-e<i-t?e:i},n.offset=(t,i)=>(e(t=new Date(+t),null==i?1:Math.floor(i)),t),n.range=(i,r,o)=>{const a=[];if(i=n.ceil(i),o=null==o?1:Math.floor(o),!(i<r&&o>0))return a;let s;do{a.push(s=new Date(+i)),e(i,o),t(i)}while(s<i&&i<r);return a},n.filter=i=>Sn((e=>{if(e>=e)for(;t(e),!i(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!i(t););else for(;--r>=0;)for(;e(t,1),!i(t););})),i&&(n.count=(e,r)=>(wn.setTime(+e),Tn.setTime(+r),t(wn),t(Tn),Math.floor(i(wn,Tn))),n.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?n.filter(r?e=>r(e)%t==0:e=>n.count(0,e)%t==0):n:null)),n}const Bn=Sn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Bn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Sn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,i)=>{e.setTime(+e+i*t)}),((e,i)=>(i-e)/t)):Bn:null);Bn.range;const Mn=Sn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yn)}),((t,e)=>(e-t)/yn),(t=>t.getUTCSeconds())),Fn=(Mn.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn)}),((t,e)=>{t.setTime(+t+e*_n)}),((t,e)=>(e-t)/_n),(t=>t.getMinutes()))),Ln=(Fn.range,Sn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*_n)}),((t,e)=>(e-t)/_n),(t=>t.getUTCMinutes()))),An=(Ln.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn-t.getMinutes()*_n)}),((t,e)=>{t.setTime(+t+e*bn)}),((t,e)=>(e-t)/bn),(t=>t.getHours()))),En=(An.range,Sn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*bn)}),((t,e)=>(e-t)/bn),(t=>t.getUTCHours()))),On=(En.range,Sn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*_n)/Cn),(t=>t.getDate()-1))),Nn=(On.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Cn),(t=>t.getUTCDate()-1))),Dn=(Nn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Cn),(t=>Math.floor(t/Cn))));Dn.range;function In(t){return Sn((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*_n)/xn))}const $n=In(0),zn=In(1),Zn=In(2),jn=In(3),Rn=In(4),qn=In(5),Pn=In(6);$n.range,zn.range,Zn.range,jn.range,Rn.range,qn.range,Pn.range;function Wn(t){return Sn((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/xn))}const Un=Wn(0),Hn=Wn(1),Yn=Wn(2),Vn=Wn(3),Gn=Wn(4),Xn=Wn(5),Jn=Wn(6),Qn=(Un.range,Hn.range,Yn.range,Vn.range,Gn.range,Xn.range,Jn.range,Sn((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()))),Kn=(Qn.range,Sn((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()))),to=(Kn.range,Sn((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear())));to.every=t=>isFinite(t=Math.floor(t))&&t>0?Sn((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,i)=>{e.setFullYear(e.getFullYear()+i*t)})):null;to.range;const eo=Sn((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));eo.every=t=>isFinite(t=Math.floor(t))&&t>0?Sn((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,i)=>{e.setUTCFullYear(e.getUTCFullYear()+i*t)})):null;eo.range;function io(t,e,i,r,n,o){const a=[[Mn,1,yn],[Mn,5,5e3],[Mn,15,15e3],[Mn,30,3e4],[o,1,_n],[o,5,5*_n],[o,15,15*_n],[o,30,30*_n],[n,1,bn],[n,3,3*bn],[n,6,6*bn],[n,12,12*bn],[r,1,Cn],[r,2,2*Cn],[i,1,xn],[e,1,vn],[e,3,3*vn],[t,1,kn]];function s(e,i,r){const n=Math.abs(i-e)/r,o=kr((([,,t])=>t)).right(a,n);if(o===a.length)return t.every(Cr(e/kn,i/kn,r));if(0===o)return Bn.every(Math.max(Cr(e,i,r),1));const[s,l]=a[n/a[o-1][2]<a[o][2]/n?o-1:o];return s.every(l)}return[function(t,e,i){const r=e<t;r&&([t,e]=[e,t]);const n=i&&"function"==typeof i.range?i:s(t,e,i),o=n?n.range(t,+e+1):[];return r?o.reverse():o},s]}const[ro,no]=io(eo,Kn,Un,Dn,En,Ln),[oo,ao]=io(to,Qn,$n,On,An,Fn);function so(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function lo(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function co(t,e,i){return{y:t,m:e,d:i,H:0,M:0,S:0,L:0}}var ho,uo,fo={"-":"",_:" ",0:"0"},po=/^\s*\d+/,go=/^%/,mo=/[\\^$*+?|[\]().{}]/g;function yo(t,e,i){var r=t<0?"-":"",n=(r?-t:t)+"",o=n.length;return r+(o<i?new Array(i-o+1).join(e)+n:n)}function _o(t){return t.replace(mo,"\\$&")}function bo(t){return new RegExp("^(?:"+t.map(_o).join("|")+")","i")}function Co(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function xo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.w=+r[0],i+r[0].length):-1}function vo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.u=+r[0],i+r[0].length):-1}function ko(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.U=+r[0],i+r[0].length):-1}function wo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.V=+r[0],i+r[0].length):-1}function To(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.W=+r[0],i+r[0].length):-1}function So(t,e,i){var r=po.exec(e.slice(i,i+4));return r?(t.y=+r[0],i+r[0].length):-1}function Bo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),i+r[0].length):-1}function Mo(t,e,i){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(i,i+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),i+r[0].length):-1}function Fo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.q=3*r[0]-3,i+r[0].length):-1}function Lo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.m=r[0]-1,i+r[0].length):-1}function Ao(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.d=+r[0],i+r[0].length):-1}function Eo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.m=0,t.d=+r[0],i+r[0].length):-1}function Oo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.H=+r[0],i+r[0].length):-1}function No(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.M=+r[0],i+r[0].length):-1}function Do(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.S=+r[0],i+r[0].length):-1}function Io(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.L=+r[0],i+r[0].length):-1}function $o(t,e,i){var r=po.exec(e.slice(i,i+6));return r?(t.L=Math.floor(r[0]/1e3),i+r[0].length):-1}function zo(t,e,i){var r=go.exec(e.slice(i,i+1));return r?i+r[0].length:-1}function Zo(t,e,i){var r=po.exec(e.slice(i));return r?(t.Q=+r[0],i+r[0].length):-1}function jo(t,e,i){var r=po.exec(e.slice(i));return r?(t.s=+r[0],i+r[0].length):-1}function Ro(t,e){return yo(t.getDate(),e,2)}function qo(t,e){return yo(t.getHours(),e,2)}function Po(t,e){return yo(t.getHours()%12||12,e,2)}function Wo(t,e){return yo(1+On.count(to(t),t),e,3)}function Uo(t,e){return yo(t.getMilliseconds(),e,3)}function Ho(t,e){return Uo(t,e)+"000"}function Yo(t,e){return yo(t.getMonth()+1,e,2)}function Vo(t,e){return yo(t.getMinutes(),e,2)}function Go(t,e){return yo(t.getSeconds(),e,2)}function Xo(t){var e=t.getDay();return 0===e?7:e}function Jo(t,e){return yo($n.count(to(t)-1,t),e,2)}function Qo(t){var e=t.getDay();return e>=4||0===e?Rn(t):Rn.ceil(t)}function Ko(t,e){return t=Qo(t),yo(Rn.count(to(t),t)+(4===to(t).getDay()),e,2)}function ta(t){return t.getDay()}function ea(t,e){return yo(zn.count(to(t)-1,t),e,2)}function ia(t,e){return yo(t.getFullYear()%100,e,2)}function ra(t,e){return yo((t=Qo(t)).getFullYear()%100,e,2)}function na(t,e){return yo(t.getFullYear()%1e4,e,4)}function oa(t,e){var i=t.getDay();return yo((t=i>=4||0===i?Rn(t):Rn.ceil(t)).getFullYear()%1e4,e,4)}function aa(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+yo(e/60|0,"0",2)+yo(e%60,"0",2)}function sa(t,e){return yo(t.getUTCDate(),e,2)}function la(t,e){return yo(t.getUTCHours(),e,2)}function ca(t,e){return yo(t.getUTCHours()%12||12,e,2)}function ha(t,e){return yo(1+Nn.count(eo(t),t),e,3)}function ua(t,e){return yo(t.getUTCMilliseconds(),e,3)}function fa(t,e){return ua(t,e)+"000"}function da(t,e){return yo(t.getUTCMonth()+1,e,2)}function pa(t,e){return yo(t.getUTCMinutes(),e,2)}function ga(t,e){return yo(t.getUTCSeconds(),e,2)}function ma(t){var e=t.getUTCDay();return 0===e?7:e}function ya(t,e){return yo(Un.count(eo(t)-1,t),e,2)}function _a(t){var e=t.getUTCDay();return e>=4||0===e?Gn(t):Gn.ceil(t)}function ba(t,e){return t=_a(t),yo(Gn.count(eo(t),t)+(4===eo(t).getUTCDay()),e,2)}function Ca(t){return t.getUTCDay()}function xa(t,e){return yo(Hn.count(eo(t)-1,t),e,2)}function va(t,e){return yo(t.getUTCFullYear()%100,e,2)}function ka(t,e){return yo((t=_a(t)).getUTCFullYear()%100,e,2)}function wa(t,e){return yo(t.getUTCFullYear()%1e4,e,4)}function Ta(t,e){var i=t.getUTCDay();return yo((t=i>=4||0===i?Gn(t):Gn.ceil(t)).getUTCFullYear()%1e4,e,4)}function Sa(){return"+0000"}function Ba(){return"%"}function Ma(t){return+t}function Fa(t){return Math.floor(+t/1e3)}function La(t){return new Date(t)}function Aa(t){return t instanceof Date?+t:+new Date(+t)}function Ea(t,e,i,r,n,o,a,s,l,c){var h=qr(),u=h.invert,f=h.domain,d=c(".%L"),p=c(":%S"),g=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),_=c("%b %d"),b=c("%B"),C=c("%Y");function x(t){return(l(t)<t?d:s(t)<t?p:a(t)<t?g:o(t)<t?m:r(t)<t?n(t)<t?y:_:i(t)<t?b:C)(t)}return h.invert=function(t){return new Date(u(t))},h.domain=function(t){return arguments.length?f(Array.from(t,Aa)):f().map(La)},h.ticks=function(e){var i=f();return t(i[0],i[i.length-1],null==e?10:e)},h.tickFormat=function(t,e){return null==e?x:c(e)},h.nice=function(t){var i=f();return t&&"function"==typeof t.range||(t=e(i[0],i[i.length-1],null==t?10:t)),t?f(function(t,e){var i,r=0,n=(t=t.slice()).length-1,o=t[r],a=t[n];return a<o&&(i=r,r=n,n=i,i=o,o=a,a=i),t[r]=e.floor(o),t[n]=e.ceil(a),t}(i,t)):h},h.copy=function(){return jr(h,Ea(t,e,i,r,n,o,a,s,l,c))},h}function Oa(){return Pr.apply(Ea(oo,ao,to,Qn,$n,On,An,Fn,Mn,uo).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Na(t){return"string"==typeof t?new Ft([[document.querySelector(t)]],[document.documentElement]):new Ft([[t]],Mt)}function Da(t){return"string"==typeof t?new Ft([document.querySelectorAll(t)],[document.documentElement]):new Ft([x(t)],Mt)}function Ia(t){return function(){return t}}!function(t){ho=function(t){var e=t.dateTime,i=t.date,r=t.time,n=t.periods,o=t.days,a=t.shortDays,s=t.months,l=t.shortMonths,c=bo(n),h=Co(n),u=bo(o),f=Co(o),d=bo(a),p=Co(a),g=bo(s),m=Co(s),y=bo(l),_=Co(l),b={a:function(t){return a[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:Ro,e:Ro,f:Ho,g:ra,G:oa,H:qo,I:Po,j:Wo,L:Uo,m:Yo,M:Vo,p:function(t){return n[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Ma,s:Fa,S:Go,u:Xo,U:Jo,V:Ko,w:ta,W:ea,x:null,X:null,y:ia,Y:na,Z:aa,"%":Ba},C={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:sa,e:sa,f:fa,g:ka,G:Ta,H:la,I:ca,j:ha,L:ua,m:da,M:pa,p:function(t){return n[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Ma,s:Fa,S:ga,u:ma,U:ya,V:ba,w:Ca,W:xa,x:null,X:null,y:va,Y:wa,Z:Sa,"%":Ba},x={a:function(t,e,i){var r=d.exec(e.slice(i));return r?(t.w=p.get(r[0].toLowerCase()),i+r[0].length):-1},A:function(t,e,i){var r=u.exec(e.slice(i));return r?(t.w=f.get(r[0].toLowerCase()),i+r[0].length):-1},b:function(t,e,i){var r=y.exec(e.slice(i));return r?(t.m=_.get(r[0].toLowerCase()),i+r[0].length):-1},B:function(t,e,i){var r=g.exec(e.slice(i));return r?(t.m=m.get(r[0].toLowerCase()),i+r[0].length):-1},c:function(t,i,r){return w(t,e,i,r)},d:Ao,e:Ao,f:$o,g:Bo,G:So,H:Oo,I:Oo,j:Eo,L:Io,m:Lo,M:No,p:function(t,e,i){var r=c.exec(e.slice(i));return r?(t.p=h.get(r[0].toLowerCase()),i+r[0].length):-1},q:Fo,Q:Zo,s:jo,S:Do,u:vo,U:ko,V:wo,w:xo,W:To,x:function(t,e,r){return w(t,i,e,r)},X:function(t,e,i){return w(t,r,e,i)},y:Bo,Y:So,Z:Mo,"%":zo};function v(t,e){return function(i){var r,n,o,a=[],s=-1,l=0,c=t.length;for(i instanceof Date||(i=new Date(+i));++s<c;)37===t.charCodeAt(s)&&(a.push(t.slice(l,s)),null!=(n=fo[r=t.charAt(++s)])?r=t.charAt(++s):n="e"===r?" ":"0",(o=e[r])&&(r=o(i,n)),a.push(r),l=s+1);return a.push(t.slice(l,s)),a.join("")}}function k(t,e){return function(i){var r,n,o=co(1900,void 0,1);if(w(o,t,i+="",0)!=i.length)return null;if("Q"in o)return new Date(o.Q);if("s"in o)return new Date(1e3*o.s+("L"in o?o.L:0));if(e&&!("Z"in o)&&(o.Z=0),"p"in o&&(o.H=o.H%12+12*o.p),void 0===o.m&&(o.m="q"in o?o.q:0),"V"in o){if(o.V<1||o.V>53)return null;"w"in o||(o.w=1),"Z"in o?(n=(r=lo(co(o.y,0,1))).getUTCDay(),r=n>4||0===n?Hn.ceil(r):Hn(r),r=Nn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(n=(r=so(co(o.y,0,1))).getDay(),r=n>4||0===n?zn.ceil(r):zn(r),r=On.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),n="Z"in o?lo(co(o.y,0,1)).getUTCDay():so(co(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(n+5)%7:o.w+7*o.U-(n+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,lo(o)):so(o)}}function w(t,e,i,r){for(var n,o,a=0,s=e.length,l=i.length;a<s;){if(r>=l)return-1;if(37===(n=e.charCodeAt(a++))){if(n=e.charAt(a++),!(o=x[n in fo?e.charAt(a++):n])||(r=o(t,i,r))<0)return-1}else if(n!=i.charCodeAt(r++))return-1}return r}return b.x=v(i,b),b.X=v(r,b),b.c=v(e,b),C.x=v(i,C),C.X=v(r,C),C.c=v(e,C),{format:function(t){var e=v(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=v(t+="",C);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}(t),uo=ho.format,ho.parse,ho.utcFormat,ho.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const $a=Math.abs,za=Math.atan2,Za=Math.cos,ja=Math.max,Ra=Math.min,qa=Math.sin,Pa=Math.sqrt,Wa=1e-12,Ua=Math.PI,Ha=Ua/2,Ya=2*Ua;function Va(t){return t>=1?Ha:t<=-1?-Ha:Math.asin(t)}const Ga=Math.PI,Xa=2*Ga,Ja=1e-6,Qa=Xa-Ja;function Ka(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=arguments[e]+t[e]}class ts{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?Ka:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Ka;const i=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*i)/i+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,i,r){this._append`Q${+t},${+e},${this._x1=+i},${this._y1=+r}`}bezierCurveTo(t,e,i,r,n,o){this._append`C${+t},${+e},${+i},${+r},${this._x1=+n},${this._y1=+o}`}arcTo(t,e,i,r,n){if(t=+t,e=+e,i=+i,r=+r,(n=+n)<0)throw new Error(`negative radius: ${n}`);let o=this._x1,a=this._y1,s=i-t,l=r-e,c=o-t,h=a-e,u=c*c+h*h;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(u>Ja)if(Math.abs(h*s-l*c)>Ja&&n){let f=i-o,d=r-a,p=s*s+l*l,g=f*f+d*d,m=Math.sqrt(p),y=Math.sqrt(u),_=n*Math.tan((Ga-Math.acos((p+u-g)/(2*m*y)))/2),b=_/y,C=_/m;Math.abs(b-1)>Ja&&this._append`L${t+b*c},${e+b*h}`,this._append`A${n},${n},0,0,${+(h*f>c*d)},${this._x1=t+C*s},${this._y1=e+C*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,i,r,n,o){if(t=+t,e=+e,o=!!o,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=i*Math.cos(r),s=i*Math.sin(r),l=t+a,c=e+s,h=1^o,u=o?r-n:n-r;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>Ja||Math.abs(this._y1-c)>Ja)&&this._append`L${l},${c}`,i&&(u<0&&(u=u%Xa+Xa),u>Qa?this._append`A${i},${i},0,1,${h},${t-a},${e-s}A${i},${i},0,1,${h},${this._x1=l},${this._y1=c}`:u>Ja&&this._append`A${i},${i},0,${+(u>=Ga)},${h},${this._x1=t+i*Math.cos(n)},${this._y1=e+i*Math.sin(n)}`)}rect(t,e,i,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${i=+i}v${+r}h${-i}Z`}toString(){return this._}}function es(t){let e=3;return t.digits=function(i){if(!arguments.length)return e;if(null==i)e=null;else{const t=Math.floor(i);if(!(t>=0))throw new RangeError(`invalid digits: ${i}`);e=t}return t},()=>new ts(e)}function is(t){return t.innerRadius}function rs(t){return t.outerRadius}function ns(t){return t.startAngle}function os(t){return t.endAngle}function as(t){return t&&t.padAngle}function ss(t,e,i,r,n,o,a){var s=t-i,l=e-r,c=(a?o:-o)/Pa(s*s+l*l),h=c*l,u=-c*s,f=t+h,d=e+u,p=i+h,g=r+u,m=(f+p)/2,y=(d+g)/2,_=p-f,b=g-d,C=_*_+b*b,x=n-o,v=f*g-p*d,k=(b<0?-1:1)*Pa(ja(0,x*x*C-v*v)),w=(v*b-_*k)/C,T=(-v*_-b*k)/C,S=(v*b+_*k)/C,B=(-v*_+b*k)/C,M=w-m,F=T-y,L=S-m,A=B-y;return M*M+F*F>L*L+A*A&&(w=S,T=B),{cx:w,cy:T,x01:-h,y01:-u,x11:w*(n/x-1),y11:T*(n/x-1)}}function ls(){var t=is,e=rs,i=Ia(0),r=null,n=ns,o=os,a=as,s=null,l=es(c);function c(){var c,h,u,f=+t.apply(this,arguments),d=+e.apply(this,arguments),p=n.apply(this,arguments)-Ha,g=o.apply(this,arguments)-Ha,m=$a(g-p),y=g>p;if(s||(s=c=l()),d<f&&(h=d,d=f,f=h),d>Wa)if(m>Ya-Wa)s.moveTo(d*Za(p),d*qa(p)),s.arc(0,0,d,p,g,!y),f>Wa&&(s.moveTo(f*Za(g),f*qa(g)),s.arc(0,0,f,g,p,y));else{var _,b,C=p,x=g,v=p,k=g,w=m,T=m,S=a.apply(this,arguments)/2,B=S>Wa&&(r?+r.apply(this,arguments):Pa(f*f+d*d)),M=Ra($a(d-f)/2,+i.apply(this,arguments)),F=M,L=M;if(B>Wa){var A=Va(B/f*qa(S)),E=Va(B/d*qa(S));(w-=2*A)>Wa?(v+=A*=y?1:-1,k-=A):(w=0,v=k=(p+g)/2),(T-=2*E)>Wa?(C+=E*=y?1:-1,x-=E):(T=0,C=x=(p+g)/2)}var O=d*Za(C),N=d*qa(C),D=f*Za(k),I=f*qa(k);if(M>Wa){var $,z=d*Za(x),Z=d*qa(x),j=f*Za(v),R=f*qa(v);if(m<Ua)if($=function(t,e,i,r,n,o,a,s){var l=i-t,c=r-e,h=a-n,u=s-o,f=u*l-h*c;if(!(f*f<Wa))return[t+(f=(h*(e-o)-u*(t-n))/f)*l,e+f*c]}(O,N,j,R,z,Z,D,I)){var q=O-$[0],P=N-$[1],W=z-$[0],U=Z-$[1],H=1/qa(((u=(q*W+P*U)/(Pa(q*q+P*P)*Pa(W*W+U*U)))>1?0:u<-1?Ua:Math.acos(u))/2),Y=Pa($[0]*$[0]+$[1]*$[1]);F=Ra(M,(f-Y)/(H-1)),L=Ra(M,(d-Y)/(H+1))}else F=L=0}T>Wa?L>Wa?(_=ss(j,R,O,N,d,L,y),b=ss(z,Z,D,I,d,L,y),s.moveTo(_.cx+_.x01,_.cy+_.y01),L<M?s.arc(_.cx,_.cy,L,za(_.y01,_.x01),za(b.y01,b.x01),!y):(s.arc(_.cx,_.cy,L,za(_.y01,_.x01),za(_.y11,_.x11),!y),s.arc(0,0,d,za(_.cy+_.y11,_.cx+_.x11),za(b.cy+b.y11,b.cx+b.x11),!y),s.arc(b.cx,b.cy,L,za(b.y11,b.x11),za(b.y01,b.x01),!y))):(s.moveTo(O,N),s.arc(0,0,d,C,x,!y)):s.moveTo(O,N),f>Wa&&w>Wa?F>Wa?(_=ss(D,I,z,Z,f,-F,y),b=ss(O,N,j,R,f,-F,y),s.lineTo(_.cx+_.x01,_.cy+_.y01),F<M?s.arc(_.cx,_.cy,F,za(_.y01,_.x01),za(b.y01,b.x01),!y):(s.arc(_.cx,_.cy,F,za(_.y01,_.x01),za(_.y11,_.x11),!y),s.arc(0,0,f,za(_.cy+_.y11,_.cx+_.x11),za(b.cy+b.y11,b.cx+b.x11),y),s.arc(b.cx,b.cy,F,za(b.y11,b.x11),za(b.y01,b.x01),!y))):s.arc(0,0,f,k,v,y):s.lineTo(D,I)}else s.moveTo(0,0);if(s.closePath(),c)return s=null,c+""||null}return c.centroid=function(){var i=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+n.apply(this,arguments)+ +o.apply(this,arguments))/2-Ua/2;return[Za(r)*i,qa(r)*i]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Ia(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Ia(+t),c):e},c.cornerRadius=function(t){return arguments.length?(i="function"==typeof t?t:Ia(+t),c):i},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Ia(+t),c):r},c.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:Ia(+t),c):n},c.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:Ia(+t),c):o},c.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ia(+t),c):a},c.context=function(t){return arguments.length?(s=null==t?null:t,c):s},c}ts.prototype;Array.prototype.slice;function cs(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function hs(t){this._context=t}function us(t){return new hs(t)}function fs(t){return t[0]}function ds(t){return t[1]}function ps(t,e){var i=Ia(!0),r=null,n=us,o=null,a=es(s);function s(s){var l,c,h,u=(s=cs(s)).length,f=!1;for(null==r&&(o=n(h=a())),l=0;l<=u;++l)!(l<u&&i(c=s[l],l,s))===f&&((f=!f)?o.lineStart():o.lineEnd()),f&&o.point(+t(c,l,s),+e(c,l,s));if(h)return o=null,h+""||null}return t="function"==typeof t?t:void 0===t?fs:Ia(t),e="function"==typeof e?e:void 0===e?ds:Ia(e),s.x=function(e){return arguments.length?(t="function"==typeof e?e:Ia(+e),s):t},s.y=function(t){return arguments.length?(e="function"==typeof t?t:Ia(+t),s):e},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:Ia(!!t),s):i},s.curve=function(t){return arguments.length?(n=t,null!=r&&(o=n(r)),s):n},s.context=function(t){return arguments.length?(null==t?r=o=null:o=n(r=t),s):r},s}function gs(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function ms(t){return t}function ys(){var t=ms,e=gs,i=null,r=Ia(0),n=Ia(Ya),o=Ia(0);function a(a){var s,l,c,h,u,f=(a=cs(a)).length,d=0,p=new Array(f),g=new Array(f),m=+r.apply(this,arguments),y=Math.min(Ya,Math.max(-Ya,n.apply(this,arguments)-m)),_=Math.min(Math.abs(y)/f,o.apply(this,arguments)),b=_*(y<0?-1:1);for(s=0;s<f;++s)(u=g[p[s]=s]=+t(a[s],s,a))>0&&(d+=u);for(null!=e?p.sort((function(t,i){return e(g[t],g[i])})):null!=i&&p.sort((function(t,e){return i(a[t],a[e])})),s=0,c=d?(y-f*b)/d:0;s<f;++s,m=h)l=p[s],h=m+((u=g[l])>0?u*c:0)+b,g[l]={data:a[l],index:s,value:u,startAngle:m,endAngle:h,padAngle:_};return g}return a.value=function(e){return arguments.length?(t="function"==typeof e?e:Ia(+e),a):t},a.sortValues=function(t){return arguments.length?(e=t,i=null,a):e},a.sort=function(t){return arguments.length?(i=t,e=null,a):i},a.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Ia(+t),a):r},a.endAngle=function(t){return arguments.length?(n="function"==typeof t?t:Ia(+t),a):n},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Ia(+t),a):o},a}function _s(){}function bs(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function Cs(t){this._context=t}function xs(t){return new Cs(t)}function vs(t){this._context=t}function ks(t){return new vs(t)}function ws(t){this._context=t}function Ts(t){return new ws(t)}hs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},Cs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:bs(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},vs.prototype={areaStart:_s,areaEnd:_s,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ws.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Ss{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Bs(t){return new Ss(t,!0)}function Ms(t){return new Ss(t,!1)}function Fs(t,e){this._basis=new Cs(t),this._beta=e}Fs.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r,n=t[0],o=e[0],a=t[i]-n,s=e[i]-o,l=-1;++l<=i;)r=l/i,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+r*a),this._beta*e[l]+(1-this._beta)*(o+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Ls=function t(e){function i(t){return 1===e?new Cs(t):new Fs(t,e)}return i.beta=function(e){return t(+e)},i}(.85);function As(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function Es(t,e){this._context=t,this._k=(1-e)/6}Es.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:As(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:As(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Os=function t(e){function i(t){return new Es(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Ns(t,e){this._context=t,this._k=(1-e)/6}Ns.prototype={areaStart:_s,areaEnd:_s,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:As(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ds=function t(e){function i(t){return new Ns(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Is(t,e){this._context=t,this._k=(1-e)/6}Is.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:As(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const $s=function t(e){function i(t){return new Is(t,e)}return i.tension=function(e){return t(+e)},i}(0);function zs(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Wa){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Wa){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*c+t._x1*t._l23_2a-e*t._l12_2a)/h,a=(a*c+t._y1*t._l23_2a-i*t._l12_2a)/h}t._context.bezierCurveTo(r,n,o,a,t._x2,t._y2)}function Zs(t,e){this._context=t,this._alpha=e}Zs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const js=function t(e){function i(t){return e?new Zs(t,e):new Es(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Rs(t,e){this._context=t,this._alpha=e}Rs.prototype={areaStart:_s,areaEnd:_s,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const qs=function t(e){function i(t){return e?new Rs(t,e):new Ns(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ps(t,e){this._context=t,this._alpha=e}Ps.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ws=function t(e){function i(t){return e?new Ps(t,e):new Is(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Us(t){this._context=t}function Hs(t){return new Us(t)}function Ys(t){return t<0?-1:1}function Vs(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),a=(i-t._y1)/(n||r<0&&-0),s=(o*n+a*r)/(r+n);return(Ys(o)+Ys(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Gs(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Xs(t,e,i){var r=t._x0,n=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,n+s*e,o-s,a-s*i,o,a)}function Js(t){this._context=t}function Qs(t){this._context=new Ks(t)}function Ks(t){this._context=t}function tl(t){return new Js(t)}function el(t){return new Qs(t)}function il(t){this._context=t}function rl(t){var e,i,r=t.length-1,n=new Array(r),o=new Array(r),a=new Array(r);for(n[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e<r-1;++e)n[e]=1,o[e]=4,a[e]=4*t[e]+2*t[e+1];for(n[r-1]=2,o[r-1]=7,a[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)i=n[e]/o[e-1],o[e]-=i,a[e]-=i*a[e-1];for(n[r-1]=a[r-1]/o[r-1],e=r-2;e>=0;--e)n[e]=(a[e]-n[e+1])/o[e];for(o[r-1]=(t[r]+n[r-1])/2,e=0;e<r-1;++e)o[e]=2*t[e+1]-n[e+1];return[n,o]}function nl(t){return new il(t)}function ol(t,e){this._context=t,this._t=e}function al(t){return new ol(t,.5)}function sl(t){return new ol(t,0)}function ll(t){return new ol(t,1)}function cl(t,e,i){this.k=t,this.x=e,this.y=i}Us.prototype={areaStart:_s,areaEnd:_s,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Js.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Xs(this,this._t0,Gs(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Xs(this,Gs(this,i=Vs(this,t,e)),i);break;default:Xs(this,this._t0,i=Vs(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}},(Qs.prototype=Object.create(Js.prototype)).point=function(t,e){Js.prototype.point.call(this,e,t)},Ks.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}},il.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===i)this._context.lineTo(t[1],e[1]);else for(var r=rl(t),n=rl(e),o=0,a=1;a<i;++o,++a)this._context.bezierCurveTo(r[0][o],n[0][o],r[1][o],n[1][o],t[a],e[a]);(this._line||0!==this._line&&1===i)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},ol.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}}this._x=t,this._y=e}},cl.prototype={constructor:cl,scale:function(t){return 1===t?this:new cl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new cl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new cl(1,0,0);cl.prototype},1883:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(1691),n=i(2142);const o=class{constructor(){this.type=n.w.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=n.w.ALL}is(t){return this.type===t}};const a=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new o}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=n.w.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:i,l:n}=t;void 0===e&&(t.h=r.Z.channel.rgb2hsl(t,"h")),void 0===i&&(t.s=r.Z.channel.rgb2hsl(t,"s")),void 0===n&&(t.l=r.Z.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:i,b:n}=t;void 0===e&&(t.r=r.Z.channel.hsl2rgb(t,"r")),void 0===i&&(t.g=r.Z.channel.hsl2rgb(t,"g")),void 0===n&&(t.b=r.Z.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(n.w.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(n.w.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(n.w.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(n.w.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(n.w.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(n.w.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},1610:(t,e,i)=>{"use strict";i.d(e,{Z:()=>g});var r=i(1883),n=i(2142);const o={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(o.re);if(!e)return;const i=e[1],n=parseInt(i,16),a=i.length,s=a%4==0,l=a>4,c=l?1:17,h=l?8:4,u=s?0:-1,f=l?255:15;return r.Z.set({r:(n>>h*(u+3)&f)*c,g:(n>>h*(u+2)&f)*c,b:(n>>h*(u+1)&f)*c,a:s?(n&f)*c/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:o}=t;return o<1?`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}${n.Q[Math.round(255*o)]}`:`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}`}},a=o;var s=i(1691);const l={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(l.hueRe);if(e){const[,t,i]=e;switch(i){case"grad":return s.Z.channel.clamp.h(.9*parseFloat(t));case"rad":return s.Z.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.Z.channel.clamp.h(360*parseFloat(t))}}return s.Z.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const i=t.match(l.re);if(!i)return;const[,n,o,a,c,h]=i;return r.Z.set({h:l._hue2deg(n),s:s.Z.channel.clamp.s(parseFloat(o)),l:s.Z.channel.clamp.l(parseFloat(a)),a:c?s.Z.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}%, ${s.Z.lang.round(r)}%, ${n})`:`hsl(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}%, ${s.Z.lang.round(r)}%)`}},c=l,h={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=h.colors[t];if(e)return a.parse(e)},stringify:t=>{const e=a.stringify(t);for(const i in h.colors)if(h.colors[i]===e)return i}},u=h,f={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const i=t.match(f.re);if(!i)return;const[,n,o,a,l,c,h,u,d]=i;return r.Z.set({r:s.Z.channel.clamp.r(o?2.55*parseFloat(n):parseFloat(n)),g:s.Z.channel.clamp.g(l?2.55*parseFloat(a):parseFloat(a)),b:s.Z.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?s.Z.channel.clamp.a(d?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}, ${s.Z.lang.round(r)}, ${s.Z.lang.round(n)})`:`rgb(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}, ${s.Z.lang.round(r)})`}},d=f,p={format:{keyword:h,hex:a,rgb:f,rgba:f,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=a.parse(t)||d.parse(t)||c.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(n.w.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?d.stringify(t):a.stringify(t)},g=p},2142:(t,e,i)=>{"use strict";i.d(e,{Q:()=>n,w:()=>o});var r=i(1691);const n={};for(let a=0;a<=255;a++)n[a]=r.Z.unit.dec2hex(a);const o={ALL:0,RGB:1,HSL:2}},6174:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(1691),n=i(1610);const o=(t,e,i)=>{const o=n.Z.parse(t),a=o[e],s=r.Z.channel.clamp[e](a+i);return a!==s&&(o[e]=s),n.Z.stringify(o)}},7201:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(6174);const n=(t,e)=>(0,r.Z)(t,"l",-e)},2281:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(6174);const n=(t,e)=>(0,r.Z)(t,"l",e)},1691:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});const r={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},n)=>{if(!e)return 2.55*i;t/=360,e/=100;const o=(i/=100)<.5?i*(1+e):i+e-i*e,a=2*i-o;switch(n){case"r":return 255*r.hue2rgb(a,o,t+1/3);case"g":return 255*r.hue2rgb(a,o,t);case"b":return 255*r.hue2rgb(a,o,t-1/3)}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),a=(n+o)/2;if("l"===r)return 100*a;if(n===o)return 0;const s=n-o;if("s"===r)return 100*(a>.5?s/(2-n-o):s/(n+o));switch(n){case t:return 60*((e-i)/s+(e<i?6:0));case e:return 60*((i-t)/s+2);case i:return 60*((t-e)/s+4);default:return-1}}},n={channel:r,lang:{clamp:(t,e,i)=>e>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},7308:(t,e,i)=>{"use strict";i.d(e,{Z:()=>f});const r=function(){this.__data__=[],this.size=0};var n=i(9651);const o=function(t,e){for(var i=t.length;i--;)if((0,n.Z)(t[i][0],e))return i;return-1};var a=Array.prototype.splice;const s=function(t){var e=this.__data__,i=o(e,t);return!(i<0)&&(i==e.length-1?e.pop():a.call(e,i,1),--this.size,!0)};const l=function(t){var e=this.__data__,i=o(e,t);return i<0?void 0:e[i][1]};const c=function(t){return o(this.__data__,t)>-1};const h=function(t,e){var i=this.__data__,r=o(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=s,u.prototype.get=l,u.prototype.has=c,u.prototype.set=h;const f=u},6183:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(2508),n=i(6092);const o=(0,r.Z)(n.Z,"Map")},7834:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});const r=(0,i(2508).Z)(Object,"create");const n=function(){this.__data__=r?r(null):{},this.size=0};const o=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var a=Object.prototype.hasOwnProperty;const s=function(t){var e=this.__data__;if(r){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return a.call(e,t)?e[t]:void 0};var l=Object.prototype.hasOwnProperty;const c=function(t){var e=this.__data__;return r?void 0!==e[t]:l.call(e,t)};const h=function(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=s,u.prototype.has=c,u.prototype.set=h;const f=u;var d=i(7308),p=i(6183);const g=function(){this.size=0,this.__data__={hash:new f,map:new(p.Z||d.Z),string:new f}};const m=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const y=function(t,e){var i=t.__data__;return m(e)?i["string"==typeof e?"string":"hash"]:i.map};const _=function(t){var e=y(this,t).delete(t);return this.size-=e?1:0,e};const b=function(t){return y(this,t).get(t)};const C=function(t){return y(this,t).has(t)};const x=function(t,e){var i=y(this,t),r=i.size;return i.set(t,e),this.size+=i.size==r?0:1,this};function v(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}v.prototype.clear=g,v.prototype.delete=_,v.prototype.get=b,v.prototype.has=C,v.prototype.set=x;const k=v},3203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(2508),n=i(6092);const o=(0,r.Z)(n.Z,"Set")},7685:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(6092).Z.Symbol},3589:(t,e,i)=>{"use strict";i.d(e,{Z:()=>f});var r=i(7685),n=Object.prototype,o=n.hasOwnProperty,a=n.toString,s=r.Z?r.Z.toStringTag:void 0;const l=function(t){var e=o.call(t,s),i=t[s];try{t[s]=void 0;var r=!0}catch(l){}var n=a.call(t);return r&&(e?t[s]=i:delete t[s]),n};var c=Object.prototype.toString;const h=function(t){return c.call(t)};var u=r.Z?r.Z.toStringTag:void 0;const f=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)}},9473:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(2764);const n=(0,i(1851).Z)(Object.keys,Object);var o=Object.prototype.hasOwnProperty;const a=function(t){if(!(0,r.Z)(t))return n(t);var e=[];for(var i in Object(t))o.call(t,i)&&"constructor"!=i&&e.push(i);return e}},1162:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e){return t(e)}}},3413:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},2508:(t,e,i)=>{"use strict";i.d(e,{Z:()=>_});var r=i(3234);const n=i(6092).Z["__core-js_shared__"];var o,a=(o=/[^.]+$/.exec(n&&n.keys&&n.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";const s=function(t){return!!a&&a in t};var l=i(7226),c=i(19),h=/^\[object .+?Constructor\]$/,u=Function.prototype,f=Object.prototype,d=u.toString,p=f.hasOwnProperty,g=RegExp("^"+d.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const m=function(t){return!(!(0,l.Z)(t)||s(t))&&((0,r.Z)(t)?g:h).test((0,c.Z)(t))};const y=function(t,e){return null==t?void 0:t[e]};const _=function(t,e){var i=y(t,e);return m(i)?i:void 0}},3970:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});var r=i(2508),n=i(6092);const o=(0,r.Z)(n.Z,"DataView");var a=i(6183);const s=(0,r.Z)(n.Z,"Promise");var l=i(3203);const c=(0,r.Z)(n.Z,"WeakMap");var h=i(3589),u=i(19),f="[object Map]",d="[object Promise]",p="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.Z)(o),_=(0,u.Z)(a.Z),b=(0,u.Z)(s),C=(0,u.Z)(l.Z),x=(0,u.Z)(c),v=h.Z;(o&&v(new o(new ArrayBuffer(1)))!=m||a.Z&&v(new a.Z)!=f||s&&v(s.resolve())!=d||l.Z&&v(new l.Z)!=p||c&&v(new c)!=g)&&(v=function(t){var e=(0,h.Z)(t),i="[object Object]"==e?t.constructor:void 0,r=i?(0,u.Z)(i):"";if(r)switch(r){case y:return m;case _:return f;case b:return d;case C:return p;case x:return g}return e});const k=v},2764:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Object.prototype;const n=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},8351:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(3413),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n&&r.Z.process;const s=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}()},1851:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return function(i){return t(e(i))}}},6092:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(3413),n="object"==typeof self&&self&&self.Object===Object&&self;const o=r.Z||n||Function("return this")()},19:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Function.prototype.toString;const n=function(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},9651:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},9169:(t,e,i)=>{"use strict";i.d(e,{Z:()=>c});var r=i(3589),n=i(8533);const o=function(t){return(0,n.Z)(t)&&"[object Arguments]"==(0,r.Z)(t)};var a=Object.prototype,s=a.hasOwnProperty,l=a.propertyIsEnumerable;const c=o(function(){return arguments}())?o:function(t){return(0,n.Z)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},7771:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=Array.isArray},585:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(3234),n=i(1656);const o=function(t){return null!=t&&(0,n.Z)(t.length)&&!(0,r.Z)(t)}},7008:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(6092);const n=function(){return!1};var o="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=o&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===o?r.Z.Buffer:void 0;const l=(s?s.isBuffer:void 0)||n},9697:(t,e,i)=>{"use strict";i.d(e,{Z:()=>f});var r=i(9473),n=i(3970),o=i(9169),a=i(7771),s=i(585),l=i(7008),c=i(2764),h=i(8843),u=Object.prototype.hasOwnProperty;const f=function(t){if(null==t)return!0;if((0,s.Z)(t)&&((0,a.Z)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.Z)(t)||(0,h.Z)(t)||(0,o.Z)(t)))return!t.length;var e=(0,n.Z)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.Z)(t))return!(0,r.Z)(t).length;for(var i in t)if(u.call(t,i))return!1;return!0}},3234:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(3589),n=i(7226);const o=function(t){if(!(0,n.Z)(t))return!1;var e=(0,r.Z)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1656:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},7226:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},8533:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},8843:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(3589),n=i(1656),o=i(8533),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1;const s=function(t){return(0,o.Z)(t)&&(0,n.Z)(t.length)&&!!a[(0,r.Z)(t)]};var l=i(1162),c=i(8351),h=c.Z&&c.Z.isTypedArray;const u=h?(0,l.Z)(h):s},2454:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(7834);function n(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var i=function(){var r=arguments,n=e?e.apply(this,r):r[0],o=i.cache;if(o.has(n))return o.get(n);var a=t.apply(this,r);return i.cache=o.set(n,a)||o,a};return i.cache=new(n.Cache||r.Z),i}n.Cache=r.Z;const o=n},5657:(t,e,i)=>{"use strict";i.d(e,{G:()=>b});var r=i(7294);const n=function(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];var r=Array.from("string"==typeof t?[t]:t);r[r.length-1]=r[r.length-1].replace(/\r?\n([\t ]*)$/,"");var n=r.reduce((function(t,e){var i=e.match(/\n([\t ]+|(?!\s).)/g);return i?t.concat(i.map((function(t){var e,i;return null!==(i=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==i?i:0}))):t}),[]);if(n.length){var o=new RegExp("\n[\t ]{"+Math.min.apply(Math,n)+"}","g");r=r.map((function(t){return t.replace(o,"\n")}))}r[0]=r[0].replace(/^\r?\n/,"");var a=r[0];return e.forEach((function(t,e){var i=a.match(/(?:^|\n)( *)$/),n=i?i[1]:"",o=t;"string"==typeof t&&t.includes("\n")&&(o=String(t).split("\n").map((function(t,e){return 0===e?t:""+n+t})).join("\n")),a+=o+r[e+1]})),a};var o=i(44),a=i(1188),s=i(3047);i(7856),i(7484),i(7967),i(9373);const l=(t,e,i)=>{o.l.warn(t),(0,a.i)(t)?(i&&i(t.str,t.hash),e.push({...t,message:t.str,error:t})):(i&&i(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},c=async function(t={querySelector:".mermaid"}){try{await h(t)}catch(e){if((0,a.i)(e)&&o.l.error(e.str),y.parseError&&y.parseError(e),!t.suppressErrors)throw o.l.error("Use the suppressErrors option to suppress these errors"),e}},h=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const r=s.m.getConfig();let c;if(o.l.debug((t?"":"No ")+"Callback function found"),i)c=i;else{if(!e)throw new Error("Nodes and querySelector are both undefined");c=document.querySelectorAll(e)}o.l.debug(`Found ${c.length} diagrams`),void 0!==(null==r?void 0:r.startOnLoad)&&(o.l.debug("Start On Load: "+(null==r?void 0:r.startOnLoad)),s.m.updateSiteConfig({startOnLoad:null==r?void 0:r.startOnLoad}));const h=new a.u.initIdGenerator(r.deterministicIds,r.deterministicIDSeed);let u;const f=[];for(const s of Array.from(c)){if(o.l.info("Rendering diagram: "+s.id),s.getAttribute("data-processed"))continue;s.setAttribute("data-processed","true");const e=`mermaid-${h.next()}`;u=s.innerHTML,u=n(a.u.entityDecode(u)).trim().replace(/<br\s*\/?>/gi,"<br/>");const i=a.u.detectInit(u);i&&o.l.debug("Detected early reinit: ",i);try{const{svg:i,bindFunctions:r}=await m(e,u,s);s.innerHTML=i,t&&await t(e),r&&r(s)}catch(d){l(d,f,y.parseError)}}if(f.length>0)throw f[0]},u=function(t){s.m.initialize(t)},f=function(){if(y.startOnLoad){const{startOnLoad:t}=s.m.getConfig();t&&y.run().catch((t=>o.l.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",f,!1);const d=[];let p=!1;const g=async()=>{if(!p){for(p=!0;d.length>0;){const e=d.shift();if(e)try{await e()}catch(t){o.l.error("Error executing queue",t)}}p=!1}},m=(t,e,i)=>new Promise(((r,n)=>{d.push((()=>new Promise(((a,l)=>{s.m.render(t,e,i).then((t=>{a(t),r(t)}),(t=>{var e;o.l.error("Error parsing",t),null==(e=y.parseError)||e.call(y,t),l(t),n(t)}))})))),g().catch(n)})),y={startOnLoad:!0,mermaidAPI:s.m,parse:async(t,e)=>new Promise(((i,r)=>{d.push((()=>new Promise(((n,a)=>{s.m.parse(t,e).then((t=>{n(t),i(t)}),(t=>{var e;o.l.error("Error parsing",t),null==(e=y.parseError)||e.call(y,t),a(t),r(t)}))})))),g().catch(r)})),render:m,init:async function(t,e,i){o.l.warn("mermaid.init is deprecated. Please use run instead."),t&&u(t);const r={postRenderCallback:i,querySelector:".mermaid"};"string"==typeof e?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await c(r)},run:c,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{(0,a.r)(...t),!1===e&&await(0,a.l)()},initialize:u,parseError:void 0,contentLoaded:f,setParseErrorHandler:function(t){y.parseError=t},detectType:a.d},_="light";const b=({chart:t,config:e})=>{if("undefined"==typeof window)return r.createElement("div",{className:"mermaid","data-mermaid-src":t},t);const i=(0,r.useMemo)((()=>"string"==typeof e?JSON.parse(e):e),[e]),n=document.querySelector("html"),[o,a]=(0,r.useState)(!1),s=(0,r.useMemo)((()=>function(t,e){let i=t.getAttribute("data-theme")??_;i!==_&&"dark"!==i&&(i=_);const r=i===_?"default":"dark";return e?.theme?.[i]??e?.mermaid?.theme??r}(n,i)),[i,o]);return(0,r.useEffect)((()=>{const t=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&"data-theme"===e.attributeName){a((t=>!t));break}}));return t.observe(n,{attributes:!0}),()=>{try{t.disconnect()}catch{}}}),[]),(0,r.useEffect)((()=>{i&&(i.mermaid?y.initialize({startOnLoad:!0,...i.mermaid,theme:s}):y.initialize({startOnLoad:!0,theme:s}),document.querySelectorAll('div.mermaid[data-processed="true"]').forEach((t=>{t.removeAttribute("data-processed"),t.innerHTML=t.getAttribute("data-mermaid-src")})),y.contentLoaded())}),[i,s]),(0,r.useEffect)((()=>{document.querySelectorAll('div.mermaid[data-processed="true"]').forEach((t=>{t.removeAttribute("data-processed"),t.innerHTML=t.getAttribute("data-mermaid-src")})),setTimeout(y.contentLoaded,0)}),[t]),r.createElement("div",{className:"mermaid","data-mermaid-src":t},t)}},44:(t,e,i)=>{"use strict";i.d(e,{a:()=>Q,b:()=>x,c:()=>gt,d:()=>z,e:()=>B,f:()=>D,g:()=>X,h:()=>G,i:()=>V,j:()=>Z,k:()=>T,l:()=>m,m:()=>H,n:()=>U,o:()=>lt,p:()=>ct,q:()=>ut,r:()=>K,s:()=>y,t:()=>E,u:()=>Y,v:()=>ht,w:()=>ft,x:()=>dt,y:()=>st,z:()=>S});var r=i(7856),n=i(7484),o=i(1610),a=i(1691);const s=(t,e)=>{const i=o.Z.parse(t);for(const r in e)i[r]=a.Z.channel.clamp[r](e[r]);return o.Z.stringify(i)},l=(t,e)=>{const i=o.Z.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return s(t,r)};var c=i(1883);const h=(t,e,i=0,r=1)=>{if("number"!=typeof t)return s(t,{a:e});const n=c.Z.set({r:a.Z.channel.clamp.r(t),g:a.Z.channel.clamp.g(e),b:a.Z.channel.clamp.b(i),a:a.Z.channel.clamp.a(r)});return o.Z.stringify(n)},u=(t,e,i=50)=>{const{r:r,g:n,b:a,a:s}=o.Z.parse(t),{r:l,g:c,b:u,a:f}=o.Z.parse(e),d=i/100,p=2*d-1,g=s-f,m=((p*g==-1?p:(p+g)/(1+p*g))+1)/2,y=1-m;return h(r*m+l*y,n*m+c*y,a*m+u*y,s*d+f*(1-d))},f=(t,e=100)=>{const i=o.Z.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,u(i,t,e)};var d=i(7201),p=i(2281);const g={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},m={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},y=function(t="fatal"){let e=g.fatal;"string"==typeof t?(t=t.toLowerCase())in g&&(e=g[t]):"number"==typeof t&&(e=t),m.trace=()=>{},m.debug=()=>{},m.info=()=>{},m.warn=()=>{},m.error=()=>{},m.fatal=()=>{},e<=g.fatal&&(m.fatal=console.error?console.error.bind(console,_("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",_("FATAL"))),e<=g.error&&(m.error=console.error?console.error.bind(console,_("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",_("ERROR"))),e<=g.warn&&(m.warn=console.warn?console.warn.bind(console,_("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",_("WARN"))),e<=g.info&&(m.info=console.info?console.info.bind(console,_("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",_("INFO"))),e<=g.debug&&(m.debug=console.debug?console.debug.bind(console,_("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",_("DEBUG"))),e<=g.trace&&(m.trace=console.debug?console.debug.bind(console,_("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",_("TRACE")))},_=t=>`%c${n().format("ss.SSS")} : ${t} : `,b=t=>r.sanitize(t),C=(t,e)=>{var i;if(!1!==(null==(i=e.flowchart)?void 0:i.htmlLabels)){const i=e.securityLevel;"antiscript"===i||"strict"===i?t=b(t):"loose"!==i&&(t=(t=(t=w(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=k(t))}return t},x=(t,e)=>t?t=e.dompurifyConfig?r.sanitize(C(t,e),e.dompurifyConfig).toString():r.sanitize(C(t,e),{FORBID_TAGS:["style"]}).toString():t,v=/<br\s*\/?>/gi,k=t=>t.replace(/#br#/g,"<br/>"),w=t=>t.replace(v,"#br#"),T=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),S=function(t){let e=t;if(t.split("~").length-1>=2){let t=e;do{e=t,t=e.replace(/~([^\s,:;]+)~/,"<$1>")}while(t!=e);return S(t)}return e},B={getRows:t=>{if(!t)return[""];return w(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:x,sanitizeTextOrArray:(t,e)=>"string"==typeof t?x(t,e):t.flat().map((t=>x(t,e))),hasBreaks:t=>v.test(t),splitBreaks:t=>t.split(v),lineBreakRegex:v,removeScript:b,getUrl:t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},evaluate:T},M=(t,e)=>l(t,e?{s:-40,l:10}:{s:-40,l:-10}),F="#ffffff",L="#f2f2f2";class A{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,p.Z)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=l(this.primaryColor,{h:-160}),this.primaryBorderColor=M(this.primaryColor,this.darkMode),this.secondaryBorderColor=M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=M(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=(0,p.Z)(this.contrast,55),this.border2=this.contrast,this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||f(this["cScale"+t]);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this.darkMode?this["cScalePeer"+t]=this["cScalePeer"+t]||(0,p.Z)(this["cScale"+t],10):this["cScalePeer"+t]=this["cScalePeer"+t]||(0,d.Z)(this["cScale"+t],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||l(this.mainBkg,{l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||l(this.mainBkg,{l:-(8+5*t)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.actorBorder=(0,p.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.sectionBkgColor=(0,p.Z)(this.contrast,30),this.sectionBkgColor2=(0,p.Z)(this.contrast,30),this.taskBorderColor=(0,d.Z)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,p.Z)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,d.Z)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=l(this.primaryColor,{h:64}),this.fillType3=l(this.secondaryColor,{h:64}),this.fillType4=l(this.primaryColor,{h:-64}),this.fillType5=l(this.secondaryColor,{h:-64}),this.fillType6=l(this.primaryColor,{h:128}),this.fillType7=l(this.secondaryColor,{h:128});for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["pie"+t]=this["cScale"+t];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,d.Z)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||l(this.primaryColor,{h:-30}),this.git4=this.pie5||l(this.primaryColor,{h:-60}),this.git5=this.pie6||l(this.primaryColor,{h:-90}),this.git6=this.pie7||l(this.primaryColor,{h:60}),this.git7=this.pie8||l(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||F,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||L}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const E={base:{getThemeVariables:t=>{const e=new class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||l(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||l(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||M(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||M(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||M(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||f(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||f(this.tertiaryColor),this.lineColor=this.lineColor||f(this.background),this.textColor=this.textColor||this.primaryTextColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,d.Z)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,d.Z)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||f(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,p.Z)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||l(this.primaryColor,{h:30}),this.cScale4=this.cScale4||l(this.primaryColor,{h:60}),this.cScale5=this.cScale5||l(this.primaryColor,{h:90}),this.cScale6=this.cScale6||l(this.primaryColor,{h:120}),this.cScale7=this.cScale7||l(this.primaryColor,{h:150}),this.cScale8=this.cScale8||l(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||l(this.primaryColor,{h:270}),this.cScale10=this.cScale10||l(this.primaryColor,{h:300}),this.cScale11=this.cScale11||l(this.primaryColor,{h:330}),this.darkMode)for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=(0,d.Z)(this["cScale"+e],75);else for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=(0,d.Z)(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||f(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||(0,p.Z)(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||(0,d.Z)(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;const t=this.darkMode?-4:-1;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||l(this.mainBkg,{h:180,s:-15,l:t*(5+3*e)}),this["surfacePeer"+e]=this["surfacePeer"+e]||l(this.mainBkg,{h:180,s:-15,l:t*(8+3*e)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||l(this.primaryColor,{h:64}),this.fillType3=this.fillType3||l(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||l(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||l(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||l(this.primaryColor,{h:128}),this.fillType7=this.fillType7||l(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||l(this.primaryColor,{l:-10}),this.pie5=this.pie5||l(this.secondaryColor,{l:-10}),this.pie6=this.pie6||l(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||l(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||l(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||l(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||l(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||l(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||l(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,d.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||l(this.primaryColor,{h:-30}),this.git4=this.git4||l(this.primaryColor,{h:-60}),this.git5=this.git5||l(this.primaryColor,{h:-90}),this.git6=this.git6||l(this.primaryColor,{h:60}),this.git7=this.git7||l(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)):(this.git0=(0,d.Z)(this.git0,25),this.git1=(0,d.Z)(this.git1,25),this.git2=(0,d.Z)(this.git2,25),this.git3=(0,d.Z)(this.git3,25),this.git4=(0,d.Z)(this.git4,25),this.git5=(0,d.Z)(this.git5,25),this.git6=(0,d.Z)(this.git6,25),this.git7=(0,d.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||F,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||L}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,p.Z)(this.primaryColor,16),this.tertiaryColor=l(this.primaryColor,{h:-160}),this.primaryBorderColor=f(this.background),this.secondaryBorderColor=M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=M(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,p.Z)(f("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=h(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,d.Z)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.taskBorderColor=h(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=h(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=(0,p.Z)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,p.Z)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,p.Z)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=l(this.primaryColor,{h:64}),this.fillType3=l(this.secondaryColor,{h:64}),this.fillType4=l(this.primaryColor,{h:-64}),this.fillType5=l(this.secondaryColor,{h:-64}),this.fillType6=l(this.primaryColor,{h:128}),this.fillType7=l(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||l(this.primaryColor,{h:30}),this.cScale4=this.cScale4||l(this.primaryColor,{h:60}),this.cScale5=this.cScale5||l(this.primaryColor,{h:90}),this.cScale6=this.cScale6||l(this.primaryColor,{h:120}),this.cScale7=this.cScale7||l(this.primaryColor,{h:150}),this.cScale8=this.cScale8||l(this.primaryColor,{h:210}),this.cScale9=this.cScale9||l(this.primaryColor,{h:270}),this.cScale10=this.cScale10||l(this.primaryColor,{h:300}),this.cScale11=this.cScale11||l(this.primaryColor,{h:330});for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||f(this["cScale"+t]);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScalePeer"+t]=this["cScalePeer"+t]||(0,p.Z)(this["cScale"+t],10);for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||l(this.mainBkg,{h:30,s:-30,l:-(4*t-10)}),this["surfacePeer"+t]=this["surfacePeer"+t]||l(this.mainBkg,{h:30,s:-30,l:-(4*t-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["pie"+t]=this["cScale"+t];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,d.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,p.Z)(this.secondaryColor,20),this.git1=(0,p.Z)(this.pie2||this.secondaryColor,20),this.git2=(0,p.Z)(this.pie3||this.tertiaryColor,20),this.git3=(0,p.Z)(this.pie4||l(this.primaryColor,{h:-30}),20),this.git4=(0,p.Z)(this.pie5||l(this.primaryColor,{h:-60}),20),this.git5=(0,p.Z)(this.pie6||l(this.primaryColor,{h:-90}),10),this.git6=(0,p.Z)(this.pie7||l(this.primaryColor,{h:60}),10),this.git7=(0,p.Z)(this.pie8||l(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,p.Z)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,p.Z)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};return e.calculate(t),e}},default:{getThemeVariables:t=>{const e=new class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=l(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=l(this.primaryColor,{h:-160}),this.primaryBorderColor=M(this.primaryColor,this.darkMode),this.secondaryBorderColor=M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=M(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=h(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||l(this.primaryColor,{h:30}),this.cScale4=this.cScale4||l(this.primaryColor,{h:60}),this.cScale5=this.cScale5||l(this.primaryColor,{h:90}),this.cScale6=this.cScale6||l(this.primaryColor,{h:120}),this.cScale7=this.cScale7||l(this.primaryColor,{h:150}),this.cScale8=this.cScale8||l(this.primaryColor,{h:210}),this.cScale9=this.cScale9||l(this.primaryColor,{h:270}),this.cScale10=this.cScale10||l(this.primaryColor,{h:300}),this.cScale11=this.cScale11||l(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,d.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,d.Z)(this.tertiaryColor,40);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScale"+t]=(0,d.Z)(this["cScale"+t],10),this["cScalePeer"+t]=this["cScalePeer"+t]||(0,d.Z)(this["cScale"+t],25);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||l(this["cScale"+t],{h:180});for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||l(this.mainBkg,{h:30,l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||l(this.mainBkg,{h:30,l:-(7+5*t)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||f(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||f(this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=(0,p.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=l(this.primaryColor,{h:64}),this.fillType3=l(this.secondaryColor,{h:64}),this.fillType4=l(this.primaryColor,{h:-64}),this.fillType5=l(this.secondaryColor,{h:-64}),this.fillType6=l(this.primaryColor,{h:128}),this.fillType7=l(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||l(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||l(this.primaryColor,{l:-10}),this.pie5=this.pie5||l(this.secondaryColor,{l:-30}),this.pie6=this.pie6||l(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||l(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||l(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||l(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||l(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||l(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||l(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||l(this.primaryColor,{h:-30}),this.git4=this.git4||l(this.primaryColor,{h:-60}),this.git5=this.git5||l(this.primaryColor,{h:-90}),this.git6=this.git6||l(this.primaryColor,{h:60}),this.git7=this.git7||l(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)):(this.git0=(0,d.Z)(this.git0,25),this.git1=(0,d.Z)(this.git1,25),this.git2=(0,d.Z)(this.git2,25),this.git3=(0,d.Z)(this.git3,25),this.git4=(0,d.Z)(this.git4,25),this.git5=(0,d.Z)(this.git5,25),this.git6=(0,d.Z)(this.git6,25),this.git7=(0,d.Z)(this.git7,25)),this.gitInv0=this.gitInv0||(0,d.Z)(f(this.git0),25),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||F,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||L}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};return e.calculate(t),e}},forest:{getThemeVariables:t=>{const e=new class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,p.Z)("#cde498",10),this.primaryBorderColor=M(this.primaryColor,this.darkMode),this.secondaryBorderColor=M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=M(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.primaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||l(this.primaryColor,{h:30}),this.cScale4=this.cScale4||l(this.primaryColor,{h:60}),this.cScale5=this.cScale5||l(this.primaryColor,{h:90}),this.cScale6=this.cScale6||l(this.primaryColor,{h:120}),this.cScale7=this.cScale7||l(this.primaryColor,{h:150}),this.cScale8=this.cScale8||l(this.primaryColor,{h:210}),this.cScale9=this.cScale9||l(this.primaryColor,{h:270}),this.cScale10=this.cScale10||l(this.primaryColor,{h:300}),this.cScale11=this.cScale11||l(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,d.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,d.Z)(this.tertiaryColor,40);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScale"+t]=(0,d.Z)(this["cScale"+t],10),this["cScalePeer"+t]=this["cScalePeer"+t]||(0,d.Z)(this["cScale"+t],25);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||l(this["cScale"+t],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||l(this.mainBkg,{h:30,s:-30,l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||l(this.mainBkg,{h:30,s:-30,l:-(8+5*t)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.actorBorder=(0,d.Z)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=l(this.primaryColor,{h:64}),this.fillType3=l(this.secondaryColor,{h:64}),this.fillType4=l(this.primaryColor,{h:-64}),this.fillType5=l(this.secondaryColor,{h:-64}),this.fillType6=l(this.primaryColor,{h:128}),this.fillType7=l(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||l(this.primaryColor,{l:-30}),this.pie5=this.pie5||l(this.secondaryColor,{l:-30}),this.pie6=this.pie6||l(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||l(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||l(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||l(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||l(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||l(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||l(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||l(this.primaryColor,{h:-30}),this.git4=this.git4||l(this.primaryColor,{h:-60}),this.git5=this.git5||l(this.primaryColor,{h:-90}),this.git6=this.git6||l(this.primaryColor,{h:60}),this.git7=this.git7||l(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)):(this.git0=(0,d.Z)(this.git0,25),this.git1=(0,d.Z)(this.git1,25),this.git2=(0,d.Z)(this.git2,25),this.git3=(0,d.Z)(this.git3,25),this.git4=(0,d.Z)(this.git4,25),this.git5=(0,d.Z)(this.git5,25),this.git6=(0,d.Z)(this.git6,25),this.git7=(0,d.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||F,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||L}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new A;return e.calculate(t),e}}},O={theme:"default",themeVariables:E.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,deterministicIDSeed:void 0,flowchart:{titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,useMaxWidth:!0,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,displayMode:"",axisFormat:"%Y-%m-%d",tickInterval:void 0,useMaxWidth:!0,topAxis:!1,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},timeline:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},class:{titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},state:{titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},er:{titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0,textPosition:.75},requirement:{useWidth:void 0,useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},gitGraph:{titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0},c4:{useWidth:void 0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,useMaxWidth:!0,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},fontSize:16};O.class&&(O.class.arrowMarkerAbsolute=O.arrowMarkerAbsolute),O.gitGraph&&(O.gitGraph.arrowMarkerAbsolute=O.arrowMarkerAbsolute);const N=(t,e="")=>Object.keys(t).reduce(((i,r)=>Array.isArray(t[r])?i:"object"==typeof t[r]&&null!==t[r]?[...i,e+r,...N(t[r],"")]:[...i,e+r]),[]),D=N(O,""),I=O,$=function(t,e,i){const{depth:r,clobber:n}=Object.assign({depth:2,clobber:!1},i);return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>$(t,e,i))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||r<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((i=>{"object"!=typeof e[i]||void 0!==t[i]&&"object"!=typeof t[i]?(n||"object"!=typeof t[i]&&"object"!=typeof e[i])&&(t[i]=e[i]):(void 0===t[i]&&(t[i]=Array.isArray(e[i])?[]:{}),t[i]=$(t[i],e[i],{depth:r-1,clobber:n}))})),t)},z=$,Z=Object.freeze(I);let j,R=z({},Z),q=[],P=z({},Z);const W=(t,e)=>{let i=z({},t),r={};for(const n of e)J(n),r=z(r,n);if(i=z(i,r),r.theme&&r.theme in E){const t=z({},j),e=z(t.themeVariables||{},r.themeVariables);i.theme&&i.theme in E&&(i.themeVariables=E[i.theme].getThemeVariables(e))}return P=i,it(P),P},U=t=>(R=z({},Z),R=z(R,t),t.theme&&E[t.theme]&&(R.themeVariables=E[t.theme].getThemeVariables(t.themeVariables)),W(R,q),R),H=t=>{j=z({},t)},Y=t=>(R=z(R,t),W(R,q),R),V=()=>z({},R),G=t=>(it(t),z(P,t),X()),X=()=>z({},P),J=t=>{["secure",...R.secure??[]].forEach((e=>{void 0!==t[e]&&(m.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{0===e.indexOf("__")&&delete t[e]})),Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&J(t[e])}))},Q=t=>{t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),q.push(t),W(R,q)},K=(t=R)=>{q=[],W(t,q)};var tt=(t=>(t.LAZY_LOAD_DEPRECATED="The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",t))(tt||{});const et={},it=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(et[e="LAZY_LOAD_DEPRECATED"]||(m.warn(tt[e]),et[e]=!0)))};let rt="",nt="",ot="";const at=t=>x(t,X()),st=function(){rt="",ot="",nt=""},lt=function(t){rt=at(t).replace(/^\s+/g,"")},ct=function(){return rt||nt},ht=function(t){ot=at(t).replace(/\n\s+/g,"\n")},ut=function(){return ot},ft=function(t){nt=at(t)},dt=function(){return nt},pt={getAccTitle:ct,setAccTitle:lt,getDiagramTitle:dt,setDiagramTitle:ft,getAccDescription:ut,setAccDescription:ht,clear:st},gt=Object.freeze(Object.defineProperty({__proto__:null,clear:st,default:pt,getAccDescription:ut,getAccTitle:ct,getDiagramTitle:dt,setAccDescription:ht,setAccTitle:lt,setDiagramTitle:ft},Symbol.toStringTag,{value:"Module"}))},3047:(t,e,i)=>{"use strict";i.d(e,{a:()=>It,d:()=>Rt,m:()=>Ht});var r=i(9373),n="comm",o="rule",a="decl",s=Math.abs,l=String.fromCharCode;Object.assign;function c(t){return t.trim()}function h(t,e,i){return t.replace(e,i)}function u(t,e){return t.indexOf(e)}function f(t,e){return 0|t.charCodeAt(e)}function d(t,e,i){return t.slice(e,i)}function p(t){return t.length}function g(t){return t.length}function m(t,e){return e.push(t),t}function y(t,e){for(var i="",r=g(t),n=0;n<r;n++)i+=e(t[n],n,t,e)||"";return i}function _(t,e,i,r){switch(t.type){case"@import":case a:return t.return=t.return||t.value;case n:return"";case"@keyframes":return t.return=t.value+"{"+y(t.children,r)+"}";case o:t.value=t.props.join(",")}return p(i=y(t.children,r))?t.return=t.value+"{"+i+"}":""}var b=1,C=1,x=0,v=0,k=0,w="";function T(t,e,i,r,n,o,a){return{value:t,root:e,parent:i,type:r,props:n,children:o,line:b,column:C,length:a,return:""}}function S(){return k=v>0?f(w,--v):0,C--,10===k&&(C=1,b--),k}function B(){return k=v<x?f(w,v++):0,C++,10===k&&(C=1,b++),k}function M(){return f(w,v)}function F(){return v}function L(t,e){return d(w,t,e)}function A(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function E(t){return b=C=1,x=p(w=t),v=0,[]}function O(t){return w="",t}function N(t){return c(L(v-1,$(91===t?t+2:40===t?t+1:t)))}function D(t){for(;(k=M())&&k<33;)B();return A(t)>2||A(k)>3?"":" "}function I(t,e){for(;--e&&B()&&!(k<48||k>102||k>57&&k<65||k>70&&k<97););return L(t,F()+(e<6&&32==M()&&32==B()))}function $(t){for(;B();)switch(k){case t:return v;case 34:case 39:34!==t&&39!==t&&$(k);break;case 40:41===t&&$(t);break;case 92:B()}return v}function z(t,e){for(;B()&&t+k!==57&&(t+k!==84||47!==M()););return"/*"+L(e,v-1)+"*"+l(47===t?t:B())}function Z(t){for(;!A(M());)B();return L(t,v)}function j(t){return O(R("",null,null,null,[""],t=E(t),0,[0],t))}function R(t,e,i,r,n,o,a,s,c){for(var d=0,g=0,y=a,_=0,b=0,C=0,x=1,v=1,k=1,w=0,T="",L=n,A=o,E=r,O=T;v;)switch(C=w,w=B()){case 40:if(108!=C&&58==f(O,y-1)){-1!=u(O+=h(N(w),"&","&\f"),"&\f")&&(k=-1);break}case 34:case 39:case 91:O+=N(w);break;case 9:case 10:case 13:case 32:O+=D(C);break;case 92:O+=I(F()-1,7);continue;case 47:switch(M()){case 42:case 47:m(P(z(B(),F()),e,i),c);break;default:O+="/"}break;case 123*x:s[d++]=p(O)*k;case 125*x:case 59:case 0:switch(w){case 0:case 125:v=0;case 59+g:b>0&&p(O)-y&&m(b>32?W(O+";",r,i,y-1):W(h(O," ","")+";",r,i,y-2),c);break;case 59:O+=";";default:if(m(E=q(O,e,i,d,g,n,s,T,L=[],A=[],y),o),123===w)if(0===g)R(O,e,E,E,L,o,y,s,A);else switch(99===_&&110===f(O,3)?100:_){case 100:case 109:case 115:R(t,E,E,r&&m(q(t,E,E,0,0,n,s,T,n,L=[],y),A),n,A,y,s,r?L:A);break;default:R(O,E,E,E,[""],A,0,s,A)}}d=g=b=0,x=k=1,T=O="",y=a;break;case 58:y=1+p(O),b=C;default:if(x<1)if(123==w)--x;else if(125==w&&0==x++&&125==S())continue;switch(O+=l(w),w*x){case 38:k=g>0?1:(O+="\f",-1);break;case 44:s[d++]=(p(O)-1)*k,k=1;break;case 64:45===M()&&(O+=N(B())),_=M(),g=y=p(T=O+=Z(F())),w++;break;case 45:45===C&&2==p(O)&&(x=0)}}return o}function q(t,e,i,r,n,a,l,u,f,p,m){for(var y=n-1,_=0===n?a:[""],b=g(_),C=0,x=0,v=0;C<r;++C)for(var k=0,w=d(t,y+1,y=s(x=l[C])),S=t;k<b;++k)(S=c(x>0?_[k]+" "+w:h(w,/&\f/g,_[k])))&&(f[v++]=S);return T(t,e,i,0===n?o:u,f,p,m)}function P(t,e,i){return T(t,e,i,n,l(k),d(t,2,-2),0)}function W(t,e,i,r){return T(t,e,i,a,d(t,0,r),d(t,r+1,-1),r)}var U=i(44),H=i(1188),Y=i(7856),V=i(9697);const G="10.1.0",X={id:"c4",detector:t=>null!==t.match(/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/),loader:async()=>{const{diagram:t}=await i.e(6733).then(i.bind(i,6733));return{id:"c4",diagram:t}}},J="flowchart",Q={id:J,detector:(t,e)=>{var i,r;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&null!==t.match(/^\s*graph/)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(2494),i.e(211),i.e(8099),i.e(2566),i.e(9863),i.e(1826)]).then(i.bind(i,1826));return{id:J,diagram:t}}},K="flowchart-v2",tt={id:K,detector:(t,e)=>{var i,r,n;return"dagre-d3"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&(null!==t.match(/^\s*graph/)&&"dagre-wrapper"===(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer)||null!==t.match(/^\s*flowchart/))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(2494),i.e(211),i.e(8099),i.e(2566),i.e(9863),i.e(9478)]).then(i.bind(i,9478));return{id:K,diagram:t}}},et={id:"er",detector:t=>null!==t.match(/^\s*erDiagram/),loader:async()=>{const{diagram:t}=await Promise.all([i.e(2494),i.e(3657)]).then(i.bind(i,3657));return{id:"er",diagram:t}}},it="gitGraph",rt={id:it,detector:t=>null!==t.match(/^\s*gitGraph/),loader:async()=>{const{diagram:t}=await i.e(5314).then(i.bind(i,5314));return{id:it,diagram:t}}},nt="gantt",ot={id:nt,detector:t=>null!==t.match(/^\s*gantt/),loader:async()=>{const{diagram:t}=await i.e(4706).then(i.bind(i,4706));return{id:nt,diagram:t}}},at="info",st={id:at,detector:t=>null!==t.match(/^\s*info/),loader:async()=>{const{diagram:t}=await i.e(6234).then(i.bind(i,6234));return{id:at,diagram:t}}},lt={id:"pie",detector:t=>null!==t.match(/^\s*pie/),loader:async()=>{const{diagram:t}=await i.e(6730).then(i.bind(i,6730));return{id:"pie",diagram:t}}},ct="requirement",ht={id:ct,detector:t=>null!==t.match(/^\s*requirement(Diagram)?/),loader:async()=>{const{diagram:t}=await Promise.all([i.e(2494),i.e(6941)]).then(i.bind(i,6941));return{id:ct,diagram:t}}},ut="sequence",ft={id:ut,detector:t=>null!==t.match(/^\s*sequenceDiagram/),loader:async()=>{const{diagram:t}=await i.e(2899).then(i.bind(i,2899));return{id:ut,diagram:t}}},dt="class",pt={id:dt,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer)&&null!==t.match(/^\s*classDiagram/)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(2494),i.e(5001),i.e(2855)]).then(i.bind(i,2855));return{id:dt,diagram:t}}},gt="classDiagram",mt={id:gt,detector:(t,e)=>{var i;return null!==t.match(/^\s*classDiagram/)&&"dagre-wrapper"===(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer)||null!==t.match(/^\s*classDiagram-v2/)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(2494),i.e(211),i.e(8099),i.e(2566),i.e(5001),i.e(619)]).then(i.bind(i,619));return{id:gt,diagram:t}}},yt="state",_t={id:yt,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer)&&null!==t.match(/^\s*stateDiagram/)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(2494),i.e(1341),i.e(5185)]).then(i.bind(i,5185));return{id:yt,diagram:t}}},bt="stateDiagram",Ct={id:bt,detector:(t,e)=>{var i,r;return null!==t.match(/^\s*stateDiagram-v2/)||(!(!t.match(/^\s*stateDiagram/)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer))||!(!t.match(/^\s*stateDiagram/)||"dagre-wrapper"!==(null==(r=null==e?void 0:e.state)?void 0:r.defaultRenderer)))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(2494),i.e(211),i.e(8099),i.e(2566),i.e(1341),i.e(6964)]).then(i.bind(i,6964));return{id:bt,diagram:t}}},xt="journey",vt={id:xt,detector:t=>null!==t.match(/^\s*journey/),loader:async()=>{const{diagram:t}=await i.e(492).then(i.bind(i,492));return{id:xt,diagram:t}}},kt={setConf:function(){},draw:(t,e,i)=>{try{U.l.debug("Renering svg for syntax error\n");const t=(0,r.Ys)("#"+e),n=t.append("g");n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+i),t.attr("height",100),t.attr("width",500),t.attr("viewBox","768 0 912 512")}catch(n){U.l.error("Error while rendering info diagram"),U.l.error((0,H.g)(n))}}},wt={db:{clear:()=>{}},styles:()=>"",renderer:kt,parser:{parser:{yy:{}},parse:()=>{}},init:()=>{}},Tt="flowchart-elk",St={id:Tt,detector:(t,e)=>{var i;return!!(t.match(/^\s*flowchart-elk/)||t.match(/^\s*flowchart|graph/)&&"elk"===(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(211),i.e(8099),i.e(9863),i.e(4216)]).then(i.bind(i,4216));return{id:Tt,diagram:t}}},Bt="timeline",Mt={id:Bt,detector:t=>null!==t.match(/^\s*timeline/),loader:async()=>{const{diagram:t}=await i.e(1573).then(i.bind(i,1573));return{id:Bt,diagram:t}}},Ft="mindmap",Lt={id:Ft,detector:t=>null!==t.match(/^\s*mindmap/),loader:async()=>{const{diagram:t}=await Promise.all([i.e(211),i.e(7926)]).then(i.bind(i,7926));return{id:Ft,diagram:t}}};let At=!1;const Et=()=>{At||(At=!0,(0,H.a)("error",wt,(t=>"error"===t.toLowerCase().trim())),(0,H.a)("---",{db:{clear:()=>{}},styles:{},renderer:{},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),(0,H.r)(X,mt,pt,et,ot,st,lt,ht,ft,St,tt,Q,Lt,Mt,rt,Ct,_t,vt))};class Ot{constructor(t){var e,i;this.text=t,this.type="graph",this.text+="\n";const r=(0,U.g)();try{this.type=(0,H.d)(t,r)}catch(a){this.type="error",this.detectError=a}const n=(0,H.b)(this.type);U.l.debug("Type "+this.type),this.db=n.db,null==(i=(e=this.db).clear)||i.call(e),this.renderer=n.renderer,this.parser=n.parser;const o=this.parser.parse.bind(this.parser);this.parser.parse=t=>o((t=>t.trimStart().replace(/^\s*%%(?!{)[^\n]+\n?/gm,""))((0,H.e)(t,this.db))),this.parser.parser.yy=this.db,n.init&&(n.init(r),U.l.info("Initialized diagram "+this.type,r)),this.parse()}parse(){var t,e;if(this.detectError)throw this.detectError;null==(e=(t=this.db).clear)||e.call(t),this.parser.parse(this.text)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}}const Nt=async t=>{const e=(0,H.d)(t,(0,U.g)());try{(0,H.b)(e)}catch(i){const t=(0,H.c)(e);if(!t)throw new H.U(`Diagram ${e} not found.`);const{id:r,diagram:n}=await t();(0,H.a)(r,n)}return new Ot(t)};let Dt=[];const It=t=>{Dt.push(t)},$t="graphics-document document";const zt=["graph","flowchart","flowchart-v2","flowchart-elk","stateDiagram","stateDiagram-v2"],Zt=["foreignobject"],jt=["dominant-baseline"];const Rt=function(t){let e=t;return e=e.replace(/\ufb02\xb0\xb0/g,"&#"),e=e.replace(/\ufb02\xb0/g,"&"),e=e.replace(/\xb6\xdf/g,";"),e},qt=(t,e,i=[])=>`\n.${t} ${e} { ${i.join(" !important; ")} !important; }`,Pt=(t,e,i,r)=>{const n=((t,e,i={})=>{var r;let n="";if(void 0!==t.themeCSS&&(n+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(n+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(n+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,V.Z)(i)&&zt.includes(e)){const e=t.htmlLabels||(null==(r=t.flowchart)?void 0:r.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in i){const r=i[t];(0,V.Z)(r.styles)||e.forEach((t=>{n+=qt(r.id,t,r.styles)})),(0,V.Z)(r.textStyles)||(n+=qt(r.id,"tspan",r.textStyles))}}return n})(t,e,i);return y(j(`${r}{${(0,H.h)(e,n,t.themeVariables)}}`),_)},Wt=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const a=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return n&&a.attr("xmlns:xlink",n),a.append("g"),t};function Ut(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Ht=Object.freeze({render:async function(t,e,i){var n,o,a,s;Et(),(0,U.r)();const l=H.u.detectInit(e);l&&((0,H.f)(l),(0,U.a)(l));const c=(0,U.g)();U.l.debug(c),e.length>((null==c?void 0:c.maxTextSize)??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"),e=e.replace(/\r\n?/g,"\n");const h="#"+t,u="i"+t,f="#"+u,d="d"+t,p="#"+d;let g=(0,r.Ys)("body");const m="sandbox"===c.securityLevel,y="loose"===c.securityLevel,_=c.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),m){const t=Ut((0,r.Ys)(i),u);g=(0,r.Ys)(t.nodes()[0].contentDocument.body),g.node().style.margin=0}else g=(0,r.Ys)(i);Wt(g,t,d,`font-family: ${_}`,"http://www.w3.org/1999/xlink")}else{if(((t,e,i,r)=>{var n,o,a;null==(n=t.getElementById(e))||n.remove(),null==(o=t.getElementById(i))||o.remove(),null==(a=t.getElementById(r))||a.remove()})(document,t,d,u),m){const t=Ut((0,r.Ys)("body"),u);g=(0,r.Ys)(t.nodes()[0].contentDocument.body),g.node().style.margin=0}else g=(0,r.Ys)("body");Wt(g,t,d)}let b,C;e=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/#\w+;/g,(function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"})),e}(e);try{b=await Nt(e)}catch(A){b=new Ot("error"),C=A}const x=g.select(p).node(),v=b.type,k=x.firstChild,w=k.firstChild,T=zt.includes(v)?b.renderer.getClasses(e,b):{},S=Pt(c,v,T,h),B=document.createElement("style");B.innerHTML=S,k.insertBefore(B,w);try{await b.renderer.draw(e,t,G,b)}catch(E){throw kt.draw(e,t,G),E}!function(t,e,i,r){(function(t,e){t.attr("role",$t),(0,V.Z)(e)||t.attr("aria-roledescription",e)})(e,t),function(t,e,i,r){if(void 0!==t.insert&&(e||i)){if(i){const e="chart-desc-"+r;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(i)}if(e){const i="chart-title-"+r;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}(e,i,r,e.attr("id"))}(v,g.select(`${p} svg`),null==(o=(n=b.db).getAccTitle)?void 0:o.call(n),null==(s=(a=b.db).getAccDescription)?void 0:s.call(a)),g.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let M=g.select(p).node().innerHTML;if(U.l.debug("config.arrowMarkerAbsolute",c.arrowMarkerAbsolute),M=((t="",e,i)=>{let r=t;return i||e||(r=r.replace(/marker-end="url\(.*?#/g,'marker-end="url(#')),r=Rt(r),r=r.replace(/<br>/g,"<br/>"),r})(M,m,(0,U.k)(c.arrowMarkerAbsolute)),m){M=((t="",e)=>`<iframe style="width:100%;height:${e?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`)(M,g.select(p+" svg").node())}else y||(M=Y.sanitize(M,{ADD_TAGS:Zt,ADD_ATTR:jt}));if(Dt.forEach((t=>{t()})),Dt=[],C)throw C;const F=m?f:p,L=(0,r.Ys)(F).node();return L&&"remove"in L&&L.remove(),{svg:M,bindFunctions:b.db.bindFunctions}},parse:async function(t,e){Et();try{(await Nt(t)).parse()}catch(i){if(null==e?void 0:e.suppressErrors)return!1;throw i}return!0},parseDirective:H.p,getDiagramFromText:Nt,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),(0,U.m)(t),(null==t?void 0:t.theme)&&t.theme in U.t?t.themeVariables=U.t[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=U.t.default.getThemeVariables(t.themeVariables));const i="object"==typeof t?(0,U.n)(t):(0,U.i)();(0,U.s)(i.logLevel),Et()},getConfig:U.g,setConfig:U.h,getSiteConfig:U.i,updateSiteConfig:U.u,reset:()=>{(0,U.r)()},globalReset:()=>{(0,U.r)(U.j)},defaultConfig:U.j});(0,U.s)((0,U.g)().logLevel),(0,U.r)((0,U.g)())},1188:(t,e,i)=>{"use strict";i.d(e,{U:()=>Qt,a:()=>Xt,b:()=>Jt,c:()=>ae,d:()=>ie,e:()=>Dt,f:()=>we,g:()=>Be,h:()=>Zt,i:()=>Se,j:()=>xe,k:()=>It,l:()=>ne,m:()=>Ce,n:()=>de,o:()=>ue,p:()=>Rt,q:()=>me,r:()=>re,s:()=>$t,t:()=>Ut,u:()=>Fe,v:()=>Yt,w:()=>_e,x:()=>Me,y:()=>ge});var r=i(7967),n=i(9373),o=i(44),a=i(2454);function s(t){return null==t}var l={isNothing:s,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:s(t)?[]:[t]},repeat:function(t,e){var i,r="";for(i=0;i<e;i+=1)r+=t;return r},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var i,r,n,o;if(e)for(i=0,r=(o=Object.keys(e)).length;i<r;i+=1)t[n=o[i]]=e[n];return t}};function c(t,e){var i="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(i+='in "'+t.mark.name+'" '),i+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(i+="\n\n"+t.mark.snippet),r+" "+i):r}function h(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=c(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}h.prototype=Object.create(Error.prototype),h.prototype.constructor=h,h.prototype.toString=function(t){return this.name+": "+c(this,t)};var u=h;function f(t,e,i,r,n){var o="",a="",s=Math.floor(n/2)-1;return r-e>s&&(e=r-s+(o=" ... ").length),i-r>s&&(i=r+s-(a=" ...").length),{str:o+t.slice(e,i).replace(/\t/g,"\u2192")+a,pos:r-e+o.length}}function d(t,e){return l.repeat(" ",e-t.length)+t}var p=function(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,n=[0],o=[],a=-1;i=r.exec(t.buffer);)o.push(i.index),n.push(i.index+i[0].length),t.position<=i.index&&a<0&&(a=n.length-2);a<0&&(a=n.length-1);var s,c,h="",u=Math.min(t.line+e.linesAfter,o.length).toString().length,p=e.maxLength-(e.indent+u+3);for(s=1;s<=e.linesBefore&&!(a-s<0);s++)c=f(t.buffer,n[a-s],o[a-s],t.position-(n[a]-n[a-s]),p),h=l.repeat(" ",e.indent)+d((t.line-s+1).toString(),u)+" | "+c.str+"\n"+h;for(c=f(t.buffer,n[a],o[a],t.position,p),h+=l.repeat(" ",e.indent)+d((t.line+1).toString(),u)+" | "+c.str+"\n",h+=l.repeat("-",e.indent+u+3+c.pos)+"^\n",s=1;s<=e.linesAfter&&!(a+s>=o.length);s++)c=f(t.buffer,n[a+s],o[a+s],t.position-(n[a]-n[a+s]),p),h+=l.repeat(" ",e.indent)+d((t.line+s+1).toString(),u)+" | "+c.str+"\n";return h.replace(/\n$/,"")},g=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],m=["scalar","sequence","mapping"];var y=function(t,e){var i,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===g.indexOf(e))throw new u('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')})),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=(i=e.styleAliases||null,r={},null!==i&&Object.keys(i).forEach((function(t){i[t].forEach((function(e){r[String(e)]=t}))})),r),-1===m.indexOf(this.kind))throw new u('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function _(t,e){var i=[];return t[e].forEach((function(t){var e=i.length;i.forEach((function(i,r){i.tag===t.tag&&i.kind===t.kind&&i.multi===t.multi&&(e=r)})),i[e]=t})),i}function b(t){return this.extend(t)}b.prototype.extend=function(t){var e=[],i=[];if(t instanceof y)i.push(t);else if(Array.isArray(t))i=i.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new u("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof y))throw new u("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new u("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new u("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),i.forEach((function(t){if(!(t instanceof y))throw new u("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(b.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=_(r,"implicit"),r.compiledExplicit=_(r,"explicit"),r.compiledTypeMap=function(){var t,e,i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(t){t.multi?(i.multi[t.kind].push(t),i.multi.fallback.push(t)):i[t.kind][t.tag]=i.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(r);return i}(r.compiledImplicit,r.compiledExplicit),r};var C=new b({explicit:[new y("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new y("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new y("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var x=new y("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var v=new y("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function k(t){return 48<=t&&t<=55}function w(t){return 48<=t&&t<=57}var T=new y("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=t.length,n=0,o=!1;if(!r)return!1;if("-"!==(e=t[n])&&"+"!==e||(e=t[++n]),"0"===e){if(n+1===r)return!0;if("b"===(e=t[++n])){for(n++;n<r;n++)if("_"!==(e=t[n])){if("0"!==e&&"1"!==e)return!1;o=!0}return o&&"_"!==e}if("x"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!(48<=(i=t.charCodeAt(n))&&i<=57||65<=i&&i<=70||97<=i&&i<=102))return!1;o=!0}return o&&"_"!==e}if("o"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!k(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==e}}if("_"===e)return!1;for(;n<r;n++)if("_"!==(e=t[n])){if(!w(t.charCodeAt(n)))return!1;o=!0}return!(!o||"_"===e)},construct:function(t){var e,i=t,r=1;if(-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),"-"!==(e=i[0])&&"+"!==e||("-"===e&&(r=-1),e=(i=i.slice(1))[0]),"0"===i)return 0;if("0"===e){if("b"===i[1])return r*parseInt(i.slice(2),2);if("x"===i[1])return r*parseInt(i.slice(2),16);if("o"===i[1])return r*parseInt(i.slice(2),8)}return r*parseInt(i,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!l.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),S=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var B=/^[-+]?[0-9]+e/;var M=new y("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!S.test(t)||"_"===t[t.length-1])},construct:function(t){var e,i;return i="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:i*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||l.isNegativeZero(t))},represent:function(t,e){var i;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(l.isNegativeZero(t))return"-0.0";return i=t.toString(10),B.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),F=C.extend({implicit:[x,v,T,M]}),L=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),A=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var E=new y("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==L.exec(t)||null!==A.exec(t))},construct:function(t){var e,i,r,n,o,a,s,l,c=0,h=null;if(null===(e=L.exec(t))&&(e=A.exec(t)),null===e)throw new Error("Date resolve error");if(i=+e[1],r=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(i,r,n));if(o=+e[4],a=+e[5],s=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+="0";c=+c}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),l=new Date(Date.UTC(i,r,n,o,a,s,c)),h&&l.setTime(l.getTime()-h),l},instanceOf:Date,represent:function(t){return t.toISOString()}});var O=new y("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),N="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var D=new y("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=0,n=t.length,o=N;for(i=0;i<n;i++)if(!((e=o.indexOf(t.charAt(i)))>64)){if(e<0)return!1;r+=6}return r%8==0},construct:function(t){var e,i,r=t.replace(/[\r\n=]/g,""),n=r.length,o=N,a=0,s=[];for(e=0;e<n;e++)e%4==0&&e&&(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(r.charAt(e));return 0===(i=n%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18===i?(s.push(a>>10&255),s.push(a>>2&255)):12===i&&s.push(a>>4&255),new Uint8Array(s)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,i,r="",n=0,o=t.length,a=N;for(e=0;e<o;e++)e%3==0&&e&&(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]),n=(n<<8)+t[e];return 0===(i=o%3)?(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]):2===i?(r+=a[n>>10&63],r+=a[n>>4&63],r+=a[n<<2&63],r+=a[64]):1===i&&(r+=a[n>>2&63],r+=a[n<<4&63],r+=a[64],r+=a[64]),r}}),I=Object.prototype.hasOwnProperty,$=Object.prototype.toString;var z=new y("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=[],s=t;for(e=0,i=s.length;e<i;e+=1){if(r=s[e],o=!1,"[object Object]"!==$.call(r))return!1;for(n in r)if(I.call(r,n)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(n))return!1;a.push(n)}return!0},construct:function(t){return null!==t?t:[]}}),Z=Object.prototype.toString;var j=new y("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1){if(r=a[e],"[object Object]"!==Z.call(r))return!1;if(1!==(n=Object.keys(r)).length)return!1;o[e]=[n[0],r[n[0]]]}return!0},construct:function(t){if(null===t)return[];var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1)r=a[e],n=Object.keys(r),o[e]=[n[0],r[n[0]]];return o}}),R=Object.prototype.hasOwnProperty;var q=new y("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,i=t;for(e in i)if(R.call(i,e)&&null!==i[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),P=F.extend({implicit:[E,O],explicit:[D,z,j,q]}),W=Object.prototype.hasOwnProperty,U=1,H=2,Y=3,V=4,G=1,X=2,J=3,Q=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,K=/[\x85\u2028\u2029]/,tt=/[,\[\]\{\}]/,et=/^(?:!|!!|![a-z\-]+!)$/i,it=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function rt(t){return Object.prototype.toString.call(t)}function nt(t){return 10===t||13===t}function ot(t){return 9===t||32===t}function at(t){return 9===t||32===t||10===t||13===t}function st(t){return 44===t||91===t||93===t||123===t||125===t}function lt(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function ct(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function ht(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var ut=new Array(256),ft=new Array(256),dt=0;dt<256;dt++)ut[dt]=ct(dt)?1:0,ft[dt]=ct(dt);function pt(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||P,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function gt(t,e){var i={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return i.snippet=p(i),new u(e,i)}function mt(t,e){throw gt(t,e)}function yt(t,e){t.onWarning&&t.onWarning.call(null,gt(t,e))}var _t={YAML:function(t,e,i){var r,n,o;null!==t.version&&mt(t,"duplication of %YAML directive"),1!==i.length&&mt(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]))&&mt(t,"ill-formed argument of the YAML directive"),n=parseInt(r[1],10),o=parseInt(r[2],10),1!==n&&mt(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&yt(t,"unsupported YAML version of the document")},TAG:function(t,e,i){var r,n;2!==i.length&&mt(t,"TAG directive accepts exactly two arguments"),r=i[0],n=i[1],et.test(r)||mt(t,"ill-formed tag handle (first argument) of the TAG directive"),W.call(t.tagMap,r)&&mt(t,'there is a previously declared suffix for "'+r+'" tag handle'),it.test(n)||mt(t,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(o){mt(t,"tag prefix is malformed: "+n)}t.tagMap[r]=n}};function bt(t,e,i,r){var n,o,a,s;if(e<i){if(s=t.input.slice(e,i),r)for(n=0,o=s.length;n<o;n+=1)9===(a=s.charCodeAt(n))||32<=a&&a<=1114111||mt(t,"expected valid JSON character");else Q.test(s)&&mt(t,"the stream contains non-printable characters");t.result+=s}}function Ct(t,e,i,r){var n,o,a,s;for(l.isObject(i)||mt(t,"cannot merge mappings; the provided source object is unacceptable"),a=0,s=(n=Object.keys(i)).length;a<s;a+=1)o=n[a],W.call(e,o)||(e[o]=i[o],r[o]=!0)}function xt(t,e,i,r,n,o,a,s,l){var c,h;if(Array.isArray(n))for(c=0,h=(n=Array.prototype.slice.call(n)).length;c<h;c+=1)Array.isArray(n[c])&&mt(t,"nested arrays are not supported inside keys"),"object"==typeof n&&"[object Object]"===rt(n[c])&&(n[c]="[object Object]");if("object"==typeof n&&"[object Object]"===rt(n)&&(n="[object Object]"),n=String(n),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(o))for(c=0,h=o.length;c<h;c+=1)Ct(t,e,o[c],i);else Ct(t,e,o,i);else t.json||W.call(i,n)||!W.call(e,n)||(t.line=a||t.line,t.lineStart=s||t.lineStart,t.position=l||t.position,mt(t,"duplicated mapping key")),"__proto__"===n?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):e[n]=o,delete i[n];return e}function vt(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):mt(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function kt(t,e,i){for(var r=0,n=t.input.charCodeAt(t.position);0!==n;){for(;ot(n);)9===n&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),n=t.input.charCodeAt(++t.position);if(e&&35===n)do{n=t.input.charCodeAt(++t.position)}while(10!==n&&13!==n&&0!==n);if(!nt(n))break;for(vt(t),n=t.input.charCodeAt(t.position),r++,t.lineIndent=0;32===n;)t.lineIndent++,n=t.input.charCodeAt(++t.position)}return-1!==i&&0!==r&&t.lineIndent<i&&yt(t,"deficient indentation"),r}function wt(t){var e,i=t.position;return!(45!==(e=t.input.charCodeAt(i))&&46!==e||e!==t.input.charCodeAt(i+1)||e!==t.input.charCodeAt(i+2)||(i+=3,0!==(e=t.input.charCodeAt(i))&&!at(e)))}function Tt(t,e){1===e?t.result+=" ":e>1&&(t.result+=l.repeat("\n",e-1))}function St(t,e){var i,r,n=t.tag,o=t.anchor,a=[],s=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,mt(t,"tab characters must not be used in indentation")),45===r)&&at(t.input.charCodeAt(t.position+1));)if(s=!0,t.position++,kt(t,!0,-1)&&t.lineIndent<=e)a.push(null),r=t.input.charCodeAt(t.position);else if(i=t.line,Ft(t,e,Y,!1,!0),a.push(t.result),kt(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===i||t.lineIndent>e)&&0!==r)mt(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!s&&(t.tag=n,t.anchor=o,t.kind="sequence",t.result=a,!0)}function Bt(t){var e,i,r,n,o=!1,a=!1;if(33!==(n=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&mt(t,"duplication of a tag property"),60===(n=t.input.charCodeAt(++t.position))?(o=!0,n=t.input.charCodeAt(++t.position)):33===n?(a=!0,i="!!",n=t.input.charCodeAt(++t.position)):i="!",e=t.position,o){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&62!==n);t.position<t.length?(r=t.input.slice(e,t.position),n=t.input.charCodeAt(++t.position)):mt(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==n&&!at(n);)33===n&&(a?mt(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),et.test(i)||mt(t,"named tag handle cannot contain such characters"),a=!0,e=t.position+1)),n=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),tt.test(r)&&mt(t,"tag suffix cannot contain flow indicator characters")}r&&!it.test(r)&&mt(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(s){mt(t,"tag name is malformed: "+r)}return o?t.tag=r:W.call(t.tagMap,i)?t.tag=t.tagMap[i]+r:"!"===i?t.tag="!"+r:"!!"===i?t.tag="tag:yaml.org,2002:"+r:mt(t,'undeclared tag handle "'+i+'"'),!0}function Mt(t){var e,i;if(38!==(i=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&mt(t,"duplication of an anchor property"),i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!at(i)&&!st(i);)i=t.input.charCodeAt(++t.position);return t.position===e&&mt(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function Ft(t,e,i,r,n){var o,a,s,c,h,u,f,d,p,g=1,m=!1,y=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=a=s=V===i||Y===i,r&&kt(t,!0,-1)&&(m=!0,t.lineIndent>e?g=1:t.lineIndent===e?g=0:t.lineIndent<e&&(g=-1)),1===g)for(;Bt(t)||Mt(t);)kt(t,!0,-1)?(m=!0,s=o,t.lineIndent>e?g=1:t.lineIndent===e?g=0:t.lineIndent<e&&(g=-1)):s=!1;if(s&&(s=m||n),1!==g&&V!==i||(d=U===i||H===i?e:e+1,p=t.position-t.lineStart,1===g?s&&(St(t,p)||function(t,e,i){var r,n,o,a,s,l,c,h=t.tag,u=t.anchor,f={},d=Object.create(null),p=null,g=null,m=null,y=!1,_=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=f),c=t.input.charCodeAt(t.position);0!==c;){if(y||-1===t.firstTabInLine||(t.position=t.firstTabInLine,mt(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),o=t.line,63!==c&&58!==c||!at(r)){if(a=t.line,s=t.lineStart,l=t.position,!Ft(t,i,H,!1,!0))break;if(t.line===o){for(c=t.input.charCodeAt(t.position);ot(c);)c=t.input.charCodeAt(++t.position);if(58===c)at(c=t.input.charCodeAt(++t.position))||mt(t,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(xt(t,f,d,p,g,null,a,s,l),p=g=m=null),_=!0,y=!1,n=!1,p=t.tag,g=t.result;else{if(!_)return t.tag=h,t.anchor=u,!0;mt(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!_)return t.tag=h,t.anchor=u,!0;mt(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(xt(t,f,d,p,g,null,a,s,l),p=g=m=null),_=!0,y=!0,n=!0):y?(y=!1,n=!0):mt(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,c=r;if((t.line===o||t.lineIndent>e)&&(y&&(a=t.line,s=t.lineStart,l=t.position),Ft(t,e,V,!0,n)&&(y?g=t.result:m=t.result),y||(xt(t,f,d,p,g,m,a,s,l),p=g=m=null),kt(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==c)mt(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return y&&xt(t,f,d,p,g,null,a,s,l),_&&(t.tag=h,t.anchor=u,t.kind="mapping",t.result=f),_}(t,p,d))||function(t,e){var i,r,n,o,a,s,l,c,h,u,f,d,p=!0,g=t.tag,m=t.anchor,y=Object.create(null);if(91===(d=t.input.charCodeAt(t.position)))a=93,c=!1,o=[];else{if(123!==d)return!1;a=125,c=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),d=t.input.charCodeAt(++t.position);0!==d;){if(kt(t,!0,e),(d=t.input.charCodeAt(t.position))===a)return t.position++,t.tag=g,t.anchor=m,t.kind=c?"mapping":"sequence",t.result=o,!0;p?44===d&&mt(t,"expected the node content, but found ','"):mt(t,"missed comma between flow collection entries"),f=null,s=l=!1,63===d&&at(t.input.charCodeAt(t.position+1))&&(s=l=!0,t.position++,kt(t,!0,e)),i=t.line,r=t.lineStart,n=t.position,Ft(t,e,U,!1,!0),u=t.tag,h=t.result,kt(t,!0,e),d=t.input.charCodeAt(t.position),!l&&t.line!==i||58!==d||(s=!0,d=t.input.charCodeAt(++t.position),kt(t,!0,e),Ft(t,e,U,!1,!0),f=t.result),c?xt(t,o,y,u,h,f,i,r,n):s?o.push(xt(t,null,y,u,h,f,i,r,n)):o.push(h),kt(t,!0,e),44===(d=t.input.charCodeAt(t.position))?(p=!0,d=t.input.charCodeAt(++t.position)):p=!1}mt(t,"unexpected end of the stream within a flow collection")}(t,d)?y=!0:(a&&function(t,e){var i,r,n,o,a,s=G,c=!1,h=!1,u=e,f=0,d=!1;if(124===(o=t.input.charCodeAt(t.position)))r=!1;else{if(62!==o)return!1;r=!0}for(t.kind="scalar",t.result="";0!==o;)if(43===(o=t.input.charCodeAt(++t.position))||45===o)G===s?s=43===o?J:X:mt(t,"repeat of a chomping mode identifier");else{if(!((n=48<=(a=o)&&a<=57?a-48:-1)>=0))break;0===n?mt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):h?mt(t,"repeat of an indentation width identifier"):(u=e+n-1,h=!0)}if(ot(o)){do{o=t.input.charCodeAt(++t.position)}while(ot(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!nt(o)&&0!==o)}for(;0!==o;){for(vt(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!h||t.lineIndent<u)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!h&&t.lineIndent>u&&(u=t.lineIndent),nt(o))f++;else{if(t.lineIndent<u){s===J?t.result+=l.repeat("\n",c?1+f:f):s===G&&c&&(t.result+="\n");break}for(r?ot(o)?(d=!0,t.result+=l.repeat("\n",c?1+f:f)):d?(d=!1,t.result+=l.repeat("\n",f+1)):0===f?c&&(t.result+=" "):t.result+=l.repeat("\n",f):t.result+=l.repeat("\n",c?1+f:f),c=!0,h=!0,f=0,i=t.position;!nt(o)&&0!==o;)o=t.input.charCodeAt(++t.position);bt(t,i,t.position,!1)}}return!0}(t,d)||function(t,e){var i,r,n;if(39!==(i=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;0!==(i=t.input.charCodeAt(t.position));)if(39===i){if(bt(t,r,t.position,!0),39!==(i=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,n=t.position}else nt(i)?(bt(t,r,n,!0),Tt(t,kt(t,!1,e)),r=n=t.position):t.position===t.lineStart&&wt(t)?mt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);mt(t,"unexpected end of the stream within a single quoted scalar")}(t,d)||function(t,e){var i,r,n,o,a,s,l;if(34!==(s=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;0!==(s=t.input.charCodeAt(t.position));){if(34===s)return bt(t,i,t.position,!0),t.position++,!0;if(92===s){if(bt(t,i,t.position,!0),nt(s=t.input.charCodeAt(++t.position)))kt(t,!1,e);else if(s<256&&ut[s])t.result+=ft[s],t.position++;else if((a=120===(l=s)?2:117===l?4:85===l?8:0)>0){for(n=a,o=0;n>0;n--)(a=lt(s=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+a:mt(t,"expected hexadecimal character");t.result+=ht(o),t.position++}else mt(t,"unknown escape sequence");i=r=t.position}else nt(s)?(bt(t,i,r,!0),Tt(t,kt(t,!1,e)),i=r=t.position):t.position===t.lineStart&&wt(t)?mt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}mt(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?y=!0:!function(t){var e,i,r;if(42!==(r=t.input.charCodeAt(t.position)))return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!at(r)&&!st(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&mt(t,"name of an alias node must contain at least one character"),i=t.input.slice(e,t.position),W.call(t.anchorMap,i)||mt(t,'unidentified alias "'+i+'"'),t.result=t.anchorMap[i],kt(t,!0,-1),!0}(t)?function(t,e,i){var r,n,o,a,s,l,c,h,u=t.kind,f=t.result;if(at(h=t.input.charCodeAt(t.position))||st(h)||35===h||38===h||42===h||33===h||124===h||62===h||39===h||34===h||37===h||64===h||96===h)return!1;if((63===h||45===h)&&(at(r=t.input.charCodeAt(t.position+1))||i&&st(r)))return!1;for(t.kind="scalar",t.result="",n=o=t.position,a=!1;0!==h;){if(58===h){if(at(r=t.input.charCodeAt(t.position+1))||i&&st(r))break}else if(35===h){if(at(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&wt(t)||i&&st(h))break;if(nt(h)){if(s=t.line,l=t.lineStart,c=t.lineIndent,kt(t,!1,-1),t.lineIndent>=e){a=!0,h=t.input.charCodeAt(t.position);continue}t.position=o,t.line=s,t.lineStart=l,t.lineIndent=c;break}}a&&(bt(t,n,o,!1),Tt(t,t.line-s),n=o=t.position,a=!1),ot(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return bt(t,n,o,!1),!!t.result||(t.kind=u,t.result=f,!1)}(t,d,U===i)&&(y=!0,null===t.tag&&(t.tag="?")):(y=!0,null===t.tag&&null===t.anchor||mt(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===g&&(y=s&&St(t,p))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&mt(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),c=0,h=t.implicitTypes.length;c<h;c+=1)if((f=t.implicitTypes[c]).resolve(t.result)){t.result=f.construct(t.result),t.tag=f.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(W.call(t.typeMap[t.kind||"fallback"],t.tag))f=t.typeMap[t.kind||"fallback"][t.tag];else for(f=null,c=0,h=(u=t.typeMap.multi[t.kind||"fallback"]).length;c<h;c+=1)if(t.tag.slice(0,u[c].tag.length)===u[c].tag){f=u[c];break}f||mt(t,"unknown tag !<"+t.tag+">"),null!==t.result&&f.kind!==t.kind&&mt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+f.kind+'", not "'+t.kind+'"'),f.resolve(t.result,t.tag)?(t.result=f.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):mt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||y}function Lt(t){var e,i,r,n,o=t.position,a=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(n=t.input.charCodeAt(t.position))&&(kt(t,!0,-1),n=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==n));){for(a=!0,n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!at(n);)n=t.input.charCodeAt(++t.position);for(r=[],(i=t.input.slice(e,t.position)).length<1&&mt(t,"directive name must not be less than one character in length");0!==n;){for(;ot(n);)n=t.input.charCodeAt(++t.position);if(35===n){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&!nt(n));break}if(nt(n))break;for(e=t.position;0!==n&&!at(n);)n=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==n&&vt(t),W.call(_t,i)?_t[i](t,i,r):yt(t,'unknown document directive "'+i+'"')}kt(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,kt(t,!0,-1)):a&&mt(t,"directives end mark is expected"),Ft(t,t.lineIndent-1,V,!1,!0),kt(t,!0,-1),t.checkLineBreaks&&K.test(t.input.slice(o,t.position))&&yt(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&wt(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,kt(t,!0,-1)):t.position<t.length-1&&mt(t,"end of the stream or a document separator is expected")}function At(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var i=new pt(t,e),r=t.indexOf("\0");for(-1!==r&&(i.position=r,mt(i,"null byte is not allowed in input")),i.input+="\0";32===i.input.charCodeAt(i.position);)i.lineIndent+=1,i.position+=1;for(;i.position<i.length-1;)Lt(i);return i.documents}var Et=C,Ot={loadAll:function(t,e,i){null!==e&&"object"==typeof e&&void 0===i&&(i=e,e=null);var r=At(t,i);if("function"!=typeof e)return r;for(var n=0,o=r.length;n<o;n+=1)e(r[n])},load:function(t,e){var i=At(t,e);if(0!==i.length){if(1===i.length)return i[0];throw new u("expected a single document in the stream, but found more")}}}.load;const Nt=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s;function Dt(t,e){var i,r;const n=t.match(Nt);if(n){const o=Ot(n[1],{schema:Et});return(null==o?void 0:o.title)&&(null==(i=e.setDiagramTitle)||i.call(e,o.title)),(null==o?void 0:o.displayMode)&&(null==(r=e.setDisplayMode)||r.call(e,o.displayMode)),t.slice(n[0].length)}return t}const It=function(t,e,i,r){const n=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r}(e,i,r);!function(t,e){for(let i of e)t.attr(i[0],i[1])}(t,n)},$t=function(t,e,i,r){const n=e.node().getBBox(),a=n.width,s=n.height;o.l.info(`SVG bounds: ${a}x${s}`,n);let l=0,c=0;o.l.info(`Graph bounds: ${l}x${c}`,t),l=a+2*i,c=s+2*i,o.l.info(`Calculated bounds: ${l}x${c}`),It(e,c,l,r);const h=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",h)},zt={},Zt=(t,e,i)=>{let r="";return t in zt&&zt[t]?r=zt[t](i):o.l.warn(`No theme found for ${t}`),` & {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n fill: ${i.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${i.errorBkgColor};\n }\n & .error-text {\n fill: ${i.errorTextColor};\n stroke: ${i.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${i.lineColor};\n stroke: ${i.lineColor};\n }\n & .marker.cross {\n stroke: ${i.lineColor};\n }\n\n & svg {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n }\n\n ${r}\n\n ${e}\n`};let jt={};const Rt=function(t,e,i,r){o.l.debug("parseDirective is being called",e,i,r);try{if(void 0!==e)switch(e=e.trim(),i){case"open_directive":jt={};break;case"type_directive":if(!jt)throw new Error("currentDirective is undefined");jt.type=e.toLowerCase();break;case"arg_directive":if(!jt)throw new Error("currentDirective is undefined");jt.args=JSON.parse(e);break;case"close_directive":qt(t,jt,r),jt=void 0}}catch(n){o.l.error(`Error while rendering sequenceDiagram directive: ${e} jison context: ${i}`),o.l.error(n.message)}},qt=function(t,e,i){switch(o.l.info(`Directive type=${e.type} with args:`,e.args),e.type){case"init":case"initialize":["config"].forEach((t=>{void 0!==e.args[t]&&("flowchart-v2"===i&&(i="flowchart"),e.args[i]=e.args[t],delete e.args[t])})),o.l.info("sanitize in handleDirective",e.args),we(e.args),o.l.info("sanitize in handleDirective (done)",e.args),(0,o.a)(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;case"themeCss":o.l.warn("themeCss encountered");break;default:o.l.warn(`Unhandled directive: source: '%%{${e.type}: ${JSON.stringify(e.args?e.args:{})}}%%`,e)}},Pt=o.l,Wt=o.s,Ut=o.g,Ht=t=>(0,o.b)(t,Ut()),Yt=$t,Vt=(t,e,i,r)=>Rt(t,e,i,r),Gt={},Xt=(t,e,i)=>{if(Gt[t])throw new Error(`Diagram ${t} already registered.`);var r,n;Gt[t]=e,i&&oe(t,i),r=t,n=e.styles,zt[r]=n,e.injectUtils&&e.injectUtils(Pt,Wt,Ut,Ht,Yt,o.c,Vt)},Jt=t=>{if(t in Gt)return Gt[t];throw new Error(`Diagram ${t} not found.`)};class Qt extends Error{constructor(t){super(t),this.name="UnknownDiagramError"}}const Kt=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,te=/\s*%%.*\n/gm,ee={},ie=function(t,e){t=t.replace(Nt,"").replace(Kt,"").replace(te,"\n");for(const[i,{detector:r}]of Object.entries(ee)){if(r(t,e))return i}throw new Qt(`No diagram type detected matching given configuration for text: ${t}`)},re=(...t)=>{for(const{id:e,detector:i,loader:r}of t)oe(e,i,r)},ne=async()=>{o.l.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(ee).map((async([t,{detector:e,loader:i}])=>{if(i)try{Jt(t)}catch(r){try{const{diagram:t,id:r}=await i();Xt(r,t,e)}catch(n){throw o.l.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete ee[t],n}}})))).filter((t=>"rejected"===t.status));if(t.length>0){o.l.error(`Failed to load ${t.length} external diagrams`);for(const e of t)o.l.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}},oe=(t,e,i)=>{ee[t]?o.l.error(`Detector with key ${t} already exists`):ee[t]={detector:e,loader:i},o.l.debug(`Detector with key ${t} added${i?" with loader":""}`)},ae=t=>ee[t].loader,se={curveBasis:n.$0Z,curveBasisClosed:n.Dts,curveBasisOpen:n.WQY,curveBumpX:n.qpX,curveBumpY:n.u93,curveBundle:n.tFB,curveCardinalClosed:n.OvA,curveCardinalOpen:n.dCK,curveCardinal:n.YY7,curveCatmullRomClosed:n.fGX,curveCatmullRomOpen:n.$m7,curveCatmullRom:n.zgE,curveLinear:n.c_6,curveLinearClosed:n.fxm,curveMonotoneX:n.FdL,curveMonotoneY:n.ak_,curveNatural:n.SxZ,curveStep:n.eA_,curveStepAfter:n.jsv,curveStepBefore:n.iJ},le=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,ce=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,he=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${ce.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(i,"").replace(/'/gm,'"'),o.l.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const n=[];for(;null!==(r=le.exec(t));)if(r.index===le.lastIndex&&le.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const t=r[1]?r[1]:r[2],e=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:t,args:e})}return 0===n.length&&n.push({type:t,args:null}),1===n.length?n[0]:n}catch(i){return o.l.error(`ERROR: ${i.message} - Unable to parse directive\n ${null!==e?" type:"+e:""} based on the text:${t}`),{type:null,args:null}}};function ue(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return se[i]||e}function fe(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}function de(t){let e="",i="";for(const r of t)void 0!==r&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let pe=0;const ge=()=>(pe++,"id-"+Math.random().toString(36).substr(2,12)+"-"+pe);const me=t=>function(t){let e="";const i="0123456789abcdef";for(let r=0;r<t;r++)e+=i.charAt(Math.floor(16*Math.random()));return e}(t.length),ye=function(t,e){const i=e.text.replace(o.e.lineBreakRegex," "),[,r]=Me(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),void 0!==e.class&&n.attr("class",e.class);const a=n.append("tspan");return a.attr("x",e.x+2*e.textMargin),a.attr("fill",e.fill),a.text(i),n},_e=(0,a.Z)(((t,e,i)=>{if(!t)return t;if(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},i),o.e.lineBreakRegex.test(t))return t;const r=t.split(" "),n=[];let a="";return r.forEach(((t,o)=>{const s=xe(`${t} `,i),l=xe(a,i);if(s>e){const{hyphenatedStrings:r,remainingWord:o}=be(t,e,"-",i);n.push(a,...r),a=o}else l+s>=e?(n.push(a),a=t):a=[a,t].filter(Boolean).join(" ");o+1===r.length&&n.push(a)})),n.filter((t=>""!==t)).join(i.joinWith)}),((t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`)),be=(0,a.Z)(((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let a="";return n.forEach(((t,s)=>{const l=`${a}${t}`;if(xe(l,r)>=e){const t=s+1,e=n.length===t,r=`${l}${i}`;o.push(e?l:r),a=""}else a=l})),{hyphenatedStrings:o,remainingWord:a}}),((t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function Ce(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),ve(t,e).height}function xe(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),ve(t,e).width}const ve=(0,a.Z)(((t,e)=>{e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e);const{fontSize:i,fontFamily:r,fontWeight:a}=e;if(!t)return{width:0,height:0};const[,s]=Me(i),l=["sans-serif",r],c=t.split(o.e.lineBreakRegex),h=[],u=(0,n.Ys)("body");if(!u.remove)return{width:0,height:0,lineHeight:0};const f=u.append("svg");for(const n of l){let t=0;const e={width:0,height:0,lineHeight:0};for(const i of c){const r={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0};r.text=i;const o=ye(f,r).style("font-size",s).style("font-weight",a).style("font-family",n),l=(o._groups||o)[0][0].getBBox();if(0===l.width&&0===l.height)throw new Error("svg element not in render tree");e.width=Math.round(Math.max(e.width,l.width)),t=Math.round(l.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}h.push(e)}f.remove();return h[isNaN(h[1].height)||isNaN(h[1].width)||isNaN(h[1].lineHeight)||h[0].height>h[1].height&&h[0].width>h[1].width&&h[0].lineHeight>h[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let ke;const we=t=>{if(o.l.debug("directiveSanitizer called with",t),"object"==typeof t&&(t.length?t.forEach((t=>we(t))):Object.keys(t).forEach((e=>{o.l.debug("Checking key",e),e.startsWith("__")&&(o.l.debug("sanitize deleting __ option",e),delete t[e]),e.includes("proto")&&(o.l.debug("sanitize deleting proto option",e),delete t[e]),e.includes("constr")&&(o.l.debug("sanitize deleting constr option",e),delete t[e]),e.includes("themeCSS")&&(o.l.debug("sanitizing themeCss option"),t[e]=Te(t[e])),e.includes("fontFamily")&&(o.l.debug("sanitizing fontFamily option"),t[e]=Te(t[e])),e.includes("altFontFamily")&&(o.l.debug("sanitizing altFontFamily option"),t[e]=Te(t[e])),o.f.includes(e)?"object"==typeof t[e]&&(o.l.debug("sanitize deleting object",e),we(t[e])):(o.l.debug("sanitize deleting option",e),delete t[e])}))),t.themeVariables){const e=Object.keys(t.themeVariables);for(const i of e){const e=t.themeVariables[i];e&&e.match&&!e.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[i]="")}}o.l.debug("After sanitization",t)},Te=t=>{let e=0,i=0;for(const r of t){if(e<i)return"{ /* ERROR: Unbalanced CSS */ }";"{"===r?e++:"}"===r&&i++}return e!==i?"{ /* ERROR: Unbalanced CSS */ }":t};function Se(t){return"str"in t}function Be(t){return t instanceof Error?t.message:String(t)}const Me=t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t,10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},Fe={assignWithDepth:o.d,wrapLabel:_e,calculateTextHeight:Ce,calculateTextWidth:xe,calculateTextDimensions:ve,detectInit:function(t,e){const i=he(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const t=i.map((t=>t.args));we(t),r=(0,o.d)(r,[...t])}else r=i.args;if(r){let i=ie(t,e);["config"].forEach((t=>{void 0!==r[t]&&("flowchart-v2"===i&&(i="flowchart"),r[i]=r[t],delete r[t])}))}return r},detectDirective:he,isSubstringInArray:function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1},interpolateToCurve:ue,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,i=0;t.forEach((t=>{i+=fe(t,e),e=t}));let r,n=i/2;return e=void 0,t.forEach((t=>{if(e&&!r){const i=fe(t,e);if(i<n)n-=i;else{const o=n/i;o<=0&&(r=e),o>=1&&(r={x:t.x,y:t.y}),o>0&&o<1&&(r={x:(1-o)*e.x+o*t.x,y:(1-o)*e.y+o*t.y})}}e=t})),r}(t)},calcCardinalityPosition:(t,e,i)=>{let r;o.l.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());let n,a=25;r=void 0,e.forEach((t=>{if(r&&!n){const e=fe(t,r);if(e<a)a-=e;else{const i=a/e;i<=0&&(n=r),i>=1&&(n={x:t.x,y:t.y}),i>0&&i<1&&(n={x:(1-i)*r.x+i*t.x,y:(1-i)*r.y+i*t.y})}}r=t}));const s=t?10:5,l=Math.atan2(e[0].y-n.y,e[0].x-n.x),c={x:0,y:0};return c.x=Math.sin(l)*s+(e[0].x+n.x)/2,c.y=-Math.cos(l)*s+(e[0].y+n.y)/2,c},calcTerminalLabelPosition:function(t,e,i){let r,n=JSON.parse(JSON.stringify(i));o.l.info("our points",n),"start_left"!==e&&"start_right"!==e&&(n=n.reverse()),n.forEach((t=>{r=t}));let a,s=25+t;r=void 0,n.forEach((t=>{if(r&&!a){const e=fe(t,r);if(e<s)s-=e;else{const i=s/e;i<=0&&(a=r),i>=1&&(a={x:t.x,y:t.y}),i>0&&i<1&&(a={x:(1-i)*r.x+i*t.x,y:(1-i)*r.y+i*t.y})}}r=t}));const l=10+.5*t,c=Math.atan2(n[0].y-a.y,n[0].x-a.x),h={x:0,y:0};return h.x=Math.sin(c)*l+(n[0].x+a.x)/2,h.y=-Math.cos(c)*l+(n[0].y+a.y)/2,"start_left"===e&&(h.x=Math.sin(c+Math.PI)*l+(n[0].x+a.x)/2,h.y=-Math.cos(c+Math.PI)*l+(n[0].y+a.y)/2),"end_right"===e&&(h.x=Math.sin(c-Math.PI)*l+(n[0].x+a.x)/2-5,h.y=-Math.cos(c-Math.PI)*l+(n[0].y+a.y)/2-5),"end_left"===e&&(h.x=Math.sin(c)*l+(n[0].x+a.x)/2-5,h.y=-Math.cos(c)*l+(n[0].y+a.y)/2-5),h},formatUrl:function(t,e){const i=t.trim();if(i)return"loose"!==e.securityLevel?(0,r.N)(i):i},getStylesFromArray:de,generateId:ge,random:me,runFunc:(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let a=0;a<r;a++)if(o=o[i[a]],!o)return;o[n](...e)},entityDecode:function(t){return ke=ke||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),ke.innerHTML=t,unescape(ke.textContent)},initIdGenerator:class{constructor(t,e){this.deterministic=t,this.seed=e,this.count=e?e.length:0}next(){return this.deterministic?this.count++:Date.now()}},directiveSanitizer:we,sanitizeCss:Te,insertTitle:(t,e,i,r)=>{if(!r)return;const n=t.node().getBBox();t.append("text").text(r).attr("x",n.x+n.width/2).attr("y",-i).attr("class",e)},parseFontSize:Me}}}]); \ No newline at end of file diff --git a/assets/js/common.ccbc84e3.js.LICENSE.txt b/assets/js/common.ccbc84e3.js.LICENSE.txt new file mode 100644 index 0000000000..d386a425a2 --- /dev/null +++ b/assets/js/common.ccbc84e3.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! + * Wait for document loaded before starting the execution + */ + +/*! @license DOMPurify 2.4.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.5/LICENSE */ + +/*! Check if previously processed */ + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ diff --git a/assets/js/d17664a7.a25f122e.js b/assets/js/d17664a7.a25f122e.js new file mode 100644 index 0000000000..175230ac88 --- /dev/null +++ b/assets/js/d17664a7.a25f122e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6922],{3388:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>E,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var a=n(7462),r=(n(7294),n(3905));n(5657);const o={},s="STREAMS",l={unversionedId:"about/references/keywords/STREAMS",id:"about/references/keywords/STREAMS",title:"STREAMS",description:"MODELS /",source:"@site/docs/about/references/keywords/STREAMS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STREAMS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM"},next:{title:"SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"}},E={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],i={toc:d},S="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(S,(0,a.Z)({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"streams"},"STREAMS"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," /\n","[...]"," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/STREAMS"},"STREAMS")),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"This keyword can ",(0,r.kt)("strong",{parentName:"p"},"only")," be utilised for a ",(0,r.kt)("inlineCode",{parentName:"p"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")," model type."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"STREAMS")," is a list of all in- and out-going streams for the compressor train."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The same equation of state (EOS) must be used for each INGOING stream fluid models"),(0,r.kt)("li",{parentName:"ul"},"OUTGOING fluid models ",(0,r.kt)("strong",{parentName:"li"},"cannot")," be specified.")),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING \n ...\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n ...\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d185ab52.49042892.js b/assets/js/d185ab52.49042892.js new file mode 100644 index 0000000000..65ad07e13a --- /dev/null +++ b/assets/js/d185ab52.49042892.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9524],{3322:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>E,metadata:()=>T,toc:()=>S});var n=a(7462),r=(a(7294),a(3905));a(5657);const E={},o="TOTAL_SYSTEM_RATE",T={unversionedId:"about/references/keywords/TOTAL_SYSTEM_RATE",id:"about/references/keywords/TOTAL_SYSTEM_RATE",title:"TOTAL_SYSTEM_RATE",description:"INSTALLATIONS / [...] /",source:"@site/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES"},next:{title:"TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES"}},s={},S=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],l={toc:S},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},l,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"total_system_rate"},"TOTAL_SYSTEM_RATE"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," / ","[...]"," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE"},"TOTAL_SYSTEM_RATE")),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"Used to define the total system rate ","[Sm",(0,r.kt)("sup",null,"3"),"/day]"," for ",(0,r.kt)("inlineCode",{parentName:"p"},"ENERGY_USAGE_MODEL")," of type ",(0,r.kt)("inlineCode",{parentName:"p"},"COMPRESSOR_SYSTEM"),"\nand ",(0,r.kt)("inlineCode",{parentName:"p"},"PUMP_SYSTEM"),"."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system [Sm3/day]>\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d19423a2.564ae984.js b/assets/js/d19423a2.564ae984.js new file mode 100644 index 0000000000..5414e27661 --- /dev/null +++ b/assets/js/d19423a2.564ae984.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1686],{8179:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>r,contentTitle:()=>u,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var a=o(7462),i=(o(7294),o(3905));o(5657);const n={title:"Overview"},u="Get started",s={unversionedId:"contribute/documentation-guide/documentation",id:"contribute/documentation-guide/documentation",title:"Overview",description:"This site was generated from the contents of your documentation folder using Docusaurus.",source:"@site/docs/contribute/documentation-guide/01-documentation.md",sourceDirName:"contribute/documentation-guide",slug:"/contribute/documentation-guide/documentation",permalink:"/ecalc/docs/contribute/documentation-guide/documentation",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/documentation-guide/01-documentation.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Overview"},sidebar:"contribute",previous:{title:"Documentation",permalink:"/ecalc/docs/category/documentation"},next:{title:"Markdown",permalink:"/ecalc/docs/contribute/documentation-guide/markdown"}},r={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Contributing",id:"contributing",level:2},{value:"How it works",id:"how-it-works",level:2},{value:"Special features",id:"special-features",level:2}],l={toc:c},d="wrapper";function m(e){let{components:t,...o}=e;return(0,i.kt)(d,(0,a.Z)({},l,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"get-started"},"Get started"),(0,i.kt)("p",null,"This site was generated from the contents of your ",(0,i.kt)("inlineCode",{parentName:"p"},"documentation")," folder using ",(0,i.kt)("a",{parentName:"p",href:"https://docusaurus.io/"},"Docusaurus"),"."),(0,i.kt)("p",null,"You will find the full documentation of Docusaurus here: ",(0,i.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/next"},"Docusaurus Docs"),"."),(0,i.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,i.kt)("p",null,"You can contribute as long as you have access to the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/equinor/ecalc"},"ecalc - GitHub Repository"),".\nIt is entirely possible to make changes by using your web browser alone. However, if you want to get live feedback on your\nchanges, we recommend that you run the documentation locally with the following prerequisites:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"Linux or macOS"),": For ",(0,i.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/en-us/windows/wsl/install-win10"},"Windows you can run Ubuntu or similar in WSL 2"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"Git"),": ",(0,i.kt)("a",{parentName:"li",href:"/ecalc/docs/contribute/guides/git#setting-up-git"},"Set up Git")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"Node"),": Download from nodejs.org or use ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/nvm-sh/nvm"},"nvm"))),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Since not all managed computers have the ability to install Node, you can use an IDE such as PyCharm, IntelliJ, VSCode, or similar, to preview Markdown code.\nThis has some limitations such as missing navigation bar, and it does not preview Docusaurus specific syntax such as the Admonitions used here.")),(0,i.kt)("h2",{id:"contributing"},"Contributing"),(0,i.kt)("p",null,"As a contributor you will have to use Git. Please find the ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/contribute/guides/git"},"Git Documentation")," for more details about git."),(0,i.kt)("h2",{id:"how-it-works"},"How it works"),(0,i.kt)("p",null,"From Docusaurus own documentation:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc).")),(0,i.kt)("p",null,"While Docusaurus is rich on features, we use it mostly to host markdown pages. The main bulk of the documentation is located in ",(0,i.kt)("inlineCode",{parentName:"p"},"documentation/docs"),". This is where you as a collaborator are encouraged to make changes."),(0,i.kt)("p",null,"For a quick intro to Markdown, see our ",(0,i.kt)("a",{parentName:"p",href:"/ecalc/docs/contribute/documentation-guide/markdown"},"Markdown section"),"."),(0,i.kt)("h2",{id:"special-features"},"Special features"),(0,i.kt)("p",null,"Docusuaurs has some special features that we are using actively. Please find the links listed here:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docusaurus.io/docs/next/markdown-features/math-equations"},"Math Equations using LaTeX")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docusaurus.io/docs/next/markdown-features/code-blocks"},"Code blocks")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docusaurus.io/docs/next/markdown-features/admonitions"},"Admonitions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docusaurus.io/docs/next/markdown-features/diagrams"},"Diagrams using Mermaid")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docusaurus.io/docs/next/markdown-features/head-metadata"},"Head metadata")," to set titles, menu order, etc.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d2b7592b.28903a59.js b/assets/js/d2b7592b.28903a59.js new file mode 100644 index 0000000000..e713a8db7f --- /dev/null +++ b/assets/js/d2b7592b.28903a59.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3305],{5242:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>S,contentTitle:()=>a,default:()=>E,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var r=t(7462),s=(t(7294),t(3905));t(5657);const o={},a="OPERATIONAL_SETTINGS",i={unversionedId:"about/references/keywords/OPERATIONAL_SETTINGS",id:"about/references/keywords/OPERATIONAL_SETTINGS",title:"OPERATIONAL_SETTINGS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"NAME",permalink:"/ecalc/docs/about/references/keywords/NAME"},next:{title:"POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"}},S={},p=[{value:"Description",id:"description",level:2},{value:"RATES",id:"rates",level:3},{value:"RATE_FRACTIONS",id:"rate_fractions",level:3},{value:"SUCTION_PRESSURES",id:"suction_pressures",level:3},{value:"DISCHARGE_PRESSURES",id:"discharge_pressures",level:3},{value:"FLUID_DENSITIES",id:"fluid_densities",level:3},{value:"CROSSOVER",id:"crossover",level:3},{value:"Example 1:",id:"example-1",level:3},{value:"Example 2:",id:"example-2",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:p},l="wrapper";function E(e){let{components:n,...t}=e;return(0,s.kt)(l,(0,r.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"operational_settings"},"OPERATIONAL_SETTINGS"),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},"OPERATIONAL_SETTINGS")),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,"Used to define the operational settings in an ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"\nof type ",(0,s.kt)("inlineCode",{parentName:"p"},"PUMP_SYSTEM")," or ",(0,s.kt)("inlineCode",{parentName:"p"},"COMPRESSOR_SYSTEM"),"."),(0,s.kt)("p",null,"The rate ","[Sm",(0,s.kt)("sup",null,"3"),"/day]"," through each consumer in the system may be specified in two different ways, either directly using\n",(0,s.kt)("inlineCode",{parentName:"p"},"RATES"),", or by defining the ",(0,s.kt)("inlineCode",{parentName:"p"},"rate fraction<RATE_FRACTIONS>")," for each consumer which is then multiplied with the\n",(0,s.kt)("inlineCode",{parentName:"p"},"total system rate<TOTAL_SYSTEM_RATE>"),"."),(0,s.kt)("p",null,"The suction pressure may either be specified with ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"},"SUCTION_PRESSURE"),"\nwhich will then be the common suction pressure for all consumers in the system. Alternatively,\n",(0,s.kt)("inlineCode",{parentName:"p"},"SUCTION_PRESSURES")," may be used to specify one suction pressure expression per consumer."),(0,s.kt)("p",null,"The discharge pressure may either be specified with ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"},"DISCHARGE_PRESSURE"),"\nwhich will then be the common discharge pressure for all consumers in the system. Alternatively,\n",(0,s.kt)("inlineCode",{parentName:"p"},"DISCHARGE_PRESSURES")," may be used to specify one discharge pressure expression per consumer."),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"CROSSOVER")," may be used to specify if there are any available cross-overs between the consumers in this operational\nsetting."),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"FLUID_DENSITIES")," may be used for pump systems to specify one fluid density expression per pump."),(0,s.kt)("p",null,"For all keywords where there is one expression per consumer, ",(0,s.kt)("inlineCode",{parentName:"p"},"RATES"),", ",(0,s.kt)("inlineCode",{parentName:"p"},"RATE_FRACTIONS"),", ",(0,s.kt)("inlineCode",{parentName:"p"},"SUCTION_PRESSURES"),",\n",(0,s.kt)("inlineCode",{parentName:"p"},"DISCHARGE_PRESSURES")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"FLUID_DENSITIES"),", the expressions must be entered in a\nlist where the number of elements is equal to the number of ",(0,s.kt)("inlineCode",{parentName:"p"},"compressors<COMPRESSORS>"),"/",(0,s.kt)("inlineCode",{parentName:"p"},"pumps<PUMPS>")),(0,s.kt)("h3",{id:"rates"},"RATES"),(0,s.kt)("p",null,"A list with one expression per consumer specifying the rate ","[Sm",(0,s.kt)("sup",null,"3"),"/day]"," for each consumer. Use either ",(0,s.kt)("inlineCode",{parentName:"p"},"RATES")," or ",(0,s.kt)("inlineCode",{parentName:"p"},"RATE_FRACTIONS"),",\nnot both in one operational setting."),(0,s.kt)("h3",{id:"rate_fractions"},"RATE_FRACTIONS"),(0,s.kt)("p",null,"A list with one expression per consumer specifying the rate fraction for each consumer. If this is used,\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE"},"TOTAL_SYSTEM_RATE")," for the ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"\nis also required. Use either ",(0,s.kt)("inlineCode",{parentName:"p"},"RATES")," or ",(0,s.kt)("inlineCode",{parentName:"p"},"RATE_FRACTIONS"),", not both in one operational setting."),(0,s.kt)("h3",{id:"suction_pressures"},"SUCTION_PRESSURES"),(0,s.kt)("p",null,"A list with one expression per consumer specifying the suction pressure for each consumer. Use either ",(0,s.kt)("inlineCode",{parentName:"p"},"SUCTION_PRESSURES")," or\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"},"SUCTION_PRESSURE"),", not both in the same operational setting."),(0,s.kt)("p",null,"Use ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"},"SUCTION_PRESSURE")," to set the same suction pressure for all consumers in the system and\n",(0,s.kt)("inlineCode",{parentName:"p"},"SUCTION_PRESSURES")," to specify one suction pressure expression per consumer."),(0,s.kt)("h3",{id:"discharge_pressures"},"DISCHARGE_PRESSURES"),(0,s.kt)("p",null,"A list with one expression per consumer specifying the discharge pressure for each consumer. Use either ",(0,s.kt)("inlineCode",{parentName:"p"},"DISCHARGE_PRESSURES"),"\nor ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"},"DISCHARGE_PRESSURE"),", not both in the same operational setting."),(0,s.kt)("p",null,"Use ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"},"DISCHARGE_PRESSURE")," to set the same discharge pressure for all consumers in the system and\n",(0,s.kt)("inlineCode",{parentName:"p"},"DISCHARGE_PRESSURES")," to specify one discharge pressure expression per consumer."),(0,s.kt)("h3",{id:"fluid_densities"},"FLUID_DENSITIES"),(0,s.kt)("p",null,"Only supported for ",(0,s.kt)("inlineCode",{parentName:"p"},"energy usage models<ENERGY_USAGE_MODEL>")," of type ",(0,s.kt)("inlineCode",{parentName:"p"},"PUMP_SYSTEM"),".\nA list with one expression per consumer specifying the fluid density for each consumer. If used, it will over-ride\n",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"},"FLUID_DENSITY")," for the ",(0,s.kt)("inlineCode",{parentName:"p"},"PUMP_SYSTEM"),"."),(0,s.kt)("p",null,"Use ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"},"FLUID_DENSITY")," for the ",(0,s.kt)("inlineCode",{parentName:"p"},"energy usage models<ENERGY_USAGE_MODEL>"),"\nto set one fixed fluid density for the entire system for all operational settings. Use\n",(0,s.kt)("inlineCode",{parentName:"p"},"FLUID_DENSITIES")," for the ",(0,s.kt)("inlineCode",{parentName:"p"},"operational setting<OPERATIONAL_SETTINGS>")," to vary the fluid density between consumers and operational settings."),(0,s.kt)("h3",{id:"crossover"},"CROSSOVER"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"CROSSOVER"),' specifies if rates are to be crossed over to another consumer if rate capacity is exceeded. If the\nenergy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the\nconsumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. To avoid\nloops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure\nat the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending"\nconsumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower\npressure, but not possible to "pressure up" in the crossover flow line.\nSome examples show how the crossover logic works:'),(0,s.kt)("p",null,"Crossover is given as and list of integer values for the first position is the first consumer, second position is the\nsecond consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over\npossible. ",(0,s.kt)("strong",{parentName:"p"},"Note that we use 1-index here.")),(0,s.kt)("h3",{id:"example-1"},"Example 1:"),(0,s.kt)("p",null,"Two consumers where there is a cross-over such that if the rate for the first consumer exceeds its capacity,\nthe excess rate will be processed by the second consumer. The second consumer can not cross-over to anyone."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"CROSSOVER: [2, 0]\n")),(0,s.kt)("h3",{id:"example-2"},"Example 2:"),(0,s.kt)("p",null,"The first and second consumers may both send exceeding rate to the third consumer if their capacity is\nexceeded."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"CROSSOVER: [3,3,0]\n")),(0,s.kt)("h2",{id:"format"},"Format"),(0,s.kt)("h2",{id:"example"},"Example"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n - RATES:\n - SIM1;GAS_SALES\n - 0\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n - RATES:\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n CROSSOVER: [3, 3, 0]\n")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: (1000 {*} SIM1;WATER_PROD {+} 1050 {*} SIM2;WATER_PROD) {/} (SIM1;WATER_PROD {+} SIM2;WATER_PROD)\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITIES:\n - 1000\n - 1050\n")))}E.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d2eeb42a.589753c5.js b/assets/js/d2eeb42a.589753c5.js new file mode 100644 index 0000000000..86deccd87e --- /dev/null +++ b/assets/js/d2eeb42a.589753c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8485],{8569:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var n=t(7462),c=(t(7294),t(3905));t(5657);const a={title:"API reference",sidebar_position:3},i="API reference",o={unversionedId:"about/references/api/index",id:"about/references/api/index",title:"API reference",description:"Generated API reference for the libecalc library can be found here.",source:"@site/docs/about/references/api/index.md",sourceDirName:"about/references/api",slug:"/about/references/api/",permalink:"/ecalc/docs/about/references/api/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/api/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"API reference",sidebar_position:3},sidebar:"about",previous:{title:"!include",permalink:"/ecalc/docs/about/references/keywords/include"},next:{title:"CLI",permalink:"/ecalc/docs/about/references/cli_reference"}},s={},d=[],u={toc:d},l="wrapper";function f(e){let{components:r,...t}=e;return(0,c.kt)(l,(0,n.Z)({},u,t,{components:r,mdxType:"MDXLayout"}),(0,c.kt)("h1",{id:"api-reference"},"API reference"),(0,c.kt)("p",null,"Generated API reference for the libecalc library can be found ",(0,c.kt)("a",{parentName:"p",href:"https://equinor.github.io/ecalc/docs/about/references/api/libecalc.html"},"here"),"."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d547c67b.c5136bf3.js b/assets/js/d547c67b.c5136bf3.js new file mode 100644 index 0000000000..7fd97d4c34 --- /dev/null +++ b/assets/js/d547c67b.c5136bf3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5917],{6669:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>d,toc:()=>l});var o=n(7462),r=(n(7294),n(3905));n(5657);const s={},a="FLUID_MODEL",d={unversionedId:"about/references/keywords/FLUID_MODEL",id:"about/references/keywords/FLUID_MODEL",title:"FLUID_MODEL",description:"Description",source:"@site/docs/about/references/keywords/FLUID_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FLUID_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"},next:{title:"FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],c={toc:l},m="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"fluid_model"},"FLUID_MODEL"),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"This keyword is necessary when defining a compressor model. It relates to a defined fluid model in the ",(0,r.kt)("inlineCode",{parentName:"p"},"MODELS")," section. How a fluid model is defined is described in further detail in ",(0,r.kt)("a",{parentName:"p",href:"../../modelling/setup/models/fluid_model"},"FLUID MODEL"),"."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: <compressor model type>\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: fluid_model\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n\n - NAME: single_speed_compressor\n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d5b0ea4b.09b9be2c.js b/assets/js/d5b0ea4b.09b9be2c.js new file mode 100644 index 0000000000..e687813ba8 --- /dev/null +++ b/assets/js/d5b0ea4b.09b9be2c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2991],{9389:t=>{t.exports=JSON.parse('{"title":"Documentation","description":"This section of the documentation lists instructions and guidelines on how to contribute to the documentation","slug":"/category/documentation","permalink":"/ecalc/docs/category/documentation","navigation":{"previous":{"title":"Get started","permalink":"/ecalc/docs/contribute/get-started"},"next":{"title":"Overview","permalink":"/ecalc/docs/contribute/documentation-guide/documentation"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d5cd246e.6cb6f44d.js b/assets/js/d5cd246e.6cb6f44d.js new file mode 100644 index 0000000000..216b07defe --- /dev/null +++ b/assets/js/d5cd246e.6cb6f44d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4441],{5797:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var o=n(7462),a=(n(7294),n(3905));n(5657);const i={title:"Direct consumers",sidebar_position:7},l="DIRECT ENERGY USAGE MODEL",s={unversionedId:"about/modelling/setup/installations/direct_consumers",id:"about/modelling/setup/installations/direct_consumers",title:"Direct consumers",description:"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either",source:"@site/docs/about/modelling/setup/installations/direct_consumers.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/direct_consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/direct_consumers.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Direct consumers",sidebar_position:7},sidebar:"about",previous:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations"},next:{title:"eCalc\u2122 Workflow",permalink:"/ecalc/docs/about/modelling/workflow/"}},r={},c=[{value:"Format",id:"format",level:4},{value:"Example",id:"example",level:4}],u={toc:c},d="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(d,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"direct-energy-usage-model"},"DIRECT ENERGY USAGE MODEL"),(0,a.kt)("p",null,"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either\naccompanied by ",(0,a.kt)("inlineCode",{parentName:"p"},"LOAD")," (for electrical consumers) or ",(0,a.kt)("inlineCode",{parentName:"p"},"FUELRATE")," (for fuel consumers). The energy usage will be\nequal to the result of the expression given for ",(0,a.kt)("inlineCode",{parentName:"p"},"LOAD"),"/",(0,a.kt)("inlineCode",{parentName:"p"},"FUELRATE"),"."),(0,a.kt)("p",null,"When a model is run with ",(0,a.kt)("inlineCode",{parentName:"p"},"REGULARITY"),", there is an option to specify whether the direct consumer is of stream day\nor calendar day energy usage rate with ",(0,a.kt)("inlineCode",{parentName:"p"},"CONSUMPTION_RATE_TYPE"),"."),(0,a.kt)("h4",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD/FUELRATE: <choose either load or fuelrate>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION/S: <choose either condition or conditions>\n POWERLOSSFACTOR: <power loss factor (number)>\n")),(0,a.kt)("h4",{id:"example"},"Example"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Direct load")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10 \n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Direct fuel rate")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: 100000 \n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d77448ee.561ca51b.js b/assets/js/d77448ee.561ca51b.js new file mode 100644 index 0000000000..43ffd9d2c1 --- /dev/null +++ b/assets/js/d77448ee.561ca51b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5201],{388:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>E,contentTitle:()=>s,default:()=>d,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var a=r(7462),o=(r(7294),r(3905));r(5657);const n={},s="COMPRESSOR_MODEL",c={unversionedId:"about/references/keywords/COMPRESSOR_MODEL",id:"about/references/keywords/COMPRESSOR_MODEL",title:"COMPRESSOR_MODEL",description:"ENERGYUSAGEMODEL / COMPRESSORMODEL",source:"@site/docs/about/references/keywords/COMPRESSOR_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY"},next:{title:"COMPRESSORS",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"}},E={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],O={toc:l},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,a.Z)({},O,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"compressor_model"},"COMPRESSOR_MODEL"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," / ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL"},"COMPRESSOR_MODEL")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Required"),(0,o.kt)("th",{parentName:"tr",align:null},"Child of"),(0,o.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Yes"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")),(0,o.kt)("td",{parentName:"tr",align:null},"None")))),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"This keyword links the predefined ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},"COMPRESSOR MODEL")," to the ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"COMPRESSOR ENERGY USAGE MODEL"),"."),(0,o.kt)("p",null,"Note that this can ",(0,o.kt)("strong",{parentName:"p"},"only")," be used when a ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"},"COMPRESSOR SYSTEM")," is used. It is possible to use the same compressor model twice in the same system - this is a common feature when there are identical compressor trains in parallel."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model>\n ...\n")),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.3e6cf8f9.js b/assets/js/df203c0f.3e6cf8f9.js new file mode 100644 index 0000000000..206616e8aa --- /dev/null +++ b/assets/js/df203c0f.3e6cf8f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9924],{491:(e,t,l)=>{l.r(t),l.d(t,{default:()=>d});var a=l(7294),n=l(6010),r=l(9960),c=l(8824),o=l(1944),s=l(5281),i=l(5999),u=l(179),m=l(197);function g(e){let{doc:t}=e;return a.createElement("article",{className:"margin-vert--lg"},a.createElement(r.Z,{to:t.permalink},a.createElement("h2",null,t.title)),t.description&&a.createElement("p",null,t.description))}function d(e){let{tag:t}=e;const l=function(){const{selectMessage:e}=(0,c.c)();return t=>e(t,(0,i.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:t}))}(),d=(0,i.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:l(t.count),tagName:t.label});return a.createElement(o.FG,{className:(0,n.Z)(s.k.wrapper.docsPages,s.k.page.docsTagDocListPage)},a.createElement(o.d,{title:d}),a.createElement(m.Z,{tag:"doc_tag_doc_list"}),a.createElement(u.Z,null,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement("main",{className:"col col--8 col--offset-2"},a.createElement("header",{className:"margin-bottom--xl"},a.createElement("h1",null,d),a.createElement(r.Z,{href:t.allTagsPath},a.createElement(i.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),a.createElement("section",{className:"margin-vert--lg"},t.items.map((e=>a.createElement(g,{key:e.id,doc:e})))))))))}},8824:(e,t,l)=>{l.d(t,{c:()=>i});var a=l(7294),n=l(2263);const r=["zero","one","two","few","many","other"];function c(e){return r.filter((t=>e.includes(t)))}const o={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function s(){const{i18n:{currentLocale:e}}=(0,n.Z)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),o}}),[e])}function i(){const e=s();return{selectMessage:(t,l)=>function(e,t,l){const a=e.split("|");if(1===a.length)return a[0];a.length>l.pluralForms.length&&console.error(`For locale=${l.locale}, a maximum of ${l.pluralForms.length} plural forms are expected (${l.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const n=l.select(t),r=l.pluralForms.indexOf(n);return a[Math.min(r,a.length-1)]}(l,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/df3c944d.674ff425.js b/assets/js/df3c944d.674ff425.js new file mode 100644 index 0000000000..392653fff7 --- /dev/null +++ b/assets/js/df3c944d.674ff425.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7611],{6909:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var n=a(7462),l=(a(7294),a(3905));a(5657);const r={},o="ENERGY_USAGE_MODEL",i={unversionedId:"about/references/keywords/ENERGY_USAGE_MODEL",id:"about/references/keywords/ENERGY_USAGE_MODEL",title:"ENERGY_USAGE_MODEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION"},next:{title:"EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION"}},s={},d=[{value:"Description",id:"description",level:2},{value:"Temporal energy usage model",id:"temporal-energy-usage-model",level:2}],u={toc:d},p="wrapper";function c(e){let{components:t,...a}=e;return(0,l.kt)(p,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"energy_usage_model"},"ENERGY_USAGE_MODEL"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Required"),(0,l.kt)("th",{parentName:"tr",align:null},"Child of"),(0,l.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Yes"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"FUELCONSUMERS")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"COMPRESSORS"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"CONSUMERS")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"CONDITION")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"CONDITIONS")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"CONSUMPTION_RATE_TYPE")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"DISCHARGE_PRESSURE")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"ENERGYFUNCTION")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"FLUID_DENSITY")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"FUELRATE")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"LOAD")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"OPERATIONAL_SETTINGS")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"POWERLOSSFACTOR")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"PUMPS")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"RATE")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"SUCTION_PRESSURE")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"TOTAL_SYSTEM_RATE")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"TYPE")," ",(0,l.kt)("br",null)," ",(0,l.kt)("inlineCode",{parentName:"td"},"VARIABLES"))))),(0,l.kt)("h2",{id:"description"},"Description"),(0,l.kt)("p",null,"The energy usage model specifies the data to calculate the energy usage of a consumer. This data is used to set up a\nfunction that may be evaluated for a set of time series and returns a result including the calculated energy usage."),(0,l.kt)("p",null,"The type of energy usage model is defined by ",(0,l.kt)("inlineCode",{parentName:"p"},"TYPE"),", and which keywords are required/supported will be different\nfor each type. The available types are:"),(0,l.kt)("p",null,"Energy usage model types:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/direct_consumers"},"DIRECT")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations"},"TABULATED")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump-energy-usage-model"},"PUMP")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump_system-energy-usage-model"},"PUMP_SYSTEM")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor"},"COMPRESSOR")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system"},"COMPRESSOR_SYSTEM")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"))),(0,l.kt)("p",null,"For all types, the keywords ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONDITION"},"CONDITION"),", ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONDITIONS"},"CONDITIONS")," and ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"},"POWERLOSSFACTOR")," are optional and supported, and these will act\non the calculated energy usage after the calculated energy usage from the model defined by ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE"),"."),(0,l.kt)("h2",{id:"temporal-energy-usage-model"},"Temporal energy usage model"),(0,l.kt)("p",null,"It is possible to update the energy model within a consumer over time, as long as the\n",(0,l.kt)("inlineCode",{parentName:"p"},"ENERGY_USAGE_MODEL")," stays within one type. The ",(0,l.kt)("inlineCode",{parentName:"p"},"TYPE")," cannot change over time. In case ",(0,l.kt)("inlineCode",{parentName:"p"},"TYPE")," evolution is needed, we recommend that you split the model into two ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMERS"},"CONSUMERS"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n 2020-01-01:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference_initial\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n 2022-01-01:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference_new\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dfbab2f3.7d4851a2.js b/assets/js/dfbab2f3.7d4851a2.js new file mode 100644 index 0000000000..331ef1cf94 --- /dev/null +++ b/assets/js/dfbab2f3.7d4851a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7907],{743:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>r,contentTitle:()=>i,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));a(5657);const l={title:"CLI",sidebar_position:2,description:"Getting started with eCalc CLI"},i="eCalc CLI",s={unversionedId:"about/getting_started/cli/index",id:"about/getting_started/cli/index",title:"CLI",description:"Getting started with eCalc CLI",source:"@site/docs/about/getting_started/cli/index.md",sourceDirName:"about/getting_started/cli",slug:"/about/getting_started/cli/",permalink:"/ecalc/docs/about/getting_started/cli/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/cli/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"CLI",sidebar_position:2,description:"Getting started with eCalc CLI"},sidebar:"about",previous:{title:"Getting started",permalink:"/ecalc/docs/about/getting_started/"},next:{title:"FAQ / Troubleshooting",permalink:"/ecalc/docs/about/getting_started/cli/faq"}},r={},c=[{value:"Example Usage",id:"example-usage",level:2},{value:"Use show command to inspect results",id:"use-show-command-to-inspect-results",level:4},{value:"Output Monthly CSV data",id:"output-monthly-csv-data",level:4},{value:"Specify different output folder",id:"specify-different-output-folder",level:4},{value:"Specify a different naming prefix to outputs",id:"specify-a-different-naming-prefix-to-outputs",level:4},{value:"Show stack trace for debugging",id:"show-stack-trace-for-debugging",level:4}],u={toc:c},d="wrapper";function p(e){let{components:t,...a}=e;return(0,o.kt)(d,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ecalc-cli"},"eCalc CLI"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"It is currently ",(0,o.kt)("strong",{parentName:"p"},"recommended")," to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library")),(0,o.kt)("p",null,"The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the\neCalc Python library, and should be accessible from the command line as ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc"),"."),(0,o.kt)("p",null,"See all commands and options in the ",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/cli_reference"},"CLI reference")),(0,o.kt)("h2",{id:"example-usage"},"Example Usage"),(0,o.kt)("h4",{id:"use-show-command-to-inspect-results"},"Use show command to inspect results"),(0,o.kt)("p",null,"First run ecalc (here shown with default output folder)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc run /somelocation/myfield.yaml --output-folder output\n")),(0,o.kt)("p",null,"Enter the output folder"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ cd output\n")),(0,o.kt)("p",null,"Show results for a single component"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc show results --name waterinj --output-format json\n")),(0,o.kt)("p",null,"or as csv"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc show results --name waterinj --output-format csv\n")),(0,o.kt)("p",null,"or write the full csv result to a file (this will give the same output as ",(0,o.kt)("inlineCode",{parentName:"p"},"ecalc run")," with the csv option)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc show results --output-format csv --file results.csv\n")),(0,o.kt)("h4",{id:"output-monthly-csv-data"},"Output Monthly CSV data"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc run -f MONTH /somelocation/myfield.yml\n")),(0,o.kt)("h4",{id:"specify-different-output-folder"},"Specify different output folder"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml\n")),(0,o.kt)("h4",{id:"specify-a-different-naming-prefix-to-outputs"},"Specify a different naming prefix to outputs"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc run -n myfield_myproject /somelocation/myfield.yml\n")),(0,o.kt)("h4",{id:"show-stack-trace-for-debugging"},"Show stack trace for debugging"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ ecalc run --log DEBUG /somelocation/myfield.yml\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e023757a.976848c0.js b/assets/js/e023757a.976848c0.js new file mode 100644 index 0000000000..91af2c8631 --- /dev/null +++ b/assets/js/e023757a.976848c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4858],{7101:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>T,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var o=r(7462),s=(r(7294),r(3905));r(5657);const n={},a="INSTALLATIONS",i={unversionedId:"about/references/keywords/INSTALLATIONS",id:"about/references/keywords/INSTALLATIONS",title:"INSTALLATIONS",description:"INSTALLATIONS",source:"@site/docs/about/references/keywords/INSTALLATIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INSTALLATIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE"},next:{title:"INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"}},c={},l=[{value:"Description",id:"description",level:2}],d={toc:l},u="wrapper";function T(e){let{components:t,...r}=e;return(0,s.kt)(u,(0,o.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"installations"},"INSTALLATIONS"),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")),(0,s.kt)("h2",{id:"description"},"Description"),(0,s.kt)("p",null,"In ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation."),(0,s.kt)("p",null,"The structure of the keywords under installations\nis linked to the structure in the general consumer overview for an installation."),(0,s.kt)("p",null,"See ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/installations/"},"INSTALLATIONS")," for more details about usage."))}T.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e0edce1a.d96eec42.js b/assets/js/e0edce1a.d96eec42.js new file mode 100644 index 0000000000..d85b305b8b --- /dev/null +++ b/assets/js/e0edce1a.d96eec42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8596],{1790:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>d});var n=a(7462),r=(a(7294),a(3905));a(5657);const l={},o="FUEL",s={unversionedId:"about/references/keywords/FUEL",id:"about/references/keywords/FUEL",title:"FUEL",description:"... /",source:"@site/docs/about/references/keywords/FUEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL"},next:{title:"FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Constant fuel type",id:"constant-fuel-type",level:4},{value:"Time-varying fuel type",id:"time-varying-fuel-type",level:4}],u={toc:d},c="wrapper";function p(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"fuel"},"FUEL"),(0,r.kt)("p",null,"... /\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL"},"FUEL")),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL"},"FUEL")," keyword defines the fuel type that can be used in\n",(0,r.kt)("inlineCode",{parentName:"p"},"INSTALLATIONS"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"GENERATORSETS"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"FUELCONSUMERS"),".\nIt can be set directly and used for the entire time interval, or it can be set differently for different time intervals."),(0,r.kt)("h3",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL: <fuel_type>\n")),(0,r.kt)("p",null,"or"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL:\n <DATE>: <fuel_type>\n <DATE>: <fuel_type>\n")),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("h4",{id:"constant-fuel-type"},"Constant fuel type"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL: fuel_gas\n")),(0,r.kt)("h4",{id:"time-varying-fuel-type"},"Time-varying fuel type"),(0,r.kt)("p",null,"This example assumes that two fuels have been defined: ",(0,r.kt)("inlineCode",{parentName:"p"},"fuel_gas")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"diesel"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL:\n 1994-01-01: fuel_gas\n 2000-01-01: diesel\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e1df8231.c1c0acd5.js b/assets/js/e1df8231.c1c0acd5.js new file mode 100644 index 0000000000..496c55b477 --- /dev/null +++ b/assets/js/e1df8231.c1c0acd5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[517],{9328:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var o=a(7462),r=(a(7294),a(3905));a(5657);const i={title:"YAML",sidebar_position:3,description:"Getting started with YAML"},n="YAML",s={unversionedId:"about/getting_started/yaml/index",id:"about/getting_started/yaml/index",title:"YAML",description:"Getting started with YAML",source:"@site/docs/about/getting_started/yaml/index.md",sourceDirName:"about/getting_started/yaml",slug:"/about/getting_started/yaml/",permalink:"/ecalc/docs/about/getting_started/yaml/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/yaml/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"YAML",sidebar_position:3,description:"Getting started with YAML"},sidebar:"about",previous:{title:"Python Library",permalink:"/ecalc/docs/about/getting_started/library/"},next:{title:"Modelling guide",permalink:"/ecalc/docs/about/modelling/"}},l={},d=[],c={toc:d},u="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,o.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"yaml"},"YAML"),(0,r.kt)("p",null,"We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see ",(0,r.kt)("a",{parentName:"p",href:"https://learnxinyminutes.com/docs/yaml/"},"here")),(0,r.kt)("p",null,"The eCalc YAML model can either be run directly with the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/getting_started/cli/"},"eCalc CLI")," or loaded using the ",(0,r.kt)("a",{parentName:"p",href:"../library"},"Python library")),(0,r.kt)("p",null,"For getting started setting up your first eCalc YAML model, please see ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/"},"Setup an eCalc Model"),",\nlook at some example YAMLs ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/examples/"},"here")," and refer to the vocabulary that we use ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/"},"here"),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e2712b99.1031a418.js b/assets/js/e2712b99.1031a418.js new file mode 100644 index 0000000000..1e20d7b05c --- /dev/null +++ b/assets/js/e2712b99.1031a418.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7253],{8978:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>n,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var l=t(7462),r=(t(7294),t(3905));t(5657);const i={slug:"v8.1-release",title:"v8.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:11},n="eCalc v8.1",o={unversionedId:"changelog/v8-1",id:"changelog/v8-1",title:"v8.1",description:"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:",source:"@site/docs/changelog/v8-1.md",sourceDirName:"changelog",slug:"/changelog/v8.1-release",permalink:"/ecalc/docs/changelog/v8.1-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-1.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:11,frontMatter:{slug:"v8.1-release",title:"v8.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:11},sidebar:"changelog",previous:{title:"v8.0",permalink:"/ecalc/docs/changelog/v8.0-release"},next:{title:"v8.2",permalink:"/ecalc/docs/changelog/v8.2-release"}},s={},c=[{value:"New features",id:"new-features",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Input: YAML / Resource files",id:"input-yaml--resource-files",level:3},{value:"Output: LTP",id:"output-ltp",level:3}],u={toc:c},g="wrapper";function d(e){let{components:a,...t}=e;return(0,r.kt)(g,(0,l.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ecalc-v81"},"eCalc v8.1"),(0,r.kt)("p",null,"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:"),(0,r.kt)("h2",{id:"new-features"},"New features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bug fixes")),(0,r.kt)("h2",{id:"breaking-changes"},"Breaking changes"),(0,r.kt)("p",null,"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"),(0,r.kt)("h3",{id:"input-yaml--resource-files"},"Input: YAML / Resource files"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"We do no longer accept missing data in resource or timeseries resource files, since it easily leads to ambiguities and errors."),(0,r.kt)("li",{parentName:"ol"},"New Category: STEAM-TURBINE-GENERATOR has been introduced, which works similar as OFFSHORE-WIND"),(0,r.kt)("li",{parentName:"ol"},"TIME_SERIES has had a makeover with new type and renamed attributes, to be less ambiguous and error-prone. ")),(0,r.kt)("h3",{id:"output-ltp"},"Output: LTP"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"A few columns in LTP export has changed names in order to be compatible with Centuries"),(0,r.kt)("li",{parentName:"ol"},"A new column in LTP export has been introduced: steamTurbineGeneratorConsumption (matching with the new category)")),(0,r.kt)("p",null,"Check out the ",(0,r.kt)("a",{parentName:"p",href:"../about/migration_guides/v8_to_v81"},"migration guide")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e4be5833.caa19896.js b/assets/js/e4be5833.caa19896.js new file mode 100644 index 0000000000..38b7a9e7e0 --- /dev/null +++ b/assets/js/e4be5833.caa19896.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1487],{5252:(e,a,r)=>{r.r(a),r.d(a,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var t=r(7462),n=(r(7294),r(3905));r(5657);const o={},s="PRICE",c={unversionedId:"about/references/keywords/PRICE",id:"about/references/keywords/PRICE",title:"PRICE",description:"FUELTYPES /",source:"@site/docs/about/references/keywords/PRICE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/PRICE",permalink:"/ecalc/docs/about/references/keywords/PRICE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/PRICE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL"},next:{title:"PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Fixed price",id:"fixed-price",level:3},{value:"Variable price",id:"variable-price",level:3}],d={toc:l},p="wrapper";function u(e){let{components:a,...r}=e;return(0,n.kt)(p,(0,t.Z)({},d,r,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"price"},"PRICE"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/PRICE"},"PRICE")),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"The fuel ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/PRICE"},"PRICE")," defines the fuel cost (or the sales value of produced gas used as fuel).\nThe unit of the price is NOK/Sm",(0,n.kt)("sup",null,"3"),". ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/PRICE"},"PRICE")," can either be a fixed number or an expression (time series). Thus, it can be decided if a constant price or a price varying with time is needed."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL_TYPES:\n - NAME: <name>\n PRICE: <price>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("h3",{id:"fixed-price"},"Fixed price"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL_TYPES:\n - NAME: diesel\n PRICE: 9000 # NOK/Sm3\n")),(0,n.kt)("h3",{id:"variable-price"},"Variable price"),(0,n.kt)("p",null,"By making use of ",(0,n.kt)("inlineCode",{parentName:"p"},"Expressions"),", you can model a varying fuel price through time:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # kg/Sm3\n TAX: FUEL_PRICE_FILENAME;FUEL_PRICE\n QUOTA: 240 # NOK/ton CO2\n")),(0,n.kt)("p",null,"where the file ",(0,n.kt)("inlineCode",{parentName:"p"},"FUEL_PRICE_FILENAME.csv")," could have the following content:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"DATE, FUEL_PRICE\n01.01.2017, 9000\n01.01.2018, 9500\n01.01.2019, 9300\n01.01.2020, 9800\n01.01.2021, 9900\n01.01.2022, 10000\n01.01.2023, 10500\n")),(0,n.kt)("p",null,"Make sure the file ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," is set to ",(0,n.kt)("inlineCode",{parentName:"p"},"FUEL_PRICE")," to have a default ",(0,n.kt)("inlineCode",{parentName:"p"},"RIGHT"),"\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e7fdd821.35d1a93a.js b/assets/js/e7fdd821.35d1a93a.js new file mode 100644 index 0000000000..734a9ae244 --- /dev/null +++ b/assets/js/e7fdd821.35d1a93a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8202],{9424:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>N,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=r(7462),n=(r(7294),r(3905));r(5657);const o={},N="CONDITIONS",s={unversionedId:"about/references/keywords/CONDITIONS",id:"about/references/keywords/CONDITIONS",title:"CONDITIONS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONDITIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONDITIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION"},next:{title:"CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2}],d={toc:l},i="wrapper";function u(e){let{components:t,...r}=e;return(0,n.kt)(i,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"conditions"},"CONDITIONS"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONDITIONS"},"CONDITIONS")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"No"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"ENERGY_USAGE_MODEL")),(0,n.kt)("td",{parentName:"tr",align:null},"None")))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"See ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONDITION"},"CONDITION"),"."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"CONDITIONS:\n - <CONDITION>\n - <CONDITION>\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e862d0e9.7bf559c4.js b/assets/js/e862d0e9.7bf559c4.js new file mode 100644 index 0000000000..872c127322 --- /dev/null +++ b/assets/js/e862d0e9.7bf559c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8703],{3973:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>R,contentTitle:()=>s,default:()=>_,frontMatter:()=>E,metadata:()=>o,toc:()=>S});var n=r(7462),a=(r(7294),r(3905));r(5657);const E={},s="INTERSTAGE_CONTROL_PRESSURE",o={unversionedId:"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",id:"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",title:"INTERSTAGE_CONTROL_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},next:{title:"LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD"}},R={},S=[{value:"Description",id:"description",level:2},{value:"Use in MODELS",id:"use-in-models",level:3},{value:"Format",id:"format",level:4},{value:"Use in ENERGY_USAGE_MODEL",id:"use-in-energy_usage_model",level:3},{value:"Format",id:"format-1",level:4},{value:"Example",id:"example",level:4}],i={toc:S},l="wrapper";function _(e){let{components:t,...r}=e;return(0,a.kt)(l,(0,n.Z)({},i,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"interstage_control_pressure"},"INTERSTAGE_CONTROL_PRESSURE"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," / ","[...]"," /\n",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},"INTERSTAGE_CONTROL_PRESSURE")),(0,a.kt)("h2",{id:"description"},"Description"),(0,a.kt)("p",null,"This keyword can ",(0,a.kt)("strong",{parentName:"p"},"only")," be utilised for a ",(0,a.kt)("inlineCode",{parentName:"p"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES")," type, and it is used in two separate sections:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MODELS")," - to define the upstream and downstream pressure control methods"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENERGY_USAGE_MODEL")," - to define the interstage pressure")),(0,a.kt)("h3",{id:"use-in-models"},"Use in ",(0,a.kt)("a",{parentName:"h3",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"This keyword cannot be specified for the first stage, and it may only be used ",(0,a.kt)("strong",{parentName:"p"},"once")," in a given compression train.")),(0,a.kt)("p",null,"Under the ",(0,a.kt)("inlineCode",{parentName:"p"},"INTERSTAGE_CONTROL_PRESSURE")," keyword, the ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"},"UPSTREAM_PRESSURE_CONTROL")," and ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"},"DOWNSTREAM_PRESSURE_CONTROL")," keywords can be specified."),(0,a.kt)("h4",{id:"format"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <compressor model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE> \n DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>\n ...\n")),(0,a.kt)("p",null,'The reason why upstream and downstream pressure control methods need to be specified is that the compression train is essentially split in two - before and after the interstage pressure. Thus, a control method for each "side" of the model needs to be defined.\nSee ',(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},"Variable speed compressor train model with multiple streams and pressures")," for more details."),(0,a.kt)("h3",{id:"use-in-energy_usage_model"},"Use in ",(0,a.kt)("a",{parentName:"h3",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")),(0,a.kt)("p",null,"Within the ",(0,a.kt)("inlineCode",{parentName:"p"},"ENERGY_USAGE_MODEL")," section (",(0,a.kt)("strong",{parentName:"p"},"only")," when ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE")," is set to ",(0,a.kt)("inlineCode",{parentName:"p"},"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"),") the actual value for the interstage pressure is set in ",(0,a.kt)("strong",{parentName:"p"},"bar"),".\nThis can either be a single value or an ",(0,a.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EXPRESSION"},"EXPRESSION"),"."),(0,a.kt)("h4",{id:"format-1"},"Format"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: <reference name>\n ...\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure value/expression>\n ...\n")),(0,a.kt)("h4",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: export_compressor\n ...\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n SUCTION_PRESSURE: 10 # bar\n INTERSTAGE_CONTROL_PRESSURE: 40 #bar\n DISCHARGE_PRESSURE: 120 #bar\n")))}_.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e8ebc025.1ee80170.js b/assets/js/e8ebc025.1ee80170.js new file mode 100644 index 0000000000..496866467e --- /dev/null +++ b/assets/js/e8ebc025.1ee80170.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3902],{4844:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>d});var n=a(7462),o=(a(7294),a(3905));a(5657);const l={title:"Setup an eCalc\u2122 Model",sidebar_position:2,description:"Guide on how to setup an eCalc\u2122 model"},r="Set up an eCalc Model",i={unversionedId:"about/modelling/setup/index",id:"about/modelling/setup/index",title:"Setup an eCalc\u2122 Model",description:"Guide on how to setup an eCalc\u2122 model",source:"@site/docs/about/modelling/setup/index.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/",permalink:"/ecalc/docs/about/modelling/setup/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Setup an eCalc\u2122 Model",sidebar_position:2,description:"Guide on how to setup an eCalc\u2122 model"},sidebar:"about",previous:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling"},next:{title:"File format and syntax",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"}},s={},d=[],p={toc:d},u="wrapper";function c(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"set-up-an-ecalc-model"},"Set up an eCalc Model"),(0,o.kt)("p",null,"This section describes how to create your own eCalc\u2122 model file. "),(0,o.kt)("p",null,"There are six separate sections which make up each model, these being: "),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Input"),(0,o.kt)("th",{parentName:"tr",align:null},"Function"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"/ecalc/docs/about/modelling/setup/time_series"},"TIME_SERIES")),(0,o.kt)("td",{parentName:"tr",align:null},"Input of time dependent variables. For example, production profiles for an installation")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"/ecalc/docs/about/modelling/setup/facility_inputs/"},"FACILITY_INPUTS")),(0,o.kt)("td",{parentName:"tr",align:null},"Input of generator sets, and facility equipment that consumers either power or fuel ",(0,o.kt)("em",{parentName:"td"},"(with the exception of compressors that are modelled with compressor charts)"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"/ecalc/docs/about/modelling/setup/models/"},"MODELS")),(0,o.kt)("td",{parentName:"tr",align:null},"Input of compressor models that use compressor charts. Gas turbines that are directly coupled to a compressor are also included here")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"/ecalc/docs/about/modelling/setup/fuel_types"},"FUEL_TYPES")),(0,o.kt)("td",{parentName:"tr",align:null},"Input of the various fuel types used in the specified installation(s)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"/ecalc/docs/about/modelling/setup/variables"},"VARIABLES")),(0,o.kt)("td",{parentName:"tr",align:null},"Input of variables that can reference to in expressions within the YAML set-up file")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"/ecalc/docs/about/modelling/setup/installations/"},"INSTALLATIONS")),(0,o.kt)("td",{parentName:"tr",align:null},"This is essentially the only ",(0,o.kt)("em",{parentName:"td"},'"output"')," section in the YAML setup file. All the inputs are specified and related to specific platforms/rigs, and whether or not they consume either power or fuel")))),(0,o.kt)("p",null,"All of the above are mandatory inputs for eCalc\u2122 to run, with the exception of models (which is an optional, but still important input) and variables."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e9e63826.2f53c2d9.js b/assets/js/e9e63826.2f53c2d9.js new file mode 100644 index 0000000000..1f426e72ff --- /dev/null +++ b/assets/js/e9e63826.2f53c2d9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6159],{6215:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var n=a(7462),s=(a(7294),a(3905));a(5657);const r={title:"File format and syntax",sidebar_position:1,description:"YAML file format and syntax guide"},i="File format",o={unversionedId:"about/modelling/setup/file_format_and_syntax/index",id:"about/modelling/setup/file_format_and_syntax/index",title:"File format and syntax",description:"YAML file format and syntax guide",source:"@site/docs/about/modelling/setup/file_format_and_syntax/index.md",sourceDirName:"about/modelling/setup/file_format_and_syntax",slug:"/about/modelling/setup/file_format_and_syntax/",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/file_format_and_syntax/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"File format and syntax",sidebar_position:1,description:"YAML file format and syntax guide"},sidebar:"about",previous:{title:"Setup an eCalc\u2122 Model",permalink:"/ecalc/docs/about/modelling/setup/"},next:{title:"Expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions"}},l={},d=[{value:"Setup file syntax",id:"setup-file-syntax",level:2},{value:"Examples",id:"examples",level:2},{value:"YAML format example",id:"yaml-format-example",level:3},{value:"Full examples",id:"full-examples",level:3}],c={toc:d},u="wrapper";function m(e){let{components:t,...r}=e;return(0,s.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"file-format"},"File format"),(0,s.kt)("p",null,"The setup file is written in YAML format and needs to follow a strict pattern which consists of several levels specified by indentation. The indentation is very important. It is recommended to use an indentation of 2 spaces per level. At each level, there might be both required and optional keywords."),(0,s.kt)("h2",{id:"setup-file-syntax"},"Setup file syntax"),(0,s.kt)("p",null,"The overall system in eCalc is that the user defines inputs from subsurface and facility and\nthen establishes a model between these."),(0,s.kt)("p",null,"On the top level, the required keywords are ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")," which defines the input from facility characterization, ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," which defines time-dependant input parameters (e.g. reservoir profiles), ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES")," which defines the various fuel types used in the system, and ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," which is the top node defining the system of energy consumers. ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," is optional and may be used for multi-level energy usage models."),(0,s.kt)("p",null,"Documentation about how to set up each of these fields are found here, respectively:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES"),": List of input sources, CSV-files, containing all time series data including the\nreservoir variables."),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),": List of input files from facility characterization. Typically, this can be\ncharacteristics for an element in a consumer system or characteristics for a generator set.\nAlso, if fuel price or/and CO",(0,s.kt)("sub",null,"2")," tax is of type ",(0,s.kt)("inlineCode",{parentName:"li"},"VARIABLE_FUEL_PRICE")," or\n",(0,s.kt)("inlineCode",{parentName:"li"},"VARIABLE_EMISSION_TAX"),", these files should also be put here. These are later used as input\nto the energy functions for each consumer. Some may also be used as energy functions directly."),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},"FUEL_TYPES"),": Defining the fuel types being used in the model and the corresponding\nemissions."),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS"),": Used for multi-level models, one model may refer to other models from either\n",(0,s.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/MODELS"},"MODELS")," or ",(0,s.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/VARIABLES"},"VARIABLES"),": Used for defining variables to be used in expressions throughout the YAML file"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),": Defining the system of energy consumers on each installation\n(e.g. platform or mobile unit).")),(0,s.kt)("p",null,"An eCalc model may contain one or several installations. Each installation has a set of specifications\n(e.g. fuel type, hydrocarbon export, ...) and specifications of the system of consumers."),(0,s.kt)("p",null,"Emissions are emitted when fuel is burned. Thus, the first sublevel of consumers for an installation,\nare the fuel burners. As the figure below shows, there are three main types of fuel burners:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Electricity generation (generator sets),"),(0,s.kt)("li",{parentName:"ul"},"Turbine-driven processes,"),(0,s.kt)("li",{parentName:"ul"},"Flare/vent/other non reservoir dependent burners/emitters.")),(0,s.kt)("p",null,"In eCalc under each installation, there is one keyword (",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS"),")\nspecifying the generator sets and one keyword (",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS"),")\nspecifying processes that require fuel directly (turbine-driven processes and flare/vent)."),(0,s.kt)("p",null,"The processes with electrical motor drives and other electrical loads are modeled at the sublevel\nunder ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS"),"."),(0,s.kt)("p",null,(0,s.kt)("img",{src:a(9100).Z,width:"962",height:"495"})),(0,s.kt)("admonition",{title:"Comments",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"Comments are supported anywhere in the yml and csv files by using '#' to indicate the start of a comment.\nAll data after a '#' on the same line is ignored. If '#' is used at the beginning of the file, the\nfirst line without a preceding '#' is used as the header.")),(0,s.kt)("h2",{id:"examples"},"Examples"),(0,s.kt)("h3",{id:"yaml-format-example"},"YAML format example"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES:\n - FILE:\n TYPE:\n NAME:\n\nFACILITY INPUTS:\n - FILE:\n TYPE:\n NAME:\n\nFUEL_TYPES:\n - NAME:\n FACTOR:\n\nMODELS:\n - NAME:\n - TYPE:\n\nVARIABLES:\n <variable_name>\n VALUE: <expression>\n\nINSTALLATIONS:\n - NAME:\n HCEXPORT:\n FUEL:\n GENERATORSETS:\n - NAME:\n ELECTRICITY2FUEL:\n CATEGORY:\n CONSUMERS:\n - NAME:\n CATEGORY:\n ENERGY_USAGE_MODEL:\n\n")),(0,s.kt)("h3",{id:"full-examples"},"Full examples"),(0,s.kt)("p",null,"Examples are an excellent way to quickly get an overview of the syntax. Check them out ",(0,s.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/examples/"},"here"),"."))}m.isMDXComponent=!0},9100:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png"}}]); \ No newline at end of file diff --git a/assets/js/ec96df16.84e566e8.js b/assets/js/ec96df16.84e566e8.js new file mode 100644 index 0000000000..2677d6f29a --- /dev/null +++ b/assets/js/ec96df16.84e566e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8519],{8623:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>s,contentTitle:()=>m,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var t=n(7462),l=(n(7294),n(3905));n(5657);const i={},m="!include",o={unversionedId:"about/references/keywords/include",id:"about/references/keywords/include",title:"!include",description:"Description",source:"@site/docs/about/references/keywords/include.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/include",permalink:"/ecalc/docs/about/references/keywords/include",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/include.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES"},next:{title:"API reference",permalink:"/ecalc/docs/about/references/api/"}},s={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1 - include map/object into list item",id:"example-1---include-mapobject-into-list-item",level:2},{value:"Example 2 - include map/object into object value",id:"example-2---include-mapobject-into-object-value",level:2},{value:"Example 3 - include list into object value",id:"example-3---include-list-into-object-value",level:2}],r={toc:c},u="wrapper";function p(e){let{components:a,...n}=e;return(0,l.kt)(u,(0,t.Z)({},r,n,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"include"},"!include"),(0,l.kt)("h2",{id:"description"},"Description"),(0,l.kt)("p",null,"You can use ",(0,l.kt)("inlineCode",{parentName:"p"},"!include")," to separate your model into several files. ",(0,l.kt)("inlineCode",{parentName:"p"},"!include"),"\ncan be used as value in a ",(0,l.kt)("inlineCode",{parentName:"p"},"KEY: VALUE")," mapping, or as a value in a list."),(0,l.kt)("h2",{id:"format"},"Format"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"!include <some_yaml_file.yaml>\n")),(0,l.kt)("admonition",{type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"You can use ",(0,l.kt)("inlineCode",{parentName:"p"},"ecalc show yaml <model_file>")," to see the read yaml with ",(0,l.kt)("inlineCode",{parentName:"p"},"!include")," processed."),(0,l.kt)("p",{parentName:"admonition"},"New in v7.2.")),(0,l.kt)("h2",{id:"example-1---include-mapobject-into-list-item"},"Example 1 - include map/object into list item"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"!include")," can be used to insert a map/object as a single list element"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml" {2}',title:'"main.yaml"',"{2}":!0}," INSTALLATIONS:\n - !include installationA.yaml\n - NAME: installationB\n ...\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="installationA.yaml"',title:'"installationA.yaml"'}," NAME: installationA\n ...\n\n")),(0,l.kt)("p",null,"This is the same as"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml" {2,3}',title:'"main.yaml"',"{2,3}":!0}," INSTALLATIONS:\n - NAME: installationA\n ...\n - NAME: installationB\n ...\n\n")),(0,l.kt)("h2",{id:"example-2---include-mapobject-into-object-value"},"Example 2 - include map/object into object value"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"!include")," can be used to insert a map/object as a value in a ",(0,l.kt)("inlineCode",{parentName:"p"},"KEY: VALUE")," mapping"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml" {5}',title:'"main.yaml"',"{5}":!0}," INSTALLATIONS:\n - NAME: installationA\n FUELCONSUMERS:\n - NAME: consumerB\n ENERGY_USAGE_MODEL: !include consumerB.yaml\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="consumerB.yaml"',title:'"consumerB.yaml"'}," TYPE: COMPRESSOR\n ...\n\n")),(0,l.kt)("p",null,"This is the same as"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml" {6,7}',title:'"main.yaml"',"{6,7}":!0}," INSTALLATIONS:\n - NAME: installationA\n FUELCONSUMERS:\n - NAME: consumerB\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ...\n\n")),(0,l.kt)("h2",{id:"example-3---include-list-into-object-value"},"Example 3 - include list into object value"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"!include")," can be used to insert a list as a value in a ",(0,l.kt)("inlineCode",{parentName:"p"},"KEY: VALUE")," mapping"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml" {1}',title:'"main.yaml"',"{1}":!0},"INSTALLATIONS: !include installations.yaml\n\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="installations.yaml"',title:'"installations.yaml"'}," - NAME: installationA\n ...\n - NAME: installationB\n ...\n\n")),(0,l.kt)("p",null,"This is the same as"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml",metastring:'title="main.yaml" {2-5}',title:'"main.yaml"',"{2-5}":!0}," INSTALLATIONS:\n - NAME: installationA\n ...\n - NAME: installationB\n ...\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/edb3a98b.7e3d3e0f.js b/assets/js/edb3a98b.7e3d3e0f.js new file mode 100644 index 0000000000..e5e7ef37c9 --- /dev/null +++ b/assets/js/edb3a98b.7e3d3e0f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1728],{2713:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var a=n(7462),r=(n(7294),n(3905));n(5657);const o={title:"Generator sets",sidebar_position:1,description:"Using generator sets in calculations"},i="Generator sets in calculations",l={unversionedId:"about/modelling/setup/installations/generator_sets_in_calculations",id:"about/modelling/setup/installations/generator_sets_in_calculations",title:"Generator sets",description:"Using generator sets in calculations",source:"@site/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/generator_sets_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Generator sets",sidebar_position:1,description:"Using generator sets in calculations"},sidebar:"about",previous:{title:"Installations",permalink:"/ecalc/docs/about/modelling/setup/installations/"},next:{title:"Pump models",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations"}},s={},c=[{value:"Format",id:"format",level:3},{value:"Electricity2fuel function",id:"electricity2fuel-function",level:2},{value:"Description",id:"description",level:3},{value:"Format",id:"format-1",level:3},{value:"Power from shore",id:"power-from-shore",level:2},{value:"Description",id:"description-1",level:3},{value:"Example",id:"example",level:3},{value:"Heaters and boilers",id:"heaters-and-boilers",level:2},{value:"Description",id:"description-2",level:3},{value:"Example: Boiler as generator set",id:"example-boiler-as-generator-set",level:3}],d={toc:c},p="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"generator-sets-in-calculations"},"Generator sets in calculations"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS")," keyword is optional. However, the only requirement is that each\ninstallation must have defined either ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS")," or\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},"FUELCONSUMERS"),"."),(0,r.kt)("p",null,"Under ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS")," one or several ",(0,r.kt)("inlineCode",{parentName:"p"},"generator sets"),"\n(a 'set' of an engine of some sort and a generator) are specified in a list."),(0,r.kt)("p",null,"Each generator set requires three sub-keywords, ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL"),"\nand ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CONSUMERS"},"CONSUMERS")," and ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"CATEGORY"),".\nOptionally, ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL"},"FUEL")," may be used to override the default fuel type specification for\nthe installation. If not specified, it will inherit that of the installation."),(0,r.kt)("admonition",{title:"What happens when fuel is specified?",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"When ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FUEL"},"FUEL")," is defined for a generator set, there is no merging between the installation fuel\ndefinition and the generator set fuel definition, but a complete override of the configuration.")),(0,r.kt)("p",null,"Category can be either ",(0,r.kt)("inlineCode",{parentName:"p"},"TURBINE-GENERATOR")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"POWER-FROM-SHORE"),"."),(0,r.kt)("h3",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"GENERATORSETS:\n - NAME: <generatorset name>\n CATEGORY: <category>\n FUEL: <optional fuel configuration reference>\n ELECTRICITY2FUEL: <electricity to fuel facility input reference>\n CONSUMERS:\n ...\n")),(0,r.kt)("h2",{id:"electricity2fuel-function"},"Electricity2fuel function"),(0,r.kt)("h3",{id:"description"},"Description"),(0,r.kt)("p",null,"The behavior of a generator set is described by an ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL"),"\ntable, which relates the burned fuel rate to delivered power, including the power generation efficiency at different loads.\nIt also defines the operational envelope of the generator set."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")," may be modeled with a constant function through time or\nwith different power vs. fuel relations for different time intervals."),(0,r.kt)("h3",{id:"format-1"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ELECTRICITY2FUEL: <facility_input_reference>\n")),(0,r.kt)("p",null,"or"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ELECTRICITY2FUEL:\n <DATE>: <facility_input_reference_1>\n <DATE>: <facility_input_reference_2>\n")),(0,r.kt)("h2",{id:"power-from-shore"},"Power from shore"),(0,r.kt)("h3",{id:"description-1"},"Description"),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Power from shore is currently handled in eCalc\u2122 by defining a dummy ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")," model with zero fuel usage, and applying the ",(0,r.kt)("inlineCode",{parentName:"p"},"POWER-FROM-SHORE")," category. This is an intermediate solution and will be dealt with differently in the future.")),(0,r.kt)("h3",{id:"example"},"Example"),(0,r.kt)("p",null,"Make an ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")," input file with zero fuel usage."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"},"POWER, FUEL\n# [MW], [SM3/day]\n0, 0\n50, 0\n")),(0,r.kt)("p",null,"Specify ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")," under\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: genset_pfs\n TYPE: ELECTRICITY2FUEL\n FILE: genset_pfs.csv\n")),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"POWER-FROM-SHORE")," category and the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL"),"\nspecified under ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"GENERATORSETS:\n - NAME: generatorset_with_pfs_event\n CATEGORY:\n 2020-01-01: TURBINE-GENERATOR\n 2030-01-01: POWER-FROM-SHORE\n ELECTRICITY2FUEL:\n 2020-01-01: genset_turbine\n 2030-01-01: genset_pfs\n CONSUMERS:\n ...\n")),(0,r.kt)("p",null,"If power from shore is used for the full time range you can skip the dates in both CATEGORY and ELECTRICITY2FUEL"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"GENERATORSETS:\n - NAME: generatorset_with_pfs_event\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: genset_pfs\n CONSUMERS:\n ...\n")),(0,r.kt)("h2",{id:"heaters-and-boilers"},"Heaters and boilers"),(0,r.kt)("h3",{id:"description-2"},"Description"),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Heaters and boilers should be modeled in eCalc\u2122 as\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/GENERATORSETS"},"GENERATORSETS"),", applying the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"HEATER")," and ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CATEGORY"},"BOILER")," categories. This is an intermediate solution and may be dealt with differently in the future.")),(0,r.kt)("h3",{id:"example-boiler-as-generator-set"},"Example: Boiler as generator set"),(0,r.kt)("p",null,"Specify the correlation between energy delivered and fuel consumed under\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: boiler_energy_fuel\n TYPE: ELECTRICITY2FUEL\n FILE: boiler_energy_fuel.csv\n")),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"BOILER")," category and the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL"),"\nspecified under ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},"FACILITY_INPUTS"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"GENERATORSETS:\n - NAME: boiler_as_generator\n CATEGORY: BOILER\n ELECTRICITY2FUEL: boiler_energy_fuel\n CONSUMERS:\n ...\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eee46244.ee9a05ef.js b/assets/js/eee46244.ee9a05ef.js new file mode 100644 index 0000000000..85b335b33d --- /dev/null +++ b/assets/js/eee46244.ee9a05ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7154],{2293:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>n,toc:()=>p});var l=t(7462),r=(t(7294),t(3905));t(5657);const i={slug:"v7-5-release",title:"v7.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:8},s="eCalc v7.5",n={unversionedId:"changelog/v7-5",id:"changelog/v7-5",title:"v7.5",description:"Features",source:"@site/docs/changelog/v7-5.md",sourceDirName:"changelog",slug:"/changelog/v7-5-release",permalink:"/ecalc/docs/changelog/v7-5-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-5.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:8,frontMatter:{slug:"v7-5-release",title:"v7.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:8},sidebar:"changelog",previous:{title:"v7.4",permalink:"/ecalc/docs/changelog/v7-4-release"},next:{title:"v7.6",permalink:"/ecalc/docs/changelog/v7-6-release"}},o={},p=[{value:"Features",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2},{value:"CLI",id:"cli",level:2}],m={toc:p},d="wrapper";function c(e){let{components:a,...t}=e;return(0,r.kt)(d,(0,l.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ecalc-v75"},"eCalc v7.5"),(0,r.kt)("h2",{id:"features"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add YAML interface for PRESSURE_CONTROL for Single and Variable Speed Compressor Train"),(0,r.kt)("li",{parentName:"ul"},"Add support for PRESSURE_CONTROL: NONE for Variable Speed Compressor Train"),(0,r.kt)("li",{parentName:"ul"},"Run GENERATORSETS at max capacity with invalid timestep-flags instead of forward-filling last valid value (extrapcorrection)"),(0,r.kt)("li",{parentName:"ul"},"Add support for uploading models as a zip-file"),(0,r.kt)("li",{parentName:"ul"},"Apply resampling by FREQUENCY when exporting CSV"),(0,r.kt)("li",{parentName:"ul"},"Support single speed compressor chart as csv resource"),(0,r.kt)("li",{parentName:"ul"},"Improved support for uploading YAML-files. Comments, whitespaces, inline lists should now be preserved instead of removed and reformatted")),(0,r.kt)("h2",{id:"fixes"},(0,r.kt)("em",{parentName:"h2"},"Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Add missing power loss factor for Compressor Train Variable Speed Multiple Pressure model.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Ensure that GENERATORSETS stops when consumer power rate is zero")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Ensure invalid time-step and zero power rate for the genset when the el-consumer(s) starts before the Genset providing power.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Correct handling of power rate in LTP export wen combining compressors with and without fuel in temporal models.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"validate order of temporal models"),(0,r.kt)("p",{parentName:"li"},"Temporal models should be specified in chronological order")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"validation of variable names"),(0,r.kt)("p",{parentName:"li"},"Make sure the full variable name is matched against the regular expression.\nPreviously we allowed special characters for all characters except the first.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Avoid crash when ENERGY_USAGE_MODELs are defined only outside the time window of the CONSUMER.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Proper result handling when GENERATORSETS has not yet started and el-consumer is running."))),(0,r.kt)("h2",{id:"cli"},"CLI"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"add --skip-validation argument"),(0,r.kt)("p",{parentName:"li"},"Make it possible to skip the validation step, passing the data to the next step. This will still have some\nvalidation and might give a more clear error message.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"add --simple-output argument"),(0,r.kt)("p",{parentName:"li"},"Use simple output argument to get a simplified result object showing only the most relevant results such as\nenergy consumption and emissions."))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f054b415.17eef43b.js b/assets/js/f054b415.17eef43b.js new file mode 100644 index 0000000000..3e4f9641e8 --- /dev/null +++ b/assets/js/f054b415.17eef43b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7652],{7260:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>d,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>a,toc:()=>s});var i=t(7462),n=(t(7294),t(3905));t(5657);const r={title:"Theory",sidebar_position:1,description:"Core theory about eCalc\u2122"},l=void 0,a={unversionedId:"about/modelling/theory/index",id:"about/modelling/theory/index",title:"Theory",description:"Core theory about eCalc\u2122",source:"@site/docs/about/modelling/theory/index.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/",permalink:"/ecalc/docs/about/modelling/theory/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Theory",sidebar_position:1,description:"Core theory about eCalc\u2122"},sidebar:"about",previous:{title:"Modelling guide",permalink:"/ecalc/docs/about/modelling/"},next:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling"}},d={},s=[],c={toc:s},u="wrapper";function m(e){let{components:o,...t}=e;return(0,n.kt)(u,(0,i.Z)({},c,t,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"This section will describe core pump and compressor theory that is used in eCalc\u2122."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f4fe2bc2.dd244289.js b/assets/js/f4fe2bc2.dd244289.js new file mode 100644 index 0000000000..ab980452f0 --- /dev/null +++ b/assets/js/f4fe2bc2.dd244289.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3108],{5019:(a,t,e)=>{e.r(t),e.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>k,frontMatter:()=>s,metadata:()=>p,toc:()=>N});var m=e(7462),n=(e(7294),e(3905));e(5657);const s={},r="CONSTANT",p={unversionedId:"about/references/keywords/CONSTANT",id:"about/references/keywords/CONSTANT",title:"CONSTANT",description:"FACILITYINPUTS /",source:"@site/docs/about/references/keywords/CONSTANT.mdx",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSTANT.mdx",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS"},next:{title:"CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS"}},i={},N=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],l={toc:N},o="wrapper";function k(a){let{components:t,...e}=a;return(0,n.kt)(o,(0,m.Z)({},l,e,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"constant"},"CONSTANT"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"FACILITY_INPUTS"},"FACILITY_INPUTS")," /\n",(0,n.kt)("a",{parentName:"p",href:"ADJUSTMENT"},"ADJUSTMENT")," /\n",(0,n.kt)("a",{parentName:"p",href:"CONSTANT"},"CONSTANT")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Required"),(0,n.kt)("th",{parentName:"tr",align:null},"Child of"),(0,n.kt)("th",{parentName:"tr",align:null},"Children/Options"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"No"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("inlineCode",{parentName:"td"},"ADJUSTMENT")),(0,n.kt)("td",{parentName:"tr",align:null},"None")))),(0,n.kt)("h2",{id:"description"},"Description"),(0,n.kt)("p",null,"The keyword ",(0,n.kt)("a",{parentName:"p",href:"CONSTANT"},"CONSTANT")," can be used for adjustment of input data with a constant."),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"CONSTANT: <VALUE>\n")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("p",null,"Say you have input that that is off by -10 ","[some units]",".\nYou could fix this like:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n CONSTANT: -10\n")),(0,n.kt)("p",null,"The resulting energy consumption ",(0,n.kt)("span",{parentName:"p",className:"math math-inline"},(0,n.kt)("span",{parentName:"span",className:"katex"},(0,n.kt)("span",{parentName:"span",className:"katex-mathml"},(0,n.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.kt)("semantics",{parentName:"math"},(0,n.kt)("mrow",{parentName:"semantics"},(0,n.kt)("msub",{parentName:"mrow"},(0,n.kt)("mi",{parentName:"msub"},"E"),(0,n.kt)("mrow",{parentName:"msub"},(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"j"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"u"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"s"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"t"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"e"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d")))),(0,n.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{adjusted}")))),(0,n.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,n.kt)("span",{parentName:"span",className:"msupsub"},(0,n.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,n.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.kt)("span",{parentName:"span",className:"mord mtight"},(0,n.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"adjusted"))))),(0,n.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,n.kt)("span",{parentName:"span"})))))))))),", i.e. fuel or power, will then be"),(0,n.kt)("div",{className:"math math-display"},(0,n.kt)("span",{parentName:"div",className:"katex-display"},(0,n.kt)("span",{parentName:"span",className:"katex"},(0,n.kt)("span",{parentName:"span",className:"katex-mathml"},(0,n.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,n.kt)("semantics",{parentName:"math"},(0,n.kt)("mrow",{parentName:"semantics"},(0,n.kt)("msub",{parentName:"mrow"},(0,n.kt)("mi",{parentName:"msub"},"E"),(0,n.kt)("mrow",{parentName:"msub"},(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"j"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"u"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"s"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"t"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"e"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"d"))),(0,n.kt)("mo",{parentName:"mrow"},"="),(0,n.kt)("msub",{parentName:"mrow"},(0,n.kt)("mi",{parentName:"msub"},"E"),(0,n.kt)("mrow",{parentName:"msub"},(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"o"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"r"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"g"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"n"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"l"))),(0,n.kt)("mo",{parentName:"mrow"},"\u2212"),(0,n.kt)("mn",{parentName:"mrow"},"10")),(0,n.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{adjusted} = E_\\mathrm{original} - 10")))),(0,n.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,n.kt)("span",{parentName:"span",className:"msupsub"},(0,n.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,n.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.kt)("span",{parentName:"span",className:"mord mtight"},(0,n.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"adjusted"))))),(0,n.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,n.kt)("span",{parentName:"span"})))))),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.kt)("span",{parentName:"span",className:"mrel"},"="),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,n.kt)("span",{parentName:"span",className:"msupsub"},(0,n.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,n.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.kt)("span",{parentName:"span",className:"mord mtight"},(0,n.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"original"))))),(0,n.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,n.kt)("span",{parentName:"span"})))))),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,n.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},"10")))))),(0,n.kt)("p",null,"where ",(0,n.kt)("span",{parentName:"p",className:"math math-inline"},(0,n.kt)("span",{parentName:"span",className:"katex"},(0,n.kt)("span",{parentName:"span",className:"katex-mathml"},(0,n.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,n.kt)("semantics",{parentName:"math"},(0,n.kt)("mrow",{parentName:"semantics"},(0,n.kt)("msub",{parentName:"mrow"},(0,n.kt)("mi",{parentName:"msub"},"E"),(0,n.kt)("mrow",{parentName:"msub"},(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"o"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"r"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"g"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"i"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"n"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"a"),(0,n.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"l")))),(0,n.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E_\\mathrm{original}")))),(0,n.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,n.kt)("span",{parentName:"span",className:"base"},(0,n.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.kt)("span",{parentName:"span",className:"mord"},(0,n.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,n.kt)("span",{parentName:"span",className:"msupsub"},(0,n.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,n.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"}},(0,n.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,n.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,n.kt)("span",{parentName:"span",className:"mord mtight"},(0,n.kt)("span",{parentName:"span",className:"mord mathrm mtight"},"original"))))),(0,n.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,n.kt)("span",{parentName:"span",className:"vlist-r"},(0,n.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,n.kt)("span",{parentName:"span"}))))))))))," is the energy consumption before the adjustment."))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f52ed7e3.cfa80e63.js b/assets/js/f52ed7e3.cfa80e63.js new file mode 100644 index 0000000000..a10adcde17 --- /dev/null +++ b/assets/js/f52ed7e3.cfa80e63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9922],{3104:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));a(5657);const i={title:"Time series",sidebar_position:2,description:"Time series guide and description"},s=void 0,o={unversionedId:"about/modelling/setup/time_series",id:"about/modelling/setup/time_series",title:"Time series",description:"Time series guide and description",source:"@site/docs/about/modelling/setup/time_series.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/time_series",permalink:"/ecalc/docs/about/modelling/setup/time_series",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/time_series.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Time series",sidebar_position:2,description:"Time series guide and description"},sidebar:"about",previous:{title:"Expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions"},next:{title:"Facility inputs",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/"}},l={},p=[{value:"Supported types",id:"supported-types",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}],d={toc:p},m="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(m,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"The ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," keyword is ",(0,n.kt)("strong",{parentName:"p"},"mandatory")," within the eCalc\u2122 YAML file.")),(0,n.kt)("p",null,'This part of the setup file defines the inputs for time dependent variables, or "reservoir\nvariables". For many fields, this may be only one reservoir simulation model. But in some\ncases, one might have several sources for reservoir and other relevant time series variables.'),(0,n.kt)("p",null,"For example, a field may have a reservoir simulation model for some areas and decline curves in other area of\nthe reservoir. There may also be tie-ins which are affecting the energy/emissions on the field\ninstallations. Also, there may be time profiles for fuel prices, emission tax, etc.\nTherefore, a set of sources may be specified with a name, path to data and type. The name is\nlater referred to in the system of energy consumers defined under ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS"),"."),(0,n.kt)("p",null,"Reservoir variables and other time varying data not coming from a reservoir simulation model can\nbe specified in a ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Comma-separated_values"},"CSV")," file."),(0,n.kt)("p",null,"The paths to the input files may be either absolute or relative to the setup file."),(0,n.kt)("h2",{id:"supported-types"},"Supported types"),(0,n.kt)("p",null,"The supported time series types are:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Type"),(0,n.kt)("th",{parentName:"tr",align:null},"Supported file formats"),(0,n.kt)("th",{parentName:"tr",align:null},"Interpolation type"),(0,n.kt)("th",{parentName:"tr",align:null},"Comment"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"DEFAULT"),(0,n.kt)("td",{parentName:"tr",align:null},".csv"),(0,n.kt)("td",{parentName:"tr",align:null},"Not possible to specify: ",(0,n.kt)("br",null),(0,n.kt)("inlineCode",{parentName:"td"},"RIGHT")," is used"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("strong",{parentName:"td"},"New in v8.1"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"MISCELLANEOUS"),(0,n.kt)("td",{parentName:"tr",align:null},".csv"),(0,n.kt)("td",{parentName:"tr",align:null},"Mandatory input:",(0,n.kt)("br",null),(0,n.kt)("inlineCode",{parentName:"td"},"LEFT"),"/",(0,n.kt)("inlineCode",{parentName:"td"},"RIGHT"),"/",(0,n.kt)("inlineCode",{parentName:"td"},"LINEAR")),(0,n.kt)("td",{parentName:"tr",align:null})))),(0,n.kt)("h2",{id:"format"},"Format"),(0,n.kt)("p",null,"Each line under ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TIME_SERIES"},"TIME_SERIES")," has the format:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES:\n - NAME: <time series reference name>\n TYPE: <type>\n FILE: <path_to_file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n")),(0,n.kt)("p",null,"The input data is expected to be in metric units. The ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/NAME"},"NAME")," is later referred\nto in the ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," part of the setup file.\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"},"INFLUENCE_TIME_VECTOR"),", ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/EXTRAPOLATION"},"EXTRAPOLATION"),"\nand ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},"INTERPOLATION_TYPE")," may have default values set depending\non the choice of ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TYPE"},"TYPE"),". See the documentation for each keyword for details."),(0,n.kt)("h3",{id:"requirements"},"Requirements"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"At least one input source with ",(0,n.kt)("a",{parentName:"li",href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"},"INFLUENCE_TIME_VECTOR")," set to True."),(0,n.kt)("li",{parentName:"ul"},"Must include sources referred to in the variables for each consumer.")),(0,n.kt)("h2",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES:\n - NAME: SIM1\n TYPE: DEFAULT\n FILE: /path_to_model1/model_data.csv\n - NAME: SIM2\n TYPE: DEFAULT\n FILE: /path_to_tiein/tie_in_field.csv\n - NAME: DATA3\n TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures\n FILE: inputs/somecsvdata.csv\n INFLUENCE_TIME_VECTOR: FALSE\n EXTRAPOLATION: TRUE\n INTERPOLATION_TYPE: RIGHT\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f54e894e.3f0d3784.js b/assets/js/f54e894e.3f0d3784.js new file mode 100644 index 0000000000..63be778a47 --- /dev/null +++ b/assets/js/f54e894e.3f0d3784.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[770],{5622:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>o,toc:()=>E});var a=t(7462),l=(t(7294),t(3905)),s=t(5657);const r={sidebar_position:4,title:"Drogon model",description:"Model using Drogon input data"},i="Drogon model example",o={unversionedId:"about/modelling/examples/drogon",id:"about/modelling/examples/drogon",title:"Drogon model",description:"Model using Drogon input data",source:"@site/docs/about/modelling/examples/drogon.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/drogon",permalink:"/ecalc/docs/about/modelling/examples/drogon",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/drogon.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Drogon model",description:"Model using Drogon input data"},sidebar:"about",previous:{title:"Advanced model",permalink:"/ecalc/docs/about/modelling/examples/advanced"},next:{title:"Reference documentation",permalink:"/ecalc/docs/about/references/"}},p={},E=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"MODELS",id:"models",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"INSTALLATIONS",id:"installations",level:2},{value:"GENERATORSETS",id:"generatorsets",level:3},{value:"PUMPS",id:"pumps",level:4},{value:"COMPRESSORS",id:"compressors",level:4},{value:"BASE-LOAD",id:"base-load",level:4},{value:"Full Model",id:"full-model",level:2},{value:"Input Data",id:"input-data",level:2},{value:"Facility resources",id:"facility-resources",level:3},{value:"Timeseries resources",id:"timeseries-resources",level:3}],d={toc:E},u="wrapper";function m(e){let{components:n,...t}=e;return(0,l.kt)(u,(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"drogon-model-example"},"Drogon model example"),(0,l.kt)("p",null,"The Drogon example is based on a synthetic data set."),(0,l.kt)("p",null,"On the installation, the following consumers are identified:"),(0,l.kt)(s.G,{chart:"graph TD;\n A(Drogon Installation) --\x3e B(Generator set A);\n B --\x3e C(Base production load);\n B --\x3e D(Gas compression train);\n B --\x3e E(Gas re-compressors);\n B --\x3e F(Sea water injection pump);\n B --\x3e G(Booster pump);\n style A stroke:red;\n style C stroke:blue;\n style D stroke:blue;\n style E stroke:blue;\n style F stroke:blue;\n style G stroke:blue;",mdxType:"Mermaid"}),(0,l.kt)("p",null,"The results of a performed characterization of the equipment are listed below:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Consumer"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Generator set A"),(0,l.kt)("td",{parentName:"tr",align:null},"Generator set"),(0,l.kt)("td",{parentName:"tr",align:null},"Variable fuel consumer with electricity to fuel function")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Base production load"),(0,l.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,l.kt)("td",{parentName:"tr",align:null},"Constant load - 10 MW")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Gas compression train"),(0,l.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,l.kt)("td",{parentName:"tr",align:null},"Variable consumption depending on produced gas rate")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Gas re-compressors"),(0,l.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,l.kt)("td",{parentName:"tr",align:null},"Constant load - 2 MW")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sea water injection pump"),(0,l.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,l.kt)("td",{parentName:"tr",align:null},"Variable consumption depending on water injection rate")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Booster pump"),(0,l.kt)("td",{parentName:"tr",align:null},"Power consumer"),(0,l.kt)("td",{parentName:"tr",align:null},"Constant load - 2 MW")))),(0,l.kt)("h2",{id:"yaml-model-overview"},"YAML model overview"),(0,l.kt)("p",null,"The YAML model consists of the following components:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Time series input"),(0,l.kt)("li",{parentName:"ul"},"Facility inputs"),(0,l.kt)("li",{parentName:"ul"},"Model inputs"),(0,l.kt)("li",{parentName:"ul"},"Fuel type input"),(0,l.kt)("li",{parentName:"ul"},"Installation topography")),(0,l.kt)("p",null,"The skeleton of the YAML file looks like the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES: \n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nMODELS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n")),(0,l.kt)("h2",{id:"time_series"},"TIME_SERIES"),(0,l.kt)("p",null,"The reservoir variables. In this case the file is called: ",(0,l.kt)("inlineCode",{parentName:"p"},"drogon_mean.csv"),". "),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES: \n - NAME: SIM1\n TYPE: DEFAULT\n FILE: drogon_mean.csv\n")),(0,l.kt)("h2",{id:"facility_inputs"},"FACILITY_INPUTS"),(0,l.kt)("p",null,"In this case, the compressors are not specified in this section as ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"GENERIC COMPRESSOR CHARTS"),". Thus, the pump chart and generator set will be the only facility components specified within this section. "),(0,l.kt)("p",null,"The pump will be variable speed, meaning that the pump type will be ",(0,l.kt)("inlineCode",{parentName:"p"},"PUMP_CHART_VARIABLE_SPEED"),". The generator set will be a tabulated, where power consumption will be linked to fuel gas utilised."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS: \n - NAME: genset_a_power_fuel\n TYPE: ELECTRICITY2FUEL\n FILE: genset.csv\n - NAME: wi_200\n FILE: wi_200bar_vsp.csv\n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n")),(0,l.kt)("h2",{id:"models"},"MODELS"),(0,l.kt)("p",null,"The model section will contain the fluid model, the compressor chart and the subsequent compressor model.\nPeng-Robinson (PR) will be the selected equation of state in this example. "),(0,l.kt)("p",null,'This example will use a generic compressor chart. In this case, a generic compressor chart from input will utilised. Here, the a "typical" chart will be shifted to match the input head and rate data. See ',(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},"GENERIC COMPRESSOR CHARTS")," for more details. When a generic chart is used, a polytropic efficiency needs to be specified. This value will be constant throughout the use, in this case a value of 0.8 is used."),(0,l.kt)("p",null,"A ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN")," model is used in this example, as this is necessary when a generic chart is used. Instead of manually specifying the number of compression stages, a ",(0,l.kt)("inlineCode",{parentName:"p"},"MAXIMUM_PRESSURE_RATIO_PER_STAGE")," of 3.5 is defined. This will automatically distribute the pressure increase amongst the compression train so that no pressure ratio per compression stage will be above 3.5. "),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: drogon_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: PR\n COMPOSITION:\n water: 0.0\n nitrogen: 0.510676386339746\n CO2: 2.44965511776504\n methane: 75.6328106126248\n ethane: 10.9074631209139\n propane: 8.11875087121037\n i_butane: 0.849146377471569\n n_butane: 1.34903656604691\n i_pentane: 0.104982143381498\n n_pentane: 0.071218218251483\n n_hexane: 0.0063\n\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.8\n UNITS:\n EFFICIENCY: FRACTION\n\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: drogon_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 19.3\n")),(0,l.kt)("h2",{id:"fuel_types"},"FUEL_TYPES"),(0,l.kt)("p",null,"In this case, the installation uses a single fuel gas with a value of 1.23 NOK/Sm",(0,l.kt)("sup",null,"3"),". This fuel gas has a CO",(0,l.kt)("sub",null,"2")," intensity of 2.416 and a the CO",(0,l.kt)("sub",null,"2")," value is set to 1.71 NOK/Sm",(0,l.kt)("sup",null,"3"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"FUEL_TYPES:\n - NAME: fuel_gas\n PRICE: 1.23\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.416 #CO2/Sm3 fuel gas burned\n TAX: 1.71 #NOK/Sm3 fuel gas burned\n")),(0,l.kt)("h2",{id:"installations"},"INSTALLATIONS"),(0,l.kt)("p",null,"In the ",(0,l.kt)("inlineCode",{parentName:"p"},"INSTALLATIONS")," section, the previously defined models and facility inputs are further defined. Here the hydrocarbon export can be specified. This is used in order to get a hydrocarbon-to-emission value. In this case, it is assumed that this facility exports oil (",(0,l.kt)("inlineCode",{parentName:"p"},"OIL_PROD"),") and gas (",(0,l.kt)("inlineCode",{parentName:"p"},"GAS_PROD"),")."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"INSTALLATIONS:\n - NAME: drogon\n CATEGORY: FIXED\n HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000\n FUEL: fuel_gas\n")),(0,l.kt)("h3",{id:"generatorsets"},"GENERATORSETS"),(0,l.kt)("p",null,"There is one generator set used in this example - ",(0,l.kt)("inlineCode",{parentName:"p"},"Generator set A"),". This is a tabular relationship between power generated/consumed and fuel gas burnt.\nUnder this category, all consumers that utilise electricity are defined. In this case scenario, all pumps and compressors are electrically driven; thus, all consumers will be specified under this category."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"}," GENERATORSETS:\n - NAME: main_power\n ELECTRICITY2FUEL: genset_a_power_fuel\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n")),(0,l.kt)("h4",{id:"pumps"},"PUMPS"),(0,l.kt)("p",null,"The previously defined variable speed pump (in ",(0,l.kt)("inlineCode",{parentName:"p"},"FACILITY_INPUTS"),") is put into further defined with suction and discharge pressures, rates and operational settings."),(0,l.kt)("p",null,"Here, a system of pumps is used. This means that instead of a single pump being used to deliver the respective injection rate, a system of pumps is defined. In this case, a system of two pumps will be used. If the first pump is unable to deliver the requested head or rate, a second pump will be additionally used and the rate will be split across the pump system.\nAs only one pump has been defined, the same pump model will be used for each train. As each pump is identical, the rate will be equally split across the train when needed (this is to ensure the highest pump efficiency - see ",(0,l.kt)("a",{parentName:"p",href:"../setup/installations/pump_models_in_calculations"},"PUMP MODELLING")," for more details.)"),(0,l.kt)("p",null,"A fluid density of 1025 kg/m",(0,l.kt)("sup",null,"3")," is used, with a suction and discharge pressure of 12 and 200 bar respectively."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: wi_lp\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a_lp\n CHART: wi_200\n - NAME: pump_b_lp\n CHART: wi_200\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1025\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n - 0\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS:\n - 0.5\n - 0.5\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n")),(0,l.kt)("h4",{id:"compressors"},"COMPRESSORS"),(0,l.kt)("p",null,"For the compression model, a compressor system is not used. This is due to the use of generic compressor charts. As the generic charts are shifted from input data there is no need for an additional compression train. No matter what rate/head values are inputted here, the generic chart is shifted so that all operational points will be within the operational envelope of the compressor."),(0,l.kt)("p",null,"Here, 13 bar and 431 bar is specified for the suction and discharge pressure respectively."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: compressor_train\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: simplified_compressor_train_model\n RATE: SIM1;GAS_PROD\n SUCTION_PRESSURE: 13\n DISCHARGE_PRESSURE: 421\n")),(0,l.kt)("h4",{id:"base-load"},"BASE-LOAD"),(0,l.kt)("p",null,"Three different constant-loads are specified in this section. These being the booster pump, the re-compressors and then the general facility base-load. "),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"}," - NAME: boosterpump\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n - NAME: baseload\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10\n - NAME: re-compressors\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n\n")),(0,l.kt)("h2",{id:"full-model"},"Full Model"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"TIME_SERIES:\n - NAME: SIM1\n FILE: drogon_mean.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n - NAME: genset_a_power_fuel\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: wi_200\n FILE: wi_200bar_vsp.csv\n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\nMODELS:\n - NAME: drogon_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: PR\n COMPOSITION:\n water: 0.0\n nitrogen: 0.510676386339746\n CO2: 2.44965511776504\n methane: 75.6328106126248\n ethane: 10.9074631209139\n propane: 8.11875087121037\n i_butane: 0.849146377471569\n n_butane: 1.34903656604691\n i_pentane: 0.104982143381498\n n_pentane: 0.071218218251483\n n_hexane: 0.0063\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.8\n UNITS:\n EFFICIENCY: FRACTION\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: drogon_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 19.3\nFUEL_TYPES:\n - NAME: fuel_gas\n PRICE: 1.23\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: co2_fuel_gas\n FACTOR: 2.416\n TAX: 1.71\nINSTALLATIONS:\n - NAME: drogon\n CATEGORY: FIXED\n HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: main_power\n ELECTRICITY2FUEL: genset_a_power_fuel\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: wi_lp\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a_lp\n CHART: wi_200\n - NAME: pump_b_lp\n CHART: wi_200\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1025\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n - 0\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS:\n - 0.5\n - 0.5\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n \n - NAME: compressor_train\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: simplified_compressor_train_model\n RATE: SIM1;GAS_PROD\n SUCTION_PRESSURE: 13\n DISCHARGE_PRESSURE: 421\n\n - NAME: boosterpump\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n - NAME: baseload\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10\n - NAME: re-compressors\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n")),(0,l.kt)("h2",{id:"input-data"},"Input Data"),(0,l.kt)("h3",{id:"facility-resources"},"Facility resources"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="genset.csv"',title:'"genset.csv"'},"POWER, FUEL\n# [MW], [Sm3/d]\n0,0\n2.38,37766.13\n4.76,50769.26\n5.9,59258.52\n7.14,63772.39\n9.52,76775.52\n10.71,83277.09\n11.9,89808.09\n14.28,102781.8\n16.66,115784.9\n17.8,119883.6\n19.04,128788\n21.42,141791.2\n21.4201,166554.2\n28.56,205563.6\n33.32,231569.8\n38.08,257576.1\n42.84,283582.3\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="wi_200bar_vsp.csv"',title:'"wi_200bar_vsp.csv"'},"RATE,HEAD,EFFICIENCY,SPEED\n967,1810,78,4365\n900,1900,80.4,4365\n700,2280,81,4365\n600,2385,78,4365\n500,2450,72.5,4365\n480,2475,71.5,4365\n900,1700,80.4,4157\n700,2000,81,4157\n600,2130,78,4157\n500,2200,72.5,4157\n460,2210,69,4157\n830,1340,81,3741\n800,1400,81.7,3741\n600,1675,78,3741\n500,1765,72.5,3741\n415,1805,66,3741\n740,1075,81.5,3326\n700,1120,81,3326\n500,1350,72.5,3326\n400,1405,64.5,3326\n365,1425,62,3326\n640,800,79.5,2885\n600,840,78,2885\n400,1050,64.5,2885\n320,1075,57,2885\n")),(0,l.kt)("h3",{id:"timeseries-resources"},"Timeseries resources"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-text",metastring:'title="drogon_mean.csv"',title:'"drogon_mean.csv"'},"DATE,GAS_PROD,OIL_PROD,WATER_INJ\n01.01.2020,329327.76,2301.9189,3796.9621\n01.01.2021,533620.39,3699.8435,8533.0322\n01.01.2022,416004.76,2837.5915,9434.1385\n01.01.2023,340118.19,2280.7372,10019.154\n01.01.2024,290127.01,1905.7952,10428.387\n01.01.2025,253292.19,1635.7671,10725.254\n01.01.2026,223584.53,1426.9726,10954.338\n01.01.2027,198453.07,1249.781,11153.675\n01.01.2028,177306.77,1099.8572,11318.01\n01.01.2029,159723.78,977.37529,11450.614\n01.01.2030,145056.33,875.30836,11561.335\n01.01.2031,132577.75,788.45521,11654.645\n01.01.2032,122166.68,715.64707,11734.129\n01.01.2033,113070.74,653.71407,11802.565\n01.01.2034,105114.67,600.04874,11860.717\n01.01.2035,98147.958,553.56297,11910.283\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f571fee5.f5131347.js b/assets/js/f571fee5.f5131347.js new file mode 100644 index 0000000000..e72ad333de --- /dev/null +++ b/assets/js/f571fee5.f5131347.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[505],{8932:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));a(5657);const l={title:"YAML keywords",sidebar_position:2,description:"eCalc KEYWORDS"},o="Keywords",i={unversionedId:"about/references/keywords/index",id:"about/references/keywords/index",title:"YAML keywords",description:"eCalc KEYWORDS",source:"@site/docs/about/references/keywords/index.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/",permalink:"/ecalc/docs/about/references/keywords/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"YAML keywords",sidebar_position:2,description:"eCalc KEYWORDS"},sidebar:"about",previous:{title:"Reference documentation",permalink:"/ecalc/docs/about/references/"},next:{title:"ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT"}},d={},s=[{value:"Top level keywords",id:"top-level-keywords",level:2}],p={toc:s},k="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(k,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"keywords"},"Keywords"),(0,r.kt)("p",null,"eCalc models are defined using keywords in ",(0,r.kt)("inlineCode",{parentName:"p"},"YAML")," (YAML Ain't Markup Language) model files. This\npage gives an overview of the top level keywords as well as and overview of all available keywords in\neCalc with a short description."),(0,r.kt)("h2",{id:"top-level-keywords"},"Top level keywords"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Keyword"),(0,r.kt)("th",{parentName:"tr",align:null},"Required"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"END"},"END")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"Global end date for eCalc calculations.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"FACILITY_INPUTS"},"FACILITY_INPUTS")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},"List of input files from facility characterization.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"FUEL_TYPES"},"FUEL_TYPES")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"Definition(s) the fuel type(s) being used in the model and the corresponding emissions.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"INSTALLATIONS"},"INSTALLATIONS")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},"Definitions of the system of energy consumers on each installation (e.g. platform).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"START"},"START")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"Global start date for eCalc calculations.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"TIME_SERIES"},"TIME_SERIES")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},"List of input sources (files) containing all time series data.")))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f577f5c2.394fb809.js b/assets/js/f577f5c2.394fb809.js new file mode 100644 index 0000000000..90d004fd53 --- /dev/null +++ b/assets/js/f577f5c2.394fb809.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7959],{4971:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(7462),n=(r(7294),r(3905));r(5657);const o={title:"Compressor charts",sidebar_position:2,description:"Introduction into compressor charts"},i="Compressor chart",s={unversionedId:"about/modelling/setup/models/compressor_modelling/compressor_charts/index",id:"about/modelling/setup/models/compressor_modelling/compressor_charts/index",title:"Compressor charts",description:"Introduction into compressor charts",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_charts",slug:"/about/modelling/setup/models/compressor_modelling/compressor_charts/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor charts",sidebar_position:2,description:"Introduction into compressor charts"},sidebar:"about",previous:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"},next:{title:"Compressor train types",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"}},l={},c=[{value:"User defined single speed compressor chart",id:"user-defined-single-speed-compressor-chart",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"User defined variable speed compressor chart",id:"user-defined-variable-speed-compressor-chart",level:2},{value:"Format",id:"format-2",level:3},{value:"Example",id:"example-2",level:3},{value:"Generic compressor chart with predefined design point",id:"generic-compressor-chart-with-predefined-design-point",level:2},{value:"Format",id:"format-4",level:3},{value:"Example",id:"example-4",level:3},{value:"Example",id:"example-5",level:3},{value:"Generic compressor chart with design point calculated from input data",id:"generic-compressor-chart-with-design-point-calculated-from-input-data",level:2},{value:"Format",id:"format-5",level:3},{value:"Example",id:"example-6",level:3},{value:"Surge control margin for variable speed compressor chart",id:"surge-control-margin-for-variable-speed-compressor-chart",level:2},{value:"Format",id:"format-6",level:3}],p={toc:c},d="wrapper";function m(e){let{components:t,...o}=e;return(0,n.kt)(d,(0,a.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"compressor-chart"},"Compressor chart"),(0,n.kt)("p",null,"The compressor chart is used to set up a model of each compressor. eCalc\u2122 currently support four ways to set up a\ncompressor chart"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Predefined single speed chart"),(0,n.kt)("li",{parentName:"ul"},"Predefined variable speed chart"),(0,n.kt)("li",{parentName:"ul"},"Generic compressor chart with a specified design point"),(0,n.kt)("li",{parentName:"ul"},"Generic compressor chart which is automatically adjusted to have capacity for the input data")),(0,n.kt)("h2",{id:"user-defined-single-speed-compressor-chart"},"User defined single speed compressor chart"),(0,n.kt)("p",null,"The single speed chart type allows a single compressor curve for one speed, using the keyword ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CURVE"},"CURVE")),(0,n.kt)("h3",{id:"format"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n CURVE:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n")),(0,n.kt)("h3",{id:"example"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: predefined_single_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVE:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n")),(0,n.kt)("admonition",{title:"Tip",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"It is also possible to input single speed compressor chart as csv file."),(0,n.kt)("h4",{parentName:"admonition",id:"format-1"},"Format"),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"CURVE:\n FILE: <csv file with single speed compressor chart>\n")),(0,n.kt)("h4",{parentName:"admonition",id:"example-1"},"Example"),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"CURVE:\n FILE: compressor_chart_single_speed.csv\n"))),(0,n.kt)("h2",{id:"user-defined-variable-speed-compressor-chart"},"User defined variable speed compressor chart"),(0,n.kt)("p",null,"The variable speed chart type allows a fully defined compressor chart with data for two or more speeds, using the keyword ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/CURVES"},"CURVES"),". The upper and\nlower speed curves will be interpreted as the speed capacity limits for the chart.\nWhilst the lowest rate points on each of the upper and lower speed curves will define the minimum flow line for the compressor. "),(0,n.kt)("p",null,"Additionally, there is functionality to define a control line which behaves as an alternate to the minimum flow line. This means that your input will be 'cropped' to only include points to the right of the control line - modelling recirculation (",(0,n.kt)("inlineCode",{parentName:"p"},"ASV"),") from the correct control line.\nSee ",(0,n.kt)("inlineCode",{parentName:"p"},"Surge control margin for variable speed compressor chart")," for more details."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Using a variable speed compressor chart as input essentially does the same as if a process simulation tool was used to\ncreate an energy function. It has been verified to be close to identical to Unisim within 2% accuracy (smaller\ndifferences in density arise from differences in PVT assumptions and calculations).")),(0,n.kt)("h3",{id:"format-2"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n CURVES:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - ... and so forth for all chart curves. Minimum two curves needed.\n")),(0,n.kt)("h3",{id:"example-2"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 9886\n RATE: [3708, 4502, 4993.6, 5507, 5924]\n HEAD: [13845, 13182, 12425, 11276, 10054]\n EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n")),(0,n.kt)("admonition",{title:"Tip",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"It is also possible to input variable speed compressor chart as csv file."),(0,n.kt)("h4",{parentName:"admonition",id:"format-3"},"Format"),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"CURVES:\n FILE: <csv file with variable speed compressor chart>\n")),(0,n.kt)("h4",{parentName:"admonition",id:"example-3"},"Example"),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"CURVES:\n FILE: compressor_chart_variable_speed.csv\n"))),(0,n.kt)("h2",{id:"generic-compressor-chart-with-predefined-design-point"},"Generic compressor chart with predefined design point"),(0,n.kt)("p",null,'The generic compressor chart used is an "average" chart of compressors used on the NCS and cannot be expected to be equal to\nthe actual chart for a compressor which has been designed and delivered. However, it can be a good first estimation of\nhow a chart may be for a future process not yet in the design phase. '),(0,n.kt)("p",null,"This chart will not replace any future compressor curves and it may not be accurate in comparison to the final compressor curve; however, it is a good method to capture the major effects (such as ",(0,n.kt)("inlineCode",{parentName:"p"},"ASV"),' (anti-surge valve) recirculation).\nWith this method it is possible to view how a "typical" compressor curve would react a large spread in the data set. If the design point is set within the middle of the data spread, points with rates lower than the minimum flow will have some recirculation; whilst, too high or unrealistic rates will not be solved. This is an essential difference in comparison to the generic chart with its design point calculated from input data (which is covered in ',(0,n.kt)("inlineCode",{parentName:"p"},"Generic compressor chart with design point calculated from input data"),"), which will shift the entire compressor curve to solve for even the highest rate and head points. "),(0,n.kt)("p",null,"Unified generic compressor chart:"),(0,n.kt)("p",null,(0,n.kt)("img",{src:r(8501).Z,width:"1048",height:"729"})),(0,n.kt)("p",null,"The compressor chart is created by scaling the unified generic compressor chart in the figure above with a design actual\nrate and head. Note that the rate is here in the units ",(0,n.kt)("em",{parentName:"p"},"am3/hr")," which is NOT EQUAL to ",(0,n.kt)("em",{parentName:"p"},"Sm3/hr"),".\nThe units ",(0,n.kt)("em",{parentName:"p"},"am3/hr")," refers to the volumetric rate at inlet conditions (inlet pressure and temperature), and it will differ from the inputted standard rates\ndue to the difference in density.\nThe design polytropic head is given in either ",(0,n.kt)("em",{parentName:"p"},"kJ/kg"),", ",(0,n.kt)("em",{parentName:"p"},"m")," or J/kg, ",(0,n.kt)("inlineCode",{parentName:"p"},"UNITS"),"."),(0,n.kt)("p",null,"The generic compressor chart is currently accompanied by a fixed polytropic efficiency (polytropic efficiency\nvariations within the chart may be supported in the future)."),(0,n.kt)("h3",{id:"format-4"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>\n DESIGN_RATE: <design rate>\n DESIGN_HEAD: <design polytropic head>\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n")),(0,n.kt)("h3",{id:"example-4"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 7000\n DESIGN_HEAD: 50\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n")),(0,n.kt)("p",null,"For this method it is important to note that only ",(0,n.kt)("inlineCode",{parentName:"p"},"Simplified variable speed compressor train model")," is supported. "),(0,n.kt)("h3",{id:"example-5"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: generic_compression_train_design_point\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: sample_fluid\n PRESSURE_CONTROL: UPSTREAM_CHOKE\n COMPRESSOR_TRAIN:\n STAGES:\n - COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n INLET_TEMPERATURE: 30\n")),(0,n.kt)("h2",{id:"generic-compressor-chart-with-design-point-calculated-from-input-data"},"Generic compressor chart with design point calculated from input data"),(0,n.kt)("admonition",{title:"Caution",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Beware that using this functionality in a ",(0,n.kt)("inlineCode",{parentName:"p"},"COMPRESSOR_SYSTEM energy usage model")," can give some unwanted effects.\nE.g. splitting/halving the rates into two equal compressor trains will in effect change the compressor chart for a\ncompressor set up with GENERIC_FROM_INPUT compared to running the full rate through a single compressor train.\nConsider using a single design point instead.")),(0,n.kt)("p",null,"The generic chart from input is also based on the unified generic compressor chart:"),(0,n.kt)("p",null,(0,n.kt)("img",{src:r(8501).Z,width:"1048",height:"729"})),(0,n.kt)("p",null,"However, in this case the design point is not specified when setting up the model, instead it is estimated at run time and is entirely based on the inputted data set.\nAn algorithm is used to set a design point such that all the input data is within the capacity.\nEven if there is a large spread in the data, all data points will solve. High rate/head data points will just be covered by the curve; whilst low rate points outside the minimum flow point will have recirculation. "),(0,n.kt)("p",null,"This method has one major potential downside in comparison to the ",(0,n.kt)("inlineCode",{parentName:"p"},"Generic compressor chart with predefined design point"),'. As all data points will be covered by the compressor curve, if there is an extremely large or unrealistic head or rate value, the other more "normal" data points will be impacted and will either result in a large head adjustment (via upstream/downstream choking) or it will have a large recirculation rate. This has the potential to skew the entire data set solely due to one unrealistic data point. Thus, if this generic chart is utilised it is important to make sure that unrealistic data is filtered out.'),(0,n.kt)("h3",{id:"format-5"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>\n UNITS:\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n")),(0,n.kt)("h3",{id:"example-6"},"Example"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.75\n UNITS:\n EFFICIENCY: FRACTION\n")),(0,n.kt)("h2",{id:"surge-control-margin-for-variable-speed-compressor-chart"},"Surge control margin for variable speed compressor chart"),(0,n.kt)("p",null,(0,n.kt)("img",{src:r(2484).Z,width:"1048",height:"729"})),(0,n.kt)("p",null,"For a variable speed compressor chart it is possible to add a surge control margin. This is currently done by giving a\nfraction or percentage as input. The control margin is used to calculate the increase in minimum flow, i.e. as a percentage\nor fraction of the rate difference between minimum- and maximum flow, for the given speed. The increase in minimum\nflow is calculated individually for each speed curve. The corresponding head and efficiency values for the new minimum flow rate\nis found by interpolation along the speed curves. The same compressor chart can be used for multiple compressor stages,\nbut with different surge control margins. Hence, the surge control margin is defined when setting up the stages in a\n",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},(0,n.kt)("inlineCode",{parentName:"a"},"Variable speed compressor train model"))," or ",(0,n.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},(0,n.kt)("inlineCode",{parentName:"a"},"Variable speed compressor train model with multiple streams and pressures")),"."),(0,n.kt)("h3",{id:"format-6"},"Format"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n")))}m.isMDXComponent=!0},2484:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/compressor_chart_surge_control_margin_line-98e32f3b0d5332a371ec4bb2dbc66da8.png"},8501:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png"}}]); \ No newline at end of file diff --git a/assets/js/f59fd0ba.5362a74e.js b/assets/js/f59fd0ba.5362a74e.js new file mode 100644 index 0000000000..5bd6ce5604 --- /dev/null +++ b/assets/js/f59fd0ba.5362a74e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2562],{4372:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var a=r(7462),o=(r(7294),r(3905));r(5657);const n={},s="FLUID_DENSITY",c={unversionedId:"about/references/keywords/FLUID_DENSITY",id:"about/references/keywords/FLUID_DENSITY",title:"FLUID_DENSITY",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/FLUID_DENSITY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FLUID_DENSITY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FILE",permalink:"/ecalc/docs/about/references/keywords/FILE"},next:{title:"FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL"}},d={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],i={toc:l},u="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,a.Z)({},i,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"fluid_density"},"FLUID_DENSITY"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},"INSTALLATIONS")," /\n","[...]"," /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," /\n",(0,o.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"},"FLUID_DENSITY")),(0,o.kt)("h2",{id:"description"},"Description"),(0,o.kt)("p",null,"Used to define the fluid density for\npump type ",(0,o.kt)("inlineCode",{parentName:"p"},"energy usage models<ENERGY_USAGE_MODEL>"),"."),(0,o.kt)("h2",{id:"format"},"Format"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"FLUID_DENSITY: <fluid density value or expression>\n")),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"FLUID_DENSITY: 1030 # [kg/m3]\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f5b92c38.c5ebe54e.js b/assets/js/f5b92c38.c5ebe54e.js new file mode 100644 index 0000000000..b3acfe9616 --- /dev/null +++ b/assets/js/f5b92c38.c5ebe54e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8984],{7090:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>E,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=a(7462),r=(a(7294),a(3905));a(5657);const o={},s="LOWER_HEATING_VALUE",i={unversionedId:"about/references/keywords/LOWER_HEATING_VALUE",id:"about/references/keywords/LOWER_HEATING_VALUE",title:"LOWER_HEATING_VALUE",description:"Description",source:"@site/docs/about/references/keywords/LOWER_HEATING_VALUE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/LOWER_HEATING_VALUE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD"},next:{title:"MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE"}},E={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],l={toc:c},u="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},l,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"lower_heating_value"},"LOWER_HEATING_VALUE"),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"LOWER_HEATING_VALUE")," is a required to be specified under the ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"},"TURBINE_MODEL")," keyword.\nThis ",(0,r.kt)("strong",{parentName:"p"},"must")," be specified in MJ/Sm",(0,r.kt)("sup",null,"3")),(0,r.kt)("p",null,"This can only be inputted as a single value and dictates the quantity of thermal energy available after burning a standard cubic metre of fuel (natural gas in this gas)."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f85d2ba9.7e35db59.js b/assets/js/f85d2ba9.7e35db59.js new file mode 100644 index 0000000000..8767e45271 --- /dev/null +++ b/assets/js/f85d2ba9.7e35db59.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2488],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/fa0b6059.d020b31a.js b/assets/js/fa0b6059.d020b31a.js new file mode 100644 index 0000000000..f9682a5d07 --- /dev/null +++ b/assets/js/fa0b6059.d020b31a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9251],{337:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>i,contentTitle:()=>n,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var t=o(7462),r=(o(7294),o(3905));o(5657);const a={title:"Compressor",sidebar_position:1,description:"COMPRESSOR Energy Usage Model"},n="COMPRESSOR Energy Usage Model",l={unversionedId:"about/modelling/setup/installations/compressor_models_in_calculations/compressor",id:"about/modelling/setup/installations/compressor_models_in_calculations/compressor",title:"Compressor",description:"COMPRESSOR Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Compressor",sidebar_position:1,description:"COMPRESSOR Energy Usage Model"},sidebar:"about",previous:{title:"Compressor models",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"},next:{title:"Compressor system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system"}},i={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}],p={toc:c},m="wrapper";function d(e){let{components:s,...o}=e;return(0,r.kt)(m,(0,t.Z)({},p,o,{components:s,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"compressor-energy-usage-model"},"COMPRESSOR Energy Usage Model"),(0,r.kt)("p",null,"When ",(0,r.kt)("inlineCode",{parentName:"p"},"COMPRESSOR")," is specified under ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL")," the only keyword that is allowed is ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION"},"ENERGYFUNCTION"),".\nThis model only supports a single compressor, which can either be a tabular compressor model defined in ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/"},"FACILITY_INPUTS")," or a compressor model defined in ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/models/"},"MODELS"),"."),(0,r.kt)("p",null,"The attributes ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/RATE"},"RATE"),", ",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"},"SUCTION_PRESSURE")," and\n",(0,r.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"},"DISCHARGE_PRESSURE")," are required to be specified in the energy usage model. Here, the specified rate will be for the entire train, the\nsuction pressure will be at the inlet of the first stage, whilst the discharge pressure will be the outlet pressure of the last stage."),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>\n RATE: <rate expression>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n")),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: booster_compressor_reference\n RATE: SIM1;GAS_PROD\n SUCTION_PRESSURE: SIM1;SUCTION_PRESSURE\n DISCHARGE_PRESSURE: SIM1;DISCHARGE_PRESSURE\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fa17a3e5.40428d1d.js b/assets/js/fa17a3e5.40428d1d.js new file mode 100644 index 0000000000..e479149d2b --- /dev/null +++ b/assets/js/fa17a3e5.40428d1d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3181],{2503:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),l=n(7294),r=n(6010),i=n(5999),c=n(6668),o=n(9960);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function m(e){let{as:t,id:n,...m}=e;const{navbar:{hideOnScroll:d}}=(0,c.L)();if("h1"===t||!n)return l.createElement(t,(0,a.Z)({},m,{id:void 0}));const u=(0,i.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof m.children?m.children:n});return l.createElement(t,(0,a.Z)({},m,{className:(0,r.Z)("anchor",d?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,m.className),id:n}),m.children,l.createElement(o.Z,{className:"hash-link",to:`#${n}`,"aria-label":u,title:u},"\u200b"))}},5111:(e,t,n)=>{n.r(t),n.d(t,{default:()=>E});var a=n(7294),l=n(2263),r=n(9960),i=n(5999),c=n(143),o=n(179),s=n(2503);const m=void 0;function d(){return a.createElement(i.Z,{id:"versionsPage.versionEntry.link"},"Documentation")}function u(){return a.createElement(i.Z,{id:"versionsPage.versionEntry.releaseNotes"},"Release Notes")}function E(){const{siteConfig:{organizationName:e,projectName:t}}=(0,l.Z)(),n=(0,c.gB)(m),E=(0,c.yW)(m),h=n.find((e=>"current"===e.name)),v=n.filter((e=>e!==E&&"current"!==e.name)),g=`https://github.com/${e}/${t}`;return a.createElement(o.Z,{title:"Versions",description:"eCalc Versions page listing all documented versions"},a.createElement("main",{className:"container margin-vert--lg"},a.createElement(s.Z,{as:"h1"},a.createElement(i.Z,{id:"versionsPage.title"},"eCalc documentation versions")),a.createElement("div",{className:"margin-bottom--lg"},a.createElement(s.Z,{as:"h3",id:"next"},a.createElement(i.Z,{id:"versionsPage.current.title"},"Current version (Stable)")),a.createElement("p",null,a.createElement(i.Z,{id:"versionsPage.current.description"},"Here you can find the documentation for current released version.")),a.createElement("table",null,a.createElement("tbody",null,a.createElement("tr",null,a.createElement("th",null,E.label),a.createElement("td",null,a.createElement(r.Z,{to:E.path+"/about"},a.createElement(d,null))),a.createElement("td",null,a.createElement(r.Z,{to:E.path+"/changelog/latest"},a.createElement(u,null))))))),h!==E&&a.createElement("div",{className:"margin-bottom--lg"},a.createElement(s.Z,{as:"h3",id:"latest"},a.createElement(i.Z,{id:"versionsPage.next.title"},"Next version (Unreleased)")),a.createElement("p",null,a.createElement(i.Z,{id:"versionsPage.next.description"},"Here you can find the documentation for work-in-process unreleased version.")),a.createElement("table",null,a.createElement("tbody",null,a.createElement("tr",null,a.createElement("th",null,h.label),a.createElement("td",null,a.createElement(r.Z,{to:h.path+"/about"},a.createElement(d,null))),a.createElement("td",null,a.createElement(r.Z,{to:h.path+"/changelog/latest"},a.createElement(u,null))))))),v.length>0&&a.createElement("div",{className:"margin-bottom--lg"},a.createElement(s.Z,{as:"h3",id:"archive"},a.createElement(i.Z,{id:"versionsPage.archived.title"},"Past versions (Not maintained anymore)")),a.createElement("p",null,a.createElement(i.Z,{id:"versionsPage.archived.description"},"Here you can find documentation for previous versions of eCalc.")),a.createElement("table",null,a.createElement("tbody",null,v.map((e=>a.createElement("tr",{key:e.name},a.createElement("th",null,e.label),a.createElement("td",null,a.createElement(r.Z,{to:e.path+"/about"},a.createElement(d,null))),a.createElement("td",null,a.createElement(r.Z,{href:`${g}/releases/tag/${e.name}`},a.createElement(u,null)))))))))))}}}]); \ No newline at end of file diff --git a/assets/js/fa3d98bd.ce842ab5.js b/assets/js/fa3d98bd.ce842ab5.js new file mode 100644 index 0000000000..280d045a23 --- /dev/null +++ b/assets/js/fa3d98bd.ce842ab5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6696],{4115:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var a=n(7462),l=(n(7294),n(3905));n(5657);const i={sidebar_position:1,description:"Generator modelling"},r="Generator modelling",o={unversionedId:"about/modelling/setup/facility_inputs/generator_modelling",id:"about/modelling/setup/facility_inputs/generator_modelling",title:"Generator modelling",description:"Generator modelling",source:"@site/docs/about/modelling/setup/facility_inputs/generator_modelling.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/generator_modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/generator_modelling.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"Generator modelling"},sidebar:"about",previous:{title:"Facility inputs",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/"},next:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"}},u={},s=[{value:"ELECTRICITY2FUEL",id:"electricity2fuel",level:2},{value:"Facility input format",id:"facility-input-format",level:3},{value:"Example table",id:"example-table",level:3},{value:"Header and unit requirements",id:"header-and-unit-requirements",level:3}],d={toc:s},m="wrapper";function p(e){let{components:t,...n}=e;return(0,l.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"generator-modelling"},"Generator modelling"),(0,l.kt)("p",null,"In eCalc\u2122, the term ",(0,l.kt)("em",{parentName:"p"},"generator")," refers to equipment producing ",(0,l.kt)("strong",{parentName:"p"},"electrical power from fuel"),". Hence, the turbine part (fuel combustion to produce mechanical energy) is included in the term."),(0,l.kt)("p",null,"An installation usually have one or more generators to fill the electrical power demand. In eCalc\u2122, the separate generators are combined into a common generator set (genset)."),(0,l.kt)("admonition",{type:"note"},(0,l.kt)("p",{parentName:"admonition"},"In the future, eCalc\u2122 will most likely offer modelling of single generators that could be combined in systems.")),(0,l.kt)("h2",{id:"electricity2fuel"},"ELECTRICITY2FUEL"),(0,l.kt)("p",null,'Electricity to fuel is a table specifying the relationship between electrical load\nand fuel consumption for an entire generator set. This means that if you have several generators,\nthis table needs to include a "jump" every time a new generator is started. An example of this\nis shown ',(0,l.kt)("a",{parentName:"p",href:"#Table-example"},"below"),"."),(0,l.kt)("p",null,"Under ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/"},"FACILITY_INPUTS"),", this electricity to fuel table is specified using the keyword ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},"ELECTRICITY2FUEL")),(0,l.kt)("h3",{id:"facility-input-format"},"Facility input format"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"FACILITY_INPUTS:\n - NAME: <generator name>\n FILE: <file path to .csv file>\n TYPE: ELECTRICITY2FUEL\n")),(0,l.kt)("h3",{id:"example-table"},"Example table"),(0,l.kt)("p",null,"The table for this curve would look like:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-text"},"POWER, FUEL\n#[MW], [Sm3/day]\n0.00, 0.0\n0.10, 84000.0\n5.00, 84000.0\n42.0, 220000.0\n42.01, 280000.0\n45.0, 300000.0\n50.0, 330000.0\n60.0, 350000.0\n")),(0,l.kt)("h3",{id:"header-and-unit-requirements"},"Header and unit requirements"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Header"),(0,l.kt)("th",{parentName:"tr",align:null},"Unit"),(0,l.kt)("th",{parentName:"tr",align:null},"Mandatory"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Power"),(0,l.kt)("td",{parentName:"tr",align:null},"MW"),(0,l.kt)("td",{parentName:"tr",align:null},"Yes")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Fuel"),(0,l.kt)("td",{parentName:"tr",align:null},"Sm",(0,l.kt)("sup",null,"3"),"/day"),(0,l.kt)("td",{parentName:"tr",align:null},"Yes")))))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fb7e7841.e0a3bf3d.js b/assets/js/fb7e7841.e0a3bf3d.js new file mode 100644 index 0000000000..ebc94f44f8 --- /dev/null +++ b/assets/js/fb7e7841.e0a3bf3d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4466],{6217:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>n,default:()=>u,frontMatter:()=>c,metadata:()=>i,toc:()=>r});var s=t(7462),l=(t(7294),t(3905));t(5657);const c={slug:"latest",title:"Next",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:1},n="eCalc",i={unversionedId:"changelog/next",id:"changelog/next",title:"Next",description:"New Features",source:"@site/docs/changelog/next.md",sourceDirName:"changelog",slug:"/changelog/latest",permalink:"/ecalc/docs/changelog/latest",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/next.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:1,frontMatter:{slug:"latest",title:"Next",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:1},sidebar:"changelog",previous:{title:"v8.5 (Latest)",permalink:"/ecalc/docs/changelog/v8.5-release"},next:{title:"---",permalink:"/ecalc/docs/changelog/separator"}},o={},r=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}],g={toc:r},d="wrapper";function u(e){let{components:a,...t}=e;return(0,l.kt)(d,(0,s.Z)({},g,t,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"ecalc"},"eCalc"),(0,l.kt)("h2",{id:"new-features"},"New Features"),(0,l.kt)("h2",{id:"fixes"},"Fixes"),(0,l.kt)("h2",{id:"breaking-changes"},"Breaking changes"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fba8a418.6a88519a.js b/assets/js/fba8a418.6a88519a.js new file mode 100644 index 0000000000..1fd0e56491 --- /dev/null +++ b/assets/js/fba8a418.6a88519a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6638],{9779:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>g,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var l=t(7462),n=(t(7294),t(3905));t(5657);const r={slug:"v8.2-release",title:"v8.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:12},i="eCalc v8.2",o={unversionedId:"changelog/v8-2",id:"changelog/v8-2",title:"v8.2",description:"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See",source:"@site/docs/changelog/v8-2.md",sourceDirName:"changelog",slug:"/changelog/v8.2-release",permalink:"/ecalc/docs/changelog/v8.2-release",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-2.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:12,frontMatter:{slug:"v8.2-release",title:"v8.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:12},sidebar:"changelog",previous:{title:"v8.1",permalink:"/ecalc/docs/changelog/v8.1-release"},next:{title:"v8.3",permalink:"/ecalc/docs/changelog/v8.3-release"}},s={},c=[{value:"New features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2}],d={toc:c},u="wrapper";function g(e){let{components:a,...t}=e;return(0,n.kt)(u,(0,l.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"ecalc-v82"},"eCalc v8.2"),(0,n.kt)("p",null,"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See\nthe migration guide for details on changes, where relevant."),(0,n.kt)("h2",{id:"new-features"},"New features"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"STP is available as a predefined TSV file-export of data. Use argument ",(0,n.kt)("inlineCode",{parentName:"li"},"--stp-export")," on cli."),(0,n.kt)("li",{parentName:"ul"},"Output emissions in fixed and predicted order in JSON export"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"BREAKING"),": ",(0,n.kt)("inlineCode",{parentName:"li"},"Conditions")," in YAML model that evaluates to ",(0,n.kt)("strong",{parentName:"li"},"false")," will ",(0,n.kt)("em",{parentName:"li"},"no longer")," be calculated and outputted"),(0,n.kt)("li",{parentName:"ul"},"Using average rates instead of forward filling when resampling rates to a given output frequency"),(0,n.kt)("li",{parentName:"ul"},"New ",(0,n.kt)("inlineCode",{parentName:"li"},"Categories")," added to STP and LTP export"),(0,n.kt)("li",{parentName:"ul"},"Operational settings are now 1-based instead of 0-based.")),(0,n.kt)("h2",{id:"fixes"},"Fixes"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Some VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES models have returned a too low INTERSTAGE_PRESSURE when using INDIVIDUAL_ASV_RATE control. The INDIVIDUAL_ASV_RATE fixed speed pressure control now returns the required INTERSTAGE_PRESSURE correctly.")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fe44757f.31470284.js b/assets/js/fe44757f.31470284.js new file mode 100644 index 0000000000..23be2ce0aa --- /dev/null +++ b/assets/js/fe44757f.31470284.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9083],{4198:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>p});var a=n(7462),l=(n(7294),n(3905));n(5657);const i={title:"Pump models",sidebar_position:2,description:"Using pumps in calculations"},s="Pump models in calculations",r={unversionedId:"about/modelling/setup/installations/pump_models_in_calculations",id:"about/modelling/setup/installations/pump_models_in_calculations",title:"Pump models",description:"Using pumps in calculations",source:"@site/docs/about/modelling/setup/installations/pump_models_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/pump_models_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations",draft:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/pump_models_in_calculations.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Pump models",sidebar_position:2,description:"Using pumps in calculations"},sidebar:"about",previous:{title:"Generator sets",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations"},next:{title:"Compressor models",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"}},o={},p=[{value:"PUMP energy usage model",id:"pump-energy-usage-model",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Units",id:"units",level:3},{value:"PUMP_SYSTEM energy usage model",id:"pump_system-energy-usage-model",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example-1",level:3},{value:"Units",id:"units-1",level:3}],u={toc:p},m="wrapper";function d(e){let{components:t,...n}=e;return(0,l.kt)(m,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"pump-models-in-calculations"},"Pump models in calculations"),(0,l.kt)("p",null,"Pump charts are defined in the ",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/"},"FACILITY_INPUTS")," section, and is then referred to from an\n",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},"ENERGY_USAGE_MODEL"),"."),(0,l.kt)("h2",{id:"pump-energy-usage-model"},"PUMP energy usage model"),(0,l.kt)("p",null,"To configure a single pump, the pump rate, suction- and discharge pressures and fluid density must be given as inputs. In addition, a reference to a pump chart defined in the\n",(0,l.kt)("a",{parentName:"p",href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},"FACILITY_INPUTS")," section has to be included."),(0,l.kt)("h3",{id:"format"},"Format"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference energy function in facility inputs of pump type>\n RATE: <rate expression>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n FLUID_DENSITY: <fluid density expression>\n")),(0,l.kt)("h3",{id:"example"},"Example"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP\n ENERGYFUNCTION: waterinjection_pump_reference\n RATE: SIM1;WATER_INJ\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1000\n")),(0,l.kt)("h3",{id:"units"},"Units"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Quantity"),(0,l.kt)("th",{parentName:"tr",align:null},"Default units"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"RATE"),(0,l.kt)("td",{parentName:"tr",align:null},"Sm",(0,l.kt)("sup",null,"3"),"/day")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SUCTION_PRESSURE"),(0,l.kt)("td",{parentName:"tr",align:null},"bara")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DISCHARGE_PRESSURE"),(0,l.kt)("td",{parentName:"tr",align:null},"bara")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FLUID_DENSITY"),(0,l.kt)("td",{parentName:"tr",align:null},"kg/m",(0,l.kt)("sup",null,"3"))))),(0,l.kt)("h2",{id:"pump_system-energy-usage-model"},"PUMP_SYSTEM energy usage model"),(0,l.kt)("p",null,"Model a system of pumps that share common manifolds and have cross-overs between them and for which the rate may be\nsplit between them based on various operational strategies."),(0,l.kt)("h3",{id:"format-1"},"Format"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n CONDITION: <condition expression>\n PUMPS:\n - NAME: <name of compressor>\n CHART: <reference to pump model in facility inputs>\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n FLUID_DENSITY: <expression defining the fluid density>\n OPERATIONAL_SETTINGS:\n <operational settings data>\n")),(0,l.kt)("admonition",{type:"warning"},(0,l.kt)("p",{parentName:"admonition"}," If all ",(0,l.kt)("inlineCode",{parentName:"p"},"OPERATIONAL_SETTINGS"),' have been exhausted, and there were still some time steps that were outside the\ncapacity of the operational setting, the last operational setting will be "chosen" nevertheless. In this case the\n',(0,l.kt)("inlineCode",{parentName:"p"},"energy_usage")," in the output will be set to ",(0,l.kt)("inlineCode",{parentName:"p"},"NaN")," which indicates that the operational setting, is in fact, invalid\n(or converted to 0 when aggregating upwards to e.g. genset)")),(0,l.kt)("h3",{id:"example-1"},"Example"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1000.0\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n")),(0,l.kt)("h3",{id:"units-1"},"Units"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Quantity"),(0,l.kt)("th",{parentName:"tr",align:null},"Default units"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"RATE"),(0,l.kt)("td",{parentName:"tr",align:null},"Sm",(0,l.kt)("sup",null,"3"),"/day")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SUCTION_PRESSURE"),(0,l.kt)("td",{parentName:"tr",align:null},"bara")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DISCHARGE_PRESSURE"),(0,l.kt)("td",{parentName:"tr",align:null},"bara")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FLUID_DENSITY"),(0,l.kt)("td",{parentName:"tr",align:null},"kg/m",(0,l.kt)("sup",null,"3"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.6e0d906c.js b/assets/js/main.6e0d906c.js new file mode 100644 index 0000000000..242465656e --- /dev/null +++ b/assets/js/main.6e0d906c.js @@ -0,0 +1,2 @@ +/*! For license information please see main.6e0d906c.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),s=n(6887);const l={"00440000":[()=>Promise.all([n.e(8592),n.e(5595)]).then(n.bind(n,9214)),"@site/docs/about/references/keywords/CONDITION.md",9214],"00bdc23f":[()=>Promise.all([n.e(8592),n.e(8088)]).then(n.bind(n,7131)),"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",7131],"0425b884":[()=>Promise.all([n.e(8592),n.e(9336)]).then(n.bind(n,9687)),"@site/docs/about/getting_started/library/index.md",9687],"06adec10":[()=>Promise.all([n.e(8592),n.e(2153)]).then(n.bind(n,8764)),"@site/docs/about/references/keywords/POWERLOSSFACTOR.md",8764],"06dd1efa":[()=>Promise.all([n.e(8592),n.e(6039)]).then(n.bind(n,6865)),"@site/docs/about/references/keywords/END.md",6865],"071a0eb8":[()=>Promise.all([n.e(8592),n.e(5165)]).then(n.bind(n,196)),"@site/docs/about/references/keywords/TAX.md",196],"0745e7f0":[()=>Promise.all([n.e(8592),n.e(4069)]).then(n.bind(n,5559)),"@site/docs/changelog/v8-5.md",5559],"074935d7":[()=>Promise.all([n.e(8592),n.e(1042)]).then(n.bind(n,8771)),"@site/docs/about/references/keywords/RATE_PER_STREAM.md",8771],"07b341f3":[()=>Promise.all([n.e(8592),n.e(8267)]).then(n.bind(n,9971)),"@site/docs/about/references/keywords/VARIABLES.md",9971],"084f7ebf":[()=>Promise.all([n.e(8592),n.e(3847)]).then(n.bind(n,830)),"@site/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",830],"0aeda122":[()=>Promise.all([n.e(8592),n.e(7832)]).then(n.bind(n,2702)),"@site/docs/about/references/keywords/HEAD.md",2702],"0f7b5825":[()=>Promise.all([n.e(8592),n.e(7238)]).then(n.bind(n,498)),"@site/docs/about/references/keywords/ELECTRICITY2FUEL.md",498],"0fd76486":[()=>Promise.all([n.e(8592),n.e(8746)]).then(n.bind(n,6263)),"@site/docs/about/modelling/examples/index.md",6263],"10c684b0":[()=>Promise.all([n.e(8592),n.e(5870)]).then(n.bind(n,6328)),"@site/docs/about/references/keywords/START.md",6328],"11516e85":[()=>Promise.all([n.e(8592),n.e(3054)]).then(n.bind(n,6369)),"@site/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",6369],"1287dd43":[()=>Promise.all([n.e(8592),n.e(3700)]).then(n.bind(n,5300)),"@site/docs/contribute/guides/01-git.md",5300],"1300feb7":[()=>Promise.all([n.e(8592),n.e(8269)]).then(n.bind(n,3810)),"@site/docs/about/references/keywords/RATE.md",3810],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],"15962da1":[()=>Promise.all([n.e(8592),n.e(996)]).then(n.bind(n,3146)),"@site/docs/about/references/keywords/GENERATORSETS.md",3146],"163041ea":[()=>Promise.all([n.e(8592),n.e(9480)]).then(n.bind(n,809)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",809],17896441:[()=>Promise.all([n.e(532),n.e(8592),n.e(7918)]).then(n.bind(n,2587)),"@theme/DocItem",2587],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,1473)),"@theme/SearchPage",1473],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1c663d3d":[()=>Promise.all([n.e(8592),n.e(8392)]).then(n.bind(n,2556)),"@site/docs/about/getting_started/index.md",2556],"1df93b7f":[()=>n.e(3237).then(n.bind(n,9754)),"@site/src/pages/index.tsx",9754],"1e7de7fe":[()=>n.e(6124).then(n.t.bind(n,43,19)),"~docs/default/category-ecalcdocs-contribute-category-guides-4cd.json",43],"1f60d0d4":[()=>Promise.all([n.e(8592),n.e(6539)]).then(n.bind(n,760)),"@site/docs/about/index.md",760],"22f0e129":[()=>Promise.all([n.e(8592),n.e(6893)]).then(n.bind(n,2040)),"@site/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",2040],"2781f0ad":[()=>Promise.all([n.e(8592),n.e(3787)]).then(n.bind(n,6866)),"@site/docs/about/modelling/examples/advanced.md",6866],"29367e59":[()=>Promise.all([n.e(8592),n.e(3173)]).then(n.bind(n,106)),"@site/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",106],"295f424e":[()=>Promise.all([n.e(8592),n.e(5133)]).then(n.bind(n,7478)),"@site/docs/about/references/keywords/DIRECT_EMITTERS.md",7478],"29d00dd8":[()=>Promise.all([n.e(8592),n.e(8084)]).then(n.bind(n,947)),"@site/docs/about/references/keywords/ENERGYFUNCTION.md",947],"2b15d891":[()=>Promise.all([n.e(8592),n.e(2225)]).then(n.bind(n,4268)),"@site/docs/about/references/keywords/NAME.md",4268],"2b2be347":[()=>Promise.all([n.e(8592),n.e(1404)]).then(n.bind(n,8335)),"@site/docs/changelog/v7-0.md",8335],"2c19a041":[()=>Promise.all([n.e(8592),n.e(4507)]).then(n.bind(n,5282)),"@site/docs/about/references/keywords/REGULARITY.md",5282],"2c73e373":[()=>Promise.all([n.e(8592),n.e(2655)]).then(n.bind(n,212)),"@site/docs/contribute/guides/02-conventional-commits.md",212],"2ce3b5da":[()=>Promise.all([n.e(8592),n.e(9050)]).then(n.bind(n,7613)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",7613],"2cedaf2f":[()=>Promise.all([n.e(8592),n.e(5408)]).then(n.bind(n,2395)),"@site/docs/about/modelling/workflow/generic_workflow.md",2395],"2df92a48":[()=>Promise.all([n.e(8592),n.e(3596)]).then(n.bind(n,8373)),"@site/docs/about/references/keywords/FUEL_TYPES.md",8373],"2f04f592":[()=>Promise.all([n.e(8592),n.e(7495)]).then(n.bind(n,7826)),"@site/docs/changelog/separator.md",7826],"3261da49":[()=>Promise.all([n.e(8592),n.e(3091)]).then(n.bind(n,5244)),"@site/docs/about/references/keywords/INTERPOLATION_TYPE.md",5244],"33498b04":[()=>Promise.all([n.e(8592),n.e(381)]).then(n.bind(n,2594)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",2594],"3409ab5c":[()=>Promise.all([n.e(8592),n.e(2017)]).then(n.bind(n,4277)),"@site/docs/about/modelling/theory/pump_modelling.md",4277],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,9861)),"@theme/DocTagsListPage",9861],"3810e8e5":[()=>Promise.all([n.e(8592),n.e(6887)]).then(n.bind(n,8766)),"@site/docs/about/references/keywords/HCEXPORT.md",8766],"382d59b5":[()=>Promise.all([n.e(8592),n.e(9306)]).then(n.bind(n,402)),"@site/docs/about/references/keywords/CURVES.md",402],"38d592cf":[()=>Promise.all([n.e(8592),n.e(1398)]).then(n.bind(n,4193)),"@site/docs/about/modelling/theory/compressor_modelling.md",4193],"3aeef25a":[()=>Promise.all([n.e(8592),n.e(7396)]).then(n.bind(n,6544)),"@site/docs/about/references/keywords/HEAD_MARGIN.md",6544],"3b0e82f8":[()=>Promise.all([n.e(8592),n.e(925)]).then(n.bind(n,771)),"@site/docs/about/references/keywords/CURVE.md",771],"3e38e310":[()=>Promise.all([n.e(8592),n.e(8094)]).then(n.bind(n,8955)),"@site/docs/changelog/v8-3.md",8955],"3fbb770c":[()=>Promise.all([n.e(8592),n.e(4838)]).then(n.bind(n,3758)),"@site/docs/about/references/keywords/SUCTION_PRESSURE.md",3758],"40d6382c":[()=>Promise.all([n.e(8592),n.e(9814)]).then(n.bind(n,9142)),"@site/docs/about/migration_guides/index.md",9142],"4147f87e":[()=>Promise.all([n.e(8592),n.e(9786)]).then(n.bind(n,40)),"@site/docs/about/references/keywords/STAGES.md",40],"41d1792a":[()=>n.e(1748).then(n.t.bind(n,2977,19)),"~docs/default/tag-ecalc-docs-tags-release-eb8.json",2977],"428320b6":[()=>Promise.all([n.e(8592),n.e(6193)]).then(n.bind(n,2213)),"@site/docs/changelog/changelog.md",2213],"43a1031a":[()=>Promise.all([n.e(8592),n.e(8010)]).then(n.bind(n,6370)),"@site/docs/about/modelling/setup/facility_inputs/index.md",6370],"43a26e71":[()=>Promise.all([n.e(8592),n.e(4845)]).then(n.bind(n,6689)),"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",6689],"45c974ba":[()=>Promise.all([n.e(8592),n.e(2459)]).then(n.bind(n,2098)),"@site/docs/changelog/v7-2.md",2098],"47daf389":[()=>Promise.all([n.e(8592),n.e(8082)]).then(n.bind(n,7342)),"@site/docs/changelog/v8-4.md",7342],"496ed8d5":[()=>Promise.all([n.e(8592),n.e(2206)]).then(n.bind(n,9094)),"@site/docs/about/getting_started/cli/faq.md",9094],"498bfcff":[()=>Promise.all([n.e(8592),n.e(749)]).then(n.bind(n,8293)),"@site/docs/about/modelling/setup/fuel_types.md",8293],"4aa4fc36":[()=>Promise.all([n.e(8592),n.e(1044)]).then(n.bind(n,8622)),"@site/docs/about/migration_guides/v8_to_v81.md",8622],"4b5a01f9":[()=>Promise.all([n.e(8592),n.e(3211)]).then(n.bind(n,8792)),"@site/docs/about/modelling/setup/models/fluid_model.md",8792],"4b80f681":[()=>Promise.all([n.e(8592),n.e(9842)]).then(n.bind(n,6766)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",6766],"4c3c1dc2":[()=>Promise.all([n.e(8592),n.e(6686)]).then(n.bind(n,8122)),"@site/docs/about/references/keywords/PRESSURE_CONTROL.md",8122],"4da8ac19":[()=>Promise.all([n.e(8592),n.e(6038)]).then(n.bind(n,4227)),"@site/docs/about/references/keywords/EFFICIENCY.md",4227],"4ee97ba8":[()=>Promise.all([n.e(8592),n.e(1668)]).then(n.bind(n,1792)),"@site/docs/about/references/index.md",1792],"502e1773":[()=>Promise.all([n.e(8592),n.e(2693)]).then(n.bind(n,6914)),"@site/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",6914],"51ad0f66":[()=>Promise.all([n.e(8592),n.e(5713)]).then(n.bind(n,889)),"@site/docs/about/references/keywords/EMISSION_RATE.md",889],"54094f37":[()=>Promise.all([n.e(8592),n.e(3172)]).then(n.bind(n,3097)),"@site/docs/about/references/keywords/EMITTER_MODEL.md",3097],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,8070,19)),"~docs/default/tags-list-current-prop-15a.json",8070],"577efb1d":[()=>Promise.all([n.e(8592),n.e(628)]).then(n.bind(n,4944)),"@site/docs/about/references/keywords/STREAM.md",4944],"5989d566":[()=>Promise.all([n.e(8592),n.e(1709)]).then(n.bind(n,5856)),"@site/docs/about/references/keywords/EMISSIONS.md",5856],"5a5e553d":[()=>Promise.all([n.e(8592),n.e(1110)]).then(n.bind(n,3917)),"@site/docs/about/references/keywords/EXTRAPOLATION.md",3917],"5c08a402":[()=>Promise.all([n.e(8592),n.e(8846)]).then(n.bind(n,6280)),"@site/docs/about/migration_guides/v8-1_to_v8-2.md",6280],"5c8ec56d":[()=>Promise.all([n.e(8592),n.e(4070)]).then(n.bind(n,6095)),"@site/docs/about/modelling/setup/models/compressor_modelling/index.md",6095],"5e10e9e1":[()=>Promise.all([n.e(8592),n.e(443)]).then(n.bind(n,4660)),"@site/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",4660],"5e3ed04b":[()=>Promise.all([n.e(8592),n.e(2205)]).then(n.bind(n,6052)),"@site/docs/about/references/keywords/FACILITY_INPUTS.md",6052],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],60746895:[()=>Promise.all([n.e(8592),n.e(8282)]).then(n.bind(n,1522)),"@site/docs/contribute/documentation-guide/02-markdown.md",1522],"61639be2":[()=>Promise.all([n.e(8592),n.e(4075)]).then(n.bind(n,7195)),"@site/docs/about/references/keywords/FUELCONSUMERS.md",7195],66286265:[()=>Promise.all([n.e(8592),n.e(180)]).then(n.bind(n,1210)),"@site/docs/about/modelling/setup/facility_inputs/tabular.md",1210],"66a649c0":[()=>Promise.all([n.e(8592),n.e(3240)]).then(n.bind(n,5245)),"@site/docs/about/references/keywords/CROSSOVER.md",5245],"676abc7a":[()=>Promise.all([n.e(8592),n.e(5654)]).then(n.bind(n,7422)),"@site/docs/about/references/keywords/TIME_SERIES.md",7422],"69fd9be6":[()=>Promise.all([n.e(8592),n.e(8570)]).then(n.bind(n,8445)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",8445],"6adcc868":[()=>Promise.all([n.e(8592),n.e(8122)]).then(n.bind(n,9737)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",9737],"6bd3279d":[()=>Promise.all([n.e(8592),n.e(639)]).then(n.bind(n,9148)),"@site/docs/about/references/keywords/EMISSION_NAME.md",9148],"70f31d65":[()=>Promise.all([n.e(8592),n.e(7337)]).then(n.bind(n,6233)),"@site/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",6233],"72083b41":[()=>Promise.all([n.e(8592),n.e(5178)]).then(n.bind(n,9881)),"@site/docs/about/references/keywords/TYPE.md",9881],"721cfe60":[()=>Promise.all([n.e(8592),n.e(3802)]).then(n.bind(n,1223)),"@site/docs/about/migration_guides/v8-3_to_v8-4.md",1223],"7514af75":[()=>Promise.all([n.e(8592),n.e(6305)]).then(n.bind(n,1012)),"@site/docs/about/references/keywords/FUELRATE.md",1012],"7557b935":[()=>Promise.all([n.e(8592),n.e(856)]).then(n.bind(n,6949)),"@site/docs/about/migration_guides/v7_to_v8.md",6949],"7b02141e":[()=>Promise.all([n.e(8592),n.e(2638)]).then(n.bind(n,5771)),"@site/docs/about/modelling/workflow/index.md",5771],"7c623a68":[()=>Promise.all([n.e(8592),n.e(1310)]).then(n.bind(n,8096)),"@site/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",8096],"7cebed78":[()=>Promise.all([n.e(8592),n.e(9376)]).then(n.bind(n,8225)),"@site/docs/about/modelling/examples/simple.md",8225],"7d3b81bb":[()=>Promise.all([n.e(8592),n.e(8230)]).then(n.bind(n,4959)),"@site/docs/changelog/v7-4.md",4959],"7db788f5":[()=>Promise.all([n.e(8592),n.e(3074)]).then(n.bind(n,4430)),"@site/docs/about/modelling/setup/installations/index.md",4430],"7e6991bb":[()=>Promise.all([n.e(8592),n.e(2040)]).then(n.bind(n,2362)),"@site/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",2362],83665776:[()=>Promise.all([n.e(8592),n.e(6710)]).then(n.bind(n,4807)),"@site/docs/about/references/keywords/QUOTA.md",4807],"841adc37":[()=>Promise.all([n.e(8592),n.e(6768)]).then(n.bind(n,2634)),"@site/docs/about/modelling/setup/models/turbine_modeling.md",2634],"86262f09":[()=>Promise.all([n.e(8592),n.e(8318)]).then(n.bind(n,1155)),"@site/docs/about/references/keywords/EXPRESSION.md",1155],"880bbd08":[()=>Promise.all([n.e(8592),n.e(3315)]).then(n.bind(n,6475)),"@site/docs/about/references/keywords/UNITS.md",6475],"8961bfac":[()=>Promise.all([n.e(8592),n.e(9128)]).then(n.bind(n,4649)),"@site/docs/about/modelling/setup/file_format_and_syntax/expressions.md",4649],90184672:[()=>Promise.all([n.e(8592),n.e(5932)]).then(n.bind(n,58)),"@site/docs/about/references/keywords/INLET_TEMPERATURE.md",58],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"97732f4b":[()=>Promise.all([n.e(8592),n.e(7594)]).then(n.bind(n,5628)),"@site/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",5628],"977fea76":[()=>n.e(8023).then(n.t.bind(n,3769,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"9a118db7":[()=>Promise.all([n.e(8592),n.e(9364)]).then(n.bind(n,5637)),"@site/docs/about/modelling/setup/variables.md",5637],"9e136365":[()=>Promise.all([n.e(8592),n.e(9591)]).then(n.bind(n,8738)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",8738],"9e4a10de":[()=>Promise.all([n.e(8592),n.e(4395)]).then(n.bind(n,5670)),"@site/docs/about/references/keywords/TURBINE_MODEL.md",5670],"9e7755e6":[()=>Promise.all([n.e(8592),n.e(7212)]).then(n.bind(n,452)),"@site/docs/about/references/keywords/DISCHARGE_PRESSURE.md",452],"9e91bf8d":[()=>Promise.all([n.e(8592),n.e(4631)]).then(n.bind(n,9221)),"@site/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",9221],a2e97e20:[()=>Promise.all([n.e(8592),n.e(8988)]).then(n.bind(n,9848)),"@site/docs/about/modelling/setup/models/index.md",9848],a5dcc804:[()=>Promise.all([n.e(8592),n.e(8276)]).then(n.bind(n,8289)),"@site/docs/about/miscellaneous/index.md",8289],ad129716:[()=>Promise.all([n.e(8592),n.e(754)]).then(n.bind(n,1099)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",1099],af105519:[()=>Promise.all([n.e(8592),n.e(4199)]).then(n.bind(n,7067)),"@site/docs/about/migration_guides/v8-2_to_v8-3.md",7067],b0a5d2c7:[()=>Promise.all([n.e(8592),n.e(3414)]).then(n.bind(n,2528)),"@site/docs/about/references/keywords/CONTROL_MARGIN.md",2528],b15ba3bd:[()=>Promise.all([n.e(8592),n.e(2547)]).then(n.bind(n,695)),"@site/docs/about/references/keywords/PUMPS.md",695],b2773e31:[()=>Promise.all([n.e(8592),n.e(4405)]).then(n.bind(n,4160)),"@site/docs/about/references/keywords/ADJUSTMENT.mdx",4160],b2781c74:[()=>n.e(4278).then(n.t.bind(n,2776,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",2776],b2b17913:[()=>Promise.all([n.e(8592),n.e(3190)]).then(n.bind(n,2004)),"@site/docs/about/references/keywords/CATEGORY.md",2004],b677d687:[()=>Promise.all([n.e(8592),n.e(262)]).then(n.bind(n,3420)),"@site/docs/about/references/keywords/RATE_FRACTIONS.md",3420],b8c59810:[()=>n.e(9643).then(n.t.bind(n,1414,19)),"~docs/default/tag-ecalc-docs-tags-e-calc-236.json",1414],bb45b332:[()=>Promise.all([n.e(8592),n.e(4103)]).then(n.bind(n,1683)),"@site/docs/about/modelling/index.md",1683],bdf25f4c:[()=>Promise.all([n.e(8592),n.e(4025)]).then(n.bind(n,591)),"@site/docs/changelog/v7-1.md",591],bfdf430b:[()=>Promise.all([n.e(8592),n.e(8583)]).then(n.bind(n,5370)),"@site/docs/changelog/v8-0.md",5370],c21bc46a:[()=>Promise.all([n.e(8592),n.e(3443)]).then(n.bind(n,6997)),"@site/docs/about/references/keywords/MODELS.md",6997],c3d1f0cd:[()=>Promise.all([n.e(8592),n.e(4733)]).then(n.bind(n,9325)),"@site/docs/about/references/cli_reference.md",9325],c5daebe9:[()=>Promise.all([n.e(8592),n.e(2013)]).then(n.bind(n,8392)),"@site/docs/about/references/keywords/TURBINE_LOAD.md",8392],c8caddd1:[()=>Promise.all([n.e(8592),n.e(6721)]).then(n.bind(n,46)),"@site/docs/contribute/01-get-started.md",46],c90bf1e8:[()=>Promise.all([n.e(8592),n.e(8186)]).then(n.bind(n,4897)),"@site/docs/changelog/v7-3.md",4897],c93dcb87:[()=>Promise.all([n.e(8592),n.e(4168)]).then(n.bind(n,9509)),"@site/docs/about/references/keywords/CONSUMERS.md",9509],c9b29382:[()=>Promise.all([n.e(8592),n.e(8285)]).then(n.bind(n,8577)),"@site/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",8577],cb266b33:[()=>Promise.all([n.e(8592),n.e(2706)]).then(n.bind(n,6686)),"@site/docs/about/references/keywords/LOAD.md",6686],cbe196b2:[()=>Promise.all([n.e(8592),n.e(4734)]).then(n.bind(n,3785)),"@site/docs/about/references/keywords/FILE.md",3785],cc88a418:[()=>Promise.all([n.e(8592),n.e(2e3)]).then(n.bind(n,24)),"@site/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",24],ccf7588a:[()=>Promise.all([n.e(8592),n.e(8967)]).then(n.bind(n,1882)),"@site/docs/about/references/keywords/FACTOR.mdx",1882],cda37ba5:[()=>Promise.all([n.e(8592),n.e(4189)]).then(n.bind(n,1418)),"@site/docs/changelog/v7-6.md",1418],d17664a7:[()=>Promise.all([n.e(8592),n.e(6922)]).then(n.bind(n,3388)),"@site/docs/about/references/keywords/STREAMS.md",3388],d185ab52:[()=>Promise.all([n.e(8592),n.e(9524)]).then(n.bind(n,3322)),"@site/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",3322],d19423a2:[()=>Promise.all([n.e(8592),n.e(1686)]).then(n.bind(n,8179)),"@site/docs/contribute/documentation-guide/01-documentation.md",8179],d2b7592b:[()=>Promise.all([n.e(8592),n.e(3305)]).then(n.bind(n,5242)),"@site/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",5242],d2eeb42a:[()=>Promise.all([n.e(8592),n.e(8485)]).then(n.bind(n,8569)),"@site/docs/about/references/api/index.md",8569],d547c67b:[()=>Promise.all([n.e(8592),n.e(5917)]).then(n.bind(n,6669)),"@site/docs/about/references/keywords/FLUID_MODEL.md",6669],d5b0ea4b:[()=>n.e(2991).then(n.t.bind(n,9389,19)),"~docs/default/category-ecalcdocs-contribute-category-documentation-815.json",9389],d5cd246e:[()=>Promise.all([n.e(8592),n.e(4441)]).then(n.bind(n,5797)),"@site/docs/about/modelling/setup/installations/direct_consumers.md",5797],d77448ee:[()=>Promise.all([n.e(8592),n.e(5201)]).then(n.bind(n,388)),"@site/docs/about/references/keywords/COMPRESSOR_MODEL.md",388],df203c0f:[()=>n.e(9924).then(n.bind(n,491)),"@theme/DocTagDocListPage",491],df3c944d:[()=>Promise.all([n.e(8592),n.e(7611)]).then(n.bind(n,6909)),"@site/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",6909],dfbab2f3:[()=>Promise.all([n.e(8592),n.e(7907)]).then(n.bind(n,743)),"@site/docs/about/getting_started/cli/index.md",743],e023757a:[()=>Promise.all([n.e(8592),n.e(4858)]).then(n.bind(n,7101)),"@site/docs/about/references/keywords/INSTALLATIONS.md",7101],e0edce1a:[()=>Promise.all([n.e(8592),n.e(8596)]).then(n.bind(n,1790)),"@site/docs/about/references/keywords/FUEL.md",1790],e1df8231:[()=>Promise.all([n.e(8592),n.e(517)]).then(n.bind(n,9328)),"@site/docs/about/getting_started/yaml/index.md",9328],e2712b99:[()=>Promise.all([n.e(8592),n.e(7253)]).then(n.bind(n,8978)),"@site/docs/changelog/v8-1.md",8978],e4be5833:[()=>Promise.all([n.e(8592),n.e(1487)]).then(n.bind(n,5252)),"@site/docs/about/references/keywords/PRICE.md",5252],e7fdd821:[()=>Promise.all([n.e(8592),n.e(8202)]).then(n.bind(n,9424)),"@site/docs/about/references/keywords/CONDITIONS.md",9424],e862d0e9:[()=>Promise.all([n.e(8592),n.e(8703)]).then(n.bind(n,3973)),"@site/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",3973],e8ebc025:[()=>Promise.all([n.e(8592),n.e(3902)]).then(n.bind(n,4844)),"@site/docs/about/modelling/setup/index.md",4844],e9e63826:[()=>Promise.all([n.e(8592),n.e(6159)]).then(n.bind(n,6215)),"@site/docs/about/modelling/setup/file_format_and_syntax/index.md",6215],ec96df16:[()=>Promise.all([n.e(8592),n.e(8519)]).then(n.bind(n,8623)),"@site/docs/about/references/keywords/include.md",8623],edb3a98b:[()=>Promise.all([n.e(8592),n.e(1728)]).then(n.bind(n,2713)),"@site/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",2713],eee46244:[()=>Promise.all([n.e(8592),n.e(7154)]).then(n.bind(n,2293)),"@site/docs/changelog/v7-5.md",2293],f054b415:[()=>Promise.all([n.e(8592),n.e(7652)]).then(n.bind(n,7260)),"@site/docs/about/modelling/theory/index.md",7260],f4fe2bc2:[()=>Promise.all([n.e(8592),n.e(3108)]).then(n.bind(n,5019)),"@site/docs/about/references/keywords/CONSTANT.mdx",5019],f52ed7e3:[()=>Promise.all([n.e(8592),n.e(9922)]).then(n.bind(n,3104)),"@site/docs/about/modelling/setup/time_series.md",3104],f54e894e:[()=>Promise.all([n.e(8592),n.e(770)]).then(n.bind(n,5622)),"@site/docs/about/modelling/examples/drogon.md",5622],f571fee5:[()=>Promise.all([n.e(8592),n.e(505)]).then(n.bind(n,8932)),"@site/docs/about/references/keywords/index.md",8932],f577f5c2:[()=>Promise.all([n.e(8592),n.e(7959)]).then(n.bind(n,4971)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",4971],f59fd0ba:[()=>Promise.all([n.e(8592),n.e(2562)]).then(n.bind(n,4372)),"@site/docs/about/references/keywords/FLUID_DENSITY.md",4372],f5b92c38:[()=>Promise.all([n.e(8592),n.e(8984)]).then(n.bind(n,7090)),"@site/docs/about/references/keywords/LOWER_HEATING_VALUE.md",7090],f85d2ba9:[()=>n.e(2488).then(n.t.bind(n,5745,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],fa0b6059:[()=>Promise.all([n.e(8592),n.e(9251)]).then(n.bind(n,337)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",337],fa17a3e5:[()=>Promise.all([n.e(532),n.e(3181)]).then(n.bind(n,5111)),"@site/src/pages/versions.tsx",5111],fa3d98bd:[()=>Promise.all([n.e(8592),n.e(6696)]).then(n.bind(n,4115)),"@site/docs/about/modelling/setup/facility_inputs/generator_modelling.md",4115],fb7e7841:[()=>Promise.all([n.e(8592),n.e(4466)]).then(n.bind(n,6217)),"@site/docs/changelog/next.md",6217],fba8a418:[()=>Promise.all([n.e(8592),n.e(6638)]).then(n.bind(n,9779)),"@site/docs/changelog/v8-2.md",9779],fe44757f:[()=>Promise.all([n.e(8592),n.e(9083)]).then(n.bind(n,4198)),"@site/docs/about/modelling/setup/installations/pump_models_in_calculations.md",4198]};function c(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function p(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=s[`${e}-${t}`],p={},f=[],m=[],h=(0,u.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=l[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{a=a[e]})),a[s[s.length-1]]=o}));const s=i.__comp;delete i.__comp;const l=i.__context;return delete i.__context,r.createElement(d.z,{value:l},r.createElement(s,(0,o.Z)({},i,n)))}})}const f=[{path:"/ecalc/docs/tags",component:p("/ecalc/docs/tags","e4c"),exact:!0},{path:"/ecalc/docs/tags/e-calc",component:p("/ecalc/docs/tags/e-calc","f4b"),exact:!0},{path:"/ecalc/docs/tags/release",component:p("/ecalc/docs/tags/release","2ab"),exact:!0},{path:"/ecalc/search",component:p("/ecalc/search","bdd"),exact:!0},{path:"/ecalc/versions",component:p("/ecalc/versions","284"),exact:!0},{path:"/ecalc/docs",component:p("/ecalc/docs","049"),routes:[{path:"/ecalc/docs/about/",component:p("/ecalc/docs/about/","a31"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/",component:p("/ecalc/docs/about/getting_started/","123"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/cli/",component:p("/ecalc/docs/about/getting_started/cli/","d3b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/cli/faq",component:p("/ecalc/docs/about/getting_started/cli/faq","97e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/library/",component:p("/ecalc/docs/about/getting_started/library/","d50"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/yaml/",component:p("/ecalc/docs/about/getting_started/yaml/","cec"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/",component:p("/ecalc/docs/about/migration_guides/","b3e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v7_to_v8",component:p("/ecalc/docs/about/migration_guides/v7_to_v8","313"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8_to_v81",component:p("/ecalc/docs/about/migration_guides/v8_to_v81","7ca"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2",component:p("/ecalc/docs/about/migration_guides/v8-1_to_v8-2","14c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3",component:p("/ecalc/docs/about/migration_guides/v8-2_to_v8-3","273"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4",component:p("/ecalc/docs/about/migration_guides/v8-3_to_v8-4","115"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/miscellaneous/",component:p("/ecalc/docs/about/miscellaneous/","b76"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/",component:p("/ecalc/docs/about/modelling/","d6a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/",component:p("/ecalc/docs/about/modelling/examples/","e7e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/advanced",component:p("/ecalc/docs/about/modelling/examples/advanced","362"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/drogon",component:p("/ecalc/docs/about/modelling/examples/drogon","966"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/simple",component:p("/ecalc/docs/about/modelling/examples/simple","257"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/",component:p("/ecalc/docs/about/modelling/setup/","dff"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/",component:p("/ecalc/docs/about/modelling/setup/facility_inputs/","1cc"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",component:p("/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","f62"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/",component:p("/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","592"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",component:p("/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","2c2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",component:p("/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","04c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular",component:p("/ecalc/docs/about/modelling/setup/facility_inputs/tabular","542"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/",component:p("/ecalc/docs/about/modelling/setup/file_format_and_syntax/","0e3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions",component:p("/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","d12"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/fuel_types",component:p("/ecalc/docs/about/modelling/setup/fuel_types","620"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/",component:p("/ecalc/docs/about/modelling/setup/installations/","99b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/",component:p("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","9b9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",component:p("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","c00"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",component:p("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","0e8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",component:p("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","65b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",component:p("/ecalc/docs/about/modelling/setup/installations/direct_consumers","d56"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations",component:p("/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","f2a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations",component:p("/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","2f5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",component:p("/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","d10"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/",component:p("/ecalc/docs/about/modelling/setup/models/","15b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/",component:p("/ecalc/docs/about/modelling/setup/models/compressor_modelling/","c1c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",component:p("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","5eb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",component:p("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","b0e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",component:p("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","f09"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",component:p("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","e08"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",component:p("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","de2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",component:p("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","2fb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",component:p("/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","fb2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/fluid_model",component:p("/ecalc/docs/about/modelling/setup/models/fluid_model","849"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",component:p("/ecalc/docs/about/modelling/setup/models/turbine_modeling","0f3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/time_series",component:p("/ecalc/docs/about/modelling/setup/time_series","b2a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/variables",component:p("/ecalc/docs/about/modelling/setup/variables","5f7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/",component:p("/ecalc/docs/about/modelling/theory/","6a0"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/compressor_modelling",component:p("/ecalc/docs/about/modelling/theory/compressor_modelling","0df"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/pump_modelling",component:p("/ecalc/docs/about/modelling/theory/pump_modelling","c3a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/workflow/",component:p("/ecalc/docs/about/modelling/workflow/","9a1"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/workflow/generic_workflow",component:p("/ecalc/docs/about/modelling/workflow/generic_workflow","b21"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/",component:p("/ecalc/docs/about/references/","5da"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/api/",component:p("/ecalc/docs/about/references/api/","225"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/cli_reference",component:p("/ecalc/docs/about/references/cli_reference","b63"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/",component:p("/ecalc/docs/about/references/keywords/","424"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ADJUSTMENT",component:p("/ecalc/docs/about/references/keywords/ADJUSTMENT","265"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CATEGORY",component:p("/ecalc/docs/about/references/keywords/CATEGORY","de9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",component:p("/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","8c1"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",component:p("/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","8f7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",component:p("/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","9b6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONDITION",component:p("/ecalc/docs/about/references/keywords/CONDITION","b74"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONDITIONS",component:p("/ecalc/docs/about/references/keywords/CONDITIONS","ea9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSTANT",component:p("/ecalc/docs/about/references/keywords/CONSTANT","bea"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSUMERS",component:p("/ecalc/docs/about/references/keywords/CONSUMERS","15f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",component:p("/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","f62"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN",component:p("/ecalc/docs/about/references/keywords/CONTROL_MARGIN","b71"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT",component:p("/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","415"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CROSSOVER",component:p("/ecalc/docs/about/references/keywords/CROSSOVER","55f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CURVE",component:p("/ecalc/docs/about/references/keywords/CURVE","aa7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CURVES",component:p("/ecalc/docs/about/references/keywords/CURVES","429"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",component:p("/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","8cf"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",component:p("/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","16d"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",component:p("/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","efb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EFFICIENCY",component:p("/ecalc/docs/about/references/keywords/EFFICIENCY","f47"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",component:p("/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","1f9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSION_NAME",component:p("/ecalc/docs/about/references/keywords/EMISSION_NAME","29b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSION_RATE",component:p("/ecalc/docs/about/references/keywords/EMISSION_RATE","d80"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSIONS",component:p("/ecalc/docs/about/references/keywords/EMISSIONS","e05"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",component:p("/ecalc/docs/about/references/keywords/EMITTER_MODEL","c46"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/END",component:p("/ecalc/docs/about/references/keywords/END","8f6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",component:p("/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","55a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",component:p("/ecalc/docs/about/references/keywords/ENERGYFUNCTION","f2d"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EXPRESSION",component:p("/ecalc/docs/about/references/keywords/EXPRESSION","6c2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",component:p("/ecalc/docs/about/references/keywords/EXTRAPOLATION","b1f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",component:p("/ecalc/docs/about/references/keywords/FACILITY_INPUTS","070"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FACTOR",component:p("/ecalc/docs/about/references/keywords/FACTOR","7d6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FILE",component:p("/ecalc/docs/about/references/keywords/FILE","642"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",component:p("/ecalc/docs/about/references/keywords/FLUID_DENSITY","c60"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FLUID_MODEL",component:p("/ecalc/docs/about/references/keywords/FLUID_MODEL","2fd"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUEL",component:p("/ecalc/docs/about/references/keywords/FUEL","c8b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUEL_TYPES",component:p("/ecalc/docs/about/references/keywords/FUEL_TYPES","a2e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",component:p("/ecalc/docs/about/references/keywords/FUELCONSUMERS","aee"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUELRATE",component:p("/ecalc/docs/about/references/keywords/FUELRATE","255"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/GENERATORSETS",component:p("/ecalc/docs/about/references/keywords/GENERATORSETS","d03"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HCEXPORT",component:p("/ecalc/docs/about/references/keywords/HCEXPORT","ccb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HEAD",component:p("/ecalc/docs/about/references/keywords/HEAD","b50"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",component:p("/ecalc/docs/about/references/keywords/HEAD_MARGIN","794"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/include",component:p("/ecalc/docs/about/references/keywords/include","80e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",component:p("/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","423"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE",component:p("/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","dc7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INSTALLATIONS",component:p("/ecalc/docs/about/references/keywords/INSTALLATIONS","ed5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",component:p("/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","13e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",component:p("/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","47e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/LOAD",component:p("/ecalc/docs/about/references/keywords/LOAD","cc8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE",component:p("/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","d7b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",component:p("/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","bf3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/MODELS",component:p("/ecalc/docs/about/references/keywords/MODELS","a5a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/NAME",component:p("/ecalc/docs/about/references/keywords/NAME","d44"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",component:p("/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","3da"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",component:p("/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","330"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",component:p("/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","f94"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL",component:p("/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","dd5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/PRICE",component:p("/ecalc/docs/about/references/keywords/PRICE","068"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/PUMPS",component:p("/ecalc/docs/about/references/keywords/PUMPS","6dd"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/QUOTA",component:p("/ecalc/docs/about/references/keywords/QUOTA","c0c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE",component:p("/ecalc/docs/about/references/keywords/RATE","a33"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS",component:p("/ecalc/docs/about/references/keywords/RATE_FRACTIONS","d5a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",component:p("/ecalc/docs/about/references/keywords/RATE_PER_STREAM","b6a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/REGULARITY",component:p("/ecalc/docs/about/references/keywords/REGULARITY","3a2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STAGES",component:p("/ecalc/docs/about/references/keywords/STAGES","a5c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/START",component:p("/ecalc/docs/about/references/keywords/START","c55"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STREAM",component:p("/ecalc/docs/about/references/keywords/STREAM","d9a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STREAMS",component:p("/ecalc/docs/about/references/keywords/STREAMS","3c3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",component:p("/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","45c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TAX",component:p("/ecalc/docs/about/references/keywords/TAX","7d6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TIME_SERIES",component:p("/ecalc/docs/about/references/keywords/TIME_SERIES","56f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",component:p("/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","0e8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES",component:p("/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","5ab"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_LOAD",component:p("/ecalc/docs/about/references/keywords/TURBINE_LOAD","5a2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",component:p("/ecalc/docs/about/references/keywords/TURBINE_MODEL","0df"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TYPE",component:p("/ecalc/docs/about/references/keywords/TYPE","9b2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/UNITS",component:p("/ecalc/docs/about/references/keywords/UNITS","5a9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",component:p("/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","bd0"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/VARIABLES",component:p("/ecalc/docs/about/references/keywords/VARIABLES","f4e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/category/documentation",component:p("/ecalc/docs/category/documentation","cd3"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/category/guides",component:p("/ecalc/docs/category/guides","0bf"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/changelog/",component:p("/ecalc/docs/changelog/","b3d"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/latest",component:p("/ecalc/docs/changelog/latest","045"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/separator",component:p("/ecalc/docs/changelog/separator","796"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-0-release",component:p("/ecalc/docs/changelog/v7-0-release","2b8"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-1-release",component:p("/ecalc/docs/changelog/v7-1-release","6a0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-2-release",component:p("/ecalc/docs/changelog/v7-2-release","ac2"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-3-release",component:p("/ecalc/docs/changelog/v7-3-release","783"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-4-release",component:p("/ecalc/docs/changelog/v7-4-release","2af"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-5-release",component:p("/ecalc/docs/changelog/v7-5-release","753"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-6-release",component:p("/ecalc/docs/changelog/v7-6-release","bab"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.0-release",component:p("/ecalc/docs/changelog/v8.0-release","4b0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.1-release",component:p("/ecalc/docs/changelog/v8.1-release","074"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.2-release",component:p("/ecalc/docs/changelog/v8.2-release","249"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.3-release",component:p("/ecalc/docs/changelog/v8.3-release","7c0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.4-release",component:p("/ecalc/docs/changelog/v8.4-release","2a6"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.5-release",component:p("/ecalc/docs/changelog/v8.5-release","5a0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/contribute/documentation-guide/documentation",component:p("/ecalc/docs/contribute/documentation-guide/documentation","65b"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/documentation-guide/markdown",component:p("/ecalc/docs/contribute/documentation-guide/markdown","de5"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/get-started",component:p("/ecalc/docs/contribute/get-started","873"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/guides/conventional-commits",component:p("/ecalc/docs/contribute/guides/conventional-commits","573"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/guides/git",component:p("/ecalc/docs/contribute/guides/git","151"),exact:!0,sidebar:"contribute"}]},{path:"/ecalc/",component:p("/ecalc/","94a"),exact:!0},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),s=n(412);const l=[n(2497),n(3310),n(8320),n(2295)];var c=n(723),u=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(5742),h=n(2263),g=n(4996),b=n(6668),y=n(1944),v=n(4711),w=n(9727),_=n(3320),E=n(8780),k=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,v.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function T(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,E.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function x(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(y.d,{image:n}),r.createElement(T,null),r.createElement(S,null),r.createElement(k.Z,{tag:_.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const R=new Map;function C(e){if(R.has(e.pathname))return{...e,pathname:R.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return R.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return R.set(e.pathname,t),{...e,pathname:t}}var O=n(8934),A=n(8940);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),P("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const M=I,D="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",U="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function j(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${F}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${U}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${U}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function z(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!s.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,j(e))),r.createElement("div",{id:D}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(z,null):null}function G(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:s,direction:l}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:s,dir:l}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var H=n(4763),q=n(2389);function V(){const e=(0,q.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Q(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(H.Z,null,r.createElement(A.M,null,r.createElement(O.t,null,r.createElement(p,null,r.createElement(G,null),r.createElement(x,null),r.createElement($,null),r.createElement(M,{location:C(t)},e)),r.createElement(V,null))))}var Z=n(6887);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(9670);const X=new Set,K=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!K.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(Z).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!K.has(e))(e)&&(K.add(e),L(e))},te=Object.freeze(ee);if(s.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;L(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(Q,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/ecalc/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/ecalc/docs","mainDocId":"about/index","docs":[{"id":"about/getting_started/cli/faq","path":"/ecalc/docs/about/getting_started/cli/faq","sidebar":"about"},{"id":"about/getting_started/cli/index","path":"/ecalc/docs/about/getting_started/cli/","sidebar":"about"},{"id":"about/getting_started/index","path":"/ecalc/docs/about/getting_started/","sidebar":"about"},{"id":"about/getting_started/library/index","path":"/ecalc/docs/about/getting_started/library/","sidebar":"about"},{"id":"about/getting_started/yaml/index","path":"/ecalc/docs/about/getting_started/yaml/","sidebar":"about"},{"id":"about/index","path":"/ecalc/docs/about/","sidebar":"about"},{"id":"about/migration_guides/index","path":"/ecalc/docs/about/migration_guides/","sidebar":"about"},{"id":"about/migration_guides/v7_to_v8","path":"/ecalc/docs/about/migration_guides/v7_to_v8","sidebar":"about"},{"id":"about/migration_guides/v8_to_v81","path":"/ecalc/docs/about/migration_guides/v8_to_v81","sidebar":"about"},{"id":"about/migration_guides/v8-1_to_v8-2","path":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","sidebar":"about"},{"id":"about/migration_guides/v8-2_to_v8-3","path":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","sidebar":"about"},{"id":"about/migration_guides/v8-3_to_v8-4","path":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","sidebar":"about"},{"id":"about/miscellaneous/index","path":"/ecalc/docs/about/miscellaneous/","sidebar":"about"},{"id":"about/modelling/examples/advanced","path":"/ecalc/docs/about/modelling/examples/advanced","sidebar":"about"},{"id":"about/modelling/examples/drogon","path":"/ecalc/docs/about/modelling/examples/drogon","sidebar":"about"},{"id":"about/modelling/examples/index","path":"/ecalc/docs/about/modelling/examples/","sidebar":"about"},{"id":"about/modelling/examples/simple","path":"/ecalc/docs/about/modelling/examples/simple","sidebar":"about"},{"id":"about/modelling/index","path":"/ecalc/docs/about/modelling/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/generator_modelling","path":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/index","path":"/ecalc/docs/about/modelling/setup/facility_inputs/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/pump_modelling/index","path":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts","path":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/sampled_compressor_model","path":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/tabular","path":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","sidebar":"about"},{"id":"about/modelling/setup/file_format_and_syntax/expressions","path":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","sidebar":"about"},{"id":"about/modelling/setup/file_format_and_syntax/index","path":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","sidebar":"about"},{"id":"about/modelling/setup/fuel_types","path":"/ecalc/docs/about/modelling/setup/fuel_types","sidebar":"about"},{"id":"about/modelling/setup/index","path":"/ecalc/docs/about/modelling/setup/","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/index","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","sidebar":"about"},{"id":"about/modelling/setup/installations/direct_consumers","path":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","sidebar":"about"},{"id":"about/modelling/setup/installations/generator_sets_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/installations/index","path":"/ecalc/docs/about/modelling/setup/installations/","sidebar":"about"},{"id":"about/modelling/setup/installations/pump_models_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/installations/tabular_models_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_charts/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","sidebar":"about"},{"id":"about/modelling/setup/models/fluid_model","path":"/ecalc/docs/about/modelling/setup/models/fluid_model","sidebar":"about"},{"id":"about/modelling/setup/models/index","path":"/ecalc/docs/about/modelling/setup/models/","sidebar":"about"},{"id":"about/modelling/setup/models/turbine_modeling","path":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","sidebar":"about"},{"id":"about/modelling/setup/time_series","path":"/ecalc/docs/about/modelling/setup/time_series","sidebar":"about"},{"id":"about/modelling/setup/variables","path":"/ecalc/docs/about/modelling/setup/variables","sidebar":"about"},{"id":"about/modelling/theory/compressor_modelling","path":"/ecalc/docs/about/modelling/theory/compressor_modelling","sidebar":"about"},{"id":"about/modelling/theory/index","path":"/ecalc/docs/about/modelling/theory/","sidebar":"about"},{"id":"about/modelling/theory/pump_modelling","path":"/ecalc/docs/about/modelling/theory/pump_modelling","sidebar":"about"},{"id":"about/modelling/workflow/generic_workflow","path":"/ecalc/docs/about/modelling/workflow/generic_workflow","sidebar":"about"},{"id":"about/modelling/workflow/index","path":"/ecalc/docs/about/modelling/workflow/","sidebar":"about"},{"id":"about/references/api/index","path":"/ecalc/docs/about/references/api/","sidebar":"about"},{"id":"about/references/cli_reference","path":"/ecalc/docs/about/references/cli_reference","sidebar":"about"},{"id":"about/references/index","path":"/ecalc/docs/about/references/","sidebar":"about"},{"id":"about/references/keywords/ADJUSTMENT","path":"/ecalc/docs/about/references/keywords/ADJUSTMENT","sidebar":"about"},{"id":"about/references/keywords/CATEGORY","path":"/ecalc/docs/about/references/keywords/CATEGORY","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_MODEL","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_SYSTEM","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_TRAIN_MODEL","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","sidebar":"about"},{"id":"about/references/keywords/CONDITION","path":"/ecalc/docs/about/references/keywords/CONDITION","sidebar":"about"},{"id":"about/references/keywords/CONDITIONS","path":"/ecalc/docs/about/references/keywords/CONDITIONS","sidebar":"about"},{"id":"about/references/keywords/CONSTANT","path":"/ecalc/docs/about/references/keywords/CONSTANT","sidebar":"about"},{"id":"about/references/keywords/CONSUMERS","path":"/ecalc/docs/about/references/keywords/CONSUMERS","sidebar":"about"},{"id":"about/references/keywords/CONSUMPTION_RATE_TYPE","path":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","sidebar":"about"},{"id":"about/references/keywords/CONTROL_MARGIN","path":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","sidebar":"about"},{"id":"about/references/keywords/CONTROL_MARGIN_UNIT","path":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","sidebar":"about"},{"id":"about/references/keywords/CROSSOVER","path":"/ecalc/docs/about/references/keywords/CROSSOVER","sidebar":"about"},{"id":"about/references/keywords/CURVE","path":"/ecalc/docs/about/references/keywords/CURVE","sidebar":"about"},{"id":"about/references/keywords/CURVES","path":"/ecalc/docs/about/references/keywords/CURVES","sidebar":"about"},{"id":"about/references/keywords/DIRECT_EMITTERS","path":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","sidebar":"about"},{"id":"about/references/keywords/DISCHARGE_PRESSURE","path":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/EFFICIENCY","path":"/ecalc/docs/about/references/keywords/EFFICIENCY","sidebar":"about"},{"id":"about/references/keywords/ELECTRICITY2FUEL","path":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","sidebar":"about"},{"id":"about/references/keywords/EMISSION_NAME","path":"/ecalc/docs/about/references/keywords/EMISSION_NAME","sidebar":"about"},{"id":"about/references/keywords/EMISSION_RATE","path":"/ecalc/docs/about/references/keywords/EMISSION_RATE","sidebar":"about"},{"id":"about/references/keywords/EMISSIONS","path":"/ecalc/docs/about/references/keywords/EMISSIONS","sidebar":"about"},{"id":"about/references/keywords/EMITTER_MODEL","path":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","sidebar":"about"},{"id":"about/references/keywords/END","path":"/ecalc/docs/about/references/keywords/END","sidebar":"about"},{"id":"about/references/keywords/ENERGY_USAGE_MODEL","path":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","sidebar":"about"},{"id":"about/references/keywords/ENERGYFUNCTION","path":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","sidebar":"about"},{"id":"about/references/keywords/EXPRESSION","path":"/ecalc/docs/about/references/keywords/EXPRESSION","sidebar":"about"},{"id":"about/references/keywords/EXTRAPOLATION","path":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","sidebar":"about"},{"id":"about/references/keywords/FACILITY_INPUTS","path":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","sidebar":"about"},{"id":"about/references/keywords/FACTOR","path":"/ecalc/docs/about/references/keywords/FACTOR","sidebar":"about"},{"id":"about/references/keywords/FILE","path":"/ecalc/docs/about/references/keywords/FILE","sidebar":"about"},{"id":"about/references/keywords/FLUID_DENSITY","path":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","sidebar":"about"},{"id":"about/references/keywords/FLUID_MODEL","path":"/ecalc/docs/about/references/keywords/FLUID_MODEL","sidebar":"about"},{"id":"about/references/keywords/FUEL","path":"/ecalc/docs/about/references/keywords/FUEL","sidebar":"about"},{"id":"about/references/keywords/FUEL_TYPES","path":"/ecalc/docs/about/references/keywords/FUEL_TYPES","sidebar":"about"},{"id":"about/references/keywords/FUELCONSUMERS","path":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","sidebar":"about"},{"id":"about/references/keywords/FUELRATE","path":"/ecalc/docs/about/references/keywords/FUELRATE","sidebar":"about"},{"id":"about/references/keywords/GENERATORSETS","path":"/ecalc/docs/about/references/keywords/GENERATORSETS","sidebar":"about"},{"id":"about/references/keywords/HCEXPORT","path":"/ecalc/docs/about/references/keywords/HCEXPORT","sidebar":"about"},{"id":"about/references/keywords/HEAD","path":"/ecalc/docs/about/references/keywords/HEAD","sidebar":"about"},{"id":"about/references/keywords/HEAD_MARGIN","path":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","sidebar":"about"},{"id":"about/references/keywords/include","path":"/ecalc/docs/about/references/keywords/include","sidebar":"about"},{"id":"about/references/keywords/index","path":"/ecalc/docs/about/references/keywords/","sidebar":"about"},{"id":"about/references/keywords/INFLUENCE_TIME_VECTOR","path":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","sidebar":"about"},{"id":"about/references/keywords/INLET_TEMPERATURE","path":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","sidebar":"about"},{"id":"about/references/keywords/INSTALLATIONS","path":"/ecalc/docs/about/references/keywords/INSTALLATIONS","sidebar":"about"},{"id":"about/references/keywords/INTERPOLATION_TYPE","path":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","sidebar":"about"},{"id":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","path":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/LOAD","path":"/ecalc/docs/about/references/keywords/LOAD","sidebar":"about"},{"id":"about/references/keywords/LOWER_HEATING_VALUE","path":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","sidebar":"about"},{"id":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","path":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/MODELS","path":"/ecalc/docs/about/references/keywords/MODELS","sidebar":"about"},{"id":"about/references/keywords/NAME","path":"/ecalc/docs/about/references/keywords/NAME","sidebar":"about"},{"id":"about/references/keywords/OPERATIONAL_SETTINGS","path":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","sidebar":"about"},{"id":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT","path":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","sidebar":"about"},{"id":"about/references/keywords/POWERLOSSFACTOR","path":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","sidebar":"about"},{"id":"about/references/keywords/PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/PRICE","path":"/ecalc/docs/about/references/keywords/PRICE","sidebar":"about"},{"id":"about/references/keywords/PUMPS","path":"/ecalc/docs/about/references/keywords/PUMPS","sidebar":"about"},{"id":"about/references/keywords/QUOTA","path":"/ecalc/docs/about/references/keywords/QUOTA","sidebar":"about"},{"id":"about/references/keywords/RATE","path":"/ecalc/docs/about/references/keywords/RATE","sidebar":"about"},{"id":"about/references/keywords/RATE_FRACTIONS","path":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","sidebar":"about"},{"id":"about/references/keywords/RATE_PER_STREAM","path":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","sidebar":"about"},{"id":"about/references/keywords/REGULARITY","path":"/ecalc/docs/about/references/keywords/REGULARITY","sidebar":"about"},{"id":"about/references/keywords/STAGES","path":"/ecalc/docs/about/references/keywords/STAGES","sidebar":"about"},{"id":"about/references/keywords/START","path":"/ecalc/docs/about/references/keywords/START","sidebar":"about"},{"id":"about/references/keywords/STREAM","path":"/ecalc/docs/about/references/keywords/STREAM","sidebar":"about"},{"id":"about/references/keywords/STREAMS","path":"/ecalc/docs/about/references/keywords/STREAMS","sidebar":"about"},{"id":"about/references/keywords/SUCTION_PRESSURE","path":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/TAX","path":"/ecalc/docs/about/references/keywords/TAX","sidebar":"about"},{"id":"about/references/keywords/TIME_SERIES","path":"/ecalc/docs/about/references/keywords/TIME_SERIES","sidebar":"about"},{"id":"about/references/keywords/TOTAL_SYSTEM_RATE","path":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","sidebar":"about"},{"id":"about/references/keywords/TURBINE_EFFICIENCIES","path":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","sidebar":"about"},{"id":"about/references/keywords/TURBINE_LOAD","path":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","sidebar":"about"},{"id":"about/references/keywords/TURBINE_MODEL","path":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","sidebar":"about"},{"id":"about/references/keywords/TYPE","path":"/ecalc/docs/about/references/keywords/TYPE","sidebar":"about"},{"id":"about/references/keywords/UNITS","path":"/ecalc/docs/about/references/keywords/UNITS","sidebar":"about"},{"id":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/VARIABLES","path":"/ecalc/docs/about/references/keywords/VARIABLES","sidebar":"about"},{"id":"changelog/changelog","path":"/ecalc/docs/changelog/","sidebar":"changelog"},{"id":"changelog/next","path":"/ecalc/docs/changelog/latest","sidebar":"changelog"},{"id":"changelog/separator","path":"/ecalc/docs/changelog/separator","sidebar":"changelog"},{"id":"changelog/v7-0","path":"/ecalc/docs/changelog/v7-0-release","sidebar":"changelog"},{"id":"changelog/v7-1","path":"/ecalc/docs/changelog/v7-1-release","sidebar":"changelog"},{"id":"changelog/v7-2","path":"/ecalc/docs/changelog/v7-2-release","sidebar":"changelog"},{"id":"changelog/v7-3","path":"/ecalc/docs/changelog/v7-3-release","sidebar":"changelog"},{"id":"changelog/v7-4","path":"/ecalc/docs/changelog/v7-4-release","sidebar":"changelog"},{"id":"changelog/v7-5","path":"/ecalc/docs/changelog/v7-5-release","sidebar":"changelog"},{"id":"changelog/v7-6","path":"/ecalc/docs/changelog/v7-6-release","sidebar":"changelog"},{"id":"changelog/v8-0","path":"/ecalc/docs/changelog/v8.0-release","sidebar":"changelog"},{"id":"changelog/v8-1","path":"/ecalc/docs/changelog/v8.1-release","sidebar":"changelog"},{"id":"changelog/v8-2","path":"/ecalc/docs/changelog/v8.2-release","sidebar":"changelog"},{"id":"changelog/v8-3","path":"/ecalc/docs/changelog/v8.3-release","sidebar":"changelog"},{"id":"changelog/v8-4","path":"/ecalc/docs/changelog/v8.4-release","sidebar":"changelog"},{"id":"changelog/v8-5","path":"/ecalc/docs/changelog/v8.5-release","sidebar":"changelog"},{"id":"contribute/documentation-guide/documentation","path":"/ecalc/docs/contribute/documentation-guide/documentation","sidebar":"contribute"},{"id":"contribute/documentation-guide/markdown","path":"/ecalc/docs/contribute/documentation-guide/markdown","sidebar":"contribute"},{"id":"contribute/get-started","path":"/ecalc/docs/contribute/get-started","sidebar":"contribute"},{"id":"contribute/guides/conventional-commits","path":"/ecalc/docs/contribute/guides/conventional-commits","sidebar":"contribute"},{"id":"contribute/guides/git","path":"/ecalc/docs/contribute/guides/git","sidebar":"contribute"},{"id":"/category/documentation","path":"/ecalc/docs/category/documentation","sidebar":"contribute"},{"id":"/category/guides","path":"/ecalc/docs/category/guides","sidebar":"contribute"}],"draftIds":[],"sidebars":{"about":{"link":{"path":"/ecalc/docs/about/","label":"about/index"}},"contribute":{"link":{"path":"/ecalc/docs/contribute/get-started","label":"contribute/get-started"}},"changelog":{"link":{"path":"/ecalc/docs/changelog/v8.5-release","label":"changelog/v8-5"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.35.0"}}}'),c={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(412),a=n(5742),i=n(8780),s=n(179);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(s.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),o=n(7294),a=n(3727),i=n(8780),s=n(2263),l=n(3919),c=n(412);const u=o.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:_}=(0,d.C)(),E=(0,o.useContext)(u),k=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>k.current));const S=p||f;const T=(0,l.Z)(S),x=S?.replace("pathname://","");let R=void 0!==x?(C=x,b&&(e=>e.startsWith("/"))(C)?_(C):C):void 0;var C;R&&T&&(R=(0,i.applyTrailingSlash)(R,{trailingSlash:v,baseUrl:w}));const O=(0,o.useRef)(!1),A=n?a.OL:a.rU,P=c.Z.canUseIntersectionObserver,N=(0,o.useRef)(),L=()=>{O.current||null==R||(window.docusaurus.preload(R),O.current=!0)};(0,o.useEffect)((()=>(!P&&T&&null!=R&&window.docusaurus.prefetch(R),()=>{P&&N.current&&N.current.disconnect()})),[N,R,P,T]);const I=R?.startsWith("#")??!1,M=!R||!T||I;return M||g||E.collectLink(R),M?o.createElement("a",(0,r.Z)({ref:k,href:R},S&&!T&&{target:"_blank",rel:"noopener noreferrer"},y)):o.createElement(A,(0,r.Z)({},y,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{k.current=e,P&&e&&T&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=R&&window.docusaurus.prefetch(R))}))})),N.current.observe(e))},to:R},n&&{isActive:h,activeClassName:m}))}const f=o.forwardRef(p)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,I:()=>s});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function l(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return r.createElement(r.Fragment,null,o(s,a))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7294),o=n(2263),a=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8940);function a(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>p,_r:()=>u,Jo:()=>g,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(6550),o=n(2263),a=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return s(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},179:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Nt});var r=n(7294),o=n(6010),a=n(4763),i=n(1944),s=n(7462),l=n(6550),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,s.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(5281),b=n(9727);const y={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:y.skipToContent})}var w=n(6668),_=n(9689);function E(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...l}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const k={closeButton:"closeButton_CVFx"};function S(e){return r.createElement("button",(0,s.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",k.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const T={content:"content_knG7"};function x(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,s.Z)({},e,{className:(0,o.Z)(T.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const R={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,_.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:R.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:R.announcementBarPlaceholder}),r.createElement(x,{className:R.announcementBarContent}),i&&r.createElement(S,{onClick:n,className:R.announcementBarClose}))}var O=n(2961),A=n(2466);var P=n(902),N=n(3102);const L=r.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,O.e)(),t=(0,N.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,P.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(L.Provider,{value:n},t)}function M(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(L);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,N.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:M(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var U=n(2949),B=n(2389);function j(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function z(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const s=(0,B.Z)(),l=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!s&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!s,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(j,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(z,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const H=r.memo(G),q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,U.I)();return o?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?q.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var Q=n(1327);function Z(){return r.createElement(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function W(){const e=(0,O.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(Z,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(W,null))}var X=n(9960),K=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:l,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const p=(0,K.Z)(o),f=(0,K.Z)(t),m=(0,K.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,c&&{width:12,height:12}))};return a?r.createElement(X.Z,(0,s.Z)({href:u?m:a},d,g)):r.createElement(X.Z,(0,s.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,s.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,s.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,s.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),se=n(8596),le=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:a,onClick:i,...l}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,s.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(qe,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ne,(0,s.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),f()}}),c.children??c.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(qe,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const o=t?de:ue;return r.createElement(o,n)}var fe=n(4711);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(1029),be=n(412),ye=n(373),ve=n(143),we=n(22),_e=n(8202),Ee=n(3926),ke=n(1073),Se=n(2539),Te=n(726);const xe='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>',Re='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg>',Ce='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 5H3h14zm0 5H3h14zm0 5H3h14z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>',Oe='<svg width="20" height="20" viewBox="0 0 20 20"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M18 3v4c0 2-2 4-4 4H2"></path><path d="M8 17l-6-6 6-6"></path></g></svg>',Ae='<svg width="40" height="40" viewBox="0 0 20 20" fill="none" fill-rule="evenodd" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"></path></svg>',Pe='<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v42M20 27H8.3"></path></g></svg>',Ne='<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v21M20 27H8.3"></path></g></svg>',Le={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",searchBarLeft:"searchBarLeft_MXDe",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchClearButton:"searchClearButton_qk4g",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",focused:"focused_OWtg",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function Ie(e){let{document:t,type:n,page:r,metadata:o,tokens:a,isInterOfTree:i,isLastOfTree:s}=e;const l=0===n,c=1===n,u=[];i?u.push(Pe):s&&u.push(Ne);const d=u.map((e=>`<span class="${Le.hitTree}">${e}</span>`)),p=`<span class="${Le.hitIcon}">${l?xe:c?Re:Ce}</span>`,f=[`<span class="${Le.hitTitle}">${(0,Te.o)(t.t,(0,ke.m)(o,"t"),a)}</span>`];if(!i&&!s&&ge.H6){const e=r?(r.b??[]).concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;f.push(`<span class="${Le.hitPath}">${(0,Ee.e)(e??[])}</span>`)}else l||f.push(`<span class="${Le.hitPath}">${(0,Se.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),a)}</span>`);const m=`<span class="${Le.hitAction}">${Oe}</span>`;return[...d,p,`<span class="${Le.hitWrapper}">`,...f,"</span>",m].join("")}function Me(){return`<span class="${Le.noResults}"><span class="${Le.noResultsIcon}">${Ae}</span><span>${(0,c.I)({id:"theme.SearchBar.noResultsText",message:"No results"})}</span></span>`}var De=n(311);async function Fe(){const e=await Promise.all([n.e(8443),n.e(5525)]).then(n.t.bind(n,8443,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const Ue="_highlight";const Be=function(e){let{handleSearchBarToggle:t}=e;const{siteConfig:{baseUrl:n}}=(0,le.Z)(),a=(0,ve.gA)();let i=n;try{const{preferredVersion:e}=(0,ye.J)(a?.pluginId??ge.gQ);e&&!e.isLast&&(i=e.path+"/")}catch(M){if(ge.l9&&!(M instanceof P.i6))throw M}const s=(0,l.k6)(),u=(0,l.TH)(),d=(0,r.useRef)(null),p=(0,r.useRef)(new Map),f=(0,r.useRef)(!1),[m,h]=(0,r.useState)(!1),[g,b]=(0,r.useState)(!1),[y,v]=(0,r.useState)(""),w=(0,r.useRef)(null),_=(0,r.useRef)(""),[E,k]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(ge.Kc))return;let e="";if(u.pathname.startsWith(i)){const t=u.pathname.substring(i.length),n=ge.Kc.find((e=>t===e||t.startsWith(`${e}/`)));n&&(e=n)}_.current!==e&&(p.current.delete(e),_.current=e),k(e)}),[u.pathname,i]);const S=!!ge.hG&&Array.isArray(ge.Kc)&&""===E,T=(0,r.useCallback)((async()=>{if(S||p.current.get(E))return;p.current.set(E,"loading"),w.current?.autocomplete.destroy(),h(!0);const[{wrappedIndexes:e,zhDictionary:t},r]=await Promise.all([(0,we.w)(i,E),Fe()]);if(w.current=r(d.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,o.Z)(Le.searchBar,{[Le.searchBarLeft]:"left"===ge.pu}),noPrefix:!0,dropdownMenu:Le.dropdownMenu,input:Le.input,hint:Le.hint,suggestions:Le.suggestions,suggestion:Le.suggestion,cursor:Le.cursor,dataset:Le.dataset,empty:Le.empty}},[{source:(0,_e.v)(e,t,ge.qo),templates:{suggestion:Ie,empty:Me,footer:e=>{let{query:t,isEmpty:r}=e;if(r&&!E)return;const o=(e=>{let{query:t,isEmpty:r}=e;const o=document.createElement("a"),a=new URLSearchParams,l=(0,c.I)({id:"theme.SearchBar.seeAll",message:"See all results"}),u=(0,c.I)({id:"theme.SearchBar.seeAllOutsideContext",message:"See results outside {context}"},{context:E}),d=(0,c.I)({id:"theme.SearchBar.searchInContext",message:"See all results in {context}"},{context:E});let p;if(a.set("q",t),p=E&&r?u:E?d:l,Array.isArray(ge.Kc)&&!r&&a.set("ctx",E),i!==n){if(!i.startsWith(n))throw new Error(`Version url '${i}' does not start with base url '${n}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);a.set("version",i.substring(n.length))}const f=`${n}search?${a.toString()}`;return o.href=f,o.textContent=p,o.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),w.current?.autocomplete.close(),s.push(f))})),o})({query:t,isEmpty:r}),a=document.createElement("div");return a.className=Le.hitFooter,a.appendChild(o),a}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:o}=t;d.current?.blur();let a=n;if(ge.vc&&o.length>0){const e=new URLSearchParams;for(const t of o)e.append(Ue,t);a+=`?${e.toString()}`}r&&(a+=r),s.push(a)})).on("autocomplete:closed",(()=>{d.current?.blur()})),p.current.set(E,"done"),h(!1),f.current){const e=d.current;e.value&&w.current?.autocomplete.open(),e.focus()}}),[S,E,i,n,s]);(0,r.useEffect)((()=>{if(!ge.vc)return;const e=be.Z.canUseDOM?new URLSearchParams(u.search).getAll(Ue):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new ge.vc(t);n.unmark(),0!==e.length&&n.mark(e),v(e.join(" ")),w.current?.autocomplete.setVal(e.join(" "))}))}),[u.search,u.pathname]);const[x,R]=(0,r.useState)(!1),C=(0,r.useCallback)((()=>{f.current=!0,T(),R(!0),t?.(!0)}),[t,T]),O=(0,r.useCallback)((()=>{R(!1),t?.(!1)}),[t]),A=(0,r.useCallback)((()=>{T()}),[T]),N=(0,r.useCallback)((e=>{v(e.target.value),e.target.value&&b(!0)}),[]),L=!!be.Z.canUseDOM&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!ge.AY)return;const e=e=>{!(L?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),d.current?.focus(),C())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[L,C]);const I=(0,r.useCallback)((()=>{const e=new URLSearchParams(u.search);e.delete(Ue);const t=e.toString(),n=u.pathname+(""!=t?`?${t}`:"")+u.hash;n!=u.pathname+u.search+u.hash&&s.push(n),v(""),w.current?.autocomplete.setVal("")}),[u.pathname,u.search,u.hash,s]);return r.createElement("div",{className:(0,o.Z)("navbar__search",Le.searchBarContainer,{[Le.searchIndexLoading]:m&&g,[Le.focused]:x}),hidden:S},r.createElement("input",{placeholder:(0,c.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:A,onFocus:C,onBlur:O,onChange:N,ref:d,value:y}),r.createElement(De.Z,{className:Le.searchBarLoadingRing}),ge.AY&&ge.t_&&(""!==y?r.createElement("button",{className:Le.searchClearButton,onClick:I},"\u2715"):be.Z.canUseDOM&&r.createElement("div",{className:Le.searchHintContainer},r.createElement("kbd",{className:Le.searchHint},L?"\u2318":"ctrl"),r.createElement("kbd",{className:Le.searchHint},"K"))))},je={searchBox:"searchBox_ZlJk"};function ze(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,je.searchBox)},t)}var $e=n(2802);const Ge=e=>e.docs.find((t=>t.id===e.mainDocId));const He={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,le.Z)(),p=(0,fe.l)(),{search:f,hash:m}=(0,l.TH)(),h=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(pe,(0,s.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ze,{className:n},r.createElement(Be,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return r.createElement(s,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,ve.Iw)(o),l=(0,$e.vY)(t,o);return null===l?null:r.createElement(ae,(0,s.Z)({exact:!0},a,{isActive:()=>i?.path===l.path||!!i?.sidebar&&i.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,ve.Iw)(o),l=(0,$e.oz)(t,o).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,s.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,$e.lO)(o)[0],l=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,s.Z)({},a,{label:l,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...u}=e;const{search:d,hash:p}=(0,l.TH)(),f=(0,ve.Iw)(n),m=(0,ve.gB)(n),{savePreferredVersionName:h}=(0,ye.J)(n),g=[...a,...m.map((e=>{const t=f.alternateDocVersions[e.name]??Ge(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...i],b=(0,$e.lO)(n)[0],y=t&&g.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,v=t&&g.length>1?void 0:Ge(b).path;return g.length<=1?r.createElement(ae,(0,s.Z)({},u,{mobile:t,label:y,to:v,isActive:o?()=>!1:void 0})):r.createElement(pe,(0,s.Z)({},u,{mobile:t,label:y,to:v,items:g,isActive:o?()=>!1:void 0}))}};function qe(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=He[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function Ve(){const e=(0,O.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(qe,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Qe(e){return r.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ze(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(Qe,{onClick:()=>t.hide()}),t.content)}function We(){const e=(0,O.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(Y,null),primaryMenu:r.createElement(Ve,null),secondaryMenu:r.createElement(Ze,null)}):null}const Ye={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Xe(e){return r.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function Ke(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,O.e)(),{navbarRef:s,isNavbarVisible:l}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,A.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,u.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:s,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ye.navbarHideable,!l&&Ye.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(Xe,{onClick:i.toggle}),r.createElement(We,null))}var Je=n(8780);const et={errorBoundaryError:"errorBoundaryError_a6uf"};function tt(e){return r.createElement("button",(0,s.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function nt(e){let{error:t}=e;const n=(0,Je.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:et.errorBoundaryError},n)}class rt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const ot="right";function at(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,s.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function it(){const{toggle:e,shown:t}=(0,O.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(at,null))}const st={colorModeToggle:"colorModeToggle_DEke"};function lt(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(rt,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(qe,e)))))}function ct(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function ut(){const e=(0,O.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??ot)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(ct,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(it,null),r.createElement(Z,null),r.createElement(lt,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(lt,{items:o}),r.createElement(V,{className:st.colorModeToggle}),!a&&r.createElement(ze,null,r.createElement(Be,null)))})}function dt(){return r.createElement(Ke,null,r.createElement(ut,null))}function pt(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...l}=t,c=(0,K.Z)(n),u=(0,K.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,s.Z)({className:"footer__link-item"},o?{href:i?u:o}:{to:c},l),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function ft(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(pt,{item:t}))}function mt(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(ft,{key:t,item:e})))))}function ht(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(mt,{key:t,column:e}))))}function gt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function bt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(pt,{item:t})}function yt(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(bt,{item:e}),t.length!==n+1&&r.createElement(gt,null))))))}function vt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(ht,{columns:t}):r.createElement(yt,{links:t})}var wt=n(941);const _t={footerLogoLink:"footerLogoLink_BH7S"};function Et(e){let{logo:t}=e;const{withBaseUrl:n}=(0,K.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(wt.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function kt(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:_t.footerLogoLink,target:t.target},r.createElement(Et,{logo:t})):r.createElement(Et,{logo:t})}function St(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Tt(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function xt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Tt,{style:a,links:n&&n.length>0&&r.createElement(vt,{links:n}),logo:o&&r.createElement(kt,{logo:o}),copyright:t&&r.createElement(St,{copyright:t})})}const Rt=r.memo(xt),Ct=(0,P.Qc)([U.S,_.pl,A.OC,ye.L5,i.VC,function(e){let{children:t}=e;return r.createElement(N.n2,null,r.createElement(O.M,null,r.createElement(I,null,t)))}]);function Ot(e){let{children:t}=e;return r.createElement(Ct,null,t)}function At(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(tt,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(nt,{error:t})))))}const Pt={mainWrapper:"mainWrapper_z2l0"};function Nt(e){const{children:t,noFooter:n,wrapperClassName:s,title:l,description:c}=e;return(0,b.t)(),r.createElement(Ot,null,r.createElement(i.d,{title:l,description:c}),r.createElement(v,null),r.createElement(C,null),r.createElement(dt,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,Pt.mainWrapper,s)},r.createElement(a.Z,{fallback:e=>r.createElement(At,e)},t)),!n&&r.createElement(Rt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(9960),i=n(4996),s=n(2263),l=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=o.createElement(c.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},s):s}function d(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:c}}=(0,l.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(c?.href||"/"),h=n?"":t,g=c?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},f,c?.target&&{target:c.target}),c&&o.createElement(u,{logo:c,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:p},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(5742);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),o=n(7294),a=n(6010),i=n(2389),s=n(2949);const l={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:c,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,a.Z)(l.themedImage,l[`themedImage--${e}`],u)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,z:()=>g});var r=n(7462),o=n(7294),a=n(412),i=n(1442);const s="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??s}`,height:`${t}px`}}function l(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!a.Z.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:l}=e;const c=(0,o.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:a}),o.createElement(t,{ref:c,style:l?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),i?.(n))},className:s},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[s,l]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&l(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:s})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),o=n(2389),a=n(12),i=n(902),s=n(6668);const l=(0,a.WA)("docusaurus.announcement.dismiss"),c=(0,a.WA)("docusaurus.announcement.id"),u=()=>"true"===l.get(),d=e=>l.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{a(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(412),a=n(902),i=n(12),s=n(6668);const l=r.createContext(void 0),c="theme",u=(0,i.WA)(c),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>o.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{u.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,a]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(l.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(l);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>g});var r=n(7294),o=n(143),a=n(9935),i=n(6668),s=n(2802),l=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function g(e){let{children:t}=e;return s.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(f);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,b:()=>s});var r=n(7294),o=n(902);const a=Symbol("EmptyContext"),i=r.createContext(a);function s(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function l(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>i});var r=n(7294),o=n(902);const a=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(a.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(a);if(null===e)throw new o.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),o=n(3102),a=n(7524),i=n(6550),s=(n(1688),n(902));function l(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6668);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function p(e){let{children:t}=e;const n=d();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>l,n2:()=>i});var r=n(7294),o=n(902);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),o=n(412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const l=!1;function c(){const[e,t]=(0,r.useState)((()=>l?"ssr":s()));return(0,r.useEffect)((()=>{function e(){t(s())}const n=l?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>T,Wl:()=>m,_F:()=>y,cE:()=>p,jA:()=>h,xz:()=>f,hI:()=>S,lO:()=>_,vY:()=>k,oz:()=>E,s1:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(143),s=n(373),l=n(4477),c=n(1116);function u(e){return Array.from(new Set(e))}var d=n(8596);const p=!!i._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function h(){const{pathname:e}=(0,o.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>y(e,t)));function y(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||b(e.items,t))}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,c.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function _(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function E(e,t){const n=_(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function k(e,t){const n=_(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function S(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,s=i.find((e=>(0,o.LX)(r.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?n.docsSidebars[l]:void 0;return{docElement:(0,a.H)(i),sidebarName:l,sidebarItems:c}}function T(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(7294),o=n(6010),a=n(5742),i=n(226);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(4996),c=n(2263);function u(e){let{title:t,description:n,keywords:o,image:i,children:s}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),s)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:s},r.createElement(a.Z,null,r.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,o.Z)(a,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>l,i6:()=>s,zX:()=>a});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),o=n(723),a=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>l,RF:()=>d});var r=n(7294),o=n(412),a=n(2389),i=n(902);const s=r.createContext(void 0);function l(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(s.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),o=(0,r.useRef)(u()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>l});n(7294),n(1688);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),o=n(6550),a=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(902);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(6010);const a={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};function i(e){let{className:t}=e;return r.createElement("div",{className:(0,o.Z)(a.loadingRing,t)},r.createElement("div",null),r.createElement("div",null),r.createElement("div",null),r.createElement("div",null))}},22:(e,t,n)=>{"use strict";n.d(t,{w:()=>s});var r=n(1336),o=n.n(r),a=n(1029);const i=new Map;function s(e,t){const n=`${e}${t}`;let r=i.get(n);return r||(r=async function(e,t){{const n=`${e}${a.J.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),i=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),s=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:i,zhDictionary:Array.from(s)}}return{wrappedIndexes:[],zhDictionary:[]}}(e,t),i.set(n,r)),r}},8202:(e,t,n)=>{"use strict";n.d(t,{v:()=>l});var r=n(1336),o=n.n(r);var a=n(1029);function i(e){return s(e).concat(s(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function s(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}function l(e,t,n){return function(r,s){const l=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.dK);if(0===l.length)return void s([]);const c=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,i=!1;for(const s of t)if(r.substr(0,s.length)===s){const t={missed:o.missed,term:o.term.concat({value:s})};r.length>s.length?e(r.substr(s.length),t):n.push(t),i=!0}else for(let t=s.length-1;t>a;t-=1){const l=s.substr(0,t);if(r.substr(0,t)===l){a=t;const s={missed:o.missed,term:o.term.concat({value:l,trailing:!0})};r.length>t?e(r.substr(t),s):n.push(s),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const i of a.dK)if("en"===i)a._k||r.unshift(o().stopWordFilter);else{const e=o()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let s;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);s=[];const t=[];for(const r of n){const n=e(r);s.push(n),n.length<r.length&&n.length>0&&t.push(n)}n.push(...t)}else s=n.slice();const l=[];for(const o of s)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)l.push(o.slice(0,e).concat(o.slice(e+1)));return i(n).concat(i(l))}(l,t),u=[];e:for(const{term:t,tokens:o}of c)for(const{documents:r,index:a,type:i}of e)if(u.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!u.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-u.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:0!==i&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),u.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,o=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===o&&(o=n.index),r===o?0===t.type?-1:0===n.type?1:t.index-n.index:r-o}))}(u),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(u),s(u)}}},3926:(e,t,n)=>{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{e:()=>r})},1690:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{X:()=>r})},1073:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{m:()=>r})},2539:(e,t,n)=>{"use strict";n.d(t,{C:()=>o});var r=n(1690);function o(e,t,n){const a=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`<mark>${(0,r.X)(e.substr(n,i.length))}</mark>`);const s=n+i.length;s<e.length&&a.push(o(e.substr(s),t));break}}return 0===a.length?n?`<mark>${(0,r.X)(e)}</mark>`:(0,r.X)(e):a.join("")}},726:(e,t,n)=>{"use strict";n.d(t,{o:()=>l});var r=n(1690),o=n(2539);const a=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var s=n(1029);function l(e,t,n,a){void 0===a&&(a=s.Hk);const{chunkIndex:l,chunks:c}=function(e,t,n){const a=[];let s=0,l=0,c=-1;for(;s<t.length;){const[u,d]=t[s];if(s+=1,!(u<l)){if(u>l){const t=i(e.substring(l,u)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}-1===c&&(c=a.length),l=u+d,a.push({html:(0,o.C)(e.substring(u,l),n,!0),textLength:d})}}if(l<e.length){const t=i(e.substring(l)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:c,chunks:a}}(e,t,n),u=c.slice(0,l),d=c[l],p=[d.html],f=c.slice(l+1);let m=d.textLength,h=0,g=0,b=!1,y=!1;for(;m<a;)if((h<=g||0===f.length)&&u.length>0){const e=u.pop();m+e.textLength<=a?(p.unshift(e.html),h+=e.textLength,m+=e.textLength):(b=!0,u.length=0)}else{if(!(f.length>0))break;{const e=f.shift();m+e.textLength<=a?(p.push(e.html),g+=e.textLength,m+=e.textLength):(y=!0,f.length=0)}}return(b||u.length>0)&&p.unshift("\u2026"),(y||f.length>0)&&p.push("\u2026"),p.join("")}},1029:(e,t,n)=>{"use strict";n.d(t,{vc:()=>a,gQ:()=>f,H6:()=>c,hG:()=>g,l9:()=>m,dK:()=>r,_k:()=>o,pu:()=>p,AY:()=>u,t_:()=>d,Kc:()=>h,J:()=>i,Hk:()=>l,qo:()=>s,pQ:()=>b});n(1336);const r=["en"],o=!1,a=null,i="search-index{dir}.json?_=bcd2dcde",s=8,l=50,c=!0,u=!0,d=!0,p="right",f=void 0,m=!0,h=null,g=!1,b=!1},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},2358:(e,t,n)=>{"use strict";n.d(t,{lX:()=>k,q_:()=>O,ob:()=>h,PP:()=>P,Ep:()=>m,Hp:()=>g});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),l=t&&o(t),c=s||l;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function s(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=s(t),o=s(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var c=n(8776);function u(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function f(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function h(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var y=!("undefined"==typeof window||!window.document||!window.document.createElement);function v(e,t){t(window.confirm(e))}var w="popstate",_="hashchange";function E(){try{return window.history.state||{}}catch(e){return{}}}function k(e){void 0===e&&(e={}),y||(0,c.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,s=i.forceRefresh,l=void 0!==s&&s,d=i.getUserConfirmation,g=void 0===d?v:d,k=i.keyLength,S=void 0===k?6:k,T=e.basename?f(u(e.basename)):"";function x(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return T&&(a=p(a,T)),h(a,r,n)}function R(){return Math.random().toString(36).substr(2,S)}var C=b();function O(e){(0,r.Z)(z,e),z.length=n.length,C.notifyListeners(z.location,z.action)}function A(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||L(x(e.state))}function P(){L(x(E()))}var N=!1;function L(e){if(N)N=!1,O();else{C.confirmTransitionTo(e,"POP",g,(function(t){t?O({action:"POP",location:e}):function(e){var t=z.location,n=M.indexOf(t.key);-1===n&&(n=0);var r=M.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(N=!0,F(o))}(e)}))}}var I=x(E()),M=[I.key];function D(e){return T+m(e)}function F(e){n.go(e)}var U=0;function B(e){1===(U+=e)&&1===e?(window.addEventListener(w,A),a&&window.addEventListener(_,P)):0===U&&(window.removeEventListener(w,A),a&&window.removeEventListener(_,P))}var j=!1;var z={length:n.length,action:"POP",location:I,createHref:D,push:function(e,t){var r="PUSH",a=h(e,t,R(),z.location);C.confirmTransitionTo(a,r,g,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.pushState({key:i,state:s},null,t),l)window.location.href=t;else{var c=M.indexOf(z.location.key),u=M.slice(0,c+1);u.push(a.key),M=u,O({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=h(e,t,R(),z.location);C.confirmTransitionTo(a,r,g,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.replaceState({key:i,state:s},null,t),l)window.location.replace(t);else{var c=M.indexOf(z.location.key);-1!==c&&(M[c]=a.key),O({action:r,location:a})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return j||(B(1),j=!0),function(){return j&&(j=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return z}var S="hashchange",T={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+d(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:d,decodePath:u},slash:{encodePath:u,decodePath:u}};function x(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function R(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function C(e){window.location.replace(x(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),y||(0,c.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?v:o,i=n.hashType,s=void 0===i?"slash":i,l=e.basename?f(u(e.basename)):"",d=T[s],g=d.encodePath,w=d.decodePath;function _(){var e=w(R());return l&&(e=p(e,l)),h(e)}var E=b();function k(e){(0,r.Z)(j,e),j.length=t.length,E.notifyListeners(j.location,j.action)}var O=!1,A=null;function P(){var e,t,n=R(),r=g(n);if(n!==r)C(r);else{var o=_(),i=j.location;if(!O&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(A===m(o))return;A=null,function(e){if(O)O=!1,k();else{var t="POP";E.confirmTransitionTo(e,t,a,(function(n){n?k({action:t,location:e}):function(e){var t=j.location,n=M.lastIndexOf(m(t));-1===n&&(n=0);var r=M.lastIndexOf(m(e));-1===r&&(r=0);var o=n-r;o&&(O=!0,D(o))}(e)}))}}(o)}}var N=R(),L=g(N);N!==L&&C(L);var I=_(),M=[m(I)];function D(e){t.go(e)}var F=0;function U(e){1===(F+=e)&&1===e?window.addEventListener(S,P):0===F&&window.removeEventListener(S,P)}var B=!1;var j={length:t.length,action:"POP",location:I,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=x(window.location.href)),n+"#"+g(l+m(e))},push:function(e,t){var n="PUSH",r=h(e,void 0,void 0,j.location);E.confirmTransitionTo(r,n,a,(function(e){if(e){var t=m(r),o=g(l+t);if(R()!==o){A=t,function(e){window.location.hash=e}(o);var a=M.lastIndexOf(m(j.location)),i=M.slice(0,a+1);i.push(t),M=i,k({action:n,location:r})}else k()}}))},replace:function(e,t){var n="REPLACE",r=h(e,void 0,void 0,j.location);E.confirmTransitionTo(r,n,a,(function(e){if(e){var t=m(r),o=g(l+t);R()!==o&&(A=t,C(o));var a=M.indexOf(m(j.location));-1!==a&&(M[a]=t),k({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=E.setPrompt(e);return B||(U(1),B=!0),function(){return B&&(B=!1,U(-1)),t()}},listen:function(e){var t=E.appendListener(e);return U(1),function(){U(-1),t()}}};return j}function A(e,t,n){return Math.min(Math.max(e,t),n)}function P(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=b();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function p(){return Math.random().toString(36).substr(2,c)}var f=A(s,0,a.length-1),g=a.map((function(e){return h(e,void 0,"string"==typeof e?p():e.key||p())})),y=m;function v(e){var t=A(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:g.length,action:"POP",location:g[f],index:f,entries:g,createHref:y,push:function(e,t){var r="PUSH",o=h(e,t,p(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=h(e,t,p(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),g=0;g<i.length;++g){var b=i[g];if(!(a[b]||r&&r[b]||h&&h[b]||s&&s[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1336:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,m,h,g,b,y,v,w,_,E,k,S,T,x,R,C,O,A,P,N,L,I,M=function(e){var t=new M.Builder;return t.pipeline.add(M.trimmer,M.stopWordFilter,M.stemmer),t.searchPipeline.add(M.stemmer),e.call(t,t),t.build()};M.version="2.3.9",M.utils={},M.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),M.utils.asString=function(e){return null==e?"":e.toString()},M.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},M.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},M.FieldRef.joiner="/",M.FieldRef.fromString=function(e){var t=e.indexOf(M.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new M.FieldRef(r,n,e)},M.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+M.FieldRef.joiner+this.docRef),this._stringValue},M.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},M.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},M.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},M.Set.prototype.contains=function(e){return!!this.elements[e]},M.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===M.Set.complete)return this;if(e===M.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new M.Set(o)},M.Set.prototype.union=function(e){return e===M.Set.complete?M.Set.complete:e===M.Set.empty?this:new M.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},M.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},M.Token=function(e,t){this.str=e||"",this.metadata=t||{}},M.Token.prototype.toString=function(){return this.str},M.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},M.Token.prototype.clone=function(e){return e=e||function(e){return e},new M.Token(e(this.str,this.metadata),this.metadata)},M.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new M.Token(M.utils.asString(e).toLowerCase(),M.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var s=a-i;if(n.charAt(a).match(M.tokenizer.separator)||a==r){if(s>0){var l=M.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new M.Token(n.slice(i,a),l))}i=a+1}}return o},M.tokenizer.separator=/[\s\-]+/,M.Pipeline=function(){this._stack=[]},M.Pipeline.registeredFunctions=Object.create(null),M.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&M.utils.warn("Overwriting existing registered function: "+t),e.label=t,M.Pipeline.registeredFunctions[e.label]=e},M.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||M.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},M.Pipeline.load=function(e){var t=new M.Pipeline;return e.forEach((function(e){var n=M.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},M.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){M.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},M.Pipeline.prototype.after=function(e,t){M.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},M.Pipeline.prototype.before=function(e,t){M.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},M.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},M.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var s=0;s<i.length;s++)o.push(i[s]);else o.push(i)}e=o}return e},M.Pipeline.prototype.runString=function(e,t){var n=new M.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},M.Pipeline.prototype.reset=function(){this._stack=[]},M.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return M.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},M.Vector=function(e){this._magnitude=0,this.elements=e||[]},M.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},M.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},M.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},M.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},M.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,s=0,l=0,c=0;l<o&&c<a;)(i=n[l])<(s=r[c])?l+=2:i>s?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},M.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},M.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},M.Vector.prototype.toJSON=function(){return this.elements},M.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},s={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(c="[^aeiou][^aeiouy]*")+")?"+(u=(l="[aeiouy]")+"[aeiou]*")+c+"("+u+")?$",p="^("+c+")?"+u+c+u+c,f="^("+c+")?"+l,m=new RegExp("^("+c+")?"+u+c),h=new RegExp(p),g=new RegExp(d),b=new RegExp(f),y=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,_=/^(.+?)(ed|ing)$/,E=/.$/,k=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),T=new RegExp("^"+c+l+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,R=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,O=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,A=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,N=/ll$/,L=new RegExp("^"+c+l+"[^aeiouwxy]$"),I=function(e){var t,n,r,o,a,l,c;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=y).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=_,(o=w).test(e)){var u=o.exec(e);(o=m).test(u[1])&&(o=E,e=e.replace(o,""))}else a.test(e)&&(t=(u=a.exec(e))[1],(a=b).test(t)&&(l=S,c=T,(a=k).test(e=t)?e+="e":l.test(e)?(o=E,e=e.replace(o,"")):c.test(e)&&(e+="e")));return(o=x).test(e)&&(e=(t=(u=o.exec(e))[1])+"i"),(o=R).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=m).test(t)&&(e=t+s[n])),a=A,(o=O).test(e)?(t=(u=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(u=a.exec(e))[1]+u[2],(a=h).test(t)&&(e=t)),(o=P).test(e)&&(t=(u=o.exec(e))[1],a=g,l=L,((o=h).test(t)||a.test(t)&&!l.test(t))&&(e=t)),a=h,(o=N).test(e)&&a.test(e)&&(o=E,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(I)}),M.Pipeline.registerFunction(M.stemmer,"stemmer"),M.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},M.stopWordFilter=M.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),M.Pipeline.registerFunction(M.stopWordFilter,"stopWordFilter"),M.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},M.Pipeline.registerFunction(M.trimmer,"trimmer"),M.TokenSet=function(){this.final=!1,this.edges={},this.id=M.TokenSet._nextId,M.TokenSet._nextId+=1},M.TokenSet._nextId=1,M.TokenSet.fromArray=function(e){for(var t=new M.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},M.TokenSet.fromClause=function(e){return"editDistance"in e?M.TokenSet.fromFuzzyString(e.term,e.editDistance):M.TokenSet.fromString(e.term)},M.TokenSet.fromFuzzyString=function(e,t){for(var n=new M.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new M.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new M.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new M.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new M.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},M.TokenSet.fromString=function(e){for(var t=new M.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var s=new M.TokenSet;s.final=i,t.edges[a]=s,t=s}}return n},M.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},M.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},M.TokenSet.prototype.intersect=function(e){for(var t=new M.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),s=i.length,l=0;l<a;l++)for(var c=o[l],u=0;u<s;u++){var d=i[u];if(d==c||"*"==c){var p=n.node.edges[d],f=n.qNode.edges[c],m=p.final&&f.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new M.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:f,output:h,node:p})}}}return t},M.TokenSet.Builder=function(){this.previousWord="",this.root=new M.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},M.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new M.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},M.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},M.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},M.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},M.Index.prototype.search=function(e){return this.query((function(t){new M.QueryParser(e,t).parse()}))},M.Index.prototype.query=function(e){for(var t=new M.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new M.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var l=t.clauses[s],c=null,u=M.Set.empty;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var p=c[d];l.term=p;var f=M.TokenSet.fromClause(l),m=this.tokenSet.intersect(f).toArray();if(0===m.length&&l.presence===M.Query.presence.REQUIRED){for(var h=0;h<l.fields.length;h++){a[P=l.fields[h]]=M.Set.empty}break}for(var g=0;g<m.length;g++){var b=m[g],y=this.invertedIndex[b],v=y._index;for(h=0;h<l.fields.length;h++){var w=y[P=l.fields[h]],_=Object.keys(w),E=b+"/"+P,k=new M.Set(_);if(l.presence==M.Query.presence.REQUIRED&&(u=u.union(k),void 0===a[P]&&(a[P]=M.Set.complete)),l.presence!=M.Query.presence.PROHIBITED){if(r[P].upsert(v,l.boost,(function(e,t){return e+t})),!o[E]){for(var S=0;S<_.length;S++){var T,x=_[S],R=new M.FieldRef(x,P),C=w[x];void 0===(T=n[R])?n[R]=new M.MatchData(b,P,C):T.add(b,P,C)}o[E]=!0}}else void 0===i[P]&&(i[P]=M.Set.empty),i[P]=i[P].union(k)}}}if(l.presence===M.Query.presence.REQUIRED)for(h=0;h<l.fields.length;h++){a[P=l.fields[h]]=a[P].intersect(u)}}var O=M.Set.complete,A=M.Set.empty;for(s=0;s<this.fields.length;s++){var P;a[P=this.fields[s]]&&(O=O.intersect(a[P])),i[P]&&(A=A.union(i[P]))}var N=Object.keys(n),L=[],I=Object.create(null);if(t.isNegated()){N=Object.keys(this.fieldVectors);for(s=0;s<N.length;s++){R=N[s];var D=M.FieldRef.fromString(R);n[R]=new M.MatchData}}for(s=0;s<N.length;s++){var F=(D=M.FieldRef.fromString(N[s])).docRef;if(O.contains(F)&&!A.contains(F)){var U,B=this.fieldVectors[D],j=r[D.fieldName].similarity(B);if(void 0!==(U=I[F]))U.score+=j,U.matchData.combine(n[D]);else{var z={ref:F,score:j,matchData:n[D]};I[F]=z,L.push(z)}}}return L.sort((function(e,t){return t.score-e.score}))},M.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:M.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},M.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new M.TokenSet.Builder,s=M.Pipeline.load(e.pipeline);e.version!=M.version&&M.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+M.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++){var c=(d=r[l])[0],u=d[1];n[c]=new M.Vector(u)}for(l=0;l<a.length;l++){var d,p=(d=a[l])[0],f=d[1];i.insert(p),o[p]=f}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=s,new M.Index(t)},M.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=M.tokenizer,this.pipeline=new M.Pipeline,this.searchPipeline=new M.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},M.Builder.prototype.ref=function(e){this._ref=e},M.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},M.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},M.Builder.prototype.k1=function(e){this._k1=e},M.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,s=i?i(e):e[a],l=this.tokenizer(s,{fields:[a]}),c=this.pipeline.run(l),u=new M.FieldRef(n,a),d=Object.create(null);this.fieldTermFrequencies[u]=d,this.fieldLengths[u]=0,this.fieldLengths[u]+=c.length;for(var p=0;p<c.length;p++){var f=c[p];if(null==d[f]&&(d[f]=0),d[f]+=1,null==this.invertedIndex[f]){var m=Object.create(null);m._index=this.termIndex,this.termIndex+=1;for(var h=0;h<r.length;h++)m[r[h]]=Object.create(null);this.invertedIndex[f]=m}null==this.invertedIndex[f][a][n]&&(this.invertedIndex[f][a][n]=Object.create(null));for(var g=0;g<this.metadataWhitelist.length;g++){var b=this.metadataWhitelist[g],y=f.metadata[b];null==this.invertedIndex[f][a][n][b]&&(this.invertedIndex[f][a][n][b]=[]),this.invertedIndex[f][a][n][b].push(y)}}}},M.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=M.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var s=Object.keys(this._fields);for(o=0;o<s.length;o++){var l=s[o];n[l]=n[l]/r[l]}this.averageFieldLength=n},M.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=M.FieldRef.fromString(t[o]),i=a.fieldName,s=this.fieldLengths[a],l=new M.Vector,c=this.fieldTermFrequencies[a],u=Object.keys(c),d=u.length,p=this._fields[i].boost||1,f=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,b,y=u[m],v=c[y],w=this.invertedIndex[y]._index;void 0===r[y]?(h=M.idf(this.invertedIndex[y],this.documentCount),r[y]=h):h=r[y],g=h*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[i]))+v),g*=p,g*=f,b=Math.round(1e3*g)/1e3,l.insert(w,b)}e[a]=l}this.fieldVectors=e},M.Builder.prototype.createTokenSet=function(){this.tokenSet=M.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},M.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new M.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},M.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},M.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},M.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],s=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var l=0;l<s.length;l++){var c=s[l];null==this.metadata[r][i][c]?this.metadata[r][i][c]=e.metadata[r][i][c]:this.metadata[r][i][c]=this.metadata[r][i][c].concat(e.metadata[r][i][c])}}}},M.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},M.Query=function(e){this.clauses=[],this.allFields=e},M.Query.wildcard=new String("*"),M.Query.wildcard.NONE=0,M.Query.wildcard.LEADING=1,M.Query.wildcard.TRAILING=2,M.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},M.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=M.Query.wildcard.NONE),e.wildcard&M.Query.wildcard.LEADING&&e.term.charAt(0)!=M.Query.wildcard&&(e.term="*"+e.term),e.wildcard&M.Query.wildcard.TRAILING&&e.term.slice(-1)!=M.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=M.Query.presence.OPTIONAL),this.clauses.push(e),this},M.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=M.Query.presence.PROHIBITED)return!1;return!0},M.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,M.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},M.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},M.QueryParseError.prototype=new Error,M.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},M.QueryLexer.prototype.run=function(){for(var e=M.QueryLexer.lexText;e;)e=e(this)},M.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},M.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},M.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},M.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return M.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},M.QueryLexer.prototype.width=function(){return this.pos-this.start},M.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},M.QueryLexer.prototype.backup=function(){this.pos-=1},M.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=M.QueryLexer.EOS&&this.backup()},M.QueryLexer.prototype.more=function(){return this.pos<this.length},M.QueryLexer.EOS="EOS",M.QueryLexer.FIELD="FIELD",M.QueryLexer.TERM="TERM",M.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",M.QueryLexer.BOOST="BOOST",M.QueryLexer.PRESENCE="PRESENCE",M.QueryLexer.lexField=function(e){return e.backup(),e.emit(M.QueryLexer.FIELD),e.ignore(),M.QueryLexer.lexText},M.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(M.QueryLexer.TERM)),e.ignore(),e.more())return M.QueryLexer.lexText},M.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(M.QueryLexer.EDIT_DISTANCE),M.QueryLexer.lexText},M.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(M.QueryLexer.BOOST),M.QueryLexer.lexText},M.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(M.QueryLexer.TERM)},M.QueryLexer.termSeparator=M.tokenizer.separator,M.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==M.QueryLexer.EOS)return M.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return M.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(M.QueryLexer.TERM),M.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(M.QueryLexer.TERM),M.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(M.QueryLexer.PRESENCE),M.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(M.QueryLexer.PRESENCE),M.QueryLexer.lexText;if(t.match(M.QueryLexer.termSeparator))return M.QueryLexer.lexTerm}else e.escapeCharacter()}},M.QueryParser=function(e,t){this.lexer=new M.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},M.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=M.QueryParser.parseClause;e;)e=e(this);return this.query},M.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},M.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},M.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},M.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case M.QueryLexer.PRESENCE:return M.QueryParser.parsePresence;case M.QueryLexer.FIELD:return M.QueryParser.parseField;case M.QueryLexer.TERM:return M.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new M.QueryParseError(n,t.start,t.end)}},M.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=M.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=M.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new M.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new M.QueryParseError(n,t.start,t.end)}switch(r.type){case M.QueryLexer.FIELD:return M.QueryParser.parseField;case M.QueryLexer.TERM:return M.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new M.QueryParseError(n,r.start,r.end)}}},M.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new M.QueryParseError(r,t.start,t.end)}if(o.type===M.QueryLexer.TERM)return M.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new M.QueryParseError(r,o.start,o.end)}},M.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new M.QueryParseError(r,n.start,n.end)}else e.nextClause()}},M.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new M.QueryParseError(r,o.start,o.end)}else e.nextClause()}},M.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new M.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return M})?r.call(t,n,t,e):r)||(e.exports=o)}()},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l<arguments.length;l++){for(var c in a=Object(arguments[l]))n.call(a,c)&&(s[c]=a[c]);if(t){i=t(a);for(var u=0;u<i.length;u++)r.call(a,i[u])&&(s[i[u]]=a[i[u]])}}return s}},4779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],h=n[2],g=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var _=null!=h&&null!=m&&m!==h,E="+"===v||"*"===v,k="?"===v||"*"===v,S=n[2]||u,T=b||y;r.push({name:g||a++,prefix:h||"",delimiter:S,optional:k,repeat:E,partial:_,asterisk:!!w,pattern:T?c(T):w?".*":"[^"+l(S)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",s=t||{},l=(o||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');a+=u.prefix+d}}else a+=u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=l(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=a[s])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var l=t[s],c=r.util.type(l);"Object"!==c||a[i(l)]?"Array"!==c||a[i(l)]||(a[i(l)]=!0,e(l,n,s,a)):(a[i(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new s;return l(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var h=f[m],g=h.inside,b=!!h.lookbehind,y=!!h.greedy,v=h.alias;if(y&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var _=h.pattern||h,E=s.next,k=u;E!==t.tail&&!(d&&k>=d.reach);k+=E.value.length,E=E.next){var S=E.value;if(t.length>e.length)return;if(!(S instanceof o)){var T,x=1;if(y){if(!(T=a(_,k,e,b))||T.index>=e.length)break;var R=T.index,C=T.index+T[0].length,O=k;for(O+=E.value.length;R>=O;)O+=(E=E.next).value.length;if(k=O-=E.value.length,E.value instanceof o)continue;for(var A=E;A!==t.tail&&(O<C||"string"==typeof A.value);A=A.next)x++,O+=A.value.length;x--,S=e.slice(k,O),T.index-=k}else if(!(T=a(_,0,S,b)))continue;R=T.index;var P=T[0],N=S.slice(0,R),L=S.slice(R+P.length),I=k+S.length;d&&I>d.reach&&(d.reach=I);var M=E.prev;if(N&&(M=l(t,M,N),k+=N.length),c(t,M,x),E=l(t,M,new o(p,g?r.tokenize(P,g):P,v,P)),L&&l(t,E,L),x>1){var D={cause:p+","+m,reach:I};i(e,t,n,E.prev,k,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var s="";for(var l in a.attributes)s+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+s+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|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|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var s=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),l="language-"+(s=(/[a-z][\w-]*/i.exec(s)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,l]:i.alias.push(l):i.alias=[l]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],c=/language-(.+)/.exec(a);if(c){n=c[1];break}}var u,d=e.languages[n];if(d)t.content=e.highlight((u=t.content,u.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n);var r=s[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),o.length>0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&o.indexOf(c.content)>=0&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return!1}return!0}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(r.test(s)&&0===--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function c(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,l(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function u(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,u={},d=l(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=s(i++,r)););return u[n]=o,n})).join(""),n,r),p=Object.keys(u);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=p[i],a="string"==typeof r?r:r.content,s=a.indexOf(o);if(-1!==s){++i;var l=a.substring(0,s),d=c(u[o]),f=a.substring(s+o.length),m=[];if(l&&m.push(l),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var s=i[1];if(3===i.length&&"string"!=typeof s&&"embedded-code"===s.type){var l=p(s),c=s.alias,d=Array.isArray(c)?c[0]:c,f=e.languages[d];if(!f)continue;i[1]=u(l,f,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var l=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(l+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(l=i(t[r-1])+l,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",l,null,l)}o.content&&"string"!=typeof o.content&&s(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(o>=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];h&&y.push.apply(y,i([h])),y.push(g),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|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|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),m=u;o(m);){for(var h in p={},m){var g=l[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in m=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var s=new Set,l={};function c(e,t){u(e,t),u(e+"Capture",t)}function u(e,t){for(l[e]=t,e=0;e<t.length;e++)s.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var y=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=b.hasOwnProperty(t)?b[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!f.call(h,e)||!f.call(m,e)&&(p.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(y,v);b[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(y,v);b[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(y,v);b[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var _=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,E=60103,k=60106,S=60107,T=60108,x=60114,R=60109,C=60110,O=60112,A=60113,P=60120,N=60115,L=60116,I=60121,M=60128,D=60129,F=60130,U=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;E=B("react.element"),k=B("react.portal"),S=B("react.fragment"),T=B("react.strict_mode"),x=B("react.profiler"),R=B("react.provider"),C=B("react.context"),O=B("react.forward_ref"),A=B("react.suspense"),P=B("react.suspense_list"),N=B("react.memo"),L=B("react.lazy"),I=B("react.block"),B("react.scope"),M=B("react.opaque.id"),D=B("react.debug_trace_mode"),F=B("react.offscreen"),U=B("react.legacy_hidden")}var j,z="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=z&&e[z]||e["@@iterator"])?e:null}function G(e){if(void 0===j)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);j=t&&t[1]||""}return"\n"+j+e}var H=!1;function q(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(l){var r=l}Reflect.construct(e,[],t)}else{try{t.call()}catch(l){r=l}e.call(t.prototype)}else{try{throw Error()}catch(l){r=l}e()}}catch(l){if(l&&r&&"string"==typeof l.stack){for(var o=l.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=s);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?G(e):""}function V(e){switch(e.tag){case 5:return G(e.type);case 16:return G("Lazy");case 13:return G("Suspense");case 19:return G("SuspenseList");case 0:case 2:case 15:return e=q(e.type,!1);case 11:return e=q(e.type.render,!1);case 22:return e=q(e.type._render,!1);case 1:return e=q(e.type,!0);default:return""}}function Q(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case k:return"Portal";case x:return"Profiler";case T:return"StrictMode";case A:return"Suspense";case P:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case R:return(e._context.displayName||"Context")+".Provider";case O:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return Q(e.type);case I:return Q(e._render);case L:t=e._payload,e=e._init;try{return Q(e(t))}catch(n){}}return null}function Z(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function W(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=W(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=W(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function K(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Z(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=Z(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,Z(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&K(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Z(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function se(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Z(n)}}function ce(e,t){var n=Z(t.value),r=Z(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ue(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function fe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?pe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ye={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ve=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ye.hasOwnProperty(e)&&ye[e]?(""+t).trim():t+"px"}function _e(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ye).forEach((function(e){ve.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ye[t]=ye[e]}))}));var Ee=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ke(e,t){if(t){if(Ee[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function Se(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Te(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,Re=null,Ce=null;function Oe(e){if(e=no(e)){if("function"!=typeof xe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),xe(e.stateNode,e.type,t))}}function Ae(e){Re?Ce?Ce.push(e):Ce=[e]:Re=e}function Pe(){if(Re){var e=Re,t=Ce;if(Ce=Re=null,Oe(e),t)for(e=0;e<t.length;e++)Oe(t[e])}}function Ne(e,t){return e(t)}function Le(e,t,n,r,o){return e(t,n,r,o)}function Ie(){}var Me=Ne,De=!1,Fe=!1;function Ue(){null===Re&&null===Ce||(Ie(),Pe())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var je=!1;if(d)try{var ze={};Object.defineProperty(ze,"passive",{get:function(){je=!0}}),window.addEventListener("test",ze,ze),window.removeEventListener("test",ze,ze)}catch(he){je=!1}function $e(e,t,n,r,o,a,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Ge=!1,He=null,qe=!1,Ve=null,Qe={onError:function(e){Ge=!0,He=e}};function Ze(e,t,n,r,o,a,i,s,l){Ge=!1,He=null,$e.apply(Qe,arguments)}function We(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(We(e)!==e)throw Error(i(188))}function Ke(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=We(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Xe(o),e;if(a===r)return Xe(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=a;break}if(l===r){s=!0,r=o,n=a;break}l=l.sibling}if(!s){for(l=a.child;l;){if(l===n){s=!0,n=a,r=o;break}if(l===r){s=!0,r=a,n=o;break}l=l.sibling}if(!s)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,st=null,lt=null,ct=new Map,ut=new Map,dt=[],pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ft(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":lt=null;break;case"pointerover":case"pointerout":ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ut.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=ft(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=We(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Kt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function yt(e,t,n){bt(e)&&n.delete(t)}function vt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Kt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&bt(it)&&(it=null),null!==st&&bt(st)&&(st=null),null!==lt&&bt(lt)&&(lt=null),ct.forEach(yt),ut.forEach(yt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,vt)))}function _t(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==st&&wt(st,e),null!==lt&&wt(lt,e),ct.forEach(t),ut.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function Et(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kt={animationend:Et("Animation","AnimationEnd"),animationiteration:Et("Animation","AnimationIteration"),animationstart:Et("Animation","AnimationStart"),transitionend:Et("Transition","TransitionEnd")},St={},Tt={};function xt(e){if(St[e])return St[e];if(!kt[e])return e;var t,n=kt[e];for(t in n)if(n.hasOwnProperty(t)&&t in Tt)return St[e]=n[t];return e}d&&(Tt=document.createElement("div").style,"AnimationEvent"in window||(delete kt.animationend.animation,delete kt.animationiteration.animation,delete kt.animationstart.animation),"TransitionEvent"in window||delete kt.transitionend.transition);var Rt=xt("animationend"),Ct=xt("animationiteration"),Ot=xt("animationstart"),At=xt("transitionend"),Pt=new Map,Nt=new Map,Lt=["abort","abort",Rt,"animationEnd",Ct,"animationIteration",Ot,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",At,"transitionEnd","waiting","waiting"];function It(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Nt.set(r,t),Pt.set(r,o),c(o,[r])}}(0,a.unstable_now)();var Mt=8;function Dt(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,s=e.pingedLanes;if(0!==a)r=a,o=Mt=15;else if(0!==(a=134217727&n)){var l=a&~i;0!==l?(r=Dt(l),o=Mt):0!==(s&=a)&&(r=Dt(s),o=Mt)}else 0!==(a=n&~i)?(r=Dt(a),o=Mt):0!==s&&(r=Dt(s),o=Mt);if(0===r)return 0;if(r=n&((0>(r=31-Gt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Mt)return t;Mt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Gt(t)),r|=e[n],t&=~o;return r}function Ut(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=jt(24&~t))?Bt(10,t):e;case 10:return 0===(e=jt(192&~t))?Bt(8,t):e;case 8:return 0===(e=jt(3584&~t))&&(0===(e=jt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=jt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function jt(e){return e&-e}function zt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function $t(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Gt(t)]=n}var Gt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ht(e)/qt|0)|0},Ht=Math.log,qt=Math.LN2;var Vt=a.unstable_UserBlockingPriority,Qt=a.unstable_runWithPriority,Zt=!0;function Wt(e,t,n,r){De||Ie();var o=Xt,a=De;De=!0;try{Le(o,e,t,n,r)}finally{(De=a)||Ue()}}function Yt(e,t,n,r){Qt(Vt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var o;if(Zt)if((o=0==(4&t))&&0<at.length&&-1<pt.indexOf(e))e=ft(null,e,t,n,r),at.push(e);else{var a=Kt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<pt.indexOf(e))return e=ft(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return st=ht(st,e,t,n,r,o),!0;case"mouseover":return lt=ht(lt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}Ir(e,t,r,null,n)}}}function Kt(e,t,n,r){var o=Te(r);if(null!==(o=to(o))){var a=We(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ye(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return Ir(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function sn(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var ln,cn,un,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pn=sn(dn),fn=o({},dn,{view:0,detail:0}),mn=sn(fn),hn=o({},fn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Rn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==un&&(un&&"mousemove"===e.type?(ln=e.screenX-un.screenX,cn=e.screenY-un.screenY):cn=ln=0,un=e),ln)},movementY:function(e){return"movementY"in e?e.movementY:cn}}),gn=sn(hn),bn=sn(o({},hn,{dataTransfer:0})),yn=sn(o({},fn,{relatedTarget:0})),vn=sn(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),_n=sn(wn),En=sn(o({},dn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Sn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Tn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function xn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Tn[e])&&!!t[e]}function Rn(){return xn}var Cn=o({},fn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Sn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Rn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),On=sn(Cn),An=sn(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Pn=sn(o({},fn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Rn})),Nn=sn(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),In=sn(Ln),Mn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Fn=null;d&&"documentMode"in document&&(Fn=document.documentMode);var Un=d&&"TextEvent"in window&&!Fn,Bn=d&&(!Dn||Fn&&8<Fn&&11>=Fn),jn=String.fromCharCode(32),zn=!1;function $n(e,t){switch(e){case"keyup":return-1!==Mn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Gn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!qn[e.type]:"textarea"===t}function Qn(e,t,n,r){Ae(r),0<(t=Dr(t,"onChange")).length&&(n=new pn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Zn=null,Wn=null;function Yn(e){Cr(e,0)}function Xn(e){if(X(ro(e)))return e}function Kn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){Zn&&(Zn.detachEvent("onpropertychange",or),Wn=Zn=null)}function or(e){if("value"===e.propertyName&&Xn(Wn)){var t=[];if(Qn(t,Wn,e,Te(e)),e=Yn,De)e(t);else{De=!0;try{Ne(e,t)}finally{De=!1,Ue()}}}}function ar(e,t,n){"focusin"===e?(rr(),Wn=n,(Zn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Xn(Wn)}function sr(e,t){if("click"===e)return Xn(t)}function lr(e,t){if("input"===e||"change"===e)return Xn(t)}var cr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},ur=Object.prototype.hasOwnProperty;function dr(e,t){if(cr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!ur.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function pr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fr(e,t){var n,r=pr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=pr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=K();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=K((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var br=d&&"documentMode"in document&&11>=document.documentMode,yr=null,vr=null,wr=null,_r=!1;function Er(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;_r||null==yr||yr!==K(r)||("selectionStart"in(r=yr)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(vr,"onSelect")).length&&(t=new pn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=yr)))}It("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),It("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),It(Lt,2);for(var kr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Sr=0;Sr<kr.length;Sr++)Nt.set(kr[Sr],0);u("onMouseEnter",["mouseout","mouseover"]),u("onMouseLeave",["mouseout","mouseover"]),u("onPointerEnter",["pointerout","pointerover"]),u("onPointerLeave",["pointerout","pointerover"]),c("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),c("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),c("onBeforeInput",["compositionend","keypress","textInput","paste"]),c("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Tr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),xr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Tr));function Rr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,s,l,c){if(Ze.apply(this,arguments),Ge){if(!Ge)throw Error(i(198));var u=He;Ge=!1,He=null,qe||(qe=!0,Ve=u)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;Rr(o,s,c),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;Rr(o,s,c),a=l}}}if(qe)throw e=Ve,qe=!1,Ve=null,e}function Or(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Lr(t,e,2,!1),n.add(r))}var Ar="_reactListening"+Math.random().toString(36).slice(2);function Pr(e){e[Ar]||(e[Ar]=!0,s.forEach((function(t){xr.has(t)||Nr(t,!1,e,null),Nr(t,!0,e,null)})))}function Nr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&xr.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),s=e+"__"+(t?"capture":"bubble");i.has(s)||(t&&(o|=4),Lr(a,e,o,t),i.add(s))}function Lr(e,t,n,r){var o=Nt.get(t);switch(void 0===o?2:o){case 0:o=Wt;break;case 1:o=Yt;break;default:o=Xt}n=o.bind(null,t,n,e),o=void 0,!je||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Ir(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=to(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{return Me(e,t,n)}finally{Fe=!1,Ue()}}((function(){var r=a,o=Te(n),i=[];e:{var s=Pt.get(e);if(void 0!==s){var l=pn,c=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":l=On;break;case"focusin":c="focus",l=yn;break;case"focusout":c="blur",l=yn;break;case"beforeblur":case"afterblur":l=yn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=bn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Pn;break;case Rt:case Ct:case Ot:l=vn;break;case At:l=Nn;break;case"scroll":l=mn;break;case"wheel":l=In;break;case"copy":case"cut":case"paste":l=_n;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=An}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,m=r;null!==m;){var h=(f=m).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&(null!=(h=Be(m,p))&&u.push(Mr(m,h,f)))),d)break;m=m.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(c=n.relatedTarget||n.fromElement)||!to(c)&&!c[Jr])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?to(c):null)&&(c!==(d=We(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=gn,h="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=An,h="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==l?s:ro(l),f=null==c?s:ro(c),(s=new u(h,m+"leave",l,n,o)).target=d,s.relatedTarget=f,h=null,to(o)===r&&((u=new u(p,m+"enter",c,n,o)).target=f,u.relatedTarget=d,h=u),d=h,l&&c)e:{for(p=c,m=0,f=u=l;f;f=Fr(f))m++;for(f=0,h=p;h;h=Fr(h))f++;for(;0<m-f;)u=Fr(u),m--;for(;0<f-m;)p=Fr(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Fr(u),p=Fr(p)}u=null}else u=null;null!==l&&Ur(i,s,l,u,!1),null!==c&&null!==d&&Ur(i,d,c,u,!0)}if("select"===(l=(s=r?ro(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Kn;else if(Vn(s))if(Jn)g=lr;else{g=ir;var b=ar}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=sr);switch(g&&(g=g(e,r))?Qn(i,g,n,o):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&oe(s,"number",s.value)),b=r?ro(r):window,e){case"focusin":(Vn(b)||"true"===b.contentEditable)&&(yr=b,vr=r,wr=null);break;case"focusout":wr=vr=yr=null;break;case"mousedown":_r=!0;break;case"contextmenu":case"mouseup":case"dragend":_r=!1,Er(i,n,o);break;case"selectionchange":if(br)break;case"keydown":case"keyup":Er(i,n,o)}var y;if(Dn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Hn?$n(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Bn&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==v?"onCompositionEnd"===v&&Hn&&(y=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Hn=!0)),0<(b=Dr(r,v)).length&&(v=new En(v,e,null,n,o),i.push({event:v,listeners:b}),y?v.data=y:null!==(y=Gn(n))&&(v.data=y))),(y=Un?function(e,t){switch(e){case"compositionend":return Gn(t);case"keypress":return 32!==t.which?null:(zn=!0,jn);case"textInput":return(e=t.data)===jn&&zn?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Dn&&$n(e,t)?(e=nn(),tn=en=Jt=null,Hn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new En("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=y))}Cr(i,t)}))}function Mr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(Mr(e,a,o)),null!=(a=Be(e,t))&&r.push(Mr(e,a,o))),e=e.return}return r}function Fr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Ur(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=Be(n,a))&&i.unshift(Mr(n,l,s)):o||null!=(l=Be(n,a))&&i.push(Mr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var jr=null,zr=null;function $r(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Gr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Hr="function"==typeof setTimeout?setTimeout:void 0,qr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Qr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Zr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Wr=0;var Yr=Math.random().toString(36).slice(2),Xr="__reactFiber$"+Yr,Kr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,eo="__reactEvents$"+Yr;function to(e){var t=e[Xr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Xr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Zr(e);null!==e;){if(n=e[Xr])return n;e=Zr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Xr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Kr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],so=-1;function lo(e){return{current:e}}function co(e){0>so||(e.current=io[so],io[so]=null,so--)}function uo(e,t){so++,io[so]=e.current,e.current=t}var po={},fo=lo(po),mo=lo(!1),ho=po;function go(e,t){var n=e.type.contextTypes;if(!n)return po;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function bo(e){return null!=(e=e.childContextTypes)}function yo(){co(mo),co(fo)}function vo(e,t,n){if(fo.current!==po)throw Error(i(168));uo(fo,t),uo(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,Q(t)||"Unknown",a));return o({},n,r)}function _o(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||po,ho=fo.current,uo(fo,e),uo(mo,mo.current),!0}function Eo(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,co(mo),co(fo),uo(fo,e)):co(mo),uo(mo,n)}var ko=null,So=null,To=a.unstable_runWithPriority,xo=a.unstable_scheduleCallback,Ro=a.unstable_cancelCallback,Co=a.unstable_shouldYield,Oo=a.unstable_requestPaint,Ao=a.unstable_now,Po=a.unstable_getCurrentPriorityLevel,No=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,Io=a.unstable_NormalPriority,Mo=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Fo={},Uo=void 0!==Oo?Oo:function(){},Bo=null,jo=null,zo=!1,$o=Ao(),Go=1e4>$o?Ao:function(){return Ao()-$o};function Ho(){switch(Po()){case No:return 99;case Lo:return 98;case Io:return 97;case Mo:return 96;case Do:return 95;default:throw Error(i(332))}}function qo(e){switch(e){case 99:return No;case 98:return Lo;case 97:return Io;case 96:return Mo;case 95:return Do;default:throw Error(i(332))}}function Vo(e,t){return e=qo(e),To(e,t)}function Qo(e,t,n){return e=qo(e),xo(e,t,n)}function Zo(){if(null!==jo){var e=jo;jo=null,Ro(e)}Wo()}function Wo(){if(!zo&&null!==Bo){zo=!0;var e=0;try{var t=Bo;Vo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),xo(No,Zo),n}finally{zo=!1}}}var Yo=_.ReactCurrentBatchConfig;function Xo(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Ko=lo(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Ko.current;co(Ko),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var sa=!1;function la(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ca(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ua(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function pa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function fa(e,t,n,r){var a=e.updateQueue;sa=!1;var i=a.firstBaseUpdate,s=a.lastBaseUpdate,l=a.shared.pending;if(null!==l){a.shared.pending=null;var c=l,u=c.next;c.next=null,null===s?i=u:s.next=u,s=c;var d=e.alternate;if(null!==d){var p=(d=d.updateQueue).lastBaseUpdate;p!==s&&(null===p?d.firstBaseUpdate=u:p.next=u,d.lastBaseUpdate=c)}}if(null!==i){for(p=a.baseState,s=0,d=u=c=null;;){l=i.lane;var f=i.eventTime;if((r&l)===l){null!==d&&(d=d.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(l=t,f=n,h.tag){case 1:if("function"==typeof(m=h.payload)){p=m.call(f,p,l);break e}p=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(l="function"==typeof(m=h.payload)?m.call(f,p,l):m))break e;p=o({},p,l);break e;case 2:sa=!0}}null!==i.callback&&(e.flags|=32,null===(l=a.effects)?a.effects=[i]:l.push(i))}else f={eventTime:f,lane:l,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(u=d=f,c=p):d=d.next=f,s|=l;if(null===(i=i.next)){if(null===(l=a.shared.pending))break;i=l.next,l.next=null,a.lastBaseUpdate=l,a.shared.pending=null}}null===d&&(c=p),a.baseState=c,a.firstBaseUpdate=u,a.lastBaseUpdate=d,zs|=s,e.lanes=s,e.memoizedState=p}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ba={isMounted:function(e){return!!(e=e._reactInternals)&&We(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=pl(),o=fl(e),a=ua(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ml(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=pl(),o=fl(e),a=ua(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ml(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=pl(),r=fl(e),o=ua(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ml(e,r,n)}};function ya(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function va(e,t,n){var r=!1,o=po,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=bo(t)?ho:fo.current,a=(r=null!=(r=t.contextTypes))?go(e,o):po),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ba,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ba.enqueueReplaceState(t,t.state,null)}function _a(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,la(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=bo(t)?ho:fo.current,o.context=go(e,a)),fa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ba.enqueueReplaceState(o,o.state,null),fa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var Ea=Array.isArray;function ka(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function Sa(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function Ta(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Vl(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function s(t){return e&&null===t.alternate&&(t.flags=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Yl(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=ka(e,t,n),r.return=e,r):((r=Ql(n.type,n.key,n.props,null,e.mode,r)).ref=ka(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Xl(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Zl(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Yl(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case E:return(n=Ql(t.type,t.key,t.props,null,e.mode,n)).ref=ka(e,null,t),n.return=e,n;case k:return(t=Xl(t,e.mode,n)).return=e,t}if(Ea(t)||$(t))return(t=Zl(t,e.mode,n,null)).return=e,t;Sa(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case E:return n.key===o?n.type===S?d(e,t,n.props.children,r,o):c(e,t,n,r):null;case k:return n.key===o?u(e,t,n,r):null}if(Ea(n)||$(n))return null!==o?null:d(e,t,n,r,null);Sa(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case E:return e=e.get(null===r.key?n:r.key)||null,r.type===S?d(t,e,r.props.children,o,r.key):c(t,e,r,o);case k:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Ea(r)||$(r))return d(t,e=e.get(n)||null,r,o,null);Sa(t,r)}return null}function h(o,i,s,l){for(var c=null,u=null,d=i,h=i=0,g=null;null!==d&&h<s.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var b=f(o,d,s[h],l);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),i=a(b,i,h),null===u?c=b:u.sibling=b,u=b,d=g}if(h===s.length)return n(o,d),c;if(null===d){for(;h<s.length;h++)null!==(d=p(o,s[h],l))&&(i=a(d,i,h),null===u?c=d:u.sibling=d,u=d);return c}for(d=r(o,d);h<s.length;h++)null!==(g=m(d,o,h,s[h],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),c}function g(o,s,l,c){var u=$(l);if("function"!=typeof u)throw Error(i(150));if(null==(l=u.call(l)))throw Error(i(151));for(var d=u=null,h=s,g=s=0,b=null,y=l.next();null!==h&&!y.done;g++,y=l.next()){h.index>g?(b=h,h=null):b=h.sibling;var v=f(o,h,y.value,c);if(null===v){null===h&&(h=b);break}e&&h&&null===v.alternate&&t(o,h),s=a(v,s,g),null===d?u=v:d.sibling=v,d=v,h=b}if(y.done)return n(o,h),u;if(null===h){for(;!y.done;g++,y=l.next())null!==(y=p(o,y.value,c))&&(s=a(y,s,g),null===d?u=y:d.sibling=y,d=y);return u}for(h=r(o,h);!y.done;g++,y=l.next())null!==(y=m(h,o,g,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?g:y.key),s=a(y,s,g),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(o,e)})),u}return function(e,r,a,l){var c="object"==typeof a&&null!==a&&a.type===S&&null===a.key;c&&(a=a.props.children);var u="object"==typeof a&&null!==a;if(u)switch(a.$$typeof){case E:e:{for(u=a.key,c=r;null!==c;){if(c.key===u){if(7===c.tag){if(a.type===S){n(e,c.sibling),(r=o(c,a.props.children)).return=e,e=r;break e}}else if(c.elementType===a.type){n(e,c.sibling),(r=o(c,a.props)).ref=ka(e,c,a),r.return=e,e=r;break e}n(e,c);break}t(e,c),c=c.sibling}a.type===S?((r=Zl(a.props.children,e.mode,l,a.key)).return=e,e=r):((l=Ql(a.type,a.key,a.props,null,e.mode,l)).ref=ka(e,r,a),l.return=e,e=l)}return s(e);case k:e:{for(c=a.key;null!==r;){if(r.key===c){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Xl(a,e.mode,l)).return=e,e=r}return s(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Yl(a,e.mode,l)).return=e,e=r),s(e);if(Ea(a))return h(e,r,a,l);if($(a))return g(e,r,a,l);if(u&&Sa(e,a),void 0===a&&!c)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,Q(e.type)||"Component"))}return n(e,r)}}var xa=Ta(!0),Ra=Ta(!1),Ca={},Oa=lo(Ca),Aa=lo(Ca),Pa=lo(Ca);function Na(e){if(e===Ca)throw Error(i(174));return e}function La(e,t){switch(uo(Pa,t),uo(Aa,e),uo(Oa,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:fe(null,"");break;default:t=fe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}co(Oa),uo(Oa,t)}function Ia(){co(Oa),co(Aa),co(Pa)}function Ma(e){Na(Pa.current);var t=Na(Oa.current),n=fe(t,e.type);t!==n&&(uo(Aa,e),uo(Oa,n))}function Da(e){Aa.current===e&&(co(Oa),co(Aa))}var Fa=lo(0);function Ua(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,ja=null,za=!1;function $a(e,t){var n=Hl(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ga(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Ha(e){if(za){var t=ja;if(t){var n=t;if(!Ga(e,t)){if(!(t=Qr(n.nextSibling))||!Ga(e,t))return e.flags=-1025&e.flags|2,za=!1,void(Ba=e);$a(Ba,n)}Ba=e,ja=Qr(t.firstChild)}else e.flags=-1025&e.flags|2,za=!1,Ba=e}}function qa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Va(e){if(e!==Ba)return!1;if(!za)return qa(e),za=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Gr(t,e.memoizedProps))for(t=ja;t;)$a(e,t),t=Qr(t.nextSibling);if(qa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){ja=Qr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}ja=null}}else ja=Ba?Qr(e.stateNode.nextSibling):null;return!0}function Qa(){ja=Ba=null,za=!1}var Za=[];function Wa(){for(var e=0;e<Za.length;e++)Za[e]._workInProgressVersionPrimary=null;Za.length=0}var Ya=_.ReactCurrentDispatcher,Xa=_.ReactCurrentBatchConfig,Ka=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Ka=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ya.current=null===e||null===e.memoizedState?Ni:Li,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ya.current=Ii,e=n(r,o)}while(ri)}if(Ya.current=Pi,t=null!==ei&&null!==ei.next,Ka=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function li(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ci(e,t){return"function"==typeof t?t(e):t}function ui(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var s=o.next;o.next=a.next,a.next=s}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var l=s=a=null,c=o;do{var u=c.lane;if((Ka&u)===u)null!==l&&(l=l.next={lane:0,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null}),r=c.eagerReducer===e?c.eagerState:e(r,c.action);else{var d={lane:u,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null};null===l?(s=l=d,a=r):l=l.next=d,Ja.lanes|=u,zs|=u}c=c.next}while(null!==c&&c!==o);null===l?a=r:l.next=s,cr(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=l,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{a=e(a,s.action),s=s.next}while(s!==o);cr(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function pi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Ka&e)===e)&&(t._workInProgressVersionPrimary=r,Za.push(t))),e)return n(t._source);throw Za.push(t),Error(i(350))}function fi(e,t,n,r){var o=Ls;if(null===o)throw Error(i(349));var a=t._getVersion,s=a(t._source),l=Ya.current,c=l.useState((function(){return pi(o,t,n)})),u=c[1],d=c[0];c=ti;var p=e.memoizedState,f=p.refs,m=f.getSnapshot,h=p.source;p=p.subscribe;var g=Ja;return e.memoizedState={refs:f,source:t,subscribe:r},l.useEffect((function(){f.getSnapshot=n,f.setSnapshot=u;var e=a(t._source);if(!cr(s,e)){e=n(t._source),cr(d,e)||(u(e),e=fl(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var l=31-Gt(i),c=1<<l;r[l]|=e,i&=~c}}}),[n,t,r]),l.useEffect((function(){return r(t._source,(function(){var e=f.getSnapshot,n=f.setSnapshot;try{n(e(t._source));var r=fl(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),cr(m,n)&&cr(h,t)&&cr(p,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:d}).dispatch=u=Ai.bind(null,Ja,e),c.queue=e,c.baseQueue=null,d=pi(o,t,n),c.memoizedState=c.baseState=d),d}function mi(e,t,n){return fi(li(),e,t,n)}function hi(e){var t=si();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Ai.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function bi(e){return e={current:e},si().memoizedState=e}function yi(){return li().memoizedState}function vi(e,t,n,r){var o=si();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=li();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function _i(e,t){return vi(516,4,e,t)}function Ei(e,t){return wi(516,4,e,t)}function ki(e,t){return wi(4,2,e,t)}function Si(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Ti(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,Si.bind(null,t,e),n)}function xi(){}function Ri(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Oi(e,t){var n=Ho();Vo(98>n?98:n,(function(){e(!0)})),Vo(97<n?97:n,(function(){var n=Xa.transition;Xa.transition=1;try{e(!1),t()}finally{Xa.transition=n}}))}function Ai(e,t,n){var r=pl(),o=fl(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var s=t.lastRenderedState,l=i(s,n);if(a.eagerReducer=i,a.eagerState=l,cr(l,s))return}catch(c){}ml(e,o,r)}}var Pi={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:function(e,t){return si().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:_i,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,vi(4,2,Si.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4,2,e,t)},useMemo:function(e,t){var n=si();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=si();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ai.bind(null,Ja,e),[r.memoizedState,e]},useRef:bi,useState:hi,useDebugValue:xi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return _i((function(){var t=Xa.transition;Xa.transition=1;try{r(e)}finally{Xa.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return bi(e=Oi.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=si();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},fi(r,e,t,n)},useOpaqueIdentifier:function(){if(za){var e=!1,t=function(e){return{$$typeof:M,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Wr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Wr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Wr++).toString(36)),t},unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:Ri,useContext:ia,useEffect:Ei,useImperativeHandle:Ti,useLayoutEffect:ki,useMemo:Ci,useReducer:ui,useRef:yi,useState:function(){return ui(ci)},useDebugValue:xi,useDeferredValue:function(e){var t=ui(ci),n=t[0],r=t[1];return Ei((function(){var t=Xa.transition;Xa.transition=1;try{r(e)}finally{Xa.transition=t}}),[e]),n},useTransition:function(){var e=ui(ci)[0];return[yi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ui(ci)[0]},unstable_isNewReconciler:!1},Ii={readContext:ia,useCallback:Ri,useContext:ia,useEffect:Ei,useImperativeHandle:Ti,useLayoutEffect:ki,useMemo:Ci,useReducer:di,useRef:yi,useState:function(){return di(ci)},useDebugValue:xi,useDeferredValue:function(e){var t=di(ci),n=t[0],r=t[1];return Ei((function(){var t=Xa.transition;Xa.transition=1;try{r(e)}finally{Xa.transition=t}}),[e]),n},useTransition:function(){var e=di(ci)[0];return[yi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ci)[0]},unstable_isNewReconciler:!1},Mi=_.ReactCurrentOwner,Di=!1;function Fi(e,t,n,r){t.child=null===e?Ra(t,null,n,r):xa(t,e.child,n,r)}function Ui(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Fi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,as(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||ql(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ql(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,ji(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?as(e,t,a):(t.flags|=1,(e=Vl(i,r)).ref=t.ref,e.return=t,t.child=e)}function ji(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,as(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return Gi(e,t,n,r,a)}function zi(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},El(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},El(t,e),null;t.memoizedState={baseLanes:0},El(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,El(t,r);return Fi(e,t,o,n),t.child}function $i(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Gi(e,t,n,r,o){var a=bo(n)?ho:fo.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Fi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,as(e,t,o))}function Hi(e,t,n,r,o){if(bo(n)){var a=!0;_o(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),va(t,n,r),_a(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=ia(c):c=go(t,c=bo(n)?ho:fo.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&wa(t,i,r,c),sa=!1;var p=t.memoizedState;i.state=p,fa(t,r,i,o),l=t.memoizedState,s!==r||p!==l||mo.current||sa?("function"==typeof u&&(ga(t,n,u,r),l=t.memoizedState),(s=sa||ya(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ca(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:Xo(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=ia(l):l=go(t,l=bo(n)?ho:fo.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&wa(t,i,r,l),sa=!1,p=t.memoizedState,i.state=p,fa(t,r,i,o);var m=t.memoizedState;s!==d||p!==m||mo.current||sa?("function"==typeof f&&(ga(t,n,f,r),m=t.memoizedState),(c=sa||ya(t,n,c,r,p,m,l))?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),r=!1)}return qi(e,t,n,r,a,o)}function qi(e,t,n,r,o,a){$i(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&Eo(t,n,!1),as(e,t,a);r=t.stateNode,Mi.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=xa(t,e.child,null,a),t.child=xa(t,null,s,a)):Fi(e,t,s,a),t.memoizedState=r.state,o&&Eo(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vo(0,t.context,!1),La(e,t.containerInfo)}var Qi,Zi,Wi,Yi,Xi={dehydrated:null,retryLane:0};function Ki(e,t,n){var r,o=t.pendingProps,a=Fa.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),uo(Fa,1&a),null===e?(void 0!==o.fallback&&Ha(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,t.lanes=33554432,e):((n=Wl({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=ts(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Xi,o):(n=es(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Wl(t,o,0,null),n=Zl(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function es(e,t,n,r){var o=e.child;return e=o.sibling,n=Vl(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function ts(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var s={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=s,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Vl(i,s),null!==e?r=Vl(e,r):(r=Zl(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function ns(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rs(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function os(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Fi(e,t,r.children,n),0!=(2&(r=Fa.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&ns(e,n);else if(19===e.tag)ns(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(uo(Fa,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Ua(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rs(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Ua(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rs(t,!0,n,null,a,t.lastEffect);break;case"together":rs(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function as(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),zs|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Vl(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vl(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function is(e,t){if(!za)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ss(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return bo(t.type)&&yo(),null;case 3:return Ia(),co(mo),co(fo),Wa(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Va(t)?t.flags|=4:r.hydrate||(t.flags|=256)),Zi(t),null;case 5:Da(t);var a=Na(Pa.current);if(n=t.type,null!==e&&null!=t.stateNode)Wi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Na(Oa.current),Va(t)){r=t.stateNode,n=t.type;var s=t.memoizedProps;switch(r[Xr]=t,r[Kr]=s,n){case"dialog":Or("cancel",r),Or("close",r);break;case"iframe":case"object":case"embed":Or("load",r);break;case"video":case"audio":for(e=0;e<Tr.length;e++)Or(Tr[e],r);break;case"source":Or("error",r);break;case"img":case"image":case"link":Or("error",r),Or("load",r);break;case"details":Or("toggle",r);break;case"input":ee(r,s),Or("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!s.multiple},Or("invalid",r);break;case"textarea":le(r,s),Or("invalid",r)}for(var c in ke(n,s),e=null,s)s.hasOwnProperty(c)&&(a=s[c],"children"===c?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):l.hasOwnProperty(c)&&null!=a&&"onScroll"===c&&Or("scroll",r));switch(n){case"input":Y(r),re(r,s,!0);break;case"textarea":Y(r),ue(r);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(c=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=pe(n)),e===de.html?"script"===n?((e=c.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=c.createElement(n,{is:r.is}):(e=c.createElement(n),"select"===n&&(c=e,r.multiple?c.multiple=!0:r.size&&(c.size=r.size))):e=c.createElementNS(e,n),e[Xr]=t,e[Kr]=r,Qi(e,t,!1,!1),t.stateNode=e,c=Se(n,r),n){case"dialog":Or("cancel",e),Or("close",e),a=r;break;case"iframe":case"object":case"embed":Or("load",e),a=r;break;case"video":case"audio":for(a=0;a<Tr.length;a++)Or(Tr[a],e);a=r;break;case"source":Or("error",e),a=r;break;case"img":case"image":case"link":Or("error",e),Or("load",e),a=r;break;case"details":Or("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Or("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Or("invalid",e);break;case"textarea":le(e,r),a=se(e,r),Or("invalid",e);break;default:a=r}ke(n,a);var u=a;for(s in u)if(u.hasOwnProperty(s)){var d=u[s];"style"===s?_e(e,d):"dangerouslySetInnerHTML"===s?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===s?"string"==typeof d?("textarea"!==n||""!==d)&&be(e,d):"number"==typeof d&&be(e,""+d):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(l.hasOwnProperty(s)?null!=d&&"onScroll"===s&&Or("scroll",e):null!=d&&w(e,s,d,c))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ue(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Z(r.value));break;case"select":e.multiple=!!r.multiple,null!=(s=r.value)?ie(e,!!r.multiple,s,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}$r(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Na(Pa.current),Na(Oa.current),Va(t)?(r=t.stateNode,n=t.memoizedProps,r[Xr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Xr]=t,t.stateNode=r)}return null;case 13:return co(Fa),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Va(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Fa.current)?0===Us&&(Us=3):(0!==Us&&3!==Us||(Us=4),null===Ls||0==(134217727&zs)&&0==(134217727&$s)||yl(Ls,Ms))),(r||n)&&(t.flags|=4),null);case 4:return Ia(),Zi(t),null===e&&Pr(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(co(Fa),null===(r=t.memoizedState))return null;if(s=0!=(64&t.flags),null===(c=r.rendering))if(s)is(r,!1);else{if(0!==Us||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(c=Ua(e))){for(t.flags|=64,is(r,!1),null!==(s=c.updateQueue)&&(t.updateQueue=s,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(s=n).flags&=2,s.nextEffect=null,s.firstEffect=null,s.lastEffect=null,null===(c=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=c.childLanes,s.lanes=c.lanes,s.child=c.child,s.memoizedProps=c.memoizedProps,s.memoizedState=c.memoizedState,s.updateQueue=c.updateQueue,s.type=c.type,e=c.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return uo(Fa,1&Fa.current|2),t.child}e=e.sibling}null!==r.tail&&Go()>Vs&&(t.flags|=64,s=!0,is(r,!1),t.lanes=33554432)}else{if(!s)if(null!==(e=Ua(c))){if(t.flags|=64,s=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),is(r,!0),null===r.tail&&"hidden"===r.tailMode&&!c.alternate&&!za)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Go()-r.renderingStartTime>Vs&&1073741824!==n&&(t.flags|=64,s=!0,is(r,!1),t.lanes=33554432);r.isBackwards?(c.sibling=t.child,t.child=c):(null!==(n=r.last)?n.sibling=c:t.child=c,r.last=c)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Go(),n.sibling=null,t=Fa.current,uo(Fa,s?1&t|2:1&t),n):null;case 23:case 24:return kl(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function ls(e){switch(e.tag){case 1:bo(e.type)&&yo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ia(),co(mo),co(fo),Wa(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return co(Fa),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return co(Fa),null;case 4:return Ia(),null;case 10:return ra(e),null;case 23:case 24:return kl(),null;default:return null}}function cs(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function us(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Qi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Zi=function(){},Wi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Na(Oa.current);var i,s=null;switch(n){case"input":a=J(e,a),r=J(e,r),s=[];break;case"option":a=ae(e,a),r=ae(e,r),s=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),s=[];break;case"textarea":a=se(e,a),r=se(e,r),s=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in ke(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var c=a[d];for(i in c)c.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(l.hasOwnProperty(d)?s||(s=[]):(s=s||[]).push(d,null));for(d in r){var u=r[d];if(c=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&u!==c&&(null!=u||null!=c))if("style"===d)if(c){for(i in c)!c.hasOwnProperty(i)||u&&u.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in u)u.hasOwnProperty(i)&&c[i]!==u[i]&&(n||(n={}),n[i]=u[i])}else n||(s||(s=[]),s.push(d,n)),n=u;else"dangerouslySetInnerHTML"===d?(u=u?u.__html:void 0,c=c?c.__html:void 0,null!=u&&c!==u&&(s=s||[]).push(d,u)):"children"===d?"string"!=typeof u&&"number"!=typeof u||(s=s||[]).push(d,""+u):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(l.hasOwnProperty(d)?(null!=u&&"onScroll"===d&&Or("scroll",e),s||c===u||(s=[])):"object"==typeof u&&null!==u&&u.$$typeof===M?u.toString():(s=s||[]).push(d,u))}n&&(s=s||[]).push("style",n);var d=s;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var ds="function"==typeof WeakMap?WeakMap:Map;function ps(e,t,n){(n=ua(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Ys||(Ys=!0,Xs=r),us(0,t)},n}function fs(e,t,n){(n=ua(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return us(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Ks?Ks=new Set([this]):Ks.add(this),us(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ms="function"==typeof WeakSet?WeakSet:Set;function hs(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){jl(e,n)}else t.current=null}function gs(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Xo(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function bs(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Fl(n,e),Dl(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Xo(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&$r(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&_t(n)))))}throw Error(i(163))}function ys(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function vs(e,t){if(So&&"function"==typeof So.onCommitFiberUnmount)try{So.onCommitFiberUnmount(ko,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Fl(t,n);else{r=t;try{o()}catch(a){jl(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hs(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){jl(t,a)}break;case 5:hs(t);break;case 4:Ts(e,t)}}function ws(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function _s(e){return 5===e.tag||3===e.tag||4===e.tag}function Es(e){e:{for(var t=e.return;null!==t;){if(_s(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(be(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||_s(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?ks(e,n,t):Ss(e,n,t)}function ks(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(ks(e,t,n),e=e.sibling;null!==e;)ks(e,t,n),e=e.sibling}function Ss(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(Ss(e,t,n),e=e.sibling;null!==e;)Ss(e,t,n),e=e.sibling}function Ts(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var s=e,l=o,c=l;;)if(vs(s,c),null!==c.child&&4!==c.tag)c.child.return=c,c=c.child;else{if(c===l)break e;for(;null===c.sibling;){if(null===c.return||c.return===l)break e;c=c.return}c.sibling.return=c.return,c=c.sibling}r?(s=n,l=o.stateNode,8===s.nodeType?s.parentNode.removeChild(l):s.removeChild(l)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(vs(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function xs(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Kr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),Se(e,o),t=Se(e,r),o=0;o<a.length;o+=2){var s=a[o],l=a[o+1];"style"===s?_e(n,l):"dangerouslySetInnerHTML"===s?ge(n,l):"children"===s?be(n,l):w(n,s,l,t)}switch(e){case"input":ne(n,r);break;case"textarea":ce(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,_t(n.containerInfo)));case 13:return null!==t.memoizedState&&(qs=Go(),ys(t.child,!0)),void Rs(t);case 19:return void Rs(t);case 23:case 24:return void ys(t,null!==t.memoizedState)}throw Error(i(163))}function Rs(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ms),t.forEach((function(t){var r=$l.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cs(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Os=Math.ceil,As=_.ReactCurrentDispatcher,Ps=_.ReactCurrentOwner,Ns=0,Ls=null,Is=null,Ms=0,Ds=0,Fs=lo(0),Us=0,Bs=null,js=0,zs=0,$s=0,Gs=0,Hs=null,qs=0,Vs=1/0;function Qs(){Vs=Go()+500}var Zs,Ws=null,Ys=!1,Xs=null,Ks=null,Js=!1,el=null,tl=90,nl=[],rl=[],ol=null,al=0,il=null,sl=-1,ll=0,cl=0,ul=null,dl=!1;function pl(){return 0!=(48&Ns)?Go():-1!==sl?sl:sl=Go()}function fl(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Ho()?1:2;if(0===ll&&(ll=js),0!==Yo.transition){0!==cl&&(cl=null!==Hs?Hs.pendingLanes:0),e=ll;var t=4186112&~cl;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Ho(),0!=(4&Ns)&&98===e?e=Bt(12,ll):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ll),e}function ml(e,t,n){if(50<al)throw al=0,il=null,Error(i(185));if(null===(e=hl(e,t)))return null;$t(e,t,n),e===Ls&&($s|=t,4===Us&&yl(e,Ms));var r=Ho();1===t?0!=(8&Ns)&&0==(48&Ns)?vl(e):(gl(e,n),0===Ns&&(Qs(),Zo())):(0==(4&Ns)||98!==r&&99!==r||(null===ol?ol=new Set([e]):ol.add(e)),gl(e,n)),Hs=e}function hl(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gl(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,s=e.pendingLanes;0<s;){var l=31-Gt(s),c=1<<l,u=a[l];if(-1===u){if(0==(c&r)||0!=(c&o)){u=t,Dt(c);var d=Mt;a[l]=10<=d?u+250:6<=d?u+5e3:-1}}else u<=t&&(e.expiredLanes|=c);s&=~c}if(r=Ft(e,e===Ls?Ms:0),t=Mt,0===r)null!==n&&(n!==Fo&&Ro(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Fo&&Ro(n)}15===t?(n=vl.bind(null,e),null===Bo?(Bo=[n],jo=xo(No,Wo)):Bo.push(n),n=Fo):14===t?n=Qo(99,vl.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Qo(n,bl.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function bl(e){if(sl=-1,cl=ll=0,0!=(48&Ns))throw Error(i(327));var t=e.callbackNode;if(Ml()&&e.callbackNode!==t)return null;var n=Ft(e,e===Ls?Ms:0);if(0===n)return null;var r=n,o=Ns;Ns|=16;var a=xl();for(Ls===e&&Ms===r||(Qs(),Sl(e,r));;)try{Ol();break}catch(l){Tl(e,l)}if(na(),As.current=a,Ns=o,null!==Is?r=0:(Ls=null,Ms=0,r=Us),0!=(js&$s))Sl(e,0);else if(0!==r){if(2===r&&(Ns|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Ut(e))&&(r=Rl(e,n))),1===r)throw t=Bs,Sl(e,0),yl(e,n),gl(e,Go()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Nl(e);break;case 3:if(yl(e,n),(62914560&n)===n&&10<(r=qs+500-Go())){if(0!==Ft(e,0))break;if(((o=e.suspendedLanes)&n)!==n){pl(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Hr(Nl.bind(null,e),r);break}Nl(e);break;case 4:if(yl(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var s=31-Gt(n);a=1<<s,(s=r[s])>o&&(o=s),n&=~a}if(n=o,10<(n=(120>(n=Go()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Os(n/1960))-n)){e.timeoutHandle=Hr(Nl.bind(null,e),n);break}Nl(e);break;default:throw Error(i(329))}}return gl(e,Go()),e.callbackNode===t?bl.bind(null,e):null}function yl(e,t){for(t&=~Gs,t&=~$s,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Gt(t),r=1<<n;e[n]=-1,t&=~r}}function vl(e){if(0!=(48&Ns))throw Error(i(327));if(Ml(),e===Ls&&0!=(e.expiredLanes&Ms)){var t=Ms,n=Rl(e,t);0!=(js&$s)&&(n=Rl(e,t=Ft(e,t)))}else n=Rl(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(Ns|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Ut(e))&&(n=Rl(e,t))),1===n)throw n=Bs,Sl(e,0),yl(e,t),gl(e,Go()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Nl(e),gl(e,Go()),null}function wl(e,t){var n=Ns;Ns|=1;try{return e(t)}finally{0===(Ns=n)&&(Qs(),Zo())}}function _l(e,t){var n=Ns;Ns&=-2,Ns|=8;try{return e(t)}finally{0===(Ns=n)&&(Qs(),Zo())}}function El(e,t){uo(Fs,Ds),Ds|=t,js|=t}function kl(){Ds=Fs.current,co(Fs)}function Sl(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,qr(n)),null!==Is)for(n=Is.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&yo();break;case 3:Ia(),co(mo),co(fo),Wa();break;case 5:Da(r);break;case 4:Ia();break;case 13:case 19:co(Fa);break;case 10:ra(r);break;case 23:case 24:kl()}n=n.return}Ls=e,Is=Vl(e.current,null),Ms=Ds=js=t,Us=0,Bs=null,Gs=$s=zs=0}function Tl(e,t){for(;;){var n=Is;try{if(na(),Ya.current=Pi,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Ka=0,ti=ei=Ja=null,ri=!1,Ps.current=null,null===n||null===n.return){Us=1,Bs=t,Is=null;break}e:{var a=e,i=n.return,s=n,l=t;if(t=Ms,s.flags|=2048,s.firstEffect=s.lastEffect=null,null!==l&&"object"==typeof l&&"function"==typeof l.then){var c=l;if(0==(2&s.mode)){var u=s.alternate;u?(s.updateQueue=u.updateQueue,s.memoizedState=u.memoizedState,s.lanes=u.lanes):(s.updateQueue=null,s.memoizedState=null)}var d=0!=(1&Fa.current),p=i;do{var f;if(f=13===p.tag){var m=p.memoizedState;if(null!==m)f=null!==m.dehydrated;else{var h=p.memoizedProps;f=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(f){var g=p.updateQueue;if(null===g){var b=new Set;b.add(c),p.updateQueue=b}else g.add(c);if(0==(2&p.mode)){if(p.flags|=64,s.flags|=16384,s.flags&=-2981,1===s.tag)if(null===s.alternate)s.tag=17;else{var y=ua(-1,1);y.tag=2,da(s,y)}s.lanes|=1;break e}l=void 0,s=t;var v=a.pingCache;if(null===v?(v=a.pingCache=new ds,l=new Set,v.set(c,l)):void 0===(l=v.get(c))&&(l=new Set,v.set(c,l)),!l.has(s)){l.add(s);var w=zl.bind(null,a,c,s);c.then(w,w)}p.flags|=4096,p.lanes=t;break e}p=p.return}while(null!==p);l=Error((Q(s.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Us&&(Us=2),l=cs(l,s),p=i;do{switch(p.tag){case 3:a=l,p.flags|=4096,t&=-t,p.lanes|=t,pa(p,ps(0,a,t));break e;case 1:a=l;var _=p.type,E=p.stateNode;if(0==(64&p.flags)&&("function"==typeof _.getDerivedStateFromError||null!==E&&"function"==typeof E.componentDidCatch&&(null===Ks||!Ks.has(E)))){p.flags|=4096,t&=-t,p.lanes|=t,pa(p,fs(p,a,t));break e}}p=p.return}while(null!==p)}Pl(n)}catch(k){t=k,Is===n&&null!==n&&(Is=n=n.return);continue}break}}function xl(){var e=As.current;return As.current=Pi,null===e?Pi:e}function Rl(e,t){var n=Ns;Ns|=16;var r=xl();for(Ls===e&&Ms===t||Sl(e,t);;)try{Cl();break}catch(o){Tl(e,o)}if(na(),Ns=n,As.current=r,null!==Is)throw Error(i(261));return Ls=null,Ms=0,Us}function Cl(){for(;null!==Is;)Al(Is)}function Ol(){for(;null!==Is&&!Co();)Al(Is)}function Al(e){var t=Zs(e.alternate,e,Ds);e.memoizedProps=e.pendingProps,null===t?Pl(e):Is=t,Ps.current=null}function Pl(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ss(n,t,Ds)))return void(Is=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Ds)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=ls(t)))return n.flags&=2047,void(Is=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Is=t);Is=t=e}while(null!==t);0===Us&&(Us=5)}function Nl(e){var t=Ho();return Vo(99,Ll.bind(null,e,t)),null}function Ll(e,t){do{Ml()}while(null!==el);if(0!=(48&Ns))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var s=e.eventTimes,l=e.expirationTimes;0<a;){var c=31-Gt(a),u=1<<c;o[c]=0,s[c]=-1,l[c]=-1,a&=~u}if(null!==ol&&0==(24&r)&&ol.has(e)&&ol.delete(e),e===Ls&&(Is=Ls=null,Ms=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Ns,Ns|=32,Ps.current=null,jr=Zt,gr(s=hr())){if("selectionStart"in s)l={start:s.selectionStart,end:s.selectionEnd};else e:if(l=(l=s.ownerDocument)&&l.defaultView||window,(u=l.getSelection&&l.getSelection())&&0!==u.rangeCount){l=u.anchorNode,a=u.anchorOffset,c=u.focusNode,u=u.focusOffset;try{l.nodeType,c.nodeType}catch(x){l=null;break e}var d=0,p=-1,f=-1,m=0,h=0,g=s,b=null;t:for(;;){for(var y;g!==l||0!==a&&3!==g.nodeType||(p=d+a),g!==c||0!==u&&3!==g.nodeType||(f=d+u),3===g.nodeType&&(d+=g.nodeValue.length),null!==(y=g.firstChild);)b=g,g=y;for(;;){if(g===s)break t;if(b===l&&++m===a&&(p=d),b===c&&++h===u&&(f=d),null!==(y=g.nextSibling))break;b=(g=b).parentNode}g=y}l=-1===p||-1===f?null:{start:p,end:f}}else l=null;l=l||{start:0,end:0}}else l=null;zr={focusedElem:s,selectionRange:l},Zt=!1,ul=null,dl=!1,Ws=r;do{try{Il()}catch(x){if(null===Ws)throw Error(i(330));jl(Ws,x),Ws=Ws.nextEffect}}while(null!==Ws);ul=null,Ws=r;do{try{for(s=e;null!==Ws;){var v=Ws.flags;if(16&v&&be(Ws.stateNode,""),128&v){var w=Ws.alternate;if(null!==w){var _=w.ref;null!==_&&("function"==typeof _?_(null):_.current=null)}}switch(1038&v){case 2:Es(Ws),Ws.flags&=-3;break;case 6:Es(Ws),Ws.flags&=-3,xs(Ws.alternate,Ws);break;case 1024:Ws.flags&=-1025;break;case 1028:Ws.flags&=-1025,xs(Ws.alternate,Ws);break;case 4:xs(Ws.alternate,Ws);break;case 8:Ts(s,l=Ws);var E=l.alternate;ws(l),null!==E&&ws(E)}Ws=Ws.nextEffect}}catch(x){if(null===Ws)throw Error(i(330));jl(Ws,x),Ws=Ws.nextEffect}}while(null!==Ws);if(_=zr,w=hr(),v=_.focusedElem,s=_.selectionRange,w!==v&&v&&v.ownerDocument&&mr(v.ownerDocument.documentElement,v)){null!==s&&gr(v)&&(w=s.start,void 0===(_=s.end)&&(_=w),"selectionStart"in v?(v.selectionStart=w,v.selectionEnd=Math.min(_,v.value.length)):(_=(w=v.ownerDocument||document)&&w.defaultView||window).getSelection&&(_=_.getSelection(),l=v.textContent.length,E=Math.min(s.start,l),s=void 0===s.end?E:Math.min(s.end,l),!_.extend&&E>s&&(l=s,s=E,E=l),l=fr(v,E),a=fr(v,s),l&&a&&(1!==_.rangeCount||_.anchorNode!==l.node||_.anchorOffset!==l.offset||_.focusNode!==a.node||_.focusOffset!==a.offset)&&((w=w.createRange()).setStart(l.node,l.offset),_.removeAllRanges(),E>s?(_.addRange(w),_.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),_.addRange(w))))),w=[];for(_=v;_=_.parentNode;)1===_.nodeType&&w.push({element:_,left:_.scrollLeft,top:_.scrollTop});for("function"==typeof v.focus&&v.focus(),v=0;v<w.length;v++)(_=w[v]).element.scrollLeft=_.left,_.element.scrollTop=_.top}Zt=!!jr,zr=jr=null,e.current=n,Ws=r;do{try{for(v=e;null!==Ws;){var k=Ws.flags;if(36&k&&bs(v,Ws.alternate,Ws),128&k){w=void 0;var S=Ws.ref;if(null!==S){var T=Ws.stateNode;Ws.tag,w=T,"function"==typeof S?S(w):S.current=w}}Ws=Ws.nextEffect}}catch(x){if(null===Ws)throw Error(i(330));jl(Ws,x),Ws=Ws.nextEffect}}while(null!==Ws);Ws=null,Uo(),Ns=o}else e.current=n;if(Js)Js=!1,el=e,tl=t;else for(Ws=r;null!==Ws;)t=Ws.nextEffect,Ws.nextEffect=null,8&Ws.flags&&((k=Ws).sibling=null,k.stateNode=null),Ws=t;if(0===(r=e.pendingLanes)&&(Ks=null),1===r?e===il?al++:(al=0,il=e):al=0,n=n.stateNode,So&&"function"==typeof So.onCommitFiberRoot)try{So.onCommitFiberRoot(ko,n,void 0,64==(64&n.current.flags))}catch(x){}if(gl(e,Go()),Ys)throw Ys=!1,e=Xs,Xs=null,e;return 0!=(8&Ns)||Zo(),null}function Il(){for(;null!==Ws;){var e=Ws.alternate;dl||null===ul||(0!=(8&Ws.flags)?Je(Ws,ul)&&(dl=!0):13===Ws.tag&&Cs(e,Ws)&&Je(Ws,ul)&&(dl=!0));var t=Ws.flags;0!=(256&t)&&gs(e,Ws),0==(512&t)||Js||(Js=!0,Qo(97,(function(){return Ml(),null}))),Ws=Ws.nextEffect}}function Ml(){if(90!==tl){var e=97<tl?97:tl;return tl=90,Vo(e,Ul)}return!1}function Dl(e,t){nl.push(t,e),Js||(Js=!0,Qo(97,(function(){return Ml(),null})))}function Fl(e,t){rl.push(t,e),Js||(Js=!0,Qo(97,(function(){return Ml(),null})))}function Ul(){if(null===el)return!1;var e=el;if(el=null,0!=(48&Ns))throw Error(i(331));var t=Ns;Ns|=32;var n=rl;rl=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],s=o.destroy;if(o.destroy=void 0,"function"==typeof s)try{s()}catch(c){if(null===a)throw Error(i(330));jl(a,c)}}for(n=nl,nl=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var l=o.create;o.destroy=l()}catch(c){if(null===a)throw Error(i(330));jl(a,c)}}for(l=e.current.firstEffect;null!==l;)e=l.nextEffect,l.nextEffect=null,8&l.flags&&(l.sibling=null,l.stateNode=null),l=e;return Ns=t,Zo(),!0}function Bl(e,t,n){da(e,t=ps(0,t=cs(n,t),1)),t=pl(),null!==(e=hl(e,1))&&($t(e,1,t),gl(e,t))}function jl(e,t){if(3===e.tag)Bl(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bl(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ks||!Ks.has(r))){var o=fs(n,e=cs(t,e),1);if(da(n,o),o=pl(),null!==(n=hl(n,1)))$t(n,1,o),gl(n,o);else if("function"==typeof r.componentDidCatch&&(null===Ks||!Ks.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function zl(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=pl(),e.pingedLanes|=e.suspendedLanes&n,Ls===e&&(Ms&n)===n&&(4===Us||3===Us&&(62914560&Ms)===Ms&&500>Go()-qs?Sl(e,0):Gs|=n),gl(e,t)}function $l(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Ho()?1:2:(0===ll&&(ll=js),0===(t=jt(62914560&~ll))&&(t=4194304))),n=pl(),null!==(e=hl(e,t))&&($t(e,t,n),gl(e,n))}function Gl(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Hl(e,t,n,r){return new Gl(e,t,n,r)}function ql(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vl(e,t){var n=e.alternate;return null===n?((n=Hl(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ql(e,t,n,r,o,a){var s=2;if(r=e,"function"==typeof e)ql(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Zl(n.children,o,a,t);case D:s=8,o|=16;break;case T:s=8,o|=1;break;case x:return(e=Hl(12,n,t,8|o)).elementType=x,e.type=x,e.lanes=a,e;case A:return(e=Hl(13,n,t,o)).type=A,e.elementType=A,e.lanes=a,e;case P:return(e=Hl(19,n,t,o)).elementType=P,e.lanes=a,e;case F:return Wl(n,o,a,t);case U:return(e=Hl(24,n,t,o)).elementType=U,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case R:s=10;break e;case C:s=9;break e;case O:s=11;break e;case N:s=14;break e;case L:s=16,r=null;break e;case I:s=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Hl(s,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function Zl(e,t,n,r){return(e=Hl(7,e,r,t)).lanes=n,e}function Wl(e,t,n,r){return(e=Hl(23,e,r,t)).elementType=F,e.lanes=n,e}function Yl(e,t,n){return(e=Hl(6,e,null,t)).lanes=n,e}function Xl(e,t,n){return(t=Hl(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Kl(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=zt(0),this.expirationTimes=zt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zt(0),this.mutableSourceEagerHydrationData=null}function Jl(e,t,n,r){var o=t.current,a=pl(),s=fl(o);e:if(n){t:{if(We(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var l=n;do{switch(l.tag){case 3:l=l.stateNode.context;break t;case 1:if(bo(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break t}}l=l.return}while(null!==l);throw Error(i(171))}if(1===n.tag){var c=n.type;if(bo(c)){n=wo(n,c,l);break e}}n=l}else n=po;return null===t.context?t.context=n:t.pendingContext=n,(t=ua(a,s)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ml(o,s,a),s}function ec(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nc(e,t){tc(e,t),(e=e.alternate)&&tc(e,t)}function rc(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Kl(e,t,null!=n&&!0===n.hydrate),t=Hl(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,la(t),e[Jr]=n.current,Pr(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function oc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ac(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var s=o;o=function(){var e=ec(i);s.call(e)}}Jl(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new rc(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var l=o;o=function(){var e=ec(i);l.call(e)}}_l((function(){Jl(t,i,e,o)}))}return ec(i)}function ic(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!oc(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}Zs=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Vi(t),Qa();break;case 5:Ma(t);break;case 1:bo(t.type)&&_o(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;uo(Ko,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Ki(e,t,n):(uo(Fa,1&Fa.current),null!==(t=as(e,t,n))?t.sibling:null);uo(Fa,1&Fa.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return os(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),uo(Fa,Fa.current),r)break;return null;case 23:case 24:return t.lanes=0,zi(e,t,n)}return as(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,fo.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,bo(r)){var a=!0;_o(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,la(t);var s=r.getDerivedStateFromProps;"function"==typeof s&&ga(t,r,s,e),o.updater=ba,t.stateNode=o,o._reactInternals=t,_a(t,r,e,n),t=qi(null,t,r,!0,a,n)}else t.tag=0,Fi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return ql(e)?1:0;if(null!=e){if((e=e.$$typeof)===O)return 11;if(e===N)return 14}return 2}(o),e=Xo(o,e),a){case 0:t=Gi(null,t,o,e,n);break e;case 1:t=Hi(null,t,o,e,n);break e;case 11:t=Ui(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Xo(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Gi(e,t,r,o=t.elementType===r?o:Xo(r,o),n);case 1:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Xo(r,o),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ca(e,t),fa(t,r,null,n),(r=t.memoizedState.element)===o)Qa(),t=as(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(ja=Qr(t.stateNode.containerInfo.firstChild),Ba=t,a=za=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],Za.push(a);for(n=Ra(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Fi(e,t,r,n),Qa();t=t.child}return t;case 5:return Ma(t),null===e&&Ha(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,s=o.children,Gr(r,o)?s=null:null!==a&&Gr(r,a)&&(t.flags|=16),$i(e,t),Fi(e,t,s,n),t.child;case 6:return null===e&&Ha(t),null;case 13:return Ki(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=xa(t,null,r,n):Fi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Ui(e,t,r,o=t.elementType===r?o:Xo(r,o),n);case 7:return Fi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,s=t.memoizedProps,a=o.value;var l=t.type._context;if(uo(Ko,l._currentValue),l._currentValue=a,null!==s)if(l=s.value,0===(a=cr(l,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(l,a):1073741823))){if(s.children===o.children&&!mo.current){t=as(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var c=l.dependencies;if(null!==c){s=l.child;for(var u=c.firstContext;null!==u;){if(u.context===r&&0!=(u.observedBits&a)){1===l.tag&&((u=ua(-1,n&-n)).tag=2,da(l,u)),l.lanes|=n,null!==(u=l.alternate)&&(u.lanes|=n),oa(l.return,n),c.lanes|=n;break}u=u.next}}else s=10===l.tag&&l.type===t.type?null:l.child;if(null!==s)s.return=l;else for(s=l;null!==s;){if(s===t){s=null;break}if(null!==(l=s.sibling)){l.return=s.return,s=l;break}s=s.return}l=s}Fi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Fi(e,t,r,n),t.child;case 14:return a=Xo(o=t.type,t.pendingProps),Bi(e,t,o,a=Xo(o.type,a),r,n);case 15:return ji(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Xo(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,bo(r)?(e=!0,_o(t)):e=!1,aa(t,n),va(t,r,o),_a(t,r,o,n),qi(null,t,r,!0,e,n);case 19:return os(e,t,n);case 23:case 24:return zi(e,t,n)}throw Error(i(156,t.tag))},rc.prototype.render=function(e){Jl(e,this._internalRoot,null,null)},rc.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Jl(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ml(e,4,pl()),nc(e,4))},tt=function(e){13===e.tag&&(ml(e,67108864,pl()),nc(e,67108864))},nt=function(e){if(13===e.tag){var t=pl(),n=fl(e);ml(e,n,t),nc(e,n)}},rt=function(e,t){return t()},xe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));X(r),ne(r,o)}}}break;case"textarea":ce(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ne=wl,Le=function(e,t,n,r,o){var a=Ns;Ns|=4;try{return Vo(98,e.bind(null,t,n,r,o))}finally{0===(Ns=a)&&(Qs(),Zo())}},Ie=function(){0==(49&Ns)&&(function(){if(null!==ol){var e=ol;ol=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gl(e,Go())}))}Zo()}(),Ml())},Me=function(e,t){var n=Ns;Ns|=2;try{return e(t)}finally{0===(Ns=n)&&(Qs(),Zo())}};var sc={Events:[no,ro,oo,Ae,Pe,Ml,{current:!1}]},lc={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cc={bundleType:lc.bundleType,version:lc.version,rendererPackageName:lc.rendererPackageName,rendererConfig:lc.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:_.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ke(e))?null:e.stateNode},findFiberByHostInstance:lc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uc=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uc.isDisabled&&uc.supportsFiber)try{ko=uc.inject(cc),So=uc}catch(he){}}t.hydrate=function(e,t,n){if(!oc(t))throw Error(i(200));return ac(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!a(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>q,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),s=n.n(i),l=n(1143),c=n.n(l),u=n(6774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),_={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},E=Object.keys(_).reduce((function(e,t){return e[_[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},S=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},T=function(e){return k(e,"onChangeClientState")||function(){}},x=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},R=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var s=a[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var s=a[i],l=p({},r[s],o[s]);r[s]=l}return e}),[]).reverse()},O=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},A=function(e){return Array.isArray(e)?e.join(""):e},P=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},L=[g.NOSCRIPT,g.SCRIPT,g.STYLE],I=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},M=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[_[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=_[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},U=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=M(n),a=A(t);return o?"<"+e+' data-rh="true" '+o+">"+I(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+I(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return M(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+I(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===L.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=P(e.metaTags,v),a=P(t,b),i=P(n,y);return{priorityMethods:{toComponent:function(){return[].concat(F(g.META,o.priority),F(g.LINK,a.priority),F(g.SCRIPT,i.priority))},toString:function(){return U(g.META,o.priority,r)+" "+U(g.LINK,a.priority,r)+" "+U(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:U(g.BASE,t,r),bodyAttributes:U("bodyAttributes",n,r),htmlAttributes:U("htmlAttributes",o,r),link:U(g.LINK,u,r),meta:U(g.META,d,r),noscript:U(g.NOSCRIPT,a,r),script:U(g.SCRIPT,p,r),style:U(g.STYLE,i,r),title:U(g.TITLE,{title:l,titleAttributes:c},r)}},j=[],z=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?j:n.instances},add:function(e){(n.canUseDOM?j:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?j:n.instances).indexOf(e);(n.canUseDOM?j:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),G=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),H="undefined"!=typeof document,q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new z(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);q.canUseDOM=H,q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},q.defaultProps={context:{}},q.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},Q=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Z=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;Q(g.BODY,e.bodyAttributes),Q(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=A(e)),Q(g.TITLE,t)}(u,d);var p={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,l),styleTags:V(g.STYLE,c)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),s(e,f,m)},W=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:R(["href"],e),bodyAttributes:x("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:x("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:T(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:S(e),titleAttributes:x("titleAttributes",e),prioritizeSeoTags:O(e,"prioritizeSeoTags")});q.canUseDOM?(t=a,W&&cancelAnimationFrame(W),t.defer?W=requestAnimationFrame((function(){Z(t,(function(){W=null}))})):(Z(t),W=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:G.isRequired},Y.displayName="HelmetDispatcher";var X=["children"],K=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case g.BODY:return p({},o,{bodyAttributes:p({},a)});case g.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,X),s=Object.keys(i).reduce((function(e,t){return e[E[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,K),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof z||(a=new z(a.context,a.instances)),a?r.createElement(Y,p({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(Y,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function _(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case l:return e;default:return t}}case o:return t}}}function E(e){return _(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return E(e)||_(e)===u},t.isConcurrentMode=E,t.isContextConsumer=function(e){return _(e)===c},t.isContextProvider=function(e){return _(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return _(e)===p},t.isFragment=function(e){return _(e)===a},t.isLazy=function(e){return _(e)===g},t.isMemo=function(e){return _(e)===h},t.isPortal=function(e){return _(e)===o},t.isProfiler=function(e){return _(e)===s},t.isStrictMode=function(e){return _(e)===i},t.isSuspense=function(e){return _(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=_},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(7294),l=n(5697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return c.push(g),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}a(g,"propTypes",{report:l.func.isRequired}),a(g,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>u,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(2358),s=n(7462),l=n(3366),c=n(8776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},m=a.forwardRef;void 0===m&&(m=f);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==m&&t||n,a.createElement("a",u)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,g=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(g,e.location),e.location),l=r?n.createHref(r):"",h=(0,s.Z)({},y,{href:l,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==m?h.ref=t||b:h.innerRef=b,a.createElement(o,h)}))})),b=function(e){return e},y=a.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,f=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,_=e.sensitive,E=e.strict,k=e.style,S=e.to,T=e.innerRef,x=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,i=p(d(S,n),n),l=i.pathname,R=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=R?(0,r.LX)(n.pathname,{path:R,exact:h,sensitive:_,strict:E}):null,O=!!(v?v(C,n):C),A="function"==typeof m?m(O):m,P="function"==typeof k?k(O):k;O&&(A=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(A,u),P=(0,s.Z)({},P,f));var N=(0,s.Z)({"aria-current":O&&o||null,className:A,style:P,to:i},x);return b!==y?N.ref=t||T:N.innerRef=T,a.createElement(g,N)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>A,F0:()=>v,LX:()=>O,TH:()=>B,k6:()=>U,l_:()=>T,rs:()=>D,s6:()=>y});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),s=n(2358),l=n(8776),c=n(7462),u=n(4779),d=n.n(u),p=(n(9864),n(3366)),f=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},o.getValue=function(){return this.context[s]?this.context[s].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[s]=i().object,a),{Provider:l,Consumer:c}},g=function(e){var t=h();return t.displayName=e,t},b=g("Router-History"),y=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;var w=function(e){function t(){return e.apply(this,arguments)||this}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.props.onMount&&this.props.onMount.call(this,this)},n.componentDidUpdate=function(e){this.props.onUpdate&&this.props.onUpdate.call(this,this,e)},n.componentWillUnmount=function(){this.props.onUnmount&&this.props.onUnmount.call(this,this)},n.render=function(){return null},t}(o.Component);var _={},E=1e4,k=0;function S(e,t){return void 0===e&&(e="/"),void 0===t&&(t={}),"/"===e?e:function(e){if(_[e])return _[e];var t=d().compile(e);return k<E&&(_[e]=t,k++),t}(e)(t,{pretty:!0})}function T(e){var t=e.computedMatch,n=e.to,r=e.push,a=void 0!==r&&r;return o.createElement(y.Consumer,null,(function(e){e||(0,l.Z)(!1);var r=e.history,i=e.staticContext,u=a?r.push:r.replace,d=(0,s.ob)(t?"string"==typeof n?S(n,t.params):(0,c.Z)({},n,{pathname:S(n.pathname,t.params)}):n);return i?(u(d),null):o.createElement(w,{onMount:function(){u(d)},onUpdate:function(e,t){var n=(0,s.ob)(t.to);(0,s.Hp)(n,(0,c.Z)({},d,{key:n.key}))||u(d)},to:n})}))}var x={},R=1e4,C=0;function O(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=x[n]||(x[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return C<R&&(r[e]=a,C++),a}(n,{end:a,strict:s,sensitive:c}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var A=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?O(n.pathname,e.props):t.match,a=(0,c.Z)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(y.Provider,{value:a},a.match?s?"function"==typeof s?s(a):s:u?o.createElement(u,a):d?d(a):null:"function"==typeof s?s(a):null)}))},t}(o.Component);function P(e){return"/"===e.charAt(0)?e:"/"+e}function N(e,t){if(!e)return t;var n=P(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function L(e){return"string"==typeof e?e:(0,s.Ep)(e)}function I(e){return function(){(0,l.Z)(!1)}}function M(){}o.Component;var D=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?O(a.pathname,(0,c.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var F=o.useContext;function U(){return F(b)}function B(){return F(y).location}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,s=60110,l=60112;t.Suspense=60113;var c=60115,u=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),s=d("react.context"),l=d("react.forward_ref"),t.Suspense=d("react.suspense"),c=d("react.memo"),u=d("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function f(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function b(){}function y(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(f(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},b.prototype=g.prototype;var v=y.prototype=new b;v.constructor=y,r(v,g.prototype),v.isPureReactComponent=!0;var w={current:null},_=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)_.call(t,r)&&!E.hasOwnProperty(r)&&(a[r]=t[r]);var l=arguments.length-2;if(1===l)a.children=n;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===a[r]&&(a[r]=l[r]);return{$$typeof:o,type:e,key:i,ref:s,props:a,_owner:w.current}}function S(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var T=/\/+/g;function x(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function R(e,t,n,r,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case o:case a:l=!0}}if(l)return i=i(l=e),e=""===r?"."+x(l,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(T,"$&/")+"/"),R(i,t,n,"",(function(e){return e}))):null!=i&&(S(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(l=0,r=""===r?".":r+":",Array.isArray(e))for(var c=0;c<e.length;c++){var u=r+x(s=e[c],c);l+=R(s,t,n,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=R(s=s.value,t,n,u=r+x(s,c++),i);else if("object"===s)throw t=""+e,Error(f(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return l}function C(e,t,n){if(null==e)return e;var r=[],o=0;return R(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function O(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var A={current:null};function P(){var e=A.current;if(null===e)throw Error(f(321));return e}var N={ReactCurrentDispatcher:A,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!S(e))throw Error(f(143));return e}},t.Component=g,t.PureComponent=y,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(f(267,e));var a=r({},e.props),i=e.key,s=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,l=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)_.call(t,u)&&!E.hasOwnProperty(u)&&(a[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)a.children=n;else if(1<u){c=Array(u);for(var d=0;d<u;d++)c[d]=arguments[d+2];a.children=c}return{$$typeof:o,type:e.type,key:i,ref:s,props:a,_owner:l}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=S,t.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:O}},t.memo=function(e,t){return{$$typeof:c,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return P().useCallback(e,t)},t.useContext=function(e,t){return P().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return P().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return P().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return P().useLayoutEffect(e,t)},t.useMemo=function(e,t){return P().useMemo(e,t)},t.useReducer=function(e,t,n){return P().useReducer(e,t,n)},t.useRef=function(e){return P().useRef(e)},t.useState=function(e){return P().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var c=null,u=null,d=function(){if(null!==c)try{var e=t.unstable_now();c(!0,e),c=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==c?setTimeout(n,0,e):(c=e,setTimeout(d,0))},r=function(e,t){u=setTimeout(e,t)},o=function(){clearTimeout(u)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var p=window.setTimeout,f=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,b=-1,y=5,v=0;t.unstable_shouldYield=function(){return t.unstable_now()>=v},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):y=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,_=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();v=e+y;try{g(!0,e)?_.postMessage(null):(h=!1,g=null)}catch(n){throw _.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,_.postMessage(null))},r=function(e,n){b=p((function(){e(t.unstable_now())}),n)},o=function(){f(b),b=-1}}function E(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<T(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function S(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],s=a+1,l=e[s];if(void 0!==i&&0>T(i,n))void 0!==l&&0>T(l,i)?(e[r]=l,e[s]=n,r=s):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==l&&0>T(l,n)))break e;e[r]=l,e[s]=n,r=s}}}return t}return null}function T(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var x=[],R=[],C=1,O=null,A=3,P=!1,N=!1,L=!1;function I(e){for(var t=k(R);null!==t;){if(null===t.callback)S(R);else{if(!(t.startTime<=e))break;S(R),t.sortIndex=t.expirationTime,E(x,t)}t=k(R)}}function M(e){if(L=!1,I(e),!N)if(null!==k(x))N=!0,n(D);else{var t=k(R);null!==t&&r(M,t.startTime-e)}}function D(e,n){N=!1,L&&(L=!1,o()),P=!0;var a=A;try{for(I(n),O=k(x);null!==O&&(!(O.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=O.callback;if("function"==typeof i){O.callback=null,A=O.priorityLevel;var s=i(O.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?O.callback=s:O===k(x)&&S(x),I(n)}else S(x);O=k(x)}if(null!==O)var l=!0;else{var c=k(R);null!==c&&r(M,c.startTime-n),l=!1}return l}finally{O=null,A=a,P=!1}}var F=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||P||(N=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return A},t.unstable_getFirstCallbackNode=function(){return k(x)},t.unstable_next=function(e){switch(A){case 1:case 2:case 3:var t=3;break;default:t=A}var n=A;A=t;try{return e()}finally{A=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=A;A=e;try{return t()}finally{A=n}},t.unstable_scheduleCallback=function(e,a,i){var s=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?s+i:s:i=s,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:l=i+l,sortIndex:-1},i>s?(e.sortIndex=i,E(R,e),null===k(x)&&e===k(R)&&(L?o():L=!0,r(M,i-s))):(e.sortIndex=l,E(x,e),N||P||(N=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=A;return function(){var n=A;A=t;try{return e.apply(this,arguments)}finally{A=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,s=r.useLayoutEffect,l=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,u=r[1];return s((function(){o.value=n,o.getSnapshot=t,c(o)&&u({inst:o})}),[e,n,t]),i((function(){return c(o)&&u({inst:o}),e((function(){c(o)&&u({inst:o})}))}),[e]),l(n),n};void 0!==r.useSyncExternalStore&&r.useSyncExternalStore},1688:(e,t,n)=>{"use strict";n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"eCalc\u2122 Docs",tagline:"Documentation for eCalc\u2122",url:"https://equinor.github.io",baseUrl:"/ecalc/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"throw",favicon:"img/favicon.svg",organizationName:"equinor",projectName:"ecalc",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{sidebarPath:"/home/runner/work/ecalc/ecalc/docs/sidebars.js",editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/",remarkPlugins:[null,null],rehypePlugins:[null]},blog:!1,theme:{customCss:"/home/runner/work/ecalc/ecalc/docs/src/css/custom.css"}}]],themeConfig:{navbar:{title:"",logo:{alt:"eCalc Logo",src:"img/logo.svg",href:"/"},items:[{type:"docSidebar",sidebarId:"about",position:"left",label:"Docs"},{type:"docSidebar",sidebarId:"contribute",position:"left",label:"Contribute"},{type:"docSidebar",sidebarId:"changelog",position:"left",label:"Changelog"},{href:"https://github.com/equinor/ecalc",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"More",items:[{label:"GitHub",href:"https://github.com/equinor/ecalc"}]}],copyright:"eCalc\u2122 Copyright \xa9 2023 Equinor ASA. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}},{className:"code-block-old-line",line:"This is old",block:{start:"highlight-old-start",end:"highlight-old-end"}},{className:"code-block-new-line",line:"This is new",block:{start:"highlight-new-start",end:"highlight-new-end"}}],additionalLanguages:[]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},stylesheets:[{href:"/ecalc/katex/katex.min.css",type:"text/css"}],themes:[["/home/runner/work/ecalc/ecalc/docs/node_modules/@easyops-cn/docusaurus-search-local/dist/server/server/index.js",{hashed:!0,explicitSearchResultPath:!0}]],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],scripts:[],headTags:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/ecalc/docs/tags-e4c":{"__comp":"3720c009","__context":{"plugin":"977fea76"},"tags":"55960ee5"},"/ecalc/docs/tags/e-calc-f4b":{"__comp":"df203c0f","__context":{"plugin":"977fea76"},"tag":"b8c59810"},"/ecalc/docs/tags/release-2ab":{"__comp":"df203c0f","__context":{"plugin":"977fea76"},"tag":"41d1792a"},"/ecalc/search-bdd":{"__comp":"1a4e3797","__context":{"plugin":"b2781c74"}},"/ecalc/versions-284":{"__comp":"fa17a3e5","__context":{"plugin":"f85d2ba9"},"config":"5e9f5e1a"},"/ecalc/docs-049":{"__comp":"1be78505","__context":{"plugin":"977fea76"},"versionMetadata":"935f2afb"},"/ecalc/docs/about/-a31":{"__comp":"17896441","content":"1f60d0d4"},"/ecalc/docs/about/getting_started/-123":{"__comp":"17896441","content":"1c663d3d"},"/ecalc/docs/about/getting_started/cli/-d3b":{"__comp":"17896441","content":"dfbab2f3"},"/ecalc/docs/about/getting_started/cli/faq-97e":{"__comp":"17896441","content":"496ed8d5"},"/ecalc/docs/about/getting_started/library/-d50":{"__comp":"17896441","content":"0425b884"},"/ecalc/docs/about/getting_started/yaml/-cec":{"__comp":"17896441","content":"e1df8231"},"/ecalc/docs/about/migration_guides/-b3e":{"__comp":"17896441","content":"40d6382c"},"/ecalc/docs/about/migration_guides/v7_to_v8-313":{"__comp":"17896441","content":"7557b935"},"/ecalc/docs/about/migration_guides/v8_to_v81-7ca":{"__comp":"17896441","content":"4aa4fc36"},"/ecalc/docs/about/migration_guides/v8-1_to_v8-2-14c":{"__comp":"17896441","content":"5c08a402"},"/ecalc/docs/about/migration_guides/v8-2_to_v8-3-273":{"__comp":"17896441","content":"af105519"},"/ecalc/docs/about/migration_guides/v8-3_to_v8-4-115":{"__comp":"17896441","content":"721cfe60"},"/ecalc/docs/about/miscellaneous/-b76":{"__comp":"17896441","content":"a5dcc804"},"/ecalc/docs/about/modelling/-d6a":{"__comp":"17896441","content":"bb45b332"},"/ecalc/docs/about/modelling/examples/-e7e":{"__comp":"17896441","content":"0fd76486"},"/ecalc/docs/about/modelling/examples/advanced-362":{"__comp":"17896441","content":"2781f0ad"},"/ecalc/docs/about/modelling/examples/drogon-966":{"__comp":"17896441","content":"f54e894e"},"/ecalc/docs/about/modelling/examples/simple-257":{"__comp":"17896441","content":"7cebed78"},"/ecalc/docs/about/modelling/setup/-dff":{"__comp":"17896441","content":"e8ebc025"},"/ecalc/docs/about/modelling/setup/facility_inputs/-1cc":{"__comp":"17896441","content":"43a1031a"},"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling-f62":{"__comp":"17896441","content":"fa3d98bd"},"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/-592":{"__comp":"17896441","content":"43a26e71"},"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts-2c2":{"__comp":"17896441","content":"00bdc23f"},"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model-04c":{"__comp":"17896441","content":"7e6991bb"},"/ecalc/docs/about/modelling/setup/facility_inputs/tabular-542":{"__comp":"17896441","content":"66286265"},"/ecalc/docs/about/modelling/setup/file_format_and_syntax/-0e3":{"__comp":"17896441","content":"e9e63826"},"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions-d12":{"__comp":"17896441","content":"8961bfac"},"/ecalc/docs/about/modelling/setup/fuel_types-620":{"__comp":"17896441","content":"498bfcff"},"/ecalc/docs/about/modelling/setup/installations/-99b":{"__comp":"17896441","content":"7db788f5"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/-9b9":{"__comp":"17896441","content":"ad129716"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor-c00":{"__comp":"17896441","content":"fa0b6059"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system-0e8":{"__comp":"17896441","content":"6adcc868"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures-65b":{"__comp":"17896441","content":"69fd9be6"},"/ecalc/docs/about/modelling/setup/installations/direct_consumers-d56":{"__comp":"17896441","content":"d5cd246e"},"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations-f2a":{"__comp":"17896441","content":"edb3a98b"},"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations-2f5":{"__comp":"17896441","content":"fe44757f"},"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations-d10":{"__comp":"17896441","content":"5e10e9e1"},"/ecalc/docs/about/modelling/setup/models/-15b":{"__comp":"17896441","content":"a2e97e20"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/-c1c":{"__comp":"17896441","content":"5c8ec56d"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/-5eb":{"__comp":"17896441","content":"f577f5c2"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/-b0e":{"__comp":"17896441","content":"9e136365"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model-f09":{"__comp":"17896441","content":"33498b04"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model-e08":{"__comp":"17896441","content":"163041ea"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model-de2":{"__comp":"17896441","content":"2ce3b5da"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures-2fb":{"__comp":"17896441","content":"4b80f681"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/-fb2":{"__comp":"17896441","content":"9e91bf8d"},"/ecalc/docs/about/modelling/setup/models/fluid_model-849":{"__comp":"17896441","content":"4b5a01f9"},"/ecalc/docs/about/modelling/setup/models/turbine_modeling-0f3":{"__comp":"17896441","content":"841adc37"},"/ecalc/docs/about/modelling/setup/time_series-b2a":{"__comp":"17896441","content":"f52ed7e3"},"/ecalc/docs/about/modelling/setup/variables-5f7":{"__comp":"17896441","content":"9a118db7"},"/ecalc/docs/about/modelling/theory/-6a0":{"__comp":"17896441","content":"f054b415"},"/ecalc/docs/about/modelling/theory/compressor_modelling-0df":{"__comp":"17896441","content":"38d592cf"},"/ecalc/docs/about/modelling/theory/pump_modelling-c3a":{"__comp":"17896441","content":"3409ab5c"},"/ecalc/docs/about/modelling/workflow/-9a1":{"__comp":"17896441","content":"7b02141e"},"/ecalc/docs/about/modelling/workflow/generic_workflow-b21":{"__comp":"17896441","content":"2cedaf2f"},"/ecalc/docs/about/references/-5da":{"__comp":"17896441","content":"4ee97ba8"},"/ecalc/docs/about/references/api/-225":{"__comp":"17896441","content":"d2eeb42a"},"/ecalc/docs/about/references/cli_reference-b63":{"__comp":"17896441","content":"c3d1f0cd"},"/ecalc/docs/about/references/keywords/-424":{"__comp":"17896441","content":"f571fee5"},"/ecalc/docs/about/references/keywords/ADJUSTMENT-265":{"__comp":"17896441","content":"b2773e31"},"/ecalc/docs/about/references/keywords/CATEGORY-de9":{"__comp":"17896441","content":"b2b17913"},"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL-8c1":{"__comp":"17896441","content":"d77448ee"},"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM-8f7":{"__comp":"17896441","content":"c9b29382"},"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL-9b6":{"__comp":"17896441","content":"cc88a418"},"/ecalc/docs/about/references/keywords/CONDITION-b74":{"__comp":"17896441","content":"00440000"},"/ecalc/docs/about/references/keywords/CONDITIONS-ea9":{"__comp":"17896441","content":"e7fdd821"},"/ecalc/docs/about/references/keywords/CONSTANT-bea":{"__comp":"17896441","content":"f4fe2bc2"},"/ecalc/docs/about/references/keywords/CONSUMERS-15f":{"__comp":"17896441","content":"c93dcb87"},"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE-f62":{"__comp":"17896441","content":"7c623a68"},"/ecalc/docs/about/references/keywords/CONTROL_MARGIN-b71":{"__comp":"17896441","content":"b0a5d2c7"},"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT-415":{"__comp":"17896441","content":"502e1773"},"/ecalc/docs/about/references/keywords/CROSSOVER-55f":{"__comp":"17896441","content":"66a649c0"},"/ecalc/docs/about/references/keywords/CURVE-aa7":{"__comp":"17896441","content":"3b0e82f8"},"/ecalc/docs/about/references/keywords/CURVES-429":{"__comp":"17896441","content":"382d59b5"},"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS-8cf":{"__comp":"17896441","content":"295f424e"},"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE-16d":{"__comp":"17896441","content":"9e7755e6"},"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL-efb":{"__comp":"17896441","content":"084f7ebf"},"/ecalc/docs/about/references/keywords/EFFICIENCY-f47":{"__comp":"17896441","content":"4da8ac19"},"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL-1f9":{"__comp":"17896441","content":"0f7b5825"},"/ecalc/docs/about/references/keywords/EMISSION_NAME-29b":{"__comp":"17896441","content":"6bd3279d"},"/ecalc/docs/about/references/keywords/EMISSION_RATE-d80":{"__comp":"17896441","content":"51ad0f66"},"/ecalc/docs/about/references/keywords/EMISSIONS-e05":{"__comp":"17896441","content":"5989d566"},"/ecalc/docs/about/references/keywords/EMITTER_MODEL-c46":{"__comp":"17896441","content":"54094f37"},"/ecalc/docs/about/references/keywords/END-8f6":{"__comp":"17896441","content":"06dd1efa"},"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL-55a":{"__comp":"17896441","content":"df3c944d"},"/ecalc/docs/about/references/keywords/ENERGYFUNCTION-f2d":{"__comp":"17896441","content":"29d00dd8"},"/ecalc/docs/about/references/keywords/EXPRESSION-6c2":{"__comp":"17896441","content":"86262f09"},"/ecalc/docs/about/references/keywords/EXTRAPOLATION-b1f":{"__comp":"17896441","content":"5a5e553d"},"/ecalc/docs/about/references/keywords/FACILITY_INPUTS-070":{"__comp":"17896441","content":"5e3ed04b"},"/ecalc/docs/about/references/keywords/FACTOR-7d6":{"__comp":"17896441","content":"ccf7588a"},"/ecalc/docs/about/references/keywords/FILE-642":{"__comp":"17896441","content":"cbe196b2"},"/ecalc/docs/about/references/keywords/FLUID_DENSITY-c60":{"__comp":"17896441","content":"f59fd0ba"},"/ecalc/docs/about/references/keywords/FLUID_MODEL-2fd":{"__comp":"17896441","content":"d547c67b"},"/ecalc/docs/about/references/keywords/FUEL-c8b":{"__comp":"17896441","content":"e0edce1a"},"/ecalc/docs/about/references/keywords/FUEL_TYPES-a2e":{"__comp":"17896441","content":"2df92a48"},"/ecalc/docs/about/references/keywords/FUELCONSUMERS-aee":{"__comp":"17896441","content":"61639be2"},"/ecalc/docs/about/references/keywords/FUELRATE-255":{"__comp":"17896441","content":"7514af75"},"/ecalc/docs/about/references/keywords/GENERATORSETS-d03":{"__comp":"17896441","content":"15962da1"},"/ecalc/docs/about/references/keywords/HCEXPORT-ccb":{"__comp":"17896441","content":"3810e8e5"},"/ecalc/docs/about/references/keywords/HEAD-b50":{"__comp":"17896441","content":"0aeda122"},"/ecalc/docs/about/references/keywords/HEAD_MARGIN-794":{"__comp":"17896441","content":"3aeef25a"},"/ecalc/docs/about/references/keywords/include-80e":{"__comp":"17896441","content":"ec96df16"},"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR-423":{"__comp":"17896441","content":"29367e59"},"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE-dc7":{"__comp":"17896441","content":"90184672"},"/ecalc/docs/about/references/keywords/INSTALLATIONS-ed5":{"__comp":"17896441","content":"e023757a"},"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE-13e":{"__comp":"17896441","content":"3261da49"},"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE-47e":{"__comp":"17896441","content":"e862d0e9"},"/ecalc/docs/about/references/keywords/LOAD-cc8":{"__comp":"17896441","content":"cb266b33"},"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE-d7b":{"__comp":"17896441","content":"f5b92c38"},"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE-bf3":{"__comp":"17896441","content":"22f0e129"},"/ecalc/docs/about/references/keywords/MODELS-a5a":{"__comp":"17896441","content":"c21bc46a"},"/ecalc/docs/about/references/keywords/NAME-d44":{"__comp":"17896441","content":"2b15d891"},"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS-3da":{"__comp":"17896441","content":"d2b7592b"},"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT-330":{"__comp":"17896441","content":"97732f4b"},"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR-f94":{"__comp":"17896441","content":"06adec10"},"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL-dd5":{"__comp":"17896441","content":"4c3c1dc2"},"/ecalc/docs/about/references/keywords/PRICE-068":{"__comp":"17896441","content":"e4be5833"},"/ecalc/docs/about/references/keywords/PUMPS-6dd":{"__comp":"17896441","content":"b15ba3bd"},"/ecalc/docs/about/references/keywords/QUOTA-c0c":{"__comp":"17896441","content":"83665776"},"/ecalc/docs/about/references/keywords/RATE-a33":{"__comp":"17896441","content":"1300feb7"},"/ecalc/docs/about/references/keywords/RATE_FRACTIONS-d5a":{"__comp":"17896441","content":"b677d687"},"/ecalc/docs/about/references/keywords/RATE_PER_STREAM-b6a":{"__comp":"17896441","content":"074935d7"},"/ecalc/docs/about/references/keywords/REGULARITY-3a2":{"__comp":"17896441","content":"2c19a041"},"/ecalc/docs/about/references/keywords/STAGES-a5c":{"__comp":"17896441","content":"4147f87e"},"/ecalc/docs/about/references/keywords/START-c55":{"__comp":"17896441","content":"10c684b0"},"/ecalc/docs/about/references/keywords/STREAM-d9a":{"__comp":"17896441","content":"577efb1d"},"/ecalc/docs/about/references/keywords/STREAMS-3c3":{"__comp":"17896441","content":"d17664a7"},"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE-45c":{"__comp":"17896441","content":"3fbb770c"},"/ecalc/docs/about/references/keywords/TAX-7d6":{"__comp":"17896441","content":"071a0eb8"},"/ecalc/docs/about/references/keywords/TIME_SERIES-56f":{"__comp":"17896441","content":"676abc7a"},"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE-0e8":{"__comp":"17896441","content":"d185ab52"},"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES-5ab":{"__comp":"17896441","content":"70f31d65"},"/ecalc/docs/about/references/keywords/TURBINE_LOAD-5a2":{"__comp":"17896441","content":"c5daebe9"},"/ecalc/docs/about/references/keywords/TURBINE_MODEL-0df":{"__comp":"17896441","content":"9e4a10de"},"/ecalc/docs/about/references/keywords/TYPE-9b2":{"__comp":"17896441","content":"72083b41"},"/ecalc/docs/about/references/keywords/UNITS-5a9":{"__comp":"17896441","content":"880bbd08"},"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL-bd0":{"__comp":"17896441","content":"11516e85"},"/ecalc/docs/about/references/keywords/VARIABLES-f4e":{"__comp":"17896441","content":"07b341f3"},"/ecalc/docs/category/documentation-cd3":{"__comp":"14eb3368","categoryGeneratedIndex":"d5b0ea4b"},"/ecalc/docs/category/guides-0bf":{"__comp":"14eb3368","categoryGeneratedIndex":"1e7de7fe"},"/ecalc/docs/changelog/-b3d":{"__comp":"17896441","content":"428320b6"},"/ecalc/docs/changelog/latest-045":{"__comp":"17896441","content":"fb7e7841"},"/ecalc/docs/changelog/separator-796":{"__comp":"17896441","content":"2f04f592"},"/ecalc/docs/changelog/v7-0-release-2b8":{"__comp":"17896441","content":"2b2be347"},"/ecalc/docs/changelog/v7-1-release-6a0":{"__comp":"17896441","content":"bdf25f4c"},"/ecalc/docs/changelog/v7-2-release-ac2":{"__comp":"17896441","content":"45c974ba"},"/ecalc/docs/changelog/v7-3-release-783":{"__comp":"17896441","content":"c90bf1e8"},"/ecalc/docs/changelog/v7-4-release-2af":{"__comp":"17896441","content":"7d3b81bb"},"/ecalc/docs/changelog/v7-5-release-753":{"__comp":"17896441","content":"eee46244"},"/ecalc/docs/changelog/v7-6-release-bab":{"__comp":"17896441","content":"cda37ba5"},"/ecalc/docs/changelog/v8.0-release-4b0":{"__comp":"17896441","content":"bfdf430b"},"/ecalc/docs/changelog/v8.1-release-074":{"__comp":"17896441","content":"e2712b99"},"/ecalc/docs/changelog/v8.2-release-249":{"__comp":"17896441","content":"fba8a418"},"/ecalc/docs/changelog/v8.3-release-7c0":{"__comp":"17896441","content":"3e38e310"},"/ecalc/docs/changelog/v8.4-release-2a6":{"__comp":"17896441","content":"47daf389"},"/ecalc/docs/changelog/v8.5-release-5a0":{"__comp":"17896441","content":"0745e7f0"},"/ecalc/docs/contribute/documentation-guide/documentation-65b":{"__comp":"17896441","content":"d19423a2"},"/ecalc/docs/contribute/documentation-guide/markdown-de5":{"__comp":"17896441","content":"60746895"},"/ecalc/docs/contribute/get-started-873":{"__comp":"17896441","content":"c8caddd1"},"/ecalc/docs/contribute/guides/conventional-commits-573":{"__comp":"17896441","content":"2c73e373"},"/ecalc/docs/contribute/guides/git-151":{"__comp":"17896441","content":"1287dd43"},"/ecalc/-94a":{"__comp":"1df93b7f","__context":{"plugin":"f85d2ba9"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=7221,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.6e0d906c.js.LICENSE.txt b/assets/js/main.6e0d906c.js.LICENSE.txt new file mode 100644 index 0000000000..2c826395b9 --- /dev/null +++ b/assets/js/main.6e0d906c.js.LICENSE.txt @@ -0,0 +1,125 @@ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * @license React + * use-sync-external-store-shim.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + */ + +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +/** @license React v0.20.2 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/runtime~main.6c4e50e5.js b/assets/js/runtime~main.6c4e50e5.js new file mode 100644 index 0000000000..8432d07b8b --- /dev/null +++ b/assets/js/runtime~main.6c4e50e5.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,d,b,a,f,c={},t={};function r(e){var d=t[e];if(void 0!==d)return d.exports;var b=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(b.exports,b,b.exports,r),b.loaded=!0,b.exports}r.m=c,r.c=t,e=[],r.O=(d,b,a,f)=>{if(!b){var c=1/0;for(i=0;i<e.length;i++){b=e[i][0],a=e[i][1],f=e[i][2];for(var t=!0,o=0;o<b.length;o++)(!1&f||c>=f)&&Object.keys(r.O).every((e=>r.O[e](b[o])))?b.splice(o--,1):(t=!1,f<c&&(c=f));if(t){e.splice(i--,1);var n=a();void 0!==n&&(d=n)}}return d}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[b,a,f]},r.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return r.d(d,{a:d}),d},b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var c={};d=d||[null,b({}),b([]),b(b)];for(var t=2&a&&e;"object"==typeof t&&!~d.indexOf(t);t=b(t))Object.getOwnPropertyNames(t).forEach((d=>c[d]=()=>e[d]));return c.default=()=>e,r.d(f,c),f},r.d=(e,d)=>{for(var b in d)r.o(d,b)&&!r.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:d[b]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((d,b)=>(r.f[b](e,d),d)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",180:"66286265",262:"b677d687",381:"33498b04",443:"5e10e9e1",505:"f571fee5",517:"e1df8231",628:"577efb1d",639:"6bd3279d",749:"498bfcff",754:"ad129716",770:"f54e894e",856:"7557b935",925:"3b0e82f8",996:"15962da1",1042:"074935d7",1044:"4aa4fc36",1110:"5a5e553d",1310:"7c623a68",1398:"38d592cf",1404:"2b2be347",1487:"e4be5833",1668:"4ee97ba8",1686:"d19423a2",1709:"5989d566",1728:"edb3a98b",1748:"41d1792a",2e3:"cc88a418",2013:"c5daebe9",2017:"3409ab5c",2040:"7e6991bb",2153:"06adec10",2205:"5e3ed04b",2206:"496ed8d5",2225:"2b15d891",2459:"45c974ba",2488:"f85d2ba9",2547:"b15ba3bd",2562:"f59fd0ba",2638:"7b02141e",2655:"2c73e373",2693:"502e1773",2706:"cb266b33",2991:"d5b0ea4b",3054:"11516e85",3074:"7db788f5",3091:"3261da49",3108:"f4fe2bc2",3172:"54094f37",3173:"29367e59",3181:"fa17a3e5",3190:"b2b17913",3211:"4b5a01f9",3237:"1df93b7f",3240:"66a649c0",3305:"d2b7592b",3315:"880bbd08",3414:"b0a5d2c7",3443:"c21bc46a",3596:"2df92a48",3700:"1287dd43",3751:"3720c009",3787:"2781f0ad",3802:"721cfe60",3847:"084f7ebf",3902:"e8ebc025",4025:"bdf25f4c",4069:"0745e7f0",4070:"5c8ec56d",4075:"61639be2",4103:"bb45b332",4121:"55960ee5",4168:"c93dcb87",4189:"cda37ba5",4199:"af105519",4278:"b2781c74",4395:"9e4a10de",4405:"b2773e31",4441:"d5cd246e",4466:"fb7e7841",4507:"2c19a041",4631:"9e91bf8d",4733:"c3d1f0cd",4734:"cbe196b2",4838:"3fbb770c",4845:"43a26e71",4858:"e023757a",5133:"295f424e",5165:"071a0eb8",5178:"72083b41",5201:"d77448ee",5408:"2cedaf2f",5595:"00440000",5654:"676abc7a",5713:"51ad0f66",5870:"10c684b0",5917:"d547c67b",5932:"90184672",6038:"4da8ac19",6039:"06dd1efa",6124:"1e7de7fe",6159:"e9e63826",6193:"428320b6",6305:"7514af75",6539:"1f60d0d4",6638:"fba8a418",6686:"4c3c1dc2",6696:"fa3d98bd",6710:"83665776",6721:"c8caddd1",6768:"841adc37",6887:"3810e8e5",6893:"22f0e129",6922:"d17664a7",7154:"eee46244",7212:"9e7755e6",7238:"0f7b5825",7253:"e2712b99",7337:"70f31d65",7396:"3aeef25a",7495:"2f04f592",7594:"97732f4b",7611:"df3c944d",7652:"f054b415",7832:"0aeda122",7907:"dfbab2f3",7918:"17896441",7920:"1a4e3797",7959:"f577f5c2",8010:"43a1031a",8023:"977fea76",8082:"47daf389",8084:"29d00dd8",8088:"00bdc23f",8094:"3e38e310",8122:"6adcc868",8186:"c90bf1e8",8202:"e7fdd821",8230:"7d3b81bb",8267:"07b341f3",8269:"1300feb7",8276:"a5dcc804",8282:"60746895",8285:"c9b29382",8318:"86262f09",8392:"1c663d3d",8485:"d2eeb42a",8519:"ec96df16",8570:"69fd9be6",8583:"bfdf430b",8592:"common",8596:"e0edce1a",8703:"e862d0e9",8746:"0fd76486",8846:"5c08a402",8967:"ccf7588a",8984:"f5b92c38",8988:"a2e97e20",9050:"2ce3b5da",9083:"fe44757f",9128:"8961bfac",9251:"fa0b6059",9306:"382d59b5",9336:"0425b884",9364:"9a118db7",9376:"7cebed78",9480:"163041ea",9514:"1be78505",9524:"d185ab52",9591:"9e136365",9643:"b8c59810",9786:"4147f87e",9814:"40d6382c",9817:"14eb3368",9842:"4b80f681",9922:"f52ed7e3",9924:"df203c0f"}[e]||e)+"."+{53:"7432cd38",180:"e578dde5",211:"c8c05584",262:"9fe87b82",381:"ea986983",443:"d7eb56cd",492:"bf72a5fb",505:"f5131347",517:"c1c0acd5",619:"ebfad195",628:"09dcfef1",639:"aeef8223",749:"7ac403d3",754:"61a8f70c",770:"3f0d3784",856:"49ef7280",925:"8f1f64c8",996:"a352d3e6",1042:"9df0074a",1044:"d83f6b61",1110:"338de790",1310:"ff82d42e",1341:"f7fb1046",1398:"eca6abdd",1404:"116a0d06",1487:"caa19896",1573:"c871fc28",1668:"139e1f70",1686:"564ae984",1709:"4526e43e",1728:"7e3d3e0f",1748:"c60b77fa",1826:"4f989084",2e3:"bba1d58a",2013:"74d79f5d",2017:"0e11f307",2040:"d7e0dc19",2153:"c15c0771",2205:"d13c1a1e",2206:"7aa20f44",2225:"d448c52e",2459:"ef9a1068",2488:"7e35db59",2494:"4009d11f",2547:"4093f573",2562:"5362a74e",2566:"3eb3255f",2638:"deb77cdd",2655:"147b2ba8",2693:"4736a14c",2706:"ed377a67",2855:"9a4f1aa2",2899:"8d82b451",2991:"09b9be2c",3054:"b4fac2cd",3074:"77dcba9d",3091:"5c3db358",3108:"dd244289",3172:"591bc31b",3173:"d8e53898",3181:"40428d1d",3190:"22f973b5",3211:"c57a62d7",3237:"a089593f",3240:"edeeba0a",3305:"28903a59",3315:"30ac2c51",3414:"0057ab0a",3443:"9005f607",3596:"bac285c1",3657:"99306207",3700:"3adbfe17",3751:"d1cf4422",3787:"eabf1c22",3802:"f07302aa",3847:"d236a910",3902:"1ee80170",4025:"8a60e1cf",4069:"bbd54cb0",4070:"c57bea75",4075:"a1fccc26",4103:"a011fd75",4121:"832a6662",4168:"ce524b6d",4189:"192ff86a",4199:"fcdf0f36",4216:"1a7bbbbb",4278:"5c448432",4395:"50a40090",4405:"cf7436d1",4441:"6cb6f44d",4466:"e0a3bf3d",4507:"a0ac934f",4631:"d07b3cc0",4706:"4bbb5beb",4733:"15f28b48",4734:"0efb19dc",4838:"5a0ea03b",4845:"2c8343da",4858:"976848c0",4972:"cd867224",5001:"d122ea9e",5133:"04a4238d",5165:"b215d19c",5178:"50503fab",5185:"5a77c7f3",5201:"561ca51b",5314:"5e7a5198",5408:"b313f202",5525:"97a2f6fd",5595:"e6ea2287",5654:"63b3d25f",5713:"406eee01",5870:"148b0114",5917:"c5136bf3",5932:"63024330",6038:"a539a450",6039:"1e4f2ec1",6124:"c4a8e353",6159:"2f53c2d9",6193:"a9e82ac0",6234:"e4aec976",6305:"cff1fdc2",6539:"297d6f23",6638:"6a88519a",6686:"2c55e369",6696:"ce842ab5",6710:"355a054f",6721:"a7d8bbbe",6730:"679bdfde",6733:"8da6ac76",6768:"bd9ecd54",6887:"cb27da81",6893:"44175121",6922:"a25f122e",6941:"2a27ca14",6964:"f8908a4e",7154:"ee9a05ef",7212:"b2ff83c7",7238:"f8427b6c",7253:"1031a418",7337:"743b8ce0",7396:"7f601772",7495:"57768e9a",7594:"455cc213",7611:"674ff425",7652:"17eef43b",7832:"4e36fb5a",7907:"7d4851a2",7918:"998554a7",7920:"46d13a77",7926:"b155ab83",7959:"394fb809",8010:"7f53b24f",8023:"eec18e09",8082:"761a5874",8084:"9fda4441",8088:"963702a5",8094:"8e47d177",8099:"23d0e642",8122:"2773af0b",8186:"ecbb565d",8202:"35d1a93a",8230:"34d1dcbc",8267:"f53a0fdc",8269:"78be5d30",8276:"f087fd6d",8282:"ac74eb35",8285:"541e041a",8318:"c7931357",8392:"d1f01d12",8443:"b56128a0",8485:"589753c5",8519:"84e566e8",8570:"21ecae7b",8583:"7da059bb",8592:"ccbc84e3",8596:"d96eec42",8703:"7bf559c4",8746:"63b58892",8846:"d1babd15",8967:"011a0759",8984:"c5ebe54e",8988:"774d964a",9050:"5391bc8e",9083:"31470284",9128:"129eb342",9251:"d020b31a",9306:"1a240746",9336:"a3565346",9364:"8d5609b7",9376:"a7d61ce4",9478:"7e43e328",9480:"9c2da84e",9514:"276fbb10",9524:"49042892",9591:"a92e9543",9643:"5a911fd5",9786:"df19a38f",9814:"eade4c9d",9817:"277da0ae",9842:"d8321757",9863:"ac97c275",9922:"cfa80e63",9924:"3e6cf8f9"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),a={},f="documentation:",r.l=(e,d,b,c)=>{if(a[e])a[e].push(d);else{var t,o;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==f+b){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",f+b),t.src=e),a[e]=[d];var l=(d,b)=>{t.onerror=t.onload=null,clearTimeout(s);var f=a[e];if(delete a[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(b))),d)return d(b)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ecalc/",r.gca=function(e){return e={17896441:"7918",60746895:"8282",66286265:"180",83665776:"6710",90184672:"5932","935f2afb":"53",b677d687:"262","33498b04":"381","5e10e9e1":"443",f571fee5:"505",e1df8231:"517","577efb1d":"628","6bd3279d":"639","498bfcff":"749",ad129716:"754",f54e894e:"770","7557b935":"856","3b0e82f8":"925","15962da1":"996","074935d7":"1042","4aa4fc36":"1044","5a5e553d":"1110","7c623a68":"1310","38d592cf":"1398","2b2be347":"1404",e4be5833:"1487","4ee97ba8":"1668",d19423a2:"1686","5989d566":"1709",edb3a98b:"1728","41d1792a":"1748",cc88a418:"2000",c5daebe9:"2013","3409ab5c":"2017","7e6991bb":"2040","06adec10":"2153","5e3ed04b":"2205","496ed8d5":"2206","2b15d891":"2225","45c974ba":"2459",f85d2ba9:"2488",b15ba3bd:"2547",f59fd0ba:"2562","7b02141e":"2638","2c73e373":"2655","502e1773":"2693",cb266b33:"2706",d5b0ea4b:"2991","11516e85":"3054","7db788f5":"3074","3261da49":"3091",f4fe2bc2:"3108","54094f37":"3172","29367e59":"3173",fa17a3e5:"3181",b2b17913:"3190","4b5a01f9":"3211","1df93b7f":"3237","66a649c0":"3240",d2b7592b:"3305","880bbd08":"3315",b0a5d2c7:"3414",c21bc46a:"3443","2df92a48":"3596","1287dd43":"3700","3720c009":"3751","2781f0ad":"3787","721cfe60":"3802","084f7ebf":"3847",e8ebc025:"3902",bdf25f4c:"4025","0745e7f0":"4069","5c8ec56d":"4070","61639be2":"4075",bb45b332:"4103","55960ee5":"4121",c93dcb87:"4168",cda37ba5:"4189",af105519:"4199",b2781c74:"4278","9e4a10de":"4395",b2773e31:"4405",d5cd246e:"4441",fb7e7841:"4466","2c19a041":"4507","9e91bf8d":"4631",c3d1f0cd:"4733",cbe196b2:"4734","3fbb770c":"4838","43a26e71":"4845",e023757a:"4858","295f424e":"5133","071a0eb8":"5165","72083b41":"5178",d77448ee:"5201","2cedaf2f":"5408","00440000":"5595","676abc7a":"5654","51ad0f66":"5713","10c684b0":"5870",d547c67b:"5917","4da8ac19":"6038","06dd1efa":"6039","1e7de7fe":"6124",e9e63826:"6159","428320b6":"6193","7514af75":"6305","1f60d0d4":"6539",fba8a418:"6638","4c3c1dc2":"6686",fa3d98bd:"6696",c8caddd1:"6721","841adc37":"6768","3810e8e5":"6887","22f0e129":"6893",d17664a7:"6922",eee46244:"7154","9e7755e6":"7212","0f7b5825":"7238",e2712b99:"7253","70f31d65":"7337","3aeef25a":"7396","2f04f592":"7495","97732f4b":"7594",df3c944d:"7611",f054b415:"7652","0aeda122":"7832",dfbab2f3:"7907","1a4e3797":"7920",f577f5c2:"7959","43a1031a":"8010","977fea76":"8023","47daf389":"8082","29d00dd8":"8084","00bdc23f":"8088","3e38e310":"8094","6adcc868":"8122",c90bf1e8:"8186",e7fdd821:"8202","7d3b81bb":"8230","07b341f3":"8267","1300feb7":"8269",a5dcc804:"8276",c9b29382:"8285","86262f09":"8318","1c663d3d":"8392",d2eeb42a:"8485",ec96df16:"8519","69fd9be6":"8570",bfdf430b:"8583",common:"8592",e0edce1a:"8596",e862d0e9:"8703","0fd76486":"8746","5c08a402":"8846",ccf7588a:"8967",f5b92c38:"8984",a2e97e20:"8988","2ce3b5da":"9050",fe44757f:"9083","8961bfac":"9128",fa0b6059:"9251","382d59b5":"9306","0425b884":"9336","9a118db7":"9364","7cebed78":"9376","163041ea":"9480","1be78505":"9514",d185ab52:"9524","9e136365":"9591",b8c59810:"9643","4147f87e":"9786","40d6382c":"9814","14eb3368":"9817","4b80f681":"9842",f52ed7e3:"9922",df203c0f:"9924"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(d,b)=>{var a=r.o(e,d)?e[d]:void 0;if(0!==a)if(a)b.push(a[2]);else if(/^(1303|532)$/.test(d))e[d]=0;else{var f=new Promise(((b,f)=>a=e[d]=[b,f]));b.push(a[2]=f);var c=r.p+r.u(d),t=new Error;r.l(c,(b=>{if(r.o(e,d)&&(0!==(a=e[d])&&(e[d]=void 0),a)){var f=b&&("load"===b.type?"missing":b.type),c=b&&b.target&&b.target.src;t.message="Loading chunk "+d+" failed.\n("+f+": "+c+")",t.name="ChunkLoadError",t.type=f,t.request=c,a[1](t)}}),"chunk-"+d,d)}},r.O.j=d=>0===e[d];var d=(d,b)=>{var a,f,c=b[0],t=b[1],o=b[2],n=0;if(c.some((d=>0!==e[d]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(d&&d(b);n<c.length;n++)f=c[n],r.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return r.O(i)},b=self.webpackChunkdocumentation=self.webpackChunkdocumentation||[];b.forEach(d.bind(null,0)),b.push=d.bind(null,b.push.bind(b))})()})(); \ No newline at end of file diff --git a/docs/about/getting_started/cli/faq/index.html b/docs/about/getting_started/cli/faq/index.html new file mode 100644 index 0000000000..02a31ae532 --- /dev/null +++ b/docs/about/getting_started/cli/faq/index.html @@ -0,0 +1,20 @@ +<!doctype html> +<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-about/getting_started/cli/faq" data-has-hydrated="false"> +<head> +<meta charset="UTF-8"> +<meta name="generator" content="Docusaurus v2.4.3"> +<title data-rh="true">FAQ / Troubleshooting | eCalc™ Docs + + + + +

    +

    FAQ / Troubleshooting

    While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages. +This page tries to explain some common error messages and proposes how to fix them.

    Indentation errors

    In YAML, the indentation is very important and specifies the level in the hierarchy for the input. +If you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors.

    Error messages due to YAML read problems

    The following error messages are common when you have formatting issues in your YAML file:

    mapping values are not allowed here
    while scanning a simple key in "<setupfile.yml>", line <n>, column <m>
    could not find expected ':', line <n>, column <m>
    while parsing a block mapping in <setupfile>, line <n>, column <m>
    expected <block end>, but found '<block mapping start>'

    Error messages due to invalid eCalc configuration

    The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type +dictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would +indicate that the type is wrong because it is not a 'dict'/'list' or other type

    None should be instance of 'dict'
    None should be instance of 'list'

    Proposed solution

    Check your YAML setup file for correct indentation and correct format of values for each eCalc key.

    Special characters in Unicode

    eCalc uses ruamel.yaml to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message.

    One example of this is an unrecognized "BOM" character in "UTF-8 Unicode".

    Error message

    while scanning a simple key in "<setupfile.yml>", line <n>, column 1
    could not find expected ':', line <n>, column 1

    Proposed solution

    Check the encoding of your setupfile (and inputfiles):

    $ file <setupfile>.yml

    If the output of this is not "ASCII text", convert your file to "US-ASCII" using iconv.

    Example when <setupfile>.yml is of type "UTF-8"

    $ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o <new_setup_file_name_ascii>.yml <old_setup_file_name_utf-8>.yml

    Now try to run again using the new file <new_setup_file_name_ascii>.yml.

    + + + + \ No newline at end of file diff --git a/docs/about/getting_started/cli/index.html b/docs/about/getting_started/cli/index.html new file mode 100644 index 0000000000..034c15a905 --- /dev/null +++ b/docs/about/getting_started/cli/index.html @@ -0,0 +1,17 @@ + + + + + +CLI | eCalc™ Docs + + + + +
    +

    eCalc CLI

    info

    It is currently recommended to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library

    The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the +eCalc Python library, and should be accessible from the command line as ecalc.

    See all commands and options in the CLI reference

    Example Usage

    Use show command to inspect results

    First run ecalc (here shown with default output folder)

    $ ecalc run /somelocation/myfield.yaml --output-folder output

    Enter the output folder

    $ cd output

    Show results for a single component

    $ ecalc show results --name waterinj --output-format json

    or as csv

    $ ecalc show results --name waterinj --output-format csv

    or write the full csv result to a file (this will give the same output as ecalc run with the csv option)

    $ ecalc show results --output-format csv --file results.csv

    Output Monthly CSV data

    $ ecalc run -f MONTH /somelocation/myfield.yml

    Specify different output folder

    $ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml

    Specify a different naming prefix to outputs

    $ ecalc run -n myfield_myproject /somelocation/myfield.yml

    Show stack trace for debugging

    $ ecalc run --log DEBUG /somelocation/myfield.yml
    + + + + \ No newline at end of file diff --git a/docs/about/getting_started/index.html b/docs/about/getting_started/index.html new file mode 100644 index 0000000000..31bf8881b1 --- /dev/null +++ b/docs/about/getting_started/index.html @@ -0,0 +1,16 @@ + + + + + +Getting started | eCalc™ Docs + + + + +
    +

    API Reference

    info

    Currently the only officially supported method is the eCalc CLI using eCalc YAML models.

    There are three options to run eCalc models:

    What method should I choose?

    eCalc CLI

    Choose the eCalc CLI option if you:

    • Don't know much about programming
    • Have simple requirements
    • Can define the eCalc models statically

    Python Library

    Choose the Python Library option if you:

    • Are a developer or advanced user, and want to build eCalc models and get results programmatically
    • Use Python, and you need to use (parts of) eCalc as a dependency
    • Need access to "inner core functionality" of eCalc
    note

    Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon

    + + + + \ No newline at end of file diff --git a/docs/about/getting_started/library/index.html b/docs/about/getting_started/library/index.html new file mode 100644 index 0000000000..71065c21a5 --- /dev/null +++ b/docs/about/getting_started/library/index.html @@ -0,0 +1,17 @@ + + + + + +Python Library | eCalc™ Docs + + + + +
    +

    Python Library

    danger

    It is currently not recommended to use the Python library due to upcoming breaking changes.

    If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in +dynamically changing the eCalc models.

    See all commands and options in the API reference

    + + + + \ No newline at end of file diff --git a/docs/about/getting_started/yaml/index.html b/docs/about/getting_started/yaml/index.html new file mode 100644 index 0000000000..68190d6151 --- /dev/null +++ b/docs/about/getting_started/yaml/index.html @@ -0,0 +1,17 @@ + + + + + +YAML | eCalc™ Docs + + + + +
    +

    YAML

    We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see here

    The eCalc YAML model can either be run directly with the eCalc CLI or loaded using the Python library

    For getting started setting up your first eCalc YAML model, please see Setup an eCalc Model, +look at some example YAMLs here and refer to the vocabulary that we use here.

    + + + + \ No newline at end of file diff --git a/docs/about/index.html b/docs/about/index.html new file mode 100644 index 0000000000..5832e9d8c0 --- /dev/null +++ b/docs/about/index.html @@ -0,0 +1,17 @@ + + + + + +Introduction | eCalc™ Docs + + + + +
    +

    Introduction to eCalc™

    The eCalc™ technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area.

    What is eCalc™?

    eCalc™ is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support.

    eCalc™ performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered.

    eCalc™ uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation.

    Why should I use eCalc™?

    By using eCalc™ you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures.

    How to use eCalc™?

    To use eCalc™ you need to create a model setup of your asset. +This is described in the Modelling section.

    Once the model is ready, you can run the eCalc™ calculator. Different user interfaces for the calculator are offered. These are described in detail in the Getting started section.

    + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/index.html b/docs/about/migration_guides/index.html new file mode 100644 index 0000000000..2074910d14 --- /dev/null +++ b/docs/about/migration_guides/index.html @@ -0,0 +1,16 @@ + + + + + +Migrating eCalc versions | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v7_to_v8/index.html b/docs/about/migration_guides/v7_to_v8/index.html new file mode 100644 index 0000000000..9d05dd34fe --- /dev/null +++ b/docs/about/migration_guides/v7_to_v8/index.html @@ -0,0 +1,40 @@ + + + + + +v7 to v8 | eCalc™ Docs + + + + +
    +

    v7 to v8

    In this migration guide you will find:

    1. YAML changes
    2. CLI changes

    Yaml migration

    Migration overview

    This doc guides you through migrating an existing eCalc™ model from version v7 to v8.

    We try to make this as easy as possible, and provide a step-by-step migration guide.

    Main differences

    1. All component names must be unique to avoid ambiguity in reporting
    2. UNITS are required when setting up compressor and pump charts
    3. Restrict allowed characters in component names and emission names
    4. NAME no longer used for LTP reporting, use CATEGORY instead
    5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)

    1. All component names must be unique

    All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation, +generator sets, electricity consumers, fuel consumers and direct emitters.

    main.yaml
    INSTALLATIONS:
    - NAME: Installation
    ...

    GENERATORSETS:
    - NAME: Genset
    ...
    CONSUMERS:
    - NAME: Consumer
    ...
    - NAME: Consumer
    ...
    - NAME: Genset
    ...

    FUELCONSUMERS:
    - NAME: FuelConsumer
    ...
    - NAME: FuelConsumer
    ...

    DIRECT_EMITTER:
    - NAME: DirectEmitter
    ...
    - NAME: DirectEmitter
    ...
    - NAME: Installation
    ...

    This model is no longer valid, and the duplicated installation names are highlighted. +To make this model valid these names needs to be changed. For example:

    main.yaml
    INSTALLATIONS:
    - NAME: Installation_A
    ...

    GENERATORSETS:
    - NAME: Genset_A
    ...
    CONSUMERS:
    - NAME: Consumer_A
    ...
    - NAME: Consumer_B
    ...
    - NAME: Genset_B
    ...

    FUELCONSUMERS:
    - NAME: FuelConsumer_A
    ...
    - NAME: FuelConsumer_B
    ...

    DIRECT_EMITTER:
    - NAME: DirectEmitter_A
    ...
    - NAME: DirectEmitter_B
    ...
    - NAME: Installation_B
    ...

    This will make it possible to attribute results to each consumer by name, and removes any an ambiguity +when interpreting eCalc™ results.

    See INSTALLATION, +GENERATORSET, +CONSUMERS, +FUELCONSUMERS, +DIRECT_EMITTER +for more details about the relevant keywords.

    Are you using power from shore?

    We have implemented temporal categories for consumers to support the power from shore implementation in use.

    Instead of duplicating the generator set and setting the POWER-FROM-SHORE category, +it is now possible to change the category at a certain date. This is the same syntax as other temporal models.

    CATEGORY:
    2020-01-01: TURBINE-GENERATOR
    2030-01-01: POWER-FROM-SHORE

    See Power from shore for more information.

    2. UNITS for pump and compressor charts

    Compressor and pump charts has previously had implicit units, without requiring the operator to specify what +units are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand +over models.

    To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify.

    To keep the old defaults you can do the following:

    main.yaml
    FACILITY_INPUTS:
    - NAME: single_speed_pump_chart
    FILE: <some input csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    - NAME: variable_speed_pump_chart
    FILE: <some input csv>
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    MODELS:
    - NAME: single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: FRACTION
    CURVES:
    ...
    - NAME: variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: FRACTION
    CURVES:
    ...

    ...

    See COMPRESSOR CHART +and PUMP CHART +for more details about the relevant keywords.

    3. Restrict allowed characters in component names and emission names

    Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (_), hyphen (-) and space ( ).

    Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (_).

    4. NAME no longer used for LTP reporting, use CATEGORY instead

    We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME.

    main.yaml
    INSTALLATIONS:
    - NAME: Installation_A
    ...

    GENERATORSETS:
    - NAME: Genset_A
    ...
    CONSUMERS:
    - NAME: Consumer_A
    ...

    FUELCONSUMERS:
    - NAME: loading # Name will no longer be used in LTP reporting
    CATEGORY: LOADING # Category must be used to include it in LTP reporting
    FUEL: Fuel_A
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: storage # Name will no longer be used in LTP reporting
    CATEGORY: STORAGE # Category must be used to include it in LTP reporting
    FUEL: Fuel_B
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: flare # Name will no longer be used in LTP reporting
    CATEGORY: FLARE # Category must be used to include it in LTP reporting
    FUEL: Fuel_C
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting
    CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting
    FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...

    ...

    5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)

    Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names. +The input is case-sensitive and must match exactly with the pre-defined names. See CLI Docs for full documentation.

    CLI migration

    This version includes some changes to how the CLI is invoked and changes to default behavior.

    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.
    2. Log level should be specified as the first argument + log to file
    3. Model yaml-file needs to come last
    4. Extrapolation (correction) is now always used and cannot be disabled
    5. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export
    6. Simple results are now default for json

    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.

    To make it possible to add ecalc show we added the ecalc run command. In v8 it is required to specify run when calculating a model.

    If you previously ran eCalc™ with this command

    $ ecalc ./my-model.yaml

    you should now use

    $ ecalc run ./my-model.yaml

    2. Log level should be specified as the first argument + log to file

    Previously you could specify the --log argument after run, this is no longer possible.

    This is the new way of specifying log level.

    $ ecalc --log DEBUG run ./my-model.yaml

    In addition we are introducing --log-folder <path> where you can direct and store the log in a given path to easily +look at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc +produces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages). +The user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT +do that for you.

    $ ecalc --log DEBUG --log-folder . run ./my-model.yaml

    As you see above, the argument MUST be added BEFORE the run argument.

    3. Model yaml-file needs to come last

    When running eCalc™ you will now need to set the model file argument last.

    ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file]

    See the CLI Docs or run ecalc --help for the full documentation.

    4. Extrapolation correction is no longer optional

    We have removed the extrapolation correction argument. eCalc™ will now always "extrapolate" values. +The main reason for making this change was that the feature was in general always used, in addition to being a confusing term. +Let us know if you have a use-case where this was needed.

    5. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export

    To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily +affected by Centuries), we simplify the argument to get LTP results. See CLI Docs for +full documentation.

    6. Simple results are now default for json

    Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now +needs to use the --detailed-output option when running the CLI. See CLI reference docs +for more details.

    + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-1_to_v8-2/index.html b/docs/about/migration_guides/v8-1_to_v8-2/index.html new file mode 100644 index 0000000000..ff5297e59f --- /dev/null +++ b/docs/about/migration_guides/v8-1_to_v8-2/index.html @@ -0,0 +1,25 @@ + + + + + +v8.1 to v8.2 | eCalc™ Docs + + + + +
    +

    v8.1 to v8.2

    1. Model changes
    2. Result changes
    3. Behaviour

    Modelling

    YAML

    LTP

    1. Two new consumer categories are added: HEATER and BOILER

    Result

    Operational settings used is now 1-based

    Consumer systems will now refer to the first operational setting as 1 instead of 0. 0 means that "No setting was used", indicating that none of the operational settings was able to handle the stream. This will make it easier for users to find the corresponding operational setting that is/was active for the different timesteps.

    Resampling of rates changed from forward filling to average rates

    All calculations are performed on a global time vector, which is the union of all dates found in the +input resource files (csv files) where INFLUENCE_TIME_VECTOR is set to +True, dates found in the eCalc model yaml-file (temporal models), and dates in the requested output frequency.

    If the global time vector and the dates in the requested output frequency does not coincide fully, a resampling of the +results needs to be performed. Previously this was done by simply picking the first +available rate in the time interval (forward filling). The rates are thought to be constant in a period between two +dates, hence the forward filling will disconnect the rates and the cumulative volumes. This has now been changed to +calculating the average rate from all dates in the global time vector within a date range in the requested output +frequency, to keep the rate and cumulative consistent with each other. This average will take into +account the lengths of the periods and the regularity within each period. The figure below shows a comparison of how the +resampling would previously have been done compared to how it is done now when making quarterly output from monthly results.

    TLDR; this change will make it possible to use the rate output data (rate from a point in time) from eCalc correctly.

    LTP .tsv file

    1. Column Total CO2 is removed from LTP output (both for fixed & mobile installations)
    2. Add relevant columns in ltp-file for the two new consumer categories HEATER and BOILER
    3. Re-order some of the columns in the ltp-file, for more logical order
    4. Turbine-columns are now filtered on the two consumer categories TURBINE-GENERATOR and GAS-DRIVEN-COMPRESSOR, as it is no longer only turbines that are consumers of FUEL-GAS

    STP .tsv file

    1. Report CO2 emissions for both fixed- and mobile installations
    2. Report CH4 emissions for fixed installations

    Emissions, structure and order

    The JSON result file has changed format for emissions. Emissions were previously listed in a list, but is now listed in a map:

        "emissions":
    [
    {
    "name": "co2"
    ...

    to

        "emissions":
    {
    "co2":
    {
    "name": "co2"
    ...

    This will/may also affect the order of which emissions are presented in the result file, but should from now on be consistent.

    Behaviour

    Conditions

    eCalc will now consistently NOT evaluate and run calculations if a CONDITION is not fulfilled. Conditions can be set on most energy consumers, to indicate whether the consumer is active or not at a given timestep. Previously the consumer was evaluated even though a condition was not fulfilled to reflect "what would have happened if it was active". However this has proven to be difficult for users to understand and remember when the overall model result is being evaluated and analyzed. In order to prevent user errors, we have decided to consistently NOT evaluate a consumer for timesteps where it is disabled (conditions evaluated to true).

    + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-2_to_v8-3/index.html b/docs/about/migration_guides/v8-2_to_v8-3/index.html new file mode 100644 index 0000000000..5904ddff43 --- /dev/null +++ b/docs/about/migration_guides/v8-2_to_v8-3/index.html @@ -0,0 +1,16 @@ + + + + + +v8.2 to v8.3 | eCalc™ Docs + + + + +
    +

    v8.2 to v8.3

    It is no longer accepted to change ENERGY_USAGE_MODEL TYPE over time, within one consumer. In case TYPE evolution is needed, the model can be split in two consumers.

    + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-3_to_v8-4/index.html b/docs/about/migration_guides/v8-3_to_v8-4/index.html new file mode 100644 index 0000000000..13762c556c --- /dev/null +++ b/docs/about/migration_guides/v8-3_to_v8-4/index.html @@ -0,0 +1,16 @@ + + + + + +v8.3 to v8.4 | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8_to_v81/index.html b/docs/about/migration_guides/v8_to_v81/index.html new file mode 100644 index 0000000000..d4c17db911 --- /dev/null +++ b/docs/about/migration_guides/v8_to_v81/index.html @@ -0,0 +1,31 @@ + + + + + +v8 to v8.1 | eCalc™ Docs + + + + +
    +

    v8 to v8.1

    In this migration guide you will find:

    1. YAML changes

    Yaml migration

    Migration overview

    This doc guides you through migrating an existing eCalc™ model from version v8 to v8.1.

    We try to make this as easy as possible, and provide a step-by-step migration guide.

    1. Changes to TIME_SERIES

    • RATE_INTERPOLATION_TYPE is renamed to INTERPOLATION_TYPE
    • New time series type: DEFAULT with default RIGHT interpolation
    • RESERVOIR type is removed

    Previously, it looked like this:

    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <MISCELLANEOUS/RESERVOIR>
    FILE: <path to file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    RATE_INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>

    But the new valid definition of time series in the yaml is now:

    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <MISCELLANEOUS/DEFAULT>
    FILE: <path to file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    info

    We have understood that the previous definitions lead to misunderstandings and errors. It is therefore of high importance +that you now go through the reservoir data timeseries one-by-one and make sure that the correct type and interpolation type +is set. See below for the 2 possibilities of migrating from the old RESERVOIR type.

    If you previously used the RESERVOIR type, you know have 2 options. See below.

    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: RESERVOIR
    ...

    If you know that the reservoir data comes from Centuries, and/or that the data is right-interpolated, then you should +change to the new DEFAULT type, like this:

    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: DEFAULT
    ...
    info

    If you do NOT know the origin of the timeseries or whether it uses LEFT or RIGHT interpolation, you MUST contact +somebody that can help you out to make this right. The consequences of doing it wrong is that the calculations is +easily offset by 1 year.

    2. Not possible to have different interpolation types for vectors within one file

    Previously eCalc™ tried to recognize vectors as rates- or non-rates for time series. +Hence, rate-vectors were set to use LEFT interpolation type, or if the type was +MISCELLANEOUS it was set to the method given by the user. If the vector was not recognized +as a rate, the interpolation method was automatically set to LINEAR, regardless of user input.

    This behaviour is now changed:

    info

    eCalc™ will no longer auto-detect rates and set interpolation type based on recognized +rate vectors. If different vectors (e.g. pressures and rates) should be interpolated differently, they now need +to be in separate files.

    3. Empty data in time series columns no longer allowed

    Each column in a time series resource should have data for all time steps, eCalc™ will now show an error if this is not the case. +The reason behind this is that it can be ambiguous to know whether missing data should be interpolated or considered as 0. Now +users will have to be explicit, and this will lead to fewer ambiguities and errors.

    4. New LTP Category: STEAM-TURBINE-GENERATOR

    A new LTP requirement to report steam turbine generator consumption/generation. This affects the total generator production +negatively (reduced load), as some energy is provided through this steam turbine generator. It is therefore modelled as a consumer +with a negative load in order to subtract from the total energy provided by the generator set.

    The load on the steam turbine generator is reported separately in a new column in LTP Export.

    Added new CATEGORY with name STEAM-TURBINE-GENERATOR to report power generated by a steam turbine. +Should be negative load to deduct from genset. See excerpt example below:

        - NAME: steamgen
    CATEGORY: STEAM-TURBINE-GENERATOR
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: -1.1 # MW
    info

    Set negative load for STEAM-TURBINE-GENERATOR (similar to the way OFFSHORE-WIND is being used)

    + + + + \ No newline at end of file diff --git a/docs/about/miscellaneous/index.html b/docs/about/miscellaneous/index.html new file mode 100644 index 0000000000..6e8285e1be --- /dev/null +++ b/docs/about/miscellaneous/index.html @@ -0,0 +1,23 @@ + + + + + +Output data | eCalc™ Docs + + + + +
    +

    Output data

    In general, each model is outputted to a .csv file with what is viewed as necessary information for an operator. +Further details, if necessary, can be seen in a .json file.

    Decimals and significant digits in eCalc

    Output numbers/result in eCalc are currently given at "6 significant digits/figures accuracy". This statement is valid +for positive and negative integers and float numbers. Read more about significant digits here.

    caution

    Be aware that the output is never more accurate than the input (ie the measurements/prognosis). So, e.g. if your input +is rounded off to "nearest million", then that is also how you should consider the accuracy of the output. The output accuracy +is not more reliable than the lowest input accuracy given.

    In practice, for the output, this means:

    • Numbers higher than 1e6 (and lower than -1e6) will not have digits after decimal sign
    • Numbers smaller than 1e-6 (and -1e-6) is considered to be 0 (rounded to 0), and we will +not operate with more than 6 digits after the decimal sign.
    • We only round numbers in the decimal part, to within the "significant digits"

    We may in the future allow user to specify number of significant digits in output, but for now it is fixed.

    Quality control

    eCalc™ has a quality control function, which is represented by a validity flag. This validity flag gives the user information to whether or not their model is valid. +This flag can either be seen in the .csv or .json output file. +Essentially, if the <name>.is_valid is shown as a 1, the level is considered to be valid, and on the opposite end if it is shown to be 0, it can be considered invalid.

    The most likely reason for an invalid flag is that a consumer (pump, compressor) is operating outside its operational limit (potentially outside the pump/compressor chart).

    This validity flag can be seen on multiple component levels:

    • The highest level being the eCalc™ model (or otherwise known as the asset level). If the highest level flag is given as invalid, this means that any number of the installations in the model can have one or more invalid consumer.
    • If you dig further down in the component levels, the next would be on installation level. This means that if this flag is given as invalid, any consumer within that installation can be invalid.
    • Past the installation level, is the consumer level. Here, the validity of the individual consumers can be seen.
    • If the consumer is a multi-stage compressor (for example), the validity of each compression stage can be viewed (only in the .json file when detailed output is selected)

    This is further illustrated in the diagram below:

    Validity flag example

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/examples/advanced/index.html b/docs/about/modelling/examples/advanced/index.html new file mode 100644 index 0000000000..b0c282799d --- /dev/null +++ b/docs/about/modelling/examples/advanced/index.html @@ -0,0 +1,89 @@ + + + + + +Advanced model | eCalc™ Docs + + + + +
    +

    Advanced model example

    This is a model very similar to Simple example. The main difference is the use of more advanced +energy usage models and consumer systems, and the addition of a second installation.

    Both installations exports oil (OIL_PROD) and gas (GAS_PROD). +The installations emits CO2 and CH4 that is subject to taxation and emission quotas.

    The following is an example with one installation called Installation A and Installation B.

    graph TD; + Asset(Asset) --> A(Installation A); + A(Installation A) --> AA(Flare); + A --> AC(Gas export compressor); + A --> AD(Generator set A); + AD --> AE(Base production load A); + AD --> AF(Gas injection compressor A); + AD --> AG(Produced water reinjection pump A); + AD --> AH(Sea water injection pump A); + + Asset --> B(Installation B); + B --> BA(Generator set B); + BA --> BC(Base production load B); + B --> BB(Flare A); + style A stroke:red; + style B stroke:red; + style BC stroke:blue; + style AE stroke:blue; + style AF stroke:blue; + style AG stroke:blue; + style AH stroke:blue;

    The results of a performed characterization of the equipment are listed below:

    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production load APower consumerProduction base load varying depending on a binary condition
    Gas injection compressor APower consumerVariable consumption depending on gas injection rate and lift gas rate
    Produced water reinjection pump APower consumerVariable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar.
    Sea water injection pump APower consumerVariable consumption depending on a complex combination on water injection rate and water production rate
    Flare ADirect fuel consumerFlare A
    Gas export compressor ADirect fuel consumerVariable fuel consumption depending on gas sales rate
    Generator set BGenerator setVariable fuel consumption with electricity to fuel function
    Base production load BPower consumerProduction base load at 7.6 MW
    Gas export compressor BDirect fuel consumerVariable fuel consumption depending on gas sales rate
    Flare BDirect fuel consumerFlare B

    YAML model overview

    The YAML model consist of these main components:

    The YAML setup file looks like this:

    model.yaml
    TIME_SERIES:
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    VARIABLES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>

    We will now replace the placeholders for each of the main keywords above.

    TIME_SERIES

    The reservoir variables, in this case, are found in a CSV (Comma separated file) production_data.csv. +We give the time-series data a name that can be referenced as variables elsewhere in the form <NAME>:<NAME OF COLUMN>. +See TIME_SERIES for further details.

    model.yaml
    TIME_SERIES:
    - NAME: SIM
    TYPE: DEFAULT
    FILE: base_profile.csv

    FACILITY_INPUTS

    We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets, +tabulated/sampled models and pump charts. See FACILITY_INPUTS for further details.

    Here we define a tabulated genset, a sampled compressor, and a single speed pump chart. +Note that more complicated energy models are defined under the MODELS-keyword.

    model.yaml
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: gasexp
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    FUEL_TYPES

    In this example there are two FUEL_TYPES - fuel_gas and bad_fuel_gas. +These are used for Installation A and Installation B respectively. +Here we also define emissions in CO2 and CH4. Note that the two fuels have different prices, +emissions factors and the same taxes and are defined:

    model.yaml
    FUEL_TYPES:
    - NAME: fuel_gas
    PRICE: 1.5 # NOK/Sm3
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.20 #kg/Sm3
    TAX: 1.51 # NOK/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    TAX: 0.9 # NOK/Sm3
    - NAME: bad_fuel_gas
    PRICE: 0.5 # NOK/Sm3
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 5.0 #kg/Sm3
    TAX: 1.51 # NOK/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    TAX: 0.9 # NOK/Sm3

    MODELS

    This advanced example requires some energy usage models to be defined under the model section. See MODELS for details.

    Here we specify:

    • Compressor chart based on design points
    • Compressor chart based on chart data
    • Medium density fluid
    • Gas turbine
    • Simplified compressor train model
    model.yaml
    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 10000
    DESIGN_HEAD: 80
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M # M or KJ_PER_KG
    EFFICIENCY: FRACTION
    CURVES:
    FILE: compressor_chart.csv
    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # [MJ/Sm3]
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart

    See MODELS for further details.

    VARIABLES

    To run the model it is recommended to specify VARIABLES, +instead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model +by allowing descriptive variable names and avoid duplications.

    For our model, we specify the following variables:

    model.yaml
    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    water_injection_rate:
    VALUE: SIM;WATER_INJ
    gas_export_condition:
    VALUE: SIM;GAS_PROD > 0
    base_production_load_mw:
    VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)
    water_injection_condition:
    VALUE: SIM;WATER_PROD >0
    flare_a_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 5000
    2030-01-01:
    VALUE: 2000
    flare_b_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 10000
    2030-01-01:
    VALUE: 7000

    We reference the TIME_SERIES SIM using the column names from the CSV file.

    tip

    You can use boolean condition such as shown in base_production_load_mw and time varying variables such as shown in +flare_a_fuel_rate_sm3_day and flare_b_fuel_rate_sm3_day to write simpler models with less duplicated code.

    The base_production_load_mw adds another 4.1 MW when the gas lift injection rate is positive.

    The flare rate changes in year 2030.

    INSTALLATIONS

    An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form +of generatorsets (with electric sub-consumers), and direct fuel consumers.

    We specify:

    • NAME: the installation name
    • HCEXPORT: Hydrocarbon export in Sm3/day by referring to the variable $var.hydrocarbon_export_sm3_per_day specified under VARIABLES above.
    • FUEl: Default fuel specified in FUEL_TYPES above. Note the different fuels used by the two installations.
    • CATEGORY: FIXED (installation) category is used to group result data for reporting. See CATEGORY for details.
    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>
    - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>

    Installation A

    There is one generator set, Generator set A. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumers getting +power from the generator set are Base production load, Gas injection compressor, Produced water reinjection pump +and Sea-water injection pump.

    The direct fuel consumers are Flare.

    The setup for Installation A thus becomes:

      - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set A
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL: <placeholder>
    FUELCONSUMERS:
    - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL: <placeholder>

    Installation B

    There is one generator set, Generator set B. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumer getting +power from the generator set is Base production load.

    The direct fuel consumers are Flare and Gas export compressor.

    The setup for Installation B thus becomes:

      - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set B
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL: <placeholder>
    FUELCONSUMERS:
    - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL: <placeholder>

    ENERGY_USAGE_MODEL

    We will now fill in the final placeholders with detailed ENERGY_USAGE_MODELs.

    Base production loads A has a load of 7.6 MW with additional 4.1 MW when the field gas injection rate is positive:

              - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: $var.base_production_load_mw

    Gas export compressor system A is represented by a consumer system of two simplified compressor train models. +The system has defined the variable gas_export_rate_sm3_per_day and will run two different +rate distributions between these two compressor trains. It will first send all rate to the first compressor train +and nothing to the second RATE_FRACTIONS: [1.0, 0.0] and then it will run the same input while distributing equal +rates to the two compressor trains RATE_FRACTIONS: [0.5, 0.5]. The final result will be composed of the first +setting that returns a valid result for the compressors. +See COMPRESSOR_SYSTEM for further details.

    The model compressor model is defined:

              - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    - NAME: train2_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1.0, 0.0]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120

    Water injection pump system A is variable and its energy function is dependent on the field's water +injection rate (WATER_INJ) that is set in the variable water_injection_rate as SIM;WATER_INJ. +The pump only runs when the variables water_injection_condition evaluates to true as SIM;WATER_PROD > 0. +This is when the water injection rate is positive. Fluid density, suction pressure and discharge pressure +is also defined.

    This PUMP_SYSTEM behaves much the same as the COMPRESSOR_SYSTEM above. +See PUMP_SYSTEM for further details.

              - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: pump_chart
    - NAME: pump2
    CHART: pump_chart
    - NAME: pump3
    CHART: pump_chart
    - NAME: pump4
    CHART: pump_chart
    FLUID_DENSITY: 1026
    TOTAL_SYSTEM_RATE: $var.water_injection_rate
    CONDITION: $var.water_injection_condition
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0]
    SUCTION_PRESSURES: [3, 3, 3, 3]
    DISCHARGE_PRESSURES: [200, 200, 200, 200]
    CROSSOVER: [2, 0, 0, 0]
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200

    Single pump A has an energy function that is dependent on the seawater injection rate, same as the system above. +It uses the pump_chart defined in FACILITY_INPUTS above.

    The pump model is then defined:

              - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.water_injection_condition
    ENERGYFUNCTION: pump_chart
    RATE: 5000
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1026

    The Flare A is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_a_fuel_rate_sm3_day.

    The model becomes:

          - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_a_fuel_rate_sm3_day

    Base production loads B has a load of 7.6 :

              - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 7.6

    The Flare B is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_a_fuel_rate_sm3_day.

    The model becomes:

          - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_b_fuel_rate_sm3_day

    The Gas export compressors B is a variable fuel consumer whose energy function depends on the field gas production rate (GAS_PROD) defined +in the variable gas_export_rate_sm3_per_day as SIM;GAS_PROD, and put to the condition gas_export_condition as SIM;GAS_PROD > 0

    The model is specified:

          - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: gasexp
    CONDITION: $var.gas_export_condition
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 200

    Full eCalc YAML model

    model.yaml
    TIME_SERIES:
    - NAME: SIM
    TYPE: DEFAULT
    FILE: base_profile.csv

    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: gasexp
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    FUEL_TYPES:
    - NAME: fuel_gas
    PRICE: 1.5 # NOK/Sm3
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.20 #kg/Sm3
    TAX: 1.51 # NOK/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    TAX: 0.9 # NOK/Sm3
    - NAME: bad_fuel_gas
    PRICE: 0.5 # NOK/Sm3
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 5.0 #kg/Sm3
    TAX: 1.51 # NOK/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    TAX: 0.9 # NOK/Sm3

    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 10000
    DESIGN_HEAD: 80
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M # M or KJ_PER_KG
    EFFICIENCY: FRACTION
    CURVES:
    FILE: compressor_chart.csv
    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart

    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    water_injection_rate:
    VALUE: SIM;WATER_INJ
    gas_export_condition:
    VALUE: SIM;GAS_PROD > 0
    base_production_load_mw:
    VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)
    water_injection_condition:
    VALUE: SIM;WATER_PROD >0
    flare_a_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 5000
    2030-01-01:
    VALUE: 2000
    flare_b_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 10000
    2030-01-01:
    VALUE: 7000

    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set A
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: $var.base_production_load_mw
    - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    - NAME: train2_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1.0, 0.0]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: pump_chart
    - NAME: pump2
    CHART: pump_chart
    - NAME: pump3
    CHART: pump_chart
    - NAME: pump4
    CHART: pump_chart
    FLUID_DENSITY: 1026
    TOTAL_SYSTEM_RATE: $var.water_injection_rate
    CONDITION: $var.water_injection_condition
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0]
    SUCTION_PRESSURES: [3, 3, 3, 3]
    DISCHARGE_PRESSURES: [200, 200, 200, 200]
    CROSSOVER: [2, 0, 0, 0]
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.water_injection_condition
    ENERGYFUNCTION: pump_chart
    RATE: 5000
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1026
    FUELCONSUMERS:
    - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_a_fuel_rate_sm3_day

    - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set B
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 7.6
    FUELCONSUMERS:
    - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_b_fuel_rate_sm3_day
    - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: gasexp
    CONDITION: $var.gas_export_condition
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 200

    Input files

    compressor_chart.csv
    RATE,       HEAD,   EFFICIENCY, SPEED
    # [m3/h], [m], [frac], [rpm]
    3000, 8500, 0.72, 7500
    3500, 8000, 0.75, 7500
    4000, 7500, 0.74, 7500
    4500, 6500, 0.70, 7500
    4100, 16500, 0.72, 10500
    4600, 16000, 0.73, 10500
    5000, 15500, 0.74, 10500
    5500, 14500, 0.74, 10500
    6000, 13500, 0.72, 10500
    6500, 12000, 0.70, 10500
    compressor_sampled.csv
    RATE,   FUEL
    0, 0
    0.01, 100
    10, 500
    20, 1200
    genset.csv
    POWER,  FUEL
    # [MW], [Sm3/d]
    0, 0
    0.1, 75000
    10, 80000
    20, 100000
    50, 500000
    100, 1000000

    pump_chart.csv
    RATE,       HEAD,   EFFICIENCY, SPEED
    # [m3/h], [m], [%], [rpm]
    250, 2350, 50, 10000
    300, 2300, 55, 10000
    350, 2250, 60, 10000
    400, 2200, 70, 10000
    450, 2150, 75, 10000
    500, 2100, 80, 10000
    550, 2050, 75, 10000
    600, 2000, 70, 10000
    base_profile.csv
    DATE,           OIL_PROD,  WATER_PROD,  GAS_PROD,  WATER_INJ,  GAS_LIFT
    01.01.2020, 1000, 20000, 4000000, 30000, 1200000
    01.01.2021, 1000, 20000, 4000000, 30000, 1200000
    01.01.2022, 1000, 20000, 4000000, 30000, 1200000
    01.01.2023, 2500, 21000, 4000000, 30000, 1200000
    01.01.2024, 3000, 22000, 4500000, 28000, 1300000
    01.01.2025, 3500, 23000, 5000000, 26000, 1350000
    01.01.2026, 4000, 24000, 5500000, 25000, 1400000
    01.01.2027, 4000, 25000, 6000000, 24000, 1400000
    01.01.2028, 4000, 20000, 6000000, 23000, 1400000
    01.01.2029, 5000, 20000, 5500000, 22000, 1350000
    01.01.2030, 9000, 20000, 5000000, 21000, 1300000
    01.01.2031, 5000, 20000, 3000000, 22000, 1300000
    01.01.2032, 4000, 22100, 3000000, 23000, 2000000
    01.01.2034, 1200, 25000, 1000000, 21000, 2000000
    01.01.2035, 1100, 25000, 1000000, 20000, 1500000
    01.01.2036, 1000, 22000, 500000, 18000, 1400000
    01.01.2037, 900, 20000, 500000, 17000, 1400000
    01.01.2038, 800, 18000, 500000, 17000, 1400000
    01.01.2039, 700, 18000, 200000, 17000, 1400000
    01.01.2040, 600, 10000, 200000, 15000, 1400000
    01.01.2041, 0, 0, 0, 0, 0
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/examples/drogon/index.html b/docs/about/modelling/examples/drogon/index.html new file mode 100644 index 0000000000..0332c566be --- /dev/null +++ b/docs/about/modelling/examples/drogon/index.html @@ -0,0 +1,43 @@ + + + + + +Drogon model | eCalc™ Docs + + + + +
    +

    Drogon model example

    The Drogon example is based on a synthetic data set.

    On the installation, the following consumers are identified:

    graph TD; + A(Drogon Installation) --> B(Generator set A); + B --> C(Base production load); + B --> D(Gas compression train); + B --> E(Gas re-compressors); + B --> F(Sea water injection pump); + B --> G(Booster pump); + style A stroke:red; + style C stroke:blue; + style D stroke:blue; + style E stroke:blue; + style F stroke:blue; + style G stroke:blue;

    The results of a performed characterization of the equipment are listed below:

    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production loadPower consumerConstant load - 10 MW
    Gas compression trainPower consumerVariable consumption depending on produced gas rate
    Gas re-compressorsPower consumerConstant load - 2 MW
    Sea water injection pumpPower consumerVariable consumption depending on water injection rate
    Booster pumpPower consumerConstant load - 2 MW

    YAML model overview

    The YAML model consists of the following components:

    • Time series input
    • Facility inputs
    • Model inputs
    • Fuel type input
    • Installation topography

    The skeleton of the YAML file looks like the following:

    TIME_SERIES: 
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    MODELS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>

    TIME_SERIES

    The reservoir variables. In this case the file is called: drogon_mean.csv.

    TIME_SERIES: 
    - NAME: SIM1
    TYPE: DEFAULT
    FILE: drogon_mean.csv

    FACILITY_INPUTS

    In this case, the compressors are not specified in this section as GENERIC COMPRESSOR CHARTS. Thus, the pump chart and generator set will be the only facility components specified within this section.

    The pump will be variable speed, meaning that the pump type will be PUMP_CHART_VARIABLE_SPEED. The generator set will be a tabulated, where power consumption will be linked to fuel gas utilised.

    FACILITY_INPUTS: 
    - NAME: genset_a_power_fuel
    TYPE: ELECTRICITY2FUEL
    FILE: genset.csv
    - NAME: wi_200
    FILE: wi_200bar_vsp.csv
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE

    MODELS

    The model section will contain the fluid model, the compressor chart and the subsequent compressor model. +Peng-Robinson (PR) will be the selected equation of state in this example.

    This example will use a generic compressor chart. In this case, a generic compressor chart from input will utilised. Here, the a "typical" chart will be shifted to match the input head and rate data. See GENERIC COMPRESSOR CHARTS for more details. When a generic chart is used, a polytropic efficiency needs to be specified. This value will be constant throughout the use, in this case a value of 0.8 is used.

    A SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN model is used in this example, as this is necessary when a generic chart is used. Instead of manually specifying the number of compression stages, a MAXIMUM_PRESSURE_RATIO_PER_STAGE of 3.5 is defined. This will automatically distribute the pressure increase amongst the compression train so that no pressure ratio per compression stage will be above 3.5.

    MODELS:
    - NAME: drogon_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: PR
    COMPOSITION:
    water: 0.0
    nitrogen: 0.510676386339746
    CO2: 2.44965511776504
    methane: 75.6328106126248
    ethane: 10.9074631209139
    propane: 8.11875087121037
    i_butane: 0.849146377471569
    n_butane: 1.34903656604691
    i_pentane: 0.104982143381498
    n_pentane: 0.071218218251483
    n_hexane: 0.0063

    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.8
    UNITS:
    EFFICIENCY: FRACTION

    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: drogon_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 19.3

    FUEL_TYPES

    In this case, the installation uses a single fuel gas with a value of 1.23 NOK/Sm3. This fuel gas has a CO2 intensity of 2.416 and a the CO2 value is set to 1.71 NOK/Sm3.

    FUEL_TYPES:
    - NAME: fuel_gas
    PRICE: 1.23
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.416 #CO2/Sm3 fuel gas burned
    TAX: 1.71 #NOK/Sm3 fuel gas burned

    INSTALLATIONS

    In the INSTALLATIONS section, the previously defined models and facility inputs are further defined. Here the hydrocarbon export can be specified. This is used in order to get a hydrocarbon-to-emission value. In this case, it is assumed that this facility exports oil (OIL_PROD) and gas (GAS_PROD).

    INSTALLATIONS:
    - NAME: drogon
    CATEGORY: FIXED
    HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000
    FUEL: fuel_gas

    GENERATORSETS

    There is one generator set used in this example - Generator set A. This is a tabular relationship between power generated/consumed and fuel gas burnt. +Under this category, all consumers that utilise electricity are defined. In this case scenario, all pumps and compressors are electrically driven; thus, all consumers will be specified under this category.

        GENERATORSETS:
    - NAME: main_power
    ELECTRICITY2FUEL: genset_a_power_fuel
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:

    PUMPS

    The previously defined variable speed pump (in FACILITY_INPUTS) is put into further defined with suction and discharge pressures, rates and operational settings.

    Here, a system of pumps is used. This means that instead of a single pump being used to deliver the respective injection rate, a system of pumps is defined. In this case, a system of two pumps will be used. If the first pump is unable to deliver the requested head or rate, a second pump will be additionally used and the rate will be split across the pump system. +As only one pump has been defined, the same pump model will be used for each train. As each pump is identical, the rate will be equally split across the train when needed (this is to ensure the highest pump efficiency - see PUMP MODELLING for more details.)

    A fluid density of 1025 kg/m3 is used, with a suction and discharge pressure of 12 and 200 bar respectively.

              - NAME: wi_lp
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a_lp
    CHART: wi_200
    - NAME: pump_b_lp
    CHART: wi_200
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1025
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    - 0
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS:
    - 0.5
    - 0.5
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200

    COMPRESSORS

    For the compression model, a compressor system is not used. This is due to the use of generic compressor charts. As the generic charts are shifted from input data there is no need for an additional compression train. No matter what rate/head values are inputted here, the generic chart is shifted so that all operational points will be within the operational envelope of the compressor.

    Here, 13 bar and 431 bar is specified for the suction and discharge pressure respectively.

              - NAME: compressor_train
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: simplified_compressor_train_model
    RATE: SIM1;GAS_PROD
    SUCTION_PRESSURE: 13
    DISCHARGE_PRESSURE: 421

    BASE-LOAD

    Three different constant-loads are specified in this section. These being the booster pump, the re-compressors and then the general facility base-load.

              - NAME: boosterpump
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2
    - NAME: baseload
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 10
    - NAME: re-compressors
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2

    Full Model

    TIME_SERIES:
    - NAME: SIM1
    FILE: drogon_mean.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    - NAME: genset_a_power_fuel
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: wi_200
    FILE: wi_200bar_vsp.csv
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    MODELS:
    - NAME: drogon_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: PR
    COMPOSITION:
    water: 0.0
    nitrogen: 0.510676386339746
    CO2: 2.44965511776504
    methane: 75.6328106126248
    ethane: 10.9074631209139
    propane: 8.11875087121037
    i_butane: 0.849146377471569
    n_butane: 1.34903656604691
    i_pentane: 0.104982143381498
    n_pentane: 0.071218218251483
    n_hexane: 0.0063
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.8
    UNITS:
    EFFICIENCY: FRACTION
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: drogon_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 19.3
    FUEL_TYPES:
    - NAME: fuel_gas
    PRICE: 1.23
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: co2_fuel_gas
    FACTOR: 2.416
    TAX: 1.71
    INSTALLATIONS:
    - NAME: drogon
    CATEGORY: FIXED
    HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: main_power
    ELECTRICITY2FUEL: genset_a_power_fuel
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: wi_lp
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a_lp
    CHART: wi_200
    - NAME: pump_b_lp
    CHART: wi_200
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1025
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    - 0
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS:
    - 0.5
    - 0.5
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200

    - NAME: compressor_train
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: simplified_compressor_train_model
    RATE: SIM1;GAS_PROD
    SUCTION_PRESSURE: 13
    DISCHARGE_PRESSURE: 421

    - NAME: boosterpump
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2
    - NAME: baseload
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 10
    - NAME: re-compressors
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2

    Input Data

    Facility resources

    genset.csv
    POWER, FUEL
    # [MW], [Sm3/d]
    0,0
    2.38,37766.13
    4.76,50769.26
    5.9,59258.52
    7.14,63772.39
    9.52,76775.52
    10.71,83277.09
    11.9,89808.09
    14.28,102781.8
    16.66,115784.9
    17.8,119883.6
    19.04,128788
    21.42,141791.2
    21.4201,166554.2
    28.56,205563.6
    33.32,231569.8
    38.08,257576.1
    42.84,283582.3
    wi_200bar_vsp.csv
    RATE,HEAD,EFFICIENCY,SPEED
    967,1810,78,4365
    900,1900,80.4,4365
    700,2280,81,4365
    600,2385,78,4365
    500,2450,72.5,4365
    480,2475,71.5,4365
    900,1700,80.4,4157
    700,2000,81,4157
    600,2130,78,4157
    500,2200,72.5,4157
    460,2210,69,4157
    830,1340,81,3741
    800,1400,81.7,3741
    600,1675,78,3741
    500,1765,72.5,3741
    415,1805,66,3741
    740,1075,81.5,3326
    700,1120,81,3326
    500,1350,72.5,3326
    400,1405,64.5,3326
    365,1425,62,3326
    640,800,79.5,2885
    600,840,78,2885
    400,1050,64.5,2885
    320,1075,57,2885

    Timeseries resources

    drogon_mean.csv
    DATE,GAS_PROD,OIL_PROD,WATER_INJ
    01.01.2020,329327.76,2301.9189,3796.9621
    01.01.2021,533620.39,3699.8435,8533.0322
    01.01.2022,416004.76,2837.5915,9434.1385
    01.01.2023,340118.19,2280.7372,10019.154
    01.01.2024,290127.01,1905.7952,10428.387
    01.01.2025,253292.19,1635.7671,10725.254
    01.01.2026,223584.53,1426.9726,10954.338
    01.01.2027,198453.07,1249.781,11153.675
    01.01.2028,177306.77,1099.8572,11318.01
    01.01.2029,159723.78,977.37529,11450.614
    01.01.2030,145056.33,875.30836,11561.335
    01.01.2031,132577.75,788.45521,11654.645
    01.01.2032,122166.68,715.64707,11734.129
    01.01.2033,113070.74,653.71407,11802.565
    01.01.2034,105114.67,600.04874,11860.717
    01.01.2035,98147.958,553.56297,11910.283
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/examples/index.html b/docs/about/modelling/examples/index.html new file mode 100644 index 0000000000..222a6ab1ec --- /dev/null +++ b/docs/about/modelling/examples/index.html @@ -0,0 +1,16 @@ + + + + + +Examples | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/examples/simple/index.html b/docs/about/modelling/examples/simple/index.html new file mode 100644 index 0000000000..a8f49c948d --- /dev/null +++ b/docs/about/modelling/examples/simple/index.html @@ -0,0 +1,72 @@ + + + + + +Simple model | eCalc™ Docs + + + + +
    +

    Simple model example

    The following is an example with one installation called Installation A that exports oil (OIL_PROD) and gas (GAS_PROD). +The installation emits CO2 that is subject to taxation and emission quotas.

    On this installation, the following components are identified:

    graph TD; + A(Installation A) --> B(Flare); + A --> C(Gas export compressor); + A --> D(Generator set A); + D --> E(Base production load); + D --> F(Gas injection compressor); + D --> G(Produced water reinjection pump); + D --> H(Sea water injection pump); + style A stroke:red; + style E stroke:blue; + style F stroke:blue; + style G stroke:blue; + style H stroke:blue;

    The results of a performed characterization of the equipment are listed below:

    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production loadPower consumerConstant load 11.8 MW
    Gas injection compressorPower consumerVariable consumption depending on gas injection rate and lift gas rate
    Produced water reinjection pumpPower consumerVariable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar.
    Sea water injection pumpPower consumerVariable consumption depending on a complex combination on water injection rate and water production rate
    FlareDirect fuel consumerBefore 1.1.2005: Constant fuel rate 10000 Sm3/day, From 1.1.2005: Constant fuel rate 7000 Sm3/day
    Gas export compressorDirect fuel consumerVariable fuel consumer depending on gas sales rate

    YAML model overview

    The YAML model consist of these main components:

    The YAML setup file looks like this:

    model.yaml
    TIME_SERIES:
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    VARIABLES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>

    We will now replace the placeholders for each of the main keywords above.

    TIME_SERIES

    The reservoir variables, in this case, are found in a CSV (Comma separated file) production_data.csv. +We give the time-series data a name that can be referenced as variables elsewhere in the form <NAME>:<NAME OF COLUMN>. +See TIME_SERIES for further details.

    model.yaml
    TIME_SERIES:
    - NAME: SIM
    FILE: production_data.csv
    TYPE: DEFAULT

    FACILITY_INPUTS

    We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets, +tabulated/sampled models and pump charts. +See FACILITY_INPUTS for further details.

    Here we define a tabulated genset, a sampled compressor, a sampled compressor driven by a turbine, a sampled pump, +and a single speed pump chart. These will be used in the final model for illustration. +Note that more complicated energy models are defined under the MODELS-keyword.

    See the input data further down to understand the input formats.

    model.yaml
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: compressor_sampled
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: compressor_with_turbine_sampled
    FILE: compressor_sampled_with_turbine.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_sampled
    FILE: pump_sampled.csv
    TYPE: TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE

    FUEL_TYPES

    In this example there is only one FUEL_TYPES - fuel_gas. This has a price/value +of 1.5 NOK/Sm3 and the emissions we model with the fuel is CO2. The CO2 factor +is 2.19 kg CO2 per Sm3 fuel gas burned. The CO2 tax is set to 1.5 NOK/Sm3 +fuel gas burned, and it has a quota price of 260 NOK/ton.

    model.yaml
    FUEL_TYPES:
    - NAME: fuel_gas
    PRICE: 1.5 #NOK/Sm3
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.19 #CO2/Sm3 fuel gas burned
    TAX: 1.5 #NOK/Sm3 fuel gas burned
    QUOTA: 260 #NOK/ton

    VARIABLES

    To run the model it is recommended to specify VARIABLES, +instead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model +by allowing descriptive variable names and avoid duplications.

    For our model, we specify the following variables:

    model.yaml
    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent
    salt_water_injection_rate_m3_per_day:
    VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    gas_injection_rate_sm3_per_day:
    VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT
    produced_water_reinjection_condition:
    VALUE: SIM;WATER_PROD > 1500
    produced_water_reinjection_total_system_rate_m3_per_day:
    VALUE: SIM;WATER_PROD
    flare_fuel_rate_sm3_day:
    1995-10-01:
    VALUE: 10000
    2005-01-01:
    VALUE: 7000

    We reference the TIME_SERIES SIM using the column names from the CSV file. Here we use for example +SIM:OIL_PROD (Field Oil Production Rate) SIM:GAS_PROD (Field Gas Sales Rate).

    tip

    It is possible to specify if-else conditions by multiplying with boolean values. +This has been done in the $var.salt_water_injection_rate_m3_per_day variable example above.

    INSTALLATION

    An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form +of generatorsets (with electric sub-consumers), and direct fuel consumers.

    We specify:

    • NAME: the installation name
    • HCEXPORT: Hydrocarbon export in Sm3/day by referring to the variable specified under VARIABLES above.
    • FUEl: Default fuel specified in FUEL_TYPES above.
    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>

    GENERATORSETS

    There is one generator set, Generator set A. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumers getting +power from the generator set are Base production load, Gas injection compressor, Produced water re-injection pump +and Sea-water injection pump. The setup for Generator set A thus becomes:

        GENERATORSETS:
    - NAME: Generator set A
    ELECTRICITY2FUEL: genset
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    <placeholder>

    FUELCONSUMERS

    The direct fuel consumers are Flare and Gas export compressor.

    model.yaml
        FUELCONSUMERS:
    - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Gas export compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <placeholder>

    ENERGY_USAGE_MODEL

    We will now fill in the final placeholders with detailed ENERGY_USAGE_MODELs.

    Base production load has a constant load of 11.8 MW:

              - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 11.8 # MW

    Gas injection compressor is represented by a tabulated (sampled) energy usage model defining the relationship +between the gas injection rate [Sm3/day] and the corresponding power requirement. The gas rate is already defined +in the variable gas_injection_rate_sm3_per_day as SIM;GAS_INJ {+} SIM;GAS_LIFT:

              - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_sampled
    RATE: $var.gas_injection_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc

    Produced water reinjection pump is variable and its energy function is dependent on the field's water +production rate (WATER_PROD) that is set in the variable produced_water_reinjection_condition as SIM;WATER_PROD. +The pump only runs when the variables produced_water_reinjection_condition evaluates to true as SIM;WATER_PROD > 1500. +This is when the water production is above 1500 Sm3/day. Fluid density, suction pressure and discharge pressure +is also defined:

              - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.produced_water_reinjection_condition
    ENERGYFUNCTION: pump_chart
    RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day
    FLUID_DENSITY: 1010
    SUCTION_PRESSURE: 10 # [bara]
    DISCHARGE_PRESSURE: 200 # [bara]

    Sea water injection pump has an energy function that is dependent on the seawater injection rate. +This rate is not modeled explicitly in the reservoir input source, but it may be computed +from the injection (WATER_INJ) and production (WATER_PROD) rate by the following rules:

    • In general, the seawater injection rate (SEAWATER_INJ), is the difference between injected and +produced water: SEAWATER_INJ = WATER_INJ - WATER_PROD.

    • When the produced water rate is below 1500 SM3/day, this goes directly to sea, such that +SEAWATER_INJ = WATER_INJ when WATER_PROD < 1500.

    • When the produced water rate is between 17000 and 18500 SM3/day, everything above 17000 SM3/day +goes directly to the sea, thus SEAWATER_INJ = WATER_INJ - 17000 when 17000 < WATER_PROD < 18500.

    This is specified as the variable sea_water_injection_rate_m3_per_day above and is defined as:

    The model is specified:

              - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: pump_sampled
    VARIABLES:
    - NAME: RATE
    EXPRESSION: $var.sea_water_injection_rate_m3_per_day

    The flare is changing on the 1st of January 2005. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_fuel_rate_sm3_day +above.

    The model is specified:

          - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_fuel_rate_sm3_day

    Gasexport is a variable fuel consumer whose energy function depends on the field gas sales rate (GAS_PROD) defined +in the variable gas_export_rate_sm3_per_day as SIM;GAS_PROD. Even though it is not used in the eCalc model, suction and discharge pressure needs to be specified in order for the model to run.

    The model is specified:

          - NAME: Gas export compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_with_turbine_sampled
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc

    Full eCalc YAML model

    model.yaml
    TIME_SERIES:
    - NAME: SIM
    FILE: production_data.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: compressor_sampled
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: compressor_with_turbine_sampled
    FILE: compressor_sampled_with_turbine.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_sampled
    FILE: pump_sampled.csv
    TYPE: TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE

    FUEL_TYPES:
    - NAME: fuel_gas
    PRICE: 1.5 # NOK/Sm3
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.19 # CO2/Sm3 fuel gas burned
    TAX: 1.5 # NOK/Sm3 fuel gas burned
    QUOTA: 260 # NOK/ton

    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent
    salt_water_injection_rate_m3_per_day:
    VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    gas_injection_rate_sm3_per_day:
    VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT
    produced_water_reinjection_condition:
    VALUE: SIM;WATER_PROD > 1500
    produced_water_reinjection_total_system_rate_m3_per_day:
    VALUE: SIM;WATER_PROD
    flare_fuel_rate_sm3_day:
    1995-10-01:
    VALUE: 10000
    2005-01-01:
    VALUE: 7000

    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: Generator set A
    ELECTRICITY2FUEL: genset
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 11.8 # MW
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_sampled
    RATE: $var.gas_injection_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.produced_water_reinjection_condition
    ENERGYFUNCTION: pump_chart
    RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day
    FLUID_DENSITY: 1010
    SUCTION_PRESSURE: 10 # bara
    DISCHARGE_PRESSURE: 200 # bara
    - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: pump_sampled
    VARIABLES:
    - NAME: RATE
    EXPRESSION: $var.salt_water_injection_rate_m3_per_day
    FUELCONSUMERS:
    - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_fuel_rate_sm3_day
    - NAME: Gas export compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_with_turbine_sampled
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc

    Input files

    compressor_sampled.csv
    RATE,POWER
    #[Sm3/day],[MW]
    0,0
    1,4.1
    100000000,4.1
    200000000,4.1
    210000000,4.1
    220000000,4.4
    230000000,4.8
    240000000,5.1
    250000000,5.4
    260000000,5.8
    270000000,6.1
    280000000,6.4
    290000000,6.8
    300000000,7.1
    500000000,14.2
    compressor_sampled_with_turbine.csv
    RATE,FUEL
    #[Sm3/day],[Sm3/day]
    0,0
    0.1,50000
    3000000,50000
    3500000,130000
    7000000,170000
    genset.csv
    POWER,FUEL
    #[MW],[Sm3/day]
    0, 0
    0.1, 65000
    10.0, 75000
    20.0, 126000
    40.0, 250000
    100.0, 750000
    pump_chart.csv
    SPEED,RATE,HEAD,EFFICIENCY
    3250,250,2640,59
    3250,360,2490,68
    3250,500,2342,77
    3250,600,2210,80
    3250,667,2068,78
    3250,735,1870,74
    pump_sampled.csv
    RATE,POWER
    #[Sm3/day],[MW]
    0,0
    1,3
    8500,4
    9000,4
    17000,6
    17500,9
    36000,13
    production_data.csv
    Dates,                  OIL_PROD,  GAS_PROD,    WATER_PROD, WATER_INJ,  GAS_INJ,    GAS_LIFT
    #, Sm3/d, Sm3/d, m3/d, m3/d, Sm3/d, Sm3/d
    2020-01-01 00:00:00, 9000, 3500000, 18000, 34000, 2200000, 130000
    2021-01-01 00:00:00, 8000, 3600000, 19000, 33000, 2200000, 170000
    2022-01-01 00:00:00, 7000, 3700000, 15000, 30000, 2200000, 210000
    2023-01-01 00:00:00, 6000, 3800000, 16000, 33000, 2300000, 240000
    2024-01-01 00:00:00, 6000, 3900000, 14000, 35000, 2300000, 280000
    2024-12-01 00:00:00, 6000, 4000000, 15000, 36000, 2400000, 310000
    2026-01-01 00:00:00, 7000, 4100000, 18000, 36000, 2400000, 350000
    2027-01-01 00:00:00, 6000, 4500000, 15000, 38000, 2400000, 390000
    2028-01-01 00:00:00, 6000, 3500000, 12000, 33000, 2400000, 430000
    2029-01-01 00:00:00, 5000, 2500000, 14000, 36000, 2400000, 460000
    2030-01-01 00:00:00, 6000, 2000000, 16000, 35000, 2400000, 500000
    2031-01-01 00:00:00, 4000, 3000000, 14000, 33000, 2400000, 530000
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/index.html b/docs/about/modelling/index.html new file mode 100644 index 0000000000..db48d17ebd --- /dev/null +++ b/docs/about/modelling/index.html @@ -0,0 +1,16 @@ + + + + + +Modelling guide | eCalc™ Docs + + + + +
    +

    Modelling

    This section describes how to use eCalc.

    tip

    It is good practice when writing the eCalc YAML setup file to include, as comments, the version it was written for, your name and a ‘change log’ which should include the date and changes made.

    The YAML setup file:

    # ecalc version v5.3.1
    # input by: john.doe@example.com
    #
    # change log - add comments regarding relevant changes made to the file
    # date: YYYYMMDD, john doe
    # extended suction and discharge pressure range for precompressor
    # date: YYYYMMDD, jane doe
    # updated gensetA

    TIME_SERIES:
    - NAME: SIM1
    FILE: examplecase_inputvariables.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html b/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html new file mode 100644 index 0000000000..0d8c76d3e6 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html @@ -0,0 +1,19 @@ + + + + + +Generator modelling | eCalc™ Docs + + + + +
    +

    Generator modelling

    In eCalc™, the term generator refers to equipment producing electrical power from fuel. Hence, the turbine part (fuel combustion to produce mechanical energy) is included in the term.

    An installation usually have one or more generators to fill the electrical power demand. In eCalc™, the separate generators are combined into a common generator set (genset).

    note

    In the future, eCalc™ will most likely offer modelling of single generators that could be combined in systems.

    ELECTRICITY2FUEL

    Electricity to fuel is a table specifying the relationship between electrical load +and fuel consumption for an entire generator set. This means that if you have several generators, +this table needs to include a "jump" every time a new generator is started. An example of this +is shown below.

    Under FACILITY_INPUTS, this electricity to fuel table is specified using the keyword ELECTRICITY2FUEL

    Facility input format

    FACILITY_INPUTS:
    - NAME: <generator name>
    FILE: <file path to .csv file>
    TYPE: ELECTRICITY2FUEL

    Example table

    The table for this curve would look like:

    POWER, FUEL
    #[MW], [Sm3/day]
    0.00, 0.0
    0.10, 84000.0
    5.00, 84000.0
    42.0, 220000.0
    42.01, 280000.0
    45.0, 300000.0
    50.0, 330000.0
    60.0, 350000.0

    Header and unit requirements

    HeaderUnitMandatory
    PowerMWYes
    FuelSm3/dayYes
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/index.html b/docs/about/modelling/setup/facility_inputs/index.html new file mode 100644 index 0000000000..fb770056be --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/index.html @@ -0,0 +1,23 @@ + + + + + +Facility inputs | eCalc™ Docs + + + + +
    +

    Facility inputs

    note

    The FACILITY_INPUTS keyword is mandatory within the eCalc™ YAML file.

    This part of the setup defines input files that characterize various facility elements. Each facility element is +specified in a list. These are later used as input in the INSTALLATIONS part of the setup by referencing their NAME.

    All facility inputs are in essence a CSV (Comma separated file) file that specifies input data to a model that +calculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple +supported types.

    There are four categories of data that can be used here:

    • Files describing the performance of a generator set
    • Files describing the performance of pumps (pump charts)
    • Files describing the performance of only tabular compressors (sampled compressor data)
    • Other energy consuming equipment modeled variable w.r.t. reservoir management +(tabulated relationship between variables and consumption)

    eCalc™ supports making simple adjustments to a table by using the ADJUSTMENT +keyword as well as modification of the HEAD_MARGIN +which can be used while calibrating pump charts.

    Format

    Each facility input has the skeleton as seen below. However, some inputs require further information. For example, pump models

    FACILITY_INPUTS:
    - NAME: <reference name>
    FILE: <file_path.csv>
    TYPE: <consumer type>

    Supported types

    The facility input type is defined using the TYPE keyword and defines the type of model applied +to the data in this file. The input files are in CSV (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file.

    The supported types are:

    • ELECTRICITY2FUEL
    • TABULAR
    • COMPRESSOR_TABULAR
    • PUMP_CHART_SINGLE_SPEED
    • PUMP_CHART_VARIABLE_SPEED
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html b/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html new file mode 100644 index 0000000000..38b9c002d0 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html @@ -0,0 +1,18 @@ + + + + + +Pump modelling | eCalc™ Docs + + + + +
    +

    Pump modelling

    Attention

    Pumps can both be single speed and variable speed. Often, the pumping capacity on an installation is filled with a system of several pumps in parallel.

    Attention

    The pump models in eCalc™ are intended for water, i.e., there is no friction dependency. +Thus, for usage in other types of pumps (e.g., where the +fluid viscosity changes with the fluid mixture), the results might not be as intended.

    Core theory behind the modelling of pumps in eCalc™ can be found here.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html b/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html new file mode 100644 index 0000000000..888da4d0d2 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html @@ -0,0 +1,33 @@ + + + + + +Pump chart | eCalc™ Docs + + + + +
    +

    Pump chart

    Energy usage for pumps is not based on pre-sampled data between rates, +pressures and energy usage, but on equations and the pump chart defining the pumps.

    There are two types of pump models supported:

    • Variable speed pumps
    • Single speed pumps

    The pump chart defines the pump's operational area. When rates below minimum flow +(a point with the lowest rate for a single speed pump and a line defined by the lowest rate vs. +head for each speed for variable speed) are requested, the rate is projected up and +evaluated at minimum flow to mimic the ASV (anti-surge valve).

    For heads below minimum head/minimum speed, i.e., when the requested pressure +difference between the outlet and the inlet is smaller than the minimum pressure difference, +the head will be lifted up to minimum head to mimic that the pump will then be run on +its minimum speed and the pressure will be choked back downstream of the pump. +For single speed pumps, the minimum speed/minimum head curve is the same as +the head vs. rate curve.

    Tip

    When calibrating pump charts to historical data, the head values for maximum speed could be +put in the cloud of data to be unbiased. However, eCalc will treat all head values above the +maximum defined in the chart as infeasible (outside pump capacity).

    To mitigate this when +running through historical data for power calibration, the keyword HEAD_MARGIN may be used to move points outside capacity (but inside the margin) to the capacity limit.

    PUMP_CHART_SINGLE_SPEED

    Pump chart data for single speed pump. The required fields are RATE and HEAD. Optionally (and most likely) EFFICIENCY and UNITS should be supplied as well. +(if not given, efficiency is set to 100%).

    Header Requirements

    Required

    • RATE
    • HEAD

    Optional

    • EFFICIENCY, if not set the efficiency is assumed to be 100%.
    • SPEED, if set all values must be equal.

    Note that speed is not used in any way for single speed pumps and is only included here to allow the speed column to be +present in the input file without the run failing. There is still a check that all speeds are equal if speed is present +to avoid usage of the wrong pump model, i.e. avoid using the single speed model for variable speed pump chart data.

    Format

    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>

    PUMP_CHART_VARIABLE_SPEED

    Description

    Pump chart data for variable speed (VSD) pump. The required fields are SPEED, +RATE and HEAD. Optionally (and most likely) EFFICIENCY and UNITS should be supplied as well. +(if not given, efficiency is set to 100%).

    Header Requirements

    • RATE, HEAD and SPEED required.
    • EFFICIENCY, UNITS optional.

    Format

    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>

    Examples

    FACILITY_INPUTS:
    - NAME: a_single_speed_pump
    FILE: inputs/single_speed_pumpchart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    - NAME: a_variable_speed_pump
    FILE: inputs/variable_speed_pumpchart.csv
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    - NAME: a_single_speed_pump_with_head_margin_applied
    FILE: inputs/single_speed_pumpchart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    HEAD_MARGIN: 10
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html b/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html new file mode 100644 index 0000000000..0455a04245 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html @@ -0,0 +1,24 @@ + + + + + +Sampled compressor model | eCalc™ Docs + + + + +
    +

    Sampled compressor model

    The compressor model is set up in an external tool, and this model is sampled by +running a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a .csv file and +inputted into eCalc™. Each line in the .csv defines a point (rate, suction pressure, discharge pressure) and the total energy usage.

    • For electrically driven compressor trains. The total energy usage should be given in megawatts (MW).

    • For turbine driven compressor trains. It is recommended to give the total energy usage in megawatts (MW) and couple the compressor model to a turbine model. However, it is possible (for backward compatibility) to give the total energy usage as fuel usage in standard cubic meters per day (Sm3/day) and use the model directly. In this case, you can also provide a POWER (MW) column to calculate power for the shaft based on fuel usage.

    • The latter (turbine driven compressor train) will at some point become deprecated as it is replaced by COMPRESSOR_WITH_TURBINE mentioned above.*

    • Inside the convex hull defined by the input variables, there is a +barycentric interpolation +based on a Delaunay triangulation.

    • Outside the defined area, there may be extrapolations where this is reasonable, i.e.,

      • for rates lower than the defined rates, the table is extrapolated up to minimum +flow (to mimic ASV (anti-surge valve)/recirculation valve)
      • the suction pressure is extrapolated down to the defined area
      • the discharge pressure is extrapolated up to defined area to mimic choking when the required +head is lower than the compressor operational area.

    Format

    The sampled compressor model is defined under the main keyword FACILITY_INPUTS in the format

        NAME: <model name>
    FILE: <sampled_data>.csv
    TYPE: COMPRESSOR_TABULAR

    Header requirements for the sampled compressor csv file

    • POWER (and/or FUEL)
    • A minimum of one (but more are allowed) of the following:
      • RATE
      • SUCTION_PRESSURE
      • DISCHARGE_PRESSURE

    In cases where the model is directly used as a turbine/fuel driven compressor without coupling it to an eCalc turbine +model, POWER may be replaced by FUEL.

    Shaft power reporting

    In the case FUEL is provided, it is also possible to specify POWER in the csv-file in order to calculate shaft power usage for fuel driven compressors

    If only POWER is provided, we assume that the compressor is electrical-driven +If FUEL is provided, we assume that the compressor is turbine-driven (also when both FUEL and POWER is given)

    Units

    QuantityUnits
    POWERMW
    RATESm3/day
    SUCTION_PRESSUREbar
    DISCHARGE_PRESSUREbar
    FUELSm3/day

    Example tables

    1D example

    RATEPOWER
    00
    10000010
    100000010
    260000015
    440000020

    3D example

    RATESUCTION_PRESSUREDISCHARGE_PRESSUREPOWER
    1.00E+061012.720.3664
    1.00E+061026.212.293
    1.00E+062631.360.2739
    1.00E+062670.776.28
    1.00E+063441.210.368
    1.00E+063494.248.435
    1.00E+067894.120.7401
    1.00E+0678231.622.46
    6.00E+062636.934.197
    6.00E+062657.437.32
    6.00E+063846.962.156
    6.00E+0638106.29.557
    6.00E+065467.261.95
    6.00E+0654155.614.35
    6.00E+067894.171.399
    6.00E+0678231.622.46
    1.10E+074266.929.712
    1.10E+074281.6311.89
    1.10E+076275.643.678
    1.10E+0762180.816.94
    1.10E+077897.793.452
    1.10E+0778231.622.46
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/tabular/index.html b/docs/about/modelling/setup/facility_inputs/tabular/index.html new file mode 100644 index 0000000000..ff372f9a86 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/tabular/index.html @@ -0,0 +1,20 @@ + + + + + +Tabular models | eCalc™ Docs + + + + +
    +

    Tabular models

    Additional equipment that are considered to be energy consumers can be specified using the keyword TABULAR. +This is given that a form of reservoir rates (oil/gas production) can be linked to either fuel or power consumption.

    This is considered to be a consumer energy function for pure barycentric interpolation, no extrapolation outside +convex area. One column defines the function value, the rest of the columns defines the +variables for a 1D (if one variable column) or multidimensional interpolation.

    Header and unit requirements

    HeaderUnitComment
    PowerMWFor power driven consumers
    FuelSm3/dayFor fuel (turbine) driven consumers

    Variable headers can be chosen freely as long as these correspond to the defined variables for the function.

    Example

    1D tabular energy function

    Contents of the file energyfunc_1d_rate_fuel.csv:

    RATE,     FUEL
    0, 0
    1, 137750
    1000000, 137750
    2000000, 145579
    3000000, 153335
    4000000, 161022
    5000000, 168644

    The entry in FACILITY_INPUTS:

    FACILITY_INPUTS:
    - NAME: gasinjectiondata
    FILE: energyfunc_1d_rate_fuel.csv
    TYPE: TABULAR

    The entry in INSTALLATIONS under a fuel consumer:

    INSTALLATIONS:
    ....
    - NAME: gasinjection
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: gasinjectiondata
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_INJ # [Sm3/day]
    Note

    Note that the name RATE in the input file (under FACILITY_INPUT) and the variable name RATE under VARIABLES +must be equal!

    3D tabular energy function

    Contents of file energyfunc_3d_rate_ps_pd_power.csv:

         RATE, SUCTION_PRESSURE, DISCHARGE_PRESSURE,       POWER
    # [Sm3/d], [bar], [bar], [MW]
    1.00E+06, 10, 12.72, 0.3664
    1.00E+06, 10, 26.21, 2.293
    1.00E+06, 26, 31.36, 0.2739
    1.00E+06, 26, 70.77, 6.28
    1.00E+06, 34, 41.21, 0.368
    1.00E+06, 34, 94.24, 8.435
    1.00E+06, 78, 94.12, 0.7401
    1.00E+06, 78, 231.6, 22.46
    6.00E+06, 26, 36.93, 4.197
    6.00E+06, 26, 57.43, 7.32
    6.00E+06, 38, 46.96, 2.156
    6.00E+06, 38, 106.2, 9.557
    6.00E+06, 54, 67.26, 1.95
    6.00E+06, 54, 155.6, 14.35
    6.00E+06, 78, 94.17, 1.399
    6.00E+06, 78, 231.6, 22.46
    1.10E+07, 42, 66.92, 9.712
    1.10E+07, 42, 81.63, 11.89
    1.10E+07, 62, 75.64, 3.678
    1.10E+07, 62, 180.8, 16.94
    1.10E+07, 78, 97.79, 3.452
    1.10E+07, 78, 231.6, 22.46

    The entry in FACILITY_INPUTS:

    FACILITY_INPUTS:
    - NAME: booster
    FILE: energyfunc_3d_rate_ps_pd_power.csv
    TYPE: TABULAR

    The entry in INSTALLATIONS under a fuel consumer (for 3-d tabular):

    INSTALLATIONS:
    ...
    - NAME: gasexport
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: booster
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_SALES # [Sm3/day]
    - NAME: SUCTION_PRESSURE
    EXPRESSION: SIM1;SUCTION_PRESSURE {+} 3 # [bara]
    - NAME: DISCHARGE_PRESSURE
    EXPRESSION: 100 # [bara]
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html b/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html new file mode 100644 index 0000000000..7fe2b0aa91 --- /dev/null +++ b/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html @@ -0,0 +1,37 @@ + + + + + +Expressions | eCalc™ Docs + + + + +
    +

    Expressions

    The variables needed in the energy functions for the variable consumers, may not always be directly found in the +reservoir inputs. For example, there may be two group rates that should be added to be +consistent with the net rate through a compressor system. Or, it may be that a pressure defined in a network node is +not equal to the pressure at the inlet/outlet of a compressor system and some delta pressure must be added.

    To avoid forcing the users to define new variables in the simulation files/CSV data and also keep the data in the +consumer’s energy function consistent, the calculator supports expressions to define variables (and conditions in the +CONDITIONS.

    danger

    When creating new variables from CSV files make sure to choose the right interpolation type! +See INTERPOLATION_TYPE for more information.

    Available operators

    As reservoir simulation vectors (and also CSV headers) may include mathematical operators +like +, - in their names, the operators must be surrounded by curly brackets, {}, +in the expressions. Logical operators (>, >=, <, <=, ==, !=) +evaluates to 0 or 1.

    The following operators are supported:

    OperatorDescriptionExample
    {+}Addition2 {+} 1
    {-}SubtractionSIM;GAS {-} 10
    {*}MultiplicationSIM;GAS {*} 2
    {/}DivisionSIM;GAS {/} 2
    {^}PowerSIM;GAS {^} 2
    ( )Parentheses( SIM;GAS {+} 2 ) {/} 2
    <Less thanSIM;GAS {+} (SIM1;OIL < 150) {*} 1000000
    <=Less than or equalSIM;GAS {+} (SIM1;OIL <= 150) {*} 1000000
    >Greater thanSIM;GAS {+} (SIM1;OIL > 150) {*} 1000000
    >=Greater than or equalSIM;GAS {+} (SIM1;OIL >= 150) {*} 1000000
    ==EqualSIM;GAS {+} (SIM;FLAG == 1) {*} 1000000
    !=Not equalSIM;GAS {-} (SIM;FLAG != 1) {*} 1000000

    Examples

    Combining data from different reservoir inputs

    The rate through a gas injection compressor is the sum of injection rate for the field plus +some additional injection rate for a tie-in (whose data is specified in a CSV file with +key SIM2):

    VARIABLES:
    total_rate_through_compressor:
    VALUE: SIM1;GAS_INJ {+} SIM2;GAS_INJ

    Model of additional rate

    The rate through a compressor is the produced rate plus some additional term. This term Q is a function of pressures P1P_{1} and P2P_{2},

    Q=25000P1(P2P1)Q = 25000 \cdot \sqrt{P_{1} \cdot \left( P_{2} - P_{1} \right)}

    The addition is only added when the reservoir gas rate is positive.

    VARIABLES:
    rate:
    VALUE: SIM;GAS_PROD {+} ( SIM;GAS_PROD > 0 ) {*} 25000 {*} ( SIM;P1 {*} ( SIM;P2 {-} SIM;P1 ) ) {^} 0.5
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/file_format_and_syntax/index.html b/docs/about/modelling/setup/file_format_and_syntax/index.html new file mode 100644 index 0000000000..8b97047b55 --- /dev/null +++ b/docs/about/modelling/setup/file_format_and_syntax/index.html @@ -0,0 +1,32 @@ + + + + + +File format and syntax | eCalc™ Docs + + + + +
    +

    File format

    The setup file is written in YAML format and needs to follow a strict pattern which consists of several levels specified by indentation. The indentation is very important. It is recommended to use an indentation of 2 spaces per level. At each level, there might be both required and optional keywords.

    Setup file syntax

    The overall system in eCalc is that the user defines inputs from subsurface and facility and +then establishes a model between these.

    On the top level, the required keywords are FACILITY_INPUTS which defines the input from facility characterization, TIME_SERIES which defines time-dependant input parameters (e.g. reservoir profiles), FUEL_TYPES which defines the various fuel types used in the system, and INSTALLATIONS which is the top node defining the system of energy consumers. MODELS is optional and may be used for multi-level energy usage models.

    Documentation about how to set up each of these fields are found here, respectively:

    • TIME_SERIES: List of input sources, CSV-files, containing all time series data including the +reservoir variables.
    • FACILITY_INPUTS: List of input files from facility characterization. Typically, this can be +characteristics for an element in a consumer system or characteristics for a generator set. +Also, if fuel price or/and CO2 tax is of type VARIABLE_FUEL_PRICE or +VARIABLE_EMISSION_TAX, these files should also be put here. These are later used as input +to the energy functions for each consumer. Some may also be used as energy functions directly.
    • FUEL_TYPES: Defining the fuel types being used in the model and the corresponding +emissions.
    • MODELS: Used for multi-level models, one model may refer to other models from either +MODELS or FACILITY_INPUTS
    • VARIABLES: Used for defining variables to be used in expressions throughout the YAML file
    • INSTALLATIONS: Defining the system of energy consumers on each installation +(e.g. platform or mobile unit).

    An eCalc model may contain one or several installations. Each installation has a set of specifications +(e.g. fuel type, hydrocarbon export, ...) and specifications of the system of consumers.

    Emissions are emitted when fuel is burned. Thus, the first sublevel of consumers for an installation, +are the fuel burners. As the figure below shows, there are three main types of fuel burners:

    • Electricity generation (generator sets),
    • Turbine-driven processes,
    • Flare/vent/other non reservoir dependent burners/emitters.

    In eCalc under each installation, there is one keyword (GENERATORSETS) +specifying the generator sets and one keyword (FUELCONSUMERS) +specifying processes that require fuel directly (turbine-driven processes and flare/vent).

    The processes with electrical motor drives and other electrical loads are modeled at the sublevel +under GENERATORSETS.

    Comments

    Comments are supported anywhere in the yml and csv files by using '#' to indicate the start of a comment. +All data after a '#' on the same line is ignored. If '#' is used at the beginning of the file, the +first line without a preceding '#' is used as the header.

    Examples

    YAML format example

    TIME_SERIES:
    - FILE:
    TYPE:
    NAME:

    FACILITY INPUTS:
    - FILE:
    TYPE:
    NAME:

    FUEL_TYPES:
    - NAME:
    FACTOR:

    MODELS:
    - NAME:
    - TYPE:

    VARIABLES:
    <variable_name>
    VALUE: <expression>

    INSTALLATIONS:
    - NAME:
    HCEXPORT:
    FUEL:
    GENERATORSETS:
    - NAME:
    ELECTRICITY2FUEL:
    CATEGORY:
    CONSUMERS:
    - NAME:
    CATEGORY:
    ENERGY_USAGE_MODEL:

    Full examples

    Examples are an excellent way to quickly get an overview of the syntax. Check them out here.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/fuel_types/index.html b/docs/about/modelling/setup/fuel_types/index.html new file mode 100644 index 0000000000..fd1c7bf7a7 --- /dev/null +++ b/docs/about/modelling/setup/fuel_types/index.html @@ -0,0 +1,21 @@ + + + + + +Fuel types | eCalc™ Docs + + + + +
    +

    Fuel types

    note

    The FUEL_TYPES keyword is mandatory within the eCalc™ YAML file.

    This part of the setup specifies the various fuel types and associated emissions +used in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the +INSTALLATIONS part of the setup by its name.

    A fuel type can have a fuel-cost PRICE associated with +its use. The use of fuel can lead to one or more emission types, specified in EMISSIONS, +which in turn can have associated costs.

    You can optionally specify a CATEGORY.

    Format

    FUEL_TYPES:
    - NAME: <name_1>
    CATEGORY: <category_1>
    PRICE: <fuel price>
    EMISSIONS: <emissions data>
    - NAME: <name_2>
    CATEGORY: <category_2>
    PRICE: <fuel price>
    EMISSIONS: <emissions data>

    Example

    This is a full example where there are 3 fuel type definitions, i.e., there are 3 different +fuels defined that can be used in your INSTALLATIONS.

    FUEL_TYPES:
    - NAME: fuel_gas # Name of this fuel, use this when referencing this fuel in the FUEL specification in the INSTALLATIONS part
    PRICE: 1.5 # The price or sales value of the fuel
    EMISSIONS:
    - NAME: CO2 # Name of the emission type
    FACTOR: 2.15 # kg/Sm3
    TAX: 1.51 # NOK/Sm3
    QUOTA: 280 # NOK/ton
    - NAME: CH4
    FACTOR: 0.00091 # kg/Sm3
    - NAME: flare_gas
    PRICE: 1.5
    CATEGORY: FUEL_GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.73
    TAX: 1.51
    - NAME: CH4
    FACTOR: 0.00024
    - NAME: diesel
    CATEGORY: DIESEL
    PRICE: 9000 # NOK/m3
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.7085 # kg/l - input diesel usage in l/d
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/index.html b/docs/about/modelling/setup/index.html new file mode 100644 index 0000000000..0b133c621c --- /dev/null +++ b/docs/about/modelling/setup/index.html @@ -0,0 +1,16 @@ + + + + + +Setup an eCalc™ Model | eCalc™ Docs + + + + +
    +

    Set up an eCalc Model

    This section describes how to create your own eCalc™ model file.

    There are six separate sections which make up each model, these being:

    InputFunction
    TIME_SERIESInput of time dependent variables. For example, production profiles for an installation
    FACILITY_INPUTSInput of generator sets, and facility equipment that consumers either power or fuel (with the exception of compressors that are modelled with compressor charts)
    MODELSInput of compressor models that use compressor charts. Gas turbines that are directly coupled to a compressor are also included here
    FUEL_TYPESInput of the various fuel types used in the specified installation(s)
    VARIABLESInput of variables that can reference to in expressions within the YAML set-up file
    INSTALLATIONSThis is essentially the only "output" section in the YAML setup file. All the inputs are specified and related to specific platforms/rigs, and whether or not they consume either power or fuel

    All of the above are mandatory inputs for eCalc™ to run, with the exception of models (which is an optional, but still important input) and variables.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html new file mode 100644 index 0000000000..c656afeba6 --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html @@ -0,0 +1,19 @@ + + + + + +Compressor | eCalc™ Docs + + + + +
    +

    COMPRESSOR Energy Usage Model

    When COMPRESSOR is specified under ENERGY_USAGE_MODEL the only keyword that is allowed is ENERGYFUNCTION. +This model only supports a single compressor, which can either be a tabular compressor model defined in FACILITY_INPUTS or a compressor model defined in MODELS.

    The attributes RATE, SUCTION_PRESSURE and +DISCHARGE_PRESSURE are required to be specified in the energy usage model. Here, the specified rate will be for the entire train, the +suction pressure will be at the inlet of the first stage, whilst the discharge pressure will be the outlet pressure of the last stage.

    Format

    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>
    RATE: <rate expression>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>

    Example

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: booster_compressor_reference
    RATE: SIM1;GAS_PROD
    SUCTION_PRESSURE: SIM1;SUCTION_PRESSURE
    DISCHARGE_PRESSURE: SIM1;DISCHARGE_PRESSURE
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html new file mode 100644 index 0000000000..a82ebcf085 --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html @@ -0,0 +1,17 @@ + + + + + +Compressor system | eCalc™ Docs + + + + +
    +

    COMPRESSOR_SYSTEM energy usage model

    When COMPRESSOR_SYSTEM is specified under ENERGY_USAGE_MODEL a fully defined compressor model (with charts) can be used. Here, the following are allowed under the +COMPRESSOR_SYSTEM keyword:

    The key difference between this model and the COMPRESSOR keyword is that multiple compression trains can be specified.

    Format

    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    CONDITION: <condition expression>
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model in facility inputs>
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>
    OPERATIONAL_SETTINGS:
    <operational settings data>

    Example

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    - RATES:
    - SIM1;GAS_SALES
    - 0
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    - RATES:
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html new file mode 100644 index 0000000000..310e6e64b4 --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html @@ -0,0 +1,17 @@ + + + + + +Compressor models | eCalc™ Docs + + + + +
    +

    Compressor models in calculations

    There are different options on how to utilise compressor models in the calculations within the +ENERGY_USAGE_MODEL section in INSTALLATIONS. Three different options will be illustrated here:

    No matter the compressor model type, it can either be placed in two sections, which can be:

    • Under the CONSUMERS section under GENERATORSETS. This is applicable for electrical motor driven compressors where electricity is generated in de-coupled gas turbines and distributed to the individual process units.
    • Under the FUELCONSUMERS section. Here it is necessary for the compressor model to be coupled to a gas turbine model. The coupled turbine is solely driving the compressor system to which it is attached to.

    Example

    INSTALLATIONS:
    - NAME: InstallationA
    CATEGORY: FIXED
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: gensetA
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    ...

    FUELCONSUMERS:
    - NAME: Gas export compressor
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html new file mode 100644 index 0000000000..5bec588d6d --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html @@ -0,0 +1,20 @@ + + + + + +Variable speed compressor train multiple streams and pressures | eCalc™ Docs + + + + +
    +

    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model

    This energy usage model allows the compressor train model type +Variable speed compressor train model with multiple streams and pressures.

    Format

    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    CONDITION: <condition expression>
    COMPRESSOR_TRAIN_MODEL: <reference a Variable speed compressor train model with multiple streams and pressures model>
    RATE_PER_STREAM:
    - <Expression for stream 1>
    - <Expression for stream 2>
    - ...
    - <Expression for stream N>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure expression>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>

    The number of elements in RATE_PER_STREAM must correspond to the number of streams defined for the model referenced in +COMPRESSOR_TRAIN_MODEL.

    INTERSTAGE_CONTROL_PRESSURE is required if the model referenced in COMPRESSOR_TRAIN_MODEL has has an +interstage control pressure defined. If there is no interstage control pressure defined in COMPRESSOR_TRAIN_MODEL, +INTERSTAGE_CONTROL_PRESSURE should not be defined.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/direct_consumers/index.html b/docs/about/modelling/setup/installations/direct_consumers/index.html new file mode 100644 index 0000000000..2a8540c5c6 --- /dev/null +++ b/docs/about/modelling/setup/installations/direct_consumers/index.html @@ -0,0 +1,19 @@ + + + + + +Direct consumers | eCalc™ Docs + + + + +
    +

    DIRECT ENERGY USAGE MODEL

    This energy model usage type allows for defining energy usage directly with an expression. It needs to be either +accompanied by LOAD (for electrical consumers) or FUELRATE (for fuel consumers). The energy usage will be +equal to the result of the expression given for LOAD/FUELRATE.

    When a model is run with REGULARITY, there is an option to specify whether the direct consumer is of stream day +or calendar day energy usage rate with CONSUMPTION_RATE_TYPE.

    Format

    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD/FUELRATE: <choose either load or fuelrate>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION/S: <choose either condition or conditions>
    POWERLOSSFACTOR: <power loss factor (number)>

    Example

    Direct load

    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 10

    Direct fuel rate

    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: 100000
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html b/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html new file mode 100644 index 0000000000..b23d0e8761 --- /dev/null +++ b/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html @@ -0,0 +1,31 @@ + + + + + +Generator sets | eCalc™ Docs + + + + +
    +

    Generator sets in calculations

    The GENERATORSETS keyword is optional. However, the only requirement is that each +installation must have defined either GENERATORSETS or +FUELCONSUMERS.

    Under GENERATORSETS one or several generator sets +(a 'set' of an engine of some sort and a generator) are specified in a list.

    Each generator set requires three sub-keywords, ELECTRICITY2FUEL +and CONSUMERS and CATEGORY. +Optionally, FUEL may be used to override the default fuel type specification for +the installation. If not specified, it will inherit that of the installation.

    What happens when fuel is specified?

    When FUEL is defined for a generator set, there is no merging between the installation fuel +definition and the generator set fuel definition, but a complete override of the configuration.

    Category can be either TURBINE-GENERATOR or POWER-FROM-SHORE.

    Format

    GENERATORSETS:
    - NAME: <generatorset name>
    CATEGORY: <category>
    FUEL: <optional fuel configuration reference>
    ELECTRICITY2FUEL: <electricity to fuel facility input reference>
    CONSUMERS:
    ...

    Electricity2fuel function

    Description

    The behavior of a generator set is described by an ELECTRICITY2FUEL +table, which relates the burned fuel rate to delivered power, including the power generation efficiency at different loads. +It also defines the operational envelope of the generator set.

    ELECTRICITY2FUEL may be modeled with a constant function through time or +with different power vs. fuel relations for different time intervals.

    Format

    ELECTRICITY2FUEL: <facility_input_reference>

    or

    ELECTRICITY2FUEL:
    <DATE>: <facility_input_reference_1>
    <DATE>: <facility_input_reference_2>

    Power from shore

    Description

    note

    Power from shore is currently handled in eCalc™ by defining a dummy ELECTRICITY2FUEL model with zero fuel usage, and applying the POWER-FROM-SHORE category. This is an intermediate solution and will be dealt with differently in the future.

    Example

    Make an ELECTRICITY2FUEL input file with zero fuel usage.

    POWER, FUEL
    # [MW], [SM3/day]
    0, 0
    50, 0

    Specify ELECTRICITY2FUEL under +FACILITY_INPUTS.

    FACILITY_INPUTS:
    - NAME: genset_pfs
    TYPE: ELECTRICITY2FUEL
    FILE: genset_pfs.csv

    Use the POWER-FROM-SHORE category and the ELECTRICITY2FUEL +specified under FACILITY_INPUTS.

    GENERATORSETS:
    - NAME: generatorset_with_pfs_event
    CATEGORY:
    2020-01-01: TURBINE-GENERATOR
    2030-01-01: POWER-FROM-SHORE
    ELECTRICITY2FUEL:
    2020-01-01: genset_turbine
    2030-01-01: genset_pfs
    CONSUMERS:
    ...

    If power from shore is used for the full time range you can skip the dates in both CATEGORY and ELECTRICITY2FUEL

    GENERATORSETS:
    - NAME: generatorset_with_pfs_event
    CATEGORY: POWER-FROM-SHORE
    ELECTRICITY2FUEL: genset_pfs
    CONSUMERS:
    ...

    Heaters and boilers

    Description

    note

    Heaters and boilers should be modeled in eCalc™ as +GENERATORSETS, applying the HEATER and BOILER categories. This is an intermediate solution and may be dealt with differently in the future.

    Example: Boiler as generator set

    Specify the correlation between energy delivered and fuel consumed under +FACILITY_INPUTS:

    FACILITY_INPUTS:
    - NAME: boiler_energy_fuel
    TYPE: ELECTRICITY2FUEL
    FILE: boiler_energy_fuel.csv

    Use the BOILER category and the ELECTRICITY2FUEL +specified under FACILITY_INPUTS:

    GENERATORSETS:
    - NAME: boiler_as_generator
    CATEGORY: BOILER
    ELECTRICITY2FUEL: boiler_energy_fuel
    CONSUMERS:
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/index.html b/docs/about/modelling/setup/installations/index.html new file mode 100644 index 0000000000..c8a7ea8f9b --- /dev/null +++ b/docs/about/modelling/setup/installations/index.html @@ -0,0 +1,27 @@ + + + + + +Installations | eCalc™ Docs + + + + +
    +

    Installations

    note

    The INSTALLATIONS keyword is mandatory within the eCalc™ YAML file.

    In INSTALLATIONS the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation.

    • Essentially installations on which fuel is burned to generate energy for the consumers.

    The structure of the keywords under INSTALLATIONS +is linked to the structure in the general consumer overview for an installation.

    CATEGORY is optional, and generally reserved for use with LTP.

    Referring to time series

    In the installations set up, one may refer to variables from TIME_SERIES +in many places by using expressions to build up custom, or changing, configurations.

    Referring to variables is done on the format:

    <KEY>;<VARIABLE_NAME>

    where <KEY> must be defined in TIME_SERIES, defining the time series input source +(e.g., CSV file), and <VARIABLE_NAME> is the name of the variable. +See TIME SERIES for more examples

    Time intervals for variables/expressions and models

    For various reasons, the data in the INSTALLATIONS section may vary in time. +The consumers may need to be modeled differently due to rebuilds or degeneration. It could be that the user wants to +make a simple model for some periods and a more detailed model for others (e.g., a rate only model early time periods and a pressure +dependent model in the field's late life).

    For the fields that support multiple time intervals, the syntax is generally to insert a +date on the format YYYY-MM-DD followed by the expression/model for the time interval between +this date and the next entered date. See Time intervals for an example.

    Note

    When time dependency is used, the values before the first time default to 0 (zero)

    • HCEXPORT is zero before the first time given.
    • ELECTRICITY2FUEL will have 0 fuel usage before the first time defined, despite a non-zero power load.
    • FUEL: The fuel rate will be 0 before the first entered date.
    • Consumer energy consumption will be 0 before the first defined time.

    Format

    INSTALLATIONS:
    - NAME: <name of installation 1>
    GENERATORSETS: <generator set specifications for installation 1>
    FUELCONSUMERS: <fuel consumer specifications for installation 1>
    FUEL: <fuel specification for installation 1>
    HCEXPORT: <hydrocarbon export specification for installation 1>
    REGULARITY: <regularity specification for installation 1>
    DIRECT_EMITTERS: <direct emissions specification for installation 1>
    CATEGORY: <category for installation 1>
    - NAME: <name of installation 2>
    GENERATORSETS: <generator set specifications for installation 2>
    FUELCONSUMERS: <fuel consumer specifications for installation 2>
    FUEL: <fuel specification for installation 2>
    HCEXPORT: <hydrocarbon export specification for installation 2>
    REGULARITY: <regularity specification for installation 2>
    DIRECT_EMITTERS: <direct emissions specification for installation 2>
    CATEGORY: <category for installation 2>
    - ...

    Example

    General structure

    INSTALLATIONS
    - NAME: Platform_A
    CATEGORY: FIXED
    <The data for installation 1 to be put here>
    - NAME: Platform_B
    CATEGORY: MOBILE
    <The data for installation 2 to be put here>

    Referring to time series

    SIM;OIL_PROD

    SIM is the key defined in TIME_SERIES.

    The user can define expressions of variables, +see expressions for details. The following is an example of using expressions:

    SIM1;WATER_PROD:FIELD_A {+} SIM2;WATER_PROD:FIELD_B

    SIM1 and SIM2 are here different reservoir sources with potential different time steps. +This is not a problem and handled by eCalc automatically.

    Time intervals

    This example uses the HCEXPORT keyword.

    Example: same expression for the entire time frame

    HCEXPORT: SIM;OIL_PROD

    Example: expression varies through time

    HCEXPORT:
    2001-01-01: SIM1;OIL_PROD
    2005-01-01: SIM2:OIL_PROD {+} SIM2;GAS_SALES
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html b/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html new file mode 100644 index 0000000000..64366de921 --- /dev/null +++ b/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html @@ -0,0 +1,22 @@ + + + + + +Pump models | eCalc™ Docs + + + + +
    +

    Pump models in calculations

    Pump charts are defined in the FACILITY_INPUTS section, and is then referred to from an +ENERGY_USAGE_MODEL.

    PUMP energy usage model

    To configure a single pump, the pump rate, suction- and discharge pressures and fluid density must be given as inputs. In addition, a reference to a pump chart defined in the +FACILITY_INPUTS section has to be included.

    Format

    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference energy function in facility inputs of pump type>
    RATE: <rate expression>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    FLUID_DENSITY: <fluid density expression>

    Example

    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    ENERGYFUNCTION: waterinjection_pump_reference
    RATE: SIM1;WATER_INJ
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1000

    Units

    QuantityDefault units
    RATESm3/day
    SUCTION_PRESSUREbara
    DISCHARGE_PRESSUREbara
    FLUID_DENSITYkg/m3

    PUMP_SYSTEM energy usage model

    Model a system of pumps that share common manifolds and have cross-overs between them and for which the rate may be +split between them based on various operational strategies.

    Format

    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    CONDITION: <condition expression>
    PUMPS:
    - NAME: <name of compressor>
    CHART: <reference to pump model in facility inputs>
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>
    FLUID_DENSITY: <expression defining the fluid density>
    OPERATIONAL_SETTINGS:
    <operational settings data>
    danger

    If all OPERATIONAL_SETTINGS have been exhausted, and there were still some time steps that were outside the +capacity of the operational setting, the last operational setting will be "chosen" nevertheless. In this case the +energy_usage in the output will be set to NaN which indicates that the operational setting, is in fact, invalid +(or converted to 0 when aggregating upwards to e.g. genset)

    Example

    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1000.0
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200

    Units

    QuantityDefault units
    RATESm3/day
    SUCTION_PRESSUREbara
    DISCHARGE_PRESSUREbara
    FLUID_DENSITYkg/m3
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html b/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html new file mode 100644 index 0000000000..667964a4c0 --- /dev/null +++ b/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html @@ -0,0 +1,19 @@ + + + + + +Tabular models | eCalc™ Docs + + + + +
    +

    Tabular models

    This type is a pure interpolation model where the user may freely choose all the variables. No extrapolation is done, thus the user +must ensure to cover the entire variable space in the input data. For points outside the input data, the output is +invalid and no energy usage is given (shown in the output vector extrapolations).

    Format

    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference to energy function in facility inputs of type tabular>
    VARIABLES:
    - NAME: <name of variable>
    EXPRESSION: <expression defining the variable>

    Example

    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    - NAME: Gas oil ratio
    EXPRESSION: SIM1;GOR
    - NAME: GAS_TEMPERATURE
    EXPRESSION: SIM1;TEMP

    COMPRESSOR_TABULAR input type

    Consumer energy function for the compressor (or compressor train) is in a tabulated format, +where each line is a point defining the energy consumption for the given variables.

    See Sampled compressor model for details.

    As a single compressor/compressor train (no system), it can be set up in the following way:

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: <facility_inputs_key>
    RATE: <rate expression [Sm3/day]>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html new file mode 100644 index 0000000000..c41c03fae2 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html @@ -0,0 +1,41 @@ + + + + + +Compressor charts | eCalc™ Docs + + + + +
    +

    Compressor chart

    The compressor chart is used to set up a model of each compressor. eCalc™ currently support four ways to set up a +compressor chart

    • Predefined single speed chart
    • Predefined variable speed chart
    • Generic compressor chart with a specified design point
    • Generic compressor chart which is automatically adjusted to have capacity for the input data

    User defined single speed compressor chart

    The single speed chart type allows a single compressor curve for one speed, using the keyword CURVE

    Format

    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    CURVE:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>

    Example

    MODELS:
    - NAME: predefined_single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVE:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    Tip

    It is also possible to input single speed compressor chart as csv file.

    Format

    CURVE:
    FILE: <csv file with single speed compressor chart>

    Example

    CURVE:
    FILE: compressor_chart_single_speed.csv

    User defined variable speed compressor chart

    The variable speed chart type allows a fully defined compressor chart with data for two or more speeds, using the keyword CURVES. The upper and +lower speed curves will be interpreted as the speed capacity limits for the chart. +Whilst the lowest rate points on each of the upper and lower speed curves will define the minimum flow line for the compressor.

    Additionally, there is functionality to define a control line which behaves as an alternate to the minimum flow line. This means that your input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line. +See Surge control margin for variable speed compressor chart for more details.

    note

    Using a variable speed compressor chart as input essentially does the same as if a process simulation tool was used to +create an energy function. It has been verified to be close to identical to Unisim within 2% accuracy (smaller +differences in density arise from differences in PVT assumptions and calculations).

    Format

    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    CURVES:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - ... and so forth for all chart curves. Minimum two curves needed.

    Example

    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 9886
    RATE: [3708, 4502, 4993.6, 5507, 5924]
    HEAD: [13845, 13182, 12425, 11276, 10054]
    EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]
    Tip

    It is also possible to input variable speed compressor chart as csv file.

    Format

    CURVES:
    FILE: <csv file with variable speed compressor chart>

    Example

    CURVES:
    FILE: compressor_chart_variable_speed.csv

    Generic compressor chart with predefined design point

    The generic compressor chart used is an "average" chart of compressors used on the NCS and cannot be expected to be equal to +the actual chart for a compressor which has been designed and delivered. However, it can be a good first estimation of +how a chart may be for a future process not yet in the design phase.

    This chart will not replace any future compressor curves and it may not be accurate in comparison to the final compressor curve; however, it is a good method to capture the major effects (such as ASV (anti-surge valve) recirculation). +With this method it is possible to view how a "typical" compressor curve would react a large spread in the data set. If the design point is set within the middle of the data spread, points with rates lower than the minimum flow will have some recirculation; whilst, too high or unrealistic rates will not be solved. This is an essential difference in comparison to the generic chart with its design point calculated from input data (which is covered in Generic compressor chart with design point calculated from input data), which will shift the entire compressor curve to solve for even the highest rate and head points.

    Unified generic compressor chart:

    The compressor chart is created by scaling the unified generic compressor chart in the figure above with a design actual +rate and head. Note that the rate is here in the units am3/hr which is NOT EQUAL to Sm3/hr. +The units am3/hr refers to the volumetric rate at inlet conditions (inlet pressure and temperature), and it will differ from the inputted standard rates +due to the difference in density. +The design polytropic head is given in either kJ/kg, m or J/kg, UNITS.

    The generic compressor chart is currently accompanied by a fixed polytropic efficiency (polytropic efficiency +variations within the chart may be supported in the future).

    Format

    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>
    DESIGN_RATE: <design rate>
    DESIGN_HEAD: <design polytropic head>
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>

    Example

    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 7000
    DESIGN_HEAD: 50
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION

    For this method it is important to note that only Simplified variable speed compressor train model is supported.

    Example

    MODELS:
    - NAME: generic_compression_train_design_point
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: sample_fluid
    PRESSURE_CONTROL: UPSTREAM_CHOKE
    COMPRESSOR_TRAIN:
    STAGES:
    - COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    INLET_TEMPERATURE: 30

    Generic compressor chart with design point calculated from input data

    Caution

    Beware that using this functionality in a COMPRESSOR_SYSTEM energy usage model can give some unwanted effects. +E.g. splitting/halving the rates into two equal compressor trains will in effect change the compressor chart for a +compressor set up with GENERIC_FROM_INPUT compared to running the full rate through a single compressor train. +Consider using a single design point instead.

    The generic chart from input is also based on the unified generic compressor chart:

    However, in this case the design point is not specified when setting up the model, instead it is estimated at run time and is entirely based on the inputted data set. +An algorithm is used to set a design point such that all the input data is within the capacity. +Even if there is a large spread in the data, all data points will solve. High rate/head data points will just be covered by the curve; whilst low rate points outside the minimum flow point will have recirculation.

    This method has one major potential downside in comparison to the Generic compressor chart with predefined design point. As all data points will be covered by the compressor curve, if there is an extremely large or unrealistic head or rate value, the other more "normal" data points will be impacted and will either result in a large head adjustment (via upstream/downstream choking) or it will have a large recirculation rate. This has the potential to skew the entire data set solely due to one unrealistic data point. Thus, if this generic chart is utilised it is important to make sure that unrealistic data is filtered out.

    Format

    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>
    UNITS:
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>

    Example

    MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.75
    UNITS:
    EFFICIENCY: FRACTION

    Surge control margin for variable speed compressor chart

    For a variable speed compressor chart it is possible to add a surge control margin. This is currently done by giving a +fraction or percentage as input. The control margin is used to calculate the increase in minimum flow, i.e. as a percentage +or fraction of the rate difference between minimum- and maximum flow, for the given speed. The increase in minimum +flow is calculated individually for each speed curve. The corresponding head and efficiency values for the new minimum flow rate +is found by interpolation along the speed curves. The same compressor chart can be used for multiple compressor stages, +but with different surge control margins. Hence, the surge control margin is defined when setting up the stages in a +Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html new file mode 100644 index 0000000000..85221e4ab7 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html @@ -0,0 +1,17 @@ + + + + + +Compressor train types | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..90a906172b --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html @@ -0,0 +1,26 @@ + + + + + +Simplified variable speed compressor train | eCalc™ Docs + + + + +
    +

    Simplified variable speed compressor train

    The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures +are assumed based on an assumption of equal pressure fractions for each stage. Based on this, the compressor work is +calculated independently for each compressor as if it was a standalone compressor, neglecting that they are in fact on +the same shaft and thus have a common speed.

    This model supports both user defined compressor charts and +generic compressor charts. See compressor charts for more information.

    In addition, a FLUID MODEL must be specified.

    The model comes in two versions, one where the compressor stages are known (pre defined), and one where the compressor +stages are calculated at run-time based on input data.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS
    COMPRESSOR_TRAIN: <compressor train specification>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional. compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >

    Simplified compressor train model with known compressor stages

    When the compressor stages are known, each stage is defined with a compressor chart and an inlet temperature:

    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>

    Simplified compressor train model with unknown number of compressor stages

    When the number of compressor stages are not known, one may specify the maximum pressure ratio per stage. +When the maximum pressure ratio is set, the number of compressors will be determined at run time (based on input data) +such that the number of compressors is large enough to ensure no pressure ratios are above a given maximum pressure +ratio per stage, but not larger.

    This model is intended for (but not limited to) the use of a generic compressor chart. Especially one can test with the +generic compressor chart which are adjusted at run time (based on input data), for example to explore future +rebuilds/designs where no specifications/data is yet available from vendors et.c.

    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>
    COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>
    INLET_TEMPERATURE: <inlet temperature for all stages>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>

    Examples

    A (single) compressor with a user-defined variable speed compressor chart and fluid composition

    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]

    - NAME: fluid_model_1
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: SRK
    COMPOSITION:
    nitrogen: 0.74373
    CO2: 2.415619
    methane: 85.60145
    ethane: 6.707826
    propane: 2.611471
    i_butane: 0.45077
    n_butane: 0.691702
    i_pentane: 0.210714
    n_pentane: 0.197937
    n_hexane: 0.368786

    - NAME: simplified_compressor_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model_1
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart

    A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition

    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 7000
    DESIGN_HEAD: 50
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION

    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: simplified_compressor_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart

    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] # fractions between 0 and 1

    - NAME: simplified_compressor_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: simplified_compressor_model
    TURBINE_MODEL: compressor_train_turbine

    A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart

                MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT

    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]

    - NAME: dry_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: DRY

    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: dry_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart

    A compressor train where the number of stages are unknown

                MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    - NAME: dry_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: DRY
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: dry_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 30
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..8a91e52df1 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html @@ -0,0 +1,21 @@ + + + + + +Single speed compressor train | eCalc™ Docs + + + + +
    +

    Single speed compressor train

    The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft. +Being single speed compressors on a common shaft means that all compressors will run at the exact same fixed speed, and +this shaft speed can not be varied. Since the shaft speed can not vary, the problem is overdefined given the rate, +suction pressure and discharge pressure. A method for controlling the pressure also needs to be defined, to be able +to calculate the energy usage for given rates, suction pressures and discharge pressures.

    This means that a single speed compressor model needs the following to be defined:

    • A polytropic compressor chart for every compressor stage in the compressor train. For single speed trains, eCalc +only supports user defined single speed compressor charts.
    • A FLUID MODEL.
    • A PRESSURE_CONTROL.

    The model is defined under the main keyword MODELS in the format

    Format

    MODELS:
    - NAME: <model name>
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE or COMMON_ASV>
    MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar (can only use if pressure control is DOWNSTREAM_CHOKE)>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..54923a0749 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html @@ -0,0 +1,19 @@ + + + + + +Variable speed compressor train | eCalc™ Docs + + + + +
    +

    Variable speed compressor train

    In this model all compressors in the train have the same speed, and the model is build on a forward model of +the fluid properties/state where speed is a parameter. Then the speed is iterated until the discharge pressure of the +outlet is equal to the requested discharge pressure.

    This model only supports User defined variable speed compressor chart.

    In addition, a FLUID MODEL must be specified.

    Control mechanisms

    The variable speed comporessor train model has the following automatic control mechanisms:

    • Antisurge control: When the flowrate is too low, given the suction and discharge pressures, eCalc will use automatic anti-surge control. The use of the anti-surge valve (ASV) is mimicked by increasing the total flow through the compressor, until the head is at the surge line (minimum flow curve) of the compressor chart.
    • Speed increase below minimum speed: If a rate/head point is below the compressor chart (below minimum speed), the speed is automatically increased to the minimum speed curve.
    • Stonewall speed increase: When the flowrate is too high, given the suction and discharge pressures, eCalc will automatically increase the speed to meet the stonewall (maximum flow line) of the compressor chart. To achieve the requested discharge pressure, the outlet stream is choked. This control mechanism can be turned off, for cases where a downstream choke valve does not exist.

    +Format

    The model is defined under the main keyword MODELS in the format

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html new file mode 100644 index 0000000000..f6f59bd7c6 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html @@ -0,0 +1,31 @@ + + + + + +Variable speed compressor train model with multiple streams and pressures | eCalc™ Docs + + + + +
    +

    Variable speed compressor train model with multiple streams and pressures

    This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.

    Compressor train with multiple streams and pressures

    Format

    The model is defined under the main keyword MODELS in the format:

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    # All streams defined ahead of stage
    # Default outlet stream after last stage should not be defined
    STREAMS: # All inlet streams must have fluid models with the same eos model
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING # NB: No fluid definition for outgoing streams!
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    CONTROL_MARGIN: <Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - ...
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>

    Keyword usage

    • STREAMS is a list of all in- and out-going streams for the compressor train.

      • The same equation of state (EOS) must be used for each INGOING stream fluid models
      • OUTGOING fluid models cannot be specified.
    • STAGES is a list of all the stages in the compressor train.

      • For each stage, a temperature in Celsius must be defined. It +is assumed that the gas is cooled down to this temperature ahead of the compression at this stage.
      • A reference to a +compressor chart needs to be specified for each stage.
      • For the first stage, it is required to have at least one stream of INGOING type. In addition, INTERSTAGE_CONTROL_PRESSURE cannot be used on the first stage.
      • Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream +will be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the +molar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will +be subtracted the rate of the outgoing stream.
    • PRESSURE_DROP_AHEAD_OF_STAGE is optional, but if defined it will reduce the inlet pressure of that particular stage by a fixed value. +As of now, only a single value is supported - i.e. a time series cannot be used here.

    • CONTROL_MARGIN is a surge control margin, see Surge control margin for variable speed compressor chart.

    • CONTROL_MARGIN_UNIT is the unit of the surge control margin.

    INTERSTAGE_PRESSURE_CONTROL

    note

    INTERSTAGE_CONTROL_PRESSURE may be specified for one (only one!) of the stages 2, ..., N. It may not be specified for the first stage. See INTERSTAGE_CONTROL_PRESSURE for more usage details

    This is optional but essentially when this is specified the compression train is split into two parts - before and after the INTERSTAGE_CONTROL_PRESSURE. As all rates and pressures (suction, discharge and interstage) are known, each side of the compression train can be solved independently.

    Thus, given this, the rotational speed needed to match the suction and interstage pressure can be found. This speed will be for the first section of the compression train. The same is done for the second part of the train, only here the rotational speed is found to match the interstage and discharge pressure, for the given rates.

    The highest speed between the first and second parts of the train is then taken as the rotational speed of the compression train. +This speed will essentially be needed to meet the most demanding pressure interval. +The section with the lower rotational speed must then be run with a form of pressure control (see UPSTREAM_PRESSURE_CONTROL/DOWNSTREAM_PRESSURE_CONTROL).

    In a given simulation, the section of the compression train that requires either upstream or downstream pressure control is not fixed. This means that for different time steps, the part of the train with the highest rotational speed is not set to either the first or second section. Thus, both pressure control methods must be specified but only one of them will be used for each time step.

    Technically, the INTERSTAGE_PRESSURE_CONTROL may be set independent of where the streams are defined. I.e. it may be +defined at a stage where there is an in- or out-going stream defined, or at a stage where there is no defined stream. +In reality, the INTERSTAGE_PRESSURE_CONTROL is linked to a stream, for example an outgoing stream for export where the +export pressure is defined, and where the rest of the gas continues through the compressor train for example for +injection at a higher pressure.

    Fixed pressure control

    The available pressure controls are

    • DOWNSTREAM_CHOKE
    • UPSTREAM_CHOKE
    • INDIVIDUAL_ASV_PRESSURE
    • INDIVIDUAL_ASV_RATE
    • COMMON_ASV

    The sub-train where the pressure control is used, is now modeling wise equal to a single speed train as the speed is +determined from the other sub-train. The inlet and outlet pressures for a sub-train, may be either the suction pressure +and the interstage control pressure or interstage control pressure and the discharge pressure, depending on which sub +part governs the speed of the full train.

    See FIXED PRESSURE CONTROL for more details.

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html b/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html new file mode 100644 index 0000000000..f54877d673 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html @@ -0,0 +1,57 @@ + + + + + +Fixed speed pressure control | eCalc™ Docs + + + + +
    +

    Fixed speed pressure control

    Theory

    Compressors are typically controlled by changing the rotational speed of the compressor train shaft, which can either increase or decrease the work performed. +In the case where this is not possible (single speed compressors), or this is not sufficient to control the compressor, other methods of control need to be used. +In eCalc™, there are three main compressor control methods considered (aside from rotational speed control), these are:

    • Upstream choking/throttling
    • Downstream choking/throttling
    • Anti-surge recycling

    Each of these methods are used depending on the situation and placement of the compressor's operating points. +A summary of how these methods work in practice are seen below. +In these figures, the red point represents a singular operating point, which is shifted with the given control mechanism. The operating point first starts below the compressor curve and is then adjusted toward the curve (by either changing head or rate). The different pressure control methods will change the operating points in the follow way:

    • Upstream throttling will decrease the inlet pressure, and in turn increase the head and the inlet volumetric flow rate (lower pressure = lower density = lower flow rate).
    • Downstream throttling will increase the head, as the outlet pressure is increased. There is no influence on the inlet rate in this case. +However, when the operating points is on the compressor curve, and the head is further increased (by increasing the outlet pressure), the rate of the compressor will thus be reduced.
    • ASV recycling will simply increase the throughout of the compressor without influencing the head. +However, when the operating points is on the compressor curve, and the mass rate through is further increased, compressor head will in turn be reduced (along the curve).
    Upstream ChokingDownstream Choking
    ASV Recycling

    Control modelling in eCalc™

    In eCalc™, upstream and downstream choking is modelled as described in the theory section. +ASV recycling on the other hand is done in three separate ways. +These three modelling methods are important for a compression train with more than one stage. This is due the fact that when each compressor stage has an individual ASV, the solution is under determined. +For a single stage compressor, the results of these methods will be identical. +This will further be elaborated upon in the recirculation options section.

    Some scenarios where additional pressure control is required can be when:

    • The compressor train only operates at one speed (SINGLE_SPEED_COMPRESSOR_TRAIN), +and the given rate and suction pressure gives a too high discharge pressure.
    • The compressor train is a VARIABLE_SPEED_COMPRESSOR_TRAIN, +but it already operates at the minimum speed, and still the discharge pressure is too high.
    • The compressor train is a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES +required to meet an export pressure, before compressing gas further for injection. Here the +rotational speed required to bring the gas from inlet pressure to export pressure may be higher than the speed +required to bring the gas from export pressure to discharge pressure. Hence, the rotational speed giving +the correct export pressure will give a too high discharge pressure.

    Pressure control methods - choking options

    In a situation where the rotational speed of the shaft can not be varied here are only two degrees of freedom. +This means that if you give the suction pressure and the flow rate as input, the discharge pressure is decided by those +two inputs. Similarly, if you give the rate and the discharge pressure as input, the suction pressure is decided by +those two inputs. Hence, to calculate the energy usage for a given rate, suction pressure and discharge pressure, a +method for fixed speed pressure control must be defined. This can be done by a choke valve upstream or downstream +of the compressor train, or by recirculating fluid inside the compressor train.

    Currently, there are two options for choking the pressure in eCalc™:

    UPSTREAM_CHOKE

    The suction pressure is reduced such that the resulting suction pressure after choking together with the given speed results in the required discharge pressure. +As the inlet pressure is reduced, the inlet flow rate will also increase.

    DOWNSTREAM_CHOKE

    The pressure is choked to the required discharge pressure after the compressor train. So the compressor's head will increase, as the compressor will compress the gas to a higher discharge pressure - which will subsequently be choked to the desired pressure.

    Pressure control methods - recirculation options

    As previously mentioned, there are three different methods in eCalc™ for modelling ASV recycling. +This is necessary as when there is more than one compressor stage, there will be individual ASVs per stage. +Thus, the problem is under determined, and there are multiple possible solutions. +Therefore, some modelling choices must +be done. +There are currently three options available in eCalc™:

    • INDIVIDUAL_ASV_PRESSURE
    • INDIVIDUAL_ASV_RATE
    • COMMON_ASV
    Note

    With only one compressor stage or only one recirculation loop (common asv over the entire compressor train), +a unique solution to how much volume to recirculate is available.

    For a single stage compressor, all recirculation options should give the same result.

    A further explanation of ASV recycling can be seen in the figure below. +Here, it can be seen that the head of a compressor is reduced when the rate is increased. +This means that recirculation can reduce the +discharge pressure for a single speed compressor.

    Looking at the figure above, for an actual volume rate of 1882 am3/hr, the head is 93 kJ/kg (blue dashed line). If this head leads to a too large discharge pressure, it can be reduced by recirculation +using the anti-surge valve. As the actual flow rate through the compressor increases, the head is also reduced, +meaning that a higher actual flow rate leads to a lower discharge pressure.

    For example, by increasing the actual volume rate +to 2322 am3/hr (by recirculating 440 am3/hr through the ASV), the head is reduced to about 81.3 kJ/kg (red dashed lines) +, in turn leading to a lower discharge pressure. The head can be reduced further down to 42.5 kJ/kg at the maximum flow +rate (3201 am3/hr) for the compressor (yellow dashed lines). The difference between the flow rate entering the +compressor train and the maximum flow rate for the compressor gives the amount of additional volume that can be +recirculated through the compressor - the available capacity.

    INDIVIDUAL_ASV_PRESSURE

    The pressure ratio (discharge pressure/suction pressure) over each compressor stage is constant. +Essentially, with each time step there will be no change in the pressure ratio, but the volume flow will adjust to keep the pressure ratio constant.

    INDIVIDUAL_ASV_RATE

    The flow rate through each compressor stage is increased with the same fraction of the available capacity in that stage.

    For example, if you have a 2-stage compressor and the first stage has 500 Am3/h available capacity and the second has 400 Am3/h available capacity. +If the first stage increases by 25 % of the available capacity (125 Am3/h), the second stage increase by 25 % too (100 Am3/h) - given that this matches the required output.

    COMMON_ASV

    The same volume is recirculated through the entire compressor train. +Thus, each compression stage will have the same mass throughput.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/index.html b/docs/about/modelling/setup/models/compressor_modelling/index.html new file mode 100644 index 0000000000..ed8cf87b4c --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/index.html @@ -0,0 +1,28 @@ + + + + + +Compressor modelling | eCalc™ Docs + + + + +
    +

    Compressor modelling

    Compressors may be single speed or variable speed, they may be stand-alone or there may be multiple compressors mounted +on a common shaft (compressor train), they may be run with an electric motor or be driven by a turbine coupled +directly to the shaft, there may be one or many compressors/compressor trains in parallel connected to a common +manifold from which the gas is distributed between these in different operational settings.

    In eCalc™, single compressors and compressor trains are modeled the same way, a single compressor is just a train with +just one stage. There are multiple modeling options for compressor trains:

    • Sampled compressor model: The compressor model is setup in an external tool, and this model is sampled by +running a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a csv file and input to eCalc™. Note, this is not inputted in the MODELS section, rather in the FACILITY_INPUTS section
    • Single speed compressor train model: The compressor train modeling is done in eCalc™. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage. In addition, since the speed is fixed, defining a pressure control method is required. This pressure control is used to meet the required discharge pressure.
    • Variable speed compressor train model: The compressor train modelling is done in eCalc™. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage.
    • Simplified variable speed compressor train model: Model the same compressor train as the above, but is more +lightweight in that instead of iterating to meet the requested discharge pressure, it assumes all stages has equal +pressure fractions and solves for each stage independently. As the shaft speed is not used in the calculations, this +model supports using generic compressor charts, see the Compressor charts section.
    • Variable speed compressor train model with multiple streams and pressures: This is a more complex model, where it is +possible to define fluid streams going in and out at different stages in the compressor train. Also, an additional +pressure requirement may be specified between two stages. This model is suitable in cases where for example a part of +the fluid stream is taken out after one stage at a specified pressure for export, and the rest is further compressed +for injection at a higher pressure.

    Core theory behind the modelling of compressors in eCalc™ can be found here.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/fluid_model/index.html b/docs/about/modelling/setup/models/fluid_model/index.html new file mode 100644 index 0000000000..e7a5256e2d --- /dev/null +++ b/docs/about/modelling/setup/models/fluid_model/index.html @@ -0,0 +1,26 @@ + + + + + +Fluid model | eCalc™ Docs + + + + +
    +

    Fluid model

    To calculate the energy usage related to compression of a natural gas, information about the composition is needed, i.e. +which components it consist of and the (mole) fraction of each. Typical components for natural gas are alkanes such as +methane, ethane, propane, butane, pentane, hexane in addition to water, nitrogen and carbone dioxide. Alkanes with seven +or more carbon atoms may occur, but these are often just part of the liquid (oil) phase and not significant in dry gas +compression.

    As the fluid is going through the compressor in a fluid dynamic process, the enthalpy changes, resulting in a new state +with increased pressure and temperature, and decreased volume. To estimate these changes, an equation-of-state (EOS) +model is used. The default EOS model in eCalc is SRK (Soave-Redlich-Kwong).

    The GERG models (GERG 2008) are used to calculate enthalpy, gamma and density, whilst other properties such as molar mass +is based on either SRK or PR.

    Available EOS models

    • SRK (Soave-Redlich-Kwong)
    • PR (Peng-Robinson)
    • GERG_SRK
    • GERG_PR

    Fluid model using predefined composition

    Available predefined fluid compositions (with mole weights) are

    • ULTRA_DRY (17.1 kg/kmol)
    • DRY (18.3 kg/kmol)
    • MEDIUM (19.4 kg/kmol)
    • RICH (21.1 kg/kmol)
    • ULTRA_RICH (24.6 kg/kmol)

    Format

    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: <eos model>
    GAS_TYPE: <name of a predefined composition>

    Examples

    Examples with predefined fluid

    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: PR
    GAS_TYPE: ULTRA_DRY

    Example where EOS is defaulted to SRK and GAS_TYPE defaulted to MEDIUM

    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED

    Fluid model with user-specified composition

    The composition is specified by setting the mole fraction of each component. Setting the mole fraction for methane is +required, all other components are optional and will be set to 0 if not specified. If methane is not part of your +composition, simply put 0.0 for it.

    It is not important that the fractions sum to one as they will be normalized by eCalc. It is the relative amount of each +that will be important.

    Format

    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: <eos model>
    COMPOSITION:
    water: <mole fraction>
    nitrogen: <mole fraction>
    CO2: <mole fraction>
    methane: <mole fraction, required>
    ethane: <mole fraction>
    propane: <mole fraction>
    i_butane: <mole fraction>
    n_butane: <mole fraction>
    i_pentane: <mole fraction>
    n_pentane: <mole fraction>
    n_hexane: <mole fraction>

    Example

    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: srk
    COMPOSITION:
    water: 0.1
    nitrogen: 0.74373
    CO2: 2.415619
    methane: 85.60145
    ethane: 6.707826
    propane: 2.611471
    i_butane: 0.45077
    n_butane: 0.691702
    i_pentane: 0.210714
    n_pentane: 0.197937
    n_hexane: 0.368786
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/index.html b/docs/about/modelling/setup/models/index.html new file mode 100644 index 0000000000..a530e6f30a --- /dev/null +++ b/docs/about/modelling/setup/models/index.html @@ -0,0 +1,16 @@ + + + + + +Models | eCalc™ Docs + + + + +
    +

    Models

    note

    The MODELS keyword is optional for an eCalc™ model to run. However, it is critical for compressor and turbine modelling.

    This part of the setup defines input files that characterize various fluid, compressor and turbine models. These are later used as input in the INSTALLATIONS part of the setup by referencing their NAME.

    Format

    MODELS:
    - NAME: <name of model, for reference>
    TYPE: <model type>
    <other keywords according to TYPE>

    Supported types

    The supported types are:

    • FLUID
    • COMPRESSOR_CHART
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • TURBINE
    • COMPRESSOR_WITH_TURBINE
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/turbine_modeling/index.html b/docs/about/modelling/setup/models/turbine_modeling/index.html new file mode 100644 index 0000000000..b26b09d383 --- /dev/null +++ b/docs/about/modelling/setup/models/turbine_modeling/index.html @@ -0,0 +1,21 @@ + + + + + +Turbine modelling | eCalc™ Docs + + + + +
    +

    Turbine modelling

    The turbine model requires values for efficiencies vs corresponding loads. Currently also a lower heating value needs to +be specified (planned feature is to get this from the fuel type used)

    The load values are given in MW, while efficiency values are numbers between 0 and 1.

    The fuel usage for a turbine is equal to

    FUEL_USAGE=LOAD_IN_MEGAWATTSECONDS_PER_DAYLOWER_HEATING_VALUEEFFICIENCYFUEL\_USAGE = \frac{LOAD\_IN\_MEGAWATT * SECONDS\_PER\_DAY}{LOWER\_HEATING\_VALUE * EFFICIENCY}

    When evaluated for a load (in units MW), the efficiency is evaluated by linearly interpolating the input load vs +efficiency data.

    The input values for load and efficiency are lists which both MUST START WITH 0! The user is thus responsible for the +behaviour also for small load values.

    For load values equal to 0, the fuel usage is also set to 0.

    Lower heating value is given in units MJ/Sm3

    Format

    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>
    TURBINE_LOADS: <list of power values in mega watt>
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>

    Example

    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10

    Combining a compressor train and a turbine into one model

    To model a turbine driven compressor train, a compressor train model needs to be combined with a turbine model. The +calculated shaft power required for the compressor train, will then be the input of the turbine model to calculate +fuel usage.

    Format

    MODELS:
    - NAME: <name of turbine model, for reference>
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: <reference to compressor train model defined in [MODELS](../references/keywords/MODELS) or [FACILITY_INPUTS](../references/keywords/FACILITY_INPUTS) (of type COMPRESSOR_TABULAR)>
    TURBINE_MODEL: <reference to a turbine model defined in [MODELS](../references/keywords/MODELS) (of type TURBINE)>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>

    Examples

    MODELS:
    - NAME: simplified_compressor_train_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TURBINE_MODEL: compressor_train_turbine
    POWER_ADJUSTMENT_CONSTANT: 10

    Turbine combined with presampled compressor model (COMPRESSOR_TABULAR<COMPRESSOR_TABULAR facility input type>)

    MODELS:
    - NAME: compressor_sampled_tabulated_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: compressor_sampled_tabulated_model
    TURBINE_MODEL: compressor_train_turbine
    POWER_ADJUSTMENT_CONSTANT: 10
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/time_series/index.html b/docs/about/modelling/setup/time_series/index.html new file mode 100644 index 0000000000..3c55f92fdd --- /dev/null +++ b/docs/about/modelling/setup/time_series/index.html @@ -0,0 +1,27 @@ + + + + + +Time series | eCalc™ Docs + + + + +
    +

    Time series

    note

    The TIME_SERIES keyword is mandatory within the eCalc™ YAML file.

    This part of the setup file defines the inputs for time dependent variables, or "reservoir +variables". For many fields, this may be only one reservoir simulation model. But in some +cases, one might have several sources for reservoir and other relevant time series variables.

    For example, a field may have a reservoir simulation model for some areas and decline curves in other area of +the reservoir. There may also be tie-ins which are affecting the energy/emissions on the field +installations. Also, there may be time profiles for fuel prices, emission tax, etc. +Therefore, a set of sources may be specified with a name, path to data and type. The name is +later referred to in the system of energy consumers defined under INSTALLATIONS.

    Reservoir variables and other time varying data not coming from a reservoir simulation model can +be specified in a CSV file.

    The paths to the input files may be either absolute or relative to the setup file.

    Supported types

    The supported time series types are:

    TypeSupported file formatsInterpolation typeComment
    DEFAULT.csvNot possible to specify:
    RIGHT is used
    New in v8.1
    MISCELLANEOUS.csvMandatory input:
    LEFT/RIGHT/LINEAR

    Format

    Each line under TIME_SERIES has the format:

    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <type>
    FILE: <path_to_file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>

    The input data is expected to be in metric units. The NAME is later referred +to in the INSTALLATIONS part of the setup file. +INFLUENCE_TIME_VECTOR, EXTRAPOLATION +and INTERPOLATION_TYPE may have default values set depending +on the choice of TYPE. See the documentation for each keyword for details.

    Requirements

    • At least one input source with INFLUENCE_TIME_VECTOR set to True.
    • Must include sources referred to in the variables for each consumer.

    Example

    TIME_SERIES:
    - NAME: SIM1
    TYPE: DEFAULT
    FILE: /path_to_model1/model_data.csv
    - NAME: SIM2
    TYPE: DEFAULT
    FILE: /path_to_tiein/tie_in_field.csv
    - NAME: DATA3
    TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures
    FILE: inputs/somecsvdata.csv
    INFLUENCE_TIME_VECTOR: FALSE
    EXTRAPOLATION: TRUE
    INTERPOLATION_TYPE: RIGHT
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/variables/index.html b/docs/about/modelling/setup/variables/index.html new file mode 100644 index 0000000000..47ba0e78c6 --- /dev/null +++ b/docs/about/modelling/setup/variables/index.html @@ -0,0 +1,16 @@ + + + + + +Variables | eCalc™ Docs + + + + +
    +

    Variables

    note

    The VARIABLES keyword is optional for an eCalc™ model to run.

    Defining variables

    Variables are defined in their own section in the YAML file, they can either be defined without link to time, or linked to time.

    Format

    VARIABLES:
    <variable name>:
    VALUE: <expression>

    With time link:

    VARIABLES:
    <variable name>:
    <YYYY-MM-DD [HH:mm:ss]>:
    VALUE: <expression>

    Examples

    VARIABLES:
    salt_water_injection:
    VALUE: SIM1:COL1 {*} 2

    With time link:

    VARIABLES:
    salt_water_injection:
    2010-01-01:
    VALUE: SIM1:COL1 {*} 2
    2020-01-01:
    VALUE: SIM1:COL1

    Using variables

    Variables can be used in any expression throughout the YAML file and can even be used within defining other variables.

    Example

    Using variables in the INSTALLATION section:

    VARIABLES:
    gas_rateA:
    VALUE: SIM;COL1
    gas_rateB:
    VALUE: SIM;COL2

    INSTALLATIONS:
    - NAME: installationA
    CATEGORY: FIXED
    ...
    - NAME: sample_compressor
    CATEGORY: COMPRESSOR
    ENERGYFUNCTION: compressorA
    RATE: $var.gas_rateA {+} $var.gas_rateB
    ...

    Using variables in defining another variable:

    VARIABLES:
    salt_water_injection:
    VALUE: SIM1:COL1 {*} 2
    double_injection_rate:
    VALUE: $var.salt_water_injection {*} 2
    + + + + \ No newline at end of file diff --git a/docs/about/modelling/theory/compressor_modelling/index.html b/docs/about/modelling/theory/compressor_modelling/index.html new file mode 100644 index 0000000000..b6ad0542ad --- /dev/null +++ b/docs/about/modelling/theory/compressor_modelling/index.html @@ -0,0 +1,39 @@ + + + + + +Compressor modelling | eCalc™ Docs + + + + +
    +

    Compressor modelling

    A compressor model describes what happens to a fluid going through a compressor and calculates how much power is +required in the process.

    At the suction side, one need information about the fluid (natural gas) which has a (static) specification of the +composition, a specified rate, a temperature and a pressure. As the fluid is going through the compressor in a fluid +dynamic process, the enthalpy changes, resulting in a new state and both the pressure and the +temperature of the fluid is increased, while the volume is decreased. This change is calculated using an +equation-of-state (EOS) model. See Fluid model

    eCalc does not perform fluid dynamic modeling. Instead, the behaviour of the compressor is described by a polytropic +compressor chart which specifies both the operational domain of the compressor, but also relates volume rate, head and +efficiency for the compressor.

    An isentropic (adiabatic) compression is the process where no heat is added or removed from a system. In a polytropic +process, changes in the gas characteristics is considered. Dynamic natural gas compressors typically follow a polytropic +process defined by the formula P1V1n=P2V2nP_\mathrm{1} V_\mathrm{1}^n = P_\mathrm{2} V_\mathrm{2}^n, where nn is the +polytropic exponent which is experimentally determined for a given compressor.

    +The power need for compression is given by

    power=polytropic_headmass_rateefficiencypower = \frac{polytropic\_head * mass\_rate}{efficiency}

    and the relationship between polytropic head and the pressures are

    polytropic_head=nn1ZRT1MW((P1P2)n1n1)polytropic\_head = \frac{n}{n-1} \frac{Z R T_1}{MW} \left( \left(\frac{P_1}{P_2} \right)^{\frac{n-1}{n}} -1 \right)

    where nn is the polytropic exponent, ZZ the compressibility, RR is the gas constant, T1T_1 is the inlet temperature and MWMW the molecular weight.

    Further, the polytropic exponent is approximated as

    κpolytropic_efficiencyκ1\frac{\kappa * polytropic\_efficiency}{\kappa -1}

    where κ\kappa is the heat capacity ratio of the fluid.

    κ\kappa and ZZ are not for inlet conditions, but average values for the fluid throughout the process, and +the polytropic process and the calculations are iterated until these converge.

    If there is only one compressor, the outlet pressure for each compressor is known, and the polytropic head and +efficiency may be calculated from directly from the above polytropic head and efficiency formulas.

    However, for compressor trains, the intermediate pressures are not known ahead, instead one may use the fact that all +compressors run with the same speed as they are mounted on the same shaft.

    To calculate the energy usage for the compressor train using the common speed, eCalc uses a forward model to +calculate the outlet stream given the inlet stream and a given speed. Then, this model is iterated until the discharge pressure is equal to the requested discharge pressure for evaluation. To use this model, see +Variable speed compressor train model An alternative is to neglect the common speed property of the train, an instead assume (incorrectly but maybe good +enough for some purposes) that the pressure fraction is equal for all stages. With this assumption, the intermediate pressures can be calculated and each stage may be calculated independently without the speed iteration. To use this model, see +Simplified variable speed compressor train model.

    In some cases, the shaft of the compressor train can only run on a single fixed speed. In these cases eCalc needs +information about how the pressure should be controlled to meet the required discharge pressure. Available pressure +control options are choking and recirculating using anti-surge valves. To use this model, see Single speed compressor train model.

    In other cases, the compressor trains have more complex setup and process control which needs a more flexible model. The +figure below shows an example where one may have two inlet streams with different pressures and potentially different +gas compositions and one outlet stream for export gas with a pressure control. To use a model suitable for such cases, +see Variable speed compressor train model with multiple streams and pressures.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/theory/index.html b/docs/about/modelling/theory/index.html new file mode 100644 index 0000000000..0340b1523e --- /dev/null +++ b/docs/about/modelling/theory/index.html @@ -0,0 +1,16 @@ + + + + + +Theory | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/theory/pump_modelling/index.html b/docs/about/modelling/theory/pump_modelling/index.html new file mode 100644 index 0000000000..21cf18dec7 --- /dev/null +++ b/docs/about/modelling/theory/pump_modelling/index.html @@ -0,0 +1,16 @@ + + + + + +Pump modelling | eCalc™ Docs + + + + +
    +

    Pump modelling

    As liquid can be assumed incompressible, pump calculations are simpler compared to compressor calculations. The pumped fluid can be characterized with its density, and no fluid calculations are necessary.

    The power demand of a pump is calculated as

    power=headmass_rateefficiency.power = \frac{head * mass\_rate}{efficiency}.

    Here, the relationship between head and pressures is given by

    head=(P2P1)liquid_densityghead = \frac{(P_2-P_1)}{liquid\_density * g}

    where P1P_1 and P2P_2 are the pump suction and discharge pressures, respectively, and gg is the gravitational constant.

    eCalc uses the pump chart to relate liquid flow, head and efficiency for the pump, as well as defining the operational envelope for the pump.

    For single speed pumps, eCalc does extrapolations corresponding to minflow (liquid recirculation) and choking to keep the pump operation within the operational envelope.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/workflow/generic_workflow/index.html b/docs/about/modelling/workflow/generic_workflow/index.html new file mode 100644 index 0000000000..aa893a77b5 --- /dev/null +++ b/docs/about/modelling/workflow/generic_workflow/index.html @@ -0,0 +1,197 @@ + + + + + +Generic Workflow | eCalc™ Docs + + + + +
    +

    Generic Workflow

    Simplified Process Flow Diagram

    The image below illustrates a simplified process flow diagram for a generic offshore oil and gas facility. Each unit included in this diagram can be modelled with the use of eCalc. +The workflow below will outline what is necessary to obtain for each step. In addition, there are some accompanied explanations to the workflow.

    Workflow

    flowchart TD; + subgraph ide1 ["`**Required Subsurface Profiles [All in Sm3/d]**`"] + ide1_A[Oil Produced]; + ide1_B[Gas Produced]; + ide1_C[Water Produced]; + ide1_D[Gas Injected]; + ide1_E[Water Injected]; + end + subgraph ide2 ["`**Facility Information Needed**`"] + + ide2_A[[Power Generation System]] --> ide2_A_1([Gas Turbines]); + ide2_A_1 --> ide2_A_2(["`Number of Gas Turbines `"]); + ide2_A_2 --> ide2_A_3(["`Maximum capacity per generator and spinning reserve`"]); + + ide2_B[["Water Injection System"]] --> ide2_B_1(["`Suction Pressure`"]); + ide2_B_1 --> ide2_B_2(["`Discharge Pressure`"]); + ide2_B_2 --> ide2_B_3(["`Injected Water Density`"]); + ide2_B_3 --> ide2_B_4(["`Maximum capacity per pump`"]); + + ide2_D[[Gas Compression System]] --> ide2_D_1(["`Export Compressor`"]); + ide2_D --> ide2_D_1_1(["`Re-Injection Compressor`"]); + ide2_D_1 --> ide2_D_2(["`Suction Pressure per compressor`"]); + ide2_D_1_1 -->ide2_D_2 + ide2_D_2 --> ide2_D_3(["`Discharge Pressure per compressor`"]); + ide2_D_3 --> ide2_D_4(["`Suction Temperature per compressor`"]); + ide2_C[["Constant Power Loads"]] --> ide2_C_1(["`Base Load`"]); + ide2_C_1 --> ide2_C_2(["`Oil Export Pumps`"]); + ide2_C_2 --> ide2_C_3(["`Gas Recompressor`"]) + + ide2_E[[Additional Emissions]] --> ide2_E_1([Flaring]); + ide2_E_1 --> ide2_E_2(["`Electrical Submersible Pumps (ESP)`"]) + ide2_E_2 --> ide2_E_3(["`Drilling rigs`"]) + + end + + subgraph ide3 ["`**Consumer Data Needed**`"] + + ide3_A[[Generator Set]]--> ide3_A_1(["`Fuel vs Power relationship. Linear lines relating fuel and power`"]); + ide3_A_1 --> ide3_A_2(["`Generating switching. At max capacity of the generator, impose another generate on the existing`"]); + + ide3_B[[Compressors]] --> ide3_B_1(["`Variable/single speed drive`"]); + ide3_B_1 --> ide3_B_2{Available charts?}; + ide3_B_2 -. yes .-> ide3_B_4(["`Use suppliers compressor chart (head vs flow, efficiency vs flow)`"]); + ide3_B_2 -. no .-> ide3_B_3(["`Use generic chart functionality`"]); + + ide3_C[[Water Injectors]] --> ide3_C_1(["`Variable/single speed drive`"]); + ide3_C_1 --> ide3_C_2{Available charts?}; + ide3_C_2 -. yes .-> ide3_C_4(["`Use suppliers pump chart (head vs flow, efficiency vs flow)`"]); + ide3_C_2 -. no .-> ide3_C_3(["`Generate synthetic charts using expected head and flow ranges`"]); + + end + + subgraph ide4 ["`**Validation**`"] + + ide4_A{"Invalid data?"} + + ide4_A -. yes .-> ide4_A_1{"`Invalid Compressors?`"}; + ide4_A_1 -. yes .-> ide4_A_1_1(["`Either head or rate is too high`"]); + ide4_A_1_1 --> ide4_A_1_2(["`Plot operational points and adjust charts to fit historical data`"]); + + ide4_A -. yes .-> ide4_A_3{"`Invalid Pumps?`"}; + ide4_A_3 -. yes .-> ide4_A_3_1(["`Either head or rate is too high`"]); + ide4_A_3_1 --> ide4_A_3_2(["`Plot operational points and adjust charts to fit historical data`"]); + + ide4_A -. yes .-> ide4_A_4{"`Invalid Generator Set?`"}; + ide4_A_4 -. yes .-> ide4_A_4_1(["`Check maximum and minimum facility power consumption values are within the range of the specified generator set`"]); + ide4_A_4_1 --> ide4_A_4_2(["`Adjust generator set`"]); + + end + + subgraph ide5 ["`Calibration`"] + + ide5_A["`Calibration`"] --> ide5_A_1(["`Compare measured power against eCalc power`"]) ; + ide5_A_1 --> ide5_A_2{"`Do they correlate`"} + ide5_A_2 -. yes .-> ide5_A_3_1{"`Are all points valid?`"}; + ide5_A_3_1 -. yes .-> ide5_A_3_2(["`No further calibration needed`"]) + ide5_A_2 -. no .-> ide5_A_2_1(["`Consider using POWERLOSSFACTOR to adjust modelled to measured power`"]) + ide5_A_2_1 --> ide5_A_3_1 + ide5_A_4_1(["`Plot operational points on the same figure as the performance chart`"]) --> ide5_A_4_2(["`Alter the head vs flow curves (using fan law theory)`"]) + ide5_A_4_2 --> ide5_A_1 + ide5_A_3_1 -. no .-> ide5_A_4_1 + end + + ide1 ~~~ ide2 + ide2 ~~~ ide3 + ide3 ~~~ ide4 + ide4 ~~~ ide5

    Workflow Explanation

    Required Subsurface Profiles

    All subsurface profiles must be in Sm3/day. This data must be inputted as a TIME-SERIES and references to how it is used in the facility or by a relevant consumer.

    Facility Information

    Constant Power Loads

    To simplify certain models, there are some common assumptions made. Here are some examples:

    • Base Load: As eCalc™ is not simulating the whole facility there are often energy consumers that are not modelled. +Typically these energy consumers relate to things such as the energy consumption of living quarters and are often constant loads. +These smaller constant loads are then grouped into a larger term, called the "baseload". This is assumed to be constant and independent of the production rate of the facility.
    • Recompressor: The main function of a recompressor is to compressor gas from separator pressures back up to the inlet separator pressure. +These compressors are often smaller and have little fluctuation in their load. +Thus, to simplify modelling, these recompressors are often modelled as constant loads. And at times, are included within the facility's base load
    • Oil Export Pumps: As eCalc™ does not model oil pumps, these are often modelled as constant loads or modelled with a table (that relates oil rate to power consumption). The method in which they are modelled depends from facility to facility

    Additional Information

    Any emissions that do not fall within the defined categories can still be considered for a given platform. For example, if there are drilling activities, an additional fuel type can be specified and related to the fuel consumption of a drilling rig.

    Consumer Information

    Generator Set

    As eCalc™ does not indepthly model gas turbine generators, alternative methods are used. +Here, fuel consumed and power generated is related in tabular form. These are typically linear relationships, and if more than one generator is used, "generator switching" is modelled by adding another generator curve on top of the existing.

    This means that the facility will operate in the most efficient manner, i.e. meaning that if one generator will satisfy the power demand, only one generator will always be used.

    Compressor Curves

    eCalc™ has generic compressor curve functionality which can be used when compressor curves are not available. +However, if a manufactor compressor chart is available, it is always recommended to use this over a generic chart. +The generic compressor curves, use the assumption of constant polytropic efficiency, which is only a good assumption if the compressor is running near the design points.

    Validation

    Checking whether an eCalc™ model is valid or not, is an essential task. If a model is not valid, this means that input requirements set by the user are not being fulfilled, or that some consumers are giving unrealistic solutions.

    Validity can be checked by consumer, and there are often specific reasons why certain consumers are invalid. For example:

    • Compressors and Pumps: It is common that either too high a head or rate value is specified. This means that the invalid point is outside the limits of the performance chart. To determine the issue, it is recommended that the operational points (Head, and actual flowrate) are plotted together with the chart.
    • Generator Set: The most common issue here is that the amount of power required is higher than the maximum value in the utilised genset.

    Calibration

    The term calibration in eCalc™ often refers to the history matching of the facility. Essentially, real operational data is compared against the eCalc™ model results. If they do not correlate various changes are made to the model.

    The main workflow with this would be to match every individual consumer, e.g. each pump and compressor. After that, it is the recommended to compare on the facility level (e.g. total power consumed or total fuel used), then various adjustments can be made. +These adjustments can mean changes to the base load, shifting the compressor curves, or simply by using a POWERLOSSFACTOR.

    + + + + \ No newline at end of file diff --git a/docs/about/modelling/workflow/index.html b/docs/about/modelling/workflow/index.html new file mode 100644 index 0000000000..e0dae93b02 --- /dev/null +++ b/docs/about/modelling/workflow/index.html @@ -0,0 +1,16 @@ + + + + + +eCalc™ Workflow | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/api/index.html b/docs/about/references/api/index.html new file mode 100644 index 0000000000..9e0450e09d --- /dev/null +++ b/docs/about/references/api/index.html @@ -0,0 +1,16 @@ + + + + + +API reference | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc.html b/docs/about/references/api/libecalc.html new file mode 100644 index 0000000000..6816c00d20 --- /dev/null +++ b/docs/about/references/api/libecalc.html @@ -0,0 +1,239 @@ + + + + + + + libecalc API documentation + + + + + + + + + +
    +
    +

    +libecalc

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/application.html b/docs/about/references/api/libecalc/application.html new file mode 100644 index 0000000000..0ffb0189f3 --- /dev/null +++ b/docs/about/references/api/libecalc/application.html @@ -0,0 +1,233 @@ + + + + + + + libecalc.application API documentation + + + + + + + + + +
    +
    +

    +libecalc.application

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common.html b/docs/about/references/api/libecalc/common.html new file mode 100644 index 0000000000..a874a61b09 --- /dev/null +++ b/docs/about/references/api/libecalc/common.html @@ -0,0 +1,267 @@ + + + + + + + libecalc.common API documentation + + + + + + + + + +
    +
    +

    +libecalc.common

    + +

    Components, helpers, utils and "extensions" of the language and its batteries should reside here. What is here could +easily have been as a part of the language or its batteries, and therefore there should be no rules as to which +parts of the code that can include these things.

    +
    + + + + + +
    1"""
    +2Components, helpers, utils and "extensions" of the language and its batteries should reside here. What is here could
    +3easily have been as a part of the language or its batteries, and therefore there should be no rules as to which
    +4parts of the code that can include these things.
    +5"""
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info.html b/docs/about/references/api/libecalc/common/component_info.html new file mode 100644 index 0000000000..ca2b952297 --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.component_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info/component_level.html b/docs/about/references/api/libecalc/common/component_info/component_level.html new file mode 100644 index 0000000000..938f91d6b4 --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info/component_level.html @@ -0,0 +1,431 @@ + + + + + + + libecalc.common.component_info.component_level API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info.component_level

    + + + + + + +
     1from enum import Enum
    + 2
    + 3
    + 4class ComponentLevel(str, Enum):
    + 5    ASSET = "ASSET"
    + 6    INSTALLATION = "INSTALLATION"
    + 7    GENERATOR_SET = "GENERATOR_SET"
    + 8    SYSTEM = "SYSTEM"
    + 9    CONSUMER = "CONSUMER"
    +10    MODEL = "MODEL"
    +
    + + +
    +
    + +
    + + class + ComponentLevel(builtins.str, enum.Enum): + + + +
    + +
     5class ComponentLevel(str, Enum):
    + 6    ASSET = "ASSET"
    + 7    INSTALLATION = "INSTALLATION"
    + 8    GENERATOR_SET = "GENERATOR_SET"
    + 9    SYSTEM = "SYSTEM"
    +10    CONSUMER = "CONSUMER"
    +11    MODEL = "MODEL"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + ASSET = +<ComponentLevel.ASSET: 'ASSET'> + + +
    + + + + +
    +
    +
    + INSTALLATION = +<ComponentLevel.INSTALLATION: 'INSTALLATION'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET = +<ComponentLevel.GENERATOR_SET: 'GENERATOR_SET'> + + +
    + + + + +
    +
    +
    + SYSTEM = +<ComponentLevel.SYSTEM: 'SYSTEM'> + + +
    + + + + +
    +
    +
    + CONSUMER = +<ComponentLevel.CONSUMER: 'CONSUMER'> + + +
    + + + + +
    +
    +
    + MODEL = +<ComponentLevel.MODEL: 'MODEL'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info/compressor.html b/docs/about/references/api/libecalc/common/component_info/compressor.html new file mode 100644 index 0000000000..fb303368ae --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info/compressor.html @@ -0,0 +1,363 @@ + + + + + + + libecalc.common.component_info.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info.compressor

    + + + + + + +
    1from enum import Enum
    +2
    +3
    +4class CompressorPressureType(str, Enum):
    +5    INLET_PRESSURE = "INLET_PRESSURE"
    +6    OUTLET_PRESSURE = "OUTLET_PRESSURE"
    +
    + + +
    +
    + +
    + + class + CompressorPressureType(builtins.str, enum.Enum): + + + +
    + +
    5class CompressorPressureType(str, Enum):
    +6    INLET_PRESSURE = "INLET_PRESSURE"
    +7    OUTLET_PRESSURE = "OUTLET_PRESSURE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INLET_PRESSURE = +<CompressorPressureType.INLET_PRESSURE: 'INLET_PRESSURE'> + + +
    + + + + +
    +
    +
    + OUTLET_PRESSURE = +<CompressorPressureType.OUTLET_PRESSURE: 'OUTLET_PRESSURE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/datetime.html b/docs/about/references/api/libecalc/common/datetime.html new file mode 100644 index 0000000000..bcea90127a --- /dev/null +++ b/docs/about/references/api/libecalc/common/datetime.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.datetime API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.datetime

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/datetime/utils.html b/docs/about/references/api/libecalc/common/datetime/utils.html new file mode 100644 index 0000000000..1167b2856e --- /dev/null +++ b/docs/about/references/api/libecalc/common/datetime/utils.html @@ -0,0 +1,461 @@ + + + + + + + libecalc.common.datetime.utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.datetime.utils

    + + + + + + +
     1from enum import Enum
    + 2
    + 3from libecalc.common.logger import logger
    + 4
    + 5
    + 6class DateTimeFormats(str, Enum):
    + 7    date_format_iso_8601 = "%Y-%m-%d"
    + 8    date_format_iso_8601_no_dash = "%Y%m%d"
    + 9    date_format_alternative_dd_mm_yyyy = "%d.%m.%Y"
    +10    time_format = "%H:%M:%S"
    +11
    +12    @staticmethod
    +13    def get_format(format_number: int = 0) -> str:
    +14        if format_number == 0:
    +15            date_format = DateTimeFormats.date_format_iso_8601.value
    +16        elif format_number == 1:
    +17            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +18        elif format_number == 2:
    +19            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +20        else:
    +21            # Default for numbers outside supported range
    +22            date_format = DateTimeFormats.date_format_iso_8601
    +23            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +24        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + +
    +
    + +
    + + class + DateTimeFormats(builtins.str, enum.Enum): + + + +
    + +
     7class DateTimeFormats(str, Enum):
    + 8    date_format_iso_8601 = "%Y-%m-%d"
    + 9    date_format_iso_8601_no_dash = "%Y%m%d"
    +10    date_format_alternative_dd_mm_yyyy = "%d.%m.%Y"
    +11    time_format = "%H:%M:%S"
    +12
    +13    @staticmethod
    +14    def get_format(format_number: int = 0) -> str:
    +15        if format_number == 0:
    +16            date_format = DateTimeFormats.date_format_iso_8601.value
    +17        elif format_number == 1:
    +18            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +19        elif format_number == 2:
    +20            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +21        else:
    +22            # Default for numbers outside supported range
    +23            date_format = DateTimeFormats.date_format_iso_8601
    +24            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +25        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + date_format_iso_8601 = +<DateTimeFormats.date_format_iso_8601: '%Y-%m-%d'> + + +
    + + + + +
    +
    +
    + date_format_iso_8601_no_dash = +<DateTimeFormats.date_format_iso_8601_no_dash: '%Y%m%d'> + + +
    + + + + +
    +
    +
    + date_format_alternative_dd_mm_yyyy = +<DateTimeFormats.date_format_alternative_dd_mm_yyyy: '%d.%m.%Y'> + + +
    + + + + +
    +
    +
    + time_format = +<DateTimeFormats.time_format: '%H:%M:%S'> + + +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_format(format_number: int = 0) -> str: + + + +
    + +
    13    @staticmethod
    +14    def get_format(format_number: int = 0) -> str:
    +15        if format_number == 0:
    +16            date_format = DateTimeFormats.date_format_iso_8601.value
    +17        elif format_number == 1:
    +18            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +19        elif format_number == 2:
    +20            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +21        else:
    +22            # Default for numbers outside supported range
    +23            date_format = DateTimeFormats.date_format_iso_8601
    +24            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +25        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators.html b/docs/about/references/api/libecalc/common/decorators.html new file mode 100644 index 0000000000..cf3ee0abc6 --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.decorators API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators/capturer.html b/docs/about/references/api/libecalc/common/decorators/capturer.html new file mode 100644 index 0000000000..0a3b4bb62a --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators/capturer.html @@ -0,0 +1,602 @@ + + + + + + + libecalc.common.decorators.capturer API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators.capturer

    + + + + + + +
     1import os
    + 2import typing
    + 3from functools import wraps
    + 4from pathlib import Path
    + 5from typing import Any, Callable, Optional
    + 6
    + 7from libecalc.common.logger import logger
    + 8
    + 9unique_id: int = 1
    +10"""
    +11global static id to increase by one for each file being dumped
    +12"""
    +13
    +14
    +15class Jsonable(typing.Protocol):
    +16    """
    +17    Protocol to make sure that functions that are decorated for capture
    +18    can be serialized to json through the json() method
    +19    """
    +20
    +21    def json(self) -> str:
    +22        """
    +23        Serialize object as JSON
    +24
    +25        :return: a string according to json spec
    +26        """
    +27        ...
    +28
    +29
    +30def save(output_directory: Path, content: Jsonable):
    +31    """
    +32    A function to save serializable content. Each time this function is
    +33    called the name of the file that data is dumped to (which is an integer) will be incremented with 1.
    +34    E.g. file number one will be given the name 1.json, number two; 2.json and so on.
    +35
    +36    :param output_directory:   Where to save it. Missing parent directories will be created.
    +37    :param content:    What to save. Must be serializable to JSON through .json() method
    +38    """
    +39    Path.mkdir(output_directory, parents=True, exist_ok=True)
    +40    global unique_id
    +41    file_name = output_directory / f"{str(unique_id)}.json"
    +42    unique_id += 1
    +43
    +44    with open(file_name, "w") as file:
    +45        file.write(content.json())
    +46
    +47
    +48class Capturer:
    +49    """Decorator to capture values from a decorated function and optionally save to file"""
    +50
    +51    @staticmethod
    +52    def capture_return_values(
    +53        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +54    ) -> Optional[Any]:
    +55        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +56        the function works as if the decorator is not there.
    +57
    +58        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +59
    +60        Args:
    +61            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +62            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +63
    +64        Returns:
    +65            The same signature as the function it is decorating
    +66        """
    +67
    +68        def decorate(capturable: Callable[..., Jsonable]):
    +69            @wraps(capturable)
    +70            def with_capture(self, *args, **kwargs):
    +71                return_values = capturable(self, *args, **kwargs)
    +72                try:
    +73                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +74                except Exception as e:
    +75                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +76                return return_values
    +77
    +78            return with_capture
    +79
    +80        return decorate
    +
    + + +
    +
    +
    + unique_id: int = +1 + + +
    + + +

    global static id to increase by one for each file being dumped

    +
    + + +
    +
    + +
    + + class + Jsonable(typing.Protocol): + + + +
    + +
    16class Jsonable(typing.Protocol):
    +17    """
    +18    Protocol to make sure that functions that are decorated for capture
    +19    can be serialized to json through the json() method
    +20    """
    +21
    +22    def json(self) -> str:
    +23        """
    +24        Serialize object as JSON
    +25
    +26        :return: a string according to json spec
    +27        """
    +28        ...
    +
    + + +

    Protocol to make sure that functions that are decorated for capture +can be serialized to json through the json() method

    +
    + + +
    + +
    + + Jsonable(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    + +
    + + def + json(self) -> str: + + + +
    + +
    22    def json(self) -> str:
    +23        """
    +24        Serialize object as JSON
    +25
    +26        :return: a string according to json spec
    +27        """
    +28        ...
    +
    + + +

    Serialize object as JSON

    + +
    Returns
    + +
    +

    a string according to json spec

    +
    +
    + + +
    +
    +
    + +
    + + def + save( output_directory: pathlib.Path, content: libecalc.common.decorators.capturer.Jsonable): + + + +
    + +
    31def save(output_directory: Path, content: Jsonable):
    +32    """
    +33    A function to save serializable content. Each time this function is
    +34    called the name of the file that data is dumped to (which is an integer) will be incremented with 1.
    +35    E.g. file number one will be given the name 1.json, number two; 2.json and so on.
    +36
    +37    :param output_directory:   Where to save it. Missing parent directories will be created.
    +38    :param content:    What to save. Must be serializable to JSON through .json() method
    +39    """
    +40    Path.mkdir(output_directory, parents=True, exist_ok=True)
    +41    global unique_id
    +42    file_name = output_directory / f"{str(unique_id)}.json"
    +43    unique_id += 1
    +44
    +45    with open(file_name, "w") as file:
    +46        file.write(content.json())
    +
    + + +

    A function to save serializable content. Each time this function is +called the name of the file that data is dumped to (which is an integer) will be incremented with 1. +E.g. file number one will be given the name 1.json, number two; 2.json and so on.

    + +
    Parameters
    + +
      +
    • output_directory: Where to save it. Missing parent directories will be created.
    • +
    • content: What to save. Must be serializable to JSON through .json() method
    • +
    +
    + + +
    +
    + +
    + + class + Capturer: + + + +
    + +
    49class Capturer:
    +50    """Decorator to capture values from a decorated function and optionally save to file"""
    +51
    +52    @staticmethod
    +53    def capture_return_values(
    +54        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +55    ) -> Optional[Any]:
    +56        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +57        the function works as if the decorator is not there.
    +58
    +59        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +60
    +61        Args:
    +62            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +63            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +64
    +65        Returns:
    +66            The same signature as the function it is decorating
    +67        """
    +68
    +69        def decorate(capturable: Callable[..., Jsonable]):
    +70            @wraps(capturable)
    +71            def with_capture(self, *args, **kwargs):
    +72                return_values = capturable(self, *args, **kwargs)
    +73                try:
    +74                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +75                except Exception as e:
    +76                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +77                return return_values
    +78
    +79            return with_capture
    +80
    +81        return decorate
    +
    + + +

    Decorator to capture values from a decorated function and optionally save to file

    +
    + + +
    + +
    +
    @staticmethod
    + + def + capture_return_values( do_save_captured_content: bool = False, output_directory: pathlib.Path = PosixPath('/home/runner/work/ecalc/ecalc/docs/captured_data')) -> Union[Any, NoneType]: + + + +
    + +
    52    @staticmethod
    +53    def capture_return_values(
    +54        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +55    ) -> Optional[Any]:
    +56        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +57        the function works as if the decorator is not there.
    +58
    +59        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +60
    +61        Args:
    +62            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +63            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +64
    +65        Returns:
    +66            The same signature as the function it is decorating
    +67        """
    +68
    +69        def decorate(capturable: Callable[..., Jsonable]):
    +70            @wraps(capturable)
    +71            def with_capture(self, *args, **kwargs):
    +72                return_values = capturable(self, *args, **kwargs)
    +73                try:
    +74                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +75                except Exception as e:
    +76                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +77                return return_values
    +78
    +79            return with_capture
    +80
    +81        return decorate
    +
    + + +

    If enabled, save the return values from decorated function to the given output directory. If disabled, +the function works as if the decorator is not there.

    + +

    Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method

    + +

    Args: + do_save_captured_content: whether the captured content should be saved or not. Default False. + output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.

    + +

    Returns: + The same signature as the function it is decorating

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators/feature_flags.html b/docs/about/references/api/libecalc/common/decorators/feature_flags.html new file mode 100644 index 0000000000..fe86cd519c --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators/feature_flags.html @@ -0,0 +1,607 @@ + + + + + + + libecalc.common.decorators.feature_flags API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators.feature_flags

    + + + + + + +
     1from functools import wraps
    + 2from typing import Any, Callable, Optional
    + 3
    + 4from libecalc.common.logger import logger
    + 5
    + 6
    + 7class Feature:
    + 8    """Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way."""
    + 9
    +10    @staticmethod
    +11    def experimental(feature_description: str) -> Optional[Any]:
    +12        """Flag for experimental/beta features
    +13        Args:
    +14            feature_description: Description of new feature.
    +15
    +16        Returns:
    +17
    +18        """
    +19
    +20        def decorate(experimental_feature: Callable):
    +21            @wraps(experimental_feature)
    +22            def with_experimental(*args, **kwargs):
    +23                logger.warning(
    +24                    f"!EXPERIMENTAL! {feature_description}."
    +25                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +26                )
    +27                try:
    +28                    return experimental_feature(*args, **kwargs)
    +29                except Exception as e:
    +30                    logger.error(
    +31                        f"Error in {feature_description}: {e}."
    +32                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +33                        e,
    +34                    )
    +35                return None
    +36
    +37            return with_experimental
    +38
    +39        return decorate
    +40
    +41    @staticmethod
    +42    def deprecated(message: str):
    +43        """Flag for handling deprecated features
    +44        Args:
    +45            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +46
    +47        Returns:
    +48
    +49        """
    +50        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +51
    +52
    +53class FeatureToggle:
    +54    """Decorator to handle 2 paths, depending on whether toggle is on or off."""
    +55
    +56    @staticmethod
    +57    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +58        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +59
    +60        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +61        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +62        redeploy. E.g. essential for trunk based development and similar approaches.
    +63
    +64        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +65        and possibly the in-place mutable changes done on in-parameters.
    +66
    +67        :param feature_toggle:
    +68        :param fallback: the old safe known method
    +69        :return:
    +70        """
    +71
    +72        def decorate(experimental_feature: Callable):
    +73            @wraps(experimental_feature)
    +74            def with_feature_toggle(self, *args, **kwargs):
    +75                if feature_toggle:
    +76                    return experimental_feature(self, *args, **kwargs)
    +77                else:
    +78                    return fallback(self, *args, **kwargs)
    +79
    +80            return with_feature_toggle
    +81
    +82        return decorate
    +
    + + +
    +
    + +
    + + class + Feature: + + + +
    + +
     8class Feature:
    + 9    """Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way."""
    +10
    +11    @staticmethod
    +12    def experimental(feature_description: str) -> Optional[Any]:
    +13        """Flag for experimental/beta features
    +14        Args:
    +15            feature_description: Description of new feature.
    +16
    +17        Returns:
    +18
    +19        """
    +20
    +21        def decorate(experimental_feature: Callable):
    +22            @wraps(experimental_feature)
    +23            def with_experimental(*args, **kwargs):
    +24                logger.warning(
    +25                    f"!EXPERIMENTAL! {feature_description}."
    +26                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +27                )
    +28                try:
    +29                    return experimental_feature(*args, **kwargs)
    +30                except Exception as e:
    +31                    logger.error(
    +32                        f"Error in {feature_description}: {e}."
    +33                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +34                        e,
    +35                    )
    +36                return None
    +37
    +38            return with_experimental
    +39
    +40        return decorate
    +41
    +42    @staticmethod
    +43    def deprecated(message: str):
    +44        """Flag for handling deprecated features
    +45        Args:
    +46            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +47
    +48        Returns:
    +49
    +50        """
    +51        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +
    + + +

    Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + experimental(feature_description: str) -> Union[Any, NoneType]: + + + +
    + +
    11    @staticmethod
    +12    def experimental(feature_description: str) -> Optional[Any]:
    +13        """Flag for experimental/beta features
    +14        Args:
    +15            feature_description: Description of new feature.
    +16
    +17        Returns:
    +18
    +19        """
    +20
    +21        def decorate(experimental_feature: Callable):
    +22            @wraps(experimental_feature)
    +23            def with_experimental(*args, **kwargs):
    +24                logger.warning(
    +25                    f"!EXPERIMENTAL! {feature_description}."
    +26                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +27                )
    +28                try:
    +29                    return experimental_feature(*args, **kwargs)
    +30                except Exception as e:
    +31                    logger.error(
    +32                        f"Error in {feature_description}: {e}."
    +33                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +34                        e,
    +35                    )
    +36                return None
    +37
    +38            return with_experimental
    +39
    +40        return decorate
    +
    + + +

    Flag for experimental/beta features +Args: + feature_description: Description of new feature.

    + +

    Returns:

    +
    + + +
    +
    + +
    +
    @staticmethod
    + + def + deprecated(message: str): + + + +
    + +
    42    @staticmethod
    +43    def deprecated(message: str):
    +44        """Flag for handling deprecated features
    +45        Args:
    +46            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +47
    +48        Returns:
    +49
    +50        """
    +51        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +
    + + +

    Flag for handling deprecated features +Args: + message: Info about deprecation of feature, and (if available) instructions on usage of replacement.

    + +

    Returns:

    +
    + + +
    +
    +
    + +
    + + class + FeatureToggle: + + + +
    + +
    54class FeatureToggle:
    +55    """Decorator to handle 2 paths, depending on whether toggle is on or off."""
    +56
    +57    @staticmethod
    +58    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +59        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +60
    +61        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +62        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +63        redeploy. E.g. essential for trunk based development and similar approaches.
    +64
    +65        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +66        and possibly the in-place mutable changes done on in-parameters.
    +67
    +68        :param feature_toggle:
    +69        :param fallback: the old safe known method
    +70        :return:
    +71        """
    +72
    +73        def decorate(experimental_feature: Callable):
    +74            @wraps(experimental_feature)
    +75            def with_feature_toggle(self, *args, **kwargs):
    +76                if feature_toggle:
    +77                    return experimental_feature(self, *args, **kwargs)
    +78                else:
    +79                    return fallback(self, *args, **kwargs)
    +80
    +81            return with_feature_toggle
    +82
    +83        return decorate
    +
    + + +

    Decorator to handle 2 paths, depending on whether toggle is on or off.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + experimental(feature_toggle: bool, fallback: Callable) -> Union[Any, NoneType]: + + + +
    + +
    57    @staticmethod
    +58    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +59        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +60
    +61        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +62        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +63        redeploy. E.g. essential for trunk based development and similar approaches.
    +64
    +65        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +66        and possibly the in-place mutable changes done on in-parameters.
    +67
    +68        :param feature_toggle:
    +69        :param fallback: the old safe known method
    +70        :return:
    +71        """
    +72
    +73        def decorate(experimental_feature: Callable):
    +74            @wraps(experimental_feature)
    +75            def with_feature_toggle(self, *args, **kwargs):
    +76                if feature_toggle:
    +77                    return experimental_feature(self, *args, **kwargs)
    +78                else:
    +79                    return fallback(self, *args, **kwargs)
    +80
    +81            return with_feature_toggle
    +82
    +83        return decorate
    +
    + + +

    If feature_toggle is true, call current (experimental) method, if false fallback to old method.

    + +

    To easily and safely rollback to a working version in production for high(er) risk changes, but with +e.g. more functionality. To safely roll out new features with safety net to old version instead of +redeploy. E.g. essential for trunk based development and similar approaches.

    + +

    Both old and new must be compatible signature wise wrt in/out parameters, return values +and possibly the in-place mutable changes done on in-parameters.

    + +
    Parameters
    + +
      +
    • feature_toggle:
    • +
    • fallback: the old safe known method
    • +
    + +
    Returns
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/errors.html b/docs/about/references/api/libecalc/common/errors.html new file mode 100644 index 0000000000..d317039f3a --- /dev/null +++ b/docs/about/references/api/libecalc/common/errors.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.errors API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.errors

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/errors/exceptions.html b/docs/about/references/api/libecalc/common/errors/exceptions.html new file mode 100644 index 0000000000..9699fa7478 --- /dev/null +++ b/docs/about/references/api/libecalc/common/errors/exceptions.html @@ -0,0 +1,804 @@ + + + + + + + libecalc.common.errors.exceptions API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.errors.exceptions

    + + + + + + +
     1import enum
    + 2from typing import Optional
    + 3
    + 4
    + 5class EcalcErrorType(str, enum.Enum):
    + 6    """Valid error types in libecalc."""
    + 7
    + 8    CLIENT_ERROR = "User error"
    + 9    """The user made an error"""
    +10
    +11    SERVER_ERROR = "Server error"  # TODO: Does not make sense in a library, rename?
    +12    """ The eCalc library failed"""
    +13
    +14
    +15class EcalcError(Exception):
    +16    """Base eCalc library exception."""
    +17
    +18    title: Optional[str] = None
    +19    message: Optional[str] = None
    +20
    +21    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +22        super().__init__()
    +23
    +24        self.title = title
    +25        self.message = message
    +26        self.error_type = error_type
    +27
    +28    def __str__(self):
    +29        return f"{self.title}: {self.message}"
    +30
    +31
    +32class IncompatibleDataError(EcalcError):
    +33    """The data provided by the user is invalid."""
    +34
    +35    def __init__(self, message: str, title: str = "Incompatible Data"):
    +36        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +37
    +38
    +39class DifferentLengthsError(IncompatibleDataError):
    +40    """The data provided has incompatible lengths."""
    +41
    +42    def __init__(self, message: str):
    +43        super().__init__(title="Different Lengths", message=message)
    +44
    +45
    +46class MissingKeyError(IncompatibleDataError):
    +47    """The data provided is missing a required key."""
    +48
    +49    def __init__(self, message: str):
    +50        super().__init__(title="Missing Key", message=message)
    +51
    +52
    +53class ProgrammingError(EcalcError):
    +54    """The eCalc library has caused an error, and reached an invalid state. Likely a bug."""
    +55
    +56    def __init__(self, message: str):
    +57        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +58
    +59
    +60class IllegalStateException(EcalcError):
    +61    """This exception should hopefully never occur, and indicates a bug in the code."""
    +62
    +63    def __init__(self, message: str):
    +64        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + +
    +
    + +
    + + class + EcalcErrorType(builtins.str, enum.Enum): + + + +
    + +
     6class EcalcErrorType(str, enum.Enum):
    + 7    """Valid error types in libecalc."""
    + 8
    + 9    CLIENT_ERROR = "User error"
    +10    """The user made an error"""
    +11
    +12    SERVER_ERROR = "Server error"  # TODO: Does not make sense in a library, rename?
    +13    """ The eCalc library failed"""
    +
    + + +

    Valid error types in libecalc.

    +
    + + +
    +
    + CLIENT_ERROR = +<EcalcErrorType.CLIENT_ERROR: 'User error'> + + +
    + + +

    The user made an error

    +
    + + +
    +
    +
    + SERVER_ERROR = +<EcalcErrorType.SERVER_ERROR: 'Server error'> + + +
    + + +

    The eCalc library failed

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcError(builtins.Exception): + + + +
    + +
    16class EcalcError(Exception):
    +17    """Base eCalc library exception."""
    +18
    +19    title: Optional[str] = None
    +20    message: Optional[str] = None
    +21
    +22    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +23        super().__init__()
    +24
    +25        self.title = title
    +26        self.message = message
    +27        self.error_type = error_type
    +28
    +29    def __str__(self):
    +30        return f"{self.title}: {self.message}"
    +
    + + +

    Base eCalc library exception.

    +
    + + +
    + +
    + + EcalcError( title: str, message: str, error_type: libecalc.common.errors.exceptions.EcalcErrorType = <EcalcErrorType.CLIENT_ERROR: 'User error'>) + + + +
    + +
    22    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +23        super().__init__()
    +24
    +25        self.title = title
    +26        self.message = message
    +27        self.error_type = error_type
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + IncompatibleDataError(EcalcError): + + + +
    + +
    33class IncompatibleDataError(EcalcError):
    +34    """The data provided by the user is invalid."""
    +35
    +36    def __init__(self, message: str, title: str = "Incompatible Data"):
    +37        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + +

    The data provided by the user is invalid.

    +
    + + +
    + +
    + + IncompatibleDataError(message: str, title: str = 'Incompatible Data') + + + +
    + +
    36    def __init__(self, message: str, title: str = "Incompatible Data"):
    +37        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + DifferentLengthsError(IncompatibleDataError): + + + +
    + +
    40class DifferentLengthsError(IncompatibleDataError):
    +41    """The data provided has incompatible lengths."""
    +42
    +43    def __init__(self, message: str):
    +44        super().__init__(title="Different Lengths", message=message)
    +
    + + +

    The data provided has incompatible lengths.

    +
    + + +
    + +
    + + DifferentLengthsError(message: str) + + + +
    + +
    43    def __init__(self, message: str):
    +44        super().__init__(title="Different Lengths", message=message)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + MissingKeyError(IncompatibleDataError): + + + +
    + +
    47class MissingKeyError(IncompatibleDataError):
    +48    """The data provided is missing a required key."""
    +49
    +50    def __init__(self, message: str):
    +51        super().__init__(title="Missing Key", message=message)
    +
    + + +

    The data provided is missing a required key.

    +
    + + +
    + +
    + + MissingKeyError(message: str) + + + +
    + +
    50    def __init__(self, message: str):
    +51        super().__init__(title="Missing Key", message=message)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + ProgrammingError(EcalcError): + + + +
    + +
    54class ProgrammingError(EcalcError):
    +55    """The eCalc library has caused an error, and reached an invalid state. Likely a bug."""
    +56
    +57    def __init__(self, message: str):
    +58        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + +

    The eCalc library has caused an error, and reached an invalid state. Likely a bug.

    +
    + + +
    + +
    + + ProgrammingError(message: str) + + + +
    + +
    57    def __init__(self, message: str):
    +58        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + IllegalStateException(EcalcError): + + + +
    + +
    61class IllegalStateException(EcalcError):
    +62    """This exception should hopefully never occur, and indicates a bug in the code."""
    +63
    +64    def __init__(self, message: str):
    +65        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + +

    This exception should hopefully never occur, and indicates a bug in the code.

    +
    + + +
    + +
    + + IllegalStateException(message: str) + + + +
    + +
    64    def __init__(self, message: str):
    +65        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/graph.html b/docs/about/references/api/libecalc/common/graph.html new file mode 100644 index 0000000000..9e79d621dd --- /dev/null +++ b/docs/about/references/api/libecalc/common/graph.html @@ -0,0 +1,644 @@ + + + + + + + libecalc.common.graph API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.graph

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import Dict, Generic, List, Protocol, TypeVar
    + 4
    + 5import networkx as nx
    + 6from typing_extensions import Self
    + 7
    + 8NodeID = str
    + 9
    +10
    +11class NodeWithID(Protocol):
    +12    @property
    +13    def id(self) -> NodeID:
    +14        ...
    +15
    +16
    +17TNode = TypeVar("TNode", bound=NodeWithID)
    +18
    +19
    +20class Graph(Generic[TNode]):
    +21    def __init__(self):
    +22        self.graph = nx.DiGraph()
    +23        self.nodes: Dict[NodeID, TNode] = {}
    +24
    +25    def add_node(self, node: TNode) -> Self:
    +26        self.graph.add_node(node.id)
    +27        self.nodes[node.id] = node
    +28        return self
    +29
    +30    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +31        if from_id not in self.nodes or to_id not in self.nodes:
    +32            raise ValueError("Add node before adding edges")
    +33
    +34        self.graph.add_edge(from_id, to_id)
    +35        return self
    +36
    +37    def add_subgraph(self, subgraph: Graph) -> Self:
    +38        self.nodes.update(subgraph.nodes)
    +39        self.graph = nx.compose(self.graph, subgraph.graph)
    +40        return self
    +41
    +42    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +43        if recursively:
    +44            return [
    +45                successor_id
    +46                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +47                if successor_id != node_id
    +48            ]
    +49        else:
    +50            return list(self.graph.successors(node_id))
    +51
    +52    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +53        predecessors = list(self.graph.predecessors(node_id))
    +54        if len(predecessors) > 1:
    +55            raise ValueError(
    +56                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +57                f"Predecessors: {', '.join(predecessors)}"
    +58            )
    +59        return predecessors[0]
    +60
    +61    @property
    +62    def root(self) -> NodeID:
    +63        return list(nx.topological_sort(self.graph))[0]
    +64
    +65    def get_node(self, node_id: NodeID) -> TNode:
    +66        return self.nodes[node_id]
    +67
    +68    @property
    +69    def sorted_node_ids(self) -> List[NodeID]:
    +70        return list(nx.topological_sort(self.graph))
    +71
    +72    def __iter__(self):
    +73        return iter(self.graph)
    +
    + + +
    +
    + +
    + + class + NodeWithID(typing.Protocol): + + + +
    + +
    12class NodeWithID(Protocol):
    +13    @property
    +14    def id(self) -> NodeID:
    +15        ...
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + NodeWithID(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + class + Graph(typing.Generic[~TNode]): + + + +
    + +
    21class Graph(Generic[TNode]):
    +22    def __init__(self):
    +23        self.graph = nx.DiGraph()
    +24        self.nodes: Dict[NodeID, TNode] = {}
    +25
    +26    def add_node(self, node: TNode) -> Self:
    +27        self.graph.add_node(node.id)
    +28        self.nodes[node.id] = node
    +29        return self
    +30
    +31    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +32        if from_id not in self.nodes or to_id not in self.nodes:
    +33            raise ValueError("Add node before adding edges")
    +34
    +35        self.graph.add_edge(from_id, to_id)
    +36        return self
    +37
    +38    def add_subgraph(self, subgraph: Graph) -> Self:
    +39        self.nodes.update(subgraph.nodes)
    +40        self.graph = nx.compose(self.graph, subgraph.graph)
    +41        return self
    +42
    +43    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +44        if recursively:
    +45            return [
    +46                successor_id
    +47                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +48                if successor_id != node_id
    +49            ]
    +50        else:
    +51            return list(self.graph.successors(node_id))
    +52
    +53    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +54        predecessors = list(self.graph.predecessors(node_id))
    +55        if len(predecessors) > 1:
    +56            raise ValueError(
    +57                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +58                f"Predecessors: {', '.join(predecessors)}"
    +59            )
    +60        return predecessors[0]
    +61
    +62    @property
    +63    def root(self) -> NodeID:
    +64        return list(nx.topological_sort(self.graph))[0]
    +65
    +66    def get_node(self, node_id: NodeID) -> TNode:
    +67        return self.nodes[node_id]
    +68
    +69    @property
    +70    def sorted_node_ids(self) -> List[NodeID]:
    +71        return list(nx.topological_sort(self.graph))
    +72
    +73    def __iter__(self):
    +74        return iter(self.graph)
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + add_node(self, node: ~TNode) -> typing_extensions.Self: + + + +
    + +
    26    def add_node(self, node: TNode) -> Self:
    +27        self.graph.add_node(node.id)
    +28        self.nodes[node.id] = node
    +29        return self
    +
    + + + + +
    +
    + +
    + + def + add_edge(self, from_id: str, to_id: str) -> typing_extensions.Self: + + + +
    + +
    31    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +32        if from_id not in self.nodes or to_id not in self.nodes:
    +33            raise ValueError("Add node before adding edges")
    +34
    +35        self.graph.add_edge(from_id, to_id)
    +36        return self
    +
    + + + + +
    +
    + +
    + + def + add_subgraph(self, subgraph: libecalc.common.graph.Graph) -> typing_extensions.Self: + + + +
    + +
    38    def add_subgraph(self, subgraph: Graph) -> Self:
    +39        self.nodes.update(subgraph.nodes)
    +40        self.graph = nx.compose(self.graph, subgraph.graph)
    +41        return self
    +
    + + + + +
    +
    + +
    + + def + get_successors(self, node_id: str, recursively=False) -> List[str]: + + + +
    + +
    43    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +44        if recursively:
    +45            return [
    +46                successor_id
    +47                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +48                if successor_id != node_id
    +49            ]
    +50        else:
    +51            return list(self.graph.successors(node_id))
    +
    + + + + +
    +
    + +
    + + def + get_predecessor(self, node_id: str) -> str: + + + +
    + +
    53    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +54        predecessors = list(self.graph.predecessors(node_id))
    +55        if len(predecessors) > 1:
    +56            raise ValueError(
    +57                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +58                f"Predecessors: {', '.join(predecessors)}"
    +59            )
    +60        return predecessors[0]
    +
    + + + + +
    +
    + +
    + + def + get_node(self, node_id: str) -> ~TNode: + + + +
    + +
    66    def get_node(self, node_id: NodeID) -> TNode:
    +67        return self.nodes[node_id]
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list.html b/docs/about/references/api/libecalc/common/list.html new file mode 100644 index 0000000000..07f0191b69 --- /dev/null +++ b/docs/about/references/api/libecalc/common/list.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.list API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list/adjustment.html b/docs/about/references/api/libecalc/common/list/adjustment.html new file mode 100644 index 0000000000..6010162251 --- /dev/null +++ b/docs/about/references/api/libecalc/common/list/adjustment.html @@ -0,0 +1,292 @@ + + + + + + + libecalc.common.list.adjustment API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list.adjustment

    + + + + + + +
     1from typing import Union
    + 2
    + 3import numpy as np
    + 4from numpy.typing import NDArray
    + 5
    + 6
    + 7def transform_linear(
    + 8    values: Union[NDArray[np.float64], float],
    + 9    constant: float = 0.0,
    +10    factor: float = 1.0,
    +11) -> Union[NDArray[np.float64], float]:
    +12    """Linear transformation of an array. May typically be used for energy functions to adjust a result
    +13    according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.
    +14    """
    +15    constant = constant if constant is not None else 0.0
    +16    factor = factor if factor is not None else 1.0
    +17    return values * factor + constant
    +
    + + +
    +
    + +
    + + def + transform_linear( values: Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], float], constant: float = 0.0, factor: float = 1.0) -> Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], float]: + + + +
    + +
     8def transform_linear(
    + 9    values: Union[NDArray[np.float64], float],
    +10    constant: float = 0.0,
    +11    factor: float = 1.0,
    +12) -> Union[NDArray[np.float64], float]:
    +13    """Linear transformation of an array. May typically be used for energy functions to adjust a result
    +14    according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.
    +15    """
    +16    constant = constant if constant is not None else 0.0
    +17    factor = factor if factor is not None else 1.0
    +18    return values * factor + constant
    +
    + + +

    Linear transformation of an array. May typically be used for energy functions to adjust a result +according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list/list_utils.html b/docs/about/references/api/libecalc/common/list/list_utils.html new file mode 100644 index 0000000000..98c923e1fe --- /dev/null +++ b/docs/about/references/api/libecalc/common/list/list_utils.html @@ -0,0 +1,626 @@ + + + + + + + libecalc.common.list.list_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list.list_utils

    + + + + + + +
      1from collections import defaultdict
    +  2from datetime import datetime
    +  3from typing import Any, Dict, List, Optional, Sequence, Union, cast
    +  4
    +  5import numpy as np
    +  6from numpy import float64
    +  7from numpy.typing import NDArray
    +  8
    +  9"""
    + 10NOTE! A "list util" class is not the best, but maybe we should try to
    + 11expand a "prototype" class instead, e.g. create "our own static list class" where we extend
    + 12python list and add static methods to it..?
    + 13"""
    + 14
    + 15
    + 16def transpose(a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]:
    + 17    """Easily transpose from row based to column based data, and other
    + 18    way around, in order to use the format that best fits a certain
    + 19    purpose to work with such a list/dataframe.
    + 20
    + 21    Args:
    + 22        a: List to be transposed
    + 23
    + 24    Returns:
    + 25        Transposed list
    + 26
    + 27    """
    + 28    return list(map(list, zip(*a)))
    + 29
    + 30
    + 31def group_data_by_value_at_index(index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]:
    + 32    """Given an index of the list, group the list by the value corresponding to that index and
    + 33    return a dict with lists, where the keys correspond to the different values at the index provided.
    + 34
    + 35    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0,
    + 36    we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}
    + 37
    + 38    Args:
    + 39        index: Positive index
    + 40        row_based_data:
    + 41
    + 42    Returns:
    + 43        dict with lists, where the keys correspond to the different values at the index provided.
    + 44
    + 45    Raises:
    + 46        IndexError: if index specified is out of range/bounds, which should be handled by calling function.
    + 47
    + 48    """
    + 49    if index < 0:
    + 50        raise IndexError(f"Negative indexes are not allowed: {index}")
    + 51
    + 52    chart_grouped_by_index = defaultdict(list)
    + 53    for row in row_based_data:
    + 54        current_value = row[index]
    + 55        chart_grouped_by_index[current_value].append(row)
    + 56
    + 57    return chart_grouped_by_index
    + 58
    + 59
    + 60def elementwise_sum(
    + 61    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 62) -> NDArray[np.float64]:
    + 63    """Sum up multiple vectors elementwise.
    + 64
    + 65    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]
    + 66
    + 67    Args:
    + 68        *vectors: Sequences to be summed up elementwise
    + 69        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 70
    + 71    Returns:
    + 72        Numpy array where the elements of provided vectors are summed up elementwise
    + 73
    + 74    """
    + 75    if timesteps is not None:
    + 76        result = np.full_like(timesteps, fill_value=0.0, dtype=float64)
    + 77    else:
    + 78        result = np.full_like(vectors[0], fill_value=0.0, dtype=float64)
    + 79
    + 80    for vector in vectors:
    + 81        result = np.add(result, vector)  # type: ignore[arg-type]
    + 82    return result
    + 83
    + 84
    + 85def elementwise_multiplication(
    + 86    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 87) -> NDArray[np.float64]:
    + 88    """Multiply multiple vectors elementwise.
    + 89
    + 90    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1*2*1,20*10*30] = [2,6000]
    + 91
    + 92    Args:
    + 93        *vectors: Sequences to be multiplied up elementwise
    + 94        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 95
    + 96    Returns:
    + 97        Numpy array where the elements of provided vectors are multiplied up elementwise
    + 98
    + 99    """
    +100    if timesteps is not None:
    +101        result = np.full_like(timesteps, fill_value=1.0, dtype=float64)
    +102    else:
    +103        result = np.full_like(vectors[0], fill_value=1.0, dtype=float64)
    +104
    +105    for vector in vectors:
    +106        result = np.multiply(result, vector)  # type: ignore[arg-type]
    +107    return result
    +108
    +109
    +110def array_to_list(result_array: Union[NDArray[np.float64], List[NDArray[np.float64]], None]) -> Optional[List]:
    +111    """Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.
    +112
    +113    Args:
    +114        result_array: A numpy array, a list of numpy arrays or None
    +115
    +116    Returns:
    +117        list or list of lists
    +118    """
    +119    if result_array is None:
    +120        return None
    +121
    +122    if isinstance(result_array, list):
    +123        # In case we have a list of arrays.
    +124        return [array_to_list(array) for array in result_array]
    +125    elif isinstance(result_array, np.ndarray):
    +126        return cast(list, result_array.tolist())
    +
    + + +
    +
    + +
    + + def + transpose( a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]: + + + +
    + +
    17def transpose(a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]:
    +18    """Easily transpose from row based to column based data, and other
    +19    way around, in order to use the format that best fits a certain
    +20    purpose to work with such a list/dataframe.
    +21
    +22    Args:
    +23        a: List to be transposed
    +24
    +25    Returns:
    +26        Transposed list
    +27
    +28    """
    +29    return list(map(list, zip(*a)))
    +
    + + +

    Easily transpose from row based to column based data, and other +way around, in order to use the format that best fits a certain +purpose to work with such a list/dataframe.

    + +

    Args: + a: List to be transposed

    + +

    Returns: + Transposed list

    +
    + + +
    +
    + +
    + + def + group_data_by_value_at_index( index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]: + + + +
    + +
    32def group_data_by_value_at_index(index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]:
    +33    """Given an index of the list, group the list by the value corresponding to that index and
    +34    return a dict with lists, where the keys correspond to the different values at the index provided.
    +35
    +36    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0,
    +37    we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}
    +38
    +39    Args:
    +40        index: Positive index
    +41        row_based_data:
    +42
    +43    Returns:
    +44        dict with lists, where the keys correspond to the different values at the index provided.
    +45
    +46    Raises:
    +47        IndexError: if index specified is out of range/bounds, which should be handled by calling function.
    +48
    +49    """
    +50    if index < 0:
    +51        raise IndexError(f"Negative indexes are not allowed: {index}")
    +52
    +53    chart_grouped_by_index = defaultdict(list)
    +54    for row in row_based_data:
    +55        current_value = row[index]
    +56        chart_grouped_by_index[current_value].append(row)
    +57
    +58    return chart_grouped_by_index
    +
    + + +

    Given an index of the list, group the list by the value corresponding to that index and +return a dict with lists, where the keys correspond to the different values at the index provided.

    + +

    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0, +we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}

    + +

    Args: + index: Positive index + row_based_data:

    + +

    Returns: + dict with lists, where the keys correspond to the different values at the index provided.

    + +

    Raises: + IndexError: if index specified is out of range/bounds, which should be handled by calling function.

    +
    + + +
    +
    + +
    + + def + elementwise_sum( *vectors: Sequence[Union[float, NoneType]], timesteps: Union[List[datetime.datetime], NoneType] = None) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    61def elementwise_sum(
    +62    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    +63) -> NDArray[np.float64]:
    +64    """Sum up multiple vectors elementwise.
    +65
    +66    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]
    +67
    +68    Args:
    +69        *vectors: Sequences to be summed up elementwise
    +70        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    +71
    +72    Returns:
    +73        Numpy array where the elements of provided vectors are summed up elementwise
    +74
    +75    """
    +76    if timesteps is not None:
    +77        result = np.full_like(timesteps, fill_value=0.0, dtype=float64)
    +78    else:
    +79        result = np.full_like(vectors[0], fill_value=0.0, dtype=float64)
    +80
    +81    for vector in vectors:
    +82        result = np.add(result, vector)  # type: ignore[arg-type]
    +83    return result
    +
    + + +

    Sum up multiple vectors elementwise.

    + +

    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]

    + +

    Args: + *vectors: Sequences to be summed up elementwise + timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used

    + +

    Returns: + Numpy array where the elements of provided vectors are summed up elementwise

    +
    + + +
    +
    + +
    + + def + elementwise_multiplication( *vectors: Sequence[Union[float, NoneType]], timesteps: Union[List[datetime.datetime], NoneType] = None) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
     86def elementwise_multiplication(
    + 87    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 88) -> NDArray[np.float64]:
    + 89    """Multiply multiple vectors elementwise.
    + 90
    + 91    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1*2*1,20*10*30] = [2,6000]
    + 92
    + 93    Args:
    + 94        *vectors: Sequences to be multiplied up elementwise
    + 95        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 96
    + 97    Returns:
    + 98        Numpy array where the elements of provided vectors are multiplied up elementwise
    + 99
    +100    """
    +101    if timesteps is not None:
    +102        result = np.full_like(timesteps, fill_value=1.0, dtype=float64)
    +103    else:
    +104        result = np.full_like(vectors[0], fill_value=1.0, dtype=float64)
    +105
    +106    for vector in vectors:
    +107        result = np.multiply(result, vector)  # type: ignore[arg-type]
    +108    return result
    +
    + + +

    Multiply multiple vectors elementwise.

    + +

    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [121,201030] = [2,6000]

    + +

    Args: + *vectors: Sequences to be multiplied up elementwise + timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used

    + +

    Returns: + Numpy array where the elements of provided vectors are multiplied up elementwise

    +
    + + +
    +
    + +
    + + def + array_to_list( result_array: Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], List[numpy.ndarray[Any, numpy.dtype[numpy.float64]]], NoneType]) -> Union[List, NoneType]: + + + +
    + +
    111def array_to_list(result_array: Union[NDArray[np.float64], List[NDArray[np.float64]], None]) -> Optional[List]:
    +112    """Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.
    +113
    +114    Args:
    +115        result_array: A numpy array, a list of numpy arrays or None
    +116
    +117    Returns:
    +118        list or list of lists
    +119    """
    +120    if result_array is None:
    +121        return None
    +122
    +123    if isinstance(result_array, list):
    +124        # In case we have a list of arrays.
    +125        return [array_to_list(array) for array in result_array]
    +126    elif isinstance(result_array, np.ndarray):
    +127        return cast(list, result_array.tolist())
    +
    + + +

    Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.

    + +

    Args: + result_array: A numpy array, a list of numpy arrays or None

    + +

    Returns: + list or list of lists

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/logger.html b/docs/about/references/api/libecalc/common/logger.html new file mode 100644 index 0000000000..8deccecb2d --- /dev/null +++ b/docs/about/references/api/libecalc/common/logger.html @@ -0,0 +1,258 @@ + + + + + + + libecalc.common.logger API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.logger

    + + + + + + +
     1import logging
    + 2
    + 3"""
    + 4We provide a logger object for the library with the logger named 'libecalc'
    + 5It is the user of the library's responsibility to configure it:
    + 6
    + 7https://docs.python.org/3/howto/logging.html#configuring-logging-for-a-library
    + 8
    + 9TLDR;
    +10A library do not and shall NOT configure a logger itself. It reserves a logging namespace called "libecalc",
    +11that applications that use the library will need to configure themselves. Therefore we explicitly add a NullHandler
    +12to make sure that the logger is not activated.
    +13"""
    +14logger = logging.getLogger(
    +15    "libecalc",
    +16)
    +17logger.addHandler(logging.NullHandler())
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math.html b/docs/about/references/api/libecalc/common/math.html new file mode 100644 index 0000000000..1fb3555e72 --- /dev/null +++ b/docs/about/references/api/libecalc/common/math.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.math API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math/math_utils.html b/docs/about/references/api/libecalc/common/math/math_utils.html new file mode 100644 index 0000000000..bb086017e9 --- /dev/null +++ b/docs/about/references/api/libecalc/common/math/math_utils.html @@ -0,0 +1,409 @@ + + + + + + + libecalc.common.math.math_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math.math_utils

    + + + + + + +
     1from typing import Dict, TypeVar
    + 2
    + 3from libecalc.common.errors.exceptions import (
    + 4    DifferentLengthsError,
    + 5    IncompatibleDataError,
    + 6    MissingKeyError,
    + 7)
    + 8
    + 9T = TypeVar("T")
    +10
    +11
    +12class MathUtil:
    +13    @staticmethod
    +14    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +15        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +16        :param this:
    +17        :param that:
    +18        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +19
    +20        :throws: IncompatibleDataError if dicts cannot be subtracted
    +21        """
    +22        if this is None or that is None:
    +23            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +24
    +25        if len(this.items()) != len(that.items()):
    +26            raise DifferentLengthsError(
    +27                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +28            )
    +29
    +30        delta_dict: Dict[T, float] = {}
    +31
    +32        for item_key, this_value in this.items():
    +33            that_value = that.get(item_key)
    +34
    +35            if that_value is None:
    +36                raise MissingKeyError(
    +37                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +38                )
    +39
    +40            if that_value is not None:
    +41                delta_dict[item_key] = this_value - that_value
    +42
    +43        return delta_dict
    +
    + + +
    +
    + +
    + + class + MathUtil: + + + +
    + +
    13class MathUtil:
    +14    @staticmethod
    +15    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +16        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +17        :param this:
    +18        :param that:
    +19        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +20
    +21        :throws: IncompatibleDataError if dicts cannot be subtracted
    +22        """
    +23        if this is None or that is None:
    +24            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +25
    +26        if len(this.items()) != len(that.items()):
    +27            raise DifferentLengthsError(
    +28                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +29            )
    +30
    +31        delta_dict: Dict[T, float] = {}
    +32
    +33        for item_key, this_value in this.items():
    +34            that_value = that.get(item_key)
    +35
    +36            if that_value is None:
    +37                raise MissingKeyError(
    +38                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +39                )
    +40
    +41            if that_value is not None:
    +42                delta_dict[item_key] = this_value - that_value
    +43
    +44        return delta_dict
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + elementwise_subtraction_by_key(this: Dict[~T, float], that: Dict[~T, float]) -> Dict[~T, float]: + + + +
    + +
    14    @staticmethod
    +15    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +16        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +17        :param this:
    +18        :param that:
    +19        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +20
    +21        :throws: IncompatibleDataError if dicts cannot be subtracted
    +22        """
    +23        if this is None or that is None:
    +24            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +25
    +26        if len(this.items()) != len(that.items()):
    +27            raise DifferentLengthsError(
    +28                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +29            )
    +30
    +31        delta_dict: Dict[T, float] = {}
    +32
    +33        for item_key, this_value in this.items():
    +34            that_value = that.get(item_key)
    +35
    +36            if that_value is None:
    +37                raise MissingKeyError(
    +38                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +39                )
    +40
    +41            if that_value is not None:
    +42                delta_dict[item_key] = this_value - that_value
    +43
    +44        return delta_dict
    +
    + + +

    For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key

    + +
    Parameters
    + +
      +
    • this:
    • +
    • that:
    • +
    + +
    Returns
    + +
    +
    a dict containing the delta/subtraction of each value for corresponding key.
    +
    +
    + +

    :throws: IncompatibleDataError if dicts cannot be subtracted

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math/numbers.html b/docs/about/references/api/libecalc/common/math/numbers.html new file mode 100644 index 0000000000..55cb5a3ebd --- /dev/null +++ b/docs/about/references/api/libecalc/common/math/numbers.html @@ -0,0 +1,480 @@ + + + + + + + libecalc.common.math.numbers API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math.numbers

    + + + + + + +
     1from decimal import Decimal
    + 2
    + 3import numpy as np
    + 4
    + 5
    + 6class Numbers:
    + 7    """Class to handle eCalc specific logic to numbers."""
    + 8
    + 9    @staticmethod
    +10    def format_to_precision(number: float, precision: int) -> str:
    +11        """This method is currently only to format numbers for consistent
    +12        reporting, and hence a string is returned, and not the number
    +13        primitive.
    +14
    +15        See tests for examples on how it works, but in general:
    +16
    +17        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +18        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +19        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +20        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +21        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +22        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +23
    +24        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +25        Ref.
    +26            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +27            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +28
    +29        :param number:
    +30        :param precision:
    +31        :return:
    +32        """
    +33        if precision < -1:
    +34            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +35
    +36        if abs(number) <= pow(
    +37            10, (-precision) - 1
    +38        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +39            return "0"
    +40
    +41        my_decimal = Decimal(number)
    +42        significant_digits = my_decimal.adjusted()
    +43
    +44        if significant_digits < 0:
    +45            new_precision = precision
    +46        elif significant_digits < precision:
    +47            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +48        else:
    +49            new_precision = 0
    +50
    +51        return str(
    +52            np.format_float_positional(
    +53                number,
    +54                new_precision,
    +55                unique=True,
    +56                fractional=True,
    +57                trim="-",
    +58            )
    +59        )
    +
    + + +
    +
    + +
    + + class + Numbers: + + + +
    + +
     7class Numbers:
    + 8    """Class to handle eCalc specific logic to numbers."""
    + 9
    +10    @staticmethod
    +11    def format_to_precision(number: float, precision: int) -> str:
    +12        """This method is currently only to format numbers for consistent
    +13        reporting, and hence a string is returned, and not the number
    +14        primitive.
    +15
    +16        See tests for examples on how it works, but in general:
    +17
    +18        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +19        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +20        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +21        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +22        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +23        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +24
    +25        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +26        Ref.
    +27            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +28            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +29
    +30        :param number:
    +31        :param precision:
    +32        :return:
    +33        """
    +34        if precision < -1:
    +35            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +36
    +37        if abs(number) <= pow(
    +38            10, (-precision) - 1
    +39        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +40            return "0"
    +41
    +42        my_decimal = Decimal(number)
    +43        significant_digits = my_decimal.adjusted()
    +44
    +45        if significant_digits < 0:
    +46            new_precision = precision
    +47        elif significant_digits < precision:
    +48            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +49        else:
    +50            new_precision = 0
    +51
    +52        return str(
    +53            np.format_float_positional(
    +54                number,
    +55                new_precision,
    +56                unique=True,
    +57                fractional=True,
    +58                trim="-",
    +59            )
    +60        )
    +
    + + +

    Class to handle eCalc specific logic to numbers.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + format_to_precision(number: float, precision: int) -> str: + + + +
    + +
    10    @staticmethod
    +11    def format_to_precision(number: float, precision: int) -> str:
    +12        """This method is currently only to format numbers for consistent
    +13        reporting, and hence a string is returned, and not the number
    +14        primitive.
    +15
    +16        See tests for examples on how it works, but in general:
    +17
    +18        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +19        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +20        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +21        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +22        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +23        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +24
    +25        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +26        Ref.
    +27            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +28            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +29
    +30        :param number:
    +31        :param precision:
    +32        :return:
    +33        """
    +34        if precision < -1:
    +35            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +36
    +37        if abs(number) <= pow(
    +38            10, (-precision) - 1
    +39        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +40            return "0"
    +41
    +42        my_decimal = Decimal(number)
    +43        significant_digits = my_decimal.adjusted()
    +44
    +45        if significant_digits < 0:
    +46            new_precision = precision
    +47        elif significant_digits < precision:
    +48            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +49        else:
    +50            new_precision = 0
    +51
    +52        return str(
    +53            np.format_float_positional(
    +54                number,
    +55                new_precision,
    +56                unique=True,
    +57                fractional=True,
    +58                trim="-",
    +59            )
    +60        )
    +
    + + +

    This method is currently only to format numbers for consistent +reporting, and hence a string is returned, and not the number +primitive.

    + +

    See tests for examples on how it works, but in general:

    + +
      +
    • Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign, +but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    • +
    • Numbers without decimals, are reported without decimals (ie, where it is not significant)
    • +
    • Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    • +
    • If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    • +
    • If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    • +
    + +

    Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above. +Ref. + Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf + Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html

    + +
    Parameters
    + +
      +
    • number:
    • +
    • precision:
    • +
    + +
    Returns
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/priorities.html b/docs/about/references/api/libecalc/common/priorities.html new file mode 100644 index 0000000000..4811cdff14 --- /dev/null +++ b/docs/about/references/api/libecalc/common/priorities.html @@ -0,0 +1,248 @@ + + + + + + + libecalc.common.priorities API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.priorities

    + + + + + + +
    1from typing import Dict, TypeVar
    +2
    +3TPriorityValue = TypeVar("TPriorityValue")
    +4
    +5PriorityID = str
    +6
    +7Priorities = Dict[PriorityID, TPriorityValue]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/priority_optimizer.html b/docs/about/references/api/libecalc/common/priority_optimizer.html new file mode 100644 index 0000000000..a04ff41f38 --- /dev/null +++ b/docs/about/references/api/libecalc/common/priority_optimizer.html @@ -0,0 +1,622 @@ + + + + + + + libecalc.common.priority_optimizer API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.priority_optimizer

    + + + + + + +
     1import operator
    + 2import typing
    + 3from collections import defaultdict
    + 4from dataclasses import dataclass
    + 5from datetime import datetime
    + 6from functools import reduce
    + 7from typing import Dict, Generic, List, TypeVar
    + 8
    + 9import numpy as np
    +10
    +11from libecalc.common.priorities import Priorities, PriorityID
    +12from libecalc.common.units import Unit
    +13from libecalc.common.utils.rates import (
    +14    TimeSeriesBoolean,
    +15    TimeSeriesString,
    +16)
    +17
    +18TResult = TypeVar("TResult")
    +19TPriority = TypeVar("TPriority")
    +20
    +21
    +22@dataclass
    +23class PriorityOptimizerResult(Generic[TResult]):
    +24    priorities_used: TimeSeriesString
    +25    priority_results: Dict[datetime, Dict[PriorityID, Dict[str, TResult]]]
    +26
    +27
    +28@dataclass
    +29class EvaluatorResult(Generic[TResult]):
    +30    id: str
    +31    result: TResult
    +32    is_valid: TimeSeriesBoolean
    +33
    +34
    +35class PriorityOptimizer(Generic[TResult, TPriority]):
    +36    def optimize(
    +37        self,
    +38        timesteps: List[datetime],
    +39        priorities: Priorities[TPriority],
    +40        evaluator: typing.Callable[[datetime, TPriority], List[EvaluatorResult[TResult]]],
    +41    ) -> PriorityOptimizerResult:
    +42        """
    +43        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +44        the priority is selected, if invalid try the next priority.
    +45
    +46        We process each timestep separately.
    +47
    +48        Args:
    +49            timesteps: The timesteps that we want to figure out which priority to use for.
    +50            priorities: Dict of priorities, key is used to identify the priority in the results.
    +51            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +52
    +53        Returns:
    +54            PriorityOptimizerResult: result containing priorities used and a map of the calculated results. The keys of
    +55                the results map are the timestep used, the priority index and the id of the result.
    +56
    +57        """
    +58        is_valid = TimeSeriesBoolean(timesteps=timesteps, values=[False] * len(timesteps), unit=Unit.NONE)
    +59        priorities_used = TimeSeriesString(
    +60            timesteps=timesteps,
    +61            values=[list(priorities.keys())[-1]] * len(timesteps),
    +62            unit=Unit.NONE,
    +63        )
    +64        priority_results: Dict[datetime, Dict[PriorityID, Dict[str, TResult]]] = defaultdict(dict)
    +65
    +66        for timestep_index, timestep in enumerate(timesteps):
    +67            priority_results[timestep] = defaultdict(dict)
    +68            for priority_name, priority_value in priorities.items():
    +69                evaluator_results = evaluator(timestep, priority_value)
    +70                for evaluator_result in evaluator_results:
    +71                    priority_results[timestep][priority_name][evaluator_result.id] = evaluator_result.result
    +72
    +73                # Check if consumers are valid for this operational setting, should be valid for all consumers
    +74                all_evaluator_results_valid = reduce(
    +75                    operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +76                )
    +77                all_evaluator_results_valid_indices = np.nonzero(all_evaluator_results_valid.values)[0]
    +78                all_evaluator_results_valid_indices_period_shifted = [
    +79                    axis_indices + timestep_index for axis_indices in all_evaluator_results_valid_indices
    +80                ]
    +81
    +82                # Remove already valid indices, so we don't overwrite priority used with the latest valid
    +83                new_valid_indices = [
    +84                    i for i in all_evaluator_results_valid_indices_period_shifted if not is_valid.values[i]
    +85                ]
    +86
    +87                # Register the valid timesteps as valid and keep track of the operational setting used
    +88                is_valid[new_valid_indices] = True
    +89                priorities_used[new_valid_indices] = priority_name
    +90
    +91                if all(is_valid.values):
    +92                    # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +93                    break
    +94        return PriorityOptimizerResult(
    +95            priorities_used=priorities_used,
    +96            priority_results=dict(priority_results),
    +97        )
    +
    + + +
    +
    + +
    + + class + PriorityOptimizerResult(typing.Generic[~TResult]): + + + +
    + +
    24class PriorityOptimizerResult(Generic[TResult]):
    +25    priorities_used: TimeSeriesString
    +26    priority_results: Dict[datetime, Dict[PriorityID, Dict[str, TResult]]]
    +
    + + + + +
    +
    + + PriorityOptimizerResult( priorities_used: libecalc.common.utils.rates.TimeSeriesString, priority_results: Dict[datetime.datetime, Dict[str, Dict[str, ~TResult]]]) + + +
    + + + + +
    +
    +
    + +
    + + class + EvaluatorResult(typing.Generic[~TResult]): + + + +
    + +
    30class EvaluatorResult(Generic[TResult]):
    +31    id: str
    +32    result: TResult
    +33    is_valid: TimeSeriesBoolean
    +
    + + + + +
    +
    + + EvaluatorResult( id: str, result: ~TResult, is_valid: libecalc.common.utils.rates.TimeSeriesBoolean) + + +
    + + + + +
    +
    +
    + +
    + + class + PriorityOptimizer(typing.Generic[~TResult, ~TPriority]): + + + +
    + +
    36class PriorityOptimizer(Generic[TResult, TPriority]):
    +37    def optimize(
    +38        self,
    +39        timesteps: List[datetime],
    +40        priorities: Priorities[TPriority],
    +41        evaluator: typing.Callable[[datetime, TPriority], List[EvaluatorResult[TResult]]],
    +42    ) -> PriorityOptimizerResult:
    +43        """
    +44        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +45        the priority is selected, if invalid try the next priority.
    +46
    +47        We process each timestep separately.
    +48
    +49        Args:
    +50            timesteps: The timesteps that we want to figure out which priority to use for.
    +51            priorities: Dict of priorities, key is used to identify the priority in the results.
    +52            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +53
    +54        Returns:
    +55            PriorityOptimizerResult: result containing priorities used and a map of the calculated results. The keys of
    +56                the results map are the timestep used, the priority index and the id of the result.
    +57
    +58        """
    +59        is_valid = TimeSeriesBoolean(timesteps=timesteps, values=[False] * len(timesteps), unit=Unit.NONE)
    +60        priorities_used = TimeSeriesString(
    +61            timesteps=timesteps,
    +62            values=[list(priorities.keys())[-1]] * len(timesteps),
    +63            unit=Unit.NONE,
    +64        )
    +65        priority_results: Dict[datetime, Dict[PriorityID, Dict[str, TResult]]] = defaultdict(dict)
    +66
    +67        for timestep_index, timestep in enumerate(timesteps):
    +68            priority_results[timestep] = defaultdict(dict)
    +69            for priority_name, priority_value in priorities.items():
    +70                evaluator_results = evaluator(timestep, priority_value)
    +71                for evaluator_result in evaluator_results:
    +72                    priority_results[timestep][priority_name][evaluator_result.id] = evaluator_result.result
    +73
    +74                # Check if consumers are valid for this operational setting, should be valid for all consumers
    +75                all_evaluator_results_valid = reduce(
    +76                    operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +77                )
    +78                all_evaluator_results_valid_indices = np.nonzero(all_evaluator_results_valid.values)[0]
    +79                all_evaluator_results_valid_indices_period_shifted = [
    +80                    axis_indices + timestep_index for axis_indices in all_evaluator_results_valid_indices
    +81                ]
    +82
    +83                # Remove already valid indices, so we don't overwrite priority used with the latest valid
    +84                new_valid_indices = [
    +85                    i for i in all_evaluator_results_valid_indices_period_shifted if not is_valid.values[i]
    +86                ]
    +87
    +88                # Register the valid timesteps as valid and keep track of the operational setting used
    +89                is_valid[new_valid_indices] = True
    +90                priorities_used[new_valid_indices] = priority_name
    +91
    +92                if all(is_valid.values):
    +93                    # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +94                    break
    +95        return PriorityOptimizerResult(
    +96            priorities_used=priorities_used,
    +97            priority_results=dict(priority_results),
    +98        )
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + optimize( self, timesteps: List[datetime.datetime], priorities: Dict[str, ~TPriority], evaluator: Callable[[datetime.datetime, ~TPriority], List[libecalc.common.priority_optimizer.EvaluatorResult[~TResult]]]) -> libecalc.common.priority_optimizer.PriorityOptimizerResult: + + + +
    + +
    37    def optimize(
    +38        self,
    +39        timesteps: List[datetime],
    +40        priorities: Priorities[TPriority],
    +41        evaluator: typing.Callable[[datetime, TPriority], List[EvaluatorResult[TResult]]],
    +42    ) -> PriorityOptimizerResult:
    +43        """
    +44        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +45        the priority is selected, if invalid try the next priority.
    +46
    +47        We process each timestep separately.
    +48
    +49        Args:
    +50            timesteps: The timesteps that we want to figure out which priority to use for.
    +51            priorities: Dict of priorities, key is used to identify the priority in the results.
    +52            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +53
    +54        Returns:
    +55            PriorityOptimizerResult: result containing priorities used and a map of the calculated results. The keys of
    +56                the results map are the timestep used, the priority index and the id of the result.
    +57
    +58        """
    +59        is_valid = TimeSeriesBoolean(timesteps=timesteps, values=[False] * len(timesteps), unit=Unit.NONE)
    +60        priorities_used = TimeSeriesString(
    +61            timesteps=timesteps,
    +62            values=[list(priorities.keys())[-1]] * len(timesteps),
    +63            unit=Unit.NONE,
    +64        )
    +65        priority_results: Dict[datetime, Dict[PriorityID, Dict[str, TResult]]] = defaultdict(dict)
    +66
    +67        for timestep_index, timestep in enumerate(timesteps):
    +68            priority_results[timestep] = defaultdict(dict)
    +69            for priority_name, priority_value in priorities.items():
    +70                evaluator_results = evaluator(timestep, priority_value)
    +71                for evaluator_result in evaluator_results:
    +72                    priority_results[timestep][priority_name][evaluator_result.id] = evaluator_result.result
    +73
    +74                # Check if consumers are valid for this operational setting, should be valid for all consumers
    +75                all_evaluator_results_valid = reduce(
    +76                    operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +77                )
    +78                all_evaluator_results_valid_indices = np.nonzero(all_evaluator_results_valid.values)[0]
    +79                all_evaluator_results_valid_indices_period_shifted = [
    +80                    axis_indices + timestep_index for axis_indices in all_evaluator_results_valid_indices
    +81                ]
    +82
    +83                # Remove already valid indices, so we don't overwrite priority used with the latest valid
    +84                new_valid_indices = [
    +85                    i for i in all_evaluator_results_valid_indices_period_shifted if not is_valid.values[i]
    +86                ]
    +87
    +88                # Register the valid timesteps as valid and keep track of the operational setting used
    +89                is_valid[new_valid_indices] = True
    +90                priorities_used[new_valid_indices] = priority_name
    +91
    +92                if all(is_valid.values):
    +93                    # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +94                    break
    +95        return PriorityOptimizerResult(
    +96            priorities_used=priorities_used,
    +97            priority_results=dict(priority_results),
    +98        )
    +
    + + +

    Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid +the priority is selected, if invalid try the next priority.

    + +

    We process each timestep separately.

    + +

    Args: + timesteps: The timesteps that we want to figure out which priority to use for. + priorities: Dict of priorities, key is used to identify the priority in the results. + evaluator: The evaluator function gives a list of results back, each result with its own unique id.

    + +

    Returns: + PriorityOptimizerResult: result containing priorities used and a map of the calculated results. The keys of + the results map are the timestep used, the priority index and the id of the result.

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/run_info.html b/docs/about/references/api/libecalc/common/run_info.html new file mode 100644 index 0000000000..37dacee951 --- /dev/null +++ b/docs/about/references/api/libecalc/common/run_info.html @@ -0,0 +1,319 @@ + + + + + + + libecalc.common.run_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.run_info

    + + + + + + +
     1from datetime import datetime
    + 2from typing import Optional
    + 3
    + 4from pydantic import BaseModel
    + 5
    + 6from libecalc.common.version import Version
    + 7
    + 8
    + 9class RunInfo(BaseModel):
    +10    """Data model for metadata about eCalc model runs."""
    +11
    +12    version: Version
    +13    start: datetime
    +14    end: Optional[datetime] = None
    +15
    +16    def __str__(self):
    +17        rstr = f"version '{str(self.version)}' started at '{self.start.strftime('%Y.%m.%d %H:%M:%S')}'"
    +18        if self.end is not None:
    +19            rstr += f" ended at '{self.end.strftime('%Y.%m.%d %H:%M:%S')}'"
    +20        return rstr
    +
    + + +
    +
    + +
    + + class + RunInfo(pydantic.main.BaseModel): + + + +
    + +
    10class RunInfo(BaseModel):
    +11    """Data model for metadata about eCalc model runs."""
    +12
    +13    version: Version
    +14    start: datetime
    +15    end: Optional[datetime] = None
    +16
    +17    def __str__(self):
    +18        rstr = f"version '{str(self.version)}' started at '{self.start.strftime('%Y.%m.%d %H:%M:%S')}'"
    +19        if self.end is not None:
    +20            rstr += f" ended at '{self.end.strftime('%Y.%m.%d %H:%M:%S')}'"
    +21        return rstr
    +
    + + +

    Data model for metadata about eCalc model runs.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/stream_conditions.html b/docs/about/references/api/libecalc/common/stream_conditions.html new file mode 100644 index 0000000000..80e32510ce --- /dev/null +++ b/docs/about/references/api/libecalc/common/stream_conditions.html @@ -0,0 +1,807 @@ + + + + + + + libecalc.common.stream_conditions API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.stream_conditions

    + + + + + + +
     1import operator
    + 2from datetime import datetime
    + 3from functools import reduce
    + 4from typing import List, Literal, Optional
    + 5
    + 6from pydantic import BaseModel, Extra
    + 7from typing_extensions import Self
    + 8
    + 9from libecalc.common.string.string_utils import to_camel_case
    +10from libecalc.common.utils.rates import TimeSeriesFloat, TimeSeriesStreamDayRate
    +11
    +12
    +13class StreamConditions(BaseModel):
    +14    class Config:
    +15        extra = Extra.forbid
    +16        alias_generator = to_camel_case
    +17        allow_population_by_field_name = True
    +18
    +19    name: str
    +20    rate: Optional[TimeSeriesStreamDayRate]
    +21    pressure: Optional[TimeSeriesFloat]
    +22    fluid_density: Optional[TimeSeriesFloat] = None
    +23
    +24    def mix(self, *other_streams: "StreamConditions") -> "StreamConditions":
    +25        """
    +26        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    +27
    +28        Assuming 'self' sets the target pressure.
    +29        Args:
    +30            other_streams: The streams to be mixed in.
    +31
    +32        Returns: The mixed stream
    +33
    +34        """
    +35        streams = [self, *other_streams]
    +36        if any(stream.rate is None for stream in streams):
    +37            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    +38            raise ValueError(
    +39                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    +40            )
    +41
    +42        if any(stream.pressure is None for stream in streams):
    +43            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    +44            raise ValueError(
    +45                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    +46            )
    +47
    +48        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    +49        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    +50            # TODO: return a warning object with the specific timesteps?
    +51            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    +52
    +53        return StreamConditions(
    +54            name=f"Mixed-{'-'.join(stream.name for stream in streams)}",
    +55            rate=reduce(operator.add, [stream.rate for stream in streams]),
    +56            pressure=target_pressure,
    +57            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    +58        )
    +59
    +60    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +61        """
    +62        For a given timestep, get the stream that is relevant for that timestep only.
    +63
    +64        Args:
    +65            current_timestep: the timestep must be a part of the global timevector
    +66
    +67        Returns: the stream that is relevant for the given timestep.
    +68
    +69        """
    +70        return StreamConditions(
    +71            name=self.name,
    +72            rate=self.rate.for_timestep(current_timestep) if self.rate is not None else None,
    +73            pressure=self.pressure.for_timestep(current_timestep) if self.pressure is not None else None,
    +74            fluid_density=self.fluid_density.for_timestep(current_timestep) if self.fluid_density is not None else None,
    +75        )
    +76
    +77    @classmethod
    +78    def mix_all(cls, streams: List["StreamConditions"]) -> "StreamConditions":
    +79        if len(streams) == 0:
    +80            raise ValueError("No streams to mix")
    +81        if len(streams) == 1:
    +82            return streams[0].copy()
    +83
    +84        first, *rest = streams
    +85        return first.copy().mix(*rest)
    +86
    +87
    +88class Stage(BaseModel):
    +89    class Config:
    +90        extra = Extra.forbid
    +91        alias_generator = to_camel_case
    +92        allow_population_by_field_name = True
    +93
    +94    name: Literal["inlet", "before_choke", "outlet"]
    +95    stream: StreamConditions
    +
    + + +
    +
    + +
    + + class + StreamConditions(pydantic.main.BaseModel): + + + +
    + +
    14class StreamConditions(BaseModel):
    +15    class Config:
    +16        extra = Extra.forbid
    +17        alias_generator = to_camel_case
    +18        allow_population_by_field_name = True
    +19
    +20    name: str
    +21    rate: Optional[TimeSeriesStreamDayRate]
    +22    pressure: Optional[TimeSeriesFloat]
    +23    fluid_density: Optional[TimeSeriesFloat] = None
    +24
    +25    def mix(self, *other_streams: "StreamConditions") -> "StreamConditions":
    +26        """
    +27        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    +28
    +29        Assuming 'self' sets the target pressure.
    +30        Args:
    +31            other_streams: The streams to be mixed in.
    +32
    +33        Returns: The mixed stream
    +34
    +35        """
    +36        streams = [self, *other_streams]
    +37        if any(stream.rate is None for stream in streams):
    +38            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    +39            raise ValueError(
    +40                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    +41            )
    +42
    +43        if any(stream.pressure is None for stream in streams):
    +44            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    +45            raise ValueError(
    +46                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    +47            )
    +48
    +49        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    +50        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    +51            # TODO: return a warning object with the specific timesteps?
    +52            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    +53
    +54        return StreamConditions(
    +55            name=f"Mixed-{'-'.join(stream.name for stream in streams)}",
    +56            rate=reduce(operator.add, [stream.rate for stream in streams]),
    +57            pressure=target_pressure,
    +58            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    +59        )
    +60
    +61    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +62        """
    +63        For a given timestep, get the stream that is relevant for that timestep only.
    +64
    +65        Args:
    +66            current_timestep: the timestep must be a part of the global timevector
    +67
    +68        Returns: the stream that is relevant for the given timestep.
    +69
    +70        """
    +71        return StreamConditions(
    +72            name=self.name,
    +73            rate=self.rate.for_timestep(current_timestep) if self.rate is not None else None,
    +74            pressure=self.pressure.for_timestep(current_timestep) if self.pressure is not None else None,
    +75            fluid_density=self.fluid_density.for_timestep(current_timestep) if self.fluid_density is not None else None,
    +76        )
    +77
    +78    @classmethod
    +79    def mix_all(cls, streams: List["StreamConditions"]) -> "StreamConditions":
    +80        if len(streams) == 0:
    +81            raise ValueError("No streams to mix")
    +82        if len(streams) == 1:
    +83            return streams[0].copy()
    +84
    +85        first, *rest = streams
    +86        return first.copy().mix(*rest)
    +
    + + + + +
    + + + +
    25    def mix(self, *other_streams: "StreamConditions") -> "StreamConditions":
    +26        """
    +27        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    +28
    +29        Assuming 'self' sets the target pressure.
    +30        Args:
    +31            other_streams: The streams to be mixed in.
    +32
    +33        Returns: The mixed stream
    +34
    +35        """
    +36        streams = [self, *other_streams]
    +37        if any(stream.rate is None for stream in streams):
    +38            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    +39            raise ValueError(
    +40                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    +41            )
    +42
    +43        if any(stream.pressure is None for stream in streams):
    +44            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    +45            raise ValueError(
    +46                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    +47            )
    +48
    +49        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    +50        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    +51            # TODO: return a warning object with the specific timesteps?
    +52            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    +53
    +54        return StreamConditions(
    +55            name=f"Mixed-{'-'.join(stream.name for stream in streams)}",
    +56            rate=reduce(operator.add, [stream.rate for stream in streams]),
    +57            pressure=target_pressure,
    +58            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    +59        )
    +
    + + +

    Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).

    + +

    Assuming 'self' sets the target pressure. +Args: + other_streams: The streams to be mixed in.

    + +

    Returns: The mixed stream

    +
    + + +
    +
    + +
    + + def + get_subset_for_timestep(self, current_timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    61    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +62        """
    +63        For a given timestep, get the stream that is relevant for that timestep only.
    +64
    +65        Args:
    +66            current_timestep: the timestep must be a part of the global timevector
    +67
    +68        Returns: the stream that is relevant for the given timestep.
    +69
    +70        """
    +71        return StreamConditions(
    +72            name=self.name,
    +73            rate=self.rate.for_timestep(current_timestep) if self.rate is not None else None,
    +74            pressure=self.pressure.for_timestep(current_timestep) if self.pressure is not None else None,
    +75            fluid_density=self.fluid_density.for_timestep(current_timestep) if self.fluid_density is not None else None,
    +76        )
    +
    + + +

    For a given timestep, get the stream that is relevant for that timestep only.

    + +

    Args: + current_timestep: the timestep must be a part of the global timevector

    + +

    Returns: the stream that is relevant for the given timestep.

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + mix_all( cls, streams: list[libecalc.common.stream_conditions.StreamConditions]) -> libecalc.common.stream_conditions.StreamConditions: + + + +
    + +
    78    @classmethod
    +79    def mix_all(cls, streams: List["StreamConditions"]) -> "StreamConditions":
    +80        if len(streams) == 0:
    +81            raise ValueError("No streams to mix")
    +82        if len(streams) == 1:
    +83            return streams[0].copy()
    +84
    +85        first, *rest = streams
    +86        return first.copy().mix(*rest)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + StreamConditions.Config: + + + +
    + +
    15    class Config:
    +16        extra = Extra.forbid
    +17        alias_generator = to_camel_case
    +18        allow_population_by_field_name = True
    +
    + + + + +
    +
    + extra = +<Extra.forbid: 'forbid'> + + +
    + + + + +
    +
    + +
    + + def + alias_generator(string: str) -> str: + + + +
    + +
    27def to_camel_case(string: str) -> str:
    +28    """Convert string from snake_case to camelCase
    +29
    +30    Args:
    +31        string: String in snake_case format
    +32
    +33    Returns:
    +34        String in camelCase format
    +35
    +36    """
    +37    string_split = string.replace("__", "_").split("_")
    +38    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +39    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +

    Convert string from snake_case to camelCase

    + +

    Args: + string: String in snake_case format

    + +

    Returns: + String in camelCase format

    +
    + + +
    +
    +
    + +
    + + class + Stage(pydantic.main.BaseModel): + + + +
    + +
    89class Stage(BaseModel):
    +90    class Config:
    +91        extra = Extra.forbid
    +92        alias_generator = to_camel_case
    +93        allow_population_by_field_name = True
    +94
    +95    name: Literal["inlet", "before_choke", "outlet"]
    +96    stream: StreamConditions
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Stage.Config: + + + +
    + +
    15    class Config:
    +16        extra = Extra.forbid
    +17        alias_generator = to_camel_case
    +18        allow_population_by_field_name = True
    +
    + + + + +
    +
    + extra = +<Extra.forbid: 'forbid'> + + +
    + + + + +
    +
    + +
    + + def + alias_generator(string: str) -> str: + + + +
    + +
    27def to_camel_case(string: str) -> str:
    +28    """Convert string from snake_case to camelCase
    +29
    +30    Args:
    +31        string: String in snake_case format
    +32
    +33    Returns:
    +34        String in camelCase format
    +35
    +36    """
    +37    string_split = string.replace("__", "_").split("_")
    +38    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +39    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +

    Convert string from snake_case to camelCase

    + +

    Args: + string: String in snake_case format

    + +

    Returns: + String in camelCase format

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/string.html b/docs/about/references/api/libecalc/common/string.html new file mode 100644 index 0000000000..a71c2e7382 --- /dev/null +++ b/docs/about/references/api/libecalc/common/string.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.string API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.string

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/string/string_utils.html b/docs/about/references/api/libecalc/common/string/string_utils.html new file mode 100644 index 0000000000..c5fd7a4db1 --- /dev/null +++ b/docs/about/references/api/libecalc/common/string/string_utils.html @@ -0,0 +1,382 @@ + + + + + + + libecalc.common.string.string_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.string.string_utils

    + + + + + + +
     1import hashlib
    + 2from typing import Iterable, Set
    + 3
    + 4
    + 5def get_duplicates(names: Iterable[str]) -> Set[str]:
    + 6    seen = set()
    + 7    duplicates = set()
    + 8    for name in names:
    + 9        if name in seen:
    +10            duplicates.add(name)
    +11        else:
    +12            seen.add(name)
    +13    return duplicates
    +14
    +15
    +16def generate_id(*args: str) -> str:
    +17    """Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than
    +18    the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.
    +19
    +20    If there are many strings they are joined together.
    +21    """
    +22    full_string = "-".join(args)
    +23    return hashlib.md5(full_string.encode()).hexdigest()  # noqa: S324 - insecure hash for ids
    +24
    +25
    +26def to_camel_case(string: str) -> str:
    +27    """Convert string from snake_case to camelCase
    +28
    +29    Args:
    +30        string: String in snake_case format
    +31
    +32    Returns:
    +33        String in camelCase format
    +34
    +35    """
    +36    string_split = string.replace("__", "_").split("_")
    +37    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +38    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +
    +
    + +
    + + def + get_duplicates(names: Iterable[str]) -> Set[str]: + + + +
    + +
     6def get_duplicates(names: Iterable[str]) -> Set[str]:
    + 7    seen = set()
    + 8    duplicates = set()
    + 9    for name in names:
    +10        if name in seen:
    +11            duplicates.add(name)
    +12        else:
    +13            seen.add(name)
    +14    return duplicates
    +
    + + + + +
    +
    + +
    + + def + generate_id(*args: str) -> str: + + + +
    + +
    17def generate_id(*args: str) -> str:
    +18    """Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than
    +19    the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.
    +20
    +21    If there are many strings they are joined together.
    +22    """
    +23    full_string = "-".join(args)
    +24    return hashlib.md5(full_string.encode()).hexdigest()  # noqa: S324 - insecure hash for ids
    +
    + + +

    Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than +the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.

    + +

    If there are many strings they are joined together.

    +
    + + +
    +
    + +
    + + def + to_camel_case(string: str) -> str: + + + +
    + +
    27def to_camel_case(string: str) -> str:
    +28    """Convert string from snake_case to camelCase
    +29
    +30    Args:
    +31        string: String in snake_case format
    +32
    +33    Returns:
    +34        String in camelCase format
    +35
    +36    """
    +37    string_split = string.replace("__", "_").split("_")
    +38    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +39    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +

    Convert string from snake_case to camelCase

    + +

    Args: + string: String in snake_case format

    + +

    Returns: + String in camelCase format

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/tabular_time_series.html b/docs/about/references/api/libecalc/common/tabular_time_series.html new file mode 100644 index 0000000000..e19c23f9cc --- /dev/null +++ b/docs/about/references/api/libecalc/common/tabular_time_series.html @@ -0,0 +1,612 @@ + + + + + + + libecalc.common.tabular_time_series API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.tabular_time_series

    + + + + + + +
     1import itertools
    + 2from typing import Protocol, TypeVar
    + 3
    + 4from pydantic import BaseModel
    + 5from typing_extensions import Self
    + 6
    + 7from libecalc.common.list.list_utils import transpose
    + 8from libecalc.common.utils.rates import TimeSeries
    + 9
    +10
    +11class TabularTimeSeries(Protocol):
    +12    def copy(self, deep: bool = False) -> Self:
    +13        """
    +14        Duplicate a model
    +15        Args:
    +16            deep: set to `True` to make a deep copy of the model
    +17
    +18        Returns: new model instance
    +19
    +20        """
    +21        ...
    +22
    +23
    +24ObjectWithTimeSeries = TypeVar("ObjectWithTimeSeries", bound=TabularTimeSeries)
    +25
    +26
    +27class TabularTimeSeriesUtils:
    +28    """
    +29    Utility functions for objects containing TimeSeries
    +30    """
    +31
    +32    @classmethod
    +33    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +34        """
    +35        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +36        Args:
    +37            *objects_with_time_series: list of objects to merge
    +38
    +39        Returns: a merged object of the same type
    +40
    +41        """
    +42        # Verify that we are merging the same types
    +43        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +44            raise ValueError("Can not merge objects of differing types.")
    +45
    +46        first, *others = objects_with_time_series
    +47        merged_object = first.copy(deep=True)
    +48
    +49        for key, value in first.__dict__.items():
    +50            for other in others:
    +51                accumulated_value = merged_object.__getattribute__(key)
    +52                other_value = other.__getattribute__(key)
    +53                if key == "timesteps":
    +54                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +55                    merged_object.__setattr__(key, merged_timesteps)
    +56                elif isinstance(value, TimeSeries):
    +57                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +58                elif isinstance(value, BaseModel):
    +59                    merged_object.__setattr__(
    +60                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +61                    )
    +62                elif (
    +63                    isinstance(value, list)
    +64                    and len(value) > 0
    +65                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +66                ):
    +67                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +68                    transposed_list_attributes = transpose(list_attributes)
    +69                    merged_list_attributes = []
    +70                    if isinstance(value[0], TimeSeries):
    +71                        for time_series_to_merge in transposed_list_attributes:
    +72                            first_time_series, *others_time_series = time_series_to_merge
    +73                            merged_time_series = first_time_series
    +74                            for other_time_series in others_time_series:
    +75                                merged_time_series = merged_time_series.merge(other_time_series)
    +76                            merged_list_attributes.append(merged_time_series)
    +77                    elif isinstance(value[0], BaseModel):
    +78                        merged_list_attributes = [
    +79                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +80                        ]
    +81
    +82                    merged_object.__setattr__(key, merged_list_attributes)
    +83
    +84        return merged_object
    +
    + + +
    +
    + +
    + + class + TabularTimeSeries(typing.Protocol): + + + +
    + +
    12class TabularTimeSeries(Protocol):
    +13    def copy(self, deep: bool = False) -> Self:
    +14        """
    +15        Duplicate a model
    +16        Args:
    +17            deep: set to `True` to make a deep copy of the model
    +18
    +19        Returns: new model instance
    +20
    +21        """
    +22        ...
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + TabularTimeSeries(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    + +
    + + def + copy(self, deep: bool = False) -> typing_extensions.Self: + + + +
    + +
    13    def copy(self, deep: bool = False) -> Self:
    +14        """
    +15        Duplicate a model
    +16        Args:
    +17            deep: set to `True` to make a deep copy of the model
    +18
    +19        Returns: new model instance
    +20
    +21        """
    +22        ...
    +
    + + +

    Duplicate a model +Args: + deep: set to True to make a deep copy of the model

    + +

    Returns: new model instance

    +
    + + +
    +
    +
    + +
    + + class + TabularTimeSeriesUtils: + + + +
    + +
    28class TabularTimeSeriesUtils:
    +29    """
    +30    Utility functions for objects containing TimeSeries
    +31    """
    +32
    +33    @classmethod
    +34    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +35        """
    +36        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +37        Args:
    +38            *objects_with_time_series: list of objects to merge
    +39
    +40        Returns: a merged object of the same type
    +41
    +42        """
    +43        # Verify that we are merging the same types
    +44        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +45            raise ValueError("Can not merge objects of differing types.")
    +46
    +47        first, *others = objects_with_time_series
    +48        merged_object = first.copy(deep=True)
    +49
    +50        for key, value in first.__dict__.items():
    +51            for other in others:
    +52                accumulated_value = merged_object.__getattribute__(key)
    +53                other_value = other.__getattribute__(key)
    +54                if key == "timesteps":
    +55                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +56                    merged_object.__setattr__(key, merged_timesteps)
    +57                elif isinstance(value, TimeSeries):
    +58                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +59                elif isinstance(value, BaseModel):
    +60                    merged_object.__setattr__(
    +61                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +62                    )
    +63                elif (
    +64                    isinstance(value, list)
    +65                    and len(value) > 0
    +66                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +67                ):
    +68                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +69                    transposed_list_attributes = transpose(list_attributes)
    +70                    merged_list_attributes = []
    +71                    if isinstance(value[0], TimeSeries):
    +72                        for time_series_to_merge in transposed_list_attributes:
    +73                            first_time_series, *others_time_series = time_series_to_merge
    +74                            merged_time_series = first_time_series
    +75                            for other_time_series in others_time_series:
    +76                                merged_time_series = merged_time_series.merge(other_time_series)
    +77                            merged_list_attributes.append(merged_time_series)
    +78                    elif isinstance(value[0], BaseModel):
    +79                        merged_list_attributes = [
    +80                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +81                        ]
    +82
    +83                    merged_object.__setattr__(key, merged_list_attributes)
    +84
    +85        return merged_object
    +
    + + +

    Utility functions for objects containing TimeSeries

    +
    + + +
    + +
    +
    @classmethod
    + + def + merge(cls, *objects_with_time_series: ~ObjectWithTimeSeries): + + + +
    + +
    33    @classmethod
    +34    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +35        """
    +36        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +37        Args:
    +38            *objects_with_time_series: list of objects to merge
    +39
    +40        Returns: a merged object of the same type
    +41
    +42        """
    +43        # Verify that we are merging the same types
    +44        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +45            raise ValueError("Can not merge objects of differing types.")
    +46
    +47        first, *others = objects_with_time_series
    +48        merged_object = first.copy(deep=True)
    +49
    +50        for key, value in first.__dict__.items():
    +51            for other in others:
    +52                accumulated_value = merged_object.__getattribute__(key)
    +53                other_value = other.__getattribute__(key)
    +54                if key == "timesteps":
    +55                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +56                    merged_object.__setattr__(key, merged_timesteps)
    +57                elif isinstance(value, TimeSeries):
    +58                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +59                elif isinstance(value, BaseModel):
    +60                    merged_object.__setattr__(
    +61                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +62                    )
    +63                elif (
    +64                    isinstance(value, list)
    +65                    and len(value) > 0
    +66                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +67                ):
    +68                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +69                    transposed_list_attributes = transpose(list_attributes)
    +70                    merged_list_attributes = []
    +71                    if isinstance(value[0], TimeSeries):
    +72                        for time_series_to_merge in transposed_list_attributes:
    +73                            first_time_series, *others_time_series = time_series_to_merge
    +74                            merged_time_series = first_time_series
    +75                            for other_time_series in others_time_series:
    +76                                merged_time_series = merged_time_series.merge(other_time_series)
    +77                            merged_list_attributes.append(merged_time_series)
    +78                    elif isinstance(value[0], BaseModel):
    +79                        merged_list_attributes = [
    +80                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +81                        ]
    +82
    +83                    merged_object.__setattr__(key, merged_list_attributes)
    +84
    +85        return merged_object
    +
    + + +

    Merge objects containing TimeSeries. Other attributes will be copied from the first object. +Args: + *objects_with_time_series: list of objects to merge

    + +

    Returns: a merged object of the same type

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/temporal_model.html b/docs/about/references/api/libecalc/common/temporal_model.html new file mode 100644 index 0000000000..5f01537ca1 --- /dev/null +++ b/docs/about/references/api/libecalc/common/temporal_model.html @@ -0,0 +1,559 @@ + + + + + + + libecalc.common.temporal_model API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.temporal_model

    + + + + + + +
     1from dataclasses import dataclass
    + 2from datetime import datetime
    + 3from typing import Dict, Generic, Iterator, List, Tuple, TypeVar
    + 4
    + 5from libecalc.common.time_utils import Period
    + 6from libecalc.dto.variables import VariablesMap
    + 7from libecalc.expression import Expression
    + 8
    + 9ModelType = TypeVar("ModelType")
    +10
    +11
    +12@dataclass
    +13class Model(Generic[ModelType]):
    +14    period: Period
    +15    model: ModelType
    +16
    +17
    +18class TemporalModel(Generic[ModelType]):
    +19    def __init__(self, data: Dict[datetime, ModelType]):
    +20        self._data = data
    +21        start_times = list(data.keys())
    +22        end_times = [*start_times[1:], datetime.max]
    +23        self.models = [
    +24            Model(
    +25                period=Period(start=start_time, end=end_time),
    +26                model=model,
    +27            )
    +28            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +29        ]
    +30
    +31    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +32        return ((model.period, model.model) for model in self.models)
    +33
    +34    def get_model(self, timestep: datetime) -> ModelType:
    +35        for model in self.models:
    +36            if timestep in model.period:
    +37                return model.model
    +38
    +39        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +40
    +41
    +42class TemporalExpression:
    +43    @staticmethod
    +44    def evaluate(
    +45        temporal_expression: TemporalModel[Expression],
    +46        variables_map: VariablesMap,
    +47    ) -> List[float]:
    +48        result = variables_map.zeros()
    +49        for period, expression in temporal_expression.items():
    +50            if Period.intersects(period, variables_map.period):
    +51                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +52                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +53                evaluated_expression = expression.evaluate(
    +54                    variables=variables_map_for_this_period.variables,
    +55                    fill_length=len(variables_map_for_this_period.time_vector),
    +56                )
    +57                result[start_index:end_index] = evaluated_expression
    +58        return result
    +
    + + +
    +
    + +
    + + class + Model(typing.Generic[~ModelType]): + + + +
    + +
    14class Model(Generic[ModelType]):
    +15    period: Period
    +16    model: ModelType
    +
    + + + + +
    +
    + + Model(period: libecalc.common.time_utils.Period, model: ~ModelType) + + +
    + + + + +
    +
    +
    + +
    + + class + TemporalModel(typing.Generic[~ModelType]): + + + +
    + +
    19class TemporalModel(Generic[ModelType]):
    +20    def __init__(self, data: Dict[datetime, ModelType]):
    +21        self._data = data
    +22        start_times = list(data.keys())
    +23        end_times = [*start_times[1:], datetime.max]
    +24        self.models = [
    +25            Model(
    +26                period=Period(start=start_time, end=end_time),
    +27                model=model,
    +28            )
    +29            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +30        ]
    +31
    +32    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +33        return ((model.period, model.model) for model in self.models)
    +34
    +35    def get_model(self, timestep: datetime) -> ModelType:
    +36        for model in self.models:
    +37            if timestep in model.period:
    +38                return model.model
    +39
    +40        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + TemporalModel(data: Dict[datetime.datetime, ~ModelType]) + + + +
    + +
    20    def __init__(self, data: Dict[datetime, ModelType]):
    +21        self._data = data
    +22        start_times = list(data.keys())
    +23        end_times = [*start_times[1:], datetime.max]
    +24        self.models = [
    +25            Model(
    +26                period=Period(start=start_time, end=end_time),
    +27                model=model,
    +28            )
    +29            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +30        ]
    +
    + + + + +
    +
    + +
    + + def + items(self) -> Iterator[Tuple[libecalc.common.time_utils.Period, ~ModelType]]: + + + +
    + +
    32    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +33        return ((model.period, model.model) for model in self.models)
    +
    + + + + +
    +
    + +
    + + def + get_model(self, timestep: datetime.datetime) -> ~ModelType: + + + +
    + +
    35    def get_model(self, timestep: datetime) -> ModelType:
    +36        for model in self.models:
    +37            if timestep in model.period:
    +38                return model.model
    +39
    +40        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +
    + + + + +
    +
    +
    + +
    + + class + TemporalExpression: + + + +
    + +
    43class TemporalExpression:
    +44    @staticmethod
    +45    def evaluate(
    +46        temporal_expression: TemporalModel[Expression],
    +47        variables_map: VariablesMap,
    +48    ) -> List[float]:
    +49        result = variables_map.zeros()
    +50        for period, expression in temporal_expression.items():
    +51            if Period.intersects(period, variables_map.period):
    +52                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +53                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +54                evaluated_expression = expression.evaluate(
    +55                    variables=variables_map_for_this_period.variables,
    +56                    fill_length=len(variables_map_for_this_period.time_vector),
    +57                )
    +58                result[start_index:end_index] = evaluated_expression
    +59        return result
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + evaluate( temporal_expression: libecalc.common.temporal_model.TemporalModel[libecalc.expression.expression.Expression], variables_map: libecalc.dto.variables.VariablesMap) -> List[float]: + + + +
    + +
    44    @staticmethod
    +45    def evaluate(
    +46        temporal_expression: TemporalModel[Expression],
    +47        variables_map: VariablesMap,
    +48    ) -> List[float]:
    +49        result = variables_map.zeros()
    +50        for period, expression in temporal_expression.items():
    +51            if Period.intersects(period, variables_map.period):
    +52                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +53                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +54                evaluated_expression = expression.evaluate(
    +55                    variables=variables_map_for_this_period.variables,
    +56                    fill_length=len(variables_map_for_this_period.time_vector),
    +57                )
    +58                result[start_index:end_index] = evaluated_expression
    +59        return result
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/time_utils.html b/docs/about/references/api/libecalc/common/time_utils.html new file mode 100644 index 0000000000..81e3f14fae --- /dev/null +++ b/docs/about/references/api/libecalc/common/time_utils.html @@ -0,0 +1,1306 @@ + + + + + + + libecalc.common.time_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.time_utils

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3import enum
    +  4from dataclasses import dataclass
    +  5from datetime import date, datetime
    +  6from typing import Any, Dict, List, Optional, Tuple, Union
    +  7
    +  8import numpy as np
    +  9import pandas as pd
    + 10from numpy.typing import ArrayLike, NDArray
    + 11
    + 12from libecalc.common.errors.exceptions import ProgrammingError
    + 13from libecalc.common.units import UnitConstants
    + 14
    + 15
    + 16def calculate_delta_days(time_vector: ArrayLike) -> NDArray[np.float64]:
    + 17    return np.array([x.total_seconds() / UnitConstants.SECONDS_IN_A_DAY for x in np.diff(time_vector)])
    + 18
    + 19
    + 20@dataclass
    + 21class Period:
    + 22    start: datetime = datetime.min
    + 23    end: datetime = datetime.max
    + 24
    + 25    def __str__(self) -> str:
    + 26        return f"{self.start}:{self.end}"
    + 27
    + 28    def __contains__(self, time: datetime) -> bool:
    + 29        """
    + 30        A period of time is defined as [start, end>,
    + 31        ie inclusive start and exclusive end.
    + 32
    + 33        Args:
    + 34            time:
    + 35
    + 36        Returns:
    + 37
    + 38        """
    + 39        return self.start <= time < self.end
    + 40
    + 41    @staticmethod
    + 42    def intersects(first: Period, second: Period) -> bool:
    + 43        """
    + 44        Args:
    + 45            first:
    + 46            second:
    + 47
    + 48        Returns:
    + 49
    + 50        """
    + 51        return first.start in second or second.start in first
    + 52
    + 53    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    + 54        try:
    + 55            start_index = timesteps.index(max(self.start, timesteps[0]))
    + 56            if self.end > timesteps[-1]:
    + 57                end_index = len(timesteps) + 1
    + 58            else:
    + 59                end_index = timesteps.index(self.end)
    + 60
    + 61            return start_index, end_index
    + 62        except (IndexError, ValueError) as e:
    + 63            raise ProgrammingError(
    + 64                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    + 65                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    + 66            ) from e
    + 67
    + 68
    + 69@dataclass
    + 70class Periods:
    + 71    periods: List[Period]
    + 72
    + 73    @classmethod
    + 74    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 75        """
    + 76        Create periods from the provided datetimes
    + 77        :param times: the datetimes to create periods from
    + 78        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 79        before the earliest provided datetime.
    + 80        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 81        after the latest provided datetime.
    + 82        :return:
    + 83        """
    + 84        if len(times) == 0:
    + 85            return cls([])
    + 86
    + 87        periods = []
    + 88
    + 89        if include_before:
    + 90            periods.append(
    + 91                Period(
    + 92                    end=times[0],
    + 93                )
    + 94            )
    + 95
    + 96        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    + 97
    + 98        if include_after:
    + 99            periods.append(Period(start=times[-1]))
    +100
    +101        return cls(periods)
    +102
    +103    def __iter__(self):
    +104        return self.periods.__iter__()
    +105
    +106    def get_period(self, time: datetime) -> Period:
    +107        for period in self.periods:
    +108            if time in period:
    +109                return period
    +110
    +111        raise ValueError(f"Period for date '{time}' not found in periods")
    +112
    +113
    +114def define_time_model_for_period(
    +115    time_model_data: Optional[Any], target_period: Period
    +116) -> Optional[Dict[datetime, Any]]:
    +117    """Process time model based on the target period.
    +118
    +119    Steps:
    +120        - Add a default start date if the model is not already a time model
    +121        - Filter definitions outside given time period
    +122        - Adjust start_date of the first model to the period
    +123    :param time_model_data: a model that can vary based on time,
    +124        i.e. {1900.01.01: some model, 1950.01.01: some other model}
    +125    :param target_period: period for which a model is defined (START,END specified by user or default to everything)
    +126    :return: the time model for the target period
    +127    """
    +128    if time_model_data is None:
    +129        return None
    +130
    +131    # Make sure the model is a time model
    +132    time_model_data = default_temporal_model(time_model_data, default_start=target_period.start)
    +133
    +134    model_periods = Periods.create_periods(list(time_model_data.keys()), include_before=False)
    +135
    +136    return {
    +137        max(model_period.start, target_period.start): model
    +138        for model_period, model in zip(model_periods.periods, time_model_data.values())
    +139        if Period.intersects(model_period, target_period)
    +140    }
    +141
    +142
    +143class Frequency(str, enum.Enum):
    +144    """Represents frequency/resolution of output data
    +145    Using the offset aliases from pandas
    +146    YS: year start
    +147    MS: month start
    +148    D: calendar day.
    +149    """
    +150
    +151    NONE = None
    +152    YEAR = "YS"
    +153    MONTH = "MS"
    +154    DAY = "D"
    +155
    +156    def formatstring(self) -> str:
    +157        """The format to write a string describing a certain period of time."""
    +158        if self.value == "YS":
    +159            return "%Y"
    +160        elif self.value == "MS":
    +161            return "%m/%Y"
    +162        else:
    +163            return "%d/%m/%Y"
    +164
    +165
    +166def resample_time_steps(
    +167    time_steps: List[datetime],
    +168    frequency: Frequency,
    +169    remove_last: bool = False,
    +170) -> List[datetime]:
    +171    """Makes a time vector, based on the first and last date in time_vector and the frequency.
    +172
    +173    :param time_steps: The original time vector
    +174    :type time_steps: List[datetime]
    +175    :param frequency: The reporting frequency
    +176    :type frequency: Frequency
    +177    :param remove_last: Decides whether the final date should be returned
    +178    :type remove_last: bool
    +179    :return: Time vector with dates according to frequency, start and end date
    +180    "rtype: List[datetime]
    +181    """
    +182    if frequency is not Frequency.NONE:
    +183        time_step_vector = create_time_steps(start=time_steps[0], end=time_steps[-1], frequency=frequency)
    +184    else:
    +185        time_step_vector = time_steps
    +186
    +187    return time_step_vector[:-1] if remove_last else time_step_vector
    +188
    +189
    +190def create_time_steps(frequency: Frequency, start: datetime, end: datetime) -> List[datetime]:
    +191    time_steps = pd.date_range(start=start, end=end, freq=frequency.value)
    +192    return sorted({clear_time(start), *[clear_time(time_step) for time_step in time_steps], clear_time(end)})
    +193
    +194
    +195def clear_time(d: datetime) -> datetime:
    +196    return datetime.combine(d.date(), datetime.min.time())
    +197
    +198
    +199def is_temporal_model(data: Dict) -> bool:
    +200    if isinstance(data, dict):
    +201        is_date = []
    +202        for key in data:
    +203            if isinstance(key, date):
    +204                is_date.append(True)
    +205            else:
    +206                try:
    +207                    datetime.strptime(key, "%Y-%m-%dT%H:%M:%S")
    +208                    is_date.append(True)
    +209                except (TypeError, ValueError):
    +210                    is_date.append(False)
    +211        if any(is_date):
    +212            if not all(is_date):
    +213                raise ValueError("Time dependent should only contain date keys")
    +214            return True
    +215    return False
    +216
    +217
    +218def convert_date_to_datetime(d: Union[date, datetime]) -> datetime:
    +219    if isinstance(d, datetime):
    +220        return d
    +221    return datetime(d.year, d.month, d.day, 0, 0, 0)
    +222
    +223
    +224def default_temporal_model(data: Any, default_start: datetime) -> Optional[Dict[datetime, Any]]:
    +225    """Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00
    +226    :param default_start: the start time to use as default
    +227    :param data:
    +228    :return:
    +229    """
    +230    if data is None:
    +231        return None
    +232    elif is_temporal_model(data):
    +233        # Already a date-dict
    +234        return {convert_date_to_datetime(_date): value for _date, value in data.items()}
    +235    else:
    +236        # Set default start
    +237        return {
    +238            default_start: data,
    +239        }
    +
    + + +
    +
    + +
    + + def + calculate_delta_days( time_vector: Union[numpy.__array_like._SupportsArray[numpy.dtype], numpy.__nested_sequence._NestedSequence[numpy.__array_like._SupportsArray[numpy.dtype]], bool, int, float, complex, str, bytes, numpy.__nested_sequence._NestedSequence[Union[bool, int, float, complex, str, bytes]]]) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    17def calculate_delta_days(time_vector: ArrayLike) -> NDArray[np.float64]:
    +18    return np.array([x.total_seconds() / UnitConstants.SECONDS_IN_A_DAY for x in np.diff(time_vector)])
    +
    + + + + +
    +
    + +
    + + class + Period: + + + +
    + +
    22class Period:
    +23    start: datetime = datetime.min
    +24    end: datetime = datetime.max
    +25
    +26    def __str__(self) -> str:
    +27        return f"{self.start}:{self.end}"
    +28
    +29    def __contains__(self, time: datetime) -> bool:
    +30        """
    +31        A period of time is defined as [start, end>,
    +32        ie inclusive start and exclusive end.
    +33
    +34        Args:
    +35            time:
    +36
    +37        Returns:
    +38
    +39        """
    +40        return self.start <= time < self.end
    +41
    +42    @staticmethod
    +43    def intersects(first: Period, second: Period) -> bool:
    +44        """
    +45        Args:
    +46            first:
    +47            second:
    +48
    +49        Returns:
    +50
    +51        """
    +52        return first.start in second or second.start in first
    +53
    +54    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    +55        try:
    +56            start_index = timesteps.index(max(self.start, timesteps[0]))
    +57            if self.end > timesteps[-1]:
    +58                end_index = len(timesteps) + 1
    +59            else:
    +60                end_index = timesteps.index(self.end)
    +61
    +62            return start_index, end_index
    +63        except (IndexError, ValueError) as e:
    +64            raise ProgrammingError(
    +65                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    +66                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    +67            ) from e
    +
    + + + + +
    +
    + + Period( start: datetime.datetime = datetime.datetime(1, 1, 1, 0, 0), end: datetime.datetime = datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)) + + +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + intersects( first: libecalc.common.time_utils.Period, second: libecalc.common.time_utils.Period) -> bool: + + + +
    + +
    42    @staticmethod
    +43    def intersects(first: Period, second: Period) -> bool:
    +44        """
    +45        Args:
    +46            first:
    +47            second:
    +48
    +49        Returns:
    +50
    +51        """
    +52        return first.start in second or second.start in first
    +
    + + +

    Args: + first: + second:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_timestep_indices(self, timesteps: List[datetime.datetime]) -> Tuple[int, int]: + + + +
    + +
    54    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    +55        try:
    +56            start_index = timesteps.index(max(self.start, timesteps[0]))
    +57            if self.end > timesteps[-1]:
    +58                end_index = len(timesteps) + 1
    +59            else:
    +60                end_index = timesteps.index(self.end)
    +61
    +62            return start_index, end_index
    +63        except (IndexError, ValueError) as e:
    +64            raise ProgrammingError(
    +65                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    +66                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    +67            ) from e
    +
    + + + + +
    +
    +
    + +
    + + class + Periods: + + + +
    + +
     71class Periods:
    + 72    periods: List[Period]
    + 73
    + 74    @classmethod
    + 75    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 76        """
    + 77        Create periods from the provided datetimes
    + 78        :param times: the datetimes to create periods from
    + 79        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 80        before the earliest provided datetime.
    + 81        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 82        after the latest provided datetime.
    + 83        :return:
    + 84        """
    + 85        if len(times) == 0:
    + 86            return cls([])
    + 87
    + 88        periods = []
    + 89
    + 90        if include_before:
    + 91            periods.append(
    + 92                Period(
    + 93                    end=times[0],
    + 94                )
    + 95            )
    + 96
    + 97        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    + 98
    + 99        if include_after:
    +100            periods.append(Period(start=times[-1]))
    +101
    +102        return cls(periods)
    +103
    +104    def __iter__(self):
    +105        return self.periods.__iter__()
    +106
    +107    def get_period(self, time: datetime) -> Period:
    +108        for period in self.periods:
    +109            if time in period:
    +110                return period
    +111
    +112        raise ValueError(f"Period for date '{time}' not found in periods")
    +
    + + + + +
    +
    + + Periods(periods: List[libecalc.common.time_utils.Period]) + + +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + create_periods( cls, times: List[datetime.datetime], include_before: bool = True, include_after: bool = True) -> libecalc.common.time_utils.Periods: + + + +
    + +
     74    @classmethod
    + 75    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 76        """
    + 77        Create periods from the provided datetimes
    + 78        :param times: the datetimes to create periods from
    + 79        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 80        before the earliest provided datetime.
    + 81        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 82        after the latest provided datetime.
    + 83        :return:
    + 84        """
    + 85        if len(times) == 0:
    + 86            return cls([])
    + 87
    + 88        periods = []
    + 89
    + 90        if include_before:
    + 91            periods.append(
    + 92                Period(
    + 93                    end=times[0],
    + 94                )
    + 95            )
    + 96
    + 97        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    + 98
    + 99        if include_after:
    +100            periods.append(Period(start=times[-1]))
    +101
    +102        return cls(periods)
    +
    + + +

    Create periods from the provided datetimes

    + +
    Parameters
    + +
      +
    • times: the datetimes to create periods from
    • +
    • include_before: whether to add a period that ends with the first provided datetime, i.e. define a period +before the earliest provided datetime.
    • +
    • include_after: whether to add a period that starts with the last provided datetime, i.e. define a period +after the latest provided datetime.
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + get_period(self, time: datetime.datetime) -> libecalc.common.time_utils.Period: + + + +
    + +
    107    def get_period(self, time: datetime) -> Period:
    +108        for period in self.periods:
    +109            if time in period:
    +110                return period
    +111
    +112        raise ValueError(f"Period for date '{time}' not found in periods")
    +
    + + + + +
    +
    +
    + +
    + + def + define_time_model_for_period( time_model_data: Union[Any, NoneType], target_period: libecalc.common.time_utils.Period) -> Union[Dict[datetime.datetime, Any], NoneType]: + + + +
    + +
    115def define_time_model_for_period(
    +116    time_model_data: Optional[Any], target_period: Period
    +117) -> Optional[Dict[datetime, Any]]:
    +118    """Process time model based on the target period.
    +119
    +120    Steps:
    +121        - Add a default start date if the model is not already a time model
    +122        - Filter definitions outside given time period
    +123        - Adjust start_date of the first model to the period
    +124    :param time_model_data: a model that can vary based on time,
    +125        i.e. {1900.01.01: some model, 1950.01.01: some other model}
    +126    :param target_period: period for which a model is defined (START,END specified by user or default to everything)
    +127    :return: the time model for the target period
    +128    """
    +129    if time_model_data is None:
    +130        return None
    +131
    +132    # Make sure the model is a time model
    +133    time_model_data = default_temporal_model(time_model_data, default_start=target_period.start)
    +134
    +135    model_periods = Periods.create_periods(list(time_model_data.keys()), include_before=False)
    +136
    +137    return {
    +138        max(model_period.start, target_period.start): model
    +139        for model_period, model in zip(model_periods.periods, time_model_data.values())
    +140        if Period.intersects(model_period, target_period)
    +141    }
    +
    + + +

    Process time model based on the target period.

    + +

    Steps: + - Add a default start date if the model is not already a time model + - Filter definitions outside given time period + - Adjust start_date of the first model to the period

    + +
    Parameters
    + +
      +
    • time_model_data: a model that can vary based on time, +i.e. {1900.01.01: some model, 1950.01.01: some other model}
    • +
    • target_period: period for which a model is defined (START,END specified by user or default to everything)
    • +
    + +
    Returns
    + +
    +

    the time model for the target period

    +
    +
    + + +
    +
    + +
    + + class + Frequency(builtins.str, enum.Enum): + + + +
    + +
    144class Frequency(str, enum.Enum):
    +145    """Represents frequency/resolution of output data
    +146    Using the offset aliases from pandas
    +147    YS: year start
    +148    MS: month start
    +149    D: calendar day.
    +150    """
    +151
    +152    NONE = None
    +153    YEAR = "YS"
    +154    MONTH = "MS"
    +155    DAY = "D"
    +156
    +157    def formatstring(self) -> str:
    +158        """The format to write a string describing a certain period of time."""
    +159        if self.value == "YS":
    +160            return "%Y"
    +161        elif self.value == "MS":
    +162            return "%m/%Y"
    +163        else:
    +164            return "%d/%m/%Y"
    +
    + + +

    Represents frequency/resolution of output data +Using the offset aliases from pandas +YS: year start +MS: month start +D: calendar day.

    +
    + + +
    +
    + NONE = +<Frequency.NONE: 'None'> + + +
    + + + + +
    +
    +
    + YEAR = +<Frequency.YEAR: 'YS'> + + +
    + + + + +
    +
    +
    + MONTH = +<Frequency.MONTH: 'MS'> + + +
    + + + + +
    +
    +
    + DAY = +<Frequency.DAY: 'D'> + + +
    + + + + +
    +
    + +
    + + def + formatstring(self) -> str: + + + +
    + +
    157    def formatstring(self) -> str:
    +158        """The format to write a string describing a certain period of time."""
    +159        if self.value == "YS":
    +160            return "%Y"
    +161        elif self.value == "MS":
    +162            return "%m/%Y"
    +163        else:
    +164            return "%d/%m/%Y"
    +
    + + +

    The format to write a string describing a certain period of time.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + def + resample_time_steps( time_steps: List[datetime.datetime], frequency: libecalc.common.time_utils.Frequency, remove_last: bool = False) -> List[datetime.datetime]: + + + +
    + +
    167def resample_time_steps(
    +168    time_steps: List[datetime],
    +169    frequency: Frequency,
    +170    remove_last: bool = False,
    +171) -> List[datetime]:
    +172    """Makes a time vector, based on the first and last date in time_vector and the frequency.
    +173
    +174    :param time_steps: The original time vector
    +175    :type time_steps: List[datetime]
    +176    :param frequency: The reporting frequency
    +177    :type frequency: Frequency
    +178    :param remove_last: Decides whether the final date should be returned
    +179    :type remove_last: bool
    +180    :return: Time vector with dates according to frequency, start and end date
    +181    "rtype: List[datetime]
    +182    """
    +183    if frequency is not Frequency.NONE:
    +184        time_step_vector = create_time_steps(start=time_steps[0], end=time_steps[-1], frequency=frequency)
    +185    else:
    +186        time_step_vector = time_steps
    +187
    +188    return time_step_vector[:-1] if remove_last else time_step_vector
    +
    + + +

    Makes a time vector, based on the first and last date in time_vector and the frequency.

    + +
    Parameters
    + +
      +
    • time_steps: The original time vector
    • +
    • frequency: The reporting frequency
    • +
    • remove_last: Decides whether the final date should be returned
    • +
    + +
    Returns
    + +
    +

    Time vector with dates according to frequency, start and end date + "rtype: List[datetime]

    +
    +
    + + +
    +
    + +
    + + def + create_time_steps( frequency: libecalc.common.time_utils.Frequency, start: datetime.datetime, end: datetime.datetime) -> List[datetime.datetime]: + + + +
    + +
    191def create_time_steps(frequency: Frequency, start: datetime, end: datetime) -> List[datetime]:
    +192    time_steps = pd.date_range(start=start, end=end, freq=frequency.value)
    +193    return sorted({clear_time(start), *[clear_time(time_step) for time_step in time_steps], clear_time(end)})
    +
    + + + + +
    +
    + +
    + + def + clear_time(d: datetime.datetime) -> datetime.datetime: + + + +
    + +
    196def clear_time(d: datetime) -> datetime:
    +197    return datetime.combine(d.date(), datetime.min.time())
    +
    + + + + +
    +
    + +
    + + def + is_temporal_model(data: Dict) -> bool: + + + +
    + +
    200def is_temporal_model(data: Dict) -> bool:
    +201    if isinstance(data, dict):
    +202        is_date = []
    +203        for key in data:
    +204            if isinstance(key, date):
    +205                is_date.append(True)
    +206            else:
    +207                try:
    +208                    datetime.strptime(key, "%Y-%m-%dT%H:%M:%S")
    +209                    is_date.append(True)
    +210                except (TypeError, ValueError):
    +211                    is_date.append(False)
    +212        if any(is_date):
    +213            if not all(is_date):
    +214                raise ValueError("Time dependent should only contain date keys")
    +215            return True
    +216    return False
    +
    + + + + +
    +
    + +
    + + def + convert_date_to_datetime(d: Union[datetime.date, datetime.datetime]) -> datetime.datetime: + + + +
    + +
    219def convert_date_to_datetime(d: Union[date, datetime]) -> datetime:
    +220    if isinstance(d, datetime):
    +221        return d
    +222    return datetime(d.year, d.month, d.day, 0, 0, 0)
    +
    + + + + +
    +
    + +
    + + def + default_temporal_model( data: Any, default_start: datetime.datetime) -> Union[Dict[datetime.datetime, Any], NoneType]: + + + +
    + +
    225def default_temporal_model(data: Any, default_start: datetime) -> Optional[Dict[datetime, Any]]:
    +226    """Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00
    +227    :param default_start: the start time to use as default
    +228    :param data:
    +229    :return:
    +230    """
    +231    if data is None:
    +232        return None
    +233    elif is_temporal_model(data):
    +234        # Already a date-dict
    +235        return {convert_date_to_datetime(_date): value for _date, value in data.items()}
    +236    else:
    +237        # Set default start
    +238        return {
    +239            default_start: data,
    +240        }
    +
    + + +

    Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00

    + +
    Parameters
    + +
      +
    • default_start: the start time to use as default
    • +
    • data:
    • +
    + +
    Returns
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/units.html b/docs/about/references/api/libecalc/common/units.html new file mode 100644 index 0000000000..32de29d49e --- /dev/null +++ b/docs/about/references/api/libecalc/common/units.html @@ -0,0 +1,1405 @@ + + + + + + + libecalc.common.units API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.units

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from collections import defaultdict
    +  4from enum import Enum
    +  5from functools import singledispatch
    +  6from typing import Callable, Dict, TypeVar, Union
    +  7
    +  8import numpy as np
    +  9from numpy.typing import NDArray
    + 10from pydantic.validators import enum_validator
    + 11
    + 12from libecalc.common.logger import logger
    + 13
    + 14TInput = TypeVar("TInput", bound=Union[int, float, NDArray[np.float64], list])
    + 15
    + 16
    + 17def _type_handler(unit_func: Callable[[TInput], TInput]) -> Callable[[TInput], TInput]:
    + 18    # TODO: Document this function
    + 19    @singledispatch
    + 20    def func(i: TInput) -> Callable[[TInput], TInput]:
    + 21        return unit_func(i)
    + 22
    + 23    @func.register  # type: ignore
    + 24    def _(i: list) -> TInput:
    + 25        return list(unit_func(np.asarray(i, dtype=(type(i)))))  # type: ignore
    + 26
    + 27    return func
    + 28
    + 29
    + 30class UnitConstants:
    + 31    TO_KILO = 1e-3
    + 32    STANDARD_PRESSURE_BARA = 1.01325
    + 33    STANDARD_TEMPERATURE_KELVIN = 288.15
    + 34    STANDARD_TEMPERATURE_CELSIUS = 15.0
    + 35    CELSIUS_TO_KELVIN = 273.15
    + 36    HOURS_PER_DAY = 24.0
    + 37    EARTH_GRAVITY = 9.81
    + 38    GAS_CONSTANT = 8.314472  # m3 * Pa / (K * mol) - SI units
    + 39    WATT_TO_MEGAWATT = 1e-6
    + 40    SECONDS_PER_HOUR = 3600.0
    + 41    SECONDS_IN_A_DAY = 86400.0
    + 42    WATT_PER_MEGAWATT = 1e6
    + 43
    + 44
    + 45class Unit(str, Enum):
    + 46    """A very simple unit registry to convert between common eCalc units."""
    + 47
    + 48    NONE = "N/A"
    + 49    KG_BOE = "kg/BOE"
    + 50    KG_SM3 = "kg/Sm3"
    + 51    KG_M3 = "kg/m3"
    + 52    STANDARD_CUBIC_METER = "Sm3"
    + 53    BOE = "BOE"
    + 54
    + 55    TONS_PER_DAY = "t/d"
    + 56    TONS = "t"
    + 57
    + 58    KILO_PER_DAY = "kg/d"
    + 59    KILO_PER_HOUR = "kg/h"
    + 60    KILO = "kg"
    + 61
    + 62    LITRES_PER_DAY = "L/d"
    + 63    LITRES = "L"
    + 64
    + 65    MEGA_WATT_DAYS = "MWd"
    + 66    GIGA_WATT_HOURS = "GWh"
    + 67    MEGA_WATT = "MW"
    + 68
    + 69    YEAR = "Y"
    + 70    BARA = "bara"
    + 71    KILO_PASCAL = "kPa"
    + 72    PASCAL = "Pa"
    + 73
    + 74    CELSIUS = "C"
    + 75    KELVIN = "K"
    + 76
    + 77    FRACTION = "frac"
    + 78    PERCENTAGE = "%"
    + 79
    + 80    POLYTROPIC_HEAD_KILO_JOULE_PER_KG = "kJ/kg"
    + 81    POLYTROPIC_HEAD_JOULE_PER_KG = "J/kg"
    + 82    POLYTROPIC_HEAD_METER_LIQUID_COLUMN = "N.m/kg"
    + 83
    + 84    ACTUAL_VOLUMETRIC_M3_PER_HOUR = "Am3/h"
    + 85    STANDARD_CUBIC_METER_PER_DAY = "Sm3/d"
    + 86
    + 87    NORWEGIAN_KRONER_PER_DAY = "NOK/d"
    + 88    NORWEGIAN_KRONER = "NOK"
    + 89
    + 90    SPEED_RPM = "RPM"
    + 91
    + 92    def __str__(self) -> str:
    + 93        return self.value
    + 94
    + 95    @classmethod
    + 96    def validator(cls, unit: Union[str, Unit]) -> Unit:
    + 97        if isinstance(unit, str):
    + 98            return Unit(unit)
    + 99        return unit
    +100
    +101    @classmethod
    +102    def __get_validators__(cls):
    +103        # convert list to tuple before using default enum validator. Fixes problem with this unit being read as
    +104        # list from json
    +105        yield cls.validator
    +106        yield enum_validator
    +107
    +108    @staticmethod
    +109    def _unit_registry() -> Dict[Unit, Dict[Unit, Callable]]:
    +110        unit_registry: Dict[Unit, Dict[Unit, Callable]] = defaultdict(dict)
    +111
    +112        unit_registry[Unit.TONS_PER_DAY][Unit.KILO_PER_DAY] = lambda a: a * 1000
    +113        unit_registry[Unit.KILO_PER_DAY][Unit.TONS_PER_DAY] = lambda a: a / 1000
    +114
    +115        unit_registry[Unit.KILO][Unit.TONS] = lambda a: a / 1000
    +116        unit_registry[Unit.TONS][Unit.KILO] = lambda a: a * 1000
    +117
    +118        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.LITRES] = lambda a: a * 1000
    +119        unit_registry[Unit.LITRES][Unit.STANDARD_CUBIC_METER] = lambda a: a / 1000
    +120
    +121        # Temperature
    +122        unit_registry[Unit.CELSIUS][Unit.KELVIN] = lambda a: a + 273.15
    +123        unit_registry[Unit.KELVIN][Unit.CELSIUS] = lambda a: a - 273.15
    +124
    +125        # Pressure
    +126        unit_registry[Unit.BARA][Unit.KILO_PASCAL] = lambda a: a * 100
    +127        unit_registry[Unit.KILO_PASCAL][Unit.BARA] = lambda a: a / 100
    +128        unit_registry[Unit.BARA][Unit.PASCAL] = lambda a: a * 1e5
    +129        unit_registry[Unit.PASCAL][Unit.BARA] = lambda a: a / 1e5
    +130
    +131        # User for compressor charts.
    +132        unit_registry[Unit.PERCENTAGE][Unit.FRACTION] = lambda a: a / 100
    +133        unit_registry[Unit.FRACTION][Unit.PERCENTAGE] = lambda a: a * 100
    +134        unit_registry[Unit.FRACTION][Unit.FRACTION] = lambda a: a
    +135
    +136        # Compressor chart polytropic head
    +137        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = lambda a: a / 1000
    +138        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = lambda a: a * 1000
    +139        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = (
    +140            lambda a: a * UnitConstants.EARTH_GRAVITY
    +141        )
    +142        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = (
    +143            lambda a: (a * UnitConstants.EARTH_GRAVITY) / 1000
    +144        )
    +145        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +146            lambda a: a / UnitConstants.EARTH_GRAVITY
    +147        )
    +148        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +149            lambda a: (a * 1000) / UnitConstants.EARTH_GRAVITY
    +150        )
    +151
    +152        # Compressor chart rate
    +153        unit_registry[Unit.ACTUAL_VOLUMETRIC_M3_PER_HOUR][Unit.ACTUAL_VOLUMETRIC_M3_PER_HOUR] = lambda a: a
    +154
    +155        # Other
    +156        unit_registry[Unit.KG_BOE][Unit.KG_SM3] = lambda a: a * 6.29
    +157        unit_registry[Unit.KG_SM3][Unit.KG_BOE] = lambda a: a / 6.29
    +158        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.BOE] = lambda a: a * 6.29
    +159        unit_registry[Unit.BOE][Unit.STANDARD_CUBIC_METER] = lambda a: a / 6.29
    +160        unit_registry[Unit.MEGA_WATT_DAYS][Unit.GIGA_WATT_HOURS] = lambda a: a * 24 / 1000
    +161
    +162        return unit_registry
    +163
    +164    def to(self, unit: Unit) -> Callable:
    +165        if self is unit:
    +166            return lambda a: a
    +167
    +168        try:
    +169            unit_registry = Unit._unit_registry()
    +170            try:
    +171                converter = _type_handler(unit_registry[self][unit])
    +172                if converter is not None:
    +173                    return converter
    +174            except KeyError as ke:
    +175                msg = (
    +176                    f"The conversion between {self.value} to {unit.value}"
    +177                    f" has not been added to unit conversion registry."
    +178                )
    +179                logger.exception(msg)
    +180                raise NotImplementedError(msg) from ke
    +181                # NOTE: Not sure about this one, add conversion manually both ways for now
    +182                # Maybe add all conversions as of base of 10?
    +183                # return lambda inv: inv / unit_registry[unit][self](1)
    +184        except Exception as e:
    +185            msg = (
    +186                f"The conversion between {self.value} to {unit.value}"
    +187                f" has not been added to unit conversion registry.: {e}"
    +188            )
    +189            logger.exception(msg)
    +190            raise NotImplementedError(msg) from e
    +191
    +192    def volume_to_rate(self) -> Unit:
    +193        """
    +194        For a unit describing volume in a period, the corresponding rate unit is returned.
    +195        """
    +196        if self == Unit.STANDARD_CUBIC_METER:
    +197            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +198        elif self == Unit.MEGA_WATT_DAYS:
    +199            return Unit.MEGA_WATT
    +200        elif self == Unit.TONS:
    +201            return Unit.TONS_PER_DAY
    +202        elif self == Unit.NORWEGIAN_KRONER:
    +203            return Unit.NORWEGIAN_KRONER_PER_DAY
    +204        elif self == Unit.KILO:
    +205            return Unit.KILO_PER_DAY
    +206        elif self == Unit.LITRES:
    +207            return Unit.LITRES_PER_DAY
    +208        else:
    +209            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +210
    +211    def rate_to_volume(self) -> Unit:
    +212        """
    +213        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +214        """
    +215        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +216            return Unit.STANDARD_CUBIC_METER
    +217        elif self == Unit.MEGA_WATT:
    +218            return Unit.MEGA_WATT_DAYS
    +219        elif self == Unit.TONS_PER_DAY:
    +220            return Unit.TONS
    +221        elif self == Unit.NORWEGIAN_KRONER_PER_DAY:
    +222            return Unit.NORWEGIAN_KRONER
    +223        elif self == Unit.KILO_PER_DAY:
    +224            return Unit.KILO
    +225        elif self == Unit.LITRES_PER_DAY:
    +226            return Unit.LITRES
    +227        else:
    +228            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +
    +
    + +
    + + class + UnitConstants: + + + +
    + +
    31class UnitConstants:
    +32    TO_KILO = 1e-3
    +33    STANDARD_PRESSURE_BARA = 1.01325
    +34    STANDARD_TEMPERATURE_KELVIN = 288.15
    +35    STANDARD_TEMPERATURE_CELSIUS = 15.0
    +36    CELSIUS_TO_KELVIN = 273.15
    +37    HOURS_PER_DAY = 24.0
    +38    EARTH_GRAVITY = 9.81
    +39    GAS_CONSTANT = 8.314472  # m3 * Pa / (K * mol) - SI units
    +40    WATT_TO_MEGAWATT = 1e-6
    +41    SECONDS_PER_HOUR = 3600.0
    +42    SECONDS_IN_A_DAY = 86400.0
    +43    WATT_PER_MEGAWATT = 1e6
    +
    + + + + +
    +
    + +
    + + class + Unit(builtins.str, enum.Enum): + + + +
    + +
     46class Unit(str, Enum):
    + 47    """A very simple unit registry to convert between common eCalc units."""
    + 48
    + 49    NONE = "N/A"
    + 50    KG_BOE = "kg/BOE"
    + 51    KG_SM3 = "kg/Sm3"
    + 52    KG_M3 = "kg/m3"
    + 53    STANDARD_CUBIC_METER = "Sm3"
    + 54    BOE = "BOE"
    + 55
    + 56    TONS_PER_DAY = "t/d"
    + 57    TONS = "t"
    + 58
    + 59    KILO_PER_DAY = "kg/d"
    + 60    KILO_PER_HOUR = "kg/h"
    + 61    KILO = "kg"
    + 62
    + 63    LITRES_PER_DAY = "L/d"
    + 64    LITRES = "L"
    + 65
    + 66    MEGA_WATT_DAYS = "MWd"
    + 67    GIGA_WATT_HOURS = "GWh"
    + 68    MEGA_WATT = "MW"
    + 69
    + 70    YEAR = "Y"
    + 71    BARA = "bara"
    + 72    KILO_PASCAL = "kPa"
    + 73    PASCAL = "Pa"
    + 74
    + 75    CELSIUS = "C"
    + 76    KELVIN = "K"
    + 77
    + 78    FRACTION = "frac"
    + 79    PERCENTAGE = "%"
    + 80
    + 81    POLYTROPIC_HEAD_KILO_JOULE_PER_KG = "kJ/kg"
    + 82    POLYTROPIC_HEAD_JOULE_PER_KG = "J/kg"
    + 83    POLYTROPIC_HEAD_METER_LIQUID_COLUMN = "N.m/kg"
    + 84
    + 85    ACTUAL_VOLUMETRIC_M3_PER_HOUR = "Am3/h"
    + 86    STANDARD_CUBIC_METER_PER_DAY = "Sm3/d"
    + 87
    + 88    NORWEGIAN_KRONER_PER_DAY = "NOK/d"
    + 89    NORWEGIAN_KRONER = "NOK"
    + 90
    + 91    SPEED_RPM = "RPM"
    + 92
    + 93    def __str__(self) -> str:
    + 94        return self.value
    + 95
    + 96    @classmethod
    + 97    def validator(cls, unit: Union[str, Unit]) -> Unit:
    + 98        if isinstance(unit, str):
    + 99            return Unit(unit)
    +100        return unit
    +101
    +102    @classmethod
    +103    def __get_validators__(cls):
    +104        # convert list to tuple before using default enum validator. Fixes problem with this unit being read as
    +105        # list from json
    +106        yield cls.validator
    +107        yield enum_validator
    +108
    +109    @staticmethod
    +110    def _unit_registry() -> Dict[Unit, Dict[Unit, Callable]]:
    +111        unit_registry: Dict[Unit, Dict[Unit, Callable]] = defaultdict(dict)
    +112
    +113        unit_registry[Unit.TONS_PER_DAY][Unit.KILO_PER_DAY] = lambda a: a * 1000
    +114        unit_registry[Unit.KILO_PER_DAY][Unit.TONS_PER_DAY] = lambda a: a / 1000
    +115
    +116        unit_registry[Unit.KILO][Unit.TONS] = lambda a: a / 1000
    +117        unit_registry[Unit.TONS][Unit.KILO] = lambda a: a * 1000
    +118
    +119        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.LITRES] = lambda a: a * 1000
    +120        unit_registry[Unit.LITRES][Unit.STANDARD_CUBIC_METER] = lambda a: a / 1000
    +121
    +122        # Temperature
    +123        unit_registry[Unit.CELSIUS][Unit.KELVIN] = lambda a: a + 273.15
    +124        unit_registry[Unit.KELVIN][Unit.CELSIUS] = lambda a: a - 273.15
    +125
    +126        # Pressure
    +127        unit_registry[Unit.BARA][Unit.KILO_PASCAL] = lambda a: a * 100
    +128        unit_registry[Unit.KILO_PASCAL][Unit.BARA] = lambda a: a / 100
    +129        unit_registry[Unit.BARA][Unit.PASCAL] = lambda a: a * 1e5
    +130        unit_registry[Unit.PASCAL][Unit.BARA] = lambda a: a / 1e5
    +131
    +132        # User for compressor charts.
    +133        unit_registry[Unit.PERCENTAGE][Unit.FRACTION] = lambda a: a / 100
    +134        unit_registry[Unit.FRACTION][Unit.PERCENTAGE] = lambda a: a * 100
    +135        unit_registry[Unit.FRACTION][Unit.FRACTION] = lambda a: a
    +136
    +137        # Compressor chart polytropic head
    +138        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = lambda a: a / 1000
    +139        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = lambda a: a * 1000
    +140        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = (
    +141            lambda a: a * UnitConstants.EARTH_GRAVITY
    +142        )
    +143        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = (
    +144            lambda a: (a * UnitConstants.EARTH_GRAVITY) / 1000
    +145        )
    +146        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +147            lambda a: a / UnitConstants.EARTH_GRAVITY
    +148        )
    +149        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +150            lambda a: (a * 1000) / UnitConstants.EARTH_GRAVITY
    +151        )
    +152
    +153        # Compressor chart rate
    +154        unit_registry[Unit.ACTUAL_VOLUMETRIC_M3_PER_HOUR][Unit.ACTUAL_VOLUMETRIC_M3_PER_HOUR] = lambda a: a
    +155
    +156        # Other
    +157        unit_registry[Unit.KG_BOE][Unit.KG_SM3] = lambda a: a * 6.29
    +158        unit_registry[Unit.KG_SM3][Unit.KG_BOE] = lambda a: a / 6.29
    +159        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.BOE] = lambda a: a * 6.29
    +160        unit_registry[Unit.BOE][Unit.STANDARD_CUBIC_METER] = lambda a: a / 6.29
    +161        unit_registry[Unit.MEGA_WATT_DAYS][Unit.GIGA_WATT_HOURS] = lambda a: a * 24 / 1000
    +162
    +163        return unit_registry
    +164
    +165    def to(self, unit: Unit) -> Callable:
    +166        if self is unit:
    +167            return lambda a: a
    +168
    +169        try:
    +170            unit_registry = Unit._unit_registry()
    +171            try:
    +172                converter = _type_handler(unit_registry[self][unit])
    +173                if converter is not None:
    +174                    return converter
    +175            except KeyError as ke:
    +176                msg = (
    +177                    f"The conversion between {self.value} to {unit.value}"
    +178                    f" has not been added to unit conversion registry."
    +179                )
    +180                logger.exception(msg)
    +181                raise NotImplementedError(msg) from ke
    +182                # NOTE: Not sure about this one, add conversion manually both ways for now
    +183                # Maybe add all conversions as of base of 10?
    +184                # return lambda inv: inv / unit_registry[unit][self](1)
    +185        except Exception as e:
    +186            msg = (
    +187                f"The conversion between {self.value} to {unit.value}"
    +188                f" has not been added to unit conversion registry.: {e}"
    +189            )
    +190            logger.exception(msg)
    +191            raise NotImplementedError(msg) from e
    +192
    +193    def volume_to_rate(self) -> Unit:
    +194        """
    +195        For a unit describing volume in a period, the corresponding rate unit is returned.
    +196        """
    +197        if self == Unit.STANDARD_CUBIC_METER:
    +198            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +199        elif self == Unit.MEGA_WATT_DAYS:
    +200            return Unit.MEGA_WATT
    +201        elif self == Unit.TONS:
    +202            return Unit.TONS_PER_DAY
    +203        elif self == Unit.NORWEGIAN_KRONER:
    +204            return Unit.NORWEGIAN_KRONER_PER_DAY
    +205        elif self == Unit.KILO:
    +206            return Unit.KILO_PER_DAY
    +207        elif self == Unit.LITRES:
    +208            return Unit.LITRES_PER_DAY
    +209        else:
    +210            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +211
    +212    def rate_to_volume(self) -> Unit:
    +213        """
    +214        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +215        """
    +216        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +217            return Unit.STANDARD_CUBIC_METER
    +218        elif self == Unit.MEGA_WATT:
    +219            return Unit.MEGA_WATT_DAYS
    +220        elif self == Unit.TONS_PER_DAY:
    +221            return Unit.TONS
    +222        elif self == Unit.NORWEGIAN_KRONER_PER_DAY:
    +223            return Unit.NORWEGIAN_KRONER
    +224        elif self == Unit.KILO_PER_DAY:
    +225            return Unit.KILO
    +226        elif self == Unit.LITRES_PER_DAY:
    +227            return Unit.LITRES
    +228        else:
    +229            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +

    A very simple unit registry to convert between common eCalc units.

    +
    + + +
    +
    + NONE = +<Unit.NONE: 'N/A'> + + +
    + + + + +
    +
    +
    + KG_BOE = +<Unit.KG_BOE: 'kg/BOE'> + + +
    + + + + +
    +
    +
    + KG_SM3 = +<Unit.KG_SM3: 'kg/Sm3'> + + +
    + + + + +
    +
    +
    + KG_M3 = +<Unit.KG_M3: 'kg/m3'> + + +
    + + + + +
    +
    +
    + STANDARD_CUBIC_METER = +<Unit.STANDARD_CUBIC_METER: 'Sm3'> + + +
    + + + + +
    +
    +
    + BOE = +<Unit.BOE: 'BOE'> + + +
    + + + + +
    +
    +
    + TONS_PER_DAY = +<Unit.TONS_PER_DAY: 't/d'> + + +
    + + + + +
    +
    +
    + TONS = +<Unit.TONS: 't'> + + +
    + + + + +
    +
    +
    + KILO_PER_DAY = +<Unit.KILO_PER_DAY: 'kg/d'> + + +
    + + + + +
    +
    +
    + KILO_PER_HOUR = +<Unit.KILO_PER_HOUR: 'kg/h'> + + +
    + + + + +
    +
    +
    + KILO = +<Unit.KILO: 'kg'> + + +
    + + + + +
    +
    +
    + LITRES_PER_DAY = +<Unit.LITRES_PER_DAY: 'L/d'> + + +
    + + + + +
    +
    +
    + LITRES = +<Unit.LITRES: 'L'> + + +
    + + + + +
    +
    +
    + MEGA_WATT_DAYS = +<Unit.MEGA_WATT_DAYS: 'MWd'> + + +
    + + + + +
    +
    +
    + GIGA_WATT_HOURS = +<Unit.GIGA_WATT_HOURS: 'GWh'> + + +
    + + + + +
    +
    +
    + MEGA_WATT = +<Unit.MEGA_WATT: 'MW'> + + +
    + + + + +
    +
    +
    + YEAR = +<Unit.YEAR: 'Y'> + + +
    + + + + +
    +
    +
    + BARA = +<Unit.BARA: 'bara'> + + +
    + + + + +
    +
    +
    + KILO_PASCAL = +<Unit.KILO_PASCAL: 'kPa'> + + +
    + + + + +
    +
    +
    + PASCAL = +<Unit.PASCAL: 'Pa'> + + +
    + + + + +
    +
    +
    + CELSIUS = +<Unit.CELSIUS: 'C'> + + +
    + + + + +
    +
    +
    + KELVIN = +<Unit.KELVIN: 'K'> + + +
    + + + + +
    +
    +
    + FRACTION = +<Unit.FRACTION: 'frac'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<Unit.PERCENTAGE: '%'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_KILO_JOULE_PER_KG = +<Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG: 'kJ/kg'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_JOULE_PER_KG = +<Unit.POLYTROPIC_HEAD_JOULE_PER_KG: 'J/kg'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_METER_LIQUID_COLUMN = +<Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN: 'N.m/kg'> + + +
    + + + + +
    +
    +
    + ACTUAL_VOLUMETRIC_M3_PER_HOUR = +<Unit.ACTUAL_VOLUMETRIC_M3_PER_HOUR: 'Am3/h'> + + +
    + + + + +
    +
    +
    + STANDARD_CUBIC_METER_PER_DAY = +<Unit.STANDARD_CUBIC_METER_PER_DAY: 'Sm3/d'> + + +
    + + + + +
    +
    +
    + NORWEGIAN_KRONER_PER_DAY = +<Unit.NORWEGIAN_KRONER_PER_DAY: 'NOK/d'> + + +
    + + + + +
    +
    +
    + NORWEGIAN_KRONER = +<Unit.NORWEGIAN_KRONER: 'NOK'> + + +
    + + + + +
    +
    +
    + SPEED_RPM = +<Unit.SPEED_RPM: 'RPM'> + + +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + validator( cls, unit: Union[str, libecalc.common.units.Unit]) -> libecalc.common.units.Unit: + + + +
    + +
     96    @classmethod
    + 97    def validator(cls, unit: Union[str, Unit]) -> Unit:
    + 98        if isinstance(unit, str):
    + 99            return Unit(unit)
    +100        return unit
    +
    + + + + +
    +
    + +
    + + def + to(self, unit: libecalc.common.units.Unit) -> Callable: + + + +
    + +
    165    def to(self, unit: Unit) -> Callable:
    +166        if self is unit:
    +167            return lambda a: a
    +168
    +169        try:
    +170            unit_registry = Unit._unit_registry()
    +171            try:
    +172                converter = _type_handler(unit_registry[self][unit])
    +173                if converter is not None:
    +174                    return converter
    +175            except KeyError as ke:
    +176                msg = (
    +177                    f"The conversion between {self.value} to {unit.value}"
    +178                    f" has not been added to unit conversion registry."
    +179                )
    +180                logger.exception(msg)
    +181                raise NotImplementedError(msg) from ke
    +182                # NOTE: Not sure about this one, add conversion manually both ways for now
    +183                # Maybe add all conversions as of base of 10?
    +184                # return lambda inv: inv / unit_registry[unit][self](1)
    +185        except Exception as e:
    +186            msg = (
    +187                f"The conversion between {self.value} to {unit.value}"
    +188                f" has not been added to unit conversion registry.: {e}"
    +189            )
    +190            logger.exception(msg)
    +191            raise NotImplementedError(msg) from e
    +
    + + + + +
    +
    + +
    + + def + volume_to_rate(self) -> libecalc.common.units.Unit: + + + +
    + +
    193    def volume_to_rate(self) -> Unit:
    +194        """
    +195        For a unit describing volume in a period, the corresponding rate unit is returned.
    +196        """
    +197        if self == Unit.STANDARD_CUBIC_METER:
    +198            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +199        elif self == Unit.MEGA_WATT_DAYS:
    +200            return Unit.MEGA_WATT
    +201        elif self == Unit.TONS:
    +202            return Unit.TONS_PER_DAY
    +203        elif self == Unit.NORWEGIAN_KRONER:
    +204            return Unit.NORWEGIAN_KRONER_PER_DAY
    +205        elif self == Unit.KILO:
    +206            return Unit.KILO_PER_DAY
    +207        elif self == Unit.LITRES:
    +208            return Unit.LITRES_PER_DAY
    +209        else:
    +210            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +
    + + +

    For a unit describing volume in a period, the corresponding rate unit is returned.

    +
    + + +
    +
    + +
    + + def + rate_to_volume(self) -> libecalc.common.units.Unit: + + + +
    + +
    212    def rate_to_volume(self) -> Unit:
    +213        """
    +214        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +215        """
    +216        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +217            return Unit.STANDARD_CUBIC_METER
    +218        elif self == Unit.MEGA_WATT:
    +219            return Unit.MEGA_WATT_DAYS
    +220        elif self == Unit.TONS_PER_DAY:
    +221            return Unit.TONS
    +222        elif self == Unit.NORWEGIAN_KRONER_PER_DAY:
    +223            return Unit.NORWEGIAN_KRONER
    +224        elif self == Unit.KILO_PER_DAY:
    +225            return Unit.KILO
    +226        elif self == Unit.LITRES_PER_DAY:
    +227            return Unit.LITRES
    +228        else:
    +229            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +

    For a unit describing rates, the corresponding unit for volume in a period is returned.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/version.html b/docs/about/references/api/libecalc/common/version.html new file mode 100644 index 0000000000..dbc504c598 --- /dev/null +++ b/docs/about/references/api/libecalc/common/version.html @@ -0,0 +1,476 @@ + + + + + + + libecalc.common.version API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.version

    + + + + + + +
     1import re
    + 2from typing import Optional
    + 3
    + 4from libecalc.dto.base import EcalcBaseModel
    + 5
    + 6VERSION_FORMAT = r"^(\d+)(\.\d+)?(\.\d+)?$"
    + 7
    + 8
    + 9class Version(EcalcBaseModel):
    +10    major: int = 0
    +11    minor: int = 0
    +12    patch: int = 0
    +13
    +14    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +15        super().__init__()
    +16        self.major = major
    +17        self.minor = minor
    +18        self.patch = patch
    +19
    +20    @classmethod
    +21    def from_string(cls, version_string: Optional[str]) -> "Version":
    +22        """From any version that has either major, minor or patch in string, get the full
    +23        version with major, minor and patch set.
    +24
    +25        If null, empty or invalid string, return Version 0.0.0
    +26
    +27        :param version_string:
    +28        :return:
    +29        """
    +30        if version_string is None:
    +31            return Version()
    +32
    +33        pattern = re.compile(VERSION_FORMAT)
    +34        match = pattern.match(version_string)
    +35
    +36        if match is None:
    +37            return Version()
    +38
    +39        if len(match.groups()):
    +40            # NOTE! Group 0 is full (matched) expression
    +41            major = int(match[1]) if match[1] is not None else 0
    +42            minor = int(match[2][1:]) if match[2] is not None else 0
    +43            patch = int(match[3][1:]) if match[3] is not None else 0
    +44            return cls(major=major, minor=minor, patch=patch)
    +45        else:
    +46            # ignore wrong format for now, assume not set
    +47            return Version()
    +48
    +49    def __str__(self) -> str:
    +50        return f"{self.major}.{self.minor}.{self.patch}"
    +51
    +52    def __repr__(self) -> str:
    +53        return f"Major: {self.major}\nMinor: {self.minor}\nPatch: {self.patch}"
    +
    + + +
    +
    + +
    + + class + Version(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    10class Version(EcalcBaseModel):
    +11    major: int = 0
    +12    minor: int = 0
    +13    patch: int = 0
    +14
    +15    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +16        super().__init__()
    +17        self.major = major
    +18        self.minor = minor
    +19        self.patch = patch
    +20
    +21    @classmethod
    +22    def from_string(cls, version_string: Optional[str]) -> "Version":
    +23        """From any version that has either major, minor or patch in string, get the full
    +24        version with major, minor and patch set.
    +25
    +26        If null, empty or invalid string, return Version 0.0.0
    +27
    +28        :param version_string:
    +29        :return:
    +30        """
    +31        if version_string is None:
    +32            return Version()
    +33
    +34        pattern = re.compile(VERSION_FORMAT)
    +35        match = pattern.match(version_string)
    +36
    +37        if match is None:
    +38            return Version()
    +39
    +40        if len(match.groups()):
    +41            # NOTE! Group 0 is full (matched) expression
    +42            major = int(match[1]) if match[1] is not None else 0
    +43            minor = int(match[2][1:]) if match[2] is not None else 0
    +44            patch = int(match[3][1:]) if match[3] is not None else 0
    +45            return cls(major=major, minor=minor, patch=patch)
    +46        else:
    +47            # ignore wrong format for now, assume not set
    +48            return Version()
    +49
    +50    def __str__(self) -> str:
    +51        return f"{self.major}.{self.minor}.{self.patch}"
    +52
    +53    def __repr__(self) -> str:
    +54        return f"Major: {self.major}\nMinor: {self.minor}\nPatch: {self.patch}"
    +
    + + + + +
    + +
    + + Version(major: int = 0, minor: int = 0, patch: int = 0) + + + +
    + +
    15    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +16        super().__init__()
    +17        self.major = major
    +18        self.minor = minor
    +19        self.patch = patch
    +
    + + +

    Create a new model by parsing and validating input data from keyword arguments.

    + +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + from_string( cls, version_string: Union[str, NoneType]) -> libecalc.common.version.Version: + + + +
    + +
    21    @classmethod
    +22    def from_string(cls, version_string: Optional[str]) -> "Version":
    +23        """From any version that has either major, minor or patch in string, get the full
    +24        version with major, minor and patch set.
    +25
    +26        If null, empty or invalid string, return Version 0.0.0
    +27
    +28        :param version_string:
    +29        :return:
    +30        """
    +31        if version_string is None:
    +32            return Version()
    +33
    +34        pattern = re.compile(VERSION_FORMAT)
    +35        match = pattern.match(version_string)
    +36
    +37        if match is None:
    +38            return Version()
    +39
    +40        if len(match.groups()):
    +41            # NOTE! Group 0 is full (matched) expression
    +42            major = int(match[1]) if match[1] is not None else 0
    +43            minor = int(match[2][1:]) if match[2] is not None else 0
    +44            patch = int(match[3][1:]) if match[3] is not None else 0
    +45            return cls(major=major, minor=minor, patch=patch)
    +46        else:
    +47            # ignore wrong format for now, assume not set
    +48            return Version()
    +
    + + +

    From any version that has either major, minor or patch in string, get the full +version with major, minor and patch set.

    + +

    If null, empty or invalid string, return Version 0.0.0

    + +
    Parameters
    + +
      +
    • version_string:
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    + +
    pydantic.main.BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/domain.html b/docs/about/references/api/libecalc/domain.html new file mode 100644 index 0000000000..ca6496eac6 --- /dev/null +++ b/docs/about/references/api/libecalc/domain.html @@ -0,0 +1,233 @@ + + + + + + + libecalc.domain API documentation + + + + + + + + + +
    +
    +

    +libecalc.domain

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto.html b/docs/about/references/api/libecalc/dto.html new file mode 100644 index 0000000000..d19a209893 --- /dev/null +++ b/docs/about/references/api/libecalc/dto.html @@ -0,0 +1,313 @@ + + + + + + + libecalc.dto API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto

    + + + + + + +
     1from libecalc.dto.components import (
    + 2    Asset,
    + 3    BaseConsumer,
    + 4    DirectEmitter,
    + 5    ElectricityConsumer,
    + 6    EmitterModel,
    + 7    FuelConsumer,
    + 8    GeneratorSet,
    + 9    Installation,
    +10)
    +11from libecalc.dto.emission import Emission
    +12from libecalc.dto.models import (
    +13    ChartCurve,
    +14    CompressorChart,
    +15    CompressorConsumerFunction,
    +16    CompressorModel,
    +17    CompressorSampled,
    +18    CompressorSystemCompressor,
    +19    CompressorSystemConsumerFunction,
    +20    CompressorSystemOperationalSetting,
    +21    CompressorTrainSimplifiedWithKnownStages,
    +22    CompressorTrainSimplifiedWithUnknownStages,
    +23    CompressorWithTurbine,
    +24    ConsumerFunction,
    +25    DirectConsumerFunction,
    +26    ElectricEnergyUsageModel,
    +27    EnergyModel,
    +28    EnergyModelSampled,
    +29    FluidComposition,
    +30    FluidModel,
    +31    FluidStream,
    +32    FuelEnergyUsageModel,
    +33    GeneratorSetSampled,
    +34    GenericChartFromDesignPoint,
    +35    GenericChartFromInput,
    +36    PumpConsumerFunction,
    +37    PumpModel,
    +38    PumpSystemConsumerFunction,
    +39    PumpSystemOperationalSetting,
    +40    PumpSystemPump,
    +41    SingleSpeedChart,
    +42    SystemOperationalSetting,
    +43    TabulatedConsumerFunction,
    +44    TabulatedData,
    +45    Turbine,
    +46    Variables,
    +47    VariableSpeedChart,
    +48)
    +49from libecalc.dto.models.compressor import (
    +50    CompressorStage,
    +51    InterstagePressureControl,
    +52    MultipleStreamsAndPressureStream,
    +53    MultipleStreamsCompressorStage,
    +54    SingleSpeedCompressorTrain,
    +55    VariableSpeedCompressorTrain,
    +56    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +57)
    +58from libecalc.dto.result_options import ResultOptions
    +59from libecalc.dto.types import FuelType, TimeSeriesType
    +60from libecalc.dto.variables import VariablesMap
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/base.html b/docs/about/references/api/libecalc/dto/base.html new file mode 100644 index 0000000000..883afd8df6 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/base.html @@ -0,0 +1,1565 @@ + + + + + + + libecalc.dto.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.base

    + + + + + + +
      1from abc import ABC, abstractmethod
    +  2from datetime import datetime
    +  3from enum import Enum
    +  4from functools import partial
    +  5from typing import Optional
    +  6
    +  7from orjson import orjson
    +  8from pydantic import BaseModel, Extra
    +  9from pydantic.json import custom_pydantic_encoder
    + 10
    + 11from libecalc.common.string.string_utils import to_camel_case
    + 12from libecalc.expression import Expression
    + 13
    + 14
    + 15class ComponentType(str, Enum):
    + 16    ASSET = "ASSET"
    + 17    INSTALLATION = "INSTALLATION"
    + 18    GENERATOR_SET = "GENERATOR_SET"
    + 19
    + 20    CONSUMER_SYSTEM_V2 = "CONSUMER_SYSTEM@v2"
    + 21    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    + 22    PUMP_SYSTEM = "PUMP_SYSTEM"
    + 23    COMPRESSOR = "COMPRESSOR"
    + 24    COMPRESSOR_V2 = "COMPRESSOR@v2"
    + 25    PUMP = "PUMP"
    + 26    PUMP_V2 = "PUMP@v2"
    + 27    GENERIC = "GENERIC"
    + 28    # TURBINE = "TURBINE"
    + 29    DIRECT_EMITTER = "DIRECT_EMITTER"
    + 30    TRAIN_V2 = "TRAIN@V2"
    + 31
    + 32    def __lt__(self, other: "ComponentType"):  # type: ignore[override]
    + 33        if self == other:
    + 34            return False
    + 35        # the following works because the order of elements in the definition is preserved
    + 36        for elem in ComponentType:
    + 37            if self == elem:
    + 38                return True
    + 39            elif other == elem:
    + 40                return False
    + 41
    + 42
    + 43class ConsumerUserDefinedCategoryType(str, Enum):
    + 44    """
    + 45    Consumer category
    + 46    """
    + 47
    + 48    BASE_LOAD = "BASE-LOAD"
    + 49    COLD_VENTING_FUGITIVE = "COLD-VENTING-FUGITIVE"
    + 50    COMPRESSOR = "COMPRESSOR"
    + 51    FIXED_PRODUCTION_LOAD = "FIXED-PRODUCTION-LOAD"
    + 52    FLARE = "FLARE"
    + 53    MISCELLANEOUS = "MISCELLANEOUS"
    + 54    PUMP = "PUMP"
    + 55    GAS_DRIVEN_COMPRESSOR = "GAS-DRIVEN-COMPRESSOR"
    + 56    TURBINE_GENERATOR = "TURBINE-GENERATOR"
    + 57    POWER_FROM_SHORE = "POWER-FROM-SHORE"
    + 58    OFFSHORE_WIND = "OFFSHORE-WIND"
    + 59    LOADING = "LOADING"
    + 60    STORAGE = "STORAGE"
    + 61    STEAM_TURBINE_GENERATOR = "STEAM-TURBINE-GENERATOR"
    + 62    BOILER = "BOILER"
    + 63    HEATER = "HEATER"
    + 64
    + 65
    + 66class InstallationUserDefinedCategoryType(str, Enum):
    + 67    """
    + 68    Installation category
    + 69    """
    + 70
    + 71    FIXED = "FIXED"
    + 72    MOBILE = "MOBILE"
    + 73
    + 74
    + 75class FuelTypeUserDefinedCategoryType(str, Enum):
    + 76    FUEL_GAS = "FUEL-GAS"
    + 77    DIESEL = "DIESEL"
    + 78
    + 79
    + 80def orjson_dumps(v, *, default, indent: bool = False):
    + 81    options = orjson.OPT_NON_STR_KEYS | orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_PASSTHROUGH_DATETIME
    + 82
    + 83    if indent:
    + 84        options = options | orjson.OPT_INDENT_2
    + 85
    + 86    # orjson.dumps returns bytes, to match standard json.dumps we need to decode
    + 87    # default is the pydantic json encoder
    + 88    return orjson.dumps(v, default=default, option=options).decode("utf-8")
    + 89
    + 90
    + 91class EcalcBaseModel(BaseModel):
    + 92    class Config:
    + 93        extra = Extra.forbid
    + 94        alias_generator = to_camel_case
    + 95        allow_population_by_field_name = True
    + 96        json_dumps = orjson_dumps
    + 97        json_encoders = {
    + 98            datetime: lambda v: v.strftime("%Y-%m-%dT%H:%M:%S"),
    + 99            Expression: lambda e: str(e),
    +100        }
    +101        copy_on_model_validation = "deep"
    +102
    +103    def json(self, date_format: Optional[str] = None, **kwargs) -> str:
    +104        if date_format is None:
    +105            return super().json(**kwargs)
    +106
    +107        if kwargs.get("encoder") is None:
    +108            # Override datetime encoder if not already overridden, use user specified date_format_option
    +109            encoder = partial(
    +110                custom_pydantic_encoder,
    +111                {
    +112                    datetime: lambda v: v.strftime(date_format),
    +113                },
    +114            )
    +115        else:
    +116            encoder = kwargs["encoder"]
    +117
    +118        return super().json(**kwargs, encoder=encoder)  # Encoder becomes default, i.e. should handle unhandled types
    +119
    +120
    +121class Component(EcalcBaseModel, ABC):
    +122    component_type: ComponentType
    +123
    +124    @property
    +125    @abstractmethod
    +126    def id(self) -> str:
    +127        ...
    +
    + + +
    +
    + +
    + + class + ComponentType(builtins.str, enum.Enum): + + + +
    + +
    16class ComponentType(str, Enum):
    +17    ASSET = "ASSET"
    +18    INSTALLATION = "INSTALLATION"
    +19    GENERATOR_SET = "GENERATOR_SET"
    +20
    +21    CONSUMER_SYSTEM_V2 = "CONSUMER_SYSTEM@v2"
    +22    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    +23    PUMP_SYSTEM = "PUMP_SYSTEM"
    +24    COMPRESSOR = "COMPRESSOR"
    +25    COMPRESSOR_V2 = "COMPRESSOR@v2"
    +26    PUMP = "PUMP"
    +27    PUMP_V2 = "PUMP@v2"
    +28    GENERIC = "GENERIC"
    +29    # TURBINE = "TURBINE"
    +30    DIRECT_EMITTER = "DIRECT_EMITTER"
    +31    TRAIN_V2 = "TRAIN@V2"
    +32
    +33    def __lt__(self, other: "ComponentType"):  # type: ignore[override]
    +34        if self == other:
    +35            return False
    +36        # the following works because the order of elements in the definition is preserved
    +37        for elem in ComponentType:
    +38            if self == elem:
    +39                return True
    +40            elif other == elem:
    +41                return False
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + ASSET = +<ComponentType.ASSET: 'ASSET'> + + +
    + + + + +
    +
    +
    + INSTALLATION = +<ComponentType.INSTALLATION: 'INSTALLATION'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET = +<ComponentType.GENERATOR_SET: 'GENERATOR_SET'> + + +
    + + + + +
    +
    +
    + CONSUMER_SYSTEM_V2 = +<ComponentType.CONSUMER_SYSTEM_V2: 'CONSUMER_SYSTEM@v2'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SYSTEM = +<ComponentType.COMPRESSOR_SYSTEM: 'COMPRESSOR_SYSTEM'> + + +
    + + + + +
    +
    +
    + PUMP_SYSTEM = +<ComponentType.PUMP_SYSTEM: 'PUMP_SYSTEM'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ComponentType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_V2 = +<ComponentType.COMPRESSOR_V2: 'COMPRESSOR@v2'> + + +
    + + + + +
    +
    +
    + PUMP = +<ComponentType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + PUMP_V2 = +<ComponentType.PUMP_V2: 'PUMP@v2'> + + +
    + + + + +
    +
    +
    + GENERIC = +<ComponentType.GENERIC: 'GENERIC'> + + +
    + + + + +
    +
    +
    + DIRECT_EMITTER = +<ComponentType.DIRECT_EMITTER: 'DIRECT_EMITTER'> + + +
    + + + + +
    +
    +
    + TRAIN_V2 = +<ComponentType.TRAIN_V2: 'TRAIN@V2'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ConsumerUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    44class ConsumerUserDefinedCategoryType(str, Enum):
    +45    """
    +46    Consumer category
    +47    """
    +48
    +49    BASE_LOAD = "BASE-LOAD"
    +50    COLD_VENTING_FUGITIVE = "COLD-VENTING-FUGITIVE"
    +51    COMPRESSOR = "COMPRESSOR"
    +52    FIXED_PRODUCTION_LOAD = "FIXED-PRODUCTION-LOAD"
    +53    FLARE = "FLARE"
    +54    MISCELLANEOUS = "MISCELLANEOUS"
    +55    PUMP = "PUMP"
    +56    GAS_DRIVEN_COMPRESSOR = "GAS-DRIVEN-COMPRESSOR"
    +57    TURBINE_GENERATOR = "TURBINE-GENERATOR"
    +58    POWER_FROM_SHORE = "POWER-FROM-SHORE"
    +59    OFFSHORE_WIND = "OFFSHORE-WIND"
    +60    LOADING = "LOADING"
    +61    STORAGE = "STORAGE"
    +62    STEAM_TURBINE_GENERATOR = "STEAM-TURBINE-GENERATOR"
    +63    BOILER = "BOILER"
    +64    HEATER = "HEATER"
    +
    + + +

    Consumer category

    +
    + + +
    +
    + BASE_LOAD = +<ConsumerUserDefinedCategoryType.BASE_LOAD: 'BASE-LOAD'> + + +
    + + + + +
    +
    +
    + COLD_VENTING_FUGITIVE = +<ConsumerUserDefinedCategoryType.COLD_VENTING_FUGITIVE: 'COLD-VENTING-FUGITIVE'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ConsumerUserDefinedCategoryType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + FIXED_PRODUCTION_LOAD = +<ConsumerUserDefinedCategoryType.FIXED_PRODUCTION_LOAD: 'FIXED-PRODUCTION-LOAD'> + + +
    + + + + +
    +
    +
    + FLARE = +<ConsumerUserDefinedCategoryType.FLARE: 'FLARE'> + + +
    + + + + +
    +
    +
    + MISCELLANEOUS = +<ConsumerUserDefinedCategoryType.MISCELLANEOUS: 'MISCELLANEOUS'> + + +
    + + + + +
    +
    +
    + PUMP = +<ConsumerUserDefinedCategoryType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + GAS_DRIVEN_COMPRESSOR = +<ConsumerUserDefinedCategoryType.GAS_DRIVEN_COMPRESSOR: 'GAS-DRIVEN-COMPRESSOR'> + + +
    + + + + +
    +
    +
    + TURBINE_GENERATOR = +<ConsumerUserDefinedCategoryType.TURBINE_GENERATOR: 'TURBINE-GENERATOR'> + + +
    + + + + +
    +
    +
    + POWER_FROM_SHORE = +<ConsumerUserDefinedCategoryType.POWER_FROM_SHORE: 'POWER-FROM-SHORE'> + + +
    + + + + +
    +
    +
    + OFFSHORE_WIND = +<ConsumerUserDefinedCategoryType.OFFSHORE_WIND: 'OFFSHORE-WIND'> + + +
    + + + + +
    +
    +
    + LOADING = +<ConsumerUserDefinedCategoryType.LOADING: 'LOADING'> + + +
    + + + + +
    +
    +
    + STORAGE = +<ConsumerUserDefinedCategoryType.STORAGE: 'STORAGE'> + + +
    + + + + +
    +
    +
    + STEAM_TURBINE_GENERATOR = +<ConsumerUserDefinedCategoryType.STEAM_TURBINE_GENERATOR: 'STEAM-TURBINE-GENERATOR'> + + +
    + + + + +
    +
    +
    + BOILER = +<ConsumerUserDefinedCategoryType.BOILER: 'BOILER'> + + +
    + + + + +
    +
    +
    + HEATER = +<ConsumerUserDefinedCategoryType.HEATER: 'HEATER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + InstallationUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    67class InstallationUserDefinedCategoryType(str, Enum):
    +68    """
    +69    Installation category
    +70    """
    +71
    +72    FIXED = "FIXED"
    +73    MOBILE = "MOBILE"
    +
    + + +

    Installation category

    +
    + + +
    +
    + FIXED = +<InstallationUserDefinedCategoryType.FIXED: 'FIXED'> + + +
    + + + + +
    +
    +
    + MOBILE = +<InstallationUserDefinedCategoryType.MOBILE: 'MOBILE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FuelTypeUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    76class FuelTypeUserDefinedCategoryType(str, Enum):
    +77    FUEL_GAS = "FUEL-GAS"
    +78    DIESEL = "DIESEL"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL_GAS = +<FuelTypeUserDefinedCategoryType.FUEL_GAS: 'FUEL-GAS'> + + +
    + + + + +
    +
    +
    + DIESEL = +<FuelTypeUserDefinedCategoryType.DIESEL: 'DIESEL'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + def + orjson_dumps(v, *, default, indent: bool = False): + + + +
    + +
    81def orjson_dumps(v, *, default, indent: bool = False):
    +82    options = orjson.OPT_NON_STR_KEYS | orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_PASSTHROUGH_DATETIME
    +83
    +84    if indent:
    +85        options = options | orjson.OPT_INDENT_2
    +86
    +87    # orjson.dumps returns bytes, to match standard json.dumps we need to decode
    +88    # default is the pydantic json encoder
    +89    return orjson.dumps(v, default=default, option=options).decode("utf-8")
    +
    + + + + +
    +
    + +
    + + class + EcalcBaseModel(pydantic.main.BaseModel): + + + +
    + +
     92class EcalcBaseModel(BaseModel):
    + 93    class Config:
    + 94        extra = Extra.forbid
    + 95        alias_generator = to_camel_case
    + 96        allow_population_by_field_name = True
    + 97        json_dumps = orjson_dumps
    + 98        json_encoders = {
    + 99            datetime: lambda v: v.strftime("%Y-%m-%dT%H:%M:%S"),
    +100            Expression: lambda e: str(e),
    +101        }
    +102        copy_on_model_validation = "deep"
    +103
    +104    def json(self, date_format: Optional[str] = None, **kwargs) -> str:
    +105        if date_format is None:
    +106            return super().json(**kwargs)
    +107
    +108        if kwargs.get("encoder") is None:
    +109            # Override datetime encoder if not already overridden, use user specified date_format_option
    +110            encoder = partial(
    +111                custom_pydantic_encoder,
    +112                {
    +113                    datetime: lambda v: v.strftime(date_format),
    +114                },
    +115            )
    +116        else:
    +117            encoder = kwargs["encoder"]
    +118
    +119        return super().json(**kwargs, encoder=encoder)  # Encoder becomes default, i.e. should handle unhandled types
    +
    + + + + +
    + +
    + + def + json(self, date_format: Union[str, NoneType] = None, **kwargs) -> str: + + + +
    + +
    104    def json(self, date_format: Optional[str] = None, **kwargs) -> str:
    +105        if date_format is None:
    +106            return super().json(**kwargs)
    +107
    +108        if kwargs.get("encoder") is None:
    +109            # Override datetime encoder if not already overridden, use user specified date_format_option
    +110            encoder = partial(
    +111                custom_pydantic_encoder,
    +112                {
    +113                    datetime: lambda v: v.strftime(date_format),
    +114                },
    +115            )
    +116        else:
    +117            encoder = kwargs["encoder"]
    +118
    +119        return super().json(**kwargs, encoder=encoder)  # Encoder becomes default, i.e. should handle unhandled types
    +
    + + +

    Generate a JSON representation of the model, include and exclude arguments as per dict().

    + +

    encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcBaseModel.Config: + + + +
    + +
     93    class Config:
    + 94        extra = Extra.forbid
    + 95        alias_generator = to_camel_case
    + 96        allow_population_by_field_name = True
    + 97        json_dumps = orjson_dumps
    + 98        json_encoders = {
    + 99            datetime: lambda v: v.strftime("%Y-%m-%dT%H:%M:%S"),
    +100            Expression: lambda e: str(e),
    +101        }
    +102        copy_on_model_validation = "deep"
    +
    + + + + +
    +
    + extra = +<Extra.forbid: 'forbid'> + + +
    + + + + +
    +
    + +
    + + def + alias_generator(string: str) -> str: + + + +
    + +
    27def to_camel_case(string: str) -> str:
    +28    """Convert string from snake_case to camelCase
    +29
    +30    Args:
    +31        string: String in snake_case format
    +32
    +33    Returns:
    +34        String in camelCase format
    +35
    +36    """
    +37    string_split = string.replace("__", "_").split("_")
    +38    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +39    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +

    Convert string from snake_case to camelCase

    + +

    Args: + string: String in snake_case format

    + +

    Returns: + String in camelCase format

    +
    + + +
    +
    + +
    + + def + json_dumps(v, *, default, indent: bool = False): + + + +
    + +
    81def orjson_dumps(v, *, default, indent: bool = False):
    +82    options = orjson.OPT_NON_STR_KEYS | orjson.OPT_SERIALIZE_NUMPY | orjson.OPT_PASSTHROUGH_DATETIME
    +83
    +84    if indent:
    +85        options = options | orjson.OPT_INDENT_2
    +86
    +87    # orjson.dumps returns bytes, to match standard json.dumps we need to decode
    +88    # default is the pydantic json encoder
    +89    return orjson.dumps(v, default=default, option=options).decode("utf-8")
    +
    + + + + +
    +
    +
    + +
    + + class + Component(EcalcBaseModel, abc.ABC): + + + +
    + +
    122class Component(EcalcBaseModel, ABC):
    +123    component_type: ComponentType
    +124
    +125    @property
    +126    @abstractmethod
    +127    def id(self) -> str:
    +128        ...
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/component_graph.html b/docs/about/references/api/libecalc/dto/component_graph.html new file mode 100644 index 0000000000..df610f37f7 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/component_graph.html @@ -0,0 +1,550 @@ + + + + + + + libecalc.dto.component_graph API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.component_graph

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import List
    + 4
    + 5from libecalc import dto
    + 6from libecalc.common.component_info.component_level import ComponentLevel
    + 7from libecalc.common.graph import Graph, NodeID
    + 8from libecalc.dto.base import ComponentType
    + 9from libecalc.dto.node_info import NodeInfo
    +10
    +11
    +12class ComponentGraph(Graph):
    +13    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +14        """
    +15        Simple helper function to get the installation of any component with id
    +16
    +17        Args:
    +18            node_id:
    +19
    +20        Returns:
    +21
    +22        """
    +23
    +24        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +25        node_info = self.get_node_info(node_id)
    +26        if node_info.component_level == ComponentLevel.INSTALLATION:
    +27            return node_id
    +28
    +29        parent_id = self.get_predecessor(node_id)
    +30        return self.get_parent_installation_id(parent_id)
    +31
    +32    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +33        component_dto = self.nodes[node_id]
    +34        if isinstance(component_dto, dto.Asset):
    +35            component_level = ComponentLevel.ASSET
    +36        elif isinstance(component_dto, dto.Installation):
    +37            component_level = ComponentLevel.INSTALLATION
    +38        elif isinstance(component_dto, dto.GeneratorSet):
    +39            component_level = ComponentLevel.GENERATOR_SET
    +40        elif component_dto.component_type in [
    +41            ComponentType.COMPRESSOR_SYSTEM,
    +42            ComponentType.PUMP_SYSTEM,
    +43            ComponentType.CONSUMER_SYSTEM_V2,
    +44        ]:
    +45            component_level = ComponentLevel.SYSTEM
    +46        else:
    +47            component_level = ComponentLevel.CONSUMER
    +48
    +49        return NodeInfo(
    +50            id=component_dto.id,
    +51            name=component_dto.name,
    +52            component_type=component_dto.component_type,
    +53            component_level=component_level,
    +54        )
    +55
    +56    def get_node_id_by_name(self, name: str) -> NodeID:
    +57        for node in self.nodes.values():
    +58            if node.name == name:
    +59                return node.id
    +60
    +61        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +62
    +63    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +64        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + +
    +
    + +
    + + class + ComponentGraph(typing.Generic[~TNode]): + + + +
    + +
    13class ComponentGraph(Graph):
    +14    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +15        """
    +16        Simple helper function to get the installation of any component with id
    +17
    +18        Args:
    +19            node_id:
    +20
    +21        Returns:
    +22
    +23        """
    +24
    +25        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +26        node_info = self.get_node_info(node_id)
    +27        if node_info.component_level == ComponentLevel.INSTALLATION:
    +28            return node_id
    +29
    +30        parent_id = self.get_predecessor(node_id)
    +31        return self.get_parent_installation_id(parent_id)
    +32
    +33    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +34        component_dto = self.nodes[node_id]
    +35        if isinstance(component_dto, dto.Asset):
    +36            component_level = ComponentLevel.ASSET
    +37        elif isinstance(component_dto, dto.Installation):
    +38            component_level = ComponentLevel.INSTALLATION
    +39        elif isinstance(component_dto, dto.GeneratorSet):
    +40            component_level = ComponentLevel.GENERATOR_SET
    +41        elif component_dto.component_type in [
    +42            ComponentType.COMPRESSOR_SYSTEM,
    +43            ComponentType.PUMP_SYSTEM,
    +44            ComponentType.CONSUMER_SYSTEM_V2,
    +45        ]:
    +46            component_level = ComponentLevel.SYSTEM
    +47        else:
    +48            component_level = ComponentLevel.CONSUMER
    +49
    +50        return NodeInfo(
    +51            id=component_dto.id,
    +52            name=component_dto.name,
    +53            component_type=component_dto.component_type,
    +54            component_level=component_level,
    +55        )
    +56
    +57    def get_node_id_by_name(self, name: str) -> NodeID:
    +58        for node in self.nodes.values():
    +59            if node.name == name:
    +60                return node.id
    +61
    +62        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +63
    +64    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +65        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + get_parent_installation_id(self, node_id: str) -> str: + + + +
    + +
    14    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +15        """
    +16        Simple helper function to get the installation of any component with id
    +17
    +18        Args:
    +19            node_id:
    +20
    +21        Returns:
    +22
    +23        """
    +24
    +25        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +26        node_info = self.get_node_info(node_id)
    +27        if node_info.component_level == ComponentLevel.INSTALLATION:
    +28            return node_id
    +29
    +30        parent_id = self.get_predecessor(node_id)
    +31        return self.get_parent_installation_id(parent_id)
    +
    + + +

    Simple helper function to get the installation of any component with id

    + +

    Args: + node_id:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_node_info(self, node_id: str) -> libecalc.dto.node_info.NodeInfo: + + + +
    + +
    33    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +34        component_dto = self.nodes[node_id]
    +35        if isinstance(component_dto, dto.Asset):
    +36            component_level = ComponentLevel.ASSET
    +37        elif isinstance(component_dto, dto.Installation):
    +38            component_level = ComponentLevel.INSTALLATION
    +39        elif isinstance(component_dto, dto.GeneratorSet):
    +40            component_level = ComponentLevel.GENERATOR_SET
    +41        elif component_dto.component_type in [
    +42            ComponentType.COMPRESSOR_SYSTEM,
    +43            ComponentType.PUMP_SYSTEM,
    +44            ComponentType.CONSUMER_SYSTEM_V2,
    +45        ]:
    +46            component_level = ComponentLevel.SYSTEM
    +47        else:
    +48            component_level = ComponentLevel.CONSUMER
    +49
    +50        return NodeInfo(
    +51            id=component_dto.id,
    +52            name=component_dto.name,
    +53            component_type=component_dto.component_type,
    +54            component_level=component_level,
    +55        )
    +
    + + + + +
    +
    + +
    + + def + get_node_id_by_name(self, name: str) -> str: + + + +
    + +
    57    def get_node_id_by_name(self, name: str) -> NodeID:
    +58        for node in self.nodes.values():
    +59            if node.name == name:
    +60                return node.id
    +61
    +62        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +
    + + + + +
    +
    + +
    + + def + get_nodes_of_type(self, component_type: libecalc.dto.base.ComponentType) -> List[str]: + + + +
    + +
    64    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +65        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + + + +
    + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/components.html b/docs/about/references/api/libecalc/dto/components.html new file mode 100644 index 0000000000..d65b0ea183 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/components.html @@ -0,0 +1,2675 @@ + + + + + + + libecalc.dto.components API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.components

    + + + + + + +
      1from abc import ABC
    +  2from collections import defaultdict
    +  3from datetime import datetime
    +  4from typing import Dict, List, Literal, Optional, TypeVar, Union
    +  5
    +  6from pydantic import Field, root_validator
    +  7from pydantic.class_validators import validator
    +  8from typing_extensions import Annotated
    +  9
    + 10from libecalc import dto
    + 11from libecalc.common.priorities import Priorities
    + 12from libecalc.common.stream_conditions import StreamConditions
    + 13from libecalc.common.string.string_utils import generate_id, get_duplicates
    + 14from libecalc.common.units import Unit
    + 15from libecalc.common.utils.rates import (
    + 16    TimeSeriesFloat,
    + 17    TimeSeriesStreamDayRate,
    + 18)
    + 19from libecalc.dto.base import (
    + 20    Component,
    + 21    ComponentType,
    + 22    ConsumerUserDefinedCategoryType,
    + 23    EcalcBaseModel,
    + 24    InstallationUserDefinedCategoryType,
    + 25)
    + 26from libecalc.dto.component_graph import ComponentGraph
    + 27from libecalc.dto.models import (
    + 28    ConsumerFunction,
    + 29    ElectricEnergyUsageModel,
    + 30    FuelEnergyUsageModel,
    + 31    GeneratorSetSampled,
    + 32)
    + 33from libecalc.dto.models.compressor import CompressorModel
    + 34from libecalc.dto.models.pump import PumpModel
    + 35from libecalc.dto.types import ConsumptionType, EnergyUsageType, FuelType
    + 36from libecalc.dto.utils.validators import (
    + 37    ComponentNameStr,
    + 38    EmissionNameStr,
    + 39    ExpressionType,
    + 40    convert_expression,
    + 41    validate_temporal_model,
    + 42)
    + 43from libecalc.dto.variables import VariablesMap
    + 44from libecalc.expression import Expression
    + 45
    + 46
    + 47def check_model_energy_usage_type(model_data: Dict[datetime, ConsumerFunction], energy_type: EnergyUsageType):
    + 48    for model in model_data.values():
    + 49        if model.energy_usage_type != energy_type:
    + 50            raise ValueError(f"Model does not consume {energy_type}")
    + 51    return model_data
    + 52
    + 53
    + 54class BaseComponent(Component, ABC):
    + 55    name: ComponentNameStr
    + 56
    + 57    regularity: Dict[datetime, Expression]
    + 58
    + 59    _validate_base_temporal_model = validator("regularity", allow_reuse=True)(validate_temporal_model)
    + 60
    + 61
    + 62class BaseEquipment(BaseComponent, ABC):
    + 63    user_defined_category: Dict[datetime, ConsumerUserDefinedCategoryType]
    + 64
    + 65    @property
    + 66    def id(self) -> str:
    + 67        return generate_id(self.name)
    + 68
    + 69    @validator("user_defined_category", pre=True, always=True)
    + 70    def check_user_defined_category(cls, user_defined_category, values):
    + 71        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    + 72        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    + 73            for user_category in user_defined_category.values():
    + 74                if user_category not in list(ConsumerUserDefinedCategoryType):
    + 75                    name = ""
    + 76                    if values.get("name") is not None:
    + 77                        name = f"with the name {values.get('name')}"
    + 78
    + 79                    raise ValueError(
    + 80                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    + 81                    )
    + 82
    + 83        return user_defined_category
    + 84
    + 85
    + 86class BaseConsumer(BaseEquipment, ABC):
    + 87    """Base class for all consumers."""
    + 88
    + 89    consumes: ConsumptionType
    + 90    fuel: Optional[Dict[datetime, FuelType]]
    + 91
    + 92    @validator("fuel")
    + 93    def validate_fuel_exist(cls, fuel, values):
    + 94        """
    + 95        Make sure fuel is set if consumption type is FUEL.
    + 96        """
    + 97        if values.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    + 98            msg = f"Missing fuel for fuel consumer '{values.get('name')}'"
    + 99            raise ValueError(msg)
    +100        return fuel
    +101
    +102
    +103class ElectricityConsumer(BaseConsumer):
    +104    consumes: Literal[ConsumptionType.ELECTRICITY] = ConsumptionType.ELECTRICITY
    +105    energy_usage_model: Dict[
    +106        datetime,
    +107        ElectricEnergyUsageModel,
    +108    ]
    +109
    +110    _validate_el_consumer_temporal_model = validator("energy_usage_model", allow_reuse=True)(validate_temporal_model)
    +111
    +112    _check_model_energy_usage = validator("energy_usage_model", allow_reuse=True)(
    +113        lambda data: check_model_energy_usage_type(data, EnergyUsageType.POWER)
    +114    )
    +115
    +116
    +117class FuelConsumer(BaseConsumer):
    +118    consumes: Literal[ConsumptionType.FUEL] = ConsumptionType.FUEL
    +119    fuel: Dict[datetime, FuelType]
    +120    energy_usage_model: Dict[datetime, FuelEnergyUsageModel]
    +121
    +122    _validate_fuel_consumer_temporal_models = validator("energy_usage_model", "fuel", allow_reuse=True)(
    +123        validate_temporal_model
    +124    )
    +125
    +126    _check_model_energy_usage = validator("energy_usage_model", allow_reuse=True)(
    +127        lambda data: check_model_energy_usage_type(data, EnergyUsageType.FUEL)
    +128    )
    +129
    +130
    +131Consumer = Annotated[Union[FuelConsumer, ElectricityConsumer], Field(discriminator="consumes")]
    +132
    +133
    +134class EmitterModel(EcalcBaseModel):
    +135    name: ComponentNameStr = ""  # This is not mandatory yet.
    +136    user_defined_category: str = ""  # This is not mandatory yet.
    +137    emission_rate: Expression
    +138    emission_quota: Expression
    +139
    +140    regularity: Dict[datetime, Expression]
    +141
    +142    _validate_emitter_model_temporal_model = validator("regularity", allow_reuse=True)(validate_temporal_model)
    +143
    +144    _default_emission_rate = validator("emission_rate", allow_reuse=True, pre=True)(convert_expression)
    +145    _default_emission_quota = validator("emission_quota", allow_reuse=True, pre=True)(convert_expression)
    +146
    +147
    +148class DirectEmitter(BaseEquipment):
    +149    component_type = ComponentType.DIRECT_EMITTER
    +150    emission_name: EmissionNameStr
    +151    emitter_model: Dict[datetime, EmitterModel]
    +152
    +153    _validate_emitter_temporal_model = validator("emitter_model", allow_reuse=True)(validate_temporal_model)
    +154
    +155
    +156class CompressorOperationalSettings(EcalcBaseModel):
    +157    rate: Expression
    +158    inlet_pressure: Expression
    +159    outlet_pressure: Expression
    +160
    +161
    +162class PumpOperationalSettings(EcalcBaseModel):
    +163    rate: Expression
    +164    inlet_pressure: Expression
    +165    outlet_pressure: Expression
    +166    fluid_density: Expression
    +167
    +168
    +169class CompressorComponent(BaseConsumer):
    +170    component_type: Literal[ComponentType.COMPRESSOR] = ComponentType.COMPRESSOR
    +171    energy_usage_model: Dict[datetime, CompressorModel]
    +172
    +173
    +174class PumpComponent(BaseConsumer):
    +175    component_type: Literal[ComponentType.PUMP] = ComponentType.PUMP
    +176    energy_usage_model: Dict[datetime, PumpModel]
    +177
    +178
    +179class Stream(EcalcBaseModel):
    +180    class Config:
    +181        allow_population_by_field_name = True
    +182
    +183    stream_name: Optional[str] = Field(None)
    +184    from_component_id: str
    +185    to_component_id: str
    +186
    +187
    +188ConsumerComponent = TypeVar("ConsumerComponent", bound=Union[CompressorComponent, PumpComponent])
    +189
    +190
    +191class TrainComponent(BaseConsumer):
    +192    component_type: Literal[ComponentType.TRAIN_V2] = Field(
    +193        ComponentType.TRAIN_V2,
    +194        title="TYPE",
    +195        description="The type of the component",
    +196        alias="TYPE",
    +197    )
    +198    stages: List[ConsumerComponent]
    +199    streams: List[Stream]
    +200
    +201
    +202class ExpressionTimeSeries(EcalcBaseModel):
    +203    value: ExpressionType
    +204    unit: Unit
    +205
    +206
    +207class ExpressionStreamConditions(EcalcBaseModel):
    +208    rate: Optional[ExpressionTimeSeries] = None
    +209    pressure: Optional[ExpressionTimeSeries] = None
    +210    temperature: Optional[ExpressionTimeSeries] = None
    +211    fluid_density: Optional[ExpressionTimeSeries] = None
    +212
    +213
    +214ConsumerID = str
    +215PriorityID = str
    +216StreamID = str
    +217
    +218SystemStreamConditions = Dict[ConsumerID, Dict[StreamID, ExpressionStreamConditions]]
    +219
    +220
    +221class Crossover(EcalcBaseModel):
    +222    class Config:
    +223        allow_population_by_field_name = True
    +224
    +225    stream_name: Optional[str] = Field(None)
    +226    from_component_id: str
    +227    to_component_id: str
    +228
    +229
    +230class SystemComponentConditions(EcalcBaseModel):
    +231    crossover: List[Crossover]
    +232
    +233
    +234class ConsumerSystem(BaseConsumer):
    +235    component_type: Literal[ComponentType.CONSUMER_SYSTEM_V2] = Field(
    +236        ComponentType.CONSUMER_SYSTEM_V2,
    +237        title="TYPE",
    +238        description="The type of the component",
    +239        alias="TYPE",
    +240    )
    +241    component_conditions: SystemComponentConditions
    +242    stream_conditions_priorities: Priorities[SystemStreamConditions]
    +243    consumers: List[Union[CompressorComponent, PumpComponent]]
    +244
    +245    def get_graph(self) -> ComponentGraph:
    +246        graph = ComponentGraph()
    +247        graph.add_node(self)
    +248        for consumer in self.consumers:
    +249            graph.add_node(consumer)
    +250            graph.add_edge(self.id, consumer.id)
    +251        return graph
    +252
    +253    def evaluate_stream_conditions(
    +254        self, variables_map: VariablesMap
    +255    ) -> Priorities[Dict[ConsumerID, List[StreamConditions]]]:
    +256        parsed_priorities: Priorities[Dict[ConsumerID, List[StreamConditions]]] = defaultdict(dict)
    +257        for priority_name, priority in self.stream_conditions_priorities.items():
    +258            for consumer_name, streams_conditions in priority.items():
    +259                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +260                    StreamConditions(
    +261                        name=stream_name,
    +262                        rate=TimeSeriesStreamDayRate(
    +263                            timesteps=variables_map.time_vector,
    +264                            values=list(
    +265                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +266                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +267                                )
    +268                            ),
    +269                            unit=stream_conditions.rate.unit,
    +270                        )
    +271                        if stream_conditions.rate is not None
    +272                        else None,
    +273                        pressure=TimeSeriesFloat(
    +274                            timesteps=variables_map.time_vector,
    +275                            values=list(
    +276                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +277                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +278                                )
    +279                            ),
    +280                            unit=stream_conditions.pressure.unit,
    +281                        )
    +282                        if stream_conditions.pressure is not None
    +283                        else None,
    +284                        fluid_density=TimeSeriesFloat(
    +285                            timesteps=variables_map.time_vector,
    +286                            values=list(
    +287                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +288                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +289                                )
    +290                            ),
    +291                            unit=stream_conditions.fluid_density.unit,
    +292                        )
    +293                        if stream_conditions.fluid_density is not None
    +294                        else None,
    +295                    )
    +296                    for stream_name, stream_conditions in streams_conditions.items()
    +297                ]
    +298        return dict(parsed_priorities)
    +299
    +300
    +301class GeneratorSet(BaseEquipment):
    +302    component_type: Literal[ComponentType.GENERATOR_SET] = ComponentType.GENERATOR_SET
    +303    fuel: Dict[datetime, FuelType]
    +304    generator_set_model: Dict[datetime, GeneratorSetSampled]
    +305    consumers: List[Union[ElectricityConsumer, ConsumerSystem]] = Field(default_factory=list)
    +306    _validate_genset_temporal_models = validator("generator_set_model", "fuel", allow_reuse=True)(
    +307        validate_temporal_model
    +308    )
    +309
    +310    @validator("user_defined_category", pre=True, always=True)
    +311    def check_mandatory_category_for_generator_set(cls, user_defined_category):
    +312        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +313        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +314        """
    +315        if user_defined_category is None or user_defined_category == "":
    +316            raise ValueError(f"CATEGORY is mandatory and must be set for {cls.__name__}")
    +317
    +318        return user_defined_category
    +319
    +320    def get_graph(self) -> ComponentGraph:
    +321        graph = ComponentGraph()
    +322        graph.add_node(self)
    +323        for electricity_consumer in self.consumers:
    +324            if hasattr(electricity_consumer, "get_graph"):
    +325                graph.add_subgraph(electricity_consumer.get_graph())
    +326            else:
    +327                graph.add_node(electricity_consumer)
    +328
    +329            graph.add_edge(self.id, electricity_consumer.id)
    +330
    +331        return graph
    +332
    +333
    +334class Installation(BaseComponent):
    +335    component_type = ComponentType.INSTALLATION
    +336    user_defined_category: Optional[InstallationUserDefinedCategoryType] = None
    +337    hydrocarbon_export: Dict[datetime, Expression]
    +338    fuel_consumers: List[Union[GeneratorSet, FuelConsumer, ConsumerSystem]] = Field(default_factory=list)
    +339    direct_emitters: List[DirectEmitter] = Field(default_factory=list)
    +340
    +341    @property
    +342    def id(self) -> str:
    +343        return generate_id(self.name)
    +344
    +345    _validate_installation_temporal_model = validator("hydrocarbon_export", allow_reuse=True)(validate_temporal_model)
    +346
    +347    _convert_expression_installation = validator("regularity", "hydrocarbon_export", allow_reuse=True, pre=True)(
    +348        convert_expression
    +349    )
    +350
    +351    @validator("user_defined_category", pre=True, always=True)
    +352    def check_user_defined_category(cls, user_defined_category, values):
    +353        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +354        if user_defined_category is not None:
    +355            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +356                name = ""
    +357                if values.get("name") is not None:
    +358                    name = f"with the name {values.get('name')}"
    +359
    +360                raise ValueError(
    +361                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +362                )
    +363
    +364        return user_defined_category
    +365
    +366    def get_graph(self) -> ComponentGraph:
    +367        graph = ComponentGraph()
    +368        graph.add_node(self)
    +369        for component in [*self.fuel_consumers, *self.direct_emitters]:
    +370            if hasattr(component, "get_graph"):
    +371                graph.add_subgraph(component.get_graph())
    +372            else:
    +373                graph.add_node(component)
    +374
    +375            graph.add_edge(self.id, component.id)
    +376
    +377        return graph
    +378
    +379
    +380class Asset(Component):
    +381    @property
    +382    def id(self):
    +383        return generate_id(self.component_type, self.name)
    +384
    +385    component_type: Literal[ComponentType.ASSET] = ComponentType.ASSET
    +386
    +387    name: ComponentNameStr
    +388    installations: List[Installation] = Field(default_factory=list)
    +389
    +390    @property
    +391    def installation_ids(self) -> List[str]:
    +392        return [installation.id for installation in self.installations]
    +393
    +394    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +395        installation = self.get_installation(installation_id)
    +396        component_ids = []
    +397        for fuel_consumer in installation.fuel_consumers:
    +398            component_ids.append(fuel_consumer.id)
    +399            if isinstance(fuel_consumer, dto.GeneratorSet):
    +400                for electricity_consumer in fuel_consumer.consumers:
    +401                    component_ids.append(electricity_consumer.id)
    +402
    +403        for emitter in installation.direct_emitters:
    +404            component_ids.append(emitter.id)
    +405        return component_ids
    +406
    +407    def get_installation(self, installation_id: str) -> Installation:
    +408        return next(installation for installation in self.installations if installation.id == installation_id)
    +409
    +410    @root_validator(skip_on_failure=True)
    +411    def validate_unique_names(cls, values):
    +412        """Ensure unique component names within installation."""
    +413        names = [values["name"]]
    +414        fuel_types = [dto.FuelType]
    +415        fuel_names = [str]
    +416        for installation in values["installations"]:
    +417            names.append(installation.name)
    +418            fuel_consumers = installation.fuel_consumers
    +419            direct_emitters = installation.direct_emitters
    +420
    +421            names.extend([direct_emitter.name for direct_emitter in direct_emitters])
    +422            for fuel_consumer in fuel_consumers:
    +423                names.append(fuel_consumer.name)
    +424                if isinstance(fuel_consumer, GeneratorSet):
    +425                    for electricity_consumer in fuel_consumer.consumers:
    +426                        if isinstance(electricity_consumer, ConsumerSystem):
    +427                            for consumer in electricity_consumer.consumers:
    +428                                names.append(consumer.name)
    +429                elif isinstance(fuel_consumer, ConsumerSystem):
    +430                    for consumer in fuel_consumer.consumers:
    +431                        names.append(consumer.name)
    +432                if fuel_consumer.fuel is not None:
    +433                    for fuel_type in fuel_consumer.fuel.values():
    +434                        # Need to verify that it is a different fuel
    +435                        if fuel_type is not None and fuel_type not in fuel_types:
    +436                            fuel_types.append(fuel_type)
    +437                            fuel_names.append(fuel_type.name)
    +438
    +439        duplicated_names = get_duplicates(names)
    +440        duplicated_fuel_names = get_duplicates(fuel_names)
    +441
    +442        if len(duplicated_names) > 0:
    +443            raise ValueError(
    +444                "Component names must be unique. Components include the main model, installations,"
    +445                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +446                f" Duplicated names are: {', '.join(duplicated_names)}"
    +447            )
    +448
    +449        if len(duplicated_fuel_names) > 0:
    +450            raise ValueError(
    +451                "Fuel type names must be unique across installations."
    +452                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +453            )
    +454        return values
    +455
    +456    def get_graph(self) -> ComponentGraph:
    +457        graph = ComponentGraph()
    +458        graph.add_node(self)
    +459        for installation in self.installations:
    +460            graph.add_subgraph(installation.get_graph())
    +461            graph.add_edge(self.id, installation.id)
    +462
    +463        return graph
    +464
    +465
    +466ComponentDTO = Union[
    +467    Asset,
    +468    Installation,
    +469    GeneratorSet,
    +470    FuelConsumer,
    +471    ElectricityConsumer,
    +472    ConsumerSystem,
    +473    CompressorComponent,
    +474    PumpComponent,
    +475]
    +
    + + +
    +
    + +
    + + def + check_model_energy_usage_type( model_data: Dict[datetime.datetime, libecalc.dto.models.base.ConsumerFunction], energy_type: libecalc.dto.types.EnergyUsageType): + + + +
    + +
    48def check_model_energy_usage_type(model_data: Dict[datetime, ConsumerFunction], energy_type: EnergyUsageType):
    +49    for model in model_data.values():
    +50        if model.energy_usage_type != energy_type:
    +51            raise ValueError(f"Model does not consume {energy_type}")
    +52    return model_data
    +
    + + + + +
    +
    + +
    + + class + BaseComponent(libecalc.dto.base.Component, abc.ABC): + + + +
    + +
    55class BaseComponent(Component, ABC):
    +56    name: ComponentNameStr
    +57
    +58    regularity: Dict[datetime, Expression]
    +59
    +60    _validate_base_temporal_model = validator("regularity", allow_reuse=True)(validate_temporal_model)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + BaseEquipment(BaseComponent, abc.ABC): + + + +
    + +
    63class BaseEquipment(BaseComponent, ABC):
    +64    user_defined_category: Dict[datetime, ConsumerUserDefinedCategoryType]
    +65
    +66    @property
    +67    def id(self) -> str:
    +68        return generate_id(self.name)
    +69
    +70    @validator("user_defined_category", pre=True, always=True)
    +71    def check_user_defined_category(cls, user_defined_category, values):
    +72        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +73        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    +74            for user_category in user_defined_category.values():
    +75                if user_category not in list(ConsumerUserDefinedCategoryType):
    +76                    name = ""
    +77                    if values.get("name") is not None:
    +78                        name = f"with the name {values.get('name')}"
    +79
    +80                    raise ValueError(
    +81                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    +82                    )
    +83
    +84        return user_defined_category
    +
    + + + + +
    + +
    +
    @validator('user_defined_category', pre=True, always=True)
    + + def + check_user_defined_category(cls, user_defined_category, values): + + + +
    + +
    70    @validator("user_defined_category", pre=True, always=True)
    +71    def check_user_defined_category(cls, user_defined_category, values):
    +72        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +73        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    +74            for user_category in user_defined_category.values():
    +75                if user_category not in list(ConsumerUserDefinedCategoryType):
    +76                    name = ""
    +77                    if values.get("name") is not None:
    +78                        name = f"with the name {values.get('name')}"
    +79
    +80                    raise ValueError(
    +81                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    +82                    )
    +83
    +84        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + BaseConsumer(BaseEquipment, abc.ABC): + + + +
    + +
     87class BaseConsumer(BaseEquipment, ABC):
    + 88    """Base class for all consumers."""
    + 89
    + 90    consumes: ConsumptionType
    + 91    fuel: Optional[Dict[datetime, FuelType]]
    + 92
    + 93    @validator("fuel")
    + 94    def validate_fuel_exist(cls, fuel, values):
    + 95        """
    + 96        Make sure fuel is set if consumption type is FUEL.
    + 97        """
    + 98        if values.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    + 99            msg = f"Missing fuel for fuel consumer '{values.get('name')}'"
    +100            raise ValueError(msg)
    +101        return fuel
    +
    + + +

    Base class for all consumers.

    +
    + + +
    + +
    +
    @validator('fuel')
    + + def + validate_fuel_exist(cls, fuel, values): + + + +
    + +
     93    @validator("fuel")
    + 94    def validate_fuel_exist(cls, fuel, values):
    + 95        """
    + 96        Make sure fuel is set if consumption type is FUEL.
    + 97        """
    + 98        if values.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    + 99            msg = f"Missing fuel for fuel consumer '{values.get('name')}'"
    +100            raise ValueError(msg)
    +101        return fuel
    +
    + + +

    Make sure fuel is set if consumption type is FUEL.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + ElectricityConsumer(BaseConsumer): + + + +
    + +
    104class ElectricityConsumer(BaseConsumer):
    +105    consumes: Literal[ConsumptionType.ELECTRICITY] = ConsumptionType.ELECTRICITY
    +106    energy_usage_model: Dict[
    +107        datetime,
    +108        ElectricEnergyUsageModel,
    +109    ]
    +110
    +111    _validate_el_consumer_temporal_model = validator("energy_usage_model", allow_reuse=True)(validate_temporal_model)
    +112
    +113    _check_model_energy_usage = validator("energy_usage_model", allow_reuse=True)(
    +114        lambda data: check_model_energy_usage_type(data, EnergyUsageType.POWER)
    +115    )
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + FuelConsumer(BaseConsumer): + + + +
    + +
    118class FuelConsumer(BaseConsumer):
    +119    consumes: Literal[ConsumptionType.FUEL] = ConsumptionType.FUEL
    +120    fuel: Dict[datetime, FuelType]
    +121    energy_usage_model: Dict[datetime, FuelEnergyUsageModel]
    +122
    +123    _validate_fuel_consumer_temporal_models = validator("energy_usage_model", "fuel", allow_reuse=True)(
    +124        validate_temporal_model
    +125    )
    +126
    +127    _check_model_energy_usage = validator("energy_usage_model", allow_reuse=True)(
    +128        lambda data: check_model_energy_usage_type(data, EnergyUsageType.FUEL)
    +129    )
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + EmitterModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    135class EmitterModel(EcalcBaseModel):
    +136    name: ComponentNameStr = ""  # This is not mandatory yet.
    +137    user_defined_category: str = ""  # This is not mandatory yet.
    +138    emission_rate: Expression
    +139    emission_quota: Expression
    +140
    +141    regularity: Dict[datetime, Expression]
    +142
    +143    _validate_emitter_model_temporal_model = validator("regularity", allow_reuse=True)(validate_temporal_model)
    +144
    +145    _default_emission_rate = validator("emission_rate", allow_reuse=True, pre=True)(convert_expression)
    +146    _default_emission_quota = validator("emission_quota", allow_reuse=True, pre=True)(convert_expression)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + DirectEmitter(BaseEquipment): + + + +
    + +
    149class DirectEmitter(BaseEquipment):
    +150    component_type = ComponentType.DIRECT_EMITTER
    +151    emission_name: EmissionNameStr
    +152    emitter_model: Dict[datetime, EmitterModel]
    +153
    +154    _validate_emitter_temporal_model = validator("emitter_model", allow_reuse=True)(validate_temporal_model)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + CompressorOperationalSettings(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    157class CompressorOperationalSettings(EcalcBaseModel):
    +158    rate: Expression
    +159    inlet_pressure: Expression
    +160    outlet_pressure: Expression
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PumpOperationalSettings(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    163class PumpOperationalSettings(EcalcBaseModel):
    +164    rate: Expression
    +165    inlet_pressure: Expression
    +166    outlet_pressure: Expression
    +167    fluid_density: Expression
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + CompressorComponent(BaseConsumer): + + + +
    + +
    170class CompressorComponent(BaseConsumer):
    +171    component_type: Literal[ComponentType.COMPRESSOR] = ComponentType.COMPRESSOR
    +172    energy_usage_model: Dict[datetime, CompressorModel]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + PumpComponent(BaseConsumer): + + + +
    + +
    175class PumpComponent(BaseConsumer):
    +176    component_type: Literal[ComponentType.PUMP] = ComponentType.PUMP
    +177    energy_usage_model: Dict[datetime, PumpModel]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + Stream(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    180class Stream(EcalcBaseModel):
    +181    class Config:
    +182        allow_population_by_field_name = True
    +183
    +184    stream_name: Optional[str] = Field(None)
    +185    from_component_id: str
    +186    to_component_id: str
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + Stream.Config: + + + +
    + +
    181    class Config:
    +182        allow_population_by_field_name = True
    +
    + + + + +
    +
    + +
    + + class + TrainComponent(BaseConsumer): + + + +
    + +
    192class TrainComponent(BaseConsumer):
    +193    component_type: Literal[ComponentType.TRAIN_V2] = Field(
    +194        ComponentType.TRAIN_V2,
    +195        title="TYPE",
    +196        description="The type of the component",
    +197        alias="TYPE",
    +198    )
    +199    stages: List[ConsumerComponent]
    +200    streams: List[Stream]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + ExpressionTimeSeries(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    203class ExpressionTimeSeries(EcalcBaseModel):
    +204    value: ExpressionType
    +205    unit: Unit
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ExpressionStreamConditions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    208class ExpressionStreamConditions(EcalcBaseModel):
    +209    rate: Optional[ExpressionTimeSeries] = None
    +210    pressure: Optional[ExpressionTimeSeries] = None
    +211    temperature: Optional[ExpressionTimeSeries] = None
    +212    fluid_density: Optional[ExpressionTimeSeries] = None
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + Crossover(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    222class Crossover(EcalcBaseModel):
    +223    class Config:
    +224        allow_population_by_field_name = True
    +225
    +226    stream_name: Optional[str] = Field(None)
    +227    from_component_id: str
    +228    to_component_id: str
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + Crossover.Config: + + + +
    + +
    181    class Config:
    +182        allow_population_by_field_name = True
    +
    + + + + +
    +
    + +
    + + class + SystemComponentConditions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    231class SystemComponentConditions(EcalcBaseModel):
    +232    crossover: List[Crossover]
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ConsumerSystem(BaseConsumer): + + + +
    + +
    235class ConsumerSystem(BaseConsumer):
    +236    component_type: Literal[ComponentType.CONSUMER_SYSTEM_V2] = Field(
    +237        ComponentType.CONSUMER_SYSTEM_V2,
    +238        title="TYPE",
    +239        description="The type of the component",
    +240        alias="TYPE",
    +241    )
    +242    component_conditions: SystemComponentConditions
    +243    stream_conditions_priorities: Priorities[SystemStreamConditions]
    +244    consumers: List[Union[CompressorComponent, PumpComponent]]
    +245
    +246    def get_graph(self) -> ComponentGraph:
    +247        graph = ComponentGraph()
    +248        graph.add_node(self)
    +249        for consumer in self.consumers:
    +250            graph.add_node(consumer)
    +251            graph.add_edge(self.id, consumer.id)
    +252        return graph
    +253
    +254    def evaluate_stream_conditions(
    +255        self, variables_map: VariablesMap
    +256    ) -> Priorities[Dict[ConsumerID, List[StreamConditions]]]:
    +257        parsed_priorities: Priorities[Dict[ConsumerID, List[StreamConditions]]] = defaultdict(dict)
    +258        for priority_name, priority in self.stream_conditions_priorities.items():
    +259            for consumer_name, streams_conditions in priority.items():
    +260                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +261                    StreamConditions(
    +262                        name=stream_name,
    +263                        rate=TimeSeriesStreamDayRate(
    +264                            timesteps=variables_map.time_vector,
    +265                            values=list(
    +266                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +267                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +268                                )
    +269                            ),
    +270                            unit=stream_conditions.rate.unit,
    +271                        )
    +272                        if stream_conditions.rate is not None
    +273                        else None,
    +274                        pressure=TimeSeriesFloat(
    +275                            timesteps=variables_map.time_vector,
    +276                            values=list(
    +277                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +278                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +279                                )
    +280                            ),
    +281                            unit=stream_conditions.pressure.unit,
    +282                        )
    +283                        if stream_conditions.pressure is not None
    +284                        else None,
    +285                        fluid_density=TimeSeriesFloat(
    +286                            timesteps=variables_map.time_vector,
    +287                            values=list(
    +288                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +289                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +290                                )
    +291                            ),
    +292                            unit=stream_conditions.fluid_density.unit,
    +293                        )
    +294                        if stream_conditions.fluid_density is not None
    +295                        else None,
    +296                    )
    +297                    for stream_name, stream_conditions in streams_conditions.items()
    +298                ]
    +299        return dict(parsed_priorities)
    +
    + + +

    Base class for all consumers.

    +
    + + +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    246    def get_graph(self) -> ComponentGraph:
    +247        graph = ComponentGraph()
    +248        graph.add_node(self)
    +249        for consumer in self.consumers:
    +250            graph.add_node(consumer)
    +251            graph.add_edge(self.id, consumer.id)
    +252        return graph
    +
    + + + + +
    +
    + +
    + + def + evaluate_stream_conditions( self, variables_map: libecalc.dto.variables.VariablesMap) -> Dict[str, Dict[str, List[libecalc.common.stream_conditions.StreamConditions]]]: + + + +
    + +
    254    def evaluate_stream_conditions(
    +255        self, variables_map: VariablesMap
    +256    ) -> Priorities[Dict[ConsumerID, List[StreamConditions]]]:
    +257        parsed_priorities: Priorities[Dict[ConsumerID, List[StreamConditions]]] = defaultdict(dict)
    +258        for priority_name, priority in self.stream_conditions_priorities.items():
    +259            for consumer_name, streams_conditions in priority.items():
    +260                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +261                    StreamConditions(
    +262                        name=stream_name,
    +263                        rate=TimeSeriesStreamDayRate(
    +264                            timesteps=variables_map.time_vector,
    +265                            values=list(
    +266                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +267                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +268                                )
    +269                            ),
    +270                            unit=stream_conditions.rate.unit,
    +271                        )
    +272                        if stream_conditions.rate is not None
    +273                        else None,
    +274                        pressure=TimeSeriesFloat(
    +275                            timesteps=variables_map.time_vector,
    +276                            values=list(
    +277                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +278                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +279                                )
    +280                            ),
    +281                            unit=stream_conditions.pressure.unit,
    +282                        )
    +283                        if stream_conditions.pressure is not None
    +284                        else None,
    +285                        fluid_density=TimeSeriesFloat(
    +286                            timesteps=variables_map.time_vector,
    +287                            values=list(
    +288                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +289                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +290                                )
    +291                            ),
    +292                            unit=stream_conditions.fluid_density.unit,
    +293                        )
    +294                        if stream_conditions.fluid_density is not None
    +295                        else None,
    +296                    )
    +297                    for stream_name, stream_conditions in streams_conditions.items()
    +298                ]
    +299        return dict(parsed_priorities)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + GeneratorSet(BaseEquipment): + + + +
    + +
    302class GeneratorSet(BaseEquipment):
    +303    component_type: Literal[ComponentType.GENERATOR_SET] = ComponentType.GENERATOR_SET
    +304    fuel: Dict[datetime, FuelType]
    +305    generator_set_model: Dict[datetime, GeneratorSetSampled]
    +306    consumers: List[Union[ElectricityConsumer, ConsumerSystem]] = Field(default_factory=list)
    +307    _validate_genset_temporal_models = validator("generator_set_model", "fuel", allow_reuse=True)(
    +308        validate_temporal_model
    +309    )
    +310
    +311    @validator("user_defined_category", pre=True, always=True)
    +312    def check_mandatory_category_for_generator_set(cls, user_defined_category):
    +313        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +314        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +315        """
    +316        if user_defined_category is None or user_defined_category == "":
    +317            raise ValueError(f"CATEGORY is mandatory and must be set for {cls.__name__}")
    +318
    +319        return user_defined_category
    +320
    +321    def get_graph(self) -> ComponentGraph:
    +322        graph = ComponentGraph()
    +323        graph.add_node(self)
    +324        for electricity_consumer in self.consumers:
    +325            if hasattr(electricity_consumer, "get_graph"):
    +326                graph.add_subgraph(electricity_consumer.get_graph())
    +327            else:
    +328                graph.add_node(electricity_consumer)
    +329
    +330            graph.add_edge(self.id, electricity_consumer.id)
    +331
    +332        return graph
    +
    + + + + +
    + +
    +
    @validator('user_defined_category', pre=True, always=True)
    + + def + check_mandatory_category_for_generator_set(cls, user_defined_category): + + + +
    + +
    311    @validator("user_defined_category", pre=True, always=True)
    +312    def check_mandatory_category_for_generator_set(cls, user_defined_category):
    +313        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +314        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +315        """
    +316        if user_defined_category is None or user_defined_category == "":
    +317            raise ValueError(f"CATEGORY is mandatory and must be set for {cls.__name__}")
    +318
    +319        return user_defined_category
    +
    + + +

    This could be handled automatically with Pydantic, but I want to inform the users in a better way, in +particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.

    +
    + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    321    def get_graph(self) -> ComponentGraph:
    +322        graph = ComponentGraph()
    +323        graph.add_node(self)
    +324        for electricity_consumer in self.consumers:
    +325            if hasattr(electricity_consumer, "get_graph"):
    +326                graph.add_subgraph(electricity_consumer.get_graph())
    +327            else:
    +328                graph.add_node(electricity_consumer)
    +329
    +330            graph.add_edge(self.id, electricity_consumer.id)
    +331
    +332        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + Installation(BaseComponent): + + + +
    + +
    335class Installation(BaseComponent):
    +336    component_type = ComponentType.INSTALLATION
    +337    user_defined_category: Optional[InstallationUserDefinedCategoryType] = None
    +338    hydrocarbon_export: Dict[datetime, Expression]
    +339    fuel_consumers: List[Union[GeneratorSet, FuelConsumer, ConsumerSystem]] = Field(default_factory=list)
    +340    direct_emitters: List[DirectEmitter] = Field(default_factory=list)
    +341
    +342    @property
    +343    def id(self) -> str:
    +344        return generate_id(self.name)
    +345
    +346    _validate_installation_temporal_model = validator("hydrocarbon_export", allow_reuse=True)(validate_temporal_model)
    +347
    +348    _convert_expression_installation = validator("regularity", "hydrocarbon_export", allow_reuse=True, pre=True)(
    +349        convert_expression
    +350    )
    +351
    +352    @validator("user_defined_category", pre=True, always=True)
    +353    def check_user_defined_category(cls, user_defined_category, values):
    +354        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +355        if user_defined_category is not None:
    +356            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +357                name = ""
    +358                if values.get("name") is not None:
    +359                    name = f"with the name {values.get('name')}"
    +360
    +361                raise ValueError(
    +362                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +363                )
    +364
    +365        return user_defined_category
    +366
    +367    def get_graph(self) -> ComponentGraph:
    +368        graph = ComponentGraph()
    +369        graph.add_node(self)
    +370        for component in [*self.fuel_consumers, *self.direct_emitters]:
    +371            if hasattr(component, "get_graph"):
    +372                graph.add_subgraph(component.get_graph())
    +373            else:
    +374                graph.add_node(component)
    +375
    +376            graph.add_edge(self.id, component.id)
    +377
    +378        return graph
    +
    + + + + +
    + +
    +
    @validator('user_defined_category', pre=True, always=True)
    + + def + check_user_defined_category(cls, user_defined_category, values): + + + +
    + +
    352    @validator("user_defined_category", pre=True, always=True)
    +353    def check_user_defined_category(cls, user_defined_category, values):
    +354        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +355        if user_defined_category is not None:
    +356            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +357                name = ""
    +358                if values.get("name") is not None:
    +359                    name = f"with the name {values.get('name')}"
    +360
    +361                raise ValueError(
    +362                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +363                )
    +364
    +365        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    367    def get_graph(self) -> ComponentGraph:
    +368        graph = ComponentGraph()
    +369        graph.add_node(self)
    +370        for component in [*self.fuel_consumers, *self.direct_emitters]:
    +371            if hasattr(component, "get_graph"):
    +372                graph.add_subgraph(component.get_graph())
    +373            else:
    +374                graph.add_node(component)
    +375
    +376            graph.add_edge(self.id, component.id)
    +377
    +378        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + Asset(libecalc.dto.base.Component): + + + +
    + +
    381class Asset(Component):
    +382    @property
    +383    def id(self):
    +384        return generate_id(self.component_type, self.name)
    +385
    +386    component_type: Literal[ComponentType.ASSET] = ComponentType.ASSET
    +387
    +388    name: ComponentNameStr
    +389    installations: List[Installation] = Field(default_factory=list)
    +390
    +391    @property
    +392    def installation_ids(self) -> List[str]:
    +393        return [installation.id for installation in self.installations]
    +394
    +395    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +396        installation = self.get_installation(installation_id)
    +397        component_ids = []
    +398        for fuel_consumer in installation.fuel_consumers:
    +399            component_ids.append(fuel_consumer.id)
    +400            if isinstance(fuel_consumer, dto.GeneratorSet):
    +401                for electricity_consumer in fuel_consumer.consumers:
    +402                    component_ids.append(electricity_consumer.id)
    +403
    +404        for emitter in installation.direct_emitters:
    +405            component_ids.append(emitter.id)
    +406        return component_ids
    +407
    +408    def get_installation(self, installation_id: str) -> Installation:
    +409        return next(installation for installation in self.installations if installation.id == installation_id)
    +410
    +411    @root_validator(skip_on_failure=True)
    +412    def validate_unique_names(cls, values):
    +413        """Ensure unique component names within installation."""
    +414        names = [values["name"]]
    +415        fuel_types = [dto.FuelType]
    +416        fuel_names = [str]
    +417        for installation in values["installations"]:
    +418            names.append(installation.name)
    +419            fuel_consumers = installation.fuel_consumers
    +420            direct_emitters = installation.direct_emitters
    +421
    +422            names.extend([direct_emitter.name for direct_emitter in direct_emitters])
    +423            for fuel_consumer in fuel_consumers:
    +424                names.append(fuel_consumer.name)
    +425                if isinstance(fuel_consumer, GeneratorSet):
    +426                    for electricity_consumer in fuel_consumer.consumers:
    +427                        if isinstance(electricity_consumer, ConsumerSystem):
    +428                            for consumer in electricity_consumer.consumers:
    +429                                names.append(consumer.name)
    +430                elif isinstance(fuel_consumer, ConsumerSystem):
    +431                    for consumer in fuel_consumer.consumers:
    +432                        names.append(consumer.name)
    +433                if fuel_consumer.fuel is not None:
    +434                    for fuel_type in fuel_consumer.fuel.values():
    +435                        # Need to verify that it is a different fuel
    +436                        if fuel_type is not None and fuel_type not in fuel_types:
    +437                            fuel_types.append(fuel_type)
    +438                            fuel_names.append(fuel_type.name)
    +439
    +440        duplicated_names = get_duplicates(names)
    +441        duplicated_fuel_names = get_duplicates(fuel_names)
    +442
    +443        if len(duplicated_names) > 0:
    +444            raise ValueError(
    +445                "Component names must be unique. Components include the main model, installations,"
    +446                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +447                f" Duplicated names are: {', '.join(duplicated_names)}"
    +448            )
    +449
    +450        if len(duplicated_fuel_names) > 0:
    +451            raise ValueError(
    +452                "Fuel type names must be unique across installations."
    +453                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +454            )
    +455        return values
    +456
    +457    def get_graph(self) -> ComponentGraph:
    +458        graph = ComponentGraph()
    +459        graph.add_node(self)
    +460        for installation in self.installations:
    +461            graph.add_subgraph(installation.get_graph())
    +462            graph.add_edge(self.id, installation.id)
    +463
    +464        return graph
    +
    + + + + +
    + +
    + + def + get_component_ids_for_installation_id(self, installation_id: str) -> List[str]: + + + +
    + +
    395    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +396        installation = self.get_installation(installation_id)
    +397        component_ids = []
    +398        for fuel_consumer in installation.fuel_consumers:
    +399            component_ids.append(fuel_consumer.id)
    +400            if isinstance(fuel_consumer, dto.GeneratorSet):
    +401                for electricity_consumer in fuel_consumer.consumers:
    +402                    component_ids.append(electricity_consumer.id)
    +403
    +404        for emitter in installation.direct_emitters:
    +405            component_ids.append(emitter.id)
    +406        return component_ids
    +
    + + + + +
    +
    + +
    + + def + get_installation(self, installation_id: str) -> libecalc.dto.components.Installation: + + + +
    + +
    408    def get_installation(self, installation_id: str) -> Installation:
    +409        return next(installation for installation in self.installations if installation.id == installation_id)
    +
    + + + + +
    +
    + +
    +
    @root_validator(skip_on_failure=True)
    + + def + validate_unique_names(cls, values): + + + +
    + +
    411    @root_validator(skip_on_failure=True)
    +412    def validate_unique_names(cls, values):
    +413        """Ensure unique component names within installation."""
    +414        names = [values["name"]]
    +415        fuel_types = [dto.FuelType]
    +416        fuel_names = [str]
    +417        for installation in values["installations"]:
    +418            names.append(installation.name)
    +419            fuel_consumers = installation.fuel_consumers
    +420            direct_emitters = installation.direct_emitters
    +421
    +422            names.extend([direct_emitter.name for direct_emitter in direct_emitters])
    +423            for fuel_consumer in fuel_consumers:
    +424                names.append(fuel_consumer.name)
    +425                if isinstance(fuel_consumer, GeneratorSet):
    +426                    for electricity_consumer in fuel_consumer.consumers:
    +427                        if isinstance(electricity_consumer, ConsumerSystem):
    +428                            for consumer in electricity_consumer.consumers:
    +429                                names.append(consumer.name)
    +430                elif isinstance(fuel_consumer, ConsumerSystem):
    +431                    for consumer in fuel_consumer.consumers:
    +432                        names.append(consumer.name)
    +433                if fuel_consumer.fuel is not None:
    +434                    for fuel_type in fuel_consumer.fuel.values():
    +435                        # Need to verify that it is a different fuel
    +436                        if fuel_type is not None and fuel_type not in fuel_types:
    +437                            fuel_types.append(fuel_type)
    +438                            fuel_names.append(fuel_type.name)
    +439
    +440        duplicated_names = get_duplicates(names)
    +441        duplicated_fuel_names = get_duplicates(fuel_names)
    +442
    +443        if len(duplicated_names) > 0:
    +444            raise ValueError(
    +445                "Component names must be unique. Components include the main model, installations,"
    +446                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +447                f" Duplicated names are: {', '.join(duplicated_names)}"
    +448            )
    +449
    +450        if len(duplicated_fuel_names) > 0:
    +451            raise ValueError(
    +452                "Fuel type names must be unique across installations."
    +453                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +454            )
    +455        return values
    +
    + + +

    Ensure unique component names within installation.

    +
    + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    457    def get_graph(self) -> ComponentGraph:
    +458        graph = ComponentGraph()
    +459        graph.add_node(self)
    +460        for installation in self.installations:
    +461            graph.add_subgraph(installation.get_graph())
    +462            graph.add_edge(self.id, installation.id)
    +463
    +464        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs.html b/docs/about/references/api/libecalc/dto/core_specs.html new file mode 100644 index 0000000000..75c0c28cad --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs.html @@ -0,0 +1,240 @@ + + + + + + + libecalc.dto.core_specs API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/base.html b/docs/about/references/api/libecalc/dto/core_specs/base.html new file mode 100644 index 0000000000..ab9718ee33 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/base.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.base

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html new file mode 100644 index 0000000000..2cabd31485 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html @@ -0,0 +1,332 @@ + + + + + + + libecalc.dto.core_specs.base.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.base.operational_settings

    + + + + + + +
     1from abc import ABC, abstractmethod
    + 2from datetime import datetime
    + 3
    + 4from typing_extensions import Self
    + 5
    + 6from libecalc.dto.base import EcalcBaseModel
    + 7
    + 8
    + 9class OperationalSettings(ABC, EcalcBaseModel):
    +10    @abstractmethod
    +11    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +12        ...
    +
    + + +
    +
    + +
    + + class + OperationalSettings(abc.ABC, libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    10class OperationalSettings(ABC, EcalcBaseModel):
    +11    @abstractmethod
    +12    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +13        ...
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    +
    @abstractmethod
    + + def + get_subset_for_timestep(self, timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    11    @abstractmethod
    +12    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +13        ...
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/compressor.html b/docs/about/references/api/libecalc/dto/core_specs/compressor.html new file mode 100644 index 0000000000..3d996554e2 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/compressor.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.compressor

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html new file mode 100644 index 0000000000..df313a7dec --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html @@ -0,0 +1,391 @@ + + + + + + + libecalc.dto.core_specs.compressor.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.compressor.operational_settings

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime
    + 4from typing import List
    + 5
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.stream_conditions import StreamConditions
    + 9from libecalc.dto.core_specs.base.operational_settings import OperationalSettings
    +10
    +11
    +12class CompressorOperationalSettings(OperationalSettings):
    +13    inlet_streams: List[StreamConditions]
    +14    outlet_stream: StreamConditions
    +15
    +16    timesteps: List[datetime]
    +17
    +18    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +19        """
    +20        For a given timestep, get the operational settings that is relevant
    +21        for that timestep only. Only valid for timesteps a part of the global timevector.
    +22        :param current_timestep: the timestep must be a part of the global timevector
    +23        :return:
    +24        """
    +25
    +26        return CompressorOperationalSettings(
    +27            inlet_streams=[
    +28                stream_condition.get_subset_for_timestep(current_timestep) for stream_condition in self.inlet_streams
    +29            ],
    +30            outlet_stream=self.outlet_stream.get_subset_for_timestep(current_timestep),
    +31            timesteps=[current_timestep],
    +32        )
    +
    + + +
    +
    + +
    + + class + CompressorOperationalSettings(libecalc.dto.core_specs.base.operational_settings.OperationalSettings): + + + +
    + +
    13class CompressorOperationalSettings(OperationalSettings):
    +14    inlet_streams: List[StreamConditions]
    +15    outlet_stream: StreamConditions
    +16
    +17    timesteps: List[datetime]
    +18
    +19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return CompressorOperationalSettings(
    +28            inlet_streams=[
    +29                stream_condition.get_subset_for_timestep(current_timestep) for stream_condition in self.inlet_streams
    +30            ],
    +31            outlet_stream=self.outlet_stream.get_subset_for_timestep(current_timestep),
    +32            timesteps=[current_timestep],
    +33        )
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + get_subset_for_timestep(self, current_timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return CompressorOperationalSettings(
    +28            inlet_streams=[
    +29                stream_condition.get_subset_for_timestep(current_timestep) for stream_condition in self.inlet_streams
    +30            ],
    +31            outlet_stream=self.outlet_stream.get_subset_for_timestep(current_timestep),
    +32            timesteps=[current_timestep],
    +33        )
    +
    + + +

    For a given timestep, get the operational settings that is relevant +for that timestep only. Only valid for timesteps a part of the global timevector.

    + +
    Parameters
    + +
      +
    • current_timestep: the timestep must be a part of the global timevector
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/pump.html b/docs/about/references/api/libecalc/dto/core_specs/pump.html new file mode 100644 index 0000000000..a1be5ff613 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/pump.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.pump API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.pump

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html new file mode 100644 index 0000000000..02799e621c --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html @@ -0,0 +1,391 @@ + + + + + + + libecalc.dto.core_specs.pump.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.pump.operational_settings

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime
    + 4from typing import List
    + 5
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.stream_conditions import StreamConditions
    + 9from libecalc.dto.core_specs.base.operational_settings import OperationalSettings
    +10
    +11
    +12class PumpOperationalSettings(OperationalSettings):
    +13    inlet_streams: List[StreamConditions]
    +14    outlet_stream: StreamConditions
    +15
    +16    timesteps: List[datetime]
    +17
    +18    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +19        """
    +20        For a given timestep, get the operational settings that is relevant
    +21        for that timestep only. Only valid for timesteps a part of the global timevector.
    +22        :param current_timestep: the timestep must be a part of the global timevector
    +23        :return:
    +24        """
    +25
    +26        return PumpOperationalSettings(
    +27            inlet_streams=[
    +28                stream_condition.get_subset_for_timestep(current_timestep) for stream_condition in self.inlet_streams
    +29            ],
    +30            outlet_stream=self.outlet_stream.get_subset_for_timestep(current_timestep),
    +31            timesteps=[current_timestep],
    +32        )
    +
    + + +
    +
    + +
    + + class + PumpOperationalSettings(libecalc.dto.core_specs.base.operational_settings.OperationalSettings): + + + +
    + +
    13class PumpOperationalSettings(OperationalSettings):
    +14    inlet_streams: List[StreamConditions]
    +15    outlet_stream: StreamConditions
    +16
    +17    timesteps: List[datetime]
    +18
    +19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return PumpOperationalSettings(
    +28            inlet_streams=[
    +29                stream_condition.get_subset_for_timestep(current_timestep) for stream_condition in self.inlet_streams
    +30            ],
    +31            outlet_stream=self.outlet_stream.get_subset_for_timestep(current_timestep),
    +32            timesteps=[current_timestep],
    +33        )
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + get_subset_for_timestep(self, current_timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return PumpOperationalSettings(
    +28            inlet_streams=[
    +29                stream_condition.get_subset_for_timestep(current_timestep) for stream_condition in self.inlet_streams
    +30            ],
    +31            outlet_stream=self.outlet_stream.get_subset_for_timestep(current_timestep),
    +32            timesteps=[current_timestep],
    +33        )
    +
    + + +

    For a given timestep, get the operational settings that is relevant +for that timestep only. Only valid for timesteps a part of the global timevector.

    + +
    Parameters
    + +
      +
    • current_timestep: the timestep must be a part of the global timevector
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/system.html b/docs/about/references/api/libecalc/dto/core_specs/system.html new file mode 100644 index 0000000000..4fff21cb13 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/system.html @@ -0,0 +1,233 @@ + + + + + + + libecalc.dto.core_specs.system API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.system

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/ecalc_model.html b/docs/about/references/api/libecalc/dto/ecalc_model.html new file mode 100644 index 0000000000..ad737c6503 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/ecalc_model.html @@ -0,0 +1,304 @@ + + + + + + + libecalc.dto.ecalc_model API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.ecalc_model

    + + + + + + +
     1from typing import List
    + 2
    + 3from pydantic import Field
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6
    + 7
    + 8class SchemaSettings(EcalcBaseModel):
    + 9    uri: str
    +10    fileMatch: List[str]
    +11    ecalc_schema: dict = Field(alias="schema")
    +
    + + +
    +
    + +
    + + class + SchemaSettings(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     9class SchemaSettings(EcalcBaseModel):
    +10    uri: str
    +11    fileMatch: List[str]
    +12    ecalc_schema: dict = Field(alias="schema")
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/emission.html b/docs/about/references/api/libecalc/dto/emission.html new file mode 100644 index 0000000000..06874d82c6 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/emission.html @@ -0,0 +1,350 @@ + + + + + + + libecalc.dto.emission API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.emission

    + + + + + + +
     1from typing import Optional
    + 2
    + 3from pydantic import validator
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6from libecalc.dto.utils.validators import EmissionNameStr, convert_expression
    + 7from libecalc.expression import Expression
    + 8
    + 9
    +10class Emission(EcalcBaseModel):
    +11    """As with fuel, the predictive models of cost and fees for emissions will change."""
    +12
    +13    name: EmissionNameStr
    +14    factor: Expression  # Conversion factor for kg/day, i.e. fuel rate * factor -> kg/day
    +15    tax: Optional[Expression]
    +16    quota: Optional[Expression]
    +17
    +18    _convert_expression = validator("factor", "tax", "quota", allow_reuse=True, pre=True)(convert_expression)
    +19
    +20    @validator("name", pre=True)
    +21    def convert_name(cls, name):
    +22        return name.lower()
    +
    + + +
    +
    + +
    + + class + Emission(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    11class Emission(EcalcBaseModel):
    +12    """As with fuel, the predictive models of cost and fees for emissions will change."""
    +13
    +14    name: EmissionNameStr
    +15    factor: Expression  # Conversion factor for kg/day, i.e. fuel rate * factor -> kg/day
    +16    tax: Optional[Expression]
    +17    quota: Optional[Expression]
    +18
    +19    _convert_expression = validator("factor", "tax", "quota", allow_reuse=True, pre=True)(convert_expression)
    +20
    +21    @validator("name", pre=True)
    +22    def convert_name(cls, name):
    +23        return name.lower()
    +
    + + +

    As with fuel, the predictive models of cost and fees for emissions will change.

    +
    + + +
    + +
    +
    @validator('name', pre=True)
    + + def + convert_name(cls, name): + + + +
    + +
    21    @validator("name", pre=True)
    +22    def convert_name(cls, name):
    +23        return name.lower()
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models.html b/docs/about/references/api/libecalc/dto/models.html new file mode 100644 index 0000000000..f1715b24e2 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models.html @@ -0,0 +1,320 @@ + + + + + + + libecalc.dto.models API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models

    + + + + + + +
     1from typing import Union
    + 2
    + 3from libecalc.dto.models.compressor import (
    + 4    CompressorChart,
    + 5    CompressorConsumerFunction,
    + 6    CompressorModel,
    + 7    CompressorSampled,
    + 8    CompressorStage,
    + 9    CompressorTrainSimplifiedWithKnownStages,
    +10    CompressorTrainSimplifiedWithUnknownStages,
    +11    CompressorWithTurbine,
    +12    FluidComposition,
    +13    FluidModel,
    +14    FluidStream,
    +15    InterstagePressureControl,
    +16    MultipleStreamsAndPressureStream,
    +17    MultipleStreamsCompressorStage,
    +18    SingleSpeedCompressorTrain,
    +19    VariableSpeedCompressorTrain,
    +20    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +21)
    +22
    +23from .base import ConsumerFunction, EnergyModel
    +24from .chart import (
    +25    ChartCurve,
    +26    GenericChartFromDesignPoint,
    +27    GenericChartFromInput,
    +28    SingleSpeedChart,
    +29    VariableSpeedChart,
    +30)
    +31from .consumer_system import (
    +32    CompressorSystemCompressor,
    +33    CompressorSystemConsumerFunction,
    +34    CompressorSystemOperationalSetting,
    +35    PumpSystemConsumerFunction,
    +36    PumpSystemOperationalSetting,
    +37    PumpSystemPump,
    +38    SystemOperationalSetting,
    +39)
    +40from .direct import DirectConsumerFunction
    +41from .generator_set import GeneratorSetSampled
    +42from .pump import PumpConsumerFunction, PumpModel
    +43from .sampled import EnergyModelSampled
    +44from .tabulated import TabulatedConsumerFunction, TabulatedData, Variables
    +45from .turbine import Turbine
    +46
    +47ElectricEnergyUsageModel = Union[
    +48    DirectConsumerFunction,
    +49    CompressorConsumerFunction,
    +50    CompressorSystemConsumerFunction,
    +51    PumpConsumerFunction,
    +52    TabulatedConsumerFunction,
    +53    PumpSystemConsumerFunction,
    +54]
    +55
    +56FuelEnergyUsageModel = Union[
    +57    DirectConsumerFunction,
    +58    CompressorConsumerFunction,
    +59    CompressorSystemConsumerFunction,
    +60    TabulatedConsumerFunction,
    +61]
    +62
    +63EnergyUsageModel = Union[
    +64    FuelEnergyUsageModel,
    +65    ElectricEnergyUsageModel,
    +66]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/base.html b/docs/about/references/api/libecalc/dto/models/base.html new file mode 100644 index 0000000000..d45dfdc7d6 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/base.html @@ -0,0 +1,433 @@ + + + + + + + libecalc.dto.models.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.base

    + + + + + + +
     1from typing import Optional
    + 2
    + 3from pydantic import validator
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6from libecalc.dto.types import ConsumerType, EnergyUsageType
    + 7from libecalc.dto.utils.validators import convert_expression
    + 8from libecalc.expression import Expression
    + 9
    +10
    +11class ConsumerFunction(EcalcBaseModel):
    +12    typ: ConsumerType
    +13    energy_usage_type: EnergyUsageType
    +14    condition: Optional[Expression]
    +15
    +16    _convert_condition_to_expression = validator("condition", allow_reuse=True, pre=True)(convert_expression)
    +17
    +18    class Config:
    +19        use_enum_values = True
    +20
    +21
    +22class EnergyModel(EcalcBaseModel):
    +23    """Generic/template/protocol. Only for sub classing, not direct use."""
    +24
    +25    energy_usage_adjustment_constant: float
    +26    energy_usage_adjustment_factor: float
    +27
    +28    class Config:
    +29        use_enum_values = True
    +
    + + +
    +
    + +
    + + class + ConsumerFunction(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    12class ConsumerFunction(EcalcBaseModel):
    +13    typ: ConsumerType
    +14    energy_usage_type: EnergyUsageType
    +15    condition: Optional[Expression]
    +16
    +17    _convert_condition_to_expression = validator("condition", allow_reuse=True, pre=True)(convert_expression)
    +18
    +19    class Config:
    +20        use_enum_values = True
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ConsumerFunction.Config: + + + +
    + +
    19    class Config:
    +20        use_enum_values = True
    +
    + + + + +
    +
    + +
    + + class + EnergyModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    23class EnergyModel(EcalcBaseModel):
    +24    """Generic/template/protocol. Only for sub classing, not direct use."""
    +25
    +26    energy_usage_adjustment_constant: float
    +27    energy_usage_adjustment_factor: float
    +28
    +29    class Config:
    +30        use_enum_values = True
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + EnergyModel.Config: + + + +
    + +
    19    class Config:
    +20        use_enum_values = True
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/chart.html b/docs/about/references/api/libecalc/dto/models/chart.html new file mode 100644 index 0000000000..c4261d82cb --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/chart.html @@ -0,0 +1,870 @@ + + + + + + + libecalc.dto.models.chart API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.chart

    + + + + + + +
      1from typing import Any, Dict, List, Literal, Optional
    +  2
    +  3import numpy as np
    +  4from pydantic import Field, confloat, root_validator, validator
    +  5
    +  6from libecalc.common.logger import logger
    +  7from libecalc.common.math.numbers import Numbers
    +  8from libecalc.dto.base import EcalcBaseModel
    +  9from libecalc.dto.types import ChartType
    + 10
    + 11
    + 12class ChartCurve(EcalcBaseModel):
    + 13    speed_rpm: float = Field(..., ge=0)
    + 14    rate_actual_m3_hour: List[confloat(ge=0)]  # type: ignore
    + 15    polytropic_head_joule_per_kg: List[confloat(ge=0)]  # type: ignore
    + 16    efficiency_fraction: List[confloat(ge=0, le=1)]  # type: ignore
    + 17
    + 18    @validator("*", pre=True, each_item=True)
    + 19    def control_maximum_decimals(cls, v: float) -> float:
    + 20        """Control maximum number of decimals and convert null-floats to NaN."""
    + 21        if isinstance(v, float):
    + 22            if v.is_integer():
    + 23                return v
    + 24
    + 25            return float(Numbers.format_to_precision(v, precision=6))
    + 26
    + 27        return v
    + 28
    + 29    @root_validator(skip_on_failure=True)
    + 30    def validate_equal_lengths_and_sort(cls, v: Dict[str, Any]) -> Any:
    + 31        rate = v["rate_actual_m3_hour"]
    + 32        head = v["polytropic_head_joule_per_kg"]
    + 33        efficiency = v["efficiency_fraction"]
    + 34
    + 35        if not len(rate) == len(head) == len(efficiency):
    + 36            raise ValueError("All chart curve data must have equal number of points")
    + 37
    + 38        if not len(rate) > 1:
    + 39            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    + 40
    + 41        # Sort all values by rate
    + 42        array = np.asarray([rate, head, efficiency]).T
    + 43        array_sorted = array[array[:, 0].argsort()]
    + 44
    + 45        v["rate_actual_m3_hour"] = list(array_sorted[:, 0])
    + 46        v["polytropic_head_joule_per_kg"] = list(array_sorted[:, 1])
    + 47        v["efficiency_fraction"] = list(array_sorted[:, 2])
    + 48
    + 49        if len(set(v["rate_actual_m3_hour"])) != len(v["rate_actual_m3_hour"]):
    + 50            duplicate_rates = {x for x in v["rate_actual_m3_hour"] if v["rate_actual_m3_hour"].count(x) > 1}
    + 51            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    + 52
    + 53        if not np.all(np.diff(np.asarray(v["polytropic_head_joule_per_kg"])) <= 0):
    + 54            heads = v["polytropic_head_joule_per_kg"]
    + 55            rates = v["rate_actual_m3_hour"]
    + 56            logger.warning(
    + 57                "Head is increasing with rate in a ChartCurve."
    + 58                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    + 59                f" Given head values: {heads}"
    + 60                f" Given rate values: {rates}"
    + 61            )
    + 62
    + 63        return v
    + 64
    + 65    @property
    + 66    def rate(self) -> List[float]:
    + 67        return self.rate_actual_m3_hour
    + 68
    + 69    @property
    + 70    def head(self) -> List[float]:
    + 71        return self.polytropic_head_joule_per_kg
    + 72
    + 73    @property
    + 74    def efficiency(self) -> List[float]:
    + 75        return self.efficiency_fraction
    + 76
    + 77    @property
    + 78    def speed(self) -> float:
    + 79        return self.speed_rpm
    + 80
    + 81
    + 82class SingleSpeedChart(ChartCurve):
    + 83    typ: Literal[ChartType.SINGLE_SPEED] = ChartType.SINGLE_SPEED
    + 84
    + 85
    + 86class VariableSpeedChart(EcalcBaseModel):
    + 87    typ: Literal[ChartType.VARIABLE_SPEED] = ChartType.VARIABLE_SPEED
    + 88    curves: List[ChartCurve]
    + 89    control_margin: Optional[float]  # Todo: Raise warning if this is used in an un-supported model.
    + 90    design_rate: Optional[float] = Field(None, ge=0)
    + 91    design_head: Optional[float] = Field(None, ge=0)
    + 92
    + 93    @validator("*", pre=True, each_item=True)
    + 94    def control_maximum_decimals(cls, v: float) -> float:
    + 95        """Control maximum number of decimals and convert null-floats to NaN."""
    + 96        if isinstance(v, float):
    + 97            if v.is_integer():
    + 98                return v
    + 99
    +100            return float(Numbers.format_to_precision(v, precision=6))
    +101
    +102        return v
    +103
    +104    @validator("curves", pre=False)
    +105    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    +106        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    +107        return sorted(curves, key=lambda x: x.speed)
    +108
    +109    @property
    +110    def min_speed(self) -> float:
    +111        return min([curve.speed for curve in self.curves])
    +112
    +113    @property
    +114    def max_speed(self) -> float:
    +115        return max([curve.speed for curve in self.curves])
    +116
    +117
    +118class GenericChartFromDesignPoint(EcalcBaseModel):
    +119    typ: Literal[ChartType.GENERIC_FROM_DESIGN_POINT.value] = ChartType.GENERIC_FROM_DESIGN_POINT
    +120    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +121    design_rate_actual_m3_per_hour: float = Field(..., ge=0)
    +122    design_polytropic_head_J_per_kg: float = Field(..., ge=0)
    +123
    +124
    +125class GenericChartFromInput(EcalcBaseModel):
    +126    typ: Literal[ChartType.GENERIC_FROM_INPUT] = ChartType.GENERIC_FROM_INPUT
    +127    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +
    + + +
    +
    + +
    + + class + ChartCurve(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    13class ChartCurve(EcalcBaseModel):
    +14    speed_rpm: float = Field(..., ge=0)
    +15    rate_actual_m3_hour: List[confloat(ge=0)]  # type: ignore
    +16    polytropic_head_joule_per_kg: List[confloat(ge=0)]  # type: ignore
    +17    efficiency_fraction: List[confloat(ge=0, le=1)]  # type: ignore
    +18
    +19    @validator("*", pre=True, each_item=True)
    +20    def control_maximum_decimals(cls, v: float) -> float:
    +21        """Control maximum number of decimals and convert null-floats to NaN."""
    +22        if isinstance(v, float):
    +23            if v.is_integer():
    +24                return v
    +25
    +26            return float(Numbers.format_to_precision(v, precision=6))
    +27
    +28        return v
    +29
    +30    @root_validator(skip_on_failure=True)
    +31    def validate_equal_lengths_and_sort(cls, v: Dict[str, Any]) -> Any:
    +32        rate = v["rate_actual_m3_hour"]
    +33        head = v["polytropic_head_joule_per_kg"]
    +34        efficiency = v["efficiency_fraction"]
    +35
    +36        if not len(rate) == len(head) == len(efficiency):
    +37            raise ValueError("All chart curve data must have equal number of points")
    +38
    +39        if not len(rate) > 1:
    +40            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    +41
    +42        # Sort all values by rate
    +43        array = np.asarray([rate, head, efficiency]).T
    +44        array_sorted = array[array[:, 0].argsort()]
    +45
    +46        v["rate_actual_m3_hour"] = list(array_sorted[:, 0])
    +47        v["polytropic_head_joule_per_kg"] = list(array_sorted[:, 1])
    +48        v["efficiency_fraction"] = list(array_sorted[:, 2])
    +49
    +50        if len(set(v["rate_actual_m3_hour"])) != len(v["rate_actual_m3_hour"]):
    +51            duplicate_rates = {x for x in v["rate_actual_m3_hour"] if v["rate_actual_m3_hour"].count(x) > 1}
    +52            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    +53
    +54        if not np.all(np.diff(np.asarray(v["polytropic_head_joule_per_kg"])) <= 0):
    +55            heads = v["polytropic_head_joule_per_kg"]
    +56            rates = v["rate_actual_m3_hour"]
    +57            logger.warning(
    +58                "Head is increasing with rate in a ChartCurve."
    +59                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    +60                f" Given head values: {heads}"
    +61                f" Given rate values: {rates}"
    +62            )
    +63
    +64        return v
    +65
    +66    @property
    +67    def rate(self) -> List[float]:
    +68        return self.rate_actual_m3_hour
    +69
    +70    @property
    +71    def head(self) -> List[float]:
    +72        return self.polytropic_head_joule_per_kg
    +73
    +74    @property
    +75    def efficiency(self) -> List[float]:
    +76        return self.efficiency_fraction
    +77
    +78    @property
    +79    def speed(self) -> float:
    +80        return self.speed_rpm
    +
    + + + + +
    + +
    +
    @validator('*', pre=True, each_item=True)
    + + def + control_maximum_decimals(cls, v: float) -> float: + + + +
    + +
    19    @validator("*", pre=True, each_item=True)
    +20    def control_maximum_decimals(cls, v: float) -> float:
    +21        """Control maximum number of decimals and convert null-floats to NaN."""
    +22        if isinstance(v, float):
    +23            if v.is_integer():
    +24                return v
    +25
    +26            return float(Numbers.format_to_precision(v, precision=6))
    +27
    +28        return v
    +
    + + +

    Control maximum number of decimals and convert null-floats to NaN.

    +
    + + +
    +
    + +
    +
    @root_validator(skip_on_failure=True)
    + + def + validate_equal_lengths_and_sort(cls, v: Dict[str, Any]) -> Any: + + + +
    + +
    30    @root_validator(skip_on_failure=True)
    +31    def validate_equal_lengths_and_sort(cls, v: Dict[str, Any]) -> Any:
    +32        rate = v["rate_actual_m3_hour"]
    +33        head = v["polytropic_head_joule_per_kg"]
    +34        efficiency = v["efficiency_fraction"]
    +35
    +36        if not len(rate) == len(head) == len(efficiency):
    +37            raise ValueError("All chart curve data must have equal number of points")
    +38
    +39        if not len(rate) > 1:
    +40            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    +41
    +42        # Sort all values by rate
    +43        array = np.asarray([rate, head, efficiency]).T
    +44        array_sorted = array[array[:, 0].argsort()]
    +45
    +46        v["rate_actual_m3_hour"] = list(array_sorted[:, 0])
    +47        v["polytropic_head_joule_per_kg"] = list(array_sorted[:, 1])
    +48        v["efficiency_fraction"] = list(array_sorted[:, 2])
    +49
    +50        if len(set(v["rate_actual_m3_hour"])) != len(v["rate_actual_m3_hour"]):
    +51            duplicate_rates = {x for x in v["rate_actual_m3_hour"] if v["rate_actual_m3_hour"].count(x) > 1}
    +52            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    +53
    +54        if not np.all(np.diff(np.asarray(v["polytropic_head_joule_per_kg"])) <= 0):
    +55            heads = v["polytropic_head_joule_per_kg"]
    +56            rates = v["rate_actual_m3_hour"]
    +57            logger.warning(
    +58                "Head is increasing with rate in a ChartCurve."
    +59                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    +60                f" Given head values: {heads}"
    +61                f" Given rate values: {rates}"
    +62            )
    +63
    +64        return v
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + SingleSpeedChart(ChartCurve): + + + +
    + +
    83class SingleSpeedChart(ChartCurve):
    +84    typ: Literal[ChartType.SINGLE_SPEED] = ChartType.SINGLE_SPEED
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + VariableSpeedChart(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     87class VariableSpeedChart(EcalcBaseModel):
    + 88    typ: Literal[ChartType.VARIABLE_SPEED] = ChartType.VARIABLE_SPEED
    + 89    curves: List[ChartCurve]
    + 90    control_margin: Optional[float]  # Todo: Raise warning if this is used in an un-supported model.
    + 91    design_rate: Optional[float] = Field(None, ge=0)
    + 92    design_head: Optional[float] = Field(None, ge=0)
    + 93
    + 94    @validator("*", pre=True, each_item=True)
    + 95    def control_maximum_decimals(cls, v: float) -> float:
    + 96        """Control maximum number of decimals and convert null-floats to NaN."""
    + 97        if isinstance(v, float):
    + 98            if v.is_integer():
    + 99                return v
    +100
    +101            return float(Numbers.format_to_precision(v, precision=6))
    +102
    +103        return v
    +104
    +105    @validator("curves", pre=False)
    +106    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    +107        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    +108        return sorted(curves, key=lambda x: x.speed)
    +109
    +110    @property
    +111    def min_speed(self) -> float:
    +112        return min([curve.speed for curve in self.curves])
    +113
    +114    @property
    +115    def max_speed(self) -> float:
    +116        return max([curve.speed for curve in self.curves])
    +
    + + + + +
    + +
    +
    @validator('*', pre=True, each_item=True)
    + + def + control_maximum_decimals(cls, v: float) -> float: + + + +
    + +
     94    @validator("*", pre=True, each_item=True)
    + 95    def control_maximum_decimals(cls, v: float) -> float:
    + 96        """Control maximum number of decimals and convert null-floats to NaN."""
    + 97        if isinstance(v, float):
    + 98            if v.is_integer():
    + 99                return v
    +100
    +101            return float(Numbers.format_to_precision(v, precision=6))
    +102
    +103        return v
    +
    + + +

    Control maximum number of decimals and convert null-floats to NaN.

    +
    + + +
    +
    + +
    +
    @validator('curves', pre=False)
    + + def + sort_chart_curves_by_speed( cls, curves: List[libecalc.dto.models.chart.ChartCurve]) -> List[libecalc.dto.models.chart.ChartCurve]: + + + +
    + +
    105    @validator("curves", pre=False)
    +106    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    +107        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    +108        return sorted(curves, key=lambda x: x.speed)
    +
    + + +

    Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + GenericChartFromDesignPoint(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    119class GenericChartFromDesignPoint(EcalcBaseModel):
    +120    typ: Literal[ChartType.GENERIC_FROM_DESIGN_POINT.value] = ChartType.GENERIC_FROM_DESIGN_POINT
    +121    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +122    design_rate_actual_m3_per_hour: float = Field(..., ge=0)
    +123    design_polytropic_head_J_per_kg: float = Field(..., ge=0)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + GenericChartFromInput(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    126class GenericChartFromInput(EcalcBaseModel):
    +127    typ: Literal[ChartType.GENERIC_FROM_INPUT] = ChartType.GENERIC_FROM_INPUT
    +128    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor.html b/docs/about/references/api/libecalc/dto/models/compressor.html new file mode 100644 index 0000000000..ff82c1c93d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor.html @@ -0,0 +1,283 @@ + + + + + + + libecalc.dto.models.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor

    + + + + + + +
     1from typing import Union
    + 2
    + 3from .base import CompressorConsumerFunction, CompressorWithTurbine
    + 4from .chart import CompressorChart
    + 5from .fluid import (
    + 6    FluidComposition,
    + 7    FluidModel,
    + 8    FluidStream,
    + 9    MultipleStreamsAndPressureStream,
    +10)
    +11from .sampled import CompressorSampled
    +12from .stage import (
    +13    CompressorStage,
    +14    InterstagePressureControl,
    +15    MultipleStreamsCompressorStage,
    +16)
    +17from .train import (
    +18    CompressorTrainSimplifiedWithKnownStages,
    +19    CompressorTrainSimplifiedWithUnknownStages,
    +20    SingleSpeedCompressorTrain,
    +21    VariableSpeedCompressorTrain,
    +22    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +23)
    +24
    +25CompressorModel = Union[
    +26    CompressorSampled,
    +27    CompressorTrainSimplifiedWithUnknownStages,
    +28    CompressorTrainSimplifiedWithKnownStages,
    +29    CompressorWithTurbine,
    +30    VariableSpeedCompressorTrain,
    +31    SingleSpeedCompressorTrain,
    +32    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +33]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/base.html b/docs/about/references/api/libecalc/dto/models/compressor/base.html new file mode 100644 index 0000000000..0d69d9cd73 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/base.html @@ -0,0 +1,449 @@ + + + + + + + libecalc.dto.models.compressor.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.base

    + + + + + + +
     1from typing import List, Literal, Optional, Union
    + 2
    + 3from pydantic import Field, validator
    + 4
    + 5from libecalc.dto.models.base import ConsumerFunction, EnergyModel
    + 6from libecalc.dto.models.compressor.sampled import CompressorSampled
    + 7from libecalc.dto.models.compressor.train import (
    + 8    CompressorTrainSimplifiedWithKnownStages,
    + 9    CompressorTrainSimplifiedWithUnknownStages,
    +10    SingleSpeedCompressorTrain,
    +11    VariableSpeedCompressorTrain,
    +12    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +13)
    +14from libecalc.dto.models.turbine import Turbine
    +15from libecalc.dto.types import ConsumerType, EnergyModelType
    +16from libecalc.dto.utils.validators import convert_expression, convert_expressions
    +17from libecalc.expression import Expression
    +18
    +19
    +20class CompressorWithTurbine(EnergyModel):
    +21    typ: Literal[EnergyModelType.COMPRESSOR_WITH_TURBINE] = EnergyModelType.COMPRESSOR_WITH_TURBINE
    +22    compressor_train: Union[
    +23        CompressorSampled,
    +24        CompressorTrainSimplifiedWithKnownStages,
    +25        CompressorTrainSimplifiedWithUnknownStages,
    +26        SingleSpeedCompressorTrain,
    +27        VariableSpeedCompressorTrain,
    +28        VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +29    ] = Field(..., discriminator="typ")
    +30    turbine: Turbine
    +31
    +32
    +33CompressorModel = Union[
    +34    CompressorSampled,
    +35    CompressorTrainSimplifiedWithUnknownStages,
    +36    CompressorTrainSimplifiedWithKnownStages,
    +37    CompressorWithTurbine,
    +38    VariableSpeedCompressorTrain,
    +39    SingleSpeedCompressorTrain,
    +40    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +41]
    +42
    +43
    +44class CompressorConsumerFunction(ConsumerFunction):
    +45    typ: Literal[ConsumerType.COMPRESSOR] = ConsumerType.COMPRESSOR
    +46    power_loss_factor: Optional[Expression]
    +47    model: CompressorModel = Field(..., discriminator="typ")
    +48    rate_standard_m3_day: Union[Expression, List[Expression]]
    +49    suction_pressure: Optional[Expression]
    +50    discharge_pressure: Optional[Expression]
    +51    interstage_control_pressure: Optional[Expression]
    +52    # Todo: add pressure_control_first_part, pressure_control_last_part and stage_number_interstage_pressure
    +53    # TODO: validate power loss factor wrt energy usage type
    +54    # validate energy function has the same energy_usage_type
    +55
    +56    _convert_expressions = validator(
    +57        "suction_pressure",
    +58        "discharge_pressure",
    +59        "power_loss_factor",
    +60        "interstage_control_pressure",
    +61        allow_reuse=True,
    +62        pre=True,
    +63    )(convert_expression)
    +64    _convert_rate_expressions = validator(
    +65        "rate_standard_m3_day",
    +66        allow_reuse=True,
    +67        pre=True,
    +68    )(convert_expressions)
    +
    + + +
    +
    + +
    + + class + CompressorWithTurbine(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    21class CompressorWithTurbine(EnergyModel):
    +22    typ: Literal[EnergyModelType.COMPRESSOR_WITH_TURBINE] = EnergyModelType.COMPRESSOR_WITH_TURBINE
    +23    compressor_train: Union[
    +24        CompressorSampled,
    +25        CompressorTrainSimplifiedWithKnownStages,
    +26        CompressorTrainSimplifiedWithUnknownStages,
    +27        SingleSpeedCompressorTrain,
    +28        VariableSpeedCompressorTrain,
    +29        VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +30    ] = Field(..., discriminator="typ")
    +31    turbine: Turbine
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + CompressorConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    45class CompressorConsumerFunction(ConsumerFunction):
    +46    typ: Literal[ConsumerType.COMPRESSOR] = ConsumerType.COMPRESSOR
    +47    power_loss_factor: Optional[Expression]
    +48    model: CompressorModel = Field(..., discriminator="typ")
    +49    rate_standard_m3_day: Union[Expression, List[Expression]]
    +50    suction_pressure: Optional[Expression]
    +51    discharge_pressure: Optional[Expression]
    +52    interstage_control_pressure: Optional[Expression]
    +53    # Todo: add pressure_control_first_part, pressure_control_last_part and stage_number_interstage_pressure
    +54    # TODO: validate power loss factor wrt energy usage type
    +55    # validate energy function has the same energy_usage_type
    +56
    +57    _convert_expressions = validator(
    +58        "suction_pressure",
    +59        "discharge_pressure",
    +60        "power_loss_factor",
    +61        "interstage_control_pressure",
    +62        allow_reuse=True,
    +63        pre=True,
    +64    )(convert_expression)
    +65    _convert_rate_expressions = validator(
    +66        "rate_standard_m3_day",
    +67        allow_reuse=True,
    +68        pre=True,
    +69    )(convert_expressions)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/chart.html b/docs/about/references/api/libecalc/dto/models/compressor/chart.html new file mode 100644 index 0000000000..c55bc495cc --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/chart.html @@ -0,0 +1,262 @@ + + + + + + + libecalc.dto.models.compressor.chart API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.chart

    + + + + + + +
     1from typing import Union
    + 2
    + 3from pydantic import Field
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.models.chart import (
    + 7    GenericChartFromDesignPoint,
    + 8    GenericChartFromInput,
    + 9    SingleSpeedChart,
    +10    VariableSpeedChart,
    +11)
    +12
    +13CompressorChart = Annotated[
    +14    Union[
    +15        GenericChartFromInput,
    +16        GenericChartFromDesignPoint,
    +17        VariableSpeedChart,
    +18        SingleSpeedChart,
    +19    ],
    +20    Field(discriminator="typ"),
    +21]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/fluid.html b/docs/about/references/api/libecalc/dto/models/compressor/fluid.html new file mode 100644 index 0000000000..31e5622082 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/fluid.html @@ -0,0 +1,614 @@ + + + + + + + libecalc.dto.models.compressor.fluid API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.fluid

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import Optional
    + 4
    + 5from pydantic import Field, root_validator
    + 6
    + 7from libecalc.dto.base import EcalcBaseModel
    + 8from libecalc.dto.types import EoSModel, FluidStreamType
    + 9
    +10
    +11class FluidComposition(EcalcBaseModel):
    +12    water: float = Field(0.0, ge=0.0)
    +13    nitrogen: float = Field(0.0, ge=0.0)
    +14    CO2: float = Field(0.0, ge=0.0)
    +15    methane: float = Field(0.0, ge=0.0)
    +16    ethane: float = Field(0.0, ge=0.0)
    +17    propane: float = Field(0.0, ge=0.0)
    +18    i_butane: float = Field(0.0, ge=0.0)
    +19    n_butane: float = Field(0.0, ge=0.0)
    +20    i_pentane: float = Field(0.0, ge=0.0)
    +21    n_pentane: float = Field(0.0, ge=0.0)
    +22    n_hexane: float = Field(0.0, ge=0.0)
    +23
    +24
    +25class FluidModel(EcalcBaseModel):
    +26    eos_model: EoSModel
    +27    composition: FluidComposition
    +28
    +29
    +30class FluidStream(FluidModel):
    +31    pressure_bara: float
    +32    temperature_kelvin: float
    +33    density_kg_per_m3: float
    +34    kappa: float
    +35    z: float
    +36
    +37    @classmethod
    +38    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +39        return cls(
    +40            eos_model=fluid_stream.fluid_model.eos_model,
    +41            composition=fluid_stream.fluid_model.composition,
    +42            pressure_bara=fluid_stream.pressure_bara,
    +43            temperature_kelvin=fluid_stream.temperature_kelvin,
    +44            density_kg_per_m3=fluid_stream.density,
    +45            kappa=fluid_stream.kappa,
    +46            z=fluid_stream.z,
    +47        )
    +48
    +49
    +50class MultipleStreamsAndPressureStream(EcalcBaseModel):
    +51    name: str
    +52    typ: FluidStreamType
    +53    fluid_model: Optional[FluidModel]
    +54
    +55    @root_validator
    +56    def validate_stream(cls, values):
    +57        stream_name, stream_type, stream_fluid_model = (
    +58            values.get("name"),
    +59            values.get("typ"),
    +60            values.get("fluid_model"),
    +61        )
    +62        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +63            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +64        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +65            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +66        return values
    +
    + + +
    +
    + +
    + + class + FluidComposition(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    12class FluidComposition(EcalcBaseModel):
    +13    water: float = Field(0.0, ge=0.0)
    +14    nitrogen: float = Field(0.0, ge=0.0)
    +15    CO2: float = Field(0.0, ge=0.0)
    +16    methane: float = Field(0.0, ge=0.0)
    +17    ethane: float = Field(0.0, ge=0.0)
    +18    propane: float = Field(0.0, ge=0.0)
    +19    i_butane: float = Field(0.0, ge=0.0)
    +20    n_butane: float = Field(0.0, ge=0.0)
    +21    i_pentane: float = Field(0.0, ge=0.0)
    +22    n_pentane: float = Field(0.0, ge=0.0)
    +23    n_hexane: float = Field(0.0, ge=0.0)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + FluidModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    26class FluidModel(EcalcBaseModel):
    +27    eos_model: EoSModel
    +28    composition: FluidComposition
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + FluidStream(FluidModel): + + + +
    + +
    31class FluidStream(FluidModel):
    +32    pressure_bara: float
    +33    temperature_kelvin: float
    +34    density_kg_per_m3: float
    +35    kappa: float
    +36    z: float
    +37
    +38    @classmethod
    +39    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +40        return cls(
    +41            eos_model=fluid_stream.fluid_model.eos_model,
    +42            composition=fluid_stream.fluid_model.composition,
    +43            pressure_bara=fluid_stream.pressure_bara,
    +44            temperature_kelvin=fluid_stream.temperature_kelvin,
    +45            density_kg_per_m3=fluid_stream.density,
    +46            kappa=fluid_stream.kappa,
    +47            z=fluid_stream.z,
    +48        )
    +
    + + + + +
    + +
    +
    @classmethod
    + + def + from_fluid_domain_object(cls, fluid_stream) -> libecalc.dto.models.compressor.fluid.FluidStream: + + + +
    + +
    38    @classmethod
    +39    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +40        return cls(
    +41            eos_model=fluid_stream.fluid_model.eos_model,
    +42            composition=fluid_stream.fluid_model.composition,
    +43            pressure_bara=fluid_stream.pressure_bara,
    +44            temperature_kelvin=fluid_stream.temperature_kelvin,
    +45            density_kg_per_m3=fluid_stream.density,
    +46            kappa=fluid_stream.kappa,
    +47            z=fluid_stream.z,
    +48        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + MultipleStreamsAndPressureStream(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    51class MultipleStreamsAndPressureStream(EcalcBaseModel):
    +52    name: str
    +53    typ: FluidStreamType
    +54    fluid_model: Optional[FluidModel]
    +55
    +56    @root_validator
    +57    def validate_stream(cls, values):
    +58        stream_name, stream_type, stream_fluid_model = (
    +59            values.get("name"),
    +60            values.get("typ"),
    +61            values.get("fluid_model"),
    +62        )
    +63        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +64            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +65        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +66            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +67        return values
    +
    + + + + +
    + +
    +
    @root_validator
    + + def + validate_stream(cls, values): + + + +
    + +
    56    @root_validator
    +57    def validate_stream(cls, values):
    +58        stream_name, stream_type, stream_fluid_model = (
    +59            values.get("name"),
    +60            values.get("typ"),
    +61            values.get("fluid_model"),
    +62        )
    +63        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +64            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +65        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +66            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +67        return values
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/sampled.html b/docs/about/references/api/libecalc/dto/models/compressor/sampled.html new file mode 100644 index 0000000000..4a71d42c69 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/sampled.html @@ -0,0 +1,446 @@ + + + + + + + libecalc.dto.models.compressor.sampled API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.sampled

    + + + + + + +
     1from typing import List, Literal, Optional
    + 2
    + 3from pydantic import confloat
    + 4from pydantic.class_validators import root_validator
    + 5
    + 6from libecalc.dto.models.base import EnergyModel
    + 7from libecalc.dto.types import EnergyModelType, EnergyUsageType
    + 8
    + 9
    +10class CompressorSampled(EnergyModel):
    +11    typ: Literal[EnergyModelType.COMPRESSOR_SAMPLED] = EnergyModelType.COMPRESSOR_SAMPLED
    +12    energy_usage_type: EnergyUsageType
    +13    energy_usage_values: List[confloat(ge=0)]
    +14    rate_values: Optional[List[confloat(ge=0)]]
    +15    suction_pressure_values: Optional[List[confloat(ge=0)]]
    +16    discharge_pressure_values: Optional[List[confloat(ge=0)]]
    +17    power_interpolation_values: Optional[List[confloat(ge=0)]]
    +18
    +19    @root_validator
    +20    def validate_equal_list_lengths(cls, values):
    +21        number_of_data_points = len(values["energy_usage_values"])
    +22        for variable_name in (
    +23            "rate_values",
    +24            "suction_pressure_values",
    +25            "discharge_pressure_values",
    +26            "power_interpolation_values",
    +27        ):
    +28            variable = values.get(variable_name)
    +29            if variable is not None:
    +30                if len(variable) != number_of_data_points:
    +31                    raise ValueError(
    +32                        f"{variable_name} has wrong number of points. "
    +33                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +34                    )
    +35        return values
    +36
    +37    @root_validator(pre=True)
    +38    def validate_minimum_one_variable(cls, values):
    +39        rate_not_given = "rate_values" not in values
    +40        suction_pressure_not_given = "suction_pressure_values" not in values
    +41        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +42        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +43            raise ValueError(
    +44                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +45            )
    +46        return values
    +
    + + +
    +
    + +
    + + class + CompressorSampled(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    11class CompressorSampled(EnergyModel):
    +12    typ: Literal[EnergyModelType.COMPRESSOR_SAMPLED] = EnergyModelType.COMPRESSOR_SAMPLED
    +13    energy_usage_type: EnergyUsageType
    +14    energy_usage_values: List[confloat(ge=0)]
    +15    rate_values: Optional[List[confloat(ge=0)]]
    +16    suction_pressure_values: Optional[List[confloat(ge=0)]]
    +17    discharge_pressure_values: Optional[List[confloat(ge=0)]]
    +18    power_interpolation_values: Optional[List[confloat(ge=0)]]
    +19
    +20    @root_validator
    +21    def validate_equal_list_lengths(cls, values):
    +22        number_of_data_points = len(values["energy_usage_values"])
    +23        for variable_name in (
    +24            "rate_values",
    +25            "suction_pressure_values",
    +26            "discharge_pressure_values",
    +27            "power_interpolation_values",
    +28        ):
    +29            variable = values.get(variable_name)
    +30            if variable is not None:
    +31                if len(variable) != number_of_data_points:
    +32                    raise ValueError(
    +33                        f"{variable_name} has wrong number of points. "
    +34                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +35                    )
    +36        return values
    +37
    +38    @root_validator(pre=True)
    +39    def validate_minimum_one_variable(cls, values):
    +40        rate_not_given = "rate_values" not in values
    +41        suction_pressure_not_given = "suction_pressure_values" not in values
    +42        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +43        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +44            raise ValueError(
    +45                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +46            )
    +47        return values
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @root_validator
    + + def + validate_equal_list_lengths(cls, values): + + + +
    + +
    20    @root_validator
    +21    def validate_equal_list_lengths(cls, values):
    +22        number_of_data_points = len(values["energy_usage_values"])
    +23        for variable_name in (
    +24            "rate_values",
    +25            "suction_pressure_values",
    +26            "discharge_pressure_values",
    +27            "power_interpolation_values",
    +28        ):
    +29            variable = values.get(variable_name)
    +30            if variable is not None:
    +31                if len(variable) != number_of_data_points:
    +32                    raise ValueError(
    +33                        f"{variable_name} has wrong number of points. "
    +34                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +35                    )
    +36        return values
    +
    + + + + +
    +
    + +
    +
    @root_validator(pre=True)
    + + def + validate_minimum_one_variable(cls, values): + + + +
    + +
    38    @root_validator(pre=True)
    +39    def validate_minimum_one_variable(cls, values):
    +40        rate_not_given = "rate_values" not in values
    +41        suction_pressure_not_given = "suction_pressure_values" not in values
    +42        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +43        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +44            raise ValueError(
    +45                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +46            )
    +47        return values
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/stage.html b/docs/about/references/api/libecalc/dto/models/compressor/stage.html new file mode 100644 index 0000000000..8d23b3211a --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/stage.html @@ -0,0 +1,438 @@ + + + + + + + libecalc.dto.models.compressor.stage API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.stage

    + + + + + + +
     1from typing import List, Optional
    + 2
    + 3from pydantic import confloat
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6from libecalc.dto.models.compressor.chart import CompressorChart, VariableSpeedChart
    + 7from libecalc.dto.types import FixedSpeedPressureControl
    + 8
    + 9
    +10class CompressorStage(EcalcBaseModel):
    +11    compressor_chart: CompressorChart
    +12    inlet_temperature_kelvin: confloat(ge=0)
    +13    pressure_drop_before_stage: confloat(ge=0)
    +14    remove_liquid_after_cooling: bool
    +15    control_margin: confloat(ge=0, le=1) = 0.0  # Todo: this probably belong to the chart, not the stage.
    +16
    +17
    +18class InterstagePressureControl(EcalcBaseModel):
    +19    upstream_pressure_control: FixedSpeedPressureControl
    +20    downstream_pressure_control: FixedSpeedPressureControl
    +21
    +22
    +23class MultipleStreamsCompressorStage(CompressorStage):
    +24    """Special case for multiple streams model."""
    +25
    +26    compressor_chart: VariableSpeedChart
    +27    stream_reference: Optional[List[str]]
    +28    interstage_pressure_control: Optional[InterstagePressureControl]
    +29
    +30    @property
    +31    def has_control_pressure(self):
    +32        return self.interstage_pressure_control is not None
    +
    + + +
    +
    + +
    + + class + CompressorStage(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    11class CompressorStage(EcalcBaseModel):
    +12    compressor_chart: CompressorChart
    +13    inlet_temperature_kelvin: confloat(ge=0)
    +14    pressure_drop_before_stage: confloat(ge=0)
    +15    remove_liquid_after_cooling: bool
    +16    control_margin: confloat(ge=0, le=1) = 0.0  # Todo: this probably belong to the chart, not the stage.
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + InterstagePressureControl(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    19class InterstagePressureControl(EcalcBaseModel):
    +20    upstream_pressure_control: FixedSpeedPressureControl
    +21    downstream_pressure_control: FixedSpeedPressureControl
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + MultipleStreamsCompressorStage(CompressorStage): + + + +
    + +
    24class MultipleStreamsCompressorStage(CompressorStage):
    +25    """Special case for multiple streams model."""
    +26
    +27    compressor_chart: VariableSpeedChart
    +28    stream_reference: Optional[List[str]]
    +29    interstage_pressure_control: Optional[InterstagePressureControl]
    +30
    +31    @property
    +32    def has_control_pressure(self):
    +33        return self.interstage_pressure_control is not None
    +
    + + +

    Special case for multiple streams model.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/train.html b/docs/about/references/api/libecalc/dto/models/compressor/train.html new file mode 100644 index 0000000000..4ea967f432 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/train.html @@ -0,0 +1,952 @@ + + + + + + + libecalc.dto.models.compressor.train API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.train

    + + + + + + +
      1from typing import List, Literal, Optional
    +  2
    +  3from pydantic import confloat, validator
    +  4
    +  5from libecalc.dto.models.base import EnergyModel
    +  6from libecalc.dto.models.compressor.chart import SingleSpeedChart, VariableSpeedChart
    +  7from libecalc.dto.models.compressor.fluid import (
    +  8    FluidModel,
    +  9    MultipleStreamsAndPressureStream,
    + 10)
    + 11from libecalc.dto.models.compressor.stage import (
    + 12    CompressorStage,
    + 13    MultipleStreamsCompressorStage,
    + 14)
    + 15from libecalc.dto.types import EnergyModelType, FixedSpeedPressureControl
    + 16
    + 17
    + 18class CompressorTrain(EnergyModel):
    + 19    typ: EnergyModelType
    + 20    stages: List[CompressorStage]
    + 21    fluid_model: FluidModel
    + 22    calculate_max_rate: bool = False
    + 23    maximum_power: Optional[float]
    + 24    pressure_control: FixedSpeedPressureControl
    + 25
    + 26
    + 27class CompressorTrainSimplifiedWithKnownStages(CompressorTrain):
    + 28    typ: Literal[
    + 29        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    + 30    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    + 31
    + 32    # Not in use:
    + 33    pressure_control: FixedSpeedPressureControl = None  # Not relevant for simplified trains.
    + 34
    + 35    @validator("stages")
    + 36    def _validate_stages(cls, stages):
    + 37        for stage in stages:
    + 38            if isinstance(stage.compressor_chart, SingleSpeedChart):
    + 39                raise ValueError(
    + 40                    "Simplified Compressor Train does not support Single Speed Compressor Chart."
    + 41                    f" Given type was {type(stage.compressor_chart)}"
    + 42                )
    + 43        return stages
    + 44
    + 45
    + 46class CompressorTrainSimplifiedWithUnknownStages(CompressorTrain):
    + 47    """Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed.
    + 48    Will be constrained by a maximum pressure ratio per stage.
    + 49    """
    + 50
    + 51    typ: Literal[
    + 52        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    + 53    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    + 54    stage: CompressorStage
    + 55    maximum_pressure_ratio_per_stage: confloat(ge=0)
    + 56
    + 57    # Not in use:
    + 58    stages: List[CompressorStage] = []  # Not relevant since the stage is Unknown
    + 59    pressure_control: FixedSpeedPressureControl = None  # Not relevant for simplified trains.
    + 60
    + 61    @validator("stage")
    + 62    def _validate_stages(cls, stage):
    + 63        if isinstance(stage.compressor_chart, SingleSpeedChart):
    + 64            raise ValueError(
    + 65                "Simplified Compressor Train does not support Single Speed Compressor Chart."
    + 66                f" Given type was {type(stage.compressor_chart)}"
    + 67            )
    + 68        return stage
    + 69
    + 70
    + 71class SingleSpeedCompressorTrain(CompressorTrain):
    + 72    """Single speed train has a control mechanism for max discharge pressure."""
    + 73
    + 74    typ: Literal[
    + 75        EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 76    ] = EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 77    maximum_discharge_pressure: Optional[confloat(ge=0)]
    + 78
    + 79    @validator("stages")
    + 80    def _validate_stages(cls, stages):
    + 81        for stage in stages:
    + 82            if not isinstance(stage.compressor_chart, SingleSpeedChart):
    + 83                raise ValueError(
    + 84                    "Single Speed Compressor train only accepts Single Speed Compressor Charts."
    + 85                    f" Given type was {type(stage.compressor_chart)}"
    + 86                )
    + 87        return stages
    + 88
    + 89
    + 90class VariableSpeedCompressorTrain(CompressorTrain):
    + 91    typ: Literal[
    + 92        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 93    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 94
    + 95    @validator("stages")
    + 96    def _validate_stages(cls, stages):
    + 97        min_speed_per_stage = []
    + 98        max_speed_per_stage = []
    + 99        for stage in stages:
    +100            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +101                raise ValueError(
    +102                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +103                    f" Given type was {type(stage.compressor_chart)}"
    +104                )
    +105            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +106            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +107        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +108            raise ValueError(
    +109                "Variable speed compressors in compressor train have incompatible compressor charts."
    +110                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +111                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +112            )
    +113        return stages
    +114
    +115
    +116class VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain):
    +117    """This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and
    +118    possibly an interstage control pressure
    +119    The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of
    +120    the streams, as this determine the mapping of which rate is mapped to which stream at evaluation
    +121    Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do
    +122    the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement
    +123    in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax
    +124    and the dto similar.
    +125    """
    +126
    +127    typ: Literal[
    +128        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +129    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +130    streams: List[MultipleStreamsAndPressureStream]
    +131    stages: List[MultipleStreamsCompressorStage]
    +132
    +133    # Not in use:
    +134    fluid_model: FluidModel = None  # Not relevant. set by the individual stream.
    +135
    +136    @validator("stages")
    +137    def _validate_stages(cls, stages):
    +138        if sum([stage.has_control_pressure for stage in stages]) > 1:
    +139            raise ValueError("Only one interstage pressure should be defined for a compressor train")
    +140        min_speed_per_stage = []
    +141        max_speed_per_stage = []
    +142        for stage in stages:
    +143            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +144                raise ValueError(
    +145                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +146                    f" Given type was {type(stage.compressor_chart)}"
    +147                )
    +148            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +149            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +150        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +151            raise ValueError(
    +152                "Variable speed compressors in compressor train have incompatible compressor charts."
    +153                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +154                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +155            )
    +156        return stages
    +157
    +158    @property
    +159    def has_interstage_pressure(self):
    +160        return any(stage.has_control_pressure for stage in self.stages)
    +161
    +162    @property
    +163    def stage_number_interstage_pressure(self):
    +164        """Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the
    +165        inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train
    +166        (zero indexed, first stage is stage_0).
    +167        """
    +168        return (
    +169            [i for i, stage in enumerate(self.stages) if stage.has_control_pressure][0]
    +170            if self.has_interstage_pressure
    +171            else None
    +172        )
    +173
    +174    @property
    +175    def stream_references(self):
    +176        return {
    +177            stream_ref: i
    +178            for i, stage in enumerate(self.stages)
    +179            if stage.stream_reference
    +180            for stream_ref in stage.stream_reference
    +181        }
    +182
    +183    @property
    +184    def pressure_control_first_part(self) -> FixedSpeedPressureControl:
    +185        return (
    +186            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.upstream_pressure_control
    +187            if self.stage_number_interstage_pressure
    +188            else None
    +189        )
    +190
    +191    @property
    +192    def pressure_control_last_part(self) -> FixedSpeedPressureControl:
    +193        return (
    +194            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.downstream_pressure_control
    +195            if self.stage_number_interstage_pressure
    +196            else None
    +197        )
    +
    + + +
    +
    + +
    + + class + CompressorTrain(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    19class CompressorTrain(EnergyModel):
    +20    typ: EnergyModelType
    +21    stages: List[CompressorStage]
    +22    fluid_model: FluidModel
    +23    calculate_max_rate: bool = False
    +24    maximum_power: Optional[float]
    +25    pressure_control: FixedSpeedPressureControl
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + CompressorTrainSimplifiedWithKnownStages(CompressorTrain): + + + +
    + +
    28class CompressorTrainSimplifiedWithKnownStages(CompressorTrain):
    +29    typ: Literal[
    +30        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    +31    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    +32
    +33    # Not in use:
    +34    pressure_control: FixedSpeedPressureControl = None  # Not relevant for simplified trains.
    +35
    +36    @validator("stages")
    +37    def _validate_stages(cls, stages):
    +38        for stage in stages:
    +39            if isinstance(stage.compressor_chart, SingleSpeedChart):
    +40                raise ValueError(
    +41                    "Simplified Compressor Train does not support Single Speed Compressor Chart."
    +42                    f" Given type was {type(stage.compressor_chart)}"
    +43                )
    +44        return stages
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + CompressorTrainSimplifiedWithUnknownStages(CompressorTrain): + + + +
    + +
    47class CompressorTrainSimplifiedWithUnknownStages(CompressorTrain):
    +48    """Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed.
    +49    Will be constrained by a maximum pressure ratio per stage.
    +50    """
    +51
    +52    typ: Literal[
    +53        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    +54    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    +55    stage: CompressorStage
    +56    maximum_pressure_ratio_per_stage: confloat(ge=0)
    +57
    +58    # Not in use:
    +59    stages: List[CompressorStage] = []  # Not relevant since the stage is Unknown
    +60    pressure_control: FixedSpeedPressureControl = None  # Not relevant for simplified trains.
    +61
    +62    @validator("stage")
    +63    def _validate_stages(cls, stage):
    +64        if isinstance(stage.compressor_chart, SingleSpeedChart):
    +65            raise ValueError(
    +66                "Simplified Compressor Train does not support Single Speed Compressor Chart."
    +67                f" Given type was {type(stage.compressor_chart)}"
    +68            )
    +69        return stage
    +
    + + +

    Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed. +Will be constrained by a maximum pressure ratio per stage.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + SingleSpeedCompressorTrain(CompressorTrain): + + + +
    + +
    72class SingleSpeedCompressorTrain(CompressorTrain):
    +73    """Single speed train has a control mechanism for max discharge pressure."""
    +74
    +75    typ: Literal[
    +76        EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    +77    ] = EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    +78    maximum_discharge_pressure: Optional[confloat(ge=0)]
    +79
    +80    @validator("stages")
    +81    def _validate_stages(cls, stages):
    +82        for stage in stages:
    +83            if not isinstance(stage.compressor_chart, SingleSpeedChart):
    +84                raise ValueError(
    +85                    "Single Speed Compressor train only accepts Single Speed Compressor Charts."
    +86                    f" Given type was {type(stage.compressor_chart)}"
    +87                )
    +88        return stages
    +
    + + +

    Single speed train has a control mechanism for max discharge pressure.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + VariableSpeedCompressorTrain(CompressorTrain): + + + +
    + +
     91class VariableSpeedCompressorTrain(CompressorTrain):
    + 92    typ: Literal[
    + 93        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 94    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 95
    + 96    @validator("stages")
    + 97    def _validate_stages(cls, stages):
    + 98        min_speed_per_stage = []
    + 99        max_speed_per_stage = []
    +100        for stage in stages:
    +101            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +102                raise ValueError(
    +103                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +104                    f" Given type was {type(stage.compressor_chart)}"
    +105                )
    +106            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +107            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +108        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +109            raise ValueError(
    +110                "Variable speed compressors in compressor train have incompatible compressor charts."
    +111                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +112                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +113            )
    +114        return stages
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain): + + + +
    + +
    117class VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain):
    +118    """This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and
    +119    possibly an interstage control pressure
    +120    The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of
    +121    the streams, as this determine the mapping of which rate is mapped to which stream at evaluation
    +122    Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do
    +123    the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement
    +124    in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax
    +125    and the dto similar.
    +126    """
    +127
    +128    typ: Literal[
    +129        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +130    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +131    streams: List[MultipleStreamsAndPressureStream]
    +132    stages: List[MultipleStreamsCompressorStage]
    +133
    +134    # Not in use:
    +135    fluid_model: FluidModel = None  # Not relevant. set by the individual stream.
    +136
    +137    @validator("stages")
    +138    def _validate_stages(cls, stages):
    +139        if sum([stage.has_control_pressure for stage in stages]) > 1:
    +140            raise ValueError("Only one interstage pressure should be defined for a compressor train")
    +141        min_speed_per_stage = []
    +142        max_speed_per_stage = []
    +143        for stage in stages:
    +144            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +145                raise ValueError(
    +146                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +147                    f" Given type was {type(stage.compressor_chart)}"
    +148                )
    +149            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +150            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +151        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +152            raise ValueError(
    +153                "Variable speed compressors in compressor train have incompatible compressor charts."
    +154                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +155                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +156            )
    +157        return stages
    +158
    +159    @property
    +160    def has_interstage_pressure(self):
    +161        return any(stage.has_control_pressure for stage in self.stages)
    +162
    +163    @property
    +164    def stage_number_interstage_pressure(self):
    +165        """Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the
    +166        inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train
    +167        (zero indexed, first stage is stage_0).
    +168        """
    +169        return (
    +170            [i for i, stage in enumerate(self.stages) if stage.has_control_pressure][0]
    +171            if self.has_interstage_pressure
    +172            else None
    +173        )
    +174
    +175    @property
    +176    def stream_references(self):
    +177        return {
    +178            stream_ref: i
    +179            for i, stage in enumerate(self.stages)
    +180            if stage.stream_reference
    +181            for stream_ref in stage.stream_reference
    +182        }
    +183
    +184    @property
    +185    def pressure_control_first_part(self) -> FixedSpeedPressureControl:
    +186        return (
    +187            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.upstream_pressure_control
    +188            if self.stage_number_interstage_pressure
    +189            else None
    +190        )
    +191
    +192    @property
    +193    def pressure_control_last_part(self) -> FixedSpeedPressureControl:
    +194        return (
    +195            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.downstream_pressure_control
    +196            if self.stage_number_interstage_pressure
    +197            else None
    +198        )
    +
    + + +

    This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and +possibly an interstage control pressure +The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of +the streams, as this determine the mapping of which rate is mapped to which stream at evaluation +Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do +the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement +in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax +and the dto similar.

    +
    + + +
    +
    + stage_number_interstage_pressure + + +
    + + +

    Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the +inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train +(zero indexed, first stage is stage_0).

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/consumer_system.html b/docs/about/references/api/libecalc/dto/models/consumer_system.html new file mode 100644 index 0000000000..e7094824e5 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/consumer_system.html @@ -0,0 +1,834 @@ + + + + + + + libecalc.dto.models.consumer_system API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.consumer_system

    + + + + + + +
      1from typing import List, Literal, Optional
    +  2
    +  3from pydantic import Field, validator
    +  4
    +  5from libecalc.common.logger import logger
    +  6from libecalc.dto.base import EcalcBaseModel
    +  7from libecalc.dto.models.base import ConsumerFunction
    +  8from libecalc.dto.models.compressor import CompressorModel
    +  9from libecalc.dto.models.compressor.train import (
    + 10    CompressorTrainSimplifiedWithKnownStages,
    + 11    CompressorTrainSimplifiedWithUnknownStages,
    + 12)
    + 13from libecalc.dto.models.pump import PumpModel
    + 14from libecalc.dto.types import ChartType, ConsumerType, EnergyUsageType
    + 15from libecalc.dto.utils.validators import convert_expression
    + 16from libecalc.expression import Expression
    + 17
    + 18
    + 19class CompressorSystemCompressor(EcalcBaseModel):
    + 20    name: str
    + 21    compressor_train: CompressorModel = Field(..., discriminator="typ")
    + 22
    + 23
    + 24class SystemOperationalSetting(EcalcBaseModel):
    + 25    rate_fractions: Optional[List[Expression]]
    + 26    rates: Optional[List[Expression]]
    + 27    suction_pressure: Optional[Expression]
    + 28    suction_pressures: Optional[List[Expression]]
    + 29    discharge_pressure: Optional[Expression]
    + 30    discharge_pressures: Optional[List[Expression]]
    + 31    crossover: Optional[List[int]]
    + 32
    + 33    _convert_expression_lists = validator(
    + 34        "rate_fractions",
    + 35        "rates",
    + 36        "suction_pressures",
    + 37        "discharge_pressures",
    + 38        allow_reuse=True,
    + 39        pre=True,
    + 40        each_item=True,
    + 41    )(convert_expression)
    + 42    _convert_expression = validator("suction_pressure", "discharge_pressure", allow_reuse=True, pre=True)(
    + 43        convert_expression
    + 44    )
    + 45
    + 46
    + 47class PumpSystemOperationalSetting(SystemOperationalSetting):
    + 48    fluid_densities: Optional[List[Expression]]
    + 49
    + 50    _convert_expression_lists = validator(
    + 51        "fluid_densities",
    + 52        allow_reuse=True,
    + 53        pre=True,
    + 54        each_item=True,
    + 55    )(convert_expression)
    + 56
    + 57
    + 58class PumpSystemPump(EcalcBaseModel):
    + 59    name: str
    + 60    pump_model: PumpModel
    + 61
    + 62
    + 63class PumpSystemConsumerFunction(ConsumerFunction):
    + 64    typ: Literal[ConsumerType.PUMP_SYSTEM] = ConsumerType.PUMP_SYSTEM
    + 65    energy_usage_type = EnergyUsageType.POWER
    + 66    power_loss_factor: Optional[Expression]
    + 67    pumps: List[PumpSystemPump]
    + 68    fluid_density: Expression
    + 69    total_system_rate: Optional[Expression]
    + 70    operational_settings: List[PumpSystemOperationalSetting]
    + 71
    + 72    _convert_expression = validator(
    + 73        "fluid_density", "total_system_rate", "power_loss_factor", allow_reuse=True, pre=True
    + 74    )(convert_expression)
    + 75
    + 76
    + 77class CompressorSystemOperationalSetting(SystemOperationalSetting):
    + 78    pass
    + 79
    + 80
    + 81class CompressorSystemConsumerFunction(ConsumerFunction):
    + 82    typ: Literal[ConsumerType.COMPRESSOR_SYSTEM] = ConsumerType.COMPRESSOR_SYSTEM
    + 83    power_loss_factor: Optional[Expression]
    + 84    compressors: List[CompressorSystemCompressor]
    + 85    total_system_rate: Optional[Expression]
    + 86    operational_settings: List[CompressorSystemOperationalSetting]
    + 87
    + 88    _convert_total_system_rate_to_expression = validator(
    + 89        "total_system_rate", "power_loss_factor", allow_reuse=True, pre=True
    + 90    )(convert_expression)
    + 91
    + 92    @validator("compressors", pre=False)
    + 93    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 94        cls, v: List[CompressorSystemCompressor]
    + 95    ) -> List[CompressorSystemCompressor]:
    + 96        for compressor_system_compressor in v:
    + 97            compressor_train = compressor_system_compressor.compressor_train
    + 98            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    + 99                for i, stage in enumerate(compressor_train.stages):
    +100                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +101                        logger.warning(
    +102                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +103                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +104                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +105                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +106                            f" changing rates!"
    +107                        )
    +108            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +109                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +110                    logger.warning(
    +111                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +112                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +113                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +114                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +115                        f" changing rates!"
    +116                    )
    +117        return v
    +
    + + +
    +
    + +
    + + class + CompressorSystemCompressor(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    20class CompressorSystemCompressor(EcalcBaseModel):
    +21    name: str
    +22    compressor_train: CompressorModel = Field(..., discriminator="typ")
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + SystemOperationalSetting(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    25class SystemOperationalSetting(EcalcBaseModel):
    +26    rate_fractions: Optional[List[Expression]]
    +27    rates: Optional[List[Expression]]
    +28    suction_pressure: Optional[Expression]
    +29    suction_pressures: Optional[List[Expression]]
    +30    discharge_pressure: Optional[Expression]
    +31    discharge_pressures: Optional[List[Expression]]
    +32    crossover: Optional[List[int]]
    +33
    +34    _convert_expression_lists = validator(
    +35        "rate_fractions",
    +36        "rates",
    +37        "suction_pressures",
    +38        "discharge_pressures",
    +39        allow_reuse=True,
    +40        pre=True,
    +41        each_item=True,
    +42    )(convert_expression)
    +43    _convert_expression = validator("suction_pressure", "discharge_pressure", allow_reuse=True, pre=True)(
    +44        convert_expression
    +45    )
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PumpSystemOperationalSetting(SystemOperationalSetting): + + + +
    + +
    48class PumpSystemOperationalSetting(SystemOperationalSetting):
    +49    fluid_densities: Optional[List[Expression]]
    +50
    +51    _convert_expression_lists = validator(
    +52        "fluid_densities",
    +53        allow_reuse=True,
    +54        pre=True,
    +55        each_item=True,
    +56    )(convert_expression)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PumpSystemPump(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    59class PumpSystemPump(EcalcBaseModel):
    +60    name: str
    +61    pump_model: PumpModel
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PumpSystemConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    64class PumpSystemConsumerFunction(ConsumerFunction):
    +65    typ: Literal[ConsumerType.PUMP_SYSTEM] = ConsumerType.PUMP_SYSTEM
    +66    energy_usage_type = EnergyUsageType.POWER
    +67    power_loss_factor: Optional[Expression]
    +68    pumps: List[PumpSystemPump]
    +69    fluid_density: Expression
    +70    total_system_rate: Optional[Expression]
    +71    operational_settings: List[PumpSystemOperationalSetting]
    +72
    +73    _convert_expression = validator(
    +74        "fluid_density", "total_system_rate", "power_loss_factor", allow_reuse=True, pre=True
    +75    )(convert_expression)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + CompressorSystemOperationalSetting(SystemOperationalSetting): + + + +
    + +
    78class CompressorSystemOperationalSetting(SystemOperationalSetting):
    +79    pass
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + CompressorSystemConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
     82class CompressorSystemConsumerFunction(ConsumerFunction):
    + 83    typ: Literal[ConsumerType.COMPRESSOR_SYSTEM] = ConsumerType.COMPRESSOR_SYSTEM
    + 84    power_loss_factor: Optional[Expression]
    + 85    compressors: List[CompressorSystemCompressor]
    + 86    total_system_rate: Optional[Expression]
    + 87    operational_settings: List[CompressorSystemOperationalSetting]
    + 88
    + 89    _convert_total_system_rate_to_expression = validator(
    + 90        "total_system_rate", "power_loss_factor", allow_reuse=True, pre=True
    + 91    )(convert_expression)
    + 92
    + 93    @validator("compressors", pre=False)
    + 94    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 95        cls, v: List[CompressorSystemCompressor]
    + 96    ) -> List[CompressorSystemCompressor]:
    + 97        for compressor_system_compressor in v:
    + 98            compressor_train = compressor_system_compressor.compressor_train
    + 99            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    +100                for i, stage in enumerate(compressor_train.stages):
    +101                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +102                        logger.warning(
    +103                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +104                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +105                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +106                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +107                            f" changing rates!"
    +108                        )
    +109            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +110                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +111                    logger.warning(
    +112                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +113                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +114                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +115                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +116                        f" changing rates!"
    +117                    )
    +118        return v
    +
    + + + + +
    + +
    +
    @validator('compressors', pre=False)
    + + def + check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system( cls, v: List[libecalc.dto.models.consumer_system.CompressorSystemCompressor]) -> List[libecalc.dto.models.consumer_system.CompressorSystemCompressor]: + + + +
    + +
     93    @validator("compressors", pre=False)
    + 94    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 95        cls, v: List[CompressorSystemCompressor]
    + 96    ) -> List[CompressorSystemCompressor]:
    + 97        for compressor_system_compressor in v:
    + 98            compressor_train = compressor_system_compressor.compressor_train
    + 99            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    +100                for i, stage in enumerate(compressor_train.stages):
    +101                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +102                        logger.warning(
    +103                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +104                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +105                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +106                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +107                            f" changing rates!"
    +108                        )
    +109            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +110                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +111                    logger.warning(
    +112                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +113                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +114                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +115                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +116                        f" changing rates!"
    +117                    )
    +118        return v
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/direct.html b/docs/about/references/api/libecalc/dto/models/direct.html new file mode 100644 index 0000000000..3aece1dd59 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/direct.html @@ -0,0 +1,361 @@ + + + + + + + libecalc.dto.models.direct API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.direct

    + + + + + + +
     1from typing import Any, Dict, Literal, Optional
    + 2
    + 3from pydantic import root_validator, validator
    + 4
    + 5from libecalc.common.utils.rates import RateType
    + 6from libecalc.dto.models.base import ConsumerFunction
    + 7from libecalc.dto.types import ConsumerType
    + 8from libecalc.dto.utils.validators import convert_expression
    + 9from libecalc.expression import Expression
    +10
    +11
    +12class DirectConsumerFunction(ConsumerFunction):
    +13    typ: Literal[ConsumerType.DIRECT] = ConsumerType.DIRECT
    +14    fuel_rate: Optional[Expression]
    +15    load: Optional[Expression]
    +16    power_loss_factor: Optional[Expression] = None
    +17    consumption_rate_type: RateType = RateType.STREAM_DAY
    +18
    +19    _convert_expressions = validator("fuel_rate", "load", "power_loss_factor", allow_reuse=True, pre=True)(
    +20        convert_expression
    +21    )
    +22
    +23    @root_validator
    +24    def validate_either_load_or_fuel_rate(cls, values: Dict[str, Any]) -> Dict[str, Any]:
    +25        if values.get("fuel_rate") is None and values.get("load") is None:
    +26            raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +27        return values
    +
    + + +
    +
    + +
    + + class + DirectConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    13class DirectConsumerFunction(ConsumerFunction):
    +14    typ: Literal[ConsumerType.DIRECT] = ConsumerType.DIRECT
    +15    fuel_rate: Optional[Expression]
    +16    load: Optional[Expression]
    +17    power_loss_factor: Optional[Expression] = None
    +18    consumption_rate_type: RateType = RateType.STREAM_DAY
    +19
    +20    _convert_expressions = validator("fuel_rate", "load", "power_loss_factor", allow_reuse=True, pre=True)(
    +21        convert_expression
    +22    )
    +23
    +24    @root_validator
    +25    def validate_either_load_or_fuel_rate(cls, values: Dict[str, Any]) -> Dict[str, Any]:
    +26        if values.get("fuel_rate") is None and values.get("load") is None:
    +27            raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +28        return values
    +
    + + + + +
    + +
    +
    @root_validator
    + + def + validate_either_load_or_fuel_rate(cls, values: Dict[str, Any]) -> Dict[str, Any]: + + + +
    + +
    24    @root_validator
    +25    def validate_either_load_or_fuel_rate(cls, values: Dict[str, Any]) -> Dict[str, Any]:
    +26        if values.get("fuel_rate") is None and values.get("load") is None:
    +27            raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +28        return values
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/generator_set.html b/docs/about/references/api/libecalc/dto/models/generator_set.html new file mode 100644 index 0000000000..aea01e864b --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/generator_set.html @@ -0,0 +1,402 @@ + + + + + + + libecalc.dto.models.generator_set API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.generator_set

    + + + + + + +
     1from typing import List, Literal
    + 2
    + 3from pydantic.class_validators import validator
    + 4
    + 5from libecalc.dto.types import EnergyModelType
    + 6
    + 7from .sampled import EnergyModelSampled
    + 8
    + 9
    +10class GeneratorSetSampled(EnergyModelSampled):
    +11    typ: Literal[EnergyModelType.GENERATOR_SET_SAMPLED] = EnergyModelType.GENERATOR_SET_SAMPLED
    +12
    +13    @validator("headers")
    +14    def validate_headers(cls, headers: List[str]) -> List[str]:
    +15        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +16        if not is_valid_headers:
    +17            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +18        return headers
    +19
    +20    @validator("data")
    +21    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +22        if len({len(lst) for lst in data}) > 1:
    +23            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +24        return data
    +25
    +26    @property
    +27    def fuel_values(self) -> List[float]:
    +28        return self.data[self.headers.index("FUEL")]
    +29
    +30    @property
    +31    def power_values(self) -> List[float]:
    +32        return self.data[self.headers.index("POWER")]
    +
    + + +
    +
    + +
    + + class + GeneratorSetSampled(libecalc.dto.models.sampled.EnergyModelSampled): + + + +
    + +
    11class GeneratorSetSampled(EnergyModelSampled):
    +12    typ: Literal[EnergyModelType.GENERATOR_SET_SAMPLED] = EnergyModelType.GENERATOR_SET_SAMPLED
    +13
    +14    @validator("headers")
    +15    def validate_headers(cls, headers: List[str]) -> List[str]:
    +16        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +17        if not is_valid_headers:
    +18            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +19        return headers
    +20
    +21    @validator("data")
    +22    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +23        if len({len(lst) for lst in data}) > 1:
    +24            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +25        return data
    +26
    +27    @property
    +28    def fuel_values(self) -> List[float]:
    +29        return self.data[self.headers.index("FUEL")]
    +30
    +31    @property
    +32    def power_values(self) -> List[float]:
    +33        return self.data[self.headers.index("POWER")]
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @validator('headers')
    + + def + validate_headers(cls, headers: List[str]) -> List[str]: + + + +
    + +
    14    @validator("headers")
    +15    def validate_headers(cls, headers: List[str]) -> List[str]:
    +16        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +17        if not is_valid_headers:
    +18            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +19        return headers
    +
    + + + + +
    +
    + +
    +
    @validator('data')
    + + def + validate_data(cls, data: List[List[float]]) -> List[List[float]]: + + + +
    + +
    21    @validator("data")
    +22    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +23        if len({len(lst) for lst in data}) > 1:
    +24            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +25        return data
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/pump.html b/docs/about/references/api/libecalc/dto/models/pump.html new file mode 100644 index 0000000000..f6e37c1608 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/pump.html @@ -0,0 +1,404 @@ + + + + + + + libecalc.dto.models.pump API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.pump

    + + + + + + +
     1from typing import Literal, Optional, Union
    + 2
    + 3from pydantic import validator
    + 4
    + 5from libecalc.dto.models.base import ConsumerFunction, EnergyModel
    + 6from libecalc.dto.models.chart import SingleSpeedChart, VariableSpeedChart
    + 7from libecalc.dto.types import ConsumerType, EnergyModelType, EnergyUsageType
    + 8from libecalc.dto.utils.validators import convert_expression
    + 9from libecalc.expression import Expression
    +10
    +11
    +12class PumpModel(EnergyModel):
    +13    typ: Literal[EnergyModelType.PUMP_MODEL] = EnergyModelType.PUMP_MODEL
    +14    chart: Union[SingleSpeedChart, VariableSpeedChart]
    +15    head_margin: float
    +16
    +17
    +18class PumpConsumerFunction(ConsumerFunction):
    +19    typ: Literal[ConsumerType.PUMP] = ConsumerType.PUMP
    +20    energy_usage_type = EnergyUsageType.POWER
    +21    power_loss_factor: Optional[Expression]
    +22    model: PumpModel
    +23    rate_standard_m3_day: Expression
    +24    suction_pressure: Expression
    +25    discharge_pressure: Expression
    +26    fluid_density: Expression
    +27
    +28    _convert_pump_expressions = validator(
    +29        "rate_standard_m3_day",
    +30        "suction_pressure",
    +31        "discharge_pressure",
    +32        "fluid_density",
    +33        "power_loss_factor",
    +34        allow_reuse=True,
    +35        pre=True,
    +36    )(convert_expression)
    +
    + + +
    +
    + +
    + + class + PumpModel(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    13class PumpModel(EnergyModel):
    +14    typ: Literal[EnergyModelType.PUMP_MODEL] = EnergyModelType.PUMP_MODEL
    +15    chart: Union[SingleSpeedChart, VariableSpeedChart]
    +16    head_margin: float
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + PumpConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    19class PumpConsumerFunction(ConsumerFunction):
    +20    typ: Literal[ConsumerType.PUMP] = ConsumerType.PUMP
    +21    energy_usage_type = EnergyUsageType.POWER
    +22    power_loss_factor: Optional[Expression]
    +23    model: PumpModel
    +24    rate_standard_m3_day: Expression
    +25    suction_pressure: Expression
    +26    discharge_pressure: Expression
    +27    fluid_density: Expression
    +28
    +29    _convert_pump_expressions = validator(
    +30        "rate_standard_m3_day",
    +31        "suction_pressure",
    +32        "discharge_pressure",
    +33        "fluid_density",
    +34        "power_loss_factor",
    +35        allow_reuse=True,
    +36        pre=True,
    +37    )(convert_expression)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/sampled.html b/docs/about/references/api/libecalc/dto/models/sampled.html new file mode 100644 index 0000000000..27192e727e --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/sampled.html @@ -0,0 +1,309 @@ + + + + + + + libecalc.dto.models.sampled API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.sampled

    + + + + + + +
     1from typing import List
    + 2
    + 3from libecalc.dto.models.base import EnergyModel
    + 4
    + 5
    + 6class EnergyModelSampled(EnergyModel):
    + 7    headers: List[str]
    + 8    data: List[List[float]]
    + 9    # TODO: validate number of headers equals number of vectors
    +10    # validate all vectors (in data) have equal length
    +
    + + +
    +
    + +
    + + class + EnergyModelSampled(libecalc.dto.models.base.EnergyModel): + + + +
    + +
     7class EnergyModelSampled(EnergyModel):
    + 8    headers: List[str]
    + 9    data: List[List[float]]
    +10    # TODO: validate number of headers equals number of vectors
    +11    # validate all vectors (in data) have equal length
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/tabulated.html b/docs/about/references/api/libecalc/dto/models/tabulated.html new file mode 100644 index 0000000000..f488f30723 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/tabulated.html @@ -0,0 +1,478 @@ + + + + + + + libecalc.dto.models.tabulated API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.tabulated

    + + + + + + +
     1from typing import List, Literal, Optional
    + 2
    + 3from pydantic import validator
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6from libecalc.dto.models.base import ConsumerFunction
    + 7from libecalc.dto.models.sampled import EnergyModelSampled
    + 8from libecalc.dto.types import ConsumerType, EnergyModelType
    + 9from libecalc.dto.utils.validators import convert_expression
    +10from libecalc.expression import Expression
    +11
    +12
    +13class TabulatedData(EnergyModelSampled):
    +14    typ: Literal[EnergyModelType.TABULATED] = EnergyModelType.TABULATED
    +15
    +16    @validator("headers")
    +17    def validate_headers(cls, headers: List[str]) -> List[str]:
    +18        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +19        if not is_valid_headers:
    +20            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +21        return headers
    +22
    +23
    +24class Variables(EcalcBaseModel):
    +25    name: str
    +26    expression: Expression
    +27
    +28    _convert_variable_expression = validator("expression", allow_reuse=True, pre=True)(convert_expression)
    +29
    +30
    +31class TabulatedConsumerFunction(ConsumerFunction):
    +32    typ: Literal[ConsumerType.TABULATED] = ConsumerType.TABULATED
    +33    power_loss_factor: Optional[Expression]
    +34    model: TabulatedData
    +35    variables: List[Variables]
    +36
    +37    _convert_to_expression = validator("power_loss_factor", allow_reuse=True, pre=True)(convert_expression)
    +
    + + +
    +
    + +
    + + class + TabulatedData(libecalc.dto.models.sampled.EnergyModelSampled): + + + +
    + +
    14class TabulatedData(EnergyModelSampled):
    +15    typ: Literal[EnergyModelType.TABULATED] = EnergyModelType.TABULATED
    +16
    +17    @validator("headers")
    +18    def validate_headers(cls, headers: List[str]) -> List[str]:
    +19        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +20        if not is_valid_headers:
    +21            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +22        return headers
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @validator('headers')
    + + def + validate_headers(cls, headers: List[str]) -> List[str]: + + + +
    + +
    17    @validator("headers")
    +18    def validate_headers(cls, headers: List[str]) -> List[str]:
    +19        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +20        if not is_valid_headers:
    +21            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +22        return headers
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + Variables(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    25class Variables(EcalcBaseModel):
    +26    name: str
    +27    expression: Expression
    +28
    +29    _convert_variable_expression = validator("expression", allow_reuse=True, pre=True)(convert_expression)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + TabulatedConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    32class TabulatedConsumerFunction(ConsumerFunction):
    +33    typ: Literal[ConsumerType.TABULATED] = ConsumerType.TABULATED
    +34    power_loss_factor: Optional[Expression]
    +35    model: TabulatedData
    +36    variables: List[Variables]
    +37
    +38    _convert_to_expression = validator("power_loss_factor", allow_reuse=True, pre=True)(convert_expression)
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/turbine.html b/docs/about/references/api/libecalc/dto/models/turbine.html new file mode 100644 index 0000000000..563481332f --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/turbine.html @@ -0,0 +1,372 @@ + + + + + + + libecalc.dto.models.turbine API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.turbine

    + + + + + + +
     1from typing import Any, Dict, List, Literal
    + 2
    + 3from pydantic import confloat, root_validator
    + 4
    + 5from libecalc.dto.types import EnergyModelType
    + 6
    + 7from .base import EnergyModel
    + 8
    + 9
    +10class Turbine(EnergyModel):
    +11    typ: Literal[EnergyModelType.TURBINE] = EnergyModelType.TURBINE  # type: ignore
    +12    lower_heating_value: confloat(ge=0)  # type: ignore
    +13    turbine_loads: List[confloat(ge=0)]  # type: ignore
    +14    turbine_efficiency_fractions: List[float]
    +15
    +16    @root_validator
    +17    def validate_loads_and_efficiency_factors(cls, values: Dict[str, Any]) -> Dict[str, Any]:
    +18        turbine_loads, turbine_efficiencies = (
    +19            values["turbine_loads"],
    +20            values["turbine_efficiency_fractions"],
    +21        )
    +22        if len(turbine_loads) != len(turbine_efficiencies):
    +23            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +24
    +25        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +26            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +27        return values
    +
    + + +
    +
    + +
    + + class + Turbine(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    11class Turbine(EnergyModel):
    +12    typ: Literal[EnergyModelType.TURBINE] = EnergyModelType.TURBINE  # type: ignore
    +13    lower_heating_value: confloat(ge=0)  # type: ignore
    +14    turbine_loads: List[confloat(ge=0)]  # type: ignore
    +15    turbine_efficiency_fractions: List[float]
    +16
    +17    @root_validator
    +18    def validate_loads_and_efficiency_factors(cls, values: Dict[str, Any]) -> Dict[str, Any]:
    +19        turbine_loads, turbine_efficiencies = (
    +20            values["turbine_loads"],
    +21            values["turbine_efficiency_fractions"],
    +22        )
    +23        if len(turbine_loads) != len(turbine_efficiencies):
    +24            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +25
    +26        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +27            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +28        return values
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @root_validator
    + + def + validate_loads_and_efficiency_factors(cls, values: Dict[str, Any]) -> Dict[str, Any]: + + + +
    + +
    17    @root_validator
    +18    def validate_loads_and_efficiency_factors(cls, values: Dict[str, Any]) -> Dict[str, Any]:
    +19        turbine_loads, turbine_efficiencies = (
    +20            values["turbine_loads"],
    +21            values["turbine_efficiency_fractions"],
    +22        )
    +23        if len(turbine_loads) != len(turbine_efficiencies):
    +24            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +25
    +26        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +27            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +28        return values
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/node_info.html b/docs/about/references/api/libecalc/dto/node_info.html new file mode 100644 index 0000000000..7d41bdfe60 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/node_info.html @@ -0,0 +1,302 @@ + + + + + + + libecalc.dto.node_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.node_info

    + + + + + + +
     1from pydantic import BaseModel
    + 2
    + 3from libecalc.common.component_info.component_level import ComponentLevel
    + 4from libecalc.dto.base import ComponentType
    + 5from libecalc.dto.utils.validators import ComponentNameStr
    + 6
    + 7
    + 8class NodeInfo(BaseModel):
    + 9    id: str
    +10    name: ComponentNameStr
    +11    component_level: ComponentLevel
    +12    component_type: ComponentType
    +
    + + +
    +
    + +
    + + class + NodeInfo(pydantic.main.BaseModel): + + + +
    + +
     9class NodeInfo(BaseModel):
    +10    id: str
    +11    name: ComponentNameStr
    +12    component_level: ComponentLevel
    +13    component_type: ComponentType
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result.html b/docs/about/references/api/libecalc/dto/result.html new file mode 100644 index 0000000000..95a5cc5095 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result.html @@ -0,0 +1,263 @@ + + + + + + + libecalc.dto.result API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result

    + + + + + + +
     1from .emission import EmissionResult
    + 2from .results import (
    + 3    AssetResult,
    + 4    ComponentResult,
    + 5    CompressorModelResult,
    + 6    CompressorResult,
    + 7    ConsumerModelResult,
    + 8    ConsumerSystemResult,
    + 9    DirectEmitterResult,
    +10    EcalcModelResult,
    +11    GeneratorSetResult,
    +12    GenericConsumerResult,
    +13    GenericModelResult,
    +14    InstallationResult,
    +15    PumpModelResult,
    +16    PumpResult,
    +17)
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/base.html b/docs/about/references/api/libecalc/dto/result/base.html new file mode 100644 index 0000000000..c87ac07b10 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/base.html @@ -0,0 +1,366 @@ + + + + + + + libecalc.dto.result.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.base

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from pydantic import validator
    + 4
    + 5from libecalc.common.math.numbers import Numbers
    + 6from libecalc.common.utils.rates import TimeSeries, TimeSeriesInt
    + 7from libecalc.dto.base import EcalcBaseModel
    + 8
    + 9
    +10def control_maximum_decimals(v):
    +11    """Control maximum number of decimals and convert null-floats to NaN."""
    +12    if isinstance(v, TimeSeries) and not isinstance(v, TimeSeriesInt):
    +13        return v.copy(
    +14            update={
    +15                "values": [
    +16                    float(Numbers.format_to_precision(n, precision=6)) if n is not None else n for n in v.values
    +17                ],
    +18            }
    +19        )
    +20
    +21    if isinstance(v, float):
    +22        if v.is_integer():
    +23            return v
    +24
    +25        return float(Numbers.format_to_precision(v, precision=6))
    +26
    +27    return v
    +28
    +29
    +30class EcalcResultBaseModel(EcalcBaseModel):
    +31    _pre_control_maximum_decimals = validator("*", pre=False, each_item=True, allow_reuse=True)(
    +32        control_maximum_decimals
    +33    )
    +
    + + +
    +
    + +
    + + def + control_maximum_decimals(v): + + + +
    + +
    11def control_maximum_decimals(v):
    +12    """Control maximum number of decimals and convert null-floats to NaN."""
    +13    if isinstance(v, TimeSeries) and not isinstance(v, TimeSeriesInt):
    +14        return v.copy(
    +15            update={
    +16                "values": [
    +17                    float(Numbers.format_to_precision(n, precision=6)) if n is not None else n for n in v.values
    +18                ],
    +19            }
    +20        )
    +21
    +22    if isinstance(v, float):
    +23        if v.is_integer():
    +24            return v
    +25
    +26        return float(Numbers.format_to_precision(v, precision=6))
    +27
    +28    return v
    +
    + + +

    Control maximum number of decimals and convert null-floats to NaN.

    +
    + + +
    +
    + +
    + + class + EcalcResultBaseModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    31class EcalcResultBaseModel(EcalcBaseModel):
    +32    _pre_control_maximum_decimals = validator("*", pre=False, each_item=True, allow_reuse=True)(
    +33        control_maximum_decimals
    +34    )
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/emission.html b/docs/about/references/api/libecalc/dto/result/emission.html new file mode 100644 index 0000000000..a3f7ec1490 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/emission.html @@ -0,0 +1,720 @@ + + + + + + + libecalc.dto.result.emission API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.emission

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from datetime import datetime
    +  4from typing import List
    +  5
    +  6from typing_extensions import Self
    +  7
    +  8from libecalc.common.units import Unit
    +  9from libecalc.common.utils.rates import (
    + 10    TimeSeriesFloat,
    + 11    TimeSeriesIntensity,
    + 12    TimeSeriesRate,
    + 13    TimeSeriesVolumesCumulative,
    + 14)
    + 15from libecalc.core.result.emission import EmissionResult as EmissionCoreResult
    + 16from libecalc.dto.result.simple import SimpleEmissionResult
    + 17from libecalc.dto.result.tabular_time_series import TabularTimeSeries
    + 18
    + 19
    + 20class EmissionResult(TabularTimeSeries):
    + 21    """The emissions for a result component."""
    + 22
    + 23    name: str
    + 24    rate: TimeSeriesRate
    + 25    cumulative: TimeSeriesVolumesCumulative
    + 26    tax: TimeSeriesRate
    + 27    tax_cumulative: TimeSeriesVolumesCumulative
    + 28    quota: TimeSeriesRate
    + 29    quota_cumulative: TimeSeriesVolumesCumulative
    + 30
    + 31    def simple_result(self):
    + 32        return SimpleEmissionResult(**self.dict())
    + 33
    + 34    @classmethod
    + 35    def create_empty(cls, name: str, timesteps: List[datetime]):
    + 36        """Empty placeholder for emissions, when needed
    + 37
    + 38        Args:
    + 39            name:
    + 40            timesteps:
    + 41
    + 42        Returns:
    + 43
    + 44        """
    + 45        return cls(
    + 46            name=name,
    + 47            timesteps=timesteps,
    + 48            rate=TimeSeriesRate(
    + 49                timesteps=timesteps,
    + 50                values=[0] * len(timesteps),
    + 51                unit=Unit.TONS_PER_DAY,
    + 52            ),
    + 53            cumulative=TimeSeriesVolumesCumulative(
    + 54                timesteps=timesteps,
    + 55                values=[0] * len(timesteps),
    + 56                unit=Unit.TONS,
    + 57            ),
    + 58            tax=TimeSeriesRate(
    + 59                timesteps=timesteps,
    + 60                values=[0] * len(timesteps),
    + 61                unit=Unit.NORWEGIAN_KRONER_PER_DAY,
    + 62            ),
    + 63            tax_cumulative=TimeSeriesVolumesCumulative(
    + 64                timesteps=timesteps,
    + 65                values=[0] * len(timesteps),
    + 66                unit=Unit.NORWEGIAN_KRONER,
    + 67            ),
    + 68            quota=TimeSeriesRate(
    + 69                timesteps=timesteps,
    + 70                values=[0] * len(timesteps),
    + 71                unit=Unit.NORWEGIAN_KRONER_PER_DAY,
    + 72            ),
    + 73            quota_cumulative=TimeSeriesVolumesCumulative(
    + 74                timesteps=timesteps,
    + 75                values=[0] * len(timesteps),
    + 76                unit=Unit.NORWEGIAN_KRONER,
    + 77            ),
    + 78        )
    + 79
    + 80
    + 81class PartialEmissionResult(TabularTimeSeries):
    + 82    """The partial emissions - a direct translation from the core emission results"""
    + 83
    + 84    name: str
    + 85    rate: TimeSeriesRate
    + 86    tax: TimeSeriesRate
    + 87    quota: TimeSeriesRate
    + 88
    + 89    @classmethod
    + 90    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    + 91        return PartialEmissionResult(
    + 92            name=emission_result.name,
    + 93            timesteps=emission_result.timesteps,
    + 94            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    + 95            tax=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.tax, regularity),
    + 96            quota=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.quota, regularity),
    + 97        )
    + 98
    + 99
    +100class EmissionIntensityResult(TabularTimeSeries):
    +101    name: str
    +102    intensity_sm3: TimeSeriesIntensity
    +103    intensity_boe: TimeSeriesIntensity
    +104    intensity_yearly_sm3: TimeSeriesIntensity
    +105    intensity_yearly_boe: TimeSeriesIntensity
    +
    + + +
    +
    + +
    + + class + EmissionResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    21class EmissionResult(TabularTimeSeries):
    +22    """The emissions for a result component."""
    +23
    +24    name: str
    +25    rate: TimeSeriesRate
    +26    cumulative: TimeSeriesVolumesCumulative
    +27    tax: TimeSeriesRate
    +28    tax_cumulative: TimeSeriesVolumesCumulative
    +29    quota: TimeSeriesRate
    +30    quota_cumulative: TimeSeriesVolumesCumulative
    +31
    +32    def simple_result(self):
    +33        return SimpleEmissionResult(**self.dict())
    +34
    +35    @classmethod
    +36    def create_empty(cls, name: str, timesteps: List[datetime]):
    +37        """Empty placeholder for emissions, when needed
    +38
    +39        Args:
    +40            name:
    +41            timesteps:
    +42
    +43        Returns:
    +44
    +45        """
    +46        return cls(
    +47            name=name,
    +48            timesteps=timesteps,
    +49            rate=TimeSeriesRate(
    +50                timesteps=timesteps,
    +51                values=[0] * len(timesteps),
    +52                unit=Unit.TONS_PER_DAY,
    +53            ),
    +54            cumulative=TimeSeriesVolumesCumulative(
    +55                timesteps=timesteps,
    +56                values=[0] * len(timesteps),
    +57                unit=Unit.TONS,
    +58            ),
    +59            tax=TimeSeriesRate(
    +60                timesteps=timesteps,
    +61                values=[0] * len(timesteps),
    +62                unit=Unit.NORWEGIAN_KRONER_PER_DAY,
    +63            ),
    +64            tax_cumulative=TimeSeriesVolumesCumulative(
    +65                timesteps=timesteps,
    +66                values=[0] * len(timesteps),
    +67                unit=Unit.NORWEGIAN_KRONER,
    +68            ),
    +69            quota=TimeSeriesRate(
    +70                timesteps=timesteps,
    +71                values=[0] * len(timesteps),
    +72                unit=Unit.NORWEGIAN_KRONER_PER_DAY,
    +73            ),
    +74            quota_cumulative=TimeSeriesVolumesCumulative(
    +75                timesteps=timesteps,
    +76                values=[0] * len(timesteps),
    +77                unit=Unit.NORWEGIAN_KRONER,
    +78            ),
    +79        )
    +
    + + +

    The emissions for a result component.

    +
    + + +
    + +
    + + def + simple_result(self): + + + +
    + +
    32    def simple_result(self):
    +33        return SimpleEmissionResult(**self.dict())
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + create_empty(cls, name: str, timesteps: List[datetime.datetime]): + + + +
    + +
    35    @classmethod
    +36    def create_empty(cls, name: str, timesteps: List[datetime]):
    +37        """Empty placeholder for emissions, when needed
    +38
    +39        Args:
    +40            name:
    +41            timesteps:
    +42
    +43        Returns:
    +44
    +45        """
    +46        return cls(
    +47            name=name,
    +48            timesteps=timesteps,
    +49            rate=TimeSeriesRate(
    +50                timesteps=timesteps,
    +51                values=[0] * len(timesteps),
    +52                unit=Unit.TONS_PER_DAY,
    +53            ),
    +54            cumulative=TimeSeriesVolumesCumulative(
    +55                timesteps=timesteps,
    +56                values=[0] * len(timesteps),
    +57                unit=Unit.TONS,
    +58            ),
    +59            tax=TimeSeriesRate(
    +60                timesteps=timesteps,
    +61                values=[0] * len(timesteps),
    +62                unit=Unit.NORWEGIAN_KRONER_PER_DAY,
    +63            ),
    +64            tax_cumulative=TimeSeriesVolumesCumulative(
    +65                timesteps=timesteps,
    +66                values=[0] * len(timesteps),
    +67                unit=Unit.NORWEGIAN_KRONER,
    +68            ),
    +69            quota=TimeSeriesRate(
    +70                timesteps=timesteps,
    +71                values=[0] * len(timesteps),
    +72                unit=Unit.NORWEGIAN_KRONER_PER_DAY,
    +73            ),
    +74            quota_cumulative=TimeSeriesVolumesCumulative(
    +75                timesteps=timesteps,
    +76                values=[0] * len(timesteps),
    +77                unit=Unit.NORWEGIAN_KRONER,
    +78            ),
    +79        )
    +
    + + +

    Empty placeholder for emissions, when needed

    + +

    Args: + name: + timesteps:

    + +

    Returns:

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + PartialEmissionResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    82class PartialEmissionResult(TabularTimeSeries):
    +83    """The partial emissions - a direct translation from the core emission results"""
    +84
    +85    name: str
    +86    rate: TimeSeriesRate
    +87    tax: TimeSeriesRate
    +88    quota: TimeSeriesRate
    +89
    +90    @classmethod
    +91    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    +92        return PartialEmissionResult(
    +93            name=emission_result.name,
    +94            timesteps=emission_result.timesteps,
    +95            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    +96            tax=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.tax, regularity),
    +97            quota=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.quota, regularity),
    +98        )
    +
    + + +

    The partial emissions - a direct translation from the core emission results

    +
    + + +
    + +
    +
    @classmethod
    + + def + from_emission_core_result( cls, emission_result: libecalc.core.result.emission.EmissionResult, regularity: libecalc.common.utils.rates.TimeSeriesFloat) -> typing_extensions.Self: + + + +
    + +
    90    @classmethod
    +91    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    +92        return PartialEmissionResult(
    +93            name=emission_result.name,
    +94            timesteps=emission_result.timesteps,
    +95            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    +96            tax=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.tax, regularity),
    +97            quota=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.quota, regularity),
    +98        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + EmissionIntensityResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    101class EmissionIntensityResult(TabularTimeSeries):
    +102    name: str
    +103    intensity_sm3: TimeSeriesIntensity
    +104    intensity_boe: TimeSeriesIntensity
    +105    intensity_yearly_sm3: TimeSeriesIntensity
    +106    intensity_yearly_boe: TimeSeriesIntensity
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/results.html b/docs/about/references/api/libecalc/dto/result/results.html new file mode 100644 index 0000000000..792916faeb --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/results.html @@ -0,0 +1,2067 @@ + + + + + + + libecalc.dto.result.results API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.results

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from operator import attrgetter
    +  4from typing import Any, Dict, List, Literal, Optional, Union
    +  5
    +  6from pydantic import Field, validator
    +  7from typing_extensions import Annotated
    +  8
    +  9from libecalc.common.component_info.component_level import ComponentLevel
    + 10from libecalc.common.logger import logger
    + 11from libecalc.common.stream_conditions import Stage
    + 12from libecalc.common.time_utils import Frequency
    + 13from libecalc.common.units import Unit
    + 14from libecalc.common.utils.rates import (
    + 15    TimeSeriesBoolean,
    + 16    TimeSeriesFloat,
    + 17    TimeSeriesInt,
    + 18    TimeSeriesRate,
    + 19    TimeSeriesVolumesCumulative,
    + 20)
    + 21from libecalc.core.models.results.compressor import (
    + 22    CompressorTrainCommonShaftFailureStatus,
    + 23)
    + 24from libecalc.dto.base import ComponentType
    + 25from libecalc.dto.models import SingleSpeedChart, VariableSpeedChart
    + 26from libecalc.dto.result.base import EcalcResultBaseModel
    + 27from libecalc.dto.result.emission import EmissionIntensityResult, EmissionResult
    + 28from libecalc.dto.result.simple import SimpleComponentResult, SimpleResultData
    + 29from libecalc.dto.result.tabular_time_series import TabularTimeSeries
    + 30
    + 31
    + 32class NodeInfo(EcalcResultBaseModel):
    + 33    componentType: ComponentType
    + 34    component_level: ComponentLevel
    + 35    parent: Optional[str]  # reference parent id
    + 36    name: str
    + 37
    + 38
    + 39class CommonResultBase(TabularTimeSeries):
    + 40    """Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc."""
    + 41
    + 42    # we need to use camelCase here due to serialization/stub restrictions wrt FE stub generation
    + 43
    + 44    is_valid: TimeSeriesBoolean
    + 45
    + 46    # We need both energy usage and power rate since we sometimes want both fuel and power usage.
    + 47    energy_usage: TimeSeriesRate
    + 48    energy_usage_cumulative: TimeSeriesVolumesCumulative
    + 49
    + 50    power: Optional[TimeSeriesRate] = None
    + 51    power_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    + 52
    + 53
    + 54class ComponentResultBase(CommonResultBase, NodeInfo):
    + 55    id: str
    + 56    emissions: Dict[str, EmissionResult]
    + 57
    + 58    def simple_result(self):
    + 59        return SimpleComponentResult(**self.dict())
    + 60
    + 61
    + 62class EquipmentResultBase(ComponentResultBase):
    + 63    ...
    + 64
    + 65
    + 66class AssetResult(ComponentResultBase):
    + 67    """The aggregated eCalc model result."""
    + 68
    + 69    componentType: Literal[ComponentType.ASSET]
    + 70    hydrocarbon_export_rate: TimeSeriesRate
    + 71    emission_intensities: List[EmissionIntensityResult]
    + 72
    + 73
    + 74class InstallationResult(AssetResult):
    + 75    """The installation result component."""
    + 76
    + 77    componentType: Literal[ComponentType.INSTALLATION]
    + 78    regularity: TimeSeriesFloat  # Regularity is currently set at per installation, send through. Possibly skip in output if confusing
    + 79
    + 80
    + 81class GeneratorSetResult(EquipmentResultBase):
    + 82    """The Generator set result component."""
    + 83
    + 84    componentType: Literal[ComponentType.GENERATOR_SET]
    + 85    power_capacity_margin: TimeSeriesRate
    + 86
    + 87
    + 88class ConsumerSystemResult(EquipmentResultBase):
    + 89    componentType: Literal[
    + 90        ComponentType.PUMP_SYSTEM,
    + 91        ComponentType.COMPRESSOR_SYSTEM,
    + 92        ComponentType.CONSUMER_SYSTEM_V2,
    + 93    ]
    + 94
    + 95    consumer_type: Literal[ComponentType.COMPRESSOR, ComponentType.PUMP] = None
    + 96
    + 97    @validator("consumer_type", pre=True)
    + 98    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, values):
    + 99        """
    +100        Set consumer type for legacy system where component type contains the same information.
    +101        """
    +102        component_type = values.get("componentType")
    +103        if consumer_type is None:
    +104            if component_type == ComponentType.PUMP_SYSTEM:
    +105                return ComponentType.PUMP
    +106            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +107                return ComponentType.COMPRESSOR
    +108
    +109        return consumer_type
    +110
    +111    operational_settings_used: Optional[TimeSeriesInt] = Field(
    +112        None,
    +113        description="The operational settings used for this system. "
    +114        "0 indicates that no valid operational setting was found.",
    +115    )
    +116    operational_settings_results: Optional[Dict[int, List[Any]]]
    +117
    +118
    +119class GenericConsumerResult(EquipmentResultBase):
    +120    componentType: Literal[ComponentType.GENERIC]
    +121
    +122
    +123class PumpResult(EquipmentResultBase):
    +124    componentType: Literal[ComponentType.PUMP]
    +125    inlet_liquid_rate_m3_per_day: TimeSeriesRate
    +126    inlet_pressure_bar: TimeSeriesFloat
    +127    outlet_pressure_bar: TimeSeriesFloat
    +128    operational_head: TimeSeriesFloat
    +129
    +130    stages: List[Stage] = None  # Optional because only in v2
    +131
    +132
    +133class CompressorResult(EquipmentResultBase):
    +134    componentType: Literal[ComponentType.COMPRESSOR]
    +135    recirculation_loss: TimeSeriesRate
    +136    rate_exceeds_maximum: TimeSeriesBoolean
    +137    outlet_pressure_before_choking: TimeSeriesFloat
    +138
    +139    stages: List[Stage] = None  # Optional because only in v2
    +140
    +141
    +142class DirectEmitterResult(EquipmentResultBase):
    +143    componentType: Literal[ComponentType.DIRECT_EMITTER]
    +144
    +145
    +146class ConsumerModelResultBase(NodeInfo, CommonResultBase):
    +147    """The Consumer base result component."""
    +148
    +149    ...
    +150
    +151
    +152class PumpModelResult(ConsumerModelResultBase):
    +153    """The Pump result component."""
    +154
    +155    componentType: Literal[ComponentType.PUMP]
    +156    inlet_liquid_rate_m3_per_day: Optional[TimeSeriesRate]
    +157    inlet_pressure_bar: Optional[TimeSeriesFloat]
    +158    outlet_pressure_bar: Optional[TimeSeriesFloat]
    +159    operational_head: Optional[TimeSeriesFloat]
    +160    is_valid: TimeSeriesBoolean
    +161
    +162
    +163class TurbineModelResult(EcalcResultBaseModel):
    +164    energy_usage_unit: Unit
    +165    power_unit: Unit
    +166    efficiency: TimeSeriesFloat
    +167    energy_usage: TimeSeriesRate
    +168    exceeds_maximum_load: TimeSeriesBoolean
    +169    fuel_rate: TimeSeriesRate
    +170    is_valid: TimeSeriesBoolean
    +171    load: TimeSeriesRate
    +172    power: TimeSeriesRate
    +173
    +174
    +175class CompressorStreamConditionResult(EcalcResultBaseModel):
    +176    actual_rate_m3_per_hr: TimeSeriesRate
    +177    actual_rate_before_asv_m3_per_hr: TimeSeriesRate
    +178    kappa: TimeSeriesFloat
    +179    density_kg_per_m3: TimeSeriesRate
    +180    pressure: TimeSeriesFloat
    +181    pressure_before_choking: TimeSeriesFloat
    +182    temperature_kelvin: TimeSeriesFloat
    +183    z: TimeSeriesFloat
    +184
    +185
    +186class CompressorModelStageResult(EcalcResultBaseModel):
    +187    chart: Optional[Union[SingleSpeedChart, VariableSpeedChart]]
    +188    chart_area_flags: List[str]
    +189    energy_usage_unit: Unit
    +190    power_unit: Unit
    +191    fluid_composition: Dict[str, Optional[float]]
    +192
    +193    head_exceeds_maximum: TimeSeriesBoolean
    +194    is_valid: TimeSeriesBoolean
    +195    polytropic_efficiency: TimeSeriesFloat
    +196    polytropic_enthalpy_change_before_choke_kJ_per_kg: TimeSeriesFloat
    +197    polytropic_enthalpy_change_kJ_per_kg: TimeSeriesFloat
    +198    polytropic_head_kJ_per_kg: TimeSeriesFloat
    +199    asv_recirculation_loss_mw: TimeSeriesRate
    +200    energy_usage: TimeSeriesRate
    +201    mass_rate_kg_per_hr: TimeSeriesRate
    +202    mass_rate_before_asv_kg_per_hr: TimeSeriesRate
    +203    power: TimeSeriesRate
    +204    pressure_is_choked: TimeSeriesBoolean
    +205    rate_exceeds_maximum: TimeSeriesBoolean
    +206    rate_has_recirculation: TimeSeriesBoolean
    +207    speed: TimeSeriesFloat
    +208    inlet_stream_condition: CompressorStreamConditionResult
    +209    outlet_stream_condition: CompressorStreamConditionResult
    +210
    +211
    +212class CompressorModelResult(ConsumerModelResultBase):
    +213    componentType: Literal[ComponentType.COMPRESSOR]
    +214    failure_status: List[Optional[CompressorTrainCommonShaftFailureStatus]]
    +215    requested_inlet_pressure: TimeSeriesFloat
    +216    requested_outlet_pressure: TimeSeriesFloat
    +217    rate: TimeSeriesRate
    +218    stage_results: List[CompressorModelStageResult]
    +219    turbine_result: Optional[TurbineModelResult] = None
    +220    energy_usage_unit: Unit
    +221    power_unit: Unit
    +222
    +223
    +224class GenericModelResult(ConsumerModelResultBase):
    +225    """Generic consumer result component."""
    +226
    +227    componentType: Literal[ComponentType.GENERIC]
    +228
    +229
    +230# Consumer result is referred to as ENERGY_USAGE_MODEL in the input YAML
    +231ConsumerModelResult = Annotated[
    +232    Union[CompressorModelResult, PumpModelResult, GenericModelResult],
    +233    Field(discriminator="componentType"),
    +234]
    +235
    +236ComponentResult = Annotated[
    +237    Union[
    +238        AssetResult,
    +239        InstallationResult,
    +240        GeneratorSetResult,
    +241        ConsumerSystemResult,
    +242        CompressorResult,
    +243        PumpResult,
    +244        GenericConsumerResult,
    +245        DirectEmitterResult,
    +246    ],
    +247    Field(discriminator="componentType"),
    +248]
    +249
    +250
    +251class EcalcModelResult(EcalcResultBaseModel):
    +252    """Result object holding one component for each part of the eCalc model run:
    +253
    +254    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult
    +255    """
    +256
    +257    component_result: ComponentResult
    +258    # Setting min and max items to be able to generate OpenAPI:
    +259    # Ref. https://github.com/developmentseed/geojson-pydantic/issues/42
    +260    sub_components: Annotated[List[ComponentResult], Field(min_items=0, max_items=10000)]
    +261    models: Annotated[List[ConsumerModelResult], Field(min_items=0, max_items=10000)]
    +262
    +263    @validator("sub_components")
    +264    def sort_sub_components(cls, sub_components):
    +265        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +266
    +267    @validator("models")
    +268    def sort_models(cls, models):
    +269        return sorted(models, key=attrgetter("componentType", "name"))
    +270
    +271    @property
    +272    def timesteps(self):
    +273        return self.component_result.timesteps
    +274
    +275    @property
    +276    def components(self):
    +277        return [self.component_result, *self.sub_components]
    +278
    +279    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +280        return [component for component in self.components if component.id in component_ids]
    +281
    +282    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +283        components = [component for component in self.components if component.name == component_name]
    +284        if not components:
    +285            return None
    +286
    +287        if len(components) > 1:
    +288            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +289
    +290        return components[0]
    +291
    +292    def simple_result(self):
    +293        return SimpleResultData(
    +294            timesteps=self.timesteps, components=[component.simple_result() for component in self.components]
    +295        )
    +296
    +297    def resample(self, freq: Frequency) -> EcalcModelResult:
    +298        return self.__class__(
    +299            component_result=self.component_result.resample(freq),
    +300            sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +301            models=[model.resample(freq) for model in self.models],
    +302        )
    +
    + + +
    +
    + +
    + + class + NodeInfo(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    33class NodeInfo(EcalcResultBaseModel):
    +34    componentType: ComponentType
    +35    component_level: ComponentLevel
    +36    parent: Optional[str]  # reference parent id
    +37    name: str
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + CommonResultBase(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    40class CommonResultBase(TabularTimeSeries):
    +41    """Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc."""
    +42
    +43    # we need to use camelCase here due to serialization/stub restrictions wrt FE stub generation
    +44
    +45    is_valid: TimeSeriesBoolean
    +46
    +47    # We need both energy usage and power rate since we sometimes want both fuel and power usage.
    +48    energy_usage: TimeSeriesRate
    +49    energy_usage_cumulative: TimeSeriesVolumesCumulative
    +50
    +51    power: Optional[TimeSeriesRate] = None
    +52    power_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + ComponentResultBase(CommonResultBase, NodeInfo): + + + +
    + +
    55class ComponentResultBase(CommonResultBase, NodeInfo):
    +56    id: str
    +57    emissions: Dict[str, EmissionResult]
    +58
    +59    def simple_result(self):
    +60        return SimpleComponentResult(**self.dict())
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    + +
    + + def + simple_result(self): + + + +
    + +
    59    def simple_result(self):
    +60        return SimpleComponentResult(**self.dict())
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + EquipmentResultBase(ComponentResultBase): + + + +
    + +
    63class EquipmentResultBase(ComponentResultBase):
    +64    ...
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + AssetResult(ComponentResultBase): + + + +
    + +
    67class AssetResult(ComponentResultBase):
    +68    """The aggregated eCalc model result."""
    +69
    +70    componentType: Literal[ComponentType.ASSET]
    +71    hydrocarbon_export_rate: TimeSeriesRate
    +72    emission_intensities: List[EmissionIntensityResult]
    +
    + + +

    The aggregated eCalc model result.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + InstallationResult(AssetResult): + + + +
    + +
    75class InstallationResult(AssetResult):
    +76    """The installation result component."""
    +77
    +78    componentType: Literal[ComponentType.INSTALLATION]
    +79    regularity: TimeSeriesFloat  # Regularity is currently set at per installation, send through. Possibly skip in output if confusing
    +
    + + +

    The installation result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + GeneratorSetResult(EquipmentResultBase): + + + +
    + +
    82class GeneratorSetResult(EquipmentResultBase):
    +83    """The Generator set result component."""
    +84
    +85    componentType: Literal[ComponentType.GENERATOR_SET]
    +86    power_capacity_margin: TimeSeriesRate
    +
    + + +

    The Generator set result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + ConsumerSystemResult(EquipmentResultBase): + + + +
    + +
     89class ConsumerSystemResult(EquipmentResultBase):
    + 90    componentType: Literal[
    + 91        ComponentType.PUMP_SYSTEM,
    + 92        ComponentType.COMPRESSOR_SYSTEM,
    + 93        ComponentType.CONSUMER_SYSTEM_V2,
    + 94    ]
    + 95
    + 96    consumer_type: Literal[ComponentType.COMPRESSOR, ComponentType.PUMP] = None
    + 97
    + 98    @validator("consumer_type", pre=True)
    + 99    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, values):
    +100        """
    +101        Set consumer type for legacy system where component type contains the same information.
    +102        """
    +103        component_type = values.get("componentType")
    +104        if consumer_type is None:
    +105            if component_type == ComponentType.PUMP_SYSTEM:
    +106                return ComponentType.PUMP
    +107            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +108                return ComponentType.COMPRESSOR
    +109
    +110        return consumer_type
    +111
    +112    operational_settings_used: Optional[TimeSeriesInt] = Field(
    +113        None,
    +114        description="The operational settings used for this system. "
    +115        "0 indicates that no valid operational setting was found.",
    +116    )
    +117    operational_settings_results: Optional[Dict[int, List[Any]]]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    + +
    +
    @validator('consumer_type', pre=True)
    + + def + set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, values): + + + +
    + +
     98    @validator("consumer_type", pre=True)
    + 99    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, values):
    +100        """
    +101        Set consumer type for legacy system where component type contains the same information.
    +102        """
    +103        component_type = values.get("componentType")
    +104        if consumer_type is None:
    +105            if component_type == ComponentType.PUMP_SYSTEM:
    +106                return ComponentType.PUMP
    +107            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +108                return ComponentType.COMPRESSOR
    +109
    +110        return consumer_type
    +
    + + +

    Set consumer type for legacy system where component type contains the same information.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + GenericConsumerResult(EquipmentResultBase): + + + +
    + +
    120class GenericConsumerResult(EquipmentResultBase):
    +121    componentType: Literal[ComponentType.GENERIC]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + PumpResult(EquipmentResultBase): + + + +
    + +
    124class PumpResult(EquipmentResultBase):
    +125    componentType: Literal[ComponentType.PUMP]
    +126    inlet_liquid_rate_m3_per_day: TimeSeriesRate
    +127    inlet_pressure_bar: TimeSeriesFloat
    +128    outlet_pressure_bar: TimeSeriesFloat
    +129    operational_head: TimeSeriesFloat
    +130
    +131    stages: List[Stage] = None  # Optional because only in v2
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + CompressorResult(EquipmentResultBase): + + + +
    + +
    134class CompressorResult(EquipmentResultBase):
    +135    componentType: Literal[ComponentType.COMPRESSOR]
    +136    recirculation_loss: TimeSeriesRate
    +137    rate_exceeds_maximum: TimeSeriesBoolean
    +138    outlet_pressure_before_choking: TimeSeriesFloat
    +139
    +140    stages: List[Stage] = None  # Optional because only in v2
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + DirectEmitterResult(EquipmentResultBase): + + + +
    + +
    143class DirectEmitterResult(EquipmentResultBase):
    +144    componentType: Literal[ComponentType.DIRECT_EMITTER]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + + +
    +
    +
    +
    + +
    + + class + ConsumerModelResultBase(NodeInfo, CommonResultBase): + + + +
    + +
    147class ConsumerModelResultBase(NodeInfo, CommonResultBase):
    +148    """The Consumer base result component."""
    +149
    +150    ...
    +
    + + +

    The Consumer base result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + PumpModelResult(ConsumerModelResultBase): + + + +
    + +
    153class PumpModelResult(ConsumerModelResultBase):
    +154    """The Pump result component."""
    +155
    +156    componentType: Literal[ComponentType.PUMP]
    +157    inlet_liquid_rate_m3_per_day: Optional[TimeSeriesRate]
    +158    inlet_pressure_bar: Optional[TimeSeriesFloat]
    +159    outlet_pressure_bar: Optional[TimeSeriesFloat]
    +160    operational_head: Optional[TimeSeriesFloat]
    +161    is_valid: TimeSeriesBoolean
    +
    + + +

    The Pump result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + TurbineModelResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    164class TurbineModelResult(EcalcResultBaseModel):
    +165    energy_usage_unit: Unit
    +166    power_unit: Unit
    +167    efficiency: TimeSeriesFloat
    +168    energy_usage: TimeSeriesRate
    +169    exceeds_maximum_load: TimeSeriesBoolean
    +170    fuel_rate: TimeSeriesRate
    +171    is_valid: TimeSeriesBoolean
    +172    load: TimeSeriesRate
    +173    power: TimeSeriesRate
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + CompressorStreamConditionResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    176class CompressorStreamConditionResult(EcalcResultBaseModel):
    +177    actual_rate_m3_per_hr: TimeSeriesRate
    +178    actual_rate_before_asv_m3_per_hr: TimeSeriesRate
    +179    kappa: TimeSeriesFloat
    +180    density_kg_per_m3: TimeSeriesRate
    +181    pressure: TimeSeriesFloat
    +182    pressure_before_choking: TimeSeriesFloat
    +183    temperature_kelvin: TimeSeriesFloat
    +184    z: TimeSeriesFloat
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + CompressorModelStageResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    187class CompressorModelStageResult(EcalcResultBaseModel):
    +188    chart: Optional[Union[SingleSpeedChart, VariableSpeedChart]]
    +189    chart_area_flags: List[str]
    +190    energy_usage_unit: Unit
    +191    power_unit: Unit
    +192    fluid_composition: Dict[str, Optional[float]]
    +193
    +194    head_exceeds_maximum: TimeSeriesBoolean
    +195    is_valid: TimeSeriesBoolean
    +196    polytropic_efficiency: TimeSeriesFloat
    +197    polytropic_enthalpy_change_before_choke_kJ_per_kg: TimeSeriesFloat
    +198    polytropic_enthalpy_change_kJ_per_kg: TimeSeriesFloat
    +199    polytropic_head_kJ_per_kg: TimeSeriesFloat
    +200    asv_recirculation_loss_mw: TimeSeriesRate
    +201    energy_usage: TimeSeriesRate
    +202    mass_rate_kg_per_hr: TimeSeriesRate
    +203    mass_rate_before_asv_kg_per_hr: TimeSeriesRate
    +204    power: TimeSeriesRate
    +205    pressure_is_choked: TimeSeriesBoolean
    +206    rate_exceeds_maximum: TimeSeriesBoolean
    +207    rate_has_recirculation: TimeSeriesBoolean
    +208    speed: TimeSeriesFloat
    +209    inlet_stream_condition: CompressorStreamConditionResult
    +210    outlet_stream_condition: CompressorStreamConditionResult
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + CompressorModelResult(ConsumerModelResultBase): + + + +
    + +
    213class CompressorModelResult(ConsumerModelResultBase):
    +214    componentType: Literal[ComponentType.COMPRESSOR]
    +215    failure_status: List[Optional[CompressorTrainCommonShaftFailureStatus]]
    +216    requested_inlet_pressure: TimeSeriesFloat
    +217    requested_outlet_pressure: TimeSeriesFloat
    +218    rate: TimeSeriesRate
    +219    stage_results: List[CompressorModelStageResult]
    +220    turbine_result: Optional[TurbineModelResult] = None
    +221    energy_usage_unit: Unit
    +222    power_unit: Unit
    +
    + + +

    The Consumer base result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + GenericModelResult(ConsumerModelResultBase): + + + +
    + +
    225class GenericModelResult(ConsumerModelResultBase):
    +226    """Generic consumer result component."""
    +227
    +228    componentType: Literal[ComponentType.GENERIC]
    +
    + + +

    Generic consumer result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + EcalcModelResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    252class EcalcModelResult(EcalcResultBaseModel):
    +253    """Result object holding one component for each part of the eCalc model run:
    +254
    +255    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult
    +256    """
    +257
    +258    component_result: ComponentResult
    +259    # Setting min and max items to be able to generate OpenAPI:
    +260    # Ref. https://github.com/developmentseed/geojson-pydantic/issues/42
    +261    sub_components: Annotated[List[ComponentResult], Field(min_items=0, max_items=10000)]
    +262    models: Annotated[List[ConsumerModelResult], Field(min_items=0, max_items=10000)]
    +263
    +264    @validator("sub_components")
    +265    def sort_sub_components(cls, sub_components):
    +266        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +267
    +268    @validator("models")
    +269    def sort_models(cls, models):
    +270        return sorted(models, key=attrgetter("componentType", "name"))
    +271
    +272    @property
    +273    def timesteps(self):
    +274        return self.component_result.timesteps
    +275
    +276    @property
    +277    def components(self):
    +278        return [self.component_result, *self.sub_components]
    +279
    +280    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +281        return [component for component in self.components if component.id in component_ids]
    +282
    +283    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +284        components = [component for component in self.components if component.name == component_name]
    +285        if not components:
    +286            return None
    +287
    +288        if len(components) > 1:
    +289            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +290
    +291        return components[0]
    +292
    +293    def simple_result(self):
    +294        return SimpleResultData(
    +295            timesteps=self.timesteps, components=[component.simple_result() for component in self.components]
    +296        )
    +297
    +298    def resample(self, freq: Frequency) -> EcalcModelResult:
    +299        return self.__class__(
    +300            component_result=self.component_result.resample(freq),
    +301            sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +302            models=[model.resample(freq) for model in self.models],
    +303        )
    +
    + + +

    Result object holding one component for each part of the eCalc model run:

    + +

    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult

    +
    + + +
    + +
    +
    @validator('sub_components')
    + + def + sort_sub_components(cls, sub_components): + + + +
    + +
    264    @validator("sub_components")
    +265    def sort_sub_components(cls, sub_components):
    +266        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +
    + + + + +
    +
    + +
    +
    @validator('models')
    + + def + sort_models(cls, models): + + + +
    + +
    268    @validator("models")
    +269    def sort_models(cls, models):
    +270        return sorted(models, key=attrgetter("componentType", "name"))
    +
    + + + + +
    +
    + + + +
    280    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +281        return [component for component in self.components if component.id in component_ids]
    +
    + + + + +
    +
    + + + +
    283    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +284        components = [component for component in self.components if component.name == component_name]
    +285        if not components:
    +286            return None
    +287
    +288        if len(components) > 1:
    +289            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +290
    +291        return components[0]
    +
    + + + + +
    +
    + +
    + + def + simple_result(self): + + + +
    + +
    293    def simple_result(self):
    +294        return SimpleResultData(
    +295            timesteps=self.timesteps, components=[component.simple_result() for component in self.components]
    +296        )
    +
    + + + + +
    +
    + +
    + + def + resample( self, freq: libecalc.common.time_utils.Frequency) -> libecalc.dto.result.results.EcalcModelResult: + + + +
    + +
    298    def resample(self, freq: Frequency) -> EcalcModelResult:
    +299        return self.__class__(
    +300            component_result=self.component_result.resample(freq),
    +301            sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +302            models=[model.resample(freq) for model in self.models],
    +303        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/simple.html b/docs/about/references/api/libecalc/dto/result/simple.html new file mode 100644 index 0000000000..237901258f --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/simple.html @@ -0,0 +1,1901 @@ + + + + + + + libecalc.dto.result.simple API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.simple

    + + + + + + +
      1import enum
    +  2from datetime import datetime
    +  3from typing import Dict, List, NamedTuple, Optional, Tuple
    +  4
    +  5from pydantic import Extra, root_validator
    +  6from scipy.interpolate import interp1d
    +  7
    +  8from libecalc.common.component_info.component_level import ComponentLevel
    +  9from libecalc.common.logger import logger
    + 10from libecalc.common.units import Unit
    + 11from libecalc.dto.base import ComponentType
    + 12from libecalc.dto.result.base import EcalcResultBaseModel
    + 13from libecalc.dto.result.types import opt_float
    + 14
    + 15
    + 16class SimpleBase(EcalcResultBaseModel):
    + 17    class Config:
    + 18        extra = Extra.ignore
    + 19
    + 20    def dict(self, exclude_none=True, **kwargs):
    + 21        return super().dict(exclude_none=exclude_none, **kwargs)
    + 22
    + 23    def json(self, **kwargs):
    + 24        return super().json(**kwargs)
    + 25
    + 26
    + 27class SimpleEmissionResult(SimpleBase):
    + 28    name: str
    + 29    rate: List[opt_float]
    + 30
    + 31    @root_validator(pre=True)
    + 32    def convert_time_series(cls, values):
    + 33        rate = values.get("rate")
    + 34
    + 35        if isinstance(rate, dict):
    + 36            # Parsing DTO result to simple
    + 37            values["rate"] = rate["values"]
    + 38
    + 39        return values
    + 40
    + 41    def __sub__(self, reference_emission) -> "SimpleEmissionResult":
    + 42        """Calculate difference between two emission results."""
    + 43        if not isinstance(reference_emission, SimpleEmissionResult):
    + 44            raise TypeError(
    + 45                f"unsupported operand type(s) for -: '{type(self).__name__}' and '{type(reference_emission).__name__}'"
    + 46            )
    + 47        if self.name != reference_emission.name:
    + 48            raise ValueError(f"Can not subtract different emissions: '{self.name}' and '{reference_emission.name}'")
    + 49        return SimpleEmissionResult(
    + 50            name=self.name,
    + 51            rate=_subtract_list(self.rate, reference_emission.rate),
    + 52        )
    + 53
    + 54
    + 55class ComponentID(NamedTuple):
    + 56    componentType: ComponentType
    + 57    name: str
    + 58
    + 59    def __repr__(self):
    + 60        return f"(type: '{self.componentType}', name: '{self.name}')"
    + 61
    + 62
    + 63def _subtract_list(first: List[Optional[float]], second: List[Optional[float]]):
    + 64    subtracted = []
    + 65    for f, s in zip(first, second):
    + 66        if f is None:
    + 67            f = 0
    + 68        if s is None:
    + 69            s = 0
    + 70        subtracted.append(f - s)
    + 71
    + 72    return subtracted
    + 73
    + 74
    + 75class InterpolationMethod(str, enum.Enum):
    + 76    SKIP = "SKIP"
    + 77    LINEAR = "LINEAR"
    + 78    # FILL_ZERO can be handled by scipy, same as linear. kind='zero' if needed.
    + 79
    + 80
    + 81interpolationKindMap = {
    + 82    InterpolationMethod.LINEAR: "linear",
    + 83}
    + 84
    + 85
    + 86def _interpolate_list(
    + 87    x: List[datetime],
    + 88    y: List[float],
    + 89    target_x: List[datetime],
    + 90    method: InterpolationMethod,
    + 91) -> List[float]:
    + 92    if len(y) != len(x):
    + 93        raise ValueError("x and y should have equal length.")
    + 94
    + 95    if len(y) == 0:
    + 96        return []
    + 97
    + 98    if len(y) == 1:
    + 99        return [y[0]] * len(target_x)
    +100
    +101    if x == target_x:
    +102        return y
    +103
    +104    if len(target_x) == 0:
    +105        return []
    +106
    +107    kind = interpolationKindMap[method]
    +108    start = min(x[0], target_x[0])
    +109    x_in_seconds = [(time_step - start).total_seconds() for time_step in x]
    +110    target_x_in_seconds = [(time_step - start).total_seconds() for time_step in target_x]
    +111
    +112    return list(
    +113        interp1d(
    +114            x=x_in_seconds,
    +115            y=y,
    +116            fill_value=(y[0], y[-1]),
    +117            assume_sorted=True,
    +118            kind=kind,
    +119        )(target_x_in_seconds)
    +120    )
    +121
    +122
    +123class SimpleComponentResult(SimpleBase):
    +124    componentType: ComponentType
    +125    component_level: ComponentLevel
    +126    parent: Optional[str]
    +127    name: str
    +128    timesteps: List[datetime]
    +129    is_valid: List[int]
    +130    emissions: Dict[str, SimpleEmissionResult]
    +131
    +132    energy_usage: List[opt_float]
    +133    energy_usage_unit: Unit
    +134    power: Optional[List[opt_float]]
    +135
    +136    @root_validator(pre=True)
    +137    def convert_time_series(cls, values):
    +138        energy_usage = values.get("energy_usage")
    +139        is_valid = values.get("is_valid")
    +140        power = values.get("power")
    +141
    +142        if isinstance(energy_usage, dict):
    +143            # Parsing DTO result to simple
    +144            values["energy_usage"] = energy_usage["values"]
    +145            values["energy_usage_unit"] = energy_usage["unit"]
    +146
    +147        if isinstance(is_valid, dict):
    +148            # Parsing DTO result to simple
    +149            values["is_valid"] = is_valid["values"]
    +150
    +151        if power is not None:
    +152            if isinstance(power, dict):
    +153                values["power"] = power["values"]
    +154        else:
    +155            values["power"] = None
    +156
    +157        return values
    +158
    +159    @property
    +160    def id(self) -> ComponentID:
    +161        return ComponentID(componentType=self.componentType, name=self.name)
    +162
    +163    @classmethod
    +164    def fit_to_timesteps(
    +165        cls,
    +166        component: "SimpleComponentResult",
    +167        timesteps: List[datetime],
    +168        method: InterpolationMethod = InterpolationMethod.SKIP,
    +169    ) -> "SimpleComponentResult":
    +170        """Fit the component to the provided timesteps based on specified method.
    +171
    +172        :param component: The component that should be normalized
    +173        :param timesteps: the target timesteps. These should already be correct based on the InterpolationMethod
    +174            specified, i.e. if InterpolationMethod is SKIP, the provided timesteps should all exist in the component.
    +175        :param method: The interpolation method that should be used to fill values
    +176        :return: the normalized component
    +177        """
    +178        if method == InterpolationMethod.SKIP:
    +179            power = []
    +180            energy_usage = []
    +181            is_valid = []
    +182            emissions: Dict[str, SimpleEmissionResult] = {
    +183                emission.name: SimpleEmissionResult(name=emission.name, rate=[])
    +184                for emission in component.emissions.values()
    +185            }
    +186            for timestep in timesteps:
    +187                if timestep in component.timesteps:
    +188                    timestep_index = component.timesteps.index(timestep)
    +189
    +190                    if component.power is not None:
    +191                        power.append(component.power[timestep_index])
    +192
    +193                    energy_usage.append(component.energy_usage[timestep_index])
    +194
    +195                    is_valid.append(component.is_valid[timestep_index])
    +196                    for emission in emissions.values():
    +197                        # Assume index exist if emission exist
    +198                        emission.rate.append(component.emissions[emission.name].rate[timestep_index])
    +199                else:
    +200                    # This is a developer error, we should provide the correct timesteps.
    +201                    raise ValueError(
    +202                        f"Provided timesteps includes timestep not found in component {component.id}. "
    +203                        f"Extraneous timestep: {timestep}. This should not happen, contact support."
    +204                    )
    +205        elif method == InterpolationMethod.LINEAR:
    +206            emissions = {
    +207                emission.name: SimpleEmissionResult(
    +208                    name=emission.name,
    +209                    rate=_interpolate_list(
    +210                        x=component.timesteps,
    +211                        y=emission.rate,
    +212                        target_x=timesteps,
    +213                        method=method,
    +214                    ),
    +215                )
    +216                for emission in component.emissions.values()
    +217            }
    +218
    +219            is_valid = []
    +220            for timestep in timesteps:
    +221                if timestep in component.timesteps:
    +222                    timestep_index = component.timesteps.index(timestep)
    +223                    is_valid.append(component.is_valid[timestep_index])
    +224                else:
    +225                    is_valid.append(True)
    +226
    +227            power = None
    +228            if component.power is not None:
    +229                power = _interpolate_list(
    +230                    x=component.timesteps,
    +231                    y=component.power,
    +232                    target_x=timesteps,
    +233                    method=method,
    +234                )
    +235
    +236            energy_usage = _interpolate_list(
    +237                x=component.timesteps,
    +238                y=component.energy_usage,
    +239                target_x=timesteps,
    +240                method=method,
    +241            )
    +242        else:
    +243            raise NotImplementedError()
    +244
    +245        return cls(
    +246            componentType=component.componentType,
    +247            component_level=component.component_level,
    +248            parent=component.parent,
    +249            name=component.name,
    +250            power=power,
    +251            energy_usage=energy_usage,
    +252            energy_usage_unit=component.energy_usage_unit,
    +253            emissions=emissions,
    +254            is_valid=is_valid,
    +255            timesteps=timesteps,
    +256        )
    +257
    +258    def __sub__(self, reference_component) -> "SimpleComponentResult":
    +259        """Calculate difference between two component results."""
    +260        if not isinstance(reference_component, SimpleComponentResult):
    +261            raise TypeError(
    +262                f"unsupported operand type(s) for -: '{type(self).__name__}' and '{type(reference_component).__name__}'"
    +263            )
    +264        if self.id != reference_component.id:
    +265            raise ValueError(
    +266                f"Can not compare different components, id does not match: {self.id} and {reference_component.id}"
    +267            )
    +268        if self.timesteps != reference_component.timesteps:
    +269            raise ValueError(
    +270                f"Can not compare components with differing timesteps: {self.id} and {reference_component.id}"
    +271            )
    +272        if self.energy_usage_unit != reference_component.energy_usage_unit:
    +273            raise ValueError(
    +274                f"Can not compare components with differing energy usage units: "
    +275                f"{self.id} with unit '{self.energy_usage_unit}' and "
    +276                f"{reference_component.id} with unit '{reference_component.energy_usage_unit}'."
    +277            )
    +278
    +279        return SimpleComponentResult(
    +280            name=self.name,
    +281            parent=self.parent if self.parent == reference_component.parent else None,
    +282            componentType=self.componentType,
    +283            component_level=self.component_level,
    +284            timesteps=self.timesteps,
    +285            is_valid=[changed and reference for changed, reference in zip(self.is_valid, reference_component.is_valid)],
    +286            energy_usage=_subtract_list(self.energy_usage, reference_component.energy_usage),
    +287            energy_usage_unit=self.energy_usage_unit,
    +288            power=_subtract_list(self.power, reference_component.power),  # type: ignore[arg-type]
    +289            emissions={
    +290                self_e.name: self_e - reference_e
    +291                for self_e, reference_e in zip(
    +292                    sorted(self.emissions.values(), key=lambda emission: emission.name),
    +293                    sorted(reference_component.emissions.values(), key=lambda emission: emission.name),
    +294                )
    +295            },
    +296        )
    +297
    +298
    +299def _create_empty_component(component: SimpleComponentResult) -> SimpleComponentResult:
    +300    return SimpleComponentResult(
    +301        componentType=component.componentType,
    +302        component_level=component.component_level,
    +303        name=component.name,
    +304        parent=component.parent,
    +305        timesteps=component.timesteps,
    +306        energy_usage=[0] * len(component.timesteps),
    +307        energy_usage_unit=component.energy_usage_unit,
    +308        power=[0] * len(component.timesteps),
    +309        emissions={
    +310            emission.name: SimpleEmissionResult(
    +311                name=emission.name,
    +312                rate=[0] * len(component.timesteps),
    +313            )
    +314            for emission in component.emissions.values()
    +315        },
    +316        is_valid=[True] * len(component.timesteps),
    +317    )
    +318
    +319
    +320class SimpleResultData(SimpleBase):
    +321    timesteps: List[datetime]
    +322    components: List[SimpleComponentResult]
    +323
    +324    @classmethod
    +325    def fit_to_timesteps(
    +326        cls,
    +327        model: "SimpleResultData",
    +328        timesteps: List[datetime],
    +329        method: InterpolationMethod = InterpolationMethod.SKIP,
    +330    ):
    +331        return cls(
    +332            timesteps=timesteps,
    +333            components=[
    +334                SimpleComponentResult.fit_to_timesteps(component=component, timesteps=timesteps, method=method)
    +335                for component in model.components
    +336            ],
    +337        )
    +338
    +339    @classmethod
    +340    def subtract(
    +341        cls,
    +342        other_model: "SimpleResultData",
    +343        reference_model: "SimpleResultData",
    +344    ) -> Tuple["SimpleResultData", List[Exception]]:
    +345        """Subtract reference model from other model.
    +346
    +347        Timesteps and components should be equal between the models.
    +348        """
    +349        if other_model.timesteps != reference_model.timesteps:
    +350            raise ValueError(
    +351                "Timesteps should be equal between models when calculating delta profile. "
    +352                "Use separate methods to normalize."
    +353            )
    +354        timesteps = reference_model.timesteps
    +355
    +356        errors = []
    +357        components = []
    +358        for other_component, reference_component in zip(other_model.components, reference_model.components):
    +359            try:
    +360                components.append(other_component - reference_component)
    +361            except ValueError as e:
    +362                logger.error(e)
    +363                errors.append(e)
    +364
    +365        return SimpleResultData(timesteps=timesteps, components=components), errors
    +366
    +367    @classmethod
    +368    def _normalize_emissions(cls, other_component, reference_component):
    +369        emission_names = set(other_component.emissions.keys()).union(x for x in reference_component.emissions)
    +370
    +371        for emission_name in emission_names:
    +372            for component in [other_component, reference_component]:
    +373                if emission_name not in list(component.emissions):
    +374                    vector_length = len(component.timesteps)
    +375                    component.emissions[emission_name] = SimpleEmissionResult(
    +376                        name=emission_name,
    +377                        rate=[0] * vector_length,
    +378                    )
    +379
    +380        return other_component, reference_component
    +381
    +382    @classmethod
    +383    def normalize_components(
    +384        cls,
    +385        other_model: "SimpleResultData",
    +386        reference_model: "SimpleResultData",
    +387        exclude: Optional[List[ComponentType]] = None,
    +388    ):
    +389        if exclude is None:
    +390            exclude = []
    +391
    +392        other_components = {component.id: component for component in other_model.components}
    +393        reference_components = {component.id: component for component in reference_model.components}
    +394
    +395        component_ids = sorted(set(other_components.keys()).union(set(reference_components.keys())))
    +396
    +397        filtered_component_ids = [
    +398            component_id for component_id in component_ids if component_id.componentType not in exclude
    +399        ]
    +400
    +401        normalized_reference_components = []
    +402        normalized_other_components = []
    +403
    +404        for component_id in filtered_component_ids:
    +405            other_component = other_components.get(component_id)
    +406            reference_component = reference_components.get(component_id)
    +407
    +408            if other_component is None and reference_component is not None:
    +409                other_component = _create_empty_component(reference_component)
    +410            elif reference_component is None and other_component is not None:
    +411                reference_component = _create_empty_component(other_component)
    +412
    +413            other_component, reference_component = cls._normalize_emissions(other_component, reference_component)
    +414
    +415            normalized_reference_components.append(reference_component)
    +416            normalized_other_components.append(other_component)
    +417
    +418        return (
    +419            cls(timesteps=other_model.timesteps, components=normalized_other_components),
    +420            cls(timesteps=reference_model.timesteps, components=normalized_reference_components),
    +421        )
    +422
    +423    @classmethod
    +424    def delta_profile(
    +425        cls,
    +426        other_model: "SimpleResultData",
    +427        reference_model: "SimpleResultData",
    +428        interpolation_method: InterpolationMethod = InterpolationMethod.SKIP,
    +429    ) -> Tuple["SimpleResultData", "SimpleResultData", "SimpleResultData", List[str]]:
    +430        if interpolation_method == InterpolationMethod.SKIP:
    +431            timesteps = sorted(set(other_model.timesteps).intersection(reference_model.timesteps))
    +432        elif interpolation_method == InterpolationMethod.LINEAR:
    +433            timesteps = sorted(set(other_model.timesteps).union(reference_model.timesteps))
    +434        else:
    +435            raise NotImplementedError
    +436
    +437        # Normalize components first as we need to filter out CONSUMER_MODELs for normalize_timesteps to work.
    +438        other_model, reference_model = cls.normalize_components(other_model, reference_model)
    +439
    +440        other_model = cls.fit_to_timesteps(other_model, timesteps, method=interpolation_method)
    +441        reference_model = cls.fit_to_timesteps(reference_model, timesteps, method=interpolation_method)
    +442
    +443        delta_profile, errors = cls.subtract(other_model, reference_model)
    +444
    +445        return other_model, reference_model, delta_profile, [str(error) for error in errors]
    +
    + + +
    +
    + +
    + + class + SimpleBase(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    17class SimpleBase(EcalcResultBaseModel):
    +18    class Config:
    +19        extra = Extra.ignore
    +20
    +21    def dict(self, exclude_none=True, **kwargs):
    +22        return super().dict(exclude_none=exclude_none, **kwargs)
    +23
    +24    def json(self, **kwargs):
    +25        return super().json(**kwargs)
    +
    + + + + +
    + +
    + + def + dict(self, exclude_none=True, **kwargs): + + + +
    + +
    21    def dict(self, exclude_none=True, **kwargs):
    +22        return super().dict(exclude_none=exclude_none, **kwargs)
    +
    + + +

    Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

    +
    + + +
    +
    + +
    + + def + json(self, **kwargs): + + + +
    + +
    24    def json(self, **kwargs):
    +25        return super().json(**kwargs)
    +
    + + +

    Generate a JSON representation of the model, include and exclude arguments as per dict().

    + +

    encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SimpleBase.Config: + + + +
    + +
    18    class Config:
    +19        extra = Extra.ignore
    +
    + + + + +
    +
    + extra = +<Extra.ignore: 'ignore'> + + +
    + + + + +
    +
    +
    + +
    + + class + SimpleEmissionResult(SimpleBase): + + + +
    + +
    28class SimpleEmissionResult(SimpleBase):
    +29    name: str
    +30    rate: List[opt_float]
    +31
    +32    @root_validator(pre=True)
    +33    def convert_time_series(cls, values):
    +34        rate = values.get("rate")
    +35
    +36        if isinstance(rate, dict):
    +37            # Parsing DTO result to simple
    +38            values["rate"] = rate["values"]
    +39
    +40        return values
    +41
    +42    def __sub__(self, reference_emission) -> "SimpleEmissionResult":
    +43        """Calculate difference between two emission results."""
    +44        if not isinstance(reference_emission, SimpleEmissionResult):
    +45            raise TypeError(
    +46                f"unsupported operand type(s) for -: '{type(self).__name__}' and '{type(reference_emission).__name__}'"
    +47            )
    +48        if self.name != reference_emission.name:
    +49            raise ValueError(f"Can not subtract different emissions: '{self.name}' and '{reference_emission.name}'")
    +50        return SimpleEmissionResult(
    +51            name=self.name,
    +52            rate=_subtract_list(self.rate, reference_emission.rate),
    +53        )
    +
    + + + + +
    + +
    +
    @root_validator(pre=True)
    + + def + convert_time_series(cls, values): + + + +
    + +
    32    @root_validator(pre=True)
    +33    def convert_time_series(cls, values):
    +34        rate = values.get("rate")
    +35
    +36        if isinstance(rate, dict):
    +37            # Parsing DTO result to simple
    +38            values["rate"] = rate["values"]
    +39
    +40        return values
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ComponentID(builtins.tuple): + + + +
    + +
    56class ComponentID(NamedTuple):
    +57    componentType: ComponentType
    +58    name: str
    +59
    +60    def __repr__(self):
    +61        return f"(type: '{self.componentType}', name: '{self.name}')"
    +
    + + +

    ComponentID(componentType, name)

    +
    + + +
    +
    + + ComponentID(componentType: libecalc.dto.base.ComponentType, name: str) + + +
    + + +

    Create new instance of ComponentID(componentType, name)

    +
    + + +
    +
    +
    + componentType: libecalc.dto.base.ComponentType + + +
    + + +

    Alias for field number 0

    +
    + + +
    +
    +
    + name: str + + +
    + + +

    Alias for field number 1

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    builtins.tuple
    +
    index
    +
    count
    + +
    +
    +
    +
    +
    + +
    + + class + InterpolationMethod(builtins.str, enum.Enum): + + + +
    + +
    76class InterpolationMethod(str, enum.Enum):
    +77    SKIP = "SKIP"
    +78    LINEAR = "LINEAR"
    +79    # FILL_ZERO can be handled by scipy, same as linear. kind='zero' if needed.
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + SKIP = +<InterpolationMethod.SKIP: 'SKIP'> + + +
    + + + + +
    +
    +
    + LINEAR = +<InterpolationMethod.LINEAR: 'LINEAR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + SimpleComponentResult(SimpleBase): + + + +
    + +
    124class SimpleComponentResult(SimpleBase):
    +125    componentType: ComponentType
    +126    component_level: ComponentLevel
    +127    parent: Optional[str]
    +128    name: str
    +129    timesteps: List[datetime]
    +130    is_valid: List[int]
    +131    emissions: Dict[str, SimpleEmissionResult]
    +132
    +133    energy_usage: List[opt_float]
    +134    energy_usage_unit: Unit
    +135    power: Optional[List[opt_float]]
    +136
    +137    @root_validator(pre=True)
    +138    def convert_time_series(cls, values):
    +139        energy_usage = values.get("energy_usage")
    +140        is_valid = values.get("is_valid")
    +141        power = values.get("power")
    +142
    +143        if isinstance(energy_usage, dict):
    +144            # Parsing DTO result to simple
    +145            values["energy_usage"] = energy_usage["values"]
    +146            values["energy_usage_unit"] = energy_usage["unit"]
    +147
    +148        if isinstance(is_valid, dict):
    +149            # Parsing DTO result to simple
    +150            values["is_valid"] = is_valid["values"]
    +151
    +152        if power is not None:
    +153            if isinstance(power, dict):
    +154                values["power"] = power["values"]
    +155        else:
    +156            values["power"] = None
    +157
    +158        return values
    +159
    +160    @property
    +161    def id(self) -> ComponentID:
    +162        return ComponentID(componentType=self.componentType, name=self.name)
    +163
    +164    @classmethod
    +165    def fit_to_timesteps(
    +166        cls,
    +167        component: "SimpleComponentResult",
    +168        timesteps: List[datetime],
    +169        method: InterpolationMethod = InterpolationMethod.SKIP,
    +170    ) -> "SimpleComponentResult":
    +171        """Fit the component to the provided timesteps based on specified method.
    +172
    +173        :param component: The component that should be normalized
    +174        :param timesteps: the target timesteps. These should already be correct based on the InterpolationMethod
    +175            specified, i.e. if InterpolationMethod is SKIP, the provided timesteps should all exist in the component.
    +176        :param method: The interpolation method that should be used to fill values
    +177        :return: the normalized component
    +178        """
    +179        if method == InterpolationMethod.SKIP:
    +180            power = []
    +181            energy_usage = []
    +182            is_valid = []
    +183            emissions: Dict[str, SimpleEmissionResult] = {
    +184                emission.name: SimpleEmissionResult(name=emission.name, rate=[])
    +185                for emission in component.emissions.values()
    +186            }
    +187            for timestep in timesteps:
    +188                if timestep in component.timesteps:
    +189                    timestep_index = component.timesteps.index(timestep)
    +190
    +191                    if component.power is not None:
    +192                        power.append(component.power[timestep_index])
    +193
    +194                    energy_usage.append(component.energy_usage[timestep_index])
    +195
    +196                    is_valid.append(component.is_valid[timestep_index])
    +197                    for emission in emissions.values():
    +198                        # Assume index exist if emission exist
    +199                        emission.rate.append(component.emissions[emission.name].rate[timestep_index])
    +200                else:
    +201                    # This is a developer error, we should provide the correct timesteps.
    +202                    raise ValueError(
    +203                        f"Provided timesteps includes timestep not found in component {component.id}. "
    +204                        f"Extraneous timestep: {timestep}. This should not happen, contact support."
    +205                    )
    +206        elif method == InterpolationMethod.LINEAR:
    +207            emissions = {
    +208                emission.name: SimpleEmissionResult(
    +209                    name=emission.name,
    +210                    rate=_interpolate_list(
    +211                        x=component.timesteps,
    +212                        y=emission.rate,
    +213                        target_x=timesteps,
    +214                        method=method,
    +215                    ),
    +216                )
    +217                for emission in component.emissions.values()
    +218            }
    +219
    +220            is_valid = []
    +221            for timestep in timesteps:
    +222                if timestep in component.timesteps:
    +223                    timestep_index = component.timesteps.index(timestep)
    +224                    is_valid.append(component.is_valid[timestep_index])
    +225                else:
    +226                    is_valid.append(True)
    +227
    +228            power = None
    +229            if component.power is not None:
    +230                power = _interpolate_list(
    +231                    x=component.timesteps,
    +232                    y=component.power,
    +233                    target_x=timesteps,
    +234                    method=method,
    +235                )
    +236
    +237            energy_usage = _interpolate_list(
    +238                x=component.timesteps,
    +239                y=component.energy_usage,
    +240                target_x=timesteps,
    +241                method=method,
    +242            )
    +243        else:
    +244            raise NotImplementedError()
    +245
    +246        return cls(
    +247            componentType=component.componentType,
    +248            component_level=component.component_level,
    +249            parent=component.parent,
    +250            name=component.name,
    +251            power=power,
    +252            energy_usage=energy_usage,
    +253            energy_usage_unit=component.energy_usage_unit,
    +254            emissions=emissions,
    +255            is_valid=is_valid,
    +256            timesteps=timesteps,
    +257        )
    +258
    +259    def __sub__(self, reference_component) -> "SimpleComponentResult":
    +260        """Calculate difference between two component results."""
    +261        if not isinstance(reference_component, SimpleComponentResult):
    +262            raise TypeError(
    +263                f"unsupported operand type(s) for -: '{type(self).__name__}' and '{type(reference_component).__name__}'"
    +264            )
    +265        if self.id != reference_component.id:
    +266            raise ValueError(
    +267                f"Can not compare different components, id does not match: {self.id} and {reference_component.id}"
    +268            )
    +269        if self.timesteps != reference_component.timesteps:
    +270            raise ValueError(
    +271                f"Can not compare components with differing timesteps: {self.id} and {reference_component.id}"
    +272            )
    +273        if self.energy_usage_unit != reference_component.energy_usage_unit:
    +274            raise ValueError(
    +275                f"Can not compare components with differing energy usage units: "
    +276                f"{self.id} with unit '{self.energy_usage_unit}' and "
    +277                f"{reference_component.id} with unit '{reference_component.energy_usage_unit}'."
    +278            )
    +279
    +280        return SimpleComponentResult(
    +281            name=self.name,
    +282            parent=self.parent if self.parent == reference_component.parent else None,
    +283            componentType=self.componentType,
    +284            component_level=self.component_level,
    +285            timesteps=self.timesteps,
    +286            is_valid=[changed and reference for changed, reference in zip(self.is_valid, reference_component.is_valid)],
    +287            energy_usage=_subtract_list(self.energy_usage, reference_component.energy_usage),
    +288            energy_usage_unit=self.energy_usage_unit,
    +289            power=_subtract_list(self.power, reference_component.power),  # type: ignore[arg-type]
    +290            emissions={
    +291                self_e.name: self_e - reference_e
    +292                for self_e, reference_e in zip(
    +293                    sorted(self.emissions.values(), key=lambda emission: emission.name),
    +294                    sorted(reference_component.emissions.values(), key=lambda emission: emission.name),
    +295                )
    +296            },
    +297        )
    +
    + + + + +
    + +
    +
    @root_validator(pre=True)
    + + def + convert_time_series(cls, values): + + + +
    + +
    137    @root_validator(pre=True)
    +138    def convert_time_series(cls, values):
    +139        energy_usage = values.get("energy_usage")
    +140        is_valid = values.get("is_valid")
    +141        power = values.get("power")
    +142
    +143        if isinstance(energy_usage, dict):
    +144            # Parsing DTO result to simple
    +145            values["energy_usage"] = energy_usage["values"]
    +146            values["energy_usage_unit"] = energy_usage["unit"]
    +147
    +148        if isinstance(is_valid, dict):
    +149            # Parsing DTO result to simple
    +150            values["is_valid"] = is_valid["values"]
    +151
    +152        if power is not None:
    +153            if isinstance(power, dict):
    +154                values["power"] = power["values"]
    +155        else:
    +156            values["power"] = None
    +157
    +158        return values
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + fit_to_timesteps( cls, component: libecalc.dto.result.simple.SimpleComponentResult, timesteps: List[datetime.datetime], method: libecalc.dto.result.simple.InterpolationMethod = <InterpolationMethod.SKIP: 'SKIP'>) -> libecalc.dto.result.simple.SimpleComponentResult: + + + +
    + +
    164    @classmethod
    +165    def fit_to_timesteps(
    +166        cls,
    +167        component: "SimpleComponentResult",
    +168        timesteps: List[datetime],
    +169        method: InterpolationMethod = InterpolationMethod.SKIP,
    +170    ) -> "SimpleComponentResult":
    +171        """Fit the component to the provided timesteps based on specified method.
    +172
    +173        :param component: The component that should be normalized
    +174        :param timesteps: the target timesteps. These should already be correct based on the InterpolationMethod
    +175            specified, i.e. if InterpolationMethod is SKIP, the provided timesteps should all exist in the component.
    +176        :param method: The interpolation method that should be used to fill values
    +177        :return: the normalized component
    +178        """
    +179        if method == InterpolationMethod.SKIP:
    +180            power = []
    +181            energy_usage = []
    +182            is_valid = []
    +183            emissions: Dict[str, SimpleEmissionResult] = {
    +184                emission.name: SimpleEmissionResult(name=emission.name, rate=[])
    +185                for emission in component.emissions.values()
    +186            }
    +187            for timestep in timesteps:
    +188                if timestep in component.timesteps:
    +189                    timestep_index = component.timesteps.index(timestep)
    +190
    +191                    if component.power is not None:
    +192                        power.append(component.power[timestep_index])
    +193
    +194                    energy_usage.append(component.energy_usage[timestep_index])
    +195
    +196                    is_valid.append(component.is_valid[timestep_index])
    +197                    for emission in emissions.values():
    +198                        # Assume index exist if emission exist
    +199                        emission.rate.append(component.emissions[emission.name].rate[timestep_index])
    +200                else:
    +201                    # This is a developer error, we should provide the correct timesteps.
    +202                    raise ValueError(
    +203                        f"Provided timesteps includes timestep not found in component {component.id}. "
    +204                        f"Extraneous timestep: {timestep}. This should not happen, contact support."
    +205                    )
    +206        elif method == InterpolationMethod.LINEAR:
    +207            emissions = {
    +208                emission.name: SimpleEmissionResult(
    +209                    name=emission.name,
    +210                    rate=_interpolate_list(
    +211                        x=component.timesteps,
    +212                        y=emission.rate,
    +213                        target_x=timesteps,
    +214                        method=method,
    +215                    ),
    +216                )
    +217                for emission in component.emissions.values()
    +218            }
    +219
    +220            is_valid = []
    +221            for timestep in timesteps:
    +222                if timestep in component.timesteps:
    +223                    timestep_index = component.timesteps.index(timestep)
    +224                    is_valid.append(component.is_valid[timestep_index])
    +225                else:
    +226                    is_valid.append(True)
    +227
    +228            power = None
    +229            if component.power is not None:
    +230                power = _interpolate_list(
    +231                    x=component.timesteps,
    +232                    y=component.power,
    +233                    target_x=timesteps,
    +234                    method=method,
    +235                )
    +236
    +237            energy_usage = _interpolate_list(
    +238                x=component.timesteps,
    +239                y=component.energy_usage,
    +240                target_x=timesteps,
    +241                method=method,
    +242            )
    +243        else:
    +244            raise NotImplementedError()
    +245
    +246        return cls(
    +247            componentType=component.componentType,
    +248            component_level=component.component_level,
    +249            parent=component.parent,
    +250            name=component.name,
    +251            power=power,
    +252            energy_usage=energy_usage,
    +253            energy_usage_unit=component.energy_usage_unit,
    +254            emissions=emissions,
    +255            is_valid=is_valid,
    +256            timesteps=timesteps,
    +257        )
    +
    + + +

    Fit the component to the provided timesteps based on specified method.

    + +
    Parameters
    + +
      +
    • component: The component that should be normalized
    • +
    • timesteps: the target timesteps. These should already be correct based on the InterpolationMethod +specified, i.e. if InterpolationMethod is SKIP, the provided timesteps should all exist in the component.
    • +
    • method: The interpolation method that should be used to fill values
    • +
    + +
    Returns
    + +
    +

    the normalized component

    +
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + SimpleResultData(SimpleBase): + + + +
    + +
    321class SimpleResultData(SimpleBase):
    +322    timesteps: List[datetime]
    +323    components: List[SimpleComponentResult]
    +324
    +325    @classmethod
    +326    def fit_to_timesteps(
    +327        cls,
    +328        model: "SimpleResultData",
    +329        timesteps: List[datetime],
    +330        method: InterpolationMethod = InterpolationMethod.SKIP,
    +331    ):
    +332        return cls(
    +333            timesteps=timesteps,
    +334            components=[
    +335                SimpleComponentResult.fit_to_timesteps(component=component, timesteps=timesteps, method=method)
    +336                for component in model.components
    +337            ],
    +338        )
    +339
    +340    @classmethod
    +341    def subtract(
    +342        cls,
    +343        other_model: "SimpleResultData",
    +344        reference_model: "SimpleResultData",
    +345    ) -> Tuple["SimpleResultData", List[Exception]]:
    +346        """Subtract reference model from other model.
    +347
    +348        Timesteps and components should be equal between the models.
    +349        """
    +350        if other_model.timesteps != reference_model.timesteps:
    +351            raise ValueError(
    +352                "Timesteps should be equal between models when calculating delta profile. "
    +353                "Use separate methods to normalize."
    +354            )
    +355        timesteps = reference_model.timesteps
    +356
    +357        errors = []
    +358        components = []
    +359        for other_component, reference_component in zip(other_model.components, reference_model.components):
    +360            try:
    +361                components.append(other_component - reference_component)
    +362            except ValueError as e:
    +363                logger.error(e)
    +364                errors.append(e)
    +365
    +366        return SimpleResultData(timesteps=timesteps, components=components), errors
    +367
    +368    @classmethod
    +369    def _normalize_emissions(cls, other_component, reference_component):
    +370        emission_names = set(other_component.emissions.keys()).union(x for x in reference_component.emissions)
    +371
    +372        for emission_name in emission_names:
    +373            for component in [other_component, reference_component]:
    +374                if emission_name not in list(component.emissions):
    +375                    vector_length = len(component.timesteps)
    +376                    component.emissions[emission_name] = SimpleEmissionResult(
    +377                        name=emission_name,
    +378                        rate=[0] * vector_length,
    +379                    )
    +380
    +381        return other_component, reference_component
    +382
    +383    @classmethod
    +384    def normalize_components(
    +385        cls,
    +386        other_model: "SimpleResultData",
    +387        reference_model: "SimpleResultData",
    +388        exclude: Optional[List[ComponentType]] = None,
    +389    ):
    +390        if exclude is None:
    +391            exclude = []
    +392
    +393        other_components = {component.id: component for component in other_model.components}
    +394        reference_components = {component.id: component for component in reference_model.components}
    +395
    +396        component_ids = sorted(set(other_components.keys()).union(set(reference_components.keys())))
    +397
    +398        filtered_component_ids = [
    +399            component_id for component_id in component_ids if component_id.componentType not in exclude
    +400        ]
    +401
    +402        normalized_reference_components = []
    +403        normalized_other_components = []
    +404
    +405        for component_id in filtered_component_ids:
    +406            other_component = other_components.get(component_id)
    +407            reference_component = reference_components.get(component_id)
    +408
    +409            if other_component is None and reference_component is not None:
    +410                other_component = _create_empty_component(reference_component)
    +411            elif reference_component is None and other_component is not None:
    +412                reference_component = _create_empty_component(other_component)
    +413
    +414            other_component, reference_component = cls._normalize_emissions(other_component, reference_component)
    +415
    +416            normalized_reference_components.append(reference_component)
    +417            normalized_other_components.append(other_component)
    +418
    +419        return (
    +420            cls(timesteps=other_model.timesteps, components=normalized_other_components),
    +421            cls(timesteps=reference_model.timesteps, components=normalized_reference_components),
    +422        )
    +423
    +424    @classmethod
    +425    def delta_profile(
    +426        cls,
    +427        other_model: "SimpleResultData",
    +428        reference_model: "SimpleResultData",
    +429        interpolation_method: InterpolationMethod = InterpolationMethod.SKIP,
    +430    ) -> Tuple["SimpleResultData", "SimpleResultData", "SimpleResultData", List[str]]:
    +431        if interpolation_method == InterpolationMethod.SKIP:
    +432            timesteps = sorted(set(other_model.timesteps).intersection(reference_model.timesteps))
    +433        elif interpolation_method == InterpolationMethod.LINEAR:
    +434            timesteps = sorted(set(other_model.timesteps).union(reference_model.timesteps))
    +435        else:
    +436            raise NotImplementedError
    +437
    +438        # Normalize components first as we need to filter out CONSUMER_MODELs for normalize_timesteps to work.
    +439        other_model, reference_model = cls.normalize_components(other_model, reference_model)
    +440
    +441        other_model = cls.fit_to_timesteps(other_model, timesteps, method=interpolation_method)
    +442        reference_model = cls.fit_to_timesteps(reference_model, timesteps, method=interpolation_method)
    +443
    +444        delta_profile, errors = cls.subtract(other_model, reference_model)
    +445
    +446        return other_model, reference_model, delta_profile, [str(error) for error in errors]
    +
    + + + + +
    + +
    +
    @classmethod
    + + def + fit_to_timesteps( cls, model: libecalc.dto.result.simple.SimpleResultData, timesteps: List[datetime.datetime], method: libecalc.dto.result.simple.InterpolationMethod = <InterpolationMethod.SKIP: 'SKIP'>): + + + +
    + +
    325    @classmethod
    +326    def fit_to_timesteps(
    +327        cls,
    +328        model: "SimpleResultData",
    +329        timesteps: List[datetime],
    +330        method: InterpolationMethod = InterpolationMethod.SKIP,
    +331    ):
    +332        return cls(
    +333            timesteps=timesteps,
    +334            components=[
    +335                SimpleComponentResult.fit_to_timesteps(component=component, timesteps=timesteps, method=method)
    +336                for component in model.components
    +337            ],
    +338        )
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + subtract( cls, other_model: libecalc.dto.result.simple.SimpleResultData, reference_model: libecalc.dto.result.simple.SimpleResultData) -> tuple[libecalc.dto.result.simple.SimpleResultData, typing.List[Exception]]: + + + +
    + +
    340    @classmethod
    +341    def subtract(
    +342        cls,
    +343        other_model: "SimpleResultData",
    +344        reference_model: "SimpleResultData",
    +345    ) -> Tuple["SimpleResultData", List[Exception]]:
    +346        """Subtract reference model from other model.
    +347
    +348        Timesteps and components should be equal between the models.
    +349        """
    +350        if other_model.timesteps != reference_model.timesteps:
    +351            raise ValueError(
    +352                "Timesteps should be equal between models when calculating delta profile. "
    +353                "Use separate methods to normalize."
    +354            )
    +355        timesteps = reference_model.timesteps
    +356
    +357        errors = []
    +358        components = []
    +359        for other_component, reference_component in zip(other_model.components, reference_model.components):
    +360            try:
    +361                components.append(other_component - reference_component)
    +362            except ValueError as e:
    +363                logger.error(e)
    +364                errors.append(e)
    +365
    +366        return SimpleResultData(timesteps=timesteps, components=components), errors
    +
    + + +

    Subtract reference model from other model.

    + +

    Timesteps and components should be equal between the models.

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + normalize_components( cls, other_model: libecalc.dto.result.simple.SimpleResultData, reference_model: libecalc.dto.result.simple.SimpleResultData, exclude: Union[List[libecalc.dto.base.ComponentType], NoneType] = None): + + + +
    + +
    383    @classmethod
    +384    def normalize_components(
    +385        cls,
    +386        other_model: "SimpleResultData",
    +387        reference_model: "SimpleResultData",
    +388        exclude: Optional[List[ComponentType]] = None,
    +389    ):
    +390        if exclude is None:
    +391            exclude = []
    +392
    +393        other_components = {component.id: component for component in other_model.components}
    +394        reference_components = {component.id: component for component in reference_model.components}
    +395
    +396        component_ids = sorted(set(other_components.keys()).union(set(reference_components.keys())))
    +397
    +398        filtered_component_ids = [
    +399            component_id for component_id in component_ids if component_id.componentType not in exclude
    +400        ]
    +401
    +402        normalized_reference_components = []
    +403        normalized_other_components = []
    +404
    +405        for component_id in filtered_component_ids:
    +406            other_component = other_components.get(component_id)
    +407            reference_component = reference_components.get(component_id)
    +408
    +409            if other_component is None and reference_component is not None:
    +410                other_component = _create_empty_component(reference_component)
    +411            elif reference_component is None and other_component is not None:
    +412                reference_component = _create_empty_component(other_component)
    +413
    +414            other_component, reference_component = cls._normalize_emissions(other_component, reference_component)
    +415
    +416            normalized_reference_components.append(reference_component)
    +417            normalized_other_components.append(other_component)
    +418
    +419        return (
    +420            cls(timesteps=other_model.timesteps, components=normalized_other_components),
    +421            cls(timesteps=reference_model.timesteps, components=normalized_reference_components),
    +422        )
    +
    + + + + +
    +
    + + + +
    424    @classmethod
    +425    def delta_profile(
    +426        cls,
    +427        other_model: "SimpleResultData",
    +428        reference_model: "SimpleResultData",
    +429        interpolation_method: InterpolationMethod = InterpolationMethod.SKIP,
    +430    ) -> Tuple["SimpleResultData", "SimpleResultData", "SimpleResultData", List[str]]:
    +431        if interpolation_method == InterpolationMethod.SKIP:
    +432            timesteps = sorted(set(other_model.timesteps).intersection(reference_model.timesteps))
    +433        elif interpolation_method == InterpolationMethod.LINEAR:
    +434            timesteps = sorted(set(other_model.timesteps).union(reference_model.timesteps))
    +435        else:
    +436            raise NotImplementedError
    +437
    +438        # Normalize components first as we need to filter out CONSUMER_MODELs for normalize_timesteps to work.
    +439        other_model, reference_model = cls.normalize_components(other_model, reference_model)
    +440
    +441        other_model = cls.fit_to_timesteps(other_model, timesteps, method=interpolation_method)
    +442        reference_model = cls.fit_to_timesteps(reference_model, timesteps, method=interpolation_method)
    +443
    +444        delta_profile, errors = cls.subtract(other_model, reference_model)
    +445
    +446        return other_model, reference_model, delta_profile, [str(error) for error in errors]
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/tabular_time_series.html b/docs/about/references/api/libecalc/dto/result/tabular_time_series.html new file mode 100644 index 0000000000..598d6cdcbd --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/tabular_time_series.html @@ -0,0 +1,589 @@ + + + + + + + libecalc.dto.result.tabular_time_series API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.tabular_time_series

    + + + + + + +
     1from abc import ABC
    + 2from datetime import datetime
    + 3from typing import List, Optional
    + 4
    + 5import pandas as pd
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.time_utils import Frequency
    + 9from libecalc.common.utils.rates import TimeSeries, TimeSeriesBoolean
    +10from libecalc.dto.result.base import EcalcResultBaseModel
    +11
    +12
    +13class TabularTimeSeries(ABC, EcalcResultBaseModel):
    +14    name: str
    +15    timesteps: List[datetime]
    +16
    +17    def to_dataframe(
    +18        self,
    +19        prefix: Optional[str] = None,
    +20    ) -> pd.DataFrame:
    +21        timesteps = self.timesteps
    +22        df = pd.DataFrame(index=timesteps)
    +23
    +24        for attribute_name, attribute_value in self.__dict__.items():
    +25            if isinstance(attribute_value, TimeSeries):
    +26                column_name = f"{attribute_name}[{attribute_value.unit}]"
    +27
    +28                if isinstance(attribute_value, TimeSeriesBoolean):
    +29                    values = [int(v) for v in attribute_value.values]
    +30                else:
    +31                    values = attribute_value.values
    +32
    +33                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    +34                df = df.join(timeseries_df)
    +35            elif isinstance(attribute_value, list):
    +36                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    +37                    for item in attribute_value:
    +38                        tabular_df = item.to_dataframe(prefix=item.name)
    +39                        df = df.join(tabular_df)
    +40
    +41            elif (
    +42                isinstance(attribute_value, dict)
    +43                and len(attribute_value) > 0
    +44                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    +45            ):
    +46                for item in attribute_value.values():
    +47                    tabular_df = item.to_dataframe(prefix=item.name)
    +48                    df = df.join(tabular_df)
    +49
    +50        if prefix is not None:
    +51            df = df.add_prefix(prefix=f"{prefix}.")
    +52
    +53        return df
    +54
    +55    def resample(self, freq: Frequency) -> Self:
    +56        """
    +57        Immutable - returns a copy of itself
    +58
    +59        Resample the given time series to the new Frequency given. Only data
    +60        that is defined as a timeseries will be resampled.
    +61
    +62        Args:
    +63            freq: which frequency to resample to
    +64
    +65        Returns: return a copy of itself with all data resampled to given frequency
    +66
    +67        """
    +68        if freq == freq.NONE:
    +69            return self.copy()
    +70        resampled = self.copy()
    +71        for attribute, values in self.__dict__.items():
    +72            if isinstance(values, TimeSeries):
    +73                resampled.__setattr__(attribute, values.resample(freq=freq))
    +74
    +75            elif isinstance(values, list):
    +76                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    +77                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    +78
    +79            elif isinstance(values, dict):
    +80                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    +81                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    +82                else:
    +83                    # NOTE: Operational settings are not resampled. Should add support?
    +84                    pass
    +85            else:
    +86                # NOTE: turbine_result is not resampled. Should add support?
    +87                pass
    +88
    +89        resampled.timesteps = (
    +90            pd.date_range(start=self.timesteps[0], end=self.timesteps[-1], freq=freq.value).to_pydatetime().tolist()
    +91        )
    +92        return resampled
    +
    + + +
    +
    + +
    + + class + TabularTimeSeries(abc.ABC, libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    14class TabularTimeSeries(ABC, EcalcResultBaseModel):
    +15    name: str
    +16    timesteps: List[datetime]
    +17
    +18    def to_dataframe(
    +19        self,
    +20        prefix: Optional[str] = None,
    +21    ) -> pd.DataFrame:
    +22        timesteps = self.timesteps
    +23        df = pd.DataFrame(index=timesteps)
    +24
    +25        for attribute_name, attribute_value in self.__dict__.items():
    +26            if isinstance(attribute_value, TimeSeries):
    +27                column_name = f"{attribute_name}[{attribute_value.unit}]"
    +28
    +29                if isinstance(attribute_value, TimeSeriesBoolean):
    +30                    values = [int(v) for v in attribute_value.values]
    +31                else:
    +32                    values = attribute_value.values
    +33
    +34                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    +35                df = df.join(timeseries_df)
    +36            elif isinstance(attribute_value, list):
    +37                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    +38                    for item in attribute_value:
    +39                        tabular_df = item.to_dataframe(prefix=item.name)
    +40                        df = df.join(tabular_df)
    +41
    +42            elif (
    +43                isinstance(attribute_value, dict)
    +44                and len(attribute_value) > 0
    +45                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    +46            ):
    +47                for item in attribute_value.values():
    +48                    tabular_df = item.to_dataframe(prefix=item.name)
    +49                    df = df.join(tabular_df)
    +50
    +51        if prefix is not None:
    +52            df = df.add_prefix(prefix=f"{prefix}.")
    +53
    +54        return df
    +55
    +56    def resample(self, freq: Frequency) -> Self:
    +57        """
    +58        Immutable - returns a copy of itself
    +59
    +60        Resample the given time series to the new Frequency given. Only data
    +61        that is defined as a timeseries will be resampled.
    +62
    +63        Args:
    +64            freq: which frequency to resample to
    +65
    +66        Returns: return a copy of itself with all data resampled to given frequency
    +67
    +68        """
    +69        if freq == freq.NONE:
    +70            return self.copy()
    +71        resampled = self.copy()
    +72        for attribute, values in self.__dict__.items():
    +73            if isinstance(values, TimeSeries):
    +74                resampled.__setattr__(attribute, values.resample(freq=freq))
    +75
    +76            elif isinstance(values, list):
    +77                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    +78                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    +79
    +80            elif isinstance(values, dict):
    +81                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    +82                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    +83                else:
    +84                    # NOTE: Operational settings are not resampled. Should add support?
    +85                    pass
    +86            else:
    +87                # NOTE: turbine_result is not resampled. Should add support?
    +88                pass
    +89
    +90        resampled.timesteps = (
    +91            pd.date_range(start=self.timesteps[0], end=self.timesteps[-1], freq=freq.value).to_pydatetime().tolist()
    +92        )
    +93        return resampled
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + to_dataframe(self, prefix: Union[str, NoneType] = None) -> pandas.core.frame.DataFrame: + + + +
    + +
    18    def to_dataframe(
    +19        self,
    +20        prefix: Optional[str] = None,
    +21    ) -> pd.DataFrame:
    +22        timesteps = self.timesteps
    +23        df = pd.DataFrame(index=timesteps)
    +24
    +25        for attribute_name, attribute_value in self.__dict__.items():
    +26            if isinstance(attribute_value, TimeSeries):
    +27                column_name = f"{attribute_name}[{attribute_value.unit}]"
    +28
    +29                if isinstance(attribute_value, TimeSeriesBoolean):
    +30                    values = [int(v) for v in attribute_value.values]
    +31                else:
    +32                    values = attribute_value.values
    +33
    +34                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    +35                df = df.join(timeseries_df)
    +36            elif isinstance(attribute_value, list):
    +37                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    +38                    for item in attribute_value:
    +39                        tabular_df = item.to_dataframe(prefix=item.name)
    +40                        df = df.join(tabular_df)
    +41
    +42            elif (
    +43                isinstance(attribute_value, dict)
    +44                and len(attribute_value) > 0
    +45                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    +46            ):
    +47                for item in attribute_value.values():
    +48                    tabular_df = item.to_dataframe(prefix=item.name)
    +49                    df = df.join(tabular_df)
    +50
    +51        if prefix is not None:
    +52            df = df.add_prefix(prefix=f"{prefix}.")
    +53
    +54        return df
    +
    + + + + +
    +
    + +
    + + def + resample( self, freq: libecalc.common.time_utils.Frequency) -> typing_extensions.Self: + + + +
    + +
    56    def resample(self, freq: Frequency) -> Self:
    +57        """
    +58        Immutable - returns a copy of itself
    +59
    +60        Resample the given time series to the new Frequency given. Only data
    +61        that is defined as a timeseries will be resampled.
    +62
    +63        Args:
    +64            freq: which frequency to resample to
    +65
    +66        Returns: return a copy of itself with all data resampled to given frequency
    +67
    +68        """
    +69        if freq == freq.NONE:
    +70            return self.copy()
    +71        resampled = self.copy()
    +72        for attribute, values in self.__dict__.items():
    +73            if isinstance(values, TimeSeries):
    +74                resampled.__setattr__(attribute, values.resample(freq=freq))
    +75
    +76            elif isinstance(values, list):
    +77                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    +78                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    +79
    +80            elif isinstance(values, dict):
    +81                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    +82                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    +83                else:
    +84                    # NOTE: Operational settings are not resampled. Should add support?
    +85                    pass
    +86            else:
    +87                # NOTE: turbine_result is not resampled. Should add support?
    +88                pass
    +89
    +90        resampled.timesteps = (
    +91            pd.date_range(start=self.timesteps[0], end=self.timesteps[-1], freq=freq.value).to_pydatetime().tolist()
    +92        )
    +93        return resampled
    +
    + + +

    Immutable - returns a copy of itself

    + +

    Resample the given time series to the new Frequency given. Only data +that is defined as a timeseries will be resampled.

    + +

    Args: + freq: which frequency to resample to

    + +

    Returns: return a copy of itself with all data resampled to given frequency

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/types.html b/docs/about/references/api/libecalc/dto/result/types.html new file mode 100644 index 0000000000..5002489c30 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/types.html @@ -0,0 +1,455 @@ + + + + + + + libecalc.dto.result.types API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.types

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from enum import Enum
    + 4from typing import Optional
    + 5
    + 6opt_float: Optional[float] = Optional[float]
    + 7
    + 8
    + 9class CompressorTrainCommonShaftFailureStatus(str, Enum):
    +10    TARGET_DISCHARGE_PRESSURE_TOO_HIGH = "TARGET_DISCHARGE_PRESSURE_TOO_HIGH"
    +11    TARGET_DISCHARGE_PRESSURE_TOO_LOW = "TARGET_DISCHARGE_PRESSURE_TOO_LOW"
    +12    SUCTION_PRESSURE_TOO_LOW = "SUCTION_PRESSURE_TOO_LOW"
    +13    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +14    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +15    ABOVE_MAXIMUM_POWER = "ABOVE_MAXIMUM_POWER"
    +16    NOT_CALCULATED = "NOT_CALCULATED"
    +
    + + +
    +
    + +
    + + class + CompressorTrainCommonShaftFailureStatus(builtins.str, enum.Enum): + + + +
    + +
    10class CompressorTrainCommonShaftFailureStatus(str, Enum):
    +11    TARGET_DISCHARGE_PRESSURE_TOO_HIGH = "TARGET_DISCHARGE_PRESSURE_TOO_HIGH"
    +12    TARGET_DISCHARGE_PRESSURE_TOO_LOW = "TARGET_DISCHARGE_PRESSURE_TOO_LOW"
    +13    SUCTION_PRESSURE_TOO_LOW = "SUCTION_PRESSURE_TOO_LOW"
    +14    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +15    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +16    ABOVE_MAXIMUM_POWER = "ABOVE_MAXIMUM_POWER"
    +17    NOT_CALCULATED = "NOT_CALCULATED"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + TARGET_DISCHARGE_PRESSURE_TOO_HIGH = + + <CompressorTrainCommonShaftFailureStatus.TARGET_DISCHARGE_PRESSURE_TOO_HIGH: 'TARGET_DISCHARGE_PRESSURE_TOO_HIGH'> + + +
    + + + + +
    +
    +
    + TARGET_DISCHARGE_PRESSURE_TOO_LOW = + + <CompressorTrainCommonShaftFailureStatus.TARGET_DISCHARGE_PRESSURE_TOO_LOW: 'TARGET_DISCHARGE_PRESSURE_TOO_LOW'> + + +
    + + + + +
    +
    +
    + SUCTION_PRESSURE_TOO_LOW = +<CompressorTrainCommonShaftFailureStatus.SUCTION_PRESSURE_TOO_LOW: 'SUCTION_PRESSURE_TOO_LOW'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_FLOW_RATE = +<CompressorTrainCommonShaftFailureStatus.ABOVE_MAXIMUM_FLOW_RATE: 'ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_FLOW_RATE = +<CompressorTrainCommonShaftFailureStatus.BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_POWER = +<CompressorTrainCommonShaftFailureStatus.ABOVE_MAXIMUM_POWER: 'ABOVE_MAXIMUM_POWER'> + + +
    + + + + +
    +
    +
    + NOT_CALCULATED = +<CompressorTrainCommonShaftFailureStatus.NOT_CALCULATED: 'NOT_CALCULATED'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result_options.html b/docs/about/references/api/libecalc/dto/result_options.html new file mode 100644 index 0000000000..bfe11718c6 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result_options.html @@ -0,0 +1,306 @@ + + + + + + + libecalc.dto.result_options API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result_options

    + + + + + + +
     1from datetime import datetime
    + 2from typing import Optional
    + 3
    + 4from libecalc.common.time_utils import Frequency
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6
    + 7
    + 8class ResultOptions(EcalcBaseModel):
    + 9    start: Optional[datetime] = None
    +10    end: Optional[datetime] = None
    +11
    +12    output_frequency: Frequency = Frequency.NONE
    +
    + + +
    +
    + +
    + + class + ResultOptions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     9class ResultOptions(EcalcBaseModel):
    +10    start: Optional[datetime] = None
    +11    end: Optional[datetime] = None
    +12
    +13    output_frequency: Frequency = Frequency.NONE
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/types.html b/docs/about/references/api/libecalc/dto/types.html new file mode 100644 index 0000000000..42a91ee843 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/types.html @@ -0,0 +1,2922 @@ + + + + + + + libecalc.dto.types API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.types

    + + + + + + +
      1from enum import Enum
    +  2from typing import List, Optional
    +  3
    +  4from pydantic import Field, validator
    +  5
    +  6from libecalc.dto.base import EcalcBaseModel, FuelTypeUserDefinedCategoryType
    +  7from libecalc.dto.emission import Emission
    +  8from libecalc.dto.utils.validators import convert_expression
    +  9from libecalc.expression import Expression
    + 10
    + 11
    + 12class ConsumptionType(str, Enum):
    + 13    FUEL = "FUEL"
    + 14    ELECTRICITY = "ELECTRICITY"
    + 15
    + 16
    + 17class EnergyUsageType(str, Enum):
    + 18    FUEL = "FUEL"
    + 19    POWER = "POWER"
    + 20
    + 21
    + 22class ConsumerType(str, Enum):
    + 23    DIRECT = "DIRECT"
    + 24    COMPRESSOR = "COMPRESSOR"
    + 25    PUMP = "PUMP"
    + 26    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    + 27    PUMP_SYSTEM = "PUMP_SYSTEM"
    + 28    TABULATED = "TABULATED"
    + 29    GENERATOR_SET_SIMPLE = "GENERATOR_SET_SIMPLE"
    + 30
    + 31
    + 32class EnergyModelType(str, Enum):
    + 33    GENERATOR_SET_SAMPLED = "GENERATOR_SET_SAMPLED"
    + 34    TABULATED = "TABULATED"
    + 35    COMPRESSOR_SAMPLED = "COMPRESSOR_SAMPLED"
    + 36    PUMP_MODEL = "PUMP_MODEL"
    + 37    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS"
    + 38    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS"
    + 39    VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    + 40    SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    + 41    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = (
    + 42        "VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"
    + 43    )
    + 44    TURBINE = "TURBINE"
    + 45    COMPRESSOR_WITH_TURBINE = "COMPRESSOR_WITH_TURBINE"
    + 46
    + 47
    + 48class ChartType(str, Enum):
    + 49    SINGLE_SPEED = "SINGLE_SPEED_CHART"
    + 50    VARIABLE_SPEED = "VARIABLE_SPEED_CHART"
    + 51    GENERIC_FROM_DESIGN_POINT = "GENERIC_CHART_FROM_DESIGN_POINT"
    + 52    GENERIC_FROM_INPUT = "GENERIC_CHART_FROM_INPUT"
    + 53
    + 54
    + 55class ChartRateUnit(str, Enum):
    + 56    AM3_PER_HOUR = "AM3_PER_HOUR"
    + 57
    + 58
    + 59class ChartPolytropicHeadUnit(str, Enum):
    + 60    J_PER_KG = "JOULE_PER_KG"
    + 61    KJ_PER_KG = "KJ_PER_KG"
    + 62    M = "M"
    + 63
    + 64
    + 65class ChartEfficiencyUnit(str, Enum):
    + 66    FRACTION = "FRACTION"
    + 67    PERCENTAGE = "PERCENTAGE"
    + 68
    + 69
    + 70class ChartControlMarginUnit(str, Enum):
    + 71    FRACTION = "FRACTION"
    + 72    PERCENTAGE = "PERCENTAGE"
    + 73
    + 74
    + 75class EoSModel(str, Enum):
    + 76    SRK = "SRK"
    + 77    PR = "PR"
    + 78    GERG_SRK = "GERG_SRK"
    + 79    GERG_PR = "GERG_PR"
    + 80
    + 81
    + 82class FluidStreamFlowRateType(str, Enum):
    + 83    STANDARD_RATE = "Sm3/day"  # Standard conditions are 15 C at 1 atm = 1.01325 bara
    + 84    ACTUAL_VOLUME_RATE = "Am3/hr"
    + 85    MASS_RATE = "kg/hr"
    + 86
    + 87
    + 88class FixedSpeedPressureControl(str, Enum):
    + 89    UPSTREAM_CHOKE = "UPSTREAM_CHOKE"
    + 90    DOWNSTREAM_CHOKE = "DOWNSTREAM_CHOKE"
    + 91    INDIVIDUAL_ASV_PRESSURE = "INDIVIDUAL_ASV_PRESSURE"
    + 92    INDIVIDUAL_ASV_RATE = "INDIVIDUAL_ASV_RATE"
    + 93    COMMON_ASV = "COMMON_ASV"
    + 94
    + 95
    + 96class FluidStreamType(str, Enum):
    + 97    INGOING = "INGOING"
    + 98    OUTGOING = "OUTGOING"
    + 99
    +100
    +101# TODO: time series types defined both here and in yaml_entities.py. Should be defined once.
    +102class TimeSeriesType(str, Enum):
    +103    MISCELLANEOUS = "MISCELLANEOUS"
    +104    DEFAULT = "DEFAULT"
    +105
    +106
    +107class InterpolationType(str, Enum):
    +108    LEFT = "LEFT"
    +109    RIGHT = "RIGHT"
    +110    LINEAR = "LINEAR"
    +111
    +112
    +113class FuelType(EcalcBaseModel):
    +114    """An installation/model/component may change fuel over time, due to setup changes,
    +115    production, and the cost may also change on different predictive models.
    +116    """
    +117
    +118    name: str
    +119    user_defined_category: Optional[FuelTypeUserDefinedCategoryType] = None
    +120    price: Optional[Expression]
    +121    emissions: List[Emission] = Field(default_factory=list)
    +122
    +123    _convert_expression = validator("price", allow_reuse=True, pre=True)(convert_expression)
    +124
    +125    @validator("price", pre=True)
    +126    def convert_price(cls, price):
    +127        # NOTE: This is called after validator/converter above, hence wraps value in an Expression
    +128        # This is needed when price is explicitly set to None, e.g. when parsed in YAML
    +129        return price if price is not None else Expression.setup_from_expression(value=0.0)
    +130
    +131    @validator("user_defined_category", pre=True, always=True)
    +132    def check_user_defined_category(cls, user_defined_category, values):
    +133        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +134        if user_defined_category is not None:
    +135            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +136                name = ""
    +137                if values.get("name") is not None:
    +138                    name = f"with the name {values.get('name')}"
    +139
    +140                raise ValueError(
    +141                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +142                )
    +143
    +144        return user_defined_category
    +145
    +146
    +147class ChartAreaFlag(str, Enum):
    +148    INTERNAL_POINT = "INTERNAL_POINT"
    +149    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +150    BELOW_MINIMUM_HEAD = "BELOW_MINIMUM_HEAD"
    +151    BELOW_MINIMUM_SPEED = "BELOW_MINIMUM_SPEED"
    +152    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +153    ABOVE_MAXIMUM_HEAD = "ABOVE_MAXIMUM_HEAD"
    +154    ABOVE_MAXIMUM_SPEED = "ABOVE_MAXIMUM_SPEED"
    +155    BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE"
    +156    BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE"
    +157    NOT_CALCULATED = "NOT_CALCULATED"
    +158    NO_FLOW_RATE = "NO_FLOW_RATE"
    +
    + + +
    +
    + +
    + + class + ConsumptionType(builtins.str, enum.Enum): + + + +
    + +
    13class ConsumptionType(str, Enum):
    +14    FUEL = "FUEL"
    +15    ELECTRICITY = "ELECTRICITY"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL = +<ConsumptionType.FUEL: 'FUEL'> + + +
    + + + + +
    +
    +
    + ELECTRICITY = +<ConsumptionType.ELECTRICITY: 'ELECTRICITY'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EnergyUsageType(builtins.str, enum.Enum): + + + +
    + +
    18class EnergyUsageType(str, Enum):
    +19    FUEL = "FUEL"
    +20    POWER = "POWER"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL = +<EnergyUsageType.FUEL: 'FUEL'> + + +
    + + + + +
    +
    +
    + POWER = +<EnergyUsageType.POWER: 'POWER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ConsumerType(builtins.str, enum.Enum): + + + +
    + +
    23class ConsumerType(str, Enum):
    +24    DIRECT = "DIRECT"
    +25    COMPRESSOR = "COMPRESSOR"
    +26    PUMP = "PUMP"
    +27    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    +28    PUMP_SYSTEM = "PUMP_SYSTEM"
    +29    TABULATED = "TABULATED"
    +30    GENERATOR_SET_SIMPLE = "GENERATOR_SET_SIMPLE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + DIRECT = +<ConsumerType.DIRECT: 'DIRECT'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ConsumerType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + PUMP = +<ConsumerType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SYSTEM = +<ConsumerType.COMPRESSOR_SYSTEM: 'COMPRESSOR_SYSTEM'> + + +
    + + + + +
    +
    +
    + PUMP_SYSTEM = +<ConsumerType.PUMP_SYSTEM: 'PUMP_SYSTEM'> + + +
    + + + + +
    +
    +
    + TABULATED = +<ConsumerType.TABULATED: 'TABULATED'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET_SIMPLE = +<ConsumerType.GENERATOR_SET_SIMPLE: 'GENERATOR_SET_SIMPLE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EnergyModelType(builtins.str, enum.Enum): + + + +
    + +
    33class EnergyModelType(str, Enum):
    +34    GENERATOR_SET_SAMPLED = "GENERATOR_SET_SAMPLED"
    +35    TABULATED = "TABULATED"
    +36    COMPRESSOR_SAMPLED = "COMPRESSOR_SAMPLED"
    +37    PUMP_MODEL = "PUMP_MODEL"
    +38    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS"
    +39    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS"
    +40    VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    +41    SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    +42    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = (
    +43        "VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"
    +44    )
    +45    TURBINE = "TURBINE"
    +46    COMPRESSOR_WITH_TURBINE = "COMPRESSOR_WITH_TURBINE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + GENERATOR_SET_SAMPLED = +<EnergyModelType.GENERATOR_SET_SAMPLED: 'GENERATOR_SET_SAMPLED'> + + +
    + + + + +
    +
    +
    + TABULATED = +<EnergyModelType.TABULATED: 'TABULATED'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SAMPLED = +<EnergyModelType.COMPRESSOR_SAMPLED: 'COMPRESSOR_SAMPLED'> + + +
    + + + + +
    +
    +
    + PUMP_MODEL = +<EnergyModelType.PUMP_MODEL: 'PUMP_MODEL'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = + + <EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES: 'COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = + + <EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES: 'COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = + + <EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT: 'VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT'> + + +
    + + + + +
    +
    +
    + SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = + + <EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT: 'SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = + + <EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES: 'VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES'> + + +
    + + + + +
    +
    +
    + TURBINE = +<EnergyModelType.TURBINE: 'TURBINE'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_WITH_TURBINE = +<EnergyModelType.COMPRESSOR_WITH_TURBINE: 'COMPRESSOR_WITH_TURBINE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartType(builtins.str, enum.Enum): + + + +
    + +
    49class ChartType(str, Enum):
    +50    SINGLE_SPEED = "SINGLE_SPEED_CHART"
    +51    VARIABLE_SPEED = "VARIABLE_SPEED_CHART"
    +52    GENERIC_FROM_DESIGN_POINT = "GENERIC_CHART_FROM_DESIGN_POINT"
    +53    GENERIC_FROM_INPUT = "GENERIC_CHART_FROM_INPUT"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + SINGLE_SPEED = +<ChartType.SINGLE_SPEED: 'SINGLE_SPEED_CHART'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED = +<ChartType.VARIABLE_SPEED: 'VARIABLE_SPEED_CHART'> + + +
    + + + + +
    +
    +
    + GENERIC_FROM_DESIGN_POINT = +<ChartType.GENERIC_FROM_DESIGN_POINT: 'GENERIC_CHART_FROM_DESIGN_POINT'> + + +
    + + + + +
    +
    +
    + GENERIC_FROM_INPUT = +<ChartType.GENERIC_FROM_INPUT: 'GENERIC_CHART_FROM_INPUT'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartRateUnit(builtins.str, enum.Enum): + + + +
    + +
    56class ChartRateUnit(str, Enum):
    +57    AM3_PER_HOUR = "AM3_PER_HOUR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + AM3_PER_HOUR = +<ChartRateUnit.AM3_PER_HOUR: 'AM3_PER_HOUR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartPolytropicHeadUnit(builtins.str, enum.Enum): + + + +
    + +
    60class ChartPolytropicHeadUnit(str, Enum):
    +61    J_PER_KG = "JOULE_PER_KG"
    +62    KJ_PER_KG = "KJ_PER_KG"
    +63    M = "M"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + J_PER_KG = +<ChartPolytropicHeadUnit.J_PER_KG: 'JOULE_PER_KG'> + + +
    + + + + +
    +
    +
    + KJ_PER_KG = +<ChartPolytropicHeadUnit.KJ_PER_KG: 'KJ_PER_KG'> + + +
    + + + + +
    +
    +
    + M = +<ChartPolytropicHeadUnit.M: 'M'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartEfficiencyUnit(builtins.str, enum.Enum): + + + +
    + +
    66class ChartEfficiencyUnit(str, Enum):
    +67    FRACTION = "FRACTION"
    +68    PERCENTAGE = "PERCENTAGE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FRACTION = +<ChartEfficiencyUnit.FRACTION: 'FRACTION'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<ChartEfficiencyUnit.PERCENTAGE: 'PERCENTAGE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartControlMarginUnit(builtins.str, enum.Enum): + + + +
    + +
    71class ChartControlMarginUnit(str, Enum):
    +72    FRACTION = "FRACTION"
    +73    PERCENTAGE = "PERCENTAGE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FRACTION = +<ChartControlMarginUnit.FRACTION: 'FRACTION'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<ChartControlMarginUnit.PERCENTAGE: 'PERCENTAGE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EoSModel(builtins.str, enum.Enum): + + + +
    + +
    76class EoSModel(str, Enum):
    +77    SRK = "SRK"
    +78    PR = "PR"
    +79    GERG_SRK = "GERG_SRK"
    +80    GERG_PR = "GERG_PR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + SRK = +<EoSModel.SRK: 'SRK'> + + +
    + + + + +
    +
    +
    + PR = +<EoSModel.PR: 'PR'> + + +
    + + + + +
    +
    +
    + GERG_SRK = +<EoSModel.GERG_SRK: 'GERG_SRK'> + + +
    + + + + +
    +
    +
    + GERG_PR = +<EoSModel.GERG_PR: 'GERG_PR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FluidStreamFlowRateType(builtins.str, enum.Enum): + + + +
    + +
    83class FluidStreamFlowRateType(str, Enum):
    +84    STANDARD_RATE = "Sm3/day"  # Standard conditions are 15 C at 1 atm = 1.01325 bara
    +85    ACTUAL_VOLUME_RATE = "Am3/hr"
    +86    MASS_RATE = "kg/hr"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + STANDARD_RATE = +<FluidStreamFlowRateType.STANDARD_RATE: 'Sm3/day'> + + +
    + + + + +
    +
    +
    + ACTUAL_VOLUME_RATE = +<FluidStreamFlowRateType.ACTUAL_VOLUME_RATE: 'Am3/hr'> + + +
    + + + + +
    +
    +
    + MASS_RATE = +<FluidStreamFlowRateType.MASS_RATE: 'kg/hr'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FixedSpeedPressureControl(builtins.str, enum.Enum): + + + +
    + +
    89class FixedSpeedPressureControl(str, Enum):
    +90    UPSTREAM_CHOKE = "UPSTREAM_CHOKE"
    +91    DOWNSTREAM_CHOKE = "DOWNSTREAM_CHOKE"
    +92    INDIVIDUAL_ASV_PRESSURE = "INDIVIDUAL_ASV_PRESSURE"
    +93    INDIVIDUAL_ASV_RATE = "INDIVIDUAL_ASV_RATE"
    +94    COMMON_ASV = "COMMON_ASV"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + UPSTREAM_CHOKE = +<FixedSpeedPressureControl.UPSTREAM_CHOKE: 'UPSTREAM_CHOKE'> + + +
    + + + + +
    +
    +
    + DOWNSTREAM_CHOKE = +<FixedSpeedPressureControl.DOWNSTREAM_CHOKE: 'DOWNSTREAM_CHOKE'> + + +
    + + + + +
    +
    +
    + INDIVIDUAL_ASV_PRESSURE = +<FixedSpeedPressureControl.INDIVIDUAL_ASV_PRESSURE: 'INDIVIDUAL_ASV_PRESSURE'> + + +
    + + + + +
    +
    +
    + INDIVIDUAL_ASV_RATE = +<FixedSpeedPressureControl.INDIVIDUAL_ASV_RATE: 'INDIVIDUAL_ASV_RATE'> + + +
    + + + + +
    +
    +
    + COMMON_ASV = +<FixedSpeedPressureControl.COMMON_ASV: 'COMMON_ASV'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FluidStreamType(builtins.str, enum.Enum): + + + +
    + +
    97class FluidStreamType(str, Enum):
    +98    INGOING = "INGOING"
    +99    OUTGOING = "OUTGOING"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INGOING = +<FluidStreamType.INGOING: 'INGOING'> + + +
    + + + + +
    +
    +
    + OUTGOING = +<FluidStreamType.OUTGOING: 'OUTGOING'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + TimeSeriesType(builtins.str, enum.Enum): + + + +
    + +
    103class TimeSeriesType(str, Enum):
    +104    MISCELLANEOUS = "MISCELLANEOUS"
    +105    DEFAULT = "DEFAULT"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + MISCELLANEOUS = +<TimeSeriesType.MISCELLANEOUS: 'MISCELLANEOUS'> + + +
    + + + + +
    +
    +
    + DEFAULT = +<TimeSeriesType.DEFAULT: 'DEFAULT'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + InterpolationType(builtins.str, enum.Enum): + + + +
    + +
    108class InterpolationType(str, Enum):
    +109    LEFT = "LEFT"
    +110    RIGHT = "RIGHT"
    +111    LINEAR = "LINEAR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + LEFT = +<InterpolationType.LEFT: 'LEFT'> + + +
    + + + + +
    +
    +
    + RIGHT = +<InterpolationType.RIGHT: 'RIGHT'> + + +
    + + + + +
    +
    +
    + LINEAR = +<InterpolationType.LINEAR: 'LINEAR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FuelType(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    114class FuelType(EcalcBaseModel):
    +115    """An installation/model/component may change fuel over time, due to setup changes,
    +116    production, and the cost may also change on different predictive models.
    +117    """
    +118
    +119    name: str
    +120    user_defined_category: Optional[FuelTypeUserDefinedCategoryType] = None
    +121    price: Optional[Expression]
    +122    emissions: List[Emission] = Field(default_factory=list)
    +123
    +124    _convert_expression = validator("price", allow_reuse=True, pre=True)(convert_expression)
    +125
    +126    @validator("price", pre=True)
    +127    def convert_price(cls, price):
    +128        # NOTE: This is called after validator/converter above, hence wraps value in an Expression
    +129        # This is needed when price is explicitly set to None, e.g. when parsed in YAML
    +130        return price if price is not None else Expression.setup_from_expression(value=0.0)
    +131
    +132    @validator("user_defined_category", pre=True, always=True)
    +133    def check_user_defined_category(cls, user_defined_category, values):
    +134        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +135        if user_defined_category is not None:
    +136            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +137                name = ""
    +138                if values.get("name") is not None:
    +139                    name = f"with the name {values.get('name')}"
    +140
    +141                raise ValueError(
    +142                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +143                )
    +144
    +145        return user_defined_category
    +
    + + +

    An installation/model/component may change fuel over time, due to setup changes, +production, and the cost may also change on different predictive models.

    +
    + + +
    + +
    +
    @validator('price', pre=True)
    + + def + convert_price(cls, price): + + + +
    + +
    126    @validator("price", pre=True)
    +127    def convert_price(cls, price):
    +128        # NOTE: This is called after validator/converter above, hence wraps value in an Expression
    +129        # This is needed when price is explicitly set to None, e.g. when parsed in YAML
    +130        return price if price is not None else Expression.setup_from_expression(value=0.0)
    +
    + + + + +
    +
    + +
    +
    @validator('user_defined_category', pre=True, always=True)
    + + def + check_user_defined_category(cls, user_defined_category, values): + + + +
    + +
    132    @validator("user_defined_category", pre=True, always=True)
    +133    def check_user_defined_category(cls, user_defined_category, values):
    +134        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +135        if user_defined_category is not None:
    +136            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +137                name = ""
    +138                if values.get("name") is not None:
    +139                    name = f"with the name {values.get('name')}"
    +140
    +141                raise ValueError(
    +142                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +143                )
    +144
    +145        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ChartAreaFlag(builtins.str, enum.Enum): + + + +
    + +
    148class ChartAreaFlag(str, Enum):
    +149    INTERNAL_POINT = "INTERNAL_POINT"
    +150    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +151    BELOW_MINIMUM_HEAD = "BELOW_MINIMUM_HEAD"
    +152    BELOW_MINIMUM_SPEED = "BELOW_MINIMUM_SPEED"
    +153    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +154    ABOVE_MAXIMUM_HEAD = "ABOVE_MAXIMUM_HEAD"
    +155    ABOVE_MAXIMUM_SPEED = "ABOVE_MAXIMUM_SPEED"
    +156    BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE"
    +157    BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE"
    +158    NOT_CALCULATED = "NOT_CALCULATED"
    +159    NO_FLOW_RATE = "NO_FLOW_RATE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INTERNAL_POINT = +<ChartAreaFlag.INTERNAL_POINT: 'INTERNAL_POINT'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_FLOW_RATE = +<ChartAreaFlag.BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_HEAD = +<ChartAreaFlag.BELOW_MINIMUM_HEAD: 'BELOW_MINIMUM_HEAD'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED = +<ChartAreaFlag.BELOW_MINIMUM_SPEED: 'BELOW_MINIMUM_SPEED'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_FLOW_RATE = +<ChartAreaFlag.ABOVE_MAXIMUM_FLOW_RATE: 'ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_HEAD = +<ChartAreaFlag.ABOVE_MAXIMUM_HEAD: 'ABOVE_MAXIMUM_HEAD'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_SPEED = +<ChartAreaFlag.ABOVE_MAXIMUM_SPEED: 'ABOVE_MAXIMUM_SPEED'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = + + <ChartAreaFlag.BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = + + <ChartAreaFlag.BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE: 'BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + NOT_CALCULATED = +<ChartAreaFlag.NOT_CALCULATED: 'NOT_CALCULATED'> + + +
    + + + + +
    +
    +
    + NO_FLOW_RATE = +<ChartAreaFlag.NO_FLOW_RATE: 'NO_FLOW_RATE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils.html b/docs/about/references/api/libecalc/dto/utils.html new file mode 100644 index 0000000000..8e97ae7799 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.dto.utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils/aggregators.html b/docs/about/references/api/libecalc/dto/utils/aggregators.html new file mode 100644 index 0000000000..09e7036431 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils/aggregators.html @@ -0,0 +1,537 @@ + + + + + + + libecalc.dto.utils.aggregators API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils.aggregators

    + + + + + + +
     1import operator
    + 2from functools import reduce
    + 3from typing import Dict, List, Protocol
    + 4
    + 5from libecalc.common.list.list_utils import transpose
    + 6from libecalc.common.utils.rates import (
    + 7    TimeSeriesBoolean,
    + 8)
    + 9from libecalc.dto.result.emission import PartialEmissionResult
    +10
    +11
    +12class HasIsValid(Protocol):
    +13    is_valid: TimeSeriesBoolean
    +14
    +15
    +16def aggregate_is_valid(components: List[HasIsValid]) -> List[bool]:
    +17    is_valid_arrays = [component.is_valid.values for component in components]
    +18    return [all(is_valid_step) for is_valid_step in transpose(is_valid_arrays)]
    +19
    +20
    +21class HasEmissions(Protocol):
    +22    emissions: List[PartialEmissionResult]
    +23
    +24
    +25def aggregate_emissions(
    +26    emissions_lists: List[Dict[str, PartialEmissionResult]],
    +27) -> Dict[str, PartialEmissionResult]:
    +28    """Aggregates emissions e.g. for a total asset across installations
    +29    Args:
    +30        emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate
    +31
    +32    Returns:
    +33        dto.types.FuelType
    +34    """
    +35
    +36    all_emissions = [emission for emissions in emissions_lists for emission in emissions.values()]
    +37
    +38    # Keep order of emissions
    +39    emission_names = []
    +40    for emission in all_emissions:
    +41        if emission.name not in emission_names:
    +42            emission_names.append(emission.name)
    +43
    +44    emissions_aggregated = {}
    +45    for emission_name in emission_names:
    +46        emissions = [emission for emission in all_emissions if emission.name == emission_name]
    +47
    +48        emissions_aggregated[emission_name] = PartialEmissionResult(
    +49            name=emission_name,
    +50            timesteps=emissions[0].timesteps,
    +51            rate=reduce(operator.add, [emission.rate for emission in emissions]),
    +52            tax=reduce(operator.add, [emission.tax for emission in emissions]),
    +53            quota=reduce(operator.add, [emission.quota for emission in emissions]),
    +54        )
    +55
    +56    return emissions_aggregated
    +
    + + +
    +
    + +
    + + class + HasIsValid(typing.Protocol): + + + +
    + +
    13class HasIsValid(Protocol):
    +14    is_valid: TimeSeriesBoolean
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + HasIsValid(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + def + aggregate_is_valid( components: List[libecalc.dto.utils.aggregators.HasIsValid]) -> List[bool]: + + + +
    + +
    17def aggregate_is_valid(components: List[HasIsValid]) -> List[bool]:
    +18    is_valid_arrays = [component.is_valid.values for component in components]
    +19    return [all(is_valid_step) for is_valid_step in transpose(is_valid_arrays)]
    +
    + + + + +
    +
    + +
    + + class + HasEmissions(typing.Protocol): + + + +
    + +
    22class HasEmissions(Protocol):
    +23    emissions: List[PartialEmissionResult]
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + HasEmissions(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + def + aggregate_emissions( emissions_lists: List[Dict[str, libecalc.dto.result.emission.PartialEmissionResult]]) -> Dict[str, libecalc.dto.result.emission.PartialEmissionResult]: + + + +
    + +
    26def aggregate_emissions(
    +27    emissions_lists: List[Dict[str, PartialEmissionResult]],
    +28) -> Dict[str, PartialEmissionResult]:
    +29    """Aggregates emissions e.g. for a total asset across installations
    +30    Args:
    +31        emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate
    +32
    +33    Returns:
    +34        dto.types.FuelType
    +35    """
    +36
    +37    all_emissions = [emission for emissions in emissions_lists for emission in emissions.values()]
    +38
    +39    # Keep order of emissions
    +40    emission_names = []
    +41    for emission in all_emissions:
    +42        if emission.name not in emission_names:
    +43            emission_names.append(emission.name)
    +44
    +45    emissions_aggregated = {}
    +46    for emission_name in emission_names:
    +47        emissions = [emission for emission in all_emissions if emission.name == emission_name]
    +48
    +49        emissions_aggregated[emission_name] = PartialEmissionResult(
    +50            name=emission_name,
    +51            timesteps=emissions[0].timesteps,
    +52            rate=reduce(operator.add, [emission.rate for emission in emissions]),
    +53            tax=reduce(operator.add, [emission.tax for emission in emissions]),
    +54            quota=reduce(operator.add, [emission.quota for emission in emissions]),
    +55        )
    +56
    +57    return emissions_aggregated
    +
    + + +

    Aggregates emissions e.g. for a total asset across installations +Args: + emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate

    + +

    Returns: + dto.types.FuelType

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils/validators.html b/docs/about/references/api/libecalc/dto/utils/validators.html new file mode 100644 index 0000000000..26d7c29527 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils/validators.html @@ -0,0 +1,401 @@ + + + + + + + libecalc.dto.utils.validators API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils.validators

    + + + + + + +
     1from datetime import date, datetime
    + 2from typing import Dict, List, Optional, TypeVar, Union
    + 3
    + 4from pydantic import constr
    + 5
    + 6from libecalc.common.time_utils import is_temporal_model
    + 7from libecalc.expression import Expression
    + 8
    + 9EmissionNameStr = constr(regex=r"^\w*$")
    +10COMPONENT_NAME_ALLOWED_CHARS = "A-ZÆØÅa-zæøå\\d_/\\- "
    +11ComponentNameStr = constr(regex=r"^[" + COMPONENT_NAME_ALLOWED_CHARS + "]*$")  # synced with valid regexp in BE4FE
    +12
    +13ExpressionType = Union[str, int, float, Expression]
    +14
    +15
    +16def convert_expression(
    +17    value: Optional[Union[ExpressionType, Dict[date, ExpressionType]]]
    +18) -> Optional[Union[Expression, Dict[date, Expression]]]:
    +19    if value is None or isinstance(value, Expression):
    +20        return value
    +21    elif is_temporal_model(value):
    +22        return {start_time: convert_expression(value=expression) for start_time, expression in value.items()}
    +23    return Expression.setup_from_expression(value=value)
    +24
    +25
    +26def convert_expressions(
    +27    values: Optional[List[Optional[Union[ExpressionType, Dict[date, ExpressionType]]]]]
    +28) -> Optional[List[Optional[Union[Expression, Dict[date, Expression]]]]]:
    +29    if values is None:
    +30        return values
    +31    if not isinstance(values, list):
    +32        return convert_expression(value=values)
    +33    else:
    +34        return [convert_expression(value=value) for value in values]
    +35
    +36
    +37def uppercase_user_defined_category(value):
    +38    if value is not None and isinstance(value, str):
    +39        return value.upper()
    +40    elif value is not None and is_temporal_model(value):
    +41        return {timestep: category.upper() for timestep, category in value.items()}
    +42    return value
    +43
    +44
    +45TModel = TypeVar("TModel")
    +46
    +47
    +48def validate_temporal_model(model: Dict[datetime, TModel]) -> Dict[datetime, TModel]:
    +49    if not (list(model.keys()) == sorted(model)):
    +50        raise ValueError("Dates in a temporal model should be sorted with the earliest date first")
    +51
    +52    return model
    +
    + + +
    +
    + +
    + + def + convert_expression( value: Union[str, int, float, libecalc.expression.expression.Expression, Dict[datetime.date, Union[str, int, float, libecalc.expression.expression.Expression]], NoneType]) -> Union[libecalc.expression.expression.Expression, Dict[datetime.date, libecalc.expression.expression.Expression], NoneType]: + + + +
    + +
    17def convert_expression(
    +18    value: Optional[Union[ExpressionType, Dict[date, ExpressionType]]]
    +19) -> Optional[Union[Expression, Dict[date, Expression]]]:
    +20    if value is None or isinstance(value, Expression):
    +21        return value
    +22    elif is_temporal_model(value):
    +23        return {start_time: convert_expression(value=expression) for start_time, expression in value.items()}
    +24    return Expression.setup_from_expression(value=value)
    +
    + + + + +
    +
    + +
    + + def + convert_expressions( values: Union[List[Union[str, int, float, libecalc.expression.expression.Expression, Dict[datetime.date, Union[str, int, float, libecalc.expression.expression.Expression]], NoneType]], NoneType]) -> Union[List[Union[libecalc.expression.expression.Expression, Dict[datetime.date, libecalc.expression.expression.Expression], NoneType]], NoneType]: + + + +
    + +
    27def convert_expressions(
    +28    values: Optional[List[Optional[Union[ExpressionType, Dict[date, ExpressionType]]]]]
    +29) -> Optional[List[Optional[Union[Expression, Dict[date, Expression]]]]]:
    +30    if values is None:
    +31        return values
    +32    if not isinstance(values, list):
    +33        return convert_expression(value=values)
    +34    else:
    +35        return [convert_expression(value=value) for value in values]
    +
    + + + + +
    +
    + +
    + + def + uppercase_user_defined_category(value): + + + +
    + +
    38def uppercase_user_defined_category(value):
    +39    if value is not None and isinstance(value, str):
    +40        return value.upper()
    +41    elif value is not None and is_temporal_model(value):
    +42        return {timestep: category.upper() for timestep, category in value.items()}
    +43    return value
    +
    + + + + +
    +
    + +
    + + def + validate_temporal_model( model: Dict[datetime.datetime, ~TModel]) -> Dict[datetime.datetime, ~TModel]: + + + +
    + +
    49def validate_temporal_model(model: Dict[datetime, TModel]) -> Dict[datetime, TModel]:
    +50    if not (list(model.keys()) == sorted(model)):
    +51        raise ValueError("Dates in a temporal model should be sorted with the earliest date first")
    +52
    +53    return model
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/variables.html b/docs/about/references/api/libecalc/dto/variables.html new file mode 100644 index 0000000000..5858d28a8e --- /dev/null +++ b/docs/about/references/api/libecalc/dto/variables.html @@ -0,0 +1,527 @@ + + + + + + + libecalc.dto.variables API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.variables

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime, timedelta
    + 4from typing import Dict, List
    + 5
    + 6from pydantic import BaseModel, Field, confloat
    + 7
    + 8from libecalc.common.time_utils import Period
    + 9
    +10
    +11class VariablesMap(BaseModel):
    +12    """A map of all (timeseries) variables that can be used in eCalc YAML
    +13    A variable name has the format "{name_of_case};{title_of_header} from the original
    +14    file/resource with time series, ie;
    +15
    +16    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will
    +17    result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which
    +18    can be referred to in the eCalc YAML.
    +19
    +20    Currently, the relevant variables are sent/injected to the components that have used
    +21    it in the yaml, but at some point it may be replaced with the data/parameters directly,
    +22    ie the variables will be evaluated before the calculation starts.
    +23
    +24    The variables must be interpolated and extrapolated before being added to the variablesmap,
    +25    to make sure that the resolution of ALL variables are the same for everywhere it is being used,
    +26    BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation
    +27    directly.
    +28    """
    +29
    +30    time_vector: List[datetime] = Field(default_factory=list)
    +31    variables: Dict[str, List[confloat(allow_inf_nan=False)]] = Field(default_factory=dict)
    +32
    +33    @property
    +34    def period(self):
    +35        return Period(
    +36            start=self.time_vector[0],
    +37            end=self.time_vector[-1] + timedelta(microseconds=1),  # Make sure the last timestep is included
    +38            # TODO: Change this? Need to change where stuff depends on this ...
    +39        )
    +40
    +41    @property
    +42    def length(self) -> int:
    +43        return len(self.time_vector)
    +44
    +45    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +46        subset_time_vector = self.time_vector[start_index:end_index]
    +47        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +48        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +49
    +50    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +51        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +52        return self.get_subset(start_index, end_index)
    +53
    +54    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +55        """
    +56        Get variables that are active and in use for the given timestep only
    +57        :param current_timestep:
    +58        :return:
    +59        """
    +60        timestep_index = self.time_vector.index(current_timestep)
    +61        return self.get_subset(timestep_index, timestep_index + 1)
    +62
    +63    def zeros(self) -> List[float]:
    +64        return [0.0] * len(self.time_vector)
    +
    + + +
    +
    + +
    + + class + VariablesMap(pydantic.main.BaseModel): + + + +
    + +
    12class VariablesMap(BaseModel):
    +13    """A map of all (timeseries) variables that can be used in eCalc YAML
    +14    A variable name has the format "{name_of_case};{title_of_header} from the original
    +15    file/resource with time series, ie;
    +16
    +17    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will
    +18    result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which
    +19    can be referred to in the eCalc YAML.
    +20
    +21    Currently, the relevant variables are sent/injected to the components that have used
    +22    it in the yaml, but at some point it may be replaced with the data/parameters directly,
    +23    ie the variables will be evaluated before the calculation starts.
    +24
    +25    The variables must be interpolated and extrapolated before being added to the variablesmap,
    +26    to make sure that the resolution of ALL variables are the same for everywhere it is being used,
    +27    BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation
    +28    directly.
    +29    """
    +30
    +31    time_vector: List[datetime] = Field(default_factory=list)
    +32    variables: Dict[str, List[confloat(allow_inf_nan=False)]] = Field(default_factory=dict)
    +33
    +34    @property
    +35    def period(self):
    +36        return Period(
    +37            start=self.time_vector[0],
    +38            end=self.time_vector[-1] + timedelta(microseconds=1),  # Make sure the last timestep is included
    +39            # TODO: Change this? Need to change where stuff depends on this ...
    +40        )
    +41
    +42    @property
    +43    def length(self) -> int:
    +44        return len(self.time_vector)
    +45
    +46    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +47        subset_time_vector = self.time_vector[start_index:end_index]
    +48        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +49        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +50
    +51    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +52        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +53        return self.get_subset(start_index, end_index)
    +54
    +55    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +56        """
    +57        Get variables that are active and in use for the given timestep only
    +58        :param current_timestep:
    +59        :return:
    +60        """
    +61        timestep_index = self.time_vector.index(current_timestep)
    +62        return self.get_subset(timestep_index, timestep_index + 1)
    +63
    +64    def zeros(self) -> List[float]:
    +65        return [0.0] * len(self.time_vector)
    +
    + + +

    A map of all (timeseries) variables that can be used in eCalc YAML +A variable name has the format "{name_of_case};{title_of_header} from the original +file/resource with time series, ie;

    + +

    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will +result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which +can be referred to in the eCalc YAML.

    + +

    Currently, the relevant variables are sent/injected to the components that have used +it in the yaml, but at some point it may be replaced with the data/parameters directly, +ie the variables will be evaluated before the calculation starts.

    + +

    The variables must be interpolated and extrapolated before being added to the variablesmap, +to make sure that the resolution of ALL variables are the same for everywhere it is being used, +BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation +directly.

    +
    + + +
    + +
    + + def + get_subset( self, start_index: int = 0, end_index: int = -1) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    46    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +47        subset_time_vector = self.time_vector[start_index:end_index]
    +48        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +49        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +
    + + + + +
    +
    + +
    + + def + get_subset_from_period( self, period: libecalc.common.time_utils.Period) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    51    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +52        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +53        return self.get_subset(start_index, end_index)
    +
    + + + + +
    +
    + +
    + + def + get_subset_for_timestep( self, current_timestep: datetime.datetime) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    55    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +56        """
    +57        Get variables that are active and in use for the given timestep only
    +58        :param current_timestep:
    +59        :return:
    +60        """
    +61        timestep_index = self.time_vector.index(current_timestep)
    +62        return self.get_subset(timestep_index, timestep_index + 1)
    +
    + + +

    Get variables that are active and in use for the given timestep only

    + +
    Parameters
    + +
      +
    • current_timestep:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + zeros(self) -> List[float]: + + + +
    + +
    64    def zeros(self) -> List[float]:
    +65        return [0.0] * len(self.time_vector)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples.html b/docs/about/references/api/libecalc/examples.html new file mode 100644 index 0000000000..77a8799e9c --- /dev/null +++ b/docs/about/references/api/libecalc/examples.html @@ -0,0 +1,244 @@ + + + + + + + libecalc.examples API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples

    + + + + + + +
    1from .advanced import *  # noqa: F403
    +2from .simple import *  # noqa: F403
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples/advanced.html b/docs/about/references/api/libecalc/examples/advanced.html new file mode 100644 index 0000000000..aa0726af30 --- /dev/null +++ b/docs/about/references/api/libecalc/examples/advanced.html @@ -0,0 +1,304 @@ + + + + + + + libecalc.examples.advanced API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples.advanced

    + + + + + + +
     1from pathlib import Path
    + 2
    + 3import pytest
    + 4
    + 5from libecalc.fixtures import YamlCase
    + 6from libecalc.fixtures.case_utils import YamlCaseLoader
    + 7
    + 8"""
    + 9Test project for Advanced
    +10
    +11The purpose of this fixture is to showcase an advanced version an eCalc Model for use with
    +12examples and testing.
    +13
    +14"""
    +15
    +16
    +17@pytest.fixture
    +18def advanced_yaml() -> YamlCase:
    +19    return YamlCaseLoader.load(
    +20        case_path=Path(__file__).parent,
    +21        main_file="model.yaml",
    +22        resource_names=[
    +23            "base_profile.csv",
    +24            "compressor_chart.csv",
    +25            "compressor_sampled.csv",
    +26            "genset.csv",
    +27            "pump_chart.csv",
    +28        ],
    +29    )
    +
    + + +
    +
    + +
    +
    @pytest.fixture
    + + def + advanced_yaml() -> libecalc.fixtures.case_types.YamlCase: + + + +
    + +
    18@pytest.fixture
    +19def advanced_yaml() -> YamlCase:
    +20    return YamlCaseLoader.load(
    +21        case_path=Path(__file__).parent,
    +22        main_file="model.yaml",
    +23        resource_names=[
    +24            "base_profile.csv",
    +25            "compressor_chart.csv",
    +26            "compressor_sampled.csv",
    +27            "genset.csv",
    +28            "pump_chart.csv",
    +29        ],
    +30    )
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples/simple.html b/docs/about/references/api/libecalc/examples/simple.html new file mode 100644 index 0000000000..9ec7cda34d --- /dev/null +++ b/docs/about/references/api/libecalc/examples/simple.html @@ -0,0 +1,306 @@ + + + + + + + libecalc.examples.simple API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples.simple

    + + + + + + +
     1from pathlib import Path
    + 2
    + 3import pytest
    + 4
    + 5from libecalc.fixtures import YamlCase
    + 6from libecalc.fixtures.case_utils import YamlCaseLoader
    + 7
    + 8"""
    + 9Test project for Simple
    +10
    +11The purpose of this fixture is to show a simple example of an eCalc model for testing and examples, and to
    +12have a lightweight version of a complete model for lightweight e2e testing.
    +13
    +14"""
    +15
    +16
    +17@pytest.fixture
    +18def simple_yaml() -> YamlCase:
    +19    return YamlCaseLoader.load(
    +20        case_path=Path(__file__).parent,
    +21        main_file="model.yaml",
    +22        resource_names=[
    +23            "compressor_sampled.csv",
    +24            "compressor_sampled_with_turbine.csv",
    +25            "genset.csv",
    +26            "production_data.csv",
    +27            "pump_chart.csv",
    +28            "pump_sampled.csv",
    +29        ],
    +30    )
    +
    + + +
    +
    + +
    +
    @pytest.fixture
    + + def + simple_yaml() -> libecalc.fixtures.case_types.YamlCase: + + + +
    + +
    18@pytest.fixture
    +19def simple_yaml() -> YamlCase:
    +20    return YamlCaseLoader.load(
    +21        case_path=Path(__file__).parent,
    +22        main_file="model.yaml",
    +23        resource_names=[
    +24            "compressor_sampled.csv",
    +25            "compressor_sampled_with_turbine.csv",
    +26            "genset.csv",
    +27            "production_data.csv",
    +28            "pump_chart.csv",
    +29            "pump_sampled.csv",
    +30        ],
    +31    )
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression.html b/docs/about/references/api/libecalc/expression.html new file mode 100644 index 0000000000..aa689be9d9 --- /dev/null +++ b/docs/about/references/api/libecalc/expression.html @@ -0,0 +1,243 @@ + + + + + + + libecalc.expression API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression

    + + + + + + +
    1from libecalc.expression.expression import Expression
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression/expression.html b/docs/about/references/api/libecalc/expression/expression.html new file mode 100644 index 0000000000..0b0b07e348 --- /dev/null +++ b/docs/about/references/api/libecalc/expression/expression.html @@ -0,0 +1,697 @@ + + + + + + + libecalc.expression.expression API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression.expression

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from typing import Dict, List, Union
    +  4
    +  5import numpy as np
    +  6from numpy.typing import NDArray
    +  7
    +  8from libecalc.common.logger import logger
    +  9from libecalc.expression.expression_evaluator import (
    + 10    Operators,
    + 11    Token,
    + 12    TokenTag,
    + 13    eval_tokens,
    + 14    lexer,
    + 15)
    + 16
    + 17LEFT_PARENTHESIS_TOKEN = Token(tag=TokenTag.operator, value=Operators.left_parenthesis.value)
    + 18RIGHT_PARENTHESIS_TOKEN = Token(tag=TokenTag.operator, value=Operators.right_parenthesis.value)
    + 19MULTIPLICATION_TOKEN = Token(tag=TokenTag.operator, value=Operators.multiply.value)
    + 20
    + 21ExpressionType = Union[str, float, int]
    + 22
    + 23
    + 24class Expression:
    + 25    def __init__(
    + 26        self,
    + 27        tokens: List[Token],
    + 28    ):
    + 29        self.tokens = tokens
    + 30
    + 31    @classmethod
    + 32    def setup_from_expression(
    + 33        cls,
    + 34        value: ExpressionType,
    + 35    ) -> Expression:
    + 36        tokens = cls.validate(value)
    + 37        return cls(tokens=tokens)
    + 38
    + 39    def __str__(self):
    + 40        expression_string = " ".join(str(token) for token in self.tokens)
    + 41        expression_string = expression_string.replace(" )", ")")
    + 42        expression_string = expression_string.replace("( ", "(")
    + 43        return expression_string
    + 44
    + 45    @property
    + 46    def variables(self) -> List[str]:
    + 47        return [token.value for token in self.tokens if token.tag == TokenTag.reference]
    + 48
    + 49    @classmethod
    + 50    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    + 51        """Create new expression by multiplying two expressions
    + 52        new expression = "(expression1) {*} (expression2)".
    + 53        """
    + 54        tokens1 = expression1.tokens
    + 55        tokens2 = expression2.tokens
    + 56        tokens_multiplied = (
    + 57            [LEFT_PARENTHESIS_TOKEN]
    + 58            + tokens1
    + 59            + [RIGHT_PARENTHESIS_TOKEN]
    + 60            + [MULTIPLICATION_TOKEN]
    + 61            + [LEFT_PARENTHESIS_TOKEN]
    + 62            + tokens2
    + 63            + [RIGHT_PARENTHESIS_TOKEN]
    + 64        )
    + 65        return cls(tokens=tokens_multiplied)
    + 66
    + 67    @classmethod
    + 68    def validate(cls, expression: ExpressionType) -> List[Token]:
    + 69        expression = _expression_as_number_if_number(expression_input=expression)
    + 70
    + 71        if not isinstance(expression, (str, float, int)):
    + 72            raise ValueError("Expression should be of type str, int or float")
    + 73        return lexer(expression)
    + 74
    + 75    @classmethod
    + 76    def validator(cls, expression: Union[str, float, int, Expression]):
    + 77        if isinstance(expression, Expression):
    + 78            return expression
    + 79        tokens = cls.validate(expression=expression)
    + 80        return cls(tokens=tokens)
    + 81
    + 82    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    + 83        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    + 84        if len(missing_references) != 0:
    + 85            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    + 86            logger.error(msg)
    + 87            raise ValueError(msg)
    + 88
    + 89        tokens = [
    + 90            Token(
    + 91                tag=TokenTag.numeric,
    + 92                value=np.asarray(variables.get(token.value)),
    + 93            )
    + 94            if token.tag == TokenTag.reference
    + 95            else token
    + 96            for token in self.tokens
    + 97        ]
    + 98
    + 99        return eval_tokens(tokens=tokens, array_length=fill_length)
    +100
    +101    def __eq__(self, other):
    +102        if not isinstance(other, Expression):
    +103            return NotImplemented
    +104        return self.tokens == other.tokens
    +105
    +106    def __repr__(self):
    +107        return f"Expression(tokens={''.join(repr(token) for token in self.tokens)})"
    +108
    +109    @classmethod
    +110    def __modify_schema__(cls, field_schema):
    +111        field_schema.update(
    +112            title="Expression",
    +113            anyOf=[
    +114                {"type": "integer"},
    +115                {"type": "number"},
    +116                {
    +117                    "type": "string",
    +118                    "pattern": r"^[\w * ^ . : ; () {} = > < + \- /$]+$",
    +119                },
    +120            ],
    +121            examples=["SIM1;OIL_PROD {+} 1000", 5],
    +122        )
    +123
    +124    @classmethod
    +125    def __get_validators__(cls):
    +126        yield cls.validator
    +127
    +128
    +129def _expression_as_number_if_number(expression_input: ExpressionType) -> ExpressionType:
    +130    """Expressions may be either pure numbers, booleans or strings which define a combination of numbers, operators and
    +131    references as a string. If very small numbers are parsed and represented in scientific notation, the expression
    +132    parsing will wrongfully treat these as expressions with references/operators instead of pure numeric values. Thus,
    +133    all inputs are tested if they can be directly converted to a number, and if so we use the value instead of the
    +134    string representation in further calculations.
    +135    """
    +136    if isinstance(expression_input, str):
    +137        try:
    +138            expression_as_number_if_number = float(expression_input)
    +139        except Exception:
    +140            expression_as_number_if_number = expression_input  # type: ignore[assignment]
    +141    else:
    +142        expression_as_number_if_number = expression_input
    +143
    +144    return expression_as_number_if_number
    +
    + + +
    +
    + +
    + + class + Expression: + + + +
    + +
     25class Expression:
    + 26    def __init__(
    + 27        self,
    + 28        tokens: List[Token],
    + 29    ):
    + 30        self.tokens = tokens
    + 31
    + 32    @classmethod
    + 33    def setup_from_expression(
    + 34        cls,
    + 35        value: ExpressionType,
    + 36    ) -> Expression:
    + 37        tokens = cls.validate(value)
    + 38        return cls(tokens=tokens)
    + 39
    + 40    def __str__(self):
    + 41        expression_string = " ".join(str(token) for token in self.tokens)
    + 42        expression_string = expression_string.replace(" )", ")")
    + 43        expression_string = expression_string.replace("( ", "(")
    + 44        return expression_string
    + 45
    + 46    @property
    + 47    def variables(self) -> List[str]:
    + 48        return [token.value for token in self.tokens if token.tag == TokenTag.reference]
    + 49
    + 50    @classmethod
    + 51    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    + 52        """Create new expression by multiplying two expressions
    + 53        new expression = "(expression1) {*} (expression2)".
    + 54        """
    + 55        tokens1 = expression1.tokens
    + 56        tokens2 = expression2.tokens
    + 57        tokens_multiplied = (
    + 58            [LEFT_PARENTHESIS_TOKEN]
    + 59            + tokens1
    + 60            + [RIGHT_PARENTHESIS_TOKEN]
    + 61            + [MULTIPLICATION_TOKEN]
    + 62            + [LEFT_PARENTHESIS_TOKEN]
    + 63            + tokens2
    + 64            + [RIGHT_PARENTHESIS_TOKEN]
    + 65        )
    + 66        return cls(tokens=tokens_multiplied)
    + 67
    + 68    @classmethod
    + 69    def validate(cls, expression: ExpressionType) -> List[Token]:
    + 70        expression = _expression_as_number_if_number(expression_input=expression)
    + 71
    + 72        if not isinstance(expression, (str, float, int)):
    + 73            raise ValueError("Expression should be of type str, int or float")
    + 74        return lexer(expression)
    + 75
    + 76    @classmethod
    + 77    def validator(cls, expression: Union[str, float, int, Expression]):
    + 78        if isinstance(expression, Expression):
    + 79            return expression
    + 80        tokens = cls.validate(expression=expression)
    + 81        return cls(tokens=tokens)
    + 82
    + 83    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    + 84        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    + 85        if len(missing_references) != 0:
    + 86            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    + 87            logger.error(msg)
    + 88            raise ValueError(msg)
    + 89
    + 90        tokens = [
    + 91            Token(
    + 92                tag=TokenTag.numeric,
    + 93                value=np.asarray(variables.get(token.value)),
    + 94            )
    + 95            if token.tag == TokenTag.reference
    + 96            else token
    + 97            for token in self.tokens
    + 98        ]
    + 99
    +100        return eval_tokens(tokens=tokens, array_length=fill_length)
    +101
    +102    def __eq__(self, other):
    +103        if not isinstance(other, Expression):
    +104            return NotImplemented
    +105        return self.tokens == other.tokens
    +106
    +107    def __repr__(self):
    +108        return f"Expression(tokens={''.join(repr(token) for token in self.tokens)})"
    +109
    +110    @classmethod
    +111    def __modify_schema__(cls, field_schema):
    +112        field_schema.update(
    +113            title="Expression",
    +114            anyOf=[
    +115                {"type": "integer"},
    +116                {"type": "number"},
    +117                {
    +118                    "type": "string",
    +119                    "pattern": r"^[\w * ^ . : ; () {} = > < + \- /$]+$",
    +120                },
    +121            ],
    +122            examples=["SIM1;OIL_PROD {+} 1000", 5],
    +123        )
    +124
    +125    @classmethod
    +126    def __get_validators__(cls):
    +127        yield cls.validator
    +
    + + + + +
    + +
    + + Expression(tokens: List[libecalc.expression.expression_evaluator.Token]) + + + +
    + +
    26    def __init__(
    +27        self,
    +28        tokens: List[Token],
    +29    ):
    +30        self.tokens = tokens
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + setup_from_expression( cls, value: Union[str, float, int]) -> libecalc.expression.expression.Expression: + + + +
    + +
    32    @classmethod
    +33    def setup_from_expression(
    +34        cls,
    +35        value: ExpressionType,
    +36    ) -> Expression:
    +37        tokens = cls.validate(value)
    +38        return cls(tokens=tokens)
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + multiply( cls, expression1: libecalc.expression.expression.Expression, expression2: libecalc.expression.expression.Expression) -> libecalc.expression.expression.Expression: + + + +
    + +
    50    @classmethod
    +51    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    +52        """Create new expression by multiplying two expressions
    +53        new expression = "(expression1) {*} (expression2)".
    +54        """
    +55        tokens1 = expression1.tokens
    +56        tokens2 = expression2.tokens
    +57        tokens_multiplied = (
    +58            [LEFT_PARENTHESIS_TOKEN]
    +59            + tokens1
    +60            + [RIGHT_PARENTHESIS_TOKEN]
    +61            + [MULTIPLICATION_TOKEN]
    +62            + [LEFT_PARENTHESIS_TOKEN]
    +63            + tokens2
    +64            + [RIGHT_PARENTHESIS_TOKEN]
    +65        )
    +66        return cls(tokens=tokens_multiplied)
    +
    + + +

    Create new expression by multiplying two expressions +new expression = "(expression1) {*} (expression2)".

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + validate( cls, expression: Union[str, float, int]) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    68    @classmethod
    +69    def validate(cls, expression: ExpressionType) -> List[Token]:
    +70        expression = _expression_as_number_if_number(expression_input=expression)
    +71
    +72        if not isinstance(expression, (str, float, int)):
    +73            raise ValueError("Expression should be of type str, int or float")
    +74        return lexer(expression)
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + validator( cls, expression: Union[str, float, int, libecalc.expression.expression.Expression]): + + + +
    + +
    76    @classmethod
    +77    def validator(cls, expression: Union[str, float, int, Expression]):
    +78        if isinstance(expression, Expression):
    +79            return expression
    +80        tokens = cls.validate(expression=expression)
    +81        return cls(tokens=tokens)
    +
    + + + + +
    +
    + +
    + + def + evaluate( self, variables: Dict[str, List[float]], fill_length: int) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
     83    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    + 84        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    + 85        if len(missing_references) != 0:
    + 86            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    + 87            logger.error(msg)
    + 88            raise ValueError(msg)
    + 89
    + 90        tokens = [
    + 91            Token(
    + 92                tag=TokenTag.numeric,
    + 93                value=np.asarray(variables.get(token.value)),
    + 94            )
    + 95            if token.tag == TokenTag.reference
    + 96            else token
    + 97            for token in self.tokens
    + 98        ]
    + 99
    +100        return eval_tokens(tokens=tokens, array_length=fill_length)
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression/expression_evaluator.html b/docs/about/references/api/libecalc/expression/expression_evaluator.html new file mode 100644 index 0000000000..21a4d86c28 --- /dev/null +++ b/docs/about/references/api/libecalc/expression/expression_evaluator.html @@ -0,0 +1,1584 @@ + + + + + + + libecalc.expression.expression_evaluator API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression.expression_evaluator

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3import operator as op
    +  4import re
    +  5import warnings
    +  6from enum import Enum
    +  7from numbers import Number
    +  8from typing import List, Optional, Tuple, Union
    +  9
    + 10import numpy as np
    + 11from numpy.typing import NDArray
    + 12from pydantic import BaseModel
    + 13
    + 14from libecalc.common.logger import logger
    + 15
    + 16"""
    + 17Module for expression parsing used in Energy/CO2/emissions calculator
    + 18
    + 19Eval expressions
    + 20
    + 21Variable example: SIM1;OIL_PROD:SC-102
    + 22
    + 23Operators allowed: (with {} to allow + - * / in variable names)
    + 24    plus:       {+}
    + 25    minus:      {-}
    + 26    multiply:   {*}
    + 27    division:   {/}
    + 28    power:      {^}
    + 29
    + 30Parenteses are supported: ()
    + 31
    + 32Logicals are supported and returns 0 or 1
    + 33    Larger than:              >
    + 34    Larger than or equal to:  >=
    + 35    Smaller than:             <
    + 36    Smaller than or equal to: <=
    + 37    Equal to:                 ==
    + 38    Not equal to:             !=
    + 39
    + 40Example: SIM2;OIL_PROD:SC-102 {*} 2.0 {-} SIM1;OIL_PROD {+} SIM3:OIL_PROD_TOTAL:TMP; {*} (SIM3:OIL_PROD>0)
    + 41
    + 42"""
    + 43
    + 44
    + 45def eval_tokens(tokens: List[Token], array_length: int) -> NDArray[np.float64]:
    + 46    token_values = [token.value for token in tokens]
    + 47    check_tokens(token_values)
    + 48
    + 49    evaluated_values = np.nan_to_num(
    + 50        x=eval_parentheses(
    + 51            tokens=token_values,
    + 52        )  # type: ignore[arg-type]
    + 53    )
    + 54
    + 55    if isinstance(evaluated_values, (Number, int, float)):
    + 56        evaluated_values = np.full(fill_value=evaluated_values, shape=array_length)
    + 57    return evaluated_values
    + 58
    + 59
    + 60def eval_parentheses(
    + 61    tokens: List[Union[float, int, bool, NDArray[np.float64], str]],
    + 62    original_expression: Optional[str] = None,
    + 63) -> Union[NDArray[np.float64], Number]:
    + 64    """Evaluate expressions within parentheses"""
    + 65    with warnings.catch_warnings():
    + 66        warnings.simplefilter("ignore")
    + 67        number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    + 68        while number_of_left_parentheses or number_of_right_parentheses:
    + 69            if number_of_left_parentheses != number_of_right_parentheses:
    + 70                error_message = "Number of left and right parentheses do not match"
    + 71                if original_expression is not None:
    + 72                    error_message += f" for expression \n{original_expression}"
    + 73                raise ValueError(error_message)
    + 74
    + 75            ind = 0
    + 76            while ind < len(tokens) and str(tokens[ind]) != ")":
    + 77                ind += 1
    + 78            subend = ind
    + 79            while ind >= 0 and str(tokens[ind]) != "(":
    + 80                ind -= 1
    + 81            substart = ind
    + 82
    + 83            tokens_to_evaluate = tokens[substart + 1 : subend]
    + 84
    + 85            try:
    + 86                tokens_evaluated = eval_parentheses(
    + 87                    tokens_to_evaluate,
    + 88                    original_expression=original_expression,
    + 89                )
    + 90            except Exception as e:
    + 91                logger.exception(e)
    + 92                errorstr = ""
    + 93                if tokens_to_evaluate:
    + 94                    for token in tokens_to_evaluate:
    + 95                        if isinstance(token, np.ndarray):
    + 96                            errorstr += "array(len=" + str(len(token)) + ") "
    + 97                        else:
    + 98                            errorstr += str(token) + " "
    + 99                raise ValueError(
    +100                    "expression evaluator" + ": I have trouble calculating the expression: " + errorstr
    +101                ) from e
    +102
    +103            tokens = tokens[:substart] + [tokens_evaluated] + tokens[subend + 1 :]
    +104            number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    +105
    +106    return eval_logicals(tokens)
    +107
    +108
    +109def count_parentheses(tokens: List[Union[float, int, bool, NDArray[np.float64], str]]) -> Tuple[int, int]:
    +110    """Count the number of left "(" and right ")" parentheses in a list of tokens"""
    +111    strings_in_tokens = [element for element in tokens if isinstance(element, str)]
    +112    return strings_in_tokens.count(Operators.left_parenthesis.value), strings_in_tokens.count(
    +113        Operators.right_parenthesis.value
    +114    )
    +115
    +116
    +117def eval_logicals(tokens):
    +118    """Evaluate logical operators in expression"""
    +119    logical_ops = [">", "<", ">=", "<=", "==", "!="]
    +120    ind = 0
    +121    while ind < len(tokens):
    +122        if str(tokens[ind]) in logical_ops:
    +123            divind = ind
    +124            left_tokens = tokens[0:divind]
    +125            right_tokens = tokens[divind + 1 :]
    +126            # Check that there are not more than one logical operator in tokens
    +127            for right_tok in right_tokens:
    +128                if str(right_tok)[0] in logical_ops or str(right_tok)[:2] in logical_ops:
    +129                    raise KeyError("Not more than one logical operator within each parenthesis set")
    +130            return np.array(
    +131                OPERATORS[tokens[divind]](
    +132                    eval_additions(left_tokens),
    +133                    eval_additions(right_tokens),
    +134                ),
    +135                dtype=float,
    +136            )
    +137        ind += 1
    +138    return eval_additions(tokens)
    +139
    +140
    +141def eval_additions(tokens):
    +142    """Evaluate additions and subtractions in expression"""
    +143    add_ops = ["{+}", "{-}"]
    +144    values = []
    +145    with warnings.catch_warnings():
    +146        warnings.simplefilter("ignore")
    +147        if tokens.count("{+}") or tokens.count(
    +148            "{-}"
    +149        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +150            ind = 0
    +151            seqstart = 0
    +152            signNext = 1.0
    +153            while ind < len(tokens):
    +154                if str(tokens[ind]) in add_ops:
    +155                    values.append(signNext * eval_mults(tokens[seqstart:ind]))
    +156                    signNext = 1.0 if tokens[ind] == "{+}" else -1.0
    +157                    seqstart = ind + 1
    +158                ind += 1
    +159            if tokens[seqstart - 1] == "{+}":
    +160                values.append(eval_mults(tokens[seqstart:ind]))
    +161            else:
    +162                values.append(-1.0 * eval_mults(tokens[seqstart:ind]))
    +163
    +164        else:
    +165            values.append(eval_mults(tokens))
    +166    return sum(values)
    +167
    +168
    +169def eval_mults(tokens):
    +170    """Evaluate multiplications in expression"""
    +171    mult_ops = ["{*}", "{/}"]
    +172    values = []
    +173
    +174    # We may sometimes divide by zero in large vectors, but as these values might get removed
    +175    # by conditions later, we allow this and ignore related warnings
    +176    current_numpy_error = np.geterr()
    +177    np.seterr(divide="ignore", invalid="ignore")
    +178    with warnings.catch_warnings():
    +179        warnings.simplefilter("ignore")
    +180        if tokens.count("{*}") or tokens.count(
    +181            "{/}"
    +182        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +183            ind = 0
    +184            seqstart = 0
    +185            opnext = "mult"
    +186            while ind < len(tokens):
    +187                if str(tokens[ind]) in mult_ops:
    +188                    if opnext == "mult":
    +189                        values.append(eval_powers(tokens[seqstart:ind]))
    +190                    else:
    +191                        denominator = eval_powers(tokens[seqstart:ind])
    +192                        # By default, this throws a warning when denomonator contains 0
    +193                        # Want to allow division by 0 here, as these values may be ruled out later anyway
    +194                        # by conditions
    +195                        mult = np.divide(1.0, denominator)
    +196                        values.append(mult)
    +197                    opnext = "mult" if tokens[ind] == "{*}" else "div"
    +198                    seqstart = ind + 1
    +199                ind += 1
    +200            if tokens[seqstart - 1] == "{*}":
    +201                values.append(eval_powers(tokens[seqstart:ind]))
    +202            else:
    +203                denominator = eval_powers(tokens[seqstart:ind])
    +204                mult = np.divide(1.0, denominator)
    +205                values.append(mult)
    +206        else:
    +207            tmp = eval_powers(tokens)
    +208            if tmp is not None:
    +209                values.append(eval_powers(tokens))
    +210        value = 1.0
    +211        for factor in values:
    +212            value = value * factor
    +213        np.seterr(**current_numpy_error)
    +214    return np.nan_to_num(value)
    +215
    +216
    +217def eval_powers(tokens):
    +218    """Evaluate exponential calculations in expression"""
    +219    with warnings.catch_warnings():
    +220        warnings.simplefilter("ignore")
    +221        if tokens.count(
    +222            "{^}"
    +223        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +224            if len(tokens) != 3:
    +225                raise ValueError("Number of tokens needs to be 3 for evalPowers, quotient, {^} and exponent")
    +226            quotient = eval_value([tokens[0]])
    +227            exponent = eval_value([tokens[2]])
    +228            value = np.power(quotient, exponent)
    +229        else:
    +230            value = eval_value(tokens)
    +231
    +232    return np.nan_to_num(value)
    +233
    +234
    +235def eval_value(tokens):
    +236    numpattern = r"[0-9.]+"
    +237    regexnumber = re.compile(numpattern)
    +238
    +239    if type(tokens) is NDArray[np.float64]:
    +240        var = tokens[0]
    +241    elif len(tokens) < 1:
    +242        raise ValueError(f"expression_evaluator: I can not evaluate {tokens}")
    +243    elif len(tokens) > 2:
    +244        outtext = "Wrong format of variable "
    +245        for ind in range(len(tokens)):
    +246            outtext += " " + str(tokens[ind])
    +247        raise Exception(outtext)
    +248    elif len(tokens) == 2:
    +249        raise ValueError("Should not enter here - no time series in expression evaluator")
    +250    elif isinstance(tokens[0], (int, int, float)):
    +251        return float(tokens[0])
    +252    else:
    +253        pos = 0
    +254        match = regexnumber.match(str(tokens[0]), pos)
    +255        if match:  # This is a number
    +256            return float(match.group(0))
    +257        elif type(tokens[0]) is not np.ndarray:
    +258            tmp = tokens[0].split(";")
    +259            if len(tmp) != 2:
    +260                raise KeyError(
    +261                    'Not correct format of reservoir variable "'
    +262                    + tokens[0]
    +263                    + '", did you forget to specify reservoir case (e.g. "SIM1;'
    +264                    + tokens[0]
    +265                    + '")?'
    +266                )
    +267            raise ValueError("Should not enter here - no time series in expression evaluator")
    +268        else:
    +269            var = tokens[0]
    +270    var = np.nan_to_num(var)
    +271    return var
    +272
    +273
    +274def lex(expression: str, token_exprs: List[Tuple[str, Optional[TokenTag]]]) -> List[Token]:
    +275    pos = 0
    +276    tokens = []
    +277
    +278    while pos < len(expression):
    +279        match = None
    +280        for token_expr in token_exprs:
    +281            pattern, tag = token_expr
    +282            regex = re.compile(pattern)
    +283            match = regex.match(expression, pos)
    +284            if match:
    +285                text = match.group(0)
    +286                if tag:
    +287                    token = text  # (text, tag)
    +288                    tokens.append(
    +289                        Token(
    +290                            tag=tag,
    +291                            value=token,
    +292                        )
    +293                    )
    +294                break
    +295        if not match:
    +296            raise KeyError(
    +297                f'Illegal character: "{str(expression[pos])}" in "{expression}". '
    +298                f"Did you forget to put {{}} around operators?"
    +299            )
    +300        else:
    +301            pos = match.end(0)
    +302    return tokens
    +303
    +304
    +305def lexer(expression: Union[str, int, float]) -> List[Token]:
    +306    if isinstance(expression, (int, float)):
    +307        return [Token(tag=TokenTag.numeric, value=expression)]
    +308
    +309    # Arithmetic operators redefined with {} to allow +-*/ et.c. in variable names
    +310    token_exprs = [
    +311        (r"[ \n\t]+", None),
    +312        (r"#[^\n]*", None),
    +313        (r"\:=", TokenTag.operator),
    +314        (r"\(", TokenTag.operator),
    +315        (r"\)", TokenTag.operator),
    +316        (r";", TokenTag.operator),
    +317        (r"\{\+\}", TokenTag.operator),
    +318        (
    +319            r"\{-\}",
    +320            TokenTag.operator,
    +321        ),  # Redef - to {-} to allow - in summary variable names
    +322        (r"\{\*\}", TokenTag.operator),
    +323        (r"\{/\}", TokenTag.operator),
    +324        (r"\{\^\}", TokenTag.operator),
    +325        (r"<=", TokenTag.operator),
    +326        (r"<", TokenTag.operator),
    +327        (r">=", TokenTag.operator),
    +328        (r">", TokenTag.operator),
    +329        (r"==", TokenTag.operator),
    +330        (r"!=", TokenTag.operator),
    +331        (r"and", TokenTag.operator),
    +332        (r"or", TokenTag.operator),
    +333        (r"not", TokenTag.operator),
    +334        (r"if", TokenTag.operator),
    +335        (r"then", TokenTag.operator),
    +336        (r"else", TokenTag.operator),
    +337        (r"while", TokenTag.operator),
    +338        (r"do", TokenTag.operator),
    +339        (r"end", TokenTag.operator),
    +340        (r"[0-9](\.[0-9]+)?e[-+]?[0-9]+", TokenTag.numeric),  # Scientific notation, e.g. 1.23e-05, 3.4e7, 1e+1
    +341        (r"[0-9.]+", TokenTag.numeric),
    +342        (r"[A-Za-z][A-Za-z0-9._;:+*/-]*", TokenTag.reference),
    +343        (r"\$var\.[A-Za-z][A-Za-z0-9_]*", TokenTag.reference),
    +344    ]
    +345
    +346    return lex(expression, token_exprs)
    +347
    +348
    +349OPERATORS = {
    +350    "{+}": op.add,
    +351    "{-}": op.sub,
    +352    "{/}": op.truediv,
    +353    "{*}": op.mul,
    +354    "{^}": op.pow,
    +355    ">": op.gt,
    +356    ">=": op.ge,
    +357    "<": op.lt,
    +358    "<=": op.le,
    +359    "==": op.eq,
    +360    "ne": op.ne,
    +361}
    +362
    +363
    +364# Check that two operators are not coming after each other, e.g. {+} {-} or {+} > et.c.
    +365def check_tokens(tokens):
    +366    tokens_dummy = ["ref" if isinstance(token, np.ndarray) else str(token) for token in tokens]
    +367    var = " ".join(tokens_dummy)
    +368    first_token, last_token = tokens[0], tokens[-1]
    +369    if str(first_token) in list(OPERATORS.keys()):
    +370        raise ValueError(f"Expression ({var}) can not start with an operator")
    +371    if str(last_token) in list(OPERATORS.keys()):
    +372        raise ValueError(f"Expression ({var}) can not end with an operator")
    +373    for idx, token in enumerate(tokens):
    +374        prev_token = tokens[idx - 1]
    +375        if str(prev_token) in list(OPERATORS.keys()) and str(token) in list(OPERATORS.keys()):
    +376            raise ValueError(f"Expression ({var}) can not have two operators after each other")
    +377
    +378
    +379class TokenTag(Enum):
    +380    reference = "ID"
    +381    operator = "RESERVED"
    +382    numeric = "NUMBER"
    +383
    +384
    +385class Operators(Enum):
    +386    add = "{+}"
    +387    subtract = "{-}"
    +388    divide = "{/}"
    +389    multiply = "{*}"
    +390    power = "{^}"
    +391    left_parenthesis = "("
    +392    right_parenthesis = ")"
    +393    larger_than = ">"
    +394    larger_than_or_equal = ">="
    +395    less_than = "<"
    +396    less_than_or_equal = "<="
    +397    equal = "=="
    +398    not_equal = "ne"
    +399
    +400
    +401class Token(BaseModel):
    +402    tag: TokenTag
    +403    value: Union[float, int, bool, NDArray[np.float64], str]
    +404
    +405    def __str__(self):
    +406        return str(self.value)
    +407
    +408    class Config:
    +409        arbitrary_types_allowed = True
    +
    + + +
    +
    + +
    + + def + eval_tokens( tokens: List[libecalc.expression.expression_evaluator.Token], array_length: int) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    46def eval_tokens(tokens: List[Token], array_length: int) -> NDArray[np.float64]:
    +47    token_values = [token.value for token in tokens]
    +48    check_tokens(token_values)
    +49
    +50    evaluated_values = np.nan_to_num(
    +51        x=eval_parentheses(
    +52            tokens=token_values,
    +53        )  # type: ignore[arg-type]
    +54    )
    +55
    +56    if isinstance(evaluated_values, (Number, int, float)):
    +57        evaluated_values = np.full(fill_value=evaluated_values, shape=array_length)
    +58    return evaluated_values
    +
    + + + + +
    +
    + +
    + + def + eval_parentheses( tokens: List[Union[float, int, bool, numpy.ndarray[Any, numpy.dtype[numpy.float64]], str]], original_expression: Union[str, NoneType] = None) -> Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], numbers.Number]: + + + +
    + +
     61def eval_parentheses(
    + 62    tokens: List[Union[float, int, bool, NDArray[np.float64], str]],
    + 63    original_expression: Optional[str] = None,
    + 64) -> Union[NDArray[np.float64], Number]:
    + 65    """Evaluate expressions within parentheses"""
    + 66    with warnings.catch_warnings():
    + 67        warnings.simplefilter("ignore")
    + 68        number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    + 69        while number_of_left_parentheses or number_of_right_parentheses:
    + 70            if number_of_left_parentheses != number_of_right_parentheses:
    + 71                error_message = "Number of left and right parentheses do not match"
    + 72                if original_expression is not None:
    + 73                    error_message += f" for expression \n{original_expression}"
    + 74                raise ValueError(error_message)
    + 75
    + 76            ind = 0
    + 77            while ind < len(tokens) and str(tokens[ind]) != ")":
    + 78                ind += 1
    + 79            subend = ind
    + 80            while ind >= 0 and str(tokens[ind]) != "(":
    + 81                ind -= 1
    + 82            substart = ind
    + 83
    + 84            tokens_to_evaluate = tokens[substart + 1 : subend]
    + 85
    + 86            try:
    + 87                tokens_evaluated = eval_parentheses(
    + 88                    tokens_to_evaluate,
    + 89                    original_expression=original_expression,
    + 90                )
    + 91            except Exception as e:
    + 92                logger.exception(e)
    + 93                errorstr = ""
    + 94                if tokens_to_evaluate:
    + 95                    for token in tokens_to_evaluate:
    + 96                        if isinstance(token, np.ndarray):
    + 97                            errorstr += "array(len=" + str(len(token)) + ") "
    + 98                        else:
    + 99                            errorstr += str(token) + " "
    +100                raise ValueError(
    +101                    "expression evaluator" + ": I have trouble calculating the expression: " + errorstr
    +102                ) from e
    +103
    +104            tokens = tokens[:substart] + [tokens_evaluated] + tokens[subend + 1 :]
    +105            number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    +106
    +107    return eval_logicals(tokens)
    +
    + + +

    Evaluate expressions within parentheses

    +
    + + +
    +
    + +
    + + def + count_parentheses( tokens: List[Union[float, int, bool, numpy.ndarray[Any, numpy.dtype[numpy.float64]], str]]) -> Tuple[int, int]: + + + +
    + +
    110def count_parentheses(tokens: List[Union[float, int, bool, NDArray[np.float64], str]]) -> Tuple[int, int]:
    +111    """Count the number of left "(" and right ")" parentheses in a list of tokens"""
    +112    strings_in_tokens = [element for element in tokens if isinstance(element, str)]
    +113    return strings_in_tokens.count(Operators.left_parenthesis.value), strings_in_tokens.count(
    +114        Operators.right_parenthesis.value
    +115    )
    +
    + + +

    Count the number of left "(" and right ")" parentheses in a list of tokens

    +
    + + +
    +
    + +
    + + def + eval_logicals(tokens): + + + +
    + +
    118def eval_logicals(tokens):
    +119    """Evaluate logical operators in expression"""
    +120    logical_ops = [">", "<", ">=", "<=", "==", "!="]
    +121    ind = 0
    +122    while ind < len(tokens):
    +123        if str(tokens[ind]) in logical_ops:
    +124            divind = ind
    +125            left_tokens = tokens[0:divind]
    +126            right_tokens = tokens[divind + 1 :]
    +127            # Check that there are not more than one logical operator in tokens
    +128            for right_tok in right_tokens:
    +129                if str(right_tok)[0] in logical_ops or str(right_tok)[:2] in logical_ops:
    +130                    raise KeyError("Not more than one logical operator within each parenthesis set")
    +131            return np.array(
    +132                OPERATORS[tokens[divind]](
    +133                    eval_additions(left_tokens),
    +134                    eval_additions(right_tokens),
    +135                ),
    +136                dtype=float,
    +137            )
    +138        ind += 1
    +139    return eval_additions(tokens)
    +
    + + +

    Evaluate logical operators in expression

    +
    + + +
    +
    + +
    + + def + eval_additions(tokens): + + + +
    + +
    142def eval_additions(tokens):
    +143    """Evaluate additions and subtractions in expression"""
    +144    add_ops = ["{+}", "{-}"]
    +145    values = []
    +146    with warnings.catch_warnings():
    +147        warnings.simplefilter("ignore")
    +148        if tokens.count("{+}") or tokens.count(
    +149            "{-}"
    +150        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +151            ind = 0
    +152            seqstart = 0
    +153            signNext = 1.0
    +154            while ind < len(tokens):
    +155                if str(tokens[ind]) in add_ops:
    +156                    values.append(signNext * eval_mults(tokens[seqstart:ind]))
    +157                    signNext = 1.0 if tokens[ind] == "{+}" else -1.0
    +158                    seqstart = ind + 1
    +159                ind += 1
    +160            if tokens[seqstart - 1] == "{+}":
    +161                values.append(eval_mults(tokens[seqstart:ind]))
    +162            else:
    +163                values.append(-1.0 * eval_mults(tokens[seqstart:ind]))
    +164
    +165        else:
    +166            values.append(eval_mults(tokens))
    +167    return sum(values)
    +
    + + +

    Evaluate additions and subtractions in expression

    +
    + + +
    +
    + +
    + + def + eval_mults(tokens): + + + +
    + +
    170def eval_mults(tokens):
    +171    """Evaluate multiplications in expression"""
    +172    mult_ops = ["{*}", "{/}"]
    +173    values = []
    +174
    +175    # We may sometimes divide by zero in large vectors, but as these values might get removed
    +176    # by conditions later, we allow this and ignore related warnings
    +177    current_numpy_error = np.geterr()
    +178    np.seterr(divide="ignore", invalid="ignore")
    +179    with warnings.catch_warnings():
    +180        warnings.simplefilter("ignore")
    +181        if tokens.count("{*}") or tokens.count(
    +182            "{/}"
    +183        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +184            ind = 0
    +185            seqstart = 0
    +186            opnext = "mult"
    +187            while ind < len(tokens):
    +188                if str(tokens[ind]) in mult_ops:
    +189                    if opnext == "mult":
    +190                        values.append(eval_powers(tokens[seqstart:ind]))
    +191                    else:
    +192                        denominator = eval_powers(tokens[seqstart:ind])
    +193                        # By default, this throws a warning when denomonator contains 0
    +194                        # Want to allow division by 0 here, as these values may be ruled out later anyway
    +195                        # by conditions
    +196                        mult = np.divide(1.0, denominator)
    +197                        values.append(mult)
    +198                    opnext = "mult" if tokens[ind] == "{*}" else "div"
    +199                    seqstart = ind + 1
    +200                ind += 1
    +201            if tokens[seqstart - 1] == "{*}":
    +202                values.append(eval_powers(tokens[seqstart:ind]))
    +203            else:
    +204                denominator = eval_powers(tokens[seqstart:ind])
    +205                mult = np.divide(1.0, denominator)
    +206                values.append(mult)
    +207        else:
    +208            tmp = eval_powers(tokens)
    +209            if tmp is not None:
    +210                values.append(eval_powers(tokens))
    +211        value = 1.0
    +212        for factor in values:
    +213            value = value * factor
    +214        np.seterr(**current_numpy_error)
    +215    return np.nan_to_num(value)
    +
    + + +

    Evaluate multiplications in expression

    +
    + + +
    +
    + +
    + + def + eval_powers(tokens): + + + +
    + +
    218def eval_powers(tokens):
    +219    """Evaluate exponential calculations in expression"""
    +220    with warnings.catch_warnings():
    +221        warnings.simplefilter("ignore")
    +222        if tokens.count(
    +223            "{^}"
    +224        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +225            if len(tokens) != 3:
    +226                raise ValueError("Number of tokens needs to be 3 for evalPowers, quotient, {^} and exponent")
    +227            quotient = eval_value([tokens[0]])
    +228            exponent = eval_value([tokens[2]])
    +229            value = np.power(quotient, exponent)
    +230        else:
    +231            value = eval_value(tokens)
    +232
    +233    return np.nan_to_num(value)
    +
    + + +

    Evaluate exponential calculations in expression

    +
    + + +
    +
    + +
    + + def + eval_value(tokens): + + + +
    + +
    236def eval_value(tokens):
    +237    numpattern = r"[0-9.]+"
    +238    regexnumber = re.compile(numpattern)
    +239
    +240    if type(tokens) is NDArray[np.float64]:
    +241        var = tokens[0]
    +242    elif len(tokens) < 1:
    +243        raise ValueError(f"expression_evaluator: I can not evaluate {tokens}")
    +244    elif len(tokens) > 2:
    +245        outtext = "Wrong format of variable "
    +246        for ind in range(len(tokens)):
    +247            outtext += " " + str(tokens[ind])
    +248        raise Exception(outtext)
    +249    elif len(tokens) == 2:
    +250        raise ValueError("Should not enter here - no time series in expression evaluator")
    +251    elif isinstance(tokens[0], (int, int, float)):
    +252        return float(tokens[0])
    +253    else:
    +254        pos = 0
    +255        match = regexnumber.match(str(tokens[0]), pos)
    +256        if match:  # This is a number
    +257            return float(match.group(0))
    +258        elif type(tokens[0]) is not np.ndarray:
    +259            tmp = tokens[0].split(";")
    +260            if len(tmp) != 2:
    +261                raise KeyError(
    +262                    'Not correct format of reservoir variable "'
    +263                    + tokens[0]
    +264                    + '", did you forget to specify reservoir case (e.g. "SIM1;'
    +265                    + tokens[0]
    +266                    + '")?'
    +267                )
    +268            raise ValueError("Should not enter here - no time series in expression evaluator")
    +269        else:
    +270            var = tokens[0]
    +271    var = np.nan_to_num(var)
    +272    return var
    +
    + + + + +
    +
    + +
    + + def + lex( expression: str, token_exprs: List[Tuple[str, Union[libecalc.expression.expression_evaluator.TokenTag, NoneType]]]) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    275def lex(expression: str, token_exprs: List[Tuple[str, Optional[TokenTag]]]) -> List[Token]:
    +276    pos = 0
    +277    tokens = []
    +278
    +279    while pos < len(expression):
    +280        match = None
    +281        for token_expr in token_exprs:
    +282            pattern, tag = token_expr
    +283            regex = re.compile(pattern)
    +284            match = regex.match(expression, pos)
    +285            if match:
    +286                text = match.group(0)
    +287                if tag:
    +288                    token = text  # (text, tag)
    +289                    tokens.append(
    +290                        Token(
    +291                            tag=tag,
    +292                            value=token,
    +293                        )
    +294                    )
    +295                break
    +296        if not match:
    +297            raise KeyError(
    +298                f'Illegal character: "{str(expression[pos])}" in "{expression}". '
    +299                f"Did you forget to put {{}} around operators?"
    +300            )
    +301        else:
    +302            pos = match.end(0)
    +303    return tokens
    +
    + + + + +
    +
    + +
    + + def + lexer( expression: Union[str, int, float]) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    306def lexer(expression: Union[str, int, float]) -> List[Token]:
    +307    if isinstance(expression, (int, float)):
    +308        return [Token(tag=TokenTag.numeric, value=expression)]
    +309
    +310    # Arithmetic operators redefined with {} to allow +-*/ et.c. in variable names
    +311    token_exprs = [
    +312        (r"[ \n\t]+", None),
    +313        (r"#[^\n]*", None),
    +314        (r"\:=", TokenTag.operator),
    +315        (r"\(", TokenTag.operator),
    +316        (r"\)", TokenTag.operator),
    +317        (r";", TokenTag.operator),
    +318        (r"\{\+\}", TokenTag.operator),
    +319        (
    +320            r"\{-\}",
    +321            TokenTag.operator,
    +322        ),  # Redef - to {-} to allow - in summary variable names
    +323        (r"\{\*\}", TokenTag.operator),
    +324        (r"\{/\}", TokenTag.operator),
    +325        (r"\{\^\}", TokenTag.operator),
    +326        (r"<=", TokenTag.operator),
    +327        (r"<", TokenTag.operator),
    +328        (r">=", TokenTag.operator),
    +329        (r">", TokenTag.operator),
    +330        (r"==", TokenTag.operator),
    +331        (r"!=", TokenTag.operator),
    +332        (r"and", TokenTag.operator),
    +333        (r"or", TokenTag.operator),
    +334        (r"not", TokenTag.operator),
    +335        (r"if", TokenTag.operator),
    +336        (r"then", TokenTag.operator),
    +337        (r"else", TokenTag.operator),
    +338        (r"while", TokenTag.operator),
    +339        (r"do", TokenTag.operator),
    +340        (r"end", TokenTag.operator),
    +341        (r"[0-9](\.[0-9]+)?e[-+]?[0-9]+", TokenTag.numeric),  # Scientific notation, e.g. 1.23e-05, 3.4e7, 1e+1
    +342        (r"[0-9.]+", TokenTag.numeric),
    +343        (r"[A-Za-z][A-Za-z0-9._;:+*/-]*", TokenTag.reference),
    +344        (r"\$var\.[A-Za-z][A-Za-z0-9_]*", TokenTag.reference),
    +345    ]
    +346
    +347    return lex(expression, token_exprs)
    +
    + + + + +
    +
    + +
    + + def + check_tokens(tokens): + + + +
    + +
    366def check_tokens(tokens):
    +367    tokens_dummy = ["ref" if isinstance(token, np.ndarray) else str(token) for token in tokens]
    +368    var = " ".join(tokens_dummy)
    +369    first_token, last_token = tokens[0], tokens[-1]
    +370    if str(first_token) in list(OPERATORS.keys()):
    +371        raise ValueError(f"Expression ({var}) can not start with an operator")
    +372    if str(last_token) in list(OPERATORS.keys()):
    +373        raise ValueError(f"Expression ({var}) can not end with an operator")
    +374    for idx, token in enumerate(tokens):
    +375        prev_token = tokens[idx - 1]
    +376        if str(prev_token) in list(OPERATORS.keys()) and str(token) in list(OPERATORS.keys()):
    +377            raise ValueError(f"Expression ({var}) can not have two operators after each other")
    +
    + + + + +
    +
    + +
    + + class + TokenTag(enum.Enum): + + + +
    + +
    380class TokenTag(Enum):
    +381    reference = "ID"
    +382    operator = "RESERVED"
    +383    numeric = "NUMBER"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + reference = +<TokenTag.reference: 'ID'> + + +
    + + + + +
    +
    +
    + operator = +<TokenTag.operator: 'RESERVED'> + + +
    + + + + +
    +
    +
    + numeric = +<TokenTag.numeric: 'NUMBER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + class + Operators(enum.Enum): + + + +
    + +
    386class Operators(Enum):
    +387    add = "{+}"
    +388    subtract = "{-}"
    +389    divide = "{/}"
    +390    multiply = "{*}"
    +391    power = "{^}"
    +392    left_parenthesis = "("
    +393    right_parenthesis = ")"
    +394    larger_than = ">"
    +395    larger_than_or_equal = ">="
    +396    less_than = "<"
    +397    less_than_or_equal = "<="
    +398    equal = "=="
    +399    not_equal = "ne"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + add = +<Operators.add: '{+}'> + + +
    + + + + +
    +
    +
    + subtract = +<Operators.subtract: '{-}'> + + +
    + + + + +
    +
    +
    + divide = +<Operators.divide: '{/}'> + + +
    + + + + +
    +
    +
    + multiply = +<Operators.multiply: '{*}'> + + +
    + + + + +
    +
    +
    + power = +<Operators.power: '{^}'> + + +
    + + + + +
    +
    +
    + left_parenthesis = +<Operators.left_parenthesis: '('> + + +
    + + + + +
    +
    +
    + right_parenthesis = +<Operators.right_parenthesis: ')'> + + +
    + + + + +
    +
    +
    + larger_than = +<Operators.larger_than: '>'> + + +
    + + + + +
    +
    +
    + larger_than_or_equal = +<Operators.larger_than_or_equal: '>='> + + +
    + + + + +
    +
    +
    + less_than = +<Operators.less_than: '<'> + + +
    + + + + +
    +
    +
    + less_than_or_equal = +<Operators.less_than_or_equal: '<='> + + +
    + + + + +
    +
    +
    + equal = +<Operators.equal: '=='> + + +
    + + + + +
    +
    +
    + not_equal = +<Operators.not_equal: 'ne'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + class + Token(pydantic.main.BaseModel): + + + +
    + +
    402class Token(BaseModel):
    +403    tag: TokenTag
    +404    value: Union[float, int, bool, NDArray[np.float64], str]
    +405
    +406    def __str__(self):
    +407        return str(self.value)
    +408
    +409    class Config:
    +410        arbitrary_types_allowed = True
    +
    + + + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Token.Config: + + + +
    + +
    409    class Config:
    +410        arbitrary_types_allowed = True
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure.html b/docs/about/references/api/libecalc/infrastructure.html new file mode 100644 index 0000000000..feb379a1dd --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.infrastructure API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure/file_io.html b/docs/about/references/api/libecalc/infrastructure/file_io.html new file mode 100644 index 0000000000..d6c54dda37 --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure/file_io.html @@ -0,0 +1,2356 @@ + + + + + + + libecalc.infrastructure.file_io API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure.file_io

    + + + + + + +
      1import enum
    +  2import math
    +  3import re
    +  4import uuid
    +  5import zipfile
    +  6from abc import abstractmethod
    +  7from collections import Counter
    +  8from dataclasses import dataclass
    +  9from io import BytesIO, StringIO
    + 10from pathlib import Path
    + 11from tempfile import TemporaryFile
    + 12from typing import IO, Dict, List, Protocol, TextIO, Tuple, Union
    + 13
    + 14import numpy as np
    + 15import pandas
    + 16import pandas as pd
    + 17
    + 18from libecalc.common.errors.exceptions import EcalcError, EcalcErrorType
    + 19from libecalc.common.logger import logger
    + 20from libecalc.presentation.yaml.yaml_entities import Resource, YamlTimeseriesType
    + 21
    + 22YAML_EXTENSIONS = [".yml", ".yaml"]
    + 23CSV_EXTENSION = ".csv"
    + 24ZIP_EXTENSION = ".zip"
    + 25MAIN_PROVEN_FILE = ["INSTALLATION", "TIME_SERIES", "FACILITY_INPUTS", "FUEL_TYPES"]
    + 26
    + 27IGNORED_ZIP_CONTENTS_KEYWORDS = [".DS_Store", "__MACOSX"]
    + 28
    + 29
    + 30def is_main_yaml_file(file: IO) -> bool:
    + 31    """Deprecated. To be removed when zip is verified.
    + 32    :param file:
    + 33    :return:
    + 34    """
    + 35    bytes_str = file.read()
    + 36    file.seek(0)
    + 37    text_obj = bytes_str.decode("UTF-8")
    + 38    return any(x in text_obj for x in MAIN_PROVEN_FILE)
    + 39
    + 40
    + 41def is_ignored_zip_content(file: Path) -> bool:
    + 42    return bool(file.is_dir() or any(substring in str(file) for substring in IGNORED_ZIP_CONTENTS_KEYWORDS))
    + 43
    + 44
    + 45class FileWithName(Protocol):
    + 46    filename: str
    + 47    file: IO
    + 48
    + 49
    + 50@dataclass
    + 51class UnzippedFile:
    + 52    """Class for mimicking FileWithName."""
    + 53
    + 54    filename: str  # including path
    + 55    file: IO
    + 56
    + 57
    + 58class EcalcFileType(str, enum.Enum):
    + 59    YAML = "yaml"
    + 60    CSV = "csv"
    + 61    ZIP = "zip"
    + 62
    + 63
    + 64@dataclass
    + 65class EcalcFile:
    + 66    @abstractmethod
    + 67    def is_valid(self) -> bool:
    + 68        pass
    + 69
    + 70    @staticmethod
    + 71    def is_csv(filename: Path) -> bool:
    + 72        return filename.suffix.lower() == CSV_EXTENSION
    + 73
    + 74    @staticmethod
    + 75    def is_yaml(filename: Path) -> bool:
    + 76        try:
    + 77            file_extension = filename.suffix
    + 78            return file_extension.lower() in YAML_EXTENSIONS
    + 79        except AttributeError as e:
    + 80            logger.exception(e)
    + 81            return False
    + 82
    + 83    @staticmethod
    + 84    def is_zip(filename: Path) -> bool:
    + 85        try:
    + 86            file_extension = filename.suffix
    + 87            return file_extension.lower() in ZIP_EXTENSION
    + 88        except AttributeError as e:
    + 89            logger.exception(e)
    + 90            return False
    + 91
    + 92    @staticmethod
    + 93    def get_type(filename: Path) -> EcalcFileType:
    + 94        if EcalcFile.is_csv(filename):
    + 95            return EcalcFileType.CSV
    + 96        elif EcalcFile.is_yaml(filename):
    + 97            return EcalcFileType.YAML
    + 98        elif EcalcFile.is_zip(filename):
    + 99            return EcalcFileType.ZIP
    +100
    +101        message = f"Cannot get (valid) file type of {filename}"
    +102        logger.warning(message)
    +103        raise EcalcError(
    +104            message=message,
    +105            title="Invalid file type",
    +106            error_type=EcalcErrorType.CLIENT_ERROR,
    +107        )
    +108
    +109
    +110@dataclass
    +111class ValidEcalcFile(EcalcFile):
    +112    """Class for mimicking FileWithName."""
    +113
    +114    original_filename: Path  # full path, e.g. in archive
    +115    filename: str  # just the (file)name
    +116    file: IO
    +117    file_type: EcalcFileType
    +118
    +119    def is_valid(self) -> bool:
    +120        return True
    +121
    +122    def is_main_yaml_file(self) -> bool:
    +123        bytes_str = self.file.read()
    +124        self.file.seek(0)
    +125        text_obj = bytes_str.decode("UTF-8")
    +126        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +127
    +128
    +129@dataclass
    +130class InvalidEcalcFile(EcalcFile):
    +131    """Class for mimicking FileWithName."""
    +132
    +133    original_filename: Path  # full path in archive
    +134    filename: str  # just the filename
    +135    error: str
    +136
    +137    def is_valid(self) -> bool:
    +138        return False
    +139
    +140
    +141@dataclass
    +142class EcalcFiles:
    +143    ALLOWED_EXTENSIONS = {"yaml", "csv", "yml", "zip"}
    +144
    +145    @staticmethod
    +146    def allowed_file(filename: str) -> bool:
    +147        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +148
    +149    @staticmethod
    +150    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +151        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +152        yaml file can have !include and a certain set of sections.
    +153
    +154        * Only one main file is allowed
    +155
    +156        if none or more than one main file is detected an exception is raised
    +157        :param files:
    +158        :return:
    +159        """
    +160        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +161        if len(main_files) > 1:
    +162            raise EcalcError(
    +163                "Bad Request",
    +164                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +165                error_type=EcalcErrorType.CLIENT_ERROR,
    +166            )
    +167
    +168        if len(main_files) == 0:
    +169            raise EcalcError(
    +170                "Bad Request",
    +171                "No main files found. There must be one main file",
    +172                error_type=EcalcErrorType.CLIENT_ERROR,
    +173            )
    +174
    +175        return main_files[0]
    +176
    +177    @staticmethod
    +178    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +179        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +180        filter out bad files for further processing of good files only.
    +181
    +182        The current validation implementation is very naĩve, by only checking file extension.
    +183
    +184        :param files:
    +185        :return:
    +186        """
    +187        valid_files: List[ValidEcalcFile] = []
    +188        invalid_files: List[InvalidEcalcFile] = []
    +189        for file in files:
    +190            if EcalcFiles.allowed_file(file.filename):
    +191                if EcalcFile.is_zip(Path(file.filename)):
    +192                    if len(files) > 1:
    +193                        raise EcalcError(
    +194                            title="Invalid file combination",
    +195                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +196                        )
    +197
    +198                    valid_files, invalid_files = unpack_zip(file.file)
    +199                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +200                    valid_files.append(
    +201                        ValidEcalcFile(
    +202                            original_filename=Path(file.filename),
    +203                            filename=file.filename,
    +204                            file=file.file,
    +205                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +206                        )
    +207                    )
    +208                else:
    +209                    invalid_files.append(
    +210                        InvalidEcalcFile(
    +211                            original_filename=Path(file.filename),
    +212                            filename=file.filename,
    +213                            error="Invalid File Extension",
    +214                        )
    +215                    )
    +216            else:
    +217                invalid_files.append(
    +218                    InvalidEcalcFile(
    +219                        original_filename=Path(file.filename),
    +220                        filename=file.filename,
    +221                        error="Invalid File Extension",
    +222                    )
    +223                )
    +224
    +225        return valid_files, invalid_files
    +226
    +227
    +228def find_longest_common_path(file_path_1: Path, file_path_2: Path) -> str:
    +229    """Given 2 paths, find the longest common path, part by part that the 2 paths share; ie
    +230    until which position in the file hierarchy do they diverge?
    +231
    +232    :param file_path_1:
    +233    :param file_path_2:
    +234    :return:
    +235    """
    +236    common_path = ""
    +237    for path_1, path_2 in zip(file_path_1.parts, file_path_2.parts):
    +238        if path_1 == path_2:
    +239            common_path += path_1 + "/"
    +240        else:
    +241            break
    +242
    +243    return common_path
    +244
    +245
    +246def strip_common_path(common_path: str, path: str) -> str:
    +247    """Remove/strip the given subpath from path
    +248    :param common_path:
    +249    :param path:
    +250    :return:
    +251    """
    +252    return path.replace(common_path, "")
    +253
    +254
    +255def make_relative_path(linked_file: str, main_file: str) -> str:
    +256    """Given a main file and a file to be linked to from that file, only
    +257    include the parts of the path of both files that _differ_.
    +258
    +259    The parts that is different in main_file, will be replaced with "../",
    +260
    +261    :param linked_file:
    +262    :param main_file:
    +263    :return:
    +264    """
    +265    main_file_path = Path(main_file)
    +266    for part in main_file_path.parts[:-1]:
    +267        if part != "" and part != "/":
    +268            linked_file = "../" + linked_file
    +269
    +270    return linked_file
    +271
    +272
    +273def find_duplicates(files: List[ValidEcalcFile]) -> List[str]:
    +274    """Find files with duplicate names (names = without path).
    +275
    +276    :param files:
    +277    :return:
    +278    """
    +279    count_filenames = Counter([file.filename for file in files])
    +280    duplicates = [filename for filename, count in count_filenames.items() if count > 1]
    +281
    +282    return duplicates
    +283
    +284
    +285def rename_duplicates(valid_files: List[ValidEcalcFile], duplicates: List[str]) -> Dict[Path, str]:
    +286    """Rename duplicate files. All with same name will be renamed. Those that are not duplicates,
    +287    will also be returned, with the original filename in the mapping.
    +288
    +289    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist
    +290    at the same level.
    +291
    +292    :param valid_files:
    +293    :param duplicates:
    +294    :return:
    +295    """
    +296    renamed_files: Dict[Path, str] = {}
    +297    for file in valid_files:
    +298        if file.filename in duplicates:
    +299            renamed_filename = str(file.original_filename).replace("/", "_")
    +300            if len(renamed_filename) > 100:
    +301                renamed_filename = renamed_filename[-94:] + str(uuid.uuid4().hex.upper()[0:6])
    +302            renamed_files[file.original_filename] = renamed_filename
    +303        else:
    +304            renamed_files[file.original_filename] = file.filename
    +305
    +306    return renamed_files
    +307
    +308
    +309def make_relative_paths(files: List[ValidEcalcFile], main_yaml: ValidEcalcFile) -> Dict[Path, str]:
    +310    """For all files in the list, generate the relative paths for all files, relative
    +311    to the provided main file. All files provided, must have the original_filename set, which must
    +312    be the relative path to the root of the model; e.g. the (zip) archive path, or
    +313    if only one level, the filename itself.
    +314
    +315    :param files:
    +316    :param main_yaml:
    +317    :return:
    +318    """
    +319    relative_paths: Dict[Path, str] = {}
    +320    for file in files:
    +321        if file == main_yaml:
    +322            # since all files are relative to this given file, this must be the filename itself, only
    +323            relative_paths[main_yaml.original_filename] = main_yaml.filename
    +324        else:
    +325            common_path = find_longest_common_path(Path(file.original_filename), Path(main_yaml.original_filename))
    +326            stripped_file = strip_common_path(common_path, str(file.original_filename))
    +327            stripped_main = strip_common_path(common_path, str(main_yaml.original_filename))
    +328            relative_path = make_relative_path(stripped_file, stripped_main)
    +329
    +330            relative_paths[file.original_filename] = relative_path
    +331
    +332    return relative_paths
    +333
    +334
    +335def unpack_zip(file: IO) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +336    """Unpack the zip similarility to how single files are handled, by returning a tuple
    +337    of valid and invalid files.
    +338
    +339    :param file:
    +340    :return:
    +341    """
    +342    valid_files: List[ValidEcalcFile] = []
    +343    invalid_files: List[InvalidEcalcFile] = []
    +344    try:
    +345        with zipfile.ZipFile(BytesIO(file.read())) as archive:
    +346            for zip_info in archive.infolist():
    +347                try:
    +348                    file_path = Path(zip_info.filename)
    +349
    +350                    if is_ignored_zip_content(file_path) or zip_info.is_dir():
    +351                        # Just ignore, dont event mention it. Will just confuse users (because those files are normally hidden)
    +352                        continue
    +353                    elif EcalcFile.is_csv(file_path) or EcalcFile.is_yaml(file_path):
    +354                        with archive.open(zip_info) as file:
    +355                            file_like = TemporaryFile()
    +356                            file_like.write(file.read())
    +357                            file_like.seek(0)
    +358                            valid_files.append(
    +359                                ValidEcalcFile(
    +360                                    original_filename=file_path,
    +361                                    filename=file_path.name,
    +362                                    file=file_like,
    +363                                    file_type=EcalcFile.get_type(filename=file_path),
    +364                                )
    +365                            )
    +366                    else:
    +367                        invalid_files.append(
    +368                            InvalidEcalcFile(
    +369                                original_filename=file_path, filename=file_path.name, error="Invalid file extension"
    +370                            )
    +371                        )
    +372                        continue
    +373
    +374                except EcalcError as ee:
    +375                    logger.warning(f"An error occurred while reading file({file_path}) in zip archive")
    +376                    invalid_files.append(
    +377                        InvalidEcalcFile(original_filename=file_path, filename=file_path.name, error=ee.message)
    +378                    )
    +379
    +380        valid_file_paths = [valid_file.original_filename for valid_file in valid_files]
    +381        if len(valid_file_paths) != len(set(valid_file_paths)):
    +382            raise EcalcError(title="Bad zip file", message="Duplicated filepaths in zip archive detected. Please fix.")
    +383
    +384        return valid_files, invalid_files
    +385
    +386    except zipfile.BadZipFile as e:
    +387        raise EcalcError(title="Bad zip file", message="An error occurred while unpacking the zip file") from e
    +388
    +389
    +390def _validate_headers(headers: List[str]):
    +391    for header in headers:
    +392        if not re.match(r"^[A-Za-z][A-Za-z0-9_.,\-\s#+:\/]*$", header):
    +393            raise ValueError(
    +394                "Each header value must start with a letter in the english "
    +395                "alphabet (a-zA-Z). And may only contain letters, spaces, numbers or any of the following characters "
    +396                "[ _ - # + : . , /] "
    +397            )
    +398        elif re.match(r"^Unnamed: \d+$", header):
    +399            raise ValueError("CSV input file must include header")
    +400
    +401
    +402def _validate_not_nan(columns: List[List]):
    +403    for column in columns:
    +404        for index, item in enumerate(column):
    +405            if isinstance(item, float) and math.isnan(item):
    +406                raise ValueError(
    +407                    f"csv file contains invalid data at row {index + 1}, "
    +408                    f"all headers must be associated with a valid column value"
    +409                )
    +410
    +411
    +412def _dataframe_to_resource(df: pd.DataFrame, validate_headers: bool = True) -> Resource:
    +413    headers = df.columns.tolist()
    +414    headers = [header.strip() for header in headers]
    +415    if validate_headers:
    +416        _validate_headers(headers)
    +417    df.columns = df.columns.str.strip()
    +418    columns = [df[header].tolist() for header in headers]
    +419    return Resource(
    +420        headers=headers,
    +421        data=columns,
    +422    )
    +423
    +424
    +425def read_csv(csv_data: Union[str, TextIO, BytesIO]) -> pandas.DataFrame:
    +426    """Wrapper of pandas read csv function
    +427
    +428    Settings used:
    +429        float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001
    +430        skipinitialspace=True converts "  10" to 10,
    +431        thousands=" " removes spaces used as thousand separators (normal in excel)
    +432
    +433    Args:
    +434        csv_data:
    +435
    +436    Returns:
    +437
    +438    """
    +439    stream = StringIO(csv_data) if isinstance(csv_data, str) else csv_data
    +440
    +441    return pd.read_csv(stream, comment="#", float_precision="round_trip", skipinitialspace=True, thousands=" ")
    +442
    +443
    +444def read_resource_from_string(resource_string: str, validate_headers: bool = True) -> Resource:
    +445    """Read resource from stream without validation."""
    +446    resource_df = read_csv(resource_string)
    +447
    +448    resource = _dataframe_to_resource(resource_df.replace(np.nan, ""), validate_headers=validate_headers)
    +449    return resource
    +450
    +451
    +452def convert_dataframe_to_timeseries_resource(resource_df: pd.DataFrame) -> Resource:
    +453    # TODO: This might give a different result than calculator-cli since we are not yet
    +454    #  filtering on columns that are actually used. I.e. an unused column might have a number where all used columns
    +455    #  have nan. This method would include that row. Although it is unlikely.
    +456    # Drop rows if all values are na (sometimes lines with ,,, are exported from Excel).
    +457
    +458    resource_df = resource_df.dropna(axis=0, how="all")
    +459    # Drop columns if all values are na
    +460    resource_df = resource_df.dropna(axis=1, how="all")
    +461
    +462    return _dataframe_to_resource(resource_df)
    +463
    +464
    +465def read_timeseries_resource(
    +466    resource_input: Union[Path, BytesIO, str], timeseries_type: YamlTimeseriesType
    +467) -> Resource:
    +468    """Read timeseries resource from filepath with timeseries specific manipulation/validation.
    +469
    +470    - Timeseries is allowed to have nans
    +471    """
    +472    if not isinstance(resource_input, (BytesIO, str, Path)):
    +473        raise ValueError(f"Invalid resource_input type '{type(resource_input)}'")
    +474
    +475    if timeseries_type in (YamlTimeseriesType.DEFAULT, YamlTimeseriesType.MISCELLANEOUS):
    +476        if isinstance(resource_input, Path):
    +477            with open(resource_input) as resource_file:
    +478                resource_df = read_csv(resource_file)
    +479        else:
    +480            resource_df = read_csv(resource_input)
    +481    else:
    +482        raise ValueError(f"Invalid timeseries type '{timeseries_type}' for resource '{resource_input}'")
    +483
    +484    return convert_dataframe_to_timeseries_resource(resource_df=resource_df)
    +485
    +486
    +487def read_facility_resource(resource_input: Union[Path, BytesIO, str]) -> Resource:
    +488    """Read facility file from filepath with facility file specific validation.
    +489
    +490    - Facility files are not allowed to have nans
    +491    """
    +492    if isinstance(resource_input, Path):
    +493        with open(resource_input) as resource_file:
    +494            resource_df = read_csv(resource_file)
    +495    elif isinstance(resource_input, (BytesIO, str)):
    +496        resource_df = read_csv(resource_input)
    +497    else:
    +498        raise ValueError("")
    +499    resource = _dataframe_to_resource(resource_df)
    +500    _validate_not_nan(resource.data)
    +501    return resource
    +502
    +503
    +504def read_resource_from_filepath(resource_path: Path) -> Resource:
    +505    """Read resource from filepath without validation, should only be used as a util for tests/fixtures."""
    +506    if EcalcFile.is_csv(resource_path):
    +507        with open(resource_path) as resource_file:
    +508            resource_df = read_csv(resource_file)
    +509            return _dataframe_to_resource(resource_df)
    +510    else:
    +511        raise ValueError(f"Invalid file extension: {resource_path}")
    +
    + + +
    +
    + +
    + + def + is_main_yaml_file(file: <class 'IO'>) -> bool: + + + +
    + +
    31def is_main_yaml_file(file: IO) -> bool:
    +32    """Deprecated. To be removed when zip is verified.
    +33    :param file:
    +34    :return:
    +35    """
    +36    bytes_str = file.read()
    +37    file.seek(0)
    +38    text_obj = bytes_str.decode("UTF-8")
    +39    return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + +

    Deprecated. To be removed when zip is verified.

    + +
    Parameters
    + +
      +
    • file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + is_ignored_zip_content(file: pathlib.Path) -> bool: + + + +
    + +
    42def is_ignored_zip_content(file: Path) -> bool:
    +43    return bool(file.is_dir() or any(substring in str(file) for substring in IGNORED_ZIP_CONTENTS_KEYWORDS))
    +
    + + + + +
    +
    + +
    + + class + FileWithName(typing.Protocol): + + + +
    + +
    46class FileWithName(Protocol):
    +47    filename: str
    +48    file: IO
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + FileWithName(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + class + UnzippedFile: + + + +
    + +
    52class UnzippedFile:
    +53    """Class for mimicking FileWithName."""
    +54
    +55    filename: str  # including path
    +56    file: IO
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + UnzippedFile(filename: str, file: <class 'IO'>) + + +
    + + + + +
    +
    +
    + +
    + + class + EcalcFileType(builtins.str, enum.Enum): + + + +
    + +
    59class EcalcFileType(str, enum.Enum):
    +60    YAML = "yaml"
    +61    CSV = "csv"
    +62    ZIP = "zip"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + YAML = +<EcalcFileType.YAML: 'yaml'> + + +
    + + + + +
    +
    +
    + CSV = +<EcalcFileType.CSV: 'csv'> + + +
    + + + + +
    +
    +
    + ZIP = +<EcalcFileType.ZIP: 'zip'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcFile: + + + +
    + +
     66class EcalcFile:
    + 67    @abstractmethod
    + 68    def is_valid(self) -> bool:
    + 69        pass
    + 70
    + 71    @staticmethod
    + 72    def is_csv(filename: Path) -> bool:
    + 73        return filename.suffix.lower() == CSV_EXTENSION
    + 74
    + 75    @staticmethod
    + 76    def is_yaml(filename: Path) -> bool:
    + 77        try:
    + 78            file_extension = filename.suffix
    + 79            return file_extension.lower() in YAML_EXTENSIONS
    + 80        except AttributeError as e:
    + 81            logger.exception(e)
    + 82            return False
    + 83
    + 84    @staticmethod
    + 85    def is_zip(filename: Path) -> bool:
    + 86        try:
    + 87            file_extension = filename.suffix
    + 88            return file_extension.lower() in ZIP_EXTENSION
    + 89        except AttributeError as e:
    + 90            logger.exception(e)
    + 91            return False
    + 92
    + 93    @staticmethod
    + 94    def get_type(filename: Path) -> EcalcFileType:
    + 95        if EcalcFile.is_csv(filename):
    + 96            return EcalcFileType.CSV
    + 97        elif EcalcFile.is_yaml(filename):
    + 98            return EcalcFileType.YAML
    + 99        elif EcalcFile.is_zip(filename):
    +100            return EcalcFileType.ZIP
    +101
    +102        message = f"Cannot get (valid) file type of {filename}"
    +103        logger.warning(message)
    +104        raise EcalcError(
    +105            message=message,
    +106            title="Invalid file type",
    +107            error_type=EcalcErrorType.CLIENT_ERROR,
    +108        )
    +
    + + + + +
    + +
    +
    @abstractmethod
    + + def + is_valid(self) -> bool: + + + +
    + +
    67    @abstractmethod
    +68    def is_valid(self) -> bool:
    +69        pass
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_csv(filename: pathlib.Path) -> bool: + + + +
    + +
    71    @staticmethod
    +72    def is_csv(filename: Path) -> bool:
    +73        return filename.suffix.lower() == CSV_EXTENSION
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_yaml(filename: pathlib.Path) -> bool: + + + +
    + +
    75    @staticmethod
    +76    def is_yaml(filename: Path) -> bool:
    +77        try:
    +78            file_extension = filename.suffix
    +79            return file_extension.lower() in YAML_EXTENSIONS
    +80        except AttributeError as e:
    +81            logger.exception(e)
    +82            return False
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_zip(filename: pathlib.Path) -> bool: + + + +
    + +
    84    @staticmethod
    +85    def is_zip(filename: Path) -> bool:
    +86        try:
    +87            file_extension = filename.suffix
    +88            return file_extension.lower() in ZIP_EXTENSION
    +89        except AttributeError as e:
    +90            logger.exception(e)
    +91            return False
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_type(filename: pathlib.Path) -> libecalc.infrastructure.file_io.EcalcFileType: + + + +
    + +
     93    @staticmethod
    + 94    def get_type(filename: Path) -> EcalcFileType:
    + 95        if EcalcFile.is_csv(filename):
    + 96            return EcalcFileType.CSV
    + 97        elif EcalcFile.is_yaml(filename):
    + 98            return EcalcFileType.YAML
    + 99        elif EcalcFile.is_zip(filename):
    +100            return EcalcFileType.ZIP
    +101
    +102        message = f"Cannot get (valid) file type of {filename}"
    +103        logger.warning(message)
    +104        raise EcalcError(
    +105            message=message,
    +106            title="Invalid file type",
    +107            error_type=EcalcErrorType.CLIENT_ERROR,
    +108        )
    +
    + + + + +
    +
    +
    + +
    + + class + ValidEcalcFile(EcalcFile): + + + +
    + +
    112class ValidEcalcFile(EcalcFile):
    +113    """Class for mimicking FileWithName."""
    +114
    +115    original_filename: Path  # full path, e.g. in archive
    +116    filename: str  # just the (file)name
    +117    file: IO
    +118    file_type: EcalcFileType
    +119
    +120    def is_valid(self) -> bool:
    +121        return True
    +122
    +123    def is_main_yaml_file(self) -> bool:
    +124        bytes_str = self.file.read()
    +125        self.file.seek(0)
    +126        text_obj = bytes_str.decode("UTF-8")
    +127        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + ValidEcalcFile( original_filename: pathlib.Path, filename: str, file: <class 'IO'>, file_type: libecalc.infrastructure.file_io.EcalcFileType) + + +
    + + + + +
    +
    + +
    + + def + is_valid(self) -> bool: + + + +
    + +
    120    def is_valid(self) -> bool:
    +121        return True
    +
    + + + + +
    +
    + +
    + + def + is_main_yaml_file(self) -> bool: + + + +
    + +
    123    def is_main_yaml_file(self) -> bool:
    +124        bytes_str = self.file.read()
    +125        self.file.seek(0)
    +126        text_obj = bytes_str.decode("UTF-8")
    +127        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    + +
    +
    +
    +
    + +
    + + class + InvalidEcalcFile(EcalcFile): + + + +
    + +
    131class InvalidEcalcFile(EcalcFile):
    +132    """Class for mimicking FileWithName."""
    +133
    +134    original_filename: Path  # full path in archive
    +135    filename: str  # just the filename
    +136    error: str
    +137
    +138    def is_valid(self) -> bool:
    +139        return False
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + InvalidEcalcFile(original_filename: pathlib.Path, filename: str, error: str) + + +
    + + + + +
    +
    + +
    + + def + is_valid(self) -> bool: + + + +
    + +
    138    def is_valid(self) -> bool:
    +139        return False
    +
    + + + + +
    +
    +
    Inherited Members
    +
    + +
    +
    +
    +
    + +
    + + class + EcalcFiles: + + + +
    + +
    143class EcalcFiles:
    +144    ALLOWED_EXTENSIONS = {"yaml", "csv", "yml", "zip"}
    +145
    +146    @staticmethod
    +147    def allowed_file(filename: str) -> bool:
    +148        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +149
    +150    @staticmethod
    +151    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +152        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +153        yaml file can have !include and a certain set of sections.
    +154
    +155        * Only one main file is allowed
    +156
    +157        if none or more than one main file is detected an exception is raised
    +158        :param files:
    +159        :return:
    +160        """
    +161        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +162        if len(main_files) > 1:
    +163            raise EcalcError(
    +164                "Bad Request",
    +165                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +166                error_type=EcalcErrorType.CLIENT_ERROR,
    +167            )
    +168
    +169        if len(main_files) == 0:
    +170            raise EcalcError(
    +171                "Bad Request",
    +172                "No main files found. There must be one main file",
    +173                error_type=EcalcErrorType.CLIENT_ERROR,
    +174            )
    +175
    +176        return main_files[0]
    +177
    +178    @staticmethod
    +179    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +180        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +181        filter out bad files for further processing of good files only.
    +182
    +183        The current validation implementation is very naĩve, by only checking file extension.
    +184
    +185        :param files:
    +186        :return:
    +187        """
    +188        valid_files: List[ValidEcalcFile] = []
    +189        invalid_files: List[InvalidEcalcFile] = []
    +190        for file in files:
    +191            if EcalcFiles.allowed_file(file.filename):
    +192                if EcalcFile.is_zip(Path(file.filename)):
    +193                    if len(files) > 1:
    +194                        raise EcalcError(
    +195                            title="Invalid file combination",
    +196                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +197                        )
    +198
    +199                    valid_files, invalid_files = unpack_zip(file.file)
    +200                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +201                    valid_files.append(
    +202                        ValidEcalcFile(
    +203                            original_filename=Path(file.filename),
    +204                            filename=file.filename,
    +205                            file=file.file,
    +206                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +207                        )
    +208                    )
    +209                else:
    +210                    invalid_files.append(
    +211                        InvalidEcalcFile(
    +212                            original_filename=Path(file.filename),
    +213                            filename=file.filename,
    +214                            error="Invalid File Extension",
    +215                        )
    +216                    )
    +217            else:
    +218                invalid_files.append(
    +219                    InvalidEcalcFile(
    +220                        original_filename=Path(file.filename),
    +221                        filename=file.filename,
    +222                        error="Invalid File Extension",
    +223                    )
    +224                )
    +225
    +226        return valid_files, invalid_files
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + allowed_file(filename: str) -> bool: + + + +
    + +
    146    @staticmethod
    +147    def allowed_file(filename: str) -> bool:
    +148        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_main_file( files: List[libecalc.infrastructure.file_io.ValidEcalcFile]) -> libecalc.infrastructure.file_io.ValidEcalcFile: + + + +
    + +
    150    @staticmethod
    +151    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +152        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +153        yaml file can have !include and a certain set of sections.
    +154
    +155        * Only one main file is allowed
    +156
    +157        if none or more than one main file is detected an exception is raised
    +158        :param files:
    +159        :return:
    +160        """
    +161        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +162        if len(main_files) > 1:
    +163            raise EcalcError(
    +164                "Bad Request",
    +165                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +166                error_type=EcalcErrorType.CLIENT_ERROR,
    +167            )
    +168
    +169        if len(main_files) == 0:
    +170            raise EcalcError(
    +171                "Bad Request",
    +172                "No main files found. There must be one main file",
    +173                error_type=EcalcErrorType.CLIENT_ERROR,
    +174            )
    +175
    +176        return main_files[0]
    +
    + + +

    Get the main yaml file. Detected by checking for a specific format. Only the main +yaml file can have !include and a certain set of sections.

    + +
      +
    • Only one main file is allowed
    • +
    + +

    if none or more than one main file is detected an exception is raised

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    +
    @staticmethod
    + + def + validate_filetypes( files: List[libecalc.infrastructure.file_io.FileWithName]) -> Tuple[List[libecalc.infrastructure.file_io.ValidEcalcFile], List[libecalc.infrastructure.file_io.InvalidEcalcFile]]: + + + +
    + +
    178    @staticmethod
    +179    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +180        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +181        filter out bad files for further processing of good files only.
    +182
    +183        The current validation implementation is very naĩve, by only checking file extension.
    +184
    +185        :param files:
    +186        :return:
    +187        """
    +188        valid_files: List[ValidEcalcFile] = []
    +189        invalid_files: List[InvalidEcalcFile] = []
    +190        for file in files:
    +191            if EcalcFiles.allowed_file(file.filename):
    +192                if EcalcFile.is_zip(Path(file.filename)):
    +193                    if len(files) > 1:
    +194                        raise EcalcError(
    +195                            title="Invalid file combination",
    +196                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +197                        )
    +198
    +199                    valid_files, invalid_files = unpack_zip(file.file)
    +200                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +201                    valid_files.append(
    +202                        ValidEcalcFile(
    +203                            original_filename=Path(file.filename),
    +204                            filename=file.filename,
    +205                            file=file.file,
    +206                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +207                        )
    +208                    )
    +209                else:
    +210                    invalid_files.append(
    +211                        InvalidEcalcFile(
    +212                            original_filename=Path(file.filename),
    +213                            filename=file.filename,
    +214                            error="Invalid File Extension",
    +215                        )
    +216                    )
    +217            else:
    +218                invalid_files.append(
    +219                    InvalidEcalcFile(
    +220                        original_filename=Path(file.filename),
    +221                        filename=file.filename,
    +222                        error="Invalid File Extension",
    +223                    )
    +224                )
    +225
    +226        return valid_files, invalid_files
    +
    + + +

    Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to +filter out bad files for further processing of good files only.

    + +

    The current validation implementation is very naĩve, by only checking file extension.

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    +
    + +
    + + def + find_longest_common_path(file_path_1: pathlib.Path, file_path_2: pathlib.Path) -> str: + + + +
    + +
    229def find_longest_common_path(file_path_1: Path, file_path_2: Path) -> str:
    +230    """Given 2 paths, find the longest common path, part by part that the 2 paths share; ie
    +231    until which position in the file hierarchy do they diverge?
    +232
    +233    :param file_path_1:
    +234    :param file_path_2:
    +235    :return:
    +236    """
    +237    common_path = ""
    +238    for path_1, path_2 in zip(file_path_1.parts, file_path_2.parts):
    +239        if path_1 == path_2:
    +240            common_path += path_1 + "/"
    +241        else:
    +242            break
    +243
    +244    return common_path
    +
    + + +

    Given 2 paths, find the longest common path, part by part that the 2 paths share; ie +until which position in the file hierarchy do they diverge?

    + +
    Parameters
    + +
      +
    • file_path_1:
    • +
    • file_path_2:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + strip_common_path(common_path: str, path: str) -> str: + + + +
    + +
    247def strip_common_path(common_path: str, path: str) -> str:
    +248    """Remove/strip the given subpath from path
    +249    :param common_path:
    +250    :param path:
    +251    :return:
    +252    """
    +253    return path.replace(common_path, "")
    +
    + + +

    Remove/strip the given subpath from path

    + +
    Parameters
    + +
      +
    • common_path:
    • +
    • path:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + make_relative_path(linked_file: str, main_file: str) -> str: + + + +
    + +
    256def make_relative_path(linked_file: str, main_file: str) -> str:
    +257    """Given a main file and a file to be linked to from that file, only
    +258    include the parts of the path of both files that _differ_.
    +259
    +260    The parts that is different in main_file, will be replaced with "../",
    +261
    +262    :param linked_file:
    +263    :param main_file:
    +264    :return:
    +265    """
    +266    main_file_path = Path(main_file)
    +267    for part in main_file_path.parts[:-1]:
    +268        if part != "" and part != "/":
    +269            linked_file = "../" + linked_file
    +270
    +271    return linked_file
    +
    + + +

    Given a main file and a file to be linked to from that file, only +include the parts of the path of both files that _differ_.

    + +

    The parts that is different in main_file, will be replaced with "../",

    + +
    Parameters
    + +
      +
    • linked_file:
    • +
    • main_file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + find_duplicates(files: List[libecalc.infrastructure.file_io.ValidEcalcFile]) -> List[str]: + + + +
    + +
    274def find_duplicates(files: List[ValidEcalcFile]) -> List[str]:
    +275    """Find files with duplicate names (names = without path).
    +276
    +277    :param files:
    +278    :return:
    +279    """
    +280    count_filenames = Counter([file.filename for file in files])
    +281    duplicates = [filename for filename, count in count_filenames.items() if count > 1]
    +282
    +283    return duplicates
    +
    + + +

    Find files with duplicate names (names = without path).

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + rename_duplicates( valid_files: List[libecalc.infrastructure.file_io.ValidEcalcFile], duplicates: List[str]) -> Dict[pathlib.Path, str]: + + + +
    + +
    286def rename_duplicates(valid_files: List[ValidEcalcFile], duplicates: List[str]) -> Dict[Path, str]:
    +287    """Rename duplicate files. All with same name will be renamed. Those that are not duplicates,
    +288    will also be returned, with the original filename in the mapping.
    +289
    +290    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist
    +291    at the same level.
    +292
    +293    :param valid_files:
    +294    :param duplicates:
    +295    :return:
    +296    """
    +297    renamed_files: Dict[Path, str] = {}
    +298    for file in valid_files:
    +299        if file.filename in duplicates:
    +300            renamed_filename = str(file.original_filename).replace("/", "_")
    +301            if len(renamed_filename) > 100:
    +302                renamed_filename = renamed_filename[-94:] + str(uuid.uuid4().hex.upper()[0:6])
    +303            renamed_files[file.original_filename] = renamed_filename
    +304        else:
    +305            renamed_files[file.original_filename] = file.filename
    +306
    +307    return renamed_files
    +
    + + +

    Rename duplicate files. All with same name will be renamed. Those that are not duplicates, +will also be returned, with the original filename in the mapping.

    + +

    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist +at the same level.

    + +
    Parameters
    + +
      +
    • valid_files:
    • +
    • duplicates:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + make_relative_paths( files: List[libecalc.infrastructure.file_io.ValidEcalcFile], main_yaml: libecalc.infrastructure.file_io.ValidEcalcFile) -> Dict[pathlib.Path, str]: + + + +
    + +
    310def make_relative_paths(files: List[ValidEcalcFile], main_yaml: ValidEcalcFile) -> Dict[Path, str]:
    +311    """For all files in the list, generate the relative paths for all files, relative
    +312    to the provided main file. All files provided, must have the original_filename set, which must
    +313    be the relative path to the root of the model; e.g. the (zip) archive path, or
    +314    if only one level, the filename itself.
    +315
    +316    :param files:
    +317    :param main_yaml:
    +318    :return:
    +319    """
    +320    relative_paths: Dict[Path, str] = {}
    +321    for file in files:
    +322        if file == main_yaml:
    +323            # since all files are relative to this given file, this must be the filename itself, only
    +324            relative_paths[main_yaml.original_filename] = main_yaml.filename
    +325        else:
    +326            common_path = find_longest_common_path(Path(file.original_filename), Path(main_yaml.original_filename))
    +327            stripped_file = strip_common_path(common_path, str(file.original_filename))
    +328            stripped_main = strip_common_path(common_path, str(main_yaml.original_filename))
    +329            relative_path = make_relative_path(stripped_file, stripped_main)
    +330
    +331            relative_paths[file.original_filename] = relative_path
    +332
    +333    return relative_paths
    +
    + + +

    For all files in the list, generate the relative paths for all files, relative +to the provided main file. All files provided, must have the original_filename set, which must +be the relative path to the root of the model; e.g. the (zip) archive path, or +if only one level, the filename itself.

    + +
    Parameters
    + +
      +
    • files:
    • +
    • main_yaml:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + unpack_zip( file: <class 'IO'>) -> Tuple[List[libecalc.infrastructure.file_io.ValidEcalcFile], List[libecalc.infrastructure.file_io.InvalidEcalcFile]]: + + + +
    + +
    336def unpack_zip(file: IO) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +337    """Unpack the zip similarility to how single files are handled, by returning a tuple
    +338    of valid and invalid files.
    +339
    +340    :param file:
    +341    :return:
    +342    """
    +343    valid_files: List[ValidEcalcFile] = []
    +344    invalid_files: List[InvalidEcalcFile] = []
    +345    try:
    +346        with zipfile.ZipFile(BytesIO(file.read())) as archive:
    +347            for zip_info in archive.infolist():
    +348                try:
    +349                    file_path = Path(zip_info.filename)
    +350
    +351                    if is_ignored_zip_content(file_path) or zip_info.is_dir():
    +352                        # Just ignore, dont event mention it. Will just confuse users (because those files are normally hidden)
    +353                        continue
    +354                    elif EcalcFile.is_csv(file_path) or EcalcFile.is_yaml(file_path):
    +355                        with archive.open(zip_info) as file:
    +356                            file_like = TemporaryFile()
    +357                            file_like.write(file.read())
    +358                            file_like.seek(0)
    +359                            valid_files.append(
    +360                                ValidEcalcFile(
    +361                                    original_filename=file_path,
    +362                                    filename=file_path.name,
    +363                                    file=file_like,
    +364                                    file_type=EcalcFile.get_type(filename=file_path),
    +365                                )
    +366                            )
    +367                    else:
    +368                        invalid_files.append(
    +369                            InvalidEcalcFile(
    +370                                original_filename=file_path, filename=file_path.name, error="Invalid file extension"
    +371                            )
    +372                        )
    +373                        continue
    +374
    +375                except EcalcError as ee:
    +376                    logger.warning(f"An error occurred while reading file({file_path}) in zip archive")
    +377                    invalid_files.append(
    +378                        InvalidEcalcFile(original_filename=file_path, filename=file_path.name, error=ee.message)
    +379                    )
    +380
    +381        valid_file_paths = [valid_file.original_filename for valid_file in valid_files]
    +382        if len(valid_file_paths) != len(set(valid_file_paths)):
    +383            raise EcalcError(title="Bad zip file", message="Duplicated filepaths in zip archive detected. Please fix.")
    +384
    +385        return valid_files, invalid_files
    +386
    +387    except zipfile.BadZipFile as e:
    +388        raise EcalcError(title="Bad zip file", message="An error occurred while unpacking the zip file") from e
    +
    + + +

    Unpack the zip similarility to how single files are handled, by returning a tuple +of valid and invalid files.

    + +
    Parameters
    + +
      +
    • file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + read_csv(csv_data: Union[str, TextIO, _io.BytesIO]) -> pandas.core.frame.DataFrame: + + + +
    + +
    426def read_csv(csv_data: Union[str, TextIO, BytesIO]) -> pandas.DataFrame:
    +427    """Wrapper of pandas read csv function
    +428
    +429    Settings used:
    +430        float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001
    +431        skipinitialspace=True converts "  10" to 10,
    +432        thousands=" " removes spaces used as thousand separators (normal in excel)
    +433
    +434    Args:
    +435        csv_data:
    +436
    +437    Returns:
    +438
    +439    """
    +440    stream = StringIO(csv_data) if isinstance(csv_data, str) else csv_data
    +441
    +442    return pd.read_csv(stream, comment="#", float_precision="round_trip", skipinitialspace=True, thousands=" ")
    +
    + + +

    Wrapper of pandas read csv function

    + +

    Settings used: + float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001 + skipinitialspace=True converts " 10" to 10, + thousands=" " removes spaces used as thousand separators (normal in excel)

    + +

    Args: + csv_data:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + read_resource_from_string( resource_string: str, validate_headers: bool = True) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    445def read_resource_from_string(resource_string: str, validate_headers: bool = True) -> Resource:
    +446    """Read resource from stream without validation."""
    +447    resource_df = read_csv(resource_string)
    +448
    +449    resource = _dataframe_to_resource(resource_df.replace(np.nan, ""), validate_headers=validate_headers)
    +450    return resource
    +
    + + +

    Read resource from stream without validation.

    +
    + + +
    +
    + +
    + + def + convert_dataframe_to_timeseries_resource( resource_df: pandas.core.frame.DataFrame) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    453def convert_dataframe_to_timeseries_resource(resource_df: pd.DataFrame) -> Resource:
    +454    # TODO: This might give a different result than calculator-cli since we are not yet
    +455    #  filtering on columns that are actually used. I.e. an unused column might have a number where all used columns
    +456    #  have nan. This method would include that row. Although it is unlikely.
    +457    # Drop rows if all values are na (sometimes lines with ,,, are exported from Excel).
    +458
    +459    resource_df = resource_df.dropna(axis=0, how="all")
    +460    # Drop columns if all values are na
    +461    resource_df = resource_df.dropna(axis=1, how="all")
    +462
    +463    return _dataframe_to_resource(resource_df)
    +
    + + + + +
    +
    + +
    + + def + read_timeseries_resource( resource_input: Union[pathlib.Path, _io.BytesIO, str], timeseries_type: libecalc.presentation.yaml.yaml_entities.YamlTimeseriesType) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    466def read_timeseries_resource(
    +467    resource_input: Union[Path, BytesIO, str], timeseries_type: YamlTimeseriesType
    +468) -> Resource:
    +469    """Read timeseries resource from filepath with timeseries specific manipulation/validation.
    +470
    +471    - Timeseries is allowed to have nans
    +472    """
    +473    if not isinstance(resource_input, (BytesIO, str, Path)):
    +474        raise ValueError(f"Invalid resource_input type '{type(resource_input)}'")
    +475
    +476    if timeseries_type in (YamlTimeseriesType.DEFAULT, YamlTimeseriesType.MISCELLANEOUS):
    +477        if isinstance(resource_input, Path):
    +478            with open(resource_input) as resource_file:
    +479                resource_df = read_csv(resource_file)
    +480        else:
    +481            resource_df = read_csv(resource_input)
    +482    else:
    +483        raise ValueError(f"Invalid timeseries type '{timeseries_type}' for resource '{resource_input}'")
    +484
    +485    return convert_dataframe_to_timeseries_resource(resource_df=resource_df)
    +
    + + +

    Read timeseries resource from filepath with timeseries specific manipulation/validation.

    + +
      +
    • Timeseries is allowed to have nans
    • +
    +
    + + +
    +
    + +
    + + def + read_facility_resource( resource_input: Union[pathlib.Path, _io.BytesIO, str]) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    488def read_facility_resource(resource_input: Union[Path, BytesIO, str]) -> Resource:
    +489    """Read facility file from filepath with facility file specific validation.
    +490
    +491    - Facility files are not allowed to have nans
    +492    """
    +493    if isinstance(resource_input, Path):
    +494        with open(resource_input) as resource_file:
    +495            resource_df = read_csv(resource_file)
    +496    elif isinstance(resource_input, (BytesIO, str)):
    +497        resource_df = read_csv(resource_input)
    +498    else:
    +499        raise ValueError("")
    +500    resource = _dataframe_to_resource(resource_df)
    +501    _validate_not_nan(resource.data)
    +502    return resource
    +
    + + +

    Read facility file from filepath with facility file specific validation.

    + +
      +
    • Facility files are not allowed to have nans
    • +
    +
    + + +
    +
    + +
    + + def + read_resource_from_filepath( resource_path: pathlib.Path) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    505def read_resource_from_filepath(resource_path: Path) -> Resource:
    +506    """Read resource from filepath without validation, should only be used as a util for tests/fixtures."""
    +507    if EcalcFile.is_csv(resource_path):
    +508        with open(resource_path) as resource_file:
    +509            resource_df = read_csv(resource_file)
    +510            return _dataframe_to_resource(resource_df)
    +511    else:
    +512        raise ValueError(f"Invalid file extension: {resource_path}")
    +
    + + +

    Read resource from filepath without validation, should only be used as a util for tests/fixtures.

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure/file_utils.html b/docs/about/references/api/libecalc/infrastructure/file_utils.html new file mode 100644 index 0000000000..f4c8892872 --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure/file_utils.html @@ -0,0 +1,757 @@ + + + + + + + libecalc.infrastructure.file_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure.file_utils

    + + + + + + +
      1import enum
    +  2import sys
    +  3from typing import Callable, Optional, Union
    +  4
    +  5import pandas as pd
    +  6
    +  7from libecalc.common.datetime.utils import DateTimeFormats
    +  8from libecalc.common.logger import logger
    +  9from libecalc.dto.result import ComponentResult, EcalcModelResult
    + 10
    + 11
    + 12class OutputFormat(enum.Enum):
    + 13    """Supported output file formats from eCalc"""
    + 14
    + 15    CSV = "csv"
    + 16    JSON = "json"
    + 17
    + 18    def __str__(self):
    + 19        """Dump enum to string"""
    + 20        return self.value
    + 21
    + 22
    + 23def dataframe_to_csv(
    + 24    df: pd.DataFrame,
    + 25    separator: str = ",",
    + 26    show_index: bool = True,
    + 27    float_formatter: Optional[Union[Callable, str]] = "%20.5f",
    + 28    date_format: Optional[str] = None,
    + 29) -> str:
    + 30    """Dump pandas dataframe to csv file
    + 31
    + 32    Wraps pandas to_csv functionality, for more options see pandas docs
    + 33
    + 34    Args:
    + 35        df: Dataframe to dump
    + 36        separator: value separator in out, defaults to ',' for csv
    + 37        show_index: if true, will include index in dump
    + 38        float_formatter:
    + 39        date_format:
    + 40
    + 41    Returns:
    + 42
    + 43    """
    + 44    return df.to_csv(
    + 45        float_format=float_formatter,
    + 46        index=show_index,
    + 47        index_label="timesteps",
    + 48        encoding="utf-8",
    + 49        sep=separator,
    + 50        date_format=date_format,
    + 51    )
    + 52
    + 53
    + 54def to_json(result: Union[ComponentResult, EcalcModelResult], simple_output: bool, date_format_option: int) -> str:
    + 55    """Dump result classes to json file
    + 56
    + 57    Args:
    + 58        result: eCalc result data class
    + 59        simple_output: If true, will provide a simplified output format
    + 60        date_format_option:
    + 61
    + 62    Returns:
    + 63        String dump of json output
    + 64
    + 65    """
    + 66    date_format = DateTimeFormats.get_format(date_format_option)
    + 67    return (
    + 68        result.simple_result().json(
    + 69            indent=True,
    + 70            date_format=date_format,
    + 71            exclude_none=True,
    + 72        )
    + 73        if simple_output
    + 74        else result.json(
    + 75            indent=True,
    + 76            date_format=date_format,
    + 77            exclude_none=True,
    + 78        )
    + 79    )
    + 80
    + 81
    + 82def get_result_output(
    + 83    results: EcalcModelResult,
    + 84    output_format: OutputFormat,
    + 85    simple_output: bool,
    + 86    date_format_option: int,
    + 87) -> str:
    + 88    """Result output controller
    + 89
    + 90    Output eCalc results in desired format and
    + 91
    + 92    Args:
    + 93        results:
    + 94        output_format:
    + 95        simple_output: If true, will provide a simplified output format. Only supported for json format
    + 96        date_format_option:
    + 97
    + 98    Returns:
    + 99
    +100    """
    +101    if output_format == OutputFormat.JSON:
    +102        return to_json(results, simple_output=simple_output, date_format_option=date_format_option)
    +103    elif output_format == OutputFormat.CSV:
    +104        df = pd.DataFrame(index=results.timesteps)
    +105        for component in results.components:
    +106            component_df = component.to_dataframe(
    +107                prefix=component.name,
    +108            )
    +109            try:
    +110                df = df.join(component_df)
    +111            except ValueError:
    +112                logger.warning(
    +113                    f"Duplicate component names in result detected. Component name '{component.name}', "
    +114                    f"component type '{component.componentType}'."
    +115                )
    +116                df = pd.concat([df, component_df], axis=1)
    +117        return dataframe_to_csv(df.fillna("nan"), date_format=DateTimeFormats.get_format(date_format_option))
    +118    else:
    +119        raise ValueError(
    +120            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +121        )
    +122
    +123
    +124def get_component_output(
    +125    results: EcalcModelResult,
    +126    component_name: str,
    +127    output_format: OutputFormat,
    +128    simple_output: bool,
    +129    date_format_option: int,
    +130) -> str:
    +131    """Get eCalc output for a single component by name
    +132
    +133    Args:
    +134        results: Complete from eCalc model
    +135        component_name: Name of component to output results from
    +136        output_format: Format of output file, CSV and JSON is currently supported
    +137        simple_output: If true, will provide a simplified output format. Only supported for json format
    +138        date_format_option:
    +139
    +140    Returns:
    +141
    +142    """
    +143    components = [component for component in results.components if component.name == component_name]
    +144
    +145    if len(components) == 0:
    +146        msg = f"Unable to find component with name '{component_name}'"
    +147        logger.error(msg)
    +148        raise ValueError(msg)
    +149    elif len(components) == 1:
    +150        component = components[0]
    +151    else:
    +152        print("Several components match this name\n")
    +153        format_str = "{:<5} {:<18} {:<10}"
    +154        print(format_str.format("index", "type", "name"))
    +155        for index, component in enumerate(components):
    +156            print(format_str.format(index, component.componentType.value, component.name))
    +157        print()
    +158        selected_component_index = input("Enter the index of the component you want to select (q to quit): ")
    +159        if selected_component_index == "q":
    +160            sys.exit(0)
    +161
    +162        component = components[int(selected_component_index)]
    +163
    +164    if output_format == OutputFormat.JSON:
    +165        return to_json(component, simple_output=simple_output, date_format_option=date_format_option)
    +166    elif output_format == OutputFormat.CSV:
    +167        df = component.to_dataframe()
    +168        return dataframe_to_csv(df, date_format=DateTimeFormats.get_format(date_format_option))
    +169    else:
    +170        raise ValueError(
    +171            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +172        )
    +
    + + +
    +
    + +
    + + class + OutputFormat(enum.Enum): + + + +
    + +
    13class OutputFormat(enum.Enum):
    +14    """Supported output file formats from eCalc"""
    +15
    +16    CSV = "csv"
    +17    JSON = "json"
    +18
    +19    def __str__(self):
    +20        """Dump enum to string"""
    +21        return self.value
    +
    + + +

    Supported output file formats from eCalc

    +
    + + +
    +
    + CSV = +<OutputFormat.CSV: 'csv'> + + +
    + + + + +
    +
    +
    + JSON = +<OutputFormat.JSON: 'json'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + def + dataframe_to_csv( df: pandas.core.frame.DataFrame, separator: str = ',', show_index: bool = True, float_formatter: Union[Callable, str, NoneType] = '%20.5f', date_format: Union[str, NoneType] = None) -> str: + + + +
    + +
    24def dataframe_to_csv(
    +25    df: pd.DataFrame,
    +26    separator: str = ",",
    +27    show_index: bool = True,
    +28    float_formatter: Optional[Union[Callable, str]] = "%20.5f",
    +29    date_format: Optional[str] = None,
    +30) -> str:
    +31    """Dump pandas dataframe to csv file
    +32
    +33    Wraps pandas to_csv functionality, for more options see pandas docs
    +34
    +35    Args:
    +36        df: Dataframe to dump
    +37        separator: value separator in out, defaults to ',' for csv
    +38        show_index: if true, will include index in dump
    +39        float_formatter:
    +40        date_format:
    +41
    +42    Returns:
    +43
    +44    """
    +45    return df.to_csv(
    +46        float_format=float_formatter,
    +47        index=show_index,
    +48        index_label="timesteps",
    +49        encoding="utf-8",
    +50        sep=separator,
    +51        date_format=date_format,
    +52    )
    +
    + + +

    Dump pandas dataframe to csv file

    + +

    Wraps pandas to_csv functionality, for more options see pandas docs

    + +

    Args: + df: Dataframe to dump + separator: value separator in out, defaults to ',' for csv + show_index: if true, will include index in dump + float_formatter: + date_format:

    + +

    Returns:

    +
    + + +
    +
    + + + +
    55def to_json(result: Union[ComponentResult, EcalcModelResult], simple_output: bool, date_format_option: int) -> str:
    +56    """Dump result classes to json file
    +57
    +58    Args:
    +59        result: eCalc result data class
    +60        simple_output: If true, will provide a simplified output format
    +61        date_format_option:
    +62
    +63    Returns:
    +64        String dump of json output
    +65
    +66    """
    +67    date_format = DateTimeFormats.get_format(date_format_option)
    +68    return (
    +69        result.simple_result().json(
    +70            indent=True,
    +71            date_format=date_format,
    +72            exclude_none=True,
    +73        )
    +74        if simple_output
    +75        else result.json(
    +76            indent=True,
    +77            date_format=date_format,
    +78            exclude_none=True,
    +79        )
    +80    )
    +
    + + +

    Dump result classes to json file

    + +

    Args: + result: eCalc result data class + simple_output: If true, will provide a simplified output format + date_format_option:

    + +

    Returns: + String dump of json output

    +
    + + +
    +
    + +
    + + def + get_result_output( results: libecalc.dto.result.results.EcalcModelResult, output_format: libecalc.infrastructure.file_utils.OutputFormat, simple_output: bool, date_format_option: int) -> str: + + + +
    + +
     83def get_result_output(
    + 84    results: EcalcModelResult,
    + 85    output_format: OutputFormat,
    + 86    simple_output: bool,
    + 87    date_format_option: int,
    + 88) -> str:
    + 89    """Result output controller
    + 90
    + 91    Output eCalc results in desired format and
    + 92
    + 93    Args:
    + 94        results:
    + 95        output_format:
    + 96        simple_output: If true, will provide a simplified output format. Only supported for json format
    + 97        date_format_option:
    + 98
    + 99    Returns:
    +100
    +101    """
    +102    if output_format == OutputFormat.JSON:
    +103        return to_json(results, simple_output=simple_output, date_format_option=date_format_option)
    +104    elif output_format == OutputFormat.CSV:
    +105        df = pd.DataFrame(index=results.timesteps)
    +106        for component in results.components:
    +107            component_df = component.to_dataframe(
    +108                prefix=component.name,
    +109            )
    +110            try:
    +111                df = df.join(component_df)
    +112            except ValueError:
    +113                logger.warning(
    +114                    f"Duplicate component names in result detected. Component name '{component.name}', "
    +115                    f"component type '{component.componentType}'."
    +116                )
    +117                df = pd.concat([df, component_df], axis=1)
    +118        return dataframe_to_csv(df.fillna("nan"), date_format=DateTimeFormats.get_format(date_format_option))
    +119    else:
    +120        raise ValueError(
    +121            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +122        )
    +
    + + +

    Result output controller

    + +

    Output eCalc results in desired format and

    + +

    Args: + results: + output_format: + simple_output: If true, will provide a simplified output format. Only supported for json format + date_format_option:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_component_output( results: libecalc.dto.result.results.EcalcModelResult, component_name: str, output_format: libecalc.infrastructure.file_utils.OutputFormat, simple_output: bool, date_format_option: int) -> str: + + + +
    + +
    125def get_component_output(
    +126    results: EcalcModelResult,
    +127    component_name: str,
    +128    output_format: OutputFormat,
    +129    simple_output: bool,
    +130    date_format_option: int,
    +131) -> str:
    +132    """Get eCalc output for a single component by name
    +133
    +134    Args:
    +135        results: Complete from eCalc model
    +136        component_name: Name of component to output results from
    +137        output_format: Format of output file, CSV and JSON is currently supported
    +138        simple_output: If true, will provide a simplified output format. Only supported for json format
    +139        date_format_option:
    +140
    +141    Returns:
    +142
    +143    """
    +144    components = [component for component in results.components if component.name == component_name]
    +145
    +146    if len(components) == 0:
    +147        msg = f"Unable to find component with name '{component_name}'"
    +148        logger.error(msg)
    +149        raise ValueError(msg)
    +150    elif len(components) == 1:
    +151        component = components[0]
    +152    else:
    +153        print("Several components match this name\n")
    +154        format_str = "{:<5} {:<18} {:<10}"
    +155        print(format_str.format("index", "type", "name"))
    +156        for index, component in enumerate(components):
    +157            print(format_str.format(index, component.componentType.value, component.name))
    +158        print()
    +159        selected_component_index = input("Enter the index of the component you want to select (q to quit): ")
    +160        if selected_component_index == "q":
    +161            sys.exit(0)
    +162
    +163        component = components[int(selected_component_index)]
    +164
    +165    if output_format == OutputFormat.JSON:
    +166        return to_json(component, simple_output=simple_output, date_format_option=date_format_option)
    +167    elif output_format == OutputFormat.CSV:
    +168        df = component.to_dataframe()
    +169        return dataframe_to_csv(df, date_format=DateTimeFormats.get_format(date_format_option))
    +170    else:
    +171        raise ValueError(
    +172            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +173        )
    +
    + + +

    Get eCalc output for a single component by name

    + +

    Args: + results: Complete from eCalc model + component_name: Name of component to output results from + output_format: Format of output file, CSV and JSON is currently supported + simple_output: If true, will provide a simplified output format. Only supported for json format + date_format_option:

    + +

    Returns:

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/version.html b/docs/about/references/api/libecalc/version.html new file mode 100644 index 0000000000..1fc2a83514 --- /dev/null +++ b/docs/about/references/api/libecalc/version.html @@ -0,0 +1,285 @@ + + + + + + + libecalc.version API documentation + + + + + + + + + +
    +
    +

    +libecalc.version

    + + + + + + +
     1from libecalc.common.version import Version
    + 2
    + 3# DO NOT EDIT - replaced in CI with release please
    + 4__version__ = "8.5.0"  # x-release-please-version
    + 5# END DO NOT EDIT
    + 6
    + 7
    + 8def current_version() -> Version:
    + 9    """Get the current version of eCalc. This is set and
    +10    built in the CICD pipeline.
    +11    :return:
    +12    """
    +13    return Version.from_string(__version__)
    +
    + + +
    +
    + +
    + + def + current_version() -> libecalc.common.version.Version: + + + +
    + +
     9def current_version() -> Version:
    +10    """Get the current version of eCalc. This is set and
    +11    built in the CICD pipeline.
    +12    :return:
    +13    """
    +14    return Version.from_string(__version__)
    +
    + + +

    Get the current version of eCalc. This is set and +built in the CICD pipeline.

    + +
    Returns
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/cli_reference/index.html b/docs/about/references/cli_reference/index.html new file mode 100644 index 0000000000..942350b96a --- /dev/null +++ b/docs/about/references/cli_reference/index.html @@ -0,0 +1,19 @@ + + + + + +ecalc | eCalc™ Docs + + + + +
    +

    ecalc

    Args: +log_level: Log level of the CLI logger, defaults to INFO +log_folder: Path to location of log files +version: Option to show libecalc version.

    Returns:

    Usage:

    $ ecalc [OPTIONS] COMMAND [ARGS]...

    Options:

    • --log [ERROR|WARNING|INFO|DEBUG]: Set the loglevel. [default: INFO]
    • --log-folder PATH: Store log files in a folder
    • --version: Show current eCalc™ version.
    • --install-completion [bash|zsh|fish|powershell|pwsh]: Install completion for the specified shell.
    • --show-completion [bash|zsh|fish|powershell|pwsh]: Show completion for the specified shell, to copy it or customize the installation.
    • --help: Show this message and exit.

    Commands:

    • run: CLI command to run a ecalc model.
    • selftest: Test that eCalc has been successfully...
    • show: Command to show information in the model...

    ecalc run

    CLI command to run a ecalc model.

    Usage:

    $ ecalc run [OPTIONS] MODEL_FILE

    Arguments:

    • MODEL_FILE: The Model YAML-file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]

    Options:

    • -f, --output-frequency, --outputfrequency [NONE|YEAR|MONTH|DAY]: Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]
    • -c, --csv: Toggle output of csv data. [default: True]
    • --json: Toggle output of json output.
    • -o, --output-folder, --outputfolder PATH: Outputfolder. Defaults to output/ relative to the yml setup file
    • -n, --name-prefix, --nameprefix TEXT: Name prefix for output data. Defaults to name of setup file.
    • --ltp-export: In addition to standard output, a specific Long Term Prognosis (LTP) file will be provided for simple export of LTP relevant data (Tabular Separated Values).
    • --stp-export: In addition to standard output, a specific Short Term Prognosis (STP) file will be provided for simple export of STP relevant data (Tabular Separated Values).
    • --flow-diagram: Output the input model formatted to be displayed in a custom flow diagram format in JSON
    • --detailed-output, --detailedoutput: Output detailed output. When False you will get basic results such as energy usage, power, time vector.
    • --date-format-option [0|1|2]: Date format option. 0: "YYYY-MM-DD HH:MM:SS" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM:SS" (ISO8601), 2: "DD.MM.YYYY HH:MM:SS". Default 0 (ISO 8601) [default: 0]
    • --help: Show this message and exit.

    ecalc selftest

    Test that eCalc has been successfully installed

    Usage:

    $ ecalc selftest [OPTIONS]

    Options:

    • --help: Show this message and exit.

    ecalc show

    Command to show information in the model or results.

    Usage:

    $ ecalc show [OPTIONS] COMMAND [ARGS]...

    Options:

    • --help: Show this message and exit.

    Commands:

    • results: Show results.
    • yaml: Show yaml model.

    ecalc show results

    Show results. You need to run eCalc™ before this will be available.

    Usage:

    $ ecalc show results [OPTIONS]

    Options:

    • -n, --name TEXT: Filter the results to only show the component with this name
    • --output-format [csv|json]: Show the data in this format. [default: json]
    • --file PATH: Write the data to a file with the specified name.
    • --output-folder PATH: Output folder. Defaults to current working directory
    • --detailed-output: Output detailed output. When False you will get basic energy usage and emissions results
    • --date-format-option [0|1|2]: Date format option. 0: "YYYY-MM-DD HH:MM:SS" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM:SS" (ISO8601), 2: "DD.MM.YYYY HH:MM:SS". Default 0 (ISO 8601) [default: 0]
    • -f, --output-frequency [NONE|YEAR|MONTH|DAY]: Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]
    • --help: Show this message and exit.

    ecalc show yaml

    Show yaml model. This will show the yaml after processing !include.

    Usage:

    $ ecalc show yaml [OPTIONS] MODEL_FILE

    Arguments:

    • MODEL_FILE: YAML file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]

    Options:

    • --file PATH: Write the data to a file with the specified name.
    • --help: Show this message and exit.
    + + + + \ No newline at end of file diff --git a/docs/about/references/index.html b/docs/about/references/index.html new file mode 100644 index 0000000000..28bd930a89 --- /dev/null +++ b/docs/about/references/index.html @@ -0,0 +1,16 @@ + + + + + +Reference documentation | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/ADJUSTMENT/index.html b/docs/about/references/keywords/ADJUSTMENT/index.html new file mode 100644 index 0000000000..cdc056e7f6 --- /dev/null +++ b/docs/about/references/keywords/ADJUSTMENT/index.html @@ -0,0 +1,25 @@ + + + + + +ADJUSTMENT | eCalc™ Docs + + + + +
    +

    ADJUSTMENT

    eCalc Model +/ FACILITY_INPUTS +/ ADJUSTMENT

    RequiredChild ofChildren/Options
    NoFACILITY_INPUTSCONSTANT
    FACTOR

    Description

    For various reasons (degenerated equipment, liquid pumps, etc.), the predicted energy usage from +the facility input does not always match the historic usage. To account for this, adjustments +may be added to the facility input. Currently, linear adjustment to the energy usage is supported.

    danger

    Even though The ADJUSTMENT factor and constant can be added to any +FACILITY_INPUTS, it is only +implemented and used for a small subset of equipment, namely: SAMPLED COMPRESSOR MODEL, TABULATED ENERGY USAGE MODEL, +GENERATORSETS +, PUMP MODEL (Single Speed, Variable Speed and System) and compressors in a compressor system. +If you are not sure, give it a test first.

    Format

    ADJUSTMENT:
    <ADJUSTMENT 1>: <VALUE>
    <ADJUSTMENT 2>: <VALUE>

    Example

    Say you have input that is off by a constant and percentage. You could fix this in the following way:

    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    CONSTANT: 2
    FACTOR: 1.05

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    Eadjusted=2+1.05×EoriginalE_\mathrm{adjusted} = 2 + 1.05 \times E_\mathrm{original}

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CATEGORY/index.html b/docs/about/references/keywords/CATEGORY/index.html new file mode 100644 index 0000000000..dfccb1c3df --- /dev/null +++ b/docs/about/references/keywords/CATEGORY/index.html @@ -0,0 +1,20 @@ + + + + + +CATEGORY | eCalc™ Docs + + + + +
    +

    CATEGORY

    eCalc Model +/ INSTALLATIONS +/ [...] / CATEGORY

    RequiredChild ofChildren/Options
    YesCONSUMERS
    FUELCONSUMERS
    INSTALLATIONS
    FUEL_TYPES
    None

    Description

    The CATEGORY keyword is used to specify which category certain data types belong to - these data types are:

    Only a limited pre-defined set of categories is valid input to the +CATEGORY keyword. The complete list of possible categories is given below. +Please note that the input is case-sensitive. The names should be in upper-case and the spelling/dash must match the names in the list exactly.

    Allowed categories for CONSUMERS and FUELCONSUMERS:

    CategoryDescription/Examples
    BASE-LOADConsumers that do not vary with production
    COLD-VENTING-FUGITIVEDirect emissions through cold venting and fugitive emissions
    COMPRESSORGas injection compressors, export compressors, etc.
    FIXED-PRODUCTION-LOADConsumer that is fixed/constant when production stream is on. Note that this is simply the name of the category. eCalc™ does not imply any condition (that production must be > 0) when this keyword is applied. For this to occur, CONDITION must be used. See example below.
    FLAREFlaring related energy usage/emissions
    MISCELLANEOUSAnything that don't apply other categories. Compressor and Genset (New in v7.2)
    PUMPSingle speed pumps, variable speed pumps.
    GAS-DRIVEN-COMPRESSORCompressor only. New in v7.1
    TURBINE-GENERATORGenset only. New in v7.1
    POWER-FROM-SHOREGenset only. Dummy Genset (should have e.g. 0 fuel). New in v7.1
    OFFSHORE-WINDDirect load consumer only. Negative load. Indicate external power. New in v7.1
    LOADINGDirect load consumer only. Indicate oil volume to be loaded. New in v8.0
    STORAGEDirect load consumer only. Indicate oil volume to be stored. New in v8.0
    STEAM-TURBINE-GENERATORDirect load consumer only. Negative load. Indicate power generated steam turbine. New in v8.1
    BOILERGenset only. Indicate steam generated. New in v8.2
    HEATERGenset only. Indicate hot medium generated. New in v8.2

    Allowed categories for INSTALLATIONS:

    CategoryDescription/Examples
    FIXEDFixed installation
    MOBILEMobile/satellite installation.

    Allowed categories for FUEL_TYPES:

    CategoryDescription/Examples
    FUEL-GASNormally associated with a fixed installation
    DIESELNormally associated with a mobile installation

    Format

    CATEGORY: <CATEGORY>

    Example

    - NAME: name_of_my_electrical_consumer
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    LOAD: 5
    CONDITION: SIM;OIL_PROD > 0
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_MODEL/index.html b/docs/about/references/keywords/COMPRESSOR_MODEL/index.html new file mode 100644 index 0000000000..8ea48e7027 --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_MODEL/index.html @@ -0,0 +1,16 @@ + + + + + +COMPRESSOR_MODEL | eCalc™ Docs + + + + +
    +

    COMPRESSOR_MODEL

    ENERGY_USAGE_MODEL / COMPRESSOR_MODEL

    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone

    Description

    This keyword links the predefined COMPRESSOR MODEL to the COMPRESSOR ENERGY USAGE MODEL.

    Note that this can only be used when a COMPRESSOR SYSTEM is used. It is possible to use the same compressor model twice in the same system - this is a common feature when there are identical compressor trains in parallel.

    Format

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model>
    ...

    Example

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html b/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html new file mode 100644 index 0000000000..5aad409687 --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html @@ -0,0 +1,21 @@ + + + + + +COMPRESSORS | eCalc™ Docs + + + + +
    +

    COMPRESSORS

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +COMPRESSOR_SYSTEM

    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone

    Description

    Used to define a list of compressors in a compressor system model (

    ENERGY_USAGE_MODEL of type COMPRESSOR_SYSTEM). +Each compressor is defined with a name and a reference to a compressor energy function defined in either +FACILITY_INPUTS or MODELS

    Format

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model in facility inputs>
    TOTAL_SYSTEM_RATE: <optional total system rate [Sm3/day]>
    OPERATIONAL_SETTINGS: <operational settings>

    See OPERATIONAL_SETTINGS for details.

    Example 1

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference

    Example 2 (Detailed)

    note

    When adding a “DATE” the next line is indented.

    - NAME: gassys27
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    2020-04-01:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: gassys27a
    COMPRESSOR_MODEL: gas3da
    - NAME: gassys27b
    COMPRESSOR_MODEL: gas3db
    TOTAL_SYSTEM_RATE: SIM8;GAS_PROD # [Sm3/day]
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURE: 155
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURE: 155
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html b/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html new file mode 100644 index 0000000000..9bbbc93681 --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html @@ -0,0 +1,21 @@ + + + + + +COMPRESSOR_TRAIN_MODEL | eCalc™ Docs + + + + +
    +

    COMPRESSOR_TRAIN_MODEL

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +COMPRESSOR_TRAIN_MODEL

    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone

    Description

    Reference to an compressor train model defined in FACILITY_INPUTS or +MODELS used for ENERGY_USAGE_MODEL +TYPE VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES.

    Format

    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    COMPRESSOR_TRAIN_MODEL: <reference to compressor train model in facility inputs or models of compressor type>

    Example

    MODELS:
    - NAME: advanced_compressor_train
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    -
    -

    ...

    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    COMPRESSOR_TRAIN_MODEL: advanced_compressor_train
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONDITION/index.html b/docs/about/references/keywords/CONDITION/index.html new file mode 100644 index 0000000000..0276066dec --- /dev/null +++ b/docs/about/references/keywords/CONDITION/index.html @@ -0,0 +1,24 @@ + + + + + +CONDITION | eCalc™ Docs + + + + +
    +

    CONDITION

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +CONDITION

    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone

    Description

    All energy usage models may have a keyword CONDITION +which specifies conditions for the consumer to be used. At points in the time series where the condition +evaluates to 0 (or False), the energy consumption will be 0. +This is practical for some otherwise +constant consumers. +For example, if you use the category FIXED-PRODUCTION-LOAD and you want it to depend on whether or not there is production, the CONDITION keyword can be specified.

    CONDITION supports the functionality described in Expressions, but is required to evaluate to True/False or 1/0.

    Format

    CONDITION: <CONDITION>

    Example

    A simple example is shown below where the load is only present whenever the oil production is positive:

    - NAME: production_load
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    LOAD: 5
    CONDITION: SIM1;OIL_PROD:PLA > 0

    This condition is an expression. See Expressions.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONDITIONS/index.html b/docs/about/references/keywords/CONDITIONS/index.html new file mode 100644 index 0000000000..a758dc159b --- /dev/null +++ b/docs/about/references/keywords/CONDITIONS/index.html @@ -0,0 +1,19 @@ + + + + + +CONDITIONS | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSTANT/index.html b/docs/about/references/keywords/CONSTANT/index.html new file mode 100644 index 0000000000..bc0d28432b --- /dev/null +++ b/docs/about/references/keywords/CONSTANT/index.html @@ -0,0 +1,19 @@ + + + + + +CONSTANT | eCalc™ Docs + + + + +
    +

    CONSTANT

    FACILITY_INPUTS / +ADJUSTMENT / +CONSTANT

    RequiredChild ofChildren/Options
    NoADJUSTMENTNone

    Description

    The keyword CONSTANT can be used for adjustment of input data with a constant.

    Format

    CONSTANT: <VALUE>

    Example

    Say you have input that that is off by -10 [some units]. +You could fix this like:

    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    CONSTANT: -10

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    Eadjusted=Eoriginal10E_\mathrm{adjusted} = E_\mathrm{original} - 10

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSUMERS/index.html b/docs/about/references/keywords/CONSUMERS/index.html new file mode 100644 index 0000000000..3267a2c60c --- /dev/null +++ b/docs/about/references/keywords/CONSUMERS/index.html @@ -0,0 +1,20 @@ + + + + + +CONSUMERS | eCalc™ Docs + + + + +
    +

    CONSUMERS

    INSTALLATIONS / +GENERATORSETS / +CONSUMERS

    RequiredChild ofChildren/Options
    YesGENERATORSETSCATEGORY
    NAME
    ENERGY_USAGE_MODEL

    Description

    Consumers getting electrical power from the generator set. The attributes NAME, +CATEGORY and ENERGY_USAGE_MODEL +are all required

    Format

    CONSUMERS:
    - NAME: <consumer name>
    CATEGORY: <category>
    ENERGY_USAGE_MODEL: <energy usage model>

    Example

    CONSUMERS:
    - NAME: SomeElectricalConsumer
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    - NAME: SomeOtherElectricalConsumer
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    ...
    - NAME: ElectricalConsumerN
    CATEGORY: MISCELLANEOUS
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html b/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html new file mode 100644 index 0000000000..b1c6aba51c --- /dev/null +++ b/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html @@ -0,0 +1,30 @@ + + + + + +CONSUMPTION_RATE_TYPE | eCalc™ Docs + + + + +
    +

    CONSUMPTION_RATE_TYPE

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +CONSUMPTION_RATE_TYPE

    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone

    Description

    info

    You must have good control of the input rates - which are stream day rates and which are calendar day rates - and +specify CALENDAR_DAY as input if necessary.

    When REGULARITY is used,the consumption rate type may be specified for +DIRECT ENERGY USAGE MODEL(LOAD or FUELRATE) +by setting CONSUMPTION_RATE_TYPE to either CALENDAR_DAY or +STREAM_DAY.

    The default behaviour, is that these will be interpreted as STREAM_DAY if not set explicitly. This will result in +fuel rates being multiplied by regularity to obtain (average) calendar day fuel rates, while the loads will be kept +stream day when passed to the generator set calculation.

    note

    CALENDAR_DAY: The average rate over a period after adjusting for operating conditions that keeps the +average throughput below the maximum achievable throughput for a single day, known as stream day.

    STREAM_DAY: The actual rate at a given moment. When multiplied with a REGULARITY +factor you get the calendar day rate which needs to be used when evaluating the economics of a process unit.

    stream day rate=calendar day rateregularitystream\ day\ rate = \frac{calendar\ day\ rate}{regularity}

    Format

    CONSUMPTION_RATE_TYPE: <consumption_rate_type>

    Where <consumption_rate_type> can either be CALENDAR_DAY or STREAM_DAY.

    Example

    Specifying consumption rate type for fixed/direct consumers:

    LOAD: 10
    CONSUMPTION_RATE_TYPE: CALENDAR_DAY
    ...
    FUELRATE: 10000
    CONSUMPTION_RATE_TYPE: STREAM_DAY

    Given CALENDAR_DAY input the rate will be converted to STREAM_DAY when evaluating, and any fuel rate in output +will be converted back again to CALENDAR_DAY rate equivalent in the results.

    Given STREAM_DAY input, and a REGULARITY factor of 0.5 (50%), the +interpretation is that the process unit will run at full capacity half of the time. The resulting fuel rate reported +for a fuel consumer will be halved compared to 1 (100%) regularity.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONTROL_MARGIN/index.html b/docs/about/references/keywords/CONTROL_MARGIN/index.html new file mode 100644 index 0000000000..5ddcbd518e --- /dev/null +++ b/docs/about/references/keywords/CONTROL_MARGIN/index.html @@ -0,0 +1,20 @@ + + + + + +CONTROL_MARGIN | eCalc™ Docs + + + + +
    +

    CONTROL_MARGIN

    MODELS / +[...] / +STAGES

    Description

    This keyword defines the surge control margin for a variable speed compressor chart.

    The CONTROL_MARGIN behaves as an alternate to the minimum flow line: The input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line.

    The CONTROL_MARGIN is given as a percentage or fraction (CONTROL_MARGIN_UNIT) of the rate difference between minimum- and maximum flow, +for the given speed. It is used to calculate the increase in minimum flow for each individual speed curve. +It is defined when setting up the stages in a Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    It is currently only possible to define a surge control margin for variable speed compressors.

    See Surge control margin for variable speed compressor chart for more details.

    Use in Variable speed compressor train model

    Format

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    ....

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20
    COMPRESSOR_CHART: 1_stage_chart
    CONTROL_MARGIN: 0.1
    CONTROL_MARGIN_UNIT: FRACTION
    ....

    Use in Variable speed compressor train model with multiple streams and pressures

    Format

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STREAMS:
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING # NB: No fluid definition for outgoing streams!
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    CONTROL_MARGIN: 10
    CONTROL_MARGIN_UNIT: PERCENTAGE
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    CONTROL_MARGIN: 15
    CONTROL_MARGIN_UNIT: PERCENTAGE
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html b/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html new file mode 100644 index 0000000000..fcc3919905 --- /dev/null +++ b/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html @@ -0,0 +1,18 @@ + + + + + +CONTROL_MARGIN_UNIT | eCalc™ Docs + + + + +
    +

    CONTROL_MARGIN_UNIT

    MODELS / +[...] / +STAGES

    Description

    This keyword defines the unit of the surge control margin for a variable speed compressor chart.

    The CONTROL_MARGIN_UNIT is given as a percentage or fraction of the rate difference between minimum- and maximum flow.

    It is defined when setting up the stages in a Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    It is currently only possible to define a surge control margin for variable speed compressors.

    See Surge control margin for variable speed compressor chart for more details.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    ....

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20
    COMPRESSOR_CHART: 1_stage_chart
    CONTROL_MARGIN: 0.1
    CONTROL_MARGIN_UNIT: FRACTION
    ....
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CROSSOVER/index.html b/docs/about/references/keywords/CROSSOVER/index.html new file mode 100644 index 0000000000..1599977573 --- /dev/null +++ b/docs/about/references/keywords/CROSSOVER/index.html @@ -0,0 +1,20 @@ + + + + + +CROSSOVER | eCalc™ Docs + + + + +
    +

    CROSSOVER

    INSTALLATIONS / +[...] / ENERGY_USAGE_MODEL / +OPERATIONAL_SETTINGS / CROSSOVER

    RequiredChild ofChildren/Options
    YesOPERATIONAL_SETTINGSNone

    Description

    CROSSOVER specifies what rates will be crossed over from one consumer to another if rate capacity is exceed. +If the energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. +To avoid loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower pressure, but not possible to "pressure up" in the crossover flow line. Some examples show how the crossover logic works:

    Crossover is given as and list of integer values for the first position is the first consumer, second position is the second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over possible. Note that we use 1-index here.

    Example

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    ...
    CROSSOVER: [3, 3, 0]
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CURVE/index.html b/docs/about/references/keywords/CURVE/index.html new file mode 100644 index 0000000000..cf3ee291b3 --- /dev/null +++ b/docs/about/references/keywords/CURVE/index.html @@ -0,0 +1,17 @@ + + + + + +CURVE | eCalc™ Docs + + + + +
    +

    CURVE

    Description

    When using a detailed single speed compressor model, it is necessary to specify the single speed COMPRESSOR CHART. This can be defined from a .csv file, or it can be defined directly in the YAML file. +In either case, the keyword CURVE needs to be used. If a .csv file is being used, under the CURVE keyword, FILE must be used. If specified directly in the YAML file, SPEED, RATE, HEAD and EFFICIENCY must be defined.

    Format

    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>

    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - FILE: <filepath to compressor curve>

    Example

    MODELS:
    - NAME: predefined_single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]

    - NAME: compressor_chart
    TYPE: COMPRESSOR_CHART
    ...
    CURVE:
    - FILE: compressor_chart.csv
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/CURVES/index.html b/docs/about/references/keywords/CURVES/index.html new file mode 100644 index 0000000000..58a2aa5073 --- /dev/null +++ b/docs/about/references/keywords/CURVES/index.html @@ -0,0 +1,17 @@ + + + + + +CURVES | eCalc™ Docs + + + + +
    +

    CURVES

    Description

    When using a detailed variable speed compressor model, it is necessary to specify the variable speed COMPRESSOR CHART. This can be defined from a .csv file, or it can be defined directly in the YAML file. +In either case, the keyword CURVES needs to be used, and curves for at least two different speeds must be defined. If a .csv file is being used, under the CURVES keyword, FILE must be used. If specified directly in the YAML file, SPEED, RATE, HEAD and EFFICIENCY must be defined for each speed.

    Format

    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>

    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - FILE: <filepath to compressor curve>

    Example

    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 9886
    RATE: [3708, 4502, 4993.6, 5507, 5924]
    HEAD: [13845, 13182, 12425, 11276, 10054]
    EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]

    - NAME: compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - FILE: compressor_chart.csv
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/DIRECT_EMITTERS/index.html b/docs/about/references/keywords/DIRECT_EMITTERS/index.html new file mode 100644 index 0000000000..d5d5d11d37 --- /dev/null +++ b/docs/about/references/keywords/DIRECT_EMITTERS/index.html @@ -0,0 +1,20 @@ + + + + + +DIRECT_EMITTERS | eCalc™ Docs + + + + +
    +

    DIRECT_EMITTERS

    INSTALLATIONS / +DIRECT_EMITTERS

    RequiredChild ofChildren/Options
    YesINSTALLATIONSNAME
    EMISSION_NAME
    CATEGORY
    EMITTER_MODEL

    Description

    The DIRECT_EMITTERS keyword covers the direct emissions on the installation +that are not consuming energy. The attributes NAME, +EMISSION_NAME, CATEGORY and +EMITTER_MODEL are required.

    Format

    DIRECT_EMITTER:
    - NAME: <emitter name>
    EMISSION_NAME: <emission name>
    CATEGORY: <category>
    EMITTER_MODEL: <emitter model>

    Example

    DIRECT_EMITTER:
    - NAME: SomeDirectEmitter
    EMISSION_NAME: CH4
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    ...
    - NAME: SomeOtherDirectEmitter
    EMISSION_NAME: C2H6
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html b/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html new file mode 100644 index 0000000000..91b64bbff3 --- /dev/null +++ b/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html @@ -0,0 +1,21 @@ + + + + + +DISCHARGE_PRESSURE | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html b/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..381f9c1770 --- /dev/null +++ b/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html @@ -0,0 +1,20 @@ + + + + + +DOWNSTREAM_PRESSURE_CONTROL | eCalc™ Docs + + + + +
    +

    DOWNSTREAM_PRESSURE_CONTROL

    MODELS / +[...] / +INTERSTAGE_CONTROL_PRESSURE +/ DOWNSTREAM_PRESSURE_CONTROL

    Description

    This keyword is used only for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type. It is used within the INTERSTAGE_CONTROL_PRESSURE keyword.

    The pressure control method downstream (after) the interstage pressure is specified in this keyword. +For more explanation see Variable speed compressor train model with multiple streams and pressures.

    Format

    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/EFFICIENCY/index.html b/docs/about/references/keywords/EFFICIENCY/index.html new file mode 100644 index 0000000000..42f7be36c9 --- /dev/null +++ b/docs/about/references/keywords/EFFICIENCY/index.html @@ -0,0 +1,17 @@ + + + + + +EFFICIENCY | eCalc™ Docs + + + + +
    +

    EFFICIENCY

    Description

    EFFICIENCY is a keyword that is used defining PUMP and COMPRESSOR CHARTS. +Efficiency can either be given as a fraction or percentage.

    For compressors, it is used in two separate ways under the MODELS or section:

    • Defining the UNITS of EFFICIENCY
    • Defining the set of values for EFFICIENCY under CURVES section. Here, this must be given as a set of values whose length (number of variables) match the correlating HEAD and RATE values.

    For pumps, it is defined under the FACILITY_INPUTS section.

    Format

    COMPRESSORS

    MODELS:
    - NAME: <compressor chart name>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: <compressor chart type>
    UNITS:
    ...
    EFFICIENCY: <FRACTION or PERCENTAGE>
    CURVES:
    ...
    EFFICIENCY: <set of values>

    PUMPS

    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    ...
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>

    Example

    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/ELECTRICITY2FUEL/index.html b/docs/about/references/keywords/ELECTRICITY2FUEL/index.html new file mode 100644 index 0000000000..a155d08250 --- /dev/null +++ b/docs/about/references/keywords/ELECTRICITY2FUEL/index.html @@ -0,0 +1,23 @@ + + + + + +ELECTRICITY2FUEL | eCalc™ Docs + + + + +
    +

    ELECTRICITY2FUEL

    INSTALLATIONS / +GENERATORSETS / +ELECTRICITY2FUEL

    RequiredChild ofChildren/Options
    YesGENERATORSETSNone

    Description

    ELECTRICITY2FUEL specifies the correlation between the electric power +delivered and the fuel consumed by a generator set.

    note

    Note that this describes the relation for a set of generators and if there is more than one +generator, the power vs. fuel usually makes a "jump" when the capacity of the generator(s) is +exceeded and an additional generator is started.

    ELECTRICITY2FUEL may be modelled with a constant function through time or +with different power vs. fuel relations for different time intervals.

    Format

    ELECTRICITY2FUEL: <facility_input_reference>

    or

    ELECTRICITY2FUEL:
    <DATE>: <facility_input_reference_1>
    <DATE>: <facility_input_reference_2>

    Example

    Example 1

    ELECTRICITY2FUEL: generatorset_electricity_to_fuel_reference

    Example 2

    ELECTRICITY2FUEL:
    2001-01-01: generatorset_electricity_to_fuel_reference1
    2005-01-01: generatorset_electricity_to_fuel_reference2

    Where generatorset_electricity_to_fuel_reference<N> is a FACILITY_INPUTS +of TYPE ELECTRICITY2FUEL.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSIONS/index.html b/docs/about/references/keywords/EMISSIONS/index.html new file mode 100644 index 0000000000..910fb36a1b --- /dev/null +++ b/docs/about/references/keywords/EMISSIONS/index.html @@ -0,0 +1,21 @@ + + + + + +EMISSIONS | eCalc™ Docs + + + + +
    +

    EMISSIONS

    FUEL_TYPES / +EMISSIONS

    RequiredChild ofChildren/Options
    NoFUEL_TYPESFACTOR
    NAME
    QUOTA
    TAX

    Description

    In EMISSIONS one or more emissions related to the use of fuel is specified as +a list. Each emission entry is required to have a NAME and a FACTOR.

    The costs associated with emitting typically have two cost elements:

    • a quota price [NOK/ton] (based on emission mass) and,
    • a tax price [NOK/Sm3] based on fuel gas volume.

    The names and are chosen due to the CO2 emissions quota price (based on CO2 mass) and +the Norwegian CO2 tax

    In general, will be multiplied with the calculated emission volume while +will be multiplied with the calculated fuel volume to obtain the resulting taxation.

    The economical parameters are optional.

    Format

    EMISSIONS:
    - NAME: <name>
    FACTOR: <factor>
    TAX: <expression>
    QUOTA: <expression>

    Example

    For example, if you want to add CO2 emissions associated to the usage of a FUEL_TYPES +you write the following:

    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # [kg/Sm3]
    TAX: 1.5 # [NOK/Sm3]
    QUOTA: 240 # NOK/ton CO2
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSION_NAME/index.html b/docs/about/references/keywords/EMISSION_NAME/index.html new file mode 100644 index 0000000000..dfa21adb7b --- /dev/null +++ b/docs/about/references/keywords/EMISSION_NAME/index.html @@ -0,0 +1,17 @@ + + + + + +EMISSION_NAME | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSION_RATE/index.html b/docs/about/references/keywords/EMISSION_RATE/index.html new file mode 100644 index 0000000000..c547253214 --- /dev/null +++ b/docs/about/references/keywords/EMISSION_RATE/index.html @@ -0,0 +1,20 @@ + + + + + +EMISSION_RATE | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMITTER_MODEL/index.html b/docs/about/references/keywords/EMITTER_MODEL/index.html new file mode 100644 index 0000000000..ea05e00293 --- /dev/null +++ b/docs/about/references/keywords/EMITTER_MODEL/index.html @@ -0,0 +1,22 @@ + + + + + +EMITTER_MODEL | eCalc™ Docs + + + + +
    +

    EMITTER_MODEL

    INSTALLATIONS / +[...] / +EMITTER_MODEL

    RequiredChild ofChildren/Options
    NoDIRECT_EMITTERSEMISSION_RATE
    QUOTA

    Description

    The emitter model specifies the data to calculate the direct emissions on an installation. This data is used to set up +a function that may be evaluated for a set of time series and return a result including the emissions emitted and +the related cost of the emissions.

    The EMISSION_RATE describes the rate [kg/day] of emissions and +QUOTA specifies the cost of emission per rate of +emission [NOK/kg]. Both are required.

    Format

    EMITTER_MODEL:
    - EMISSION_RATE: <emission rate [kg/day]>
    QUOTA: <emission cost per emission [NOK/kg]>

    Example

    EMITTER_MODEL:
    - EMISSION_RATE: 4 # [kg/day]
    QUOTA: 10 # [NOK/kg]
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/END/index.html b/docs/about/references/keywords/END/index.html new file mode 100644 index 0000000000..d12415cae1 --- /dev/null +++ b/docs/about/references/keywords/END/index.html @@ -0,0 +1,18 @@ + + + + + +END | eCalc™ Docs + + + + +
    +

    END

    END

    RequiredChild ofChildren/Options
    NoNoneNone

    Description

    Global end date for eCalc to stop energy and emission calculations. It is recommended that you have control of which date you want data to be calculated and exported for.

    If you specify the end date as 2080-01-01, the last period to be calculated is 2079 is included in the output. The hours, minutes and seconds of the day are implicitly set to "00:00:00", so the counting ends at midnight on January 1st 2080 (2079-12-31 23:59:59).

    You can provide a date that is after the global time vector, but it is recommended to set it to the end of your timeseries data. Normally the timeseries do not provide this information directly. The last timestep provided in a timeseries is e.g. 2079-01-01, which would often mean that the data changed at that point, +and will e.g. be valid 1 year from then (if we work with YEARLY output frequency). To make sure that eCalc stops at the correct place, you should therefore specify the exclusive date of the data.

    The START keyword have similar behaviour.

    If END is not specified, eCalc will make an educated (but possibly incorrect) guess on when the output data should end.

    Format

    END: <YYYY-MM-DD>

    Example

    Given an input dataset from 01-01-2000 - 01-01-2040, ignoring the last 20 years of data +can be achieved as follows:

    END: 2020-01-01
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/ENERGYFUNCTION/index.html b/docs/about/references/keywords/ENERGYFUNCTION/index.html new file mode 100644 index 0000000000..eeeb33c786 --- /dev/null +++ b/docs/about/references/keywords/ENERGYFUNCTION/index.html @@ -0,0 +1,20 @@ + + + + + +ENERGYFUNCTION | eCalc™ Docs + + + + +
    +

    ENERGYFUNCTION

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +ENERGYFUNCTION

    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone

    Description

    This refers to an energy function model defined in either FACILITY INPUTS or in MODELS used for ENERGY USAGE MODEL. +The following attributes can be utilised:

    Format

    ENERGY_USAGE_MODEL:
    TYPE: <energy usage model type>
    ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>

    Example


    FACILITY_INPUTS:
    - NAME: compressor_model_reference
    TYPE: COMPRESSOR_TABULAR
    FILE: <file path>

    ...

    INSTALLATIONS:
    - NAME: InstallationA
    CATEGORY: FIXED
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: gensetA
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_model_reference
    ...

    FUELCONSUMERS:
    - NAME: compressor
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_model_reference
    ...

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html b/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html new file mode 100644 index 0000000000..580d6c149c --- /dev/null +++ b/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html @@ -0,0 +1,22 @@ + + + + + +ENERGY_USAGE_MODEL | eCalc™ Docs + + + + +
    +

    ENERGY_USAGE_MODEL

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL

    RequiredChild ofChildren/Options
    YesFUELCONSUMERSCOMPRESSORS
    CONSUMERSCONDITION
    CONDITIONS
    CONSUMPTION_RATE_TYPE
    DISCHARGE_PRESSURE
    ENERGYFUNCTION
    FLUID_DENSITY
    FUELRATE
    LOAD
    OPERATIONAL_SETTINGS
    POWERLOSSFACTOR
    PUMPS
    RATE
    SUCTION_PRESSURE
    TOTAL_SYSTEM_RATE
    TYPE
    VARIABLES

    Description

    The energy usage model specifies the data to calculate the energy usage of a consumer. This data is used to set up a +function that may be evaluated for a set of time series and returns a result including the calculated energy usage.

    The type of energy usage model is defined by TYPE, and which keywords are required/supported will be different +for each type. The available types are:

    Energy usage model types:

    For all types, the keywords CONDITION, CONDITIONS and POWERLOSSFACTOR are optional and supported, and these will act +on the calculated energy usage after the calculated energy usage from the model defined by TYPE.

    Temporal energy usage model

    It is possible to update the energy model within a consumer over time, as long as the +ENERGY_USAGE_MODEL stays within one type. The TYPE cannot change over time. In case TYPE evolution is needed, we recommend that you split the model into two CONSUMERS.

    ENERGY_USAGE_MODEL:
    2020-01-01:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference_initial
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    2022-01-01:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference_new
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/EXPRESSION/index.html b/docs/about/references/keywords/EXPRESSION/index.html new file mode 100644 index 0000000000..e03dd1352b --- /dev/null +++ b/docs/about/references/keywords/EXPRESSION/index.html @@ -0,0 +1,17 @@ + + + + + +EXPRESSION | eCalc™ Docs + + + + +
    +

    EXPRESSION

    VARIABLES / +EXPRESSION

    RequiredChild ofChildren/Options
    NoVARIABLESNone

    Description

    Expression for a variable<VARIABLES> using EXPRESSIONS

    Format

    EXPRESSION: <expression>

    Example

    With time series reference

    EXPRESSION: time_series_ref_1;vector_name_1 {+} time_series_ref_2;vector_name_2 {*} (time_series_ref_3;vector_name_3 > 0)

    With variable reference

    EXPRESSION: $var.variable_name1 {+} $var.variable_name2
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/EXTRAPOLATION/index.html b/docs/about/references/keywords/EXTRAPOLATION/index.html new file mode 100644 index 0000000000..0760217de5 --- /dev/null +++ b/docs/about/references/keywords/EXTRAPOLATION/index.html @@ -0,0 +1,19 @@ + + + + + +EXTRAPOLATION | eCalc™ Docs + + + + +
    +

    EXTRAPOLATION

    TIME_SERIES / +EXTRAPOLATION

    RequiredChild ofChildren/Options
    N/ATIME_SERIESNone

    Description

    caution

    Only valid for TIME_SERIES of TYPE MISCELLANEOUS. For type +DEFAULT the keyword is not supported as input, and the functionality is defaulted to False.

    Defines whether the rates in the source should be set to 0 after the last time step (False), or equal +to value at last time step after the time interval (True).

    Format

    EXTRAPOLATION: <True/False>

    Requirements

    TYPE set toEXTRAPOLATION default
    DEFAULTalways False
    MISCELLANEOUSFalse

    Example

    See the TIME_SERIES time_series_format.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FACILITY_INPUTS/index.html b/docs/about/references/keywords/FACILITY_INPUTS/index.html new file mode 100644 index 0000000000..913525af17 --- /dev/null +++ b/docs/about/references/keywords/FACILITY_INPUTS/index.html @@ -0,0 +1,21 @@ + + + + + +FACILITY_INPUTS | eCalc™ Docs + + + + +
    +

    FACILITY_INPUTS

    FACILITY_INPUTS

    RequiredChild ofChildren/Options
    YesNoneADJUSTMENT
    FILE
    HEAD_MARGIN
    TYPE

    Description

    This part of the setup defines input files that characterize various facility elements. Each facility element is +specified in a list. These are later used as input in the INSTALLATIONS part of the setup by referencing their +NAME.

    All facility inputs are in essence a CSV (Comma separated file) file that specifies input data to a model that +calculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple +supported types.

    Supported types

    The facility input type is defined using the TYPE keyword and defines the type of model applied +to the data in this file. The input files are in CSV (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file.

    The supported types are:

    • ELECTRICITY2FUEL
    • TABULAR
    • COMPRESSOR_TABULAR
    • PUMP_CHART_SINGLE_SPEED
    • PUMP_CHART_VARIABLE_SPEED

    See FACILITY INPUTS for details about each of the above supported types and their usage.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FACTOR/index.html b/docs/about/references/keywords/FACTOR/index.html new file mode 100644 index 0000000000..7a87fdeadc --- /dev/null +++ b/docs/about/references/keywords/FACTOR/index.html @@ -0,0 +1,22 @@ + + + + + +FACTOR | eCalc™ Docs + + + + +
    +

    FACTOR

    [...] / +FACTOR

    Description

    The keyword FACTOR can be used to add a multiplier. The +FACTOR keyword can be used in various places in the eCalc configuration file. +A factor can either be a number, or an expression <Expressions>.

    Warning

    The FACTOR keyword will have slightly different behavior depending on in which keyword +it is used. Carefully read the documentation below!

    Use in ADJUSTMENT

    Adjustment of input data with a factor.

    Use in EMISSIONS

    A single value with unit kg/Sm3 defines the CO2 factor for the fuel gas used on the +installation. That is, how many kilograms of CO2 are emitted

    Format

    FACTOR: <VALUE>

    Example

    Use in ADJUSTMENT

    Say you have input that that is of by 3% percentage. +You could fix this like:

    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    FACTOR: 1.03

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    Eadjusted=1.03×EoriginalE_\mathrm{adjusted} = 1.03 \times E_\mathrm{original}

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    Use in EMISSIONS

    Say your fuel emits 2.5 kg CO2 per Sm3 of burned fuel, you can model this like:

    FUEL_TYPES:
    - NAME: my_fuel
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # [kg/Sm3]
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FILE/index.html b/docs/about/references/keywords/FILE/index.html new file mode 100644 index 0000000000..c4ede28d73 --- /dev/null +++ b/docs/about/references/keywords/FILE/index.html @@ -0,0 +1,17 @@ + + + + + +FILE | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FLUID_DENSITY/index.html b/docs/about/references/keywords/FLUID_DENSITY/index.html new file mode 100644 index 0000000000..74a5145270 --- /dev/null +++ b/docs/about/references/keywords/FLUID_DENSITY/index.html @@ -0,0 +1,20 @@ + + + + + +FLUID_DENSITY | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FLUID_MODEL/index.html b/docs/about/references/keywords/FLUID_MODEL/index.html new file mode 100644 index 0000000000..cce314bcc2 --- /dev/null +++ b/docs/about/references/keywords/FLUID_MODEL/index.html @@ -0,0 +1,16 @@ + + + + + +FLUID_MODEL | eCalc™ Docs + + + + +
    +

    FLUID_MODEL

    Description

    This keyword is necessary when defining a compressor model. It relates to a defined fluid model in the MODELS section. How a fluid model is defined is described in further detail in FLUID MODEL.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: <compressor model type>
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...

    Example

    MODELS:
    - NAME: fluid_model
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM

    - NAME: single_speed_compressor
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUEL/index.html b/docs/about/references/keywords/FUEL/index.html new file mode 100644 index 0000000000..e354f03649 --- /dev/null +++ b/docs/about/references/keywords/FUEL/index.html @@ -0,0 +1,19 @@ + + + + + +FUEL | eCalc™ Docs + + + + +
    +

    FUEL

    ... / +FUEL

    Description

    The FUEL keyword defines the fuel type that can be used in +INSTALLATIONS, GENERATORSETS, or FUELCONSUMERS. +It can be set directly and used for the entire time interval, or it can be set differently for different time intervals.

    Format

    FUEL: <fuel_type>

    or

    FUEL:
    <DATE>: <fuel_type>
    <DATE>: <fuel_type>

    Example

    Constant fuel type

    FUEL: fuel_gas

    Time-varying fuel type

    This example assumes that two fuels have been defined: fuel_gas and diesel.

    FUEL:
    1994-01-01: fuel_gas
    2000-01-01: diesel
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUELCONSUMERS/index.html b/docs/about/references/keywords/FUELCONSUMERS/index.html new file mode 100644 index 0000000000..07fa30e402 --- /dev/null +++ b/docs/about/references/keywords/FUELCONSUMERS/index.html @@ -0,0 +1,22 @@ + + + + + +FUELCONSUMERS | eCalc™ Docs + + + + +
    +

    FUELCONSUMERS

    INSTALLATIONS / +FUELCONSUMERS

    Description

    The FUELCONSUMERS keyword covers the fuel consumers on the installation +that are not generators. The attributes NAME, +ENERGY_USAGE_MODEL and +CATEGORY are required, while +FUEL is optional and may be used to +override the installation's default fuel type.

    Format

    FUELCONSUMERS:
    - NAME: <consumer name>
    CATEGORY: <category>
    ENERGY_USAGE_MODEL: <energy usage model>
    FUEL: <fuel specification>

    Example

    FUELCONSUMERS:
    - NAME: CompressorFuelConsumer
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    - NAME: FlareFuelConsumer
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    ...
    - NAME: SomeOtherFuelConsumer
    CATEGORY: MISCELLANEOUS
    FUEL: fuel_gas
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUELRATE/index.html b/docs/about/references/keywords/FUELRATE/index.html new file mode 100644 index 0000000000..4bdbe141c7 --- /dev/null +++ b/docs/about/references/keywords/FUELRATE/index.html @@ -0,0 +1,21 @@ + + + + + +FUELRATE | eCalc™ Docs + + + + +
    +

    FUELRATE

    INSTALLATIONS +/ +[...] / +ENERGY_USAGE_MODEL / +FUELRATE

    Description

    Used for direct fuel energy usage models<ENERGY_USAGE_MODEL> to define fuel consumption directly with an +expression <Expressions>

    Format

    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: <fuel rate expression [m3/day]>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION: <condition expression>

    Example

    Constant fuel rate:

    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: 100000 # [m3/day]

    Fuel rate varying in time:

    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: fueldata;FUEL_RATE # [m3/day]
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUEL_TYPES/index.html b/docs/about/references/keywords/FUEL_TYPES/index.html new file mode 100644 index 0000000000..ff3edc86f1 --- /dev/null +++ b/docs/about/references/keywords/FUEL_TYPES/index.html @@ -0,0 +1,21 @@ + + + + + +FUEL_TYPES | eCalc™ Docs + + + + +
    +

    FUEL_TYPES

    FUEL_TYPES

    Description

    This part of the setup specifies the various fuel types and associated emissions +used in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the +INSTALLATIONS part of the setup by its name.

    A fuel type can have a fuel-cost PRICE associated with +its use. The use of fuel can lead to one or more emission types, specified in EMISSIONS, +which in turn can have associated costs. +You can optionally specify a CATEGORY.

    See FUEL TYPES for more details about usage.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/GENERATORSETS/index.html b/docs/about/references/keywords/GENERATORSETS/index.html new file mode 100644 index 0000000000..9ee6ca660a --- /dev/null +++ b/docs/about/references/keywords/GENERATORSETS/index.html @@ -0,0 +1,22 @@ + + + + + +GENERATORSETS | eCalc™ Docs + + + + +
    +

    GENERATORSETS

    INSTALLATIONS / +GENERATORSETS

    Description

    Under GENERATORSETS one or +several generator sets (a 'set' of an engine of some sort and a generator) are specified in a list. +Each generator set requires three sub-keywords, ELECTRICITY2FUEL and +CONSUMERS and CATEGORY.

    This keyword is optional. However, the only requirement is that each +installation must have at least one of GENERATORSETS +and FUELCONSUMERS.

    See GENERATOR SETS for more details about usage.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/HCEXPORT/index.html b/docs/about/references/keywords/HCEXPORT/index.html new file mode 100644 index 0000000000..89365c76e3 --- /dev/null +++ b/docs/about/references/keywords/HCEXPORT/index.html @@ -0,0 +1,22 @@ + + + + + +HCEXPORT | eCalc™ Docs + + + + +
    +

    HCEXPORT

    INSTALLATIONS / +HCEXPORT

    Description

    HCEXPORT defines the export of hydrocarbons as a number of oil equivalents in Sm3. +This keyword is required for the output of emission intensity (i.e., kg CO2/boe). +This could be a single time series variable or an expression <expressions> containing multiple time series variables. +Typically it would be the sum of exported oil and gas in units of oil equivalents.

    What is hydrocarbon export?

    Hydrocarbon export is the oil equivalents of what is exported for sale and only these volumes should +be included here. I.e., it is important to distinguish between produced gas and sales gas. +See GL0093 in Docmap.

    Format

    HCEXPORT: <EXPRESSION>  # [Sm3/day]

    or

    HCEXPORT:
    <DATE>: <EXPRESSION> # [Sm3/day]
    <DATE>: <EXPRESSION> # [Sm3/day]

    Example

    Basic usage

    HCEXPORT: SIM;OIL_PROD {+} SIM;GAS_SALES {/} 1000

    With time dependency

    In this example the gas export starts later than production start up:

    HCEXPORT:
    2001-01-01: SIM1;OIL_PROD
    2005-01-01: SIM2:OIL_PROD {+} SIM1;GAS_SALES {/} 1000

    Full example

    Example showing HCEXPORT the modelling hierarchy:

    INSTALLATIONS:
    - NAME: installation_A
    FUEL: fuel_gas
    HCEXPORT: SIM;OIL_PROD:FIELD_A {+} SIM;GAS_SALES:FIELD_A {/} 1000
    GENERATORSETS:
    <Data for the generator sets to be put her>
    FUELCONSUMERS:
    <Data for the fuel consumers to be put here>
    - NAME: installation_B
    HCEXPORT: SIM;OIL_PROD:FIELD_B {+} SIM;GAS_SALES:FIELD_B{/} 1000
    GENERATORSETS:
    <Data for the generator sets to be put her>
    FUELCONSUMERS:
    <Data for the fuel consumers to be put here>
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/HEAD/index.html b/docs/about/references/keywords/HEAD/index.html new file mode 100644 index 0000000000..b2796eca75 --- /dev/null +++ b/docs/about/references/keywords/HEAD/index.html @@ -0,0 +1,17 @@ + + + + + +HEAD | eCalc™ Docs + + + + +
    +

    HEAD

    Description

    HEAD is a keyword that is used defining PUMP and COMPRESSOR CHARTS. +Head can either be given as a M, KJ_PER_KG, JOULE_PER_KG.

    For compressors, it is used in two separate ways under the MODELS or section:

    • Defining the UNITS of HEAD
    • Defining the set of values for HEAD under CURVES section. Here, this must be given as a set of values whose length (number of variables) match the correlating EFFICIENCY and RATE values.

    For pumps, it is defined under the FACILITY_INPUTS section.

    Format

    COMPRESSORS

    MODELS:
    - NAME: <name of chart, for reference>
    ...
    UNITS:
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    ...
    ....

    PUMPS

    FACILITY_INPUTS:
    - NAME: <pump chart name>
    ...
    UNITS:
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    ...

    Example

    COMPRESSORS

    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/HEAD_MARGIN/index.html b/docs/about/references/keywords/HEAD_MARGIN/index.html new file mode 100644 index 0000000000..d8f6e3181a --- /dev/null +++ b/docs/about/references/keywords/HEAD_MARGIN/index.html @@ -0,0 +1,23 @@ + + + + + +HEAD_MARGIN | eCalc™ Docs + + + + +
    +

    HEAD_MARGIN

    FACILITY_INPUTS / +HEAD_MARGIN

    Description

    When calibrating pump charts to historical data, the head values at maximum speed +could be put in the cloud of data to be unbiased. However, eCalc will treat all +head values above the maximum defined area in the chart infeasible (i.e., +outside pump capacity). To mitigate this when running through historical data for +power calibration, one can adjust the head margin with this keyword.

    Calculated head values above maximum head values from the chart will be set equal to +maximum head values before power calculations if they are within the margin given. +Calculated head values larger than maximum + margin will still be infeasible.

    Format

    The head margin can be specified in mlc (meter liquid column):

    HEAD_MARGIN: <margin>

    Example

        NAME: pump_name
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    FILE: <path_to_chart_file>.csv
    HEAD_MARGIN: 10.0
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html b/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html new file mode 100644 index 0000000000..eb79ceeeaa --- /dev/null +++ b/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html @@ -0,0 +1,18 @@ + + + + + +INFLUENCE_TIME_VECTOR | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/INLET_TEMPERATURE/index.html b/docs/about/references/keywords/INLET_TEMPERATURE/index.html new file mode 100644 index 0000000000..d4799957a7 --- /dev/null +++ b/docs/about/references/keywords/INLET_TEMPERATURE/index.html @@ -0,0 +1,16 @@ + + + + + +INLET_TEMPERATURE | eCalc™ Docs + + + + +
    +

    INLET_TEMPERATURE

    MODELS / INLET_TEMPERATURE

    RequiredChild ofChildren/Options
    YesMODELSNone

    Description

    This is a keyword used in COMPRESSOR MODELLING. It is a necessary input parameter which describes the inlet temperature to a compressor stage. Temperature must be given in oC.

    As of now, this is can only be given as a single value. Time-series are not accepted here.

    Format

    MODELS:
    - NAME: <model name>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    ...

    Example

    MODELS:
    - NAME: compressor_train
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20 #degC
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/INSTALLATIONS/index.html b/docs/about/references/keywords/INSTALLATIONS/index.html new file mode 100644 index 0000000000..5ec56b400d --- /dev/null +++ b/docs/about/references/keywords/INSTALLATIONS/index.html @@ -0,0 +1,17 @@ + + + + + +INSTALLATIONS | eCalc™ Docs + + + + +
    +

    INSTALLATIONS

    INSTALLATIONS

    Description

    In INSTALLATIONS the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation.

    The structure of the keywords under installations +is linked to the structure in the general consumer overview for an installation.

    See INSTALLATIONS for more details about usage.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/INTERPOLATION_TYPE/index.html b/docs/about/references/keywords/INTERPOLATION_TYPE/index.html new file mode 100644 index 0000000000..75441561a1 --- /dev/null +++ b/docs/about/references/keywords/INTERPOLATION_TYPE/index.html @@ -0,0 +1,27 @@ + + + + + +INTERPOLATION_TYPE | eCalc™ Docs + + + + +
    +

    INTERPOLATION_TYPE

    TIME_SERIES / +INTERPOLATION_TYPE

    New in v8.1, previously known as RATE_INTERPOLATION_TYPE that was renamed to INTERPOLATION_TYPE.

    Description

    Caution

    Only valid for CSV data of source MISCELLANEOUS. For TIME_SERIES of TYPE +DEFAULT the keyword is not allowed as input. The following applies:

    • MISCELLANEOUS: Interpolation type is mandatory.
    • DEFAULT: Interpolation type not allowed. Default RIGHT is used.
    Caution

    Different data types may require different types of interpolation. While reservoir rates are +typically interpolated RIGHT or LEFT, other data such as pressure is often interpolated +linearly (LINEAR). Data that should be interpolated differently must be specified in +different input files, as it is not possible to have multiple interpolation types for vectors +within the same file.

    Rates are given at defined time steps in the data source but are in essence valid for a time +interval. The INTERPOLATION_TYPE +will determine how rates are interpolated between the given time steps.

    • LEFT: The rate given at the current time step is defining the rate in the time interval between the current and +previous time step. This is in data science also known as backwards filling of missing values.
    • RIGHT: The rate given at the current time step is defining the rate in the time interval between the current and +next time step. This is in data science also known as forward filling of missing values.
    • LINEAR: The rate will be linearly interpolated between the time steps.

    The plot below shows how the different choices for INTERPOLATION_TYPE works in practice.

    Format

    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>

    Requirements

    INTERPOLATION_TYPE has to be specified if +TYPE is set to MISCELLANEOUS.

    INTERPOLATION_TYPE can not be specified if TYPE is set to DEFAULT.

    Example

    See the TIME_SERIES time_series_format.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html b/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html new file mode 100644 index 0000000000..20bef03d10 --- /dev/null +++ b/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html @@ -0,0 +1,21 @@ + + + + + +INTERSTAGE_CONTROL_PRESSURE | eCalc™ Docs + + + + +
    +

    INTERSTAGE_CONTROL_PRESSURE

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / [...] / +INTERSTAGE_CONTROL_PRESSURE

    Description

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type, and it is used in two separate sections:

    • MODELS - to define the upstream and downstream pressure control methods
    • ENERGY_USAGE_MODEL - to define the interstage pressure

    Use in MODELS

    note

    This keyword cannot be specified for the first stage, and it may only be used once in a given compression train.

    Under the INTERSTAGE_CONTROL_PRESSURE keyword, the UPSTREAM_PRESSURE_CONTROL and DOWNSTREAM_PRESSURE_CONTROL keywords can be specified.

    Format

    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...

    The reason why upstream and downstream pressure control methods need to be specified is that the compression train is essentially split in two - before and after the interstage pressure. Thus, a control method for each "side" of the model needs to be defined. +See Variable speed compressor train model with multiple streams and pressures for more details.

    Use in ENERGY_USAGE_MODEL

    Within the ENERGY_USAGE_MODEL section (only when TYPE is set to VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES) the actual value for the interstage pressure is set in bar. +This can either be a single value or an EXPRESSION.

    Format

          - NAME: <reference name>
    ...
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure value/expression>
    ...

    Example

          - NAME: export_compressor
    ...
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    SUCTION_PRESSURE: 10 # bar
    INTERSTAGE_CONTROL_PRESSURE: 40 #bar
    DISCHARGE_PRESSURE: 120 #bar
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/LOAD/index.html b/docs/about/references/keywords/LOAD/index.html new file mode 100644 index 0000000000..8ada478c6d --- /dev/null +++ b/docs/about/references/keywords/LOAD/index.html @@ -0,0 +1,20 @@ + + + + + +LOAD | eCalc™ Docs + + + + +
    +

    LOAD

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +LOAD

    Description

    Used for direct load energy usage models<ENERGY_USAGE_MODEL> to define electrical power load directly +with an expression <Expressions>

    Format

    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: <load expression>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION: <condition expression>
    POWERLOSSFACTOR: <power loss factor (number)>

    Example

    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 10
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html b/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html new file mode 100644 index 0000000000..5c4f2754a3 --- /dev/null +++ b/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html @@ -0,0 +1,17 @@ + + + + + +LOWER_HEATING_VALUE | eCalc™ Docs + + + + +
    +

    LOWER_HEATING_VALUE

    Description

    LOWER_HEATING_VALUE is a required to be specified under the TURBINE_MODEL keyword. +This must be specified in MJ/Sm3

    This can only be inputted as a single value and dictates the quantity of thermal energy available after burning a standard cubic metre of fuel (natural gas in this gas).

    Format

    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>

    Example

    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html b/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html new file mode 100644 index 0000000000..93242103bf --- /dev/null +++ b/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html @@ -0,0 +1,18 @@ + + + + + +MAXIMUM_DISCHARGE_PRESSURE | eCalc™ Docs + + + + +
    +

    MAXIMUM_DISCHARGE_PRESSURE

    MODELS / +MAXIMUM_DISCHARGE_PRESSURE

    Description

    MAXIMUM_DISCHARGE_PRESSURE sets the highest possible discharge pressure that a compressor can deliver. +In reality, setting the maximum discharge pressure can be to avoid excessively high pressures which can be a safety concern on an installation.

    Functionality

    This is an optional setting and is only supported for SINGLE SPEED COMPRESSORS, and only if the PRESSURE_CONTROL is DOWNSTREAM_CHOKE.

    • If MAXIMUM_DISCHARGE_PRESSURE has been defined and if any of the inputted discharge pressures exceeds the maximum value, a ValueError message will be raised.
    • If any of the input rates and suction pressures result in a discharge pressure which is above the MAXIMUM_DISCHARGE_PRESSURE, the suction pressure will be reduced until the calculations provide a discharge pressure below the maximum value (assuming an upstream choke can handle this).
    • The outlet stream will then be further choked from the MAXIMUM_DISCHARGE_PRESSURE to the target discharge pressure using the DOWNSTREAM_CHOKE pressure control.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    PRESSURE_CONTROL: <DOWNSTREAM_CHOKE>
    MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model>
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/MODELS/index.html b/docs/about/references/keywords/MODELS/index.html new file mode 100644 index 0000000000..519c1e54f9 --- /dev/null +++ b/docs/about/references/keywords/MODELS/index.html @@ -0,0 +1,19 @@ + + + + + +MODELS | eCalc™ Docs + + + + +
    +

    MODELS

    MODELS

    Description

    Each element is specified in a list. These are later used as input to other models, or in the +INSTALLATIONS part of the setup by referencing their +NAME.

    This part of the setup specifies models not having any input data and/or multi level models, that is models which use +other models (from both MODELS and from FACILITY_INPUTS).

    Format

    MODELS:
    - NAME: <name of model, for reference>
    TYPE: <model type>
    <other keywords according to TYPE>

    Supported Model types

    The supported types are:

    • FLUID
    • COMPRESSOR_CHART
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • TURBINE
    • COMPRESSOR_WITH_TURBINE

    The documentation of each of these is found on the Compressor Modelling page.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/NAME/index.html b/docs/about/references/keywords/NAME/index.html new file mode 100644 index 0000000000..4c1336e261 --- /dev/null +++ b/docs/about/references/keywords/NAME/index.html @@ -0,0 +1,18 @@ + + + + + +NAME | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html b/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html new file mode 100644 index 0000000000..aa119396a1 --- /dev/null +++ b/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html @@ -0,0 +1,51 @@ + + + + + +OPERATIONAL_SETTINGS | eCalc™ Docs + + + + +
    +

    OPERATIONAL_SETTINGS

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +OPERATIONAL_SETTINGS

    Description

    Used to define the operational settings in an ENERGY_USAGE_MODEL +of type PUMP_SYSTEM or COMPRESSOR_SYSTEM.

    The rate [Sm3/day] through each consumer in the system may be specified in two different ways, either directly using +RATES, or by defining the rate fraction<RATE_FRACTIONS> for each consumer which is then multiplied with the +total system rate<TOTAL_SYSTEM_RATE>.

    The suction pressure may either be specified with SUCTION_PRESSURE +which will then be the common suction pressure for all consumers in the system. Alternatively, +SUCTION_PRESSURES may be used to specify one suction pressure expression per consumer.

    The discharge pressure may either be specified with DISCHARGE_PRESSURE +which will then be the common discharge pressure for all consumers in the system. Alternatively, +DISCHARGE_PRESSURES may be used to specify one discharge pressure expression per consumer.

    CROSSOVER may be used to specify if there are any available cross-overs between the consumers in this operational +setting.

    FLUID_DENSITIES may be used for pump systems to specify one fluid density expression per pump.

    For all keywords where there is one expression per consumer, RATES, RATE_FRACTIONS, SUCTION_PRESSURES, +DISCHARGE_PRESSURES and FLUID_DENSITIES, the expressions must be entered in a +list where the number of elements is equal to the number of compressors<COMPRESSORS>/pumps<PUMPS>

    RATES

    A list with one expression per consumer specifying the rate [Sm3/day] for each consumer. Use either RATES or RATE_FRACTIONS, +not both in one operational setting.

    RATE_FRACTIONS

    A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, +TOTAL_SYSTEM_RATE for the ENERGY_USAGE_MODEL +is also required. Use either RATES or RATE_FRACTIONS, not both in one operational setting.

    SUCTION_PRESSURES

    A list with one expression per consumer specifying the suction pressure for each consumer. Use either SUCTION_PRESSURES or +SUCTION_PRESSURE, not both in the same operational setting.

    Use SUCTION_PRESSURE to set the same suction pressure for all consumers in the system and +SUCTION_PRESSURES to specify one suction pressure expression per consumer.

    DISCHARGE_PRESSURES

    A list with one expression per consumer specifying the discharge pressure for each consumer. Use either DISCHARGE_PRESSURES +or DISCHARGE_PRESSURE, not both in the same operational setting.

    Use DISCHARGE_PRESSURE to set the same discharge pressure for all consumers in the system and +DISCHARGE_PRESSURES to specify one discharge pressure expression per consumer.

    FLUID_DENSITIES

    Only supported for energy usage models<ENERGY_USAGE_MODEL> of type PUMP_SYSTEM. +A list with one expression per consumer specifying the fluid density for each consumer. If used, it will over-ride +FLUID_DENSITY for the PUMP_SYSTEM.

    Use FLUID_DENSITY for the energy usage models<ENERGY_USAGE_MODEL> +to set one fixed fluid density for the entire system for all operational settings. Use +FLUID_DENSITIES for the operational setting<OPERATIONAL_SETTINGS> to vary the fluid density between consumers and operational settings.

    CROSSOVER

    CROSSOVER specifies if rates are to be crossed over to another consumer if rate capacity is exceeded. If the +energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the +consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. To avoid +loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure +at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" +consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower +pressure, but not possible to "pressure up" in the crossover flow line. +Some examples show how the crossover logic works:

    Crossover is given as and list of integer values for the first position is the first consumer, second position is the +second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over +possible. Note that we use 1-index here.

    Example 1:

    Two consumers where there is a cross-over such that if the rate for the first consumer exceeds its capacity, +the excess rate will be processed by the second consumer. The second consumer can not cross-over to anyone.

    CROSSOVER: [2, 0]

    Example 2:

    The first and second consumers may both send exceeding rate to the third consumer if their capacity is +exceeded.

    CROSSOVER: [3,3,0]

    Format

    Example

    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    - RATES:
    - SIM1;GAS_SALES
    - 0
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    - RATES:
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    CROSSOVER: [3, 3, 0]
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: (1000 {*} SIM1;WATER_PROD {+} 1050 {*} SIM2;WATER_PROD) {/} (SIM1;WATER_PROD {+} SIM2;WATER_PROD)
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITIES:
    - 1000
    - 1050
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/POWERLOSSFACTOR/index.html b/docs/about/references/keywords/POWERLOSSFACTOR/index.html new file mode 100644 index 0000000000..a4dea67761 --- /dev/null +++ b/docs/about/references/keywords/POWERLOSSFACTOR/index.html @@ -0,0 +1,21 @@ + + + + + +POWERLOSSFACTOR | eCalc™ Docs + + + + +
    +

    POWERLOSSFACTOR

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +POWERLOSSFACTOR

    Description

    A factor that may be added to account for power line losses. E.g. if you have a subsea installation with a power line to +another installation, there may be line losses. For a power line loss of 5%, POWERLOSSFACTOR +is set to 0.05 and the power required from the power source (generator set) will be

    powerrequired=powersubsea1POWERLOSSFACTORpower_{required} = \frac{power_{subsea}}{1-POWERLOSSFACTOR}

    where powersubseapower_{subsea} is the power calculated from the energy function (before power loss is taken into account).

    Format

    POWERLOSSFACTOR: <EXPRESSION>

    Example

    POWERLOSSFACTOR: 0.05
    POWERLOSSFACTOR: SIM1;POWERLOSS {+} 0.05
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html b/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html new file mode 100644 index 0000000000..323ce30452 --- /dev/null +++ b/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html @@ -0,0 +1,17 @@ + + + + + +POWER_ADJUSTMENT_CONSTANT | eCalc™ Docs + + + + +
    +

    POWER_ADJUSTMENT_CONSTANT

    MODELS / +POWER_ADJUSTMENT_CONSTANT

    Description

    Optional constant MW adjustment added to the model. Only added if (electrical) POWER > 0.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: <model type>
    ...
    POWER_ADJUSTMENT_CONSTANT: <value in MW>

    Example

    MODELS:
    - NAME: simple_compressor
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    ...
    POWER_ADJUSTMENT_CONSTANT: 10 #MW
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/PRESSURE_CONTROL/index.html b/docs/about/references/keywords/PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..a5fa780839 --- /dev/null +++ b/docs/about/references/keywords/PRESSURE_CONTROL/index.html @@ -0,0 +1,16 @@ + + + + + +PRESSURE_CONTROL | eCalc™ Docs + + + + +
    +

    PRESSURE_CONTROL

    Description

    PRESSURE_CONTROL is required when a compressor model is defined. This dictates how the compressor will be controlled, the method for pressure control are as follows:

    • DOWNSTREAM_CHOKE (default)
    • UPSTREAM_CHOKE
    • INDIVIDUAL_ASV_PRESSURE
    • INDIVIDUAL_ASV_RATE
    • COMMON_ASV
    • NONE

    Further description on how each pressure control method works can be found in COMPRESSOR MODELLING

    Format

    MODELS:
    - NAME: <model name>
    TYPE: <compressor model type>
    ...
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>

    Example

    MODELS:
    - NAME: variable_compressor
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    ...
    PRESSURE_CONTROL: INDIVIDUAL_ASV_PRESSURE
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/PRICE/index.html b/docs/about/references/keywords/PRICE/index.html new file mode 100644 index 0000000000..629eba6fa0 --- /dev/null +++ b/docs/about/references/keywords/PRICE/index.html @@ -0,0 +1,19 @@ + + + + + +PRICE | eCalc™ Docs + + + + +
    +

    PRICE

    FUEL_TYPES / +PRICE

    Description

    The fuel PRICE defines the fuel cost (or the sales value of produced gas used as fuel). +The unit of the price is NOK/Sm3. PRICE can either be a fixed number or an expression (time series). Thus, it can be decided if a constant price or a price varying with time is needed.

    Format

    FUEL_TYPES:
    - NAME: <name>
    PRICE: <price>

    Example

    Fixed price

    FUEL_TYPES:
    - NAME: diesel
    PRICE: 9000 # NOK/Sm3

    Variable price

    By making use of Expressions, you can model a varying fuel price through time:

    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # kg/Sm3
    TAX: FUEL_PRICE_FILENAME;FUEL_PRICE
    QUOTA: 240 # NOK/ton CO2

    where the file FUEL_PRICE_FILENAME.csv could have the following content:

    DATE,           FUEL_PRICE
    01.01.2017, 9000
    01.01.2018, 9500
    01.01.2019, 9300
    01.01.2020, 9800
    01.01.2021, 9900
    01.01.2022, 10000
    01.01.2023, 10500

    Make sure the file TYPE is set to FUEL_PRICE to have a default RIGHT +INTERPOLATION_TYPE.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/PUMPS/index.html b/docs/about/references/keywords/PUMPS/index.html new file mode 100644 index 0000000000..154805b744 --- /dev/null +++ b/docs/about/references/keywords/PUMPS/index.html @@ -0,0 +1,19 @@ + + + + + +PUMPS | eCalc™ Docs + + + + +
    +

    PUMPS

    INSTALLATIONS / [...] / +ENERGY_USAGE_MODEL / +PUMPS

    Description

    Used to define a list of pumps in a PUMP_SYSTEM ENERGY USAGE MODEL. Each pump is defined with a name and with a +facility input<FACILITY_INPUTS> reference to a pump type energy function.

    Format

    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: <name of compressor>
    CHART: <reference to pump model in facility inputs>

    Example 1

    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference

    Example 2 (Detailed)

    - NAME: waterinjection
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    2019-01-01:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a
    CHART: winj_pumpchart_PA03A
    - NAME: pump_b
    CHART: winj_pumpchart_PA03B
    - NAME: pump_c
    CHART: winj_pumpchart_PA03C
    - NAME: pump_d
    CHART: winj_pumpchart_PA03D
    - NAME: pump_e
    CHART: winj_pumpchart_PA03E
    TOTAL_SYSTEM_RATE: SIM8;WATER_INJ
    FLUID_DENSITY: 1030
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.2, 0.2, 0.2, 0.2, 0.2]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/QUOTA/index.html b/docs/about/references/keywords/QUOTA/index.html new file mode 100644 index 0000000000..985062225e --- /dev/null +++ b/docs/about/references/keywords/QUOTA/index.html @@ -0,0 +1,18 @@ + + + + + +QUOTA | eCalc™ Docs + + + + +
    +

    QUOTA

    [...] / +QUOTA

    Description

    Quota cost in NOK/Sm3 for the emission. QUOTA can either be a fixed number or an +expression (time series). With the use of an expression, a time series can be defined which can let the quota value vary over the model timespan.

    Format

    QUOTA: <quota>

    Example

    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # kg/Sm3
    QUOTA: 240 # NOK/ton CO2
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE/index.html b/docs/about/references/keywords/RATE/index.html new file mode 100644 index 0000000000..c895a80916 --- /dev/null +++ b/docs/about/references/keywords/RATE/index.html @@ -0,0 +1,20 @@ + + + + + +RATE | eCalc™ Docs + + + + +
    +

    RATE

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +RATE

    Description

    This can be used in two ways:

    Format

    RATE: <rate expression>
        - NAME: <model name>
    TYPE: <pump or compressor type>
    ...
    UNITS:
    RATE: <AM3_PER_HOUR>
    ...

    Example

    RATE: SIM1:GAS_PROD
        - NAME: pump
    TYPE: PUMP_CHART_VARIABLE_SPEED
    ...
    UNITS:
    RATE: <AM3_PER_HOUR>
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE_FRACTIONS/index.html b/docs/about/references/keywords/RATE_FRACTIONS/index.html new file mode 100644 index 0000000000..96003badd9 --- /dev/null +++ b/docs/about/references/keywords/RATE_FRACTIONS/index.html @@ -0,0 +1,16 @@ + + + + + +RATE_FRACTIONS | eCalc™ Docs + + + + +
    +

    RATE_FRACTIONS

    Description

    A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, TOTAL_SYSTEM_RATE for the ENERGY_USAGE_MODEL is also required. You can use either RATES or RATE_FRACTIONS; however, not both in one operational setting.

    When specifying the rate fraction, the first fraction will relate to the first operational unit mentioned - i.e. if a pump system has two pumps, the first pump mentioned will relate to the rate fraction.

    Note that in the case of a compressor, the same method is utilised for specifying rate fractions.

    Format

    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: <pump name>
    CHART: <chart reference>
    - NAME: <pump name>
    CHART: <chart reference>
    TOTAL_SYSTEM_RATE: <system rate>
    FLUID_DENSITY: <fluid density>
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: <[fraction 1, fraction 2]>
    ...
    - RATE_FRACTIONS: <[fraction 1, fraction 2]>
    ...

    Example

    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1030
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITIES:
    - 1000
    - 1050
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE_PER_STREAM/index.html b/docs/about/references/keywords/RATE_PER_STREAM/index.html new file mode 100644 index 0000000000..7eb23c23ca --- /dev/null +++ b/docs/about/references/keywords/RATE_PER_STREAM/index.html @@ -0,0 +1,20 @@ + + + + + +RATE_PER_STREAM | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/REGULARITY/index.html b/docs/about/references/keywords/REGULARITY/index.html new file mode 100644 index 0000000000..bdec65ac6a --- /dev/null +++ b/docs/about/references/keywords/REGULARITY/index.html @@ -0,0 +1,29 @@ + + + + + +REGULARITY | eCalc™ Docs + + + + +
    +

    REGULARITY

    INSTALLATIONS / +REGULARITY

    Description

    In eCalc™, consumers in an ENERGY USAGE MODEL are evaluated with the actual rate passing through them whilst +they are in operation. This actual rate is referred to as stream day (sd) rates. +Despite the consumers being evaluated with stream day rates, input files are often given in calender day (cd) rates. As expected from this definition, REGULARITY is closely related to the production efficiency (PE) of a facility.

    Stream day rates can be expressed as:

    stream day rate=calendar day rateregularitystream\ day\ rate = \frac{calendar\ day\ rate}{regularity}

    To give an example of this, an input file may have a gas export rate for a whole year. However, this rate will take into account any downtime for the facility. So in reality, this calender day rate is not the rate the compressor will process whilst in operation that year. This will rather be the higher stream day rate.

    An example of this can be seen in the figure below:

    Regularity work flow example

    For detailed modeling, it might be a better option to increase the resolution in the TIME_SERIES +inputs to capture down periods and variations in conditions rather than using regularity.

    note
    • Rates from reservoir simulations may be both stream day and calendar day.
    • If eCalc™ is used +without specifying REGULARITY, then regularity will default to 1.
    • All user defined input rates used in ENERGY_USAGE_MODEL are assumed to be calendar day rates.

    Use in a DIRECT ENERGY USAGE MODEL

    It should be noted that not all ENERGY USAGE MODELS are evaluated with stream day rates. +DIRECT ENERGY USAGE MODELS can be specified with the keyword CONSUMPTION_RATE_TYPE - where either CALENDAR_DAY or STREAM_DAY can be specified. +Note that the default input rate is STREAM_DAY rate - the opposite of the other models.

    For further details on stream day rate vs. calendar day rate, see CONSUMPTION_RATE_TYPE.

    ENERGY_USAGE_MODEL TypeCan use CONSUMPTION_RATE_TYPE?Evaluated rate type
    DIRECTStream/calendar day
    COMPRESSORStream day
    PUMPStream day
    COMPRESSOR_SYSTEMStream day
    PUMP_SYSTEMStream day
    TABULATEDStream day

    Reporting

    • All fuel rates, tax and emission results are reported in calendar days.
    • All power and volume rates results are reported in stream day rates. Note that the volume rates are only present in the .json file.

    The reason for reporting calendar day rate is due to the economic interpretation, or rather the lack of economic +interpretation when using fuel stream day rates. If we used stream day rates, we would in essence evaluate the process +unit as if it was running all the time. Typically all process units have some down time, and regularity is +on average something closer to 0.99 over a longer period such as a year.

    Format

    REGULARITY can be specified by a single number or as an expression.

    INSTALLATIONS:
    - NAME: <installation name>
    CATEGORY: <installation category>
    REGULARITY: <regularity expression>

    Example

    Constant regularity

    REGULARITY: 0.95

    Regularity from time series data

    REGULARITY: SIM1;REGULARITY

    Special: Combining calendar and stream day rates

    If there is a need to combine stream day and calendar day rates in an expression, +(or to use a stream day rate from a TIME_SERIES source), one can manually do +what is necessary to obtain calendar day rates by dividing by regularity.

    For example, combining a calendar day rate (SIM2;GAS_PROD_A) with stream day rate +(SIM1;GAS_PROD_B) on an installation with a fixed regularity of 0.95 can be done like:

    RATE: SIM2:GAS_PROD_A {+} SIM1;GAS_PROD_B {/} 0.95
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/STAGES/index.html b/docs/about/references/keywords/STAGES/index.html new file mode 100644 index 0000000000..5d747372ad --- /dev/null +++ b/docs/about/references/keywords/STAGES/index.html @@ -0,0 +1,23 @@ + + + + + +STAGES | eCalc™ Docs + + + + +
    +

    STAGES

    MODELS / +[...] / +STREAMS

    Description

    This keyword is used to define each stage in a compression train model. This is to be defined for all compressor models types.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: <compressor type>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    ....

    Use in VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES

    STAGES is a list of all the stages in the compressor train.

    • For each stage, a temperature in Celsius must be defined. It +is assumed that the gas is cooled down to this temperature ahead of the compression at this stage.
    • A reference to a +compressor chart needs to be specified for each stage.
    • For the first stage, it is required to have at least one stream of INGOING type. In addition, INTERSTAGE_CONTROL_PRESSURE cannot be used on the first stage.
    • Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream +will be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the +molar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will +be subtracted the rate of the outgoing stream.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    CONTROL_MARGIN: <Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/START/index.html b/docs/about/references/keywords/START/index.html new file mode 100644 index 0000000000..01c48cfa83 --- /dev/null +++ b/docs/about/references/keywords/START/index.html @@ -0,0 +1,23 @@ + + + + + +START | eCalc™ Docs + + + + +
    +

    START

    START

    Description

    The global start date for eCalc to begin energy and emission calculations. It is recommended that you have control +of which date you want data to be calculated and exported for, in particular when using LTP and FDE workflows.

    The is , meaning that if you specify 2020-01-01, the whole year of 2020 is included in the output. The hours, minutes and seconds +of the day are implicitly set to "00:00:00", so the counting starts from midnight on January 1st 2020.

    You can provide a date that is before the global time vector, but it is recommended to set it to the start of your timeseries data. Normally the +timeseries data provides this information directly, when specifying the first time step e.g. 2020-01-01, meaning that the data is valid from January 1st 2020, +but data by default has (INTERPOLATION_TYPE), which means that it backfills data, and then we will know how far back +to backfill data (ie defines this for the first period).

    The cousin of is END and have similar behaviour, but check the reference for details, to make sure you have the correct understanding.

    If is not specified, eCalc will make and educated GUESS on when the output data should start, but that may be incorrect, therefore it is recommended that you +stay in control of that to make sure you get correct output.

    Format

    START: <YYYY-MM-DD>

    Example

    Given an input dataset from 01-01-2000 - 01-01-2040, ignoring the first 20 years of data +can be achieved as follows:

    START: 2020-01-01
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/STREAM/index.html b/docs/about/references/keywords/STREAM/index.html new file mode 100644 index 0000000000..8607c740bd --- /dev/null +++ b/docs/about/references/keywords/STREAM/index.html @@ -0,0 +1,18 @@ + + + + + +STREAM | eCalc™ Docs + + + + +
    +

    STREAM

    MODELS / +[...] / STAGES +STREAMS

    note

    This keyword is not to be confused with STREAMS - which is also utilised for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES

    Description

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES model type and is used under the STAGES keyword.

    This is used to refer a STAGE to a previously defined STREAMS.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/STREAMS/index.html b/docs/about/references/keywords/STREAMS/index.html new file mode 100644 index 0000000000..0ea61cab83 --- /dev/null +++ b/docs/about/references/keywords/STREAMS/index.html @@ -0,0 +1,18 @@ + + + + + +STREAMS | eCalc™ Docs + + + + +
    +

    STREAMS

    MODELS / +[...] / +STREAMS

    Description

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES model type.

    STREAMS is a list of all in- and out-going streams for the compressor train.

    • The same equation of state (EOS) must be used for each INGOING stream fluid models
    • OUTGOING fluid models cannot be specified.

    Format

    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING
    ...

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/SUCTION_PRESSURE/index.html b/docs/about/references/keywords/SUCTION_PRESSURE/index.html new file mode 100644 index 0000000000..92e44bb09f --- /dev/null +++ b/docs/about/references/keywords/SUCTION_PRESSURE/index.html @@ -0,0 +1,22 @@ + + + + + +SUCTION_PRESSURE | eCalc™ Docs + + + + +
    +

    SUCTION_PRESSURE

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +[...] / +SUCTION_PRESSURE

    Description

    Used to define the suction pressure for some ENERGY_USAGE_MODEL +types and in OPERATIONAL_SETTINGS using +a fixed value or an expression. If an expression is used, a time series can be used so that the suction pressure of the unit can vary over the lifespan of the model.

    Note that pressure values must be inputted in bar.

    Format

    SUCTION_PRESSURE: <suction pressure value/expression>

    Example

    SUCTION_PRESSURE: 10 
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/TAX/index.html b/docs/about/references/keywords/TAX/index.html new file mode 100644 index 0000000000..6201a15d34 --- /dev/null +++ b/docs/about/references/keywords/TAX/index.html @@ -0,0 +1,20 @@ + + + + + +TAX | eCalc™ Docs + + + + +
    +

    TAX

    FUEL_TYPES / +EMISSIONS / +TAX

    Description

    Tax is payable in NOK/Sm3 for the emission. TAX can either be a fixed number or an +expression <Expressions>.

    Format

    EMISSIONS:
    - NAME: <name>
    FACTOR: <factor>
    TAX: <tax>

    Example

    Fixed tax

    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # [kg/Sm3]
    TAX: 1.5 # [NOK/Sm3]

    Variable tax

    By making use of Expressions, you can model a varying tax price through time:

    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # [kg/Sm3]
    TAX: TAX_FILENAME;TAX
    QUOTA: 240 # [NOK/ton]

    where the file TAX_FILENAME.csv could have the following content:

    DATE,           TAX
    01.01.2017, 1.5
    01.01.2018, 1.6
    01.01.2019, 1.7
    01.01.2020, 1.8
    01.01.2021, 1.9
    01.01.2022, 2.0
    01.01.2023, 2.1

    Make sure the file TYPE is set to EMISSION_TAX_PER_FUEL_VOLUME to have a default RIGHT +INTERPOLATION_TYPE.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/TIME_SERIES/index.html b/docs/about/references/keywords/TIME_SERIES/index.html new file mode 100644 index 0000000000..5980b2805f --- /dev/null +++ b/docs/about/references/keywords/TIME_SERIES/index.html @@ -0,0 +1,23 @@ + + + + + +TIME_SERIES | eCalc™ Docs + + + + +
    +

    TIME_SERIES

    TIME_SERIES /

    Description

    This keyword defines the inputs for time dependent variables, or "reservoir +variables". For many fields, this may be only one reservoir simulation model. But in some +cases, one might have several sources for reservoir and other relevant time series variables.

    For example, a field may have a reservoir simulation model for some areas and decline curves in other area of +the reservoir. There may also be tie-ins which are affecting the energy/emissions on the field +installations. Also, there may be time profiles for fuel prices, emission tax, etc. +Therefore, a set of sources may be specified with a name, path to data and type. The name is +later referred to in the system of energy consumers defined under INSTALLATIONS.

    Reservoir variables and other time varying data not coming from a reservoir simulation model can +be specified in a CSV file.

    See TIME SERIES for more details about usage.

    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html b/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html new file mode 100644 index 0000000000..c594746f35 --- /dev/null +++ b/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html @@ -0,0 +1,19 @@ + + + + + +TOTAL_SYSTEM_RATE | eCalc™ Docs + + + + +
    +

    TOTAL_SYSTEM_RATE

    INSTALLATIONS / [...] / +ENERGY_USAGE_MODEL / +TOTAL_SYSTEM_RATE

    Description

    Used to define the total system rate [Sm3/day] for ENERGY_USAGE_MODEL of type COMPRESSOR_SYSTEM +and PUMP_SYSTEM.

    Format

    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system [Sm3/day]>
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>

    Example

    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html b/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html new file mode 100644 index 0000000000..8956a3fd8e --- /dev/null +++ b/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html @@ -0,0 +1,16 @@ + + + + + +TURBINE_EFFICIENCIES | eCalc™ Docs + + + + +
    +

    TURBINE_EFFICIENCIES

    Description

    TURBINE_EFFICIENCIES is a required to be specified under the TURBINE_MODEL keyword.

    This must be specified as a fraction and must have equal length to the corresponding TURBINE_LOAD values.

    Format

    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>

    Example

    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_LOAD/index.html b/docs/about/references/keywords/TURBINE_LOAD/index.html new file mode 100644 index 0000000000..aed6f5e2ea --- /dev/null +++ b/docs/about/references/keywords/TURBINE_LOAD/index.html @@ -0,0 +1,16 @@ + + + + + +TURBINE_LOAD | eCalc™ Docs + + + + +
    +

    TURBINE_LOAD

    Description

    TURBINE_LOAD is a required to be specified under the TURBINE_MODEL keyword.

    This must be specified in MW (Mega-Watts) and must have equal length to the corresponding TURBINE_EFFICIENCY values.

    Format

    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    TURBINE_LOADS: <list of power values in mega watt>

    Example

    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_MODEL/index.html b/docs/about/references/keywords/TURBINE_MODEL/index.html new file mode 100644 index 0000000000..b3e7b4ac58 --- /dev/null +++ b/docs/about/references/keywords/TURBINE_MODEL/index.html @@ -0,0 +1,16 @@ + + + + + +TURBINE_MODEL | eCalc™ Docs + + + + +
    +

    TURBINE_MODEL

    Description

    When using a TURBINE it is required for a TURBINE_MODEL to be specified. This is done under the MODELS section.

    A turbine model describes a gas-fired turbine that is coupled to a compressor or compression train. It is specified in a similar way to a GENERATORSET. TURBINE_LOAD, TURBINE_EFFICIENCY and LOWER_HEATING_VALUE needs to be inputted here.

    Format

    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>
    TURBINE_LOADS: <list of power values in mega watt>
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>

    Example

    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/TYPE/index.html b/docs/about/references/keywords/TYPE/index.html new file mode 100644 index 0000000000..f855a82c5e --- /dev/null +++ b/docs/about/references/keywords/TYPE/index.html @@ -0,0 +1,18 @@ + + + + + +TYPE | eCalc™ Docs + + + + +
    +

    TYPE

    [...] / +TYPE /

    Description

    The TYPE is always a string. The allowed strings, and the resulting change in behavior, +will depend on where TYPE is used:

    Use in FACILITY_INPUTS

    • ELECTRICITY2FUEL
    • TABULAR
    • COMPRESSOR_TABULAR
    • PUMP_CHART_SINGLE_SPEED
    • PUMP_CHART_VARIABLE_SPEED

    Use in TIME_SERIES

    • MISCELLANEOUS
    • DEFAULT

    Use in ENERGY_USAGE_MODEL

    • DIRECT
    • COMPRESSOR
    • PUMP
    • COMPRESSOR_SYSTEM
    • PUMP_SYSTEM
    • TABULATED
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES

    Use in MODELS

    • FLUID
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • TURBINE
    • COMPRESSOR_WITH_TURBINE
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN

    Format

    TYPE: <type>
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/UNITS/index.html b/docs/about/references/keywords/UNITS/index.html new file mode 100644 index 0000000000..2d5ff0d451 --- /dev/null +++ b/docs/about/references/keywords/UNITS/index.html @@ -0,0 +1,16 @@ + + + + + +UNITS | eCalc™ Docs + + + + +
    +

    UNITS

    Description

    UNITS is a keyword that can be specified for PUMP and COMPRESSOR CHARTS. This is a requirement and must be specified.

    For pumps this must be specified in FACILITY_INPUTS, whilst for compressors it must be within MODELS.

    Format

    Pumps

    FACILITY_INPUTS:
    - NAME: <pump chart name>
    ...
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>

    Compressors

    MODELS:
    - NAME: <name of chart, for reference>
    ...
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    ....

    Example

    Pumps

    FACILITY_INPUTS:
    - NAME: single_speed_pump
    TYPE: PUMP_CHART_SINGLE_SPEED
    ...
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    Compressors

    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html b/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..00bf19b1c4 --- /dev/null +++ b/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html @@ -0,0 +1,20 @@ + + + + + +UPSTREAM_PRESSURE_CONTROL | eCalc™ Docs + + + + +
    +

    UPSTREAM_PRESSURE_CONTROL

    MODELS / +[...] / +INTERSTAGE_CONTROL_PRESSURE +/ UPSTREAM_PRESSURE_CONTROL

    Description

    This keyword is used only for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type. It is used within the INTERSTAGE_CONTROL_PRESSURE keyword.

    The pressure control method upstream (before) the interstage pressure is specified in this keyword. +For more explanation see Variable speed compressor train model with multiple streams and pressures.

    Format

    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...

    Example

    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/VARIABLES/index.html b/docs/about/references/keywords/VARIABLES/index.html new file mode 100644 index 0000000000..e021aa7370 --- /dev/null +++ b/docs/about/references/keywords/VARIABLES/index.html @@ -0,0 +1,17 @@ + + + + + +VARIABLES | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/include/index.html b/docs/about/references/keywords/include/index.html new file mode 100644 index 0000000000..1cd6f60664 --- /dev/null +++ b/docs/about/references/keywords/include/index.html @@ -0,0 +1,17 @@ + + + + + +!include | eCalc™ Docs + + + + +
    +

    !include

    Description

    You can use !include to separate your model into several files. !include +can be used as value in a KEY: VALUE mapping, or as a value in a list.

    Format

    !include <some_yaml_file.yaml>
    tip

    You can use ecalc show yaml <model_file> to see the read yaml with !include processed.

    New in v7.2.

    Example 1 - include map/object into list item

    !include can be used to insert a map/object as a single list element

    main.yaml
     INSTALLATIONS:
    - !include installationA.yaml
    - NAME: installationB
    ...
    installationA.yaml
        NAME: installationA
    ...

    This is the same as

    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    ...
    - NAME: installationB
    ...

    Example 2 - include map/object into object value

    !include can be used to insert a map/object as a value in a KEY: VALUE mapping

    main.yaml
     INSTALLATIONS:
    - NAME: installationA
    FUELCONSUMERS:
    - NAME: consumerB
    ENERGY_USAGE_MODEL: !include consumerB.yaml
    consumerB.yaml
        TYPE: COMPRESSOR
    ...

    This is the same as

    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    FUELCONSUMERS:
    - NAME: consumerB
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ...

    Example 3 - include list into object value

    !include can be used to insert a list as a value in a KEY: VALUE mapping

    main.yaml
    INSTALLATIONS: !include installations.yaml

    installations.yaml
        - NAME: installationA
    ...
    - NAME: installationB
    ...

    This is the same as

    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    ...
    - NAME: installationB
    ...
    + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/index.html b/docs/about/references/keywords/index.html new file mode 100644 index 0000000000..1f41c4d801 --- /dev/null +++ b/docs/about/references/keywords/index.html @@ -0,0 +1,18 @@ + + + + + +YAML keywords | eCalc™ Docs + + + + +
    +

    Keywords

    eCalc models are defined using keywords in YAML (YAML Ain't Markup Language) model files. This +page gives an overview of the top level keywords as well as and overview of all available keywords in +eCalc with a short description.

    Top level keywords

    KeywordRequiredDescription
    ENDNoGlobal end date for eCalc calculations.
    FACILITY_INPUTSYesList of input files from facility characterization.
    FUEL_TYPESNoDefinition(s) the fuel type(s) being used in the model and the corresponding emissions.
    INSTALLATIONSYesDefinitions of the system of energy consumers on each installation (e.g. platform).
    STARTNoGlobal start date for eCalc calculations.
    TIME_SERIESYesList of input sources (files) containing all time series data.
    + + + + \ No newline at end of file diff --git a/docs/category/documentation/index.html b/docs/category/documentation/index.html new file mode 100644 index 0000000000..0fa62cc50e --- /dev/null +++ b/docs/category/documentation/index.html @@ -0,0 +1,16 @@ + + + + + +Documentation | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/category/guides/index.html b/docs/category/guides/index.html new file mode 100644 index 0000000000..d2a778de33 --- /dev/null +++ b/docs/category/guides/index.html @@ -0,0 +1,16 @@ + + + + + +Guides | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/changelog/index.html b/docs/changelog/index.html new file mode 100644 index 0000000000..86ccf25ebb --- /dev/null +++ b/docs/changelog/index.html @@ -0,0 +1,16 @@ + + + + + +Changelog | eCalc™ Docs + + + + +
    +

    Changelog

    8.5.0 (2023-10-30)

    Features

    Bug Fixes

    Documentation

    • add missing keywords surge control margin (#239) (8b97673)
    • update changelog for upcoming release v8.4 (#203) (66671e0)

    Miscellaneous Chores

    • add init file to ecalc_cli (af6bee9)
    • add chart area flag to test of full recirculation (0c45251)
    • add check for zero efficiency in stage (3ea3035)
    • add dependabot actions monitoring (#219) (d5f5dfd)
    • add ModelInputFailureStatus (6b0c728)
    • add NO_FLOW ChartAreaFlag (0c45251)
    • add rate type to pump model result (#209) (21deeb7)
    • cli: add all energy usage models load_results test (#220) (e09febb)
    • deps: bump actions/cache from 3.0.11 to 3.3.2 (#223) (087867c)
    • deps: bump actions/checkout from 2 to 4 (#221) (bcc2f81)
    • deps: bump actions/setup-node from 3 to 4 (cb7e816)
    • deps: bump snok/install-poetry from 1.3.3 to 1.3.4 (#222) (80dab72)
    • fix tests (6b0c728)
    • handle requested pressures correct for compressors without system (#233) (445fc9d)
    • handle requested pressures for compressor systems (#215) (6b05439)
    • more robust surge control margin calculation (#229) (74b4e59)
    • move feature experimental to main method for requested pressures (#230) (00ad854)
    • pre-commit (a310df2)
    • show correct version (#211) (f8de992)
    • update dependencies (#212) (c9b8506)
    • update dependencies (#259) (e7f031f)
    • update python deps (#247) (514da16)
    • update system v2 tests to only use one crossover (#205) (aa65163)
    • update zero efficiency error message (#258) (5be6fe4)
    • upgrade packages (#255) (035aad1)
    • version must be updated in version.py (63eb672)
    • warn user about full recirculation of fluids in a compressor stage in a multiple streams and pressures compressor train (#196) (0c45251)

    Code Refactoring

    • implement evaluate streams in models (#232) (df6b6b0)
    • libecalc.core: stream as input (#224) (e06f970)
    • move crossover to component_conditions for system v2 (#204) (018b472)
    • move RateType into common module (#253) (c7f5a99)
    • move validate operational conditions from compressor train, rename to validate model input (#256) (6b0c728)
    • remove regularity our of core/domain (#246) (714888b)
    • remove temporal operational settings system v2 (#244) (a1d2ce6)
    • rename streamCondition to stream (32885b5)
    • separate optimization from system (#245) (b580e3d)
    • use Graph object to build graph (#250) (ce65dba)

    8.4.0 (2023-09-25)

    Features

    • add compressor inlet- and outlet pressures to models/train level (#152) (9b95ee5)
    • add input compressor pressures to output (#140) (74e3e56)
    • add support for system v2 in FDE (e6d1f93)
    • add support for temporal operational settings in v2 (f2b217a)

    Bug Fixes

    • add system v2 subcomponents to components list (b61a0fe)
    • add system v2 to generator set consumers (#166) (d40558e)
    • avoid name conflicts with ecalc cli package (#197) (140c448)
    • bug in asset_result_dto (#170) (c45a7ac)
    • correct type for total system rate in pump system v2 (#167) (5559cdd)
    • do not return actual rate in results for compressor sampled since it can not be calculated (#190) (74fcfd8)
    • expression type in system v2 (5318fb5)
    • forbid extra attributes in TimeSeries (#195) (24c27bb)
    • full run with system v2 components (#147) (2279ef4)
    • generate system v2 schema (#161) (a27c392)
    • handle all situations where zero mass rate is entering a compressor stage in a multiple streams compressor train (#164) (ba9235e)
    • handle dates in yaml correctly (e9c28d0)
    • issue with crossover rate calculation in system v2 (#188) (623a1cf)
    • make ecalc installable again (58693de)
    • rate_type was snake_case in json output (#172) (dc82a88)
    • requested pressures not always an attribute (#155) (0078405)
    • system v2 evaluation (6494257)
    • use results base (#199) (cebde33)
    • wrongly accessed rate in pump system v2 (56da4b2)

    Documentation

    • add further explanation to generic workflow (ddcb462)
    • add generic workflow (30553e0)
    • add powerlossfactor in generic workflow (3d152c8)
    • changelog v8.4 add input compressor pressures to output (#150) (46e308f)
    • correct order of diagrams (71a07f5)
    • make mermaid diagram of workflow render correctly (b1c5b23)
    • make mermaid workflow diagram render correctly (7a99b5b)
    • update changelog for v8.3 (b424176)
    • update workflow with comments (a71abfe)

    Miscellaneous Chores

    • add pressure drop ahead of stage to inlet pressure before choking (#146) (e5368de)
    • add rate type to compressor model results and convert to time series (#187) (c86bf3f)
    • add validation for missing headers in csv resource file (#191) (60e8403)
    • adding test of full recirculation in multiple streams compressor trains (ba9235e)
    • calculate correct standard condition density when mixing two streams (ba9235e)
    • clarify neqsim depenedency in ecalc (#198) (d6635a9)
    • docs: fix equations showing twice (#141) (2455e34)
    • enable mypy for cli (#189) (da713fc)
    • fix spelling errors in changelog (de3c2eb)
    • remove unnecessary folders (#186) (e861d87)
    • rename conflicting file names (#153) (654175e)
    • revert nan to num in expressions (#202) (2f95c29)
    • update archive (#181) (03abf64)
    • update deps to latest (0f30f49)

    Code Refactoring

    • change typ to rate_type for TimeSeriesRate (#89) (8be87dd)
    • generate asset/ecalc model schema (#157) (6818848)
    • generate direct emitter schema (#180) (924526a)
    • generate facility type schema (#182) (9428979)
    • generate fuel consumer schema (#160) (9f580c1)
    • generate fuel types schema (#179) (e17ef3b)
    • generate generator set schema (#165) (ab25e05)
    • generate installation schema (#159) (030a44b)
    • generate time series schema (#176) (b02d68d)
    • improve error message when wrong CURVE-keyword input to single speed compressor (#173) (9502bcc)
    • improve error message when wrong CURVES-keyword input to variable speed compressor (#175) (714e867)
    • merge functionality for results (#193) (db1e9b1)
    • move common properties for system v2 operational settings (10b5e07)
    • move yaml system into package (b477b15)
    • remove condition and power_loss_factor from system v2 (2507bb9)
    • remove rate_fractions from system v2 (ba788fd)
    • use common Period,Periods classes (76366ce)
    • use common to_camel_case function (#171) (f5f0c2f)
    • use yaml prefix for yaml klasses/modules (#174) (e91ac2a)

    8.3.0 (2023-08-11)

    ⚠ BREAKING CHANGES

    • energy model type not allowed to change over time (#131)

    Features

    Bug Fixes

    • avoid zero discharge pressure after validation of operational conditions (830c75e)
    • bug fix to joining results from different temporal models with compressor train models having multiple inlet or outlet streams (#63) (da3144a)
    • json schema accepts MAXIMUM_DISCHARGE_PRESSURE for single speed train (#86) (a18de1e)
    • json schema allow stages to have control_margin and control_margin_unit (#90) (2415534)
    • make apply_condition work for 2D numpy arrays also (#78) (bce91cb)
    • make sure that suction pressure is less than or equal to discharge pressure for compressor train (#104) (d218273)
    • parse scientific notation numbers in expression (#85) (fdf322b)
    • parse spaces as thousand separators from excel (#107) (5a3bd6a)
    • pump results wrong when resampled (#71) (daffdb3)
    • resample emissions correctly to create valid json (3c9b52e)
    • result of validation of operational conditions when rate is zero should always be valid (9de403c)
    • validate time steps where rate is different from zero, not only when larger than zero (6ce07c4)
    • wrong standard_conditions_density when mixing two fluids (a16a695)

    Documentation

    • fix generic compressor example (38870a3)
    • fix links (#116) (62cadfc)
    • how to migrate from 8.1 to 8.2 (4d3be58)
    • remove unnecessary information from migration guide (4730538)
    • specify only gensets for boiler/heater (#53) (2df3bdf)
    • update changelog 8.2 with changes for ltp- and stp (#43) (6fe4b77)
    • update changelog for 8.2 (3ccea74)
    • update docs and changelog for energy models (#133) (8f0d716)
    • update documentation for heaters and boilers (#52) (2bef707)
    • update migration guide with ltp- and stp changes (#42) (4b0b230)

    Miscellaneous Chores

    • add 8.3 changelog (9f4a4af)
    • add fluid mixing checks (53c1626)
    • add fluid mixing checks (0f3ddca)
    • add installation filter to flare nmvoc (#87) (f37b76d)
    • add installation filter to remaining ltp-columns (#91) (39df792)
    • add power adjustment constant also for compressor trains with interstage pressure (#136) (c8a4861)
    • add test for adjust energy usage on multiple streams and pressures compressor trains (c8a4861)
    • add test of count_parentheses (0d1ce6f)
    • add test of validation of operational conditions when suction pressure exceeds discharge pressure (d218273)
    • added changelog entry about interstage pressure fix (#95) (2a1e8b0)
    • count parentheses in list of tokens only among the elements that are strings (#94) (0d1ce6f)
    • energy model type not allowed to change over time (#131) (670cff2)
    • enforce unique fuel type names, and unique emission names within one fuel type (#84) (4ea9c63)
    • fix broken link in documentation of GENERATORSETS keyword (#103) (329c8e9)
    • fix typing of fluid composition (c0d98b3)
    • improve documentation on defining compressor charts using CURVE and CURVES (#97) (1bde68a)
    • improve error message when bad yaml file name (#77) (d2eb733)
    • merge queue (d4489c6)
    • numpy ndarray typing (#46) (9b7b308)
    • pin numpy to compatible numpy version (35a3640)
    • remove limiting dependency typer-cli (8208444)
    • simplify dependencies for use with komodo (39c5c36)
    • update dependencies to be aligned with external requirements (fbfbfeb)
    • update snapshots after power adjustment constant fix for compressor trains with interstage pressure (c8a4861)

    Code Refactoring

    Tests

    • add test for fluid stream mixing (0ba8f8f)

    Continuous Integration

    • create release-please pr against correct branch (be9426a)
    • fix issue with api reference docs generation (#44) (42c1402)
    • fix syntax for gh action workflow (d8700dd)
    • Lock pydantic version in CI and update hooks (#106) (2ea517e)
    • remove duplicate build of docs (#62) (e5b896b)
    • set default ownership for source (16d54f1)
    • support hotfix releases (0346929)
    • update pre-commit settings (6092255)

    8.2.2 (2023-05-28)

    Bug Fixes

    • allow electrical driven consumers in consumer system v2 (92cb4fa)
    • cast float to numpy array in function call (#39) (250928c)
    • NeqSim Wrapper: inconsistent return type (9482421)
    • output emissions in fixed and predicted order (059dab5)

    Continuous Integration

    • enable mypy for neqsim wrapper (871c038)
    • parallelize tests in docker (4e73b68)
    • remove docker tests (a2b5c1a)
    • use xdist to parallelize test suite (2895ae7)

    Tests

    • compare consumer system v1 vs v2 both fuel and power consumers (74fafce)

    Code Refactoring

    • even more typing! (a7b22e2)
    • fix more typing (08394a3)
    • make units lowercase in function names (272f0d7)
    • raise exceptions from error (ee6e474)
    • remove duplicate function for converting to standard rate (93de4f4)
    • remove unused code (7ccf2c1)
    • rename function variables (c56693a)
    • typing and typos (936b941)

    Documentation

    • add docstrings to undocumented functions (064adfa)
    • update compressor pressure control (#14) (1da1999)

    Miscellaneous Chores

    • add consumer function utils (50e2d66)
    • add consumer system v2 sub results (b78b035)
    • add testing of condition in consumer system consumer function (50e2d66)
    • capture return values from a decorated function (09ef23e), closes #4489
    • capture valid neqsim states (f9c8b09)
    • change to absolute image links in readme (#16) (9a54f51)
    • conditions in tabular consumer function (50e2d66)
    • correct link to documentation from README.md (f185a7f)
    • coverage from coverage.py is not directly supported (8e76c8a)
    • enable B904 (65ac18b)
    • evaluate consumer system v2 consumers according to input order (0088232)
    • fix badges (dd2fd6b)
    • migration guide changed resampling method (#38) (d4f11dc)
    • move conditioning for consumer system consumer function (50e2d66)
    • move conditions for compressor consumer function (50e2d66)
    • move conditions for direct consumer function (50e2d66)
    • move conditions in pump consumer function (50e2d66)
    • move evaluation of conditions before calculations (#24) (50e2d66)
    • remove energy usage before conditioning from tests (50e2d66)
    • remove energy_usage_before_conditioning from results (50e2d66)
    • set power to zero when rate (and fuel consumption) is zero (#27) (1ee5bfd)
    • typo (9c3af00)
    • typo (389db6f)
    • update dependencies to latest compatible (5809862)
    • update description etc in readme (f37dbb7)
    • update docstring for numeric_methods (be435c3)
    • update test snapshots (1ee5bfd)

    8.2.1 (2023-05-09)

    Miscellaneous Chores

    Continuous Integration

    + + + + \ No newline at end of file diff --git a/docs/changelog/latest/index.html b/docs/changelog/latest/index.html new file mode 100644 index 0000000000..0a2cce933c --- /dev/null +++ b/docs/changelog/latest/index.html @@ -0,0 +1,16 @@ + + + + + +Next | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/changelog/separator/index.html b/docs/changelog/separator/index.html new file mode 100644 index 0000000000..7cc27216c6 --- /dev/null +++ b/docs/changelog/separator/index.html @@ -0,0 +1,16 @@ + + + + + +--- | eCalc™ Docs + + + + + + + + + \ No newline at end of file diff --git a/docs/changelog/v7-0-release/index.html b/docs/changelog/v7-0-release/index.html new file mode 100644 index 0000000000..23f4de981a --- /dev/null +++ b/docs/changelog/v7-0-release/index.html @@ -0,0 +1,16 @@ + + + + + +v7.0 | eCalc™ Docs + + + + +
    +

    eCalc v7.0

    Features

    • Add VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES compressor model. See Variable speed compressor train model with multiple streams and pressures.

    • Add GERG model to FLUID model as EOS_MODEL. Now available GERG_PR and GERG_SRK.

    • Add UNITS: EFFICIENCY to compressor charts and pump charts. Plus additional input unit support.

    • Add support for both water and H2O in fluid composition.

    • Add POWER_ADJUSTMENT_CONSTANT for all applicable models to adjust power/energy usage with a constant factor.

    • Add water as allowed FLUID model component.

    • Improve models documentation

    • Deprecation: CONDITION is now a single expression instead of list.

      If you previously had a list it is recommended to use the CONDITIONS keyword instead. This will become a requirement in a future release.

      Alternatively you could merge the conditions to a single expression. This is what is done automatically when using the CONDITIONS keyword.

      .. code-block:: diff

      • CONDITION: expression1 {*} expression2
      • CONDITION:
        • expression1
        • expression2

    Fixes

    • Handle date columns year as year and not timestamps
    • Handle suppressed ecalc errors and division by zero
    • Handle timeseries with one entry
    • Handle poorly formatted csv data with tabs, multiple spaces and mixed float/integers.
    • Handle 0 regularity
    • Handle emission intensity when only one timestep
    • Changed emission intensity to NaN when hydrocarbon export is zero

    CLI

    Feature

    • Major revision of CLI for future development.
    • Add Flow diagram support
    • Improve logging, warnings and error messages. DEBUG should now give a lot of information.
    • Add support for list in 'CONDITION' keyword

    Fix

    • Fix issue when using dates in ELECTRICITY2FUEL
    + + + + \ No newline at end of file diff --git a/docs/changelog/v7-1-release/index.html b/docs/changelog/v7-1-release/index.html new file mode 100644 index 0000000000..25c7b580c6 --- /dev/null +++ b/docs/changelog/v7-1-release/index.html @@ -0,0 +1,27 @@ + + + + + +v7.1 | eCalc™ Docs + + + + +
    +

    eCalc v7.1

    Features

    • Add new CATEGORY with name OFFSHORE-WIND to report power usage from offshore windfarms. Should be negative load to deduct from genset, if what is supplied externally. Also added to LTP Reporting. See excerpt example below:

      .. code-block:: yaml

      • NAME: wind_turbine +CATEGORY: OFFSHORE-WIND +ENERGY_USAGE_MODEL: +TYPE: DIRECT +LOAD: -4.4 # MW
    • Add new CATEGORY with name TURBINE-GENERATOR and POWER-FROM-SHORE to report power consumption separately from installation and onshore (land) for generators. If not set, +defaults to TURBINE-GENERATOR. See excerpt example below:

      .. code-block:: yaml

      GENERATORSETS:

      - NAME: genset
      CATEGORY: TURBINE-GENERATOR
      ELECTRICITY2FUEL: A_genset
      ...
      ...
      - NAME: power_from_shore
      CATEGORY: POWER-FROM-SHORE
      ELECTRICITY2FUEL: onshore_power
      ...

    where electricity2fuel for onshore power in general would have power map to 0 fuel usage

    • Add new CATEGORY with name GAS-DRIVEN-COMPRESSOR to report power consumption for gas(-turbine)-driven compressors for LTP. Also added to LTP Reporting. See excerpt example below:

      .. code-block:: yaml

      • NAME: gascompression_2 +CATEGORY: GAS-DRIVEN-COMPRESSOR +ENERGY_USAGE_MODEL: +TYPE: COMPRESSOR
    • Allow single speed and variable speed compressor train to run with zero pressure and non-zero rate. Will raise warning, and affected time steps will not be calculated, but eCalc will run.

    • Add a POWER column data to the COMPRESSOR_TABULAR csv-file for a fuel-driven SAMPLED_COMPRESSOR in order to also get energy reported as power (MW). See Header requirements for the sampled compressor csv file

    • Add surge control margin to variable speed compressor charts. See Surge control margin for variable speed compressor chart.

    • Ensure non-infinite loops by setting max 50 iterations for compressor models. Will raise warning in the logger if not converged.

    • Bug in max rate calculation for simplified compressor train. Wrong convergence criterion leading to too early exit from iteration.

    • VARIABLES can be specified in yaml and referred to in expressions.

      .. code-block:: yaml

      VARIABLES: +salt_water_injection: +VALUE: SIM1:COL1 {*} 2

      Use this variable by referencing it as $var.salt_water_injection in an +expression.

      .. code-block:: yaml

      EXPRESSION: "$var.salt_water_injection {/} 2"

      See VARIABLES for more information.

    Breaking changes

    • CONVERT_TO_RATE no longer supported. If this was something you used, let us know so we can know the use case.

    CLI

    • Experimental: Add JSON v3 output to cover needs that are no longer supported by v2 because of tight coupling with core code. Both new and old format is provided, and will be stored when using the --json argument.
    + + + + \ No newline at end of file diff --git a/docs/changelog/v7-2-release/index.html b/docs/changelog/v7-2-release/index.html new file mode 100644 index 0000000000..e82a2a6d74 --- /dev/null +++ b/docs/changelog/v7-2-release/index.html @@ -0,0 +1,28 @@ + + + + + +v7.2 | eCalc™ Docs + + + + +
    +

    eCalc v7.2

    Features

    • Add :code:ecalc show yaml model.yaml command.

      The command will only read the yaml file, include the files that should be included, then show the resulting yaml. +There is no need to run the model beforehand.

      This should help figure out problems with :code:!include.

    • BREAKING CHANGE!: CATEGORY is MANDATORY for Generator Sets. To be able to handle this, the MISCELLANEOUS category +has been introduced for Generator sets for users to be able to set this to generator sets that do not apply to other categories, +and to e.g. except for LTP output.

      .. code-block:: yaml

      GENERATORSETS:

      - NAME: genset
      CATEGORY: TURBINE-GENERATOR
      ELECTRICITY2FUEL: A_genset
      ...
      ...
      - NAME: power_from_shore
      CATEGORY: POWER-FROM-SHORE
      ELECTRICITY2FUEL: onshore_power
      ...
    • EXPERIMENTAL: Add show results command to cli.

      When running ecalc, either by ecalc run model.yaml or ecalc model.yaml we will store the results in your +home-directory. You don't have to specify any specific arguments for this to happen.

      A new command ecalc show results is introduced. This command can be used to display all the results, or you can use +the argument --name to only show results for a specific component.

      What is a component? Currently the supported component names are the name of the model (filename without the yaml ending), +installation names, generator set names, electricity consumer names and fuel consumer names.

      ecalc show results --name "component name" will give a json file with only the specified component results.

      The output format can be changed to csv by specifying --output-format csv. This will try to give all the data represented +in the json output, but some of it will be filtered as it does not fit the tabular csv format.

      Examples

      Show all results in json format: ecalc show results or ecalc show results --output-format json +Show model results (totals) in json format ecalc show results --name model (if using the model.yaml file as shown above) +Show model results (totals) in csv format ecalc show results --name model --output-format csv

      Deprecation warning: Running ecalc without the 'run' argument is deprecated. Use 'ecalc run arg1 ... argN' instead. +As this is an experimental feature ecalc run might see breaking changes in future releases, you are free to ignore +the deprecation warning for a while if you don't want to be exposed to those changes. ecalc show will still work as +expected.

    Fixes

    • Deprecate json_v2 output, json_v3 should be used instead. json_v2 (and json_v1) will be removed in the next release.
    • Allow Single and Variable Speed Compressor Trains to run regardless of non-convergence in numeric root finding algorithms. This is a rate situation and caused by numeric instability. If this happens there will be logged an error in the log together with relevant data. Use result with caution.
    • Use Brent's method instead of secant method to find roots used in numeric iterations for compressor models. Faster and more robust compared to old secant method.
    • Correct prioritazion of compressor system when the compressor system is more complex than only splitting rates on more and more duplicate compressor trains.
    • Added warning both in documentation and code about using Generic compressor chart with design point calculated from input data in a COMPRESSOR_SYSTEM energy usage model
    • Improved units and results mapping. The consumed energy is now reported under energy_usage, and power_rate is included if relevant regardless of energy_usage.
    • Suction pressures were not correctly set, and defaulting to 0, in some cases when a list of pressures were given.
    • In cases when only one timestep was evaluated in a consumer system, and the first prioritized operational setting was outside capacity, it was nevertheless chosen.
    + + + + \ No newline at end of file diff --git a/docs/changelog/v7-3-release/index.html b/docs/changelog/v7-3-release/index.html new file mode 100644 index 0000000000..9f73cf6505 --- /dev/null +++ b/docs/changelog/v7-3-release/index.html @@ -0,0 +1,19 @@ + + + + + +v7.3 | eCalc™ Docs + + + + +
    +

    eCalc v7.3

    Features

    • BREAKING CHANGE!: +Fixed speed pressure control options changed. One option is added, where the ASV is modelled as +being common for the entire train, and the names of the options with individual ASVs have changed. +The available options for pressure control in a single speed compressor train are now:

      • UPSTREAM_CHOKE
      • DOWNSTREAM_CHOKE
      • COMMON_ASV (NEW)
      • INDIVIDUAL_ASV_RATE (changed from ASV_BALANCED_MARGIN)
      • INDIVIDUAL_ASV_PRESSURE (changed from ASV_WITH_BALANCED_PRESSURE_RATIOS)

    Fixes

    • Power rate reporting now works for consumer systems for supported compressor models for LTP reporting.
    + + + + \ No newline at end of file diff --git a/docs/changelog/v7-4-release/index.html b/docs/changelog/v7-4-release/index.html new file mode 100644 index 0000000000..54004725c5 --- /dev/null +++ b/docs/changelog/v7-4-release/index.html @@ -0,0 +1,16 @@ + + + + + +v7.4 | eCalc™ Docs + + + + +
    +

    eCalc v7.4

    Features

    • Added is_valid and is_extrapolation flags in JSON-output.

    • Added is_valid flags to all energy usage model and consumer model results.

    • Add additional result data when compressors are running outside of capacity

    • Add Direct Emitters to JSON-output.

    • Add power capacity margin for generator set results.

    • Add design head, rate and efficiency for generic compressor charts from design point.

    • Add UNITS to PUMP_CHART_SINGLE_SPEED and PUMP_CHART_VARIABLE_SPEED

    • Added FixedSpeedPressureControl to VariableSpeedCompressorTrainCommonShaft and VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPressures, enabling eCalc to possibly find a solution either along the minimum speed curve or through choking if the discharge pressure at minimum speed it too high. Default set to DOWNSTREAM_CHOKING.

    • BREAKING CHANGE!: When specifying a stage in a VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPRessures, the STREAM yaml keyword has been changed from a string to a list, to allow for multiple streams entering or leaving the compressor train at the same stage.

      .. code-block:: yaml

      STAGES:

       - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
      COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
      STREAM: <Optional>
      - <reference stream from STREAMS for one in- or outgoing stream. Optional>
      - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    • BREAKING CHANGE!: A CONSUMER with a CONSUMER_SYSTEM. Mixing between SYSTEM and non-system is no longer supported.

    • BREAKING CHANGE!: User MUST specify FUEL or POWER as one of the headers in TABULAR format. This was documented as mandatory, but not validated properly, hence eCalc would be allowed to run assuming POWER (incorrectly).

    Fixes

    • Having several ingoing/outgoing streams at the same compressor train stage should now actually work.
    • Extrapolation flag in JSON/CSV-output now correctly indicates if data has been extrapolated. is_valid now indicates if datapoint is valid when extrapolation is turned off.
    • Speed-column no longer required for single speed compressor chart read from file
    • Support time-slots for CONSUMER with ENERGY_USAGE_MODEL TYPE: CONSUMER_SYSTEM
    • Re-add support for FUEL timeslots
    • Failing compressor train when target pressure is too low and pressure control is used. Now correctly runs with valid result and chart area flag "below minimum flow rate".
    • Use of TABULATED energy_usage_model was not supported in new json result format causing error, will now work.
    • Incorrect default energy_usage_type POWER was always set for TABULATED energy_usage_model. Now it will be set based on FUEL or POWER column specified in facility input. eCalc will fail if neither FUEL nor POWER is specified in the facility inputs file. Patched in v7.4.1
    • Correct LTP gasTurbineCompressorConsumption calculation when a consumer is not initialized at first timestep of global time vector. Patched in v7.4.2
    • Choke discharge pressure when using DOWNSTREAM_PRESSURE_CONTROL for variable speed compressor train. Patched in v7.4.2
    • eCalc must support when using more than one energy usage model for calculating FuelConsumerPowerConsumption for LTP. Previously this resulted in missing calculations. Patched in v7.4.3.
    + + + + \ No newline at end of file diff --git a/docs/changelog/v7-5-release/index.html b/docs/changelog/v7-5-release/index.html new file mode 100644 index 0000000000..77967a5ad3 --- /dev/null +++ b/docs/changelog/v7-5-release/index.html @@ -0,0 +1,19 @@ + + + + + +v7.5 | eCalc™ Docs + + + + +
    +

    eCalc v7.5

    Features

    • Add YAML interface for PRESSURE_CONTROL for Single and Variable Speed Compressor Train
    • Add support for PRESSURE_CONTROL: NONE for Variable Speed Compressor Train
    • Run GENERATORSETS at max capacity with invalid timestep-flags instead of forward-filling last valid value (extrapcorrection)
    • Add support for uploading models as a zip-file
    • Apply resampling by FREQUENCY when exporting CSV
    • Support single speed compressor chart as csv resource
    • Improved support for uploading YAML-files. Comments, whitespaces, inline lists should now be preserved instead of removed and reformatted

    Fixes

    • Add missing power loss factor for Compressor Train Variable Speed Multiple Pressure model.

    • Ensure that GENERATORSETS stops when consumer power rate is zero

    • Ensure invalid time-step and zero power rate for the genset when the el-consumer(s) starts before the Genset providing power.

    • Correct handling of power rate in LTP export wen combining compressors with and without fuel in temporal models.

    • validate order of temporal models

      Temporal models should be specified in chronological order

    • validation of variable names

      Make sure the full variable name is matched against the regular expression. +Previously we allowed special characters for all characters except the first.

    • Avoid crash when ENERGY_USAGE_MODELs are defined only outside the time window of the CONSUMER.

    • Proper result handling when GENERATORSETS has not yet started and el-consumer is running.

    CLI

    • add --skip-validation argument

      Make it possible to skip the validation step, passing the data to the next step. This will still have some +validation and might give a more clear error message.

    • add --simple-output argument

      Use simple output argument to get a simplified result object showing only the most relevant results such as +energy consumption and emissions.

    + + + + \ No newline at end of file diff --git a/docs/changelog/v7-6-release/index.html b/docs/changelog/v7-6-release/index.html new file mode 100644 index 0000000000..cd55a63cd6 --- /dev/null +++ b/docs/changelog/v7-6-release/index.html @@ -0,0 +1,17 @@ + + + + + +v7.6 | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/changelog/v8.0-release/index.html b/docs/changelog/v8.0-release/index.html new file mode 100644 index 0000000000..728b201a8e --- /dev/null +++ b/docs/changelog/v8.0-release/index.html @@ -0,0 +1,17 @@ + + + + + +v8.0 | eCalc™ Docs + + + + +
    +

    eCalc v8.0

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some +of the highlights:

    New features

    • Improved the accuracy of the compressor and pump models
    • Changes to CSV output
      • reduced the number of columns
      • simplified headers, added units
      • renamed power_rate to power
      • the is_invalid column is now reported as is_valid
    • Changes to LTP:
      • renamed loading and storage columns
      • added categories for flare, fugitive emissions, name should no longer be used
    • Changes to JSON:
      • json_v1 and json_v2 has been removed.

    Experimental features

    • Add maximum power limit for compressor models

    Breaking changes

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    YAML

    1. All component names must be unique to avoid ambiguity in reporting
    2. UNITS are required when setting up compressor and pump charts
    3. Restrict allowed characters in component names and emission names
    4. NAME no longer used for LTP reporting, use CATEGORY instead
    5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)

    CLI

    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.
    2. Log level should be specified as the first argument + log to file
    3. Model yaml-file needs to come last
    4. Extrapolation (correction) is now always used and cannot be disabled
    5. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export
    6. Simple results are now default for json

    Check out the migration guide

    + + + + \ No newline at end of file diff --git a/docs/changelog/v8.1-release/index.html b/docs/changelog/v8.1-release/index.html new file mode 100644 index 0000000000..a955a41960 --- /dev/null +++ b/docs/changelog/v8.1-release/index.html @@ -0,0 +1,16 @@ + + + + + +v8.1 | eCalc™ Docs + + + + +
    +

    eCalc v8.1

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    New features

    • Bug fixes

    Breaking changes

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    Input: YAML / Resource files

    1. We do no longer accept missing data in resource or timeseries resource files, since it easily leads to ambiguities and errors.
    2. New Category: STEAM-TURBINE-GENERATOR has been introduced, which works similar as OFFSHORE-WIND
    3. TIME_SERIES has had a makeover with new type and renamed attributes, to be less ambiguous and error-prone.

    Output: LTP

    1. A few columns in LTP export has changed names in order to be compatible with Centuries
    2. A new column in LTP export has been introduced: steamTurbineGeneratorConsumption (matching with the new category)

    Check out the migration guide

    + + + + \ No newline at end of file diff --git a/docs/changelog/v8.2-release/index.html b/docs/changelog/v8.2-release/index.html new file mode 100644 index 0000000000..ef8ebaf4ca --- /dev/null +++ b/docs/changelog/v8.2-release/index.html @@ -0,0 +1,17 @@ + + + + + +v8.2 | eCalc™ Docs + + + + +
    +

    eCalc v8.2

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See +the migration guide for details on changes, where relevant.

    New features

    • STP is available as a predefined TSV file-export of data. Use argument --stp-export on cli.
    • Output emissions in fixed and predicted order in JSON export
    • BREAKING: Conditions in YAML model that evaluates to false will no longer be calculated and outputted
    • Using average rates instead of forward filling when resampling rates to a given output frequency
    • New Categories added to STP and LTP export
    • Operational settings are now 1-based instead of 0-based.

    Fixes

    • Some VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES models have returned a too low INTERSTAGE_PRESSURE when using INDIVIDUAL_ASV_RATE control. The INDIVIDUAL_ASV_RATE fixed speed pressure control now returns the required INTERSTAGE_PRESSURE correctly.
    + + + + \ No newline at end of file diff --git a/docs/changelog/v8.3-release/index.html b/docs/changelog/v8.3-release/index.html new file mode 100644 index 0000000000..51a5ca4142 --- /dev/null +++ b/docs/changelog/v8.3-release/index.html @@ -0,0 +1,17 @@ + + + + + +v8.3 | eCalc™ Docs + + + + +
    +

    eCalc v8.3

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See +the migration guide for details on changes, where relevant.

    New Features

    • To save time in calibration and help diagnose pump issues: When calibrating or seeing why a pump is invalid, the most important thing to look at is the head. Now the head is available in the JSON file.

    Fixes

    • A bug in the mixing of fluid-streams in compressor trains were fixed. This bug caused the density at standard conditions not to be updated, leading to the standard rates being wrong. This is expected to change the results of some eCalc Models

    Breaking changes

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    Input: YAML / Resource files

    1. It is no longer accepted to change ENERGY_USAGE_MODEL TYPE over time, within one consumer. In case TYPE evolution is needed, the model can be split in two consumers.
    + + + + \ No newline at end of file diff --git a/docs/changelog/v8.4-release/index.html b/docs/changelog/v8.4-release/index.html new file mode 100644 index 0000000000..14c26dd6a4 --- /dev/null +++ b/docs/changelog/v8.4-release/index.html @@ -0,0 +1,16 @@ + + + + + +v8.4 (Latest) | eCalc™ Docs + + + + +
    +

    eCalc

    New Features

    • Add requested inlet- and outlet compressor pressures from input data to results. In cases where active pressure control mechanisms are active, requested inlet- and outlet pressures may differ from calculated pressures. It is now possible to analyse both requested- and calculated pressures.
    • Specify rate type for majority of output rate results as either stream day or calendar day.
    • Improved error messages

    Fixes

    • Actual rate was incorrectly returned for compressor sampled. Actual rate cannot be known for compressor sampled since we need to know fluid properties in order to do that. Actual rate has therefore been removed from compressor sampled.
    • Handle bug in Variable Speed Compressor Train With Multiple Streams And Pressures when no rate is entering a compressor stage wrt. recirculation.
    • Other minor fixes

    Breaking changes

    + + + + \ No newline at end of file diff --git a/docs/changelog/v8.5-release/index.html b/docs/changelog/v8.5-release/index.html new file mode 100644 index 0000000000..4ef7b0d182 --- /dev/null +++ b/docs/changelog/v8.5-release/index.html @@ -0,0 +1,16 @@ + + + + + +v8.5 (Latest) | eCalc™ Docs + + + + +
    +

    eCalc

    New Features

    • Added chart area flag NO_FLOW_RATE to the possible statuses for an operational point in a variable speed compressor chart. The chart area flags can currently only be found in the json result file, but we will also try to find a way of displaying this information in the WebApp as well.
    • Whenever there is a variable speed compressor only recirculation fluid (can happen in a multiple streams and pressures compressor train) a warning will be logged.
    • Add rate type to more equipment in results

    Fixes

    • nmvoc emissions were incorrectly reported for the ltp categories HEATER and BOILER: The emission query filters included nox, and are now corrected to nmvoc.
    • Instead of applying the surge control margin to the average of the minimum flow rate for all speed curves in the compressor chart, a more robust calculation is implemented for variable speed compressors: The updated minimum flow is calculated individually for each speed, using the control margin as the increase in minimum flow, in percentage or fraction of the rate difference between minimum- and maximum flow, for the given speed. This solves the problem of eCalc failing when the new calculated minimum rate was outside the compressor chart for a given speed.
    • Improved error messages
    • Other fixes

    Breaking changes

    None

    + + + + \ No newline at end of file diff --git a/docs/contribute/documentation-guide/documentation/index.html b/docs/contribute/documentation-guide/documentation/index.html new file mode 100644 index 0000000000..60ad40cdc2 --- /dev/null +++ b/docs/contribute/documentation-guide/documentation/index.html @@ -0,0 +1,19 @@ + + + + + +Overview | eCalc™ Docs + + + + +
    +

    Get started

    This site was generated from the contents of your documentation folder using Docusaurus.

    You will find the full documentation of Docusaurus here: Docusaurus Docs.

    Prerequisites

    You can contribute as long as you have access to the ecalc - GitHub Repository. +It is entirely possible to make changes by using your web browser alone. However, if you want to get live feedback on your +changes, we recommend that you run the documentation locally with the following prerequisites:

    info

    Since not all managed computers have the ability to install Node, you can use an IDE such as PyCharm, IntelliJ, VSCode, or similar, to preview Markdown code. +This has some limitations such as missing navigation bar, and it does not preview Docusaurus specific syntax such as the Admonitions used here.

    Contributing

    As a contributor you will have to use Git. Please find the Git Documentation for more details about git.

    How it works

    From Docusaurus own documentation:

    Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc).

    While Docusaurus is rich on features, we use it mostly to host markdown pages. The main bulk of the documentation is located in documentation/docs. This is where you as a collaborator are encouraged to make changes.

    For a quick intro to Markdown, see our Markdown section.

    Special features

    Docusuaurs has some special features that we are using actively. Please find the links listed here:

    + + + + \ No newline at end of file diff --git a/docs/contribute/documentation-guide/markdown/index.html b/docs/contribute/documentation-guide/markdown/index.html new file mode 100644 index 0000000000..7f38d47e2e --- /dev/null +++ b/docs/contribute/documentation-guide/markdown/index.html @@ -0,0 +1,17 @@ + + + + + +Markdown | eCalc™ Docs + + + + +
    +

    Markdown

    Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.

    Standard Markdown

    Here is a quick summary or standard Markdown syntax:

    summary = md`

    Markdown summary

    Desired styleUse the following Markdown annotationProduces the following sample HTML
    Heading 1# Title<h1>Title</h1>
    Heading 2## Title<h2>Title</h2>
    Heading 3### Title<h3>Title</h3>
    Heading 4#### Title<h4>Title</h4>
    Heading 5##### Title<h5>Title</h5>
    Heading 6###### Title<h6>Title</h6>
    ParagraphJust start typing<p>Just start typing<p>
    Bold**Text**<strong>Text</strong>
    Italic*Text*<em>Text</em>
    Strike~~Text~~<del>Text</del>
    Quoted (indent)> Text<blockquote><p>Text</p></blockquote>
    Code (inline)Statement<code>Statement</code>
    Code (fenced)Statement 1
    Statement 2
    Statement 3
    <pre><code><span>Statement 1</span><span>Statement 2</span><span>Statement 3</span></code></pre>
    List (unordered) List item 1
    List item 2
    * List item 3
    <ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>
    List (ordered)1. List item 1
    2. List item 2
    3. List item 3
    <ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>
    Images![Alternate text for image](path/to/image)<img src="path/image.jpg" alt="Alternative text for image>
    Hyperlinks[Link text](https://www.google.com/)<a href="https://www.google.com/">Link text</a>
    note

    You may want to escape special html characters using \, and replace the great than symbol with &lt, otherwise Docusaurus +will confuse it with html code.

    + + + + \ No newline at end of file diff --git a/docs/contribute/get-started/index.html b/docs/contribute/get-started/index.html new file mode 100644 index 0000000000..84b10194b5 --- /dev/null +++ b/docs/contribute/get-started/index.html @@ -0,0 +1,25 @@ + + + + + +Get started | eCalc™ Docs + + + + +
    +

    Get started

    Welcome! We are glad that you want to contribute to our project! 💖

    This project accepts contributions via GitHub Pull Requests.

    This document outlines the process to help get your contribution accepted.

    There are many ways to contribute:

    You can start by looking through the GitHub Issues filtered by labels.

    info

    We follow some contributor guidelines that you will find in our contributor guidelines.

    Don't worry if your contribution does not follow all the guidelines. We will guide you in the code review process. +The threshold for contributing is low, and we appreciate any contribution great or small. 🙏

    Prerequisites

    How to contribute

    Contribution is done in 3 simple steps:

    Initiate change

    For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient +to explain the change without referring to an issue.

    Make a Pull Request

    To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role.

    1. Equinor internal contributors, you may open a Pull Request directly,
    2. Independent contributors, you will Fork the repository.

    Get code review

    Once a Pull Request has been made, we will give you feedback and maybe suggest changes.

    The core team looks at pull requests on a regular basis, we review the code and guide you if needed. +Here you will find more information about the +GitHub Code Review Process

    Guidelines

    • For major changes, please open an issue first to discuss what you would like to change
    • Work on your own fork of the main repo
    • Use a separate branch for each issue you’re working on
    • Use conventional commit. See our Git commit format for details, +and our Git guide for our full guide
    • Please include unit tests with all your code changes
    • We follow Trunk Based Development style of working with short-lived feature +branches.

    Pull Requests

    Please try to make your Pull Requests easy to review for us.

    • Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon.
    • Don't make changes unrelated to the goals of your PR.

    While you're writing up the pull request, you can add closes #<issue number> in the message body where issue number +is the issue you're fixing. Therefore, an example would be closes #42 would close issue #42.

    Git commit format

    Git commits are required to follow conventional commits. Please see +our Conventional Commit Guide for examples.

    Readability

    We use the pre-commit hooks in order to ensure uniform formatting and to exclude potential code issues.

    We strive for readable code. A few good tips are:

    1. Self-documenting code with self-explaining variable names
    2. Composition over inheritance
    3. Functional code over Object-Oriented Code
    4. Rugged code to write more robust code
    5. Domain Driven Design to to match the code with the domain we are working on

    Code style

    Except for the pre-commits hooks mentioned above, we also strive to follow the following code style:

    • Use capital letters for constants i.e. SECONDS_PER_HOUR
    • Try to split methods/modules/classes into smaller bits of code
    • Remove, do not comment out, unused code
    • Use types and type hinting
    • We comment the code when it is not self-explanatory
    • Be consistent with existing code style - try to make it look like the code is written by one developer
    • For Python, we follow PEP 8 – Style Guide for Python Code and PEP 20 - The Zen of Python:
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!

    Please reach out to us if you have any questions. 👋

    Thank you for your contribution! 🎉

    + + + + \ No newline at end of file diff --git a/docs/contribute/guides/conventional-commits/index.html b/docs/contribute/guides/conventional-commits/index.html new file mode 100644 index 0000000000..856bd96a51 --- /dev/null +++ b/docs/contribute/guides/conventional-commits/index.html @@ -0,0 +1,17 @@ + + + + + +Conventional Commits | eCalc™ Docs + + + + +
    +

    Conventional Commits

    Git commits are required to follow conventional commits.

    The message should be structured like this:

    <type>[optional scope]: <description>

    [optional body]

    [optional footer(s)]

    The type can be one of these types: feat, fix, build, ci, docs, style, refactor, test, and chore.

    The description should be lower-case for the first letter. For description of optional parts, please refer to the +conventional Commits Docs.

    Here are some simple example conventional commits:

    feat: implement new awesome feature
    docs: add developer guidelines

    A more advanced example:

    fix: prevent racing of requests

    Introduce a request id and a reference to latest request. Dismiss
    incoming responses other than from latest request.

    Remove timeouts which were used to mitigate the racing issue but are
    obsolete now.

    Reviewed-by: Z
    Refs: #123
    + + + + \ No newline at end of file diff --git a/docs/contribute/guides/git/index.html b/docs/contribute/guides/git/index.html new file mode 100644 index 0000000000..c58fa06961 --- /dev/null +++ b/docs/contribute/guides/git/index.html @@ -0,0 +1,22 @@ + + + + + +Git | eCalc™ Docs + + + + +
    +

    Git

    Git is the version control system (VCS) that is responsible for tracking all changes done to the code base. +Git is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development +of source code and documentation. We use Git as a service through GitHub. See GitHub Docs +for more information about GitHub and how to get started.

    info

    If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including:

    Setting up Git

    Go to git-scm.com to download the appropriate git client unless it is already installed on your system.

    To verify that git is installed, you can run:

    git --version

    See GitHub Docs - Set up Git for detailed instructions.

    Using Git

    Git is a powerful tool that can be used in many ways. We recommend the following resources:

    1. Introduction to git - GitHub - About git
    2. How to get out of git trouble Oh shit, Git!?!

    Below we will describe the most commonly used commands and scenarios when working with git.

    info

    In the following sections we use the syntax <some text> where you should fill in your own values, such as:

    • <change type>: conventional commits change types such as feat, fix, docs, test, chore, refactor, etc.
    • <issue number>: the GitHub Issue Number that you are solving. This may be omitted if you are fixing something tiny.
    • <description>: a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string.

    Cloning a git repository

    Navigate to the location where you want to store the code, and clone the repository:

    git clone git@github.com:equinor/ecalc.git

    This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the +same name as the repository, ecalc/.

    Tell Git who you are

    git config --global user.name "My name"
    git config --global user.email example@email.com

    This is what will show in the git log when you make changes.

    Create your own branch

    In order to create a new local branch and switch to it:

    git checkout -b <type of change>/<issue number>-<description>

    for new versions of git you may also use the more intuitive.

    git switch -c <type of change>/<issue number>-<description>

    Switch between existing branches

    git checkout <branch name>

    Fetch changes from GitHub

    git pull

    This will update the local branch you are currently in, with changes done in GitHub.

    git push --set-upstream origin <change type>/<issue number>-<description>

    Send your changes to GitHub

    git push

    This will update the remove repository on GitHub. If it is the first time for a new branch you will also +have to tell git that you are creating a new remote branch by using the command:

    Check status of changes

    List the files you have changed and those you still need to add or commit:

    git status

    Add files

    Add new or changed files

    git add <filename>

    or adding everything in and below your working directory

    git add .

    Commit changes

    Commit any files you've added with git add, and also commit any files you've changed since then:

    git commit -m "<change type>: <description"

    This will save a snapshot to the project history and completes the change-tracking process. +Anything that has been previously staged with git add will become a part of the snapshot with git commit.

    Send changes to GitHub

    In order to send changes back to GitHub, you will use the following command:

    git commit -m "<change type>: <description"

    Workflow examples

    Pull Requests

    For Equinor internal developers you are welcome to open a Pull Request directly in the ecalc repository.

    Here's a quick guide:

    1. Clone the project to your machine:
      git clone git@github.com:equinor/ecalc.git
    2. Create a branch locally with a succinct but descriptive name and prefixed with change type.
      git checkout -b <change type>/<issue number>-<description of change>
    3. Add the changed files
      git add <path to changed file(s)>
    4. Commit your changes using the conventional commits formatting for the commit messages.
      git commit -m "<change type>: <description>"
    5. If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code.
      git fetch
      git rebase origin/main
    6. Push changes to GitHub
      git push --set-upstream origin <change type>/<issue number>-<description>
    7. You can now Create a Pull Request

    Fork the repository

    For external developers, you will contribute to the project through forking.

    Here's a quick guide:

    1. Create your own fork of the repository
    2. Clone the project to your machine
      git clone git@github.com:equinor/ecalc.git
    3. To keep track of the original repository add another remote named upstream
      git remote add upstream git@github.com:equinor/template-fastapi-react.git
    4. Create a branch locally with a succinct but descriptive name and prefixed with change type.
      git checkout -b <change type>/<issue number>-<description>
    5. Make the changes in the created branch.
    6. Add and run tests for your changes if needed (we only take pull requests with passing tests).
    7. Add the changed files
      git add <path to changed file(s)>
    8. Commit your changes using the conventional commits formatting for the commit messages.
      git commit -m "<change type>: <description>"
    9. Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code.
      git fetch upstream
      git rebase upstream/main
    10. Push to your fork.
      git push origin feature/my-new-feature
    11. Submit a Pull Request from a fork. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.

    That's it... thank you for your contribution!

    After your pull request is merged, you can safely delete your branch.

    + + + + \ No newline at end of file diff --git a/docs/tags/e-calc/index.html b/docs/tags/e-calc/index.html new file mode 100644 index 0000000000..31596faf2a --- /dev/null +++ b/docs/tags/e-calc/index.html @@ -0,0 +1,16 @@ + + + + + +15 docs tagged with "eCalc" | eCalc™ Docs + + + + +
    +

    15 docs tagged with "eCalc"

    View All Tags

    v7.6

    Breaking changes

    v8.0

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some

    v8.1

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    v8.2

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See

    v8.3

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See

    + + + + \ No newline at end of file diff --git a/docs/tags/index.html b/docs/tags/index.html new file mode 100644 index 0000000000..3c91b7b7e0 --- /dev/null +++ b/docs/tags/index.html @@ -0,0 +1,16 @@ + + + + + +Tags | eCalc™ Docs + + + + +
    +
    + + + + \ No newline at end of file diff --git a/docs/tags/release/index.html b/docs/tags/release/index.html new file mode 100644 index 0000000000..3fe960b4cb --- /dev/null +++ b/docs/tags/release/index.html @@ -0,0 +1,16 @@ + + + + + +15 docs tagged with "release" | eCalc™ Docs + + + + +
    +

    15 docs tagged with "release"

    View All Tags

    v7.6

    Breaking changes

    v8.0

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some

    v8.1

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    v8.2

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See

    v8.3

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See

    + + + + \ No newline at end of file diff --git a/img/docs/asgb/asgb_lpp3_pd.png b/img/docs/asgb/asgb_lpp3_pd.png new file mode 100644 index 0000000000000000000000000000000000000000..400dfea968bcb91e6ba47099959f8fd4b79f6e0a GIT binary patch literal 8296 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 T#E$U)4geHislKd`Gx_*$?|LlL literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png b/img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5c446cba995c2c97bdb0fcd265fe02ed7052f6 GIT binary patch literal 150658 zcmbSzcRZGT`1WmOCVTG?krCP13Yj6vCaYwxvR77!>>Z($Eqjk-WLC%~E1RsW_q=+Z z=lA~Jf8WnXo}S$9`?|j0^Lw7hc^t=ig=whWzKBPIheDw)Dk;j}MWHYVQ7Ci{oD1+T z&CT^g@E=?UMLlN}im)B|gBH(4NDKdn?V_ZrfW3f=gO7nrXJ{9OLNTF~=5 zlgJhJ51P{LG6)1P1o#N#)X-T(0|_*xWlS~6WC*Aqd*(rOX?UYwZx#m5*QKW$Z39*Ix~?701%0Ay#Kf~C&6@|8 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%0AL8tOs!vq@T`rSTpMNWPKs0dGCQh#N6 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ÌwZMAY&g+Y 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage1.png b/img/docs/asgb/asgb_lpp3_predef_stage1.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0bd23bc3d1e24990cee592784313b9d07f841d GIT binary patch literal 19860 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 TBsmQTY7mHf literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage1_2031.png b/img/docs/asgb/asgb_lpp3_predef_stage1_2031.png new file mode 100644 index 0000000000000000000000000000000000000000..2adb02883040bc2fc35eb6b36d6032bd23b9bbd7 GIT binary patch literal 19734 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage2.png b/img/docs/asgb/asgb_lpp3_predef_stage2.png new file mode 100644 index 0000000000000000000000000000000000000000..495e68ea58871f35166eb491017b81c633829e91 GIT binary patch literal 18719 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

    ;L>Vl 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

    fqD1)+6CiIoeHfo4dph1~wW$qj4|k7P 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 L`njxgN@xNAcVBYh literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage2_2031.png b/img/docs/asgb/asgb_lpp3_predef_stage2_2031.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad0daba60f4f955ff4dd8247f9cf3ceb17790a5 GIT binary patch literal 16372 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

    _9GC=MNPB^=sVaHod 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 a|J0`%^}gSnSW*tu$l&Sf=d#Wzp$Py3Opy`* literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png b/img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..a426c3ddda5c2ffa3101f46e792b71202acfdc74 GIT binary patch literal 11469 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png b/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png new file mode 100644 index 0000000000000000000000000000000000000000..64c6f8296ac8dd3f443b43d2d1d83cacc21d8ee8 GIT binary patch literal 7903 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 W$E;WRIB-R2fV#4_QpGcy$o~TSWmR?n literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png b/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png new file mode 100644 index 0000000000000000000000000000000000000000..332651bad374ab39473ef1b56d1a02d23ee6b322 GIT binary patch literal 6555 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≫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 bwr?L+N^ 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 UZ>u4&>BWU7s#=dK9-4>#7xbE$Jpcdz literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png b/img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png new file mode 100644 index 0000000000000000000000000000000000000000..439c83b3ea600fc6859f4bb5a04c20e9789fbcad GIT binary patch literal 40153 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

    ^c{T3c;w@OY3KDVb~zx&dL2;jinH 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png b/img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..58be5ebd7a6d798746e2ee3b2fac80cf9d2cc009 GIT binary patch literal 12063 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 JOGUqY|6fwR`3L|2 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png b/img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..58b5750809575b0530d7692d7c1b5c702ef8c763 GIT binary patch literal 16959 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 LS*k?R#Q(nl-rGvw literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png b/img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..098f755b46e2d5cb0f931e6386a32b481a31c364 GIT binary patch literal 28371 zcmb@tWo#VL+B9g49dlyl#LUbLF*C%>FlHJvQ%o^4Gcz;WF*7r>$IR?+?tNcrrTw+5 z-5;&dwA6I^oT{hlsSZ<=mq13qLx6yQK$epHr3?W9xeDH7;Gw{KJ~~#3z(0_V$`T?F zRg(lK;6E^C!g9h85Vg^WZ-%ho|6lDTH60-!Q2PI~K@QoKm_R_-noIo>R&~=m&xF&# z7{VTUe3|j&9nGc6Ga3pgseN2V#AAQJGY%V!E0UscC*0*CQcBfJ<`-Q(g12hQ)nrw_I^ZC9)4x=`)Ih#MZ z3dYa1$P9(?7khjTnnQjh!pu#P4w51{IUpZvBAKUZ$VwZD1T2jsBBn3kcK)4gK(I?=cq1iI9KeO&Z|q`R`5ch*$5|FT!7^%g!9O7QPXb$s1&ysz zy+qIYZ!J#^PsLc~Dr%^7!Jf*qMYMvyInEI{sNJ}f`2> z)FNnm;5YXc@<$iWv=HhGsGVSxj84)f_RILfEzTT9SuOE_1nBzX`$f=S?F7l)ZSAw_ z;zg2Jd@t;i+O3}7<=gJY$6=(B2g2Oqn|N^=Xfl6+=$Mu%;?L{I^9?{`V?Pe7Fg*0e z`Fel_l6kDaSYABcul=f~^Ttr=Gyflhum?Eq+S9?*4p7q|tpif=%RDhsM9l`Ok_Mj+ z&;j0{Uz?B3J&E9_@?Fa=mPIc^e9E%2JhJd60@cv)+E2Prji$oZuOa~pyWWNC2!!<`8$ERLNJO=Mk>VIaPz{C7d_{yZR;3RpeDS*9XlPh# z)`0jDxfSu-L}oZmS=MY7T_lJIiDuWJ!b4>QBK$^+ZVtYxARk|N6DPs=U&|j@%!ls8 zgIoI2c2i{>JFE)Mv|m7zZmmdTBay$t1OtV~wUG2l>xC5z0x<5{-~}T7t8!pKLg82> zBtOv}DS^@}&xcm}h3*)Fa}`#Jppm;Wf9Okt#vnsllq6eJ>?aENA{weW1Ak`w0@;%o z2&>ibe1hcnMY4m$BkxIrzBYWe{2@wS%L61E37q!nB1OlD$8dgulOi1yW{tx&iIdmJ z4PV>F4AR^0%N;ze9mK%IE}lFkMM){&5LHpRW*%+}OrpLArj}J_TMheRHBvHS!L_tv zUgWtV7)k_G%}rW(@OCn8Z+eJ#=WU=BSpE_da{x?cSeTg=QwznEk+il7s#dC8Me8G`^6y z`Ij+`{x~<#Ifyc^S{f3X2|rY9wraV`mLn!TKdL`ImbBiDoxdVRz_e3N{P&#X>ss4E zOWT)ad4$=y1=`x$R5A6CAHONc$zdzOm=oiQT7)J7MkVkJ`u_=){vSe_A9Fmb1!W41 zQ&Ggce5h1DtG+2NoN5~Z7(6%7F)_vb3CcJ5IXR=2-Qx8k1Uu~ig$9M}ov<(GY~&$Q zGp?V=C4rGO1wxWpGy~Izwc)U=WNRCOhC)rGIx%X0_yf&hTQ)NDjFU-`03Gj(glZG` z#DADo6}D>0ID&!b7RBD!Ve96Q)z;i#WHvU)B0!f(LNKq~TSeAnjRVYl(-I+%0rk6_sM)7$j9CXdx;D1X0 zFkuyr^Ec@HVWlZ~0<3?4RLRGjWv>ugok2-KK|ugmcW4c|B8303j$M>Bzikkq5;~p*%(>BhrTQMEYu^qp9pAx}SDm9DRTbgdOqX{y&?) z$p=zTA{bQ%C&0r6&*m^quvAn~JJE!{y$vw;!m+3Kp?n#FL88ENHXZv93qiAHV77^} zu}wn@{I!|Jg@!7D&CsK3%B?#H2JZ9)MG^8^s>N_Z=#8fA5tlD+XR;w6wMN?Gjo%Qm z;wBgy`;!>aUCHCY9u7O)NAQA~tkmKE3wizDr%3@+L2BK>TK}O=vA7zB`>>h(FKdD?=J~qUl&Tz8_mCA63B{4SaIZ= zLAyhP>AHY#J(H_;#ApIRj9f}Lqg8oyE`D?@pFt-_t*SsgBFAze&)T}gAG**g08rWa zCkwg25&`OSL!z2R)Q{zi?MG+VypgJf9_ypev@tCcXakbc;zqud0I$%Z)+FE=k2>w zzrZcm<9S)%No{v`ic_KG(MX-%bg*&cVA0OBl(E6dg+S_@y zI(%^H4k%Ce45TqZ3)g$Lsb!$agfTuw%hh2u$IP#FL$Ys)b|A}h5^8`#zr5R1zSJk`&!5~t9&D$? zXNnFC(Gm%$5|l_y;iQK-YXK6Ds8_T z%a$YP%(S-2{-x~TFuzi-s)*L;$vI(q*Jm0+P|2b8?sc;2stY_I1&ZHU=_vZ#i zOd`Pi^uuj;(~KdzUg*2z92}$!u+QA%Dut2OnjBx@*3XPDY)fjV_~*VYps1(7uH)fzld<+>RosZtD*Y& z>>%B-$fv>PvQ~i-<@75MKs@=4Ft7Am zsW5ouE#Mm;ghKo-d|fwipTDaXP7`K0kxLuiJ<&%!+c=3n51DW4Fzjs>1R*#rAer$S zyU)ky=~u4b(eb$4-BpuZNHFMik~i6S4m=Qk(}R>d{WDiPZjXVh8)qQ0P;J+22u;CS zCiS1|q$te23~x5*3HlVP06T<}aI?D`HJWP?Xw@7mFF zonwX0=-Red?sY7{Io(y%wMn?JD;Xl*Lt*3eCnSCBat$?-c*X8>=C+xHC@l>>yTdIt zGxKrj!dIw*pI_(J6xNGqx#ss7(jRDN-j}G1j`b!}bXpn5*1y;d&%d{~U*SIPF~fj9 zf?fOhn}iv>4YKhgvieYE_kzYg198F-*K_@?`Z9}?>tuf>YA3iTC&B)W7WCdnCSlR zF+#imiGbGBlPLZWFE6|cfgEXNZ=4%9`1_ZE>CMV+-fx!AGc{WHiz;1R2|=)LLQ;H# zjaKv3-O9f2Vq)UThlgah1j^sWV~y2JObVKtn~SyyNx19G_3V*437A}ukOVzy&yWXc zI1>=D8Jy0RmHvZbN=izDFC!CcPNra9N_UH`;4if(LQF<>yPg$3d!TtvTq%xcXtcYH zn2L9OJsY+7=vIxVNQg#VXrT7qPKQ=NlplmP&oC1z{8drfWO}z1VLxoz^?Z zL25qSbA5l#HOo29pr^i0dwxEC79c{1?Sk0=qL;l`Dv7l^!?*j#JP^}lsT@Hb!JH-$Ms)mCPlVY#wW zD)(V_h0d1qu+x(@vhDi{Cv;XJxkg=o;NvJr%iD z;jK1pjq>$E7A;PI+q63H(G zANL|5lNI-(nFWWR*JiJ&2XTz?L0QZ8 zfcItoIrV)SIM*A~D{AI;;q~_I9aJBzCq9TI_PYP=kX~ zPZF4+qqDx^&KKVnhx>YnPSsT*!lvEcUy}%!BHj}Fu0XOcJyyZ~mtiz&X4l6nB#IZe z&UyFvodeF}s!KU+wq4@&x9X> zY}5fPc*&pec|LkO+zWP2=XEX!&yVjJwOL^l75DZm(JtSF>~D|h3Dj*bxw21RKXa(3 z;A?R9um+W|H7nMZ%v{KcGUyRHQ}A_cZNu^h3!cvjTJ@5w_y^V%Pnn}a%W==(IXS`5 zv0153b(_Z9ct%g)a4!G*1@V{LVcxI%@eQ z*L+eT15B*L#E4nYN<5EG2HBW?OUx5(l`iQ>^3Dhbfou~AQlLAKj=N6q4}!UzPWyK$ z0$sJxVO`k)DTuuUtHl^R$Ya%4j)`>6vd4q7na__}``fyc^5Xe983m-e`=xWqX$e<# zGgF&t+{}=O3#_X^eQa8R&#|V?Y^@baaRFS+=a<3aTWt9>;vgvk#`J<6ROAfV zw5TNf>2`EJOdOKRqxRvL^uEd>xnir#ob6x{z+=+O+}Fk~tr5@hO90VPxt`^#Btf^&cswB3gyO zw*CpZxj8lKARz>iclC(^4xB=P-X{++ z0))Th9}o)Th7Nir?cwRBht#lI8oD2|v)Jk$FL|S#ZMHfz``ZfDtb7h5`fm<8+-5hD zna!u;xe-zMhDU}I)326^o19$gs*FGjcxR)uuz^zYVM{zReZ)u9}4me z>iheLW`F|Co#j-t68F#UqwUv+jbSg%-twi=`feR`S}E}QTa{4ATNuLqHNuPQAc#;FWT&xs zxfPFz0cz7}S2MNAGy?EiZu&bmxBud^aXHX?r7r*UPEE*P+3EEEi3eZY`@>A^zg8Qh zqqCeEe=(E;Pw0kWeeLMC!`Rr=#^YDy+oTFy-dhkeYuAh0pgOvluP5!UKcGH#nh-_3 zIB6|UVd&v>|8n1)x5HOmf;YXgSK{2Ja;Ne$Muf?vcf8>VQInfOR4^iii;{_cgRHve zZ?+c;@RTwkEUdzncxBc3AR=_`o=#MorEy9`%E1A2NyIKv0))0zAU^e$pS7WgAAQ+U}}<47#* zXY~2d|Iw8F$Bi|Cz08n-VOsd*1cpRENcP0>3OKI zCeipInxmhn%%E#Nuz%h1W7IhKv9W;-T8V@C8`AND!)^)W4;z2c5J}d|q)L!L&Qj-6 zDWD$vu?BEp^KhAE0;uH*A$~n)VUcZBqZd8wos&^kN|`yQ;KMJL2U)mQJ<8beCZ2cdc;wZWU~9js|C` z({7o&NK1-SzOHDG6Ix3pcuMrkWakmT@Fex?*XrLiKSXa?G8_%OAtav}cjl*3ueFXaD!4L zAj`@qK_T7T*qrxxjlkAh%k$8pfU}+MUN(TLeCsx_pOQfypVve&Ti#xJZ1J7jcd#TopebzP}>^7_#V!$Ht;QSY7C3HBGjQ@?&QAqFDh~<}1!O8|4DCWJc7Fm(?Rw`W#O01RNmor+zHC(;=z2oM|vKf(dYH ze3Y4$b*F|qTNbA*Q8j;kBt2S19d;`b0GyD+$fmJ%)#46Gh$589+ucO{pS%Apo<_aq zh4Zm}J08^W)f?}qXaMhk5^mS|^IApI-)KwFEZ>;i0Iyy%1FDt4sdWv`23#R?H0U>X zO33$T)l)`4dB6UogwsZ|4HCItX^8$c8D+4RmX08tX&6FN!g_9Yyxw(ixrX9$xqR3& zbGt>KL9=~(l7R`<`<_JT>T7-0^6Svqb3-Ns%7PX_i>6Ol2=}((?Z(WU0a#l3^>vQI zFGuq4@T&o=#o4q9S$r1DIb8rj<8K7A!GHG;ItBlZ6L1ek*aim#7LFy_J)dB@zs~m}`7Lky!%sZ;(ju z%9vq($b*3E!J(B!T4N!s`Ehf(kD$YaW&VqEmwr8Lgq#eb<8+HOvd$tv-_g~%3&*3~ z?$PBls|$GKlTaGQboxA|Ayuct&Y>f33A1_s2A60~fXDJ!Y zHn8tNS2jUmLOU!I6S7OTo7@16OV(stp?vUytCs3-+p63o0XCE#SSUU@l3(2yzP$}g z1qa18*n7XmIV`ZJ;U&$;6(^7XD2r1(&kS62SkUO=AMf7jlb@LEs}t$%dhD1vJlALZ z>=CHWtyYv=Z|_NW>av)@8}p3LsBNl~^dUcA>+DP{N%&-8l`3OJO?ye6eL zU1&F&G&Lt{d?U0W>QHHNB_3WcGt_^c>i)HbwXG!EFBjtb{5*$pS4Ol-VgAWzL;d-5 zPbVM&3BGeAuON}q#yZ2_pI4#qWh#_3^pQ?7M0^@u(S>a){TY})hF&+2k<@+&W7GyJ zMQz~+Gq$#z)C)IZDQn2fvFf&!9ra@)%R0sZx%s-JdyVP|SLXAyn)LYFa^T0v%KGsgQ3kbf4FC)6>Q`qoVgL2<@n401K2`O7Is9QHovdr0emxX1 ziqAF&1(QL&*Z7qkbBc4$bQ*(<%|vc)Zju>Nlv#H32+T1LYgWFFP+M_arhxTU+63>8 zhYU9XhWoZqoOo*yEsNuR$_n+LnA7NXbV?4*`1g%L9y6h>VwzO8^f8sX5jhd`0J-xGx$^YJ7%zj<<7A#qOi#E>7L*Kpv-aMJlptSqhJx!Ni zZ4_&_qpmjDlQ>}K3x|O{1ZsAA$JG`?I`h~(Rq2Dj_uBLm6G>Gs^t`;uV+RaRQL+Ka z>6G~rCey^uhzEw|lYbvFflLC$qMMT8Tbxb46f}l5A@r4E}pf(M3>?2YU`q4{gMEPtaAgjJ{EK9 zkGl(3|J12PAiM3F{qoJK0;u{0NX#UpjOv!<$k46?K265k^j*DK3`=&Zkoc!qG>(U+ z^mOaphZ<@{Iczp09_-I7ZB1EQyUnT>vrG(j5@`?N9#uk6Fi+|l8!3pOVQLkTb5{$? zeJ+=aW)f>8h+XWCD1a=}LPf-=nQP5&=alK>F52X17 z>Vk?r zcgoZL!p>^97JPYF#yx0YK2RW0&3=2|<#DT5LG~3!o*~)MJ!6U5!rlFuLS*O8K~&9d z^@0MZ_k3_C-D>4bt=w+|XG1rkX`K|*`kXKWja9we;Pg>IF8D6s3CscXj5S)B&?rxv zDvIJw_x1>}tSF~*)QID^mM4wd&eqt%z5{uVy9j#NXM-^HB_l6Z%2$9oqcLXe3oJPz zh@-W&RG&+z0Z?@*86*?K!)mY2)C?h@gOgE5t9-&q&u#N~Ic?}+4)(mWJ2wARZ`;MQ zHS7$zpf|vTEZ(a!A!~(YC3}Btw~N`@DQWb0@K~0E-Nd#4B~B$;G;YdKhv@AYtNTr2{Dir zsJ@sC>*>lcFN{qL*RYjs|wIP4>Jq9!9_dXtW zv`+j%%XmpMjp<(l6mZ#-_ogohkHs&Er#kiTmvK;|xw4>)q3~ETRbl zQL-7$eqm|Ierwr&sq`oXqr{J7M^)*hzsj{5*`s<(4|dd6_&t{kb7<~)2j45iIx{e{ z89qwEuJDxJzfL#mlexz8YscKlC>Q<7%&WOUo4SAi#={8xdUwi_G6h1>;)=yQ4xlf` zw;SFsY~5b;yGIAv>F{njmDzHi=J!RJdlC<{K#ifH*sn?d?Ovz^6)D3}fUQ&3?nJdur`hAl#xmn?5A+9zFb`#zC^x=c%=S%AtyL37nJRhSfQ3*P)=y;MI3}Pz9CGbtJ zCpb+;%khMfla0%?Jjq8P4wlh`T9e-HJpDU_;;y7~6^G|H9Ha}Se{5r5Pz|A6@;>!5 zh!d>hzq5P@?<1nR&g@=t0=ei?W%Yhg=2@E>CNa|1)Ytx1kPY4d6nDP$kGuOUuXsDB zMS6JE`?z>qz!5s~xag+nUhWB$6WHkCOcwm>I!M#EHq|iYzvPG{tdqZ0gYV zF%3Uc;9;>20dP@Sj4@*e2H55Pz$elpV2ihB!{>7}KZhDtlG-ApF}m^hLJ`Qz-no|f z2x|%LxU1$m4Q)*iPxt-9{m>1a;QLFTqn-HmbppujGyzgt*9_3WX3wvd^(*kkhK-EK2VX-5$Q*mf8 zD%JMt1TWm(%l6wWdQmrNpSKU7x>1vscF!KTxYy7l(KU zr>1NNkxo}w+Nba0M+iNgU^J&DM+&W~=uU7`Wqe*DiT=oGQEN(N@+73= zUz_$9%i-5)O_Ul27Ti;Bct>>YJwl)*1Z~;L%F4Un^F$8qjUMC-E6Q4%uxyJI0v#Q^ z65|kLp2-BsH6~Pj1b#OsffxlDl+_iTdu9vZr26}N21YL2o!AS3BE@ zcB{9ttePO-*&6-_an&RWDrt7JwU!_~zi!W-M+naT6wV_Z=YXNmgjNVrC;h%o+S zO}B{fil+8w>kj^lJp{&2R$5MeR$gAp%S1NlE->sX>UG6Hu11J}?K`-;Q+WEmwYI=Y z_KKHg^ZlJeAoHEeM+< zdyMB3u{6ofvPN>eU>1k)Hgv+5z}peb#Bq&+%J?%2o0DA=R7883bk2ust5t)ek9aHqg~}ij zkK38ZT9Vw8mtL&q5lBWZ1Lu~^R(ivQ-;>bG3FNSLDAAndLPtxlr0Hkzb|2ln*>(%R zNpr#P^Wg96Xf9SShguUpH&;rl9vaDKBB}W`vmBOvnMX}~aA6&d0ka_r`4Uu9$;VtQG+2l6nbI=9 z%Ssgb79GTK|{ zv=Y@iEnFJ-%~c&C$OE^9zT=+niCXVlmJfrUKWTlP_>|euAvq08!+)_hcbbBTZhDZ= z2Gq;4TnX-Z*}UVeXr<0yJE_wMA+-8Kw^5RHdEjDi6>EFGTzRFQ%@2S|PjDNaD^zI~ ze9Y929_S7IWkWLbV-nNhH~?xW&m4-T$MsN^PL2*R#;iG}d+Fa$wHnOt-^2(Cl}(S} zd7aFO3GvgZ)QjNdCI|@a!aAEgUp%_JK3GjJZf`Abvwc+ge8zKC$>Rx5^cXcptvD|U z)|*wlcFV6xUlty#8Xt!>8A6~rx*|PLdiX;Wx}~MGnH($1hre!q-!7@6Gu0J3@b>QL zA$cez1^3Ef!wR(LSwS3U(c^KyA_#rnw`(bEw7Zzl3+z^RHydpN3(K2(GD9ehf^7Wl z;oj{oQw%$MAuiV{JL`?bMwtvCobRYc@I2mmaPyS;RU8%#KpOn;Wb?$8dw58M#7PNB z$+3xM7K6>q*a_(5YH>G_-xUAgBKm|zkuNeMr_B1=y)BOPemPTQS_g~0{JrnOugV1{ zV92#NUkX(-dE!t^gIq13=jL1OTW8}B+(*izS_l>9cO~T788of-ayx)qTiqklvAUBc zL2p%lf4MG}WmqsQYfNY~98=K$XS4BM-L0R0`_oW|fl-iAkeq#DVSxE3^}xu?;;$Y! z8TW^Mq1twM`Asy|B$vxsUeG|vxSns3M0jE6s;)bh4QlyeQinqKD>FL-1`Q|kHyoox zP^K?z5wn~T$yf2HC<)LZwi28fucr4J)xM`K z!tu@zj2J%d%o%W*nE(P?z1hz$dh?G&t0Xd7-THs;(_tV8m6`7QFFH$(>rf27 zYmc%Xn-u|{77aXLTA1@jnDMC=uDW~p$G6-V%O!agJ#TOV!`g`(1rd+i zPN4!&h_jriPO8z)*-<(az1Gx*a1g7`u(H{5Vh<{E7T*n5IkMH`CN>(}fv2Nqtpn~< zFBUMhcMu(Xz6g_m7QTVuTO}r&5#t8#{v;zc_4f}(u%$+B-g_#?`=q0%CSTQ>s%hy# zA;~fPOG_LeFMlym-i$)X>-((r)H=qQ^Cg$3I^btsMr-RI7t%QNqa)QSx&-Ix zoKSn>^hY-y9f$#zb1qBO8eA~&L zm?QN|O1IY48EX-~~($;1mgxfYa*8=HTk+?o9l#{JB;e53j8LReuIG zsbMz4)XGS&?dcn4wj92xDT9-f{j_vJedY9~^xeQEq3^5N?#%Qz=nUB}7t7Q8>m%`9 zK3<53T*&6-x}YM{hsi`a*crRY$pS`)N88gg&70Y)L8FM?PIC9x#c3$CLS% z;*NMznASmN@V$N*TUbho?>j^9hvbjT{T=1$K82Irw98`yJDaSmL@S#8cJ8&`&l_lZ zg(FWVXJ=d^<*dneei4A9eI=SC4~X|jMOq^b9!5D%}v6vnYdlF^B@rDEY_#>e=M8JJ*o5&)ECwVO+X zv^nx_uP79Pc%W4;%yZKzlpdgw4UyWWN#rYJ(dXBv%rU8jNnpt~a;;;}2H%NK$`bdBS))FgDQ#d$bR{-Q$z6Rgs{Nn0qRw>&3(d+y#FY`Yy z?{hQ{#$gMO_+U2**wZF8ulaZw*hyvLu0}T(5wc(|s^ke0m9t3R=?*s;;64`}tDSC1 zSqq^K6q*WxTwu&hOmtfvD35(T0djas#Z8{iVT?{wS2qjkyeL`EfXxEYA;!sU=CV6g zOj7Zf5|bK@{{HfeFu7MGF6SK&_r3Syrfu@?7_DbG!bM8`UPFe$q?}}U$2dvg$oWBp zGy9!ZPJO`O$l~c^=iA`@1!f8xVC*}eP9Y5zE#;D`4S9UCHA;GAjs}oJdjM)I(F=lV zhpKc2`{Vi9r{Z!jyObT2m4)Q)#kH^ z$uZ##E~$F~waYqDvT6{#_FNgS(OLHws~4-4p4EjG;F?LV(_-xa)a-i3?{MJ31#hM4 zn0U&q(6||K80qcdYzsQs!2{A0L;$fVLwdb=v-yZ$c-Z?#M{36uwqP^6XX-ah)y*bM zWKb5X7td0;4hNW7%qy+G6=XsI+NKbgiD&UA&OjWrtnOOVIysbi9~W^^Pbg8}NvgRNYPfXiaX?OZ zpPkdS>O_f@(!^kc(>2iqjY9ofWGUrzisv%6&ahCu%&3>X>!2*A+KvS3SISfO;r`-) z07}H-3&$q8J9{sSVFOe828Q%Bc+kT2+2+dUM}9FZENmTAkaVHtN`udFrROAyi%9PF zY-8x;xz=VY@$VnWVG_Bpj3eHq$mij(nY|zTNs*uxu35$`={zeJ0J$Z&da^* z{cyk9OYE}pIJKfcfyBy+S@r6i{By(OM{H9Pg)VQ?y}jczxb4A3dwzvBLBy65#_t(d z)nv64x}inR8SsG8!4j39x4Fqf*so#L8rBbBGuoztUS)1JGc#k((NQql#r%HI z4;Q@()&|5n+WrypGo;k_V~2LW%7&QubT3+Jk}$K`ZT0JPtM}MeGa-TCZhv_04%j;K zx#4@bwOgvzVoB$49^)o|q1T@3&AY6~`HDi31yeIe%+F#1|AY_OwpFUaKFa*3Ywr|p z)WI~@6e^+=LE^yq1gG16@aO%{|K^*%8B3I6&^b?KsQ9@2P}tclG3>k`W2UefPuhEq zjFPKqU6fyimce3WTk6sf_vZ2g*qQ7L0$&+>X2UW|VM_ zDv{uHj73pmgB;>k_ai}LeeL0O>j`e_tSYtXLa21NnVD6$(X#Li*mp1x(QZYP{NM2k}Y-S=8r=r4Ir!rdy zjw^y~*|%m-yccBbE*Zka6eI!Uz zOm{bp-<`<&d7k`oCEJS_>)@M1IA!t?4^J=mapso>SY+Y+D}V8m#htZP1U22awE0IX zollP^Z}gv1-d`7Ml}n*OT;%NZm(>YLtLxDu}5mLw3nreeB!bGx;6(PArfWJ zLEJ%eScBf4CT!%Z9FpzaQ>gztVb%4{`c_=PjA3&)8MBAnZ?~5;$2Hl{ z*i3Z&*Ccq3Yqh&C&DRE6hU*F=3!{&*Bw4Vw>Xr`{Gi>_7{nBN8gp1CmBUHNw}cc&Lb=R5cR3;GgE>9YAfZb%>z(eIpBtS~DaM5P1o)$#H-k~fOGRS&6%`p?g`)$TG?WSentk4tYxo??`sNk2Ikm>FE{_53RWtTeyUT<}6nxpKz{J#w>v(s-ap2TA7NsCqBe2y4Y z+g-d6Z!7prgA5%Tl6(5boxqs}e9j8bhuMh^uhgJc3$RMmSfZc^Sbq9df+fAJ1mnd+ zJuSDdT1GYZdj`dnDOJ#X4GN2d=-2tWZ=FOj2N?OlU2KD9({RC3m9fkzN_LZj{cC+b z&aF;Fz0;91M~Kk909dDeXjQlK#dr2}*YV7kZxwwanz`1$XJRepB=hCczl-@;F(C4A zWnQ4>oII=~&XtE3ahiZF%fkE%bh^cv;w71qcp7=v0M!jq8f{yu%V>gl!)d{gh|A9L zMdh>h7+f>sg$`ZFqMPYg;KZC;&Zt&aM*2QhhzWB3?5vr%jiqD|4kI97uDMsy~)hQXghD{u$Ztk1?JQ7 zh7ax7tCA(9lhSw+&Gmzu3SuMw-2)g~ z$aeB)N@r{ttp9#<@p$gGqJnX>^EA80-;q(ny;@I4OJ%-NA>6Je2kRw3^&`3e0%v;H zJ%Ws!y?=F7q*OJ)q&uky7UgWE$&{4I+F~oH=Gs70cUnAlD<;QJ_v_J1zO`2s*NdL$2p%sk;~|Ev9cXQz zWoVS@gPqwz@A5j4m9pKtec*`SAt7%`44UP9Npk|`+{mKkm{Rg0@?pa z0BUs|EFNzk!`J^4mPYlJtm(L)zpFaG@VOq@T%5?)B~+%j(QvPGai+t-t@EOUTRU6V ziDAOTnWVuA9|-PtZag1{GF2NsNKMsTY2{9?-r#XPS)E}$lFvep^myrzp!Ah8ife5x zl$HNgS!)kl8~;_^c4;1+?r!hy$E0SC?bKjOvs6@>M3bn(Bkqgv{Q{?$ z*}y3aTFwh`{_sF;D8OT7do1*;Q&Vlzlh4E_h1YzydUDf0PbN=}=Pt*g{S}op=+}}I zoMgj5e$e-?ff7n8`j>I}Ol2jc&Zmm8u>}&}x`bo5pa$y9bnsY!TiJx`sp-0*V2Z~u z3#uZ{AwaVKhPL&qHcUYVqhyAWUZ~mQ$wM9-@b%6zih@q_>QAt5z5bknVT7PJADyfSr*3GjfH+TQ5 z^Q$SS%P`RMg4eCiGx=cxpVNG<0mw>RT*iB_4}50yy?~A+ZH*pTHa8FAL)tE#u09IP zFUI5IGNJ6QbCL7qzt=N|*5v56BQDeC{K)Yq-zaL>%QKn$E2sVV+-!Y!SxPI1=MhM< zwxYqyvpkH5u=`!lSHSV^!*??Jv&5GkHIArWHC}V6{_V`YA}}yAefVTCQzA(XtJ`*C zt4nTfY>6a5jiI5rKA>MpL06B+_n9T`(?733PRk~%MRxRC(g95Mi?)jq$wCG0^JZf> zN~>qM^`l(1xp-d}mCFU|6)t_9C=9V^{2kwnz6w_&hy5cfv)3V-;eL1T;?Y)8cIWMAbH9 zgVEW)<^l^4+49d+qqDi#?daTZ#^no@(^Avl_fAdYV_yV=O7|wulW3EaTrUp~4^&9L z4b7`+|J2C5dV}C?unJLg%5!Db31|m+QYiNU`0(;ky!YAU9UdJ zT2Cw{!0Y-9ps!7jOcawc)?8Ay-Bw9QF^7&PwtjnY=9fS^+u1dLWMMEIi|S8{b-TA* zL&5!Ze@2bm&RITo^!`#sYj)n4 zK2W3Y89sZ~UUJ($WenL8I+KBP>{ z->{pdf|^e%z`qG%dXG}}sp52+1{Oefmq?(dJizNYbkkXD!Lgx^sj-n|iJ%mmY`}{q z^U`n0SvY7%$;*fA*KOms)Oqav@J*MT8)spWI{>1j4BnM=d<%SuAQs*={9N`i2b;M% z&Lv->$4qNARfbS3RJXLLwz*fd<6WPDA^RsNaZPNTw^pm$fPek}_A!W})02~{|0Gdi zWe?F(#q<^;kIV26FlXaBlsbzbZEZ#g0@&D1rAwhh8&N{icThQPHkQDO68vR`Bk<-o z9Su9XZmII(_ef8b<^}7Ro z4uX0e^Z4&O*CUmM0+KEmso9v>V1(sr=dAN7zc*g!w0bh(MO3Pg%LMdPnTOCpgRM&J@$UukgTjFZiU5-SBVAi*FHSfb_uRb zqjttUyW6y)R3pupkqQV{tuB9G7ibA_^3_-WwjPa$%GHcF{zD%Jh%Inx zlD1-(gY!8|7y8I)?49Z)6`c^C{f^;%TjobU>qKPz76ALuwFj`UiI zO;$fnsDFd*^BFSyF(H5c($2mub}|kt;y*hlCsR!)5qKO_xnGyWmE^%$>x%`=F98$@n zp;Y)zjU0pqLtdteeoo^+UkQ^{RWVaFx62~Rvto~(Fl4F5=q7N&w;NI4?vFv%Ynn^G zcJaS5sgXB�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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png b/img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4451ec6ff8212084a79b3d3d24c60fee3f0973 GIT binary patch literal 40488 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

    !6pc~wB4dJ(J_ ztQt}bHJ-)V5I=4(?{pN&?_P7qO=4Zs}YhN+Rhzr?-HGrt$1XjBE{HCT$jX9#_ z!GB@2ThXOM{c#D|+aW!wfP%~2-km-4*_>!J?@A&Zv#ic%(e`Y_9U8HB)za`gB-I~J zksR98tOfj{l1?Av_QOiA#@r$g2r}2j9`BFNZm##jxGMnqK7AwTcWn` z__I?t%7;^i6*9VBdk)mI3tMjEW}-1kKEPLsBnfPEcwRT=t7tWKTrrzEdmI>@J(iXb z#4K3ogJc94%wfnV^$gju;y-_hzggo{=OW^q{jVLB2(MHZ+`y6$u~lSJJMIpDE2hZl zd$gE+)D8^Y*$R?xMN={wo_;lTkF|OH?$<{5?O9QJ-Y^oWb3X*dE?xYowp`aS)4V6O zRJF8it}XrPg(b(+g;=C~zINA;e~3{l3Ql@WI5mYkx!NKLB6s`Rbk{enZkL7mLkdO7 zXuxwQL5+|ojpGXhy!78ize0e7=%PX1m0mH_$He=GX#>PXsxx{2^W=%P3$^iRiJ64decblu;+q*V;Jo9~@;Qo0WY78(@%VpQ| zLO7#OmUm@Ek-O_gbwkEDRAA?W)b;1z=h*0fPhniNy7F(drV zEHCf47u2RYs{Ll1tVN_e|6|R}QexLDx46B|#NjSXW{Z zdA!TD)j@z`tmBrciw2e!AoT3NX*p*;8havu&Z_^+5g89W3*nuNx5^!j=fZ&lL828K z*WWDO<{2p`wgR=}$s|H3<5sA8oVi(kWdVEmds&6S^{rTnNwC zlOV;FyXgq5G|vks5gaM|Gsf zwa}7P)~_xVCgFaU7eucP=r78RK}vk)Dwa#8>nSMRl&ep&`vbC9(mG$Z4{v1ni^H33 z4TBgacf-kKnO1A5KbiC|v~Csi^z@|X(%cKL0rGCIuC65?9g5i5<(R{2qK}x7j4=;i_f~;9+dbWXBf?P6kZZuPv3>;-#aTXmSgcCK1M|TH_yA$`xld)Ova1o0W(dhAAU>dk?h+OWg z@Gf{=bBl762DOh)i{9E-HeyRkDk$x&>E*sr1o6icFWYD-$kkHE-6#I;DcZzw!%%q+{D1Jm1HUnk0&TTO1QeMR_?S;%JK$3(~-8-BsGTILwy>t zKwuRAa&IU0eHSHh-6qa>hF|&ez&JFLYFeaF;*#3pR74a&VhQ)?>`>%VyY~b&bBSUOkJ4?8+vDJZ)%nAl1}!Ip;SpGE(VwzR5AmsfkBQ3TD-{&F{THf#Kf#P& znI2H8Vqz+2Cf2ZB6u7gBevN7hv1luxEm?Pw0*E(;R$-Zgs()7;YH@@UK0g!l))-?P ztCZVlk}J7Ii#b73#Rw3LjHukWrGohvKw50M!MiF(>2xqx!Rh?WPx#q@Tfj9?5QE-PrEG$sZNz#8=b z)Y?sv_u;vme~ufXrH+RZ-tlkBOhI3DJ zSx5DOvTh1S)mm0dpsqGs*OFF+g?i*LF*9Wx7xZ#CfMsx@ zzf;7=bE-&z{vMbAE>IEP@KRNn{~TqQDZsf!2zDWNSFXBYruA!H7Oj1@)L2bJ5tSu11;wepVjc{T13atKNJk6- z0mZE_nyscLw^=Ph$k+|}@O9{8#p?6lci54?HO#>u5j}emi|*C>0l84zl3gmZ<+A9i ze+w@iaLIBF78)X+aXSv=k{`G^9~^hplc3lly)Bc84gjnzis_y%AwQgd-pHHXn`#S* z2~cU#0wb2V5=CLtGmGoBe>Vcs?T2V5BLiu}>5AeFuJs}$shc`u*fHqY#(_RJ?&Wic ze)Ev}1hOuDUB+P=@?L@AMVaj5SS5&mX(_?W&2^h(bLLj7(c~+kvl}RBuTJ&h1WrfN zsGf2;)%Xm)ux;KN1&eA0lR)N^m-g_n{{m7J4#5bbyT=bS-%TIiQb9FF9?NC1G9<0VuU^f>hM;hXthv@t*Ol`bSh+c__Yr z|8Ny$VBY^WGd^rBj*Ha;ZYJ8h)Urxfg(gHfc_LN;H4%OO|6%GK*CP$PwcXgZ(XnlI z?4)Dcwv!4vNq20cW81cE+qU)9JF(XMQ5#UlqkCL9hbhysu@4ra{%vzkSG2bgje)3^ z{cZ!P3~kx6ftgnn7w4=-eE1^$oS7j!{1DD1)`K9hE%@A2NZkFfmt$ZK7#-R6dZ=Pi zbJJubP(f6JtTr0-!#2s?hOS)Yn-qR%7=6gcK!b?vaSM7xndNxQ_20;0{muXYcAp$ZdR1a1TOT)?t->8c2BNOzI{}U+aJ-26 zzt`_%gADwYCPpvPUaWHczlrbAMHf!lx_^J!odxMk8v4k}ha;pB!^5$6KLm#n=()-_uueG^On@yg-wph?{ z#`%`ya872#oxhzowaZY|Us$}~0XaGTp7|p*3~@=#rbpQ?j^cy5u~1u^0#hs67>|p0 zv*O~&r2p%t=7BOEOyJrMM_Y>vdSmGSfoPD5aM-HIWUduaH2CtPmINPqWxqx|()r=W z5L&0B7{jSV?=%+vB+a*AY}EFbHi3;d#Opy_nG6@4oF&hq>h;)8%$Znc{~o}Ig#`=3 zb$MpMXsgfZeH_PkPl?RTIRgPUMpM0@6w=J{lDiMLlJ{N=w-SJ!#2(+*<^H-l1#wlg zcfcp(nwOcUFI^-e?o|=L;|&Xe8x$GRWGtfpw<_6MooFARZ}R;4?s%A)>vzeJM14m= zkCbX{1LNb)4j#uS{UFLxJukk35{qg~riot-wihj=?!rjQ@#v>RGso1JJUu## zgl!p_-Fx5s6+J4X$EvR8xWzwYlPlDxXny?i^vwm4pCi>DFI`wv8lyA5eerd4wHH4u z(-JL?af7g?&f??>WRG|wPN`{;_2(7v73SK|d|GWsvE6UIG6?MSeV%bwtiC)3XtTI` z3az)P%@QP);$`G>GmHZ}1KdS9(Tno05U;5H9maGm5NS&z^|~oogOv5FO3{FK#3>yu zOacKndii?P@qdNWk2N*1Kd*rE?z?UF$<7++Z)n}>#CvRukT-!p$>m8n+z&$rfvk+^ z8O)Iq?fHa9Oi0m;>`VD4R@8>Qy*nu>^2z{{EkNI+0PwwcbH5E>)_R%Bx`Fb1IGILf zHIXi@ny?g54v9l5-14oS4l*7weI18RrZmGCpfp1|Usr1p+0p#i--Z@w$Loxd3hcZI zK!WGpXOSKIPr)i4sLUoi@L9;Htoy%omF6;P1wzoP)WB_Y?#y>|G#ln%4Ygsgj*f24 z4XwS%q|arhF*1T*PAt+;KvZ`0>B4n)pe3*vVum>%WWpzyFpHT$7vuv= zM4j!k#h#ybCDm1>RTWZ{hggX<5Sxv+qEgY+@@(7`%qrSLwe`8vSu4+7-^IC~Mh+J} zHNTVUp|`z1{4EXEbDrKAGv~ggg%hKA)YQ^MdYF~)4XHfsn8V>Re23FA`ZeAc%T?YG zPk$vhlhZ|F5hrEo&Frsf<^L`L97KtGCEv#V)c%Ww$o+#Z0+9%z`UlBB5)KPYz>cPQ z>O415@#1Qhhs-?6biW#t_@(l1bnhrRVh*Z_#0OuJv*#?jF=dQytW zigQaSJ+yKP;|6Vy2tU<}T2d(@gHd3J|B^rNEW|*ymBkoHR;@S@twb7{=*cHd@DDkh zQ{{Aic^_Wn?uhHhvpYnoJTq+lDMLlgihpKl;wK}c4~|obK8(ZYkWy!u~usk=i_(9LTXmqn>L)go~vyxR9@Ek{CKsyZS8*;1is<){E2k9>y5ejfiFtbmi%E}euDWo4a)HNYbTNz zxt~Y9I+O+TGDCfC?>hFWbTD2e2Gve=w{JRNE>dS^FSt1ZL_0Eq6?jsd68^;g#M-g^ ziMKZWw3<<(L44oDWO-y??0LWVZ%cHj5VtM$)mOl7u|hXBJ&QyX zWT^ZcSuY~35Fab5j&%|InP-N~D$OCF<+%4&aXV7(+w)sb*@^T%g)#UN=hUbSYB_jH zw~_dW%!0YKT)#ucLH%iXFuVVo=Ue#Kuyuk3GF{uv?feBBD(<*&V(Vejy8=Isz{ph$ zfVd)?>*1ntnMO@ILN3bnrfVd_zq`%(s^%zUcoF0Sbvm<`(IAvb0xWy&K~Lhc-TeVs zA^#ma#o6yexp}H?=~r-7fVph<$y|?dJ>h(xZB@E2&V&1rTvPa0n;EvBJNz0?S!^^` zSV->@2FY_sh=Co0t)DbP&iGjD2RX6v?%)Odimz`4fi0p1G-J5|L`)TkqvQ zHe}H0yK9;9XVKXD&#i^h|^ z_CQDGW{riR|8m$PGT4{kZ)qGV9;}u$ntdMDG|*bMQrx565n4LA{O7)NmUpY#_2cA( zI^!R3-P~t6yp@qTdg>EGz2X94W1iPx45p@Yxx0hUqpxi!K+qh6_}AiV`&97NODwoA zksOuw#biS@wdv_R*;9*6?jBwwkv!`!R9`&gx|!zckkfse;n^}!!}_JIo-Rk&@79m z_FnUi1R?V017xm5E(|H>hMM&NuG?&I=>`0>$%mEajXUs(UXmy&U}e`RcDxG-BvHLh zZ@Y7T-x~v4WZvzZXA%FWyu>jaSk=w{|68z6(uJcT`iSJb$X9)~#;pTay-2)Bt_dX- z2fLz#;IJrALIKOX8^Qd(+#S-Kc0ogfH@m%Qz9u%{0^(roh4*)LY&gunO%|!60N)|K z_)PjB^N}KyxamrW43WU1O6G+ePzpJ6-TY55AJ^>6Iy^YjR)*&g!>e^Ko;ALsqN$BF z_Bj7rK!*$P!X#-wjdT96oHon~fzUBa%>RDSy&lMU^d@xKtuQ}NP8S;7IydbI#;;E6d0CnFcET|p{_4sOnwQlSe`~OA&SiNcUA#D-xwHzN8T#P@9 z2qU)e>Tn6^=E5m`U&nI~WnVRQS1mVj9viaao3+Q5>K&@&39@*tdJV3@4cz7v=s5q; zUbug^O2x}}ZHFBy1sBTDY2JyM+#sNDWRA`Q@QWsu8x-AX!r?`b*&F*yH!>Fw~VIw zgU`LkwC?TghRqnF$*QQ|b7n;f)`ae^D3?tiJPnL*x&)Huyjg9Yxa%p)v- zgz2>Y5Any^sv?3IOfJKl-Z7Bsx)5X?9iNNwe7c)sXliXi_V2$En5wD7Bm-1zWMm*Q zta3FEN&q$L!@q0l=~9Haufgi(QMS!?1Ev@n2?lG8X|6GXZR-uH3?Yk**`QwJGu#d$ zxuTAh?!h!MJ+*P2#1Wd~!kCm}{C_K3P)Jz+r?E9B%WWRn^Ww@>yx;;+SPi`zX;g-l48Gldj0OJ4V5nE8=#NFcymEe{Tj zZg2ZMkNw{Nh1@;R&>PjWP*8+7h30laF^>fxE>5m-^C$g@!>EVz49=RAM7(f6*23YY zzy-@~K)};(OQ-GmadiLMa}=LKr3ZLLt`{qew# z(WCZph7J%)M8!~P>)Evaa{yQFm(o?jWKfMmfA7?{RHqD~`QUYB#-p1v;D}k?N(bIc_QS&p&9OLJvodJ-6 zQ$C$FqVlvU8zvXm*NT-*<=u+FjP`oW3!*bC01KnrD=q`AP$KM4+Bp-mCV^V`$E%Rx zOBuJWy%}nKq||S%zgib?;XxJYtZC%X=q6)@#p9Ba!N@%1Vx*K3MJ+hra0(&GSi@`S zoB5JWcGm`T48z>GG%vS@Bw`S`+-2_!|+!FiaII zZ@0bI$yKvsykH(&OX5|&jpe6p8mqi`;m&npj>0FCDmm3^V+X zA3Z~cOuqGA4PDOvp4EZXVXpAK`OTjpG)lVTch@%>&8~-ox)M1)fIQ1U!+QTFI;c@y zkv3DGW3}og&-I)n8+zIOWz|WLAq$mLU2-gWm0$5x*_dl{tzZ2PSiwk5mDK z2$vjrkF!t~-E9XO}%eslF4LOLVjBClfJ9Rgoec= zoAV3WCNg;cT>~?A(R4n3}`-RkOOc+T=ZIla1Yp{t<)UtOf6gNN!5 z)JQ%s_2s4}z6{zrPj;+m53+_ncUpfcKdST;-}HLhJy_KEuabVQ#KO%oXm@P3Krb?x z$G!Pw7GFpR1GH{_m!R#pl#F#wQSHO}RSBzBmqrj|*1x27gd&SqsJ;P!@LvEiRh$}4 zT1;LOkef%Js%J!XUX%=vMe#4;h5Ck*fVpxp)#c4wm?eVH^{|+aNl<*K7?cO43I$|K z4j#AAXf{ZQBWK#U_8x~KA@mWe;y0My*xpXpln7YqT%WT4iJ_4!Nh%xxUKnQP5#WZ@ zqHq@p@p9ba$>TAzag?y5L7BE?P2w$msKNg!S;4)?x(q|sr1L8}*=$2bDKlYwW={1B z=RTyUy0owerh)9v#oJx5z9N#%*s!^j?)&Rn-7trUQl%q008tLHv3HbxGzJu<8jAvv zgHC5YF!=q!tCwS3Wk43(eY`(L+d&pkA#;tBmO$vcpC#(&l& z+&A~QRk)$nXfF}~TU;=7sjX(BApgzm-LT+_u504SjfDzou~ztt!i`uw!fM2@Qcu5M zmb9s^^e}!-+GLHKtofhm&ci0AFVWA~a>-=s=c6_ASwfhJLJFN}%EH4r*TrsAEHJ*Q z+zi;3Lbb#Yc?rXD1}YQ78=+bhyz$=N)oYVw+{uzz29%8i1%;Yn&KJ4>T+qeQV0%a! zWvQTC-m1FR!#n4?!^5OfEyx~5@Qh1-Z;!Uh_f4Y_ye?u`RK1I+;cGW`wJAO19_YIDTJJvKL9Abp%%`dpNHg*-ILeAcQt1=iS0~TQj_0gKKMCx;;YgwkF z)%!E6a8VNcqak1r(O>G4b-3ff4`b2vcc}5x6I#0_&`TdNA-&+)RPu^)SU54;1kP;0 z+6ati=u0@<*CTW<&M&O;ikox+AVVr3~&djcmjeq1xZn}$&cL% zxVe1~@%H4N2A4kjz^OJyikzRF{S%Tw{_8;kYJqgDjFW1Fje&_ftDdr28zC8rpN0;o zAEbfP!=cDEKx|g)e`9_OA;84-r<4rHc4d*|HG)M*?esaDe6WL${-(gp=04|mIwU+^ z>C)DNk=+=XBlxF9Rw$Y!uKfd@-^RjM<^W!HOKQ4{P1bx0vK4so`mv1PF_TW7>l6Da z29$oIEbKEc@!8!bk1xp(G{Fv&IqiHxWcd5ei>+qxxV5q;_JSEyPgmRJxK@lkuv~UM zDxB>b8@h}Fgur}Q5q~lknM6;d$7S8Nq>ZJM-l&bUs1_fD)vdav&_h?uyk6D{n);;1cjCOrXQ#h~TccVe&Uid#`0 z9;&tM%5ps zX+eo(T9EDG!IyTuZpmyhQwjtG1H%l7hI543VP$HoY=$_F-~VsxwR&6u6PxfBp^vi%j-O6@l@+o_-pD)Yo?x#5HJ*QnUVW)gTl0> znInMr$&NzLYUQdJ{1Zs5toNt(R9= zHK-IGlC8t6??1#F??xPG4O0mx+*IT!DO$$eE-&I?2Bt8FyBT`Qoz@Ky&mbc1J$)XZKSk;BO+~CN<*kR9+GjG0>0tH@adhCR(_n^%5;Fhj5QCrYdIIw* zB5TN;53o~h?_GF3m%Bb+{Ja%%%YL-}9yF>o${^|ymW=A9-$!S@8JSsB)oC|OO~|q` zXN(+TOULY{w^f z$F<$&AB5mQD4YFV^aw076Ut)(g}%TKy-s2o5<`HkbsdEc^3R`{h2z+0m7y5qL>EV0 zeqS)!8vCK4lqix9Jtg>g^C*4W@%3yU^+7t7356OxxX-UgjC%?p0T>8YIr6=ZRF(QtP-Z;4dt8}n8cs&c$0s{ z*-3f@`GrmXyD*|MpY=cJO>FyUTk$MK1QZz>po><+TE9ioBX zfU;Tx#s+(G-nl5AlwQPOAExz~vx>`Y1DCd1L?DE$2ga{b@GIeJ!tYy8{>T6|^&5XH zLlWZAMooem7ybyPC0*j10uy_^6~PW$?O%tn3Rt^ zhd2q{PVhClxmkn8MH~vkC(hRw#~nv`=}$gcL#F+<$Q)sB`@h%q5Q2di`1hrmdT`Ms zbY!B7^HNfQ$57lIc1NY<)pVXotgOH9?#Arsh97IJ6%M*fl6#yI1P2-3Czk`W2!EG; z5j;BDHP?paUuW0h4=JlhF`0^nN&B;KE6HA%-H1DVgLsx}zID4um$rs_0cqa5ldmAjM}R3hA|? zfs&cjl)jOM?G>%^7Dv^RGGS1s;dkSTH$S3;NJkTBWo&G0D7g;!3d|Xig3Bnhw0cb; zcIkb&Leg`4bY+hiOTtocKC?GN!FnxB984w^){qggzN)xo{ND5ir~N6bH@Y~gEgGWS zV;C3#nM`Tl1IKtm_h&DnHzeiG%zGuhVyj6>G262uwN8-lAv}IGXvD%omEO}=(36|t zz4yWYCB;MfHz9PDMB%t5UMUSNN``7@9*h|s8*P1}e6ckizNLN}cD#Zpi$L7lvyLUA=}hRZC`F#?NBU$#cz=|K7=1&l3--hNWT z@|l|Lp(>N*4bAN7KE@5&-xj^+QAVKX^1VRK52McrX+kx(`hJ#dWxm%qdpeG#Z_$l~ zbL+5eHck1UY%uhfuDACrWoO}44LUR+A`Df*vE_uHB<=@s2(>$oB)=u>#>&nU6x-;i z*5B2MuP5_Bqfuap_NM}~p0^6*g zx*a8n;VT;2k<0aqTH|-G^z6_wG+da8BQp~Q`JGQFB2tbDjgHOh+5FN6Gmar}0&YjC zY6D^)+VITr8-@dCIT>wt--qE}!M58SQQ5p}M!+nDXUu_GeHcUtMTHKt?^e+~z*F(- zxo?~UKJ-6TWXA3%)b69v-tzQc%E@nxeLMT@F0Hhy6p;E(iqp7Hf7O>(4J+M#z_-@` zo|ZnBHKqxdDkFYYW&toe@SK=l+w`#Y-ZY0OO@YXQBF?M7ed5%2tRK^g=8*dBrOTJs zyGM85@30kiXIhJe?hKz#_(zwUcU#1Lv-5|ZsefVF?Z?JKKX8<6{_DYFnlt`usm4%c z0YYw}hpi)Tbc6LW2r_EOyo14HWl2B#EcEkoW)V|jO@0--r#|f9O&|1tj6VK-w-RMAegzX6Mgnr?smIa+N5oipo)#Qr#D z9wolQ#(ipXLUD}Z5}2=o24|mwu>Jf+GfB#7mu(#%`d=X27A7XZoEFe=BRhfn1)Nlm z#GQ5|)HUU_wao*&nygK2!@IJVf<`~_>e4X}54W~IwOU9(R;DIThSlJ62~-iy8V-u* zk=)Ihf=x_J&|5@n)zKOQJjEDb^S-;djg6B^=`q!!-e@5`YLg78 z+Yp%@B(E~QZeqJDYAIW+p_RDPLK~n*UJx)(Lz1ZFC2s4^V*o{VQ!_XpTA8Mymtc6g zX29glgxk2ka|ucGNpoi^0V}H~FRc&@Jtt*QS!!~$pLJyzAHM!mIO9WK`~Z_VLPish zHvFZgSX8g=4N?pZ7NRZJ-PyXTDY+~Z&TOmT%Z&dn#9~!kE;;;%*(E#O?mo)GaetUf zf^BqmrurwAu^ETy0jv`;)EBdo8YR<)FI4KWMRm8j+7CMFk=_QJAVL4I=1G1Z0mJ*c z+4iq4KBF2pq2lZxY^_e#pSb|uFVeS7*|a?{q+puiLrRqeI~f<`43jOmr7iqou4%kM zMg0w7`=Qu(k)Opi_FKq21pa!5+xZL#Kg%T}Ks~d=cl&Fhk$+Rj7hAbcH;bHUe-MgQ zFDm-X8wZF9(HP2@!b)HuB8AQ&n4i_yT>U!nE`l{(n_^7=Y1?$(y7UQd@64}xIrDm) zlThbg;r#u2L#U;drY#sgTus*L|D_lTqJrLUKla1a6u7j(b~o{?14~}q6^sXR!sJ^( zahy>}l?0PzJQVrj>%xt^xC0E_og}9^zce#r8X~!#L_erz#bjm<7d)T^q;lX84X;?J zee)n++QZ9lENvY{|d`ylT(x|6_F3=W2oNf*q``wcR__~HXFXygLhe3KB9FM zBA>3BOK!_;=iBUtiaWyfxkbFf3+}6NmzlO0^mVUqd#!)&3?F_AYH!r?xv>lLE$o@2VL^%G%Jui>vJVd|xC`LpBd0lj)!vyHz1XQ85lWYQ ze_3ICd|eyad49~n8~wt}zM2xM#EF=8X~irw(+ww?#(j~pR1F7_3FOio9YG<27JIDa z*mOF90=D;e9Wh7Y3hA3}V1-FQE?HP-Ak^)=#1Eg;_HS?FZ9JKKbVj-~W`cKpT6j%R zJ)NNDm~C+~)faKLhO65#8E6=oD9FA~&!u?f@3-n59qDn(d@nJ%iHTw~M)w_bc&31( zpIRq6^s=Ce=;bNhxBDS>sF?pMs=H17BsJqNPA&0uVV$IsyavC*n-7W&m&R;LQ!LDS zq-;Ok(S0Ldgv{OVjt$^}L7G&GjIS`ChWw=x)+Zv5<$qD0D6ROEFmV$;CevR1dhC-0I;Q`Bl`%T8=6C8mv*k1PCa=0 zFTFkE88%u#?n)r0<%t^S4{M4ZQZ$2}4bmSbInYi+!4vc5P zW(RDP88aE!hXRDXnNtpB%fvy$2T-yc8y!om;qLjN&%5b%yHpPW);l4k6Zga5*KFpm zw82GmpZid+^C~LQ7wEbQ`rH#M6YVw3qz(i8lZ<)p9|qq!I{b{Ah*s&)ULT%HY)M0u znEo+`3==)~Ac-8OOp7xPux$$+pGN|(vL=q(@f7-(H72U}v29q*p=R_;SepH(^jGOv z4mh^ftzy2z+PdqH9}X|ngSIIPC^&}5W$Ira45{qXiXu#aOecQ4L#yw_Wm0$9fVugLEoH7MJ2hg{OjFn zRg+{U^G*g)4aWg`>L&&sDQpWh{z)ll<=^P(0(@)A!h;gp1P;~RRB2{Ar6g(-{z#o) zvxY(PH)Xdsr0%b*u5f=r9@%_28xkS&5GD`GSYBIkPH)Tqup*^QGER>Ka@d*_bpys5 z7<{T7ba~6vH$r{~R107G+8dcG#1XZp4jc~A^y+$85H9-IYf@I{Es*~lcutm~x>H>RVErle6nrVeWJpViz1EBXjcUzy3WIuCpqtzgSeRnG4gZ8>mDEPugK_80^(-tItZExrod&@B~?PS#`HOSG_UQ4 z@X8MGMuW+PI|dcwbjcVxr4mD6IUhOV=kJ^8@%hY^p1s9z7m#Zbi3NgGNU*pY#dsJM zL^Ixacrrwix1Dax^-0kQMB?a)GvY<#QVLZ#RM_Aj8W!Cv@EleXC+v3OLivV!$q-d% zg(Mwn;o%N=%*HTvwQ&20!J{~nfa(;lx(F3V7nftG5OJH?dI%P3hWp#|tGxHrPw41+ z7bO;ed$pCI5B3wv!(!q`%v>xMJoxXJi?H3HAc+olG?ERGp2wz+?JPqj^A+JuY6P|Q zHZm%|q#1kwB;F*pdye{5Uh<(2MHbRig46qq^wFQn@k_``4ApeqlSSdY`yIv!%4B$a zp0259fuZ<7EU!D^V6Fa0eyCZwhmhK4k$^RAt={J=9yK6v7r$qN;7JEK=;|%UC(u;u zQ=1h{#_W3?4Tk;}Z!z;fD;(fBmH56_u>Q6`6RrVn9#PCFh}kPJJ;=a2lOx{uefIJ! z{O6~rfTcN%>G%(+*O(@vfB)8?GphCN=5juuq$-)+D?YQNepKTY=ymzYd5qA;jSn(oY#vB^=(ag{zgK~L75t?<&;mBUL`hl;b7GmdbLT|FL?C=?rS~R<$J@0jbT?xp2=+6B zp5Zdeeft_oyT+IZIgXDv-@Mh5kNxR{OJXK065!h^UgY#0xqKUo1Kd_I*dD*I*WSB5++}||? z1jn?va^ZN_22zw4Hu*iiTyV?7hvSTfHWr-CX#v43HUF!?SxGiTPbV!loAFgcmzV zU8-WbDr2kB2JR4%9g>Vpj|5{~ee22TAwh$jO_t8U0~bq0cO)Us zDACD`J2Rl?4}9~MX5xX?Lrn$wNDa?nPZ{JhCo^qt_F3bUHE6}MzTTDaR95@x&VGr6KfjyY`9ys>Qx(2>Q9!;0kV)CUir8b zn~Aym>`+|08Ok$S?kk{8;0uhH`b9TS1HI6{bxMC{=9OlYDePXk-d?f}d;(YJq37S= zLjz7vTz~sw%>1srlbAn!z(80Te9AS>Hu*DS_|%8QQL5`4!%`Q4552+)O3Zc*i9Lm1 z1$|{LTK2?bk)I!&;}{;UEZbrVr0pYgEH)1aq&-q#*l&-|j{g%<`~~YvYbH%+j<~p} zo)>!1C;&b@z_f_VUlZkvrj}q%(>aY$6zbkRm z?3cTxCk;ILThih~xdWtU64_5|FgWHTM&{HdeX6NJA0y6Udv~~gm+iO)UXbpPqO2Q)m~M-P zTpiWQ1E$5MeM^HAnZ^>Z$7Ys6Nu^Wg9)C?)OaIlVYN$|@2T1SSH*zF7!^<=*B+1IG z)(<^3H7+bG=hv+0@@VC?$)Mxm_txg2JIh((K~HrTotB157C$$zc-{+oT?nra_d59! zq3p?MY2`Jg-|dwuaGI})Pq2QV05)mx%&J!!>D4|rcn*D@ommFmRFJan(|QRw${d&I zqZ@0&T#cMoI~X+RBPRO7y1HyOMB;5 zil+B>ksF)6?0~^=UnV9aEARj|`v2uT91%|J9NHm;h~&u@|H2=z#e2rA*%*Y_s$ZvGSWO_`Z z?VM`>Xc&{iCRTTiY;aEo70KIg@M*zY#=&~`0x`EvyY4eH{!PWzoysa|^v8+E zm`OY9CziC>7_~k4LTZu%bSW(TpJCEuZy>Fpa}tZcl5QOHz+a(^T6<)P%BELAiR-d~gG6WNh4XiTAs`4THUitk z<>fv5c=HhdH8@ z-18HYx23r39Rz+w@@nVjBHY#+F5tVli!Tf=r0DiDAVPkc@ooR*b3*rJVt!Fs;A!0U zuiWxKl8ME}04biQ`%197HI00t^G^o9;RXPp7U#d&M4BA%Z=Oj>TDclbW<9ZREk_&C zVV(`Z9bXhsuMrfv5>u2+7`14Z-(SI8;%NjKilK7@vLFoITfa&-5YN#fT#J8A< zL&qm20ShhF*=%AeqK7@WLcK3!zFs^$ZffErMv#%pdWeUM^sP&$Tz` z9x7Mebg6<{ZQn8T%*ev>evx|L(0VddvuzGTjQ6<_M zS78qx4IlB@fXkmJeKeoFtJ>*j=T@Zw>2U|Y5gRc53=VnLO7IacC5gBlHFB-gH!{9_ zIyA&x>@Mkh8)2Hukv-GIaM{|Xej7cJK|e9)S)=`BjRJ_nM5zn^GAQJ-ySPVJfS16X z(paTAU zI;PwOrMTMNL zw9Fa%g_!X)e7##sI0T)%kZ2iE!1_G+&P|su9Gp@< zmp#VeN8K%QJ!&nGnqgm zDu5gf8rmW1p#n5RSKTBjE^`9_0PY(288d>L zd!0r&cN|oZDIs3c`R87pny{G|U?d8`;I7+csmNQ>-IJ4JpJGd$Qz6=E|8)3sm#d*z zaqk1XT~Jm(4GpZ_ik^M;WF6X_1g(J7z92(_YGE&WKi^U%Hbw-k;7%WQE9msidf35F zpR@5i>AxH=ch`aRCZ;XebdKJ`oQUam zo!O!)ert*4#YJUE=y)>M*faU&M^Olf`6`{eC+ z;OOIqDf5^XyuDr^UE_in7+~QPEMHN%i+*t5=dmYSiAL<{e zu<3I*TWv$RGfj1~5_>>yG?P*3^gY`Du!zY8Am!$7?_}j}en)n{Bje_AvP>xUr~K>^$aL@ssyH48j$Ef!pKr+a@%OUUs8>dJdd z{IQ-o=?_K^R$g3jBVUOTRBKu%eX#K?HcO$=e z(dePp1JW_wx;=IXdWtPHy!EK+91}Z!E**&9%eJjtbrJ~qF;7ZCQ=*m1QY{!CPSd026+v=d6r6Do zlM1+o%EoJN$q_}o3A!z2KJ)3n$u36>CB0g(4wPRx*M6DcijqjTlyFDPP zu_G&JvC)Wo#aLAllbo$ARwAlYVpB|QjR zOsTfV2g+4zLz>}DsD`*`!aFzVwGunuy3g#Lf(wcHzXCUvz|QLhk%?G@BrVm}D=K5C za*ml!__$(W1gXXQ>Lo5$#;HEUA3I(D7K8&PM*h>&@A~{CL;H7=+F;<{&8=5BLDfbQ zZotskA_^|jQ`G*wBUo`g`d&IIbxyHmyfnGS%zp+?u!r2=k%KN9si4qhH zMyug&xXCp9zag3t1-Hel#v>&S_~0JoTb-2l_s%c!+;^O6IUx04BSufa1syyIaSDh8 zYiN_bb0b;x)aQzfDJ`d!!8=)E1}@)z3St_NNO;a?uk14Nz%o@H|qQ?KncZoR8861RE)#s2*f+ z!DDc!Pja&;(#e_}6~xP=nJkm(*^PcV^kHCPW_SO6^BJbc_JMcAL(^ySk0N`0g~tB& z9T=G{PRZ-PcCdm2hjK0|WN|LF&K6!bA&+!tf>l2gzqR^DTGP7iXmr@?(S3g_Y)=~?H&<2dff&>B8stYPr><^!=btzp%8;!7;qA^rIW|%=))Ibj=I_*KE$w;) zeExuhWMH&5Ek2JwXS)0P+vzG1^!t6jxfe7bo3jf(cI;FOHx^0WU;`rQTVZ6`V z_4~ZqMML5I@dvm0hvPfEM^JB7rgwVf+hI^8MP(I!Gu8`-b4deW%c26N)rnDK2nc*_ zZbYrJ2XVyo+(WtnHTXXJ)g?pqfKA4b3D?zxlMVlbc$9=Z1rm7qUT+-4_ zAC8ZY-7G97i9RwYhtj8Jd2YWZe0%Q4$-MF~f&X~gM)LFhT&+D1eAA{4h0+#I40Pq( zB7j~PTj~R`omt*8{u2=ea0J#9pMZF+p4q^E;Ce^uJriOGl(LedgEnEvF-+hW10Q*F z;c!GKz}h>khUvdMbBQ(=sz-3z?cphUa(<(+KZ5vAx{$}Lo10eQ%iBF0OUu8&oe`!~ zO2)mt!-Q^*nOrG{f$K-%4Gb<*k)cQYj-%PH%xw6r4L$g5$mBT&SI-qc>dbwst6Xm? z|6g%u6;@T(?Qy!KOKQ_dmxO?TTRJ7AyHmQGO-pxocW*#Cq(qbkkw&E(He0E)c;D}P z&UempE>2vWeY3CDTC?YvV~+9vQ8vqM?| z2qLiR7a6X;0`uO$+A{fTnOCDo)2jNl`88FisSoW$-7gO7gi}eh*a&NFiBE{2>P(9N2PMbrx`bTH*2?m{#F%_8ynVGu+&u4Nr^{=vq=K3nQh_YO^uu#}j<| zO_rnUyZEr((*{ioMqbIbCiJkylWxmqniyX*?SFhh_0fB;mBqA_NN-aq*8+ieJ z{+VfYR#wvs%&<>b`MDf)4T-kak~`XsBrK;Sy>zS}uQ9C@CWK6G_RMp?{OLWOpMF2EC}m%Y1)VO^i_7-$80x0Ov$eEp+sI<&^BOOU!F zMPyKI<`TwPL}Uku5~pAQyk$&KWe=*8y;*8%nHA}-O*NI!h0u$>Ok+%bBEhT8$$(-q zY+>DR>o1g>jwD`rJSbwK+lw~ftdWj#Sgv0@c<+oyK6e!EBRnQPoQ$e2tCult`DF1! zu8Wb{R%0pi*;w(oS;mQoYfWox4K4TRuhfEjhkWP<#Hr)LsN25!VZI6P!6G%|Tl7d; zvzDT=+gsuCau>+{pC!Si!NoCmLoqE-P#Gp!(Ef(W91@QtFhLqIooKcop z4Na=$uby{K8TJ-=P6*w+IG=+7#swahq5+?i4tRH`Db#N@fI9GWWft&W*RS|V|Jr%D zGJhaRsoh}Fee(tgIdV3s$Rra2iFeCIpwya=QkTCd@ZX(Xz1;n6Jz<3_5^$usUFS21 z7{^b%u_oy7>DQ-#7Q{G!ZWY_AL!Ssl0iy%J7hfbbKoOdp+(rb(({f^^RL9pxP3QnEtLN>c!y1yB&hDmR%3U>6*&Tm7FbrD7vkO&x|`>PiIY2?Ah7WO+y zi{|F!kZSt(2?X)?*YCbaJ@r?8$xvO+cw~z}PA&nQMfDYt+4=SnBDq3y>*Sk1$~G_n zu_b;z6@X8(@;Ior0zE~0gJEQ?Q~E5k*uf6tj?XZz08L6{DT^8)*!2NIc z^IZk^Equ)6b)~n(ewO~L*>v)&=Q)sh1C2ZZWH%Zmfh!eyh^eC5Hm{p*=I81#ZS>E7 zvNE1lR8#1ZsouA{c8B#WOA&OOVakuzhwUCz_6AbQ&dv&*x9ogj@Y4E1y;e9S`w zRV2Tt6`ZQ+xABt^@++@~K{;?Yh~z6KEL#ayml^WZYuW)c7-`+!j~=;i;=4Nr9WV|1(1(j`4omfQJfU(vUSDsp&(h(qxL z7T9@r5S*pBgWV2V!^_wnktUxblu<|hbNuU_nCUlDlk~tSC0#M=C2TL|-i@yQWz@Ih z4i<&KydTU3yF~dacBdY!aQ7BT0AmoIMO?a5xBS~`ttFJA?HAK`uRriIh0N3voY#6Q zy#$n$m{t)gMAfc}znD-S>CNlcc=v6%YiIBM(<5`H#riVZ_FWs+hbuJk7oT;D+AMp8 zzFT0hTddO;rKBOz&`>nd9=HA70lEDZ5R%mEtLIttH*ulCo*4+2-(JJR(!Jl2Z0AtA z1R_3i@5~2iMo(e}8BGYi@~{?%OB#Pzyc*vQOI5MaFDGcODD@hhl6H@E}tkG`*?#Fw1)`Ph|T-mmTjWnUF! zKJBVWrbx+6X}9^1Gy3J`p1^xiXhpp4DW?Y$iDftt#zgZ?+-)a;2(4==HMJRFs&!jo z?|=V}^bP@rAPygiLx63s%zg%IBy6$`7?t%b?-Uj?>lbvdc*I2RU*$^hib z{|P{`=(JqSbj#m4 z8#fkl2@6zU3$9Dcn$w6|Jasn7q$tjtHfX(Z47vVAGx+ZAu4>*> z07(sxHA}i_+@~TSG!AF3n9vm^?+61$+!(Q@Kgv~<-UTLv&Q9dODbU=hV18u9#Bn_M zU+>{8W?oCPIMJI7y8%dc90$wlCMnU66NKk1$P%O&_M2qQ@Dt8r_0t1dy_FjE zU)`)+$P?(f`JfHOJ;Kc~IoOYGU7JBv+ga1)W4jn997|IDk!&3!=&h#e_dG`THduP+ z2BI^-t!s+G8=DwUPfusn(juN1Bix{5DTpNCA<{x8L#ucR0+e=MLJek{xQ05C3d zGGf&=%ctBm1m=lTX3w)YU;t3!j5f|}Jo^eC6ct}M4CJkot$s67dRYbga+#|5LgK7! z9}ckE81U;5@Mo(^{s>+3Q!X?dR0~TAa)U;hG0>ET8xQP$-MvDs{}wp@T!5eHPh1?G z%g*nmPFD^)%9Tdvk4}{3=`L)kY2*E=_eb!d*L*=iPqPkxeb~9``Z`!gu#S4PE~_>w z%z^TU9O?91^)U@nwjLM3m@FOUn5-Ii0&=nAE4+5z**^D|a`_WnELEqU=1VpA z%3f**Km}R;G26>WbEq_4=Po#vl%E%NMOR0?vu3!m$1gl@7Pej>*)JF;l=QeU_0v-? zH`J`xi~+e$v%DPdpI^=ss#o`1Xv8avOt9GU|u&cEu_FP&0u zYL(Jeet=u{^@n|$>QH}@?aF{`4cxe2Hwx-Kcc4`^W_XzZ*_pZJ+6(hp7E$keiL&+5 zdfdc9~3+?|eIe>qVf)trhYox@Ah>ERTUweDqi{T6_lpD2;*yvGD`UetZn6 z@1a0Jz_iQxu>1;Tj#(xtj_+l(8CKCIq;3R?Ro@=-^?(jQ1UdjkLos;@^P<%QrHhQk znxwdO=99AtWY zp}oiynPSMu3v9tPQ)py=Xbn={wXbO;a6$dM(2Lu+_s5y{ASw#d^l#O-Z(CYgh`8i( zIy!`~ZFu`iPGP65wmFVv+kBDhSc-_66Mq-O6Jcr-cZZv_Bf$PQSs`AC<5KKjMW<hF5ew7LZ~d86Z;#Zx0R z8PN)8@k9TrNoGe!2kx9_B+%UJ%%IYB5E2CJfAZKl_)%@>K<7fhtz!S3UZDp18>klS zpO0QaMu;@$$l^3OJWxwfk@Ewe@;kd!rrXg5x|n%D?5f01^{VQzH55UdK~0yC_pzvR zV^%AwzUDeyV+9d9WYdb2>x=p74w$Jkg~cg zKC@3JyPqR>gP?msx?@Es&)wwh%}@H0P!Z4KiA6N5!&0aesH^K!^3WkjjZ;8kyDj7jn$?WmA;k_ciXVE+V>|MQvSZ zHfO;VgJmc0JJ~|*)JtU^ny=!& z;P|&Ix#+U1lWQmn6vnS|*2Y1}RMV=@Y*ablL%Ntp76UB7P!wR*5$cE`_AS}SQN;;! zQou=jlF|EAA^`(!v%ar~Vm?_2HnG@gf;dn-Fi^dF31v+3E52AD1lBA3+amiO%z+nW zU!FHs(f$~-Jks_*$m>aGEV)=vw{b>DceMo_M+GC=hJ^1Uat`msLc>}+aKYZC&o}n2 zLsX;e!<~V4W!`S{y0V96>VxK!$;{$0cB2c2c($ILT8G=ogDZ{?=v2u!yAec33`AoM zL=UNGVR01f6l^E(xk_v*4aF_xghn%@yzq=jJIpw-XkauQA@IWh=?-w~ zlm9q-|MNKc9}Y1obmmLBD-*IP+$S?;Qhp4`@miN4o0ts|l(~WuZN2{Pes^m>w!nV0 z_^Y}%Xw&Z=KVF9pD&MV3`=hH~{qrqYl7cOHOJ*Q4IN5p3O-er)SXAH?4x1<#Vn`P^ zSm*V~8|us6{zRhVtF_Sh_jnwPQalkD$y+B#rNdELh}p@| z!wx-Z0pkHmf8XHX+#_a@Ts>^J-uhb_Ex}KO%Z;CZzZUeNN60$ZR94N(_rg1Clh(3p0f=rR5VvMy#ak1tyWK zRdO*e(SSv%F1&+Ga<#H5a4Q=Te=Lg_V~LxeiB6LNRWTwHB+>(0TJ*3TfMg>!E)V2L z;%s*XvdXyY03$*V2SWDb^KhrS!S~oO&lY}XUG`SSnndRgPuhzm>4z`lb6I8_$)c4qfXo;dRhs`7pRfUO3J*N4uO12dXiW@hA-F_fC8y)k|;u!1Hsab048)iXmCX1M`RG zr8kC{`m8M7X;-vxi@r0hJjBJ;EXmayM-v)A&w5V{3`84c6f-J()$gwnbIKMvqYUah zyueGh>qvG-o}CS*s~e$cjmEu;p+;BAr#%!s;o(VyAqeIWaN7o$5Q#zYqrr?fⅈs zDg0#^J|(5Stu3no0K=F;>MTUgE90EOhq&cD!-`L#GI2N=%{~*8vL|}_H1g04r8tzp zcbl*|y6@HBbLn^q-|bcbaml`XTpe4<)|tMJ+Aq>Zd`uSD81Wsj&(&ywy}Iks6#3t7 z9sjS7h5>U>QBiS|5J@c~_WRlaSJ}n|mpwN}`=~YDRt+#4yb{XHbas>WZg{7yoLLJO z+EFZ_UZ|B$PB_%PNiF*(81-QbQ%wB5q-S~ff3=|0b{Ms8hR9h+a1Zrm@ZDNFUzmNh zhD4OA$S|V*As#}t-dkCTP-FuGgT~+uRZ~bX8Vn6L2=iizokjnEUc`UMIvnh-lt}7D z-$BxSih>4DP1VGR>5ad0O_G-Zy_`l>lqab++Kp3W<+7*bT?~7!r&z-0c!Sm<#6^Qg ztYHv)uui#>2^cslp<-}#1rrw0z)r00D3=fM=XH4$M2_(Cvvw8jZ3&_=iReCWG#;vF^uA5^U{yZi(w5!voij5#}No&&A z&scB&MN^)4N|R-zcaU44@r8~7@?WRbN>;63AQ}x11BV?s;!OY!>RLLK zi!}pxep&?%S0L&%N4SFf_fv;}HanqQCZ3&B%5NXm@Ig4G!|SN`_k&qz-u8!;qhrq} z?qa$3Nv&aWcN^=LJiR)2SBE@+sG6Q*SSr6HHw&7_RsZl%Xuj)S#F%((v0k(bFR3pT z3V(O|NTr{ay7}#t5qsNBFkU7BDHMC!KBUJyz=#Ag&#gswrRq@xXiAZaG$)`zLR;Zo zv^@9#gX(vxQAatyL$Wuf?Va9ne!v!!fVjN;pqMtD`~AXPx83z?2eHEVtLh4Q90gwf zU1t-runySVDy2pR#oW2>T#(kxAXvL+L5bZQkQCEfF7pWa^x84<4f@R18%R%@o;Omc z{=m>vQwAf^l7zHULZWE&^7nlLPb`|-y1-QXORH1ehT2D>ByC?Y9gN4;s@pmuU|JK* zbk3G!T6t1pK+ASt8(kQQPz1t^h)AI#;CNK9vW)A>2f%<~ol<=^Nom`9zA@^S&>Q@< zvyVaMIE$ u>$Pq3V&|)9zVj{!I6;8@{VXgj?(u>}e$Pl;Cd?xMKY8glQuPuhA^!$q{~(S4 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_sys27a_unisim_model.png b/img/docs/asgb/asgb_sys27a_unisim_model.png new file mode 100644 index 0000000000000000000000000000000000000000..f942625e938b079eb2ac6a5e498a39794099cde9 GIT binary patch literal 11965 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 SKPBu3fRenrT#d~8;Qs|v;%Juu literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_sys27a_unisim_model_filtered.png b/img/docs/asgb/asgb_sys27a_unisim_model_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..92d47f95f5f79e8661815a25aee13d29278c75ba GIT binary patch literal 7718 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 B;4c6G literal 0 HcmV?d00001 diff --git a/img/docs/asgb/ecalc_generic_chart_normalized.png b/img/docs/asgb/ecalc_generic_chart_normalized.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec88ae6ae498faaf5224a7415f8bb720c491ae5 GIT binary patch literal 21903 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 literal 0 HcmV?d00001 diff --git a/img/docs/changed_rate_resampling.png b/img/docs/changed_rate_resampling.png new file mode 100644 index 0000000000000000000000000000000000000000..001279ea62cb0b290286ecc16b38ce1b3dbe6390 GIT binary patch literal 237031 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≷?Gu@&hmiW*naLh2w>J!Zn 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�T+RaHT_$QDCP}4Z_^s?z1jCyA| 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 F{0H{b<4^zq literal 0 HcmV?d00001 diff --git a/img/favicon.svg b/img/favicon.svg new file mode 100644 index 0000000000..f0f7816130 --- /dev/null +++ b/img/favicon.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/logo.svg b/img/logo.svg new file mode 100644 index 0000000000..4dd3cb7b62 --- /dev/null +++ b/img/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_mountain.svg b/img/undraw_docusaurus_mountain.svg new file mode 100644 index 0000000000..af961c49a8 --- /dev/null +++ b/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,171 @@ + + Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_react.svg b/img/undraw_docusaurus_react.svg new file mode 100644 index 0000000000..94b5cf08f8 --- /dev/null +++ b/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_tree.svg b/img/undraw_docusaurus_tree.svg new file mode 100644 index 0000000000..d9161d3392 --- /dev/null +++ b/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000000..6374c15678 --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + +eCalc™ Docs + + + + +

    + + + + \ No newline at end of file diff --git a/katex/fonts/KaTeX_AMS-Regular.woff2 b/katex/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0acaaff03d4bb7606de02a827aeee338e5a86910 GIT binary patch literal 28076 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 G2<`xUL{2yW literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/katex/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..75344a1f98e37e2c631e178065854c3a81fb842f GIT binary patch literal 6908 zcmV8Fb8N1fhQaGDMf{_aR5Q!Ty=u~ zF9)2+5IRGd_aY*eXu*h4iwC8kb*{C_QN)VA7RMQTu+u)>xr{eg*P|+Ht6ytXr+d(m zZ~p#e2L!$$0|$%oOtI@cwhS2;jT&TD-BQw*ROSFERP599O_J6$GcUwoCkE!d0F$=B3ebZj) z%u2tl(MPUHcVnr%0uq2j$ZD?mW>&vQa*^&_boaZ?MJ~Oeyzo++dtr6}Y?ubX02szi zP*4Emv9VMKu55x7Pupj&vGqTAnT&D>y#d1ekyijf!(aEQSqT*TC&1j-cL)Ens*}5? zPXgozu7BUTz|2A2s#l8S0Ji^=-i#RP8zmtu&neZRA0(Ii3yrZrSlxAws(Hqkb;`{* z>R>b_>h+hM-@KF)45>S=iBNAa{5HRC7)rg~bN2%<09URSqJ=Y{XKexK#T$p9aTxCW zfMVV)pb*Y6X;Za6?`mTJ+yNk09iWQdW&i=IJjein4Vw%ws6B*-E-71rPx9U-XsEPF zmm?rfMCvR9vKSm8 zq$9HmqSC~h)zlKsuL8;5bO!Ba-LHXeIRiMz`dc@Z)3MNyNr{1@gs@BI+wX*usD~DY zPbI0rltnBWa6U%^ibIti;Oq^dR0Nl(5D1CA$jm7K1rY25IClUJc5L*Dj!LVl}LP@DA-7)NFisBt(l7XuEUU)kCh);s~U%Lr_B4Qz@mcgX6JTs?GR zquI!~$-qH^+!ku^dIm1q5=7u|ekQMzc`M*b@!WE016~Afc1}oVh}5E{0vI?n|P+~7zu3sKt42i}YK>7#Vt>J#blPO4(ls}XZP(i&kVgM|renp|k zuM`>VpVR@eKX-~SBuLUgIrRYeMKe4Xhju*60=Zq?eJ{e>&aRqV9M2FA0O^;w21s}o zrk^+wvH>P1_M*uX718dVBO;=F7ZXsUtW_mc_Lfy0XYLTOG1DT;#>T{U+$K(n8qJs+ zU-rnl72oxW-<-Y!p>G*9hITXEAZQZb@wTX&1g52vWZZ;F&A{0J3h#omqk38k3uZt( zDz8rq0W{-PAelERFf2+PbrY9^k|7cjCUXWY6EPQ)BW+O;aJ5R~$vTnQ9j#J`stC9- z9&_n(D%j|02cht~kcj~r)ZONOgejuA)uJzvCZ7Ad#st(&+{AyUv&GoUSZ59}Y&6;o81%yY-c{dOdBeheh9b>eAvKUb2uq;Ac z1f*r^X9Ua-AiT{1F?D&Sf^wd8lg16fMcJUlf|?X09Th4*1zTb#{KHfWPChmR8h8S^Gvowg;Kj&N zTItVfHH&h zW_Ap`=D)vMNyU&NtN8i8u+ph1Skh8vN>25-WSLmb-Yig5!|r3;N1#VyI(RIHaSl&T zY9ANFc=#kzy0jQ_vQGnx_H_Z>A{Q`*c+`~DD+HpXV5k{)PzEl`d$y8APY7^BV#VMQ z6h*7EkJDIp(Z}kalQaqY0q=*kT5XnG!}6?e7;%Xd%wU%If-(((YL;F(pi2FYn^kmV zxL(1?J<4{rGQc9rxeu5R1*pg_G26GfcdBkhCgET zp9UC%7m?xl_tP5bzwmNbW%45qd)}WEv9qs3l*ydrJc`Gt7oz9kC_Ur5VS1c_TosFI zRa#C`^HAmhax4J*Cyv@yi3G6!r{qQ^DKONVhTH0R3s*)1%}1T%rpH<(feTxr#D;^qxpXBbQBfwRvHVap_k85D>8&}5 z;ytfkPFGl*3S%|*rwrT2i3s`3QZ8QO)?50ExWZgf zD-Kx7%J%~*G;oh99SgpoZJT*=mzq$~DRK#88K${>f;yfWY$A{+wldpf?clzq;M;gJ zp+s+yPOC*Ls1Ih<^ieJG}N z@t~-V_`hb}7Nbro+N!urzqw#1ZoWj)?T4lo%giLb>9Dd zg=pkByj>PpRO_J`BuCq<+>_T_dYlZ)$lmT&YE4;J-ecRcC~Bh}m3ngK>eyA*@?3hO zDAS5xPV`Kc_+cl~XGc%gx&ejoHnH}UFornXV1Squ7B6b*E=~_6Qs*5Dia(xHWOz%i zLtW6!ZZ6aVCF4@_CXCXRCI@_NSxBtjpQVh%?|^He!sZW?!?rv`UT0}2qsPKH4G!u+ zKIN;B54kRF+VO$SH{#0=Iq;_b5{ZUIzxt{==TT0C)?0ySR?e$}L_3IatmN6Ksa9U5Du$7~ErjlW#IaM76x> z9le1qqFy*M!Hd-wM_lqfX1(r=!sorLFGFuunypI9cGptzpmq; z6{iqo^uO?SQfdc=Kd0JiJ75D|%0FY_YQY>K! z9j4kSPT0~}NvP$iyfTb(O26P=%?gw6=( z#_Cs;R>aM4xzS7pSCj%pBdSJy!u8`bf1xu&`P;@mcd*4%Wai5$`rv+3b8Sghdq%P? z_0o5!_9bHl4TOb|(7ms|302$|d0NTns;EKrEY;9Z{j9p3qE8EeG;1}={LeOXOLzGX z5(tF!Fi`xGsJ;P)f%~qPQJnlG**z?X!!B3fOuO_z*AG>gmZiy;B?viQ*xSZ*AGhtF z_}OWRC`{1`3@vO~&z?VdTqeD70^68Vta4qGTXqkAlo0rLZw_Xj&QNOdA4p88VNqGZ zX&V#*E))CB=31AN7Uzk#>r(uyJ6$MI+evYmNXq|NJ{r)=-x2Tq6sTADdL5T?Irt)^ z9;kxBiDa6h^avLkJ9av3Shx}A6XAz-@%z@dx&ri>!i>>SI%DL0Hq({Nmww7Xf@8Hg z*~d*MyjB%M@#uo6%!HZ*y=a+thJCZ6N5W>}(sJLG#uRsFhkUtDGIaWH1i$m04codW z0TY8ERE`XFx)K7j2p*YmYDSasqP%y<-af@Gi(h45VFHZFLWM(8g$cQ_Z&Dhe|5$G0VP4veZ?b=0ZxD9Bl_bS#@gyi3QPI8G5 zO_^>&9R!-R=Y#kVelpB(zavI7geJM004o57IA!%~CrQwJHf4tU2UTtZE>hKW=I!C% z`N<%^-@o5`hOjU~QCz5Tuqrd*!$nK_(?@Ow@|kqIIJwSeM;QzSrUSYa%jm2RLeKk{ zk2Njw9(mUnioCT0X#B9Xt#=jz^E=Z;{MQ-QrSd%0`0oDb$6Na2ht0o#iGbmSCsDYSF!@(Bg6KbXaBEkPXcO7M4G}Bnlt^GLXgoJ;~T%V2F1@Vg1Br| z0kh7l-fx3>sv-^SNE6Uk3cxkCDSoRo;|ULu8Dih_V-@}%>)IaXN{qw$pFpXTn;S-5 zmkF&XUR7POId&`Iw|PP4?|hPj*?lIYX0oUlQ_4Wb^+cEsX@1}GVp_6dzv=>8?)3)y z9i>HJ@uBk9Um4n@@$wF?i&5TGxG=O>Tq6F!zTMlmDM8A{A=zkS-sz8GWw*9aRDSXO z%26rFVX(gs)aDB^jeGqID97&nygCfpk3`wZc!aF}7VzV8&~;}u+0O8E?~{QC?thj@ zgVIv9W2XEde?+-xgqTdf*AjqEPsobI(e4T_Ho=O$S?s*xz`ee|?W2&SbF$(i)DHqcN-t^IFaoXDbJ$m;g z$9~Cyid7_ff$Efy@>6|uB+s39zb1|HWPUDr8xuOdpU!@)}e3lsV2%0cZk z;}+A@`oKI4`VnRgvi;A@BD1Y~?1>_ui6IYy@3TOl0IHfrc<%vYlCjdK+1Rfe>;cJi zYG>GX>w<4*qWR|wiw0{_#7W*Q`wn*)T#~r3E8oVAFQzbNy(u$c!cfjew*}=fX}U@0 zv&^mAnDrPnH_su6w-@cM9w$l?xZFjFEvdq>z(`io)RAvN0giSmlMERp%{*(L`?EmG zjrxsBsE>ZL&`MWe&LGFQX^+-Lr9+}%K7{Y;oRmZBah=q9TP)XRE4-xN75r}K+PC3` zqjDQcJKsinv(aFGkW00|zbJI`22b^vlG4;vw_98~PLpvvH^%sD(|rL8J9TEVJ}6+c zGGJ_PetSs5hN?`~W0lKU;aEg5i01JJ3nLuO~JGjek7<2W!ey6w$yR45g{R{W8lyrez_-r28_YB5LT|I+*NTuf1bl@;e4xt&82kTjAbdG{)gR2NGU z9V|cRaATskab66|c#=Q7uqknJUvyToHtN)fTEt|yKU?kes}N&8L9w-y^;y?dq)62m znBeU})(ZKgc;>;hF^+he75!}FCodj@{makaAJ)_XRZz!SX{k0@7rTYUVbaEHviJ$& zu&?YNLV0s})vcF44dv7HEq8-2V;rt_+c%xDb(_9HB`zKzajG{&1_x=p;=WL4M9%(d zq1s=g6$=y02fv6OS9D396|~{Gm0_#Snee-9F!C2+HtgnvbT56w;j+_9b-|=)rYONQ z3~KT_7B#uuezSjK^E$)YOx`=m*yshuhVSPIxFZ}<NKwTQdr#D@u>5alBOER& z86Y_dk6)KGqpOBD7UUKV?JaCsSh(8JhQT^9l5tx==;DRR?)U7UK+S`Y)UHil<&j*) zr!vBp`ehc%JrbHrsw7*^fvt-td{u@(3G~nGPkBkOE_jvxBT+nwE#_nm5arx~aywC` z$k|}vpsrd`C!au|;~s0c(ww=X85_?KpfvE-qSBLm7B!VaaEBGrjWVUrZ_I@7Svm7* zAibC|5PQvs*8jbg*@ta~1W}w!cYjx-KNLXM30~$B9*0f*~*9!c`VoQa(BUyB6 z>cM#BL|OB~ubY}v(iYV9S}>7NW^owABN83kl}Ou|Ih+~$H5x~8zzqK9{jPUX~H|{Bqt*km+SQFYc4+C#AnixIm(Igk3ouVbmK0} z;W&JsPbL<(RM)Km*&mJwVQx5p&z7RJ#X#SL!A_5himYSg(A7fb%Ix>cvj{c=l8OI_ zPA?`GsY7cS^|)ENDg^}|fO&K_oCxhYk{TB+hHUrAqXX)&bXpPHmGB?IuF!-fMx(Xj1@Z7LYtX7*GKa~9YoWe#0HD$rG`)06%$wu&iQ#MvU0`5~0RX^efNUa2 zZSzD3+vSO{Y!4?QY^R+_OTUV|PKgKEAqv9YjP z7^8%(Woe3At!^D|%a~&V)^fGr0K+B?$7$kVv{ew=IR&*I;~1NG)Rd7{gHklieW*|c zm$aDmVy8z3H=aqhT7!E5_T;7GwQJM!%3a>py0xYxUTHYW>>iA}9j(dvs_lZyX-}+7 zoFf$OIk*nx-eB8}bhQCw`;`)c-JI(#jK(22GL&^dfZskZ8U{ zZpm?1v+{19?dAb+K&ka>49`*k+iqC7Pt2=95j`a(ok#2TlS`#p!{thM?>5Fc3f6J| zfn7eOSP-@vO6|dYa~gM8mbvObT)Ued#WJ}*oFe}O#yD*{RqXQ&)dcl z>#WkUD+QDFIIhLYl4U)@;goriI|7?oty?vf+>uSRrXYG+fdBZLWr&xm8$s?~a&)S) z=~n$m^kvi1(eq*8%a6YRMkeMG`n7EW1ql`+lwFu`5h6t$MDMK{E%#qrRLTpuzU~fy z;QaCn{F{BFJ^;}F?i%uYGyh5;Aifzzx)E&ofgNMaOcjRa0;hZ<7~no@b=K~7zvI17 z4mHY9J&pkzn%F31$=u~mVv~R^d}j6K1iCxXAvOZC{a$!SER?`981pokH CFgb+) literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/katex/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..395f28beac23c7b0f7f3a1e714bd8dac253dd3bc GIT binary patch literal 11348 zcmV-aEUVLZPew8T0RR9104!7h4gdfE08HQj04x0f0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.woff2 b/katex/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b50920e138807f385d0b0359f4f0f09891f18406 GIT binary patch literal 16988 zcmV(>K-j-`Pew8T0RR91076^<4gdfE0E4su073x(0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Regular.woff2 b/katex/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..eb24a7ba282b03d830fa6c63ee897d92a5188736 GIT binary patch literal 26272 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�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 bkH82T%!~T~dOL3iZSfI!+IWoKhyte*`46Vs literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/katex/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..29657023adc09956249f6295746c8ce4469b50d3 GIT binary patch literal 16400 zcmV+rK<~eIPew8T0RR9106-7`4gdfE0D43K06(+<0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-Italic.woff2 b/katex/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..215c143fd7805a5c2b222bd7892a1a2b09610020 GIT binary patch literal 16440 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 G>;nKVNojrn literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/katex/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..349c06dc609f896392fd5bc8b364d3bc3efc9330 GIT binary patch literal 12028 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 GG{*pT{>~Tx literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Script-Regular.woff2 b/katex/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b3048fc115681ee6c1bc86b0aa158cfbbf59daa3 GIT binary patch literal 9644 zcmV;dB~#jWPew8T0RR91041yd4gdfE06`=G03}%f0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size1-Regular.woff2 b/katex/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c5a8462fbfe2c39a7c1857b9e296e62500a8a8a5 GIT binary patch literal 5468 zcmV-i6{G5RPew8T0RR9102N#S4gdfE059|a02KrP0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size4-Regular.woff2 b/katex/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..680c13085076a2f6c5a7e695935ec3f21cddb65f GIT binary patch literal 4928 zcmV-G6Tj?tPew8T0RR91024p}4gdfE04S^g021l|0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/katex/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..771f1af705f5cef5f578b3a1e7d8eff66f9b76b0 GIT binary patch literal 13568 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 G0ssIW.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/search-index.json b/search-index.json new file mode 100644 index 0000000000..3beba5f2c0 --- /dev/null +++ b/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"Introduction to eCalc™","u":"/ecalc/docs/about/","b":["Docs"]},{"i":9,"t":"API Reference","u":"/ecalc/docs/about/getting_started/","b":["Docs","Getting started"]},{"i":16,"t":"eCalc CLI","u":"/ecalc/docs/about/getting_started/cli/","b":["Docs","Getting started","CLI"]},{"i":20,"t":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","b":["Docs","Getting started","CLI"]},{"i":34,"t":"Python Library","u":"/ecalc/docs/about/getting_started/library/","b":["Docs","Getting started"]},{"i":36,"t":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","b":["Docs","Getting started"]},{"i":38,"t":"Migrating eCalc versions","u":"/ecalc/docs/about/migration_guides/","b":["Docs","Migrating eCalc versions"]},{"i":39,"t":"v7 to v8","u":"/ecalc/docs/about/migration_guides/v7_to_v8","b":["Docs","Migrating eCalc versions"]},{"i":48,"t":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","b":["Docs","Migrating eCalc versions"]},{"i":61,"t":"v8.1 to v8.2","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","b":["Docs","Migrating eCalc versions"]},{"i":80,"t":"v8.2 to v8.3","u":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","b":["Docs","Migrating eCalc versions"]},{"i":82,"t":"v8.3 to v8.4","u":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","b":["Docs","Migrating eCalc versions"]},{"i":84,"t":"Output data","u":"/ecalc/docs/about/miscellaneous/","b":["Docs"]},{"i":90,"t":"Modelling","u":"/ecalc/docs/about/modelling/","b":["Docs","Modelling guide"]},{"i":92,"t":"Examples","u":"/ecalc/docs/about/modelling/examples/","b":["Docs","Modelling guide","Examples"]},{"i":94,"t":"Advanced model example","u":"/ecalc/docs/about/modelling/examples/advanced","b":["Docs","Modelling guide","Examples"]},{"i":120,"t":"Simple model example","u":"/ecalc/docs/about/modelling/examples/simple","b":["Docs","Modelling guide","Examples"]},{"i":144,"t":"Drogon model example","u":"/ecalc/docs/about/modelling/examples/drogon","b":["Docs","Modelling guide","Examples"]},{"i":167,"t":"Set up an eCalc Model","u":"/ecalc/docs/about/modelling/setup/","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":169,"t":"Facility inputs","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":175,"t":"Generator modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":185,"t":"Pump modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs","Pump modelling"]},{"i":188,"t":"Pump chart","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs","Pump modelling"]},{"i":205,"t":"Tabular models","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":211,"t":"Sampled compressor model","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":224,"t":"File format","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","b":["Docs","Modelling guide","Setup an eCalc™ Model","File format and syntax"]},{"i":233,"t":"Expressions","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","b":["Docs","Modelling guide","Setup an eCalc™ Model","File format and syntax"]},{"i":242,"t":"Fuel types","u":"/ecalc/docs/about/modelling/setup/fuel_types","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":248,"t":"Installations","u":"/ecalc/docs/about/modelling/setup/installations/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":263,"t":"Compressor models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":265,"t":"COMPRESSOR Energy Usage Model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":271,"t":"COMPRESSOR_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":277,"t":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":281,"t":"DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":283,"t":"Generator sets in calculations","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":302,"t":"Pump models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":320,"t":"Tabular models","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":328,"t":"Models","u":"/ecalc/docs/about/modelling/setup/models/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":334,"t":"Compressor modelling","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":336,"t":"Compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":368,"t":"Compressor train types","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":370,"t":"Simplified variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":387,"t":"Single speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":391,"t":"Variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":393,"t":"Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":405,"t":"Fixed speed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":414,"t":"Fluid model","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":428,"t":"Turbine modelling","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":440,"t":"Time series","u":"/ecalc/docs/about/modelling/setup/time_series","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":450,"t":"Variables","u":"/ecalc/docs/about/modelling/setup/variables","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":462,"t":"Theory","u":"/ecalc/docs/about/modelling/theory/","b":["Docs","Modelling guide","Theory"]},{"i":464,"t":"Compressor modelling","u":"/ecalc/docs/about/modelling/theory/compressor_modelling","b":["Docs","Modelling guide","Theory"]},{"i":466,"t":"Generic Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","b":["Docs","Modelling guide","eCalc™ Workflow"]},{"i":482,"t":"eCalc™ Workflow","u":"/ecalc/docs/about/modelling/workflow/","b":["Docs","Modelling guide","eCalc™ Workflow"]},{"i":484,"t":"Reference documentation","u":"/ecalc/docs/about/references/","b":["Docs","Reference Documentation"]},{"i":485,"t":"ecalc","u":"/ecalc/docs/about/references/cli_reference","b":["Docs","Reference Documentation"]},{"i":497,"t":"API reference","u":"/ecalc/docs/about/references/api/","b":["Docs","Reference Documentation"]},{"i":499,"t":"Pump modelling","u":"/ecalc/docs/about/modelling/theory/pump_modelling","b":["Docs","Modelling guide","Theory"]},{"i":501,"t":"Keywords","u":"/ecalc/docs/about/references/keywords/","b":["Docs","Reference Documentation","YAML keywords"]},{"i":505,"t":"ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":513,"t":"CATEGORY","u":"/ecalc/docs/about/references/keywords/CATEGORY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":521,"t":"COMPRESSOR_MODEL","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":529,"t":"COMPRESSOR_TRAIN_MODEL","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":537,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":547,"t":"CONDITION","u":"/ecalc/docs/about/references/keywords/CONDITION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":555,"t":"CONDITIONS","u":"/ecalc/docs/about/references/keywords/CONDITIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":561,"t":"CONSUMERS","u":"/ecalc/docs/about/references/keywords/CONSUMERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":569,"t":"CONSTANT","u":"/ecalc/docs/about/references/keywords/CONSTANT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":577,"t":"CONSUMPTION_RATE_TYPE","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":585,"t":"CONTROL_MARGIN","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","b":["Docs","Reference Documentation","YAML keywords"]},{"i":599,"t":"CONTROL_MARGIN_UNIT","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":607,"t":"CROSSOVER","u":"/ecalc/docs/about/references/keywords/CROSSOVER","b":["Docs","Reference Documentation","YAML keywords"]},{"i":613,"t":"CURVE","u":"/ecalc/docs/about/references/keywords/CURVE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":620,"t":"CURVES","u":"/ecalc/docs/about/references/keywords/CURVES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":627,"t":"DIRECT_EMITTERS","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":635,"t":"DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":643,"t":"DOWNSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":651,"t":"EFFICIENCY","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":661,"t":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":672,"t":"EMISSION_RATE","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":680,"t":"EMISSION_NAME","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","b":["Docs","Reference Documentation","YAML keywords"]},{"i":688,"t":"EMISSIONS","u":"/ecalc/docs/about/references/keywords/EMISSIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":696,"t":"EMITTER_MODEL","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":704,"t":"END","u":"/ecalc/docs/about/references/keywords/END","b":["Docs","Reference Documentation","YAML keywords"]},{"i":712,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":718,"t":"ENERGYFUNCTION","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":726,"t":"EXPRESSION","u":"/ecalc/docs/about/references/keywords/EXPRESSION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":734,"t":"EXTRAPOLATION","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":744,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":750,"t":"FACTOR","u":"/ecalc/docs/about/references/keywords/FACTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":765,"t":"FILE","u":"/ecalc/docs/about/references/keywords/FILE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":773,"t":"FLUID_DENSITY","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":781,"t":"FLUID_MODEL","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":788,"t":"FUEL","u":"/ecalc/docs/about/references/keywords/FUEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":796,"t":"FUEL_TYPES","u":"/ecalc/docs/about/references/keywords/FUEL_TYPES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":800,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":808,"t":"FUELRATE","u":"/ecalc/docs/about/references/keywords/FUELRATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":816,"t":"GENERATORSETS","u":"/ecalc/docs/about/references/keywords/GENERATORSETS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":820,"t":"HCEXPORT","u":"/ecalc/docs/about/references/keywords/HCEXPORT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":833,"t":"HEAD","u":"/ecalc/docs/about/references/keywords/HEAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":844,"t":"HEAD_MARGIN","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","b":["Docs","Reference Documentation","YAML keywords"]},{"i":852,"t":"!include","u":"/ecalc/docs/about/references/keywords/include","b":["Docs","Reference Documentation","YAML keywords"]},{"i":863,"t":"INFLUENCE_TIME_VECTOR","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":871,"t":"INLET_TEMPERATURE","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":879,"t":"INTERPOLATION_TYPE","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":889,"t":"INTERSTAGE_CONTROL_PRESSURE","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":897,"t":"LOAD","u":"/ecalc/docs/about/references/keywords/LOAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":905,"t":"LOWER_HEATING_VALUE","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":912,"t":"MAXIMUM_DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":920,"t":"MODELS","u":"/ecalc/docs/about/references/keywords/MODELS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":928,"t":"NAME","u":"/ecalc/docs/about/references/keywords/NAME","b":["Docs","Reference Documentation","YAML keywords"]},{"i":936,"t":"OPERATIONAL_SETTINGS","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":959,"t":"POWER_ADJUSTMENT_CONSTANT","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":967,"t":"POWERLOSSFACTOR","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":975,"t":"PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":982,"t":"PRICE","u":"/ecalc/docs/about/references/keywords/PRICE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":993,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/PUMPS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1003,"t":"QUOTA","u":"/ecalc/docs/about/references/keywords/QUOTA","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1011,"t":"RATE","u":"/ecalc/docs/about/references/keywords/RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1019,"t":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1026,"t":"RATE_PER_STREAM","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1034,"t":"REGULARITY","u":"/ecalc/docs/about/references/keywords/REGULARITY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1051,"t":"START","u":"/ecalc/docs/about/references/keywords/START","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1059,"t":"STAGES","u":"/ecalc/docs/about/references/keywords/STAGES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1071,"t":"STREAM","u":"/ecalc/docs/about/references/keywords/STREAM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1079,"t":"STREAMS","u":"/ecalc/docs/about/references/keywords/STREAMS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1087,"t":"SUCTION_PRESSURE","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1095,"t":"TAX","u":"/ecalc/docs/about/references/keywords/TAX","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1106,"t":"TIME_SERIES","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1110,"t":"TOTAL_SYSTEM_RATE","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1118,"t":"TURBINE_EFFICIENCIES","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1125,"t":"TURBINE_LOAD","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1132,"t":"TURBINE_MODEL","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1139,"t":"TYPE","u":"/ecalc/docs/about/references/keywords/TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1153,"t":"UNITS","u":"/ecalc/docs/about/references/keywords/UNITS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1166,"t":"UPSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1174,"t":"VARIABLES","u":"/ecalc/docs/about/references/keywords/VARIABLES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1178,"t":"eCalc","u":"/ecalc/docs/changelog/latest","b":["Changelog"]},{"i":1182,"t":"---","u":"/ecalc/docs/changelog/separator","b":["Changelog"]},{"i":1183,"t":"eCalc v7.0","u":"/ecalc/docs/changelog/v7-0-release","b":["Changelog"]},{"i":1190,"t":"Changelog","u":"/ecalc/docs/changelog/","b":["Changelog"]},{"i":1248,"t":"eCalc v7.1","u":"/ecalc/docs/changelog/v7-1-release","b":["Changelog"]},{"i":1253,"t":"eCalc v7.2","u":"/ecalc/docs/changelog/v7-2-release","b":["Changelog"]},{"i":1258,"t":"eCalc v7.3","u":"/ecalc/docs/changelog/v7-3-release","b":["Changelog"]},{"i":1263,"t":"eCalc v7.5","u":"/ecalc/docs/changelog/v7-5-release","b":["Changelog"]},{"i":1270,"t":"eCalc v7.4","u":"/ecalc/docs/changelog/v7-4-release","b":["Changelog"]},{"i":1275,"t":"eCalc v7.6","u":"/ecalc/docs/changelog/v7-6-release","b":["Changelog"]},{"i":1278,"t":"eCalc v8.0","u":"/ecalc/docs/changelog/v8.0-release","b":["Changelog"]},{"i":1290,"t":"eCalc v8.1","u":"/ecalc/docs/changelog/v8.1-release","b":["Changelog"]},{"i":1300,"t":"eCalc v8.2","u":"/ecalc/docs/changelog/v8.2-release","b":["Changelog"]},{"i":1306,"t":"eCalc v8.3","u":"/ecalc/docs/changelog/v8.3-release","b":["Changelog"]},{"i":1316,"t":"eCalc","u":"/ecalc/docs/changelog/v8.4-release","b":["Changelog"]},{"i":1322,"t":"eCalc","u":"/ecalc/docs/changelog/v8.5-release","b":["Changelog"]},{"i":1329,"t":"Get started","u":"/ecalc/docs/contribute/documentation-guide/documentation","b":["Contribute","Documentation"]},{"i":1339,"t":"Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","b":["Contribute","Documentation"]},{"i":1345,"t":"Get started","u":"/ecalc/docs/contribute/get-started","b":["Contribute"]},{"i":1367,"t":"Conventional Commits","u":"/ecalc/docs/contribute/guides/conventional-commits","b":["Contribute","Guides"]},{"i":1369,"t":"Git","u":"/ecalc/docs/contribute/guides/git","b":["Contribute","Guides"]},{"i":1400,"t":"INSTALLATIONS","u":"/ecalc/docs/about/references/keywords/INSTALLATIONS","b":["Docs","Reference Documentation","YAML keywords"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,4.233,1,1.863]],["t/9",[2,3.77,3,3.465]],["t/16",[1,1.863,4,4.233]],["t/20",[5,3.436,6,3.436,7,3.436]],["t/34",[8,4.233,9,4.233]],["t/36",[10,5.513]],["t/38",[1,1.512,11,3.436,12,3.436]],["t/39",[13,4.233,14,3.77]],["t/48",[14,3.77,15,3.465]],["t/61",[15,3.465,16,3.465]],["t/80",[16,3.465,17,3.465]],["t/82",[17,3.465,18,4.233]],["t/84",[19,4.233,20,4.233]],["t/90",[21,2.215]],["t/92",[22,4.216]],["t/94",[21,1.381,22,2.627,23,3.436]],["t/120",[21,1.381,22,2.627,24,3.436]],["t/144",[21,1.381,22,2.627,25,3.436]],["t/167",[1,1.272,21,1.162,26,2.575,27,2.891]],["t/169",[28,4.233,29,4.233]],["t/175",[21,1.701,30,3.465]],["t/185",[21,1.701,31,3.055]],["t/188",[31,3.055,32,3.77]],["t/205",[21,1.701,33,3.77]],["t/211",[21,1.381,34,3.436,35,1.876]],["t/224",[36,3.77,37,4.233]],["t/233",[38,4.91]],["t/242",[39,3.77,40,3.465]],["t/248",[41,4.91]],["t/263",[21,1.381,35,1.876,42,2.812]],["t/265",[21,1.162,35,1.578,43,2.211,44,2.211]],["t/271",[21,1.162,43,2.211,44,2.211,45,2.891]],["t/277",[21,1.162,43,2.211,44,2.211,46,2.891]],["t/281",[21,1.162,43,2.211,44,2.211,47,2.891]],["t/283",[26,3.06,30,2.812,42,2.812]],["t/302",[21,1.381,31,2.48,42,2.812]],["t/320",[21,1.701,33,3.77]],["t/328",[21,2.215]],["t/334",[21,1.701,35,2.311]],["t/336",[32,3.77,35,2.311]],["t/368",[35,1.876,40,2.812,48,2.48]],["t/370",[35,1.362,48,1.801,49,2.495,50,1.801,51,1.801]],["t/387",[35,1.578,48,2.087,51,2.087,52,2.891]],["t/391",[35,1.578,48,2.087,50,2.087,51,2.087]],["t/393",[21,0.711,35,0.966,48,1.277,50,1.277,51,1.277,53,1.769,54,1.448,55,1.576]],["t/405",[51,2.087,55,2.575,56,2.891,57,2.891]],["t/414",[21,1.701,58,4.233]],["t/428",[21,1.701,59,4.233]],["t/440",[60,4.233,61,4.233]],["t/450",[50,3.979]],["t/462",[62,5.513]],["t/464",[21,1.701,35,2.311]],["t/466",[30,3.465,63,3.77]],["t/482",[1,1.863,63,3.77]],["t/484",[3,3.465,64,4.233]],["t/485",[1,2.426]],["t/497",[2,3.77,3,3.465]],["t/499",[21,1.701,31,3.055]],["t/501",[65,5.513]],["t/505",[66,5.513]],["t/513",[67,5.513]],["t/521",[68,5.513]],["t/529",[69,5.513]],["t/537",[35,3.01]],["t/547",[70,4.91]],["t/555",[70,4.91]],["t/561",[71,5.513]],["t/569",[72,5.513]],["t/577",[73,5.513]],["t/585",[74,5.513]],["t/599",[75,5.513]],["t/607",[76,5.513]],["t/613",[77,4.91]],["t/620",[77,4.91]],["t/627",[78,5.513]],["t/635",[79,5.513]],["t/643",[80,5.513]],["t/651",[81,5.513]],["t/661",[82,5.513]],["t/672",[83,5.513]],["t/680",[84,5.513]],["t/688",[85,5.513]],["t/696",[86,5.513]],["t/704",[87,5.513]],["t/712",[88,5.513]],["t/718",[89,5.513]],["t/726",[38,4.91]],["t/734",[90,5.513]],["t/744",[91,5.513]],["t/750",[92,5.513]],["t/765",[36,4.91]],["t/773",[93,5.513]],["t/781",[94,5.513]],["t/788",[39,4.91]],["t/796",[95,5.513]],["t/800",[96,5.513]],["t/808",[97,5.513]],["t/816",[98,5.513]],["t/820",[99,5.513]],["t/833",[100,5.513]],["t/844",[101,5.513]],["t/852",[102,5.513]],["t/863",[103,5.513]],["t/871",[104,5.513]],["t/879",[105,5.513]],["t/889",[106,5.513]],["t/897",[107,5.513]],["t/905",[108,5.513]],["t/912",[109,5.513]],["t/920",[21,2.215]],["t/928",[110,5.513]],["t/936",[111,5.513]],["t/959",[112,5.513]],["t/967",[113,5.513]],["t/975",[114,5.513]],["t/982",[115,5.513]],["t/993",[31,3.979]],["t/1003",[116,5.513]],["t/1011",[117,5.513]],["t/1019",[118,5.513]],["t/1026",[119,5.513]],["t/1034",[120,5.513]],["t/1051",[121,4.513]],["t/1059",[122,5.513]],["t/1071",[54,4.513]],["t/1079",[54,4.513]],["t/1087",[123,5.513]],["t/1095",[124,5.513]],["t/1106",[125,5.513]],["t/1110",[126,5.513]],["t/1118",[127,5.513]],["t/1125",[128,5.513]],["t/1132",[129,5.513]],["t/1139",[40,4.513]],["t/1153",[130,5.513]],["t/1166",[131,5.513]],["t/1174",[50,3.979]],["t/1178",[1,2.426]],["t/1182",[]],["t/1183",[1,1.863,132,4.233]],["t/1190",[133,5.513]],["t/1248",[1,1.863,134,4.233]],["t/1253",[1,1.863,135,4.233]],["t/1258",[1,1.863,136,4.233]],["t/1263",[1,1.863,137,4.233]],["t/1270",[1,1.863,138,4.233]],["t/1275",[1,1.863,139,4.233]],["t/1278",[1,1.863,140,4.233]],["t/1290",[1,1.863,15,3.465]],["t/1300",[1,1.863,16,3.465]],["t/1306",[1,1.863,17,3.465]],["t/1316",[1,2.426]],["t/1322",[1,2.426]],["t/1329",[121,4.513]],["t/1339",[141,5.513]],["t/1345",[121,4.513]],["t/1367",[142,4.233,143,4.233]],["t/1369",[144,5.513]],["t/1400",[41,4.91]]],"invertedIndex":[["",{"_index":6,"t":{"20":{"position":[[4,1]]}}}],["adjust",{"_index":66,"t":{"505":{"position":[[0,10]]}}}],["advanc",{"_index":23,"t":{"94":{"position":[[0,8]]}}}],["api",{"_index":2,"t":{"9":{"position":[[0,3]]},"497":{"position":[[0,3]]}}}],["calcul",{"_index":42,"t":{"263":{"position":[[21,12]]},"283":{"position":[[18,12]]},"302":{"position":[[15,12]]}}}],["categori",{"_index":67,"t":{"513":{"position":[[0,8]]}}}],["changelog",{"_index":133,"t":{"1190":{"position":[[0,9]]}}}],["chart",{"_index":32,"t":{"188":{"position":[[5,5]]},"336":{"position":[[11,5]]}}}],["cli",{"_index":4,"t":{"16":{"position":[[6,3]]}}}],["commit",{"_index":143,"t":{"1367":{"position":[[13,7]]}}}],["compressor",{"_index":35,"t":{"211":{"position":[[8,10]]},"263":{"position":[[0,10]]},"265":{"position":[[0,10]]},"334":{"position":[[0,10]]},"336":{"position":[[0,10]]},"368":{"position":[[0,10]]},"370":{"position":[[26,10]]},"387":{"position":[[13,10]]},"391":{"position":[[15,10]]},"393":{"position":[[15,10]]},"464":{"position":[[0,10]]},"537":{"position":[[0,11]]}}}],["compressor_model",{"_index":68,"t":{"521":{"position":[[0,16]]}}}],["compressor_system",{"_index":45,"t":{"271":{"position":[[0,17]]}}}],["compressor_train_model",{"_index":69,"t":{"529":{"position":[[0,22]]}}}],["condit",{"_index":70,"t":{"547":{"position":[[0,9]]},"555":{"position":[[0,10]]}}}],["constant",{"_index":72,"t":{"569":{"position":[[0,8]]}}}],["consum",{"_index":71,"t":{"561":{"position":[[0,9]]}}}],["consumption_rate_typ",{"_index":73,"t":{"577":{"position":[[0,21]]}}}],["control",{"_index":57,"t":{"405":{"position":[[21,7]]}}}],["control_margin",{"_index":74,"t":{"585":{"position":[[0,14]]}}}],["control_margin_unit",{"_index":75,"t":{"599":{"position":[[0,19]]}}}],["convent",{"_index":142,"t":{"1367":{"position":[[0,12]]}}}],["crossov",{"_index":76,"t":{"607":{"position":[[0,9]]}}}],["curv",{"_index":77,"t":{"613":{"position":[[0,5]]},"620":{"position":[[0,6]]}}}],["data",{"_index":20,"t":{"84":{"position":[[7,4]]}}}],["direct",{"_index":47,"t":{"281":{"position":[[0,6]]}}}],["direct_emitt",{"_index":78,"t":{"627":{"position":[[0,15]]}}}],["discharge_pressur",{"_index":79,"t":{"635":{"position":[[0,18]]}}}],["document",{"_index":64,"t":{"484":{"position":[[10,13]]}}}],["downstream_pressure_control",{"_index":80,"t":{"643":{"position":[[0,27]]}}}],["drogon",{"_index":25,"t":{"144":{"position":[[0,6]]}}}],["ecalc",{"_index":1,"t":{"1":{"position":[[16,6]]},"16":{"position":[[0,5]]},"38":{"position":[[10,5]]},"167":{"position":[[10,5]]},"482":{"position":[[0,6]]},"485":{"position":[[0,5]]},"1178":{"position":[[0,5]]},"1183":{"position":[[0,5]]},"1248":{"position":[[0,5]]},"1253":{"position":[[0,5]]},"1258":{"position":[[0,5]]},"1263":{"position":[[0,5]]},"1270":{"position":[[0,5]]},"1275":{"position":[[0,5]]},"1278":{"position":[[0,5]]},"1290":{"position":[[0,5]]},"1300":{"position":[[0,5]]},"1306":{"position":[[0,5]]},"1316":{"position":[[0,5]]},"1322":{"position":[[0,5]]}}}],["effici",{"_index":81,"t":{"651":{"position":[[0,10]]}}}],["electricity2fuel",{"_index":82,"t":{"661":{"position":[[0,16]]}}}],["emiss",{"_index":85,"t":{"688":{"position":[[0,9]]}}}],["emission_nam",{"_index":84,"t":{"680":{"position":[[0,13]]}}}],["emission_r",{"_index":83,"t":{"672":{"position":[[0,13]]}}}],["emitter_model",{"_index":86,"t":{"696":{"position":[[0,13]]}}}],["end",{"_index":87,"t":{"704":{"position":[[0,3]]}}}],["energi",{"_index":43,"t":{"265":{"position":[[11,6]]},"271":{"position":[[18,6]]},"277":{"position":[[63,6]]},"281":{"position":[[7,6]]}}}],["energy_usage_model",{"_index":88,"t":{"712":{"position":[[0,18]]}}}],["energyfunct",{"_index":89,"t":{"718":{"position":[[0,14]]}}}],["exampl",{"_index":22,"t":{"92":{"position":[[0,8]]},"94":{"position":[[15,7]]},"120":{"position":[[13,7]]},"144":{"position":[[13,7]]}}}],["express",{"_index":38,"t":{"233":{"position":[[0,11]]},"726":{"position":[[0,10]]}}}],["extrapol",{"_index":90,"t":{"734":{"position":[[0,13]]}}}],["facil",{"_index":28,"t":{"169":{"position":[[0,8]]}}}],["facility_input",{"_index":91,"t":{"744":{"position":[[0,15]]}}}],["factor",{"_index":92,"t":{"750":{"position":[[0,6]]}}}],["faq",{"_index":5,"t":{"20":{"position":[[0,3]]}}}],["file",{"_index":36,"t":{"224":{"position":[[0,4]]},"765":{"position":[[0,4]]}}}],["fix",{"_index":56,"t":{"405":{"position":[[0,5]]}}}],["fluid",{"_index":58,"t":{"414":{"position":[[0,5]]}}}],["fluid_dens",{"_index":93,"t":{"773":{"position":[[0,13]]}}}],["fluid_model",{"_index":94,"t":{"781":{"position":[[0,11]]}}}],["format",{"_index":37,"t":{"224":{"position":[[5,6]]}}}],["fuel",{"_index":39,"t":{"242":{"position":[[0,4]]},"788":{"position":[[0,4]]}}}],["fuel_typ",{"_index":95,"t":{"796":{"position":[[0,10]]}}}],["fuelconsum",{"_index":96,"t":{"800":{"position":[[0,13]]}}}],["fuelrat",{"_index":97,"t":{"808":{"position":[[0,8]]}}}],["gener",{"_index":30,"t":{"175":{"position":[[0,9]]},"283":{"position":[[0,9]]},"466":{"position":[[0,7]]}}}],["generatorset",{"_index":98,"t":{"816":{"position":[[0,13]]}}}],["git",{"_index":144,"t":{"1369":{"position":[[0,3]]}}}],["hcexport",{"_index":99,"t":{"820":{"position":[[0,8]]}}}],["head",{"_index":100,"t":{"833":{"position":[[0,4]]}}}],["head_margin",{"_index":101,"t":{"844":{"position":[[0,11]]}}}],["includ",{"_index":102,"t":{"852":{"position":[[0,8]]}}}],["influence_time_vector",{"_index":103,"t":{"863":{"position":[[0,21]]}}}],["inlet_temperatur",{"_index":104,"t":{"871":{"position":[[0,17]]}}}],["input",{"_index":29,"t":{"169":{"position":[[9,6]]}}}],["instal",{"_index":41,"t":{"248":{"position":[[0,13]]},"1400":{"position":[[0,13]]}}}],["interpolation_typ",{"_index":105,"t":{"879":{"position":[[0,18]]}}}],["interstage_control_pressur",{"_index":106,"t":{"889":{"position":[[0,27]]}}}],["introduct",{"_index":0,"t":{"1":{"position":[[0,12]]}}}],["keyword",{"_index":65,"t":{"501":{"position":[[0,8]]}}}],["librari",{"_index":9,"t":{"34":{"position":[[7,7]]}}}],["load",{"_index":107,"t":{"897":{"position":[[0,4]]}}}],["lower_heating_valu",{"_index":108,"t":{"905":{"position":[[0,19]]}}}],["markdown",{"_index":141,"t":{"1339":{"position":[[0,8]]}}}],["maximum_discharge_pressur",{"_index":109,"t":{"912":{"position":[[0,26]]}}}],["migrat",{"_index":11,"t":{"38":{"position":[[0,9]]}}}],["model",{"_index":21,"t":{"90":{"position":[[0,9]]},"94":{"position":[[9,5]]},"120":{"position":[[7,5]]},"144":{"position":[[7,5]]},"167":{"position":[[16,5]]},"175":{"position":[[10,9]]},"185":{"position":[[5,9]]},"205":{"position":[[8,6]]},"211":{"position":[[19,5]]},"263":{"position":[[11,6]]},"265":{"position":[[24,5]]},"271":{"position":[[31,5]]},"277":{"position":[[76,5]]},"281":{"position":[[20,5]]},"302":{"position":[[5,6]]},"320":{"position":[[8,6]]},"328":{"position":[[0,6]]},"334":{"position":[[11,9]]},"393":{"position":[[32,5]]},"414":{"position":[[6,5]]},"428":{"position":[[8,9]]},"464":{"position":[[11,9]]},"499":{"position":[[5,9]]},"920":{"position":[[0,6]]}}}],["multipl",{"_index":53,"t":{"393":{"position":[[43,8]]}}}],["name",{"_index":110,"t":{"928":{"position":[[0,4]]}}}],["operational_set",{"_index":111,"t":{"936":{"position":[[0,20]]}}}],["output",{"_index":19,"t":{"84":{"position":[[0,6]]}}}],["power_adjustment_const",{"_index":112,"t":{"959":{"position":[[0,25]]}}}],["powerlossfactor",{"_index":113,"t":{"967":{"position":[[0,15]]}}}],["pressur",{"_index":55,"t":{"393":{"position":[[64,9]]},"405":{"position":[[12,8]]}}}],["pressure_control",{"_index":114,"t":{"975":{"position":[[0,16]]}}}],["price",{"_index":115,"t":{"982":{"position":[[0,5]]}}}],["pump",{"_index":31,"t":{"185":{"position":[[0,4]]},"188":{"position":[[0,4]]},"302":{"position":[[0,4]]},"499":{"position":[[0,4]]},"993":{"position":[[0,5]]}}}],["python",{"_index":8,"t":{"34":{"position":[[0,6]]}}}],["quota",{"_index":116,"t":{"1003":{"position":[[0,5]]}}}],["rate",{"_index":117,"t":{"1011":{"position":[[0,4]]}}}],["rate_fract",{"_index":118,"t":{"1019":{"position":[[0,14]]}}}],["rate_per_stream",{"_index":119,"t":{"1026":{"position":[[0,15]]}}}],["refer",{"_index":3,"t":{"9":{"position":[[4,9]]},"484":{"position":[[0,9]]},"497":{"position":[[4,9]]}}}],["regular",{"_index":120,"t":{"1034":{"position":[[0,10]]}}}],["sampl",{"_index":34,"t":{"211":{"position":[[0,7]]}}}],["seri",{"_index":61,"t":{"440":{"position":[[5,6]]}}}],["set",{"_index":26,"t":{"167":{"position":[[0,3]]},"283":{"position":[[10,4]]}}}],["simpl",{"_index":24,"t":{"120":{"position":[[0,6]]}}}],["simplifi",{"_index":49,"t":{"370":{"position":[[0,10]]}}}],["singl",{"_index":52,"t":{"387":{"position":[[0,6]]}}}],["speed",{"_index":51,"t":{"370":{"position":[[20,5]]},"387":{"position":[[7,5]]},"391":{"position":[[9,5]]},"393":{"position":[[9,5]]},"405":{"position":[[6,5]]}}}],["stage",{"_index":122,"t":{"1059":{"position":[[0,6]]}}}],["start",{"_index":121,"t":{"1051":{"position":[[0,5]]},"1329":{"position":[[4,7]]},"1345":{"position":[[4,7]]}}}],["stream",{"_index":54,"t":{"393":{"position":[[52,7]]},"1071":{"position":[[0,6]]},"1079":{"position":[[0,7]]}}}],["suction_pressur",{"_index":123,"t":{"1087":{"position":[[0,16]]}}}],["tabular",{"_index":33,"t":{"205":{"position":[[0,7]]},"320":{"position":[[0,7]]}}}],["tax",{"_index":124,"t":{"1095":{"position":[[0,3]]}}}],["theori",{"_index":62,"t":{"462":{"position":[[0,6]]}}}],["time",{"_index":60,"t":{"440":{"position":[[0,4]]}}}],["time_seri",{"_index":125,"t":{"1106":{"position":[[0,11]]}}}],["total_system_r",{"_index":126,"t":{"1110":{"position":[[0,17]]}}}],["train",{"_index":48,"t":{"368":{"position":[[11,5]]},"370":{"position":[[37,5]]},"387":{"position":[[24,5]]},"391":{"position":[[26,5]]},"393":{"position":[[26,5]]}}}],["troubleshoot",{"_index":7,"t":{"20":{"position":[[6,15]]}}}],["turbin",{"_index":59,"t":{"428":{"position":[[0,7]]}}}],["turbine_effici",{"_index":127,"t":{"1118":{"position":[[0,20]]}}}],["turbine_load",{"_index":128,"t":{"1125":{"position":[[0,12]]}}}],["turbine_model",{"_index":129,"t":{"1132":{"position":[[0,13]]}}}],["type",{"_index":40,"t":{"242":{"position":[[5,5]]},"368":{"position":[[17,5]]},"1139":{"position":[[0,4]]}}}],["unit",{"_index":130,"t":{"1153":{"position":[[0,5]]}}}],["up",{"_index":27,"t":{"167":{"position":[[4,2]]}}}],["upstream_pressure_control",{"_index":131,"t":{"1166":{"position":[[0,25]]}}}],["usag",{"_index":44,"t":{"265":{"position":[[18,5]]},"271":{"position":[[25,5]]},"277":{"position":[[70,5]]},"281":{"position":[[14,5]]}}}],["v7",{"_index":13,"t":{"39":{"position":[[0,2]]}}}],["v7.0",{"_index":132,"t":{"1183":{"position":[[6,4]]}}}],["v7.1",{"_index":134,"t":{"1248":{"position":[[6,4]]}}}],["v7.2",{"_index":135,"t":{"1253":{"position":[[6,4]]}}}],["v7.3",{"_index":136,"t":{"1258":{"position":[[6,4]]}}}],["v7.4",{"_index":138,"t":{"1270":{"position":[[6,4]]}}}],["v7.5",{"_index":137,"t":{"1263":{"position":[[6,4]]}}}],["v7.6",{"_index":139,"t":{"1275":{"position":[[6,4]]}}}],["v8",{"_index":14,"t":{"39":{"position":[[6,2]]},"48":{"position":[[0,2]]}}}],["v8.0",{"_index":140,"t":{"1278":{"position":[[6,4]]}}}],["v8.1",{"_index":15,"t":{"48":{"position":[[6,4]]},"61":{"position":[[0,4]]},"1290":{"position":[[6,4]]}}}],["v8.2",{"_index":16,"t":{"61":{"position":[[8,4]]},"80":{"position":[[0,4]]},"1300":{"position":[[6,4]]}}}],["v8.3",{"_index":17,"t":{"80":{"position":[[8,4]]},"82":{"position":[[0,4]]},"1306":{"position":[[6,4]]}}}],["v8.4",{"_index":18,"t":{"82":{"position":[[8,4]]}}}],["variabl",{"_index":50,"t":{"370":{"position":[[11,8]]},"391":{"position":[[0,8]]},"393":{"position":[[0,8]]},"450":{"position":[[0,9]]},"1174":{"position":[[0,9]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":46,"t":{"277":{"position":[[0,62]]}}}],["version",{"_index":12,"t":{"38":{"position":[[16,8]]}}}],["workflow",{"_index":63,"t":{"466":{"position":[[8,8]]},"482":{"position":[[7,8]]}}}],["yaml",{"_index":10,"t":{"36":{"position":[[0,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"What is eCalc™?","u":"/ecalc/docs/about/","h":"#what-is-ecalc","p":1},{"i":5,"t":"Why should I use eCalc™?","u":"/ecalc/docs/about/","h":"#why-should-i-use-ecalc","p":1},{"i":7,"t":"How to use eCalc™?","u":"/ecalc/docs/about/","h":"#how-to-use-ecalc","p":1},{"i":11,"t":"What method should I choose?","u":"/ecalc/docs/about/getting_started/","h":"#what-method-should-i-choose","p":9},{"i":12,"t":"eCalc CLI","u":"/ecalc/docs/about/getting_started/","h":"#ecalc-cli","p":9},{"i":14,"t":"Python Library","u":"/ecalc/docs/about/getting_started/","h":"#python-library","p":9},{"i":18,"t":"Example Usage","u":"/ecalc/docs/about/getting_started/cli/","h":"#example-usage","p":16},{"i":22,"t":"Indentation errors","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#indentation-errors","p":20},{"i":24,"t":"Error messages due to YAML read problems","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-yaml-read-problems","p":20},{"i":26,"t":"Error messages due to invalid eCalc configuration","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-invalid-ecalc-configuration","p":20},{"i":28,"t":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution","p":20},{"i":30,"t":"Special characters in Unicode","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#special-characters-in-unicode","p":20},{"i":32,"t":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution-1","p":20},{"i":41,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#yaml-migration","p":39},{"i":42,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#migration-overview","p":39},{"i":44,"t":"Main differences","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#main-differences","p":39},{"i":46,"t":"CLI migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#cli-migration","p":39},{"i":50,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#yaml-migration","p":48},{"i":51,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#migration-overview","p":48},{"i":53,"t":"1. Changes to TIME_SERIES","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#1-changes-to-time_series","p":48},{"i":55,"t":"2. Not possible to have different interpolation types for vectors within one file","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file","p":48},{"i":57,"t":"3. Empty data in time series columns no longer allowed","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#3-empty-data-in-time-series-columns-no-longer-allowed","p":48},{"i":59,"t":"4. New LTP Category: STEAM-TURBINE-GENERATOR","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#4--new-ltp-category-steam-turbine-generator","p":48},{"i":63,"t":"Modelling","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#modelling","p":61},{"i":64,"t":"YAML","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#yaml","p":61},{"i":66,"t":"Result","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#result","p":61},{"i":67,"t":"Operational settings used is now 1-based","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#operational-settings-used-is-now-1-based","p":61},{"i":69,"t":"Resampling of rates changed from forward filling to average rates","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#resampling-of-rates-changed-from-forward-filling-to-average-rates","p":61},{"i":71,"t":"LTP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#ltp-tsv-file","p":61},{"i":73,"t":"STP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#stp-tsv-file","p":61},{"i":75,"t":"Emissions, structure and order","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#emissions-structure-and-order","p":61},{"i":77,"t":"Behaviour","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#behaviour","p":61},{"i":78,"t":"Conditions","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#conditions","p":61},{"i":86,"t":"Decimals and significant digits in eCalc","u":"/ecalc/docs/about/miscellaneous/","h":"#decimals-and-significant-digits-in-ecalc","p":84},{"i":88,"t":"Quality control","u":"/ecalc/docs/about/miscellaneous/","h":"#quality-control","p":84},{"i":96,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#yaml-model-overview","p":94},{"i":98,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#time_series","p":94},{"i":100,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#facility_inputs","p":94},{"i":102,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#fuel_types","p":94},{"i":104,"t":"MODELS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#models","p":94},{"i":106,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#variables","p":94},{"i":108,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installations","p":94},{"i":110,"t":"Installation A","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installation-a","p":94},{"i":112,"t":"Installation B","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installation-b","p":94},{"i":114,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#energy_usage_model","p":94},{"i":116,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#full-ecalc-yaml-model","p":94},{"i":118,"t":"Input files","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#input-files","p":94},{"i":122,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/simple","h":"#yaml-model-overview","p":120},{"i":124,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#time_series","p":120},{"i":126,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#facility_inputs","p":120},{"i":128,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuel_types","p":120},{"i":130,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#variables","p":120},{"i":132,"t":"INSTALLATION","u":"/ecalc/docs/about/modelling/examples/simple","h":"#installation","p":120},{"i":134,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#generatorsets","p":120},{"i":136,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuelconsumers","p":120},{"i":138,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/simple","h":"#energy_usage_model","p":120},{"i":140,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/simple","h":"#full-ecalc-yaml-model","p":120},{"i":142,"t":"Input files","u":"/ecalc/docs/about/modelling/examples/simple","h":"#input-files","p":120},{"i":146,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#yaml-model-overview","p":144},{"i":148,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#time_series","p":144},{"i":150,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility_inputs","p":144},{"i":152,"t":"MODELS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#models","p":144},{"i":154,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#fuel_types","p":144},{"i":156,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#installations","p":144},{"i":158,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#generatorsets","p":144},{"i":160,"t":"Full Model","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#full-model","p":144},{"i":162,"t":"Input Data","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#input-data","p":144},{"i":163,"t":"Facility resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility-resources","p":144},{"i":165,"t":"Timeseries resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#timeseries-resources","p":144},{"i":171,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#format","p":169},{"i":173,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#supported-types","p":169},{"i":177,"t":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#electricity2fuel","p":175},{"i":179,"t":"Facility input format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#facility-input-format","p":175},{"i":181,"t":"Example table","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#example-table","p":175},{"i":183,"t":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#header-and-unit-requirements","p":175},{"i":186,"t":"Attention","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","h":"","p":185},{"i":190,"t":"PUMP_CHART_SINGLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_single_speed","p":188},{"i":192,"t":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements","p":188},{"i":194,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format","p":188},{"i":196,"t":"PUMP_CHART_VARIABLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_variable_speed","p":188},{"i":197,"t":"Description","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#description","p":188},{"i":199,"t":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements-1","p":188},{"i":201,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format-1","p":188},{"i":203,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#examples","p":188},{"i":207,"t":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#header-and-unit-requirements","p":205},{"i":209,"t":"Example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#example","p":205},{"i":213,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#format","p":211},{"i":215,"t":"Header requirements for the sampled compressor csv file","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#header-requirements-for-the-sampled-compressor-csv-file","p":211},{"i":217,"t":"Units","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#units","p":211},{"i":219,"t":"Example tables","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#example-tables","p":211},{"i":220,"t":"1D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#1d-example","p":211},{"i":222,"t":"3D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#3d-example","p":211},{"i":226,"t":"Setup file syntax","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#setup-file-syntax","p":224},{"i":228,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#examples","p":224},{"i":229,"t":"YAML format example","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#yaml-format-example","p":224},{"i":231,"t":"Full examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#full-examples","p":224},{"i":235,"t":"Available operators","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#available-operators","p":233},{"i":237,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#examples","p":233},{"i":238,"t":"Combining data from different reservoir inputs","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#combining-data-from-different-reservoir-inputs","p":233},{"i":240,"t":"Model of additional rate","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#model-of-additional-rate","p":233},{"i":244,"t":"Format","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#format","p":242},{"i":246,"t":"Example","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#example","p":242},{"i":250,"t":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series","p":248},{"i":252,"t":"Time intervals for variables/expressions and models","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals-for-variablesexpressions-and-models","p":248},{"i":254,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#format","p":248},{"i":256,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#example","p":248},{"i":257,"t":"General structure","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#general-structure","p":248},{"i":259,"t":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series-1","p":248},{"i":261,"t":"Time intervals","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals","p":248},{"i":267,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#format","p":265},{"i":269,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#example","p":265},{"i":273,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#format","p":271},{"i":275,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#example","p":271},{"i":279,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":277},{"i":285,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format","p":283},{"i":287,"t":"Electricity2fuel function","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#electricity2fuel-function","p":283},{"i":288,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description","p":283},{"i":290,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format-1","p":283},{"i":292,"t":"Power from shore","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#power-from-shore","p":283},{"i":293,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-1","p":283},{"i":295,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example","p":283},{"i":297,"t":"Heaters and boilers","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#heaters-and-boilers","p":283},{"i":298,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-2","p":283},{"i":300,"t":"Example: Boiler as generator set","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example-boiler-as-generator-set","p":283},{"i":304,"t":"PUMP energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump-energy-usage-model","p":302},{"i":306,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format","p":302},{"i":308,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example","p":302},{"i":310,"t":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units","p":302},{"i":312,"t":"PUMP_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump_system-energy-usage-model","p":302},{"i":314,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format-1","p":302},{"i":316,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example-1","p":302},{"i":318,"t":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units-1","p":302},{"i":322,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#format","p":320},{"i":324,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#example","p":320},{"i":326,"t":"COMPRESSOR_TABULAR input type","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#compressor_tabular-input-type","p":320},{"i":330,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/","h":"#format","p":328},{"i":332,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/models/","h":"#supported-types","p":328},{"i":338,"t":"User defined single speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-single-speed-compressor-chart","p":336},{"i":340,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format","p":336},{"i":342,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example","p":336},{"i":344,"t":"User defined variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-variable-speed-compressor-chart","p":336},{"i":346,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-2","p":336},{"i":348,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-2","p":336},{"i":350,"t":"Generic compressor chart with predefined design point","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-predefined-design-point","p":336},{"i":352,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-4","p":336},{"i":354,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-4","p":336},{"i":356,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-5","p":336},{"i":358,"t":"Generic compressor chart with design point calculated from input data","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-design-point-calculated-from-input-data","p":336},{"i":360,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-5","p":336},{"i":362,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-6","p":336},{"i":364,"t":"Surge control margin for variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#surge-control-margin-for-variable-speed-compressor-chart","p":336},{"i":366,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-6","p":336},{"i":372,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#format","p":370},{"i":374,"t":"Simplified compressor train model with known compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-known-compressor-stages","p":370},{"i":376,"t":"Simplified compressor train model with unknown number of compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-unknown-number-of-compressor-stages","p":370},{"i":378,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#examples","p":370},{"i":379,"t":"A (single) compressor with a user-defined variable speed compressor chart and fluid composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition","p":370},{"i":381,"t":"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition","p":370},{"i":383,"t":"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart","p":370},{"i":385,"t":"A compressor train where the number of stages are unknown","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-where-the-number-of-stages-are-unknown","p":370},{"i":389,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","h":"#format","p":387},{"i":395,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":393},{"i":397,"t":"Keyword usage","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#keyword-usage","p":393},{"i":399,"t":"INTERSTAGE_PRESSURE_CONTROL","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#interstage_pressure_control","p":393},{"i":401,"t":"Fixed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#fixed-pressure-control","p":393},{"i":403,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#example","p":393},{"i":406,"t":"Theory","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#theory","p":405},{"i":408,"t":"Control modelling in eCalc™","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#control-modelling-in-ecalc","p":405},{"i":410,"t":"Pressure control methods - choking options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---choking-options","p":405},{"i":412,"t":"Pressure control methods - recirculation options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---recirculation-options","p":405},{"i":416,"t":"Fluid model using predefined composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-using-predefined-composition","p":414},{"i":418,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format","p":414},{"i":420,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#examples","p":414},{"i":422,"t":"Fluid model with user-specified composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-with-user-specified-composition","p":414},{"i":424,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format-1","p":414},{"i":426,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#example","p":414},{"i":430,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format","p":428},{"i":432,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#example","p":428},{"i":434,"t":"Combining a compressor train and a turbine into one model","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#combining-a-compressor-train-and-a-turbine-into-one-model","p":428},{"i":436,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format-1","p":428},{"i":438,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#examples","p":428},{"i":442,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#supported-types","p":440},{"i":444,"t":"Format","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#format","p":440},{"i":446,"t":"Requirements","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#requirements","p":440},{"i":448,"t":"Example","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#example","p":440},{"i":452,"t":"Defining variables","u":"/ecalc/docs/about/modelling/setup/variables","h":"#defining-variables","p":450},{"i":454,"t":"Format","u":"/ecalc/docs/about/modelling/setup/variables","h":"#format","p":450},{"i":456,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/variables","h":"#examples","p":450},{"i":458,"t":"Using variables","u":"/ecalc/docs/about/modelling/setup/variables","h":"#using-variables","p":450},{"i":460,"t":"Example","u":"/ecalc/docs/about/modelling/setup/variables","h":"#example","p":450},{"i":467,"t":"Simplified Process Flow Diagram","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#simplified-process-flow-diagram","p":466},{"i":469,"t":"Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#workflow","p":466},{"i":471,"t":"Workflow Explanation","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#workflow-explanation","p":466},{"i":472,"t":"Required Subsurface Profiles","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#required-subsurface-profiles","p":466},{"i":474,"t":"Facility Information","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#facility-information","p":466},{"i":476,"t":"Consumer Information","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#consumer-information","p":466},{"i":478,"t":"Validation","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#validation","p":466},{"i":480,"t":"Calibration","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#calibration","p":466},{"i":487,"t":"ecalc run","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-run","p":485},{"i":489,"t":"ecalc selftest","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-selftest","p":485},{"i":491,"t":"ecalc show","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show","p":485},{"i":493,"t":"ecalc show results","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show-results","p":485},{"i":495,"t":"ecalc show yaml","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show-yaml","p":485},{"i":503,"t":"Top level keywords","u":"/ecalc/docs/about/references/keywords/","h":"#top-level-keywords","p":501},{"i":507,"t":"Description","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#description","p":505},{"i":509,"t":"Format","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#format","p":505},{"i":511,"t":"Example","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#example","p":505},{"i":515,"t":"Description","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#description","p":513},{"i":517,"t":"Format","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#format","p":513},{"i":519,"t":"Example","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#example","p":513},{"i":523,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#description","p":521},{"i":525,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#format","p":521},{"i":527,"t":"Example","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#example","p":521},{"i":531,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#description","p":529},{"i":533,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#format","p":529},{"i":535,"t":"Example","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#example","p":529},{"i":539,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#description","p":537},{"i":541,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#format","p":537},{"i":543,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#example-1","p":537},{"i":545,"t":"Example 2 (Detailed)","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#example-2-detailed","p":537},{"i":549,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#description","p":547},{"i":551,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#format","p":547},{"i":553,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#example","p":547},{"i":557,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONDITIONS","h":"#description","p":555},{"i":559,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONDITIONS","h":"#format","p":555},{"i":563,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#description","p":561},{"i":565,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#format","p":561},{"i":567,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#example","p":561},{"i":571,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#description","p":569},{"i":573,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#format","p":569},{"i":575,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#example","p":569},{"i":579,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#description","p":577},{"i":581,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#format","p":577},{"i":583,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#example","p":577},{"i":587,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#description","p":585},{"i":589,"t":"Use in Variable speed compressor train model","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#use-in-variable-speed-compressor-train-model","p":585},{"i":590,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#format","p":585},{"i":592,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#example","p":585},{"i":594,"t":"Use in Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures","p":585},{"i":595,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#format-1","p":585},{"i":597,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#example-1","p":585},{"i":601,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#description","p":599},{"i":603,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#format","p":599},{"i":605,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#example","p":599},{"i":609,"t":"Description","u":"/ecalc/docs/about/references/keywords/CROSSOVER","h":"#description","p":607},{"i":611,"t":"Example","u":"/ecalc/docs/about/references/keywords/CROSSOVER","h":"#example","p":607},{"i":614,"t":"Description","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#description","p":613},{"i":616,"t":"Format","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#format","p":613},{"i":618,"t":"Example","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#example","p":613},{"i":621,"t":"Description","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#description","p":620},{"i":623,"t":"Format","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#format","p":620},{"i":625,"t":"Example","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#example","p":620},{"i":629,"t":"Description","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#description","p":627},{"i":631,"t":"Format","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#format","p":627},{"i":633,"t":"Example","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#example","p":627},{"i":637,"t":"Description","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#description","p":635},{"i":639,"t":"Format","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#format","p":635},{"i":641,"t":"Example","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#example","p":635},{"i":645,"t":"Description","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#description","p":643},{"i":647,"t":"Format","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#format","p":643},{"i":649,"t":"Example","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#example","p":643},{"i":652,"t":"Description","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#description","p":651},{"i":654,"t":"Format","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#format","p":651},{"i":655,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#compressors","p":651},{"i":657,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#pumps","p":651},{"i":659,"t":"Example","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#example","p":651},{"i":663,"t":"Description","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#description","p":661},{"i":665,"t":"Format","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#format","p":661},{"i":667,"t":"Example","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example","p":661},{"i":668,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example-1","p":661},{"i":670,"t":"Example 2","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example-2","p":661},{"i":674,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#description","p":672},{"i":676,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#format","p":672},{"i":678,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#example","p":672},{"i":682,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#description","p":680},{"i":684,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#format","p":680},{"i":686,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#example","p":680},{"i":690,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#description","p":688},{"i":692,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#format","p":688},{"i":694,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#example","p":688},{"i":698,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#description","p":696},{"i":700,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#format","p":696},{"i":702,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#example","p":696},{"i":706,"t":"Description","u":"/ecalc/docs/about/references/keywords/END","h":"#description","p":704},{"i":708,"t":"Format","u":"/ecalc/docs/about/references/keywords/END","h":"#format","p":704},{"i":710,"t":"Example","u":"/ecalc/docs/about/references/keywords/END","h":"#example","p":704},{"i":714,"t":"Description","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","h":"#description","p":712},{"i":716,"t":"Temporal energy usage model","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","h":"#temporal-energy-usage-model","p":712},{"i":720,"t":"Description","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#description","p":718},{"i":722,"t":"Format","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#format","p":718},{"i":724,"t":"Example","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#example","p":718},{"i":728,"t":"Description","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#description","p":726},{"i":730,"t":"Format","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#format","p":726},{"i":732,"t":"Example","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#example","p":726},{"i":736,"t":"Description","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#description","p":734},{"i":738,"t":"Format","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#format","p":734},{"i":740,"t":"Requirements","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#requirements","p":734},{"i":742,"t":"Example","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#example","p":734},{"i":746,"t":"Description","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","h":"#description","p":744},{"i":748,"t":"Supported types","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","h":"#supported-types","p":744},{"i":752,"t":"Description","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#description","p":750},{"i":754,"t":"Use in ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-adjustment","p":750},{"i":756,"t":"Use in EMISSIONS","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-emissions","p":750},{"i":758,"t":"Format","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#format","p":750},{"i":760,"t":"Example","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#example","p":750},{"i":761,"t":"Use in ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-adjustment-1","p":750},{"i":763,"t":"Use in EMISSIONS","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-emissions-1","p":750},{"i":767,"t":"Description","u":"/ecalc/docs/about/references/keywords/FILE","h":"#description","p":765},{"i":769,"t":"Format","u":"/ecalc/docs/about/references/keywords/FILE","h":"#format","p":765},{"i":771,"t":"Example","u":"/ecalc/docs/about/references/keywords/FILE","h":"#example","p":765},{"i":775,"t":"Description","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#description","p":773},{"i":777,"t":"Format","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#format","p":773},{"i":779,"t":"Example","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#example","p":773},{"i":782,"t":"Description","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#description","p":781},{"i":784,"t":"Format","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#format","p":781},{"i":786,"t":"Example","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#example","p":781},{"i":790,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#description","p":788},{"i":792,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#format","p":788},{"i":794,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#example","p":788},{"i":798,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUEL_TYPES","h":"#description","p":796},{"i":802,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#description","p":800},{"i":804,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#format","p":800},{"i":806,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#example","p":800},{"i":810,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#description","p":808},{"i":812,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#format","p":808},{"i":814,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#example","p":808},{"i":818,"t":"Description","u":"/ecalc/docs/about/references/keywords/GENERATORSETS","h":"#description","p":816},{"i":822,"t":"Description","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#description","p":820},{"i":824,"t":"Format","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#format","p":820},{"i":826,"t":"Example","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#example","p":820},{"i":827,"t":"Basic usage","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#basic-usage","p":820},{"i":829,"t":"With time dependency","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#with-time-dependency","p":820},{"i":831,"t":"Full example","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#full-example","p":820},{"i":834,"t":"Description","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#description","p":833},{"i":836,"t":"Format","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#format","p":833},{"i":837,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#compressors","p":833},{"i":839,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#pumps","p":833},{"i":841,"t":"Example","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#example","p":833},{"i":842,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#compressors-1","p":833},{"i":846,"t":"Description","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#description","p":844},{"i":848,"t":"Format","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#format","p":844},{"i":850,"t":"Example","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#example","p":844},{"i":853,"t":"Description","u":"/ecalc/docs/about/references/keywords/include","h":"#description","p":852},{"i":855,"t":"Format","u":"/ecalc/docs/about/references/keywords/include","h":"#format","p":852},{"i":857,"t":"Example 1 - include map/object into list item","u":"/ecalc/docs/about/references/keywords/include","h":"#example-1---include-mapobject-into-list-item","p":852},{"i":859,"t":"Example 2 - include map/object into object value","u":"/ecalc/docs/about/references/keywords/include","h":"#example-2---include-mapobject-into-object-value","p":852},{"i":861,"t":"Example 3 - include list into object value","u":"/ecalc/docs/about/references/keywords/include","h":"#example-3---include-list-into-object-value","p":852},{"i":865,"t":"Description","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#description","p":863},{"i":867,"t":"Format","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#format","p":863},{"i":869,"t":"Example","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#example","p":863},{"i":873,"t":"Description","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#description","p":871},{"i":875,"t":"Format","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#format","p":871},{"i":877,"t":"Example","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#example","p":871},{"i":881,"t":"Description","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#description","p":879},{"i":883,"t":"Format","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#format","p":879},{"i":885,"t":"Requirements","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#requirements","p":879},{"i":887,"t":"Example","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#example","p":879},{"i":891,"t":"Description","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#description","p":889},{"i":893,"t":"Use in MODELS","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#use-in-models","p":889},{"i":895,"t":"Use in ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#use-in-energy_usage_model","p":889},{"i":899,"t":"Description","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#description","p":897},{"i":901,"t":"Format","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#format","p":897},{"i":903,"t":"Example","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#example","p":897},{"i":906,"t":"Description","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#description","p":905},{"i":908,"t":"Format","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#format","p":905},{"i":910,"t":"Example","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#example","p":905},{"i":914,"t":"Description","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#description","p":912},{"i":916,"t":"Functionality","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#functionality","p":912},{"i":918,"t":"Format","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#format","p":912},{"i":922,"t":"Description","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#description","p":920},{"i":924,"t":"Format","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#format","p":920},{"i":926,"t":"Supported Model types","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#supported-model-types","p":920},{"i":930,"t":"Description","u":"/ecalc/docs/about/references/keywords/NAME","h":"#description","p":928},{"i":932,"t":"Format","u":"/ecalc/docs/about/references/keywords/NAME","h":"#format","p":928},{"i":934,"t":"Example","u":"/ecalc/docs/about/references/keywords/NAME","h":"#example","p":928},{"i":938,"t":"Description","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#description","p":936},{"i":940,"t":"RATES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#rates","p":936},{"i":942,"t":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#rate_fractions","p":936},{"i":944,"t":"SUCTION_PRESSURES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#suction_pressures","p":936},{"i":946,"t":"DISCHARGE_PRESSURES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#discharge_pressures","p":936},{"i":948,"t":"FLUID_DENSITIES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#fluid_densities","p":936},{"i":950,"t":"CROSSOVER","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#crossover","p":936},{"i":952,"t":"Example 1:","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example-1","p":936},{"i":954,"t":"Example 2:","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example-2","p":936},{"i":956,"t":"Format","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#format","p":936},{"i":957,"t":"Example","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example","p":936},{"i":961,"t":"Description","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#description","p":959},{"i":963,"t":"Format","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#format","p":959},{"i":965,"t":"Example","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#example","p":959},{"i":969,"t":"Description","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#description","p":967},{"i":971,"t":"Format","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#format","p":967},{"i":973,"t":"Example","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#example","p":967},{"i":976,"t":"Description","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#description","p":975},{"i":978,"t":"Format","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#format","p":975},{"i":980,"t":"Example","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#example","p":975},{"i":984,"t":"Description","u":"/ecalc/docs/about/references/keywords/PRICE","h":"#description","p":982},{"i":986,"t":"Format","u":"/ecalc/docs/about/references/keywords/PRICE","h":"#format","p":982},{"i":988,"t":"Example","u":"/ecalc/docs/about/references/keywords/PRICE","h":"#example","p":982},{"i":989,"t":"Fixed price","u":"/ecalc/docs/about/references/keywords/PRICE","h":"#fixed-price","p":982},{"i":991,"t":"Variable price","u":"/ecalc/docs/about/references/keywords/PRICE","h":"#variable-price","p":982},{"i":995,"t":"Description","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#description","p":993},{"i":997,"t":"Format","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#format","p":993},{"i":999,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#example-1","p":993},{"i":1001,"t":"Example 2 (Detailed)","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#example-2-detailed","p":993},{"i":1005,"t":"Description","u":"/ecalc/docs/about/references/keywords/QUOTA","h":"#description","p":1003},{"i":1007,"t":"Format","u":"/ecalc/docs/about/references/keywords/QUOTA","h":"#format","p":1003},{"i":1009,"t":"Example","u":"/ecalc/docs/about/references/keywords/QUOTA","h":"#example","p":1003},{"i":1013,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE","h":"#description","p":1011},{"i":1015,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE","h":"#format","p":1011},{"i":1017,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE","h":"#example","p":1011},{"i":1020,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#description","p":1019},{"i":1022,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#format","p":1019},{"i":1024,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#example","p":1019},{"i":1028,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#description","p":1026},{"i":1030,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#format","p":1026},{"i":1032,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#example","p":1026},{"i":1036,"t":"Description","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#description","p":1034},{"i":1038,"t":"Use in a DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#use-in-a-direct-energy-usage-model","p":1034},{"i":1040,"t":"Reporting","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#reporting","p":1034},{"i":1042,"t":"Format","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#format","p":1034},{"i":1044,"t":"Example","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#example","p":1034},{"i":1045,"t":"Constant regularity","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#constant-regularity","p":1034},{"i":1047,"t":"Regularity from time series data","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#regularity-from-time-series-data","p":1034},{"i":1049,"t":"Special: Combining calendar and stream day rates","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#special-combining-calendar-and-stream-day-rates","p":1034},{"i":1053,"t":"Description","u":"/ecalc/docs/about/references/keywords/START","h":"#description","p":1051},{"i":1055,"t":"Format","u":"/ecalc/docs/about/references/keywords/START","h":"#format","p":1051},{"i":1057,"t":"Example","u":"/ecalc/docs/about/references/keywords/START","h":"#example","p":1051},{"i":1061,"t":"Description","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#description","p":1059},{"i":1063,"t":"Format","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#format","p":1059},{"i":1065,"t":"Use in VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#use-in-variable_speed_compressor_train_multiple_streams_and_pressures","p":1059},{"i":1067,"t":"Format","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#format-1","p":1059},{"i":1069,"t":"Example","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#example","p":1059},{"i":1073,"t":"Description","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#description","p":1071},{"i":1075,"t":"Format","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#format","p":1071},{"i":1077,"t":"Example","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#example","p":1071},{"i":1081,"t":"Description","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#description","p":1079},{"i":1083,"t":"Format","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#format","p":1079},{"i":1085,"t":"Example","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#example","p":1079},{"i":1089,"t":"Description","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#description","p":1087},{"i":1091,"t":"Format","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#format","p":1087},{"i":1093,"t":"Example","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#example","p":1087},{"i":1097,"t":"Description","u":"/ecalc/docs/about/references/keywords/TAX","h":"#description","p":1095},{"i":1099,"t":"Format","u":"/ecalc/docs/about/references/keywords/TAX","h":"#format","p":1095},{"i":1101,"t":"Example","u":"/ecalc/docs/about/references/keywords/TAX","h":"#example","p":1095},{"i":1102,"t":"Fixed tax","u":"/ecalc/docs/about/references/keywords/TAX","h":"#fixed-tax","p":1095},{"i":1104,"t":"Variable tax","u":"/ecalc/docs/about/references/keywords/TAX","h":"#variable-tax","p":1095},{"i":1108,"t":"Description","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#description","p":1106},{"i":1112,"t":"Description","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#description","p":1110},{"i":1114,"t":"Format","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#format","p":1110},{"i":1116,"t":"Example","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#example","p":1110},{"i":1119,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#description","p":1118},{"i":1121,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#format","p":1118},{"i":1123,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#example","p":1118},{"i":1126,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#description","p":1125},{"i":1128,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#format","p":1125},{"i":1130,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#example","p":1125},{"i":1133,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#description","p":1132},{"i":1135,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#format","p":1132},{"i":1137,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#example","p":1132},{"i":1141,"t":"Description","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#description","p":1139},{"i":1143,"t":"Use in FACILITY_INPUTS","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-facility_inputs","p":1139},{"i":1145,"t":"Use in TIME_SERIES","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-time_series","p":1139},{"i":1147,"t":"Use in ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-energy_usage_model","p":1139},{"i":1149,"t":"Use in MODELS","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-models","p":1139},{"i":1151,"t":"Format","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#format","p":1139},{"i":1154,"t":"Description","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#description","p":1153},{"i":1156,"t":"Format","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#format","p":1153},{"i":1157,"t":"Pumps","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#pumps","p":1153},{"i":1159,"t":"Compressors","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#compressors","p":1153},{"i":1161,"t":"Example","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#example","p":1153},{"i":1162,"t":"Pumps","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#pumps-1","p":1153},{"i":1164,"t":"Compressors","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#compressors-1","p":1153},{"i":1168,"t":"Description","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#description","p":1166},{"i":1170,"t":"Format","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#format","p":1166},{"i":1172,"t":"Example","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#example","p":1166},{"i":1176,"t":"Description","u":"/ecalc/docs/about/references/keywords/VARIABLES","h":"#description","p":1174},{"i":1179,"t":"New Features","u":"/ecalc/docs/changelog/latest","h":"#new-features","p":1178},{"i":1180,"t":"Fixes","u":"/ecalc/docs/changelog/latest","h":"#fixes","p":1178},{"i":1181,"t":"Breaking changes","u":"/ecalc/docs/changelog/latest","h":"#breaking-changes","p":1178},{"i":1184,"t":"Features","u":"/ecalc/docs/changelog/v7-0-release","h":"#features","p":1183},{"i":1186,"t":"Fixes","u":"/ecalc/docs/changelog/v7-0-release","h":"#fixes","p":1183},{"i":1188,"t":"CLI","u":"/ecalc/docs/changelog/v7-0-release","h":"#cli","p":1183},{"i":1191,"t":"8.5.0 (2023-10-30)","u":"/ecalc/docs/changelog/","h":"#850-2023-10-30","p":1190},{"i":1192,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features","p":1190},{"i":1194,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes","p":1190},{"i":1196,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation","p":1190},{"i":1198,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores","p":1190},{"i":1200,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring","p":1190},{"i":1202,"t":"8.4.0 (2023-09-25)","u":"/ecalc/docs/changelog/","h":"#840-2023-09-25","p":1190},{"i":1203,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-1","p":1190},{"i":1205,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-1","p":1190},{"i":1207,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-1","p":1190},{"i":1209,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-1","p":1190},{"i":1211,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-1","p":1190},{"i":1213,"t":"8.3.0 (2023-08-11)","u":"/ecalc/docs/changelog/","h":"#830-2023-08-11","p":1190},{"i":1214,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes","p":1190},{"i":1216,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-2","p":1190},{"i":1218,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-2","p":1190},{"i":1220,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-2","p":1190},{"i":1222,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-2","p":1190},{"i":1224,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-2","p":1190},{"i":1226,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests","p":1190},{"i":1228,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration","p":1190},{"i":1230,"t":"8.2.2 (2023-05-28)","u":"/ecalc/docs/changelog/","h":"#822-2023-05-28","p":1190},{"i":1231,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-3","p":1190},{"i":1233,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-1","p":1190},{"i":1235,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-1","p":1190},{"i":1237,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-3","p":1190},{"i":1239,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-3","p":1190},{"i":1241,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-3","p":1190},{"i":1243,"t":"8.2.1 (2023-05-09)","u":"/ecalc/docs/changelog/","h":"#821-2023-05-09","p":1190},{"i":1244,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-4","p":1190},{"i":1246,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-2","p":1190},{"i":1249,"t":"Features","u":"/ecalc/docs/changelog/v7-1-release","h":"#features","p":1248},{"i":1251,"t":"CLI","u":"/ecalc/docs/changelog/v7-1-release","h":"#cli","p":1248},{"i":1254,"t":"Features","u":"/ecalc/docs/changelog/v7-2-release","h":"#features","p":1253},{"i":1256,"t":"Fixes","u":"/ecalc/docs/changelog/v7-2-release","h":"#fixes","p":1253},{"i":1259,"t":"Features","u":"/ecalc/docs/changelog/v7-3-release","h":"#features","p":1258},{"i":1261,"t":"Fixes","u":"/ecalc/docs/changelog/v7-3-release","h":"#fixes","p":1258},{"i":1264,"t":"Features","u":"/ecalc/docs/changelog/v7-5-release","h":"#features","p":1263},{"i":1266,"t":"Fixes","u":"/ecalc/docs/changelog/v7-5-release","h":"#fixes","p":1263},{"i":1268,"t":"CLI","u":"/ecalc/docs/changelog/v7-5-release","h":"#cli","p":1263},{"i":1271,"t":"Features","u":"/ecalc/docs/changelog/v7-4-release","h":"#features","p":1270},{"i":1273,"t":"Fixes","u":"/ecalc/docs/changelog/v7-4-release","h":"#fixes","p":1270},{"i":1276,"t":"Breaking changes","u":"/ecalc/docs/changelog/v7-6-release","h":"#breaking-changes","p":1275},{"i":1280,"t":"New features","u":"/ecalc/docs/changelog/v8.0-release","h":"#new-features","p":1278},{"i":1282,"t":"Experimental features","u":"/ecalc/docs/changelog/v8.0-release","h":"#experimental-features","p":1278},{"i":1284,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.0-release","h":"#breaking-changes","p":1278},{"i":1286,"t":"YAML","u":"/ecalc/docs/changelog/v8.0-release","h":"#yaml","p":1278},{"i":1288,"t":"CLI","u":"/ecalc/docs/changelog/v8.0-release","h":"#cli","p":1278},{"i":1292,"t":"New features","u":"/ecalc/docs/changelog/v8.1-release","h":"#new-features","p":1290},{"i":1294,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.1-release","h":"#breaking-changes","p":1290},{"i":1296,"t":"Input: YAML / Resource files","u":"/ecalc/docs/changelog/v8.1-release","h":"#input-yaml--resource-files","p":1290},{"i":1298,"t":"Output: LTP","u":"/ecalc/docs/changelog/v8.1-release","h":"#output-ltp","p":1290},{"i":1302,"t":"New features","u":"/ecalc/docs/changelog/v8.2-release","h":"#new-features","p":1300},{"i":1304,"t":"Fixes","u":"/ecalc/docs/changelog/v8.2-release","h":"#fixes","p":1300},{"i":1308,"t":"New Features","u":"/ecalc/docs/changelog/v8.3-release","h":"#new-features","p":1306},{"i":1310,"t":"Fixes","u":"/ecalc/docs/changelog/v8.3-release","h":"#fixes","p":1306},{"i":1312,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.3-release","h":"#breaking-changes","p":1306},{"i":1314,"t":"Input: YAML / Resource files","u":"/ecalc/docs/changelog/v8.3-release","h":"#input-yaml--resource-files","p":1306},{"i":1317,"t":"New Features","u":"/ecalc/docs/changelog/v8.4-release","h":"#new-features","p":1316},{"i":1319,"t":"Fixes","u":"/ecalc/docs/changelog/v8.4-release","h":"#fixes","p":1316},{"i":1321,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.4-release","h":"#breaking-changes","p":1316},{"i":1323,"t":"New Features","u":"/ecalc/docs/changelog/v8.5-release","h":"#new-features","p":1322},{"i":1325,"t":"Fixes","u":"/ecalc/docs/changelog/v8.5-release","h":"#fixes","p":1322},{"i":1327,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.5-release","h":"#breaking-changes","p":1322},{"i":1331,"t":"Prerequisites","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#prerequisites","p":1329},{"i":1333,"t":"Contributing","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#contributing","p":1329},{"i":1335,"t":"How it works","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#how-it-works","p":1329},{"i":1337,"t":"Special features","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#special-features","p":1329},{"i":1341,"t":"Standard Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"#standard-markdown","p":1339},{"i":1343,"t":"Markdown summary","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"","p":1339},{"i":1347,"t":"Prerequisites","u":"/ecalc/docs/contribute/get-started","h":"#prerequisites","p":1345},{"i":1349,"t":"How to contribute","u":"/ecalc/docs/contribute/get-started","h":"#how-to-contribute","p":1345},{"i":1351,"t":"Initiate change","u":"/ecalc/docs/contribute/get-started","h":"#initiate-change","p":1345},{"i":1353,"t":"Make a Pull Request","u":"/ecalc/docs/contribute/get-started","h":"#make-a-pull-request","p":1345},{"i":1355,"t":"Get code review","u":"/ecalc/docs/contribute/get-started","h":"#get-code-review","p":1345},{"i":1357,"t":"Guidelines","u":"/ecalc/docs/contribute/get-started","h":"#guidelines","p":1345},{"i":1359,"t":"Pull Requests","u":"/ecalc/docs/contribute/get-started","h":"#pull-requests","p":1345},{"i":1361,"t":"Git commit format","u":"/ecalc/docs/contribute/get-started","h":"#git-commit-format","p":1345},{"i":1363,"t":"Readability","u":"/ecalc/docs/contribute/get-started","h":"#readability","p":1345},{"i":1365,"t":"Code style","u":"/ecalc/docs/contribute/get-started","h":"#code-style","p":1345},{"i":1371,"t":"Setting up Git","u":"/ecalc/docs/contribute/guides/git","h":"#setting-up-git","p":1369},{"i":1373,"t":"Using Git","u":"/ecalc/docs/contribute/guides/git","h":"#using-git","p":1369},{"i":1375,"t":"Cloning a git repository","u":"/ecalc/docs/contribute/guides/git","h":"#cloning-a-git-repository","p":1369},{"i":1377,"t":"Tell Git who you are","u":"/ecalc/docs/contribute/guides/git","h":"#tell-git-who-you-are","p":1369},{"i":1379,"t":"Create your own branch","u":"/ecalc/docs/contribute/guides/git","h":"#create-your-own-branch","p":1369},{"i":1381,"t":"Switch between existing branches","u":"/ecalc/docs/contribute/guides/git","h":"#switch-between-existing-branches","p":1369},{"i":1383,"t":"Fetch changes from GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#fetch-changes-from-github","p":1369},{"i":1385,"t":"Send your changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-your-changes-to-github","p":1369},{"i":1387,"t":"Check status of changes","u":"/ecalc/docs/contribute/guides/git","h":"#check-status-of-changes","p":1369},{"i":1389,"t":"Add files","u":"/ecalc/docs/contribute/guides/git","h":"#add-files","p":1369},{"i":1391,"t":"Commit changes","u":"/ecalc/docs/contribute/guides/git","h":"#commit-changes","p":1369},{"i":1393,"t":"Send changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-changes-to-github","p":1369},{"i":1395,"t":"Workflow examples","u":"/ecalc/docs/contribute/guides/git","h":"#workflow-examples","p":1369},{"i":1396,"t":"Pull Requests","u":"/ecalc/docs/contribute/guides/git","h":"#pull-requests","p":1369},{"i":1398,"t":"Fork the repository","u":"/ecalc/docs/contribute/guides/git","h":"#fork-the-repository","p":1369},{"i":1402,"t":"Description","u":"/ecalc/docs/about/references/keywords/INSTALLATIONS","h":"#description","p":1400}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,4.467]],["t/5",[0,3.478,1,3.152]],["t/7",[0,3.478,1,3.152]],["t/11",[2,4.819,3,5.618]],["t/12",[0,3.478,4,4.235]],["t/14",[5,5.618,6,5.618]],["t/18",[7,1.546,8,4.1]],["t/22",[9,5.618,10,4.819]],["t/24",[10,2.556,11,2.725,12,2.725,13,1.845,14,2.98,15,2.98]],["t/26",[0,1.845,10,2.556,11,2.725,12,2.725,16,2.98,17,2.98]],["t/28",[18,5.136,19,5.136]],["t/30",[20,3.946,21,4.6,22,4.6]],["t/32",[18,5.136,19,5.136]],["t/41",[13,3.478,23,4.393]],["t/42",[23,4.393,24,4.393]],["t/44",[25,5.618,26,4.819]],["t/46",[4,4.235,23,4.393]],["t/50",[13,3.478,23,4.393]],["t/51",[23,4.393,24,4.393]],["t/53",[27,3.357,28,2.748,29,3.597]],["t/55",[26,1.891,30,1.661,31,2.204,32,2.204,33,1.609,34,2.204,35,2.204,36,2.015,37,1.484]],["t/57",[38,2.207,39,2.414,40,1.887,41,1.761,42,1.968,43,2.414,44,2.414,45,2.414]],["t/59",[46,2.667,47,1.89,48,2.288,49,2.667,50,2.667,51,2.288,52,2.011]],["t/63",[53,3.736]],["t/64",[13,4.467]],["t/66",[54,6.596]],["t/67",[1,1.672,27,2.175,55,2.725,56,2.556,57,2.98,58,2.98]],["t/69",[28,1.593,59,2.667,60,3.615,61,2.667,62,2.667,63,2.667]],["t/71",[37,3.097,48,3.946,64,4.206]],["t/73",[37,3.097,64,4.206,65,4.6]],["t/75",[66,3.946,67,4.206,68,4.6]],["t/77",[69,7.215]],["t/78",[70,7.215]],["t/86",[0,2.411,71,3.895,72,3.895,73,3.895]],["t/88",[74,5.618,75,4.235]],["t/96",[13,2.848,24,3.597,53,2.382]],["t/98",[29,5.641]],["t/100",[76,5.884]],["t/102",[77,6.189]],["t/104",[53,3.736]],["t/106",[78,4.747]],["t/108",[79,5.641]],["t/110",[79,5.641]],["t/112",[79,4.393,80,5.618]],["t/114",[81,5.884]],["t/116",[0,2.411,13,2.411,53,2.017,82,3.045]],["t/118",[37,3.783,83,3.877]],["t/122",[13,2.848,24,3.597,53,2.382]],["t/124",[29,5.641]],["t/126",[76,5.884]],["t/128",[77,6.189]],["t/130",[78,4.747]],["t/132",[79,5.641]],["t/134",[84,6.596]],["t/136",[85,7.215]],["t/138",[81,5.884]],["t/140",[0,2.411,13,2.411,53,2.017,82,3.045]],["t/142",[37,3.783,83,3.877]],["t/146",[13,2.848,24,3.597,53,2.382]],["t/148",[29,5.641]],["t/150",[76,5.884]],["t/152",[53,3.736]],["t/154",[77,6.189]],["t/156",[79,5.641]],["t/158",[84,6.596]],["t/160",[53,2.909,82,4.393]],["t/162",[40,4.393,83,3.877]],["t/163",[86,4.819,87,4.582]],["t/165",[87,4.582,88,5.618]],["t/171",[89,2.074]],["t/173",[33,4.1,90,4.393]],["t/177",[91,6.596]],["t/179",[83,3.175,86,3.946,89,1.322]],["t/181",[7,1.546,92,5.136]],["t/183",[93,3.597,94,3.597,95,3.175]],["t/186",[96,7.215]],["t/190",[97,7.215]],["t/192",[93,4.393,95,3.877]],["t/194",[89,2.074]],["t/196",[98,7.215]],["t/197",[99,2.346]],["t/199",[93,4.393,95,3.877]],["t/201",[89,2.074]],["t/203",[7,1.985]],["t/207",[93,3.597,94,3.597,95,3.175]],["t/209",[7,1.985]],["t/213",[89,2.074]],["t/215",[37,2.007,93,2.33,95,2.057,100,2.98,101,1.672,102,2.98]],["t/217",[94,5.641]],["t/219",[7,1.546,92,5.136]],["t/220",[7,1.546,103,5.618]],["t/222",[7,1.546,104,5.618]],["t/226",[37,3.097,105,4.6,106,4.6]],["t/228",[7,1.985]],["t/229",[7,1.265,13,2.848,89,1.322]],["t/231",[7,1.546,82,4.393]],["t/235",[55,5.136,107,5.618]],["t/237",[7,1.985]],["t/238",[26,2.896,40,2.64,83,2.33,108,2.896,109,3.377]],["t/240",[53,2.382,60,3.752,110,4.6]],["t/244",[89,2.074]],["t/246",[7,1.985]],["t/250",[41,3.357,42,3.752,111,4.206]],["t/252",[41,2.842,53,2.017,112,3.561,113,3.895]],["t/254",[89,2.074]],["t/256",[7,1.985]],["t/257",[52,4.235,67,5.136]],["t/259",[41,3.357,42,3.752,111,4.206]],["t/261",[41,4.1,112,5.136]],["t/267",[89,2.074]],["t/269",[7,1.985]],["t/273",[89,2.074]],["t/275",[7,1.985]],["t/279",[89,2.074]],["t/285",[89,2.074]],["t/287",[91,5.136,114,5.136]],["t/288",[99,2.346]],["t/290",[89,2.074]],["t/292",[115,5.618,116,5.618]],["t/293",[99,2.346]],["t/295",[7,1.985]],["t/297",[117,5.618,118,5.136]],["t/298",[99,2.346]],["t/300",[7,1.071,52,2.936,56,3.341,118,3.561]],["t/304",[8,2.842,53,2.017,119,3.045,120,3.176]],["t/306",[89,2.074]],["t/308",[7,1.985]],["t/310",[94,5.641]],["t/312",[8,2.842,53,2.017,120,3.176,121,3.895]],["t/314",[89,2.074]],["t/316",[7,1.985]],["t/318",[94,5.641]],["t/322",[89,2.074]],["t/324",[7,1.985]],["t/326",[33,3.357,83,3.175,122,4.6]],["t/330",[89,2.074]],["t/332",[33,4.1,90,4.393]],["t/338",[101,1.672,123,2.431,124,2.431,125,2.556,126,2.247,127,2.112]],["t/340",[89,2.074]],["t/342",[7,1.985]],["t/344",[78,1.961,101,1.672,123,2.431,124,2.431,126,2.247,127,2.112]],["t/346",[89,2.074]],["t/348",[7,1.985]],["t/350",[52,2.247,101,1.672,127,2.112,128,2.431,129,2.556,130,2.556]],["t/352",[89,2.074]],["t/354",[7,1.985]],["t/356",[7,1.985]],["t/358",[40,1.887,52,1.819,83,1.666,101,1.354,127,1.711,129,2.07,130,2.07,131,2.414]],["t/360",[89,2.074]],["t/362",[7,1.985]],["t/364",[75,2.011,78,1.755,101,1.496,126,2.011,127,1.89,132,2.667,133,2.667]],["t/366",[89,2.074]],["t/372",[89,2.074]],["t/374",[53,1.381,101,2.486,134,2.288,135,1.946,136,2.667,137,2.175]],["t/376",[53,1.25,101,2.287,134,2.07,135,1.761,137,1.968,138,2.07,139,2.207]],["t/378",[7,1.985]],["t/379",[78,1.334,101,1.97,123,1.654,124,1.654,125,1.74,126,1.529,127,1.437,140,1.74,141,1.654]],["t/381",[51,1.611,52,1.416,101,1.843,125,1.611,127,1.331,128,1.532,129,1.611,130,1.611,141,1.532,142,1.878]],["t/383",[101,1.053,127,1.331,128,1.532,135,1.371,137,2.679,138,1.611,143,1.878,144,1.878,145,1.878,146,1.878]],["t/385",[101,1.894,135,2.464,137,2.754,138,2.896,139,3.087]],["t/389",[89,2.074]],["t/395",[89,2.074]],["t/397",[8,4.1,147,5.136]],["t/399",[148,7.215]],["t/401",[75,3.468,149,2.703,150,3.752]],["t/403",[7,1.985]],["t/406",[151,7.215]],["t/408",[0,2.848,53,2.382,75,3.468]],["t/410",[2,2.896,75,2.545,150,2.754,152,3.377,153,3.087]],["t/412",[2,2.896,75,2.545,150,2.754,153,3.087,154,3.377]],["t/416",[1,1.894,53,1.749,128,2.754,140,2.896,141,2.754]],["t/418",[89,2.074]],["t/420",[7,1.985]],["t/422",[53,1.749,123,2.754,140,2.896,141,2.754,155,3.377]],["t/424",[89,2.074]],["t/426",[7,1.985]],["t/430",[89,2.074]],["t/432",[7,1.985]],["t/434",[36,2.725,51,2.556,53,1.543,101,1.672,108,2.556,135,2.175]],["t/436",[89,2.074]],["t/438",[7,1.985]],["t/442",[33,4.1,90,4.393]],["t/444",[89,2.074]],["t/446",[95,4.979]],["t/448",[7,1.985]],["t/452",[78,3.697,124,4.582]],["t/454",[89,2.074]],["t/456",[7,1.985]],["t/458",[1,3.152,78,3.697]],["t/460",[7,1.985]],["t/467",[134,3.341,156,3.895,157,3.895,158,3.895]],["t/469",[159,6.189]],["t/471",[159,4.819,160,5.618]],["t/472",[95,3.175,161,4.6,162,4.6]],["t/474",[86,4.819,163,5.136]],["t/476",[163,5.136,164,5.618]],["t/478",[165,7.215]],["t/480",[166,7.215]],["t/487",[0,3.478,167,5.618]],["t/489",[0,3.478,168,5.618]],["t/491",[0,3.478,169,4.819]],["t/493",[0,2.848,54,4.206,169,3.946]],["t/495",[0,2.848,13,2.848,169,3.946]],["t/503",[147,4.206,170,4.6,171,4.6]],["t/507",[99,2.346]],["t/509",[89,2.074]],["t/511",[7,1.985]],["t/515",[99,2.346]],["t/517",[89,2.074]],["t/519",[7,1.985]],["t/523",[99,2.346]],["t/525",[89,2.074]],["t/527",[7,1.985]],["t/531",[99,2.346]],["t/533",[89,2.074]],["t/535",[7,1.985]],["t/539",[99,2.346]],["t/541",[89,2.074]],["t/543",[7,1.546,27,4.1]],["t/545",[7,1.265,30,3.468,172,4.206]],["t/549",[99,2.346]],["t/551",[89,2.074]],["t/553",[7,1.985]],["t/557",[99,2.346]],["t/559",[89,2.074]],["t/563",[99,2.346]],["t/565",[89,2.074]],["t/567",[7,1.985]],["t/571",[99,2.346]],["t/573",[89,2.074]],["t/575",[7,1.985]],["t/579",[99,2.346]],["t/581",[89,2.074]],["t/583",[7,1.985]],["t/587",[99,2.346]],["t/589",[1,1.672,53,1.543,78,1.961,101,1.672,126,2.247,135,2.175]],["t/590",[89,2.074]],["t/592",[7,1.985]],["t/594",[1,1.236,53,1.141,78,1.45,101,1.236,126,1.661,135,1.609,150,1.798,173,2.204,174,2.015]],["t/595",[89,2.074]],["t/597",[7,1.985]],["t/601",[99,2.346]],["t/603",[89,2.074]],["t/605",[7,1.985]],["t/609",[99,2.346]],["t/611",[7,1.985]],["t/614",[99,2.346]],["t/616",[89,2.074]],["t/618",[7,1.985]],["t/621",[99,2.346]],["t/623",[89,2.074]],["t/625",[7,1.985]],["t/629",[99,2.346]],["t/631",[89,2.074]],["t/633",[7,1.985]],["t/637",[99,2.346]],["t/639",[89,2.074]],["t/641",[7,1.985]],["t/645",[99,2.346]],["t/647",[89,2.074]],["t/649",[7,1.985]],["t/652",[99,2.346]],["t/654",[89,2.074]],["t/655",[101,4.047]],["t/657",[119,5.641]],["t/659",[7,1.985]],["t/663",[99,2.346]],["t/665",[89,2.074]],["t/667",[7,1.985]],["t/668",[7,1.546,27,4.1]],["t/670",[7,1.546,30,4.235]],["t/674",[99,2.346]],["t/676",[89,2.074]],["t/678",[7,1.985]],["t/682",[99,2.346]],["t/684",[89,2.074]],["t/686",[7,1.985]],["t/690",[99,2.346]],["t/692",[89,2.074]],["t/694",[7,1.985]],["t/698",[99,2.346]],["t/700",[89,2.074]],["t/702",[7,1.985]],["t/706",[99,2.346]],["t/708",[89,2.074]],["t/710",[7,1.985]],["t/714",[99,2.346]],["t/716",[8,2.842,53,2.017,120,3.176,175,3.895]],["t/720",[99,2.346]],["t/722",[89,2.074]],["t/724",[7,1.985]],["t/728",[99,2.346]],["t/730",[89,2.074]],["t/732",[7,1.985]],["t/736",[99,2.346]],["t/738",[89,2.074]],["t/740",[95,4.979]],["t/742",[7,1.985]],["t/746",[99,2.346]],["t/748",[33,4.1,90,4.393]],["t/752",[99,2.346]],["t/754",[1,3.152,176,5.136]],["t/756",[1,3.152,66,4.819]],["t/758",[89,2.074]],["t/760",[7,1.985]],["t/761",[1,3.152,176,5.136]],["t/763",[1,3.152,66,4.819]],["t/767",[99,2.346]],["t/769",[89,2.074]],["t/771",[7,1.985]],["t/775",[99,2.346]],["t/777",[89,2.074]],["t/779",[7,1.985]],["t/782",[99,2.346]],["t/784",[89,2.074]],["t/786",[7,1.985]],["t/790",[99,2.346]],["t/792",[89,2.074]],["t/794",[7,1.985]],["t/798",[99,2.346]],["t/802",[99,2.346]],["t/804",[89,2.074]],["t/806",[7,1.985]],["t/810",[99,2.346]],["t/812",[89,2.074]],["t/814",[7,1.985]],["t/818",[99,2.346]],["t/822",[99,2.346]],["t/824",[89,2.074]],["t/826",[7,1.985]],["t/827",[8,4.1,177,5.618]],["t/829",[41,4.1,178,5.618]],["t/831",[7,1.546,82,4.393]],["t/834",[99,2.346]],["t/836",[89,2.074]],["t/837",[101,4.047]],["t/839",[119,5.641]],["t/841",[7,1.985]],["t/842",[101,4.047]],["t/846",[99,2.346]],["t/848",[89,2.074]],["t/850",[7,1.985]],["t/853",[99,2.346]],["t/855",[89,2.074]],["t/857",[7,0.82,27,2.175,179,2.556,180,2.725,181,2.725,182,2.98]],["t/859",[7,0.82,30,2.247,179,2.556,180,2.725,183,2.725,184,2.725]],["t/861",[7,0.82,38,2.725,179,2.556,181,2.725,183,2.725,184,2.725]],["t/865",[99,2.346]],["t/867",[89,2.074]],["t/869",[7,1.985]],["t/873",[99,2.346]],["t/875",[89,2.074]],["t/877",[7,1.985]],["t/881",[99,2.346]],["t/883",[89,2.074]],["t/885",[95,4.979]],["t/887",[7,1.985]],["t/891",[99,2.346]],["t/893",[1,3.152,53,2.909]],["t/895",[1,3.152,81,4.582]],["t/899",[99,2.346]],["t/901",[89,2.074]],["t/903",[7,1.985]],["t/906",[99,2.346]],["t/908",[89,2.074]],["t/910",[7,1.985]],["t/914",[99,2.346]],["t/916",[114,6.596]],["t/918",[89,2.074]],["t/922",[99,2.346]],["t/924",[89,2.074]],["t/926",[33,3.357,53,2.382,90,3.597]],["t/930",[99,2.346]],["t/932",[89,2.074]],["t/934",[7,1.985]],["t/938",[99,2.346]],["t/940",[60,5.884]],["t/942",[185,7.215]],["t/944",[186,7.215]],["t/946",[187,7.215]],["t/948",[188,7.215]],["t/950",[189,7.215]],["t/952",[7,1.546,27,4.1]],["t/954",[7,1.546,30,4.235]],["t/956",[89,2.074]],["t/957",[7,1.985]],["t/961",[99,2.346]],["t/963",[89,2.074]],["t/965",[7,1.985]],["t/969",[99,2.346]],["t/971",[89,2.074]],["t/973",[7,1.985]],["t/976",[99,2.346]],["t/978",[89,2.074]],["t/980",[7,1.985]],["t/984",[99,2.346]],["t/986",[89,2.074]],["t/988",[7,1.985]],["t/989",[149,3.301,190,5.136]],["t/991",[78,3.697,190,5.136]],["t/995",[99,2.346]],["t/997",[89,2.074]],["t/999",[7,1.546,27,4.1]],["t/1001",[7,1.265,30,3.468,172,4.206]],["t/1005",[99,2.346]],["t/1007",[89,2.074]],["t/1009",[7,1.985]],["t/1013",[99,2.346]],["t/1015",[89,2.074]],["t/1017",[7,1.985]],["t/1020",[99,2.346]],["t/1022",[89,2.074]],["t/1024",[7,1.985]],["t/1028",[99,2.346]],["t/1030",[89,2.074]],["t/1032",[7,1.985]],["t/1036",[99,2.346]],["t/1038",[1,1.894,8,2.464,53,1.749,120,2.754,191,3.377]],["t/1040",[192,7.215]],["t/1042",[89,2.074]],["t/1044",[7,1.985]],["t/1045",[193,5.618,194,5.136]],["t/1047",[40,3.045,41,2.842,42,3.176,194,3.561]],["t/1049",[20,2.556,60,2.431,108,2.556,174,2.725,195,2.98,196,2.98]],["t/1053",[99,2.346]],["t/1055",[89,2.074]],["t/1057",[7,1.985]],["t/1061",[99,2.346]],["t/1063",[89,2.074]],["t/1065",[1,3.152,197,5.618]],["t/1067",[89,2.074]],["t/1069",[7,1.985]],["t/1073",[99,2.346]],["t/1075",[89,2.074]],["t/1077",[7,1.985]],["t/1081",[99,2.346]],["t/1083",[89,2.074]],["t/1085",[7,1.985]],["t/1089",[99,2.346]],["t/1091",[89,2.074]],["t/1093",[7,1.985]],["t/1097",[99,2.346]],["t/1099",[89,2.074]],["t/1101",[7,1.985]],["t/1102",[149,3.301,198,5.136]],["t/1104",[78,3.697,198,5.136]],["t/1108",[99,2.346]],["t/1112",[99,2.346]],["t/1114",[89,2.074]],["t/1116",[7,1.985]],["t/1119",[99,2.346]],["t/1121",[89,2.074]],["t/1123",[7,1.985]],["t/1126",[99,2.346]],["t/1128",[89,2.074]],["t/1130",[7,1.985]],["t/1133",[99,2.346]],["t/1135",[89,2.074]],["t/1137",[7,1.985]],["t/1141",[99,2.346]],["t/1143",[1,3.152,76,4.582]],["t/1145",[1,3.152,29,4.393]],["t/1147",[1,3.152,81,4.582]],["t/1149",[1,3.152,53,2.909]],["t/1151",[89,2.074]],["t/1154",[99,2.346]],["t/1156",[89,2.074]],["t/1157",[119,5.641]],["t/1159",[101,4.047]],["t/1161",[7,1.985]],["t/1162",[119,5.641]],["t/1164",[101,4.047]],["t/1168",[99,2.346]],["t/1170",[89,2.074]],["t/1172",[7,1.985]],["t/1176",[99,2.346]],["t/1179",[47,3.982,199,3.248]],["t/1180",[149,4.239]],["t/1181",[28,3.356,200,3.982]],["t/1184",[199,4.172]],["t/1186",[149,4.239]],["t/1188",[4,5.439]],["t/1191",[201,3.895,202,3.045,203,3.895,204,3.895]],["t/1192",[199,4.172]],["t/1194",[149,3.301,205,4.582]],["t/1196",[206,5.884]],["t/1198",[207,4.393,208,4.393]],["t/1200",[209,4.235,210,4.582]],["t/1202",[202,3.045,211,3.895,212,3.561,213,3.895]],["t/1203",[199,4.172]],["t/1205",[149,3.301,205,4.582]],["t/1207",[206,5.884]],["t/1209",[207,4.393,208,4.393]],["t/1211",[209,4.235,210,4.582]],["t/1213",[202,3.045,214,3.895,215,3.895,216,3.895]],["t/1214",[28,2.748,200,3.261,217,3.946]],["t/1216",[199,4.172]],["t/1218",[149,3.301,205,4.582]],["t/1220",[206,5.884]],["t/1222",[207,4.393,208,4.393]],["t/1224",[209,4.235,210,4.582]],["t/1226",[218,6.596]],["t/1228",[219,4.819,220,4.819]],["t/1230",[202,3.045,221,3.895,222,3.561,223,3.895]],["t/1231",[149,3.301,205,4.582]],["t/1233",[219,4.819,220,4.819]],["t/1235",[218,6.596]],["t/1237",[209,4.235,210,4.582]],["t/1239",[206,5.884]],["t/1241",[207,4.393,208,4.393]],["t/1243",[202,3.045,212,3.561,222,3.561,224,3.895]],["t/1244",[207,4.393,208,4.393]],["t/1246",[219,4.819,220,4.819]],["t/1249",[199,4.172]],["t/1251",[4,5.439]],["t/1254",[199,4.172]],["t/1256",[149,4.239]],["t/1259",[199,4.172]],["t/1261",[149,4.239]],["t/1264",[199,4.172]],["t/1266",[149,4.239]],["t/1268",[4,5.439]],["t/1271",[199,4.172]],["t/1273",[149,4.239]],["t/1276",[28,3.356,200,3.982]],["t/1280",[47,3.982,199,3.248]],["t/1282",[199,3.248,225,5.618]],["t/1284",[28,3.356,200,3.982]],["t/1286",[13,4.467]],["t/1288",[4,5.439]],["t/1292",[47,3.982,199,3.248]],["t/1294",[28,3.356,200,3.982]],["t/1296",[13,2.09,37,2.273,83,2.33,87,2.754,217,2.896]],["t/1298",[48,4.819,226,5.618]],["t/1302",[47,3.982,199,3.248]],["t/1304",[149,4.239]],["t/1308",[47,3.982,199,3.248]],["t/1310",[149,4.239]],["t/1312",[28,3.356,200,3.982]],["t/1314",[13,2.09,37,2.273,83,2.33,87,2.754,217,2.896]],["t/1317",[47,3.982,199,3.248]],["t/1319",[149,4.239]],["t/1321",[28,3.356,200,3.982]],["t/1323",[47,3.982,199,3.248]],["t/1325",[149,4.239]],["t/1327",[28,3.356,200,3.982]],["t/1331",[227,6.596]],["t/1333",[228,6.596]],["t/1335",[229,7.215]],["t/1337",[20,4.819,199,3.248]],["t/1341",[230,5.618,231,5.136]],["t/1343",[231,5.136,232,5.618]],["t/1347",[227,6.596]],["t/1349",[228,6.596]],["t/1351",[28,3.356,233,5.618]],["t/1353",[234,4.6,235,3.946,236,3.946]],["t/1355",[209,4.235,237,5.618]],["t/1357",[238,7.215]],["t/1359",[235,4.819,236,4.819]],["t/1361",[89,1.322,239,3.597,240,4.206]],["t/1363",[241,7.215]],["t/1365",[209,4.235,242,5.618]],["t/1371",[56,3.946,239,3.597,243,4.6]],["t/1373",[1,3.152,239,4.393]],["t/1375",[239,3.597,244,4.6,245,4.206]],["t/1377",[239,4.393,246,5.618]],["t/1379",[247,5.618,248,5.136]],["t/1381",[248,3.561,249,3.895,250,3.895,251,3.895]],["t/1383",[28,2.748,252,4.6,253,3.946]],["t/1385",[28,2.748,253,3.946,254,4.206]],["t/1387",[28,2.748,255,4.6,256,4.6]],["t/1389",[37,3.783,257,5.618]],["t/1391",[28,3.356,240,5.136]],["t/1393",[28,2.748,253,3.946,254,4.206]],["t/1395",[7,1.546,159,4.819]],["t/1396",[235,4.819,236,4.819]],["t/1398",[245,5.136,258,5.618]],["t/1402",[99,2.346]]],"invertedIndex":[["",{"_index":217,"t":{"1214":{"position":[[0,1]]},"1296":{"position":[[12,1]]},"1314":{"position":[[12,1]]}}}],["05",{"_index":222,"t":{"1230":{"position":[[12,2]]},"1243":{"position":[[12,2]]}}}],["08",{"_index":215,"t":{"1213":{"position":[[12,2]]}}}],["09",{"_index":212,"t":{"1202":{"position":[[12,2]]},"1243":{"position":[[15,3]]}}}],["1",{"_index":27,"t":{"53":{"position":[[0,2]]},"67":{"position":[[33,1]]},"543":{"position":[[8,1]]},"668":{"position":[[8,1]]},"857":{"position":[[8,1]]},"952":{"position":[[8,2]]},"999":{"position":[[8,1]]}}}],["10",{"_index":203,"t":{"1191":{"position":[[12,2]]}}}],["11",{"_index":216,"t":{"1213":{"position":[[15,3]]}}}],["1d",{"_index":103,"t":{"220":{"position":[[0,2]]}}}],["2",{"_index":30,"t":{"55":{"position":[[0,2]]},"545":{"position":[[8,1]]},"670":{"position":[[8,1]]},"859":{"position":[[8,1]]},"954":{"position":[[8,2]]},"1001":{"position":[[8,1]]}}}],["2023",{"_index":202,"t":{"1191":{"position":[[6,5]]},"1202":{"position":[[6,5]]},"1213":{"position":[[6,5]]},"1230":{"position":[[6,5]]},"1243":{"position":[[6,5]]}}}],["25",{"_index":213,"t":{"1202":{"position":[[15,3]]}}}],["28",{"_index":223,"t":{"1230":{"position":[[15,3]]}}}],["3",{"_index":38,"t":{"57":{"position":[[0,2]]},"861":{"position":[[8,1]]}}}],["30",{"_index":204,"t":{"1191":{"position":[[15,3]]}}}],["3d",{"_index":104,"t":{"222":{"position":[[0,2]]}}}],["4",{"_index":46,"t":{"59":{"position":[[0,2]]}}}],["8.2.1",{"_index":224,"t":{"1243":{"position":[[0,5]]}}}],["8.2.2",{"_index":221,"t":{"1230":{"position":[[0,5]]}}}],["8.3.0",{"_index":214,"t":{"1213":{"position":[[0,5]]}}}],["8.4.0",{"_index":211,"t":{"1202":{"position":[[0,5]]}}}],["8.5.0",{"_index":201,"t":{"1191":{"position":[[0,5]]}}}],["add",{"_index":257,"t":{"1389":{"position":[[0,3]]}}}],["addit",{"_index":110,"t":{"240":{"position":[[9,10]]}}}],["adjust",{"_index":176,"t":{"754":{"position":[[7,10]]},"761":{"position":[[7,10]]}}}],["allow",{"_index":45,"t":{"57":{"position":[[47,7]]}}}],["attent",{"_index":96,"t":{"186":{"position":[[0,9]]}}}],["avail",{"_index":107,"t":{"235":{"position":[[0,9]]}}}],["averag",{"_index":63,"t":{"69":{"position":[[52,7]]}}}],["b",{"_index":80,"t":{"112":{"position":[[13,1]]}}}],["base",{"_index":58,"t":{"67":{"position":[[35,5]]}}}],["basic",{"_index":177,"t":{"827":{"position":[[0,5]]}}}],["behaviour",{"_index":69,"t":{"77":{"position":[[0,9]]}}}],["between",{"_index":250,"t":{"1381":{"position":[[7,7]]}}}],["boiler",{"_index":118,"t":{"297":{"position":[[12,7]]},"300":{"position":[[9,6]]}}}],["branch",{"_index":248,"t":{"1379":{"position":[[16,6]]},"1381":{"position":[[24,8]]}}}],["break",{"_index":200,"t":{"1181":{"position":[[0,8]]},"1214":{"position":[[2,8]]},"1276":{"position":[[0,8]]},"1284":{"position":[[0,8]]},"1294":{"position":[[0,8]]},"1312":{"position":[[0,8]]},"1321":{"position":[[0,8]]},"1327":{"position":[[0,8]]}}}],["bug",{"_index":205,"t":{"1194":{"position":[[0,3]]},"1205":{"position":[[0,3]]},"1218":{"position":[[0,3]]},"1231":{"position":[[0,3]]}}}],["calcul",{"_index":131,"t":{"358":{"position":[[43,10]]}}}],["calendar",{"_index":195,"t":{"1049":{"position":[[19,8]]}}}],["calibr",{"_index":166,"t":{"480":{"position":[[0,11]]}}}],["categori",{"_index":49,"t":{"59":{"position":[[12,9]]}}}],["chang",{"_index":28,"t":{"53":{"position":[[3,7]]},"69":{"position":[[20,7]]},"1181":{"position":[[9,7]]},"1214":{"position":[[11,7]]},"1276":{"position":[[9,7]]},"1284":{"position":[[9,7]]},"1294":{"position":[[9,7]]},"1312":{"position":[[9,7]]},"1321":{"position":[[9,7]]},"1327":{"position":[[9,7]]},"1351":{"position":[[9,6]]},"1383":{"position":[[6,7]]},"1385":{"position":[[10,7]]},"1387":{"position":[[16,7]]},"1391":{"position":[[7,7]]},"1393":{"position":[[5,7]]}}}],["charact",{"_index":21,"t":{"30":{"position":[[8,10]]}}}],["chart",{"_index":127,"t":{"338":{"position":[[37,5]]},"344":{"position":[[39,5]]},"350":{"position":[[19,5]]},"358":{"position":[[19,5]]},"364":{"position":[[51,5]]},"379":{"position":[[68,5]]},"381":{"position":[[63,5]]},"383":{"position":[[108,5]]}}}],["check",{"_index":255,"t":{"1387":{"position":[[0,5]]}}}],["choke",{"_index":152,"t":{"410":{"position":[[27,7]]}}}],["choos",{"_index":3,"t":{"11":{"position":[[21,7]]}}}],["chore",{"_index":208,"t":{"1198":{"position":[[14,6]]},"1209":{"position":[[14,6]]},"1222":{"position":[[14,6]]},"1241":{"position":[[14,6]]},"1244":{"position":[[14,6]]}}}],["cli",{"_index":4,"t":{"12":{"position":[[6,3]]},"46":{"position":[[0,3]]},"1188":{"position":[[0,3]]},"1251":{"position":[[0,3]]},"1268":{"position":[[0,3]]},"1288":{"position":[[0,3]]}}}],["clone",{"_index":244,"t":{"1375":{"position":[[0,7]]}}}],["code",{"_index":209,"t":{"1200":{"position":[[0,4]]},"1211":{"position":[[0,4]]},"1224":{"position":[[0,4]]},"1237":{"position":[[0,4]]},"1355":{"position":[[4,4]]},"1365":{"position":[[0,4]]}}}],["column",{"_index":43,"t":{"57":{"position":[[29,7]]}}}],["combin",{"_index":108,"t":{"238":{"position":[[0,9]]},"434":{"position":[[0,9]]},"1049":{"position":[[9,9]]}}}],["commit",{"_index":240,"t":{"1361":{"position":[[4,6]]},"1391":{"position":[[0,6]]}}}],["composit",{"_index":141,"t":{"379":{"position":[[84,11]]},"381":{"position":[[102,11]]},"416":{"position":[[29,11]]},"422":{"position":[[32,11]]}}}],["compressor",{"_index":101,"t":{"215":{"position":[[36,10]]},"338":{"position":[[26,10]]},"344":{"position":[[28,10]]},"350":{"position":[[8,10]]},"358":{"position":[[8,10]]},"364":{"position":[[40,10]]},"374":{"position":[[11,10],[45,10]]},"376":{"position":[[11,10],[57,10]]},"379":{"position":[[11,10],[57,10]]},"381":{"position":[[26,10],[52,10]]},"383":{"position":[[2,10]]},"385":{"position":[[2,10]]},"434":{"position":[[12,10]]},"589":{"position":[[22,10]]},"594":{"position":[[22,10]]},"655":{"position":[[0,11]]},"837":{"position":[[0,11]]},"842":{"position":[[0,11]]},"1159":{"position":[[0,11]]},"1164":{"position":[[0,11]]}}}],["compressor_tabular",{"_index":122,"t":{"326":{"position":[[0,18]]}}}],["condit",{"_index":70,"t":{"78":{"position":[[0,10]]}}}],["configur",{"_index":17,"t":{"26":{"position":[[36,13]]}}}],["constant",{"_index":193,"t":{"1045":{"position":[[0,8]]}}}],["consum",{"_index":164,"t":{"476":{"position":[[0,8]]}}}],["continu",{"_index":219,"t":{"1228":{"position":[[0,10]]},"1233":{"position":[[0,10]]},"1246":{"position":[[0,10]]}}}],["contribut",{"_index":228,"t":{"1333":{"position":[[0,12]]},"1349":{"position":[[7,10]]}}}],["control",{"_index":75,"t":{"88":{"position":[[8,7]]},"364":{"position":[[6,7]]},"401":{"position":[[15,7]]},"408":{"position":[[0,7]]},"410":{"position":[[9,7]]},"412":{"position":[[9,7]]}}}],["creat",{"_index":247,"t":{"1379":{"position":[[0,6]]}}}],["crossov",{"_index":189,"t":{"950":{"position":[[0,9]]}}}],["csv",{"_index":102,"t":{"215":{"position":[[47,3]]}}}],["data",{"_index":40,"t":{"57":{"position":[[9,4]]},"162":{"position":[[6,4]]},"238":{"position":[[10,4]]},"358":{"position":[[65,4]]},"1047":{"position":[[28,4]]}}}],["day",{"_index":196,"t":{"1049":{"position":[[39,3]]}}}],["decim",{"_index":71,"t":{"86":{"position":[[0,8]]}}}],["defin",{"_index":124,"t":{"338":{"position":[[5,7]]},"344":{"position":[[5,7]]},"379":{"position":[[34,7]]},"452":{"position":[[0,8]]}}}],["depend",{"_index":178,"t":{"829":{"position":[[10,10]]}}}],["descript",{"_index":99,"t":{"197":{"position":[[0,11]]},"288":{"position":[[0,11]]},"293":{"position":[[0,11]]},"298":{"position":[[0,11]]},"507":{"position":[[0,11]]},"515":{"position":[[0,11]]},"523":{"position":[[0,11]]},"531":{"position":[[0,11]]},"539":{"position":[[0,11]]},"549":{"position":[[0,11]]},"557":{"position":[[0,11]]},"563":{"position":[[0,11]]},"571":{"position":[[0,11]]},"579":{"position":[[0,11]]},"587":{"position":[[0,11]]},"601":{"position":[[0,11]]},"609":{"position":[[0,11]]},"614":{"position":[[0,11]]},"621":{"position":[[0,11]]},"629":{"position":[[0,11]]},"637":{"position":[[0,11]]},"645":{"position":[[0,11]]},"652":{"position":[[0,11]]},"663":{"position":[[0,11]]},"674":{"position":[[0,11]]},"682":{"position":[[0,11]]},"690":{"position":[[0,11]]},"698":{"position":[[0,11]]},"706":{"position":[[0,11]]},"714":{"position":[[0,11]]},"720":{"position":[[0,11]]},"728":{"position":[[0,11]]},"736":{"position":[[0,11]]},"746":{"position":[[0,11]]},"752":{"position":[[0,11]]},"767":{"position":[[0,11]]},"775":{"position":[[0,11]]},"782":{"position":[[0,11]]},"790":{"position":[[0,11]]},"798":{"position":[[0,11]]},"802":{"position":[[0,11]]},"810":{"position":[[0,11]]},"818":{"position":[[0,11]]},"822":{"position":[[0,11]]},"834":{"position":[[0,11]]},"846":{"position":[[0,11]]},"853":{"position":[[0,11]]},"865":{"position":[[0,11]]},"873":{"position":[[0,11]]},"881":{"position":[[0,11]]},"891":{"position":[[0,11]]},"899":{"position":[[0,11]]},"906":{"position":[[0,11]]},"914":{"position":[[0,11]]},"922":{"position":[[0,11]]},"930":{"position":[[0,11]]},"938":{"position":[[0,11]]},"961":{"position":[[0,11]]},"969":{"position":[[0,11]]},"976":{"position":[[0,11]]},"984":{"position":[[0,11]]},"995":{"position":[[0,11]]},"1005":{"position":[[0,11]]},"1013":{"position":[[0,11]]},"1020":{"position":[[0,11]]},"1028":{"position":[[0,11]]},"1036":{"position":[[0,11]]},"1053":{"position":[[0,11]]},"1061":{"position":[[0,11]]},"1073":{"position":[[0,11]]},"1081":{"position":[[0,11]]},"1089":{"position":[[0,11]]},"1097":{"position":[[0,11]]},"1108":{"position":[[0,11]]},"1112":{"position":[[0,11]]},"1119":{"position":[[0,11]]},"1126":{"position":[[0,11]]},"1133":{"position":[[0,11]]},"1141":{"position":[[0,11]]},"1154":{"position":[[0,11]]},"1168":{"position":[[0,11]]},"1176":{"position":[[0,11]]},"1402":{"position":[[0,11]]}}}],["design",{"_index":129,"t":{"350":{"position":[[41,6]]},"358":{"position":[[30,6]]},"381":{"position":[[74,6]]}}}],["detail",{"_index":172,"t":{"545":{"position":[[10,10]]},"1001":{"position":[[10,10]]}}}],["diagram",{"_index":158,"t":{"467":{"position":[[24,7]]}}}],["differ",{"_index":26,"t":{"44":{"position":[[5,11]]},"55":{"position":[[24,9]]},"238":{"position":[[20,9]]}}}],["digit",{"_index":73,"t":{"86":{"position":[[25,6]]}}}],["direct",{"_index":191,"t":{"1038":{"position":[[9,6]]}}}],["discharge_pressur",{"_index":187,"t":{"946":{"position":[[0,19]]}}}],["document",{"_index":206,"t":{"1196":{"position":[[0,13]]},"1207":{"position":[[0,13]]},"1220":{"position":[[0,13]]},"1239":{"position":[[0,13]]}}}],["driven",{"_index":142,"t":{"381":{"position":[[19,6]]}}}],["due",{"_index":12,"t":{"24":{"position":[[15,3]]},"26":{"position":[[15,3]]}}}],["ecalc",{"_index":0,"t":{"3":{"position":[[8,7]]},"5":{"position":[[17,7]]},"7":{"position":[[11,7]]},"12":{"position":[[0,5]]},"26":{"position":[[30,5]]},"86":{"position":[[35,5]]},"116":{"position":[[5,5]]},"140":{"position":[[5,5]]},"408":{"position":[[21,6]]},"487":{"position":[[0,5]]},"489":{"position":[[0,5]]},"491":{"position":[[0,5]]},"493":{"position":[[0,5]]},"495":{"position":[[0,5]]}}}],["electricity2fuel",{"_index":91,"t":{"177":{"position":[[0,16]]},"287":{"position":[[0,16]]}}}],["emiss",{"_index":66,"t":{"75":{"position":[[0,10]]},"756":{"position":[[7,9]]},"763":{"position":[[7,9]]}}}],["empti",{"_index":39,"t":{"57":{"position":[[3,5]]}}}],["energi",{"_index":120,"t":{"304":{"position":[[5,6]]},"312":{"position":[[12,6]]},"716":{"position":[[9,6]]},"1038":{"position":[[16,6]]}}}],["energy_usage_model",{"_index":81,"t":{"114":{"position":[[0,18]]},"138":{"position":[[0,18]]},"895":{"position":[[7,18]]},"1147":{"position":[[7,18]]}}}],["error",{"_index":10,"t":{"22":{"position":[[12,6]]},"24":{"position":[[0,5]]},"26":{"position":[[0,5]]}}}],["exampl",{"_index":7,"t":{"18":{"position":[[0,7]]},"181":{"position":[[0,7]]},"203":{"position":[[0,8]]},"209":{"position":[[0,7]]},"219":{"position":[[0,7]]},"220":{"position":[[3,7]]},"222":{"position":[[3,7]]},"228":{"position":[[0,8]]},"229":{"position":[[12,7]]},"231":{"position":[[5,8]]},"237":{"position":[[0,8]]},"246":{"position":[[0,7]]},"256":{"position":[[0,7]]},"269":{"position":[[0,7]]},"275":{"position":[[0,7]]},"295":{"position":[[0,7]]},"300":{"position":[[0,8]]},"308":{"position":[[0,7]]},"316":{"position":[[0,7]]},"324":{"position":[[0,7]]},"342":{"position":[[0,7]]},"348":{"position":[[0,7]]},"354":{"position":[[0,7]]},"356":{"position":[[0,7]]},"362":{"position":[[0,7]]},"378":{"position":[[0,8]]},"403":{"position":[[0,7]]},"420":{"position":[[0,8]]},"426":{"position":[[0,7]]},"432":{"position":[[0,7]]},"438":{"position":[[0,8]]},"448":{"position":[[0,7]]},"456":{"position":[[0,8]]},"460":{"position":[[0,7]]},"511":{"position":[[0,7]]},"519":{"position":[[0,7]]},"527":{"position":[[0,7]]},"535":{"position":[[0,7]]},"543":{"position":[[0,7]]},"545":{"position":[[0,7]]},"553":{"position":[[0,7]]},"567":{"position":[[0,7]]},"575":{"position":[[0,7]]},"583":{"position":[[0,7]]},"592":{"position":[[0,7]]},"597":{"position":[[0,7]]},"605":{"position":[[0,7]]},"611":{"position":[[0,7]]},"618":{"position":[[0,7]]},"625":{"position":[[0,7]]},"633":{"position":[[0,7]]},"641":{"position":[[0,7]]},"649":{"position":[[0,7]]},"659":{"position":[[0,7]]},"667":{"position":[[0,7]]},"668":{"position":[[0,7]]},"670":{"position":[[0,7]]},"678":{"position":[[0,7]]},"686":{"position":[[0,7]]},"694":{"position":[[0,7]]},"702":{"position":[[0,7]]},"710":{"position":[[0,7]]},"724":{"position":[[0,7]]},"732":{"position":[[0,7]]},"742":{"position":[[0,7]]},"760":{"position":[[0,7]]},"771":{"position":[[0,7]]},"779":{"position":[[0,7]]},"786":{"position":[[0,7]]},"794":{"position":[[0,7]]},"806":{"position":[[0,7]]},"814":{"position":[[0,7]]},"826":{"position":[[0,7]]},"831":{"position":[[5,7]]},"841":{"position":[[0,7]]},"850":{"position":[[0,7]]},"857":{"position":[[0,7]]},"859":{"position":[[0,7]]},"861":{"position":[[0,7]]},"869":{"position":[[0,7]]},"877":{"position":[[0,7]]},"887":{"position":[[0,7]]},"903":{"position":[[0,7]]},"910":{"position":[[0,7]]},"934":{"position":[[0,7]]},"952":{"position":[[0,7]]},"954":{"position":[[0,7]]},"957":{"position":[[0,7]]},"965":{"position":[[0,7]]},"973":{"position":[[0,7]]},"980":{"position":[[0,7]]},"988":{"position":[[0,7]]},"999":{"position":[[0,7]]},"1001":{"position":[[0,7]]},"1009":{"position":[[0,7]]},"1017":{"position":[[0,7]]},"1024":{"position":[[0,7]]},"1032":{"position":[[0,7]]},"1044":{"position":[[0,7]]},"1057":{"position":[[0,7]]},"1069":{"position":[[0,7]]},"1077":{"position":[[0,7]]},"1085":{"position":[[0,7]]},"1093":{"position":[[0,7]]},"1101":{"position":[[0,7]]},"1116":{"position":[[0,7]]},"1123":{"position":[[0,7]]},"1130":{"position":[[0,7]]},"1137":{"position":[[0,7]]},"1161":{"position":[[0,7]]},"1172":{"position":[[0,7]]},"1395":{"position":[[9,8]]}}}],["exist",{"_index":251,"t":{"1381":{"position":[[15,8]]}}}],["experiment",{"_index":225,"t":{"1282":{"position":[[0,12]]}}}],["explan",{"_index":160,"t":{"471":{"position":[[9,11]]}}}],["facil",{"_index":86,"t":{"163":{"position":[[0,8]]},"179":{"position":[[0,8]]},"474":{"position":[[0,8]]}}}],["facility_input",{"_index":76,"t":{"100":{"position":[[0,15]]},"126":{"position":[[0,15]]},"150":{"position":[[0,15]]},"1143":{"position":[[7,15]]}}}],["featur",{"_index":199,"t":{"1179":{"position":[[4,8]]},"1184":{"position":[[0,8]]},"1192":{"position":[[0,8]]},"1203":{"position":[[0,8]]},"1216":{"position":[[0,8]]},"1249":{"position":[[0,8]]},"1254":{"position":[[0,8]]},"1259":{"position":[[0,8]]},"1264":{"position":[[0,8]]},"1271":{"position":[[0,8]]},"1280":{"position":[[4,8]]},"1282":{"position":[[13,8]]},"1292":{"position":[[4,8]]},"1302":{"position":[[4,8]]},"1308":{"position":[[4,8]]},"1317":{"position":[[4,8]]},"1323":{"position":[[4,8]]},"1337":{"position":[[8,8]]}}}],["fetch",{"_index":252,"t":{"1383":{"position":[[0,5]]}}}],["file",{"_index":37,"t":{"55":{"position":[[77,4]]},"71":{"position":[[9,4]]},"73":{"position":[[9,4]]},"118":{"position":[[6,5]]},"142":{"position":[[6,5]]},"215":{"position":[[51,4]]},"226":{"position":[[6,4]]},"1296":{"position":[[23,5]]},"1314":{"position":[[23,5]]},"1389":{"position":[[4,5]]}}}],["fill",{"_index":62,"t":{"69":{"position":[[41,7]]}}}],["first",{"_index":144,"t":{"383":{"position":[[45,5]]}}}],["fix",{"_index":149,"t":{"401":{"position":[[0,5]]},"989":{"position":[[0,5]]},"1102":{"position":[[0,5]]},"1180":{"position":[[0,5]]},"1186":{"position":[[0,5]]},"1194":{"position":[[4,5]]},"1205":{"position":[[4,5]]},"1218":{"position":[[4,5]]},"1231":{"position":[[4,5]]},"1256":{"position":[[0,5]]},"1261":{"position":[[0,5]]},"1266":{"position":[[0,5]]},"1273":{"position":[[0,5]]},"1304":{"position":[[0,5]]},"1310":{"position":[[0,5]]},"1319":{"position":[[0,5]]},"1325":{"position":[[0,5]]}}}],["flow",{"_index":157,"t":{"467":{"position":[[19,4]]}}}],["fluid",{"_index":140,"t":{"379":{"position":[[78,5]]},"416":{"position":[[0,5]]},"422":{"position":[[0,5]]}}}],["fluid_dens",{"_index":188,"t":{"948":{"position":[[0,15]]}}}],["fork",{"_index":258,"t":{"1398":{"position":[[0,4]]}}}],["format",{"_index":89,"t":{"171":{"position":[[0,6]]},"179":{"position":[[15,6]]},"194":{"position":[[0,6]]},"201":{"position":[[0,6]]},"213":{"position":[[0,6]]},"229":{"position":[[5,6]]},"244":{"position":[[0,6]]},"254":{"position":[[0,6]]},"267":{"position":[[0,6]]},"273":{"position":[[0,6]]},"279":{"position":[[0,6]]},"285":{"position":[[0,6]]},"290":{"position":[[0,6]]},"306":{"position":[[0,6]]},"314":{"position":[[0,6]]},"322":{"position":[[0,6]]},"330":{"position":[[0,6]]},"340":{"position":[[0,6]]},"346":{"position":[[0,6]]},"352":{"position":[[0,6]]},"360":{"position":[[0,6]]},"366":{"position":[[0,6]]},"372":{"position":[[0,6]]},"389":{"position":[[0,6]]},"395":{"position":[[0,6]]},"418":{"position":[[0,6]]},"424":{"position":[[0,6]]},"430":{"position":[[0,6]]},"436":{"position":[[0,6]]},"444":{"position":[[0,6]]},"454":{"position":[[0,6]]},"509":{"position":[[0,6]]},"517":{"position":[[0,6]]},"525":{"position":[[0,6]]},"533":{"position":[[0,6]]},"541":{"position":[[0,6]]},"551":{"position":[[0,6]]},"559":{"position":[[0,6]]},"565":{"position":[[0,6]]},"573":{"position":[[0,6]]},"581":{"position":[[0,6]]},"590":{"position":[[0,6]]},"595":{"position":[[0,6]]},"603":{"position":[[0,6]]},"616":{"position":[[0,6]]},"623":{"position":[[0,6]]},"631":{"position":[[0,6]]},"639":{"position":[[0,6]]},"647":{"position":[[0,6]]},"654":{"position":[[0,6]]},"665":{"position":[[0,6]]},"676":{"position":[[0,6]]},"684":{"position":[[0,6]]},"692":{"position":[[0,6]]},"700":{"position":[[0,6]]},"708":{"position":[[0,6]]},"722":{"position":[[0,6]]},"730":{"position":[[0,6]]},"738":{"position":[[0,6]]},"758":{"position":[[0,6]]},"769":{"position":[[0,6]]},"777":{"position":[[0,6]]},"784":{"position":[[0,6]]},"792":{"position":[[0,6]]},"804":{"position":[[0,6]]},"812":{"position":[[0,6]]},"824":{"position":[[0,6]]},"836":{"position":[[0,6]]},"848":{"position":[[0,6]]},"855":{"position":[[0,6]]},"867":{"position":[[0,6]]},"875":{"position":[[0,6]]},"883":{"position":[[0,6]]},"901":{"position":[[0,6]]},"908":{"position":[[0,6]]},"918":{"position":[[0,6]]},"924":{"position":[[0,6]]},"932":{"position":[[0,6]]},"956":{"position":[[0,6]]},"963":{"position":[[0,6]]},"971":{"position":[[0,6]]},"978":{"position":[[0,6]]},"986":{"position":[[0,6]]},"997":{"position":[[0,6]]},"1007":{"position":[[0,6]]},"1015":{"position":[[0,6]]},"1022":{"position":[[0,6]]},"1030":{"position":[[0,6]]},"1042":{"position":[[0,6]]},"1055":{"position":[[0,6]]},"1063":{"position":[[0,6]]},"1067":{"position":[[0,6]]},"1075":{"position":[[0,6]]},"1083":{"position":[[0,6]]},"1091":{"position":[[0,6]]},"1099":{"position":[[0,6]]},"1114":{"position":[[0,6]]},"1121":{"position":[[0,6]]},"1128":{"position":[[0,6]]},"1135":{"position":[[0,6]]},"1151":{"position":[[0,6]]},"1156":{"position":[[0,6]]},"1170":{"position":[[0,6]]},"1361":{"position":[[11,6]]}}}],["forward",{"_index":61,"t":{"69":{"position":[[33,7]]}}}],["fuel_typ",{"_index":77,"t":{"102":{"position":[[0,10]]},"128":{"position":[[0,10]]},"154":{"position":[[0,10]]}}}],["fuelconsum",{"_index":85,"t":{"136":{"position":[[0,13]]}}}],["full",{"_index":82,"t":{"116":{"position":[[0,4]]},"140":{"position":[[0,4]]},"160":{"position":[[0,4]]},"231":{"position":[[0,4]]},"831":{"position":[[0,4]]}}}],["function",{"_index":114,"t":{"287":{"position":[[17,8]]},"916":{"position":[[0,13]]}}}],["gener",{"_index":52,"t":{"59":{"position":[[36,9]]},"257":{"position":[[0,7]]},"300":{"position":[[19,9]]},"350":{"position":[[0,7]]},"358":{"position":[[0,7]]},"381":{"position":[[44,7]]}}}],["generatorset",{"_index":84,"t":{"134":{"position":[[0,13]]},"158":{"position":[[0,13]]}}}],["git",{"_index":239,"t":{"1361":{"position":[[0,3]]},"1371":{"position":[[11,3]]},"1373":{"position":[[6,3]]},"1375":{"position":[[10,3]]},"1377":{"position":[[5,3]]}}}],["github",{"_index":253,"t":{"1383":{"position":[[19,6]]},"1385":{"position":[[21,6]]},"1393":{"position":[[16,6]]}}}],["guidelin",{"_index":238,"t":{"1357":{"position":[[0,10]]}}}],["header",{"_index":93,"t":{"183":{"position":[[0,6]]},"192":{"position":[[0,6]]},"199":{"position":[[0,6]]},"207":{"position":[[0,6]]},"215":{"position":[[0,6]]}}}],["heater",{"_index":117,"t":{"297":{"position":[[0,7]]}}}],["includ",{"_index":179,"t":{"857":{"position":[[12,7]]},"859":{"position":[[12,7]]},"861":{"position":[[12,7]]}}}],["indent",{"_index":9,"t":{"22":{"position":[[0,11]]}}}],["inform",{"_index":163,"t":{"474":{"position":[[9,11]]},"476":{"position":[[9,11]]}}}],["initi",{"_index":233,"t":{"1351":{"position":[[0,8]]}}}],["input",{"_index":83,"t":{"118":{"position":[[0,5]]},"142":{"position":[[0,5]]},"162":{"position":[[0,5]]},"179":{"position":[[9,5]]},"238":{"position":[[40,6]]},"326":{"position":[[19,5]]},"358":{"position":[[59,5]]},"1296":{"position":[[0,6]]},"1314":{"position":[[0,6]]}}}],["instal",{"_index":79,"t":{"108":{"position":[[0,13]]},"110":{"position":[[0,12]]},"112":{"position":[[0,12]]},"132":{"position":[[0,12]]},"156":{"position":[[0,13]]}}}],["integr",{"_index":220,"t":{"1228":{"position":[[11,11]]},"1233":{"position":[[11,11]]},"1246":{"position":[[11,11]]}}}],["interpol",{"_index":32,"t":{"55":{"position":[[34,13]]}}}],["interstage_pressure_control",{"_index":148,"t":{"399":{"position":[[0,27]]}}}],["interv",{"_index":112,"t":{"252":{"position":[[5,9]]},"261":{"position":[[5,9]]}}}],["invalid",{"_index":16,"t":{"26":{"position":[[22,7]]}}}],["item",{"_index":182,"t":{"857":{"position":[[41,4]]}}}],["keyword",{"_index":147,"t":{"397":{"position":[[0,7]]},"503":{"position":[[10,8]]}}}],["known",{"_index":136,"t":{"374":{"position":[[39,5]]}}}],["level",{"_index":171,"t":{"503":{"position":[[4,5]]}}}],["librari",{"_index":6,"t":{"14":{"position":[[7,7]]}}}],["list",{"_index":181,"t":{"857":{"position":[[36,4]]},"861":{"position":[[20,4]]}}}],["longer",{"_index":44,"t":{"57":{"position":[[40,6]]}}}],["ltp",{"_index":48,"t":{"59":{"position":[[8,3]]},"71":{"position":[[0,3]]},"1298":{"position":[[8,3]]}}}],["main",{"_index":25,"t":{"44":{"position":[[0,4]]}}}],["make",{"_index":234,"t":{"1353":{"position":[[0,4]]}}}],["map/object",{"_index":180,"t":{"857":{"position":[[20,10]]},"859":{"position":[[20,10]]}}}],["margin",{"_index":133,"t":{"364":{"position":[[14,6]]}}}],["markdown",{"_index":231,"t":{"1341":{"position":[[9,8]]},"1343":{"position":[[0,8]]}}}],["messag",{"_index":11,"t":{"24":{"position":[[6,8]]},"26":{"position":[[6,8]]}}}],["method",{"_index":2,"t":{"11":{"position":[[5,6]]},"410":{"position":[[17,7]]},"412":{"position":[[17,7]]}}}],["migrat",{"_index":23,"t":{"41":{"position":[[5,9]]},"42":{"position":[[0,9]]},"46":{"position":[[4,9]]},"50":{"position":[[5,9]]},"51":{"position":[[0,9]]}}}],["miscellan",{"_index":207,"t":{"1198":{"position":[[0,13]]},"1209":{"position":[[0,13]]},"1222":{"position":[[0,13]]},"1241":{"position":[[0,13]]},"1244":{"position":[[0,13]]}}}],["model",{"_index":53,"t":{"63":{"position":[[0,9]]},"96":{"position":[[5,5]]},"104":{"position":[[0,6]]},"116":{"position":[[16,5]]},"122":{"position":[[5,5]]},"140":{"position":[[16,5]]},"146":{"position":[[5,5]]},"152":{"position":[[0,6]]},"160":{"position":[[5,5]]},"240":{"position":[[0,5]]},"252":{"position":[[45,6]]},"304":{"position":[[18,5]]},"312":{"position":[[25,5]]},"374":{"position":[[28,5]]},"376":{"position":[[28,5]]},"408":{"position":[[8,9]]},"416":{"position":[[6,5]]},"422":{"position":[[6,5]]},"434":{"position":[[52,5]]},"589":{"position":[[39,5]]},"594":{"position":[[39,5]]},"716":{"position":[[22,5]]},"893":{"position":[[7,6]]},"926":{"position":[[10,5]]},"1038":{"position":[[29,5]]},"1149":{"position":[[7,6]]}}}],["multipl",{"_index":173,"t":{"594":{"position":[[50,8]]}}}],["new",{"_index":47,"t":{"59":{"position":[[4,3]]},"1179":{"position":[[0,3]]},"1280":{"position":[[0,3]]},"1292":{"position":[[0,3]]},"1302":{"position":[[0,3]]},"1308":{"position":[[0,3]]},"1317":{"position":[[0,3]]},"1323":{"position":[[0,3]]}}}],["now",{"_index":57,"t":{"67":{"position":[[29,3]]}}}],["number",{"_index":139,"t":{"376":{"position":[[47,6]]},"385":{"position":[[29,6]]}}}],["object",{"_index":183,"t":{"859":{"position":[[36,6]]},"861":{"position":[[30,6]]}}}],["on",{"_index":36,"t":{"55":{"position":[[73,3]]},"434":{"position":[[48,3]]}}}],["oper",{"_index":55,"t":{"67":{"position":[[0,11]]},"235":{"position":[[10,9]]}}}],["option",{"_index":153,"t":{"410":{"position":[[35,7]]},"412":{"position":[[41,7]]}}}],["order",{"_index":68,"t":{"75":{"position":[[25,5]]}}}],["output",{"_index":226,"t":{"1298":{"position":[[0,7]]}}}],["overview",{"_index":24,"t":{"42":{"position":[[10,8]]},"51":{"position":[[10,8]]},"96":{"position":[[11,8]]},"122":{"position":[[11,8]]},"146":{"position":[[11,8]]}}}],["point",{"_index":130,"t":{"350":{"position":[[48,5]]},"358":{"position":[[37,5]]},"381":{"position":[[81,5]]}}}],["possibl",{"_index":31,"t":{"55":{"position":[[7,8]]}}}],["power",{"_index":115,"t":{"292":{"position":[[0,5]]}}}],["predefin",{"_index":128,"t":{"350":{"position":[[30,10]]},"381":{"position":[[91,10]]},"383":{"position":[[97,10]]},"416":{"position":[[18,10]]}}}],["prerequisit",{"_index":227,"t":{"1331":{"position":[[0,13]]},"1347":{"position":[[0,13]]}}}],["pressur",{"_index":150,"t":{"401":{"position":[[6,8]]},"410":{"position":[[0,8]]},"412":{"position":[[0,8]]},"594":{"position":[[71,9]]}}}],["price",{"_index":190,"t":{"989":{"position":[[6,5]]},"991":{"position":[[9,5]]}}}],["problem",{"_index":15,"t":{"24":{"position":[[32,8]]}}}],["process",{"_index":156,"t":{"467":{"position":[[11,7]]}}}],["profil",{"_index":162,"t":{"472":{"position":[[20,8]]}}}],["propos",{"_index":18,"t":{"28":{"position":[[0,8]]},"32":{"position":[[0,8]]}}}],["pull",{"_index":235,"t":{"1353":{"position":[[7,4]]},"1359":{"position":[[0,4]]},"1396":{"position":[[0,4]]}}}],["pump",{"_index":119,"t":{"304":{"position":[[0,4]]},"657":{"position":[[0,5]]},"839":{"position":[[0,5]]},"1157":{"position":[[0,5]]},"1162":{"position":[[0,5]]}}}],["pump_chart_single_spe",{"_index":97,"t":{"190":{"position":[[0,23]]}}}],["pump_chart_variable_spe",{"_index":98,"t":{"196":{"position":[[0,25]]}}}],["pump_system",{"_index":121,"t":{"312":{"position":[[0,11]]}}}],["python",{"_index":5,"t":{"14":{"position":[[0,6]]}}}],["qualiti",{"_index":74,"t":{"88":{"position":[[0,7]]}}}],["rate",{"_index":60,"t":{"69":{"position":[[14,5],[60,5]]},"240":{"position":[[20,4]]},"940":{"position":[[0,5]]},"1049":{"position":[[43,5]]}}}],["rate_fract",{"_index":185,"t":{"942":{"position":[[0,14]]}}}],["read",{"_index":14,"t":{"24":{"position":[[27,4]]}}}],["readabl",{"_index":241,"t":{"1363":{"position":[[0,11]]}}}],["recircul",{"_index":154,"t":{"412":{"position":[[27,13]]}}}],["refactor",{"_index":210,"t":{"1200":{"position":[[5,11]]},"1211":{"position":[[5,11]]},"1224":{"position":[[5,11]]},"1237":{"position":[[5,11]]}}}],["refer",{"_index":111,"t":{"250":{"position":[[0,9]]},"259":{"position":[[0,9]]}}}],["regular",{"_index":194,"t":{"1045":{"position":[[9,10]]},"1047":{"position":[[0,10]]}}}],["report",{"_index":192,"t":{"1040":{"position":[[0,9]]}}}],["repositori",{"_index":245,"t":{"1375":{"position":[[14,10]]},"1398":{"position":[[9,10]]}}}],["request",{"_index":236,"t":{"1353":{"position":[[12,7]]},"1359":{"position":[[5,8]]},"1396":{"position":[[5,8]]}}}],["requir",{"_index":95,"t":{"183":{"position":[[16,12]]},"192":{"position":[[7,12]]},"199":{"position":[[7,12]]},"207":{"position":[[16,12]]},"215":{"position":[[7,12]]},"446":{"position":[[0,12]]},"472":{"position":[[0,8]]},"740":{"position":[[0,12]]},"885":{"position":[[0,12]]}}}],["resampl",{"_index":59,"t":{"69":{"position":[[0,10]]}}}],["reservoir",{"_index":109,"t":{"238":{"position":[[30,9]]}}}],["resourc",{"_index":87,"t":{"163":{"position":[[9,9]]},"165":{"position":[[11,9]]},"1296":{"position":[[14,8]]},"1314":{"position":[[14,8]]}}}],["result",{"_index":54,"t":{"66":{"position":[[0,6]]},"493":{"position":[[11,7]]}}}],["review",{"_index":237,"t":{"1355":{"position":[[9,6]]}}}],["run",{"_index":167,"t":{"487":{"position":[[6,3]]}}}],["sampl",{"_index":100,"t":{"215":{"position":[[28,7]]}}}],["second",{"_index":146,"t":{"383":{"position":[[84,6]]}}}],["selftest",{"_index":168,"t":{"489":{"position":[[6,8]]}}}],["send",{"_index":254,"t":{"1385":{"position":[[0,4]]},"1393":{"position":[[0,4]]}}}],["seri",{"_index":42,"t":{"57":{"position":[[22,6]]},"250":{"position":[[18,6]]},"259":{"position":[[18,6]]},"1047":{"position":[[21,6]]}}}],["set",{"_index":56,"t":{"67":{"position":[[12,8]]},"300":{"position":[[29,3]]},"1371":{"position":[[0,7]]}}}],["setup",{"_index":105,"t":{"226":{"position":[[0,5]]}}}],["shore",{"_index":116,"t":{"292":{"position":[[11,5]]}}}],["show",{"_index":169,"t":{"491":{"position":[[6,4]]},"493":{"position":[[6,4]]},"495":{"position":[[6,4]]}}}],["signific",{"_index":72,"t":{"86":{"position":[[13,11]]}}}],["simplifi",{"_index":134,"t":{"374":{"position":[[0,10]]},"376":{"position":[[0,10]]},"467":{"position":[[0,10]]}}}],["singl",{"_index":125,"t":{"338":{"position":[[13,6]]},"379":{"position":[[2,8]]},"381":{"position":[[2,8]]}}}],["solut",{"_index":19,"t":{"28":{"position":[[9,8]]},"32":{"position":[[9,8]]}}}],["spec",{"_index":145,"t":{"383":{"position":[[69,4]]}}}],["special",{"_index":20,"t":{"30":{"position":[[0,7]]},"1049":{"position":[[0,8]]},"1337":{"position":[[0,7]]}}}],["specifi",{"_index":155,"t":{"422":{"position":[[22,9]]}}}],["speed",{"_index":126,"t":{"338":{"position":[[20,5]]},"344":{"position":[[22,5]]},"364":{"position":[[34,5]]},"379":{"position":[[51,5]]},"589":{"position":[[16,5]]},"594":{"position":[[16,5]]}}}],["stage",{"_index":137,"t":{"374":{"position":[[56,6]]},"376":{"position":[[68,6]]},"383":{"position":[[28,6],[51,5]]},"385":{"position":[[39,6]]}}}],["standard",{"_index":230,"t":{"1341":{"position":[[0,8]]}}}],["statu",{"_index":256,"t":{"1387":{"position":[[6,6]]}}}],["steam",{"_index":50,"t":{"59":{"position":[[22,5]]}}}],["stp",{"_index":65,"t":{"73":{"position":[[0,3]]}}}],["stream",{"_index":174,"t":{"594":{"position":[[59,7]]},"1049":{"position":[[32,6]]}}}],["structur",{"_index":67,"t":{"75":{"position":[[11,9]]},"257":{"position":[[8,9]]}}}],["style",{"_index":242,"t":{"1365":{"position":[[5,5]]}}}],["subsurfac",{"_index":161,"t":{"472":{"position":[[9,10]]}}}],["suction_pressur",{"_index":186,"t":{"944":{"position":[[0,17]]}}}],["summari",{"_index":232,"t":{"1343":{"position":[[9,7]]}}}],["support",{"_index":90,"t":{"173":{"position":[[0,9]]},"332":{"position":[[0,9]]},"442":{"position":[[0,9]]},"748":{"position":[[0,9]]},"926":{"position":[[0,9]]}}}],["surg",{"_index":132,"t":{"364":{"position":[[0,5]]}}}],["switch",{"_index":249,"t":{"1381":{"position":[[0,6]]}}}],["syntax",{"_index":106,"t":{"226":{"position":[[11,6]]}}}],["tabl",{"_index":92,"t":{"181":{"position":[[8,5]]},"219":{"position":[[8,6]]}}}],["tax",{"_index":198,"t":{"1102":{"position":[[6,3]]},"1104":{"position":[[9,3]]}}}],["tell",{"_index":246,"t":{"1377":{"position":[[0,4]]}}}],["tempor",{"_index":175,"t":{"716":{"position":[[0,8]]}}}],["test",{"_index":218,"t":{"1226":{"position":[[0,5]]},"1235":{"position":[[0,5]]}}}],["theori",{"_index":151,"t":{"406":{"position":[[0,6]]}}}],["time",{"_index":41,"t":{"57":{"position":[[17,4]]},"250":{"position":[[13,4]]},"252":{"position":[[0,4]]},"259":{"position":[[13,4]]},"261":{"position":[[0,4]]},"829":{"position":[[5,4]]},"1047":{"position":[[16,4]]}}}],["time_seri",{"_index":29,"t":{"53":{"position":[[14,11]]},"98":{"position":[[0,11]]},"124":{"position":[[0,11]]},"148":{"position":[[0,11]]},"1145":{"position":[[7,11]]}}}],["timeseri",{"_index":88,"t":{"165":{"position":[[0,10]]}}}],["top",{"_index":170,"t":{"503":{"position":[[0,3]]}}}],["train",{"_index":135,"t":{"374":{"position":[[22,5]]},"376":{"position":[[22,5]]},"383":{"position":[[13,5]]},"385":{"position":[[13,5]]},"434":{"position":[[23,5]]},"589":{"position":[[33,5]]},"594":{"position":[[33,5]]}}}],["tsv",{"_index":64,"t":{"71":{"position":[[4,4]]},"73":{"position":[[4,4]]}}}],["turbin",{"_index":51,"t":{"59":{"position":[[28,7]]},"381":{"position":[[11,7]]},"434":{"position":[[35,7]]}}}],["two",{"_index":143,"t":{"383":{"position":[[24,3]]}}}],["type",{"_index":33,"t":{"55":{"position":[[48,5]]},"173":{"position":[[10,5]]},"326":{"position":[[25,4]]},"332":{"position":[[10,5]]},"442":{"position":[[10,5]]},"748":{"position":[[10,5]]},"926":{"position":[[16,5]]}}}],["unicod",{"_index":22,"t":{"30":{"position":[[22,7]]}}}],["unit",{"_index":94,"t":{"183":{"position":[[11,4]]},"207":{"position":[[11,4]]},"217":{"position":[[0,5]]},"310":{"position":[[0,5]]},"318":{"position":[[0,5]]}}}],["unknown",{"_index":138,"t":{"376":{"position":[[39,7]]},"383":{"position":[[61,7]]},"385":{"position":[[50,7]]}}}],["up",{"_index":243,"t":{"1371":{"position":[[8,2]]}}}],["us",{"_index":1,"t":{"5":{"position":[[13,3]]},"7":{"position":[[7,3]]},"67":{"position":[[21,4]]},"416":{"position":[[12,5]]},"458":{"position":[[0,5]]},"589":{"position":[[0,3]]},"594":{"position":[[0,3]]},"754":{"position":[[0,3]]},"756":{"position":[[0,3]]},"761":{"position":[[0,3]]},"763":{"position":[[0,3]]},"893":{"position":[[0,3]]},"895":{"position":[[0,3]]},"1038":{"position":[[0,3]]},"1065":{"position":[[0,3]]},"1143":{"position":[[0,3]]},"1145":{"position":[[0,3]]},"1147":{"position":[[0,3]]},"1149":{"position":[[0,3]]},"1373":{"position":[[0,5]]}}}],["usag",{"_index":8,"t":{"18":{"position":[[8,5]]},"304":{"position":[[12,5]]},"312":{"position":[[19,5]]},"397":{"position":[[8,5]]},"716":{"position":[[16,5]]},"827":{"position":[[6,5]]},"1038":{"position":[[23,5]]}}}],["user",{"_index":123,"t":{"338":{"position":[[0,4]]},"344":{"position":[[0,4]]},"379":{"position":[[29,4]]},"422":{"position":[[17,4]]}}}],["valid",{"_index":165,"t":{"478":{"position":[[0,10]]}}}],["valu",{"_index":184,"t":{"859":{"position":[[43,5]]},"861":{"position":[[37,5]]}}}],["variabl",{"_index":78,"t":{"106":{"position":[[0,9]]},"130":{"position":[[0,9]]},"344":{"position":[[13,8]]},"364":{"position":[[25,8]]},"379":{"position":[[42,8]]},"452":{"position":[[9,9]]},"458":{"position":[[6,9]]},"589":{"position":[[7,8]]},"594":{"position":[[7,8]]},"991":{"position":[[0,8]]},"1104":{"position":[[0,8]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":197,"t":{"1065":{"position":[[7,62]]}}}],["variables/express",{"_index":113,"t":{"252":{"position":[[19,21]]}}}],["vector",{"_index":34,"t":{"55":{"position":[[58,7]]}}}],["within",{"_index":35,"t":{"55":{"position":[[66,6]]}}}],["work",{"_index":229,"t":{"1335":{"position":[[7,5]]}}}],["workflow",{"_index":159,"t":{"469":{"position":[[0,8]]},"471":{"position":[[0,8]]},"1395":{"position":[[0,8]]}}}],["yaml",{"_index":13,"t":{"24":{"position":[[22,4]]},"41":{"position":[[0,4]]},"50":{"position":[[0,4]]},"64":{"position":[[0,4]]},"96":{"position":[[0,4]]},"116":{"position":[[11,4]]},"122":{"position":[[0,4]]},"140":{"position":[[11,4]]},"146":{"position":[[0,4]]},"229":{"position":[[0,4]]},"495":{"position":[[11,4]]},"1286":{"position":[[0,4]]},"1296":{"position":[[7,4]]},"1314":{"position":[[7,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2,"t":"The eCalc™ technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area.","s":"Introduction to eCalc™","u":"/ecalc/docs/about/","h":"","p":1},{"i":4,"t":"eCalc™ is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support. eCalc™ performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered. eCalc™ uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation.","s":"What is eCalc™?","u":"/ecalc/docs/about/","h":"#what-is-ecalc","p":1},{"i":6,"t":"By using eCalc™ you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures.","s":"Why should I use eCalc™?","u":"/ecalc/docs/about/","h":"#why-should-i-use-ecalc","p":1},{"i":8,"t":"To use eCalc™ you need to create a model setup of your asset. This is described in the Modelling section. Once the model is ready, you can run the eCalc™ calculator. Different user interfaces for the calculator are offered. These are described in detail in the Getting started section.","s":"How to use eCalc™?","u":"/ecalc/docs/about/","h":"#how-to-use-ecalc","p":1},{"i":10,"t":"info Currently the only officially supported method is the eCalc CLI using eCalc YAML models. There are three options to run eCalc models: eCalc CLI eCalc Python library","s":"API Reference","u":"/ecalc/docs/about/getting_started/","h":"","p":9},{"i":13,"t":"Choose the eCalc CLI option if you: Don't know much about programming Have simple requirements Can define the eCalc models statically","s":"eCalc CLI","u":"/ecalc/docs/about/getting_started/","h":"#ecalc-cli","p":9},{"i":15,"t":"Choose the Python Library option if you: Are a developer or advanced user, and want to build eCalc models and get results programmatically Use Python, and you need to use (parts of) eCalc as a dependency Need access to \"inner core functionality\" of eCalc note Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon","s":"Python Library","u":"/ecalc/docs/about/getting_started/","h":"#python-library","p":9},{"i":17,"t":"info It is currently recommended to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the eCalc Python library, and should be accessible from the command line as ecalc. See all commands and options in the CLI reference","s":"eCalc CLI","u":"/ecalc/docs/about/getting_started/cli/","h":"","p":16},{"i":19,"t":"Use show command to inspect results​ First run ecalc (here shown with default output folder) $ ecalc run /somelocation/myfield.yaml --output-folder output Enter the output folder $ cd output Show results for a single component $ ecalc show results --name waterinj --output-format json or as csv $ ecalc show results --name waterinj --output-format csv or write the full csv result to a file (this will give the same output as ecalc run with the csv option) $ ecalc show results --output-format csv --file results.csv Output Monthly CSV data​ $ ecalc run -f MONTH /somelocation/myfield.yml Specify different output folder​ $ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml Specify a different naming prefix to outputs​ $ ecalc run -n myfield_myproject /somelocation/myfield.yml Show stack trace for debugging​ $ ecalc run --log DEBUG /somelocation/myfield.yml","s":"Example Usage","u":"/ecalc/docs/about/getting_started/cli/","h":"#example-usage","p":16},{"i":21,"t":"While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages. This page tries to explain some common error messages and proposes how to fix them.","s":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","h":"","p":20},{"i":23,"t":"In YAML, the indentation is very important and specifies the level in the hierarchy for the input. If you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors.","s":"Indentation errors","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#indentation-errors","p":20},{"i":25,"t":"The following error messages are common when you have formatting issues in your YAML file: mapping values are not allowed here while scanning a simple key in \"\", line , column could not find expected ':', line , column while parsing a block mapping in , line , column expected , but found ''","s":"Error messages due to YAML read problems","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-yaml-read-problems","p":20},{"i":27,"t":"The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type dictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would indicate that the type is wrong because it is not a 'dict'/'list' or other type None should be instance of 'dict' None should be instance of 'list'","s":"Error messages due to invalid eCalc configuration","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-invalid-ecalc-configuration","p":20},{"i":29,"t":"Check your YAML setup file for correct indentation and correct format of values for each eCalc key.","s":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution","p":20},{"i":31,"t":"eCalc uses ruamel.yaml to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message. One example of this is an unrecognized \"BOM\" character in \"UTF-8 Unicode\". Error message while scanning a simple key in \"\", line , column 1 could not find expected ':', line , column 1","s":"Special characters in Unicode","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#special-characters-in-unicode","p":20},{"i":33,"t":"Check the encoding of your setupfile (and inputfiles): $ file .yml If the output of this is not \"ASCII text\", convert your file to \"US-ASCII\" using iconv. Example when .yml is of type \"UTF-8\" $ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o .yml .yml Now try to run again using the new file .yml.","s":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution-1","p":20},{"i":35,"t":"danger It is currently not recommended to use the Python library due to upcoming breaking changes. If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in dynamically changing the eCalc models. See all commands and options in the API reference","s":"Python Library","u":"/ecalc/docs/about/getting_started/library/","h":"","p":34},{"i":37,"t":"We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see here The eCalc YAML model can either be run directly with the eCalc CLI or loaded using the Python library For getting started setting up your first eCalc YAML model, please see Setup an eCalc Model, look at some example YAMLs here and refer to the vocabulary that we use here.","s":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","h":"","p":36},{"i":40,"t":"In this migration guide you will find: YAML changes CLI changes","s":"v7 to v8","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"","p":39},{"i":43,"t":"This doc guides you through migrating an existing eCalc™ model from version v7 to v8. We try to make this as easy as possible, and provide a step-by-step migration guide.","s":"Migration overview","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#migration-overview","p":39},{"i":45,"t":"All component names must be unique to avoid ambiguity in reporting UNITS are required when setting up compressor and pump charts Restrict allowed characters in component names and emission names NAME no longer used for LTP reporting, use CATEGORY instead Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS) 1. All component names must be unique​ All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation, generator sets, electricity consumers, fuel consumers and direct emitters. main.yaml INSTALLATIONS: - NAME: Installation ... GENERATORSETS: - NAME: Genset ... CONSUMERS: - NAME: Consumer ... - NAME: Consumer ... - NAME: Genset ... FUELCONSUMERS: - NAME: FuelConsumer ... - NAME: FuelConsumer ... DIRECT_EMITTER: - NAME: DirectEmitter ... - NAME: DirectEmitter ... - NAME: Installation ... This model is no longer valid, and the duplicated installation names are highlighted. To make this model valid these names needs to be changed. For example: main.yaml INSTALLATIONS: - NAME: Installation_A ... GENERATORSETS: - NAME: Genset_A ... CONSUMERS: - NAME: Consumer_A ... - NAME: Consumer_B ... - NAME: Genset_B ... FUELCONSUMERS: - NAME: FuelConsumer_A ... - NAME: FuelConsumer_B ... DIRECT_EMITTER: - NAME: DirectEmitter_A ... - NAME: DirectEmitter_B ... - NAME: Installation_B ... This will make it possible to attribute results to each consumer by name, and removes any an ambiguity when interpreting eCalc™ results. See INSTALLATION, GENERATORSET, CONSUMERS, FUELCONSUMERS, DIRECT_EMITTER for more details about the relevant keywords. Are you using power from shore? We have implemented temporal categories for consumers to support the power from shore implementation in use. Instead of duplicating the generator set and setting the POWER-FROM-SHORE category, it is now possible to change the category at a certain date. This is the same syntax as other temporal models. CATEGORY: 2020-01-01: TURBINE-GENERATOR 2030-01-01: POWER-FROM-SHORE See Power from shore for more information. 2. UNITS for pump and compressor charts​ Compressor and pump charts has previously had implicit units, without requiring the operator to specify what units are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand over models. To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify. To keep the old defaults you can do the following: main.yaml FACILITY_INPUTS: - NAME: single_speed_pump_chart FILE: TYPE: PUMP_CHART_SINGLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE - NAME: variable_speed_pump_chart FILE: TYPE: PUMP_CHART_VARIABLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE MODELS: - NAME: single_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: SINGLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: FRACTION CURVES: ... - NAME: variable_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: VARIABLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: FRACTION CURVES: ... ... See COMPRESSOR CHART and PUMP CHART for more details about the relevant keywords. 3. Restrict allowed characters in component names and emission names​ Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (_), hyphen (-) and space ( ). Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (_). 4. NAME no longer used for LTP reporting, use CATEGORY instead​ We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME. main.yaml INSTALLATIONS: - NAME: Installation_A ... GENERATORSETS: - NAME: Genset_A ... CONSUMERS: - NAME: Consumer_A ... FUELCONSUMERS: - NAME: loading # Name will no longer be used in LTP reporting CATEGORY: LOADING # Category must be used to include it in LTP reporting FUEL: Fuel_A ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: storage # Name will no longer be used in LTP reporting CATEGORY: STORAGE # Category must be used to include it in LTP reporting FUEL: Fuel_B ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: flare # Name will no longer be used in LTP reporting CATEGORY: FLARE # Category must be used to include it in LTP reporting FUEL: Fuel_C ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... ... 5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)​ Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names. The input is case-sensitive and must match exactly with the pre-defined names. See CLI Docs for full documentation.","s":"Main differences","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#main-differences","p":39},{"i":47,"t":"This version includes some changes to how the CLI is invoked and changes to default behavior. Invoking eCalc™ directly is no longer supported, use ecalc run instead. Log level should be specified as the first argument + log to file Model yaml-file needs to come last Extrapolation (correction) is now always used and cannot be disabled Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export Simple results are now default for json 1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.​ To make it possible to add ecalc show we added the ecalc run command. In v8 it is required to specify run when calculating a model. If you previously ran eCalc™ with this command $ ecalc ./my-model.yaml you should now use $ ecalc run ./my-model.yaml 2. Log level should be specified as the first argument + log to file​ Previously you could specify the --log argument after run, this is no longer possible. This is the new way of specifying log level. $ ecalc --log DEBUG run ./my-model.yaml In addition we are introducing --log-folder where you can direct and store the log in a given path to easily look at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc produces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages). The user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT do that for you. $ ecalc --log DEBUG --log-folder . run ./my-model.yaml As you see above, the argument MUST be added BEFORE the run argument. 3. Model yaml-file needs to come last​ When running eCalc™ you will now need to set the model file argument last. ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file] See the CLI Docs or run ecalc --help for the full documentation. 4. Extrapolation correction is no longer optional​ We have removed the extrapolation correction argument. eCalc™ will now always \"extrapolate\" values. The main reason for making this change was that the feature was in general always used, in addition to being a confusing term. Let us know if you have a use-case where this was needed. 5. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export​ To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily affected by Centuries), we simplify the argument to get LTP results. See CLI Docs for full documentation. 6. Simple results are now default for json​ Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now needs to use the --detailed-output option when running the CLI. See CLI reference docs for more details.","s":"CLI migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#cli-migration","p":39},{"i":49,"t":"In this migration guide you will find: YAML changes","s":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"","p":48},{"i":52,"t":"This doc guides you through migrating an existing eCalc™ model from version v8 to v8.1. We try to make this as easy as possible, and provide a step-by-step migration guide.","s":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#migration-overview","p":48},{"i":54,"t":"RATE_INTERPOLATION_TYPE is renamed to INTERPOLATION_TYPE New time series type: DEFAULT with default RIGHT interpolation RESERVOIR type is removed Previously, it looked like this: TIME_SERIES: - NAME:

    Title

    Heading 2 ## Title

    Title

    Heading 3 ### Title

    Title

    Heading 4 #### Title

    Title

    Heading 5 ##### Title
    Title
    Heading 6 ###### Title
    Title
    Paragraph Just start typing

    Just start typing

    Bold **Text** Text Italic *Text* Text Strike ~~Text~~ Text Quoted (indent) > Text

    Text

    Code (inline) Statement Statement Code (fenced) Statement 1 Statement 2 Statement 3
    Statement 1Statement 2Statement 3
    List (unordered) List item 1 List item 2 * List item 3
    • List item 1
    • List item 2
    • List item 3
    List (ordered) 1. List item 1 2. List item 2 3. List item 3
    • List item 1
    • List item 2
    • List item 3
    Images ![Alternate text for image](path/to/image) \"Alternative Hyperlinks [Link text](https://www.google.com/)
    Link text note You may want to escape special html characters using \\, and replace the great than symbol with <, otherwise Docusaurus will confuse it with html code.","s":"Markdown summary","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"","p":1339},{"i":1346,"t":"Welcome! We are glad that you want to contribute to our project! 💖 This project accepts contributions via GitHub Pull Requests. This document outlines the process to help get your contribution accepted. There are many ways to contribute: Suggest features Suggest changes Report bugs You can start by looking through the GitHub Issues filtered by labels. info We follow some contributor guidelines that you will find in our contributor guidelines. Don't worry if your contribution does not follow all the guidelines. We will guide you in the code review process. The threshold for contributing is low, and we appreciate any contribution great or small. 🙏","s":"Get started","u":"/ecalc/docs/contribute/get-started","h":"","p":1345},{"i":1348,"t":"See Documentation guide for how to get started with contributions to this documentation.","s":"Prerequisites","u":"/ecalc/docs/contribute/get-started","h":"#prerequisites","p":1345},{"i":1350,"t":"Contribution is done in 3 simple steps:","s":"How to contribute","u":"/ecalc/docs/contribute/get-started","h":"#how-to-contribute","p":1345},{"i":1352,"t":"For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient to explain the change without referring to an issue.","s":"Initiate change","u":"/ecalc/docs/contribute/get-started","h":"#initiate-change","p":1345},{"i":1354,"t":"To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role. Equinor internal contributors, you may open a Pull Request directly, Independent contributors, you will Fork the repository.","s":"Make a Pull Request","u":"/ecalc/docs/contribute/get-started","h":"#make-a-pull-request","p":1345},{"i":1356,"t":"Once a Pull Request has been made, we will give you feedback and maybe suggest changes. The core team looks at pull requests on a regular basis, we review the code and guide you if needed. Here you will find more information about the GitHub Code Review Process","s":"Get code review","u":"/ecalc/docs/contribute/get-started","h":"#get-code-review","p":1345},{"i":1358,"t":"For major changes, please open an issue first to discuss what you would like to change Work on your own fork of the main repo Use a separate branch for each issue you’re working on Use conventional commit. See our Git commit format for details, and our Git guide for our full guide Please include unit tests with all your code changes We follow Trunk Based Development style of working with short-lived feature branches.","s":"Guidelines","u":"/ecalc/docs/contribute/get-started","h":"#guidelines","p":1345},{"i":1360,"t":"Please try to make your Pull Requests easy to review for us. Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon. Don't make changes unrelated to the goals of your PR. While you're writing up the pull request, you can add closes # in the message body where issue number is the issue you're fixing. Therefore, an example would be closes #42 would close issue #42.","s":"Pull Requests","u":"/ecalc/docs/contribute/get-started","h":"#pull-requests","p":1345},{"i":1362,"t":"Git commits are required to follow conventional commits. Please see our Conventional Commit Guide for examples.","s":"Git commit format","u":"/ecalc/docs/contribute/get-started","h":"#git-commit-format","p":1345},{"i":1364,"t":"We use the pre-commit hooks in order to ensure uniform formatting and to exclude potential code issues. We strive for readable code. A few good tips are: Self-documenting code with self-explaining variable names Composition over inheritance Functional code over Object-Oriented Code Rugged code to write more robust code Domain Driven Design to to match the code with the domain we are working on","s":"Readability","u":"/ecalc/docs/contribute/get-started","h":"#readability","p":1345},{"i":1366,"t":"Except for the pre-commits hooks mentioned above, we also strive to follow the following code style: Use capital letters for constants i.e. SECONDS_PER_HOUR Try to split methods/modules/classes into smaller bits of code Remove, do not comment out, unused code Use types and type hinting We comment the code when it is not self-explanatory Be consistent with existing code style - try to make it look like the code is written by one developer For Python, we follow PEP 8 – Style Guide for Python Code and PEP 20 - The Zen of Python: Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! Please reach out to us if you have any questions. 👋 Thank you for your contribution! 🎉","s":"Code style","u":"/ecalc/docs/contribute/get-started","h":"#code-style","p":1345},{"i":1368,"t":"Git commits are required to follow conventional commits. The message should be structured like this: [optional scope]: [optional body] [optional footer(s)] The type can be one of these types: feat, fix, build, ci, docs, style, refactor, test, and chore. The description should be lower-case for the first letter. For description of optional parts, please refer to the conventional Commits Docs. Here are some simple example conventional commits: feat: implement new awesome feature docs: add developer guidelines A more advanced example: fix: prevent racing of requests Introduce a request id and a reference to latest request. Dismiss incoming responses other than from latest request. Remove timeouts which were used to mitigate the racing issue but are obsolete now. Reviewed-by: Z Refs: #123","s":"Conventional Commits","u":"/ecalc/docs/contribute/guides/conventional-commits","h":"","p":1367},{"i":1370,"t":"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base. Git is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development of source code and documentation. We use Git as a service through GitHub. See GitHub Docs for more information about GitHub and how to get started. info If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including: Creating a repository Forking a repository Managing files","s":"Git","u":"/ecalc/docs/contribute/guides/git","h":"","p":1369},{"i":1372,"t":"Go to git-scm.com to download the appropriate git client unless it is already installed on your system. To verify that git is installed, you can run: git --version See GitHub Docs - Set up Git for detailed instructions.","s":"Setting up Git","u":"/ecalc/docs/contribute/guides/git","h":"#setting-up-git","p":1369},{"i":1374,"t":"Git is a powerful tool that can be used in many ways. We recommend the following resources: Introduction to git - GitHub - About git How to get out of git trouble Oh shit, Git!?! Below we will describe the most commonly used commands and scenarios when working with git. info In the following sections we use the syntax where you should fill in your own values, such as: : conventional commits change types such as feat, fix, docs, test, chore, refactor, etc. : the GitHub Issue Number that you are solving. This may be omitted if you are fixing something tiny. : a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string.","s":"Using Git","u":"/ecalc/docs/contribute/guides/git","h":"#using-git","p":1369},{"i":1376,"t":"Navigate to the location where you want to store the code, and clone the repository: git clone git@github.com:equinor/ecalc.git This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the same name as the repository, ecalc/.","s":"Cloning a git repository","u":"/ecalc/docs/contribute/guides/git","h":"#cloning-a-git-repository","p":1369},{"i":1378,"t":"git config --global user.name \"My name\" git config --global user.email example@email.com This is what will show in the git log when you make changes.","s":"Tell Git who you are","u":"/ecalc/docs/contribute/guides/git","h":"#tell-git-who-you-are","p":1369},{"i":1380,"t":"In order to create a new local branch and switch to it: git checkout -b /- for new versions of git you may also use the more intuitive. git switch -c /-","s":"Create your own branch","u":"/ecalc/docs/contribute/guides/git","h":"#create-your-own-branch","p":1369},{"i":1382,"t":"git checkout ","s":"Switch between existing branches","u":"/ecalc/docs/contribute/guides/git","h":"#switch-between-existing-branches","p":1369},{"i":1384,"t":"git pull This will update the local branch you are currently in, with changes done in GitHub. git push --set-upstream origin /-","s":"Fetch changes from GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#fetch-changes-from-github","p":1369},{"i":1386,"t":"git push This will update the remove repository on GitHub. If it is the first time for a new branch you will also have to tell git that you are creating a new remote branch by using the command:","s":"Send your changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-your-changes-to-github","p":1369},{"i":1388,"t":"List the files you have changed and those you still need to add or commit: git status","s":"Check status of changes","u":"/ecalc/docs/contribute/guides/git","h":"#check-status-of-changes","p":1369},{"i":1390,"t":"Add new or changed files git add or adding everything in and below your working directory git add .","s":"Add files","u":"/ecalc/docs/contribute/guides/git","h":"#add-files","p":1369},{"i":1392,"t":"Commit any files you've added with git add, and also commit any files you've changed since then: git commit -m \": : /- Add the changed files git add Commit your changes using the conventional commits formatting for the commit messages. git commit -m \": \" If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code. git fetch git rebase origin/main Push changes to GitHub git push --set-upstream origin /- You can now Create a Pull Request","s":"Pull Requests","u":"/ecalc/docs/contribute/guides/git","h":"#pull-requests","p":1369},{"i":1399,"t":"For external developers, you will contribute to the project through forking. Here's a quick guide: Create your own fork of the repository Clone the project to your machine git clone git@github.com:equinor/ecalc.git To keep track of the original repository add another remote named upstream git remote add upstream git@github.com:equinor/template-fastapi-react.git Create a branch locally with a succinct but descriptive name and prefixed with change type. git checkout -b /- Make the changes in the created branch. Add and run tests for your changes if needed (we only take pull requests with passing tests). Add the changed files git add Commit your changes using the conventional commits formatting for the commit messages. git commit -m \": \" Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code. git fetch upstream git rebase upstream/main Push to your fork. git push origin feature/my-new-feature Submit a Pull Request from a fork. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us. That's it... thank you for your contribution! After your pull request is merged, you can safely delete your branch.","s":"Fork the repository","u":"/ecalc/docs/contribute/guides/git","h":"#fork-the-repository","p":1369},{"i":1401,"t":"INSTALLATIONS","s":"INSTALLATIONS","u":"/ecalc/docs/about/references/keywords/INSTALLATIONS","h":"","p":1400},{"i":1403,"t":"In INSTALLATIONS the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation. The structure of the keywords under installations is linked to the structure in the general consumer overview for an installation. See INSTALLATIONS for more details about usage.","s":"Description","u":"/ecalc/docs/about/references/keywords/INSTALLATIONS","h":"#description","p":1400}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,2.659,1,10.556,2,5.117,3,5.795,4,7.493,5,4.451,6,7.973,7,8.702,8,8.702,9,8.702,10,5.566]],["t/4",[0,2.264,11,3.908,12,2.968,13,2.623,14,3.197,15,2.968,16,3.908,17,3.043,18,3.757,19,2.499,20,3.965,21,4.231,22,2.876,23,2.968,24,3.908,25,3.365,26,1.919,27,3.075,28,4.121,29,5.545,30,3.58,31,3.908,32,3.58,33,3.908,34,1.593,35,2.661,36,6.052,37,2.124,38,3.908,39,2.499,40,3.58,41,2.687,42,3.908,43,2.264,44,2.876,45,2.333,46,6.378,47,3.365,48,1.219,49,2.499,50,1.388,51,2.232,52,1.654,53,0.841,54,1.371,55,1.78,56,1.88,57,1.207,58,3.908,59,2.371,60,3.58,61,1.193,62,3.908,63,2.333,64,0.571,65,2.333,66,0.909,67,1.294,68,1.549,69,3.908,70,2.298,71,3.365,72,3.908,73,2.043,74,3.908,75,2.144,76,1.849,77,3.908,78,2.549,79,3.58,80,1.917,81,1.355,82,1.721,83,3.908,84,3.908,85,2.232,86,2.661]],["t/6",[0,2.38,14,3.301,15,5.915,18,4.255,22,5.732,30,7.135,61,1.535,79,7.135,87,3.983,88,5.079,89,9.854,90,6.705,91,7.787,92,7.787,93,5.732,94,7.787,95,7.135]],["t/8",[0,2.904,13,4.118,41,3.267,61,1.45,64,1.539,71,6.335,82,3.24,96,3.045,97,4.393,98,3.892,99,6.335,100,5.674,101,4.914,102,6.335,103,7.358,104,3.214,105,4.037,106,6.741,107,5.588,108,4.202]],["t/10",[0,3.582,34,3.176,61,1.535,64,1.441,104,3.402,109,5.186,110,4.072,111,7.135,112,4.072,113,5.979,114,3.487,115,5.43,116,3.004,117,5.572,118,5.732]],["t/13",[0,3.175,26,2.689,64,1.24,113,5.146,116,3.271,119,6.441,120,6.441,121,6.242,122,6.441,123,8.481,124,5.146,125,2.302,126,7.302]],["t/15",[0,3.011,3,4.285,61,1.942,64,0.941,68,2.55,96,3.599,105,3.531,111,5.895,116,2.482,117,7.049,118,6.401,119,4.887,127,4.736,128,4.285,129,4.736,130,5.895,131,3.675,132,3.445,133,5.275,134,6.435,135,4.887,136,2.857,137,3.01,138,3.577,139,3.904,140,4.285,141,5.275,142,4.197,143,2.433,144,5.275,145,5.895]],["t/17",[0,3.025,61,1.726,109,4.327,110,4.578,113,6.007,116,2.506,117,7.084,118,7.287,131,3.711,133,5.327,139,5.311,140,4.327,141,5.327,142,4.238,143,2.457,146,3.711,147,3.478,148,3.66,149,3.323,150,6.458,151,5.147,152,4.935,153,2.489,154,2.14]],["t/19",[0,3.271,37,1.332,41,2.628,61,0.748,68,3.738,75,2.083,80,1.862,104,4.302,116,1.464,150,2.476,155,5.243,156,3.796,157,1.714,158,1.537,159,2.716,160,1.548,161,5.489,162,5.876,163,1.78,164,3.796,165,2.794,166,3.478,167,1.595,168,2.342,169,1.237,170,5.918,171,3.533,172,2.168,173,4.334,174,2.716,175,2.342,176,1.694,177,3.796,178,3.478,179,2.883,180,3.269,181,8.213,182,1.781,183,3.269,184,3.796,185,2.987,186,2.476,187,3.796,188,3.796,189,3.796,190,5.096,191,2.647]],["t/21",[0,2.437,12,6.056,104,3.483,150,5.201,151,4.688,192,7.974,193,5.869,194,7.974,195,7.974,196,5.488,197,5.488,198,6.537,199,5.56,200,6.275,201,4.838,202,7.974,203,3.183]],["t/23",[0,2.437,78,5.201,98,4.218,114,4.478,144,6.537,182,2.399,196,5.488,204,7.871,205,5.429,206,6.866,207,2.424,208,5.429,209,7.974,210,4.218,211,5.705,212,6.275]],["t/25",[108,3.572,114,2.8,124,3.794,151,5.708,158,2.532,163,1.063,171,3.038,176,1.79,186,6.332,196,3.431,197,3.431,201,3.794,213,2.899,214,3.927,215,6.947,216,2.169,217,3.27,218,5.73,219,4.258,220,5.73,221,5.545,222,4.67,223,3.927,224,5.948,225,5.384,226,7.374,227,5.73,228,4.258,229,3.927]],["t/27",[37,3.545,114,3.027,196,3.71,197,3.71,206,7.741,207,2.055,208,4.603,211,4.837,224,4.714,230,5.135,231,6.433,232,7.075,233,1.649,234,6.761,235,8.99,236,3.252,237,4.976,238,3.693,239,4.837,240,4.976,241,6.761,242,4.649,243,8.99]],["t/29",[0,2.659,98,4.604,114,3.896,171,4.227,176,2.49,204,6.848,216,3.018,219,5.925,244,5.925,245,6.116,246,3.269]],["t/31",[0,1.947,34,2.599,61,1.256,68,2.526,98,3.371,114,2.853,124,3.867,151,5.08,163,1.084,176,2.473,186,5.636,196,4.741,197,4.741,211,4.56,218,5.839,219,4.339,220,5.839,221,4.935,223,4.002,224,4.444,247,6.373,248,4.84,249,5.839,250,3.692,251,2.426,252,2.492,253,6.373,254,6.373,255,5.015,256,5.839,257,5.487,258,6.373,259,3.97]],["t/33",[61,1.714,104,2.811,161,3.189,163,1.479,176,2.819,179,4.887,183,5.54,199,4.487,227,5.895,233,1.05,244,4.381,248,4.887,249,5.895,252,2.516,256,7.969,257,7.489,260,6.435,261,8.697,262,8.697,263,5.063,264,8.697,265,6.435,266,6.435,267,8.697,268,6.435,269,6.435,270,3.038,271,5.54,272,3.256]],["t/35",[0,2.843,61,1.834,64,1.36,97,4.252,110,3.724,116,2.747,117,6.657,118,6.848,119,5.409,130,6.525,139,4.321,140,4.743,141,5.839,142,4.645,143,3.518,150,4.645,153,2.729,154,2.346,273,5.839,274,6.525,275,6.132,276,6.132,277,6.132]],["t/37",[0,3.303,61,1.65,64,1.58,73,3.181,98,3.218,104,2.657,107,4.62,108,3.474,113,3.69,114,4.839,117,4.352,118,4.477,124,3.69,147,3.256,148,3.426,153,3.207,154,2.004,157,2.746,158,3.874,171,2.955,252,2.378,278,4.786,279,5.573,280,5.459,281,2.845,282,1.732,283,3.89,284,6.082]],["t/40",[113,5.649,114,4.168,143,4.156,223,5.846,285,6.072,286,5.474]],["t/43",[0,2.437,64,1.166,149,4.078,199,5.56,285,6.524,286,5.881,287,5.1,288,5.705,289,5.201,290,7.974,291,6.537,292,3.912,293,6.537,294,3.912,295,5.1,296,5.794]],["t/45",[0,0.326,2,0.627,17,0.811,18,1.355,26,0.626,34,0.435,48,1.939,50,2.083,52,0.451,53,0.741,54,1.208,57,1.692,61,1.674,64,0.669,66,0.801,68,0.783,73,1.033,76,1.674,80,0.523,82,0.869,88,1.288,96,0.441,113,0.647,125,0.934,143,0.747,146,1.966,152,0.809,153,1.319,160,0.435,163,1.806,168,3.117,169,1.878,173,0.907,175,0.657,176,0.565,182,0.594,207,1.046,208,0.726,213,0.494,214,0.669,217,1.033,222,1.656,233,0.894,236,1.327,246,0.4,252,0.417,255,1.554,259,0.49,270,1.909,275,0.918,281,1.29,282,1.151,287,0.682,292,1.353,294,1.984,297,2.171,298,1.288,299,1.974,300,4.285,301,1.31,302,1.809,303,3.324,304,3.631,305,3.259,306,2.171,307,2.4,308,1.7,309,2.528,310,1.083,311,1.144,312,0.6,313,2.004,314,0.976,315,1.05,316,0.592,317,1.945,318,0.809,319,2.822,320,1.656,321,1.144,322,2.48,323,1.924,324,1.974,325,1.477,326,1.5,327,0.839,328,1.809,329,1.974,330,1.974,331,1.066,332,1.066,333,1.066,334,1.066,335,1.066,336,1.066,337,0.976,338,0.762,339,0.57,340,1.637,341,1.315,342,0.962,343,1.445,344,2.976,345,1.5,346,1.5,347,0.874,348,0.577,349,0.762,350,0.695,351,1.994,352,0.809,353,0.6,354,0.513,355,0.647,356,0.976,357,0.695,358,0.481,359,0.726,360,0.669,361,1.066,362,1.24,363,0.976,364,0.976,365,0.617,366,1.066,367,0.809,368,0.976,369,0.71,370,0.71,371,0.839,372,0.422,373,1.066,374,0.669,375,1.76,376,1.319,377,1.346,378,0.95,379,1.066,380,0.726,381,1.066,382,0.836,383,1.057,384,0.839,385,0.805,386,0.915,387,1.066,388,0.695,389,0.657,390,1.619,391,1.809,392,1.7,393,1.218,394,0.941,395,0.811,396,1.974,397,1.974,398,1.974,399,0.809,400,0.839,401,1.674,402,1.7,403,1.7,404,1.619,405,0.809,406,2.375,407,1.066,408,1.046,409,2.245,410,3.442,411,1.066,412,1.066,413,1.066,414,1.066,415,0.743,416,0.809,417,0.726,418,0.976,419,0.695,420,0.976,421,0.592]],["t/47",[0,2.963,2,1.049,13,0.773,26,0.566,34,1.284,59,1.083,61,1.457,64,0.851,68,1.676,70,1.049,78,3.328,82,1.862,96,2.41,104,4.085,105,2.32,113,3.533,114,1.893,116,1.631,121,1.313,124,1.911,127,1.313,140,1.188,143,2.202,146,1.799,147,1.686,148,1.005,150,2.758,153,1.955,154,0.588,155,0.992,157,1.422,159,1.277,160,2.08,161,1.561,162,2.254,163,1.257,169,0.303,172,2.415,175,1.943,176,1.84,182,1.752,190,2.712,191,6.646,193,2.318,196,0.979,197,0.979,216,0.619,221,1.019,236,0.858,245,2.956,259,0.82,270,3.279,272,0.903,282,0.897,283,1.141,287,2.705,288,1.277,289,1.164,291,1.463,292,2.503,294,1.545,303,3.533,304,4.109,313,0.884,315,0.679,317,0.858,339,0.955,340,1.275,354,0.858,355,1.911,367,1.355,370,1.188,371,1.404,389,1.101,400,1.404,405,1.355,416,1.355,421,1.751,422,3.874,423,2.582,424,5.811,425,2.948,426,3.263,427,2.879,428,1.536,429,3.31,430,3.466,431,0.82,432,1.53,433,1.784,434,3.095,435,1.728,436,1.943,437,1.355,438,0.755,439,1.536,440,1.164,441,1.784,442,1.784,443,1.536,444,1.536,445,1.463,446,1.12,447,1.355,448,2.254,449,1.751,450,1.164,451,1.784,452,1.686,453,1.784,454,1.536,455,1.188,456,1.244,457,1.141,458,1.536,459,1.355,460,1.463,461,1.784,462,1.277,463,1.463,464,1.784,465,1.355,466,1.101,467,1.536,468,1.784,469,1.784]],["t/49",[114,4.288,143,3.622,223,6.014,285,6.247,286,5.631]],["t/52",[0,2.437,64,1.166,149,4.078,199,5.56,285,6.524,286,5.881,287,5.1,288,5.705,289,5.201,291,6.537,292,3.912,293,6.537,294,3.912,295,5.1,296,5.794,470,6.056]],["t/54",[13,1.328,28,2.086,37,2.214,45,5.124,61,0.983,81,2.976,109,3.322,114,1.372,116,1.182,121,4.644,143,1.158,149,1.567,153,1.911,154,2.396,160,2.965,163,0.848,169,1.604,176,2.081,193,2.255,196,1.681,205,2.086,208,2.086,212,2.411,233,1.675,245,1.775,251,1.899,259,1.408,270,2.355,272,3.192,282,0.872,283,1.96,285,1.998,292,2.447,294,1.503,325,1.64,339,1.64,354,2.4,355,3.026,371,2.411,426,3.191,430,2.512,436,3.078,439,2.638,450,1.998,455,2.04,471,4.57,472,2.255,473,3.322,474,4.297,475,4.951,476,4.843,477,3.498,478,3.064,479,3.396,480,5.722,481,4.089,482,3.671,483,3.064,484,3.064,485,2.512,486,2.086,487,3.064,488,2.04,489,2.192,490,3.788,491,2.524,492,2.512,493,2.136,494,2.411,495,3.064,496,3.064,497,1.96,498,3.064,499,3.064,500,3.064,501,2.04]],["t/56",[0,2.311,41,3.358,61,1.038,66,2.555,67,1.744,81,1.826,96,2.179,105,4.15,109,3.507,112,3.955,143,1.991,176,1.507,199,3.672,207,1.601,233,1.445,270,3.57,282,2.754,303,3.195,310,2.889,355,3.195,438,2.229,474,2.636,476,6.441,494,4.144,502,8.849,503,6.975,504,3.999,505,3.876,506,3.435,507,3.999,508,4.144,509,4.824,510,3.876,511,5.266,512,5.266,513,2.583,514,3.144]],["t/58",[0,2.153,37,3.242,81,3.204,105,3.867,121,5.187,155,3.917,196,5.07,221,4.025,236,3.39,246,2.647,270,4.362,296,4.082,299,6.611,395,2.895,456,4.913,474,3.528,476,4.693,486,4.798,493,4.913,515,5.352,516,6.067,517,5.042,518,5.042,519,6.456,520,7.047]],["t/60",[2,2.552,14,2.197,20,2.323,26,1.376,48,1.354,52,4.372,61,0.856,64,0.635,109,2.89,148,2.445,149,2.22,153,1.663,163,0.738,169,1.115,221,2.479,233,0.709,252,1.697,272,4,281,4.653,282,1.868,295,4.195,300,4.964,304,3.645,305,2.432,310,2.382,312,2.445,315,4.143,317,2.088,321,2.514,343,1.551,408,1.319,429,2.068,432,2.108,465,3.296,488,2.89,491,2.196,521,8.894,522,4.34,523,4.118,524,7.222,525,3.194,526,3.558,527,3.976,528,3.976,529,4.34,530,4.34,531,1.943,532,3.194,533,3.415,534,3.558]],["t/62",[64,1.4,68,3.796,143,4.226,510,7.049]],["t/65",[48,2.865,272,4.646,304,5.104,305,3.405,432,4.46,535,4.46,536,6.758,537,6.57]],["t/68",[41,3.096,48,2.176,61,1.375,105,3.826,146,3.982,154,2.297,157,3.149,223,4.378,240,5.132,242,3.606,259,3.204,270,3.292,282,3.103,292,3.421,358,4.631,395,3.769,538,2.951,539,4.231,540,4.748,541,2.783,542,6.004,543,4.378,544,6.973,545,5.487,546,5.132]],["t/70",[0,1.717,5,2.874,13,2.435,35,3.825,37,1.247,61,0.701,64,0.821,66,2.234,68,2.227,81,2.992,88,2.318,96,1.47,114,1.591,138,1.975,143,2.125,155,1.975,157,1.605,161,4.275,173,1.633,176,1.994,178,3.256,207,1.08,229,3.528,246,2.111,270,2.652,282,1.012,292,2.756,294,1.743,346,2.699,348,5.206,355,3.409,370,2.366,479,2.419,491,1.798,503,4.745,505,2.616,515,2.699,535,1.726,547,5.129,548,3.06,549,2.273,550,4.228,551,5.293,552,3.554,553,3.06,554,4.421,555,4.037,556,2.796,557,3.554,558,2.543,559,4.267,560,3.918,561,3.554,562,1.647,563,5.129,564,1.71,565,3.554,566,4.838,567,2.543,568,4.136,569,2.913,570,3.06,571,2.913,572,2.796,573,2.156,574,2.419,575,3.06,576,2.616,577,3.554,578,3.554,579,1.95,580,2.616]],["t/72",[17,3.395,48,2.958,52,4.012,53,1.286,57,1.844,63,3.567,76,1.825,161,2.96,163,1.016,176,2.365,203,2.384,210,3.16,221,5.842,270,2.82,272,3.022,303,3.624,304,5.269,305,3.066,312,4.656,315,2.274,339,3.198,340,2.418,341,3.978,431,2.745,523,3.751,535,4.015,536,4.397,537,4.274,581,3.16,582,4.397,583,4.537,584,4.897,585,4.397]],["t/74",[18,4.155,76,3.226,203,4.214,210,4.604,300,6.629,581,4.604,582,6.405,586,6.405]],["t/76",[18,4.397,68,3.54,88,4.366,143,2.531,163,1.954,169,1.519,171,3.251,172,3.823,176,2.556,215,4.789,238,4.128,270,4.216,312,3.77,355,4.061,465,5.083,581,5.317,587,6.693,588,5.487]],["t/79",[0,1.747,2,3.362,13,2.477,14,1.915,48,3.132,64,0.836,68,2.266,88,5.229,104,2.497,105,4.399,196,3.137,240,4.208,270,2.699,282,1.628,312,3.221,355,3.469,363,5.238,428,4.923,438,2.42,462,4.091,463,4.687,493,3.986,545,6.309,546,5.901,549,3.657,589,6.036,590,4.456,591,7.346,592,5.717,593,4.342,594,5.717,595,4.499,596,5.717,597,5.238,598,5.717,599,5.238,600,4.923]],["t/81",[5,4.127,48,3.145,64,1.18,81,2.799,96,3.34,143,3.052,233,1.645,236,3.882,251,3.072,303,4.896,365,4.675,408,2.453,535,3.92,601,5.774,602,6.949,603,5.627]],["t/83",[96,4.142,285,6.528]],["t/85",[64,1.209,82,3.642,161,4.098,172,4.724,173,3.8,176,2.928,246,3.107,315,3.148,353,4.659,358,3.735,604,7.121,605,6.674,606,4.427,607,6.087]],["t/87",[0,1.318,5,2.205,6,8.642,39,2.758,105,2.366,110,2.255,131,2.463,158,1.746,161,4.917,182,1.297,203,1.721,207,2.394,211,3.085,217,2.255,270,2.036,325,2.308,340,3.555,358,1.947,393,2.66,394,4.495,395,2.681,438,2.762,467,7.56,514,2.575,518,4.67,524,3.535,539,2.616,608,4.312,609,8.045,610,4.312,611,7.56,612,3.951,613,3.174,614,3.713,615,3.951,616,3.085,617,4.312,618,3.951,619,3.951,620,3.951,621,4.312,622,7.874,623,4.312,624,4.312,625,4.312,626,3.713,627,3.275,628,2.936,629,6.526,630,7.874,631,6.526,632,2.936,633,6.526]],["t/89",[0,1.732,2,2.112,5,1.837,29,3.291,48,2.875,53,1.22,54,1.26,64,1.026,75,1.971,76,2.435,78,6.711,82,1.582,86,2.446,99,3.093,105,1.971,136,1.595,158,1.454,159,4.054,161,2.808,168,3.496,172,3.236,173,1.65,176,1.622,228,2.446,239,6.593,246,1.349,251,1.367,252,1.404,259,1.65,301,1.164,325,5.164,340,1.454,353,2.023,358,2.559,394,1.712,395,1.475,417,2.446,438,2.398,456,2.504,491,1.817,493,2.504,518,4.054,539,3.438,604,3.093,606,3.033,607,5.165,634,1.622,635,2.826,636,7.326,637,2.446,638,3.592,639,3.291,640,3.624,641,2.826,642,3.592,643,1.728,644,4.459,645,3.093,646,2.446,647,3.592,648,2.343,649,2.57,650,3.592,651,3.093,652,2.2,653,1.946,654,3.291,655,2.945,656,2.728]],["t/91",[0,2.579,61,0.955,67,1.605,98,3.766,100,2.893,101,2.505,114,3.187,143,3.517,160,1.976,163,1.906,169,1.21,174,3.466,176,2.662,191,4.964,207,1.473,233,0.791,289,4.643,313,3.528,341,3.226,348,4.573,368,4.439,372,1.92,431,2.226,477,2.331,569,3.972,627,3.68,657,3.466,658,3.566,659,5.239,660,3.972,661,5.602,662,4.845,663,4.845,664,6.129,665,4.845,666,7.118,667,4.439,668,2.451,669,2.266,670,4.845,671,4.845,672,2.893,673,4.171,674,3.812,675,4.845]],["t/93",[64,1.209,117,5.918,118,6.087,124,5.018,127,6.087,138,4.597,158,3.348,223,5.193,252,4.539,676,6.78,677,3.834,678,8.27,679,7.578]],["t/95",[14,0.682,17,3.243,18,0.801,19,1.302,20,4.227,35,1.386,41,0.904,43,4.32,48,2.855,49,1.302,53,1.363,54,2.222,57,2.657,59,1.235,61,0.401,64,0.517,66,1.837,67,1.171,68,0.807,76,2.122,87,3.551,99,1.752,124,1.235,127,1.498,132,3.717,136,1.569,144,1.668,163,1.556,210,1.077,213,0.943,233,0.332,238,0.836,251,0.775,252,1.382,281,3.248,282,1.977,315,2.129,316,1.964,317,2.691,340,0.824,343,2.263,401,3.394,429,2.666,432,2.717,435,1.117,446,1.278,491,1.03,513,2.744,531,0.911,532,1.498,538,0.861,581,1.077,586,1.498,590,0.904,668,1.03,669,0.952,680,0.769,681,1.278,682,1.601,683,1.498,684,1.498,685,1.864,686,1.752,687,1.179,688,1.601,689,6.23,690,1.668,691,1.668,692,2.035,693,3.238,694,2.035,695,2.035,696,2.035,697,2.035,698,2.035,699,2.035,700,4.714,701,2.684,702,2.035,703,2.035,704,2.035,705,2.035,706,2.035,707,2.035,708,5.489,709,3.043,710,2.035,711,5.452,712,2.035,713,2.035,714,2.035,715,2.035,716,1.355,717,1.196,718,2.416,719,1.215,720,2.035,721,1.668,722,1.041,723,2.18,724,1.302,725,1.498,726,1.546,727,1.498,728,2.601,729,1.668]],["t/97",[55,2.721,57,1.844,59,5.015,64,1.496,76,2.896,81,2.072,88,3.896,98,3.16,114,3.701,168,3.685,176,1.709,207,2.881,246,2.244,270,2.82,283,3.821,342,2.084,362,3.751,372,3.276,434,3.624,449,3.32,474,2.991,477,3.976,716,3.978,718,3.071,730,4.182,731,5.473,732,7.397,733,4.537]],["t/99",[37,2.422,45,4.12,75,3.787,81,2.393,82,3.039,153,2.644,160,2.814,169,1.55,173,3.171,176,2.608,221,3.941,229,4.333,233,1.127,236,3.32,310,3.787,434,4.187,474,3.455,477,4.384,606,3.694,718,2.953,734,5.241,735,5.657,736,4.812,737,6.323,738,5.079,739,6.323,740,5.079,741,5.942]],["t/101",[14,1.737,21,2.961,37,1.819,49,3.316,50,1.841,53,1.116,54,2.624,61,1.474,64,1.283,66,1.206,82,2.283,125,2.029,137,2.425,153,1.986,158,2.099,167,2.177,169,1.492,173,2.382,176,2.51,182,1.56,207,1.576,222,2.494,233,1.432,301,2.423,320,2.494,321,4.332,340,2.099,342,1.808,372,3.477,374,3.255,375,2.651,376,1.986,377,2.027,378,2.494,434,3.145,606,2.775,677,2.403,742,4.749,743,3.095,744,3.095,745,1.898,746,4.463,747,3.614,748,2.494,749,4.463,750,3.937,751,3.452,752,3.815,753,3.937]],["t/103",[17,2.776,18,3.538,41,2.005,56,4.629,57,2.5,61,0.89,76,2.065,80,2.216,125,1.834,137,2.113,158,1.829,163,1.717,169,1.717,252,1.766,305,2.506,434,2.74,535,3.283,581,4.284,586,5.96,689,3.075,730,3.419,754,4.1,755,5.54,756,3.703,757,4.624,758,5.421,759,3.232,760,6.459,761,4.138,762,6.119,763,5.819,764,5.819,765,6.192,766,2.946,767,4.138]],["t/105",[14,1.081,17,1.325,26,1.023,37,1.132,50,1.848,52,2.766,53,1.407,64,1.285,66,1.21,82,2.291,101,1.669,125,0.876,127,2.375,153,1.993,158,1.306,163,1.111,169,1.398,176,0.923,182,0.971,222,2.503,233,1.342,252,1.261,301,2.118,375,2.661,376,1.993,377,2.034,382,3.48,383,2.785,385,2.121,386,1.496,388,2.105,395,2.137,434,1.958,466,1.991,513,2.552,531,1.445,579,1.771,606,1.727,652,1.253,677,1.496,680,1.22,768,2.25,769,3.829,770,1.843,771,2.006,772,1.245,773,5.143,774,2.539,775,2.25,776,2.026,777,2.539,778,2.25,779,2.539,780,2.778,781,3.267,782,3.627,783,2.539,784,4.479,785,2.064,786,2.064,787,2.026,788,2.197,789,2.309,790,2.064,791,2.149,792,2.064,793,2.026,794,2.309,795,2.309,796,2.309,797,2.309,798,2.309,799,2.309,800,2.309,801,2.309,802,2.309,803,2.309,804,2.026,805,2.309,806,2.309,807,2.309,808,2.309,809,2.309,810,2.309,811,2.309,812,2.309,813,2.309,814,2.309,815,2.25,816,1.958,817,1.669,818,1.749,819,3.206,820,4.45]],["t/107",[3,2.341,17,1.444,41,1.561,43,2.037,51,3.182,61,1.098,64,1.151,66,1.296,81,1.219,104,1.536,139,2.133,143,1.33,146,2.008,154,1.158,159,3.987,163,1.553,169,0.947,173,1.615,174,2.516,176,1.006,182,1.676,213,1.63,216,3.704,217,1.839,221,2.008,292,1.725,298,2.293,326,4.232,350,3.634,351,5.289,352,5.256,395,2.843,401,2.133,431,1.615,434,2.133,477,1.691,501,2.341,531,1.574,542,3.027,590,1.561,595,2.767,613,2.588,657,2.516,717,2.067,718,2.781,719,2.099,721,2.883,729,2.883,740,2.588,778,2.452,821,3.027,822,3.057,823,2.67,824,3.221,825,2.883,826,2.516,827,5.094,828,2.249,829,2.67,830,3.027,831,2.767,832,3.027,833,6.341,834,4.797,835,2.767,836,3.027,837,2.67,838,4.797,839,5.105,840,2.767,841,2.67,842,5.105,843,2.516,844,3.221,845,3.221,846,2.883,847,2.249]],["t/109",[37,1.607,41,2.033,48,2.547,57,3.247,61,1.346,68,1.815,76,3.302,82,2.016,137,2.142,153,1.754,154,1.508,160,2.784,169,1.539,182,2.456,203,3.258,231,3.276,300,2.875,305,3.59,316,2.545,317,2.203,320,3.927,322,3.699,429,3.253,449,3.795,535,2.224,677,2.122,689,3.117,718,2.212,730,2.317,732,6.026,738,3.37,754,2.778,755,3.754,848,3.942,849,5.025,850,4.729,851,2.451,852,6.2,853,3.603]],["t/111",[17,2.556,20,4.055,43,4.389,48,2.364,52,1.714,53,1.631,54,3.398,57,2.339,76,1.901,98,2.143,107,3.076,125,1.099,136,1.798,167,1.701,169,1.77,203,3.024,250,2.346,251,1.542,281,3.544,282,2.421,305,3.74,315,3.491,317,1.948,320,1.948,321,3.604,322,2.195,343,2.223,372,1.605,401,4.596,408,2.788,429,1.93,446,2.543,513,1.987,538,2.633,606,2.168,700,4.523,701,3.076,725,2.981,732,6.108,748,1.948,754,2.457,850,2.346,852,3.076,854,2.981]],["t/113",[17,2.79,20,4.352,48,2.537,52,1.925,53,1.75,57,2.51,76,2.076,98,2.406,107,3.454,125,1.234,136,2.019,169,1.722,203,3.245,250,2.634,251,1.731,281,3.803,282,2.568,305,3.579,315,3.673,317,2.188,320,2.188,321,3.935,322,2.464,343,2.427,372,1.802,401,4.933,408,2.472,429,3.237,513,2.231,606,2.434,689,7.143,732,5.414,748,2.188,755,3.728,850,2.634,852,3.454,854,3.347]],["t/115",[14,1.113,17,2.188,20,3.12,41,1.475,43,3.085,48,0.753,53,1.749,54,2.463,57,1.026,61,0.937,64,0.852,66,1.633,67,0.8,68,0.957,80,1.63,82,1.463,87,1.235,96,0.999,104,1.451,122,1.007,125,1.445,132,1.779,136,1.475,143,0.913,153,0.925,157,1.5,163,0.565,167,1.014,169,1.382,182,0.399,203,1.633,207,0.403,216,0.837,233,1.024,259,0.609,270,0.626,281,3.283,282,0.687,301,1.326,305,2.326,317,1.968,325,0.71,348,1.308,350,1.575,352,1.834,354,0.638,372,0.526,389,3.869,395,3.014,401,3.231,408,2.026,409,1.575,429,1.95,435,0.728,449,1.847,452,1.292,466,0.818,488,1.608,513,1.184,531,1.081,535,1.988,538,2.467,549,0.848,555,1.399,560,0.925,562,1.119,564,0.638,589,0.758,590,1.817,606,1.292,613,1.777,635,1.044,668,0.671,669,0.62,681,0.833,683,0.976,689,3.626,700,2.443,718,2.032,724,4.263,729,2.724,732,0.883,749,1.142,752,3.92,766,3.474,770,0.758,771,0.512,772,1.578,815,1.683,827,1.777,829,1.834,830,1.142,831,1.044,832,1.142,834,1.142,836,1.142,837,1.007,838,2.079,840,1.044,848,1.142,854,1.777,855,1.9,856,1.575,857,1.215,858,1.9,859,1.007,860,1.326,861,3.869,862,2.212,863,1.644,864,0.71,865,0.925,866,1.8,867,1.215,868,1.308,869,1.215,870,1.36,871,1.979,872,1.36,873,3.108,874,2.086,875,3.108,876,1.979,877,1.142,878,1.087,879,1.871,880,1.142,881,1.007,882,1.007,883,1.215,884,1.215,885,1.342,886,2.212,887,1.215,888,2.212,889,0.833,890,2.079,891,1.142,892,3.523,893,1.215,894,1.36,895,3.012,896,2.414,897,1.979,898,1.215,899,1.215,900,1.044,901,0.949,902,1.215]],["t/117",[17,1.552,18,0.866,20,2.023,43,0.694,48,0.686,50,1.083,52,1.599,53,1.07,54,1.744,56,1.818,57,1.167,64,0.175,66,1.026,76,0.932,160,0.488,163,1.358,167,0.503,169,1.742,176,1.263,203,1.983,216,2.303,222,1.467,233,1.369,259,0.55,281,2.324,282,0.626,301,1.224,305,2.878,315,1.438,317,1.818,320,1.058,321,1.766,322,1.192,350,1.434,351,2.878,352,1.67,354,0.576,372,0.475,374,0.752,375,1.559,376,1.168,377,1.192,378,0.576,382,1.868,383,1.177,385,0.897,386,0.555,388,0.781,389,3.638,395,3.188,401,2.293,408,1.793,409,1.434,429,1.048,434,0.727,477,0.576,531,0.536,538,0.931,581,1.163,586,1.619,590,1.354,652,0.465,689,3.004,700,0.715,718,0.388,724,4.022,729,1.803,730,0.606,740,0.882,741,1.031,747,0.835,748,1.467,749,1.894,750,0.91,751,0.798,752,3.657,753,0.91,754,1.334,755,1.803,757,1.256,758,2.129,759,0.857,760,3.178,761,1.097,762,2.573,763,1.894,764,1.894,765,2.015,766,2.878,767,1.097,769,0.882,771,0.462,773,2.399,774,0.943,775,0.835,776,0.752,777,0.943,778,1.533,779,0.943,780,1.031,781,1.381,782,1.533,783,0.943,784,1.894,785,0.766,786,0.766,787,0.752,788,0.815,789,0.857,790,0.766,791,0.798,792,0.766,793,0.752,794,0.857,795,0.857,796,0.857,797,0.857,798,0.857,799,0.857,800,0.857,801,0.857,802,0.857,803,0.857,804,0.752,805,0.857,806,0.857,807,0.857,808,0.857,809,0.857,810,0.857,811,0.857,812,0.857,813,0.857,814,0.857,815,2.126,816,0.727,817,0.619,818,0.649,819,1.496,820,2.076,825,0.982,826,0.857,827,2.244,828,0.766,829,0.91,830,1.031,831,0.943,832,1.031,833,1.097,834,1.031,835,0.943,836,1.031,837,0.91,838,1.031,839,2.015,840,1.731,841,0.91,842,1.097,843,0.857,850,1.274,852,1.67,857,1.097,861,3.065,862,1.097,863,0.815,866,0.649,867,1.097,868,1.192,869,1.097,870,1.239,871,1.803,872,1.239,873,2.922,874,1.914,875,2.922,876,1.803,879,0.675,881,0.91,882,0.91,883,1.097,884,1.097,885,1.222,886,2.015,887,1.097,888,2.015,889,0.752,890,1.894,891,1.031,892,3.254,894,1.239,898,1.097,899,1.097,902,1.097]],["t/119",[57,1.118,66,1.113,163,0.97,222,1.742,343,0.748,348,1.134,376,1.387,377,1.415,395,3.441,531,0.937,682,1.647,683,1.54,722,1.852,741,1.802,745,1.326,747,1.459,750,1.589,753,1.589,764,1.802,776,1.314,778,5.841,780,1.802,783,1.647,828,3.647,840,3.765,841,1.589,874,2.273,878,1.715,903,3.62,904,2.092,905,3.62,906,3.62,907,2.092,908,3.336,909,4.492,910,3.62,911,1.917,912,5.903,913,3.336,914,1.715,915,3.62,916,2.524,917,2.092,918,2.092,919,6.463,920,2.092,921,1.917,922,1.647,923,2.092,924,2.092,925,2.092,926,1.647,927,2.092,928,1.917,929,2.465,930,3.317,931,3.62,932,1.647,933,1.647,934,1.917,935,2.092,936,1.715,937,2.411,938,5.224,939,3.923,940,1.802,941,2.092,942,2.092,943,2.092,944,2.092,945,2.092,946,2.092,947,2.092,948,1.917,949,2.092,950,3.62,951,2.092,952,2.092,953,3.62,954,2.092,955,2.092,956,2.092,957,3.62,958,1.802,959,1.917,960,1.802,961,8.378,962,4.909,963,5.224,964,5.702,965,1.802,966,1.802,967,1.802,968,2.092,969,4.785,970,2.092,971,5.702,972,1.917,973,2.092,974,4.785,975,2.092,976,4.785,977,3.317,978,2.092,979,3.62,980,2.092,981,3.62,982,3.62,983,5.224,984,8.002,985,2.092,986,3.62,987,2.092,988,2.092,989,2.092,990,1.647,991,2.092,992,3.117,993,2.092,994,2.092,995,3.117,996,2.092,997,2.092,998,2.092,999,2.092,1000,2.092,1001,4.384,1002,2.092,1003,2.092,1004,3.923,1005,2.092,1006,2.092,1007,2.092,1008,2.092,1009,3.62,1010,2.092,1011,1.917,1012,2.092]],["t/121",[17,3.312,18,1.06,19,1.722,20,3.599,35,1.833,43,4.953,48,2.902,49,1.722,53,1.447,54,2.62,57,2.64,66,2.163,67,1.486,68,1.067,76,2.054,87,2.948,132,3.599,136,1.195,163,1.454,168,1.661,179,2.045,213,2.079,233,0.44,238,1.106,251,1.025,252,1.053,281,2.696,282,1.641,315,1.707,316,1.497,317,2.157,343,2.402,401,1.634,429,2.746,446,1.691,452,1.441,491,1.362,513,1.321,531,1.206,562,2.672,581,1.424,668,1.362,669,1.259,682,2.119,683,1.982,684,1.982,685,2.467,686,2.318,687,1.56,688,2.119,690,2.207,691,2.207,693,2.467,700,5.348,701,3.406,708,5.496,709,2.318,711,5.788,716,1.793,717,1.583,718,2.419,721,2.207,722,1.377,723,2.767,724,1.722,725,1.982,726,2.045,727,1.982,728,1.982,778,1.877,843,1.926,851,2.401,1013,2.467,1014,2.692,1015,2.692,1016,2.692,1017,5.788,1018,2.692,1019,2.692,1020,2.692,1021,2.692,1022,2.467,1023,2.467,1024,2.692,1025,2.318,1026,4.485]],["t/123",[55,2.796,57,1.895,59,5.11,64,1.231,76,2.938,81,2.129,88,4.004,98,3.247,114,3.771,168,3.787,176,1.757,207,2.923,246,2.306,270,2.898,283,3.926,342,2.141,372,3.338,434,3.724,449,3.412,474,3.073,477,4.052,716,4.088,718,3.115,730,4.262,731,5.624,732,7.459,733,4.662]],["t/125",[37,2.422,45,4.12,75,3.787,81,2.393,82,3.039,153,2.644,160,2.814,169,1.55,173,3.171,176,2.608,221,3.941,229,4.333,233,1.127,236,3.32,310,3.787,434,4.187,474,3.455,477,4.384,606,3.694,718,2.953,734,5.241,735,7.471,736,4.812,737,6.323,738,5.079,739,6.323,740,5.079]],["t/127",[14,1.408,21,2.401,37,2.246,49,2.689,50,1.493,52,1.779,53,1.378,54,2.72,61,1.528,63,2.51,64,1.267,66,0.978,82,1.851,125,1.737,137,1.966,153,2.452,158,1.702,167,1.766,169,1.586,171,2.042,173,1.931,176,2.669,182,1.265,207,2.357,222,2.022,233,1.523,301,2.074,320,2.022,321,3.708,340,1.702,342,1.466,372,3.073,374,2.639,375,2.15,376,1.61,377,1.643,378,2.022,434,2.55,595,3.308,606,3.427,648,2.742,655,3.446,677,1.948,742,3.851,743,2.51,744,4.628,745,1.539,746,3.619,747,2.931,748,2.022,750,3.192,751,4.263,752,3.094,753,3.192,855,3.308,1027,3.619,1028,3.619,1029,3.619,1030,3.619,1031,3.619,1032,2.55]],["t/129",[17,4.032,18,3.046,56,3.723,57,3.202,64,0.795,169,1.316,251,2.07,252,2.126,282,1.548,434,3.299,581,5.487,687,4.483,730,3.915,754,4.695,757,4.419,758,4.359,759,7.022,760,6.278,1033,5.437,1034,7.09,1035,4.682,1036,3.247,1037,4.682,1038,7.022,1039,7.09,1040,5.537,1041,4.682]],["t/131",[3,2.305,17,2.26,19,3.52,20,1.853,41,1.537,61,1.085,64,1.001,66,1.593,104,1.512,139,2.1,146,1.977,154,1.14,158,1.401,163,1.951,169,0.936,173,1.59,176,0.991,182,2.061,213,1.605,216,3.613,217,1.81,221,1.977,252,2.151,292,1.698,294,1.698,298,2.258,326,2.629,351,3.968,434,2.1,449,1.924,477,1.665,542,2.98,555,2.005,590,1.537,595,2.724,657,2.477,717,2.035,718,2.759,722,1.77,728,2.548,740,2.548,778,2.413,821,2.98,822,1.899,823,2.629,824,3.171,825,2.838,826,2.477,827,4.05,828,3.52,829,2.629,831,2.724,835,2.724,837,7.494,843,2.477,844,3.171,856,3.589,1004,4.511,1042,2.98,1043,2.838,1044,3.171,1045,4.738,1046,2.98,1047,2.98,1048,2.98,1049,2.98,1050,3.171,1051,2.98,1052,3.171,1053,2.629,1054,3.461,1055,3.461,1056,2.724,1057,3.171]],["t/133",[48,2.958,57,3.316,76,3.282,154,1.968,160,3.371,169,1.612,182,2.852,231,4.274,316,3.32,317,2.874,320,3.976,322,3.237,429,3.939,449,4.595,677,2.769,718,2.678,730,3.022,732,5.505,738,4.397,754,3.624,848,5.143,849,6.084,850,4.789,851,3.198,852,4.537]],["t/135",[17,2.776,20,3.618,43,5.575,48,2.109,52,1.912,53,1.743,54,3.544,57,1.395,98,2.389,107,3.43,125,1.226,136,2.005,169,1.717,250,2.617,251,1.719,281,3.788,282,2.74,305,3.569,315,3.844,320,2.173,321,3.915,343,2.415,372,1.79,408,2.732,446,4.243,513,3.972,583,3.43,606,2.418,700,5.366,701,3.43,725,4.974,732,5.985,748,2.173,854,3.324]],["t/137",[17,3.989,48,2.375,53,2.302,57,2.35,169,1.651,305,3.602,317,3.661,322,4.124,401,6.489,408,2.952,429,4.627,434,4.617,732,6.467]],["t/139",[0,1.705,14,1.631,17,2.539,20,2.987,26,0.53,41,1.321,43,4.366,45,0.999,48,0.522,51,0.955,53,1.442,54,2.507,57,0.918,61,1.32,64,0.979,66,2.078,67,1.33,70,0.983,82,0.737,87,0.855,96,2.558,104,1.299,125,1.514,132,2.15,136,1.783,143,0.632,147,1.592,163,1.392,169,1.139,182,1.679,207,0.508,213,0.775,216,0.58,233,1.009,250,0.969,270,0.79,281,2.61,282,0.476,305,2.293,312,0.942,315,0.637,317,1.431,343,0.598,348,0.906,394,2.32,401,2.437,408,2.036,409,1.091,429,0.797,446,3.504,449,2.706,452,0.895,462,1.197,463,1.371,488,1.114,491,0.846,513,1.97,531,1.332,543,1.05,549,1.07,555,0.969,560,1.166,562,1.379,564,1.932,589,0.955,590,0.743,635,1.316,668,1.505,669,1.391,680,0.632,683,1.231,700,4.5,701,2.259,718,2.442,722,0.855,724,2.569,725,3.584,728,1.231,732,1.114,743,1.776,744,0.999,752,1.231,770,0.955,771,0.645,827,1.231,829,1.27,835,1.316,837,2.259,851,2.987,855,1.316,856,1.091,871,1.371,873,1.99,875,1.99,877,1.44,878,3.992,885,0.93,893,2.725,894,2.743,895,1.231,897,1.371,900,1.316,937,1.981,958,4.804,1004,3.992,1025,2.561,1027,1.44,1028,1.44,1030,1.44,1045,4.192,1046,2.561,1047,1.44,1048,1.44,1049,2.561,1051,1.44,1053,1.27,1058,1.139,1059,1.371,1060,1.532,1061,1.532,1062,1.532,1063,1.532,1064,2.34,1065,1.44,1066,1.44,1067,1.532,1068,4.869,1069,2.974,1070,1.532,1071,1.673,1072,0.613,1073,1.673,1074,1.532,1075,1.532]],["t/141",[0,1.667,17,2.543,18,0.773,19,1.256,20,1.051,43,1.984,48,0.613,50,0.697,52,0.831,53,1.464,54,2.173,56,0.944,57,1.407,61,1.076,66,1.582,76,1.047,96,2.258,160,0.801,163,1.835,169,1.698,176,1.946,216,2.69,222,0.944,233,1.474,281,2.131,282,0.559,305,2.714,315,1.304,317,1.648,320,0.944,321,1.984,322,1.064,351,2.639,372,0.778,374,1.233,375,1.004,376,0.752,377,0.767,378,0.944,394,2.6,401,2.078,408,2.068,409,1.28,429,0.935,434,1.191,446,1.233,477,0.944,513,1.68,531,0.879,581,1.039,590,0.872,687,1.137,700,2.045,701,1.491,718,1.11,722,1.752,724,2.914,725,1.445,730,0.993,735,1.609,740,1.445,743,1.172,747,1.369,748,1.648,750,1.491,751,2.281,752,2.521,753,1.491,754,2.078,757,1.121,758,1.106,759,2.451,760,2.191,778,1.369,825,1.609,826,1.405,827,2.521,828,2.191,829,1.491,831,1.545,835,1.545,837,5.892,843,1.405,850,1.137,852,1.491,871,1.609,873,2.258,875,2.258,885,1.091,894,3.074,937,2.281,1004,2.808,1025,1.69,1027,2.949,1028,2.949,1029,1.69,1030,2.949,1031,1.69,1032,1.191,1034,1.799,1038,2.451,1039,1.799,1040,1.405,1041,1.69,1042,1.69,1043,1.609,1044,1.799,1045,2.949,1046,1.69,1047,1.69,1048,1.69,1049,1.69,1050,1.799,1051,1.69,1052,1.799,1053,1.491,1057,1.799,1060,1.799,1061,1.799,1062,1.799,1063,1.799,1064,2.695,1072,0.719,1074,1.799]],["t/143",[163,0.438,348,1.397,350,1.681,351,6.57,352,1.958,395,1.776,682,2.029,683,1.897,735,2.113,747,1.798,750,1.958,753,1.958,840,2.029,843,3.094,878,2.113,911,2.362,912,2.362,921,3.962,926,6.207,928,2.362,932,5.147,933,2.029,934,2.362,938,2.362,958,2.22,959,2.362,962,2.22,963,2.362,972,2.362,990,2.029,992,2.22,995,2.22,1001,3.962,1011,5.119,1029,2.22,1031,2.22,1076,4.325,1077,4.325,1078,5.119,1079,2.578,1080,2.578,1081,2.578,1082,2.578,1083,2.578,1084,2.578,1085,2.578,1086,2.578,1087,2.578,1088,2.578,1089,2.578,1090,2.578,1091,2.578,1092,2.578,1093,2.578,1094,2.578,1095,2.578,1096,2.578,1097,2.578,1098,2.578,1099,2.578,1100,2.578,1101,2.578,1102,2.22,1103,2.578,1104,2.578,1105,2.578,1106,2.578,1107,2.578,1108,2.578,1109,2.578,1110,2.578,1111,2.578,1112,2.578,1113,2.578,1114,2.578,1115,2.578,1116,2.578,1117,2.578,1118,2.578,1119,2.578,1120,2.578,1121,2.578,1122,2.578,1123,4.325,1124,8.554,1125,4.325,1126,2.578,1127,5.587,1128,2.578,1129,2.578,1130,2.578,1131,2.578,1132,6.541,1133,2.578,1134,2.362,1135,2.578,1136,2.578,1137,2.578,1138,2.578,1139,4.325,1140,2.578,1141,4.325,1142,2.578,1143,5.587,1144,4.325,1145,2.578,1146,2.113,1147,5.587,1148,8.381,1149,2.578,1150,2.578,1151,2.578,1152,2.578,1153,2.578,1154,2.578,1155,2.578,1156,2.578,1157,2.578,1158,2.578,1159,2.578,1160,2.578,1161,2.578,1162,2.578]],["t/145",[17,2.823,20,2.958,35,2.369,37,1.221,43,3.982,48,3.085,49,2.226,53,1.19,54,2.747,57,1.706,66,1.285,68,1.379,76,1.688,87,2.826,132,2.958,136,1.545,163,1.546,179,2.643,213,1.613,233,0.568,238,1.429,252,1.36,281,3.994,282,2.229,315,2.103,316,1.934,343,3.051,354,2.658,446,2.185,491,1.76,513,2.711,531,3.077,562,3.186,583,4.197,653,2.994,676,2.852,689,5.813,690,2.852,691,2.852,700,4.104,708,6.69,709,2.996,711,7.352,716,2.317,717,2.046,718,2.227,722,1.779,725,2.561,772,2.131,1013,3.188,1017,2.996,1022,3.188,1023,3.188,1163,3.188,1164,3.479,1165,3.479,1166,3.479,1167,3.479,1168,3.479,1169,3.479,1170,3.479,1171,2.996,1172,2.996]],["t/147",[55,3.143,57,2.131,64,1.492,76,2.785,81,2.393,88,4.501,114,4.08,168,4.258,176,1.975,207,3.299,213,4.225,233,1.127,283,4.414,372,2.735,474,3.455,477,3.32,730,3.492,732,7.514,1173,6.901,1174,6.323]],["t/149",[45,5.129,160,3.503,169,1.461,176,2.997,233,1.402,236,4.132,477,4.132,674,6.76,688,6.76,718,2.783,1175,9.018]],["t/151",[5,2.899,17,2.328,50,2.013,53,1.716,54,3.234,55,2.582,57,1.75,66,1.319,87,2.899,101,4.121,168,3.497,169,1.355,176,2.281,182,2.398,222,2.727,233,1.505,236,2.727,250,3.284,282,2.269,301,2.582,315,3.508,343,2.025,372,2.247,375,2.899,376,2.172,377,2.216,378,2.727,380,5.426,539,3.439,718,1.837,743,3.385,745,2.076,747,3.953,748,2.727,1176,3.559,1177,3.697,1178,4.881,1179,4.881,1180,4.881]],["t/153",[37,1.116,50,1.13,53,1.757,61,1.721,64,1.193,66,0.74,67,1.703,82,1.401,96,1.316,101,1.645,125,0.863,146,1.817,153,1.219,158,1.288,169,1.101,182,1.547,207,1.563,216,1.783,233,1.057,236,2.474,237,2.341,252,2.53,301,2.978,315,3.107,340,1.288,360,1.997,376,1.219,377,2.01,382,2.176,383,1.703,385,1.297,394,1.516,419,2.075,449,1.768,507,2.416,562,1.474,581,1.683,605,2.075,652,1.997,653,3.507,654,2.914,700,1.899,771,1.983,772,1.227,775,2.218,785,2.034,787,1.997,815,2.218,816,3.12,817,1.645,818,1.724,819,1.56,858,2.503,863,2.166,1036,1.899,1177,2.075,1181,2.914,1182,2.914,1183,2.914,1184,3.905,1185,2.276,1186,2.416,1187,1.997,1188,2.503,1189,1.87,1190,2.416,1191,4.711,1192,2.914,1193,4.215,1194,5.573,1195,3.181,1196,2.503,1197,4.711,1198,3.172,1199,2.416,1200,2.914,1201,2.914,1202,2.341,1203,2.914,1204,2.416,1205,2.914,1206,2.416,1207,2.914,1208,2.503,1209,2.914,1210,2.503,1211,2.914,1212,2.503,1213,2.914,1214,2.503,1215,2.914,1216,2.503,1217,2.914,1218,4.046,1219,2.341,1220,2.914]],["t/155",[17,4.483,18,2.462,56,3.008,57,3.37,61,1.233,76,1.911,167,2.627,169,1.451,216,2.958,236,3.008,282,1.781,305,2.319,581,5.136,730,3.164,754,3.794,757,3.572,758,3.523,760,6.21,1038,6.104,1041,5.384,1221,7.816,1222,5.384,1223,7.816,1224,7.816]],["t/157",[17,2.643,18,2.533,19,4.116,55,3.961,57,1.987,61,1.268,64,0.941,76,2.658,101,3.327,125,2.36,158,2.605,163,1.479,169,1.094,182,1.936,203,2.568,207,1.956,216,2.231,236,3.095,305,2.387,312,3.625,355,3.904,429,4.144,606,3.445,676,5.275,682,5.063,683,4.736,754,3.904,828,4.116,849,6.401,850,3.728,1225,4.04,1226,5.275,1227,4.381]],["t/159",[2,2.019,5,1.007,17,0.809,37,0.691,41,0.874,43,1.141,48,1.425,52,0.833,53,1.755,54,3.558,55,0.897,57,0.608,61,1.607,63,1.176,64,0.668,66,1.585,67,1.513,80,0.966,82,0.867,96,1.421,101,1.018,115,1.373,125,1.683,140,1.311,146,1.124,153,0.754,157,0.889,158,1.849,167,0.827,169,1.321,182,1.374,207,1.044,216,0.683,233,1.013,236,1.652,246,1.29,250,1.141,251,1.307,252,0.77,259,0.905,281,3.812,282,1.3,301,2.01,305,2.881,315,2.789,316,1.909,317,2.197,320,0.947,340,0.797,343,0.704,354,1.652,355,1.195,358,2.062,372,0.78,376,0.754,377,0.77,395,0.809,408,1.886,435,1.08,513,3.043,535,0.956,538,2.625,539,1.195,550,1.195,562,0.913,564,0.947,579,1.08,583,2.608,603,2.394,606,1.054,644,1.549,653,1.861,668,2.31,669,2.136,677,1.592,681,1.236,718,0.638,722,1.007,723,2.817,724,2.921,745,0.721,748,0.947,756,3.743,766,2.24,770,1.124,771,0.759,772,1.761,815,1.373,818,1.067,861,2.119,864,1.054,870,1.109,872,1.109,873,2.263,875,2.263,879,1.109,885,1.094,894,1.109,901,1.409,1032,1.195,1058,1.341,1146,3.743,1172,1.695,1177,1.284,1178,1.695,1179,2.957,1188,2.702,1227,1.341,1228,1.969,1229,1.969,1230,1.695,1231,1.804,1232,2.608,1233,1.969,1234,1.804,1235,1.614,1236,1.341,1237,3.146,1238,1.614,1239,1.804,1240,1.804,1241,1.804,1242,1.449,1243,1.804,1244,1.695,1245,1.695,1246,3.146,1247,1.969,1248,1.804,1249,1.804,1250,1.695]],["t/161",[17,1.031,18,0.988,48,0.783,50,1.502,52,1.062,53,1.18,54,1.484,56,1.207,57,1.306,64,0.367,66,0.984,76,0.767,160,1.024,163,0.719,169,1.817,176,1.568,203,1.002,222,1.207,233,1.57,259,1.153,281,3.64,301,1.37,305,3.224,315,0.955,317,2.636,320,1.207,354,2.034,372,0.995,375,1.284,376,0.962,377,1.653,378,1.207,380,1.709,382,1.79,383,1.344,385,1.024,395,1.031,408,2.182,477,1.207,513,2.688,581,1.328,583,1.906,674,1.975,676,2.058,700,1.499,722,1.284,724,2.705,730,1.27,747,1.75,748,2.034,754,2.566,757,1.434,758,1.414,766,2.758,771,0.968,775,1.75,785,1.605,787,1.576,815,2.949,816,1.523,817,1.298,818,2.292,819,1.231,828,1.605,850,1.454,861,2.609,863,1.709,870,1.414,872,1.414,873,2.715,875,2.715,879,1.414,885,1.395,894,1.414,1146,3.467,1175,2.161,1178,3.641,1179,4.718,1180,2.161,1184,1.906,1191,2.3,1193,2.058,1194,2.161,1197,3.874,1198,2.609,1199,1.906,1200,2.3,1201,2.3,1202,1.847,1203,2.3,1204,1.906,1205,2.3,1206,1.906,1207,2.3,1208,1.975,1209,2.3,1210,1.975,1211,2.3,1212,1.975,1213,2.3,1214,1.975,1215,2.3,1216,1.975,1217,2.3,1218,3.328,1219,1.847,1220,2.3,1221,2.3,1223,2.3,1224,2.3,1226,2.058,1227,2.879,1231,2.3,1237,2.3,1239,2.3,1240,2.3,1241,2.3,1242,1.847,1246,2.3,1248,2.3,1249,2.3,1250,2.161,1251,2.51]],["t/164",[57,1.781,163,0.981,343,2.06,531,2.582,747,4.021,932,4.538,1078,5.284,1180,4.965,1252,5.767,1253,5.767,1254,5.767,1255,5.767,1256,5.767,1257,5.767,1258,5.767,1259,5.767,1260,5.767,1261,5.767,1262,5.767,1263,5.767,1264,5.767,1265,5.767,1266,5.767,1267,5.767,1268,5.767,1269,5.767,1270,5.767,1271,5.767,1272,5.767,1273,5.767,1274,5.767,1275,5.767,1276,5.767,1277,5.767,1278,5.767,1279,5.767,1280,5.767,1281,5.767,1282,5.767,1283,5.767,1284,5.767,1285,5.767,1286,5.767,1287,5.767,1288,5.767,1289,5.767,1290,5.767,1291,5.767,1292,5.767,1293,5.767,1294,5.767]],["t/166",[1175,6.949,1295,8.07,1296,8.07,1297,8.07,1298,8.07,1299,8.07,1300,8.07,1301,8.07,1302,8.07,1303,8.07,1304,8.07,1305,8.07,1306,8.07,1307,8.07,1308,8.07,1309,8.07,1310,8.07,1311,8.07]],["t/168",[0,1.91,2,2.396,5,2.084,17,1.674,20,2.181,44,2.999,48,1.951,49,2.606,52,1.725,53,1.98,55,1.856,57,2.348,61,1.232,64,1.419,65,2.433,73,3.269,76,1.91,81,1.413,97,2.433,98,2.156,100,2.433,101,3.932,104,1.78,114,2.799,116,1.572,132,2.181,136,1.809,147,2.181,154,1.342,158,1.65,161,2.019,176,2.176,182,1.881,205,2.774,207,3.25,233,0.665,246,1.531,252,1.593,282,1.78,292,1.999,301,2.025,310,2.236,313,2.019,315,1.551,343,2.233,362,2.559,369,2.714,372,1.615,449,2.265,477,1.96,493,2.841,637,2.774,718,2.763,730,2.062,1072,1.492,1312,4.075,1313,4.919,1314,2.999,1315,2.606,1316,4.075,1317,4.075,1318,2.841]],["t/170",[0,1.849,5,1.999,13,1.693,14,2.028,34,2.468,35,5.043,37,2.599,45,2.333,48,1.219,49,3.871,53,1.303,54,2.599,55,3.374,61,1.779,64,0.885,76,1.194,87,1.999,93,2.876,98,3.202,100,4.423,114,1.75,122,2.968,124,2.371,125,1.06,131,3.457,132,2.092,137,1.828,158,1.582,169,0.664,173,1.795,176,2.849,182,1.821,207,2.536,233,0.638,238,1.605,246,1.468,282,1.113,292,1.917,301,1.961,305,1.449,310,2.144,315,1.487,342,2.111,358,1.765,369,2.602,372,1.549,440,2.549,564,1.88,643,1.88,716,2.602,718,1.961,734,2.968,736,2.725,743,2.333,744,2.333,1032,2.371,1058,2.661,1315,2.499,1319,4.22,1320,3.204,1321,3.58,1322,3.58,1323,3.908,1324,3.365,1325,3.03,1326,2.968,1327,3.908,1328,2.876,1329,2.968]],["t/172",[26,2.441,48,2.402,54,2.701,55,3.506,64,1.125,154,2.536,169,1.663,176,2.203,207,2.974,233,1.597,246,2.892,252,3.009,353,4.336,372,3.051,491,3.895,606,4.121,607,5.666,1174,7.053,1330,7.698]],["t/174",[34,2.757,37,2.373,55,3.079,61,1.333,64,0.988,98,3.577,125,2.44,171,3.284,173,3.106,176,3.207,207,3.071,233,1.758,310,3.71,342,2.358,374,4.245,380,4.603,436,4.171,734,5.135,748,3.252,751,4.502,1032,4.102,1331,4.714,1332,5.32,1333,5.135]],["t/176",[0,2.924,14,2.038,15,4.62,39,3.89,49,3.89,52,2.574,57,2.584,64,0.889,71,5.237,76,1.859,131,3.474,137,2.845,154,2.004,167,2.555,201,3.69,251,2.315,282,1.732,310,3.338,313,3.014,315,4.114,316,4.652,321,3.524,340,2.462,343,2.991,446,5.255,459,6.357,505,4.477,538,2.574,560,4.241,727,6.16,1334,6.082,1335,4.986,1336,5.573]],["t/178",[57,3.088,61,1.306,81,2.298,87,3.389,96,2.742,108,3.785,159,4.741,182,2.669,252,2.591,272,3.353,281,3.1,282,1.887,313,3.284,315,3.806,316,5.558,342,2.312,372,2.627,491,3.353,539,4.02,564,3.188,677,3.072,748,3.188,1058,4.512,1326,7.595,1337,4.413,1338,4.512,1339,6.071]],["t/180",[169,1.809,173,4.051,176,3.27,233,1.439,315,3.356,372,3.495,436,5.44,748,4.242]],["t/182",[57,2.35,283,4.867,343,2.719,386,3.528,531,3.407,851,4.074,863,5.181,1326,5.78,1340,7.61,1341,7.61,1342,9.711,1343,7.61,1344,7.61,1345,7.61,1346,7.61,1347,7.61,1348,7.61,1349,7.61,1350,7.61,1351,7.61,1352,7.61,1353,7.61]],["t/184",[50,3.217,57,2.797,343,3.236,369,6.031,531,4.055,851,4.848,1354,6.48,1355,6.456]],["t/187",[0,2.59,54,3.942,64,1.239,68,2.456,76,1.893,85,3.538,132,3.317,135,4.705,143,2.343,158,2.508,167,2.602,210,3.277,229,3.89,233,1.011,250,3.589,311,3.589,514,3.699,516,5.334,538,2.622,560,4.32,680,2.343,700,3.699,718,2.007,745,3.104,771,3.269,1338,4.218,1356,5.079,1357,6.195,1358,7.766,1359,6.195,1360,6.195,1361,6.195,1362,4.875]],["t/189",[0,0.936,10,1.96,14,1.671,34,1.249,37,2.552,41,2.215,54,3.736,61,0.604,64,0.448,66,1.996,67,2.409,73,2.609,80,1.503,85,3.603,104,2.179,125,1.973,149,1.567,151,1.801,167,2.65,216,1.73,233,0.5,246,1.151,301,2.356,307,2.136,311,1.775,342,1.069,343,1.095,358,1.383,376,3.613,386,2.312,417,2.086,449,1.703,491,2.524,513,1.503,535,1.488,550,3.026,564,2.4,579,2.737,589,1.75,626,4.295,632,2.086,640,3.191,657,2.192,680,1.886,718,1.616,721,2.512,744,1.829,745,3.572,901,2.192,1185,2.192,1328,2.255,1329,3.788,1363,3.064,1364,5.489,1365,2.81,1366,3.671,1367,2.255,1368,4.57,1369,2.086,1370,2.255,1371,1.859,1372,2.255,1373,3.064,1374,1.829,1375,1.503,1376,1.89,1377,2.411,1378,2.136,1379,3.064,1380,4.089,1381,2.773,1382,2.807,1383,2.807,1384,2.807,1385,2.807,1386,2.638,1387,2.327,1388,2.638,1389,1.924]],["t/191",[26,2.528,37,2.798,50,2.832,54,3.51,66,1.855,93,5.869,116,3.075,167,3.349,282,2.271,301,2.584,376,3.055,377,3.91,438,3.375,745,2.92,856,5.201,929,5.429,1390,6.866]],["t/193",[26,1.797,37,1.989,54,3.234,61,1.571,64,1.165,66,1.319,104,2.476,116,2.186,137,2.652,148,3.193,158,2.295,167,3.348,176,1.622,207,1.723,208,3.859,216,1.966,217,2.964,221,3.237,244,3.859,282,2.269,298,5.198,301,1.837,311,3.284,313,2.809,357,3.697,376,2.172,377,3.116,588,6.533,680,2.143,718,1.837,745,4.196,864,4.266,929,3.859,1225,3.559,1318,3.953,1391,4.881]],["t/195",[34,3.821,50,3.918,54,2.526,66,2.179,110,3.765,169,1.224,176,2.06,222,3.463,233,1.175,372,2.853,374,4.52,375,3.682,376,3.59,377,3.663,378,3.463,385,2.936,781,4.52,1189,4.233,1392,6.198,1393,6.198,1394,4.901]],["t/198",[26,2.469,37,2.733,50,2.766,54,3.458,66,1.811,93,5.732,116,3.004,282,2.218,301,2.523,376,2.984,377,3.852,438,3.296,718,2.523,745,3.609,856,5.079,929,5.302,1390,6.705,1395,7.787]],["t/200",[26,2.952,50,3.306,66,2.166,116,3.591,376,3.567,377,3.64,745,3.41]],["t/202",[34,3.821,50,3.918,54,2.526,66,2.179,110,3.765,169,1.224,176,2.06,222,3.463,233,1.175,372,2.853,375,3.682,376,3.59,377,3.663,378,3.463,380,4.901,385,2.936,781,4.52,1189,4.233,1392,6.198,1393,6.198,1394,4.901]],["t/204",[50,3.448,66,2.258,169,1.651,176,2.778,222,4.67,233,1.585,372,2.479,374,5.356,375,4.965,376,3.72,377,3.796,378,4.67,380,4.258,722,3.198,1328,4.603,1396,6.253,1397,8.53,1398,6.253,1399,6.253,1400,6.253]],["t/206",[10,3.89,14,2.804,20,3.256,45,3.632,48,2.612,49,3.89,57,1.878,61,1.199,66,1.415,87,3.111,125,2.271,136,3.716,182,1.83,216,2.109,221,5.465,251,3.186,342,2.122,343,2.173,426,3.89,435,3.338,438,2.574,476,5.574,518,5.989,640,3.89,718,2.712,738,4.477,1032,3.69,1176,3.819,1401,6.082,1402,5.573,1403,5.573,1404,5.573,1405,5.237,1406,5.573,1407,6.082]],["t/208",[48,3.03,50,2.703,52,3.221,57,2.998,63,5.798,125,2.065,136,3.379,278,5.988,343,3.47,531,3.407,543,4.778,659,5.601,718,3.146,851,4.074,1354,6.948,1408,6.972,1409,6.239]],["t/210",[14,1.328,48,1.237,53,0.854,57,1.6,66,1.739,76,1.87,136,1.76,137,1.855,163,1.429,169,1.545,176,1.965,207,0.707,233,0.999,259,1.069,305,1.47,343,0.831,372,2.722,389,2.446,395,1.629,408,1.205,531,1.041,677,2.837,718,1.983,722,2.028,723,2.446,743,2.367,791,2.64,851,2.122,864,1.245,873,1.965,875,1.965,894,2.233,929,1.584,932,1.83,939,1.907,962,2.003,977,2.131,992,2.003,995,2.003,1017,2.003,1032,4.167,1064,3.12,1072,2.242,1075,2.131,1172,3.414,1406,2.131,1410,3.25,1411,3.965,1412,3.965,1413,2.326,1414,2.326,1415,2.326,1416,2.326,1417,5.018,1418,3.965,1419,2.326,1420,1.907,1421,2.326,1422,3.965,1423,7.701,1424,2.131,1425,2.131,1426,2.131,1427,2.131,1428,5.608,1429,2.131,1430,2.131,1431,2.131,1432,2.131,1433,3.633,1434,2.131,1435,2.131,1436,2.131,1437,2.131,1438,6.436,1439,2.131,1440,2.131,1441,4.747,1442,4.747,1443,7.701,1444,2.131,1445,2.131,1446,2.131,1447,2.131,1448,2.131,1449,2.131,1450,2.131,1451,2.131,1452,3.633,1453,2.131,1454,2.131,1455,2.131,1456,2.131,1457,2.131,1458,2.131,1459,6.849,1460,3.25,1461,2.131,1462,2.131,1463,2.131,1464,2.131,1465,3.414,1466,2.131,1467,2.131,1468,2.131,1469,2.131,1470,2.131,1471,2.131,1472,1.907,1473,2.131]],["t/212",[0,0.883,10,4.965,12,2.196,13,1.253,14,2.601,26,0.917,37,1.014,52,2.565,53,1.9,57,1.469,61,0.57,63,3.619,64,1.135,66,1.806,67,2.923,73,3.169,75,2.61,104,1.263,125,2.266,139,1.754,147,1.548,151,1.7,173,2.186,176,0.827,182,0.87,207,1.446,221,1.651,236,1.391,246,1.086,282,1.355,294,1.418,295,1.849,311,1.675,316,1.607,343,1.7,358,2.148,376,1.108,393,2.935,426,4.492,438,1.224,449,1.607,456,2.016,476,1.925,513,2.334,523,4.874,531,2.714,579,3.326,640,1.849,648,1.886,652,1.123,668,2.407,669,2.225,680,3.337,718,0.937,733,2.196,744,2.84,772,2.709,851,1.548,854,2.128,1036,1.726,1314,2.128,1326,2.196,1364,1.754,1365,1.629,1368,4.358,1369,1.968,1370,2.128,1371,1.754,1372,2.128,1374,1.726,1375,1.418,1376,1.784,1388,2.489,1403,2.649,1404,2.649,1474,2.196,1475,2.649,1476,4.757,1477,2.649,1478,2.37,1479,1.849,1480,2.649,1481,2.649,1482,1.886,1483,1.849,1484,2.891,1485,2.37,1486,2.128,1487,2.37,1488,2.891,1489,2.891,1490,2.891,1491,2.891]],["t/214",[53,1.78,59,5.018,64,1.496,125,2.244,169,1.74,171,4.017,176,2.367,233,1.35,342,2.885,372,3.278,677,3.834,744,4.938,751,5.508,1492,8.27]],["t/216",[0,1.622,13,2.3,52,3.219,53,2.09,57,3.302,61,1.046,63,5.796,64,1.112,66,1.235,147,2.841,173,2.439,176,1.519,182,1.597,210,2.808,212,4.177,213,2.46,217,2.776,236,3.659,251,2.02,294,2.604,295,5.686,300,3.333,312,2.99,316,2.95,340,2.149,343,3.935,357,3.462,438,2.247,680,2.007,733,4.031,873,2.63,875,2.63,1225,4.776,1314,3.907,1364,3.22,1483,4.865,1493,5.308]],["t/218",[50,3.091,57,2.687,66,2.024,343,3.109,531,3.896,723,6.513,851,5.651,873,4.312,875,4.312,1494,7.134]],["t/221",[66,2.024,343,3.109,395,4.336,722,5.399,874,5.464,936,7.134,939,7.134,1495,8.702,1496,6.848,1497,8.702]],["t/223",[66,0.99,343,1.521,722,3.305,791,4.304,873,2.11,875,2.11,1423,9.686,1424,3.9,1425,3.9,1426,3.9,1427,3.9,1428,7.992,1429,3.9,1430,3.9,1431,3.9,1432,3.9,1433,5.921,1434,3.9,1435,3.9,1436,3.9,1437,3.9,1438,8.502,1439,3.9,1440,3.9,1441,7.158,1442,7.158,1443,9.686,1444,3.9,1445,3.9,1446,3.9,1447,3.9,1448,3.9,1449,3.9,1450,3.9,1451,3.9,1452,5.921,1453,3.9,1454,3.9,1455,3.9,1456,3.9,1457,3.9,1458,3.9,1459,9.047,1460,5.298,1461,3.9,1462,3.9,1463,3.9,1464,3.9,1465,5.565,1466,3.9,1467,3.9,1468,3.9,1469,3.9,1470,3.9,1471,3.9]],["t/225",[26,2.234,61,1.389,78,6.724,88,4.596,96,2.916,98,3.728,114,3.155,116,2.718,139,4.275,144,5.777,171,3.423,176,2.017,182,2.12,204,8.112,205,4.798,210,3.728,213,3.267,246,2.647,342,2.458,354,3.39,399,5.352,660,5.777,1036,4.207,1338,4.798,1498,7.047,1499,7.047]],["t/227",[0,1.448,2,1.215,14,2.142,18,1.41,21,3.229,26,1.136,34,0.843,37,1.257,44,1.521,45,2.83,47,3.084,48,2.186,50,0.734,52,1.516,55,2.159,57,2.456,59,1.254,61,1.764,63,2.138,64,1.308,70,1.215,73,1.081,76,2.297,78,3.091,80,1.014,81,1.242,105,1.134,108,1.18,114,0.925,115,1.441,116,0.797,125,2.159,132,1.917,136,1.59,147,1.917,151,2.106,154,0.681,155,1.149,157,1.617,158,1.45,163,1.087,173,1.645,176,2.004,182,1.078,207,2.129,229,1.298,233,1.044,237,2.636,238,1.471,240,1.521,246,2.402,250,1.197,251,2.152,281,0.967,282,1.821,313,1.024,315,2.152,316,2.634,320,1.723,322,1.12,342,1.653,357,1.348,362,2.249,372,1.879,421,1.149,429,0.985,440,1.348,474,1.035,477,1.723,491,1.046,504,1.57,514,2.83,538,2.965,543,1.298,564,0.994,574,1.407,581,1.093,582,1.521,597,1.893,651,3.084,659,3.488,677,1.66,680,0.781,684,1.521,716,2.385,718,1.536,730,1.812,756,1.694,757,1.18,758,1.164,849,1.521,856,1.348,901,1.479,1038,1.479,1072,0.757,1187,1.298,1190,1.57,1315,1.322,1319,1.441,1338,1.407,1354,1.479,1500,1.779,1501,2.067,1502,3.084,1503,1.694,1504,1.694,1505,2.067,1506,2.067,1507,2.067,1508,1.626,1509,3.581,1510,3.581,1511,2.067,1512,2.067,1513,2.067,1514,1.779,1515,1.779,1516,2.067,1517,1.893,1518,1.694,1519,1.893,1520,2.067]],["t/230",[48,2.176,55,3.176,56,3.354,57,2.153,64,1.02,76,2.131,169,2.015,176,2.626,207,2.12,216,2.418,233,1.674,305,3.403,320,3.354,408,2.12,477,3.354,718,2.259,730,3.528,748,3.354,850,4.04,1072,2.554,1521,6.389]],["t/232",[148,5.102,158,3.667,244,6.166,252,3.541,349,6.48,497,5.793,1522,8.298,1523,9.057,1524,7.425]],["t/234",[13,2.115,14,2.398,34,1.99,37,2.511,45,2.914,48,1.523,53,1.541,66,1.665,67,2.807,88,4.668,96,2.019,97,2.914,105,2.678,119,3.707,125,2.3,136,3.178,147,2.613,149,2.496,153,1.87,173,2.242,176,1.397,207,1.484,229,3.064,233,0.797,252,1.908,272,3.621,273,4.001,292,2.394,298,3.183,340,1.976,353,2.749,370,3.25,427,3.323,432,3.476,450,3.183,473,3.25,475,3.323,476,3.25,535,2.371,538,3.029,590,3.178,718,3.22,853,3.84,864,2.613,1072,1.787,1504,4.001,1525,4.88,1526,4.88,1527,4.88,1528,4.88,1529,4.88,1530,3.492,1531,4.88,1532,4.88]],["t/236",[34,1.419,45,2.077,163,2.16,169,0.592,173,1.599,213,1.613,252,1.36,259,3.596,274,5.063,313,1.724,343,1.243,354,4.372,358,3.855,395,1.429,435,1.909,503,2.369,526,2.852,584,2.852,589,1.987,643,1.674,717,2.046,722,1.779,846,4.53,864,4.19,939,7.451,1072,1.274,1354,2.49,1530,2.49,1533,3.479,1534,3.479,1535,3.479,1536,3.479,1537,10.65,1538,3.188,1539,3.188,1540,7.827,1541,6.417,1542,5.526]],["t/239",[17,2.989,37,2.554,43,6.066,53,1.567,66,2.436,149,3.722,163,1.238,173,3.344,176,2.083,182,2.19,216,2.524,219,4.955,435,3.993,718,2.358,856,4.747,900,5.727,1420,5.966,1543,6.266,1544,5.966,1545,6.266,1546,6.266,1547,7.277,1548,7.277]],["t/241",[17,2.29,45,3.328,53,1.2,66,2.308,67,1.846,136,2.475,149,2.851,163,2.085,216,1.933,395,2.29,432,2.708,435,4.321,446,3.5,459,5.981,494,4.386,613,4.103,718,1.806,766,3.636,827,5.797,983,7.215,1544,4.569,1549,5.574,1550,5.574,1551,5.574,1552,5.574,1553,7.875,1554,5.574,1555,5.574,1556,5.574,1557,5.574,1558,7.875,1559,5.574]],["t/243",[0,1.732,5,2.899,18,3.628,57,3.374,61,1.817,64,0.829,76,1.732,98,4.216,114,2.538,116,2.186,125,1.538,131,4.552,137,2.652,154,1.867,169,0.964,176,1.622,182,3.009,233,1.632,238,2.328,246,2.13,251,2.158,305,2.102,340,2.295,342,1.977,369,3.775,440,3.697,486,3.859,730,2.868,757,3.237,1315,3.626,1560,7.252,1561,5.866,1562,4.305]],["t/245",[18,4.472,37,3.458,57,3.043,169,1.676,305,3.655,730,3.94,757,6.489,1563,7.787,1564,7.787,1565,7.787,1566,7.787]],["t/247",[18,3.411,41,1.866,56,4.487,57,3.034,61,1.262,76,1.956,125,1.141,131,2.401,163,1.834,169,1.871,175,2.593,207,1.278,216,1.458,233,1.045,252,1.643,305,2.374,311,2.435,362,2.639,389,3.949,482,3.094,581,4.101,586,4.711,680,1.589,687,2.435,728,3.094,730,2.127,736,2.931,754,3.884,757,4.95,758,3.606,759,4.58,760,2.689,762,4.358,763,5.511,990,3.308,1040,3.007,1567,4.203,1568,4.203,1569,4.203,1570,4.203,1571,4.203,1572,4.203,1573,6.1,1574,4.203,1575,4.203,1576,4.203,1577,4.203]],["t/249",[0,1.718,5,2.875,10,3.595,14,2.654,20,3.009,41,2.496,48,2.863,50,2.814,51,3.21,57,1.736,61,1.108,64,0.822,76,3.421,100,3.356,114,2.517,116,2.168,137,2.629,176,1.609,282,1.601,304,3.124,305,2.085,315,3.492,342,2.764,369,3.743,538,2.379,582,4.137,637,3.827,677,2.606,853,4.423,856,5.167,1038,4.022,1176,3.529,1187,3.529,1508,4.423,1524,4.608,1578,4.84,1579,4.608,1580,6.821,1581,5.15]],["t/251",[61,1.256,70,3.747,73,4.519,76,1.947,81,2.997,125,2.345,129,4.691,143,2.41,153,2.442,154,2.846,169,1.084,171,3.096,173,2.928,176,1.824,207,1.937,219,4.339,230,4.84,251,2.426,252,2.492,282,1.815,306,5.015,340,2.58,474,4.326,477,4.157,514,3.805,555,3.692,718,3.176,823,4.84,1072,2.334,1521,5.839,1582,4.56,1583,6.373]],["t/253",[14,1.301,34,1.584,37,1.363,41,1.725,48,1.88,57,2.279,61,0.766,64,1.316,66,1.401,67,1.287,76,1.187,81,3.736,82,1.711,87,1.987,96,1.608,101,2.009,105,2.132,124,2.357,125,1.635,132,3.225,137,1.817,140,2.587,153,1.488,157,4.064,160,1.584,165,4.435,171,1.887,213,1.801,216,1.347,252,1.519,281,1.817,292,1.906,315,1.479,340,1.573,343,1.388,348,4.506,349,2.78,395,3.416,438,1.644,452,4.818,456,2.709,504,2.951,514,2.32,558,5.28,563,4.435,564,1.869,643,1.869,649,2.78,680,1.469,719,2.32,748,1.869,850,2.251,856,2.534,877,3.345,1315,2.485,1584,3.885,1585,3.559,1586,3.885,1587,3.559,1588,3.885,1589,3.885,1590,3.185,1591,2.951,1592,2.951,1593,2.951,1594,3.885,1595,4.721,1596,3.559]],["t/255",[18,2.62,48,2.077,57,3.095,76,3.662,163,0.753,169,1.513,259,4.916,282,1.896,305,3.3,315,2.534,317,3.202,320,3.202,322,3.607,323,4.641,354,5.147,362,7.204,429,3.172,573,5.398,849,4.899,850,3.856]],["t/258",[37,3.51,76,3.34,158,4.049,169,1.701,203,3.183,259,3.664,305,3.71,354,3.836,582,5.869,901,7.157,1597,7.974,1598,7.974]],["t/260",[0,2.087,41,4.019,45,4.078,61,1.346,70,4.016,81,2.369,82,3.008,105,3.748,125,2.456,153,2.617,158,2.765,163,1.161,213,3.166,219,4.65,252,2.67,296,3.957,477,3.286,507,5.187,540,4.65,641,5.375,674,5.375,718,2.213,740,5.027,826,4.887,1072,3.718,1546,5.881,1599,6.83,1600,6.83,1601,5.375]],["t/262",[61,1.419,80,3.532,81,3.249,149,3.682,163,1.224,252,4.072,342,2.511,351,6.392,719,4.298,826,5.151,850,6.035,1053,5.468,1072,3.431,1226,5.902,1337,4.794,1602,7.199,1603,6.198,1604,6.596,1605,7.199]],["t/264",[5,2.071,13,1.755,17,3.768,21,2.313,41,2.762,43,2.346,48,1.941,50,1.438,52,3.598,53,2.298,57,1.251,63,3.715,64,1.243,76,1.901,86,2.758,101,4.396,115,2.824,116,2.4,158,2.519,163,1.058,169,1.446,203,1.617,233,1.237,252,1.583,305,3.153,315,2.368,316,3.458,320,2.993,321,2.346,322,3.371,408,2.303,429,1.93,535,1.967,538,1.714,605,2.642,655,3.32,673,3.487,677,3.512,748,1.948,754,2.457,823,3.076,858,3.187,866,3.371,1177,2.642,1243,3.711,1314,5.576,1514,3.487,1515,3.487,1606,3.487,1607,4.05,1608,3.711,1609,4.05,1610,3.076]],["t/266",[14,2.019,26,1.911,34,2.458,53,2.21,64,1.575,66,1.935,67,3.155,125,2.257,157,2.722,158,2.44,167,2.532,182,2.866,217,3.152,338,4.313,342,2.103,372,2.389,408,1.832,425,4.203,652,3.23,668,3.05,669,2.819,677,2.794,680,2.279,772,2.325,873,2.987,875,2.987,894,3.395,1032,3.657,1337,4.014,1374,3.599,1375,2.957,1611,4.436]],["t/268",[14,2.336,53,2.208,55,3.176,64,1.02,66,2.134,67,3.04,136,3.096,154,3.023,169,1.56,207,2.12,233,1.674,408,2.12,590,4.074,668,3.528,669,3.262,873,3.455,875,3.455,894,3.928,1072,3.991]],["t/270",[53,1.898,66,2.051,233,1.439,408,2.681,873,4.369,875,4.369,894,4.967,1227,6.003,1473,8.079,1612,8.817,1613,8.817]],["t/272",[41,2.83,53,2.365,61,1.256,64,1.606,125,1.729,158,2.58,182,2.6,213,2.954,217,3.333,219,4.339,301,2.065,342,3.014,408,1.937,466,3.932,553,5.487,564,3.066,643,3.066,653,3.454,677,4.006,718,2.8,744,3.805,745,3.165,772,3.781,866,4.682]],["t/274",[37,2.447,53,2.346,55,3.176,64,1.02,66,1.622,125,1.892,154,3.023,169,1.853,207,2.12,233,1.498,282,1.986,358,3.149,408,2.12,523,4.378,538,2.951,590,4.074,866,3.779,868,3.779,870,3.928,872,3.928,1072,3.361]],["t/276",[53,1.309,66,1.947,163,1.627,169,1.627,233,0.993,354,4.026,395,2.498,408,1.849,866,3.296,868,5.185,870,3.426,872,3.426,873,4.148,875,4.148,937,5.574,1227,4.141,1420,6.862,1472,7.845,1541,8.451,1614,4.786,1615,6.586,1616,4.786,1617,4.786,1618,4.786,1619,4.986,1620,7.668]],["t/278",[14,2.771,53,2.203,64,1.624,67,2.74,217,4.325,233,1.35,541,3.301,643,3.979,680,3.127,718,2.68,745,3.029,772,3.947]],["t/280",[26,1.472,53,1.485,64,1.423,67,3.379,116,1.791,125,2.472,154,2.272,163,0.789,169,1.173,186,3.028,233,1.126,259,2.133,354,2.233,394,3.287,408,1.411,432,2.255,531,2.079,541,3.886,543,2.915,562,2.152,590,3.063,634,3.716,643,2.233,668,2.349,669,2.172,718,1.504,736,4.809,745,1.7,772,1.791,873,2.301,875,2.301,1072,3.869,1319,3.237,1325,2.324,1621,2.233,1622,7.469,1623,5.655,1624,4.636,1625,5.739,1626,2.689]],["t/282",[14,3.063,48,2.579,56,2.249,57,2.141,64,1.014,66,1.922,68,1.853,87,2.391,96,1.934,104,2.042,116,1.803,119,5.266,125,1.269,147,2.503,171,2.271,182,1.407,217,2.445,233,1.594,252,1.828,281,4.276,316,2.599,317,4.92,343,1.67,394,2.228,408,2.512,409,5.39,438,1.979,493,3.26,541,1.866,573,2.836,590,3.079,680,3.457,722,2.391,864,2.503,936,3.833,1072,2.539,1482,4.522,1627,4.025,1628,6.933,1629,3.441,1630,4.834,1631,4.675,1632,3.113,1633,3.551]],["t/284",[26,2.332,46,4.362,48,1.581,52,2.144,57,3.249,61,0.999,76,2.903,115,3.532,116,2.836,125,1.996,160,2.066,182,2.605,230,3.847,231,3.624,233,0.827,238,2.081,246,2.763,251,1.928,282,2.873,305,2.728,315,4.005,320,4.165,322,2.745,342,2.565,343,1.81,344,3.728,362,3.181,482,5.413,564,2.437,593,3.847,677,2.348,748,2.437,1338,3.449,1634,4.641,1635,6.738,1636,4.641,1637,3.847,1638,3.986]],["t/286",[48,2.488,55,3.632,57,3.375,116,3.075,154,3.295,163,1.356,169,1.701,207,2.424,230,6.056,305,3.71,316,4.432,320,4.812,748,3.836]],["t/289",[41,4.418,57,2.721,64,0.959,65,5.262,66,1.526,81,3.056,100,3.918,125,1.781,136,2.913,149,3.356,281,3.069,282,2.509,313,3.251,315,3.787,343,3.555,358,2.963,377,2.565,423,5.379,558,4.695,562,3.042,748,4.239,1038,4.695,1232,4.983,1245,5.649,1326,4.983,1366,4.829]],["t/291",[348,5.956,748,5.288,1639,8.53,1640,8.53,1641,8.53]],["t/294",[0,2.352,39,4.924,41,3.418,57,2.377,64,1.125,110,4.025,125,2.089,137,3.601,305,2.855,343,3.495,344,7.2,540,5.241,680,2.911,748,3.703,1331,5.367,1595,4.924,1642,7.053,1643,6.628,1644,5.846,1645,7.053]],["t/296",[48,2.13,52,1.938,57,2.108,61,1.346,81,1.588,163,1.388,169,1.388,175,2.825,176,1.954,182,2.054,207,1.392,210,2.422,233,0.747,292,2.246,305,3.356,315,1.743,320,3.284,343,3.458,344,6.66,348,2.481,350,4.453,351,6.261,352,5.185,372,3.236,395,3.353,531,2.05,569,3.754,677,3.165,680,1.731,748,5.059,851,2.451,937,3.049,1595,2.929,1646,8.163,1647,4.579,1648,6.827,1649,4.579,1650,4.195]],["t/299",[0,2.559,39,5.357,41,3.718,64,1.224,137,3.917,305,3.106,320,4.029,536,7.59,537,7.378,1331,5.839,1643,7.211,1644,6.36,1645,7.673]],["t/301",[14,2.312,48,2.844,57,2.131,61,1.36,163,1.173,169,1.55,176,1.975,182,2.742,233,1.127,305,3.38,320,3.32,372,4.045,537,6.521,564,3.32,677,4.225,748,4.909,1232,5.241,1651,5.241,1652,9.113,1653,6.901,1654,6.901]],["t/303",[54,3.267,101,4.814,125,2.526,154,3.067,301,3.016,372,3.69,408,2.83]],["t/305",[54,3.814,66,1.833,67,2.61,101,4.074,125,2.138,154,2.596,167,3.31,207,2.395,230,5.985,301,2.553,313,3.905,372,3.123,435,4.324,438,3.335,668,3.987,669,3.686,770,4.5,771,3.039]],["t/307",[14,2.386,54,3.265,55,3.244,66,2.164,67,3.082,136,3.162,154,2.346,207,2.165,233,1.519,408,2.165,590,4.131,668,3.603,669,3.331,770,4.068,771,2.747,873,3.529,875,3.529,885,3.959,894,4.012,1072,4.175]],["t/309",[54,3.014,66,1.998,233,1.402,389,5.3,408,2.611,724,5.495,828,5.495,873,4.257,875,4.257,885,4.775,894,4.839,1242,6.323,1655,8.59]],["t/311",[50,3.132,66,2.051,160,3.596,851,4.72,873,4.369,875,4.369,885,4.901,1064,8.373,1238,7.229,1494,7.229]],["t/313",[23,6.281,54,2.902,64,1.209,66,1.924,201,5.018,358,3.735,365,4.791,513,4.057,538,3.501,564,4.922,603,5.767,1315,5.29,1656,8.27,1657,7.578,1658,8.27]],["t/315",[37,1.848,53,1.134,54,2.654,55,2.398,64,0.77,66,1.225,81,1.826,85,3.007,125,2.052,154,1.735,161,2.609,169,1.286,207,1.601,233,0.86,236,2.533,239,3.768,240,3.876,263,4.144,273,4.317,278,4.144,282,2.917,296,3.051,301,1.706,321,3.051,358,4.368,395,2.163,408,1.601,425,3.672,514,3.144,523,3.306,538,2.229,590,3.358,640,3.368,770,3.007,771,2.031,870,2.966,872,4.26,879,2.966,885,2.927,1072,3.241,1318,3.672,1659,5.266,1660,4.824,1661,4.824,1662,4.534,1663,4.317,1664,5.266,1665,5.266]],["t/317",[54,2.447,169,1.56,233,1.138,259,3.204,301,2.973,389,5.661,395,2.864,408,2.12,724,5.869,766,5.985,861,5.661,870,3.928,872,3.928,873,4.547,875,4.547,879,3.928,881,5.296,882,5.296,885,3.876,1242,5.132,1666,7.523,1667,6.973]],["t/319",[50,3.132,66,2.051,160,3.596,851,4.72,873,4.369,875,4.369,885,4.901,1064,8.373,1238,7.229,1494,7.229]],["t/321",[14,2.312,37,3.198,64,1.009,105,5.001,119,5.241,159,4.938,161,4.516,207,2.77,233,1.127,239,4.938,250,3.998,399,5.241,426,5.829,438,2.921,476,4.595,503,4.698,555,3.998,579,3.787,640,4.414,680,2.609,718,2.953,1236,4.698,1337,4.595,1402,6.323,1408,6.323,1668,5.079]],["t/323",[14,2.579,55,3.506,125,2.089,136,3.418,154,2.536,169,1.663,207,2.34,233,1.597,408,2.34,590,4.343,718,3.484,743,4.596,894,4.336,1032,4.67,1072,3.938]],["t/325",[17,3.237,19,5.04,66,1.833,169,1.848,233,1.286,408,2.395,718,2.553,743,4.705,894,4.439,1072,3.981,1196,6.2,1227,5.365,1669,7.879,1670,7.879,1671,7.879,1672,7.879]],["t/327",[14,2.786,48,1.881,53,2.21,64,0.881,66,1.935,67,2.755,73,3.152,82,2.654,87,3.083,125,1.636,136,2.676,148,3.395,151,3.544,153,2.309,167,2.532,171,2.928,213,2.794,233,0.984,246,2.264,282,1.716,408,1.832,438,2.551,538,2.551,579,3.307,668,3.05,669,2.819,718,1.953,743,3.599,744,3.599,772,3.208,851,3.227,873,2.987,875,2.987,894,3.395,1072,3.488,1673,6.027,1674,6.027]],["t/329",[0,2.153,52,3.911,53,1.989,61,1.389,64,1.6,76,2.153,98,4.888,104,3.078,116,2.718,125,1.912,131,5.277,137,3.296,169,1.198,176,2.017,207,2.809,342,2.458,440,4.596,716,4.693,736,4.913,771,2.718,1315,4.507,1675,7.047]],["t/331",[64,1.671,154,2.905,169,1.809,233,1.866,342,3.076,1676,7.592]],["t/333",[34,3.644,52,3.782,233,1.459,382,3.782,771,3.446,816,5.421,1486,6.577,1621,4.299,1677,6.577,1678,5.951]],["t/335",[0,1.988,10,1.36,12,1.615,13,0.921,14,0.712,17,0.873,26,2.063,34,0.867,37,0.746,41,1.63,43,1.232,52,0.9,53,2.382,61,0.955,63,1.269,64,1.533,66,0.854,67,3.08,80,1.8,98,1.125,101,2.504,104,1.603,112,1.112,116,0.82,125,0.996,131,1.214,135,1.615,137,0.994,146,1.214,147,1.138,148,1.198,153,0.814,158,0.861,167,2.421,173,0.977,176,0.608,182,1.957,201,2.227,203,0.849,207,1.116,229,1.335,236,1.023,246,1.819,251,1.843,252,0.831,282,1.045,294,1.043,301,1.867,315,0.809,316,1.182,340,1.486,358,1.657,372,0.843,385,0.867,429,1.013,435,2.014,449,1.182,466,1.312,489,1.521,497,2.348,516,1.83,523,1.335,535,1.033,541,1.933,550,1.29,555,2.126,564,1.766,579,1.167,606,1.138,628,1.447,634,1.657,643,2.33,652,3.276,653,1.152,669,1.717,680,0.804,718,1.867,726,1.615,744,2.891,745,2.953,771,2.223,772,3.751,858,1.673,864,1.138,1189,2.158,1225,1.335,1314,1.565,1356,1.743,1362,1.673,1374,1.269,1375,1.043,1405,1.83,1474,1.615,1475,1.948,1483,3.098,1514,1.83,1582,1.521,1657,1.948,1679,2.126,1680,1.948,1681,1.83,1682,2.126,1683,2.126,1684,2.701,1685,2.126,1686,1.673,1687,1.565,1688,1.565,1689,1.948,1690,1.83]],["t/337",[0,1.966,34,2.624,37,2.258,53,2.373,61,1.268,64,0.941,73,4.548,85,3.675,110,3.365,148,3.625,167,2.703,182,1.936,207,1.956,246,2.417,282,2.477,301,3.681,315,3.31,507,4.887,579,3.531,718,2.085,745,3.185,768,4.487,786,5.563,1322,5.895,1325,3.222]],["t/339",[53,1.849,61,1.693,167,4.399,217,4.492,233,1.402,251,3.27,301,2.783,342,2.997,386,4.855,745,3.836]],["t/341",[34,3.193,50,3.512,64,0.808,66,2.3,110,2.891,154,1.821,169,1.331,216,3.153,222,2.659,233,0.902,238,3.734,301,3.204,375,2.827,376,3.788,377,3.865,378,2.659,382,2.34,383,2.959,384,4.35,385,2.254,386,4.838,394,2.634,745,2.867,781,3.471,1189,5.813,1394,3.763,1483,3.536]],["t/343",[50,1.996,53,1.705,64,0.822,66,1.843,167,3.328,169,0.956,171,2.73,173,3.64,176,2.851,207,1.709,222,2.704,233,0.918,252,2.197,294,2.757,301,2.567,375,2.875,376,3.035,377,3.097,382,2.379,383,3.009,384,4.423,385,2.292,386,4.253,657,4.022,745,3.36,776,3.529,908,3.919,909,3.919,913,3.919,916,3.919,1691,5.15,1692,4.022,1693,4.022,1694,4.022,1695,4.022,1696,4.022,1697,4.022,1698,4.022,1699,4.022,1700,5.621]],["t/345",[5,2.022,12,3.003,13,1.713,14,1.325,21,2.258,37,1.388,41,2.712,53,1.807,61,1.471,64,0.578,66,0.92,80,1.94,82,1.741,85,2.258,97,2.361,125,2.025,136,2.712,137,1.85,151,5.334,152,3.003,153,1.515,207,1.857,217,2.068,233,0.646,245,2.291,246,1.485,301,2.94,313,1.959,340,2.473,342,1.379,354,1.902,386,3.459,392,5.259,393,3.768,417,2.692,475,2.692,535,1.921,539,2.399,553,3.405,579,3.351,611,3.405,626,3.405,632,2.692,634,3.79,637,2.692,718,2.418,745,3.661,770,2.258,880,3.405,1234,3.623,1235,3.242,1364,3.706,1365,3.441,1369,2.692,1371,2.399,1389,2.483,1530,2.829,1611,2.91,1701,2.91,1702,3.623,1703,2.529,1704,3.623,1705,3.242,1706,3.954,1707,3.954,1708,3.954,1709,3.111]],["t/347",[34,2.674,50,3.129,64,0.635,66,2.314,96,1.796,110,2.27,154,1.43,163,0.738,169,1.115,216,3.45,222,2.088,233,0.709,238,4.086,301,3.446,375,2.22,376,3.811,377,3.889,378,2.088,382,1.837,383,2.323,385,1.77,386,5.225,388,2.831,394,3.125,535,2.108,745,3.226,781,2.725,1189,5.849,1364,2.633,1394,2.955,1483,4.195,1710,3.558]],["t/349",[50,1.456,53,1.352,64,0.599,66,1.99,163,0.697,169,0.697,171,1.992,173,2.886,176,2.448,207,1.246,222,1.972,233,0.669,252,1.603,294,2.011,301,2.035,375,2.097,376,3.278,377,3.345,382,1.735,383,2.195,385,1.672,386,3.539,388,2.674,657,2.934,718,2.035,745,3.378,776,3.944,782,2.859,908,5.965,909,2.859,913,5.323,914,3.361,916,5.323,922,4.942,926,3.226,1692,2.934,1693,2.934,1694,2.934,1695,2.934,1696,2.934,1697,2.934,1698,2.934,1699,2.934,1711,3.756,1712,3.756,1713,3.756,1714,3.756,1715,3.756,1716,3.756,1717,3.756,1718,3.756,1719,3.756,1720,3.756,1721,3.756,1722,3.756,1723,3.53,1724,3.53,1725,3.53,1726,3.53,1727,3.53,1728,3.53,1729,3.53,1730,3.53,1731,3.53,1732,3.53,1733,3.53,1734,4.1]],["t/351",[5,2.416,13,2.047,21,1.637,28,1.951,34,1.169,37,2.452,39,3.853,41,2.675,50,2.139,51,1.637,53,2.21,61,0.931,66,2.045,67,0.949,90,2.468,97,1.711,110,1.499,112,2.47,137,1.341,140,1.909,154,0.944,157,1.294,158,1.16,203,1.144,207,1.831,222,1.379,224,1.998,282,1.345,294,1.406,301,3.326,315,3.165,359,3.216,376,2.308,377,1.846,386,3.239,393,1.768,438,1.213,449,1.593,462,2.051,568,2.11,574,1.951,575,4.067,579,4.24,590,1.273,604,2.468,619,2.626,637,1.951,644,2.255,658,3.476,733,2.177,768,6.13,770,1.637,855,2.255,864,2.528,1187,1.8,1188,2.255,1189,3.542,1232,2.177,1337,1.909,1364,1.739,1365,1.615,1369,1.951,1370,2.11,1371,1.739,1372,2.11,1375,2.317,1479,1.833,1611,2.11,1627,2.468,1668,2.11,1687,3.476,1703,3.021,1735,2.866,1736,2.468,1737,2.626,1738,2.468,1739,2.177,1740,2.626,1741,2.35,1742,4.327,1743,2.866,1744,2.468,1745,4.327,1746,2.866,1747,4.327,1748,2.866,1749,2.626,1750,1.573,1751,2.626,1752,2.866,1753,2.626]],["t/353",[34,3.456,50,3.689,53,1.334,64,0.906,66,2.247,110,3.24,154,2.041,169,1.441,203,2.473,222,2.98,233,1.011,301,2.007,375,3.169,376,3.702,377,3.777,378,2.98,382,2.622,383,3.317,385,2.526,394,2.952,768,5.91,774,4.875,775,4.32,777,4.875,779,4.875,781,3.89,1189,6.108,1394,4.218]],["t/355",[34,2.874,50,2.503,53,1.517,64,1.351,66,1.639,112,3.685,137,3.296,169,1.198,205,4.798,233,1.15,375,3.604,376,2.7,377,2.755,382,2.983,383,3.772,385,2.874,466,4.348,718,2.283,745,2.581,772,2.718,773,5.545,774,5.545,775,4.913,776,4.425,777,5.545,779,5.545,781,4.425,843,5.042,937,4.693]],["t/357",[64,1.224,169,1.424,233,1.367,382,3.545,652,3.252,773,6.59,816,5.081,817,4.33,818,4.538,819,4.108,820,5.702,1754,8.374,1755,8.374,1756,5.702,1757,5.357]],["t/359",[5,1.546,14,1.012,28,2.058,37,3.503,51,1.726,53,1.936,61,1.232,64,0.721,66,1.849,68,1.198,73,2.58,75,1.658,81,1.048,85,1.726,90,4.247,104,2.155,112,1.58,136,1.342,140,2.012,143,1.143,146,2.817,149,1.546,167,2.072,175,1.865,182,0.909,205,2.058,207,1.9,216,1.048,236,1.454,250,1.751,251,1.877,282,2.263,292,1.483,301,2.575,315,2.745,340,1.223,376,1.89,386,2.287,447,2.295,450,1.971,462,2.162,497,1.933,513,2.42,514,1.804,518,2.162,535,1.468,575,2.602,576,2.224,579,5.608,585,2.224,616,2.162,640,1.933,641,3.882,680,1.143,768,5.029,772,1.903,786,1.933,864,1.618,866,1.638,1177,1.971,1219,2.224,1244,2.602,1325,1.513,1337,3.285,1364,1.834,1365,1.702,1376,1.865,1608,2.769,1611,2.224,1668,3.631,1687,2.224,1703,3.155,1736,2.602,1739,2.295,1741,5.913,1742,2.769,1744,5.381,1745,2.769,1758,3.022,1759,3.022,1760,3.022,1761,2.769,1762,3.022,1763,3.022,1764,2.378,1765,3.022,1766,2.602,1767,3.022,1768,3.022]],["t/361",[50,3.474,53,1.657,64,1.125,154,2.536,169,1.663,203,3.072,233,1.257,301,2.494,377,4.204,378,3.703,382,3.258,383,4.121,385,3.139,394,3.668,775,5.367,1189,5.751,1219,5.666]],["t/363",[50,3.091,64,1.272,169,1.48,233,1.421,377,3.402,382,3.683,383,4.659,385,3.549,775,6.068,776,5.464,1218,6.848,1219,6.405]],["t/365",[13,2.884,41,2.956,53,2.054,61,1.312,64,0.973,66,1.548,67,1.466,73,2.315,75,2.429,80,2.172,86,3.014,110,2.315,125,1.201,207,1.346,216,1.535,229,2.78,246,1.663,272,2.24,282,1.261,294,2.172,301,2.157,311,2.564,360,4.18,376,1.696,377,1.731,378,3.202,385,2.714,386,3.086,431,2.034,438,1.874,476,2.948,505,3.258,541,1.767,543,2.78,555,2.564,564,2.129,634,4.018,643,3.202,652,2.585,718,2.592,745,3.671,772,2.567,1364,5.398,1365,5.012,1371,4.854,1381,2.461,1389,5.587,1769,3.811]],["t/367",[53,1.399,64,1.666,125,2.376,154,2.884,157,2.934,160,3.57,169,1.489,216,2.253,233,1.061,301,2.105,372,2.575,378,4.211,382,2.75,385,2.649,652,3.844,771,2.506,817,3.36,818,3.521,819,3.187,1375,3.187,1595,4.156,1678,4.327,1750,3.565,1770,3.879,1771,4.156,1772,4.08]],["t/369",[0,2.087,53,2.421,64,1.58,67,2.263,101,3.532,138,3.797,167,2.869,213,3.166,233,1.115,466,4.214,541,2.726,643,3.286,718,3.289,745,3.959,772,4.338,1315,4.369,1773,5.599]],["t/371",[13,3.068,34,1.961,37,1.688,53,2.45,64,1.444,67,2.346,80,2.36,81,1.668,104,2.101,105,2.639,125,1.922,153,1.843,182,1.447,193,3.54,201,2.918,207,1.462,210,2.544,246,2.66,250,2.786,251,2.695,289,3.137,301,2.723,307,3.354,315,1.831,340,1.947,353,2.709,385,1.961,435,2.639,466,2.968,513,4.122,535,2.336,646,3.275,652,3.599,718,1.558,745,2.593,771,1.855,772,2.731,864,2.575,1225,3.02,1483,3.077,1663,3.943,1688,3.54,1709,3.785,1774,4.81,1775,2.828,1776,4.81,1777,4.407]],["t/373",[26,1.828,53,2.003,61,1.137,64,1.55,66,1.341,68,2.286,116,3.588,125,1.565,154,1.9,160,2.352,163,0.981,169,1.372,233,0.941,282,1.642,343,2.06,360,3.621,362,3.621,432,2.801,531,3.611,549,3.689,562,3.739,616,4.126,771,2.224,772,3.588,816,3.499,817,2.982,818,3.125,851,3.087,1325,2.887,1381,3.205,1479,3.689,1626,3.341,1778,4.538,1779,4.965,1780,4.38,1781,3.926,1782,4.965,1783,4.965]],["t/375",[26,1.536,53,2.133,64,1.606,116,2.746,125,2.29,154,2.78,157,2.188,163,0.824,169,1.21,233,0.791,246,2.674,301,2.734,343,1.731,372,2.822,382,3.013,432,2.353,531,3.187,562,3.3,646,3.299,652,4.266,681,3.042,771,1.869,772,2.746,816,2.939,817,2.505,818,2.625,819,3.492,1325,2.426,1375,4.14,1381,2.693,1626,2.807,1710,3.972,1750,4.631,1770,4.25,1778,3.812]],["t/377",[37,2.143,39,2.529,51,2.258,53,2.065,61,1.204,64,1.462,67,3.005,81,2.118,104,2.668,116,1.525,125,1.073,138,2.198,154,2.012,169,1.039,182,1.19,207,1.857,233,0.646,251,2.325,252,1.546,282,1.126,301,2.418,315,2.325,372,1.567,382,1.674,394,3.556,415,2.757,417,2.692,432,1.921,438,1.674,449,2.198,513,2.996,531,1.77,562,1.833,646,2.692,652,3.724,771,1.525,816,2.399,817,2.045,818,2.143,819,1.94,1036,4.456,1193,3.242,1196,7.139,1236,2.692,1325,3.058,1358,3.623,1375,1.94,1381,4.666,1626,2.291,1741,3.242,1750,2.17,1784,3.405,1785,3.242,1786,3.954,1787,2.483,1788,3.954,1789,3.954,1790,3.954,1791,3.954,1792,3.954]],["t/380",[50,1.474,64,0.607,66,1.789,169,1.308,222,1.997,233,1.256,375,2.123,376,2.947,377,3.007,382,2.684,383,2.222,385,1.693,386,1.924,388,2.707,581,2.196,652,1.612,745,2.322,771,1.601,776,2.606,782,4.421,785,2.655,787,2.606,788,2.826,816,2.518,817,2.146,818,2.249,819,2.036,820,2.826,908,5.364,909,2.894,913,5.364,914,3.403,916,4.421,922,3.266,926,3.266,1198,3.912,1199,3.153,1202,3.055,1204,3.153,1206,3.153,1208,3.266,1210,3.266,1212,3.266,1214,3.266,1216,3.266,1692,2.97,1693,2.97,1694,2.97,1695,2.97,1696,2.97,1697,2.97,1698,2.97,1699,2.97,1723,3.574,1724,3.574,1725,3.574,1726,3.574,1727,3.574,1728,3.574,1729,3.574,1730,3.574,1731,3.574,1732,3.574,1733,3.574,1793,5.198,1794,3.803,1795,3.803,1796,3.803,1797,3.803,1798,3.803,1799,3.803,1800,3.803,1801,3.803,1802,3.803,1803,3.803,1804,3.803]],["t/382",[50,1.541,52,1.837,64,0.635,66,1.01,163,1.344,169,1.608,233,1.544,259,1.994,375,2.22,376,1.663,377,1.697,382,2.776,383,2.323,385,2.674,395,3.247,531,1.943,564,2.088,652,1.685,769,3.194,771,1.674,773,5.161,774,3.415,775,3.026,776,2.725,777,3.415,779,3.415,781,2.725,784,5.647,785,2.776,786,2.776,787,2.725,788,2.955,789,3.105,790,2.776,791,2.89,792,2.776,793,2.725,794,3.105,795,3.105,796,3.105,797,3.105,798,3.105,799,3.105,800,3.105,801,3.105,802,3.105,803,3.105,804,2.725,805,3.105,806,3.105,807,3.105,808,3.105,809,3.105,810,3.105,811,3.105,812,3.105,813,3.105,814,3.105,816,2.633,817,2.244,818,2.352,819,2.129,820,2.955,843,3.105,868,2.352,937,2.89,1486,3.194,1804,6.009,1805,4.827,1806,4.34,1807,3.194]],["t/384",[50,1.562,64,0.643,66,1.853,169,1.508,222,2.115,233,1.448,375,2.249,376,3.053,377,3.115,382,3.754,383,3.546,385,1.793,386,2.038,388,2.868,652,1.708,745,2.426,771,1.696,776,2.761,782,4.618,785,2.813,786,2.813,787,2.761,788,2.994,789,3.146,815,3.066,816,2.668,817,2.274,818,2.383,819,3.249,820,4.51,908,5.556,909,3.066,913,5.556,914,3.605,916,4.618,922,3.46,926,3.46,1218,5.212,1219,3.237,1692,3.146,1693,3.146,1694,3.146,1695,3.146,1696,3.146,1697,3.146,1698,3.146,1699,3.146,1723,3.786,1724,3.786,1725,3.786,1726,3.786,1727,3.786,1728,3.786,1729,3.786,1730,3.786,1731,3.786,1732,3.786,1733,3.786,1808,6.069,1809,3.605]],["t/386",[64,1.03,169,1.753,233,1.683,382,3.911,383,3.772,771,2.718,785,4.507,786,4.507,787,4.425,788,4.798,789,5.042,815,4.913,816,4.275,817,3.644,818,3.819,819,3.457,820,4.798,1193,5.777,1194,6.067,1218,7.271,1219,5.187,1808,8.465,1809,5.777]],["t/388",[0,1.309,2,2.519,13,1.856,14,1.435,34,1.747,53,2.335,59,2.599,64,1.447,66,1.511,67,3.116,80,2.102,96,2.687,104,1.871,105,2.351,112,2.24,125,2.375,167,4.158,171,2.081,201,3.94,203,1.71,213,1.986,251,1.631,301,2.104,340,1.735,342,1.495,438,2.749,539,3.94,634,1.935,652,1.664,668,3.286,669,3.038,677,1.986,680,1.62,719,3.878,745,3.972,771,1.652,772,3.025,1189,2.519,1483,5.598,1601,3.371,1681,3.689,1756,2.917,1810,4.284,1811,4.284]],["t/390",[26,1.17,53,1.741,61,1.141,64,1.475,66,0.859,67,2.91,68,1.463,112,1.93,116,2.755,125,1.571,154,2.353,157,1.667,160,2.361,163,1.215,169,0.984,233,0.603,246,1.387,282,1.051,301,1.876,343,1.319,360,2.318,372,2.295,382,2.45,432,1.793,452,3.099,531,2.592,549,2.361,562,2.684,616,2.641,634,2.614,652,3.919,653,3.137,669,1.727,681,2.318,723,4.407,771,1.424,772,2.755,817,1.909,818,2,819,2.84,851,1.976,1325,1.848,1375,2.84,1381,3.218,1479,2.361,1626,2.138,1677,2.717,1710,3.026,1750,3.177,1756,2.513,1757,2.361,1770,3.457,1778,2.905,1779,3.178,1780,2.804,1781,2.513,1782,3.178,1783,3.178,1812,3.703,1813,2.641,1814,2.24,1815,2.717,1816,2.804,1817,4.397,1818,4.397]],["t/392",[0,1.039,26,0.617,27,1.531,28,1.325,34,0.794,53,1.937,59,1.181,61,0.892,64,1.433,66,0.453,67,2.559,68,0.771,80,0.955,105,1.068,112,1.018,116,1.745,125,1.472,129,1.432,149,0.995,151,1.998,154,1.491,157,0.879,160,2.76,163,0.769,169,0.578,171,1.651,182,0.586,213,0.902,216,1.179,233,0.318,236,0.936,242,1.006,246,0.731,282,0.554,288,1.392,301,2.193,342,0.679,343,0.695,360,4.249,372,1.347,376,0.746,378,2.609,382,1.439,385,1.386,386,1.576,432,0.945,435,1.068,438,1.439,447,1.478,452,1.819,491,2.289,507,4.119,523,1.222,531,1.522,541,0.777,549,1.245,550,2.062,559,1.478,562,1.576,579,1.068,616,1.392,634,3.488,652,3.277,653,1.842,668,1.72,669,2.88,677,0.902,681,1.222,718,1.101,723,2.097,745,3.295,771,1.745,772,2.375,817,1.006,818,1.054,819,1.667,851,1.042,863,2.314,864,1.042,1244,1.675,1325,0.974,1335,3.71,1364,3.291,1365,2.549,1369,1.325,1370,2.502,1371,3.736,1372,2.502,1374,2.029,1375,1.667,1376,2.097,1378,1.357,1381,1.889,1389,2.134,1479,1.245,1503,1.595,1562,1.478,1626,1.127,1678,1.296,1684,1.432,1686,1.531,1710,1.595,1750,1.865,1756,1.325,1757,1.245,1770,2.029,1771,2.174,1772,2.134,1778,1.531,1779,1.675,1780,1.478,1781,1.325,1782,1.675,1783,1.675,1812,1.245,1813,1.392,1814,1.181,1815,1.432,1817,2.581,1818,2.581,1819,1.946,1820,2.926,1821,1.946,1822,1.946,1823,3.114,1824,1.946,1825,3.399]],["t/394",[53,2.09,64,1.113,67,2.521,127,5.601,212,7.641,233,1.242,252,2.975,283,4.867,340,3.081,491,3.85,541,3.037,574,5.181,634,3.436,643,3.661,653,4.124,772,3.745,1668,5.601,1826,4.867,1827,4.778,1828,6.972]],["t/396",[26,0.802,53,1.391,59,1.534,64,1.546,67,2.388,80,1.241,96,1.047,116,2.492,125,2.367,154,2.873,160,3.387,163,1.483,169,1.483,171,1.229,186,1.65,216,1.911,233,1.177,251,0.963,259,1.162,301,1.785,342,0.882,343,0.904,354,1.217,378,3.758,382,2.332,385,2.247,425,1.763,452,2.949,482,1.861,531,1.132,541,4.365,562,1.172,634,1.922,652,3.524,653,2.986,677,1.172,723,3.399,771,2.492,772,0.975,817,2.201,819,2.703,847,1.618,863,3.751,1374,1.51,1375,3.17,1381,1.406,1621,1.217,1624,1.425,1750,3.023,1770,3.29,1771,3.524,1772,3.46,1778,1.99,1817,4.185,1818,4.185,1826,3.524,1827,4.057,1829,1.99,1830,1.81,1831,2.317,1832,1.684,1833,1.65]],["t/398",[17,1.407,26,1.086,34,1.397,50,1.217,53,1.67,61,1.341,64,0.798,66,1.582,67,1.135,80,1.681,81,1.188,96,1.418,116,1.321,125,2.299,153,1.313,154,1.128,157,2.464,158,1.387,163,0.583,167,1.439,182,1.642,186,2.234,203,1.367,216,1.893,233,0.559,238,2.242,246,2.915,251,1.304,270,1.617,301,1.768,311,1.985,354,1.648,385,1.397,435,1.88,474,1.715,485,2.808,489,2.451,497,2.191,513,1.681,525,2.521,526,2.808,541,4.146,634,3.072,648,2.234,649,2.451,652,4.117,653,1.856,718,1.11,745,1.255,771,2.624,772,2.105,1185,2.451,1186,2.602,1198,2.114,1225,2.151,1371,4.127,1374,2.045,1375,1.681,1389,4.272,1624,1.93,1750,2.995,1770,2.045,1771,2.191,1772,2.151,1817,2.602,1826,4.351,1827,4.872,1829,2.696,1830,2.451,1834,3.139,1835,3.805,1836,2.602,1837,2.95,1838,2.95,1839,3.139]],["t/400",[15,2.158,17,1.167,26,0.901,41,1.262,43,1.646,53,0.612,61,0.56,66,1.091,67,3.144,80,1.394,81,1.626,82,1.251,96,1.941,101,3.594,104,1.241,112,1.486,116,1.096,125,2.087,131,3.969,137,1.329,149,1.453,153,1.797,157,3.138,158,1.15,163,0.483,182,2.091,186,1.854,203,1.134,210,1.503,229,2.945,246,1.762,250,2.717,251,2.279,252,1.833,282,1.336,296,2.717,311,1.646,340,1.15,354,1.367,393,1.753,419,3.059,429,2.235,438,2.535,452,1.521,489,2.033,497,1.818,535,1.38,539,1.724,541,3.07,555,1.646,558,2.033,564,1.367,603,1.981,628,1.935,634,2.704,637,3.193,644,3.69,646,1.935,652,2.699,653,4.168,668,2.373,669,2.194,680,1.075,681,3.76,738,2.092,745,3.353,772,3.661,1176,1.784,1378,1.981,1405,2.447,1530,2.033,1624,3.373,1625,4.175,1684,2.092,1687,2.092,1688,3.452,1690,2.447,1827,1.784,1838,2.447,1840,2.33,1841,6.305,1842,2.842,1843,1.892,1844,2.842,1845,4.69,1846,2.447]],["t/402",[61,1.127,64,0.836,67,3.803,82,2.518,131,3.265,132,3.061,138,3.178,153,2.19,167,2.402,175,3.527,203,2.282,231,7.181,270,2.699,340,2.315,415,3.986,634,4.772,668,2.893,669,2.674,745,3.391,772,4.076,864,3.061,1374,3.414,1375,2.805,1625,5.59,1757,3.657,1812,3.657,1813,4.091,1814,3.469,1815,4.208,1847,5.717,1848,5.717]],["t/404",[64,0.815,169,1.688,233,1.62,382,4.201,541,3.645,652,3.546,817,4.072,819,4.869,820,3.795,868,3.02,874,3.5,895,4.103,1496,4.386,1621,2.681,1624,3.14,1793,4.569,1814,4.778,1826,5.037,1827,3.5,1832,3.712,1833,3.636,1849,6.197,1850,6.456,1851,4.799,1852,6.456,1853,4.233,1854,4.799,1855,4.799,1856,4.799,1857,4.799,1858,4.799,1859,4.799,1860,4.799]],["t/407",[0,0.88,35,1.96,41,1.278,53,2.167,59,1.746,61,0.934,66,1.938,67,2.565,96,1.191,108,1.644,112,4.05,115,2.007,132,1.541,143,2.285,148,1.621,149,1.472,157,1.3,163,0.806,167,1.209,213,1.334,236,2.28,246,1.081,250,1.668,294,1.412,357,1.878,358,3.762,360,5.779,376,3.192,386,3.59,393,3.728,438,1.218,491,2.398,518,2.06,525,3.489,556,2.265,574,1.96,579,4.833,606,2.537,607,2.119,627,2.186,634,3.977,635,2.265,745,2.213,770,1.644,772,1.11,1187,1.807,1188,2.265,1190,2.186,1325,1.441,1335,2.36,1365,2.67,1369,3.227,1370,2.119,1371,1.746,1374,2.83,1375,2.964,1376,2.924,1378,4.213,1483,1.841,1562,3.6,1749,2.637,1769,2.478,1775,2.787,1841,3.886,1843,4.024,1861,4.081,1862,2.637,1863,2.878,1864,4.74,1865,5.203,1866,2.36,1867,2.878,1868,2.637,1869,2.478,1870,2.637,1871,2.878,1872,2.878,1873,4.74,1874,4.74,1875,2.265]],["t/409",[0,1.116,17,2.913,26,2.549,28,4.829,43,2.115,53,1.881,64,0.839,66,0.849,67,3.575,68,1.447,75,3.892,86,2.486,100,2.18,101,2.968,112,3.002,115,4.002,116,1.408,140,2.431,148,2.057,158,1.478,167,1.534,205,2.486,245,2.115,246,1.372,251,2.185,310,2.003,340,1.478,358,2.592,364,3.345,415,2.546,429,3.831,435,2.003,438,1.545,452,1.954,505,2.687,555,2.115,606,3.073,628,2.486,634,1.649,652,2.754,653,3.11,668,1.847,669,3.761,677,1.692,745,3.201,772,3.101,1059,2.993,1230,3.144,1235,2.993,1318,2.546,1362,2.873,1364,2.215,1369,3.908,1375,1.791,1376,2.253,1378,2.546,1621,1.756,1644,2.773,1663,2.993,1677,2.687,1678,2.431,1684,2.687,1703,2.335,1841,4.705,1843,2.431,1865,3.144,1876,3.651,1877,3.651,1878,5.259]],["t/411",[0,1.154,13,1.636,14,1.265,17,1.551,26,1.868,51,2.156,53,1.763,66,1.904,67,3.832,68,2.335,75,3.233,110,1.974,112,1.974,116,1.456,125,1.024,158,1.528,203,1.507,207,2.489,360,3.7,376,1.446,438,2.494,505,2.778,525,4.337,535,3.977,539,2.29,555,2.187,600,5.073,628,2.57,634,1.705,653,2.046,668,4.493,669,4.401,680,1.427,719,2.254,745,2.654,771,1.456,772,2.795,1181,3.459,1365,3.319,1372,2.778,1375,2.89,1376,5.478,1378,2.632,1388,3.25,1483,2.415,1703,2.415,1757,2.415,1812,2.415,1841,3.095,1843,2.514,1866,3.095,1868,3.459,1879,3.775,1880,3.775,1881,4.83,1882,3.775,1883,3.25,1884,3.459]],["t/413",[0,1.044,26,0.621,41,1.517,53,2.077,61,0.386,64,0.499,66,1.891,67,2.566,68,0.776,75,1.875,80,2.671,81,0.679,85,3.529,86,1.333,110,1.024,112,1.024,115,2.382,116,1.318,122,1.487,137,0.916,138,4.061,143,0.74,149,3.161,151,2.673,157,1.543,158,0.792,161,0.97,163,0.773,165,1.441,167,1.435,201,1.188,246,2.046,250,1.979,251,1.73,252,1.336,283,1.252,294,0.96,296,1.134,297,1.54,340,0.792,354,0.942,355,1.188,359,3.708,360,4.264,365,1.979,370,1.303,376,2.602,385,0.798,393,2.108,415,1.365,419,1.277,435,1.074,438,0.828,445,1.605,449,1.088,486,3.095,488,1.303,491,0.99,525,4.998,539,2.073,555,1.134,562,1.584,564,0.942,567,4.858,574,2.326,605,1.277,606,1.829,607,2.514,628,1.333,637,1.333,643,0.942,648,1.277,652,3.501,653,1.061,669,2.891,677,0.907,681,2.145,745,0.717,772,1.753,929,1.333,930,1.793,948,1.793,1036,1.169,1196,3.577,1325,0.98,1337,2.275,1365,4.115,1369,4.208,1370,1.441,1371,1.188,1372,1.441,1381,1.899,1487,1.605,1562,1.487,1601,1.54,1644,2.595,1703,4.955,1741,1.605,1747,4.989,1751,4.165,1813,2.444,1814,2.073,1815,2.514,1865,2.941,1870,1.793,1875,1.54,1885,1.685,1886,1.605,1887,1.487,1888,1.957,1889,1.957,1890,1.957,1891,4.545,1892,1.957,1893,1.957,1894,1.957,1895,1.957,1896,1.957,1897,1.957,1898,1.957,1899,5.446,1900,3.416,1901,1.957,1902,1.793]],["t/415",[0,1.18,13,2.599,14,1.294,17,3.02,19,2.471,21,2.206,51,3.425,53,0.831,61,1.182,64,1.212,65,2.306,67,1.279,68,1.531,88,2.519,96,1.598,131,2.206,138,2.147,143,2.268,149,1.975,160,1.575,168,3.701,246,1.451,272,1.954,276,3.326,311,2.238,340,1.564,353,2.176,360,2.425,385,1.575,435,2.119,489,2.764,513,1.895,567,2.764,609,3.539,653,3.25,680,1.46,700,2.306,770,2.206,771,2.313,788,5.006,1182,3.539,1183,3.539,1184,4.555,1185,2.764,1186,4.555,1187,2.425,1198,2.383,1199,2.933,1202,2.843,1204,2.933,1206,2.933,1611,2.843,1736,3.326,1737,3.539,1750,2.119,1809,3.166,1830,5.261,1837,3.326,1861,3.326,1875,3.039,1903,5.164,1904,3.166,1905,5.998,1906,3.862,1907,3.862,1908,3.862,1909,5.998,1910,3.862,1911,3.862,1912,3.862,1913,3.539,1914,3.166,1915,5.164,1916,5.998,1917,5.998,1918,5.998,1919,5.495,1920,3.862,1921,3.862,1922,3.166,1923,3.539,1924,3.539]],["t/417",[138,4.329,769,5.732,771,3.004,786,4.981,1198,4.805,1809,6.384,1904,6.384,1925,7.135,1926,7.135,1927,7.787,1928,11.72,1929,7.787,1930,7.787,1931,7.135,1932,7.787,1933,7.787,1934,7.787]],["t/419",[64,1.616,154,2.691,169,1.879,233,1.334,771,3.917,785,5.225,786,6.495,787,5.13,789,5.845,1198,5.04,1830,5.845]],["t/421",[64,1.44,160,3.547,169,1.675,233,1.608,252,3.4,769,6.401,771,4.07,785,6.302,786,6.75,787,5.461,788,5.922,789,7.049,1184,4.887,1830,4.604,1926,5.895,1935,9.852]],["t/423",[0,2.087,26,2.166,116,2.634,131,3.901,168,5.585,182,2.724,205,6.163,246,3.4,251,2.6,282,2.891,385,4.14,395,2.806,445,5.599,556,5.375,863,4.65,901,4.887,1198,5.585,1202,6.662,1333,5.187,1543,5.881,1764,5.375,1904,7.421]],["t/425",[26,1.877,64,1.379,154,1.95,169,1.397,233,0.967,385,4.906,581,3.132,700,3.535,771,3.169,785,3.787,787,3.717,1198,5.068,1199,4.497,1202,4.358,1204,4.497,1206,4.497,1208,4.659,1210,4.659,1212,4.659,1214,4.659,1216,4.659,1830,4.236,1904,9.862]],["t/427",[64,1.306,154,2.205,169,1.519,233,1.093,581,3.541,700,3.996,771,3.444,785,4.281,787,4.203,788,4.557,933,5.267,1198,5.51,1199,5.083,1202,4.926,1204,5.083,1206,5.083,1208,5.267,1210,5.267,1212,5.267,1214,5.267,1216,5.267,1794,6.132,1795,6.132,1796,6.132,1797,6.132,1798,6.132,1799,6.132,1800,6.132,1801,6.132,1802,6.132,1803,6.132]],["t/429",[26,1.442,37,1.596,40,4.166,50,2.412,52,2.875,57,2.51,61,0.896,64,0.665,96,1.882,105,2.495,108,2.597,110,2.378,163,1.382,182,1.368,207,2.065,210,2.406,216,3.74,233,0.742,238,1.868,250,2.634,259,2.089,281,4.908,282,1.295,377,3.773,393,4.191,394,2.167,395,3.704,438,2.875,457,2.909,476,3.028,510,3.347,531,3.041,543,2.855,564,2.188,589,3.879,680,2.568,792,2.909,864,3.636,1366,4.999,1936,5.345,1937,4.547,1938,4.547,1939,4.547,1940,4.547,1941,4.166,1942,3.915,1943,3.728]],["t/431",[52,3.78,64,1.306,116,2.581,169,1.519,216,3.485,233,1.093,238,3.668,259,3.075,343,2.391,377,2.617,385,2.729,393,4.129,395,3.668,432,3.251,531,2.997,543,4.203,562,3.103,564,3.22,790,4.281,792,4.281,793,4.203,804,4.203,929,4.557,1325,3.351,1626,3.877,1936,5.267,1944,5.487,1945,5.487]],["t/433",[52,2.777,64,0.959,163,1.498,169,1.116,233,1.071,395,3.62,531,2.938,722,3.356,790,4.197,791,4.369,792,4.197,793,4.12,794,4.695,795,4.695,796,4.695,797,4.695,798,4.695,799,4.695,800,4.695,801,4.695,802,4.695,803,4.695,804,4.12,805,4.695,806,4.695,807,4.695,808,4.695,809,4.695,810,4.695,811,4.695,812,4.695,813,4.695,814,4.695,1626,3.801,1805,4.829]],["t/435",[13,4.177,26,2.386,52,4.503,53,2.29,57,2.323,63,4.492,64,1.64,96,3.113,207,2.287,343,2.688,680,2.845,727,5.538,772,4.103,1483,4.813]],["t/437",[52,4.297,53,1.47,64,1.644,116,2.634,125,2.456,154,3.344,169,1.539,233,1.657,432,3.318,531,3.058,562,3.166,751,4.548,772,2.634,868,3.701,1325,3.42,1486,5.027,1626,3.957,1807,5.027,1946,9.051,1947,6.83]],["t/439",[52,2.951,53,1.501,55,3.176,64,1.5,169,1.56,207,2.12,233,1.674,722,4.693,727,5.132,815,4.862,868,4.972,1486,6.754,1626,5.316,1805,6.754,1807,6.754,1948,6.973,1949,6.973,1950,6.973,1951,6.973,1952,6.973]],["t/441",[0,1.301,5,2.177,10,4.134,14,1.426,18,1.676,37,2.268,44,3.133,45,6.127,48,1.328,57,1.314,64,1.142,70,3.8,76,1.975,81,3.025,98,3.419,114,1.906,125,1.754,131,2.431,132,2.279,137,1.991,154,1.402,169,1.099,173,1.956,176,2.684,182,1.945,193,3.133,207,1.965,233,0.695,236,2.048,251,2.46,252,1.664,282,1.212,341,2.835,342,1.485,369,2.835,386,1.973,436,3.987,440,2.777,465,3.233,474,2.131,477,2.048,488,2.835,538,1.802,677,1.973,718,2.826,719,2.542,757,2.431,758,2.398,856,5.096,1332,3.35,1333,3.233,1338,2.898,1530,5.59,1545,3.665,1582,3.046,1953,3.9,1954,3.9,1955,3.9,1956,2.898]],["t/443",[34,3.931,61,1.483,81,2.609,160,3.068,171,3.655,173,4.429,176,2.153,182,2.264,207,2.287,233,1.737,272,3.807,294,3.691,369,5.01,470,5.714,474,3.767,475,5.123,476,5.01,481,6.168,506,4.907,659,5.538]],["t/445",[37,2.096,50,2.121,76,1.825,81,2.072,82,2.63,98,3.16,131,3.412,132,3.198,151,3.512,153,2.289,154,2.723,160,2.436,169,1.612,171,2.902,176,2.365,207,1.816,216,2.072,224,4.165,233,1.547,246,3.105,282,1.701,342,2.084,421,3.32,426,5.287,440,3.896,473,5.505,474,2.991,477,3.976,479,5.628,480,6.504,481,4.897,677,2.769,1885,5.143,1957,5.973,1958,5.973]],["t/447",[48,2.715,70,6.207,154,2.867,207,2.646,246,3.269,251,3.312,282,2.478,313,4.312,479,5.925,549,5.566,718,2.82]],["t/449",[53,1.47,67,2.263,160,3.691,163,1.161,169,1.726,176,2.905,233,1.657,401,4.144,426,4.369,473,4.548,475,4.65,477,3.286,479,4.65,506,4.455,514,4.078,549,4.369,668,3.456,669,3.195,674,5.375,718,2.213,1546,5.881,1781,4.65,1959,6.83,1960,6.83,1961,6.83,1962,6.83]],["t/451",[0,2.845,64,1.361,104,4.067,116,3.591,137,4.355,342,3.248,718,3.016]],["t/453",[81,3.69,101,4.559,114,3.948,125,2.888,176,2.523,357,5.751,718,2.857,1176,6.681]],["t/455",[81,2.868,169,1.74,216,3.549,718,3.761,1072,3.747,1176,5.193,1591,6.281,1592,6.281,1593,6.281,1963,7.121]],["t/457",[81,2.669,163,1.663,216,3.729,350,5.021,351,6.554,354,4.706,718,3.169,1176,4.833,1964,8.423,1965,9.258,1966,7.698]],["t/459",[5,4.51,61,2.098,114,3.948,125,2.393,176,2.523,462,6.309,718,3.448,1072,3.229,1190,6.697]],["t/461",[53,1.321,61,1.66,66,1.428,76,2.574,101,3.174,125,1.666,163,1.844,169,1.432,203,2.45,216,3.589,305,3.124,354,4.052,718,3.513,847,3.926,894,3.458,1610,4.662,1964,5.285,1965,5.285,1967,6.138,1968,6.138,1969,6.138,1970,6.138,1971,6.138,1972,6.138,1973,6.138,1974,6.138,1975,6.138,1976,5.624]],["t/463",[0,2.806,53,1.977,54,3.222,61,1.81,100,5.482,101,4.748,135,6.974,1362,7.225]],["t/465",[0,1.13,13,2.927,14,0.506,17,2.381,21,3.858,26,0.86,35,1.028,41,1.205,47,1.3,51,0.862,53,2.071,61,1.409,64,1.285,65,0.901,66,0.631,67,2.912,68,0.598,80,1.331,85,0.862,96,1.868,98,0.799,100,1.62,104,1.185,116,0.582,122,1.147,125,0.41,126,1.3,138,0.839,143,1.398,146,2.111,147,0.808,149,1.388,153,1.994,155,0.839,163,0.885,167,1.14,182,0.817,201,1.647,203,0.603,210,1.436,213,0.7,216,0.524,236,2.172,246,1.02,251,1.981,252,0.59,259,1.247,272,0.764,275,1.3,276,3.183,301,0.489,339,0.808,340,1.099,343,0.97,353,1.529,357,0.985,358,0.682,360,0.948,362,0.948,376,1.73,377,1.445,385,0.616,415,1.053,429,0.719,432,0.733,438,1.911,449,0.839,466,0.931,489,1.942,491,0.764,494,1.188,510,1.111,518,1.08,535,0.733,538,0.639,541,2.078,550,0.916,559,1.147,562,0.7,564,0.726,567,1.942,568,1.111,574,1.028,589,0.862,590,0.67,593,1.147,606,0.808,634,2.039,641,1.188,643,0.726,646,1.848,652,1.054,653,2.003,658,1.111,668,0.764,669,1.729,680,0.571,718,1.198,726,1.147,745,2.747,771,2.758,772,2.758,864,1.453,1058,1.028,1185,1.08,1186,2.061,1187,0.948,1189,4.41,1190,1.147,1196,1.188,1198,1.674,1225,0.948,1370,1.111,1371,0.916,1372,1.111,1374,2.207,1375,2.215,1376,0.931,1483,1.736,1643,2.337,1663,1.238,1681,1.3,1684,1.111,1686,2.909,1688,1.111,1689,1.383,1701,1.111,1703,0.966,1709,1.188,1750,2.029,1777,1.383,1784,1.3,1820,2.337,1829,1.188,1830,1.08,1840,1.238,1861,1.3,1903,2.337,1915,1.3,1922,1.238,1925,1.383,1936,2.136,1977,1.383,1978,1.51,1979,1.51,1980,2.714,1981,1.51,1982,1.51,1983,1.51,1984,1.51,1985,2.714,1986,3.697,1987,1.238,1988,1.51,1989,1.51,1990,1.51,1991,1.51,1992,1.51,1993,1.51,1994,1.51,1995,1.51,1996,1.51,1997,1.51,1998,1.51,1999,1.51,2000,2.714,2001,1.51,2002,1.51,2003,1.51,2004,1.51,2005,1.51,2006,1.51,2007,1.51,2008,1.51,2009,2.714,2010,1.3,2011,1.238,2012,1.383,2013,1.51]],["t/468",[0,2.153,17,2.895,19,4.507,21,4.025,50,2.503,55,3.209,61,1.389,64,1.03,246,3.471,296,4.082,313,3.492,315,2.682,435,3.867,466,4.348,491,4.675,533,5.545,605,4.596,655,5.777,656,7.018,1365,3.969,1627,6.067,1773,5.777,1836,5.352,1887,5.352,2014,6.067,2015,7.018]],["t/470",[0,0.441,5,0.739,17,0.593,18,0.569,26,0.458,28,1.775,35,0.983,37,1.532,43,2.53,44,1.063,48,0.451,52,1.104,53,1.322,54,1.771,55,1.188,57,0.446,61,0.703,64,0.211,65,0.862,66,0.607,67,1.446,80,0.709,85,2.036,87,0.739,95,2.389,96,1.475,136,0.641,151,0.849,163,2.067,182,0.435,216,0.501,224,1.007,228,3.437,281,1.22,282,1.243,288,1.033,301,2.263,315,2.508,325,1.396,343,2.195,353,0.814,358,1.61,376,2.158,377,1.019,386,0.669,429,0.688,446,2.239,508,1.136,538,1.509,569,2.138,574,0.983,579,2.396,606,0.773,653,0.783,691,1.184,700,0.862,745,0.955,770,0.825,847,0.924,932,1.136,1036,3.014,1058,0.983,1163,1.323,1325,1.785,1329,1.981,1355,4.38,1362,1.136,1364,0.876,1365,3.173,1366,4.146,1380,2.138,1381,0.803,1500,1.244,1515,2.245,1579,1.184,1581,1.323,1632,0.962,1651,1.097,1750,0.793,1780,1.097,2016,1.444,2017,5.047,2018,2.608,2019,1.444,2020,1.444,2021,1.444,2022,1.444,2023,1.444,2024,3.565,2025,1.444,2026,1.444,2027,1.444,2028,1.444,2029,1.444,2030,1.444,2031,1.444,2032,1.444,2033,1.444,2034,1.444,2035,1.444,2036,1.444,2037,1.444,2038,1.444,2039,1.444,2040,1.444,2041,1.444,2042,1.444,2043,1.444,2044,1.444,2045,1.444,2046,1.444,2047,2.608,2048,1.444,2049,1.444,2050,1.444,2051,1.444,2052,1.444,2053,1.444,2054,1.444,2055,1.444,2056,1.444,2057,1.323,2058,1.444,2059,1.444,2060,1.444,2061,1.444,2062,1.444,2063,1.444,2064,1.444,2065,1.444,2066,3.565,2067,1.444,2068,1.444,2069,1.444,2070,1.444,2071,1.244,2072,1.444,2073,1.444,2074,1.444,2075,1.444,2076,1.444,2077,2.608,2078,1.444,2079,2.608,2080,1.444,2081,1.444,2082,1.444,2083,1.444,2084,1.444,2085,1.444,2086,2.608,2087,1.444,2088,1.444,2089,3.565,2090,1.444,2091,3.565,2092,1.444,2093,1.444,2094,1.444,2095,1.444,2096,1.444,2097,2.389,2098,1.444,2099,1.444,2100,1.444,2101,1.444,2102,1.444,2103,1.444,2104,1.444,2105,1.444,2106,1.444,2107,1.444,2108,2.608,2109,1.444,2110,1.444,2111,1.184,2112,2.608,2113,1.444,2114,2.608,2115,1.444,2116,3.565,2117,1.444,2118,1.444,2119,1.444,2120,1.444,2121,1.444,2122,1.444,2123,1.444,2124,1.444,2125,1.444]],["t/473",[37,3.054,44,6.405,48,2.715,55,3.964,61,1.715,81,3.018,154,2.867,207,2.646,341,5.795,474,4.357,851,4.659,1500,7.493]],["t/475",[0,1.724,5,2.886,14,2.343,17,1.468,18,1.406,19,4.473,20,1.913,48,1.761,51,2.04,53,1.215,54,1.98,55,3.618,57,1.742,59,2.168,64,1.459,65,4.175,66,1.312,67,1.869,73,1.868,81,1.239,87,3.576,112,1.868,125,0.97,132,1.913,136,1.586,158,1.446,182,1.075,201,2.168,233,0.583,250,2.07,252,2.206,281,4.667,305,1.325,310,3.096,313,1.77,343,2.016,347,2.929,353,2.013,429,1.702,435,3.096,438,1.512,459,2.713,466,3.481,513,2.768,518,2.556,545,2.811,562,4.262,632,3.842,661,2.811,688,2.811,853,2.811,1187,2.243,1225,2.243,1250,3.076,1318,2.491,1326,2.713,1375,1.753,1377,2.811,1508,2.811,1530,2.556,1578,4.858,1579,2.929,1688,2.63,1709,2.811,1785,2.929,2057,6.407,2126,3.076,2127,3.273,2128,3.076,2129,3.573,2130,3.573,2131,3.573,2132,3.573,2133,3.573]],["t/477",[0,2.024,15,3.34,17,1.806,48,1.372,52,1.861,53,2.152,55,2.003,57,1.358,61,1.971,64,0.968,65,2.626,104,1.921,112,2.3,136,1.952,138,3.682,139,2.668,158,1.78,251,3.033,282,1.252,288,3.146,301,2.146,311,2.548,315,4.303,340,1.78,343,2.367,358,1.986,365,2.548,377,2.589,386,4.41,427,4.51,432,2.136,508,3.46,539,4.019,562,2.038,579,2.413,658,3.237,738,3.237,768,3.066,847,2.813,1032,2.668,1058,2.994,1187,2.761,1189,2.585,1502,3.786,1701,3.237,1709,5.212,2071,3.786,2134,4.397,2135,4.397,2136,4.397,2137,4.397,2138,4.397]],["t/479",[0,1.536,2,2.956,26,2.319,28,3.423,35,3.423,48,2.69,53,1.082,54,1.764,64,1.069,66,1.169,75,2.759,105,2.759,139,3.05,158,2.035,182,1.513,201,4.437,207,1.528,214,4.592,216,2.536,239,5.233,244,4.98,252,1.965,282,2.083,301,2.37,315,1.913,321,2.913,325,4.615,343,1.796,347,4.122,358,2.27,359,3.423,362,3.157,376,2.802,415,3.505,417,3.423,445,4.122,456,3.505,493,3.505,539,4.437,579,4.013,591,4.606,628,3.423,637,3.423,640,3.216,1177,3.279,1381,2.795,1644,3.818,1744,4.329,1823,4.606,1883,4.329,2139,5.027,2140,4.606]],["t/481",[0,2.407,37,1.956,48,2.457,53,1.695,54,1.956,55,3.587,57,1.721,59,3.382,61,1.552,64,1.151,68,2.209,78,3.636,86,3.795,139,3.382,143,2.978,154,1.836,246,2.094,281,2.607,343,1.992,358,2.517,386,2.584,419,5.137,459,4.233,513,2.734,514,4.702,523,4.945,539,3.382,556,4.386,576,5.797,637,3.795,661,6.197,1188,4.386,1315,5.037,1325,3.943,1329,4.233,1632,3.712,1651,4.233,2015,4.233,2111,4.569,2141,5.107,2142,5.574]],["t/483",[0,2.694,26,2.796,64,1.289,73,4.611,81,3.058,101,4.559,112,4.611,157,3.982,282,2.511,1773,7.229,2015,6.697]],["t/486",[0,2.765,64,0.998,76,2.494,78,2.986,104,2.982,109,4.546,110,2.394,113,4.142,116,3.149,150,5.902,155,5.845,160,2.784,162,4.885,163,0.779,176,1.954,182,2.054,191,6.749,197,2.512,282,1.304,289,5.902,306,3.603,353,2.579,436,4.212,437,3.477,454,5.878,455,3.049,680,1.731,865,3.192,1638,7.12,1787,2.875,2143,4.579,2144,4.195,2145,4.579,2146,3.942,2147,4.195,2148,4.579,2149,4.579,2150,6.827,2151,6.827,2152,3.942,2153,3.37,2154,4.195,2155,4.195]],["t/488",[0,1.288,14,1.412,26,0.793,32,3.862,37,2.513,48,0.78,51,2.408,55,1.139,64,0.799,66,0.582,68,1.671,73,1.308,75,1.372,81,1.895,82,1.856,98,2.23,104,1.841,113,1.517,114,1.12,116,2.763,124,2.558,150,1.631,155,1.39,160,3.167,161,5.068,162,1.789,163,0.425,169,0.929,171,3.116,172,3.121,173,1.937,176,2.05,179,1.899,180,2.153,182,1.268,183,2.153,185,3.317,186,1.631,197,1.372,207,1.95,216,1.895,242,1.293,248,1.899,259,1.149,282,0.712,295,2.696,296,1.449,304,3.037,306,1.968,310,2.313,341,2.807,343,0.893,348,2.284,354,1.203,362,2.647,395,2.245,424,1.789,429,3.057,431,1.149,435,2.313,436,1.543,438,1.058,455,1.665,459,3.202,474,1.252,479,1.703,486,1.703,501,1.665,503,1.703,531,1.12,548,2.153,549,2.696,551,3.202,564,1.203,566,2.153,601,1.789,648,1.631,656,3.202,664,2.153,680,1.594,744,1.493,864,1.339,1032,2.558,1058,1.703,1171,2.153,1333,1.899,1365,2.375,1409,2.05,1479,2.696,1482,1.631,1517,2.291,1591,1.899,1592,1.899,1593,1.899,1633,1.899,1781,1.703,1963,4.705,2153,1.841,2156,3.63,2157,2.501,2158,2.291,2159,4.215,2160,4.215,2161,2.501,2162,4.705,2163,2.05,2164,2.153,2165,2.501,2166,2.291,2167,2.291,2168,2.291,2169,3.862,2170,2.291,2171,2.291,2172,2.291]],["t/490",[0,3.175,76,2.592,116,4.008,155,4.714,163,1.442,197,4.654,455,5.648,680,3.207,1787,5.325,2153,6.242,2154,7.77,2155,7.77]],["t/492",[0,2.273,64,1.399,68,4.194,114,4.285,116,3.692,150,6.902,155,6.425,163,1.265,197,4.082,353,4.191,454,6.406,455,4.954,680,2.813,2153,5.476]],["t/494",[0,1.703,14,1.178,18,1.384,37,2.428,51,2.008,66,0.818,68,3.402,73,1.839,75,1.929,81,1.219,82,2.454,96,1.455,104,1.536,110,1.839,116,3.31,138,1.954,155,4.771,160,3.5,161,4.917,162,3.987,163,0.598,168,2.169,169,1.177,171,3.824,172,2.008,174,2.516,176,1.594,179,2.67,180,3.027,182,1.676,186,2.293,197,1.929,207,1.069,216,1.219,242,1.818,248,2.67,259,1.615,282,1.001,296,2.037,348,3.019,354,1.691,395,2.843,431,1.615,436,3.438,438,1.488,452,1.882,455,2.341,479,2.394,486,2.394,501,2.341,531,1.574,548,3.027,549,2.249,551,4.232,566,3.027,585,2.588,601,2.516,648,2.293,664,3.027,680,2.107,744,2.099,864,1.882,1482,2.293,1591,2.67,1592,2.67,1593,2.67,1633,2.67,1775,2.067,1781,2.394,1963,5.959,2153,2.588,2158,3.221,2166,3.221,2167,3.221,2168,3.221,2169,5.105,2170,3.221,2171,3.221,2172,3.221,2173,3.516,2174,3.027]],["t/496",[0,1.929,14,2.115,21,3.605,26,2.002,37,2.215,48,1.97,55,2.875,64,0.923,81,2.189,114,4.688,116,3.311,155,5.82,163,1.073,169,1.073,174,4.517,176,2.792,182,2.583,197,3.464,207,2.61,313,3.128,424,4.517,436,3.895,455,4.204,474,3.161,564,3.037,680,2.387,1058,4.298,2153,4.646,2156,7.392]],["t/498",[118,6.852,154,3.067,158,3.769,229,5.846,277,8.016,315,3.543,2147,8.53]],["t/500",[0,2.119,5,2.391,13,3.961,15,3.551,53,1.006,54,3.898,61,0.922,65,2.791,67,2.297,93,3.441,125,1.269,158,1.893,163,1.555,167,1.964,301,1.515,343,1.67,358,3.732,370,3.113,376,2.656,377,1.828,426,2.99,438,1.979,543,2.935,562,2.167,564,2.249,576,3.441,605,3.049,668,2.365,669,2.187,716,3.113,745,1.712,756,3.833,770,2.67,771,2.674,845,4.283,1058,3.183,1225,2.935,1245,5.97,1365,2.633,1376,2.884,1703,2.99,1914,6.775,2175,4.675,2176,4.675,2177,4.675,2178,4.675,2179,4.675,2180,4.675,2181,4.675,2182,4.675,2183,4.675,2184,4.675,2185,4.675,2186,4.675,2187,4.675]],["t/502",[0,2.925,61,1.467,64,1.399,75,4.082,78,4.853,93,5.476,114,4.285,125,2.019,138,4.136,176,2.129,198,6.099,342,3.691,717,4.374,1502,6.406,1524,7.847,2163,6.099,2188,7.44,2189,7.44,2190,7.44]],["t/504",[0,2.465,2,3.391,13,3.495,14,1.932,18,2.27,26,1.828,37,2.024,48,1.799,55,2.626,57,1.781,61,1.137,64,0.843,70,3.391,76,2.465,81,2,108,4.607,176,2.308,207,2.452,228,5.492,237,4.244,238,3.313,246,2.166,342,2.012,348,4.371,372,2.286,474,2.887,477,2.774,482,4.244,514,3.443,538,2.441,543,3.621,547,5.937,716,3.84,717,3.391,730,2.918,1355,5.554,1508,4.538,2191,5.767,2192,5.767]],["t/506",[0,2.659,26,2.759,56,4.186,64,1.272,163,1.795,372,4.184,562,4.034,1325,4.357,2193,4.659,2194,4.659]],["t/508",[14,2.939,34,2.114,49,4.783,53,1.888,54,2.624,55,3.406,56,2.494,61,1.022,64,1.283,75,2.844,110,2.711,157,2.341,163,0.881,167,2.177,169,0.881,207,2.273,273,4.25,320,2.494,345,3.937,372,2.055,419,3.381,427,3.529,432,3.632,450,3.381,456,3.614,462,3.709,463,4.25,508,4.079,538,3.165,562,2.403,571,4.25,680,3.631,718,1.68,743,3.095,744,3.095,745,2.739,1315,3.316,1325,4.392,1380,4.25,1585,4.749,1787,3.255,1914,4.25,1943,4.25,1956,3.529,2195,4.463,2196,5.184]],["t/510",[216,3.812,259,4.278,354,4.479,1325,5.856]],["t/512",[14,2.972,56,3.188,57,2.046,68,2.627,81,2.298,87,4.537,148,3.733,163,1.508,169,1.127,176,1.896,203,2.645,207,2.014,213,3.072,233,1.082,311,3.839,343,2.368,354,4.267,378,3.188,452,3.547,562,4.112,1325,4.441,2197,5.706,2198,5.706,2199,5.706,2200,8.871,2201,5.706,2202,6.626,2203,6.626,2204,5.706]],["t/514",[0,2.496,26,2.59,48,2.549,64,1.194,76,3.103,163,1.966,242,4.224,305,3.03,322,4.427,730,4.133,1355,4.878,2193,4.373,2194,4.373]],["t/516",[0,0.692,14,0.758,17,2.085,18,1.524,19,2.477,20,3.217,26,0.717,37,1.359,43,1.311,48,2.59,52,2.149,53,1.586,54,1.781,57,1.196,61,0.763,63,1.351,65,1.351,76,2.251,116,1.494,120,1.719,125,0.614,137,1.811,149,1.157,153,0.867,163,0.385,167,0.951,169,0.863,182,0.681,203,2.399,207,1.177,217,2.655,233,0.632,236,1.863,238,1.591,240,5.421,252,0.885,272,4.547,280,1.476,281,4.203,282,0.644,294,1.11,305,3.608,307,1.578,315,2.571,317,3.25,321,4.267,322,2.099,325,1.211,342,1.771,343,1.814,344,1.666,347,1.855,392,1.948,395,1.591,401,2.35,402,3.334,403,3.334,404,3.175,406,1.948,417,1.541,418,2.073,419,1.476,420,2.073,429,1.078,437,1.719,438,0.958,470,1.719,491,1.959,506,1.476,513,1.11,514,1.351,521,4.371,524,3.175,533,1.781,534,1.855,536,1.666,537,1.619,541,0.903,556,1.781,567,2.771,582,2.85,590,1.719,718,0.733,719,1.351,730,1.959,745,1.418,769,1.666,1331,2.7,1474,1.719,1560,3.047,1573,1.781,1638,1.781,1642,2.073,1764,3.047,1913,2.073,1956,1.541,2205,2.263,2206,2.263,2207,5.076,2208,2.263,2209,2.263,2210,2.263,2211,2.073,2212,2.073,2213,6.01,2214,3.548,2215,3.334,2216,2.263,2217,2.263]],["t/518",[305,4.252]],["t/520",[20,4.599,163,1.461,169,1.461,203,3.429,281,4.899,305,3.186,395,3.529,408,2.611,416,6.524,590,3.814,826,6.146,2218,8.59]],["t/522",[26,2.872,163,1.54,242,4.683,408,3.287,868,4.908,1355,5.408,2193,4.848,2194,4.848]],["t/524",[14,2.412,53,2.463,61,2.053,64,1.523,80,4.596,137,3.367,201,4.368,294,3.532,342,2.511,457,4.605,538,3.966,680,2.722,772,2.777,786,4.605,1176,4.52,1235,5.902,1356,5.902,2219,6.596]],["t/526",[53,2.446,64,1.272,154,2.867,163,1.48,169,1.795,233,1.421,408,2.646,866,4.716,868,4.716]],["t/528",[53,1.78,169,1.889,233,1.35,408,2.514,866,4.482,868,6.021,1614,6.508,1615,8.052,1616,6.508,1617,6.508,1618,6.508]],["t/530",[26,2.724,76,2.625,163,2,242,4.442,408,3.184,1355,5.129,1622,7.042,2193,4.599,2194,4.599]],["t/532",[53,1.898,61,1.738,64,1.556,125,2.393,154,2.905,233,1.439,372,3.495,408,2.681,772,3.401,1621,4.242]],["t/534",[53,2.255,55,3.912,64,1.531,154,2.83,207,2.611,233,1.71,408,2.611,772,3.313,1621,4.132,1622,7.042]],["t/536",[64,1.272,163,1.48,169,1.48,233,1.723,408,2.646,541,3.474,1621,5.078,1622,7.134,2220,10.556]],["t/538",[26,2.724,76,2.625,163,2,242,4.442,408,3.184,866,4.655,1355,5.129,2193,4.599,2194,4.599]],["t/540",[14,2.579,53,2.436,61,1.517,64,1.43,125,2.918,136,3.418,154,2.536,163,1.309,169,1.309,233,1.257,238,3.162,246,2.892,372,3.051,408,2.34,538,3.258,866,4.171]],["t/542",[53,2.278,55,3.389,64,1.088,66,1.731,82,3.276,116,2.87,153,2.85,154,2.451,169,1.628,207,2.262,233,1.215,282,2.119,358,3.359,408,2.262,523,4.672,538,3.149,851,3.983,866,4.032,868,4.032,870,4.191,872,5.392]],["t/544",[53,1.78,169,1.889,233,1.35,408,2.514,866,4.482,868,6.021,1614,6.508,1615,8.052,1616,6.508,1617,6.508,1618,6.508]],["t/546",[53,1.813,137,2.871,151,3.609,163,1.044,169,1.635,204,4.83,233,1.002,259,2.82,305,2.277,348,3.326,350,4.004,351,3.556,395,2.521,408,1.866,432,2.982,649,4.392,766,5.494,851,3.286,861,5.197,866,3.326,868,4.564,870,3.458,872,3.458,873,4.174,875,4.174,937,5.609,2221,6.138,2222,6.138,2223,6.138,2224,6.138,2225,6.138,2226,6.138,2227,6.138,2228,7.717]],["t/548",[26,2.759,76,2.659,163,2.009,242,4.5,408,3.209,590,3.864,2193,4.659,2194,4.659]],["t/550",[14,2.804,20,4.481,26,1.928,34,2.48,48,2.612,61,1.65,64,0.889,81,2.109,87,3.111,100,3.632,128,4.05,132,3.256,136,2.701,182,2.518,203,2.428,252,2.378,281,2.845,305,2.256,342,2.92,395,3.438,474,3.045,480,4.786,493,4.241,562,2.82,579,3.338,589,4.78,590,4.799,627,4.62,645,5.237,680,2.3,1072,2.228,1781,4.141,2229,6.082]],["t/552",[590,5.09]],["t/554",[19,4.655,20,5.051,124,4.415,153,2.788,159,5.207,163,1.238,169,1.238,203,2.905,252,2.845,281,4.898,305,2.699,395,2.989,408,2.212,416,5.527,491,3.682,588,5.966,590,4.19,613,5.356,1072,3.456,2230,6.668,2231,7.277,2232,7.277]],["t/556",[26,2.759,76,2.659,163,2.009,242,4.5,408,3.209,590,3.864,2193,4.659,2194,4.659]],["t/558",[153,3.835,590,4.444]],["t/560",[590,5.317]],["t/562",[26,2.724,48,2.681,76,2.625,163,1.781,169,1.461,305,3.186,320,5.038,408,2.611,1355,5.129,2193,4.599,2194,4.599]],["t/564",[26,2.796,48,2.751,107,6.697,169,1.499,282,2.511,305,3.27,315,3.356,316,4.901,338,6.309,343,3.151,408,2.681]],["t/566",[14,2.993,48,3.347,64,1.306,169,1.824,305,3.978,408,2.716,680,3.379]],["t/568",[14,3.454,37,3.618,48,2.199,53,1.517,64,1.507,163,1.198,169,1.753,281,3.296,305,3.824,408,3.134,506,4.596,513,3.457,680,3.898,2233,7.047,2234,7.047,2235,7.047]],["t/570",[26,2.833,163,1.824,242,4.621,372,3.542,562,4.142,1325,5.37,2193,4.784,2194,4.784]],["t/572",[37,3.267,61,1.835,207,2.83,342,3.248,562,5.095,1325,4.661]],["t/574",[216,3.471,562,4.64]],["t/576",[14,3.117,50,2.529,57,2.199,68,2.823,87,4.758,163,1.211,169,1.211,176,2.038,203,2.843,207,2.165,233,1.163,311,4.126,343,2.545,452,3.813,562,3.301,722,4.758,1325,4.658,2197,6.132,2198,6.132,2199,6.132,2201,6.132,2204,6.132,2236,7.122,2237,7.122,2238,7.122]],["t/578",[26,2.759,76,2.659,163,2.009,242,4.5,408,3.209,1630,6.068,2193,4.659,2194,4.659]],["t/580",[2,2.258,13,1.664,14,1.286,21,2.193,27,3.022,50,1.364,56,1.847,57,1.844,61,0.757,66,2.544,68,1.522,87,1.964,96,1.589,109,2.557,137,1.796,152,2.917,160,1.566,163,0.653,167,1.613,182,1.797,207,1.815,233,0.627,281,1.796,282,2.086,315,1.462,317,1.847,358,1.734,359,2.615,365,2.225,370,2.557,409,2.505,438,1.625,491,1.943,510,2.826,541,3.298,563,2.826,568,5.392,573,4.445,589,2.193,590,1.705,605,2.505,634,1.734,646,2.615,658,2.826,680,1.452,1056,4.699,1065,3.306,1325,1.923,1381,2.135,1482,7.342,1629,5.392,1630,2.678,1836,2.917,1902,5.471,2239,6.006,2240,3.84,2241,3.84,2242,6.006,2243,3.84,2244,3.022,2245,3.84,2246,3.306,2247,3.518,2248,3.518,2249,3.518,2250,3.518,2251,3.518]],["t/582",[1630,8.251,2239,7.852,2242,7.852]],["t/584",[21,3.105,48,2.415,50,1.931,56,2.616,57,2.782,66,2.412,68,3.067,81,1.886,85,3.105,87,2.781,104,2.375,152,4.13,161,2.695,163,0.925,175,3.355,182,1.636,207,2.352,233,0.888,259,2.498,263,6.089,271,4.682,281,2.543,300,3.414,409,3.547,438,3.275,573,4.695,576,4.002,589,3.105,722,2.781,766,3.547,778,3.791,929,3.702,937,3.621,1043,4.458,1377,4.279,1630,5.396,2239,7.386,2242,7.386,2252,5.437,2253,5.437,2254,5.437]],["t/586",[64,1.4,163,2.012,652,3.719]],["t/588",[13,1.918,41,1.965,53,2.054,61,0.873,64,1.17,66,1.03,67,1.466,73,2.315,82,1.949,86,3.014,110,2.315,125,2.171,151,4.704,153,1.696,207,1.346,245,2.564,246,1.663,282,1.261,294,2.172,301,2.157,313,2.194,340,1.792,342,1.544,360,2.78,378,2.129,385,1.805,386,2.052,438,2.817,475,3.014,541,1.767,564,2.129,579,2.429,634,4.308,643,2.129,652,1.719,718,3.091,745,3.808,772,2.567,880,3.811,1364,4.854,1365,4.506,1369,3.014,1371,4.854,1381,2.461,1389,5.023,1701,3.258,1702,4.056,1703,2.831,1771,4.258,1772,2.78]],["t/591",[53,1.372,64,1.656,125,2.345,154,2.846,157,2.878,160,3.524,163,1.469,169,1.469,216,2.21,233,1.04,301,2.065,372,2.526,378,4.157,382,2.698,385,2.599,652,3.807,771,2.458,817,3.295,818,3.454,819,3.126,1375,3.126,1595,4.076,1678,4.244,1750,3.497,1770,3.805,1771,4.076,1772,4.002]],["t/593",[64,1.166,163,1.701,169,1.356,233,1.302,382,3.375,385,3.252,652,3.096,817,5.172,818,4.321,819,3.912,868,4.321,874,5.007,933,6.275,1678,5.31,1771,5.1,1772,5.007,1853,6.056]],["t/596",[53,0.883,64,1.527,67,2.529,116,2.944,125,2.072,154,3.038,160,2.561,163,1.455,169,1.777,186,2.674,216,1.422,233,1.397,251,1.56,259,1.884,301,1.328,354,1.972,378,3.021,382,1.735,385,1.672,452,2.195,482,3.018,541,4.502,634,2.836,652,2.964,653,2.222,723,2.53,771,2.944,817,3.247,819,2.011,847,2.622,863,2.791,1375,2.011,1621,1.972,1624,2.31,1750,2.25,1770,2.448,1771,2.622,1772,2.574,1817,3.114,1818,3.114,1826,4.017,1827,5.372,1831,3.756,1832,2.73,1833,2.674]],["t/598",[64,0.758,163,0.881,169,1.633,233,1.568,378,3.597,382,4.064,541,3.501,652,3.406,722,2.651,817,3.867,819,4.711,820,3.529,868,2.809,874,3.255,895,3.815,1496,5.884,1621,2.494,1624,2.92,1771,4.783,1772,4.695,1793,4.25,1814,4.537,1826,4.783,1827,3.255,1832,3.452,1833,3.381,1849,5.884,1850,6.13,1851,4.463,1852,6.13,1853,3.937,1854,4.463,1855,4.463,1856,4.463,1857,4.463,1858,4.463,1859,4.463,1860,4.463]],["t/600",[64,1.4,163,2.012,652,3.719]],["t/602",[41,2.454,50,1.963,53,2.247,64,1.145,66,1.286,67,1.831,73,2.891,82,2.434,110,2.891,125,2.467,153,2.118,282,1.574,294,2.712,301,2.537,340,2.238,342,1.928,378,2.659,385,2.254,438,2.34,541,2.206,564,2.659,634,4.105,643,2.659,652,2.146,718,3.381,745,3.822,772,3.02,1364,3.354,1365,3.114,1371,5.516,1381,3.073,1389,5.708,1772,3.471]],["t/604",[53,1.372,64,1.656,125,2.345,154,2.846,157,2.878,160,3.524,163,1.469,169,1.469,216,2.21,233,1.04,301,2.065,372,2.526,378,4.157,382,2.698,385,2.599,652,3.807,771,2.458,817,3.295,818,3.454,819,3.126,1375,3.126,1595,4.076,1678,4.244,1750,3.497,1770,3.805,1771,4.076,1772,4.002]],["t/606",[64,1.166,163,1.701,169,1.356,233,1.302,382,3.375,385,3.252,652,3.096,817,5.172,818,4.321,819,3.912,868,4.321,874,5.007,933,6.275,1678,5.31,1771,5.1,1772,5.007,1853,6.056]],["t/608",[26,2.655,76,2.559,163,2.036,242,4.33,408,2.546,872,5.809,889,5.258,1355,5,2193,4.483,2194,4.483]],["t/610",[13,1.693,14,1.309,23,7.249,48,3.428,61,0.77,66,2.22,67,3.162,73,2.043,75,2.144,85,2.232,87,1.999,125,1.06,137,1.828,151,3.558,155,2.172,157,2.733,158,1.582,182,1.821,216,1.355,238,1.605,251,1.487,252,1.528,259,1.795,294,3.634,298,2.549,325,3.24,365,5.529,393,2.411,394,1.862,395,1.605,432,1.898,438,1.654,584,3.204,613,4.455,614,3.365,628,2.661,648,2.549,669,2.831,681,3.8,847,2.499,859,4.597,864,2.092,889,5.238,1365,4.173,1374,2.333,1376,2.411,1381,2.172,1684,2.876,1775,2.298,1886,3.204,1956,2.661,2255,3.204,2256,3.58,2257,3.58,2258,3.204,2259,5.545,2260,3.58,2261,3.58,2262,3.58,2263,3.58]],["t/612",[53,1.584,163,1.616,169,1.79,233,1.201,389,5.863,395,3.022,408,2.237,866,3.987,868,5.704,870,4.145,872,4.145,889,4.62,1227,5.01,1614,5.79,1615,7.478,1616,5.79,1617,5.79,1618,5.79,1619,6.032]],["t/615",[2,3.677,53,1.836,61,2.056,64,0.914,66,1.455,82,2.754,96,2.588,114,3.819,125,2.635,147,4.567,167,3.583,173,3.919,176,3.123,182,2.567,236,3.008,301,2.026,342,2.976,376,2.396,377,2.445,386,3.954,605,4.079,677,2.899,745,3.556]],["t/617",[53,1.252,64,0.85,66,1.888,154,2.673,163,1.38,169,1.72,176,1.665,216,3.241,233,1.325,238,3.839,301,3.446,376,3.109,377,3.173,382,3.435,383,4.344,384,6.386,386,5.241,394,2.772,745,2.972,1189,4.771,1483,3.721,2264,5.33]],["t/619",[64,0.988,66,1.573,163,1.529,169,1.529,176,1.935,233,1.468,376,2.59,377,2.643,382,4.275,383,3.619,384,5.32,386,4.168,745,2.476,776,4.245,783,5.32,908,4.714,909,4.714,913,4.714,916,4.714,1691,6.194,1692,4.837,1693,4.837,1694,4.837,1695,4.837,1696,4.837,1697,4.837,1698,4.837,1699,4.837]],["t/622",[2,3.45,41,2.606,53,1.758,61,2.001,64,0.858,66,1.365,82,2.584,96,2.428,114,3.656,125,2.755,147,4.371,173,3.751,176,3.053,182,2.457,236,2.823,246,2.205,301,1.901,342,2.848,376,2.248,377,2.294,386,4.353,535,2.851,605,3.828,677,2.72,718,2.645,745,3.908]],["t/624",[53,1.028,64,0.698,66,2.149,154,2.32,163,1.198,169,1.571,176,1.367,216,3.574,233,1.15,238,4.234,301,3.545,376,3.539,377,3.611,382,2.981,383,3.771,386,5.34,388,4.594,394,3.356,745,3.383,1189,5.431,1483,4.505,2264,4.375]],["t/626",[64,0.802,66,1.81,163,1.539,169,1.324,176,1.569,233,1.271,376,2.982,377,3.043,382,3.83,383,4.167,386,3.608,388,5.077,745,2.851,776,4.887,782,3.823,783,4.314,908,5.427,909,3.823,913,3.823,916,5.427,922,4.314,1692,3.923,1693,3.923,1694,3.923,1695,3.923,1696,3.923,1697,3.923,1698,3.923,1699,3.923,1711,5.023,1712,5.023,1713,5.023,1714,5.023,1715,5.023,1716,5.023,1717,5.023,1718,5.023,1719,5.023,1720,5.023,1721,5.023,1722,5.023]],["t/628",[26,2.759,76,3.226,163,1.48,169,1.48,305,3.228,323,6.068,1355,5.196,2193,4.659,2194,4.659,2265,6.405,2266,6.068]],["t/630",[14,2.841,18,3.338,26,2.689,48,2.646,76,2.592,169,1.442,305,3.146,317,4.08,323,5.913,338,6.068,342,2.959,1668,6.242,2265,6.242,2266,5.913]],["t/632",[18,3.426,64,1.272,169,1.932,305,3.915,318,8.018,323,6.068,2265,6.405,2266,6.068]],["t/634",[37,3.335,64,1.389,163,1.251,169,1.616,305,3.525,318,7.218,323,5.13,402,8.182,403,8.182,404,7.791,586,5.416,2265,6.995,2266,6.626,2267,7.358,2268,7.358,2269,7.358]],["t/636",[26,2.622,76,2.527,163,2.067,242,4.277,408,3.111,872,4.659,875,4.098,1355,4.938,2193,4.427,2194,4.427]],["t/638",[61,2.132,67,3,125,2.458,233,1.479,408,2.753,669,4.237,872,5.102,1072,3.317]],["t/640",[67,3.219,669,4.545,875,4.815,1072,3.559]],["t/642",[163,1.652,723,5.995,724,6.215,875,4.815]],["t/644",[64,1.361,163,2.055,1624,5.244,1833,6.072]],["t/646",[5,3.722,53,1.567,61,1.86,64,1.064,67,3.469,112,3.806,153,2.788,182,2.19,233,1.188,340,2.946,342,3.653,541,2.905,634,3.286,643,3.501,718,2.358,745,2.665,772,2.807,1378,5.074,1621,3.501,1624,4.099,1625,5.074,1887,5.527]],["t/648",[53,1.737,64,1.473,163,2.014,169,1.714,233,1.318,652,3.134,1621,3.882,1624,4.546,1757,5.162,1812,5.162,1814,4.896,1833,5.264]],["t/650",[64,1.256,163,1.781,169,1.461,233,1.402,652,3.336,868,4.655,1621,4.132,1624,4.839,1757,5.495,1814,5.212,1832,5.721,1833,5.603]],["t/653",[50,2.121,53,1.779,54,2.901,61,1.629,64,0.873,66,1.389,101,4.901,125,2.776,148,3.365,158,2.418,216,3.287,282,2.354,301,1.935,310,3.278,342,2.084,372,2.368,376,2.289,377,3.999,378,2.874,385,2.436,386,2.769,394,2.846,419,3.896,438,3.499,535,2.902,572,4.7,677,4.394,718,1.935,900,4.7,1651,4.537]],["t/656",[50,2.766,53,2.121,64,1.139,163,1.676,169,1.676,216,2.701,233,1.609,282,2.218,301,3.193,377,3.852,378,3.746,382,3.296,383,4.169,385,3.176,386,3.61]],["t/658",[50,3.662,54,2.939,163,1.424,169,1.424,176,2.397,233,1.367,372,3.319,374,5.258,377,4.031,378,4.029,385,3.415,1392,7.211,1393,7.211]],["t/660",[50,2.451,64,1.009,66,2.12,169,1.173,222,3.32,233,1.127,375,3.529,376,3.492,377,3.563,382,2.921,383,3.694,385,2.814,386,3.199,388,4.501,745,2.527,776,4.333,782,4.812,908,4.812,909,4.812,913,4.812,916,4.812,1692,4.938,1693,4.938,1694,4.938,1695,4.938,1696,4.938,1697,4.938,1698,4.938,1699,4.938]],["t/662",[26,2.796,76,2.694,163,1.809,242,4.559,320,5.119,748,4.242,1355,5.265,2193,4.72,2194,4.72]],["t/664",[41,3.693,48,1.881,57,2.941,64,0.881,65,4.966,81,2.884,85,3.442,100,3.599,108,3.442,136,2.676,137,3.891,149,3.083,182,1.814,251,2.294,282,2.369,292,2.957,315,3.908,316,3.35,340,2.44,343,3.403,435,3.307,558,4.313,562,2.794,564,2.9,748,4.001,1232,4.578,1336,5.522,1339,5.522,1366,6.122,1651,4.578,2258,4.941,2270,6.027]],["t/666",[348,5.956,748,5.288,1639,8.53,1640,8.53,1641,8.53]],["t/669",[748,4.815,2271,10.009]],["t/671",[233,1.402,351,6.815,372,3.405,748,5.038,1053,6.524,1603,7.396,2272,8.59,2273,8.59,2274,8.59]],["t/673",[26,2.724,76,2.625,163,2,242,4.442,1355,5.129,2193,4.599,2194,4.599,2266,7.303,2275,6.323]],["t/675",[18,3.614,61,2.149,66,2.136,125,2.492,233,1.499,1072,3.363,2266,6.402]],["t/677",[18,3.665,66,2.166,81,3.229,474,4.661,1072,3.41,2275,6.852,2276,7.326]],["t/679",[163,1.652,1102,8.367,2275,7.152,2276,7.646]],["t/681",[26,2.872,163,1.839,242,4.683,323,6.315,1355,5.408,2193,4.848,2194,4.848,2265,6.666]],["t/683",[169,1.702,2277,9.17]],["t/685",[169,1.702,2265,7.367]],["t/687",[323,7.792,586,7.049,680,3.622,2265,7.049]],["t/689",[18,3.471,26,2.796,56,4.242,163,1.499,169,1.499,687,5.108,730,5.384,758,4.967,2193,4.72,2194,4.72]],["t/691",[13,3.258,17,2.146,18,4.187,26,1.656,56,2.513,57,2.72,61,1.03,65,3.119,68,2.071,116,2.015,140,3.479,169,1.279,182,1.572,238,2.146,246,1.963,251,1.988,278,4.111,315,1.988,340,2.115,513,4.322,535,2.538,567,6.304,581,4.661,684,3.845,686,4.498,687,4.357,757,5.032,758,4.236,760,3.342,1040,3.738,1056,5.918,1187,3.28,1319,3.643,1417,4.283,1503,4.283,1560,4.111,1561,5.535,1836,3.968,1875,5.918,2246,4.498,2278,5.224]],["t/693",[18,3.565,56,5.202,169,1.839,687,5.247,758,5.102,1072,3.96]],["t/695",[18,3.741,56,3.54,128,4.9,163,1.79,169,1.251,174,5.265,213,3.411,252,2.876,431,3.381,581,5.569,680,2.782,687,4.263,730,3.723,758,4.145,759,5.265,760,4.706,762,5.01,1040,5.265,1560,5.79,2279,5.588,2280,6.032]],["t/697",[26,2.796,76,2.694,163,1.943,323,6.148,687,5.108,2193,4.72,2194,4.72,2266,6.148,2275,6.49]],["t/699",[13,2.762,18,4.459,26,2.021,37,3.032,61,1.256,64,0.932,65,3.805,66,2.01,68,2.526,73,3.333,76,1.947,81,2.21,100,3.805,136,2.83,182,2.6,210,3.371,282,2.461,313,3.158,317,3.066,318,4.84,474,3.191,589,3.64,684,4.691,687,3.692,865,4.444,1036,3.805,1561,6.36,2275,4.691,2276,5.015,2281,5.487]],["t/701",[18,4.499,66,2.051,687,5.108,1036,5.265,1561,6.49,2266,6.148,2275,6.49,2276,6.938,2281,7.592]],["t/703",[163,1.839,400,7.127,687,5.247,722,4.632,2266,6.315,2275,6.666,2276,7.127,2281,7.798]],["t/705",[26,2.994,228,6.428,242,5.731,2193,5.054,2194,5.054]],["t/707",[0,2.272,13,3.222,14,1.317,18,1.547,37,3.175,81,1.363,108,2.245,128,2.618,139,3.689,143,1.486,147,2.104,161,3.684,182,2.237,228,6.514,245,2.277,259,1.806,282,1.731,292,2.983,294,1.928,295,4.756,313,1.948,325,2.104,342,1.371,348,4.903,351,4.847,353,2.214,425,4.239,429,1.873,450,2.564,488,2.618,490,5.647,501,2.618,503,2.676,510,2.893,514,3.63,532,2.893,539,2.385,546,2.893,547,4.475,551,2.985,563,2.893,579,2.157,634,1.775,681,2.468,823,2.985,895,2.893,897,3.222,1124,3.384,1146,3.222,1482,2.564,1764,3.093,1775,2.311,2282,5.57,2283,6.08,2284,7.435,2285,3.601,2286,3.601,2287,3.601,2288,3.222,2289,3.601,2290,3.931,2291,3.931,2292,3.931,2293,3.931,2294,3.601,2295,3.384,2296,3.384]],["t/709",[228,6.616,1591,7.38,1592,7.38,1593,7.38]],["t/711",[27,6.2,37,2.765,207,2.395,213,3.653,228,5.365,350,5.139,351,6.957,425,5.494,438,3.335,501,5.247,841,5.985,874,4.948,1518,6.46,2297,7.219,2298,7.219]],["t/713",[26,2.282,48,2.246,53,1.55,54,2.526,66,1.674,76,2.2,163,1.771,233,1.175,281,3.367,322,3.901,408,2.188,409,4.696,590,4.16,718,2.332,870,4.055,872,4.055,873,3.567,875,3.567,885,4.002,894,4.055,1355,4.298,1630,5.02,1632,4.794,2193,3.854,2194,3.854]],["t/715",[13,4.146,14,3.654,34,2.098,37,2.609,41,2.284,48,1.605,53,1.107,54,1.805,61,1.014,64,1.399,68,2.039,73,2.69,81,1.784,116,1.984,125,2.018,136,2.284,138,2.859,182,1.548,233,1.781,246,1.932,282,2.118,313,2.549,317,2.475,342,2.594,474,2.575,589,2.938,590,3.302,680,4.125,743,3.071,865,3.587,866,2.787,879,2.898,1621,2.475,1632,3.425,2299,5.144,2300,5.144]],["t/717",[5,4.1,14,1.915,48,2.502,64,1.172,66,1.865,81,2.78,96,2.366,139,3.469,143,2.162,169,1.363,233,1.725,236,2.75,251,2.176,294,2.805,350,3.729,351,5.814,365,4.645,408,2.437,535,2.777,602,4.923,603,3.986,672,3.414,718,2.598,743,4.787,894,4.516,1072,2.936,1134,5.238,1227,5.459,1409,4.687,2301,5.238,2302,5.717,2303,5.717]],["t/719",[26,2.759,76,2.659,163,2.009,242,4.5,408,3.209,894,4.902,2193,4.659,2194,4.659]],["t/721",[14,3.742,53,1.602,54,2.611,55,3.389,61,1.467,64,1.73,125,2.019,136,3.303,154,2.451,207,2.262,213,3.449,338,5.323,680,4.001,743,4.442,1177,4.853]],["t/723",[14,3.454,53,1.803,55,3.814,64,1.508,136,3.718,154,2.759,207,2.546,233,1.824,408,2.546,680,3.167,894,4.717]],["t/725",[17,2.432,48,1.847,52,2.506,53,2.385,57,1.828,63,3.535,76,1.809,163,1.604,169,1.82,176,2.351,203,2.363,233,1.54,305,3.779,315,2.253,320,2.848,321,3.43,322,3.208,372,2.347,408,2.497,436,3.653,673,5.098,748,2.848,751,3.943,754,3.592,894,4.628,1610,4.497,2304,9.434]],["t/727",[26,2.911,163,1.561,242,4.748,718,3.532,1072,3.363,2193,4.915,2194,4.915]],["t/729",[61,1.916,1072,4.128,2305,9.717]],["t/731",[1072,4.199]],["t/733",[81,2.833,154,3.345,163,1.966,395,3.356,474,4.09,718,2.647,1072,3.719,2306,8.169,2307,8.169,2308,8.169,2309,8.169,2310,8.169]],["t/735",[26,2.872,163,1.54,242,4.683,426,5.793,477,5.202,2193,4.848,2194,4.848,2311,9.057]],["t/737",[34,2.843,66,1.622,70,4.1,81,3.557,125,1.892,136,3.096,160,3.742,207,2.12,216,2.418,233,1.498,282,1.986,296,5.316,325,3.733,342,2.432,395,2.864,425,6.398,477,3.354,493,4.862,506,4.548,549,4.46,558,4.989,616,4.989,864,3.733,1781,6.248]],["t/739",[426,6.402,480,7.876]],["t/741",[160,4.409,233,1.479,282,2.579,426,5.793,427,6.166,506,5.908,1781,7.362]],["t/743",[153,3.778,477,4.744,2312,8.084]],["t/745",[26,2.833,176,2.557,233,1.459,242,4.621,372,3.542,1325,4.474,1328,6.577,1355,5.335,2193,4.784,2194,4.784]],["t/747",[13,2.636,14,2.038,34,2.48,37,2.134,49,3.89,55,4.358,61,1.65,64,0.889,76,1.859,98,4.428,122,4.62,125,1.651,131,4.78,132,3.256,169,1.034,173,2.795,176,2.738,182,2.518,207,3.134,233,0.993,238,2.498,246,2.285,310,3.338,358,2.746,440,3.967,643,2.926,716,4.05,734,4.62,736,4.241,1315,3.89,1319,5.836,1320,4.986,1321,5.573]],["t/749",[34,3.456,37,2.174,55,3.86,61,1.221,64,0.906,82,2.728,98,3.277,125,2.3,153,2.374,171,3.009,173,2.847,176,3.113,207,3.158,233,1.776,246,2.327,310,3.4,342,2.161,374,3.89,380,4.218,436,3.822,449,3.444,680,2.343,734,4.705,748,2.98,751,4.126,1032,3.759,1331,4.32,1332,4.875,1333,4.705]],["t/751",[56,4.744,163,1.933]],["t/753",[0,2.153,41,3.129,56,5.264,61,2.032,132,3.772,176,2.017,211,5.042,230,5.352,342,3.817,394,3.358,421,3.917,423,5.777,431,3.238,448,5.042,491,3.565,823,5.352,1056,5.545,1072,3.384,1315,4.507,2313,7.047,2314,7.047]],["t/755",[37,3.41,56,4.675,207,2.954,1325,4.865]],["t/757",[17,3.44,50,2.974,56,4.029,57,2.586,61,1.651,76,2.559,125,2.273,167,3.518,216,2.904,581,5.455,684,6.164,762,5.702,1582,5.992,2315,8.374]],["t/759",[56,4.815,216,3.471]],["t/762",[14,3.095,56,3.39,57,2.176,68,2.793,81,2.444,87,4.725,163,1.198,169,1.198,176,2.017,203,2.813,207,2.142,233,1.15,311,4.082,343,2.518,378,3.39,389,4.348,452,3.772,1325,4.626,2197,6.067,2198,6.067,2199,6.067,2201,6.067,2204,6.067,2316,9.24,2317,7.047,2318,7.047]],["t/764",[18,3.102,56,3.791,57,3.065,64,1.152,163,1.34,169,1.688,581,5.252,684,5.8,730,3.987,762,5.365,1035,6.785,1036,4.705,1037,6.785,1038,5.638,2279,7.54,2319,7.879]],["t/766",[163,1.933,176,2.822]],["t/768",[154,2.944,173,4.106,176,3.07,182,2.689,207,2.716,436,6.618,1332,7.031,1333,6.787]],["t/770",[176,2.864,2320,10.009]],["t/772",[153,3.778,477,4.744,2312,8.084]],["t/774",[76,2.845,163,2.055,408,2.83,885,5.175]],["t/776",[14,3.034,54,3.178,61,1.785,125,2.458,233,1.479,680,3.425,770,5.173,771,3.493,2321,7.425]],["t/778",[216,3.321,770,5.47,771,3.694,885,5.324,1072,3.508]],["t/780",[163,1.652,885,5.401,1238,7.966,2322,8.367]],["t/783",[53,1.717,64,1.726,65,4.761,82,3.511,100,4.761,101,4.123,125,2.966,342,2.782,605,5.201,606,4.269,771,4.215]],["t/785",[53,1.803,64,1.751,125,2.273,154,2.759,163,1.424,169,1.753,233,1.683,771,3.23,817,4.33]],["t/787",[64,1.18,163,1.372,169,1.714,233,1.645,769,5.94,771,3.113,785,5.162,786,5.162,787,5.067,788,5.495,789,5.774,817,5.682,1677,5.94,2323,8.07]],["t/789",[57,3.045,163,1.933]],["t/791",[41,4.408,57,3.065,61,1.957,76,2.408,81,3.443,125,2.138,147,4.218,233,1.286,282,2.827,320,3.791,322,4.27,342,2.749,558,7.103,1337,5.247]],["t/793",[57,3.394,348,5.956,730,5.918]],["t/795",[57,3.569,81,2.58,125,2.019,233,1.563,252,2.909,351,6.472,535,3.614,562,3.449,719,4.442,754,6.42,841,5.651,1225,4.672,1573,7.532,2324,7.44]],["t/797",[730,5.141]],["t/799",[18,3.662,57,3.482,61,1.834,64,0.843,76,1.762,82,2.539,98,4.267,116,2.224,125,1.565,131,4.607,153,2.209,154,1.9,169,0.981,182,3.031,233,1.731,238,2.369,246,2.166,251,2.195,305,2.139,340,3.266,440,3.761,486,3.926,680,2.181,757,3.293,1315,3.689,1560,7.32,1561,5.937,1562,4.38]],["t/801",[76,3.013,163,1.677,322,5.343]],["t/803",[26,2.498,48,2.459,57,3.356,61,1.553,76,2.408,116,3.039,160,3.213,169,1.34,233,1.286,305,2.922,315,2.999,322,4.27,338,5.638,342,2.749,408,2.395,1635,7.219,1668,5.8,2325,7.879]],["t/805",[14,2.878,48,2.681,57,3.234,64,1.256,169,1.781,305,3.885,322,4.655,362,5.394,408,2.611,680,3.248]],["t/807",[14,3.401,17,2.806,37,3.563,53,1.47,57,2.109,63,4.078,64,1.484,163,1.161,169,1.726,305,3.765,322,3.701,401,4.144,408,3.086,506,4.455,680,3.839,754,4.144,2326,6.83,2327,6.83,2328,6.83]],["t/809",[76,2.845,163,2.055,408,2.83,409,6.072]],["t/811",[14,2.915,57,3.26,61,1.715,87,4.451,125,2.362,147,4.659,317,4.186,680,3.291,1072,3.866,2321,7.134]],["t/813",[57,2.586,66,2.399,87,4.283,233,1.683,317,4.029,408,2.546,409,5.462,590,4.578,1072,3.776,1630,5.839,2329,7.673]],["t/815",[57,3.043,66,2.292,81,2.701,163,1.676,233,1.609,317,4.741,408,2.996,409,6.427,562,3.61,719,4.65,936,6.384,2329,9.029,2330,7.787]],["t/817",[76,3.013,163,1.677,320,4.744]],["t/819",[26,2.813,46,5.706,48,2.068,76,2.025,82,2.918,115,4.62,116,2.556,153,2.539,182,1.994,231,4.741,238,2.722,246,3.333,251,3.376,282,3.041,305,2.458,315,4.065,320,4.267,322,3.591,340,2.683,342,3.095,677,3.072,680,2.506,748,3.188,1338,4.512,1634,6.071]],["t/821",[76,3.013,163,1.677,850,5.713]],["t/823",[17,3.717,18,2.158,19,6.301,26,1.738,50,1.947,81,2.699,125,1.488,153,2.1,158,2.219,161,2.717,167,2.303,205,3.733,237,4.035,311,4.509,313,2.717,342,1.912,394,2.612,429,4.957,446,3.442,474,3.897,564,2.637,567,3.923,643,2.637,718,2.522,728,5.729,849,6.661,850,3.176,1035,4.72,1037,4.72,1043,7.419,1072,2.851,1187,3.442,1222,4.72,1543,4.72,2331,5.482,2332,5.482,2333,5.482,2334,5.482]],["t/825",[163,1.921,348,5.675,850,6.068,851,6.049,1072,4.138]],["t/828",[163,1.885,826,6.756,828,6.039,850,5.47,2335,9.442]],["t/830",[17,3.199,20,4.169,73,4.072,108,5.628,163,1.676,252,3.044,351,6.582,429,3.711,440,5.079,828,4.981,850,4.511,1053,5.915,1226,6.384,1472,6.384,1603,6.705,1604,7.135]],["t/832",[37,3.617,48,2.612,57,2.955,64,0.889,76,1.859,155,3.381,158,3.388,163,1.627,169,1.423,206,5.237,252,2.378,282,2.383,315,3.186,320,4.026,322,4.535,328,5.573,337,5.573,754,3.69,828,5.354,850,5.544,901,7.375,2336,6.082,2337,6.082,2338,6.082,2339,6.082]],["t/835",[50,2.103,53,1.768,54,2.883,61,1.619,64,0.866,66,1.377,101,4.878,125,2.765,148,3.335,158,2.397,216,3.272,222,2.848,282,2.339,301,1.918,310,3.249,342,2.065,372,2.347,376,3.904,377,2.315,386,2.744,394,2.821,419,3.862,438,3.477,535,2.876,572,4.659,677,4.373,718,1.918,781,3.717,900,4.659,1394,4.031,1651,4.497]],["t/838",[34,3.331,50,3.606,64,1.194,154,2.691,163,1.879,169,1.727,222,3.93,301,2.647,376,3.891,781,5.13,1189,4.803,1394,5.562]],["t/840",[34,3.373,50,3.634,54,2.902,163,1.74,169,1.74,222,3.979,301,2.68,372,3.278,376,3.92,781,5.193,1189,4.863,1394,5.631]],["t/843",[50,2.451,64,1.009,66,2.12,169,1.173,222,3.32,233,1.127,375,3.529,376,3.492,377,3.563,382,2.921,383,3.694,385,2.814,386,3.199,388,4.501,745,2.527,776,4.333,782,4.812,908,4.812,909,4.812,913,4.812,916,4.812,1692,4.938,1693,4.938,1694,4.938,1695,4.938,1696,4.938,1697,4.938,1698,4.938,1699,4.938]],["t/845",[163,1.677,372,3.909,1328,7.258]],["t/847",[0,1.548,5,2.591,10,3.24,13,3.752,37,3.038,54,2.581,85,2.893,104,2.213,125,1.375,149,2.591,163,0.861,216,3.65,251,1.928,282,1.443,301,2.805,311,2.935,342,1.767,343,2.628,376,4.16,438,2.144,449,4.088,452,2.712,640,3.24,745,1.855,864,2.712,901,3.624,1318,3.532,1325,2.536,1329,5.585,1380,6.029,1381,5.608,1382,4.641,1383,4.641,1384,4.641,1385,6.738,1386,4.362,1389,5.436,1785,4.153]],["t/849",[182,2.725,221,5.173,376,3.47,1328,6.666,1389,6.79,1481,8.298,1914,7.425,2340,9.057]],["t/851",[50,2.974,66,1.948,169,1.424,176,2.397,222,4.029,233,1.367,374,5.258,375,4.283,376,3.209,377,3.274,378,4.029,1102,7.211,1328,6.164,2341,8.374,2342,8.374]],["t/854",[61,2.049,64,1.24,176,2.427,215,6.068,216,3.896,219,5.774,238,3.484,310,4.654,313,5.15,1338,5.774]],["t/856",[0,2.559,21,4.783,61,1.651,114,4.617,153,3.209,155,4.655,211,5.992,272,4.237,313,5.11,657,5.992,2156,7.211,2212,7.673,2343,8.374]],["t/858",[61,1.435,76,2.883,80,3.57,163,1.884,167,3.057,169,1.884,238,2.989,313,4.676,319,7.736,1319,5.074,1590,5.966,1610,7.167,2344,6.668,2345,9.436,2346,8.645]],["t/860",[53,1.935,61,1.333,76,2.747,80,3.317,163,1.529,169,1.831,215,4.837,216,3.118,219,4.603,233,1.468,313,4.455,319,7.37,322,4.872,408,2.733,1590,5.543,1610,6.828,2344,6.194,2347,8.99,2348,8.99]],["t/862",[61,1.419,76,2.863,80,3.532,163,1.876,169,1.876,215,5.151,216,3.249,219,4.901,238,2.957,313,4.643,319,7.681,1590,5.902,1610,7.116,2346,8.584,2349,9.369]],["t/864",[163,1.677,477,4.744,479,6.714]],["t/866",[26,2.559,70,4.745,81,3.811,160,3.291,182,2.428,207,2.453,251,3.072,296,4.675,415,5.627,479,5.495,503,6.861,547,5.94,549,6.446,2350,5.774]],["t/868",[479,6.815,480,7.876]],["t/870",[153,3.778,477,4.744,2312,8.084]],["t/872",[26,2.872,64,1.581,163,1.54,242,4.683,819,4.443,1355,5.408,2193,4.848,2194,4.848]],["t/874",[53,2.09,61,1.5,64,1.113,81,2.639,100,4.544,158,3.081,167,3.196,207,2.313,216,2.639,270,3.592,342,2.655,438,4.11,474,3.81,601,5.445,605,4.963,652,2.955,1375,3.733,1503,6.239,1750,5.329,2351,7.61]],["t/876",[64,1.531,163,1.781,169,1.781,652,4.067,818,4.655,819,4.214,1375,4.214,1750,4.714,1770,5.129]],["t/878",[64,1.306,163,1.824,169,1.519,652,3.47,818,5.812,819,4.384,874,5.611,2352,8.936]],["t/880",[163,1.519,272,4.521,355,5.421,470,6.787,471,8.187,472,6.577,473,7.143,477,4.299,646,6.084]],["t/882",[5,1.683,26,1.043,37,3.27,41,3.687,45,1.965,51,1.879,61,0.649,66,2.254,67,1.09,70,3.107,80,1.614,81,3.557,110,3.965,125,1.797,155,1.829,160,2.701,173,1.512,176,1.512,182,0.99,207,1.607,213,1.525,216,1.833,217,2.764,233,1.448,294,1.614,296,5.398,325,2.829,342,1.148,369,2.191,415,2.294,438,3.209,473,3.519,475,4.509,476,6.657,477,1.583,485,2.698,491,1.665,494,4.159,503,2.24,506,3.447,508,4.159,517,3.781,558,4.738,559,2.499,560,3.685,564,3.648,616,3.781,627,2.499,643,1.583,646,3.598,649,2.354,1187,2.066,1320,2.698,1331,2.294,1477,3.015,1775,1.935,1885,2.833,1941,4.842,2140,3.015,2353,5.285]],["t/884",[473,6.665,481,8.205]],["t/886",[160,3.644,182,3.227,233,1.751,282,3.055,473,7.143,506,5.828]],["t/888",[153,3.778,477,4.744,2312,8.084]],["t/890",[76,2.768,163,2.112,408,2.753,1624,5.102]],["t/892",[61,1.572,64,1.166,67,3.313,101,4.123,112,4.17,125,2.714,233,1.302,310,4.375,342,2.782,408,2.424,535,3.873,634,3.601,1177,5.201,1378,5.56,1621,3.836,1625,5.56,1843,5.31]],["t/894",[53,1.779,61,0.757,64,1.495,67,2.427,82,1.691,96,3.031,102,3.306,112,3.122,125,1.988,137,1.796,153,1.471,154,2.413,157,1.734,163,1.682,169,1.015,171,1.865,182,2.204,233,0.975,246,1.443,250,2.225,301,1.935,340,1.555,342,2.556,382,2.527,438,1.625,452,2.056,456,2.678,535,1.865,541,3.573,603,2.678,634,2.696,637,2.615,643,1.847,652,3.209,653,3.236,677,1.78,718,1.244,745,1.406,772,2.826,819,2.929,1375,2.929,1378,2.678,1621,1.847,1624,3.364,1625,2.678,1750,3.276,1757,3.819,1770,3.565,1812,3.819,1814,3.623,1826,2.456,1832,3.976,1833,3.895,1840,3.148,1843,2.557]],["t/896",[5,3.028,67,2.721,101,3.061,154,1.95,163,1.884,167,2.487,169,1.604,171,2.876,216,2.849,233,1.54,252,2.315,282,2.339,359,4.031,408,2.868,634,2.673,722,3.028,723,6.287,873,2.934,875,2.934,876,4.854,1072,2.168,1621,4.538,1624,4.628,1625,5.728,2354,5.424,2355,5.92,2356,5.92]],["t/898",[76,2.845,163,2.055,281,4.355,408,2.83]],["t/900",[14,2.878,61,1.693,125,2.331,147,4.599,281,4.899,316,4.775,317,4.132,343,3.069,680,3.248,1072,3.836,2321,7.042]],["t/902",[56,3.882,66,1.877,87,4.127,233,1.645,281,4.714,317,3.882,343,2.884,394,3.846,408,2.453,590,4.475,1072,3.691,1630,5.627,1632,5.374,1633,6.129]],["t/904",[233,1.564,281,4.48,317,4.607,408,2.912,722,4.898]],["t/907",[14,2.521,17,3.96,26,2.386,57,2.323,138,4.182,167,3.16,182,2.901,207,2.287,216,2.609,342,2.625,677,3.488,790,4.813,792,4.813,1038,5.383,1479,4.813,1480,6.893,1494,6.168,1807,5.538,1903,6.478,2357,6.893,2358,7.524,2359,7.524]],["t/909",[52,4.468,64,1.272,163,1.48,169,1.795,216,3.018,233,1.421,393,5.369,790,5.566,792,5.566,1936,6.848]],["t/911",[52,2.777,64,0.959,163,1.498,169,1.116,233,1.071,395,3.62,531,2.938,722,3.356,790,4.197,791,4.369,792,4.197,793,4.12,794,4.695,795,4.695,796,4.695,797,4.695,798,4.695,799,4.695,800,4.695,801,4.695,802,4.695,803,4.695,804,4.12,805,4.695,806,4.695,807,4.695,808,4.695,809,4.695,810,4.695,811,4.695,812,4.695,813,4.695,814,4.695,1626,3.801,1805,4.829]],["t/913",[64,1.442,163,1.677,1816,7.489]],["t/915",[28,5.365,53,1.696,67,3.601,76,2.408,282,2.827,294,3.866,298,5.139,444,6.785,644,6.2,669,4.644,1232,5.985,1381,4.38,1816,5.985,1846,6.785,2360,7.879,2361,7.879]],["t/917",[13,2.415,34,2.273,53,1.2,61,1.099,66,1.297,67,3.7,68,2.209,116,2.15,125,1.513,167,2.341,197,3.059,207,2.394,216,2.731,282,1.587,295,3.565,449,3.098,491,2.82,525,4.103,540,3.795,541,2.225,606,2.984,634,2.517,668,3.985,669,4.642,745,2.041,1225,3.5,1374,3.328,1376,4.859,1381,4.378,1756,3.795,1812,5.037,1816,6.936,1820,4.799,1843,3.712,2255,4.569,2362,5.574,2363,4.799,2364,5.107]],["t/919",[53,1.517,64,1.6,67,2.334,154,3.044,163,1.198,169,1.571,233,1.15,301,2.283,382,2.983,652,3.588,669,3.296,723,4.348,771,2.718,817,3.644,818,3.819,819,3.457,1375,3.457,1381,3.917,1677,5.187,1750,3.867,1756,4.798,1770,4.207,1812,4.507,1816,5.352]],["t/921",[64,1.486]],["t/923",[37,2.473,61,1.821,64,1.705,76,2.153,78,4.596,98,4.888,131,5.277,169,1.198,182,2.78,207,2.809,210,3.728,212,5.545,238,2.895,246,2.647,372,2.793,440,4.596,651,6.067,736,4.913,1319,4.913,2365,6.067]],["t/925",[64,1.671,154,2.905,169,1.809,233,1.866,342,3.076,1676,7.592]],["t/927",[34,3.373,52,3.501,53,1.78,64,1.209,198,6.78,229,5.193,233,1.35,246,3.107,382,3.501,421,4.597,771,3.19,816,5.018,1486,6.087,1621,3.979,1677,6.087,1678,5.508]],["t/929",[163,1.933,169,1.677]],["t/931",[153,3.424,169,1.824,252,3.493,305,3.314,308,7.694,390,7.326,491,4.521,660,7.326,2277,8.187]],["t/933",[169,1.949]],["t/935",[18,4.123,169,1.781,305,3.885,581,4.544,680,3.96,730,5.299,1573,6.76,2366,8.59]],["t/937",[76,2.845,163,2.055,408,2.83,872,5.244]],["t/939",[23,2.951,41,1.725,48,3.204,54,2.114,61,1.877,66,1.934,67,3.154,125,1.635,138,2.159,147,2.08,148,2.188,149,1.987,165,2.859,182,2.989,201,3.655,233,0.634,238,1.596,246,2.263,251,3.165,282,1.716,342,1.355,358,2.721,365,2.251,394,2.871,408,1.181,523,2.439,535,1.887,538,3.809,564,1.869,668,3.734,669,3.452,770,2.219,771,1.498,851,2.08,861,2.397,864,2.08,866,2.105,873,3.657,875,3.657,879,2.188,885,3.349,889,2.439,1036,4.965,1056,3.057,1072,3.296,1319,2.709,1701,4.435,2367,3.885,2368,3.885,2369,3.885]],["t/941",[48,3.169,61,1.61,66,2.362,182,2.458,210,4.322,238,3.356,246,3.069,251,3.865,282,2.326,358,3.689,851,4.373,861,5.04,1036,4.878,1072,2.992]],["t/943",[26,2.469,48,3.075,61,1.943,66,2.292,182,2.343,210,4.12,238,3.199,246,2.926,251,3.751,282,2.218,358,3.516,385,3.176,408,2.367,861,4.805,870,4.387,1036,4.65,1072,2.852]],["t/945",[48,3.373,61,1.784,67,3.363,80,4.44,182,2.724,210,3.613,238,2.806,246,2.566,251,3.445,282,2.578,358,3.084,538,2.891,668,5.137,873,5.357,1036,5.404,1072,3.315]],["t/947",[48,3.373,61,1.784,67,3.363,80,4.44,182,2.724,210,3.613,238,2.806,246,2.566,251,3.445,282,2.578,358,3.084,538,2.891,669,4.749,875,5.357,1036,5.404,1072,3.315]],["t/949",[14,2.786,34,2.458,48,2.972,61,1.877,182,1.814,203,2.406,233,0.984,238,2.476,246,2.264,251,3.166,282,2.712,358,4.3,365,3.492,538,2.551,564,2.9,680,3.145,719,3.599,770,5.439,771,3.673,879,4.685,885,5.294,1036,3.599,1072,2.207,1337,4.014,2321,6.819,2370,6.027,2371,6.027]],["t/951",[13,1.703,14,1.317,23,7.266,48,3.433,61,0.775,66,2.225,67,3.169,73,2.056,75,2.157,85,2.245,87,2.01,125,1.067,137,1.839,151,3.575,155,2.185,157,2.745,158,1.591,182,1.829,216,1.363,238,1.615,252,1.537,259,1.806,294,3.647,298,2.564,325,3.255,365,5.543,393,2.425,394,1.873,395,1.615,432,1.909,438,1.664,584,3.222,613,4.475,614,3.384,628,2.676,648,2.564,669,2.844,681,3.818,847,2.514,859,4.618,864,2.104,889,5.254,1365,4.188,1374,2.347,1376,2.425,1381,2.185,1684,2.893,1775,2.311,1886,3.222,1956,2.676,2256,3.601,2257,3.601,2258,4.984,2259,5.57,2260,3.601,2261,3.601,2262,3.601,2263,3.601]],["t/953",[21,4.346,23,7.375,48,3.515,51,4.346,66,2.259,85,4.346,157,3.436,354,3.661,365,5.626,395,3.126,444,6.552,535,3.696,681,6.097,889,4.778,2255,6.239,2372,7.61]],["t/955",[48,3.268,66,1.998,85,4.906,157,3.879,210,4.544,681,5.394,859,6.524,889,5.394,2258,8.586,2373,8.59,2374,8.59]],["t/958",[53,0.911,54,1.484,66,1.496,163,1.794,169,1.59,233,1.05,259,1.943,301,2.084,354,3.094,389,5.364,395,3.197,408,1.955,724,4.114,766,4.195,828,4.114,861,3.968,866,2.292,868,4.217,870,3.623,872,3.623,873,4.309,875,4.309,879,2.383,881,3.213,882,3.213,885,3.575,889,2.656,937,4.283,1227,2.88,1242,3.113,1420,5.273,1472,6.38,1541,7.128,1614,3.329,1615,5.061,1616,3.329,1617,3.329,1618,3.329,1619,3.468,1620,5.893,1666,5.273,2375,6.432,2376,5.893,2377,6.432]],["t/960",[64,1.442,163,1.677,1626,5.713]],["t/962",[64,1.289,116,3.401,163,1.499,316,4.901,343,3.151,395,3.622,432,5.169,531,3.948,562,4.087,1325,4.415]],["t/964",[64,1.671,163,1.499,169,1.809,216,3.058,233,1.737,531,3.948,1626,5.108]],["t/966",[64,1.324,163,1.54,169,1.54,233,1.479,531,4.055,722,4.632,816,5.495,1626,5.247,2378,9.057]],["t/968",[76,2.845,163,2.055,408,2.83,1632,6.2]],["t/970",[13,2.71,14,2.095,26,1.983,56,3.008,70,3.677,76,2.607,136,2.777,151,6.132,163,1.063,282,2.429,315,2.38,343,4.119,416,4.75,432,3.038,452,3.348,514,3.734,571,6.993,847,4,1632,4.164,1633,7.921,1690,5.384,2379,6.253,2380,5.73,2381,6.253,2382,6.253,2383,6.253,2384,6.253]],["t/972",[1072,3.666,1632,6.665]],["t/974",[163,1.606,1632,7.38,2380,10.154,2385,9.442]],["t/977",[26,2.258,53,2.231,64,1.36,67,3.082,112,4.866,125,1.933,160,2.904,213,3.301,229,4.472,242,3.683,246,2.676,606,3.813,634,4.679,717,4.187,1756,4.849,1757,4.555,1775,4.187,1812,4.555,1813,5.096,1814,4.321,1815,5.242,2357,6.525]],["t/979",[53,1.676,64,1.581,67,2.58,112,4.072,160,3.176,163,1.676,169,1.676,233,1.609,242,4.027,634,3.516,1756,5.302,1757,4.981,1812,4.981,1813,5.572,1814,4.725,1815,5.732]],["t/981",[64,1.342,163,1.561,169,1.561,233,1.499,1678,6.114,1756,6.251,1813,6.57,2386,9.182]],["t/983",[163,1.677,730,4.989,757,5.632]],["t/985",[17,2.957,50,2.557,57,3.216,61,1.419,81,3.249,96,2.979,125,1.954,203,2.873,216,2.497,250,4.17,394,3.43,446,4.52,474,3.604,562,3.337,600,6.198,719,4.298,728,5.299,757,6.533,760,4.605,1072,2.636,1561,5.299]],["t/987",[169,1.9,730,4.846,757,6.383]],["t/990",[163,1.583,169,1.583,730,4.711,757,5.317,760,5.955,990,7.326,1573,7.326]],["t/992",[18,2.251,56,2.75,57,1.765,61,1.127,64,0.836,81,1.983,149,2.924,160,2.331,163,1.363,169,0.972,176,2.294,213,2.65,233,0.933,282,1.628,292,3.933,348,3.098,450,3.729,473,3.807,475,3.893,581,4.241,687,3.312,719,3.414,757,3.265,758,3.221,762,3.893,778,3.986,919,5.238,960,4.923,965,4.923,966,4.923,967,4.923,990,4.499,1040,4.091,1072,2.094,1410,4.687,2279,4.342,2280,4.687,2387,5.717,2388,5.717,2389,8.017,2390,5.238,2391,5.238,2392,5.717,2393,5.238,2394,5.717,2395,5.717,2396,5.717]],["t/994",[54,3.267,76,2.845,163,2.055,408,2.83]],["t/996",[14,3.351,54,3.835,55,3.632,61,1.572,64,1.166,125,2.714,136,3.54,154,2.627,169,1.356,233,1.302,238,3.275,246,2.996,680,3.015,879,4.492,2397,7.974]],["t/998",[53,1.849,54,3.675,55,3.912,64,1.256,154,2.83,169,1.781,207,2.611,233,1.402,301,2.783,408,2.611,879,4.839]],["t/1000",[54,3.054,169,1.795,233,1.421,301,3.42,408,2.646,879,4.902,881,6.609,882,6.609,1666,8.654]],["t/1002",[54,2.336,169,1.704,233,0.723,259,2.034,301,3.091,305,1.642,351,3.856,395,4.58,408,1.346,766,4.342,861,5.886,870,2.494,872,2.494,873,4.728,875,4.728,879,2.494,885,2.461,890,5.731,891,3.811,892,7.661,940,8.214,2322,3.811,2398,4.427,2399,4.427,2400,4.427,2401,4.427,2402,4.427,2403,4.427,2404,4.427,2405,4.427,2406,4.427,2407,4.427,2408,4.427,2409,4.427,2410,4.427,2411,8.741,2412,9.54]],["t/1004",[163,1.933,687,5.713]],["t/1006",[18,3.065,61,1.535,64,1.139,81,3.417,125,2.113,203,3.108,216,2.701,365,4.511,394,3.711,474,4.934,687,6.263,719,4.65,760,4.981,1072,3.609,1561,5.732,2413,7.787]],["t/1008",[687,6.641]],["t/1010",[18,3.426,56,4.186,163,1.795,169,1.48,581,5.585,687,5.042,762,5.925,1040,6.227,2279,6.609,2280,7.134]],["t/1012",[66,2.166,76,2.845,163,2.055,408,2.83]],["t/1014",[50,2.937,53,1.78,54,2.902,61,2.289,66,1.924,125,2.777,148,4.659,233,1.35,301,2.68,408,2.514,535,4.017,1072,3.029]],["t/1016",[50,2.974,53,1.803,54,2.939,64,1.224,66,2.599,163,1.753,169,1.753,233,1.683,375,4.283,1072,3.067]],["t/1018",[50,3.132,54,3.094,66,2.475,163,1.809,169,1.499,233,1.439,375,4.51,380,6.003,2414,8.079]],["t/1021",[26,1.828,48,2.517,50,2.048,53,1.241,54,3.264,61,1.59,65,4.816,66,2.466,80,2.829,112,3.016,137,2.697,157,4.2,182,2.799,210,3.051,236,2.774,238,2.369,246,2.166,251,3.07,282,1.642,311,3.341,358,3.642,385,4.323,408,1.753,535,2.801,538,2.441,861,3.558,870,3.248,1036,3.443,1072,2.112,1177,3.761,1487,6.613]],["t/1023",[54,3.527,66,1.557,154,2.942,163,1.519,169,1.823,233,1.093,259,4.103,301,3.474,354,4.296,385,4.372,408,2.035,538,2.833,770,3.823,771,2.581,861,5.51,870,3.77,872,3.77,879,3.77,885,3.72]],["t/1025",[54,2.373,169,1.529,233,1.104,259,3.106,301,2.913,389,5.547,395,2.777,408,2.055,724,5.751,766,5.864,828,4.324,861,5.547,870,3.808,872,3.808,873,4.455,875,4.455,879,3.808,881,5.135,882,5.135,885,4.997,1242,4.976,1666,7.37,2322,5.821,2376,6.194]],["t/1027",[76,2.845,163,2.055,408,2.83,1623,7.632]],["t/1029",[61,2.098,66,2.051,125,2.393,233,1.439,238,3.622,246,3.313,408,2.681,541,3.519,1621,4.242,2415,8.817]],["t/1031",[66,2.6,1072,4.093,1623,7.852]],["t/1033",[1623,8.084,2414,9.035,2416,9.861]],["t/1035",[76,3.013,163,1.677,573,5.983]],["t/1037",[0,1.634,2,1.964,14,1.119,17,1.372,20,1.788,21,1.908,45,1.994,48,1.669,53,0.719,55,2.436,61,1.319,64,0.782,65,1.994,66,2.625,75,1.833,82,1.471,105,1.833,116,1.288,125,0.906,137,1.562,149,1.708,154,1.1,160,1.362,163,0.568,166,3.06,176,1.531,182,1.005,207,2.325,210,1.767,224,2.329,252,2.091,259,1.535,357,2.178,358,2.415,359,3.641,360,2.097,377,1.306,408,1.015,429,1.592,438,1.414,477,1.607,482,2.458,491,1.69,501,3.562,541,3.563,563,2.458,570,2.876,571,2.738,573,4.64,574,2.274,589,3.055,590,1.483,607,2.458,628,2.274,648,2.178,680,1.263,1072,1.223,1225,2.097,1482,7.285,1530,2.39,1596,3.06,1611,3.936,1629,3.936,1705,2.738,1738,2.876,1753,3.06,1846,2.876,2126,2.876,2244,2.628,2247,3.06,2248,3.06,2249,3.06,2250,3.06,2251,3.06,2417,3.34,2418,5.348,2419,3.34,2420,3.34,2421,2.876,2422,3.34]],["t/1039",[14,2.45,53,1.082,54,1.764,61,0.991,64,1.26,66,2.441,82,2.214,137,3.421,153,1.926,160,2.05,163,1.785,182,2.201,207,1.528,233,1.194,317,3.518,342,1.754,408,1.528,541,4.324,589,4.177,606,2.691,639,4.606,680,2.766,743,3.002,866,2.724,879,2.832,1366,3.7,1482,7.381,1629,3.7,1630,6.011,2239,4.122,2242,5.996,2423,5.027]],["t/1041",[18,2.057,21,4.295,50,2.671,51,2.984,57,2.322,61,1.482,66,2.549,68,2.981,81,2.608,104,2.282,137,2.444,140,3.479,152,5.711,172,2.984,176,1.495,300,5.532,303,3.17,343,1.867,365,3.027,456,3.643,501,3.479,541,3.517,563,3.845,567,5.381,568,3.845,573,3.17,588,4.283,589,2.984,648,3.408,758,2.943,1187,3.28,1320,4.283,1482,6.661,1629,5.535,2246,6.475,2424,5.224,2425,4.498,2426,5.224,2427,5.224]],["t/1043",[76,3.414,167,3.518,169,1.753,182,2.52,305,3.824,394,3.991,573,6.779,1072,3.776]],["t/1046",[573,6.073,2428,9.17]],["t/1048",[573,6.073,2429,10.009]],["t/1050",[61,1.21,66,2.606,70,3.609,76,1.876,96,2.54,163,1.432,203,2.45,251,2.336,252,2.4,477,2.953,541,3.838,555,3.556,573,5.11,605,4.004,727,6.199,1042,5.285,1072,2.248,1192,5.624,1482,7.306,1629,7.077,1836,4.662,2428,7.717,2430,6.138,2431,8.422,2432,6.138]],["t/1052",[108,5.803]],["t/1054",[0,1.754,13,2.487,14,1.223,18,1.437,37,3.528,61,0.72,81,1.99,82,1.608,108,4.591,121,2.687,125,0.991,128,2.431,139,4.303,147,1.954,154,1.203,157,2.592,160,1.489,161,3.515,163,0.621,182,2.134,228,2.486,244,2.486,245,3.325,282,1.634,292,3.479,295,3.671,296,2.115,304,2.029,313,1.809,325,1.954,348,3.843,350,5.701,351,4.657,353,2.057,429,1.74,450,3.744,452,1.954,473,2.431,488,2.431,490,4.359,501,2.431,503,2.486,510,2.687,514,2.18,532,2.687,539,4.303,547,4.225,563,2.687,595,2.873,620,3.345,634,2.592,681,2.292,895,4.225,897,4.705,1124,3.144,1377,2.873,1482,2.381,1519,3.345,1764,2.873,1839,3.345,2015,2.773,2126,3.144,2285,3.345,2286,3.345,2287,3.345,2288,2.993,2289,3.345,2294,3.345,2295,3.144,2296,3.144,2301,3.345,2433,3.345,2434,5.74,2435,3.651,2436,3.651]],["t/1056",[108,5.55,1591,7.38,1592,7.38,1593,7.38]],["t/1058",[27,6.2,37,2.765,108,4.5,157,3.558,207,2.395,213,3.653,350,5.139,351,6.957,438,3.335,501,5.247,841,5.985,874,4.948,1518,6.46,2297,7.219,2298,7.219]],["t/1060",[64,1.4,163,2.012,541,3.823]],["t/1062",[53,1.873,61,1.715,64,1.543,125,2.865,233,1.421,246,3.269,342,3.036,652,3.379,653,4.716,772,3.356]],["t/1064",[53,2.046,64,1.627,125,1.997,154,2.424,157,3.322,163,1.616,169,1.616,233,1.551,301,2.384,372,2.916,382,3.114,652,4.087,818,3.987,819,3.61,1375,3.61,1750,4.037,1770,4.393]],["t/1066",[17,1.99,26,1.536,53,1.532,61,0.955,66,1.963,96,2.005,125,2.524,154,1.596,157,3.214,163,0.824,182,1.458,186,3.16,233,0.791,238,1.99,246,3.17,251,1.844,301,1.57,354,2.331,385,1.976,435,2.658,485,3.972,513,2.377,526,3.972,541,4.274,648,3.16,649,3.466,652,4.426,653,2.625,771,1.869,772,1.869,1198,2.989,1225,3.042,1374,2.893,1624,2.729,1750,3.906,1770,2.893,1826,4.553,1827,5.299,1829,3.812,1834,4.439,1835,4.964,1836,3.68,1837,4.171,1838,4.171]],["t/1068",[53,1.358,64,1.426,67,2.843,96,1.707,116,2.956,125,1.712,154,3.047,160,3.5,163,1.303,169,1.073,216,2.188,233,1.03,251,1.57,301,2.044,378,4.129,382,2.671,385,2.573,452,3.378,541,4.444,634,2.849,652,3.591,653,3.419,723,3.893,819,3.096,847,2.639,863,4.296,1375,3.096,1621,1.985,1624,2.324,1750,3.462,1770,3.768,1771,4.036,1772,3.962,1817,4.792,1818,4.792,1826,2.639,1827,3.962,1832,2.747,1833,2.691]],["t/1070",[64,0.941,163,1.094,169,1.094,233,1.05,382,4.467,541,3.471,652,3.826,819,5.177,820,4.381,868,3.487,874,4.04,895,4.736,1496,5.063,1621,3.095,1624,3.625,1814,5.277,1832,4.285,1833,4.197,1849,5.063,1850,5.275,1852,5.275,1853,4.887,1854,5.54,1855,5.54,1856,5.54,1857,5.54,1858,5.54,1859,5.54,1860,5.54]],["t/1072",[64,1.272,137,4.071,163,1.932,342,3.036,458,7.493,541,4.214,652,3.379,1177,5.676,1621,4.186]],["t/1074",[61,2.033,64,1.224,125,2.273,154,2.759,233,1.367,342,3.597,355,5.081,541,3.343,652,4.004,677,3.882,1177,5.462,1621,4.029]],["t/1076",[53,1.676,64,1.58,96,2.269,116,3.49,125,2.112,154,3.427,163,1.324,169,1.324,233,1.271,251,2.087,301,2.522,382,3.294,541,4.732,652,3.514,819,3.818,847,3.507,1375,3.818,1621,2.637,1750,4.271,1770,4.647,1826,3.507,1827,4.887]],["t/1078",[64,1.24,163,1.767,169,1.442,233,1.385,382,3.59,541,3.385,652,3.293,819,4.161,868,4.596,874,5.325,1621,4.08,1849,6.674,1853,6.441]],["t/1080",[64,1.4,163,2.012,541,3.823]],["t/1082",[53,1.584,61,1.45,64,1.539,80,3.61,182,2.214,233,1.201,238,3.022,246,2.764,342,2.567,489,5.265,497,4.706,541,4.201,771,3.665,772,2.838,1177,4.799,1185,5.265,1186,5.588,1621,3.54,1826,4.706,1827,4.62,1830,5.265]],["t/1084",[64,1.661,125,2.36,154,2.865,163,1.479,169,2.009,186,4.197,233,1.723,259,2.956,354,3.095,541,4.212,771,3.355,817,4.497,1621,3.095,1826,5.563,1827,4.04]],["t/1086",[64,1.113,163,1.294,169,1.916,233,1.839,541,3.037,817,5.021,868,4.124,1621,3.661,1793,6.239,1826,6.211,1827,4.778,1849,5.988,1850,6.239,1851,6.552,1852,6.239]],["t/1088",[76,2.768,163,2.112,408,2.753,873,4.488]],["t/1090",[50,2.557,61,2.175,64,1.053,67,3.45,81,2.497,125,1.954,137,3.367,203,2.873,207,2.188,216,3.249,233,1.175,365,4.17,408,2.188,474,3.604,668,4.741,719,4.298,723,4.442,872,4.055,1072,3.431,2437,7.199]],["t/1092",[67,3.219,668,4.916,873,4.815,2354,8.903]],["t/1094",[722,5.119,873,4.96]],["t/1096",[18,3.77,163,1.9,730,4.846,758,5.395]],["t/1098",[18,3.565,203,3.615,394,4.316,758,6.091,760,5.793,1072,3.96,2438,9.057]],["t/1100",[18,3.665,56,5.288,169,1.869,758,6.192]],["t/1103",[18,3.471,56,4.242,163,1.809,169,1.499,581,4.665,758,4.967,759,6.309,760,5.64,762,6.003,2279,6.697]],["t/1105",[18,2.27,56,2.774,61,1.137,64,0.843,81,2,149,2.949,160,2.352,163,1.372,169,0.981,176,2.308,213,2.673,233,0.941,282,1.642,292,3.957,348,3.125,450,3.761,473,3.84,475,3.926,581,3.051,687,3.341,719,3.443,757,3.293,758,5.24,759,4.126,762,3.926,960,4.965,965,4.965,966,4.965,967,4.965,1040,4.126,1072,2.112,1410,4.728,2279,4.38,2280,4.728,2390,5.284,2391,5.284,2393,5.284,2439,5.767,2440,5.767,2441,5.767,2442,5.767,2443,5.767,2444,5.767,2445,5.767,2446,5.767,2447,5.767]],["t/1107",[163,1.702,477,4.815]],["t/1109",[10,4.367,14,1.534,18,1.802,37,2.396,44,3.37,45,6.278,48,1.429,57,1.414,64,1.194,70,4.014,76,2.086,81,3.357,82,2.016,125,1.853,132,2.451,153,1.754,154,1.508,169,1.161,173,2.104,176,1.31,182,2.054,193,3.37,207,1.392,233,0.747,236,2.203,251,2.598,252,1.79,282,1.304,340,1.854,341,3.049,342,1.597,386,2.122,436,2.825,440,2.986,465,3.477,474,3.418,488,3.049,538,1.938,677,2.122,680,1.731,718,2.932,719,2.734,757,2.615,758,2.579,856,5.324,1338,3.117,1530,5.841,1545,3.942,1582,3.276,1953,4.195,1954,4.195,1955,4.195,1956,3.117]],["t/1111",[76,2.845,163,2.055,408,2.83,870,5.244]],["t/1113",[61,1.761,66,2.078,125,2.425,233,1.459,408,2.716,523,5.611,538,3.782,851,4.784,866,4.842,879,5.034]],["t/1115",[66,2.327,125,2.714,233,1.633,408,3.041,523,6.28,538,4.234,851,4.269,866,4.321,870,5.634,879,4.492,1072,3.663]],["t/1117",[163,1.48,233,1.723,408,3.209,866,4.716,870,5.947,879,4.902,1227,5.925,1242,6.405,1619,7.134]],["t/1120",[26,2.724,182,3.151,216,2.979,342,2.997,385,3.503,543,5.394,572,6.76,677,3.982,793,5.394,804,5.394,864,4.599,1807,6.323]],["t/1122",[52,4.266,64,1.18,163,1.372,169,1.714,216,2.799,233,1.318,238,3.315,259,3.708,377,3.155,385,3.291,395,4.14,543,5.067,564,3.882,804,5.067,929,5.495]],["t/1124",[52,2.777,64,0.959,163,1.498,169,1.116,233,1.071,395,3.62,531,2.938,722,3.356,790,4.197,791,4.369,792,4.197,793,4.12,794,4.695,795,4.695,796,4.695,797,4.695,798,4.695,799,4.695,800,4.695,801,4.695,802,4.695,803,4.695,804,4.12,805,4.695,806,4.695,807,4.695,808,4.695,809,4.695,810,4.695,811,4.695,812,4.695,813,4.695,814,4.695,1626,3.801,1805,4.829]],["t/1127",[26,2.655,182,3.103,216,2.904,342,2.921,531,3.75,543,5.258,572,6.59,677,3.882,793,5.258,804,5.258,864,4.483,1807,6.164,1944,6.865,1945,6.865]],["t/1129",[52,4.433,64,1.256,163,1.461,169,1.781,216,2.979,233,1.402,238,3.529,343,3.069,793,5.394,1944,7.042,1945,7.042]],["t/1131",[52,2.777,64,0.959,163,1.498,169,1.116,233,1.071,395,3.62,531,2.938,722,3.356,790,4.197,791,4.369,792,4.197,793,4.12,794,4.695,795,4.695,796,4.695,797,4.695,798,4.695,799,4.695,800,4.695,801,4.695,802,4.695,803,4.695,804,4.12,805,4.695,806,4.695,807,4.695,808,4.695,809,4.695,810,4.695,811,4.695,812,4.695,813,4.695,814,4.695,1626,3.801,1805,4.829]],["t/1134",[17,2.925,26,2.258,52,4.386,53,1.533,61,1.404,64,1.36,96,2.947,100,4.252,101,3.683,148,4.012,158,2.883,182,2.8,207,2.165,320,3.426,532,5.242,555,4.126,653,3.859,677,3.301,772,2.747,790,4.555,793,4.472,804,4.472,1314,5.242,1807,5.242,2448,7.122]],["t/1136",[52,3.78,64,1.306,116,2.581,169,1.519,216,3.485,233,1.093,238,3.668,259,3.075,343,2.391,377,2.617,385,2.729,393,4.129,395,3.668,432,3.251,531,2.997,543,4.203,562,3.103,564,3.22,790,4.281,792,4.281,793,4.203,804,4.203,929,4.557,1325,3.351,1626,3.877,1936,5.267,1944,5.487,1945,5.487]],["t/1138",[52,2.777,64,0.959,163,1.498,169,1.116,233,1.071,395,3.62,531,2.938,722,3.356,790,4.197,791,4.369,792,4.197,793,4.12,794,4.695,795,4.695,796,4.695,797,4.695,798,4.695,799,4.695,800,4.695,801,4.695,802,4.695,803,4.695,804,4.12,805,4.695,806,4.695,807,4.695,808,4.695,809,4.695,810,4.695,811,4.695,812,4.695,813,4.695,814,4.695,1626,3.801,1805,4.829]],["t/1140",[163,2.024,233,1.586]],["t/1142",[61,1.738,68,3.495,132,4.72,143,3.334,217,4.611,233,1.737,423,7.229,427,6.003,2449,8.723]],["t/1144",[374,6.014,380,6.521,748,4.607,751,6.378,1032,5.811]],["t/1146",[160,4.081,506,6.528]],["t/1148",[53,2.004,54,3.267,317,4.479,743,5.559,866,5.045,879,5.244,1621,4.479]],["t/1150",[52,3.941,771,3.591,816,5.649,1486,6.852,1621,4.479,1677,6.852,1678,6.2]],["t/1152",[233,1.872]],["t/1155",[5,4.283,26,2.655,50,2.974,53,2.22,54,3.618,64,1.224,182,3.362,301,2.713,342,2.921,372,3.319,1611,6.164]],["t/1158",[34,3.848,50,3.935,54,3.311,66,2.195,110,3.806,163,1.238,169,1.605,222,3.501,301,2.358,372,2.885,375,3.722,376,3.615,377,3.689,378,3.501,385,2.968,781,4.57,1189,4.279,1394,4.955]],["t/1160",[34,3.821,50,3.918,64,1.053,66,2.179,110,3.765,154,2.371,163,1.593,169,1.593,222,3.463,301,2.332,375,3.682,376,3.59,377,3.663,378,3.463,385,2.936,781,4.52,1189,5.509,1394,4.901]],["t/1163",[50,3.051,66,1.998,163,1.461,169,1.461,222,4.132,233,1.402,372,3.405,374,5.394,375,4.393,376,3.291,377,3.358,378,4.132,2450,8.59]],["t/1165",[50,2.974,64,1.224,66,1.948,163,1.424,169,1.424,222,4.029,233,1.367,375,4.283,376,3.209,377,3.274,382,3.545,383,4.483,385,3.415,388,5.462,782,5.839]],["t/1167",[64,1.361,163,2.055,1624,5.244,1832,6.2]],["t/1169",[5,3.682,53,1.55,61,1.847,64,1.053,67,3.45,112,3.765,153,2.758,182,2.166,233,1.175,340,2.914,342,3.634,452,3.854,541,2.873,634,3.251,643,3.463,718,2.332,745,2.636,772,2.777,1621,3.463,1624,4.055,1625,5.02,1843,4.794,1887,5.468]],["t/1171",[53,1.737,64,1.473,163,2.014,169,1.714,233,1.318,652,3.134,1621,3.882,1624,4.546,1757,5.162,1812,5.162,1814,4.896,1832,5.374]],["t/1173",[64,1.256,163,1.781,169,1.461,233,1.402,652,3.336,868,4.655,1621,4.132,1624,4.839,1757,5.495,1814,5.212,1832,5.721,1833,5.603]],["t/1175",[718,3.292]],["t/1177",[61,2.24,81,2.701,114,3.487,125,2.674,158,3.153,176,2.229,342,2.717,353,4.387,513,3.82,607,5.732,718,3.503,1072,2.852,1190,5.915,1688,5.732,1766,6.705]],["t/1185",[26,1.292,34,2.549,39,2.606,50,2.22,53,1.637,54,1.43,56,1.96,61,1.232,64,1.478,67,1.35,138,2.265,139,2.472,146,3.57,153,1.561,163,1.063,167,2.626,168,2.514,207,1.239,210,2.156,217,2.131,226,3.095,238,2.568,270,2.951,301,2.025,342,2.181,355,2.472,377,1.593,421,2.265,431,4.46,435,2.236,507,3.095,541,1.626,555,2.361,562,1.889,590,4.31,643,1.96,680,1.541,700,3.732,718,1.32,745,1.492,771,2.933,772,1.572,787,2.559,822,2.236,854,2.999,1072,2.289,1198,2.514,1325,2.04,1485,3.341,1544,3.341,1606,3.509,1621,1.96,1626,2.361,1637,3.095,1701,2.999,1919,3.733,1923,3.733,1924,3.733,2451,4.075,2452,4.075,2453,2.606,2454,2.999,2455,4.075,2456,6.251,2457,6.251]],["t/1187",[0,1.929,18,3.379,37,2.215,143,2.387,171,3.066,173,2.9,196,3.464,221,3.605,251,3.268,348,3.421,395,2.593,399,4.795,429,3.008,490,4.795,501,5.717,540,7.691,546,4.646,573,3.83,643,3.037,849,4.646,1222,7.392,1417,5.175,1538,5.784,1595,5.491,1662,5.435,1835,4.402,2458,6.313,2459,6.313,2460,6.313,2461,6.313,2462,6.313]],["t/1189",[3,4.644,34,3.742,39,4.46,61,1.375,75,3.826,113,4.231,190,6.004,191,4.862,196,3.826,197,3.826,203,3.663,214,4.378,238,2.864,270,3.292,342,2.432,348,3.779,353,3.928,431,4.216,448,4.989,457,4.46,590,3.096,656,5.296,748,3.354,1365,3.928,1739,5.296,2453,4.46,2463,6.973,2464,6.389]],["t/1193",[34,3.068,53,1.62,54,2.64,68,2.982,169,1.279,431,4.429,538,4.08,541,4.246,590,3.341,643,3.619,889,4.724,2465,6.288,2466,7.524,2467,7.524,2468,7.524,2469,7.524,2470,7.524,2471,7.524,2472,7.524]],["t/1195",[0,1.825,26,1.894,37,2.096,61,1.178,64,0.873,66,1.389,68,2.368,114,2.674,120,4.537,146,3.412,154,1.968,169,1.016,176,2.365,208,4.067,287,3.821,297,4.7,304,3.32,325,3.198,536,4.397,537,4.274,538,2.528,541,2.384,643,2.874,672,3.567,850,3.461,1236,4.067,2465,3.896,2473,5.973,2474,5.973,2475,5.973,2476,5.973,2477,5.973,2478,5.973,2479,5.973,2480,5.973,2481,5.973,2482,5.973,2483,5.973,2484,5.473,2485,5.973,2486,5.973,2487,5.473,2488,5.973,2489,5.973,2490,5.973,2491,5.973]],["t/1197",[141,6.865,342,2.921,431,3.848,517,5.992,634,3.781,672,5,1371,5.081,1389,5.258,2454,6.164,2492,8.374,2493,8.374,2494,6.59,2495,7.673,2496,8.374,2497,8.374]],["t/1199",[10,1.795,13,1.216,14,0.94,53,1.485,54,0.985,59,1.702,61,0.553,64,0.679,66,0.653,67,2.284,68,1.112,105,1.54,112,1.467,113,1.702,117,2.008,132,2.484,155,1.56,175,2.863,176,0.803,196,1.54,197,1.54,203,1.12,233,0.458,244,1.91,245,2.689,251,1.068,289,3.027,301,0.909,307,1.956,340,1.136,354,1.35,357,1.83,377,1.814,389,1.731,400,3.652,431,4.185,448,2.008,457,1.795,538,2.512,540,3.16,541,1.12,550,3.601,634,1.267,636,2.131,643,1.35,652,1.802,672,4.913,680,1.061,771,1.082,772,1.082,889,1.762,1371,1.702,1387,2.131,1389,1.762,1504,2.3,1595,2.968,1703,2.968,1787,4.33,1987,2.3,2465,1.83,2498,2.806,2499,2.806,2500,2.806,2501,5.935,2502,2.806,2503,2.806,2504,2.416,2505,2.806,2506,2.806,2507,2.806,2508,2.806,2509,4.252,2510,2.806,2511,2.806,2512,2.806,2513,2.806,2514,2.806,2515,2.806,2516,2.806,2517,6.998,2518,6.896,2519,2.806,2520,2.806,2521,2.806,2522,2.806,2523,2.806,2524,2.806,2525,2.806,2526,2.806,2527,2.806,2528,2.806,2529,2.806,2530,2.806,2531,2.806,2532,2.806,2533,2.806,2534,2.806,2535,2.806,2536,2.806,2537,2.806,2538,2.806,2539,2.3,2540,2.806,2541,2.806,2542,2.806,2543,2.806,2544,1.762,2545,2.806,2546,2.806,2547,2.806,2548,2.806,2549,2.806,2550,2.806,2551,2.806,2552,2.806,2553,2.806,2554,2.806,2555,2.806,2556,2.806,2557,2.806,2558,2.3,2559,2.416,2560,2.806,2561,2.806,2562,2.806,2563,2.806,2564,2.806]],["t/1201",[53,1.107,61,1.014,64,1.087,129,3.786,201,3.121,207,2.261,232,4.048,282,1.465,310,2.823,325,3.981,339,3.981,345,3.907,346,3.907,358,3.358,472,5.473,538,3.697,541,3.486,573,3.121,589,2.938,590,2.284,679,4.713,690,6.096,772,1.984,889,3.23,940,4.429,1387,6.633,2465,4.85,2509,4.713,2565,5.144,2566,5.144,2567,5.144,2568,5.144,2569,5.144,2570,5.144,2571,5.144,2572,5.144,2573,5.144,2574,5.144,2575,5.144,2576,5.144,2577,5.144,2578,5.144,2579,5.144,2580,5.144,2581,5.144,2582,5.144,2583,5.144,2584,5.144,2585,5.144,2586,5.144,2587,5.144]],["t/1204",[34,3.794,53,2.003,67,3.082,78,4.645,161,3.529,207,2.165,282,2.028,346,5.409,358,3.216,431,5.048,538,3.014,1374,4.252,1375,3.494,2433,6.525,2465,6.069,2588,7.122,2589,7.122,2590,7.122,2591,7.122,2592,7.122,2593,7.122,2594,7.122]],["t/1206",[0,1.668,13,2.365,48,1.069,53,1.464,54,1.915,61,0.675,66,1.971,67,1.135,68,2.163,76,1.047,104,1.496,113,2.078,114,1.534,133,2.808,161,1.698,165,2.521,168,3.367,169,0.583,172,1.957,175,2.114,214,2.151,233,0.891,238,1.407,245,1.985,271,2.95,282,0.976,292,1.681,298,2.234,315,2.077,338,3.905,348,1.856,359,2.332,427,2.332,431,2.508,490,2.602,513,1.681,523,2.151,538,4.396,540,3.716,541,1.367,550,2.078,580,2.521,589,1.957,643,1.648,652,1.33,744,2.045,772,1.321,865,2.389,889,2.151,1072,1.255,1595,2.191,1828,3.139,1866,2.808,1875,2.696,2228,3.139,2465,6.609,2559,2.95,2595,3.426,2596,3.426,2597,3.426,2598,3.426,2599,2.95,2600,3.426,2601,3.426,2602,2.521,2603,3.426,2604,3.426,2605,3.426,2606,3.426,2607,3.426,2608,3.426,2609,3.426,2610,3.426,2611,3.426,2612,3.426,2613,3.426,2614,3.426,2615,3.426,2616,2.95,2617,3.426,2618,3.426,2619,3.426,2620,3.139,2621,3.426,2622,3.426,2623,3.426,2624,3.426,2625,3.139,2626,3.426,2627,3.426,2628,3.426,2629,3.426,2630,3.426,2631,3.426,2632,3.426,2633,3.426,2634,3.426]],["t/1208",[53,1.252,67,1.927,161,2.883,207,1.768,245,3.37,292,3.981,312,3.277,315,3.557,431,4.646,580,5.973,606,3.114,656,7.098,659,4.282,672,4.845,1541,4.769,1632,3.874,1887,4.418,2015,8.367,2494,6.386,2495,5.33,2635,5.817,2636,5.817,2637,5.817,2638,5.817,2639,5.817,2640,7.435,2641,8.115,2642,5.817,2643,5.817,2644,5.33,2645,5.817,2646,5.817]],["t/1210",[0,1.261,13,1.788,22,3.036,53,1.358,64,0.603,66,0.96,67,2.09,68,1.635,81,1.431,113,2.503,155,2.293,162,2.952,169,0.701,173,1.895,175,2.545,176,1.806,196,2.264,203,2.519,233,0.673,245,2.39,263,3.246,287,2.639,325,2.208,339,2.208,431,3.521,432,2.004,452,2.208,472,3.036,474,2.065,515,3.133,517,2.952,535,2.004,541,2.519,590,1.832,643,1.985,652,1.602,672,3.768,770,2.356,772,1.591,1072,1.511,1185,2.952,1354,2.952,1375,2.024,1376,2.545,1479,2.639,1662,3.552,1703,2.639,1787,2.59,1818,3.133,1829,3.246,1835,2.876,2219,3.78,2494,3.246,2517,3.78,2599,3.552,2620,5.781,2647,4.125,2648,4.125,2649,4.125,2650,4.125,2651,4.125,2652,4.125,2653,4.125,2654,3.246,2655,4.125,2656,4.125,2657,4.125,2658,4.125,2659,4.125,2660,3.78,2661,4.125,2662,4.125,2663,4.125,2664,4.125,2665,3.78,2666,4.125,2667,4.125,2668,4.125,2669,4.125,2670,4.125,2671,4.125,2672,4.125,2673,4.125,2674,4.125,2675,4.125,2676,4.125,2677,3.246,2678,4.125]],["t/1212",[48,1.103,53,1.204,55,1.61,57,1.728,61,1.369,64,0.517,68,1.401,76,1.08,81,1.226,114,3.109,136,2.484,143,1.337,167,1.485,185,2.781,196,3.07,197,3.07,201,4.213,207,1.701,208,3.809,233,0.913,282,1.593,314,3.239,315,3.896,317,1.7,318,2.685,339,2.995,342,1.952,358,1.596,386,2.594,474,1.77,538,3.342,590,1.569,718,1.145,745,2.049,861,2.181,1387,4.25,1637,2.685,1922,2.898,2453,3.579,2465,4.53,2559,3.044,2616,8.56,2625,3.239,2679,3.535,2680,3.535,2681,3.535,2682,3.535,2683,3.535,2684,3.535,2685,3.535,2686,3.535,2687,3.535,2688,3.535,2689,3.535,2690,3.535,2691,3.535,2692,3.535,2693,3.535,2694,3.535,2695,3.535,2696,3.535,2697,3.535,2698,3.535,2699,3.535,2700,3.535,2701,3.535,2702,3.535,2703,3.535,2704,3.535,2705,3.535,2706,3.535,2707,3.535,2708,3.535,2709,3.535,2710,3.535,2711,3.535,2712,3.535,2713,3.535,2714,3.535,2715,3.535,2716,3.535,2717,3.535,2718,3.535]],["t/1215",[14,3.076,64,1.342,81,3.184,143,3.472,217,4.802,233,1.499,365,5.319,2719,8.412]],["t/1217",[54,3.267,161,4.614,172,5.317,176,2.664,376,3.567,2720,9.31,2721,9.31]],["t/1219",[18,1.478,41,2.605,53,1.263,54,1.317,64,0.858,66,1.364,67,2.392,68,2.862,81,1.302,97,2.241,167,1.577,172,4.124,203,1.498,208,3.994,217,1.963,225,5.051,292,2.878,296,2.175,298,2.448,310,2.06,325,4.741,346,2.851,358,2.649,394,1.789,399,2.851,427,2.556,450,2.448,535,1.823,541,1.498,554,4.616,580,2.763,590,2.605,601,2.686,643,1.806,652,1.458,668,1.899,669,2.744,745,1.375,771,1.448,772,2.785,846,3.077,864,2.009,1072,1.375,1374,2.241,1375,1.841,1438,3.232,1522,3.439,1595,5.221,1771,2.401,1772,2.357,1775,2.207,1785,3.077,1816,2.851,1835,2.617,2365,3.232,2602,2.763,2616,5.051,2722,3.754,2723,3.754,2724,3.754,2725,3.754,2726,3.754,2727,3.754,2728,3.754,2729,3.754,2730,3.754,2731,3.754,2732,3.232,2733,3.232,2734,3.754,2735,3.754,2736,3.439,2737,3.754,2738,3.754,2739,3.754,2740,3.754,2741,3.754,2742,3.754,2743,3.754,2744,3.754,2745,3.754,2746,3.754,2747,3.754,2748,3.754,2749,3.754,2750,3.754]],["t/1221",[14,1.837,53,1.18,64,0.802,143,2.943,182,1.65,203,3.107,252,2.143,285,5.903,286,4.576,287,3.507,304,4.326,315,2.087,321,3.176,339,2.935,353,3.088,421,3.047,536,4.035,537,3.923,672,6.212,1176,3.442,1460,4.494,2162,6.702,2494,7.121,2665,5.023,2751,5.482,2752,5.482,2753,5.482,2754,5.482,2755,9.05,2756,5.482,2757,5.482,2758,5.482,2759,5.482,2760,5.482,2761,5.482,2762,5.482,2763,5.482,2764,5.482,2765,5.482,2766,5.482,2767,5.482,2768,5.482]],["t/1223",[5,1.405,14,1.528,18,1.082,26,0.871,53,1.466,57,1.408,61,0.899,64,0.402,67,2.698,76,1.394,81,0.953,113,1.667,114,1.23,125,0.746,132,3.131,143,1.039,169,0.994,176,0.786,196,1.508,197,1.508,203,2.717,217,1.437,221,1.569,233,1.233,238,1.129,244,3.106,251,1.046,289,1.792,297,3.589,301,0.89,304,1.527,320,1.322,325,1.471,339,1.471,342,0.959,343,1.63,358,1.241,365,1.592,386,2.115,401,1.667,417,1.871,421,2.536,431,4.306,432,1.335,466,1.695,541,1.097,562,2.115,585,3.357,590,1.22,643,1.322,668,1.39,669,1.285,672,2.724,680,1.039,771,2.256,772,2.256,1176,1.725,1198,1.695,1319,1.916,1325,2.928,1417,2.253,1474,2.087,1478,2.253,1539,2.518,1625,4.078,1637,2.087,1787,3.672,1835,3.181,2255,2.253,2288,2.253,2449,2.253,2453,2.918,2494,3.589,2719,2.518,2732,5.035,2736,2.518,2769,2.748,2770,2.748,2771,2.748,2772,2.748,2773,2.518,2774,2.748,2775,2.748,2776,2.748,2777,2.748,2778,2.748,2779,2.748,2780,5.848,2781,2.748,2782,4.561,2783,2.748,2784,2.748,2785,2.748,2786,2.748,2787,2.748,2788,2.748,2789,2.748,2790,2.748,2791,2.748,2792,2.748,2793,2.748,2794,2.748,2795,2.748,2796,2.748,2797,2.518,2798,2.748,2799,2.748,2800,2.748,2801,2.748,2802,2.748,2803,2.748,2804,2.748,2805,2.748,2806,2.748,2807,2.748,2808,2.748,2809,2.748,2810,2.748,2811,2.748,2812,2.748,2813,2.366]],["t/1225",[13,3.495,48,1.799,61,1.59,97,3.443,169,0.981,215,4.126,232,4.538,237,4.244,238,3.313,339,3.087,421,3.205,538,2.441,771,2.224,822,3.164,876,4.728,1236,3.926,1387,4.38,1915,6.945,2152,4.965,2453,3.689,2465,3.761,2654,7.32,2814,5.767,2815,8.066,2816,5.767,2817,5.767,2818,5.767,2819,5.767,2820,5.767,2821,5.767,2822,5.767,2823,5.767,2824,5.767,2825,5.767,2826,5.767,2827,4.965,2828,5.767,2829,5.767,2830,5.767,2831,5.767,2832,5.767,2833,5.767,2834,5.767,2835,5.767]],["t/1227",[431,4.338,541,3.769,771,3.642,1787,5.929,1835,6.583,2836,9.442]],["t/1229",[34,2.372,70,3.42,97,3.473,129,4.282,154,1.916,160,2.372,203,3.239,214,3.653,245,3.37,277,5.009,280,3.794,282,2.311,287,5.191,289,3.794,307,4.056,315,2.214,326,4.418,339,3.114,349,4.162,672,4.845,1184,4.418,1465,5.009,2015,4.418,2111,4.769,2454,5.973,2504,5.009,2544,3.653,2837,4.162,2838,5.817,2839,5.817,2840,5.817,2841,5.817,2842,5.817,2843,5.817,2844,5.817,2845,5.33,2846,5.009,2847,5.817,2848,5.817,2849,5.817,2850,5.817,2851,5.817,2852,5.817,2853,5.817,2854,5.817]],["t/1232",[18,2.834,48,2.924,63,4.298,136,3.196,161,3.567,203,2.873,217,3.765,233,1.175,312,4.055,316,4.002,538,3.047,615,6.596,688,5.665,865,5.02,2195,6.198,2465,4.696,2654,5.665,2732,6.198,2733,6.198,2827,6.198,2855,7.199,2856,7.199,2857,7.199,2858,7.199,2859,7.199,2860,7.199,2861,7.199]],["t/1234",[22,5.869,61,1.572,339,4.269,1356,8.2,1787,6.862,2654,6.275,2660,7.306,2827,6.866,2862,7.974,2863,10.002,2864,7.974,2865,7.974,2866,7.974,2867,7.974,2868,7.974]],["t/1236",[48,3.32,57,2.723,210,4.665,343,3.151,538,3.732,576,6.49,1366,6.49,2465,5.751,2869,8.817,2870,8.817]],["t/1238",[50,2.353,66,1.541,136,4.44,169,1.127,196,3.636,203,2.645,233,1.633,263,5.214,292,3.251,326,5.033,339,4.749,340,3.591,462,4.741,472,4.877,718,2.147,822,3.636,1313,5.214,1479,4.239,2363,5.706,2871,6.626,2872,6.626,2873,6.626,2874,6.626,2875,6.626,2876,6.626,2877,6.071,2878,6.626,2879,6.626,2880,6.071,2881,6.626]],["t/1240",[53,1.898,67,2.921,136,3.915,431,4.051,634,3.982,672,5.265,2411,8.079,2882,8.079,2883,8.817,2884,8.817,2885,8.817]],["t/1242",[13,1.34,14,1.036,22,2.276,34,1.261,48,3.275,53,0.666,54,1.085,57,0.955,66,0.719,68,1.992,87,1.581,112,1.617,132,1.655,136,4.202,143,1.9,147,1.655,203,1.234,207,0.94,216,1.072,231,2.212,245,1.791,282,0.881,285,2.017,286,1.818,312,1.742,317,1.488,325,1.655,339,2.69,343,1.105,421,1.719,431,2.917,452,2.69,538,3.095,554,2.433,589,2.87,590,4.202,672,4.366,680,1.169,717,1.818,791,2.059,865,2.156,1032,1.876,1176,3.156,1186,2.348,1332,2.433,1387,6.109,1478,2.535,1595,3.215,1676,2.662,1705,2.535,1738,4.327,1787,3.987,1956,2.105,2014,2.662,2465,3.278,2654,2.433,2677,2.433,2813,2.662,2880,4.605,2882,2.833,2886,3.092,2887,10.057,2888,3.092,2889,3.092,2890,3.092,2891,3.092,2892,3.092,2893,5.026,2894,3.092,2895,3.092,2896,3.092,2897,3.092,2898,3.092,2899,3.092,2900,3.092,2901,3.092,2902,3.092,2903,3.092,2904,3.092,2905,3.092,2906,3.092,2907,3.092,2908,3.092,2909,3.092,2910,5.026,2911,3.092,2912,3.092,2913,3.092,2914,3.092,2915,3.092,2916,3.092]],["t/1245",[421,4.967,672,5.335,2454,6.577,2487,8.187,2544,5.611,2917,8.187,2918,8.936,2919,8.936,2920,8.936,2921,8.936]],["t/1247",[22,7.049,1496,7.537,2922,9.577,2923,9.577,2924,9.577]],["t/1250",[0,0.628,13,1.544,14,0.688,17,1.938,26,0.651,34,0.838,37,0.721,52,2.383,53,1.859,57,1.1,61,0.93,63,3.361,64,0.3,66,0.829,67,0.68,76,0.628,81,0.712,87,1.822,104,1.556,114,3.125,121,2.622,142,1.34,143,0.777,153,2.674,154,0.677,160,0.838,163,1.518,167,0.863,169,1.274,173,1.637,176,1.019,182,0.618,208,1.398,215,1.47,216,0.712,217,1.074,221,1.173,226,4.837,233,0.582,236,0.988,252,1.844,272,2.387,281,1.666,282,1.014,296,1.19,300,4.383,301,1.154,303,1.246,304,2.622,305,2.779,310,1.127,312,1.157,315,2.424,317,0.988,320,0.988,321,2.064,340,0.831,343,2.969,344,2.622,353,1.157,354,1.714,395,0.844,408,1.083,431,2.926,432,1.73,448,2.549,465,1.56,466,1.267,486,1.398,491,2.387,504,2.706,524,1.684,527,1.882,528,4.322,531,1.595,533,3.712,534,2.92,634,1.609,680,1.347,718,2.428,736,1.432,744,1.226,745,2.062,748,2.269,751,1.368,772,1.374,822,3.495,937,1.368,1072,1.728,1236,1.398,1354,1.47,1371,2.161,1389,2.237,1390,1.768,1474,1.56,1587,1.882,1595,2.279,1686,2.803,1780,2.706,1886,1.684,1964,1.768,1965,1.768,1976,3.264,2010,3.067,2144,1.882,2153,1.512,2363,3.067,2425,1.768,2602,1.512,2925,2.054,2926,2.054,2927,2.054,2928,3.562,2929,1.882,2930,1.882,2931,1.882,2932,1.882,2933,2.054,2934,2.054,2935,2.054,2936,2.054,2937,2.054]],["t/1252",[34,3.103,61,1.5,96,3.149,135,5.78,161,3.771,171,3.696,172,5.546,210,4.026,272,3.85,295,4.867,303,4.617,371,5.988,424,5.445,431,3.496,437,5.78,822,4.176,1314,5.601,1668,5.601,1987,6.239,2465,4.963,2938,7.61,2939,7.61]],["t/1255",[0,2.93,34,0.884,37,0.761,39,1.386,48,1.164,52,0.917,57,0.669,61,1.151,64,1.052,68,3.95,75,2.048,76,0.662,96,0.897,104,3.365,105,1.189,110,1.133,113,1.315,114,2.947,120,2.834,128,1.443,142,2.434,143,2.208,146,1.238,150,4.293,153,0.83,155,5.44,159,1.551,161,3.564,163,1.119,168,4.061,169,1.63,171,3.952,172,3.759,173,3.024,176,1.671,182,1.479,199,1.511,211,1.551,224,1.511,226,1.646,228,1.476,252,0.847,272,1.097,282,1.874,304,1.205,305,2.441,313,1.849,315,2.505,316,1.205,320,1.043,321,1.256,343,0.774,344,1.595,357,2.434,362,2.343,369,1.443,405,2.834,424,3.516,431,1.715,434,3.543,437,1.646,448,2.67,449,1.205,455,1.443,457,1.386,497,1.386,506,1.414,514,1.294,523,2.343,540,1.476,574,1.476,585,1.595,593,1.646,635,1.705,748,1.795,822,1.189,1032,1.315,1313,1.705,1318,1.511,1331,1.511,1485,4.029,1518,1.777,1601,1.705,1775,1.274,1881,1.777,1987,3.059,2097,1.986,2164,1.866,2174,1.866,2454,1.595,2930,1.986,2931,1.986,2932,1.986,2940,2.167,2941,2.167,2942,2.167,2943,2.167,2944,1.986,2945,2.167,2946,2.167,2947,2.167,2948,2.167]],["t/1257",[13,1.469,14,1.814,37,1.9,48,1.689,50,1.204,53,1.935,61,1.662,64,0.791,66,1.259,67,1.793,68,2.146,85,1.937,104,1.481,112,3.533,146,3.092,157,1.531,160,1.383,161,1.68,167,1.424,191,3.775,196,1.861,207,1.031,210,1.794,215,2.426,217,1.773,223,3.399,236,2.604,238,1.393,245,1.964,251,1.291,270,1.601,278,2.668,282,1.542,300,2.129,301,1.099,313,1.68,315,1.291,326,2.575,339,1.815,340,3.123,341,3.605,358,1.531,371,2.668,395,1.393,421,1.885,432,1.647,438,1.435,448,2.426,504,2.575,509,4.96,538,2.86,546,2.496,576,2.496,579,1.861,580,2.496,589,1.937,593,2.575,603,2.364,616,2.426,640,2.169,649,2.426,668,1.716,677,1.572,680,1.282,718,1.099,726,2.575,745,1.242,768,2.364,772,2.088,822,1.861,866,1.837,1485,2.78,1660,3.107,1661,4.96,1686,2.668,1761,3.107,1866,2.78,1883,2.92,2010,2.92,2453,2.169,2454,2.496,2539,2.78,2949,4.96,2950,3.391,2951,3.107,2952,6.757,2953,5.413,2954,2.92,2955,3.391,2956,3.391,2957,5.413,2958,3.107,2959,3.391,2960,3.107,2961,3.391]],["t/1260",[2,3.712,53,1.359,64,0.923,67,2.844,86,4.298,116,4.038,138,3.509,142,4.118,143,4.141,167,2.652,169,1.073,201,3.83,203,2.52,251,2.403,270,2.98,272,3.194,432,3.066,634,3.877,745,3.144,772,3.311,1337,4.204,1369,5.845,1757,4.038,1812,4.038,1813,4.517,1814,3.83,1815,4.646,2962,6.313,2963,6.313]],["t/1262",[34,3.549,48,2.715,53,1.873,64,1.272,66,2.024,270,4.108,300,6.629,304,4.837,343,3.109,538,3.683,1775,5.117]],["t/1265",[34,3.93,53,1.897,64,0.764,85,2.984,104,2.282,106,4.787,114,3.367,146,4.295,167,3.159,173,3.455,176,2.152,216,1.812,238,2.146,239,3.738,242,2.701,270,2.466,301,1.693,320,2.513,325,2.797,339,2.797,425,3.643,429,2.489,431,4.048,515,3.968,546,3.845,551,3.968,554,4.111,559,3.968,560,3.643,636,3.968,659,3.845,718,2.437,745,3.227,772,2.9,1331,3.643,1756,5.12,1780,3.968,2453,3.342,2964,5.224,2965,7.52,2966,5.224,2967,5.224,2968,4.787,2969,5.224,2970,5.224]],["t/1267",[48,2.447,53,1.398,56,2.061,57,1.323,64,1.28,66,1.824,67,1.419,68,1.698,81,2.252,104,1.871,108,3.709,125,1.163,157,1.935,169,1.104,175,2.643,182,1.289,217,2.24,239,3.065,245,2.482,255,5.11,292,2.102,295,2.74,296,2.482,298,2.794,304,2.381,312,3.658,320,3.124,321,3.762,325,3.477,343,3.361,346,5.957,355,2.599,357,2.794,408,1.302,419,2.794,429,2.042,431,1.968,443,3.689,450,2.794,452,2.294,517,3.065,540,4.422,573,2.599,640,2.74,643,2.061,718,2.541,727,3.153,745,1.569,772,1.652,1072,1.569,1236,4.422,1313,3.371,1595,4.154,1633,3.254,2111,3.512,2282,3.925,2971,6.494,2972,4.284,2973,4.284,2974,4.284,2975,3.512,2976,4.284,2977,4.284]],["t/1269",[14,2.177,18,2.558,37,2.28,51,3.711,61,1.281,68,3.47,75,3.565,87,3.323,124,5.311,155,3.612,161,4.338,196,3.565,197,3.565,232,5.113,292,3.187,294,3.187,296,5.072,325,5.3,340,2.63,341,4.327,424,7.084,431,4.022,466,4.009,649,4.649,1318,4.53,1650,8.021,2244,5.113,2978,6.497]],["t/1272",[0,1.502,14,1.008,22,2.214,28,2.048,34,1.227,37,1.056,48,1.534,50,1.068,53,1.549,57,0.929,64,1.052,66,0.7,67,0.997,68,2.47,80,1.476,85,2.807,104,2.147,105,1.651,114,2.2,116,2.403,125,0.816,142,4.064,143,2.72,149,1.539,154,2.052,160,1.227,161,2.435,163,0.512,165,2.214,171,1.461,172,2.807,182,1.479,217,2.57,223,1.889,226,2.285,238,1.236,251,1.871,282,1.4,294,1.476,301,1.592,303,1.825,315,1.871,317,1.447,318,2.285,325,1.61,342,1.049,343,2.226,369,2.003,374,1.889,376,1.153,377,1.176,380,2.048,382,1.273,386,1.395,421,1.672,431,3.643,432,3.027,435,1.651,504,2.285,505,2.214,538,2.08,541,3.868,564,1.447,579,1.651,636,3.733,640,1.924,643,1.447,652,2.793,669,1.407,680,1.138,745,1.8,768,3.427,772,1.16,819,1.476,822,1.651,847,1.924,1032,1.825,1225,1.889,1354,2.153,1364,2.982,1375,1.476,1376,1.856,1389,1.889,1644,2.285,1750,1.651,1769,2.59,1770,1.796,1812,1.924,1827,3.086,1835,2.098,2011,2.466,2449,2.466,2979,4.232,2980,3.008,2981,3.008,2982,3.008,2983,4.915,2984,3.008,2985,2.756,2986,3.008]],["t/1274",[0,1.542,10,1.987,13,2.76,14,1.041,26,0.985,34,2.99,37,1.09,48,1.574,53,1.578,55,2.298,57,1.967,61,1.445,64,0.454,66,0.723,67,2.11,68,2.525,80,1.524,81,1.749,104,1.357,157,1.403,160,1.267,161,1.539,167,1.305,171,1.509,172,1.774,176,1.444,182,1.518,196,1.705,207,1.534,211,2.223,221,2.881,233,0.507,240,3.713,245,1.8,251,1.182,270,4.078,272,1.572,282,1.437,301,1.635,303,1.885,304,2.804,325,2.701,340,1.258,343,2.276,355,1.885,359,2.115,408,1.936,426,4.074,427,2.115,431,1.427,447,2.359,491,1.572,503,2.115,513,1.524,517,2.223,541,1.24,546,2.286,547,2.286,580,3.713,583,2.359,634,1.403,636,3.831,652,1.206,669,1.453,680,1.175,718,1.007,743,3.012,745,2.333,772,2.457,1338,2.115,1364,1.885,1365,1.75,1376,1.917,1391,4.344,1562,2.359,1775,2.966,1833,2.026,2295,2.675,2364,2.846,2365,2.675,2917,2.846,2954,2.675,2979,2.675,2985,2.846,2987,3.106,2988,3.106,2989,3.106,2990,3.106,2991,3.106,2992,3.106,2993,7.332,2994,3.106,2995,3.106,2996,5.045,2997,3.106,2998,3.106]],["t/1277",[26,2.833,50,3.174,53,1.924,54,3.136,153,3.424,270,4.218,301,3.475,382,3.782,752,6.577]],["t/1279",[0,2.559,158,4.175,272,5.217,291,6.865,327,6.59,457,5.357,855,6.59,1878,7.673,2421,7.211,2454,6.164,2464,7.673,2999,8.374,3000,8.374]],["t/1281",[18,2.462,50,2.221,53,1.346,54,2.194,61,1.233,64,0.914,143,3.671,161,3.099,169,1.063,172,3.572,173,2.873,221,5.545,270,2.952,281,2.925,300,3.927,303,3.794,304,3.476,305,2.319,339,3.348,343,2.234,394,2.98,401,3.794,404,5.127,406,5.384,432,4.144,466,3.858,472,6.279,525,4.603,611,5.384,1354,4.474,2453,4,2949,5.73,2951,5.73,2960,5.73,2979,5.384,3001,6.253]],["t/1283",[53,2.033,64,1.38,343,3.374,417,6.428,431,4.338,1381,5.248]],["t/1285",[0,3.252,39,5.64,96,3.649,142,5.751,143,3.334,299,6.309,339,4.72,370,5.872,460,7.229,2453,5.64]],["t/1287",[17,2.569,18,2.462,26,1.983,50,2.221,53,1.346,54,2.194,57,1.931,61,1.914,73,3.27,125,1.697,146,3.572,168,5.263,169,1.856,217,3.27,255,4.921,282,1.781,294,3.068,297,4.921,298,4.079,299,4.474,300,5.356,301,2.026,302,5.73,303,3.794,304,3.476,305,3.601,306,4.921,307,4.36,308,5.384,309,5.73,310,3.431,311,3.623]],["t/1289",[0,2.526,34,2.436,61,1.629,64,0.873,68,2.368,78,3.896,96,2.472,104,2.609,114,2.674,124,3.624,143,2.259,146,3.412,147,3.198,157,2.697,160,2.436,163,1.016,172,3.412,176,2.365,182,1.797,191,5.764,193,4.397,244,4.067,245,3.461,270,3.902,285,3.896,286,3.512,303,3.624,304,5.269,422,5.473,424,5.914,425,4.165,426,3.821,427,4.067,428,5.143,429,4.517,430,4.897,497,3.821]],["t/1291",[0,2.845,158,3.769,327,7.326,470,7.071,632,6.339,2214,8.53,2558,7.632]],["t/1293",[203,3.995,2602,7.367]],["t/1295",[0,3.252,39,5.64,96,3.649,142,5.751,143,3.334,299,6.309,339,4.72,370,5.872,460,7.229,2453,5.64]],["t/1297",[37,2.422,52,2.921,176,1.975,196,5.001,233,1.127,272,4.611,299,6.521,303,4.187,305,2.559,315,2.627,338,4.938,405,5.241,439,5.942,472,5.079,477,3.32,486,4.698,490,5.241,515,6.922,517,4.938,521,5.942,532,5.079,533,5.43,534,5.657,601,4.938,846,5.657,1775,4.057,3002,6.901,3003,6.901]],["t/1299",[143,2.911,169,1.309,221,5.587,244,5.241,272,4.949,285,5.021,286,4.526,304,5.437,305,2.855,312,4.336,405,5.846,419,5.021,429,4.661,430,6.311,497,4.924,1478,6.311,3004,7.053,3005,7.698]],["t/1301",[0,2.625,82,3.783,143,3.248,153,3.291,158,3.478,285,5.603,286,5.051,327,6.76,341,5.721,470,6.524,632,5.849,2215,7.396,2558,7.042]],["t/1303",[13,2.456,18,2.231,37,1.989,61,1.571,64,0.829,66,1.854,113,3.439,114,2.538,138,3.151,142,3.697,146,4.552,161,4.567,172,3.237,176,1.622,203,2.263,259,2.604,270,2.676,272,2.868,282,1.614,303,3.439,304,3.151,305,2.102,312,3.193,358,2.56,395,2.328,424,4.056,429,4.764,432,2.754,438,2.399,513,3.91,551,4.305,554,4.461,559,4.305,560,3.953,568,4.172,589,3.237,590,2.517,786,3.626,1781,3.859,2162,7.936,2195,4.881,3006,5.669]],["t/1305",[26,2.559,61,1.591,64,1.18,67,2.673,203,3.221,270,3.81,447,6.129,580,5.94,634,4.551,745,2.956,865,7.027,1621,3.882,1814,6.114,3007,10.078]],["t/1307",[0,2.625,82,3.783,143,3.248,153,3.291,158,3.478,285,5.603,286,5.051,327,6.76,341,5.721,632,5.849,2215,7.396,2558,7.042,2644,7.87]],["t/1309",[54,3.484,81,2.733,138,4.38,153,3.019,172,4.5,176,2.255,205,5.365,214,4.948,239,5.638,270,3.72,283,5.04,376,3.804,455,5.247,1329,7.54,2127,7.219,3008,7.219,3009,7.879]],["t/1311",[0,2.325,2,4.474,53,1.638,64,1.113,66,1.77,68,3.016,143,2.877,203,3.037,208,5.181,224,5.306,486,5.181,541,3.037,590,3.379,672,4.544,770,4.346,771,2.935,772,2.935,1479,6.211,1835,5.306,2602,7.147,2954,6.552]],["t/1313",[0,3.252,39,5.64,96,3.649,142,5.751,143,3.334,299,6.309,339,4.72,370,5.872,460,7.229,2453,5.64]],["t/1315",[5,4.127,48,3.145,64,1.18,81,2.799,96,3.34,143,3.052,233,1.645,236,3.882,251,3.072,303,4.896,365,4.675,408,2.453,535,3.92,601,5.774,602,6.949,603,5.627]],["t/1318",[13,3.673,37,2.174,41,2.751,53,1.334,66,1.972,67,3.604,68,3.36,161,3.07,182,1.864,196,3.4,197,3.4,207,1.883,210,3.277,233,1.011,236,2.98,270,2.925,294,3.039,431,2.847,541,2.473,545,6.67,550,5.862,634,2.798,1335,5.079,1374,5.061,1375,4.158,1482,5.529,1629,4.56,1739,4.705,2453,3.963,3010,6.195]],["t/1320",[53,2.373,66,2.455,67,2.131,96,2.663,121,4.736,165,4.736,203,2.568,312,3.625,339,3.445,359,6.708,488,4.285,540,4.381,541,2.568,643,3.095,646,4.381,652,2.499,718,2.085,744,5.882,745,2.357,771,2.482,772,2.482,865,4.487,1703,4.116,1922,5.275,2011,5.275,2602,4.736,3011,6.435,3012,6.435]],["t/1324",[10,5.255,49,3.787,53,2.031,66,1.377,67,1.961,68,3.256,93,4.358,110,3.096,148,3.335,172,3.381,176,1.694,191,4.128,199,4.128,223,3.717,229,3.717,233,0.967,294,2.904,301,3.057,340,2.397,353,3.335,358,2.673,431,2.72,432,2.876,448,4.236,541,2.363,579,3.249,593,4.497,636,6.239,643,2.848,718,2.662,745,3.009,771,2.283,772,2.283,1703,3.787,2164,5.098,2230,5.424,3013,5.92,3014,5.92,3015,5.92]],["t/1326",[0,1.449,13,3.611,18,2.758,41,2.105,53,1.794,61,0.935,66,1.938,86,3.228,146,2.708,196,2.602,197,2.602,203,1.893,245,2.747,246,1.781,270,2.238,272,2.399,300,2.977,301,2.27,304,2.636,305,1.759,313,2.35,340,1.92,345,3.601,360,2.977,378,2.281,385,1.933,386,2.198,438,2.966,536,3.49,537,3.392,564,2.281,568,3.49,585,3.49,634,3.164,640,3.033,672,2.831,718,1.536,745,3.597,1331,3.306,1364,5.959,1365,5.185,1371,2.877,1381,2.636,1389,4.399,1391,4.082,1601,3.731,1687,3.49,2011,3.887,2453,3.033,2539,3.887,2773,6.419,3016,4.741,3017,4.741]],["t/1328",[242,5.254]],["t/1330",[61,1.672,158,3.434,162,6.068,175,5.233,223,5.325,287,5.425,315,3.228,421,5.776,1410,6.953,3018,7.77,3019,8.841]],["t/1332",[0,1.513,51,4.881,61,1.853,73,2.59,76,1.513,104,3.16,109,3.298,128,3.298,133,4.06,139,3.005,143,2.736,158,2.005,213,2.296,282,1.41,292,2.43,294,2.43,349,3.544,354,2.383,362,3.11,417,3.372,421,2.753,443,4.264,517,3.544,532,5.325,723,3.056,822,2.718,1066,4.264,1324,4.264,1337,3.298,1409,4.06,1504,5.931,1680,4.538,2128,4.264,2350,3.544,2484,4.538,3019,3.897,3020,3.298,3021,3.645,3022,4.538,3023,4.538,3024,3.645,3025,4.953,3026,4.953,3027,4.953,3028,4.953,3029,4.953,3030,4.132,3031,4.538,3032,4.953,3033,4.953,3034,4.953,3035,4.538,3036,4.953,3037,4.953,3038,4.953,3039,7.234,3040,3.897,3041,4.264,3042,4.538]],["t/1334",[61,1.761,82,3.935,223,5.611,280,5.828,340,3.618,421,4.967,3030,6.564,3043,7.694]],["t/1336",[20,2.841,25,4.57,59,3.22,61,1.499,97,3.169,101,2.744,126,4.57,129,3.907,143,2.007,153,2.034,167,2.229,175,3.275,198,7.287,292,3.731,295,3.395,315,2.02,343,1.896,421,4.941,457,4.865,497,3.395,1606,4.57,1740,4.863,1840,4.351,1931,4.863,1956,3.614,2146,4.57,2929,4.863,3018,8.144,3019,6.995,3040,6.995,3041,4.57,3044,5.308,3045,4.863,3046,5.308,3047,5.308,3048,5.308,3049,5.308,3050,5.308,3051,5.308,3052,5.308,3053,5.308,3054,5.308,3055,5.308,3056,5.308,3057,5.308,3058,5.308,3059,4.351,3060,5.308]],["t/1338",[61,2.064,158,2.946,223,4.57,226,5.527,238,2.989,280,4.747,282,2.072,312,4.099,376,2.788,457,4.655,545,5.727,656,5.527,822,3.993,1176,4.57,1185,5.207,1956,4.955,2640,6.668,2975,5.966,3042,6.668,3061,7.277,3062,7.277,3063,7.277,3064,7.277,3065,6.668,3066,7.277]],["t/1340",[61,1.761,136,3.968,349,6.394,667,8.187,1479,5.716,1544,7.326,3019,8.44,3040,8.44]],["t/1342",[158,3.667,163,1.54,349,6.48,1479,5.793,1869,9.31,3040,7.127,3059,7.425,3067,9.057]],["t/1344",[61,1.006,108,2.914,128,2.098,137,1.474,163,1.675,204,2.479,213,2.365,233,0.514,238,3.916,248,6.603,255,2.479,259,3.732,312,1.775,354,3.907,376,3.331,389,5.011,400,2.479,416,2.393,446,1.978,458,2.713,467,2.713,612,6.774,645,2.713,708,2.319,733,2.393,744,1.881,822,3.529,1176,1.978,1701,2.319,1884,2.887,2014,4.394,2968,2.887,2975,2.583,3019,2.479,3040,2.479,3065,7.965,3068,3.151,3069,6.431,3070,3.151,3071,3.151,3072,3.151,3073,3.151,3074,3.151,3075,3.151,3076,3.151,3077,3.151,3078,3.151,3079,3.151,3080,3.151,3081,3.151,3082,3.151,3083,3.151,3084,3.151,3085,3.151,3086,3.151,3087,3.151,3088,3.151,3089,3.151,3090,3.151,3091,3.151,3092,3.151,3093,3.151,3094,10.55,3095,5.103,3096,5.103,3097,5.103,3098,5.103,3099,3.151,3100,3.151,3101,3.151,3102,3.151,3103,3.151,3104,3.151,3105,3.151,3106,3.151,3107,3.151,3108,2.713,3109,3.151,3110,3.151]],["t/1346",[21,4.394,108,3.08,109,3.592,120,4.096,128,3.592,143,2.039,148,3.038,149,2.758,163,1.308,213,3.566,214,3.387,223,3.387,283,3.45,286,3.171,300,3.387,421,2.998,447,4.096,455,3.592,457,3.45,550,3.272,585,3.97,601,5.505,822,2.96,1367,5.663,1582,3.859,1766,4.644,1773,4.422,1943,4.422,2350,7.916,2602,3.97,3020,5.123,3043,6.624,3108,4.644,3111,4.942,3112,5.393,3113,3.97,3114,7.049,3115,5.393,3116,8.217,3117,5.393,3118,4.422,3119,5.393,3120,5.393]],["t/1348",[108,5.392,153,3.618,286,5.551,421,6.16,2350,6.756]],["t/1350",[124,5.811,296,5.548,389,5.909,555,5.548,2350,6.853]],["t/1352",[143,4.39,154,2.724,157,3.735,200,6.508,214,6.425,280,5.395,357,5.395,367,6.281,632,5.631,1739,6.281,1862,7.578,3121,7.578]],["t/1354",[4,6.705,97,4.65,132,4.169,143,2.945,147,4.169,292,3.82,367,5.915,550,5.979,1367,5.732,1688,5.732,2350,5.572,3020,5.186,3021,5.732,3043,8.485,3113,7.253,3122,7.787,3123,7.135,3124,6.384]],["t/1356",[21,4.111,75,3.95,96,2.979,102,6.198,135,5.468,143,2.722,158,2.914,223,4.52,283,4.605,286,4.233,340,2.914,353,4.055,550,5.685,573,4.368,661,5.665,822,5.141,2012,6.596,3020,4.794,3023,6.596,3113,6.896,3114,6.596,3118,7.681,3125,7.199,3126,7.199]],["t/1358",[3,3.978,50,2.121,59,3.624,61,1.629,82,2.63,143,3.584,153,2.289,157,2.697,171,2.902,175,3.685,213,2.769,214,5.19,246,2.244,280,5.391,286,4.86,310,3.278,313,2.96,367,4.537,457,3.821,513,2.93,708,4.397,822,3.278,1739,4.537,1775,5.573,1787,3.751,2128,5.143,2163,4.897,2544,5.19,2837,5.914,3030,4.721,3121,5.473,3124,4.897,3127,5.973,3128,5.973,3129,4.537,3130,5.973]],["t/1360",[73,3.152,120,4.578,143,2.279,145,5.522,174,4.313,197,3.307,199,4.203,203,2.406,214,6.448,252,2.356,280,3.931,292,4.672,293,4.941,340,2.44,394,3.963,431,2.769,488,4.014,550,5.778,632,4.104,1184,4.578,1460,6.819,1637,4.578,1705,7.808,1943,4.941,2958,5.522,3113,7.01,3118,6.819,3131,6.027,3132,6.027,3133,7.621,3134,5.522]],["t/1362",[26,2.759,153,3.334,213,4.034,252,3.402,280,5.676,286,5.117,2544,7.135,3030,4.97,3129,8.018]],["t/1364",[61,1.178,63,3.567,136,2.652,169,1.016,171,2.902,174,4.274,200,4.7,214,3.751,232,4.7,307,4.165,312,3.365,340,2.418,365,4.789,419,3.896,421,3.32,641,4.7,657,4.274,658,4.397,718,1.935,768,4.165,822,6.369,1198,3.685,1236,4.067,1636,5.473,1775,3.512,1977,7.573,2539,4.897,2544,3.751,2846,5.143,3004,5.473,3135,5.973,3136,5.973,3137,5.473,3138,5.473,3139,7.573,3140,5.973,3141,5.973]],["t/1366",[3,2.069,60,5.836,61,0.994,88,2.026,117,4.557,124,1.885,142,2.026,148,2.842,157,1.403,163,1.083,196,1.705,199,3.518,200,3.97,213,2.953,233,0.824,236,1.494,251,2.791,257,2.675,270,2.382,280,2.026,283,1.987,286,1.826,288,2.223,292,1.524,293,2.547,299,2.223,307,2.166,311,1.8,339,1.663,340,1.258,345,3.831,356,2.846,390,2.547,449,1.727,475,2.115,497,3.227,519,2.846,562,1.44,603,2.166,618,5.836,627,2.359,632,2.115,658,2.286,659,3.713,660,2.547,708,4.688,726,3.831,746,2.675,821,2.675,822,4.994,874,1.951,1065,2.675,1067,2.846,1313,2.445,1487,2.547,1784,2.675,1881,2.547,2244,2.445,2288,2.547,2296,2.675,2350,2.223,2421,8.164,2544,1.951,2797,2.846,2846,2.675,2877,2.846,2975,4.136,3108,2.675,3133,2.846,3137,2.846,3138,2.846,3139,2.846,3142,3.106,3143,3.106,3144,3.106,3145,3.106,3146,3.106,3147,3.106,3148,5.045,3149,3.106,3150,3.106,3151,3.106,3152,3.106,3153,3.106,3154,3.106,3155,3.106,3156,3.106,3157,6.369,3158,3.106,3159,3.106,3160,3.106,3161,4.622,3162,3.106,3163,3.106,3164,3.106,3165,3.106,3166,3.106,3167,5.045,3168,3.106,3169,3.106,3170,3.106,3171,3.106,3172,3.106,3173,3.106,3174,3.106,3175,2.846]],["t/1368",[3,2.987,26,1.422,61,0.884,116,3.11,124,2.722,127,3.302,129,3.302,131,2.562,154,2.215,157,2.026,158,1.816,197,2.462,203,2.684,213,2.08,214,2.817,233,1.098,236,2.158,251,1.707,252,2.629,270,2.118,272,2.27,280,2.926,287,5.158,339,2.402,340,1.816,345,3.407,390,3.678,391,4.11,393,2.768,405,3.407,431,2.061,457,2.869,550,5.435,599,4.11,708,3.302,717,4.742,1386,3.863,1580,3.863,1787,2.817,1942,3.863,2544,5.625,2677,5.291,2845,4.11,3030,2.562,3035,4.11,3116,4.11,3118,3.678,3129,6.125,3134,4.11,3176,4.486,3177,4.486,3178,4.486,3179,6.16,3180,4.11,3181,4.11,3182,4.486,3183,6.724,3184,4.486,3185,4.486,3186,4.486,3187,4.486,3188,4.486,3189,4.486]],["t/1370",[3,3.563,25,4.607,61,1.055,65,3.194,70,3.146,97,3.194,108,3.056,109,3.563,128,3.563,143,2.892,147,2.864,149,2.736,153,2.05,176,2.555,217,2.798,282,1.524,287,3.422,289,4.989,313,2.651,340,2.166,353,3.014,421,2.974,513,2.625,538,3.238,555,3.1,634,3.454,822,4.197,858,4.21,1066,4.607,1324,4.607,1582,3.828,1638,4.21,1775,3.146,1942,4.607,2504,4.607,3020,6.488,3021,5.63,3022,4.902,3024,3.938,3030,5.564,3124,4.386,3190,5.35,3191,6.586,3192,5.35,3193,5.35]],["t/1372",[73,3.891,76,2.925,82,3.276,104,3.25,153,2.85,282,2.119,287,4.759,289,4.853,489,5.323,538,3.149,1059,6.099,1704,6.817,3020,4.954,3030,6.601,3031,6.817,3045,6.817,3161,6.817,3194,7.44,3195,7.44,3196,7.44]],["t/1374",[12,3.653,51,4.044,61,1.657,100,2.872,101,2.487,109,3.203,139,2.918,143,3.178,148,2.709,150,3.137,203,3.354,213,3.282,214,5.277,216,1.668,225,4.141,233,1.156,237,3.54,248,3.653,279,4.407,287,3.077,343,1.719,349,3.441,394,3.374,399,3.653,491,2.434,497,3.077,514,2.872,515,3.653,560,3.354,643,2.314,717,2.828,822,2.639,1230,4.141,1582,3.441,1687,3.54,1775,2.828,1787,3.02,1869,4.141,1956,3.275,2163,3.943,2425,4.141,2449,3.943,2544,3.02,2733,4.141,3020,4.715,3030,5.902,3129,3.653,3179,4.407,3180,4.407,3181,4.407,3197,4.81,3198,4.81,3199,4.81,3200,4.81,3201,4.81,3202,4.81]],["t/1376",[0,2.273,80,3.65,97,4.442,128,4.954,162,5.323,169,1.265,231,5.323,288,5.323,437,7.269,822,4.082,1059,6.099,1367,5.476,2146,6.406,2152,8.241,3021,7.045,3024,5.476,3030,4.249,3041,6.406,3203,8.241,3204,6.406,3205,6.406]],["t/1378",[143,3.167,155,4.655,169,1.424,191,5.839,292,4.108,547,7.59,3030,6.381,3206,10.311,3207,8.374,3208,8.374,3209,8.374]],["t/1380",[61,1.45,97,4.393,233,1.551,272,4.808,289,4.799,312,4.145,340,2.979,394,4.528,689,5.01,717,5.587,1171,6.335,2071,8.182,2837,5.265,3024,5.416,3030,6.012,3210,6.032,3211,9.503,3212,7.358]],["t/1382",[169,1.652,2837,6.953,3030,5.55,3210,7.966]],["t/1384",[110,4.22,143,3.811,282,2.298,394,3.846,492,6.616,555,4.675,672,4.819,717,4.745,1843,5.374,2837,5.774,3020,5.374,3024,5.94,3030,5.756,3113,5.94,3213,6.616,3214,6.949]],["t/1386",[61,1.591,81,2.799,97,4.819,150,5.264,157,3.644,272,5.099,339,4.32,672,4.819,2837,7.211,3020,5.374,3021,5.94,3030,5.756,3205,6.949,3213,6.616,3215,8.07]],["t/1388",[96,3.698,143,3.379,176,2.557,238,3.67,431,4.106,1318,6.231,1881,7.326,2544,5.611,3030,5.103,3216,8.936]],["t/1390",[143,3.167,163,1.424,176,2.397,272,4.237,431,5.133,432,4.068,491,4.237,1070,7.673,1775,4.924,2174,7.211,2944,7.673,3030,5.889]],["t/1392",[21,3.861,131,3.861,143,3.819,176,2.573,222,3.252,233,1.104,355,4.102,431,4.131,432,3.284,652,2.625,717,3.975,854,4.976,1367,4.976,1638,5.32,2141,6.194,2211,6.194,2544,6.76,2813,7.741,3008,6.194,3030,6.149,3191,5.821,3217,8.99]],["t/1394",[61,1.672,143,3.929,150,5.532,213,3.931,222,4.08,233,1.385,312,4.777,717,4.986,859,6.441,1377,6.674,2544,5.325,3020,5.648,3030,4.844]],["t/1397",[0,1.284,3,2.799,4,3.619,61,0.829,96,1.739,97,3.822,104,1.836,138,2.336,143,4.289,147,2.25,169,0.715,171,2.042,176,1.203,185,3.308,197,2.306,222,2.022,233,1.045,270,1.984,282,1.197,286,2.471,367,3.192,394,3.05,431,2.941,436,2.593,492,3.446,550,3.884,555,2.435,689,2.862,717,5.096,822,3.512,1236,2.862,1367,3.094,1687,3.094,1843,2.799,2544,5.442,2599,5.511,2677,3.308,2837,3.007,3020,2.799,3021,3.094,3024,3.094,3030,5.835,3059,3.446,3111,3.851,3113,4.711,3123,3.851,3129,3.192,3203,5.511,3204,3.619,3210,3.446,3213,5.248,3214,5.511,3218,3.851,3219,3.851,3220,3.851,3221,3.851,3222,5.865,3223,3.851,3224,4.203]],["t/1399",[3,2.149,61,1.026,70,1.897,96,1.335,97,3.902,104,2.272,138,1.794,143,3.755,149,1.65,169,0.885,171,1.567,176,0.923,185,2.539,197,1.771,200,2.539,222,1.552,233,0.849,236,1.552,272,2.632,280,2.105,286,1.897,292,2.552,295,2.064,370,2.149,394,1.538,431,3.778,436,1.991,450,3.393,452,1.727,457,3.327,492,4.265,550,4.549,570,2.778,661,4.094,689,2.197,717,3.843,822,2.855,847,2.064,859,2.451,1236,2.197,1367,3.829,1474,2.451,1479,2.064,1637,2.451,1787,3.267,1843,4.992,1887,2.451,2244,2.539,2350,3.722,2544,4.707,2677,2.539,2837,4.677,3021,3.829,3024,2.375,3030,5.493,3059,2.645,3113,5.518,3124,6.146,3129,2.451,3175,2.956,3191,2.778,3203,4.479,3204,2.778,3205,4.479,3210,2.645,3213,4.265,3214,2.778,3218,2.956,3219,2.956,3220,2.956,3221,2.956,3222,4.766,3223,2.956,3225,3.227,3226,3.227,3227,3.227,3228,3.227,3229,3.227,3230,3.227,3231,3.227,3232,3.227,3233,3.227,3234,3.227]],["t/1401",[76,3.105]],["t/1403",[10,4.156,14,2.177,20,3.478,41,2.885,48,2.732,50,3.109,51,3.711,64,0.95,76,3.481,82,2.861,100,3.879,153,2.489,282,1.85,315,2.473,340,2.63,342,2.267,538,2.75,582,4.782,677,3.012,680,2.457,853,5.113,856,5.71,1176,4.08,1187,4.08,1508,5.113,1524,5.327,1578,5.594,1579,5.327,1580,7.538]]],"invertedIndex":[["",{"_index":163,"t":{"19":{"position":[[93,1],[179,1],[227,1],[295,1],[457,1],[542,1],[622,1],[733,1],[824,1]]},"25":{"position":[[222,4]]},"31":{"position":[[326,4]]},"33":{"position":[[55,1],[214,1]]},"45":{"position":[[669,3],[703,3],[735,3],[756,3],[775,3],[815,3],[840,3],[882,3],[908,3],[933,3],[1142,3],[1178,3],[1212,3],[1235,3],[1256,3],[1298,3],[1325,3],[1369,3],[1397,3],[1424,3],[3042,3],[3199,3],[3203,3],[3474,1],[3476,1],[3488,1],[3490,2],[3869,3],[3905,3],[3939,3],[3974,1],[4039,1],[4172,3],[4192,1],[4257,1],[4390,3],[4408,1],[4471,1],[4604,3],[4645,1],[4724,1],[4792,1],[4928,3],[4932,3]]},"47":{"position":[[218,1],[712,1],[755,1],[838,1],[985,1],[1363,1],[1523,1],[1556,1]]},"54":{"position":[[1140,3],[1369,3]]},"60":{"position":[[712,1]]},"72":{"position":[[60,1]]},"76":{"position":[[140,1],[142,1],[158,3],[178,1],[187,1],[203,3]]},"91":{"position":[[259,1],[282,1],[315,1],[317,1],[389,1],[416,1],[482,1],[509,1],[621,3]]},"95":{"position":[[445,1],[486,1],[503,1],[536,1],[564,1],[599,1],[638,1],[684,1],[726,1],[751,1],[779,1],[813,1]]},"103":{"position":[[335,1],[418,1],[470,1],[512,1],[594,1],[646,1]]},"105":{"position":[[672,1],[893,1],[999,1]]},"107":{"position":[[364,3],[381,3],[524,1],[564,3],[572,3],[590,1]]},"115":{"position":[[1776,1],[3557,1],[4284,1]]},"117":{"position":[[381,1],[464,1],[516,1],[558,1],[640,1],[692,1],[1083,1],[1304,1],[1408,1],[1970,3],[1987,3],[2130,1],[2170,3],[2178,3],[2196,1]]},"119":{"position":[[51,1],[411,1],[533,1],[548,4]]},"121":{"position":[[289,1],[305,1],[337,1],[363,1],[394,1],[429,1],[471,1]]},"131":{"position":[[364,3],[381,3],[390,1],[501,1],[503,1],[520,3],[539,3],[559,1],[567,3],[587,1],[589,1],[598,3],[618,1],[627,3],[647,1],[756,3],[833,1]]},"139":{"position":[[224,1],[515,3],[1158,1],[1569,1],[1602,1],[2011,1],[2139,1],[2167,1],[2315,1],[2346,1],[2359,1]]},"141":{"position":[[561,1],[607,1],[642,1],[679,1],[752,3],[769,3],[778,1],[889,1],[891,1],[908,3],[927,3],[947,1],[955,3],[975,1],[977,1],[986,3],[1006,1],[1015,3],[1035,1],[1144,3],[1221,1],[1676,1],[2254,1],[2285,1]]},"143":{"position":[[797,2]]},"145":{"position":[[149,1],[175,1],[206,1],[238,1],[267,1],[302,1]]},"157":{"position":[[369,3],[387,3]]},"161":{"position":[[1231,3],[1249,3]]},"164":{"position":[[23,1]]},"210":{"position":[[369,4],[534,1],[805,1],[1630,3],[1784,1],[1855,3],[1861,1],[1913,1]]},"227":{"position":[[1734,4],[2525,3],[2582,3],[2618,3],[2695,3]]},"236":{"position":[[95,2],[168,3],[210,3],[214,3],[218,2],[221,3],[225,3],[229,3],[322,3],[337,3],[343,1],[345,1],[367,1],[369,1],[374,3],[401,3],[407,3],[428,3],[434,3],[452,3],[458,1],[460,1],[474,1],[484,3],[490,1],[492,3],[498,1],[518,3],[532,1],[539,3],[551,2],[581,3],[595,2],[603,3],[615,1],[638,3],[652,1],[659,3],[671,2],[704,3],[718,2],[726,3],[738,2],[755,3],[769,2],[775,3],[787,2],[808,1],[810,1],[822,2],[828,3]]},"239":{"position":[[253,3]]},"241":{"position":[[164,1],[353,3],[357,1],[372,1],[376,1],[378,3],[388,3],[392,1],[401,3],[405,1],[414,1],[416,1],[425,1],[427,1],[429,3]]},"247":{"position":[[175,1],[295,1],[357,1],[398,1],[417,1],[438,1],[476,1],[651,1],[698,1]]},"255":{"position":[[897,3]]},"260":{"position":[[201,3]]},"262":{"position":[[216,3]]},"264":{"position":[[971,3],[1096,3]]},"276":{"position":[[314,3],[499,3],[522,3]]},"280":{"position":[[356,3]]},"286":{"position":[[186,3]]},"296":{"position":[[70,1],[518,3],[753,3]]},"301":{"position":[[376,3]]},"347":{"position":[[763,3]]},"349":{"position":[[396,1]]},"373":{"position":[[537,1]]},"375":{"position":[[617,3]]},"382":{"position":[[632,1],[736,1],[837,1]]},"390":{"position":[[197,1],[927,3],[1313,1]]},"392":{"position":[[2420,3],[2806,1],[2900,1]]},"396":{"position":[[164,1],[201,1],[273,1],[558,3],[604,1],[1062,3],[1687,3],[2016,3]]},"398":{"position":[[662,4]]},"400":{"position":[[87,4]]},"407":{"position":[[1175,1],[1191,1]]},"413":{"position":[[1529,1],[2530,1],[2603,1]]},"429":{"position":[[403,1],[430,1],[473,1]]},"433":{"position":[[79,1],[183,1]]},"449":{"position":[[176,1]]},"457":{"position":[[50,3],[134,3]]},"461":{"position":[[163,3],[263,3],[282,3],[382,3],[444,3]]},"465":{"position":[[1191,1],[1423,1],[1448,1],[1640,1],[2032,1]]},"470":{"position":[[288,1],[327,1],[364,5],[381,1],[489,1],[536,1],[585,1],[638,1],[718,1],[764,1],[820,1],[905,1],[969,1],[1058,1],[1098,1],[1145,1],[1213,1],[1247,1],[1311,1],[1417,1],[1512,1],[1651,1],[1709,1],[1750,1],[1756,1],[1758,1],[1853,1],[1858,1],[1860,1],[1939,1],[1997,1],[2038,1],[2044,1],[2046,1],[2135,1],[2140,1],[2142,1],[2294,1],[2300,1],[2302,1],[2350,1],[2356,1],[2358,1],[2424,1],[2518,1],[2524,1],[2526,1],[2568,1],[2574,1],[2576,1],[2642,1],[2736,1],[2742,1],[2744,1],[2794,1],[2800,1],[2802,1],[2948,1],[3052,1],[3113,1],[3126,1],[3170,1],[3176,1],[3178,1],[3231,1],[3237,1],[3239,1],[3299,1],[3304,1],[3306,1],[3407,1],[3508,1],[3594,1],[3617,1],[3622,1],[3624,1],[3646,3],[3660,3],[3674,3],[3688,3]]},"486":{"position":[[163,1]]},"488":{"position":[[41,1]]},"490":{"position":[[55,1]]},"492":{"position":[[60,1]]},"494":{"position":[[75,1]]},"496":{"position":[[75,1]]},"500":{"position":[[286,1],[299,1],[453,1],[488,1]]},"506":{"position":[[12,1],[30,1]]},"508":{"position":[[524,1]]},"512":{"position":[[362,1],[366,1]]},"514":{"position":[[12,1],[28,1],[30,5],[36,1]]},"516":{"position":[[953,1]]},"520":{"position":[[123,1]]},"522":{"position":[[19,1]]},"526":{"position":[[136,3]]},"530":{"position":[[14,1],[16,5],[22,1],[43,1]]},"536":{"position":[[124,3]]},"538":{"position":[[14,1],[16,5],[22,1],[43,1]]},"540":{"position":[[66,1]]},"546":{"position":[[279,1]]},"548":{"position":[[14,1],[16,5],[22,1],[43,1]]},"554":{"position":[[217,1]]},"556":{"position":[[14,1],[16,5],[22,1],[43,1]]},"562":{"position":[[14,1],[30,1]]},"568":{"position":[[211,3]]},"570":{"position":[[16,1],[29,1]]},"576":{"position":[[327,1]]},"578":{"position":[[14,1],[16,5],[22,1],[43,1]]},"580":{"position":[[1091,1]]},"584":{"position":[[106,3]]},"586":{"position":[[7,1],[9,5],[15,1]]},"591":{"position":[[134,3],[453,4]]},"593":{"position":[[96,3],[232,4]]},"596":{"position":[[98,4],[330,3],[376,1],[1053,3]]},"598":{"position":[[102,4]]},"600":{"position":[[7,1],[9,5],[15,1]]},"604":{"position":[[134,3],[453,4]]},"606":{"position":[[96,3],[232,4]]},"608":{"position":[[14,1],[16,5],[22,1],[43,1],[66,1]]},"612":{"position":[[314,3],[354,3]]},"617":{"position":[[95,3],[422,3]]},"619":{"position":[[105,3],[281,3]]},"624":{"position":[[97,3],[656,3]]},"626":{"position":[[109,3],[345,1],[453,3]]},"628":{"position":[[14,1]]},"634":{"position":[[129,3]]},"636":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"642":{"position":[[24,1]]},"644":{"position":[[7,1],[9,5],[15,1],[45,1]]},"648":{"position":[[109,3],[121,3],[201,1],[218,1],[241,3]]},"650":{"position":[[102,3],[114,3]]},"656":{"position":[[106,3],[155,3]]},"658":{"position":[[109,3]]},"662":{"position":[[14,1],[30,1]]},"673":{"position":[[14,1],[16,5],[22,1],[38,1]]},"679":{"position":[[20,1]]},"681":{"position":[[0,5],[6,1]]},"689":{"position":[[11,1]]},"695":{"position":[[146,1],[166,1],[189,1]]},"697":{"position":[[14,1],[16,5],[22,1]]},"703":{"position":[[34,1],[55,1]]},"713":{"position":[[14,1],[16,5],[22,1]]},"719":{"position":[[14,1],[16,5],[22,1],[43,1]]},"725":{"position":[[95,3],[382,3],[532,3]]},"727":{"position":[[10,1]]},"733":{"position":[[71,3],[107,3],[144,1],[205,3]]},"735":{"position":[[12,1]]},"751":{"position":[[0,5],[6,1]]},"762":{"position":[[324,1]]},"764":{"position":[[143,1]]},"766":{"position":[[0,3],[4,1]]},"774":{"position":[[14,1],[16,5],[22,1],[43,1]]},"780":{"position":[[20,1]]},"785":{"position":[[126,3]]},"787":{"position":[[194,3]]},"789":{"position":[[0,3],[4,1]]},"801":{"position":[[14,1]]},"807":{"position":[[212,3]]},"809":{"position":[[14,1],[16,5],[22,1],[43,1]]},"815":{"position":[[70,1],[170,1]]},"817":{"position":[[14,1]]},"821":{"position":[[14,1]]},"825":{"position":[[23,1],[69,1],[102,1]]},"828":{"position":[[23,3],[41,3]]},"830":{"position":[[132,3],[151,3]]},"832":{"position":[[134,3],[160,3],[342,3]]},"838":{"position":[[47,3],[125,3],[129,4]]},"840":{"position":[[43,3],[121,3]]},"845":{"position":[[16,1]]},"847":{"position":[[598,1]]},"858":{"position":[[146,3],[189,3],[260,3],[286,3]]},"860":{"position":[[235,3],[376,3]]},"862":{"position":[[167,3],[193,3],[264,3],[290,3]]},"864":{"position":[[12,1]]},"872":{"position":[[7,1]]},"876":{"position":[[29,3],[121,3]]},"878":{"position":[[33,3],[93,3]]},"880":{"position":[[12,1]]},"890":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"894":{"position":[[371,3],[598,3],[814,1],[831,1],[901,1],[918,1],[941,3]]},"896":{"position":[[273,3],[366,3],[446,3],[485,3],[578,3],[603,1]]},"898":{"position":[[14,1],[16,5],[22,1],[43,1]]},"909":{"position":[[48,3]]},"911":{"position":[[79,1],[183,1]]},"913":{"position":[[7,1]]},"919":{"position":[[350,3]]},"929":{"position":[[0,5],[6,1]]},"937":{"position":[[14,1],[16,5],[22,1],[43,1]]},"958":{"position":[[314,3],[499,3],[522,3],[842,3],[862,3],[871,3],[892,3],[913,3]]},"960":{"position":[[7,1]]},"962":{"position":[[85,1]]},"964":{"position":[[48,3]]},"966":{"position":[[83,3]]},"968":{"position":[[14,1],[16,5],[22,1],[43,1]]},"970":{"position":[[357,1]]},"974":{"position":[[54,3]]},"979":{"position":[[59,3],[155,1]]},"981":{"position":[[74,3]]},"983":{"position":[[11,1]]},"990":{"position":[[39,1]]},"992":{"position":[[114,1],[170,1]]},"994":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1004":{"position":[[0,5],[6,1]]},"1010":{"position":[[35,1],[55,1]]},"1012":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1016":{"position":[[77,3],[109,3]]},"1018":{"position":[[65,3],[97,3]]},"1023":{"position":[[266,3],[315,3]]},"1027":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1035":{"position":[[14,1]]},"1037":{"position":[[519,1]]},"1039":{"position":[[491,1],[524,1],[542,1],[573,1],[598,1],[621,1]]},"1050":{"position":[[424,3],[444,3]]},"1054":{"position":[[233,1]]},"1060":{"position":[[7,1],[9,5],[15,1]]},"1064":{"position":[[53,3],[263,4]]},"1066":{"position":[[459,4]]},"1068":{"position":[[98,4],[513,3],[1138,3]]},"1070":{"position":[[102,4]]},"1072":{"position":[[7,1],[9,5],[15,1]]},"1076":{"position":[[98,3],[327,3]]},"1078":{"position":[[102,3],[194,3]]},"1080":{"position":[[7,1],[9,5],[15,1]]},"1084":{"position":[[325,3],[371,3]]},"1086":{"position":[[275,3]]},"1088":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"1096":{"position":[[11,1],[23,1]]},"1103":{"position":[[35,1],[55,1]]},"1105":{"position":[[113,1],[157,1]]},"1107":{"position":[[12,1]]},"1111":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1117":{"position":[[149,3]]},"1122":{"position":[[48,3]]},"1124":{"position":[[79,1],[183,1]]},"1129":{"position":[[48,3]]},"1131":{"position":[[79,1],[183,1]]},"1138":{"position":[[79,1],[183,1]]},"1140":{"position":[[0,5],[6,1],[13,1]]},"1158":{"position":[[43,3]]},"1160":{"position":[[47,3],[249,4]]},"1163":{"position":[[73,3]]},"1165":{"position":[[164,3]]},"1167":{"position":[[7,1],[9,5],[15,1],[45,1]]},"1171":{"position":[[109,3],[121,3],[199,1],[216,1],[239,3]]},"1173":{"position":[[102,3],[114,3]]},"1185":{"position":[[923,2],[967,3]]},"1250":{"position":[[223,2],[331,1],[564,2],[670,3],[674,3],[762,3],[1034,2],[1994,2],[2065,3],[2154,2],[2214,3]]},"1255":{"position":[[543,2],[649,3],[653,3],[741,3],[2122,3]]},"1272":{"position":[[1059,2]]},"1289":{"position":[[124,1]]},"1342":{"position":[[61,1]]},"1344":{"position":[[97,1],[130,2],[164,3],[199,4],[235,5],[272,6],[464,1],[743,1],[1220,2]]},"1346":{"position":[[65,2],[653,2]]},"1366":{"position":[[470,1],[1405,2],[1441,2]]},"1390":{"position":[[109,1]]}}}],["0",{"_index":395,"t":{"45":{"position":[[3444,2],[3577,2]]},"58":{"position":[[250,2]]},"68":{"position":[[81,2],[84,1]]},"87":{"position":[[712,1],[726,3]]},"89":{"position":[[364,2]]},"105":{"position":[[919,3],[1026,3]]},"107":{"position":[[526,1],[592,2],[644,2]]},"115":{"position":[[1778,2],[2389,2],[2392,2],[2395,2],[2487,2],[2490,2],[2493,2],[2525,2],[2528,2],[2612,2],[4286,1]]},"117":{"position":[[1328,3],[1435,3],[2132,1],[2198,2],[2250,2],[3610,2],[3613,2],[3616,2],[3708,2],[3711,2],[3714,2],[3746,2],[3749,2],[3833,2]]},"119":{"position":[[356,2],[359,1],[427,2],[430,1],[1785,2],[1788,2],[1791,2],[1794,2],[1797,1]]},"143":{"position":[[406,2],[409,1]]},"159":{"position":[[1607,1]]},"161":{"position":[[1622,1]]},"210":{"position":[[89,2],[92,1]]},"221":{"position":[[11,1],[13,1]]},"236":{"position":[[246,1]]},"241":{"position":[[374,1]]},"253":{"position":[[703,1],[785,1],[888,1],[957,1]]},"276":{"position":[[382,1]]},"296":{"position":[[88,2],[91,1],[97,1]]},"315":{"position":[[693,1]]},"317":{"position":[[249,2]]},"382":{"position":[[656,3],[763,3],[857,1]]},"423":{"position":[[181,1]]},"429":{"position":[[268,1],[769,2],[872,2],[905,2]]},"431":{"position":[[220,1],[245,1]]},"433":{"position":[[103,3],[210,3]]},"488":{"position":[[1530,2],[1654,1],[1677,2]]},"494":{"position":[[563,2],[687,1],[710,2]]},"516":{"position":[[955,2],[1391,1]]},"520":{"position":[[125,1]]},"546":{"position":[[335,2]]},"550":{"position":[[171,1],[216,2]]},"554":{"position":[[219,1]]},"610":{"position":[[1039,1]]},"612":{"position":[[376,2]]},"733":{"position":[[146,2]]},"737":{"position":[[216,1]]},"911":{"position":[[103,3],[210,3]]},"951":{"position":[[1032,1]]},"953":{"position":[[232,2]]},"958":{"position":[[382,1],[635,2],[978,2]]},"962":{"position":[[87,2]]},"1002":{"position":[[408,2],[411,2],[414,2],[417,2],[494,2],[497,2],[500,2],[585,2],[588,2],[679,2]]},"1025":{"position":[[247,2]]},"1122":{"position":[[120,1],[145,1]]},"1124":{"position":[[103,3],[210,3]]},"1131":{"position":[[103,3],[210,3]]},"1136":{"position":[[220,1],[245,1]]},"1138":{"position":[[103,3],[210,3]]},"1187":{"position":[[230,1]]},"1250":{"position":[[842,1]]},"1257":{"position":[[1118,2]]},"1303":{"position":[[443,1]]}}}],["0,0",{"_index":1078,"t":{"143":{"position":[[50,3],[310,3],[662,3]]},"164":{"position":[[39,3]]}}}],["0.0",{"_index":863,"t":{"115":{"position":[[689,4],[1358,4]]},"117":{"position":[[3109,4]]},"153":{"position":[[1096,3]]},"161":{"position":[[380,3]]},"182":{"position":[[77,3]]},"392":{"position":[[1851,4],[2264,4]]},"396":{"position":[[906,4],[1408,4],[1860,4]]},"423":{"position":[[256,3]]},"596":{"position":[[774,4]]},"1068":{"position":[[357,4],[859,4]]}}}],["0.00",{"_index":1340,"t":{"182":{"position":[[71,5]]}}}],["0.00024",{"_index":1572,"t":{"247":{"position":[[599,7]]}}}],["0.00091",{"_index":1569,"t":{"247":{"position":[[468,7]]}}}],["0.0063",{"_index":1217,"t":{"153":{"position":[[1350,6]]},"161":{"position":[[634,6]]}}}],["0.01",{"_index":764,"t":{"103":{"position":[[448,4],[624,4]]},"117":{"position":[[494,4],[670,4]]},"119":{"position":[[361,5]]}}}],["0.05",{"_index":2380,"t":{"970":{"position":[[224,4]]},"974":{"position":[[17,4],[58,4]]}}}],["0.071218218251483",{"_index":1215,"t":{"153":{"position":[[1322,17]]},"161":{"position":[[606,17]]}}}],["0.1",{"_index":933,"t":{"119":{"position":[[432,4]]},"143":{"position":[[411,4]]},"427":{"position":[[130,3]]},"593":{"position":[[198,3]]},"606":{"position":[[198,3]]}}}],["0.1,50000",{"_index":1095,"t":{"143":{"position":[[314,9]]}}}],["0.10",{"_index":1341,"t":{"182":{"position":[[81,5]]}}}],["0.104982143381498",{"_index":1213,"t":{"153":{"position":[[1293,17]]},"161":{"position":[[577,17]]}}}],["0.138",{"_index":805,"t":{"105":{"position":[[1030,6]]},"117":{"position":[[1439,6]]},"382":{"position":[[767,6]]},"433":{"position":[[214,6]]},"911":{"position":[[214,6]]},"1124":{"position":[[214,6]]},"1131":{"position":[[214,6]]},"1138":{"position":[[214,6]]}}}],["0.197937",{"_index":1802,"t":{"380":{"position":[[692,8]]},"427":{"position":[[287,8]]}}}],["0.2",{"_index":2412,"t":{"1002":{"position":[[745,5],[751,4],[756,4],[761,4],[766,4]]}}}],["0.210",{"_index":806,"t":{"105":{"position":[[1037,6]]},"117":{"position":[[1446,6]]},"382":{"position":[[774,6]]},"433":{"position":[[221,6]]},"911":{"position":[[221,6]]},"1124":{"position":[[221,6]]},"1131":{"position":[[221,6]]},"1138":{"position":[[221,6]]}}}],["0.210714",{"_index":1801,"t":{"380":{"position":[[672,8]]},"427":{"position":[[267,8]]}}}],["0.25",{"_index":892,"t":{"115":{"position":[[2677,6],[2684,5],[2690,5],[2696,5]]},"117":{"position":[[3898,6],[3905,5],[3911,5],[3917,5]]},"1002":{"position":[[654,6],[661,5],[667,5],[673,5]]}}}],["0.255",{"_index":807,"t":{"105":{"position":[[1044,6]]},"117":{"position":[[1453,6]]},"382":{"position":[[781,6]]},"433":{"position":[[228,6]]},"911":{"position":[[228,6]]},"1124":{"position":[[228,6]]},"1131":{"position":[[228,6]]},"1138":{"position":[[228,6]]}}}],["0.2739",{"_index":1430,"t":{"210":{"position":[[911,6]]},"223":{"position":[[114,6]]}}}],["0.286",{"_index":808,"t":{"105":{"position":[[1051,6]]},"117":{"position":[[1460,6]]},"382":{"position":[[788,6]]},"433":{"position":[[235,6]]},"911":{"position":[[235,6]]},"1124":{"position":[[235,6]]},"1131":{"position":[[235,6]]},"1138":{"position":[[235,6]]}}}],["0.310",{"_index":809,"t":{"105":{"position":[[1058,6]]},"117":{"position":[[1467,6]]},"382":{"position":[[795,6]]},"433":{"position":[[242,6]]},"911":{"position":[[242,6]]},"1124":{"position":[[242,6]]},"1131":{"position":[[242,6]]},"1138":{"position":[[242,6]]}}}],["0.328",{"_index":810,"t":{"105":{"position":[[1065,6]]},"117":{"position":[[1474,6]]},"382":{"position":[[802,6]]},"433":{"position":[[249,6]]},"911":{"position":[[249,6]]},"1124":{"position":[[249,6]]},"1131":{"position":[[249,6]]},"1138":{"position":[[249,6]]}}}],["0.33",{"_index":890,"t":{"115":{"position":[[2593,6],[2600,5]]},"117":{"position":[[3814,6],[3821,5]]},"1002":{"position":[[566,6],[573,5]]}}}],["0.34",{"_index":891,"t":{"115":{"position":[[2606,5]]},"117":{"position":[[3827,5]]},"1002":{"position":[[579,5]]}}}],["0.342",{"_index":811,"t":{"105":{"position":[[1072,6]]},"117":{"position":[[1481,6]]},"382":{"position":[[809,6]]},"433":{"position":[[256,6]]},"911":{"position":[[256,6]]},"1124":{"position":[[256,6]]},"1131":{"position":[[256,6]]},"1138":{"position":[[256,6]]}}}],["0.353",{"_index":812,"t":{"105":{"position":[[1079,6]]},"117":{"position":[[1488,6]]},"382":{"position":[[816,6]]},"433":{"position":[[263,6]]},"911":{"position":[[263,6]]},"1124":{"position":[[263,6]]},"1131":{"position":[[263,6]]},"1138":{"position":[[263,6]]}}}],["0.360",{"_index":813,"t":{"105":{"position":[[1086,6]]},"117":{"position":[[1495,6]]},"382":{"position":[[823,6]]},"433":{"position":[[270,6]]},"911":{"position":[[270,6]]},"1124":{"position":[[270,6]]},"1131":{"position":[[270,6]]},"1138":{"position":[[270,6]]}}}],["0.362",{"_index":814,"t":{"105":{"position":[[1093,6]]},"117":{"position":[[1502,6]]},"382":{"position":[[830,6]]},"433":{"position":[[277,6]]},"911":{"position":[[277,6]]},"1124":{"position":[[277,6]]},"1131":{"position":[[277,6]]},"1138":{"position":[[277,6]]}}}],["0.3664",{"_index":1425,"t":{"210":{"position":[[856,6]]},"223":{"position":[[65,6]]}}}],["0.368",{"_index":1435,"t":{"210":{"position":[[965,5]]},"223":{"position":[[162,5]]}}}],["0.368786",{"_index":1803,"t":{"380":{"position":[[711,8]]},"427":{"position":[[306,8]]}}}],["0.45077",{"_index":1799,"t":{"380":{"position":[[634,7]]},"427":{"position":[[229,7]]}}}],["0.5",{"_index":766,"t":{"103":{"position":[[508,3]]},"115":{"position":[[806,5],[812,5],[1426,5],[1432,4],[2514,5],[2520,4]]},"117":{"position":[[554,3],[3177,5],[3183,4],[3735,5],[3741,4]]},"159":{"position":[[1674,3],[1680,3]]},"161":{"position":[[1689,3],[1695,3]]},"241":{"position":[[433,3]]},"317":{"position":[[314,5],[320,4]]},"546":{"position":[[401,5],[407,4]]},"584":{"position":[[399,3]]},"958":{"position":[[1043,5],[1049,4]]},"1002":{"position":[[483,5],[489,4]]},"1025":{"position":[[312,5],[318,4]]}}}],["0.510676386339746",{"_index":1200,"t":{"153":{"position":[[1110,17]]},"161":{"position":[[394,17]]}}}],["0.691702",{"_index":1800,"t":{"380":{"position":[[652,8]]},"427":{"position":[[247,8]]}}}],["0.70",{"_index":916,"t":{"119":{"position":[[161,5],[310,5]]},"343":{"position":[[278,5]]},"349":{"position":[[283,5],[423,5],[581,5]]},"380":{"position":[[283,5],[441,5]]},"384":{"position":[[381,5],[539,5]]},"619":{"position":[[227,5]]},"626":{"position":[[232,5],[372,5]]},"660":{"position":[[283,5]]},"843":{"position":[[283,5]]}}}],["0.72",{"_index":908,"t":{"119":{"position":[[92,5],[185,5],[285,5]]},"343":{"position":[[259,6]]},"349":{"position":[[264,6],[398,5],[550,6],[575,5]]},"380":{"position":[[264,6],[410,6],[435,5]]},"384":{"position":[[362,6],[508,6],[533,5]]},"619":{"position":[[208,6]]},"626":{"position":[[213,6],[347,5]]},"660":{"position":[[264,6]]},"843":{"position":[[264,6]]}}}],["0.73",{"_index":922,"t":{"119":{"position":[[210,5]]},"349":{"position":[[417,5],[557,5]]},"380":{"position":[[417,5]]},"384":{"position":[[515,5]]},"626":{"position":[[366,5]]}}}],["0.74",{"_index":913,"t":{"119":{"position":[[138,5],[235,5],[260,5]]},"343":{"position":[[272,5]]},"349":{"position":[[277,5],[563,5],[569,5]]},"380":{"position":[[277,5],[423,5],[429,5]]},"384":{"position":[[375,5],[521,5],[527,5]]},"619":{"position":[[221,5]]},"626":{"position":[[226,5]]},"660":{"position":[[277,5]]},"843":{"position":[[277,5]]}}}],["0.7401",{"_index":1440,"t":{"210":{"position":[[1019,6]]},"223":{"position":[[210,6]]}}}],["0.74373",{"_index":1794,"t":{"380":{"position":[[549,7]]},"427":{"position":[[144,7]]}}}],["0.748",{"_index":1722,"t":{"349":{"position":[[410,6]]},"626":{"position":[[359,6]]}}}],["0.75",{"_index":776,"t":{"105":{"position":[[434,4]]},"117":{"position":[[845,4]]},"119":{"position":[[115,5]]},"343":{"position":[[266,5]]},"349":{"position":[[271,5],[404,5]]},"355":{"position":[[143,4]]},"363":{"position":[[129,4]]},"380":{"position":[[271,5]]},"382":{"position":[[143,4]]},"384":{"position":[[369,5]]},"619":{"position":[[215,5]]},"626":{"position":[[220,5],[353,5]]},"660":{"position":[[271,5]]},"843":{"position":[[271,5]]}}}],["0.8",{"_index":1191,"t":{"153":{"position":[[578,3],[1478,3]]},"161":{"position":[[762,3]]}}}],["0.849146377471569",{"_index":1209,"t":{"153":{"position":[[1237,17]]},"161":{"position":[[521,17]]}}}],["0.9",{"_index":765,"t":{"103":{"position":[[466,3],[642,3]]},"117":{"position":[[512,3],[688,3]]}}}],["0.95",{"_index":2428,"t":{"1046":{"position":[[12,4]]},"1050":{"position":[[379,4],[448,4]]}}}],["0.99",{"_index":2427,"t":{"1041":{"position":[[574,4]]}}}],["0078405",{"_index":2629,"t":{"1206":{"position":[[970,9]]}}}],["0088232",{"_index":2903,"t":{"1242":{"position":[[574,9]]}}}],["00:00:00",{"_index":1124,"t":{"143":{"position":[[850,9],[916,9],[982,9],[1048,9],[1114,9],[1180,9],[1246,9],[1312,9],[1378,9],[1444,9],[1510,9],[1576,9]]},"707":{"position":[[346,11]]},"1054":{"position":[[389,11]]}}}],["00ad854",{"_index":2543,"t":{"1199":{"position":[[935,9]]}}}],["01",{"_index":351,"t":{"45":{"position":[[2035,2],[2038,3],[2065,2],[2068,3]]},"107":{"position":[[682,3],[703,2],[706,3],[757,3],[779,2],[782,3]]},"117":{"position":[[2288,3],[2309,2],[2312,3],[2363,3],[2385,2],[2388,3]]},"131":{"position":[[952,3],[974,2],[977,3]]},"141":{"position":[[1340,3],[1362,2],[1365,3]]},"143":{"position":[[844,2],[847,2],[910,2],[913,2],[976,2],[979,2],[1042,2],[1045,2],[1108,2],[1111,2],[1177,2],[1240,2],[1243,2],[1306,2],[1309,2],[1372,2],[1375,2],[1438,2],[1441,2],[1504,2],[1507,2],[1570,2],[1573,2]]},"262":{"position":[[169,2],[172,3],[195,2],[198,3]]},"296":{"position":[[385,2],[388,3],[415,2],[418,3],[462,2],[465,3],[489,2],[492,3]]},"457":{"position":[[110,2],[113,3],[145,2],[148,3]]},"546":{"position":[[119,3]]},"671":{"position":[[23,2],[26,3],[79,2],[82,3]]},"707":{"position":[[207,2],[210,3],[685,2],[688,3]]},"711":{"position":[[28,2],[31,2],[41,2],[44,2],[126,2],[129,2]]},"717":{"position":[[279,2],[282,3],[417,2],[420,3]]},"795":{"position":[[146,2],[149,3],[167,2],[170,3]]},"830":{"position":[[85,2],[88,3],[111,2],[114,3]]},"1002":{"position":[[63,2],[66,3]]},"1054":{"position":[[268,2],[271,3],[702,2],[705,3]]},"1058":{"position":[[28,2],[31,2],[41,2],[44,2],[129,2],[132,2]]}}}],["01.01.2017",{"_index":2390,"t":{"992":{"position":[[274,11]]},"1105":{"position":[[245,11]]}}}],["01.01.2018",{"_index":2391,"t":{"992":{"position":[[291,11]]},"1105":{"position":[[261,11]]}}}],["01.01.2019",{"_index":2393,"t":{"992":{"position":[[308,11]]},"1105":{"position":[[277,11]]}}}],["01.01.2020",{"_index":960,"t":{"119":{"position":[[802,11]]},"992":{"position":[[325,11]]},"1105":{"position":[[293,11]]}}}],["01.01.2020,329327.76,2301.9189,3796.9621",{"_index":1296,"t":{"166":{"position":[[49,40]]}}}],["01.01.2021",{"_index":965,"t":{"119":{"position":[[851,11]]},"992":{"position":[[342,11]]},"1105":{"position":[[309,11]]}}}],["01.01.2021,533620.39,3699.8435,8533.0322",{"_index":1297,"t":{"166":{"position":[[90,40]]}}}],["01.01.2022",{"_index":966,"t":{"119":{"position":[[900,11]]},"992":{"position":[[359,11]]},"1105":{"position":[[325,11]]}}}],["01.01.2022,416004.76,2837.5915,9434.1385",{"_index":1298,"t":{"166":{"position":[[131,40]]}}}],["01.01.2023",{"_index":967,"t":{"119":{"position":[[949,11]]},"992":{"position":[[377,11]]},"1105":{"position":[[341,11]]}}}],["01.01.2023,340118.19,2280.7372,10019.154",{"_index":1299,"t":{"166":{"position":[[172,40]]}}}],["01.01.2024",{"_index":970,"t":{"119":{"position":[[998,11]]}}}],["01.01.2024,290127.01,1905.7952,10428.387",{"_index":1300,"t":{"166":{"position":[[213,40]]}}}],["01.01.2025",{"_index":975,"t":{"119":{"position":[[1047,11]]}}}],["01.01.2025,253292.19,1635.7671,10725.254",{"_index":1301,"t":{"166":{"position":[[254,40]]}}}],["01.01.2026",{"_index":980,"t":{"119":{"position":[[1096,11]]}}}],["01.01.2026,223584.53,1426.9726,10954.338",{"_index":1302,"t":{"166":{"position":[[295,40]]}}}],["01.01.2027",{"_index":985,"t":{"119":{"position":[[1145,11]]}}}],["01.01.2027,198453.07,1249.781,11153.675",{"_index":1303,"t":{"166":{"position":[[336,39]]}}}],["01.01.2028",{"_index":987,"t":{"119":{"position":[[1194,11]]}}}],["01.01.2028,177306.77,1099.8572,11318.01",{"_index":1304,"t":{"166":{"position":[[376,39]]}}}],["01.01.2029",{"_index":988,"t":{"119":{"position":[[1243,11]]}}}],["01.01.2029,159723.78,977.37529,11450.614",{"_index":1305,"t":{"166":{"position":[[416,40]]}}}],["01.01.2030",{"_index":989,"t":{"119":{"position":[[1292,11]]}}}],["01.01.2030,145056.33,875.30836,11561.335",{"_index":1306,"t":{"166":{"position":[[457,40]]}}}],["01.01.2031",{"_index":991,"t":{"119":{"position":[[1341,11]]}}}],["01.01.2031,132577.75,788.45521,11654.645",{"_index":1307,"t":{"166":{"position":[[498,40]]}}}],["01.01.2032",{"_index":993,"t":{"119":{"position":[[1390,11]]}}}],["01.01.2032,122166.68,715.64707,11734.129",{"_index":1308,"t":{"166":{"position":[[539,40]]}}}],["01.01.2033,113070.74,653.71407,11802.565",{"_index":1309,"t":{"166":{"position":[[580,40]]}}}],["01.01.2034",{"_index":996,"t":{"119":{"position":[[1439,11]]}}}],["01.01.2034,105114.67,600.04874,11860.717",{"_index":1310,"t":{"166":{"position":[[621,40]]}}}],["01.01.2035",{"_index":997,"t":{"119":{"position":[[1488,11]]}}}],["01.01.2035,98147.958,553.56297,11910.283",{"_index":1311,"t":{"166":{"position":[[662,40]]}}}],["01.01.2036",{"_index":1000,"t":{"119":{"position":[[1537,11]]}}}],["01.01.2037",{"_index":1002,"t":{"119":{"position":[[1585,11]]}}}],["01.01.2038",{"_index":1005,"t":{"119":{"position":[[1632,11]]}}}],["01.01.2039",{"_index":1007,"t":{"119":{"position":[[1679,11]]}}}],["01.01.2040",{"_index":1010,"t":{"119":{"position":[[1726,11]]}}}],["01.01.2041",{"_index":1012,"t":{"119":{"position":[[1773,11]]}}}],["018b472",{"_index":2572,"t":{"1201":{"position":[[162,9]]}}}],["030a44b",{"_index":2696,"t":{"1212":{"position":[[379,9]]}}}],["0346929",{"_index":2853,"t":{"1229":{"position":[[339,9]]}}}],["035aad1",{"_index":2561,"t":{"1199":{"position":[[1258,9]]}}}],["03abf64",{"_index":2676,"t":{"1210":{"position":[[750,9]]}}}],["04",{"_index":2222,"t":{"546":{"position":[[116,2]]}}}],["059dab5",{"_index":2861,"t":{"1232":{"position":[[222,9]]}}}],["06",{"_index":839,"t":{"107":{"position":[[679,2],[754,2]]},"117":{"position":[[2285,2],[2360,2]]}}}],["064adfa",{"_index":2884,"t":{"1240":{"position":[[41,9]]}}}],["08394a3",{"_index":2872,"t":{"1238":{"position":[[44,9]]}}}],["087867c",{"_index":2523,"t":{"1199":{"position":[[444,9]]}}}],["09ef23",{"_index":2890,"t":{"1242":{"position":[[203,10]]}}}],["0a0b2f",{"_index":2829,"t":{"1225":{"position":[[356,9]]}}}],["0ba8f8f",{"_index":2836,"t":{"1227":{"position":[[33,9]]}}}],["0c45251",{"_index":2501,"t":{"1199":{"position":[[87,9],[261,9],[1443,9]]}}}],["0d1ce6f",{"_index":2782,"t":{"1223":{"position":[[440,9],[709,9]]}}}],["0e30ab2",{"_index":2831,"t":{"1225":{"position":[[397,9]]}}}],["0f30f49",{"_index":2678,"t":{"1210":{"position":[[782,9]]}}}],["0f3ddca",{"_index":2772,"t":{"1223":{"position":[[86,9]]}}}],["0|1|2",{"_index":2167,"t":{"488":{"position":[[1501,8]]},"494":{"position":[[534,8]]}}}],["1",{"_index":259,"t":{"31":{"position":[[300,1],[348,1]]},"45":{"position":[[380,2]]},"47":{"position":[[457,2]]},"54":{"position":[[1622,1]]},"68":{"position":[[68,1]]},"89":{"position":[[279,2]]},"115":{"position":[[2385,3]]},"117":{"position":[[3606,3]]},"159":{"position":[[1603,1]]},"161":{"position":[[1618,1]]},"210":{"position":[[94,2]]},"236":{"position":[[251,2],[341,1],[772,2],[825,2]]},"255":{"position":[[45,2],[110,2],[175,2],[221,2],[285,2],[343,2],[412,2],[452,2]]},"258":{"position":[[76,1]]},"280":{"position":[[323,2]]},"317":{"position":[[245,3]]},"382":{"position":[[863,1]]},"396":{"position":[[364,2]]},"429":{"position":[[274,2]]},"431":{"position":[[226,1]]},"465":{"position":[[1653,2],[1729,1]]},"488":{"position":[[1586,2]]},"494":{"position":[[619,2]]},"510":{"position":[[24,3]]},"546":{"position":[[331,3]]},"584":{"position":[[578,1]]},"596":{"position":[[136,2]]},"610":{"position":[[1092,1]]},"707":{"position":[[775,1]]},"951":{"position":[[1085,1]]},"958":{"position":[[974,3]]},"1002":{"position":[[404,3]]},"1023":{"position":[[250,2],[299,2]]},"1025":{"position":[[243,3]]},"1037":{"position":[[1324,2]]},"1084":{"position":[[131,2]]},"1122":{"position":[[126,1]]},"1136":{"position":[[226,1]]},"1303":{"position":[[424,1]]},"1344":{"position":[[95,1],[579,1],[729,1],[842,2],[855,1]]}}}],["1,3",{"_index":1116,"t":{"143":{"position":[[666,3]]}}}],["1,4.1",{"_index":1079,"t":{"143":{"position":[[54,5]]}}}],["1.0",{"_index":862,"t":{"115":{"position":[[683,5],[1352,5]]},"117":{"position":[[3103,5]]}}}],["1.00e+06",{"_index":1423,"t":{"210":{"position":[[835,9],[863,9],[890,9],[918,9],[944,9],[971,9],[998,9],[1026,9]]},"223":{"position":[[47,8],[72,8],[96,8],[121,8],[144,8],[168,8],[192,8],[217,8]]}}}],["1.03",{"_index":2316,"t":{"762":{"position":[[169,4],[326,4]]}}}],["1.05",{"_index":2200,"t":{"512":{"position":[[205,4],[368,4]]}}}],["1.1",{"_index":530,"t":{"60":{"position":[[708,3]]}}}],["1.1.2005",{"_index":1026,"t":{"121":{"position":[[1347,9],[1396,9]]}}}],["1.10e+07",{"_index":1459,"t":{"210":{"position":[[1267,9],[1294,9],[1321,9],[1348,9],[1375,9],[1402,9]]},"223":{"position":[[431,8],[455,8],[479,8],[503,8],[527,8],[551,8]]}}}],["1.23",{"_index":1221,"t":{"155":{"position":[[70,4],[207,4]]},"161":{"position":[[1081,4]]}}}],["1.3.3",{"_index":2531,"t":{"1199":{"position":[[599,5]]}}}],["1.3.4",{"_index":2532,"t":{"1199":{"position":[[608,5]]}}}],["1.34903656604691",{"_index":1211,"t":{"153":{"position":[[1265,16]]},"161":{"position":[[549,16]]}}}],["1.399",{"_index":1458,"t":{"210":{"position":[[1234,5]]},"223":{"position":[[401,5]]}}}],["1.5",{"_index":759,"t":{"103":{"position":[[331,3]]},"117":{"position":[[377,3]]},"129":{"position":[[83,3],[221,3],[338,3],[417,3]]},"141":{"position":[[557,3],[638,3]]},"247":{"position":[[291,3],[510,3]]},"695":{"position":[[162,3]]},"1103":{"position":[[51,3]]},"1105":{"position":[[257,3]]}}}],["1.51",{"_index":763,"t":{"103":{"position":[[413,4],[589,4]]},"117":{"position":[[459,4],[635,4]]},"247":{"position":[[412,4],[574,4]]}}}],["1.6",{"_index":2441,"t":{"1105":{"position":[[273,3]]}}}],["1.7",{"_index":2442,"t":{"1105":{"position":[[289,3]]}}}],["1.71",{"_index":1224,"t":{"155":{"position":[[157,4],[298,4]]},"161":{"position":[[1156,4]]}}}],["1.8",{"_index":2443,"t":{"1105":{"position":[[305,3]]}}}],["1.9",{"_index":2444,"t":{"1105":{"position":[[321,3]]}}}],["1.95",{"_index":1454,"t":{"210":{"position":[[1181,4]]},"223":{"position":[[354,4]]}}}],["1/0",{"_index":2229,"t":{"550":{"position":[[548,4]]}}}],["10",{"_index":722,"t":{"95":{"position":[[1542,2]]},"119":{"position":[[371,3],[443,3]]},"121":{"position":[[1125,2]]},"131":{"position":[[949,2]]},"139":{"position":[[1566,2]]},"141":{"position":[[1337,2],[2251,2]]},"145":{"position":[[690,2]]},"159":{"position":[[2738,2]]},"161":{"position":[[2099,2]]},"204":{"position":[[526,2]]},"210":{"position":[[845,3],[873,3]]},"221":{"position":[[22,2],[33,2]]},"223":{"position":[[56,2],[81,2]]},"236":{"position":[[371,2]]},"282":{"position":[[751,2]]},"433":{"position":[[311,2]]},"439":{"position":[[212,2],[540,2]]},"576":{"position":[[40,2],[176,2]]},"584":{"position":[[67,2]]},"598":{"position":[[384,2]]},"703":{"position":[[52,2]]},"896":{"position":[[600,2]]},"904":{"position":[[39,2]]},"911":{"position":[[311,2]]},"966":{"position":[[114,2]]},"1094":{"position":[[18,2]]},"1124":{"position":[[311,2]]},"1131":{"position":[[311,2]]},"1138":{"position":[[311,2]]}}}],["10.0",{"_index":1102,"t":{"143":{"position":[[422,5]]},"679":{"position":[[15,4]]},"851":{"position":[[147,4]]}}}],["10.71,83277.09",{"_index":1257,"t":{"164":{"position":[[112,14]]}}}],["10.9074631209139",{"_index":1205,"t":{"153":{"position":[[1184,16]]},"161":{"position":[[468,16]]}}}],["100",{"_index":929,"t":{"119":{"position":[[367,3],[475,4]]},"191":{"position":[[192,6]]},"193":{"position":[[85,5]]},"198":{"position":[[207,6]]},"210":{"position":[[1909,3]]},"413":{"position":[[2609,4]]},"431":{"position":[[247,5]]},"584":{"position":[[580,6]]},"1122":{"position":[[147,5]]},"1136":{"position":[[247,5]]}}}],["100.0",{"_index":1107,"t":{"143":{"position":[[460,6]]}}}],["1000",{"_index":828,"t":{"107":{"position":[[385,4]]},"117":{"position":[[1991,4]]},"119":{"position":[[814,5],[863,5],[912,5],[1549,5]]},"131":{"position":[[385,4],[415,4]]},"141":{"position":[[773,4],[803,4]]},"157":{"position":[[391,4]]},"161":{"position":[[1253,4]]},"309":{"position":[[157,4]]},"828":{"position":[[45,4]]},"830":{"position":[[155,4]]},"832":{"position":[[164,4],[371,4]]},"958":{"position":[[836,5],[1117,4]]},"1025":{"position":[[386,4]]}}}],["1000.0",{"_index":1667,"t":{"317":{"position":[[198,6]]}}}],["10000",{"_index":778,"t":{"105":{"position":[[452,5]]},"107":{"position":[[768,5]]},"117":{"position":[[863,5],[2374,5]]},"119":{"position":[[574,5],[595,5],[616,5],[637,5],[658,5],[679,5],[700,5],[721,5],[1743,6]]},"121":{"position":[[1376,5]]},"131":{"position":[[963,5]]},"141":{"position":[[1351,5]]},"584":{"position":[[120,5]]},"992":{"position":[[371,5]]}}}],["100000",{"_index":936,"t":{"119":{"position":[[457,6]]},"221":{"position":[[15,6]]},"282":{"position":[[814,6]]},"815":{"position":[[63,6]]}}}],["1000000",{"_index":939,"t":{"119":{"position":[[480,7],[1464,8],[1513,8]]},"210":{"position":[[104,8]]},"221":{"position":[[25,7]]},"236":{"position":[[543,7],[607,7],[663,7],[730,7],[779,7],[832,7]]}}}],["100000000,4.1",{"_index":1080,"t":{"143":{"position":[[60,13]]}}}],["10054",{"_index":1721,"t":{"349":{"position":[[377,6]]},"626":{"position":[[326,6]]}}}],["1010",{"_index":1063,"t":{"139":{"position":[[1543,4]]},"141":{"position":[[2228,4]]}}}],["1025",{"_index":1237,"t":{"159":{"position":[[1279,4],[1556,4]]},"161":{"position":[[1571,4]]}}}],["1026",{"_index":886,"t":{"115":{"position":[[2253,4],[3155,4]]},"117":{"position":[[3474,4],[4174,4]]}}}],["103",{"_index":2792,"t":{"1223":{"position":[[939,6]]}}}],["1030",{"_index":2322,"t":{"780":{"position":[[15,4]]},"1002":{"position":[[359,4]]},"1025":{"position":[[198,4]]}}}],["104",{"_index":2735,"t":{"1219":{"position":[[564,6]]}}}],["1050",{"_index":2376,"t":{"958":{"position":[[866,4],[1124,4]]},"1025":{"position":[[393,4]]}}}],["10500",{"_index":919,"t":{"119":{"position":[[191,5],[216,5],[241,5],[266,5],[291,5],[316,5]]},"992":{"position":[[389,5]]}}}],["106",{"_index":2847,"t":{"1229":{"position":[[208,6]]}}}],["106.2",{"_index":1450,"t":{"210":{"position":[[1147,6]]},"223":{"position":[[324,5]]}}}],["107",{"_index":2742,"t":{"1219":{"position":[[692,6]]}}}],["10767",{"_index":1723,"t":{"349":{"position":[[438,5]]},"380":{"position":[[298,5]]},"384":{"position":[[396,5]]}}}],["109",{"_index":2818,"t":{"1225":{"position":[[123,6]]}}}],["10b5e07",{"_index":2705,"t":{"1212":{"position":[[738,9]]}}}],["10eadjusted​=eoriginal​−10",{"_index":2238,"t":{"576":{"position":[[351,26]]}}}],["11.399",{"_index":798,"t":{"105":{"position":[[951,7]]},"117":{"position":[[1360,7]]},"382":{"position":[[688,7]]},"433":{"position":[[135,7]]},"911":{"position":[[135,7]]},"1124":{"position":[[135,7]]},"1131":{"position":[[135,7]]},"1138":{"position":[[135,7]]}}}],["11.8",{"_index":1025,"t":{"121":{"position":[[848,4]]},"139":{"position":[[122,4],[219,4]]},"141":{"position":[[1671,4]]}}}],["11.89",{"_index":1464,"t":{"210":{"position":[[1315,5]]},"223":{"position":[[473,5]]}}}],["11.9,89808.09",{"_index":1258,"t":{"164":{"position":[[127,13]]}}}],["110",{"_index":2820,"t":{"1225":{"position":[[162,6]]}}}],["1100",{"_index":998,"t":{"119":{"position":[[1500,5]]}}}],["112",{"_index":2834,"t":{"1225":{"position":[[461,6]]}}}],["11276",{"_index":1720,"t":{"349":{"position":[[370,6]]},"626":{"position":[[319,6]]}}}],["116",{"_index":2752,"t":{"1221":{"position":[[51,6]]}}}],["118",{"_index":2816,"t":{"1225":{"position":[[84,6]]}}}],["119",{"_index":2830,"t":{"1225":{"position":[[390,6]]}}}],["11973",{"_index":1733,"t":{"349":{"position":[[530,7]]},"380":{"position":[[390,7]]},"384":{"position":[[488,7]]}}}],["12",{"_index":1146,"t":{"143":{"position":[[1174,2]]},"159":{"position":[[1340,2],[1627,2],[1702,2]]},"161":{"position":[[1642,2],[1717,2]]},"707":{"position":[[417,2]]}}}],["12.72",{"_index":1424,"t":{"210":{"position":[[849,6]]},"223":{"position":[[59,5]]}}}],["120",{"_index":876,"t":{"115":{"position":[[1404,3],[1478,3]]},"117":{"position":[[3155,3],[3229,3]]},"896":{"position":[[666,3]]},"1225":{"position":[[349,6]]}}}],["1200",{"_index":931,"t":{"119":{"position":[[383,4],[1451,5]]}}}],["12000",{"_index":928,"t":{"119":{"position":[[303,6]]},"143":{"position":[[1403,6]]}}}],["1200000",{"_index":964,"t":{"119":{"position":[[843,7],[892,7],[941,7],[990,7]]}}}],["123",{"_index":3189,"t":{"1368":{"position":[[811,4]]}}}],["12425",{"_index":1719,"t":{"349":{"position":[[363,6]]},"626":{"position":[[312,6]]}}}],["125",{"_index":1901,"t":{"413":{"position":[[2558,4]]}}}],["126000",{"_index":1104,"t":{"143":{"position":[[440,6]]}}}],["13",{"_index":1246,"t":{"159":{"position":[[2135,2],[2391,2]]},"161":{"position":[[1915,2]]}}}],["13.673",{"_index":799,"t":{"105":{"position":[[959,7]]},"117":{"position":[[1368,7]]},"382":{"position":[[696,7]]},"433":{"position":[[143,7]]},"911":{"position":[[143,7]]},"1124":{"position":[[143,7]]},"1131":{"position":[[143,7]]},"1138":{"position":[[143,7]]}}}],["130000",{"_index":1128,"t":{"143":{"position":[[898,6]]}}}],["1300000",{"_index":974,"t":{"119":{"position":[[1039,7],[1333,7],[1382,7]]}}}],["131",{"_index":2719,"t":{"1215":{"position":[[50,6]]},"1223":{"position":[[769,6]]}}}],["13182",{"_index":1718,"t":{"349":{"position":[[356,6]]},"626":{"position":[[305,6]]}}}],["133",{"_index":2764,"t":{"1221":{"position":[[372,6]]}}}],["13454",{"_index":1732,"t":{"349":{"position":[[523,6]]},"380":{"position":[[383,6]]},"384":{"position":[[481,6]]}}}],["13500",{"_index":927,"t":{"119":{"position":[[278,6]]}}}],["1350000",{"_index":979,"t":{"119":{"position":[[1088,7],[1284,7]]}}}],["136",{"_index":2779,"t":{"1223":{"position":[[298,6]]}}}],["137750",{"_index":1412,"t":{"210":{"position":[[97,6],[113,6]]}}}],["13845",{"_index":1717,"t":{"349":{"position":[[348,7]]},"626":{"position":[[297,7]]}}}],["14",{"_index":2411,"t":{"1002":{"position":[[438,2],[521,2],[609,2],[700,2],[789,2]]},"1240":{"position":[[86,5]]}}}],["14.28,102781.8",{"_index":1259,"t":{"164":{"position":[[141,14]]}}}],["14.35",{"_index":1456,"t":{"210":{"position":[[1207,5]]},"223":{"position":[[377,5]]}}}],["140",{"_index":2591,"t":{"1204":{"position":[[123,6]]}}}],["14000",{"_index":1143,"t":{"143":{"position":[[1139,6],[1469,6],[1601,6]]}}}],["1400000",{"_index":984,"t":{"119":{"position":[[1137,7],[1186,7],[1235,7],[1577,7],[1624,7],[1671,7],[1718,7],[1765,7]]}}}],["140c448",{"_index":2601,"t":{"1206":{"position":[[166,9]]}}}],["141",{"_index":2658,"t":{"1210":{"position":[[490,6]]}}}],["14500",{"_index":925,"t":{"119":{"position":[[253,6]]}}}],["145579",{"_index":1413,"t":{"210":{"position":[[129,6]]}}}],["146",{"_index":2647,"t":{"1210":{"position":[[66,6]]}}}],["14640",{"_index":1731,"t":{"349":{"position":[[516,6]]},"380":{"position":[[376,6]]},"384":{"position":[[474,6]]}}}],["147",{"_index":2614,"t":{"1206":{"position":[[524,6]]}}}],["15",{"_index":1496,"t":{"221":{"position":[[44,2]]},"404":{"position":[[732,2]]},"598":{"position":[[491,2],[839,2]]},"1070":{"position":[[564,2]]},"1247":{"position":[[23,5]]}}}],["15.947",{"_index":800,"t":{"105":{"position":[[967,7]]},"117":{"position":[[1376,7]]},"382":{"position":[[704,7]]},"433":{"position":[[151,7]]},"911":{"position":[[151,7]]},"1124":{"position":[[151,7]]},"1131":{"position":[[151,7]]},"1138":{"position":[[151,7]]}}}],["150",{"_index":1541,"t":{"236":{"position":[[534,4],[598,4],[654,4],[721,4]]},"276":{"position":[[443,3],[449,3],[587,3],[593,3]]},"958":{"position":[[443,3],[449,3],[587,3],[593,3]]},"1208":{"position":[[191,6]]}}}],["1500",{"_index":1045,"t":{"131":{"position":[[561,5],[835,4]]},"139":{"position":[[1160,5],[1209,4],[2075,4],[2169,5]]},"141":{"position":[[949,5],[1223,4]]}}}],["15000",{"_index":1011,"t":{"119":{"position":[[1758,6]]},"143":{"position":[[1007,6],[1205,6],[1337,6]]}}}],["1500000",{"_index":999,"t":{"119":{"position":[[1529,7]]}}}],["152",{"_index":2589,"t":{"1204":{"position":[[65,6]]}}}],["153",{"_index":2668,"t":{"1210":{"position":[[661,6]]}}}],["153335",{"_index":1414,"t":{"210":{"position":[[145,6]]}}}],["155",{"_index":2228,"t":{"546":{"position":[[379,3],[453,3]]},"1206":{"position":[[963,6]]}}}],["155.6",{"_index":1455,"t":{"210":{"position":[[1200,6]]},"223":{"position":[[371,5]]}}}],["15500",{"_index":923,"t":{"119":{"position":[[228,6]]}}}],["15546",{"_index":1730,"t":{"349":{"position":[[509,6]]},"380":{"position":[[369,6]]},"384":{"position":[[467,6]]}}}],["157",{"_index":2683,"t":{"1212":{"position":[[93,6]]}}}],["159",{"_index":2695,"t":{"1212":{"position":[[372,6]]}}}],["16",{"_index":2894,"t":{"1242":{"position":[[306,5]]}}}],["16.66,115784.9",{"_index":1260,"t":{"164":{"position":[[156,14]]}}}],["16.94",{"_index":1469,"t":{"210":{"position":[[1369,5]]},"223":{"position":[[521,5]]}}}],["160",{"_index":2689,"t":{"1212":{"position":[[235,6]]}}}],["16000",{"_index":921,"t":{"119":{"position":[[203,6]]},"143":{"position":[[1073,6],[1535,6]]}}}],["16081",{"_index":1729,"t":{"349":{"position":[[502,6]]},"380":{"position":[[362,6]]},"384":{"position":[[460,6]]}}}],["161",{"_index":2617,"t":{"1206":{"position":[[567,6]]}}}],["161022",{"_index":1415,"t":{"210":{"position":[[161,6]]}}}],["164",{"_index":2619,"t":{"1206":{"position":[[697,6]]}}}],["16447",{"_index":1728,"t":{"349":{"position":[[494,7]]},"380":{"position":[[354,7]]},"384":{"position":[[452,7]]}}}],["165",{"_index":2693,"t":{"1212":{"position":[[326,6]]}}}],["16500",{"_index":918,"t":{"119":{"position":[[178,6]]}}}],["166",{"_index":2597,"t":{"1206":{"position":[[98,6]]}}}],["167",{"_index":2606,"t":{"1206":{"position":[[270,6]]}}}],["168644",{"_index":1416,"t":{"210":{"position":[[177,6]]}}}],["16d54f1",{"_index":2851,"t":{"1229":{"position":[[305,9]]}}}],["17.1",{"_index":1927,"t":{"417":{"position":[[74,5]]}}}],["17.8,119883.6",{"_index":1261,"t":{"164":{"position":[[171,13]]}}}],["170",{"_index":2604,"t":{"1206":{"position":[[200,6]]}}}],["17000",{"_index":1004,"t":{"119":{"position":[[1617,6],[1664,6],[1711,6]]},"131":{"position":[[591,6],[620,6]]},"139":{"position":[[2215,5],[2257,5],[2329,5],[2340,5]]},"141":{"position":[[979,6],[1008,6]]}}}],["17000,6",{"_index":1119,"t":{"143":{"position":[[684,7]]}}}],["170000",{"_index":1133,"t":{"143":{"position":[[964,6]]}}}],["171",{"_index":2714,"t":{"1212":{"position":[[977,6]]}}}],["172",{"_index":2627,"t":{"1206":{"position":[[902,6]]}}}],["173",{"_index":2699,"t":{"1212":{"position":[[514,6]]}}}],["174",{"_index":2717,"t":{"1212":{"position":[[1035,6]]}}}],["175",{"_index":2701,"t":{"1212":{"position":[[614,6]]}}}],["17500,9",{"_index":1120,"t":{"143":{"position":[[692,7]]}}}],["176",{"_index":2697,"t":{"1212":{"position":[[417,6]]}}}],["179",{"_index":2691,"t":{"1212":{"position":[[279,6]]}}}],["18.223",{"_index":801,"t":{"105":{"position":[[975,7]]},"117":{"position":[[1384,7]]},"382":{"position":[[712,7]]},"433":{"position":[[159,7]]},"911":{"position":[[159,7]]},"1124":{"position":[[159,7]]},"1131":{"position":[[159,7]]},"1138":{"position":[[159,7]]}}}],["18.3",{"_index":1929,"t":{"417":{"position":[[93,5]]}}}],["180",{"_index":2685,"t":{"1212":{"position":[[141,6]]}}}],["180.8",{"_index":1468,"t":{"210":{"position":[[1362,6]]},"223":{"position":[[515,5]]}}}],["18000",{"_index":1001,"t":{"119":{"position":[[1570,6],[1649,6],[1696,6]]},"143":{"position":[[875,6],[1271,6]]}}}],["181",{"_index":2675,"t":{"1210":{"position":[[743,6]]}}}],["182",{"_index":2687,"t":{"1212":{"position":[[188,6]]}}}],["18500",{"_index":1046,"t":{"131":{"position":[[649,6]]},"139":{"position":[[2225,5],[2361,6]]},"141":{"position":[[1037,6]]}}}],["186",{"_index":2666,"t":{"1210":{"position":[[614,6]]}}}],["187",{"_index":2649,"t":{"1210":{"position":[[152,6]]}}}],["188",{"_index":2622,"t":{"1206":{"position":[[806,6]]}}}],["1882",{"_index":1888,"t":{"413":{"position":[[1027,4]]}}}],["189",{"_index":2661,"t":{"1210":{"position":[[527,6]]}}}],["19.04,128788",{"_index":1262,"t":{"164":{"position":[[185,12]]}}}],["19.3",{"_index":1220,"t":{"153":{"position":[[1756,4]]},"161":{"position":[[1040,4]]}}}],["19.4",{"_index":1930,"t":{"417":{"position":[[115,5]]}}}],["190",{"_index":2608,"t":{"1206":{"position":[[378,6]]}}}],["19000",{"_index":1131,"t":{"143":{"position":[[941,6]]}}}],["191",{"_index":2651,"t":{"1210":{"position":[[225,6]]}}}],["193",{"_index":2703,"t":{"1212":{"position":[[663,6]]}}}],["194",{"_index":2467,"t":{"1193":{"position":[[79,6]]}}}],["195",{"_index":2612,"t":{"1206":{"position":[[472,6]]}}}],["196",{"_index":2564,"t":{"1199":{"position":[[1436,6]]}}}],["197",{"_index":2600,"t":{"1206":{"position":[[159,6]]}}}],["198",{"_index":2656,"t":{"1210":{"position":[[439,6]]}}}],["199",{"_index":2631,"t":{"1206":{"position":[[1028,6]]}}}],["1994",{"_index":2324,"t":{"795":{"position":[[141,4]]}}}],["1995",{"_index":1052,"t":{"131":{"position":[[944,4]]},"141":{"position":[[1332,4]]}}}],["1
  • list",{"_index":3096,"t":{"1344":{"position":[[775,14],[905,14]]}}}],["1stat",{"_index":3090,"t":{"1344":{"position":[[632,23]]}}}],["1_stage_chart",{"_index":1853,"t":{"404":{"position":[[303,13]]},"593":{"position":[[168,13]]},"598":{"position":[[308,13]]},"606":{"position":[[168,13]]},"1070":{"position":[[135,13]]},"1078":{"position":[[134,13]]}}}],["1_stage_inlet",{"_index":1849,"t":{"404":{"position":[[119,13],[349,13]]},"598":{"position":[[124,13],[354,13]]},"1070":{"position":[[181,13]]},"1078":{"position":[[180,13]]},"1086":{"position":[[119,13]]}}}],["1bde68a",{"_index":2796,"t":{"1223":{"position":[[1079,9]]}}}],["1d",{"_index":1406,"t":{"206":{"position":[[442,2]]},"210":{"position":[[0,2]]}}}],["1da1999",{"_index":2885,"t":{"1240":{"position":[[92,9]]}}}],["1e",{"_index":633,"t":{"87":{"position":[[675,2],[686,2]]}}}],["1e6",{"_index":629,"t":{"87":{"position":[[588,3],[609,4]]}}}],["1ee5bfd",{"_index":2910,"t":{"1242":{"position":[[1150,9],[1353,9]]}}}],["1st",{"_index":895,"t":{"115":{"position":[[3191,3],[3212,3],[3698,3],[3719,3]]},"139":{"position":[[2706,3]]},"404":{"position":[[592,4]]},"598":{"position":[[699,4]]},"707":{"position":[[402,3]]},"1054":{"position":[[449,3],[753,3]]},"1070":{"position":[[424,4]]}}}],["1}{n",{"_index":1998,"t":{"465":{"position":[[1721,6]]}}}],["1}κ−1κ∗polytropic_effici",{"_index":2008,"t":{"465":{"position":[[2066,29]]}}}],["2",{"_index":354,"t":{"45":{"position":[[2132,2]]},"47":{"position":[[783,2]]},"54":{"position":[[937,1],[1052,1]]},"115":{"position":[[2483,3]]},"117":{"position":[[3704,3]]},"145":{"position":[[835,1],[979,1]]},"159":{"position":[[2660,1],[2823,1]]},"161":{"position":[[2021,1],[2184,1]]},"225":{"position":[[215,1]]},"236":{"position":[[335,1],[405,1],[432,1],[456,1],[488,1],[496,1]]},"255":{"position":[[485,2],[550,2],[615,2],[661,2],[725,2],[783,2],[852,2],[892,2]]},"258":{"position":[[157,1]]},"276":{"position":[[503,1],[526,1]]},"280":{"position":[[351,2]]},"345":{"position":[[930,2]]},"396":{"position":[[472,2]]},"398":{"position":[[659,2]]},"400":{"position":[[84,2]]},"413":{"position":[[2374,1]]},"457":{"position":[[54,1],[138,1]]},"461":{"position":[[386,1],[448,1]]},"488":{"position":[[1620,2]]},"494":{"position":[[653,2]]},"510":{"position":[[48,3]]},"512":{"position":[[195,1],[364,1]]},"596":{"position":[[244,2]]},"953":{"position":[[228,3]]},"958":{"position":[[503,1],[526,1]]},"1023":{"position":[[262,3],[311,3]]},"1066":{"position":[[456,2]]},"1084":{"position":[[239,2]]},"1199":{"position":[[487,1]]},"1250":{"position":[[2069,1],[2218,2]]},"1332":{"position":[[363,2]]},"1344":{"position":[[128,1],[591,1],[741,1],[857,2],[870,1]]}}}],["2.0",{"_index":2445,"t":{"1105":{"position":[[337,3]]}}}],["2.1",{"_index":2446,"t":{"1105":{"position":[[353,3]]}}}],["2.15",{"_index":1567,"t":{"247":{"position":[[393,4]]}}}],["2.156",{"_index":1449,"t":{"210":{"position":[[1127,5]]},"223":{"position":[[306,5]]}}}],["2.19",{"_index":1034,"t":{"129":{"position":[[162,4],[382,4]]},"141":{"position":[[602,4]]}}}],["2.20",{"_index":761,"t":{"103":{"position":[[395,4]]},"117":{"position":[[441,4]]}}}],["2.293",{"_index":1427,"t":{"210":{"position":[[884,5]]},"223":{"position":[[90,5]]}}}],["2.352",{"_index":794,"t":{"105":{"position":[[923,6]]},"117":{"position":[[1332,6]]},"382":{"position":[[660,6]]},"433":{"position":[[107,6]]},"911":{"position":[[107,6]]},"1124":{"position":[[107,6]]},"1131":{"position":[[107,6]]},"1138":{"position":[[107,6]]}}}],["2.38,37766.13",{"_index":1252,"t":{"164":{"position":[[43,13]]}}}],["2.415619",{"_index":1795,"t":{"380":{"position":[[562,8]]},"427":{"position":[[157,8]]}}}],["2.416",{"_index":1223,"t":{"155":{"position":[[121,5],[262,5]]},"161":{"position":[[1145,5]]}}}],["2.44965511776504",{"_index":1201,"t":{"153":{"position":[[1133,16]]},"161":{"position":[[417,16]]}}}],["2.5",{"_index":2279,"t":{"695":{"position":[[142,3]]},"764":{"position":[[20,3],[139,3]]},"992":{"position":[[110,3]]},"1010":{"position":[[31,3]]},"1103":{"position":[[31,3]]},"1105":{"position":[[109,3]]}}}],["2.611471",{"_index":1798,"t":{"380":{"position":[[615,8]]},"427":{"position":[[210,8]]}}}],["2.7085",{"_index":1575,"t":{"247":{"position":[[691,6]]}}}],["2.73",{"_index":1571,"t":{"247":{"position":[[564,4]]}}}],["20",{"_index":874,"t":{"115":{"position":[[1381,2],[1455,2],[4520,2]]},"117":{"position":[[3132,2],[3206,2],[4944,2]]},"119":{"position":[[379,3],[453,3]]},"221":{"position":[[55,2]]},"404":{"position":[[336,2]]},"593":{"position":[[147,2]]},"598":{"position":[[341,2]]},"606":{"position":[[147,2]]},"711":{"position":[[71,2]]},"878":{"position":[[84,2]]},"1058":{"position":[[72,2]]},"1070":{"position":[[168,2]]},"1078":{"position":[[167,2]]},"1366":{"position":[[508,2]]}}}],["20.0",{"_index":1103,"t":{"143":{"position":[[434,5]]}}}],["20.496",{"_index":802,"t":{"105":{"position":[[983,7]]},"117":{"position":[[1392,7]]},"382":{"position":[[720,7]]},"433":{"position":[[167,7]]},"911":{"position":[[167,7]]},"1124":{"position":[[167,7]]},"1131":{"position":[[167,7]]},"1138":{"position":[[167,7]]}}}],["200",{"_index":724,"t":{"95":{"position":[[1575,3]]},"115":{"position":[[2451,5],[2457,4],[2462,4],[2467,4],[2571,3],[2655,3],[2742,3],[3136,3],[4543,3]]},"117":{"position":[[3672,5],[3678,4],[3683,4],[3688,4],[3792,3],[3876,3],[3963,3],[4155,3],[4967,3]]},"121":{"position":[[1158,3]]},"139":{"position":[[785,3],[1598,3],[3604,3]]},"141":{"position":[[1933,3],[2281,3],[2859,3]]},"159":{"position":[[1347,3],[1650,3],[1725,3]]},"161":{"position":[[1665,3],[1740,3]]},"309":{"position":[[138,3]]},"317":{"position":[[292,3],[365,3]]},"642":{"position":[[20,3]]},"958":{"position":[[1021,3],[1094,3]]},"1025":{"position":[[290,3],[363,3]]}}}],["2000",{"_index":841,"t":{"107":{"position":[[717,4]]},"117":{"position":[[2323,4]]},"119":{"position":[[711,5]]},"711":{"position":[[34,4]]},"795":{"position":[[162,4]]},"1058":{"position":[[34,4]]}}}],["20000",{"_index":961,"t":{"119":{"position":[[820,6],[869,6],[918,6],[1212,6],[1261,6],[1310,6],[1359,6],[1522,6],[1602,6]]}}}],["200000",{"_index":1009,"t":{"119":{"position":[[1703,7],[1750,7]]}}}],["2000000",{"_index":995,"t":{"119":{"position":[[1431,7],[1480,7]]},"143":{"position":[[1526,8]]},"210":{"position":[[120,8]]}}}],["200000000,4.1",{"_index":1081,"t":{"143":{"position":[[74,13]]}}}],["2001",{"_index":1603,"t":{"262":{"position":[[164,4]]},"671":{"position":[[18,4]]},"830":{"position":[[80,4]]}}}],["2005",{"_index":1053,"t":{"131":{"position":[[969,4]]},"139":{"position":[[2721,5]]},"141":{"position":[[1357,4]]},"262":{"position":[[190,4]]},"671":{"position":[[74,4]]},"830":{"position":[[106,4]]}}}],["2008",{"_index":1920,"t":{"415":{"position":[[828,5]]}}}],["2010",{"_index":1966,"t":{"457":{"position":[[105,4]]}}}],["2019",{"_index":2399,"t":{"1002":{"position":[[58,4]]}}}],["202",{"_index":2672,"t":{"1210":{"position":[[711,6]]}}}],["2020",{"_index":350,"t":{"45":{"position":[[2030,4]]},"107":{"position":[[674,4],[749,4]]},"115":{"position":[[3203,4],[3710,4]]},"117":{"position":[[2280,4],[2355,4]]},"143":{"position":[[839,4]]},"296":{"position":[[380,4],[457,4]]},"457":{"position":[[140,4]]},"546":{"position":[[111,4]]},"711":{"position":[[121,4]]},"717":{"position":[[274,4]]},"1054":{"position":[[263,4],[293,4],[453,5],[697,4],[757,5]]},"1058":{"position":[[124,4]]}}}],["2021",{"_index":1129,"t":{"143":{"position":[[905,4]]}}}],["2022",{"_index":1134,"t":{"143":{"position":[[971,4]]},"717":{"position":[[412,4]]}}}],["2023",{"_index":1137,"t":{"143":{"position":[[1037,4]]}}}],["2024",{"_index":1141,"t":{"143":{"position":[[1103,4],[1169,4]]}}}],["2026",{"_index":1150,"t":{"143":{"position":[[1235,4]]}}}],["2027",{"_index":1153,"t":{"143":{"position":[[1301,4]]}}}],["2028",{"_index":1156,"t":{"143":{"position":[[1367,4]]}}}],["2029",{"_index":1158,"t":{"143":{"position":[[1433,4]]}}}],["203",{"_index":2496,"t":{"1197":{"position":[[102,6]]}}}],["2030",{"_index":352,"t":{"45":{"position":[[2060,4]]},"107":{"position":[[698,4],[774,4],[1224,5]]},"115":{"position":[[3227,5],[3734,5]]},"117":{"position":[[2304,4],[2380,4]]},"143":{"position":[[1499,4]]},"296":{"position":[[410,4],[484,4]]}}}],["2031",{"_index":1161,"t":{"143":{"position":[[1565,4]]}}}],["204",{"_index":2571,"t":{"1201":{"position":[[155,6]]}}}],["2040",{"_index":2298,"t":{"711":{"position":[[47,5]]},"1058":{"position":[[47,5]]}}}],["205",{"_index":2554,"t":{"1199":{"position":[[1163,6]]}}}],["2050",{"_index":956,"t":{"119":{"position":[[690,5]]}}}],["2079",{"_index":2284,"t":{"707":{"position":[[250,4],[411,5],[680,4]]}}}],["2080",{"_index":2283,"t":{"707":{"position":[[202,4],[406,4]]}}}],["209",{"_index":2512,"t":{"1199":{"position":[[306,6]]}}}],["21.1",{"_index":1932,"t":{"417":{"position":[[135,5]]}}}],["21.42,141791.2",{"_index":1263,"t":{"164":{"position":[[198,14]]}}}],["21.4201,166554.2",{"_index":1264,"t":{"164":{"position":[[213,16]]}}}],["2100",{"_index":954,"t":{"119":{"position":[[669,5]]}}}],["21000",{"_index":969,"t":{"119":{"position":[[967,6],[1326,6],[1473,6]]}}}],["210000",{"_index":1136,"t":{"143":{"position":[[1030,6]]}}}],["210000000,4.1",{"_index":1082,"t":{"143":{"position":[[88,13]]}}}],["211",{"_index":2546,"t":{"1199":{"position":[[987,6]]}}}],["212",{"_index":2548,"t":{"1199":{"position":[[1024,6]]}}}],["213",{"_index":2482,"t":{"1195":{"position":[[173,6]]}}}],["214",{"_index":2478,"t":{"1195":{"position":[[133,6]]}}}],["215",{"_index":2537,"t":{"1199":{"position":[[784,6]]}}}],["2150",{"_index":952,"t":{"119":{"position":[[648,5]]}}}],["216",{"_index":2488,"t":{"1195":{"position":[[295,6]]}}}],["219",{"_index":2506,"t":{"1199":{"position":[[180,6]]}}}],["21deeb7",{"_index":2513,"t":{"1199":{"position":[[313,9]]}}}],["22.46",{"_index":1442,"t":{"210":{"position":[[1047,5],[1261,5],[1423,5]]},"223":{"position":[[235,5],[425,5],[569,5]]}}}],["22.767",{"_index":803,"t":{"105":{"position":[[991,7]]},"117":{"position":[[1400,7]]},"382":{"position":[[728,7]]},"433":{"position":[[175,7]]},"911":{"position":[[175,7]]},"1124":{"position":[[175,7]]},"1131":{"position":[[175,7]]},"1138":{"position":[[175,7]]}}}],["220",{"_index":2515,"t":{"1199":{"position":[[374,6]]}}}],["2200",{"_index":949,"t":{"119":{"position":[[627,5]]}}}],["22000",{"_index":971,"t":{"119":{"position":[[1016,6],[1277,6],[1375,6],[1555,6]]}}}],["220000.0",{"_index":1345,"t":{"182":{"position":[[115,8]]}}}],["2200000",{"_index":1127,"t":{"143":{"position":[[889,8],[955,8],[1021,8]]}}}],["220000000,4.4",{"_index":1083,"t":{"143":{"position":[[102,13]]}}}],["221",{"_index":2525,"t":{"1199":{"position":[[494,6]]}}}],["22100",{"_index":994,"t":{"119":{"position":[[1408,6]]}}}],["222",{"_index":2533,"t":{"1199":{"position":[[614,6]]}}}],["223",{"_index":2522,"t":{"1199":{"position":[[437,6]]}}}],["224",{"_index":2568,"t":{"1201":{"position":[[85,6]]}}}],["2250",{"_index":946,"t":{"119":{"position":[[606,5]]}}}],["2279ef4",{"_index":2615,"t":{"1206":{"position":[[531,9]]}}}],["229",{"_index":2540,"t":{"1199":{"position":[[846,6]]}}}],["230",{"_index":2542,"t":{"1199":{"position":[[928,6]]}}}],["2300",{"_index":943,"t":{"119":{"position":[[585,5]]}}}],["23000",{"_index":976,"t":{"119":{"position":[[1065,6],[1228,6],[1424,6]]}}}],["2300000",{"_index":1139,"t":{"143":{"position":[[1087,8],[1153,8]]}}}],["230000000,4.8",{"_index":1084,"t":{"143":{"position":[[116,13]]}}}],["231.6",{"_index":1441,"t":{"210":{"position":[[1040,6],[1254,6],[1416,6]]},"223":{"position":[[229,5],[419,5],[563,5]]}}}],["232",{"_index":2565,"t":{"1201":{"position":[[37,6]]}}}],["2322",{"_index":1892,"t":{"413":{"position":[[1411,4]]}}}],["232f83b",{"_index":2468,"t":{"1193":{"position":[[86,9]]}}}],["233",{"_index":2535,"t":{"1199":{"position":[[717,6]]}}}],["2350",{"_index":941,"t":{"119":{"position":[[564,5]]}}}],["236",{"_index":2471,"t":{"1193":{"position":[[175,6]]}}}],["237",{"_index":2490,"t":{"1195":{"position":[[362,6]]}}}],["238",{"_index":2476,"t":{"1195":{"position":[[83,6]]}}}],["239",{"_index":2492,"t":{"1197":{"position":[[42,6]]}}}],["23:59:59",{"_index":2291,"t":{"707":{"position":[[423,10]]}}}],["24",{"_index":2907,"t":{"1242":{"position":[[945,5]]}}}],["24.6",{"_index":1934,"t":{"417":{"position":[[161,5]]}}}],["240",{"_index":2280,"t":{"695":{"position":[[185,3]]},"992":{"position":[[166,3]]},"1010":{"position":[[51,3]]},"1105":{"position":[[153,3]]}}}],["24000",{"_index":981,"t":{"119":{"position":[[1114,6],[1179,6]]}}}],["240000",{"_index":1140,"t":{"143":{"position":[[1096,6]]}}}],["2400000",{"_index":1148,"t":{"143":{"position":[[1219,8],[1285,8],[1351,8],[1417,8],[1483,8],[1549,8],[1615,8]]}}}],["240000000,5.1",{"_index":1085,"t":{"143":{"position":[[130,13]]}}}],["2415534",{"_index":2729,"t":{"1219":{"position":[[390,9]]}}}],["242",{"_index":2469,"t":{"1193":{"position":[[123,6]]}}}],["243",{"_index":2485,"t":{"1195":{"position":[[235,6]]}}}],["244",{"_index":2580,"t":{"1201":{"position":[[431,6]]}}}],["245",{"_index":2585,"t":{"1201":{"position":[[525,6]]}}}],["2455e34",{"_index":2659,"t":{"1210":{"position":[[497,9]]}}}],["246",{"_index":2578,"t":{"1201":{"position":[[367,6]]}}}],["247",{"_index":2552,"t":{"1199":{"position":[[1097,6]]}}}],["248dabb",{"_index":2814,"t":{"1225":{"position":[[19,9]]}}}],["24c27bb",{"_index":2613,"t":{"1206":{"position":[[479,9]]}}}],["25",{"_index":1900,"t":{"413":{"position":[[2527,2],[2600,2]]}}}],["250",{"_index":940,"t":{"119":{"position":[[559,4]]},"1002":{"position":[[461,3],[544,3],[632,3],[723,3],[812,3]]},"1201":{"position":[[574,6]]}}}],["2500",{"_index":968,"t":{"119":{"position":[[961,5]]}}}],["25000",{"_index":983,"t":{"119":{"position":[[1130,6],[1163,6],[1457,6],[1506,6]]},"241":{"position":[[166,5],[382,5]]}}}],["250000",{"_index":1106,"t":{"143":{"position":[[453,6]]}}}],["2500000",{"_index":1159,"t":{"143":{"position":[[1460,8]]}}}],["250000000,5.4",{"_index":1086,"t":{"143":{"position":[[144,13]]}}}],["2507bb9",{"_index":2708,"t":{"1212":{"position":[[842,9]]}}}],["250928c",{"_index":2858,"t":{"1232":{"position":[[115,9]]}}}],["253",{"_index":2574,"t":{"1201":{"position":[[205,6]]}}}],["254",{"_index":2474,"t":{"1195":{"position":[[33,6]]}}}],["255",{"_index":2560,"t":{"1199":{"position":[[1251,6]]}}}],["256",{"_index":2576,"t":{"1201":{"position":[[313,6]]}}}],["258",{"_index":2556,"t":{"1199":{"position":[[1217,6]]}}}],["259",{"_index":2550,"t":{"1199":{"position":[[1061,6]]}}}],["26",{"_index":1428,"t":{"210":{"position":[[900,3],[928,3],[1063,3],[1090,3]]},"223":{"position":[[105,2],[130,2],[250,2],[274,2]]}}}],["26.21",{"_index":1426,"t":{"210":{"position":[[877,6]]},"223":{"position":[[84,5]]}}}],["260",{"_index":1039,"t":{"129":{"position":[[278,3],[453,3]]},"141":{"position":[[675,3]]}}}],["26000",{"_index":978,"t":{"119":{"position":[[1081,6]]}}}],["2600000",{"_index":1495,"t":{"221":{"position":[[36,7]]}}}],["260000000,5.8",{"_index":1087,"t":{"143":{"position":[[158,13]]}}}],["27",{"_index":2909,"t":{"1242":{"position":[[1144,5]]}}}],["270000000,6.1",{"_index":1088,"t":{"143":{"position":[[172,13]]}}}],["272f0d7",{"_index":2874,"t":{"1238":{"position":[[93,9]]}}}],["28.56,205563.6",{"_index":1265,"t":{"164":{"position":[[230,14]]}}}],["280",{"_index":1568,"t":{"247":{"position":[[434,3]]}}}],["28000",{"_index":973,"t":{"119":{"position":[[1032,6]]}}}],["280000",{"_index":1145,"t":{"143":{"position":[[1162,6]]}}}],["280000.0",{"_index":1347,"t":{"182":{"position":[[131,8]]}}}],["280000000,6.4",{"_index":1089,"t":{"143":{"position":[[186,13]]}}}],["2895ae7",{"_index":2868,"t":{"1234":{"position":[[145,9]]}}}],["2900",{"_index":1692,"t":{"343":{"position":[[187,6]]},"349":{"position":[[192,6]]},"380":{"position":[[192,6]]},"384":{"position":[[290,6]]},"619":{"position":[[136,6]]},"626":{"position":[[141,6]]},"660":{"position":[[192,6]]},"843":{"position":[[192,6]]}}}],["290000000,6.8",{"_index":1090,"t":{"143":{"position":[[200,13]]}}}],["2981f2c",{"_index":2486,"t":{"1195":{"position":[[242,9]]}}}],["2
  • list",{"_index":3097,"t":{"1344":{"position":[[795,14],[925,14]]}}}],["2stat",{"_index":3091,"t":{"1344":{"position":[[656,23]]}}}],["2_stage_chart",{"_index":1854,"t":{"404":{"position":[[383,13]]},"598":{"position":[[439,13]]},"1070":{"position":[[215,13]]}}}],["2_stage_outlet",{"_index":1852,"t":{"404":{"position":[[245,14],[485,14]]},"598":{"position":[[250,14],[592,14]]},"1070":{"position":[[317,14]]},"1086":{"position":[[245,14]]}}}],["2a1e8b0",{"_index":2784,"t":{"1223":{"position":[[616,9]]}}}],["2bef707",{"_index":2767,"t":{"1221":{"position":[[440,9]]}}}],["2d",{"_index":2731,"t":{"1219":{"position":[[430,2]]}}}],["2df3bdf",{"_index":2760,"t":{"1221":{"position":[[216,9]]}}}],["2ea517",{"_index":2848,"t":{"1229":{"position":[[215,9]]}}}],["2f95c29",{"_index":2673,"t":{"1210":{"position":[[718,9]]}}}],["2nd",{"_index":1857,"t":{"404":{"position":[[601,3]]},"598":{"position":[[708,3]]},"1070":{"position":[[433,3]]}}}],["3",{"_index":389,"t":{"45":{"position":[[3289,2]]},"47":{"position":[[1648,2]]},"115":{"position":[[2417,3],[2421,2],[2424,2],[2427,2],[2549,1],[2633,1],[2720,1],[3114,1]]},"117":{"position":[[3638,3],[3642,2],[3645,2],[3648,2],[3770,1],[3854,1],[3941,1],[4133,1]]},"210":{"position":[[1601,1],[1859,1]]},"247":{"position":[[39,1],[80,1]]},"309":{"position":[[116,1]]},"317":{"position":[[270,1],[343,1]]},"612":{"position":[[369,3],[373,2]]},"762":{"position":[[38,2]]},"958":{"position":[[628,3],[632,2],[999,1],[1072,1]]},"1025":{"position":[[268,1],[341,1]]},"1199":{"position":[[546,1]]},"1344":{"position":[[162,1],[603,1],[755,1],[872,2],[885,1]]},"1350":{"position":[[24,1]]}}}],["3,3,0",{"_index":2374,"t":{"955":{"position":[[124,7]]}}}],["3.0.11",{"_index":2520,"t":{"1199":{"position":[[421,6]]}}}],["3.3.2",{"_index":2521,"t":{"1199":{"position":[[431,5]]}}}],["3.452",{"_index":1471,"t":{"210":{"position":[[1396,5]]},"223":{"position":[[545,5]]}}}],["3.5",{"_index":1194,"t":{"153":{"position":[[821,3],[986,4],[1679,3]]},"161":{"position":[[963,3]]},"386":{"position":[[360,3]]}}}],["3.678",{"_index":1467,"t":{"210":{"position":[[1342,5]]},"223":{"position":[[497,5]]}}}],["30",{"_index":820,"t":{"105":{"position":[[1264,2],[1349,2],[1434,2]]},"117":{"position":[[1673,2],[1758,2],[1843,2]]},"357":{"position":[[271,2]]},"380":{"position":[[879,2]]},"382":{"position":[[497,2]]},"384":{"position":[[794,2],[872,2]]},"386":{"position":[[437,2]]},"404":{"position":[[416,2]]},"598":{"position":[[472,2]]},"1070":{"position":[[248,2]]}}}],["300",{"_index":942,"t":{"119":{"position":[[580,4]]}}}],["3000",{"_index":906,"t":{"119":{"position":[[80,5],[1010,5]]}}}],["30000",{"_index":963,"t":{"119":{"position":[[836,6],[885,6],[934,6],[983,6]]},"143":{"position":[[1014,6]]}}}],["300000.0",{"_index":1349,"t":{"182":{"position":[[146,8]]}}}],["3000000",{"_index":992,"t":{"119":{"position":[[1366,8],[1415,8]]},"143":{"position":[[1592,8]]},"210":{"position":[[136,8]]}}}],["3000000,50000",{"_index":1096,"t":{"143":{"position":[[324,13]]}}}],["300000000,7.1",{"_index":1091,"t":{"143":{"position":[[214,13]]}}}],["30553e0",{"_index":2636,"t":{"1208":{"position":[[75,9]]}}}],["31",{"_index":2290,"t":{"707":{"position":[[420,2]]}}}],["31.36",{"_index":1429,"t":{"210":{"position":[[904,6]]},"223":{"position":[[108,5]]}}}],["310000",{"_index":1149,"t":{"143":{"position":[[1228,6]]}}}],["320,1075,57,2885",{"_index":1294,"t":{"164":{"position":[[765,16]]}}}],["3201",{"_index":1896,"t":{"413":{"position":[[1654,5]]}}}],["3250,250,2640,59",{"_index":1110,"t":{"143":{"position":[[516,16]]}}}],["3250,360,2490,68",{"_index":1111,"t":{"143":{"position":[[533,16]]}}}],["3250,500,2342,77",{"_index":1112,"t":{"143":{"position":[[550,16]]}}}],["3250,600,2210,80",{"_index":1113,"t":{"143":{"position":[[567,16]]}}}],["3250,667,2068,78",{"_index":1114,"t":{"143":{"position":[[584,16]]}}}],["3250,735,1870,74",{"_index":1115,"t":{"143":{"position":[[601,16]]}}}],["32885b5",{"_index":2583,"t":{"1201":{"position":[[481,9]]}}}],["329c8e9",{"_index":2793,"t":{"1223":{"position":[[946,9]]}}}],["33.32,231569.8",{"_index":1266,"t":{"164":{"position":[[245,14]]}}}],["33000",{"_index":1132,"t":{"143":{"position":[[948,6],[1080,6],[1410,6],[1608,6]]}}}],["330000.0",{"_index":1351,"t":{"182":{"position":[[161,8]]}}}],["34",{"_index":1433,"t":{"210":{"position":[[954,3],[981,3]]},"223":{"position":[[153,2],[177,2]]}}}],["34000",{"_index":1126,"t":{"143":{"position":[[882,6]]}}}],["35",{"_index":1856,"t":{"404":{"position":[[472,2]]},"598":{"position":[[579,2]]},"1070":{"position":[[304,2]]}}}],["350",{"_index":945,"t":{"119":{"position":[[601,4]]}}}],["3500",{"_index":910,"t":{"119":{"position":[[103,5],[1059,5]]}}}],["35000",{"_index":1144,"t":{"143":{"position":[[1146,6],[1542,6]]}}}],["350000",{"_index":1152,"t":{"143":{"position":[[1294,6]]}}}],["350000.0",{"_index":1353,"t":{"182":{"position":[[176,8]]}}}],["3500000",{"_index":1125,"t":{"143":{"position":[[866,8],[1394,8]]}}}],["3500000,130000",{"_index":1097,"t":{"143":{"position":[[338,14]]}}}],["3503",{"_index":1693,"t":{"343":{"position":[[194,5]]},"349":{"position":[[199,5]]},"380":{"position":[[199,5]]},"384":{"position":[[297,5]]},"619":{"position":[[143,5]]},"626":{"position":[[148,5]]},"660":{"position":[[199,5]]},"843":{"position":[[199,5]]}}}],["35a3640",{"_index":2806,"t":{"1223":{"position":[[1248,9]]}}}],["35c4f68",{"_index":2489,"t":{"1195":{"position":[[302,9]]}}}],["36.93",{"_index":1444,"t":{"210":{"position":[[1067,6]]},"223":{"position":[[253,5]]}}}],["36000",{"_index":1147,"t":{"143":{"position":[[1212,6],[1278,6],[1476,6]]}}}],["36000,13",{"_index":1121,"t":{"143":{"position":[[700,8]]}}}],["3600000",{"_index":1130,"t":{"143":{"position":[[932,8]]}}}],["3634a9e",{"_index":2477,"t":{"1195":{"position":[[90,9]]}}}],["365,1425,62,3326",{"_index":1290,"t":{"164":{"position":[[695,16]]}}}],["3700000",{"_index":1135,"t":{"143":{"position":[[998,8]]}}}],["3708",{"_index":1712,"t":{"349":{"position":[[309,6]]},"626":{"position":[[258,6]]}}}],["38",{"_index":791,"t":{"105":{"position":[[890,2]]},"117":{"position":[[1301,2]]},"210":{"position":[[1116,3],[1143,3]]},"223":{"position":[[297,2],[321,2]]},"382":{"position":[[629,2]]},"433":{"position":[[76,2]]},"911":{"position":[[76,2]]},"1124":{"position":[[76,2]]},"1131":{"position":[[76,2]]},"1138":{"position":[[76,2]]},"1242":{"position":[[647,5]]}}}],["38.08,257576.1",{"_index":1267,"t":{"164":{"position":[[260,14]]}}}],["38000",{"_index":1154,"t":{"143":{"position":[[1344,6]]}}}],["3800000",{"_index":1138,"t":{"143":{"position":[[1064,8]]}}}],["38870a3",{"_index":2751,"t":{"1221":{"position":[[31,9]]}}}],["389db6f",{"_index":2912,"t":{"1242":{"position":[[1180,9]]}}}],["39",{"_index":2857,"t":{"1232":{"position":[[109,5]]}}}],["390000",{"_index":1155,"t":{"143":{"position":[[1360,6]]}}}],["3900000",{"_index":1142,"t":{"143":{"position":[[1130,8]]}}}],["39c5c36",{"_index":2810,"t":{"1223":{"position":[[1347,9]]}}}],["39df792",{"_index":2778,"t":{"1223":{"position":[[206,9]]}}}],["3
  • .yml",{"_index":269,"t":{"33":{"position":[[313,6]]}}}],["8b97673",{"_index":2493,"t":{"1197":{"position":[[49,9]]}}}],["8be87dd",{"_index":2682,"t":{"1212":{"position":[[49,9]]}}}],["8cf9e1b",{"_index":2466,"t":{"1193":{"position":[[30,9]]}}}],["8e76c8a",{"_index":2900,"t":{"1242":{"position":[[479,9]]}}}],["8f0d716",{"_index":2765,"t":{"1221":{"position":[[379,9]]}}}],["9",{"_index":396,"t":{"45":{"position":[[3447,3],[3580,2]]}}}],["9.125",{"_index":797,"t":{"105":{"position":[[944,6]]},"117":{"position":[[1353,6]]},"382":{"position":[[681,6]]},"433":{"position":[[128,6]]},"911":{"position":[[128,6]]},"1124":{"position":[[128,6]]},"1131":{"position":[[128,6]]},"1138":{"position":[[128,6]]}}}],["9.52,76775.52",{"_index":1256,"t":{"164":{"position":[[98,13]]}}}],["9.557",{"_index":1451,"t":{"210":{"position":[[1154,5]]},"223":{"position":[[330,5]]}}}],["9.712",{"_index":1462,"t":{"210":{"position":[[1288,5]]},"223":{"position":[[449,5]]}}}],["90",{"_index":2728,"t":{"1219":{"position":[[384,5]]}}}],["900",{"_index":1003,"t":{"119":{"position":[[1597,4]]}}}],["900,1700,80.4,4157",{"_index":1276,"t":{"164":{"position":[[443,18]]}}}],["900,1900,80.4,4365",{"_index":1271,"t":{"164":{"position":[[352,18]]}}}],["9000",{"_index":990,"t":{"119":{"position":[[1304,5]]},"143":{"position":[[860,5]]},"247":{"position":[[646,4]]},"990":{"position":[[34,4]]},"992":{"position":[[286,4]]}}}],["9000,4",{"_index":1118,"t":{"143":{"position":[[677,6]]}}}],["91",{"_index":2777,"t":{"1223":{"position":[[200,5]]}}}],["924526a",{"_index":2686,"t":{"1212":{"position":[[148,9]]}}}],["92cb4fa",{"_index":2855,"t":{"1232":{"position":[[56,9]]}}}],["93",{"_index":1889,"t":{"413":{"position":[[1052,2]]}}}],["9300",{"_index":2394,"t":{"992":{"position":[[320,4]]}}}],["936b941",{"_index":2881,"t":{"1238":{"position":[[291,9]]}}}],["93de4f4",{"_index":2876,"t":{"1238":{"position":[[199,9]]}}}],["94",{"_index":2786,"t":{"1223":{"position":[[703,5]]}}}],["94.12",{"_index":1439,"t":{"210":{"position":[[1012,6]]},"223":{"position":[[204,5]]}}}],["94.17",{"_index":1457,"t":{"210":{"position":[[1227,6]]},"223":{"position":[[395,5]]}}}],["94.24",{"_index":1436,"t":{"210":{"position":[[985,6]]},"223":{"position":[[180,5]]}}}],["9428979",{"_index":2688,"t":{"1212":{"position":[[195,9]]}}}],["9482421",{"_index":2860,"t":{"1232":{"position":[[166,9]]}}}],["94be7fa",{"_index":2822,"t":{"1225":{"position":[[212,9]]}}}],["95",{"_index":2783,"t":{"1223":{"position":[[610,5]]}}}],["9500",{"_index":2392,"t":{"992":{"position":[[303,4]]}}}],["9502bcc",{"_index":2700,"t":{"1212":{"position":[[521,9]]}}}],["967,1810,78,4365",{"_index":1270,"t":{"164":{"position":[[335,16]]}}}],["97",{"_index":2795,"t":{"1223":{"position":[[1073,5]]}}}],["97.79",{"_index":1470,"t":{"210":{"position":[[1389,6]]},"223":{"position":[[539,5]]}}}],["9800",{"_index":2395,"t":{"992":{"position":[[337,4]]}}}],["9886",{"_index":1711,"t":{"349":{"position":[[298,4]]},"626":{"position":[[247,4]]}}}],["9900",{"_index":2396,"t":{"992":{"position":[[354,4]]}}}],["9a54f51",{"_index":2895,"t":{"1242":{"position":[[312,9]]}}}],["9b7b308",{"_index":2804,"t":{"1223":{"position":[[1200,9]]}}}],["9b95ee5",{"_index":2590,"t":{"1204":{"position":[[72,9]]}}}],["9c3af00",{"_index":2911,"t":{"1242":{"position":[[1165,9]]}}}],["9d66de6",{"_index":2920,"t":{"1245":{"position":[[39,9]]}}}],["9de403c",{"_index":2747,"t":{"1219":{"position":[[907,9]]}}}],["9f4a4af",{"_index":2770,"t":{"1223":{"position":[[18,9]]}}}],["9f580c1",{"_index":2690,"t":{"1212":{"position":[[242,9]]}}}],["_",{"_index":398,"t":{"45":{"position":[[3462,4],[3598,4]]}}}],["a(drogon",{"_index":1164,"t":{"145":{"position":[[124,8]]}}}],["a(instal",{"_index":693,"t":{"95":{"position":[[447,14],[466,14]]},"121":{"position":[[269,14]]}}}],["a01a215",{"_index":2819,"t":{"1225":{"position":[[130,9]]}}}],["a16a695",{"_index":2750,"t":{"1219":{"position":[[1070,9]]}}}],["a18de1",{"_index":2727,"t":{"1219":{"position":[[302,9]]}}}],["a1d2ce6",{"_index":2581,"t":{"1201":{"position":[[438,9]]}}}],["a27c392",{"_index":2618,"t":{"1206":{"position":[[574,9]]}}}],["a2b5c1a",{"_index":2865,"t":{"1234":{"position":[[99,9]]}}}],["a310df2",{"_index":2545,"t":{"1199":{"position":[[956,9]]}}}],["a71abf",{"_index":2646,"t":{"1208":{"position":[[427,9]]}}}],["a7b22e2",{"_index":2871,"t":{"1238":{"position":[[18,9]]}}}],["a_genset",{"_index":2930,"t":{"1250":{"position":[[661,8]]},"1255":{"position":[[640,8]]}}}],["a_single_speed_pump",{"_index":1396,"t":{"204":{"position":[[25,19]]}}}],["a_single_speed_pump_with_head_margin_appli",{"_index":1400,"t":{"204":{"position":[[341,44]]}}}],["a_variable_speed_pump",{"_index":1398,"t":{"204":{"position":[[180,21]]}}}],["aa(flar",{"_index":694,"t":{"95":{"position":[[488,10]]}}}],["aa65163",{"_index":2555,"t":{"1199":{"position":[[1170,9]]}}}],["ab25e05",{"_index":2694,"t":{"1212":{"position":[[333,9]]}}}],["abil",{"_index":3034,"t":{"1332":{"position":[[470,7]]}}}],["abov",{"_index":449,"t":{"47":{"position":[[1348,5],[1589,6]]},"97":{"position":[[505,6]]},"109":{"position":[[360,6],[410,6]]},"115":{"position":[[1968,6],[2852,6],[2909,6]]},"123":{"position":[[475,6]]},"131":{"position":[[1340,6]]},"133":{"position":[[324,6],[374,6]]},"139":{"position":[[1203,5],[2251,5],[2438,5],[2881,6]]},"153":{"position":[[980,5]]},"168":{"position":[[960,5]]},"189":{"position":[[1182,5]]},"212":{"position":[[1118,7]]},"335":{"position":[[1702,6]]},"351":{"position":[[1298,5]]},"377":{"position":[[310,5]]},"413":{"position":[[991,6]]},"465":{"position":[[2502,5]]},"749":{"position":[[432,5]]},"847":{"position":[[174,5],[410,5]]},"917":{"position":[[380,5]]},"1255":{"position":[[1924,6]]},"1366":{"position":[[43,6]]}}}],["absolut",{"_index":1332,"t":{"174":{"position":[[223,8]]},"441":{"position":[[977,8]]},"749":{"position":[[223,8]]},"768":{"position":[[32,9]]},"1242":{"position":[[275,8]]}}}],["ac(ga",{"_index":695,"t":{"95":{"position":[[505,6]]}}}],["accept",{"_index":601,"t":{"81":{"position":[[16,8]]},"488":{"position":[[1555,9]]},"494":{"position":[[588,9]]},"874":{"position":[[252,8]]},"1219":{"position":[[238,7]]},"1297":{"position":[[16,6]]},"1315":{"position":[[16,8]]},"1346":{"position":[[81,7],[194,9]]}}}],["access",{"_index":133,"t":{"15":{"position":[[209,6]]},"17":{"position":[[288,10]]},"1206":{"position":[[1053,8]]},"1332":{"position":[[39,6]]}}}],["accompani",{"_index":1627,"t":{"282":{"position":[[113,11]]},"351":{"position":[[1717,11]]},"468":{"position":[[284,11]]}}}],["accord",{"_index":1676,"t":{"331":{"position":[[82,9]]},"925":{"position":[[82,9]]},"1242":{"position":[[549,9]]}}}],["account",{"_index":571,"t":{"70":{"position":[[931,7]]},"508":{"position":[[161,7]]},"970":{"position":[[30,7],[571,9]]},"1037":{"position":[[725,7]]}}}],["accur",{"_index":619,"t":{"87":{"position":[[261,8]]},"351":{"position":[[388,8]]}}}],["accuraci",{"_index":611,"t":{"87":{"position":[[84,10],[424,8],[459,8],[511,8]]},"345":{"position":[[933,8]]},"1281":{"position":[[13,8]]}}}],["achiev",{"_index":27,"t":{"4":{"position":[[192,7]]},"392":{"position":[[1218,7]]},"580":{"position":[[779,10]]},"711":{"position":[[95,8]]},"1058":{"position":[[96,8]]}}}],["act",{"_index":2300,"t":{"715":{"position":[[649,3]]}}}],["action",{"_index":2504,"t":{"1199":{"position":[[161,7]]},"1229":{"position":[[137,6]]},"1370":{"position":[[485,7]]}}}],["actions/cach",{"_index":2519,"t":{"1199":{"position":[[402,13]]}}}],["actions/checkout",{"_index":2524,"t":{"1199":{"position":[[465,16]]}}}],["actions/setup",{"_index":2527,"t":{"1199":{"position":[[522,13]]}}}],["activ",{"_index":545,"t":{"68":{"position":[[293,6]]},"79":{"position":[[179,6],[341,8]]},"475":{"position":[[1302,11]]},"1318":{"position":[[96,6],[135,7]]},"1338":{"position":[[55,9]]}}}],["actual",{"_index":359,"t":{"45":{"position":[[2292,8]]},"351":{"position":[[129,6],[1318,6]]},"413":{"position":[[1005,6],[1205,6],[1304,6],[1389,6]]},"479":{"position":[[607,6]]},"580":{"position":[[856,6]]},"896":{"position":[[132,6]]},"1037":{"position":[[69,6],[137,6]]},"1206":{"position":[[301,6]]},"1274":{"position":[[86,8]]},"1320":{"position":[[0,6],[61,6],[172,6]]}}}],["ad",{"_index":432,"t":{"47":{"position":[[574,5],[1617,5]]},"60":{"position":[[444,5]]},"65":{"position":[[37,6]]},"95":{"position":[[559,2],[594,2],[633,2],[679,2]]},"234":{"position":[[188,5],[418,6]]},"241":{"position":[[269,5]]},"280":{"position":[[618,5]]},"373":{"position":[[255,5]]},"375":{"position":[[722,5]]},"377":{"position":[[1130,5]]},"390":{"position":[[1032,5]]},"392":{"position":[[2525,5]]},"431":{"position":[[313,5]]},"437":{"position":[[457,5]]},"465":{"position":[[952,5]]},"477":{"position":[[291,6]]},"508":{"position":[[198,5],[351,5]]},"546":{"position":[[10,6]]},"610":{"position":[[309,5]]},"951":{"position":[[302,5]]},"962":{"position":[[32,5],[57,5]]},"970":{"position":[[21,5]]},"1136":{"position":[[313,5]]},"1210":{"position":[[242,6]]},"1223":{"position":[[558,5]]},"1250":{"position":[[172,5],[983,5]]},"1257":{"position":[[730,5]]},"1260":{"position":[[78,6]]},"1272":{"position":[[0,5],[58,5],[451,5]]},"1281":{"position":[[128,5],[270,5]]},"1303":{"position":[[367,5]]},"1324":{"position":[[0,5]]},"1390":{"position":[[47,6]]},"1392":{"position":[[24,5]]}}}],["ad(gener",{"_index":696,"t":{"95":{"position":[[538,12]]}}}],["add",{"_index":431,"t":{"47":{"position":[[556,3]]},"72":{"position":[[84,3]]},"91":{"position":[[332,3]]},"107":{"position":[[1127,4]]},"365":{"position":[[56,3]]},"488":{"position":[[547,3]]},"494":{"position":[[1010,3]]},"695":{"position":[[28,3]]},"753":{"position":[[34,3]]},"1185":{"position":[[0,3],[164,3],[244,3],[340,3],[397,3],[506,3]]},"1189":{"position":[[54,3],[169,3]]},"1193":{"position":[[0,3],[40,3]]},"1197":{"position":[[0,3]]},"1199":{"position":[[0,3],[37,3],[97,3],[146,3],[197,3],[235,3],[271,3],[328,3]]},"1204":{"position":[[0,3],[82,3],[140,3],[183,3]]},"1206":{"position":[[0,3],[57,3]]},"1208":{"position":[[0,3],[54,3],[85,3],[150,3]]},"1210":{"position":[[0,3],[83,3],[169,3]]},"1223":{"position":[[0,3],[28,3],[62,3],[96,3],[151,3],[216,3],[315,3],[410,3],[450,3]]},"1227":{"position":[[0,3]]},"1240":{"position":[[0,3]]},"1242":{"position":[[0,3],[38,3],[83,3]]},"1250":{"position":[[0,3],[336,3],[855,3],[1335,3],[1543,3]]},"1252":{"position":[[14,3]]},"1255":{"position":[[0,3],[759,3]]},"1265":{"position":[[0,3],[87,3],[287,3]]},"1267":{"position":[[0,3]]},"1269":{"position":[[0,3],[192,3]]},"1272":{"position":[[133,3],[209,3],[245,3],[298,3],[384,3]]},"1274":{"position":[[435,3]]},"1283":{"position":[[0,3]]},"1318":{"position":[[0,3]]},"1324":{"position":[[449,3]]},"1360":{"position":[[269,3]]},"1368":{"position":[[508,3]]},"1388":{"position":[[60,3]]},"1390":{"position":[[0,3],[29,3],[105,3]]},"1392":{"position":[[39,4],[283,3]]},"1397":{"position":[[366,3],[392,3]]},"1399":{"position":[[256,3],[301,3],[555,3],[649,3],[675,3]]}}}],["addit",{"_index":435,"t":{"47":{"position":[[1028,8],[2118,8]]},"95":{"position":[[146,8]]},"115":{"position":[[128,10]]},"159":{"position":[[1929,10]]},"206":{"position":[[0,10]]},"236":{"position":[[326,8]]},"239":{"position":[[97,10]]},"241":{"position":[[61,10],[252,8]]},"305":{"position":[[122,9]]},"335":{"position":[[1264,9],[2257,10]]},"371":{"position":[[533,9]]},"392":{"position":[[354,9]]},"398":{"position":[[579,9]]},"409":{"position":[[534,10]]},"413":{"position":[[1842,10]]},"415":{"position":[[293,8]]},"468":{"position":[[259,9]]},"475":{"position":[[1136,10],[1317,10]]},"488":{"position":[[906,8],[1078,8]]},"664":{"position":[[329,10]]},"1066":{"position":[[376,9]]},"1185":{"position":[[309,10]]},"1272":{"position":[[137,10]]}}}],["addition",{"_index":1234,"t":{"159":{"position":[[933,12]]},"345":{"position":[[355,13]]}}}],["adiabat",{"_index":1979,"t":{"465":{"position":[[896,11]]}}}],["adjust",{"_index":1325,"t":{"170":{"position":[[965,11],[1001,10]]},"280":{"position":[[607,10]]},"337":{"position":[[296,8]]},"359":{"position":[[1291,10]]},"373":{"position":[[244,10]]},"375":{"position":[[711,10]]},"377":{"position":[[529,8],[1119,10]]},"390":{"position":[[1021,10]]},"392":{"position":[[2514,10]]},"407":{"position":[[888,8]]},"413":{"position":[[2161,6]]},"431":{"position":[[302,10]]},"437":{"position":[[446,10]]},"470":{"position":[[2468,6],[2686,6],[3356,6]]},"481":{"position":[[462,11],[493,11]]},"506":{"position":[[32,10]]},"508":{"position":[[179,11],[245,10],[313,10]]},"510":{"position":[[0,11],[12,11],[36,11]]},"512":{"position":[[173,11],[510,11]]},"570":{"position":[[18,10],[78,10]]},"572":{"position":[[37,10]]},"576":{"position":[[153,11],[460,11]]},"580":{"position":[[692,9]]},"745":{"position":[[60,10]]},"755":{"position":[[0,10]]},"762":{"position":[[149,11],[466,11]]},"847":{"position":[[345,6]]},"962":{"position":[[21,10]]},"1136":{"position":[[302,10]]},"1185":{"position":[[456,6]]},"1223":{"position":[[226,10],[328,6],[1457,10]]}}}],["admonit",{"_index":3042,"t":{"1332":{"position":[[708,11]]},"1338":{"position":[[139,11]]}}}],["advanc",{"_index":127,"t":{"15":{"position":[[60,8]]},"47":{"position":[[2620,8]]},"93":{"position":[[44,8]]},"95":{"position":[[87,8]]},"105":{"position":[[5,8]]},"394":{"position":[[31,8]]},"1368":{"position":[[540,8]]}}}],["advanced_compressor_train",{"_index":2220,"t":{"536":{"position":[[16,25],[241,25]]}}}],["ae",{"_index":712,"t":{"95":{"position":[[896,2]]}}}],["ae(bas",{"_index":697,"t":{"95":{"position":[[566,7]]}}}],["af",{"_index":713,"t":{"95":{"position":[[918,2]]}}}],["af(ga",{"_index":698,"t":{"95":{"position":[[601,6]]}}}],["af6bee9",{"_index":2500,"t":{"1199":{"position":[[27,9]]}}}],["affect",{"_index":465,"t":{"47":{"position":[[2407,8]]},"60":{"position":[[85,7]]},"76":{"position":[[226,6]]},"441":{"position":[[507,9]]},"1109":{"position":[[421,9]]},"1250":{"position":[[1271,8]]}}}],["ag",{"_index":714,"t":{"95":{"position":[[940,2]]}}}],["ag(produc",{"_index":699,"t":{"95":{"position":[[640,11]]}}}],["again",{"_index":271,"t":{"33":{"position":[[335,5]]},"584":{"position":[[294,5]]},"1206":{"position":[[846,5]]}}}],["against",{"_index":2111,"t":{"470":{"position":[[3089,7]]},"481":{"position":[[132,7]]},"1229":{"position":[[25,7]]},"1267":{"position":[[561,7]]}}}],["aggreg",{"_index":1664,"t":{"315":{"position":[[700,11]]}}}],["agnost",{"_index":461,"t":{"47":{"position":[[2356,8]]}}}],["ah",{"_index":715,"t":{"95":{"position":[[962,2]]}}}],["ah(sea",{"_index":702,"t":{"95":{"position":[[686,6]]}}}],["ahead",{"_index":1829,"t":{"396":{"position":[[186,5]]},"398":{"position":[[383,5]]},"465":{"position":[[2622,6]]},"1066":{"position":[[180,5]]},"1210":{"position":[[18,5]]}}}],["ain't",{"_index":2188,"t":{"502":{"position":[[54,5]]}}}],["algorithm",{"_index":1761,"t":{"359":{"position":[[645,9]]},"1257":{"position":[[228,11]]}}}],["align",{"_index":2811,"t":{"1223":{"position":[[1383,7]]}}}],["alkan",{"_index":1905,"t":{"415":{"position":[[224,7],[342,7]]}}}],["alloc",{"_index":2257,"t":{"610":{"position":[[251,9]]},"951":{"position":[[244,9]]}}}],["allow",{"_index":217,"t":{"25":{"position":[[114,7]]},"45":{"position":[[138,7],[3301,7]]},"87":{"position":[[901,5]]},"107":{"position":[[179,8]]},"131":{"position":[[179,8]]},"193":{"position":[[222,5]]},"216":{"position":[[51,8]]},"266":{"position":[[79,7]]},"272":{"position":[[145,7]]},"278":{"position":[[24,6]]},"282":{"position":[[29,6]]},"339":{"position":[[28,6]]},"345":{"position":[[30,6]]},"516":{"position":[[476,7],[1906,7],[2037,7]]},"882":{"position":[[108,7],[229,8]]},"1142":{"position":[[33,7]]},"1185":{"position":[[519,7]]},"1215":{"position":[[22,7]]},"1219":{"position":[[324,5]]},"1223":{"position":[[741,7]]},"1232":{"position":[[0,5]]},"1250":{"position":[[1147,5]]},"1257":{"position":[[117,5]]},"1267":{"position":[[607,7]]},"1272":{"position":[[972,5],[1687,7]]},"1287":{"position":[[138,7]]},"1370":{"position":[[206,6]]}}}],["alon",{"_index":1680,"t":{"335":{"position":[[69,5]]},"1332":{"position":[[146,6]]}}}],["along",{"_index":1769,"t":{"365":{"position":[[513,5]]},"407":{"position":[[1780,6]]},"1272":{"position":[[648,5]]}}}],["alreadi",{"_index":1059,"t":{"139":{"position":[[437,7]]},"409":{"position":[[811,7]]},"1372":{"position":[[70,7]]},"1376":{"position":[[176,7]]}}}],["alt=\"altern",{"_index":3102,"t":{"1344":{"position":[[1033,16]]}}}],["altern",{"_index":1701,"t":{"345":{"position":[[437,9]]},"465":{"position":[[3104,11]]},"477":{"position":[[74,11]]},"588":{"position":[[118,9]]},"939":{"position":[[517,14],[772,14]]},"1185":{"position":[[784,13]]},"1344":{"position":[[964,11]]}}}],["although",{"_index":3157,"t":{"1366":{"position":[[797,8],[1024,8],[1117,8]]}}}],["alway",{"_index":427,"t":{"47":{"position":[[301,6],[1998,6],[2102,6]]},"234":{"position":[[81,6]]},"477":{"position":[[508,6],[715,6]]},"508":{"position":[[125,6]]},"741":{"position":[[42,6]]},"1142":{"position":[[12,6]]},"1206":{"position":[[943,6]]},"1219":{"position":[[891,6]]},"1274":{"position":[[793,6]]},"1289":{"position":[[207,6]]}}}],["am3/h",{"_index":1899,"t":{"413":{"position":[[2421,5],[2469,5],[2563,7],[2614,6]]}}}],["am3/hr",{"_index":1747,"t":{"351":{"position":[[1380,6],[1427,6]]},"413":{"position":[[1032,7],[1416,6],[1445,6],[1660,7]]}}}],["am3_per_hour",{"_index":375,"t":{"45":{"position":[[2695,12],[2841,12],[3000,12],[3157,12]]},"101":{"position":[[591,12]]},"105":{"position":[[487,12],[651,12]]},"117":{"position":[[297,12],[898,12],[1062,12]]},"127":{"position":[[955,12]]},"141":{"position":[[485,12]]},"151":{"position":[[573,12]]},"161":{"position":[[239,12]]},"195":{"position":[[142,12]]},"202":{"position":[[144,12]]},"204":{"position":[[128,12],[289,12],[469,12]]},"341":{"position":[[135,12]]},"343":{"position":[[118,12]]},"347":{"position":[[137,12]]},"349":{"position":[[122,12]]},"353":{"position":[[293,12]]},"355":{"position":[[195,12]]},"380":{"position":[[122,12]]},"382":{"position":[[195,12]]},"384":{"position":[[220,12]]},"660":{"position":[[122,12]]},"843":{"position":[[122,12]]},"851":{"position":[[67,12]]},"1016":{"position":[[94,14]]},"1018":{"position":[[82,14]]},"1158":{"position":[[87,12]]},"1160":{"position":[[91,12]]},"1163":{"position":[[90,12]]},"1165":{"position":[[122,12]]}}}],["ambigu",{"_index":299,"t":{"45":{"position":[[44,9],[472,9],[1521,9]]},"58":{"position":[[171,9],[317,11]]},"1285":{"position":[[65,9]]},"1287":{"position":[[44,9]]},"1295":{"position":[[65,9]]},"1297":{"position":[[103,11],[303,9]]},"1313":{"position":[[65,9]]},"1366":{"position":[[911,10]]}}}],["amend",{"_index":366,"t":{"45":{"position":[[2413,5]]}}}],["amongst",{"_index":1195,"t":{"153":{"position":[[894,7]]}}}],["amount",{"_index":445,"t":{"47":{"position":[[1234,6]]},"413":{"position":[[1832,6]]},"423":{"position":[[374,6]]},"479":{"position":[[715,6]]}}}],["analys",{"_index":3010,"t":{"1318":{"position":[[241,7]]}}}],["analyz",{"_index":598,"t":{"79":{"position":[[480,9]]}}}],["and/or",{"_index":212,"t":{"23":{"position":[[178,6]]},"54":{"position":[[1202,6]]},"216":{"position":[[6,7]]},"394":{"position":[[109,6],[133,6]]},"923":{"position":[[219,6]]}}}],["annot",{"_index":3068,"t":{"1344":{"position":[[41,10]]}}}],["anoth",{"_index":847,"t":{"107":{"position":[[1132,7]]},"396":{"position":[[1335,7]]},"461":{"position":[[314,7]]},"470":{"position":[[1589,7]]},"477":{"position":[[298,7]]},"596":{"position":[[701,7]]},"610":{"position":[[73,7]]},"951":{"position":[[55,7]]},"970":{"position":[[121,7]]},"1068":{"position":[[786,7]]},"1076":{"position":[[600,7]]},"1272":{"position":[[1357,7]]},"1399":{"position":[[260,7]]}}}],["anti",{"_index":1370,"t":{"189":{"position":[[546,5]]},"212":{"position":[[1438,5]]},"351":{"position":[[513,5]]},"392":{"position":[[624,4],[659,4]]},"407":{"position":[[499,4]]},"413":{"position":[[1180,4]]},"465":{"position":[[3792,4]]}}}],["antisurg",{"_index":1822,"t":{"392":{"position":[[507,9]]}}}],["anyon",{"_index":2372,"t":{"953":{"position":[[209,7]]}}}],["anyth",{"_index":2211,"t":{"516":{"position":[[1109,8]]},"1392":{"position":[[233,8]]}}}],["anywher",{"_index":1516,"t":{"227":{"position":[[2482,8]]}}}],["api",{"_index":277,"t":{"35":{"position":[[293,3]]},"498":{"position":[[10,3]]},"1229":{"position":[[73,3]]}}}],["appli",{"_index":1331,"t":{"174":{"position":[[88,7]]},"294":{"position":[[122,8]]},"299":{"position":[[71,8]]},"516":{"position":[[979,8],[1129,5]]},"749":{"position":[[88,7]]},"882":{"position":[[140,8]]},"1255":{"position":[[481,5]]},"1265":{"position":[[334,5]]},"1326":{"position":[[168,8]]}}}],["applic",{"_index":1606,"t":{"264":{"position":[[339,10]]},"1185":{"position":[[435,10]]},"1336":{"position":[[98,11]]}}}],["apply_condit",{"_index":2730,"t":{"1219":{"position":[[405,15]]}}}],["appreci",{"_index":3120,"t":{"1346":{"position":[[609,10]]}}}],["approach",{"_index":74,"t":{"4":{"position":[[924,8]]}}}],["appropri",{"_index":3195,"t":{"1372":{"position":[[34,11]]}}}],["approxim",{"_index":2005,"t":{"465":{"position":[[1977,12]]}}}],["archiv",{"_index":2674,"t":{"1210":{"position":[[735,7]]}}}],["area",{"_index":10,"t":{"2":{"position":[[113,5]]},"189":{"position":[[287,5]]},"206":{"position":[[345,5]]},"212":{"position":[[151,4],[1273,5],[1535,4],[1593,4],[1679,5]]},"249":{"position":[[259,5]]},"335":{"position":[[805,4]]},"441":{"position":[[414,5],[448,4]]},"847":{"position":[[200,4]]},"1109":{"position":[[328,5],[362,4]]},"1199":{"position":[[47,4]]},"1274":{"position":[[600,4]]},"1324":{"position":[[12,4],[133,4]]},"1403":{"position":[[186,5]]}}}],["aren't",{"_index":3156,"t":{"1366":{"position":[[755,6]]}}}],["arg",{"_index":454,"t":{"47":{"position":[[1786,6]]},"486":{"position":[[0,5],[189,9]]},"492":{"position":[[91,9]]}}}],["arg1",{"_index":2945,"t":{"1255":{"position":[[2117,4]]}}}],["argn",{"_index":2946,"t":{"1255":{"position":[[2126,5]]}}}],["argument",{"_index":424,"t":{"47":{"position":[[209,8],[336,8],[829,8],[892,8],[1600,8],[1638,9],[1747,8],[1972,9],[2215,8],[2447,8]]},"488":{"position":[[74,10]]},"496":{"position":[[114,10]]},"1252":{"position":[[203,9]]},"1255":{"position":[[952,9],[1102,8],[2078,8]]},"1269":{"position":[[22,8],[212,8],[239,8]]},"1289":{"position":[[115,8],[242,8]]},"1303":{"position":[[62,8]]}}}],["aris",{"_index":1707,"t":{"345":{"position":[[974,5]]}}}],["array",{"_index":2733,"t":{"1219":{"position":[[439,6]]},"1232":{"position":[[86,5]]},"1374":{"position":[[664,5]]}}}],["ascii",{"_index":262,"t":{"33":{"position":[[107,6],[146,6]]}}}],["ascii//translit",{"_index":266,"t":{"33":{"position":[[237,15]]}}}],["asid",{"_index":1863,"t":{"407":{"position":[[391,6]]}}}],["asset",{"_index":99,"t":{"8":{"position":[[55,6]]},"89":{"position":[[699,5]]},"95":{"position":[[718,5]]}}}],["asset(asset",{"_index":692,"t":{"95":{"position":[[430,12]]}}}],["asset/ecalc",{"_index":314,"t":{"45":{"position":[[515,11]]},"1212":{"position":[[68,11]]}}}],["asset_result_dto",{"_index":2603,"t":{"1206":{"position":[[183,16]]}}}],["associ",{"_index":1560,"t":{"243":{"position":[[130,10],[343,10],[471,10]]},"516":{"position":[[2120,10],[2173,10]]},"691":{"position":[[157,10]]},"695":{"position":[[46,10]]},"799":{"position":[[60,10],[273,10],[401,10]]}}}],["assum",{"_index":1225,"t":{"157":{"position":[[229,7]]},"193":{"position":[[71,7]]},"216":{"position":[[478,6],[550,6]]},"335":{"position":[[1807,7]]},"371":{"position":[[122,7]]},"398":{"position":[[327,7]]},"465":{"position":[[3181,6]]},"475":{"position":[[455,7]]},"500":{"position":[[17,7]]},"795":{"position":[[72,7]]},"917":{"position":[[531,9]]},"1037":{"position":[[1387,7]]},"1066":{"position":[[124,7]]},"1272":{"position":[[1702,8]]}}}],["assumpt",{"_index":1709,"t":{"345":{"position":[[1004,11]]},"371":{"position":[[142,10]]},"465":{"position":[[3304,11]]},"475":{"position":[[72,11]]},"477":{"position":[[807,10],[874,10]]}}}],["asv",{"_index":1369,"t":{"189":{"position":[[542,3]]},"212":{"position":[[1434,3]]},"345":{"position":[[600,5]]},"351":{"position":[[509,3]]},"392":{"position":[[676,5]]},"407":{"position":[[1531,3],[1835,3]]},"409":{"position":[[91,3],[320,4]]},"413":{"position":[[83,3],[190,4],[521,3],[737,3],[1464,5]]},"588":{"position":[[264,5]]},"1260":{"position":[[95,3],[194,4]]}}}],["asv_balanced_margin",{"_index":2962,"t":{"1260":{"position":[[383,20]]}}}],["asv_with_balanced_pressure_ratio",{"_index":2963,"t":{"1260":{"position":[[442,34]]}}}],["atom",{"_index":1912,"t":{"415":{"position":[[376,5]]}}}],["attach",{"_index":1609,"t":{"264":{"position":[[689,8]]}}}],["attent",{"_index":1357,"t":{"187":{"position":[[152,9]]}}}],["attribut",{"_index":338,"t":{"45":{"position":[[1458,9]]},"266":{"position":[[271,10]]},"564":{"position":[[63,10]]},"630":{"position":[[111,10]]},"721":{"position":[[130,10]]},"803":{"position":[[101,10]]},"1206":{"position":[[447,10],[953,9]]},"1297":{"position":[[280,11]]}}}],["auto",{"_index":511,"t":{"56":{"position":[[409,4]]}}}],["automat",{"_index":507,"t":{"56":{"position":[[296,13]]},"153":{"position":[[847,13]]},"260":{"position":[[360,14]]},"337":{"position":[[282,13]]},"392":{"position":[[477,9],[614,9],[952,13],[1115,13]]},"1185":{"position":[[874,13]]}}}],["avail",{"_index":138,"t":{"15":{"position":[[297,9]]},"70":{"position":[[486,9]]},"93":{"position":[[96,9]]},"369":{"position":[[66,9]]},"377":{"position":[[656,9]]},"402":{"position":[[4,9]]},"413":{"position":[[370,9],[615,10],[1914,9],[2313,9],[2427,9],[2475,9],[2539,9]]},"415":{"position":[[958,9]]},"417":{"position":[[0,9]]},"465":{"position":[[3721,9]]},"477":{"position":[[642,10],[698,10]]},"494":{"position":[[57,10]]},"502":{"position":[[175,9]]},"715":{"position":[[363,9]]},"907":{"position":[[204,9]]},"939":{"position":[[928,9]]},"1185":{"position":[[212,9]]},"1260":{"position":[[217,9]]},"1303":{"position":[[7,9]]},"1309":{"position":[[174,9]]},"1397":{"position":[[723,9]]},"1399":{"position":[[963,9]]}}}],["averag",{"_index":568,"t":{"70":{"position":[[734,7],[908,7]]},"351":{"position":[[40,9]]},"465":{"position":[[2203,7]]},"580":{"position":[[515,9],[659,7],[742,7]]},"1041":{"position":[[546,7]]},"1303":{"position":[[261,7]]},"1326":{"position":[[209,7]]}}}],["avoid",{"_index":298,"t":{"45":{"position":[[38,5],[466,5]]},"107":{"position":[[219,5]]},"131":{"position":[[219,5]]},"193":{"position":[[374,5],[416,5]]},"234":{"position":[[428,5]]},"610":{"position":[[346,5]]},"915":{"position":[[164,5]]},"951":{"position":[[339,5]]},"1206":{"position":[[115,5]]},"1219":{"position":[[0,5]]},"1267":{"position":[[671,5]]},"1287":{"position":[[38,5]]}}}],["awar",{"_index":617,"t":{"87":{"position":[[225,5]]}}}],["away",{"_index":2260,"t":{"610":{"position":[[409,4]]},"951":{"position":[[402,4]]}}}],["awesom",{"_index":3182,"t":{"1368":{"position":[[486,7]]}}}],["b",{"_index":689,"t":{"95":{"position":[[417,2],[743,3],[747,1],[770,3],[805,3],[809,1],[854,1],[1882,1],[1979,1],[2049,1],[2132,1],[2161,1]]},"103":{"position":[[121,1]]},"109":{"position":[[777,1]]},"113":{"position":[[42,2],[302,1],[339,1],[459,1],[556,1],[653,1],[736,1]]},"115":{"position":[[3537,1],[3590,1],[3677,1],[3930,1],[4049,1],[4343,1]]},"117":{"position":[[4321,1],[4441,1],[4538,1],[4644,1],[4767,1]]},"145":{"position":[[171,1],[202,1],[234,1],[263,1],[298,1]]},"1380":{"position":[[70,1]]},"1397":{"position":[[311,1]]},"1399":{"position":[[470,1]]}}}],["b(flare",{"_index":1014,"t":{"121":{"position":[[291,9]]}}}],["b(gener",{"_index":1165,"t":{"145":{"position":[[151,11]]}}}],["b(instal",{"_index":703,"t":{"95":{"position":[[728,14]]}}}],["b02d68d",{"_index":2698,"t":{"1212":{"position":[[424,9]]}}}],["b1c5b23",{"_index":2642,"t":{"1208":{"position":[[294,9]]}}}],["b424176",{"_index":2645,"t":{"1208":{"position":[[387,9]]}}}],["b477b15",{"_index":2706,"t":{"1212":{"position":[[778,9]]}}}],["b580e3d",{"_index":2586,"t":{"1201":{"position":[[532,9]]}}}],["b61a0f",{"_index":2596,"t":{"1206":{"position":[[47,9]]}}}],["b78b035",{"_index":2888,"t":{"1242":{"position":[[73,9]]}}}],["b904",{"_index":2901,"t":{"1242":{"position":[[496,4]]}}}],["ba",{"_index":705,"t":{"95":{"position":[[774,2]]}}}],["ba(gener",{"_index":704,"t":{"95":{"position":[[753,12]]}}}],["ba788fd",{"_index":2709,"t":{"1212":{"position":[[889,9]]}}}],["ba9235",{"_index":2620,"t":{"1206":{"position":[[704,9]]},"1210":{"position":[[314,9],[393,9]]}}}],["back",{"_index":1377,"t":{"189":{"position":[[873,4]]},"475":{"position":[[630,4]]},"584":{"position":[[289,4]]},"1054":{"position":[[875,4]]},"1394":{"position":[[25,4]]}}}],["backfil",{"_index":2434,"t":{"1054":{"position":[[829,9],[883,8]]}}}],["backward",{"_index":1477,"t":{"212":{"position":[[732,8]]},"882":{"position":[[1019,9]]}}}],["bad",{"_index":2797,"t":{"1223":{"position":[[1116,3]]},"1366":{"position":[[1215,3]]}}}],["bad_fuel_ga",{"_index":755,"t":{"103":{"position":[[56,13],[488,12]]},"109":{"position":[[831,12]]},"113":{"position":[[393,12]]},"117":{"position":[[534,12],[4375,12]]}}}],["badg",{"_index":2904,"t":{"1242":{"position":[[588,6]]}}}],["bar",{"_index":723,"t":{"95":{"position":[[1545,3],[1579,4]]},"121":{"position":[[1128,3],[1162,4]]},"159":{"position":[[1351,3],[2138,3],[2150,3]]},"210":{"position":[[816,6],[823,6]]},"218":{"position":[[54,3],[77,3]]},"390":{"position":[[318,3],[658,5],[919,5]]},"392":{"position":[[1930,5],[2343,5]]},"396":{"position":[[985,5],[1556,5],[2008,5]]},"596":{"position":[[922,5]]},"642":{"position":[[26,5]]},"896":{"position":[[183,4],[605,3],[641,4],[670,4]]},"919":{"position":[[201,4]]},"1068":{"position":[[436,5],[1007,5]]},"1090":{"position":[[316,4]]},"1332":{"position":[[640,4]]}}}],["bara",{"_index":1064,"t":{"139":{"position":[[1571,6],[1604,6]]},"141":{"position":[[2256,4],[2287,4]]},"210":{"position":[[1863,6],[1915,6]]},"311":{"position":[[53,4],[77,4]]},"319":{"position":[[53,4],[77,4]]}}}],["barycentr",{"_index":1403,"t":{"206":{"position":[[286,11]]},"212":{"position":[[1192,11]]}}}],["base",{"_index":513,"t":{"56":{"position":[[454,5]]},"95":{"position":[[1170,4],[1219,4],[1958,4],[2007,4]]},"105":{"position":[[153,5],[193,5]]},"111":{"position":[[192,4]]},"113":{"position":[[190,4]]},"115":{"position":[[78,4],[3515,4]]},"121":{"position":[[798,4]]},"135":{"position":[[192,4],[458,4],[489,4]]},"139":{"position":[[78,4],[139,4],[170,4]]},"141":{"position":[[1591,4],[1622,4]]},"145":{"position":[[22,5],[638,4]]},"159":{"position":[[2418,4],[2570,4],[2611,4],[2689,4],[2774,4]]},"161":{"position":[[1972,4],[2050,4],[2135,4]]},"189":{"position":[[30,5]]},"212":{"position":[[960,5],[1218,5]]},"313":{"position":[[135,5]]},"359":{"position":[[428,5],[610,5]]},"371":{"position":[[130,5],[197,5],[729,5]]},"377":{"position":[[203,6],[550,6]]},"398":{"position":[[875,5]]},"415":{"position":[[931,5]]},"475":{"position":[[114,4],[886,4]]},"481":{"position":[[529,4]]},"516":{"position":[[558,4]]},"568":{"position":[[155,4]]},"691":{"position":[[240,6],[292,5],[380,6]]},"1066":{"position":[[672,5]]},"1177":{"position":[[135,5]]},"1206":{"position":[[1023,4]]},"1274":{"position":[[857,5]]},"1303":{"position":[[426,5],[445,6]]},"1358":{"position":[[351,5]]},"1370":{"position":[[102,5]]}}}],["base_production_load_mw",{"_index":833,"t":{"107":{"position":[[528,24],[924,23],[1103,23]]},"117":{"position":[[2134,24]]}}}],["base_profile.csv",{"_index":741,"t":{"99":{"position":[[314,16]]},"117":{"position":[[56,16]]},"119":{"position":[[727,16]]}}}],["baseload",{"_index":1250,"t":{"159":{"position":[[2670,8]]},"161":{"position":[[2031,8]]},"475":{"position":[[435,11]]}}}],["bash|zsh|fish|powershell|pwsh",{"_index":2150,"t":{"486":{"position":[[384,32],[479,32]]}}}],["basi",{"_index":3126,"t":{"1356":{"position":[[138,6]]}}}],["basic",{"_index":2166,"t":{"488":{"position":[[1424,5]]},"494":{"position":[[472,5]]}}}],["bb(flare",{"_index":707,"t":{"95":{"position":[[815,8]]}}}],["bc",{"_index":710,"t":{"95":{"position":[[874,2]]}}}],["bc(base",{"_index":706,"t":{"95":{"position":[[781,7]]}}}],["bcc2f81",{"_index":2526,"t":{"1199":{"position":[[501,9]]}}}],["bce91cb",{"_index":2734,"t":{"1219":{"position":[[457,9]]}}}],["be",{"_index":2,"t":{"2":{"position":[[25,5]]},"45":{"position":[[2301,5]]},"47":{"position":[[2130,5]]},"60":{"position":[[805,5]]},"79":{"position":[[460,5]]},"89":{"position":[[649,5]]},"159":{"position":[[711,5],[2497,5]]},"168":{"position":[[129,6]]},"227":{"position":[[1228,5]]},"388":{"position":[[117,5]]},"479":{"position":[[156,5]]},"504":{"position":[[193,5]]},"580":{"position":[[474,5]]},"615":{"position":[[271,5]]},"622":{"position":[[338,5]]},"1037":{"position":[[212,5]]},"1260":{"position":[[114,5]]},"1311":{"position":[[170,5]]}}}],["be435c3",{"_index":2916,"t":{"1242":{"position":[[1321,9]]}}}],["be9426a",{"_index":2838,"t":{"1229":{"position":[[48,9]]}}}],["beat",{"_index":3158,"t":{"1366":{"position":[[819,5]]}}}],["beauti",{"_index":3150,"t":{"1366":{"position":[[532,9]]}}}],["becom",{"_index":854,"t":{"111":{"position":[[373,8]]},"113":{"position":[[309,8]]},"115":{"position":[[3400,8],[3907,8]]},"135":{"position":[[338,8]]},"212":{"position":[[1045,6]]},"1185":{"position":[[742,6]]},"1392":{"position":[[292,6]]}}}],["befor",{"_index":452,"t":{"47":{"position":[[1434,6],[1623,6]]},"115":{"position":[[3303,6],[3810,6]]},"121":{"position":[[1340,6]]},"139":{"position":[[2797,6]]},"253":{"position":[[670,6],[729,6],[798,6],[890,6],[959,6]]},"390":{"position":[[629,6],[890,6]]},"392":{"position":[[1901,6],[2314,6]]},"396":{"position":[[956,6],[1527,6],[1979,6]]},"400":{"position":[[299,6]]},"409":{"position":[[1022,6]]},"494":{"position":[[37,6]]},"512":{"position":[[499,6]]},"576":{"position":[[449,6]]},"596":{"position":[[893,6]]},"762":{"position":[[455,6]]},"847":{"position":[[492,6]]},"894":{"position":[[1090,6]]},"970":{"position":[[538,7]]},"1054":{"position":[[490,6]]},"1068":{"position":[[407,6],[978,6]]},"1169":{"position":[[195,8]]},"1210":{"position":[[51,6]]},"1242":{"position":[[925,6],[981,6]]},"1267":{"position":[[247,6]]},"1399":{"position":[[837,6]]}}}],["beforehand",{"_index":2941,"t":{"1255":{"position":[[195,11]]}}}],["begin",{"_index":1519,"t":{"227":{"position":[[2637,9]]},"1054":{"position":[[35,5]]}}}],["behav",{"_index":880,"t":{"115":{"position":[[1921,7]]},"345":{"position":[[423,7]]},"588":{"position":[[104,7]]}}}],["behavior",{"_index":423,"t":{"47":{"position":[[84,9],[2683,9]]},"289":{"position":[[4,8]]},"753":{"position":[[255,8]]},"1142":{"position":[[78,9]]}}}],["behaviour",{"_index":510,"t":{"56":{"position":[[356,9]]},"62":{"position":[[29,9]]},"429":{"position":[[809,9]]},"465":{"position":[[675,9]]},"580":{"position":[[361,10]]},"707":{"position":[[979,10]]},"1054":{"position":[[975,10]]}}}],["behind",{"_index":516,"t":{"58":{"position":[[141,6]]},"187":{"position":[[407,6]]},"335":{"position":[[2551,6]]}}}],["belong",{"_index":2205,"t":{"516":{"position":[[74,6]]}}}],["below",{"_index":491,"t":{"54":{"position":[[923,5],[1067,6]]},"60":{"position":[[610,6]]},"70":{"position":[[1016,5]]},"89":{"position":[[1379,6]]},"95":{"position":[[1050,6]]},"121":{"position":[[678,6]]},"139":{"position":[[2069,5]]},"145":{"position":[[518,6]]},"172":{"position":[[45,6]]},"178":{"position":[[285,6]]},"189":{"position":[[304,5],[576,5]]},"227":{"position":[[1924,5]]},"392":{"position":[[844,5],[889,5],[916,6]]},"394":{"position":[[176,5]]},"407":{"position":[[687,6],[849,5]]},"413":{"position":[[777,6]]},"465":{"position":[[3999,5]]},"468":{"position":[[10,5],[194,5]]},"516":{"position":[[325,6],[1043,6]]},"554":{"position":[[26,5]]},"580":{"position":[[761,5]]},"753":{"position":[[339,6]]},"882":{"position":[[1338,5]]},"917":{"position":[[507,5]]},"931":{"position":[[87,6]]},"1037":{"position":[[970,6]]},"1250":{"position":[[216,6],[557,6],[1027,6]]},"1274":{"position":[[610,6]]},"1374":{"position":[[179,5]]},"1390":{"position":[[72,5]]}}}],["better",{"_index":2421,"t":{"1037":{"position":[[1014,6]]},"1279":{"position":[[82,6]]},"1366":{"position":[[545,6],[575,6],[607,6],[639,6],[672,6],[702,6],[1098,6],[1141,6]]}}}],["between",{"_index":564,"t":{"70":{"position":[[590,7]]},"115":{"position":[[546,7]]},"139":{"position":[[339,7],[1961,7],[2207,7]]},"159":{"position":[[98,7]]},"170":{"position":[[900,7]]},"178":{"position":[[59,7]]},"189":{"position":[[56,7],[655,7]]},"227":{"position":[[118,7]]},"253":{"position":[[544,7]]},"272":{"position":[[322,7]]},"284":{"position":[[630,7]]},"301":{"position":[[24,7]]},"313":{"position":[[73,7],[122,7]]},"335":{"position":[[386,7],[2306,7]]},"365":{"position":[[278,7]]},"382":{"position":[[849,7]]},"400":{"position":[[837,7]]},"413":{"position":[[1725,7]]},"429":{"position":[[260,7]]},"431":{"position":[[212,7]]},"465":{"position":[[1537,7]]},"488":{"position":[[185,7]]},"496":{"position":[[215,7]]},"500":{"position":[[381,7]]},"588":{"position":[[402,7]]},"602":{"position":[[181,7]]},"664":{"position":[[43,7]]},"823":{"position":[[550,7]]},"882":{"position":[[819,7],[937,7],[1145,7],[1305,7]]},"939":{"position":[[950,7]]},"949":{"position":[[475,7]]},"1122":{"position":[[112,7]]},"1136":{"position":[[212,7]]},"1272":{"position":[[1459,7]]},"1326":{"position":[[536,7]]}}}],["bewar",{"_index":1758,"t":{"359":{"position":[[8,6]]}}}],["binari",{"_index":720,"t":{"95":{"position":[[1252,6]]}}}],["bit",{"_index":3145,"t":{"1366":{"position":[[207,4]]}}}],["block",{"_index":226,"t":{"25":{"position":[[264,5],[324,6],[347,7]]},"1185":{"position":[[931,7]]},"1250":{"position":[[231,7],[572,7],[1042,7],[2002,7],[2162,7]]},"1255":{"position":[[551,7]]},"1272":{"position":[[1067,7]]},"1338":{"position":[[132,6]]}}}],["blockquote>

    text

    /statement/pumpstexttexttitletitletitletitletitletitlelink",{"_index":3105,"t":{"1344":{"position":[[1117,35]]}}}],["html",{"_index":3069,"t":{"1344":{"position":[[82,4],[1198,4],[1309,4]]}}}],["hull",{"_index":1488,"t":{"212":{"position":[[1144,4]]}}}],["hydrocarbon",{"_index":849,"t":{"109":{"position":[[31,11],[239,11]]},"133":{"position":[[31,11],[239,11]]},"157":{"position":[[110,11],[178,11]]},"227":{"position":[[1714,11]]},"255":{"position":[[234,12],[674,12]]},"823":{"position":[[31,12],[374,11],[394,11]]},"1187":{"position":[[331,11]]}}}],["hydrocarbon_export_sm3_per_day",{"_index":825,"t":{"107":{"position":[[312,31]]},"117":{"position":[[1918,31]]},"131":{"position":[[312,31]]},"141":{"position":[[700,31]]}}}],["hyperlink",{"_index":3103,"t":{"1344":{"position":[[1066,10]]}}}],["hyphen",{"_index":309,"t":{"45":{"position":[[344,6],[3467,6],[5028,6]]},"1287":{"position":[[344,6]]}}}],["i.",{"_index":311,"t":{"45":{"position":[[364,5],[5048,5]]},"187":{"position":[[212,5]]},"189":{"position":[[610,5]]},"193":{"position":[[411,4]]},"212":{"position":[[1333,5]]},"247":{"position":[[64,5]]},"365":{"position":[[222,4]]},"398":{"position":[[1236,4]]},"400":{"position":[[1680,4]]},"415":{"position":[[116,4]]},"477":{"position":[[418,4]]},"512":{"position":[[283,4]]},"576":{"position":[[252,4]]},"762":{"position":[[247,4]]},"823":{"position":[[145,6],[513,5]]},"847":{"position":[[229,6]]},"1021":{"position":[[366,4]]},"1287":{"position":[[364,5]]},"1366":{"position":[[135,4]]}}}],["i_butan",{"_index":1208,"t":{"153":{"position":[[1227,9]]},"161":{"position":[[511,9]]},"380":{"position":[[624,9]]},"425":{"position":[[285,9]]},"427":{"position":[[219,9]]}}}],["i_pentan",{"_index":1212,"t":{"153":{"position":[[1282,10]]},"161":{"position":[[566,10]]},"380":{"position":[[661,10]]},"425":{"position":[[337,10]]},"427":{"position":[[256,10]]}}}],["iconv",{"_index":264,"t":{"33":{"position":[[159,6],[216,5]]}}}],["id",{"_index":3035,"t":{"1332":{"position":[[510,3]]},"1368":{"position":[[610,2]]}}}],["ide1",{"_index":2018,"t":{"470":{"position":[[23,4],[3641,4]]}}}],["ide1_a[oil",{"_index":2019,"t":{"470":{"position":[[82,10]]}}}],["ide1_b[ga",{"_index":2020,"t":{"470":{"position":[[104,10]]}}}],["ide1_c[wat",{"_index":2021,"t":{"470":{"position":[[126,12]]}}}],["ide1_d[ga",{"_index":2022,"t":{"470":{"position":[[150,10]]}}}],["ide1_e[wat",{"_index":2023,"t":{"470":{"position":[[172,12]]}}}],["ide2",{"_index":2024,"t":{"470":{"position":[[209,4],[3650,4],[3655,4]]}}}],["ide2_a[[pow",{"_index":2025,"t":{"470":{"position":[[252,13]]}}}],["ide2_a_1",{"_index":2027,"t":{"470":{"position":[[316,8]]}}}],["ide2_a_1([ga",{"_index":2026,"t":{"470":{"position":[[290,13]]}}}],["ide2_a_2",{"_index":2029,"t":{"470":{"position":[[370,8]]}}}],["ide2_a_2([\"`numb",{"_index":2028,"t":{"470":{"position":[[329,18]]}}}],["ide2_a_3([\"`maximum",{"_index":2030,"t":{"470":{"position":[[383,19]]}}}],["ide2_b[[\"wat",{"_index":2032,"t":{"470":{"position":[[452,14]]}}}],["ide2_b_1",{"_index":2034,"t":{"470":{"position":[[525,8]]}}}],["ide2_b_1([\"`suct",{"_index":2033,"t":{"470":{"position":[[491,19]]}}}],["ide2_b_2",{"_index":2036,"t":{"470":{"position":[[574,8]]}}}],["ide2_b_2([\"`discharg",{"_index":2035,"t":{"470":{"position":[[538,21]]}}}],["ide2_b_3",{"_index":2038,"t":{"470":{"position":[[627,8]]}}}],["ide2_b_3([\"`inject",{"_index":2037,"t":{"470":{"position":[[587,20]]}}}],["ide2_b_4([\"`maximum",{"_index":2039,"t":{"470":{"position":[[640,19]]}}}],["ide2_c[[\"const",{"_index":2051,"t":{"470":{"position":[[1023,17]]}}}],["ide2_c_1",{"_index":2053,"t":{"470":{"position":[[1087,8]]}}}],["ide2_c_1([\"`bas",{"_index":2052,"t":{"470":{"position":[[1060,16]]}}}],["ide2_c_2",{"_index":2055,"t":{"470":{"position":[[1134,8]]}}}],["ide2_c_2([\"`oil",{"_index":2054,"t":{"470":{"position":[[1100,15]]}}}],["ide2_c_3([\"`ga",{"_index":2056,"t":{"470":{"position":[[1147,15]]}}}],["ide2_d",{"_index":2042,"t":{"470":{"position":[[755,6]]}}}],["ide2_d[[ga",{"_index":2040,"t":{"470":{"position":[[683,11]]}}}],["ide2_d_1",{"_index":2044,"t":{"470":{"position":[[809,8]]}}}],["ide2_d_1([\"`export",{"_index":2041,"t":{"470":{"position":[[720,18]]}}}],["ide2_d_1_1",{"_index":2046,"t":{"470":{"position":[[871,10]]}}}],["ide2_d_1_1([\"`r",{"_index":2043,"t":{"470":{"position":[[766,16]]}}}],["ide2_d_2",{"_index":2047,"t":{"470":{"position":[[884,9],[894,8]]}}}],["ide2_d_2([\"`suct",{"_index":2045,"t":{"470":{"position":[[822,19]]}}}],["ide2_d_3",{"_index":2049,"t":{"470":{"position":[[958,8]]}}}],["ide2_d_3([\"`discharg",{"_index":2048,"t":{"470":{"position":[[907,21]]}}}],["ide2_d_4([\"`suct",{"_index":2050,"t":{"470":{"position":[[971,19]]}}}],["ide2_e[[addit",{"_index":2058,"t":{"470":{"position":[[1180,18]]}}}],["ide2_e_1",{"_index":2060,"t":{"470":{"position":[[1236,8]]}}}],["ide2_e_1([flar",{"_index":2059,"t":{"470":{"position":[[1215,20]]}}}],["ide2_e_2",{"_index":2064,"t":{"470":{"position":[[1300,8]]}}}],["ide2_e_2([\"`electr",{"_index":2061,"t":{"470":{"position":[[1249,22]]}}}],["ide2_e_3([\"`dril",{"_index":2065,"t":{"470":{"position":[[1313,20]]}}}],["ide3",{"_index":2066,"t":{"470":{"position":[[1356,4],[3664,4],[3669,4]]}}}],["ide3_a[[gener",{"_index":2067,"t":{"470":{"position":[[1392,17]]}}}],["ide3_a_1",{"_index":2069,"t":{"470":{"position":[[1501,8]]}}}],["ide3_a_1([\"`fuel",{"_index":2068,"t":{"470":{"position":[[1419,16]]}}}],["ide3_a_2([\"`gener",{"_index":2070,"t":{"470":{"position":[[1514,22]]}}}],["ide3_b[[compressor",{"_index":2073,"t":{"470":{"position":[[1627,21]]}}}],["ide3_b_1",{"_index":2075,"t":{"470":{"position":[[1698,8]]}}}],["ide3_b_1([\"`variable/singl",{"_index":2074,"t":{"470":{"position":[[1653,27]]}}}],["ide3_b_2",{"_index":2077,"t":{"470":{"position":[[1740,8],[1843,8]]}}}],["ide3_b_2{avail",{"_index":2076,"t":{"470":{"position":[[1711,18]]}}}],["ide3_b_3([\"`us",{"_index":2080,"t":{"470":{"position":[[1862,15]]}}}],["ide3_b_4([\"`us",{"_index":2078,"t":{"470":{"position":[[1760,15]]}}}],["ide3_c[[wat",{"_index":2081,"t":{"470":{"position":[[1911,13]]}}}],["ide3_c_1",{"_index":2084,"t":{"470":{"position":[[1986,8]]}}}],["ide3_c_1([\"`variable/singl",{"_index":2083,"t":{"470":{"position":[[1941,27]]}}}],["ide3_c_2",{"_index":2086,"t":{"470":{"position":[[2028,8],[2125,8]]}}}],["ide3_c_2{avail",{"_index":2085,"t":{"470":{"position":[[1999,18]]}}}],["ide3_c_3([\"`gener",{"_index":2088,"t":{"470":{"position":[[2144,20]]}}}],["ide3_c_4([\"`us",{"_index":2087,"t":{"470":{"position":[[2048,15]]}}}],["ide4",{"_index":2089,"t":{"470":{"position":[[2236,4],[3678,4],[3683,4]]}}}],["ide4_a",{"_index":2091,"t":{"470":{"position":[[2286,6],[2510,6],[2728,6]]}}}],["ide4_a_1",{"_index":2093,"t":{"470":{"position":[[2340,8]]}}}],["ide4_a_1_1",{"_index":2095,"t":{"470":{"position":[[2411,10]]}}}],["ide4_a_1_1([\"`eith",{"_index":2094,"t":{"470":{"position":[[2360,20]]}}}],["ide4_a_1_2([\"`plot",{"_index":2096,"t":{"470":{"position":[[2426,18]]}}}],["ide4_a_1{\"`invalid",{"_index":2092,"t":{"470":{"position":[[2304,18]]}}}],["ide4_a_3",{"_index":2099,"t":{"470":{"position":[[2558,8]]}}}],["ide4_a_3_1",{"_index":2101,"t":{"470":{"position":[[2629,10]]}}}],["ide4_a_3_1([\"`eith",{"_index":2100,"t":{"470":{"position":[[2578,20]]}}}],["ide4_a_3_2([\"`plot",{"_index":2102,"t":{"470":{"position":[[2644,18]]}}}],["ide4_a_3{\"`invalid",{"_index":2098,"t":{"470":{"position":[[2528,18]]}}}],["ide4_a_4",{"_index":2104,"t":{"470":{"position":[[2784,8]]}}}],["ide4_a_4_1",{"_index":2106,"t":{"470":{"position":[[2935,10]]}}}],["ide4_a_4_1([\"`check",{"_index":2105,"t":{"470":{"position":[[2804,19]]}}}],["ide4_a_4_2([\"`adjust",{"_index":2107,"t":{"470":{"position":[[2950,20]]}}}],["ide4_a_4{\"`invalid",{"_index":2103,"t":{"470":{"position":[[2746,18]]}}}],["ide4_a{\"invalid",{"_index":2090,"t":{"470":{"position":[[2262,15]]}}}],["ide5",{"_index":2108,"t":{"470":{"position":[[3003,4],[3692,4]]}}}],["ide5_a[\"`calibr",{"_index":2109,"t":{"470":{"position":[[3026,23]]}}}],["ide5_a_1",{"_index":2112,"t":{"470":{"position":[[3115,8],[3596,8]]}}}],["ide5_a_1([\"`compar",{"_index":2110,"t":{"470":{"position":[[3054,19]]}}}],["ide5_a_2",{"_index":2114,"t":{"470":{"position":[[3160,8],[3289,8]]}}}],["ide5_a_2_1",{"_index":2119,"t":{"470":{"position":[[3394,10]]}}}],["ide5_a_2_1([\"`consid",{"_index":2118,"t":{"470":{"position":[[3308,22]]}}}],["ide5_a_2{\"`do",{"_index":2113,"t":{"470":{"position":[[3128,13]]}}}],["ide5_a_3_1",{"_index":2116,"t":{"470":{"position":[[3219,10],[3409,10],[3605,10]]}}}],["ide5_a_3_1{\"`ar",{"_index":2115,"t":{"470":{"position":[[3180,16]]}}}],["ide5_a_3_2([\"`no",{"_index":2117,"t":{"470":{"position":[[3241,16]]}}}],["ide5_a_4_1",{"_index":2125,"t":{"470":{"position":[[3626,10]]}}}],["ide5_a_4_1([\"`plot",{"_index":2120,"t":{"470":{"position":[[3420,18]]}}}],["ide5_a_4_2",{"_index":2124,"t":{"470":{"position":[[3581,10]]}}}],["ide5_a_4_2([\"`alt",{"_index":2121,"t":{"470":{"position":[[3510,19]]}}}],["idea",{"_index":60,"t":{"4":{"position":[[695,4]]},"1366":{"position":[[1219,5],[1284,5],[1323,4]]}}}],["ident",{"_index":1235,"t":{"159":{"position":[[1102,10]]},"345":{"position":[[903,9]]},"409":{"position":[[427,10]]},"524":{"position":[[270,9]]}}}],["identifi",{"_index":1013,"t":{"121":{"position":[[247,11]]},"145":{"position":[[102,11]]}}}],["ie",{"_index":620,"t":{"87":{"position":[[285,3]]},"1054":{"position":[[897,3]]}}}],["ignor",{"_index":1518,"t":{"227":{"position":[[2606,8]]},"711":{"position":[[53,8]]},"1058":{"position":[[53,8]]},"1255":{"position":[[2249,6]]}}}],["illustr",{"_index":655,"t":{"89":{"position":[[1352,11]]},"127":{"position":[[377,13]]},"264":{"position":[[172,11]]},"468":{"position":[[16,11]]}}}],["imag",{"_index":2014,"t":{"468":{"position":[[4,5]]},"1242":{"position":[[284,5]]},"1344":{"position":[[957,6],[1059,6]]}}}],["image](path/to/imag",{"_index":3099,"t":{"1344":{"position":[[985,21]]}}}],["img",{"_index":3100,"t":{"1344":{"position":[[1007,4]]}}}],["impact",{"_index":1765,"t":{"359":{"position":[[1243,8]]}}}],["implement",{"_index":345,"t":{"45":{"position":[[1724,11],[1802,14]]},"508":{"position":[[392,11]]},"1201":{"position":[[0,9]]},"1326":{"position":[[317,11]]},"1366":{"position":[[1173,14],[1232,14]]},"1368":{"position":[[472,9]]}}}],["impli",{"_index":2209,"t":{"516":{"position":[[908,5]]}}}],["implicit",{"_index":356,"t":{"45":{"position":[[2219,8]]},"1366":{"position":[[587,9]]}}}],["implicitli",{"_index":2287,"t":{"707":{"position":[[328,10]]},"1054":{"position":[[371,10]]}}}],["import",{"_index":205,"t":{"23":{"position":[[33,9]]},"54":{"position":[[776,10]]},"168":{"position":[[1068,9]]},"225":{"position":[[161,10]]},"355":{"position":[[267,9]]},"359":{"position":[[1519,9]]},"409":{"position":[[189,9]]},"423":{"position":[[278,9],[402,10]]},"823":{"position":[[525,9]]},"1309":{"position":[[118,9]]}}}],["impos",{"_index":2072,"t":{"470":{"position":[[1582,6]]}}}],["improv",{"_index":2453,"t":{"1185":{"position":[[550,7]]},"1189":{"position":[[79,7]]},"1212":{"position":[[434,7],[531,7]]},"1223":{"position":[[998,7],[1089,7]]},"1225":{"position":[[179,7]]},"1257":{"position":[[899,8]]},"1265":{"position":[[437,8]]},"1281":{"position":[[0,8]]},"1285":{"position":[[41,9]]},"1295":{"position":[[41,9]]},"1313":{"position":[[41,9]]},"1318":{"position":[[383,8]]},"1326":{"position":[[722,8]]}}}],["in",{"_index":1954,"t":{"441":{"position":[[493,3]]},"1109":{"position":[[407,3]]}}}],["includ",{"_index":313,"t":{"45":{"position":[[507,7],[4066,7],[4284,7],[4498,7],[4751,7]]},"47":{"position":[[13,8]]},"91":{"position":[[107,8],[203,7]]},"168":{"position":[[554,8]]},"176":{"position":[[162,8]]},"178":{"position":[[201,7]]},"193":{"position":[[205,8]]},"227":{"position":[[719,9]]},"236":{"position":[[59,7]]},"289":{"position":[[130,9]]},"305":{"position":[[209,9]]},"345":{"position":[[526,7]]},"447":{"position":[[71,7]]},"468":{"position":[[117,8]]},"475":{"position":[[855,8]]},"496":{"position":[[58,9]]},"588":{"position":[[190,7]]},"699":{"position":[[197,9]]},"707":{"position":[[258,8]]},"715":{"position":[[194,9]]},"823":{"position":[[498,8]]},"854":{"position":[[12,8],[64,8]]},"856":{"position":[[0,8],[102,8]]},"858":{"position":[[0,8],[96,8]]},"860":{"position":[[0,8],[179,8]]},"862":{"position":[[0,8],[98,8]]},"1054":{"position":[[301,8]]},"1255":{"position":[[88,7],[121,9]]},"1257":{"position":[[1009,8]]},"1326":{"position":[[111,8]]},"1358":{"position":[[289,7]]},"1370":{"position":[[518,10]]}}}],["incom",{"_index":3185,"t":{"1368":{"position":[[656,8]]}}}],["incomprehens",{"_index":195,"t":{"21":{"position":[[79,16]]}}}],["incompress",{"_index":2175,"t":{"500":{"position":[[25,15]]}}}],["inconsist",{"_index":2859,"t":{"1232":{"position":[[141,12]]}}}],["incorrect",{"_index":2295,"t":{"707":{"position":[[1057,10]]},"1054":{"position":[[1182,10]]},"1274":{"position":[[747,9]]}}}],["incorrectli",{"_index":2011,"t":{"465":{"position":[[3188,12]]},"1272":{"position":[[1717,14]]},"1320":{"position":[[16,11]]},"1326":{"position":[[21,11]]}}}],["increas",{"_index":360,"t":{"45":{"position":[[2318,9]]},"153":{"position":[[885,8]]},"365":{"position":[[196,8],[338,8]]},"373":{"position":[[505,8]]},"390":{"position":[[1281,8]]},"392":{"position":[[697,10],[835,8],[966,9],[1020,9],[1129,8],[2774,8]]},"407":{"position":[[118,8],[1106,8],[1238,8],[1283,10],[1435,9],[1449,10],[1557,8],[1729,10]]},"411":{"position":[[967,9],[1111,9]]},"413":{"position":[[863,10],[1245,10],[1374,10],[2273,9],[2514,9],[2588,8]]},"415":{"position":[[618,9]]},"465":{"position":[[491,10]]},"588":{"position":[[486,8]]},"1037":{"position":[[1031,8]]},"1326":{"position":[[461,8]]}}}],["indent",{"_index":204,"t":{"23":{"position":[[13,11],[121,11]]},"29":{"position":[[39,11]]},"225":{"position":[[124,12],[141,11],[200,11]]},"546":{"position":[[43,9]]},"1344":{"position":[[455,8]]}}}],["independ",{"_index":1688,"t":{"335":{"position":[[1881,14]]},"371":{"position":[[246,13]]},"400":{"position":[[472,14],[1634,11]]},"465":{"position":[[3394,13]]},"475":{"position":[[482,11]]},"1177":{"position":[[159,12]]},"1354":{"position":[[207,11]]}}}],["indepthli",{"_index":2134,"t":{"477":{"position":[[34,9]]}}}],["index",{"_index":2263,"t":{"610":{"position":[[1094,5]]},"951":{"position":[[1087,5]]}}}],["indic",{"_index":240,"t":{"27":{"position":[[237,8]]},"68":{"position":[[120,10]]},"79":{"position":[[146,8]]},"227":{"position":[[2532,8]]},"315":{"position":[[616,9]]},"516":{"position":[[1468,8],[1540,8],[1621,8],[1733,8],[1805,8],[1863,8]]},"1274":{"position":[[153,9],[207,9]]}}}],["individu",{"_index":86,"t":{"4":{"position":[[1094,10]]},"89":{"position":[[1132,10]]},"264":{"position":[[471,10]]},"365":{"position":[[377,12]]},"409":{"position":[[309,10]]},"413":{"position":[[179,10]]},"481":{"position":[[282,10]]},"588":{"position":[[520,10]]},"1260":{"position":[[183,10]]},"1326":{"position":[[400,12]]}}}],["individual_asv_pressur",{"_index":1813,"t":{"390":{"position":[[199,24]]},"392":{"position":[[2902,24]]},"402":{"position":[[68,23]]},"413":{"position":[[391,23],[1934,24]]},"977":{"position":[[208,23]]},"979":{"position":[[157,24]]},"981":{"position":[[96,23]]},"1260":{"position":[[404,23]]}}}],["individual_asv_r",{"_index":1814,"t":{"390":{"position":[[224,19]]},"392":{"position":[[2927,20]]},"402":{"position":[[92,19]]},"404":{"position":[[572,19],[640,19]]},"413":{"position":[[415,19],[2205,20]]},"598":{"position":[[679,19],[747,19]]},"648":{"position":[[220,20]]},"650":{"position":[[218,19]]},"894":{"position":[[833,20],[920,20]]},"977":{"position":[[232,19]]},"979":{"position":[[182,20]]},"1070":{"position":[[404,19],[472,19]]},"1171":{"position":[[218,20]]},"1173":{"position":[[218,19]]},"1260":{"position":[[349,19]]},"1305":{"position":[[130,19],[163,19]]}}}],["infeas",{"_index":1385,"t":{"189":{"position":[[1224,10]]},"847":{"position":[[218,10],[621,11]]}}}],["infinit",{"_index":2935,"t":{"1250":{"position":[[1678,8]]}}}],["influenc",{"_index":1874,"t":{"407":{"position":[[1306,9],[1607,11]]}}}],["influence_time_vector",{"_index":479,"t":{"54":{"position":[[282,22],[556,22]]},"70":{"position":[[140,21]]},"445":{"position":[[128,22],[357,22]]},"447":{"position":[[31,21]]},"449":{"position":[[271,22]]},"488":{"position":[[432,21]]},"494":{"position":[[895,21]]},"864":{"position":[[14,21]]},"866":{"position":[[200,21]]},"868":{"position":[[0,22]]}}}],["info",{"_index":109,"t":{"10":{"position":[[0,4]]},"17":{"position":[[0,4]]},"54":{"position":[[660,4],[1373,4]]},"56":{"position":[[382,4]]},"60":{"position":[[717,4]]},"486":{"position":[[58,4],[270,5]]},"580":{"position":[[0,4]]},"1332":{"position":[[424,4]]},"1346":{"position":[[355,4]]},"1370":{"position":[[391,4]]},"1374":{"position":[[271,4]]}}}],["inform",{"_index":353,"t":{"45":{"position":[[2119,12]]},"85":{"position":[[84,11]]},"89":{"position":[[114,11]]},"172":{"position":[[89,12]]},"234":{"position":[[801,12]]},"371":{"position":[[517,12]]},"415":{"position":[[71,11]]},"465":{"position":[[168,11],[3624,11]]},"470":{"position":[[228,11]]},"475":{"position":[[1147,12]]},"486":{"position":[[753,11]]},"492":{"position":[[16,11]]},"707":{"position":[[607,11]]},"1054":{"position":[[634,11]]},"1177":{"position":[[172,11]]},"1189":{"position":[[156,12]]},"1221":{"position":[[128,11]]},"1250":{"position":[[2244,12]]},"1324":{"position":[[251,11]]},"1356":{"position":[[213,11]]},"1370":{"position":[[342,11]]}}}],["ingo",{"_index":1826,"t":{"394":{"position":[[101,7]]},"396":{"position":[[373,7],[481,7],[853,7]]},"398":{"position":[[132,7],[562,7],[732,7]]},"404":{"position":[[139,7],[202,7]]},"596":{"position":[[145,7],[253,7]]},"598":{"position":[[144,7],[207,7]]},"894":{"position":[[576,7]]},"1066":{"position":[[359,7],[529,7]]},"1068":{"position":[[304,7]]},"1076":{"position":[[303,7]]},"1082":{"position":[[247,7]]},"1084":{"position":[[140,7],[248,7]]},"1086":{"position":[[139,7],[202,7]]}}}],["ingoing/outgo",{"_index":2987,"t":{"1274":{"position":[[15,16]]}}}],["inherit",{"_index":1636,"t":{"284":{"position":[[497,7]]},"1364":{"position":[[229,11]]}}}],["init",{"_index":2498,"t":{"1199":{"position":[[4,4]]}}}],["initi",{"_index":2917,"t":{"1245":{"position":[[0,7]]},"1274":{"position":[[1097,11]]}}}],["inject",{"_index":43,"t":{"4":{"position":[[439,9]]},"95":{"position":[[608,9],[699,9],[1273,9],[1349,9],[1497,9],[1594,9],[1691,9]]},"107":{"position":[[1165,9]]},"111":{"position":[[218,9],[286,9],[793,9]]},"115":{"position":[[165,9],[1488,9],[1582,9],[1804,9],[2026,9],[2817,9]]},"117":{"position":[[3247,9]]},"121":{"position":[[402,9],[485,9],[860,9],[934,9],[1080,9],[1177,9],[1272,9]]},"135":{"position":[[218,9],[258,9],[287,9],[545,9],[728,9]]},"139":{"position":[[233,9],[355,9],[545,9],[1621,9],[1693,9],[1808,9],[1912,9],[1969,8],[2505,9]]},"141":{"position":[[1693,9],[2310,9]]},"145":{"position":[[281,9],[850,9],[920,9]]},"159":{"position":[[748,9]]},"239":{"position":[[23,9],[58,9],[108,9]]},"264":{"position":[[885,9]]},"335":{"position":[[2507,9]]},"400":{"position":[[2045,9]]},"409":{"position":[[1057,10]]},"470":{"position":[[161,10],[185,10],[467,9],[783,9]]},"516":{"position":[[709,9]]}}}],["injection_compressor",{"_index":1617,"t":{"276":{"position":[[211,20]]},"528":{"position":[[211,20]]},"544":{"position":[[211,20]]},"612":{"position":[[211,20]]},"958":{"position":[[211,20]]}}}],["injection_compressor_refer",{"_index":1618,"t":{"276":{"position":[[250,30]]},"528":{"position":[[250,30]]},"544":{"position":[[250,30]]},"612":{"position":[[250,30]]},"958":{"position":[[250,30]]}}}],["injector",{"_index":2082,"t":{"470":{"position":[[1925,11]]}}}],["inlet",{"_index":1375,"t":{"189":{"position":[[682,5]]},"212":{"position":[[206,5]]},"266":{"position":[[475,5]]},"335":{"position":[[860,5]]},"351":{"position":[[1467,5],[1484,6]]},"367":{"position":[[182,6]]},"375":{"position":[[91,5],[275,6],[455,6]]},"377":{"position":[[1035,6]]},"390":{"position":[[425,6],[685,6]]},"392":{"position":[[1614,6],[2026,6]]},"396":{"position":[[279,5],[681,6],[1087,6],[1712,6]]},"398":{"position":[[1132,5]]},"402":{"position":[[281,5]]},"407":{"position":[[1078,5],[1132,5],[1323,5]]},"409":{"position":[[1125,5]]},"411":{"position":[[910,5],[941,5]]},"465":{"position":[[1890,5],[2181,5],[2889,5],[4045,5]]},"475":{"position":[[645,5]]},"591":{"position":[[185,6]]},"596":{"position":[[453,6]]},"604":{"position":[[185,6]]},"874":{"position":[[102,5]]},"876":{"position":[[80,6]]},"894":{"position":[[404,6],[623,6]]},"919":{"position":[[253,6]]},"1064":{"position":[[104,6]]},"1068":{"position":[[132,6],[538,6]]},"1076":{"position":[[131,6],[352,6]]},"1204":{"position":[[15,5]]},"1210":{"position":[[36,5]]},"1219":{"position":[[186,5]]},"1272":{"position":[[1109,6]]},"1318":{"position":[[14,5],[153,5]]}}}],["inlet/outlet",{"_index":1527,"t":{"234":{"position":[[350,12]]}}}],["inlet_temperatur",{"_index":819,"t":{"105":{"position":[[1245,18],[1330,18],[1415,18]]},"117":{"position":[[1654,18],[1739,18],[1824,18]]},"153":{"position":[[1737,18]]},"161":{"position":[[1021,18]]},"357":{"position":[[252,18]]},"367":{"position":[[163,18]]},"375":{"position":[[256,18],[436,18]]},"377":{"position":[[1016,18]]},"380":{"position":[[860,18]]},"382":{"position":[[478,18]]},"384":{"position":[[775,18],[853,18]]},"386":{"position":[[418,18]]},"390":{"position":[[406,18],[666,18]]},"392":{"position":[[1595,18],[2007,18]]},"396":{"position":[[662,18],[1068,18],[1693,18]]},"404":{"position":[[317,18],[397,18],[453,18],[713,18]]},"591":{"position":[[166,18]]},"593":{"position":[[128,18]]},"596":{"position":[[434,18]]},"598":{"position":[[322,18],[453,18],[560,18],[820,18]]},"604":{"position":[[166,18]]},"606":{"position":[[128,18]]},"872":{"position":[[9,17]]},"876":{"position":[[61,18]]},"878":{"position":[[65,18]]},"894":{"position":[[385,18],[604,18]]},"919":{"position":[[234,18]]},"1064":{"position":[[85,18]]},"1068":{"position":[[113,18],[519,18]]},"1070":{"position":[[149,18],[229,18],[285,18],[545,18]]},"1076":{"position":[[112,18],[333,18]]},"1078":{"position":[[148,18]]},"1272":{"position":[[1090,18]]}}}],["inlin",{"_index":2968,"t":{"1265":{"position":[[503,6]]},"1344":{"position":[[513,8]]}}}],["inner",{"_index":134,"t":{"15":{"position":[[219,6]]}}}],["innov",{"_index":7,"t":{"2":{"position":[[87,10]]}}}],["input",{"_index":207,"t":{"23":{"position":[[92,6]]},"27":{"position":[[206,6]]},"45":{"position":[[2641,5],[2785,5],[5119,5],[5200,5]]},"56":{"position":[[344,6]]},"70":{"position":[[101,5]]},"87":{"position":[[279,5],[335,5],[505,5]]},"91":{"position":[[284,5]]},"97":{"position":[[61,6],[108,5],[137,5]]},"101":{"position":[[15,5]]},"115":{"position":[[724,5]]},"123":{"position":[[61,6],[108,5],[137,5]]},"127":{"position":[[15,5],[478,5],[520,5]]},"139":{"position":[[1762,5]]},"147":{"position":[[65,5],[80,6],[93,6],[110,5]]},"153":{"position":[[277,5],[355,5]]},"157":{"position":[[73,6]]},"159":{"position":[[1894,5],[1995,8]]},"168":{"position":[[136,5],[163,5],[267,5],[435,5],[579,5],[659,5],[835,6],[980,6],[1078,6]]},"170":{"position":[[106,5],[233,5],[318,6],[389,5]]},"172":{"position":[[14,5],[66,6]]},"174":{"position":[[13,5],[126,5],[197,5]]},"193":{"position":[[266,5]]},"210":{"position":[[582,5]]},"212":{"position":[[312,8],[1164,5]]},"227":{"position":[[53,6],[211,5],[290,5],[661,5],[779,5],[1091,5]]},"230":{"position":[[42,7]]},"234":{"position":[[123,7]]},"247":{"position":[[707,5]]},"251":{"position":[[295,5]]},"268":{"position":[[169,6]]},"274":{"position":[[221,7]]},"286":{"position":[[158,5]]},"296":{"position":[[25,5]]},"305":{"position":[[111,7]]},"307":{"position":[[120,6]]},"315":{"position":[[152,7]]},"321":{"position":[[186,5],[221,5]]},"323":{"position":[[128,6]]},"329":{"position":[[157,5],[257,5]]},"335":{"position":[[965,5],[1000,8]]},"337":{"position":[[330,5]]},"343":{"position":[[311,5]]},"345":{"position":[[494,5],[764,5]]},"349":{"position":[[614,5]]},"351":{"position":[[969,5],[1060,5],[1546,8]]},"359":{"position":[[414,5],[623,8],[703,5]]},"365":{"position":[[145,6]]},"371":{"position":[[738,5]]},"377":{"position":[[213,5],[560,5]]},"411":{"position":[[181,6],[235,7],[305,6],[357,7]]},"429":{"position":[[660,5],[695,5]]},"435":{"position":[[191,5]]},"439":{"position":[[313,5]]},"441":{"position":[[111,6],[951,5]]},"443":{"position":[[185,6]]},"445":{"position":[[236,5]]},"447":{"position":[[13,5]]},"473":{"position":[[62,8]]},"479":{"position":[[113,5]]},"488":{"position":[[140,7],[157,6],[415,5],[1261,5]]},"494":{"position":[[878,5]]},"496":{"position":[[170,7],[187,6]]},"504":{"position":[[104,5],[427,5]]},"508":{"position":[[110,5],[220,6]]},"512":{"position":[[13,5]]},"516":{"position":[[244,5],[353,5]]},"534":{"position":[[162,6]]},"542":{"position":[[147,7]]},"572":{"position":[[51,5]]},"576":{"position":[[13,5]]},"580":{"position":[[39,5],[143,5]]},"584":{"position":[[179,5],[365,6]]},"588":{"position":[[158,5]]},"711":{"position":[[9,5]]},"721":{"position":[[67,6]]},"723":{"position":[[110,6]]},"737":{"position":[[107,6]]},"747":{"position":[[31,5],[158,5],[243,6],[314,5]]},"749":{"position":[[13,5],[126,5],[197,5],[395,6]]},"755":{"position":[[14,5]]},"762":{"position":[[13,5]]},"768":{"position":[[49,5]]},"866":{"position":[[37,5]]},"874":{"position":[[66,5]]},"882":{"position":[[119,6],[545,5]]},"907":{"position":[[133,8]]},"917":{"position":[[199,8],[306,5]]},"923":{"position":[[61,5],[208,5]]},"998":{"position":[[118,7]]},"1037":{"position":[[251,5],[635,5],[1074,6],[1344,5]]},"1039":{"position":[[254,5]]},"1058":{"position":[[9,5]]},"1090":{"position":[[304,8]]},"1109":{"position":[[25,6]]},"1134":{"position":[[333,8]]},"1185":{"position":[[320,5]]},"1201":{"position":[[79,5],[307,5]]},"1204":{"position":[[86,5]]},"1208":{"position":[[154,5]]},"1212":{"position":[[481,5],[579,5]]},"1242":{"position":[[562,5]]},"1257":{"position":[[846,5]]},"1274":{"position":[[909,6],[987,6]]},"1318":{"position":[[58,5]]}}}],["input;.is_valid",{"_index":638,"t":{"89":{"position":[[249,15]]}}}],["name>:.yml",{"_index":267,"t":{"33":{"position":[[256,31],[360,32]]}}}],["next",{"_index":649,"t":{"89":{"position":[[913,4]]},"253":{"position":[[570,4]]},"398":{"position":[[992,4]]},"546":{"position":[[30,4]]},"882":{"position":[[1169,4]]},"1066":{"position":[[789,4]]},"1257":{"position":[[103,4]]},"1269":{"position":[[101,4]]}}}],["nice",{"_index":2999,"t":{"1279":{"position":[[60,4]]}}}],["nitrogen",{"_index":1199,"t":{"153":{"position":[[1100,9]]},"161":{"position":[[384,9]]},"380":{"position":[[539,9]]},"415":{"position":[[312,8]]},"425":{"position":[[154,9]]},"427":{"position":[[134,9]]}}}],["nmvoc",{"_index":2773,"t":{"1223":{"position":[[129,5]]},"1326":{"position":[[0,5],[150,6]]}}}],["nnn",{"_index":1985,"t":{"465":{"position":[[1243,3],[1792,3]]}}}],["no_flow",{"_index":2510,"t":{"1199":{"position":[[239,7]]}}}],["no_flow_r",{"_index":3013,"t":{"1324":{"position":[[22,12]]}}}],["node",{"_index":1504,"t":{"227":{"position":[[437,4]]},"234":{"position":[[309,4]]},"1199":{"position":[[536,4]]},"1332":{"position":[[382,5],[489,5]]}}}],["nodejs.org",{"_index":3032,"t":{"1332":{"position":[[402,10]]}}}],["nok/kg",{"_index":2281,"t":{"699":{"position":[[389,9]]},"701":{"position":[[92,9]]},"703":{"position":[[57,8]]}}}],["nok/m3",{"_index":1574,"t":{"247":{"position":[[653,6]]}}}],["nok/sm3",{"_index":760,"t":{"103":{"position":[[337,7],[420,7],[472,7],[514,7],[596,7],[648,7]]},"117":{"position":[[383,7],[466,7],[518,7],[560,7],[642,7],[694,7]]},"129":{"position":[[87,7],[225,7],[342,8],[421,8]]},"141":{"position":[[563,7],[644,7]]},"155":{"position":[[75,8],[162,8],[303,8]]},"247":{"position":[[419,7]]},"691":{"position":[[282,9]]},"695":{"position":[[168,9]]},"985":{"position":[[113,8]]},"990":{"position":[[41,7]]},"1006":{"position":[[14,7]]},"1098":{"position":[[18,7]]},"1103":{"position":[[57,9]]}}}],["nok/ton",{"_index":1040,"t":{"129":{"position":[[282,8],[457,8]]},"141":{"position":[[681,7]]},"247":{"position":[[440,7]]},"691":{"position":[[230,9]]},"695":{"position":[[191,7]]},"992":{"position":[[172,7]]},"1010":{"position":[[57,7]]},"1105":{"position":[[159,9]]}}}],["non",{"_index":504,"t":{"56":{"position":[[58,3]]},"227":{"position":[[2065,3]]},"253":{"position":[[839,3]]},"1250":{"position":[[1232,3],[1674,3]]},"1257":{"position":[[188,3]]},"1272":{"position":[[1478,3]]}}}],["none",{"_index":242,"t":{"27":{"position":[[317,4],[351,4]]},"68":{"position":[[136,4]]},"392":{"position":[[2962,5]]},"488":{"position":[[585,5]]},"494":{"position":[[1048,5]]},"514":{"position":[[135,4]]},"522":{"position":[[96,4]]},"530":{"position":[[126,4]]},"538":{"position":[[121,4]]},"548":{"position":[[112,4]]},"556":{"position":[[113,4]]},"570":{"position":[[89,4]]},"578":{"position":[[124,4]]},"608":{"position":[[138,4]]},"636":{"position":[[151,4]]},"662":{"position":[[102,4]]},"673":{"position":[[107,4]]},"681":{"position":[[77,4]]},"705":{"position":[[42,4],[47,4]]},"719":{"position":[[117,4]]},"727":{"position":[[71,4]]},"735":{"position":[[79,4]]},"745":{"position":[[55,4]]},"872":{"position":[[73,4]]},"977":{"position":[[263,4]]},"979":{"position":[[217,5]]},"1265":{"position":[[121,4]]},"1328":{"position":[[0,4]]}}}],["none|year|month|day",{"_index":2158,"t":{"488":{"position":[[273,22]]},"494":{"position":[[736,22]]}}}],["normal",{"_index":1764,"t":{"359":{"position":[[1214,8]]},"423":{"position":[[334,10]]},"516":{"position":[[2111,8],[2164,8]]},"707":{"position":[[563,8]]},"1054":{"position":[[591,8]]}}}],["norwegian",{"_index":2278,"t":{"691":{"position":[[408,9]]}}}],["notat",{"_index":2738,"t":{"1219":{"position":[[598,8]]}}}],["note",{"_index":137,"t":{"15":{"position":[[255,4]]},"101":{"position":[[277,4]]},"103":{"position":[[183,4]]},"109":{"position":[[417,4]]},"127":{"position":[[391,4]]},"170":{"position":[[0,4]]},"176":{"position":[[359,4]]},"193":{"position":[[131,4]]},"210":{"position":[[546,4],[551,4]]},"243":{"position":[[0,4]]},"249":{"position":[[0,4]]},"253":{"position":[[624,4]]},"294":{"position":[[0,4]]},"299":{"position":[[0,4]]},"329":{"position":[[0,4]]},"335":{"position":[[982,5]]},"345":{"position":[[716,4]]},"351":{"position":[[1340,4]]},"355":{"position":[[280,4]]},"400":{"position":[[0,4]]},"413":{"position":[[446,4]]},"441":{"position":[[0,4]]},"451":{"position":[[0,4]]},"516":{"position":[[339,4],[841,4]]},"524":{"position":[[89,4]]},"546":{"position":[[0,4]]},"580":{"position":[[636,4]]},"610":{"position":[[1075,4]]},"664":{"position":[[122,4],[127,4]]},"894":{"position":[[0,4]]},"951":{"position":[[1068,4]]},"1021":{"position":[[462,4]]},"1037":{"position":[[1164,4]]},"1039":{"position":[[13,5],[232,4]]},"1041":{"position":[[141,4]]},"1072":{"position":[[32,4]]},"1090":{"position":[[270,4]]},"1344":{"position":[[1162,4]]}}}],["noth",{"_index":860,"t":{"115":{"position":[[645,7]]}}}],["now",{"_index":270,"t":{"33":{"position":[[320,3]]},"45":{"position":[[1915,3],[2493,3],[3379,3],[3512,3],[3792,3]]},"47":{"position":[[297,3],[436,3],[747,3],[1716,3],[1994,3],[2535,3],[2702,3]]},"54":{"position":[[450,4],[796,3]]},"56":{"position":[[369,3],[577,3]]},"58":{"position":[[87,3],[253,3]]},"68":{"position":[[22,3]]},"70":{"position":[[698,3],[1122,3]]},"72":{"position":[[260,3]]},"76":{"position":[[106,3],[312,3]]},"79":{"position":[[11,3]]},"87":{"position":[[971,3]]},"97":{"position":[[446,3]]},"115":{"position":[[8,3]]},"123":{"position":[[416,3]]},"139":{"position":[[8,3]]},"398":{"position":[[1196,4]]},"402":{"position":[[176,3]]},"874":{"position":[[182,4]]},"1185":{"position":[[208,3],[605,3]]},"1189":{"position":[[138,3]]},"1257":{"position":[[958,3]]},"1260":{"position":[[295,4]]},"1262":{"position":[[21,3]]},"1265":{"position":[[523,3]]},"1274":{"position":[[82,3],[139,3],[203,3],[553,3],[737,3],[838,3]]},"1277":{"position":[[10,3]]},"1281":{"position":[[193,3]]},"1289":{"position":[[203,3],[342,3]]},"1303":{"position":[[420,3]]},"1305":{"position":[[212,3]]},"1309":{"position":[[158,3]]},"1318":{"position":[[225,3]]},"1326":{"position":[[133,3]]},"1366":{"position":[[1091,3],[1161,4]]},"1368":{"position":[[785,4]]},"1397":{"position":[[877,3]]}}}],["nox",{"_index":3017,"t":{"1326":{"position":[[120,4]]}}}],["num",{"_index":2671,"t":{"1210":{"position":[[692,3]]}}}],["number",{"_index":394,"t":{"45":{"position":[[3436,7],[3569,7]]},"87":{"position":[[164,8],[568,7],[654,7],[816,7],[923,6]]},"89":{"position":[[780,6]]},"139":{"position":[[738,6],[805,6],[3557,6],[3624,6]]},"141":{"position":[[1886,6],[1953,6],[2812,6],[2879,6]]},"153":{"position":[[753,6]]},"280":{"position":[[642,6],[703,6]]},"282":{"position":[[681,9]]},"341":{"position":[[340,7]]},"347":{"position":[[343,7],[572,7]]},"353":{"position":[[179,8]]},"361":{"position":[[172,8]]},"377":{"position":[[9,6],[150,6],[239,6]]},"429":{"position":[[252,7]]},"610":{"position":[[975,6]]},"617":{"position":[[146,7]]},"624":{"position":[[149,7],[378,7]]},"653":{"position":[[366,7]]},"753":{"position":[[159,7]]},"823":{"position":[[49,6]]},"835":{"position":[[346,7]]},"902":{"position":[[174,9]]},"939":{"position":[[1292,6],[1327,6]]},"951":{"position":[[968,6]]},"985":{"position":[[150,6]]},"1006":{"position":[[68,6]]},"1043":{"position":[[40,6]]},"1098":{"position":[[70,6]]},"1219":{"position":[[607,7]]},"1281":{"position":[[90,6]]},"1360":{"position":[[288,7],[328,6]]},"1374":{"position":[[492,8],[518,6]]},"1380":{"position":[[96,7],[217,7]]},"1384":{"position":[[146,7]]},"1397":{"position":[[334,7],[847,7]]},"1399":{"position":[[493,7]]}}}],["numbers/result",{"_index":608,"t":{"87":{"position":[[7,14]]}}}],["numer",{"_index":2952,"t":{"1257":{"position":[[207,7],[279,7],[477,7]]}}}],["numeric_method",{"_index":2915,"t":{"1242":{"position":[[1305,15]]}}}],["numpi",{"_index":2732,"t":{"1219":{"position":[[433,5]]},"1223":{"position":[[1173,5],[1214,5],[1234,5]]},"1232":{"position":[[80,5]]}}}],["nvm",{"_index":3033,"t":{"1332":{"position":[[420,3]]}}}],["o",{"_index":183,"t":{"19":{"position":[[635,1]]},"33":{"position":[[254,1]]},"488":{"position":[[684,2]]}}}],["object",{"_index":232,"t":{"27":{"position":[[107,6],[178,8]]},"1201":{"position":[[552,6]]},"1225":{"position":[[77,6]]},"1269":{"position":[[275,6]]},"1364":{"position":[[262,6]]}}}],["obsolet",{"_index":3187,"t":{"1368":{"position":[[776,8]]}}}],["obtain",{"_index":1836,"t":{"398":{"position":[[831,9]]},"468":{"position":[[234,6]]},"580":{"position":[[508,6]]},"691":{"position":[[553,6]]},"1050":{"position":[[180,6]]},"1066":{"position":[[628,9]]}}}],["obviou",{"_index":3167,"t":{"1366":{"position":[[1002,7],[1053,7]]}}}],["oc",{"_index":2351,"t":{"874":{"position":[[172,3]]}}}],["occur",{"_index":1913,"t":{"415":{"position":[[386,6]]},"516":{"position":[[1000,6]]}}}],["offer",{"_index":71,"t":{"4":{"position":[[891,8]]},"8":{"position":[[215,8]]},"176":{"position":[[403,5]]}}}],["offici",{"_index":111,"t":{"10":{"position":[[24,10]]},"15":{"position":[[286,10]]}}}],["offset",{"_index":500,"t":{"54":{"position":[[1612,6]]}}}],["offshor",{"_index":533,"t":{"60":{"position":[[788,8]]},"468":{"position":[[76,8]]},"516":{"position":[[1412,8]]},"1250":{"position":[[27,8],[68,8],[273,8]]},"1297":{"position":[[209,8]]}}}],["oh",{"_index":3198,"t":{"1374":{"position":[[163,2]]}}}],["oil",{"_index":19,"t":{"4":{"position":[[93,3]]},"95":{"position":[[208,3]]},"121":{"position":[[85,3]]},"131":{"position":[[427,3],[1112,3]]},"141":{"position":[[815,3]]},"157":{"position":[[264,3]]},"325":{"position":[[150,3]]},"415":{"position":[[437,5]]},"468":{"position":[[85,3]]},"475":{"position":[[896,3],[939,3],[1032,3]]},"516":{"position":[[1549,3],[1630,3]]},"554":{"position":[[76,3]]},"823":{"position":[[59,3],[325,3],[349,3],[420,3]]}}}],["oil/ga",{"_index":1401,"t":{"206":{"position":[[153,8]]}}}],["oil_prod",{"_index":682,"t":{"95":{"position":[[212,10]]},"119":{"position":[[750,9]]},"121":{"position":[[89,10]]},"143":{"position":[[736,9]]},"157":{"position":[[268,10]]}}}],["oil_rate_per_timestep",{"_index":410,"t":{"45":{"position":[[4150,21],[4368,21],[4582,21],[4906,21]]}}}],["old",{"_index":371,"t":{"45":{"position":[[2531,3]]},"47":{"position":[[2679,3]]},"54":{"position":[[975,3]]},"1252":{"position":[[138,3]]},"1257":{"position":[[554,3]]}}}],["old_setup_file_name_utf",{"_index":268,"t":{"33":{"position":[[288,24]]}}}],["omit",{"_index":3201,"t":{"1374":{"position":[[559,7]]}}}],["on",{"_index":251,"t":{"31":{"position":[[144,3]]},"54":{"position":[[841,3],[848,3]]},"81":{"position":[[77,3]]},"89":{"position":[[830,3]]},"95":{"position":[[361,3]]},"111":{"position":[[9,3]]},"113":{"position":[[9,3]]},"121":{"position":[[33,3]]},"129":{"position":[[30,3]]},"135":{"position":[[9,3]]},"159":{"position":[[9,3],[1010,3]]},"176":{"position":[[213,3]]},"206":{"position":[[351,3],[449,3]]},"216":{"position":[[33,3]]},"227":{"position":[[1322,3],[1621,3],[2150,3],[2212,3]]},"243":{"position":[[396,3]]},"251":{"position":[[29,3]]},"284":{"position":[[172,3]]},"335":{"position":[[267,3],[559,3],[2422,3]]},"339":{"position":[[65,3]]},"359":{"position":[[968,3],[1445,3]]},"371":{"position":[[609,3],[670,3]]},"377":{"position":[[52,3],[472,3]]},"388":{"position":[[53,3]]},"396":{"position":[[1260,3]]},"398":{"position":[[548,3]]},"400":{"position":[[54,3],[64,5],[1533,3]]},"409":{"position":[[238,3],[625,3]]},"413":{"position":[[143,3],[461,3],[490,3]]},"423":{"position":[[314,3]]},"441":{"position":[[208,3],[259,3]]},"447":{"position":[[9,3]]},"465":{"position":[[159,3],[2356,3],[2637,3],[4028,3],[4131,3]]},"477":{"position":[[231,3],[439,3],[489,3]]},"596":{"position":[[626,3]]},"610":{"position":[[57,3]]},"664":{"position":[[215,3]]},"691":{"position":[[13,3]]},"717":{"position":[[118,3]]},"799":{"position":[[326,3]]},"819":{"position":[[20,3],[321,3]]},"847":{"position":[[337,3]]},"866":{"position":[[177,3]]},"939":{"position":[[573,3],[830,3],[1057,3],[1128,3]]},"941":{"position":[[12,3],[137,3]]},"943":{"position":[[12,3],[216,3]]},"945":{"position":[[12,3],[302,3]]},"947":{"position":[[12,3],[314,3]]},"949":{"position":[[92,3],[303,3]]},"1021":{"position":[[12,3],[233,3]]},"1050":{"position":[[139,3]]},"1066":{"position":[[345,3]]},"1068":{"position":[[711,3]]},"1076":{"position":[[525,3]]},"1109":{"position":[[122,3],[173,3]]},"1187":{"position":[[127,3],[279,3]]},"1199":{"position":[[1149,3]]},"1223":{"position":[[851,3]]},"1257":{"position":[[1191,3]]},"1260":{"position":[[64,3]]},"1272":{"position":[[1282,3],[1566,3]]},"1274":{"position":[[1327,3]]},"1315":{"position":[[77,3]]},"1366":{"position":[[428,3],[970,3],[996,3],[1305,3]]},"1368":{"position":[[192,3]]}}}],["onc",{"_index":102,"t":{"8":{"position":[[106,4]]},"894":{"position":[[83,4]]},"1356":{"position":[[0,4]]}}}],["onshor",{"_index":2928,"t":{"1250":{"position":[[463,7],[793,7]]}}}],["onshore_pow",{"_index":2932,"t":{"1250":{"position":[[748,13]]},"1255":{"position":[[727,13]]}}}],["onto",{"_index":3228,"t":{"1399":{"position":[[889,4]]}}}],["open",{"_index":367,"t":{"45":{"position":[[2438,4]]},"47":{"position":[[2312,4]]},"1352":{"position":[[26,4]]},"1354":{"position":[[177,4]]},"1358":{"position":[[26,4]]},"1397":{"position":[[51,4]]}}}],["oper",{"_index":358,"t":{"45":{"position":[[2257,8]]},"68":{"position":[[45,11],[148,11],[261,11]]},"85":{"position":[[103,9]]},"87":{"position":[[746,7]]},"89":{"position":[[481,9],[503,11]]},"159":{"position":[[615,11],[2051,11],[2089,11]]},"170":{"position":[[483,9]]},"189":{"position":[[275,11]]},"212":{"position":[[139,11],[1667,11]]},"236":{"position":[[80,9],[120,9],[200,9],[268,9],[293,8]]},"274":{"position":[[321,12]]},"289":{"position":[[212,11]]},"313":{"position":[[152,11]]},"315":{"position":[[307,12],[466,11],[496,11],[635,11]]},"335":{"position":[[413,11],[793,11]]},"407":{"position":[[612,9],[748,9],[820,9],[1004,9],[1366,9],[1647,9]]},"409":{"position":[[613,8],[819,8]]},"465":{"position":[[774,11]]},"470":{"position":[[2445,11],[2663,11],[3439,11]]},"477":{"position":[[380,7]]},"479":{"position":[[577,11]]},"481":{"position":[[103,11]]},"500":{"position":[[758,11],[920,9],[941,11]]},"542":{"position":[[235,12]]},"580":{"position":[[706,9]]},"747":{"position":[[408,9]]},"939":{"position":[[19,11],[980,11]]},"941":{"position":[[141,11]]},"943":{"position":[[220,11]]},"945":{"position":[[162,11]]},"947":{"position":[[168,11]]},"949":{"position":[[357,11],[407,11],[497,11]]},"1021":{"position":[[237,11],[337,11]]},"1037":{"position":[[121,10],[856,9]]},"1201":{"position":[[236,11],[400,11]]},"1204":{"position":[[208,11]]},"1212":{"position":[[717,11]]},"1219":{"position":[[50,11],[843,11]]},"1223":{"position":[[476,11]]},"1257":{"position":[[1266,11]]},"1303":{"position":[[395,11]]},"1324":{"position":[[67,11]]}}}],["operational_set",{"_index":872,"t":{"115":{"position":[[1312,21],[2345,21]]},"117":{"position":[[3063,21],[3566,21]]},"159":{"position":[[1561,21]]},"161":{"position":[[1576,21]]},"274":{"position":[[299,21]]},"276":{"position":[[332,21]]},"315":{"position":[[285,21],[349,20]]},"317":{"position":[[205,21]]},"542":{"position":[[213,21],[262,20]]},"546":{"position":[[291,21]]},"608":{"position":[[45,20],[117,20]]},"612":{"position":[[332,21]]},"636":{"position":[[130,20]]},"638":{"position":[[79,20]]},"713":{"position":[[223,20]]},"937":{"position":[[45,20]]},"958":{"position":[[332,21],[934,21]]},"1002":{"position":[[364,21]]},"1023":{"position":[[199,21]]},"1025":{"position":[[203,21]]},"1090":{"position":[[77,20]]}}}],["opportun",{"_index":92,"t":{"6":{"position":[[213,13]]}}}],["opposit",{"_index":639,"t":{"89":{"position":[[330,8]]},"1039":{"position":[[290,8]]}}}],["optim",{"_index":2584,"t":{"1201":{"position":[[500,12]]}}}],["option",{"_index":116,"t":{"10":{"position":[[110,7]]},"13":{"position":[[21,6]]},"15":{"position":[[26,6]]},"17":{"position":[[352,7]]},"19":{"position":[[449,7]]},"35":{"position":[[278,7]]},"47":{"position":[[1768,9],[1917,9],[2741,6]]},"54":{"position":[[1054,8]]},"168":{"position":[[1048,9]]},"191":{"position":[[78,10]]},"193":{"position":[[20,9]]},"198":{"position":[[93,10]]},"200":{"position":[[49,9]]},"225":{"position":[[283,8]]},"227":{"position":[[493,8]]},"243":{"position":[[497,10]]},"249":{"position":[[571,9]]},"264":{"position":[[20,7],[156,7]]},"280":{"position":[[585,9]]},"282":{"position":[[331,6]]},"284":{"position":[[29,9],[372,11]]},"286":{"position":[[70,9]]},"329":{"position":[[27,8]]},"335":{"position":[[598,7]]},"373":{"position":[[222,9],[290,9],[380,10]]},"375":{"position":[[689,9],[757,9]]},"377":{"position":[[1097,9]]},"390":{"position":[[999,9],[1067,9],[1157,9]]},"392":{"position":[[2492,9],[2560,9],[2650,9]]},"396":{"position":[[1212,10],[1288,9],[1367,9],[2035,9]]},"398":{"position":[[1088,9]]},"400":{"position":[[203,8]]},"409":{"position":[[496,7]]},"411":{"position":[[682,7]]},"413":{"position":[[362,7],[675,7]]},"423":{"position":[[153,8]]},"431":{"position":[[280,9]]},"437":{"position":[[424,9]]},"451":{"position":[[30,8]]},"465":{"position":[[3748,7]]},"486":{"position":[[114,6],[171,9],[199,8]]},"488":{"position":[[53,9],[222,8],[317,7],[1494,6],[1522,7]]},"490":{"position":[[72,9],[82,8]]},"492":{"position":[[73,9],[101,8]]},"494":{"position":[[96,9],[106,8],[527,6],[555,7],[780,7]]},"496":{"position":[[93,9],[252,8]]},"516":{"position":[[161,8],[181,8]]},"542":{"position":[[174,9]]},"596":{"position":[[578,10],[654,9],[733,9]]},"691":{"position":[[614,9]]},"715":{"position":[[610,8]]},"799":{"position":[[427,10]]},"803":{"position":[[178,8]]},"819":{"position":[[236,9]]},"917":{"position":[[11,8]]},"962":{"position":[[0,8]]},"1037":{"position":[[1021,6]]},"1068":{"position":[[663,10],[739,9],[818,9]]},"1076":{"position":[[477,10],[553,9],[632,9]]},"1136":{"position":[[280,9]]},"1260":{"position":[[47,7],[68,6],[170,7],[227,7]]},"1272":{"position":[[1234,10],[1310,9],[1389,9]]},"1368":{"position":[[139,9],[155,9],[352,8]]}}}],["or/and",{"_index":1505,"t":{"227":{"position":[[958,6]]}}}],["order",{"_index":312,"t":{"45":{"position":[[457,5]]},"60":{"position":[[279,5]]},"72":{"position":[[174,5],[234,5]]},"76":{"position":[[237,5]]},"79":{"position":[[493,5]]},"139":{"position":[[3293,5]]},"157":{"position":[[163,5]]},"216":{"position":[[383,5]]},"1208":{"position":[[216,5]]},"1232":{"position":[[216,5]]},"1242":{"position":[[568,5]]},"1250":{"position":[[1434,5]]},"1267":{"position":[[404,5],[482,5]]},"1299":{"position":[[49,5]]},"1303":{"position":[[132,5]]},"1320":{"position":[[154,5]]},"1338":{"position":[[208,6]]},"1344":{"position":[[832,9]]},"1364":{"position":[[31,5]]},"1380":{"position":[[3,5]]},"1394":{"position":[[3,5]]}}}],["orient",{"_index":3140,"t":{"1364":{"position":[[269,8]]}}}],["origin",{"_index":492,"t":{"54":{"position":[[1401,6]]},"1384":{"position":[[118,6]]},"1397":{"position":[[819,6]]},"1399":{"position":[[236,8],[1051,6]]}}}],["origin/main",{"_index":3224,"t":{"1397":{"position":[[760,11]]}}}],["other",{"_index":1586,"t":{"253":{"position":[[261,6]]}}}],["otherwis",{"_index":645,"t":{"89":{"position":[[676,9]]},"550":{"position":[[246,9]]},"1344":{"position":[[1267,9]]}}}],["out",{"_index":497,"t":{"54":{"position":[[1518,3]]},"232":{"position":[[83,3]]},"335":{"position":[[2199,3],[2412,3]]},"359":{"position":[[1576,4]]},"398":{"position":[[33,3]]},"400":{"position":[[1739,3]]},"1082":{"position":[[148,3]]},"1255":{"position":[[231,3]]},"1289":{"position":[[369,3]]},"1299":{"position":[[207,3]]},"1336":{"position":[[222,3]]},"1366":{"position":[[243,4],[1368,3]]},"1374":{"position":[[144,3]]}}}],["outgo",{"_index":1827,"t":{"394":{"position":[[116,8]]},"396":{"position":[[595,8],[634,8],[1271,8],[1350,8]]},"398":{"position":[[160,8],[716,9],[937,8],[1039,8]]},"400":{"position":[[1895,8]]},"404":{"position":[[266,8]]},"596":{"position":[[367,8],[406,8],[637,8],[716,8]]},"598":{"position":[[271,8]]},"1066":{"position":[[513,9],[734,8],[836,8]]},"1068":{"position":[[722,8],[801,8]]},"1076":{"position":[[536,8],[615,8]]},"1082":{"position":[[275,8]]},"1084":{"position":[[362,8]]},"1086":{"position":[[266,8]]},"1272":{"position":[[1293,8],[1372,8]]}}}],["outlet",{"_index":1374,"t":{"189":{"position":[[667,6]]},"212":{"position":[[223,6]]},"266":{"position":[[543,6]]},"335":{"position":[[877,6]]},"392":{"position":[[227,6],[1264,6]]},"396":{"position":[[211,6]]},"398":{"position":[[794,6]]},"402":{"position":[[291,6]]},"407":{"position":[[1264,6],[1464,6]]},"465":{"position":[[2376,6],[2865,6],[4135,6]]},"610":{"position":[[667,6]]},"917":{"position":[[581,6]]},"951":{"position":[[660,6]]},"1066":{"position":[[591,6]]},"1204":{"position":[[26,6]]},"1219":{"position":[[195,6]]},"1318":{"position":[[25,6],[164,6]]}}}],["outlin",{"_index":1773,"t":{"369":{"position":[[13,8]]},"468":{"position":[[205,7]]},"483":{"position":[[18,7]]},"1346":{"position":[[143,8]]}}}],["output",{"_index":161,"t":{"19":{"position":[[78,6],[134,6],[148,6],[165,6],[184,6],[266,6],[334,6],[416,6],[480,6],[517,6],[607,6],[724,8]]},"33":{"position":[[85,6]]},"47":{"position":[[2566,6],[2734,6]]},"70":{"position":[[265,6],[340,6],[825,6],[1148,6],[1233,6]]},"72":{"position":[[37,6]]},"85":{"position":[[26,9]]},"87":{"position":[[0,6],[240,6],[440,7],[452,6],[548,7],[955,7]]},"89":{"position":[[216,6],[1316,6]]},"168":{"position":[[786,8]]},"315":{"position":[[584,6]]},"321":{"position":[[237,6],[298,6]]},"413":{"position":[[2660,7]]},"488":{"position":[[237,6],[309,7],[609,6],[660,6],[675,7],[689,6],[751,7],[844,6],[927,7],[1099,7],[1250,6],[1350,7],[1376,6],[1392,7]]},"494":{"position":[[195,6],[332,6],[352,6],[416,7],[424,6],[440,7],[719,6],[772,7]]},"584":{"position":[[264,6]]},"707":{"position":[[274,7],[816,6],[1086,6]]},"823":{"position":[[116,6]]},"1054":{"position":[[317,7],[1140,6],[1283,7]]},"1204":{"position":[[116,6]]},"1206":{"position":[[895,6]]},"1208":{"position":[[184,6]]},"1217":{"position":[[0,6]]},"1232":{"position":[[176,6]]},"1252":{"position":[[26,6]]},"1255":{"position":[[535,7],[1493,6],[1545,6],[1623,7],[1791,6],[2007,6]]},"1257":{"position":[[18,7]]},"1269":{"position":[[205,6],[232,6]]},"1272":{"position":[[50,7],[237,7]]},"1274":{"position":[[132,6]]},"1281":{"position":[[71,6]]},"1303":{"position":[[92,6],[245,9],[335,6]]},"1318":{"position":[[325,6]]}}}],["outputfold",{"_index":2160,"t":{"488":{"position":[[706,12],[725,13]]}}}],["outputfrequ",{"_index":2157,"t":{"488":{"position":[[257,15]]}}}],["outsid",{"_index":640,"t":{"89":{"position":[[491,7],[534,7]]},"189":{"position":[[1235,8],[1388,7]]},"206":{"position":[[330,7]]},"212":{"position":[[1253,7]]},"315":{"position":[[438,7]]},"321":{"position":[[209,7]]},"359":{"position":[[896,7]]},"479":{"position":[[481,7]]},"847":{"position":[[236,7]]},"1257":{"position":[[1290,7]]},"1267":{"position":[[725,7]]},"1272":{"position":[[189,7]]},"1326":{"position":[[674,7]]}}}],["over",{"_index":365,"t":{"45":{"position":[[2397,4]]},"81":{"position":[[59,4]]},"313":{"position":[[67,5]]},"413":{"position":[[525,4],[2016,4]]},"477":{"position":[[746,4]]},"580":{"position":[[672,4]]},"610":{"position":[[47,4],[216,4],[328,4],[432,4],[1021,4],[1060,4]]},"717":{"position":[[60,4],[151,4]]},"939":{"position":[[944,5]]},"949":{"position":[[185,4]]},"951":{"position":[[47,4],[209,4],[321,4],[425,4],[1014,4],[1053,4]]},"953":{"position":[[37,4],[201,4]]},"1006":{"position":[[202,4]]},"1041":{"position":[[579,4]]},"1090":{"position":[[238,4]]},"1215":{"position":[[40,4]]},"1223":{"position":[[759,4]]},"1315":{"position":[[59,4]]},"1364":{"position":[[224,4],[257,4]]}}}],["overal",{"_index":597,"t":{"79":{"position":[[436,7]]},"227":{"position":[[4,7]]}}}],["overdefin",{"_index":1811,"t":{"388":{"position":[[324,11]]}}}],["overrid",{"_index":1635,"t":{"284":{"position":[[404,8],[725,8]]},"803":{"position":[[206,8]]}}}],["overshoot",{"_index":2261,"t":{"610":{"position":[[501,12]]},"951":{"position":[[494,12]]}}}],["overview",{"_index":1524,"t":{"232":{"position":[[48,8]]},"249":{"position":[[529,8]]},"502":{"position":[[109,8],[159,8]]},"1403":{"position":[[368,8]]}}}],["ownership",{"_index":2850,"t":{"1229":{"position":[[284,9]]}}}],["p1p_1p1",{"_index":2183,"t":{"500":{"position":[[530,8]]}}}],["p1p_{1}p1",{"_index":1550,"t":{"241":{"position":[[117,10]]}}}],["p1v1n=p2v2np_\\mathrm{1",{"_index":1981,"t":{"465":{"position":[[1152,23]]}}}],["p2p_2p2",{"_index":2184,"t":{"500":{"position":[[543,8]]}}}],["p2p_{2}p2",{"_index":1551,"t":{"241":{"position":[[132,11]]}}}],["p>just",{"_index":3077,"t":{"1344":{"position":[[328,7]]}}}],["p_1)}{liquid\\_dens",{"_index":2181,"t":{"500":{"position":[[466,21]]}}}],["p_\\mathrm{2",{"_index":1983,"t":{"465":{"position":[[1193,12]]}}}],["p_{1",{"_index":1556,"t":{"241":{"position":[[211,5]]}}}],["p_{2",{"_index":1555,"t":{"241":{"position":[[203,5]]}}}],["packag",{"_index":2559,"t":{"1199":{"position":[[1242,8]]},"1206":{"position":[[151,7]]},"1212":{"position":[[770,7]]}}}],["page",{"_index":198,"t":{"21":{"position":[[117,4]]},"502":{"position":[[95,4]]},"927":{"position":[[320,5]]},"1336":{"position":[[93,4],[355,6],[440,6]]}}}],["paragraph",{"_index":3076,"t":{"1344":{"position":[[300,9]]}}}],["parallel",{"_index":1356,"t":{"187":{"position":[[142,9]]},"335":{"position":[[312,8]]},"524":{"position":[[301,9]]},"1234":{"position":[[41,11],[122,11]]}}}],["paramet",{"_index":1503,"t":{"227":{"position":[[296,10]]},"392":{"position":[[153,10]]},"691":{"position":[[599,10]]},"874":{"position":[[72,9]]}}}],["parenthes",{"_index":1539,"t":{"236":{"position":[[462,11]]},"1223":{"position":[[632,11]]}}}],["pars",{"_index":225,"t":{"25":{"position":[[254,7]]},"1219":{"position":[[581,5],[645,5]]},"1374":{"position":[[670,7]]}}}],["part",{"_index":131,"t":{"15":{"position":[[171,6]]},"17":{"position":[[240,4]]},"87":{"position":[[839,5]]},"170":{"position":[[80,4],[260,4]]},"176":{"position":[[107,4]]},"243":{"position":[[75,4],[273,4]]},"247":{"position":[[279,4]]},"329":{"position":[[131,4],[284,4]]},"335":{"position":[[2378,4]]},"400":{"position":[[291,5],[691,4],[866,5],[1368,4]]},"402":{"position":[[478,4]]},"415":{"position":[[418,4]]},"423":{"position":[[219,4]]},"441":{"position":[[76,4]]},"445":{"position":[[333,4]]},"747":{"position":[[5,4],[185,4]]},"799":{"position":[[5,4],[203,4]]},"923":{"position":[[108,4],[158,4]]},"1368":{"position":[[361,6]]},"1392":{"position":[[301,4]]}}}],["particular",{"_index":1839,"t":{"398":{"position":[[1155,10]]},"1054":{"position":[[181,10]]}}}],["pass",{"_index":2244,"t":{"580":{"position":[[595,6]]},"1037":{"position":[[81,7]]},"1269":{"position":[[77,7]]},"1366":{"position":[[853,4]]},"1399":{"position":[[633,7]]}}}],["past",{"_index":650,"t":{"89":{"position":[[1054,4]]}}}],["patch",{"_index":2993,"t":{"1274":{"position":[[1000,7],[1150,7],[1269,7],[1454,7]]}}}],["path",{"_index":436,"t":{"47":{"position":[[1069,6],[1126,4]]},"54":{"position":[[267,5],[541,5]]},"174":{"position":[[184,5]]},"180":{"position":[[54,4]]},"441":{"position":[[693,4],[938,5]]},"486":{"position":[[75,4],[289,5]]},"488":{"position":[[719,5]]},"494":{"position":[[274,5],[346,5]]},"496":{"position":[[268,5]]},"725":{"position":[[89,5]]},"749":{"position":[[184,5]]},"768":{"position":[[14,4],[65,4]]},"1109":{"position":[[607,4]]},"1397":{"position":[[396,5]]},"1399":{"position":[[679,5]]}}}],["path/fold",{"_index":451,"t":{"47":{"position":[[1415,11]]}}}],["path/to/file.csv",{"_index":2320,"t":{"770":{"position":[[6,19]]}}}],["path_to_chart_file>.csv",{"_index":2342,"t":{"851":{"position":[[109,24]]}}}],["path_to_fil",{"_index":1957,"t":{"445":{"position":[[113,14]]}}}],["path_to_file.csv",{"_index":1393,"t":{"195":{"position":[[53,18]]},"202":{"position":[[53,18]]},"658":{"position":[[53,18]]}}}],["path_to_model1/model_data.csv",{"_index":1959,"t":{"449":{"position":[[46,30]]}}}],["path_to_tiein/tie_in_field.csv",{"_index":1960,"t":{"449":{"position":[[110,31]]}}}],["pattern",{"_index":1499,"t":{"225":{"position":[[70,7]]}}}],["payabl",{"_index":2438,"t":{"1098":{"position":[[7,7]]}}}],["pe",{"_index":2419,"t":{"1037":{"position":[[400,4]]}}}],["peng",{"_index":1182,"t":{"153":{"position":[[106,4]]},"415":{"position":[[1008,5]]}}}],["pentan",{"_index":1907,"t":{"415":{"position":[[274,8]]}}}],["pep",{"_index":3148,"t":{"1366":{"position":[[464,3],[504,3]]}}}],["per",{"_index":1036,"t":{"129":{"position":[[174,3]]},"153":{"position":[[950,3]]},"212":{"position":[[826,3]]},"225":{"position":[[224,3]]},"377":{"position":[[95,3],[347,3],[879,3]]},"413":{"position":[[195,3]]},"470":{"position":[[412,3],[669,3],[851,3],[938,3],[1003,3]]},"699":{"position":[[368,3]]},"701":{"position":[[79,3]]},"764":{"position":[[31,3]]},"939":{"position":[[605,3],[864,3],[1086,3],[1143,3]]},"941":{"position":[[27,3]]},"943":{"position":[[27,3]]},"945":{"position":[[27,3],[334,3]]},"947":{"position":[[27,3],[348,3]]},"949":{"position":[[107,3]]},"1021":{"position":[[27,3]]}}}],["percentag",{"_index":378,"t":{"45":{"position":[[2728,10],[2874,10]]},"101":{"position":[[624,10]]},"117":{"position":[[330,10]]},"127":{"position":[[980,10]]},"141":{"position":[[510,10]]},"151":{"position":[[598,10]]},"161":{"position":[[264,10]]},"195":{"position":[[279,12]]},"202":{"position":[[281,12]]},"204":{"position":[[161,10],[322,10],[502,10]]},"341":{"position":[[280,12]]},"347":{"position":[[282,12]]},"353":{"position":[[438,12]]},"361":{"position":[[242,12]]},"365":{"position":[[131,10],[232,10]]},"367":{"position":[[415,11],[438,11]]},"392":{"position":[[1970,11],[1993,11],[2383,11],[2406,11]]},"396":{"position":[[1025,11],[1048,11],[1447,11],[1470,11],[1899,11],[1922,11]]},"512":{"position":[[49,11]]},"588":{"position":[[334,10]]},"591":{"position":[[418,11],[441,11]]},"596":{"position":[[813,11],[836,11]]},"598":{"position":[[408,10],[515,10]]},"602":{"position":[[135,10]]},"604":{"position":[[418,11],[441,11]]},"653":{"position":[[122,11]]},"656":{"position":[[135,11]]},"658":{"position":[[159,12]]},"762":{"position":[[41,11]]},"851":{"position":[[92,10]]},"1068":{"position":[[476,11],[499,11],[898,11],[921,11]]},"1158":{"position":[[224,12]]},"1160":{"position":[[236,12]]},"1163":{"position":[[123,10]]},"1326":{"position":[[490,10]]}}}],["perform",{"_index":35,"t":{"4":{"position":[[292,8]]},"70":{"position":[[21,9],[422,10]]},"95":{"position":[[995,9]]},"121":{"position":[[623,9]]},"145":{"position":[[463,9]]},"170":{"position":[[624,11],[676,11],[732,11]]},"407":{"position":[[148,10]]},"465":{"position":[[630,7]]},"470":{"position":[[3484,11]]},"479":{"position":[[507,11]]}}}],["period",{"_index":563,"t":{"70":{"position":[[583,6],[958,7],[997,7]]},"253":{"position":[[223,7],[304,7]]},"580":{"position":[[679,6]]},"707":{"position":[[223,6]]},"1037":{"position":[[1097,7]]},"1041":{"position":[[593,6]]},"1054":{"position":[[928,8]]}}}],["period,period",{"_index":2710,"t":{"1212":{"position":[[910,14]]}}}],["permiss",{"_index":453,"t":{"47":{"position":[[1475,12]]}}}],["person",{"_index":3050,"t":{"1336":{"position":[[303,9]]}}}],["phase",{"_index":1737,"t":{"351":{"position":[[306,6]]},"415":{"position":[[443,5]]}}}],["physic",{"_index":62,"t":{"4":{"position":[[709,8]]}}}],["pick",{"_index":557,"t":{"70":{"position":[[468,7]]}}}],["pin",{"_index":2805,"t":{"1223":{"position":[[1210,3]]}}}],["place",{"_index":823,"t":{"107":{"position":[[101,7]]},"131":{"position":[[101,7]]},"251":{"position":[[81,6]]},"264":{"position":[[244,6]]},"707":{"position":[[880,6]]},"753":{"position":[[94,6]]}}}],["placehold",{"_index":732,"t":{"97":{"position":[[313,13],[344,13],[370,13],[395,13],[424,13],[462,12]]},"109":{"position":[[713,13],[742,13],[875,13],[904,13]]},"111":{"position":[[670,13],[765,13],[852,13],[923,13],[1004,13]]},"113":{"position":[[610,13],[691,13],[779,13]]},"115":{"position":[[30,12]]},"123":{"position":[[283,13],[314,13],[340,13],[365,13],[394,13],[432,12]]},"133":{"position":[[495,13],[524,13]]},"135":{"position":[[519,13],[607,13],[696,13],[778,13]]},"137":{"position":[[139,13],[224,13]]},"139":{"position":[[30,12]]},"147":{"position":[[209,13],[240,13],[262,13],[288,13],[317,13]]}}}],["placement",{"_index":1867,"t":{"407":{"position":[[582,9]]}}}],["plan",{"_index":40,"t":{"4":{"position":[[376,5]]},"429":{"position":[[134,8]]}}}],["platform",{"_index":1508,"t":{"227":{"position":[[1568,8]]},"249":{"position":[[195,9]]},"475":{"position":[[1257,9]]},"504":{"position":[[341,10]]},"1403":{"position":[[122,9]]}}}],["platform_a",{"_index":1597,"t":{"258":{"position":[[22,10]]}}}],["platform_b",{"_index":1598,"t":{"258":{"position":[[102,10]]}}}],["platforms/rig",{"_index":1317,"t":{"168":{"position":[[880,15]]}}}],["pleas",{"_index":280,"t":{"37":{"position":[[103,6],[281,6]]},"516":{"position":[[332,6]]},"1229":{"position":[[15,6]]},"1334":{"position":[[43,6]]},"1338":{"position":[[65,6]]},"1352":{"position":[[19,6]]},"1358":{"position":[[19,6],[282,6]]},"1360":{"position":[[0,6]]},"1362":{"position":[[57,6]]},"1366":{"position":[[1355,6]]},"1368":{"position":[[368,6]]},"1399":{"position":[[1116,6]]}}}],["plot",{"_index":2140,"t":{"479":{"position":[[628,7]]},"882":{"position":[[1333,4]]}}}],["plu",{"_index":1544,"t":{"239":{"position":[[87,4]]},"241":{"position":[[51,4]]},"1185":{"position":[[304,4]]},"1340":{"position":[[41,4]]}}}],["poetri",{"_index":2530,"t":{"1199":{"position":[[587,6]]}}}],["point",{"_index":579,"t":{"70":{"position":[[1258,5]]},"105":{"position":[[169,6]]},"159":{"position":[[2063,6]]},"189":{"position":[[326,5],[1381,6]]},"212":{"position":[[91,5],[366,5],[1039,5]]},"321":{"position":[[202,6]]},"327":{"position":[[113,5]]},"335":{"position":[[745,5]]},"337":{"position":[[242,5]]},"345":{"position":[[250,6],[534,6]]},"351":{"position":[[679,5],[730,6],[947,5],[1038,5],[1162,7]]},"359":{"position":[[376,5],[508,5],[679,5],[792,6],[831,6],[889,6],[921,5],[1066,6],[1085,6],[1228,6],[1466,6]]},"392":{"position":[[880,5]]},"407":{"position":[[622,7],[720,5],[758,6],[830,5],[1014,6],[1376,6],[1657,6]]},"470":{"position":[[2457,6],[2675,6],[3201,6],[3451,6]]},"477":{"position":[[930,7]]},"479":{"position":[[472,5],[589,6]]},"550":{"position":[[112,6]]},"588":{"position":[[198,6]]},"707":{"position":[[745,6]]},"1257":{"position":[[824,5]]},"1272":{"position":[[377,6]]},"1324":{"position":[[79,5]]}}}],["polytrop",{"_index":1189,"t":{"153":{"position":[[461,10]]},"195":{"position":[[172,11]]},"202":{"position":[[174,11]]},"335":{"position":[[1206,10],[1558,10]]},"341":{"position":[[165,11],[238,11],[412,10],[478,10]]},"347":{"position":[[167,11],[240,11],[415,10],[481,10],[644,10],[710,10]]},"351":{"position":[[1615,10],[1740,10],[1762,11]]},"353":{"position":[[131,11],[236,10],[323,11],[396,11]]},"361":{"position":[[124,11],[200,11]]},"388":{"position":[[643,10]]},"465":{"position":[[721,10],[989,10],[1110,10],[1254,10],[1545,10],[1803,10],[1954,10],[2264,10],[2430,10],[2508,10]]},"477":{"position":[[830,10]]},"617":{"position":[[218,10],[284,10]]},"624":{"position":[[221,10],[287,10],[450,10],[516,10]]},"838":{"position":[[64,11]]},"840":{"position":[[60,11]]},"1158":{"position":[[117,11]]},"1160":{"position":[[121,11],[194,11]]}}}],["polytropic\\_efficiency}{\\kappa",{"_index":2007,"t":{"465":{"position":[[2034,30]]}}}],["polytropic_effici",{"_index":775,"t":{"105":{"position":[[411,22]]},"117":{"position":[[822,22]]},"153":{"position":[[1455,22]]},"161":{"position":[[739,22]]},"353":{"position":[[108,22]]},"355":{"position":[[120,22]]},"361":{"position":[[101,22]]},"363":{"position":[[106,22]]},"382":{"position":[[120,22]]}}}],["polytropic_efficiencyκ−1\\frac{\\kappa",{"_index":2006,"t":{"465":{"position":[[1993,38]]}}}],["polytropic_head=nn−1zrt1mw((p1p2)n−1n−1)polytropic\\_head",{"_index":1991,"t":{"465":{"position":[[1583,56]]}}}],["poorli",{"_index":2460,"t":{"1187":{"position":[[144,6]]}}}],["portfolio",{"_index":77,"t":{"4":{"position":[[971,9]]}}}],["posit",{"_index":613,"t":{"87":{"position":[[123,8]]},"107":{"position":[[1183,9]]},"115":{"position":[[183,9],[1822,9]]},"241":{"position":[[306,9]]},"554":{"position":[[94,9]]},"610":{"position":[[894,8],[933,8]]},"951":{"position":[[887,8],[926,8]]}}}],["possibl",{"_index":294,"t":{"43":{"position":[[117,9]]},"45":{"position":[[259,8],[1446,8],[1919,8],[4943,8],[5166,8]]},"47":{"position":[[544,8],[930,9]]},"52":{"position":[[119,9]]},"54":{"position":[[939,13]]},"70":{"position":[[1208,8]]},"131":{"position":[[1180,8]]},"212":{"position":[[718,8]]},"216":{"position":[[338,8]]},"335":{"position":[[2153,8]]},"343":{"position":[[299,8]]},"349":{"position":[[602,8]]},"351":{"position":[[571,8]]},"365":{"position":[[44,8]]},"407":{"position":[[189,8]]},"413":{"position":[[268,8]]},"443":{"position":[[109,8]]},"516":{"position":[[296,8]]},"524":{"position":[[161,8]]},"588":{"position":[[727,8]]},"602":{"position":[[399,8]]},"610":{"position":[[623,8],[727,8],[1065,9]]},"707":{"position":[[1048,8]]},"717":{"position":[[6,8]]},"882":{"position":[[571,8]]},"915":{"position":[[44,8]]},"951":{"position":[[616,8],[720,8],[1058,9]]},"1269":{"position":[[39,8]]},"1272":{"position":[[616,8]]},"1287":{"position":[[259,8]]},"1318":{"position":[[229,8]]},"1324":{"position":[[42,8]]},"1332":{"position":[[95,8]]}}}],["potenti",{"_index":641,"t":{"89":{"position":[[521,12]]},"260":{"position":[[285,9]]},"359":{"position":[[978,9],[1393,9]]},"465":{"position":[[4088,11]]},"1364":{"position":[[81,9]]}}}],["power",{"_index":343,"t":{"45":{"position":[[1698,5],[1785,5],[1882,5],[2072,5],[2093,5]]},"60":{"position":[[507,5]]},"95":{"position":[[1193,5],[1296,5],[1416,5],[1611,5],[1981,5]]},"111":{"position":[[56,5],[159,5]]},"113":{"position":[[56,5],[158,5]]},"119":{"position":[[399,6]]},"121":{"position":[[819,5],[881,5],[999,5],[1192,5]]},"135":{"position":[[56,5],[159,5]]},"139":{"position":[[402,5]]},"145":{"position":[[659,5],[718,5],[804,5],[865,5],[948,5]]},"151":{"position":[[341,5]]},"159":{"position":[[106,5]]},"164":{"position":[[11,6]]},"168":{"position":[[337,5],[935,5]]},"176":{"position":[[71,5],[259,5]]},"182":{"position":[[42,6]]},"184":{"position":[[22,5]]},"189":{"position":[[1318,5]]},"206":{"position":[[206,5]]},"208":{"position":[[20,5],[33,5]]},"210":{"position":[[799,5]]},"212":{"position":[[909,5],[940,5]]},"216":{"position":[[0,5],[244,5],[281,5],[358,5],[408,5],[456,5],[620,5]]},"218":{"position":[[15,5]]},"221":{"position":[[5,5]]},"223":{"position":[[41,5]]},"236":{"position":[[438,5]]},"253":{"position":[[848,5]]},"282":{"position":[[662,6]]},"284":{"position":[[800,5]]},"289":{"position":[[123,6],[144,5],[343,5]]},"294":{"position":[[5,5],[135,5]]},"296":{"position":[[58,6],[235,5],[422,5],[525,5],[696,5]]},"373":{"position":[[320,5]]},"375":{"position":[[787,5]]},"390":{"position":[[1097,5]]},"392":{"position":[[2590,5]]},"396":{"position":[[2065,5]]},"431":{"position":[[125,5]]},"435":{"position":[[133,5]]},"465":{"position":[[104,5],[1337,5]]},"470":{"position":[[1041,5],[1439,5],[1490,10],[2853,5],[3083,5],[3103,9],[3384,9]]},"475":{"position":[[9,5],[1044,5]]},"477":{"position":[[128,5],[470,5]]},"479":{"position":[[725,5]]},"481":{"position":[[413,5]]},"488":{"position":[[1460,6]]},"500":{"position":[[209,5]]},"512":{"position":[[296,6]]},"516":{"position":[[1330,5],[1486,6],[1742,5]]},"564":{"position":[[29,5]]},"576":{"position":[[265,6]]},"664":{"position":[[64,5],[234,5],[451,5]]},"762":{"position":[[260,6]]},"847":{"position":[[318,5],[499,5]]},"900":{"position":[[82,5]]},"902":{"position":[[155,6]]},"962":{"position":[[79,5]]},"970":{"position":[[42,5],[107,5],[175,5],[237,5],[261,5],[496,5],[546,5]]},"1041":{"position":[[76,5]]},"1129":{"position":[[76,5]]},"1136":{"position":[[125,5]]},"1223":{"position":[[220,5],[1451,5]]},"1236":{"position":[[47,5]]},"1242":{"position":[[1089,5]]},"1250":{"position":[[51,5],[385,5],[412,5],[713,5],[801,5],[829,5],[914,5],[1341,5],[1471,5]]},"1255":{"position":[[692,5]]},"1262":{"position":[[0,5]]},"1267":{"position":[[12,5],[137,5],[190,5],[275,6],[302,5]]},"1272":{"position":[[249,5],[1557,5],[1711,5]]},"1274":{"position":[[783,5],[874,5],[952,5]]},"1281":{"position":[[162,5]]},"1283":{"position":[[12,5]]},"1336":{"position":[[164,5]]},"1374":{"position":[[9,8]]}}}],["power,fuel",{"_index":1099,"t":{"143":{"position":[[379,10]]}}}],["power/energi",{"_index":2452,"t":{"1185":{"position":[[463,12]]}}}],["power=head∗mass_rateefficiency.pow",{"_index":2176,"t":{"500":{"position":[[249,36]]}}}],["power=polytropic_head∗mass_rateefficiencypow",{"_index":1988,"t":{"465":{"position":[[1376,46]]}}}],["power_adjustment_const",{"_index":1626,"t":{"280":{"position":[[558,26]]},"373":{"position":[[195,26]]},"375":{"position":[[662,26]]},"377":{"position":[[1070,26]]},"390":{"position":[[972,26]]},"392":{"position":[[2465,26]]},"431":{"position":[[253,26]]},"433":{"position":[[284,26]]},"437":{"position":[[397,26]]},"439":{"position":[[185,26],[513,26]]},"911":{"position":[[284,26]]},"960":{"position":[[9,25]]},"964":{"position":[[52,26]]},"966":{"position":[[87,26]]},"1124":{"position":[[284,26]]},"1131":{"position":[[284,26]]},"1136":{"position":[[253,26]]},"1138":{"position":[[284,26]]},"1185":{"position":[[401,25]]}}}],["power_from_shor",{"_index":2931,"t":{"1250":{"position":[[686,16]]},"1255":{"position":[[665,16]]}}}],["power_loss_factor",{"_index":2707,"t":{"1212":{"position":[[809,17]]}}}],["power_r",{"_index":2960,"t":{"1257":{"position":[[995,10]]},"1281":{"position":[[148,10]]}}}],["powerlossfactor",{"_index":1632,"t":{"282":{"position":[[645,16]]},"470":{"position":[[3337,15]]},"481":{"position":[[593,16]]},"713":{"position":[[244,15]]},"715":{"position":[[590,15]]},"902":{"position":[[138,16]]},"968":{"position":[[45,15]]},"970":{"position":[[198,15]]},"972":{"position":[[0,16]]},"974":{"position":[[0,16],[22,16]]},"1208":{"position":[[89,15]]}}}],["powerlossfactor}powerrequired​=1−powerlossfactorpowersubsea",{"_index":2383,"t":{"970":{"position":[[383,61]]}}}],["powerrequired=powersubsea1−powerlossfactorpower_{requir",{"_index":2381,"t":{"970":{"position":[[298,58]]}}}],["powersubseapower_{subsea}powersubsea",{"_index":2384,"t":{"970":{"position":[[451,37]]}}}],["pr",{"_index":1184,"t":{"153":{"position":[[120,4],[1073,2]]},"161":{"position":[[357,2]]},"415":{"position":[[954,3],[1005,2]]},"421":{"position":[[242,2]]},"1229":{"position":[[22,2]]},"1360":{"position":[[215,3]]}}}],["practic",{"_index":627,"t":{"87":{"position":[[530,9]]},"91":{"position":[[56,8]]},"407":{"position":[[669,8]]},"550":{"position":[[227,9]]},"882":{"position":[[1408,9]]},"1366":{"position":[[806,12]]}}}],["pre",{"_index":307,"t":{"45":{"position":[[298,3],[4982,3],[5080,3],[5256,3]]},"189":{"position":[[39,3]]},"371":{"position":[[651,4]]},"516":{"position":[[205,3]]},"1199":{"position":[[945,3]]},"1229":{"position":[[356,3]]},"1287":{"position":[[298,3]]},"1364":{"position":[[11,3]]},"1366":{"position":[[15,3]]}}}],["pre>stat",{"_index":3089,"t":{"1344":{"position":[[605,26]]}}}],["preced",{"_index":1520,"t":{"227":{"position":[[2685,9]]}}}],["precompressor",{"_index":670,"t":{"91":{"position":[[468,13]]}}}],["predefin",{"_index":786,"t":{"105":{"position":[[796,10]]},"117":{"position":[[1207,10]]},"337":{"position":[[131,10],[161,10]]},"359":{"position":[[1048,10]]},"382":{"position":[[296,10]]},"384":{"position":[[593,10]]},"386":{"position":[[154,10]]},"417":{"position":[[10,10]]},"419":{"position":[[83,10],[138,10]]},"421":{"position":[[14,10],[104,10],[220,10],[409,10]]},"524":{"position":[[23,10]]},"787":{"position":[[58,10]]},"1303":{"position":[[22,10]]}}}],["predefined_single_speed_compressor_chart",{"_index":1691,"t":{"343":{"position":[[16,40]]},"619":{"position":[[16,40]]}}}],["predefined_variable_speed_compressor_chart",{"_index":782,"t":{"105":{"position":[[545,42],[1455,42]]},"117":{"position":[[956,42],[1864,42]]},"349":{"position":[[16,42]]},"380":{"position":[[16,42],[900,42]]},"384":{"position":[[114,42],[893,42]]},"626":{"position":[[16,42]]},"660":{"position":[[16,42]]},"843":{"position":[[16,42]]},"1165":{"position":[[16,42]]}}}],["predict",{"_index":2195,"t":{"508":{"position":[[69,9]]},"1232":{"position":[[206,9]]},"1303":{"position":[[122,9]]}}}],["prefer",{"_index":3166,"t":{"1366":{"position":[[980,10]]}}}],["prefix",{"_index":185,"t":{"19":{"position":[[714,6]]},"488":{"position":[[801,7],[833,6]]},"1212":{"position":[[1003,6]]},"1397":{"position":[[270,8]]},"1399":{"position":[[429,8]]}}}],["prepar",{"_index":460,"t":{"47":{"position":[[2300,7]]},"1285":{"position":[[79,7]]},"1295":{"position":[[79,7]]},"1313":{"position":[[79,7]]}}}],["prerequisit",{"_index":3025,"t":{"1332":{"position":[[283,14]]}}}],["presampl",{"_index":1949,"t":{"439":{"position":[[237,10]]}}}],["present",{"_index":588,"t":{"76":{"position":[[266,9]]},"193":{"position":[[251,7],[363,7]]},"554":{"position":[[55,7]]},"1041":{"position":[[177,7]]}}}],["preserv",{"_index":2969,"t":{"1265":{"position":[[530,9]]}}}],["pressur",{"_index":67,"t":{"4":{"position":[[771,9]]},"56":{"position":[[515,9]]},"91":{"position":[[449,8]]},"95":{"position":[[1530,8],[1563,8]]},"115":{"position":[[1855,8],[1878,8]]},"121":{"position":[[1113,8],[1146,8]]},"139":{"position":[[1246,8],[1269,8],[3259,8]]},"153":{"position":[[876,8],[935,8]]},"159":{"position":[[594,10],[1328,8],[2197,8]]},"189":{"position":[[71,9],[635,8],[716,8],[849,8]]},"212":{"position":[[114,9],[212,10],[230,9],[387,9],[407,9],[1490,8],[1554,8]]},"234":{"position":[[279,8],[334,8],[401,8]]},"241":{"position":[[107,9]]},"253":{"position":[[318,8]]},"266":{"position":[[451,8],[522,8],[550,8]]},"268":{"position":[[257,8],[309,8]]},"278":{"position":[[127,10]]},"280":{"position":[[264,9],[415,8],[467,8],[537,8],[901,8],[953,8]]},"305":{"position":[[66,9]]},"307":{"position":[[192,8],[244,8]]},"327":{"position":[[446,8],[498,8]]},"335":{"position":[[768,9],[866,10],[884,9],[1311,8],[1353,8],[1409,9],[1794,9],[1836,8],[2100,10],[2268,8],[2447,8],[2529,9]]},"351":{"position":[[1491,8]]},"365":{"position":[[829,10]]},"369":{"position":[[296,9]]},"371":{"position":[[108,9],[162,8]]},"377":{"position":[[80,8],[123,8],[290,8],[332,8],[864,8]]},"388":{"position":[[360,8],[383,9],[422,8],[523,9],[547,10]]},"390":{"position":[[135,8],[306,8],[339,8],[614,9],[875,9]]},"392":{"position":[[211,8],[270,9],[588,10],[1093,10],[1250,9],[1886,9],[2299,9],[2838,8]]},"394":{"position":[[146,8]]},"396":{"position":[[941,9],[1512,9],[1618,9],[1666,9],[1964,9]]},"398":{"position":[[1138,8]]},"400":{"position":[[366,9],[569,8],[788,9],[1014,8],[1109,8],[1291,8],[1481,8],[1939,8],[2067,9]]},"402":{"position":[[14,8],[147,8],[298,9],[351,8],[387,8],[418,8],[445,9],[530,8]]},"407":{"position":[[963,8],[1084,9],[1166,8],[1271,8],[1471,10]]},"409":{"position":[[545,8],[699,8],[735,9],[874,8],[1012,9],[1131,8],[1150,8],[1226,8],[1248,9],[1312,8],[1352,9]]},"411":{"position":[[151,8],[202,8],[293,8],[324,8],[428,8],[451,9],[486,8],[706,8],[754,8],[806,8],[893,9],[916,8],[999,8],[1044,8],[1183,8],[1243,9]]},"413":{"position":[[929,8],[1125,9],[1348,9],[1568,9],[1963,8],[2006,9],[2120,8],[2180,8]]},"415":{"position":[[628,8]]},"449":{"position":[[232,9]]},"465":{"position":[[303,9],[446,8],[1569,9],[2383,8],[2598,9],[2970,8],[3015,8],[3251,8],[3333,9],[3650,8],[3711,9],[3731,8],[4074,9],[4171,8],[4297,10]]},"470":{"position":[[511,13],[560,13],[842,8],[929,8]]},"475":{"position":[[620,9],[661,9]]},"500":{"position":[[398,9],[587,10]]},"588":{"position":[[695,10]]},"596":{"position":[[878,9],[984,9],[1032,9]]},"602":{"position":[[367,10]]},"610":{"position":[[464,8],[565,8],[641,8],[674,8],[709,9],[739,9]]},"638":{"position":[[29,8]]},"640":{"position":[[31,8]]},"646":{"position":[[162,8],[220,8],[348,10]]},"882":{"position":[[419,8]]},"892":{"position":[[197,8],[268,8]]},"894":{"position":[[984,8],[1122,9],[1273,9]]},"896":{"position":[[164,8],[419,8]]},"915":{"position":[[63,8],[145,8],[187,9]]},"917":{"position":[[218,9],[330,9],[362,8],[430,8],[498,8],[683,8],[719,8]]},"919":{"position":[[189,8]]},"939":{"position":[[382,8],[475,8],[585,8],[633,8],[730,8],[844,8]]},"945":{"position":[[63,8],[228,8],[314,8]]},"947":{"position":[[65,8],[238,8],[328,8]]},"951":{"position":[[457,8],[558,8],[634,8],[667,8],[702,9],[732,9]]},"977":{"position":[[133,8],[300,8]]},"979":{"position":[[93,8]]},"1068":{"position":[[392,9],[963,9],[1069,9],[1117,9]]},"1090":{"position":[[27,8],[208,8],[280,8]]},"1092":{"position":[[27,8]]},"1169":{"position":[[162,8],[219,8],[347,10]]},"1185":{"position":[[153,10]]},"1199":{"position":[[668,9],[751,9],[918,9],[1409,9]]},"1204":{"position":[[33,9],[103,9]]},"1206":{"position":[[929,9]]},"1208":{"position":[[171,9]]},"1210":{"position":[[4,8],[42,8]]},"1219":{"position":[[21,8],[490,8],[534,8]]},"1223":{"position":[[289,8],[372,9],[512,8],[539,8],[597,8],[1519,8]]},"1240":{"position":[[69,8]]},"1250":{"position":[[1219,8]]},"1257":{"position":[[1066,9],[1150,9]]},"1260":{"position":[[30,8],[239,8]]},"1267":{"position":[[75,8]]},"1272":{"position":[[714,8]]},"1274":{"position":[[503,8],[527,8],[1184,8]]},"1305":{"position":[[195,8]]},"1318":{"position":[[43,9],[103,8],[171,9],[208,10],[280,10]]},"1320":{"position":[[308,9]]},"1324":{"position":[[395,9]]}}}],["pressure/suct",{"_index":1898,"t":{"413":{"position":[[1989,16]]}}}],["pressure_control",{"_index":1756,"t":{"357":{"position":[[130,17]]},"388":{"position":[[830,17]]},"390":{"position":[[105,17]]},"392":{"position":[[2808,17]]},"917":{"position":[[96,16]]},"919":{"position":[[105,17]]},"977":{"position":[[0,16]]},"979":{"position":[[63,17]]},"981":{"position":[[78,17]]},"1265":{"position":[[23,16],[103,17]]}}}],["pressure_drop_ahead_of_stag",{"_index":1817,"t":{"390":{"position":[[584,29],[845,29]]},"392":{"position":[[1856,29],[2269,29]]},"396":{"position":[[911,29],[1482,29],[1934,29]]},"398":{"position":[[1056,28]]},"596":{"position":[[848,29]]},"1068":{"position":[[362,29],[933,29]]}}}],["prevent",{"_index":599,"t":{"79":{"position":[[502,7]]},"1368":{"position":[[563,7]]}}}],["preview",{"_index":3039,"t":{"1332":{"position":[[564,7],[661,7]]}}}],["previou",{"_index":485,"t":{"54":{"position":[[693,8]]},"398":{"position":[[815,8]]},"882":{"position":[[961,8]]},"1066":{"position":[[612,8]]}}}],["previous",{"_index":355,"t":{"45":{"position":[[2204,10]]},"47":{"position":[[672,10],[853,10]]},"54":{"position":[[146,11],[1002,10]]},"56":{"position":[[0,10]]},"70":{"position":[[433,10],[1069,10]]},"76":{"position":[[70,10]]},"79":{"position":[[214,10]]},"157":{"position":[[34,10]]},"159":{"position":[[479,10]]},"413":{"position":[[3,10]]},"880":{"position":[[46,10]]},"1074":{"position":[[187,10]]},"1185":{"position":[[653,10]]},"1267":{"position":[[593,10]]},"1274":{"position":[[1404,10]]},"1392":{"position":[[256,10]]}}}],["price",{"_index":757,"t":{"103":{"position":[[222,7],[324,6],[501,6]]},"117":{"position":[[370,6],[547,6]]},"129":{"position":[[269,5],[331,6]]},"141":{"position":[[550,6]]},"155":{"position":[[200,6]]},"161":{"position":[[1074,6]]},"227":{"position":[[952,5]]},"243":{"position":[[337,5]]},"245":{"position":[[52,6],[65,6],[140,6],[153,6]]},"247":{"position":[[284,6],[301,5],[503,6],[639,6]]},"441":{"position":[[608,7]]},"691":{"position":[[224,5],[276,5],[374,5]]},"799":{"position":[[267,5]]},"983":{"position":[[13,5]]},"985":{"position":[[9,5],[104,5],[122,5],[227,5],[238,5]]},"987":{"position":[[27,6],[34,7]]},"990":{"position":[[27,6]]},"992":{"position":[[59,5]]},"1105":{"position":[[58,5]]},"1109":{"position":[[522,7]]}}}],["price/valu",{"_index":1033,"t":{"129":{"position":[[68,11]]}}}],["priorit",{"_index":2961,"t":{"1257":{"position":[[1254,11]]}}}],["prioritazion",{"_index":2959,"t":{"1257":{"position":[[581,12]]}}}],["problem",{"_index":1601,"t":{"260":{"position":[[331,7]]},"388":{"position":[[313,7]]},"413":{"position":[[216,7]]},"1255":{"position":[[235,8]]},"1326":{"position":[[608,7]]}}}],["process",{"_index":21,"t":{"4":{"position":[[120,11],[797,10],[1064,10]]},"101":{"position":[[30,10]]},"127":{"position":[[30,10]]},"227":{"position":[[2037,10],[2251,9],[2304,9],[2335,9]]},"264":{"position":[[482,7]]},"345":{"position":[[804,7]]},"351":{"position":[[276,7]]},"415":{"position":[[557,8]]},"465":{"position":[[129,8],[377,8],[927,7],[1000,8],[1121,7],[2247,8],[2275,7],[3937,7]]},"468":{"position":[[41,7]]},"496":{"position":[[47,10]]},"580":{"position":[[1016,7]]},"584":{"position":[[441,7]]},"856":{"position":[[111,10]]},"953":{"position":[[133,9]]},"1037":{"position":[[838,7]]},"1041":{"position":[[428,7],[490,7]]},"1346":{"position":[[156,7],[554,8]]},"1356":{"position":[[254,7]]},"1392":{"position":[[224,8]]}}}],["produc",{"_index":446,"t":{"47":{"position":[[1260,8]]},"95":{"position":[[1382,8]]},"111":{"position":[[240,8]]},"121":{"position":[[967,8]]},"135":{"position":[[240,8],[629,8]]},"139":{"position":[[832,8],[1303,8],[1982,8],[2046,8],[2184,8]]},"141":{"position":[[1988,8]]},"145":{"position":[[767,8]]},"176":{"position":[[50,9],[132,7]]},"241":{"position":[[37,8]]},"470":{"position":[[93,10],[115,10],[139,10]]},"823":{"position":[[558,8]]},"985":{"position":[[60,8]]},"1344":{"position":[[52,8]]}}}],["produced_water_reinjection_condit",{"_index":1049,"t":{"131":{"position":[[773,37]]},"139":{"position":[[991,36],[1085,36]]},"141":{"position":[[1161,37]]}}}],["produced_water_reinjection_total_system_rate_m3_per_day",{"_index":1050,"t":{"131":{"position":[[840,56]]},"141":{"position":[[1228,56]]}}}],["product",{"_index":20,"t":{"4":{"position":[[105,10],[424,10],[750,10]]},"60":{"position":[[113,10]]},"95":{"position":[[574,10],[789,10],[1175,10],[1208,10],[1471,10],[1716,10],[1963,10],[1996,10]]},"111":{"position":[[197,10],[599,10],[634,10]]},"113":{"position":[[195,10],[539,10],[574,10]]},"115":{"position":[[83,10],[207,10],[242,10],[3520,10],[3573,10],[3608,10],[4126,10]]},"117":{"position":[[2636,10],[2671,10],[4521,10],[4556,10]]},"121":{"position":[[372,10],[803,10],[1054,10],[1297,10]]},"131":{"position":[[1116,10]]},"135":{"position":[[197,10],[463,10]]},"139":{"position":[[83,10],[144,10],[934,10],[1189,10],[1834,10]]},"141":{"position":[[1596,10]]},"145":{"position":[[184,10],[643,10]]},"168":{"position":[[211,10]]},"206":{"position":[[162,11]]},"249":{"position":[[209,10]]},"475":{"position":[[501,10]]},"516":{"position":[[600,10],[763,10],[816,10],[934,10]]},"520":{"position":[[55,10]]},"550":{"position":[[319,10],[388,11]]},"554":{"position":[[80,10],[144,10]]},"830":{"position":[[49,10]]},"1037":{"position":[[378,10]]},"1336":{"position":[[322,8]]},"1403":{"position":[[136,10]]}}}],["production_data.csv",{"_index":735,"t":{"99":{"position":[[81,20]]},"125":{"position":[[81,20],[300,19]]},"141":{"position":[[42,19]]},"143":{"position":[[709,19]]}}}],["production_load",{"_index":2231,"t":{"554":{"position":[[112,15]]}}}],["profil",{"_index":44,"t":{"4":{"position":[[449,8]]},"168":{"position":[[222,8]]},"227":{"position":[[323,10]]},"441":{"position":[[590,8]]},"470":{"position":[[53,8]]},"473":{"position":[[15,8]]},"1109":{"position":[[504,8]]}}}],["prognosi",{"_index":32,"t":{"4":{"position":[[253,9]]},"488":{"position":[[956,9],[1129,9]]}}}],["program",{"_index":123,"t":{"13":{"position":[[58,11]]}}}],["programmat",{"_index":130,"t":{"15":{"position":[[122,16]]},"35":{"position":[[139,16]]}}}],["project",{"_index":1367,"t":{"189":{"position":[[486,9]]},"1346":{"position":[[56,8],[73,7]]},"1354":{"position":[[21,8]]},"1376":{"position":[[163,7]]},"1392":{"position":[[174,7]]},"1397":{"position":[[137,7]]},"1399":{"position":[[52,7],[148,7]]}}}],["prone",{"_index":3003,"t":{"1297":{"position":[[323,6]]}}}],["propan",{"_index":1206,"t":{"153":{"position":[[1201,8]]},"161":{"position":[[485,8]]},"380":{"position":[[606,8]]},"415":{"position":[[257,8]]},"425":{"position":[[260,8]]},"427":{"position":[[201,8]]}}}],["proper",{"_index":2977,"t":{"1267":{"position":[[766,6]]}}}],["properli",{"_index":2986,"t":{"1272":{"position":[[1656,9]]}}}],["properti",{"_index":1922,"t":{"415":{"position":[[898,10]]},"465":{"position":[[3147,8]]},"1212":{"position":[[692,10]]},"1320":{"position":[[140,10]]}}}],["properties/st",{"_index":1819,"t":{"392":{"position":[[119,16]]}}}],["propos",{"_index":202,"t":{"21":{"position":[[170,8]]}}}],["proven",{"_index":594,"t":{"79":{"position":[[367,6]]}}}],["provid",{"_index":295,"t":{"43":{"position":[[131,7]]},"52":{"position":[[133,7]]},"60":{"position":[[169,8],[319,8]]},"212":{"position":[[899,7]]},"216":{"position":[[317,9],[465,9],[537,9]]},"488":{"position":[[985,8],[1158,8]]},"707":{"position":[[442,7],[594,7],[647,8]]},"917":{"position":[[478,7]]},"1054":{"position":[[467,7],[620,8]]},"1252":{"position":[[152,9]]},"1267":{"position":[[265,9]]},"1336":{"position":[[213,8]]},"1399":{"position":[[1123,7]]}}}],["publish",{"_index":2922,"t":{"1247":{"position":[[7,7]]}}}],["pull",{"_index":3113,"t":{"1346":{"position":[[114,4]]},"1354":{"position":[[76,4],[184,4]]},"1356":{"position":[[7,4],[111,4]]},"1360":{"position":[[24,4],[72,4],[247,4]]},"1384":{"position":[[4,4]]},"1397":{"position":[[58,4],[890,4]]},"1399":{"position":[[614,4],[857,4],[1090,4],[1316,4]]}}}],["pump",{"_index":54,"t":{"4":{"position":[[577,5]]},"45":{"position":[[117,4],[2145,4],[2188,4],[3232,4]]},"89":{"position":[[459,6]]},"95":{"position":[[670,4],[709,4],[1409,4],[1517,4],[1604,4]]},"101":{"position":[[135,4],[265,4]]},"111":{"position":[[267,4],[296,5],[803,4],[827,4],[881,4],[898,4]]},"115":{"position":[[1498,4],[1680,4],[2036,4],[2060,4],[2103,6],[2753,4],[2920,4],[2963,4],[2980,4],[3011,4]]},"117":{"position":[[3257,4],[3281,4],[3324,6],[3982,4],[3999,4],[4030,4]]},"121":{"position":[[460,6],[495,6],[994,4],[1100,4],[1187,4]]},"127":{"position":[[135,4],[298,5],[323,4]]},"135":{"position":[[268,4],[297,5],[656,4],[671,4],[738,4],[753,4]]},"139":{"position":[[859,4],[1051,4],[1330,4],[1345,4],[1376,4],[1631,4],[2515,4],[2530,4]]},"141":{"position":[[2015,4],[2030,4],[2061,4],[2320,4],[2335,4]]},"145":{"position":[[291,6],[314,6],[860,4],[943,4]]},"151":{"position":[[104,4],[205,4],[251,4]]},"159":{"position":[[251,5],[468,6],[513,4],[655,5],[706,4],[776,5],[824,5],[857,4],[920,4],[989,4],[1014,4],[1046,4],[1094,4],[1204,4],[1226,4],[1393,4],[1436,6],[2515,5]]},"161":{"position":[[1408,4],[1451,6]]},"170":{"position":[[691,5],[697,5],[1099,4]]},"172":{"position":[[115,4]]},"187":{"position":[[0,5],[62,7],[133,5],[166,4],[285,5],[431,5]]},"189":{"position":[[17,5],[124,4],[148,6],[178,4],[216,5],[235,5],[245,4],[372,4],[798,4],[896,5],[919,6],[1024,4],[1244,4]]},"191":{"position":[[0,4],[33,5]]},"193":{"position":[[187,5],[399,4],[470,4]]},"195":{"position":[[245,5]]},"198":{"position":[[0,4],[41,5]]},"202":{"position":[[247,5]]},"303":{"position":[[0,4]]},"305":{"position":[[22,5],[32,4],[149,4]]},"307":{"position":[[26,4],[130,4]]},"309":{"position":[[26,4]]},"313":{"position":[[18,5]]},"315":{"position":[[72,6],[129,4]]},"317":{"position":[[38,6]]},"463":{"position":[[32,4]]},"470":{"position":[[673,9],[1123,10],[1284,5],[2074,4],[2547,10]]},"475":{"position":[[907,6],[943,6]]},"479":{"position":[[368,6]]},"481":{"position":[[313,4]]},"500":{"position":[[41,4],[112,6],[227,4],[560,4],[666,4],[728,5],[787,5],[810,6],[915,4]]},"508":{"position":[[51,6],[526,4]]},"516":{"position":[[1189,4],[1207,6],[1229,6]]},"653":{"position":[[46,4],[436,6]]},"658":{"position":[[125,5]]},"713":{"position":[[260,5]]},"715":{"position":[[427,4]]},"721":{"position":[[175,4]]},"776":{"position":[[37,4]]},"835":{"position":[[40,4],[422,6]]},"840":{"position":[[25,5]]},"847":{"position":[[17,4],[244,4]]},"939":{"position":[[1033,4],[1090,5]]},"958":{"position":[[676,6]]},"994":{"position":[[45,5]]},"996":{"position":[[25,5],[73,4],[159,4]]},"998":{"position":[[38,6],[95,4]]},"1000":{"position":[[38,6]]},"1002":{"position":[[33,4],[88,6]]},"1014":{"position":[[137,4]]},"1016":{"position":[[51,5]]},"1018":{"position":[[28,4]]},"1021":{"position":[[376,4],[396,6],[413,4]]},"1023":{"position":[[38,6],[53,5],[98,5]]},"1025":{"position":[[38,6]]},"1039":{"position":[[537,4]]},"1148":{"position":[[18,4]]},"1155":{"position":[[45,4],[122,5]]},"1158":{"position":[[25,5],[190,5]]},"1185":{"position":[[291,4]]},"1193":{"position":[[4,4]]},"1199":{"position":[[288,4]]},"1206":{"position":[[255,4],[1070,4]]},"1217":{"position":[[7,4]]},"1219":{"position":[[709,4]]},"1242":{"position":[[862,4]]},"1277":{"position":[[64,4]]},"1281":{"position":[[44,4]]},"1287":{"position":[[117,4]]},"1309":{"position":[[46,4],[92,4]]}}}],["pump'",{"_index":1363,"t":{"189":{"position":[[268,6]]}}}],["pump/compressor",{"_index":642,"t":{"89":{"position":[[546,15]]}}}],["pump1",{"_index":881,"t":{"115":{"position":[[2118,5]]},"117":{"position":[[3339,5]]},"317":{"position":[[53,5]]},"958":{"position":[[691,5]]},"1000":{"position":[[53,5]]},"1025":{"position":[[53,5]]}}}],["pump2",{"_index":882,"t":{"115":{"position":[[2150,5]]},"117":{"position":[[3371,5]]},"317":{"position":[[105,5]]},"958":{"position":[[743,5]]},"1000":{"position":[[105,5]]},"1025":{"position":[[105,5]]}}}],["pump3",{"_index":883,"t":{"115":{"position":[[2182,5]]},"117":{"position":[[3403,5]]}}}],["pump4",{"_index":884,"t":{"115":{"position":[[2214,5]]},"117":{"position":[[3435,5]]}}}],["pump_",{"_index":2408,"t":{"1002":{"position":[[275,6]]}}}],["pump_a",{"_index":2400,"t":{"1002":{"position":[[103,6]]}}}],["pump_a_lp",{"_index":1240,"t":{"159":{"position":[[1451,9]]},"161":{"position":[[1466,9]]}}}],["pump_b",{"_index":2402,"t":{"1002":{"position":[[146,6]]}}}],["pump_b_lp",{"_index":1241,"t":{"159":{"position":[[1483,9]]},"161":{"position":[[1498,9]]}}}],["pump_c",{"_index":2404,"t":{"1002":{"position":[[189,6]]}}}],["pump_chart",{"_index":752,"t":{"101":{"position":[[516,10]]},"115":{"position":[[2131,10],[2163,10],[2195,10],[2227,10],[2871,10],[3074,10]]},"117":{"position":[[222,10],[3352,10],[3384,10],[3416,10],[3448,10],[4093,10]]},"127":{"position":[[872,10]]},"139":{"position":[[1450,10]]},"141":{"position":[[402,10],[2135,10]]},"1277":{"position":[[27,10]]}}}],["pump_chart.csv",{"_index":753,"t":{"101":{"position":[[533,14]]},"117":{"position":[[239,14]]},"119":{"position":[[488,14]]},"127":{"position":[[889,14]]},"141":{"position":[[419,14]]},"143":{"position":[[474,14]]}}}],["pump_chart_single_spe",{"_index":374,"t":{"45":{"position":[[2658,23]]},"101":{"position":[[554,23]]},"117":{"position":[[260,23]]},"127":{"position":[[910,23]]},"141":{"position":[[440,23]]},"174":{"position":[[332,23]]},"195":{"position":[[78,23]]},"204":{"position":[[91,23],[432,23]]},"658":{"position":[[78,23]]},"749":{"position":[[332,23]]},"851":{"position":[[22,23]]},"1144":{"position":[[44,23]]},"1163":{"position":[[49,23]]},"1272":{"position":[[397,23]]}}}],["pump_chart_variable_spe",{"_index":380,"t":{"45":{"position":[[2802,25]]},"151":{"position":[[269,26],[526,25]]},"161":{"position":[[192,25]]},"174":{"position":[[356,25]]},"202":{"position":[[78,25]]},"204":{"position":[[250,25]]},"749":{"position":[[356,25]]},"1018":{"position":[[39,25]]},"1144":{"position":[[68,25]]},"1272":{"position":[[425,25]]}}}],["pump_d",{"_index":2406,"t":{"1002":{"position":[[232,6]]}}}],["pump_nam",{"_index":2341,"t":{"851":{"position":[[6,9]]}}}],["pump_sampl",{"_index":1030,"t":{"127":{"position":[[814,12]]},"139":{"position":[[2587,12]]},"141":{"position":[[344,12],[2392,12]]}}}],["pump_sampled.csv",{"_index":1031,"t":{"127":{"position":[[833,16]]},"141":{"position":[[363,16]]},"143":{"position":[[618,16]]}}}],["pump_system",{"_index":879,"t":{"115":{"position":[[1909,11],[1979,11],[2091,11]]},"117":{"position":[[3312,11]]},"159":{"position":[[1424,11]]},"161":{"position":[[1439,11]]},"315":{"position":[[26,11]]},"317":{"position":[[26,11]]},"715":{"position":[[432,11]]},"939":{"position":[[73,11]]},"949":{"position":[[67,12],[217,12]]},"958":{"position":[[664,11]]},"996":{"position":[[36,11]]},"998":{"position":[[26,11]]},"1000":{"position":[[26,11]]},"1002":{"position":[[76,11]]},"1023":{"position":[[26,11]]},"1025":{"position":[[26,11]]},"1039":{"position":[[586,11]]},"1113":{"position":[[100,12]]},"1115":{"position":[[26,11]]},"1117":{"position":[[26,11]]},"1148":{"position":[[41,11]]}}}],["pure",{"_index":1402,"t":{"206":{"position":[[281,4]]},"321":{"position":[[15,4]]}}}],["puriti",{"_index":3159,"t":{"1366":{"position":[[825,7]]}}}],["purpos",{"_index":2013,"t":{"465":{"position":[[3232,9]]}}}],["push",{"_index":3213,"t":{"1384":{"position":[[98,4]]},"1386":{"position":[[4,4]]},"1397":{"position":[[772,4],[799,4]]},"1399":{"position":[[1023,4],[1046,4]]}}}],["put",{"_index":901,"t":{"115":{"position":[[4226,3]]},"159":{"position":[[542,3]]},"189":{"position":[[1099,3]]},"227":{"position":[[1057,3]]},"258":{"position":[[84,3],[165,3]]},"423":{"position":[[252,3]]},"832":{"position":[[219,3],[278,3],[426,3],[485,3]]},"847":{"position":[[91,3]]}}}],["pvt",{"_index":1708,"t":{"345":{"position":[[1000,3]]}}}],["pycharm",{"_index":3036,"t":{"1332":{"position":[[522,8]]}}}],["pydant",{"_index":2844,"t":{"1229":{"position":[[168,8]]}}}],["pypi",{"_index":2923,"t":{"1247":{"position":[[18,4]]}}}],["python",{"_index":117,"t":{"10":{"position":[[155,6]]},"15":{"position":[[11,6],[143,7],[260,6]]},"17":{"position":[[63,6],[127,6],[258,6]]},"35":{"position":[[50,6],[124,6]]},"37":{"position":[[206,6]]},"93":{"position":[[113,6]]},"1199":{"position":[[1085,6]]},"1366":{"position":[[446,7],[488,6],[524,7]]}}}],["q",{"_index":1549,"t":{"241":{"position":[[88,1]]}}}],["q=25000⋅p1⋅(p2−p1)q",{"_index":1552,"t":{"241":{"position":[[144,19]]}}}],["qa",{"_index":469,"t":{"47":{"position":[[2613,2]]}}}],["qualiti",{"_index":29,"t":{"4":{"position":[[205,7],[946,7]]},"89":{"position":[[13,7]]}}}],["quantiti",{"_index":1494,"t":{"218":{"position":[[0,8]]},"311":{"position":[[0,8]]},"319":{"position":[[0,8]]},"907":{"position":[[177,8]]}}}],["quarter",{"_index":2129,"t":{"475":{"position":[[319,8]]}}}],["quarterli",{"_index":577,"t":{"70":{"position":[[1138,9]]}}}],["queri",{"_index":3016,"t":{"1326":{"position":[[97,5]]}}}],["question",{"_index":3174,"t":{"1366":{"position":[[1394,10]]}}}],["queue",{"_index":2800,"t":{"1223":{"position":[[1157,5]]}}}],["quick",{"_index":3059,"t":{"1336":{"position":[[590,5]]},"1342":{"position":[[10,5]]},"1397":{"position":[[114,5]]},"1399":{"position":[[86,5]]}}}],["quickli",{"_index":1523,"t":{"232":{"position":[[33,7]]}}}],["quot",{"_index":3085,"t":{"1344":{"position":[[448,6]]}}}],["quota",{"_index":687,"t":{"95":{"position":[[320,7]]},"121":{"position":[[188,7]]},"129":{"position":[[263,5],[446,6]]},"141":{"position":[[668,6]]},"247":{"position":[[427,6]]},"689":{"position":[[84,5]]},"691":{"position":[[218,5],[368,5]]},"693":{"position":[[61,6]]},"695":{"position":[[178,6]]},"697":{"position":[[106,5]]},"699":{"position":[[331,5]]},"701":{"position":[[57,6]]},"703":{"position":[[45,6]]},"992":{"position":[[159,6]]},"1004":{"position":[[8,5]]},"1006":{"position":[[0,5],[40,5],[185,5]]},"1008":{"position":[[0,6],[7,7]]},"1010":{"position":[[44,6]]},"1105":{"position":[[146,6]]}}}],["r",{"_index":1994,"t":{"465":{"position":[[1664,1]]}}}],["race",{"_index":3183,"t":{"1368":{"position":[[571,6],[755,6]]}}}],["rais",{"_index":2363,"t":{"917":{"position":[[284,7]]},"1238":{"position":[[103,5]]},"1250":{"position":[[1252,5],[1750,5]]}}}],["ran",{"_index":433,"t":{"47":{"position":[[683,3]]}}}],["rang",{"_index":569,"t":{"70":{"position":[[802,5]]},"91":{"position":[[458,5]]},"296":{"position":[[568,5]]},"470":{"position":[[2211,11],[2893,5]]}}}],["rate",{"_index":66,"t":{"4":{"position":[[761,5]]},"45":{"position":[[2689,5],[2835,5],[2994,5],[3151,5]]},"56":{"position":[[48,5],[62,5],[92,4],[261,5],[421,5],[474,4],[529,6]]},"70":{"position":[[496,4],[545,5],[655,5],[742,4],[855,4],[1228,4],[1245,5]]},"95":{"position":[[1359,4],[1377,4],[1482,4],[1507,5],[1701,4],[1727,4],[1863,4],[2121,4]]},"101":{"position":[[585,5]]},"105":{"position":[[481,5],[645,5]]},"107":{"position":[[1175,4],[1203,4]]},"115":{"position":[[175,4],[527,4],[606,4],[755,5],[1592,4],[1814,4],[2827,5],[3085,5],[4137,4],[4463,5]]},"117":{"position":[[291,5],[892,5],[1056,5],[4104,5],[4887,5]]},"119":{"position":[[21,5],[345,5],[503,5]]},"121":{"position":[[944,4],[962,4],[1065,4],[1090,5],[1282,4],[1308,4],[1371,4],[1420,4],[1527,4]]},"127":{"position":[[949,5]]},"131":{"position":[[407,4],[1127,5],[1163,6]]},"139":{"position":[[365,4],[429,4],[659,5],[945,4],[1461,5],[1703,5],[1714,4],[1858,4],[1922,4],[2061,4],[2199,4],[2619,4],[3105,4],[3481,5]]},"141":{"position":[[479,5],[795,4],[1807,5],[2146,5],[2424,4],[2736,5]]},"145":{"position":[[780,4],[930,4]]},"151":{"position":[[567,5]]},"153":{"position":[[370,4]]},"159":{"position":[[605,5],[758,5],[905,5],[959,4],[1117,4],[2353,5]]},"161":{"position":[[233,5],[1877,5]]},"189":{"position":[[64,6],[298,5],[348,4],[410,4],[478,4],[991,4]]},"191":{"position":[[63,4]]},"193":{"position":[[10,4]]},"195":{"position":[[109,5],[115,5]]},"198":{"position":[[78,4]]},"200":{"position":[[0,5]]},"202":{"position":[[111,5],[117,5]]},"204":{"position":[[122,5],[283,5],[463,5]]},"206":{"position":[[147,5]]},"210":{"position":[[78,5],[504,4],[570,4],[638,4],[755,5],[1752,4]]},"212":{"position":[[104,5],[198,7],[372,6],[1343,5],[1372,6]]},"216":{"position":[[78,4]]},"218":{"position":[[24,4]]},"221":{"position":[[0,4]]},"223":{"position":[[0,4]]},"234":{"position":[[167,5],[224,4]]},"239":{"position":[[4,4],[68,4],[118,4]]},"241":{"position":[[4,4],[46,4],[298,4],[327,5]]},"253":{"position":[[277,4],[875,4]]},"266":{"position":[[282,5],[404,4]]},"268":{"position":[[206,5],[212,5]]},"270":{"position":[[82,5]]},"274":{"position":[[279,4]]},"276":{"position":[[356,6],[475,6]]},"282":{"position":[[423,4],[581,4],[766,4]]},"289":{"position":[[105,4]]},"305":{"position":[[37,5]]},"307":{"position":[[141,5],[147,5]]},"309":{"position":[[77,5]]},"311":{"position":[[23,4]]},"313":{"position":[[104,4]]},"315":{"position":[[210,4]]},"319":{"position":[[23,4]]},"325":{"position":[[107,4]]},"327":{"position":[[385,5],[391,5]]},"335":{"position":[[758,5],[852,7]]},"341":{"position":[[102,5],[108,5],[348,5],[363,4]]},"343":{"position":[[112,5],[181,5]]},"345":{"position":[[245,4]]},"347":{"position":[[104,5],[110,5],[351,5],[366,4],[580,5],[595,4]]},"349":{"position":[[116,5],[186,5],[303,5],[444,5]]},"351":{"position":[[742,5],[838,5],[1148,4],[1325,4],[1354,4],[1459,4],[1564,5]]},"353":{"position":[[209,5],[260,5],[266,5]]},"355":{"position":[[189,5]]},"359":{"position":[[146,5],[305,4],[884,4],[1187,4],[1374,5]]},"365":{"position":[[262,4],[482,4]]},"373":{"position":[[421,4]]},"380":{"position":[[116,5],[186,5],[304,5]]},"382":{"position":[[189,5]]},"384":{"position":[[214,5],[284,5],[402,5]]},"388":{"position":[[346,5],[508,6]]},"390":{"position":[[1197,4]]},"392":{"position":[[2690,4]]},"398":{"position":[[908,4],[969,4],[1027,4]]},"400":{"position":[[356,5],[812,6]]},"407":{"position":[[942,6],[1154,4],[1204,6],[1329,4],[1486,4],[1705,4]]},"409":{"position":[[682,4]]},"411":{"position":[[173,4],[270,4],[414,5],[952,4]]},"413":{"position":[[855,4],[1019,4],[1217,4],[1316,4],[1403,4],[1649,4],[1742,4],[1798,4],[2235,4]]},"461":{"position":[[242,5]]},"465":{"position":[[277,5],[836,5]]},"470":{"position":[[2389,4],[2607,4]]},"475":{"position":[[512,4],[1036,4]]},"479":{"position":[[419,4]]},"488":{"position":[[522,5]]},"494":{"position":[[985,5]]},"542":{"position":[[197,4]]},"580":{"position":[[45,5],[74,5],[107,5],[203,4],[468,5],[543,6],[667,4],[863,4],[953,4],[1086,4],[1170,5]]},"584":{"position":[[23,4],[189,4],[256,4],[316,4],[517,4]]},"588":{"position":[[386,4]]},"602":{"position":[[165,4]]},"610":{"position":[[25,5],[84,4],[273,4],[296,4],[414,5],[514,4]]},"615":{"position":[[374,5]]},"617":{"position":[[154,5],[169,4]]},"619":{"position":[[130,5]]},"622":{"position":[[442,5]]},"624":{"position":[[157,5],[172,4],[386,5],[401,4]]},"626":{"position":[[135,5],[252,5]]},"653":{"position":[[419,4]]},"660":{"position":[[116,5],[186,5]]},"675":{"position":[[28,4]]},"677":{"position":[[25,4]]},"699":{"position":[[300,4],[372,4]]},"701":{"position":[[42,4]]},"713":{"position":[[266,4]]},"717":{"position":[[381,4],[515,4]]},"737":{"position":[[179,5]]},"813":{"position":[[49,4],[111,4]]},"815":{"position":[[14,5],[86,4]]},"835":{"position":[[405,4]]},"843":{"position":[[116,5],[186,5]]},"851":{"position":[[61,5]]},"882":{"position":[[352,5],[651,5],[796,5],[859,4],[911,4],[1067,4],[1119,4],[1270,4]]},"902":{"position":[[93,4]]},"917":{"position":[[312,5]]},"939":{"position":[[111,4],[224,6],[250,4],[1157,6]]},"941":{"position":[[55,4],[100,5]]},"943":{"position":[[55,4],[179,5]]},"951":{"position":[[23,5],[75,4],[266,4],[289,4],[407,5],[507,4]]},"953":{"position":[[59,4],[120,4]]},"955":{"position":[[55,4]]},"958":{"position":[[356,6],[475,6]]},"1012":{"position":[[45,4]]},"1014":{"position":[[49,4]]},"1016":{"position":[[0,5],[6,5],[88,5]]},"1018":{"position":[[0,5],[76,5]]},"1021":{"position":[[55,4],[187,5],[278,4],[447,4],[544,4]]},"1023":{"position":[[162,5]]},"1029":{"position":[[19,4]]},"1031":{"position":[[19,5],[39,5]]},"1037":{"position":[[76,4],[144,4],[183,6],[244,6],[300,6],[431,5],[514,4],[598,5],[668,4],[705,4],[797,4],[813,4],[919,5],[1169,5],[1350,5],[1414,6]]},"1039":{"position":[[82,6],[260,4],[279,4],[354,4],[376,5],[474,4]]},"1041":{"position":[[9,6],[93,5],[134,6],[162,5],[242,4],[359,6],[388,6]]},"1050":{"position":[[58,5],[106,4],[200,5],[271,4],[310,4],[402,5]]},"1066":{"position":[[705,4],[766,4],[824,4]]},"1113":{"position":[[32,4]]},"1115":{"position":[[88,4],[212,4]]},"1158":{"position":[[54,5],[60,5]]},"1160":{"position":[[58,5],[64,5]]},"1163":{"position":[[84,5]]},"1165":{"position":[[116,5]]},"1195":{"position":[[100,4]]},"1199":{"position":[[275,4]]},"1206":{"position":[[247,4],[308,4],[622,4],[776,4],[1062,4]]},"1210":{"position":[[87,4]]},"1219":{"position":[[871,4],[943,4]]},"1238":{"position":[[194,4]]},"1242":{"position":[[1108,4]]},"1250":{"position":[[1241,5],[1807,4]]},"1257":{"position":[[250,4],[678,5]]},"1262":{"position":[[6,4]]},"1267":{"position":[[143,4],[196,4],[308,4]]},"1272":{"position":[[315,4]]},"1274":{"position":[[630,6]]},"1303":{"position":[[269,5],[318,5]]},"1311":{"position":[[164,5]]},"1318":{"position":[[299,4],[332,4]]},"1320":{"position":[[7,4],[68,4],[179,4],[326,4]]},"1324":{"position":[[453,4]]},"1326":{"position":[[237,4],[520,4],[665,4]]}}}],["rate,fuel",{"_index":1093,"t":{"143":{"position":[[279,9]]}}}],["rate,head,efficiency,spe",{"_index":1269,"t":{"164":{"position":[[308,26]]}}}],["rate,pow",{"_index":1076,"t":{"143":{"position":[[23,10],[635,10]]}}}],["rate/head",{"_index":1244,"t":{"159":{"position":[[1974,9]]},"359":{"position":[[816,9]]},"392":{"position":[[870,9]]}}}],["rate.csv",{"_index":1492,"t":{"214":{"position":[[118,18]]}}}],["satisfi",{"_index":2136,"t":{"477":{"position":[[458,7]]}}}],["save",{"_index":3008,"t":{"1309":{"position":[[3,4]]},"1392":{"position":[[151,4]]}}}],["scale",{"_index":1746,"t":{"351":{"position":[[1239,7]]}}}],["scan",{"_index":218,"t":{"25":{"position":[[133,8]]},"31":{"position":[[239,8]]}}}],["scenario",{"_index":1230,"t":{"159":{"position":[[237,9]]},"409":{"position":[[518,9]]},"1374":{"position":[[238,9]]}}}],["schema",{"_index":2616,"t":{"1206":{"position":[[560,6]]},"1212":{"position":[[86,6],[134,6],[181,6],[228,6],[272,6],[319,6],[365,6],[410,6]]},"1219":{"position":[[231,6],[317,6]]}}}],["scienc",{"_index":2353,"t":{"882":{"position":[[997,7],[1201,7]]}}}],["scientif",{"_index":2737,"t":{"1219":{"position":[[587,10]]}}}],["scm.com",{"_index":3194,"t":{"1372":{"position":[[10,7]]}}}],["scope",{"_index":3177,"t":{"1368":{"position":[[117,7]]}}}],["scroll",{"_index":441,"t":{"47":{"position":[[1179,9]]}}}],["sd",{"_index":2417,"t":{"1037":{"position":[[178,4]]}}}],["sea",{"_index":725,"t":{"95":{"position":[[1584,3]]},"111":{"position":[[276,3]]},"121":{"position":[[1167,3]]},"135":{"position":[[277,3],[718,3]]},"139":{"position":[[1611,3],[2111,4],[2292,4],[2495,3]]},"141":{"position":[[2300,3]]},"145":{"position":[[840,3]]}}}],["sea_water_injection_rate_m3_per_day",{"_index":1071,"t":{"139":{"position":[[2402,35]]}}}],["seawat",{"_index":893,"t":{"115":{"position":[[2808,8]]},"139":{"position":[[1684,8],[1903,8]]}}}],["seawater_inj",{"_index":1068,"t":{"139":{"position":[[1927,15],[1998,12],[2126,12],[2302,12]]}}}],["secant",{"_index":2957,"t":{"1257":{"position":[[441,6],[558,6]]}}}],["second",{"_index":681,"t":{"95":{"position":[[160,6]]},"115":{"position":[[660,6]]},"159":{"position":[[913,6]]},"375":{"position":[[555,6]]},"390":{"position":[[785,6]]},"392":{"position":[[2126,6]]},"400":{"position":[[684,6],[859,6],[1454,6]]},"413":{"position":[[2454,6],[2575,6]]},"610":{"position":[[926,6],[949,6]]},"707":{"position":[[305,7]]},"951":{"position":[[919,6],[942,6]]},"953":{"position":[[150,6],[171,6]]},"955":{"position":[[14,6]]},"1054":{"position":[[348,7]]}}}],["seconds\\_per\\_day}{lower\\_heating\\_valu",{"_index":1939,"t":{"429":{"position":[[432,40]]}}}],["seconds_per_hour",{"_index":3143,"t":{"1366":{"position":[[140,16]]}}}],["section",{"_index":101,"t":{"8":{"position":[[97,8],[277,8]]},"91":{"position":[[5,7]]},"105":{"position":[[86,8]]},"151":{"position":[[56,7],[192,8]]},"153":{"position":[[10,7]]},"157":{"position":[[21,8]]},"159":{"position":[[2482,8]]},"168":{"position":[[5,7],[88,8],[795,7]]},"253":{"position":[[51,7]]},"264":{"position":[[114,7],[258,9],[302,7],[521,8]]},"303":{"position":[[47,8]]},"305":{"position":[[191,7]]},"335":{"position":[[1023,8],[1062,7],[2027,8]]},"369":{"position":[[5,7]]},"400":{"position":[[625,7],[1037,7],[1214,7],[1461,8]]},"409":{"position":[[82,8],[504,8]]},"453":{"position":[[35,7]]},"461":{"position":[[36,8]]},"463":{"position":[[5,7]]},"483":{"position":[[5,7]]},"653":{"position":[[203,8],[300,8],[483,8]]},"783":{"position":[[110,8]]},"835":{"position":[[195,8],[280,8],[469,8]]},"892":{"position":[[140,9]]},"896":{"position":[[30,7]]},"1134":{"position":[[103,8]]},"1336":{"position":[[632,8]]},"1374":{"position":[[293,8]]}}}],["see",{"_index":153,"t":{"17":{"position":[[331,3]]},"35":{"position":[[257,3]]},"37":{"position":[[110,3],[288,3]]},"45":{"position":[[1565,3],[2089,3],[3207,3],[5275,3]]},"47":{"position":[[1585,3],[1811,3],[2476,3],[2770,3]]},"54":{"position":[[919,3],[1063,3]]},"60":{"position":[[590,3]]},"99":{"position":[[221,3]]},"101":{"position":[[148,3]]},"105":{"position":[[95,3],[1498,3]]},"109":{"position":[[557,3]]},"115":{"position":[[922,3],[1975,3]]},"125":{"position":[[221,3]]},"127":{"position":[[148,3],[470,3]]},"153":{"position":[[381,3]]},"159":{"position":[[1222,3]]},"234":{"position":[[769,3]]},"251":{"position":[[375,3]]},"253":{"position":[[589,3]]},"260":{"position":[[98,3]]},"327":{"position":[[176,3]]},"335":{"position":[[2001,3]]},"345":{"position":[[637,3]]},"371":{"position":[[486,3]]},"398":{"position":[[1318,3]]},"400":{"position":[[140,3],[1126,4]]},"402":{"position":[[520,3]]},"445":{"position":[[478,3]]},"465":{"position":[[599,3],[3059,3],[3456,3],[3830,3],[4229,3]]},"516":{"position":[[1031,3]]},"542":{"position":[[258,3]]},"554":{"position":[[254,3]]},"558":{"position":[[0,3]]},"588":{"position":[[801,3]]},"602":{"position":[[473,3]]},"646":{"position":[[280,3]]},"743":{"position":[[0,3]]},"749":{"position":[[382,3]]},"772":{"position":[[0,3]]},"799":{"position":[[458,3]]},"819":{"position":[[361,3]]},"823":{"position":[[586,3]]},"856":{"position":[[79,3]]},"870":{"position":[[0,3]]},"888":{"position":[[0,3]]},"894":{"position":[[1205,3]]},"931":{"position":[[75,3]]},"1039":{"position":[[382,3]]},"1109":{"position":[[848,3]]},"1169":{"position":[[279,3]]},"1185":{"position":[[85,3]]},"1250":{"position":[[196,3],[537,3],[1007,3],[1483,3],[1605,3],[2221,3]]},"1255":{"position":[[2192,3]]},"1277":{"position":[[60,3]]},"1301":{"position":[[77,3]]},"1307":{"position":[[77,3]]},"1309":{"position":[[79,6]]},"1336":{"position":[[615,3]]},"1348":{"position":[[0,3]]},"1358":{"position":[[206,3]]},"1362":{"position":[[64,3]]},"1370":{"position":[[317,3]]},"1372":{"position":[[164,3]]},"1403":{"position":[[398,3]]}}}],["seemingli",{"_index":194,"t":{"21":{"position":[[69,9]]}}}],["seen",{"_index":607,"t":{"85":{"position":[[151,4]]},"89":{"position":[[190,4],[596,4],[1160,5]]},"172":{"position":[[40,4]]},"407":{"position":[[682,4]]},"413":{"position":[[758,4],[800,4]]},"1037":{"position":[[951,4]]},"1177":{"position":[[226,4]]}}}],["select",{"_index":654,"t":{"89":{"position":[[1326,9]]},"153":{"position":[[137,8]]}}}],["self",{"_index":3139,"t":{"1364":{"position":[[154,4],[181,4]]},"1366":{"position":[[322,4]]}}}],["selftest",{"_index":2154,"t":{"486":{"position":[[680,9]]},"490":{"position":[[63,8]]}}}],["send",{"_index":859,"t":{"115":{"position":[[597,4]]},"610":{"position":[[581,9],[1010,4]]},"951":{"position":[[574,9],[1003,4]]},"955":{"position":[[40,4]]},"1394":{"position":[[12,4]]},"1399":{"position":[[848,4]]}}}],["sensit",{"_index":418,"t":{"45":{"position":[[5214,9]]},"516":{"position":[[367,10]]}}}],["separ",{"_index":310,"t":{"45":{"position":[[354,9],[5038,9]]},"56":{"position":[[595,8]]},"60":{"position":[[402,10]]},"99":{"position":[[65,9]]},"125":{"position":[[65,9]]},"168":{"position":[[79,8]]},"170":{"position":[[353,9]]},"174":{"position":[[156,9]]},"176":{"position":[[288,8]]},"409":{"position":[[140,8]]},"475":{"position":[[610,9],[651,9]]},"488":{"position":[[1042,9],[1215,9]]},"653":{"position":[[169,8]]},"747":{"position":[[278,9]]},"749":{"position":[[156,9]]},"835":{"position":[[161,8]]},"854":{"position":[[24,8]]},"892":{"position":[[131,8]]},"1201":{"position":[[491,8]]},"1219":{"position":[[670,10]]},"1250":{"position":[[430,10]]},"1287":{"position":[[354,9]]},"1358":{"position":[[132,8]]}}}],["seri",{"_index":474,"t":{"54":{"position":[[66,6],[206,6],[428,6],[482,6],[1101,6],[1332,6]]},"56":{"position":[[77,7]]},"58":{"position":[[22,6]]},"97":{"position":[[54,6]]},"99":{"position":[[119,6]]},"123":{"position":[[54,6]]},"125":{"position":[[119,6]]},"147":{"position":[[58,6]]},"227":{"position":[[707,6]]},"251":{"position":[[288,6],[384,6]]},"398":{"position":[[1248,6]]},"441":{"position":[[328,6]]},"443":{"position":[[19,6]]},"445":{"position":[[71,6]]},"473":{"position":[[81,6]]},"488":{"position":[[133,6]]},"496":{"position":[[163,6]]},"504":{"position":[[469,6]]},"550":{"position":[[131,6]]},"677":{"position":[[58,7]]},"699":{"position":[[170,6]]},"715":{"position":[[166,6]]},"733":{"position":[[10,6]]},"823":{"position":[[193,6],[265,6]]},"874":{"position":[[237,6]]},"985":{"position":[[180,8]]},"1006":{"position":[[98,8],[145,6]]},"1090":{"position":[[169,6]]},"1109":{"position":[[242,6],[857,6]]},"1210":{"position":[[145,6]]},"1212":{"position":[[403,6]]}}}],["servic",{"_index":3192,"t":{"1370":{"position":[[293,7]]}}}],["set",{"_index":282,"t":{"37":{"position":[[241,7]]},"45":{"position":[[91,7],[558,5],[1862,3],[1870,7],[5092,3]]},"47":{"position":[[1309,3],[1728,3]]},"54":{"position":[[914,4]]},"56":{"position":[[110,3],[186,3],[310,3],[431,3]]},"60":{"position":[[345,4],[722,3]]},"68":{"position":[[57,7],[101,7],[160,8],[273,7]]},"70":{"position":[[165,3]]},"79":{"position":[[113,3]]},"95":{"position":[[551,3],[766,3],[1093,3],[1109,3],[1878,3],[1894,3]]},"111":{"position":[[23,4],[38,3],[184,3],[515,3]]},"113":{"position":[[23,4],[38,3],[183,3],[455,3]]},"115":{"position":[[865,7],[1617,3]]},"117":{"position":[[2552,3],[4437,3]]},"121":{"position":[[351,3],[721,3],[737,3]]},"129":{"position":[[214,3]]},"135":{"position":[[23,4],[38,3],[184,3],[327,3],[380,3]]},"139":{"position":[[971,3]]},"141":{"position":[[1513,3]]},"145":{"position":[[48,4],[163,3],[561,3],[577,3]]},"151":{"position":[[129,3],[310,3]]},"155":{"position":[[150,3]]},"159":{"position":[[23,3],[60,3],[627,9]]},"168":{"position":[[286,5],[731,3]]},"170":{"position":[[651,3]]},"176":{"position":[[345,3]]},"178":{"position":[[128,4]]},"191":{"position":[[185,3]]},"193":{"position":[[49,3],[101,3]]},"198":{"position":[[200,3]]},"212":{"position":[[24,3],[97,3]]},"227":{"position":[[582,3],[933,4],[1675,3],[2015,6],[2203,4]]},"249":{"position":[[158,8]]},"251":{"position":[[21,3]]},"255":{"position":[[74,3],[514,3]]},"274":{"position":[[334,8]]},"284":{"position":[[197,4],[205,5],[294,3],[605,4],[689,3]]},"289":{"position":[[28,3],[250,4]]},"315":{"position":[[320,8],[478,8],[508,7],[599,3],[647,8]]},"327":{"position":[[281,3]]},"335":{"position":[[425,9],[751,3]]},"337":{"position":[[32,3],[105,3]]},"351":{"position":[[660,4],[688,3]]},"359":{"position":[[245,3],[536,7],[637,4],[666,3],[1427,3]]},"365":{"position":[[697,7]]},"373":{"position":[[449,3]]},"377":{"position":[[141,4]]},"390":{"position":[[1225,3]]},"392":{"position":[[2718,3]]},"400":{"position":[[1427,3],[1630,3]]},"423":{"position":[[32,7],[77,7],[174,3]]},"429":{"position":[[898,3]]},"441":{"position":[[648,3]]},"445":{"position":[[441,3]]},"447":{"position":[[53,3]]},"470":{"position":[[1410,5],[2775,8],[2926,8],[2981,8]]},"477":{"position":[[10,4]]},"479":{"position":[[132,3],[671,4]]},"483":{"position":[[64,7]]},"486":{"position":[[242,3]]},"488":{"position":[[454,3]]},"494":{"position":[[917,3]]},"516":{"position":[[217,3]]},"542":{"position":[[248,9]]},"564":{"position":[[54,4]]},"580":{"position":[[281,7],[427,3],[619,3]]},"588":{"position":[[563,7]]},"602":{"position":[[235,7]]},"653":{"position":[[258,3],[339,3]]},"656":{"position":[[171,4]]},"664":{"position":[[117,4],[171,3]]},"699":{"position":[[112,3],[158,3]]},"707":{"position":[[339,3],[520,3]]},"715":{"position":[[108,3],[154,3]]},"737":{"position":[[209,3]]},"741":{"position":[[5,3]]},"791":{"position":[[117,3],[182,3]]},"819":{"position":[[45,4],[53,5],[142,3],[375,4]]},"832":{"position":[[208,4],[415,4]]},"835":{"position":[[244,3],[319,3]]},"847":{"position":[[459,3]]},"886":{"position":[[50,3],[123,3]]},"896":{"position":[[57,3],[176,3]]},"915":{"position":[[27,4],[115,7]]},"917":{"position":[[20,7]]},"939":{"position":[[31,8],[992,8]]},"941":{"position":[[153,8]]},"943":{"position":[[232,8]]},"945":{"position":[[174,8],[207,3]]},"947":{"position":[[180,8],[215,3]]},"949":{"position":[[299,3],[369,9],[509,9]]},"970":{"position":[[217,3],[285,4]]},"992":{"position":[[422,3]]},"1021":{"position":[[249,8]]},"1054":{"position":[[382,3],[546,3]]},"1105":{"position":[[384,3]]},"1109":{"position":[[562,3]]},"1201":{"position":[[412,8]]},"1204":{"position":[[220,8]]},"1206":{"position":[[84,3]]},"1212":{"position":[[315,3],[729,8]]},"1229":{"position":[[272,3],[367,8]]},"1242":{"position":[[1085,3]]},"1250":{"position":[[501,4],[1696,7]]},"1255":{"position":[[319,5],[413,4],[442,3],[464,4],[1318,3]]},"1257":{"position":[[1095,4],[1278,7]]},"1272":{"position":[[285,3],[761,3]]},"1274":{"position":[[800,3],[853,3]]},"1287":{"position":[[91,7]]},"1303":{"position":[[407,8]]},"1332":{"position":[[371,3]]},"1338":{"position":[[191,3]]},"1370":{"position":[[179,3]]},"1372":{"position":[[182,3]]},"1384":{"position":[[105,3]]},"1397":{"position":[[806,3]]},"1403":{"position":[[85,8]]}}}],["set_regular",{"_index":2480,"t":{"1195":{"position":[[150,14]]}}}],["setting.yml",{"_index":261,"t":{"33":{"position":[[62,15],[179,15]]}}}],["seven",{"_index":1911,"t":{"415":{"position":[[355,5]]}}}],["sever",{"_index":1338,"t":{"178":{"position":[[161,7]]},"187":{"position":[[125,7]]},"225":{"position":[[96,7]]},"227":{"position":[[1628,7]]},"284":{"position":[[179,7]]},"441":{"position":[[274,7]]},"819":{"position":[[27,7]]},"854":{"position":[[49,7]]},"1109":{"position":[[188,7]]},"1274":{"position":[[7,7]]}}}],["shaft",{"_index":1483,"t":{"212":{"position":[[954,5]]},"216":{"position":[[275,5],[402,5]]},"335":{"position":[[132,5],[247,6],[1903,5]]},"341":{"position":[[309,6]]},"347":{"position":[[312,6],[541,6]]},"371":{"position":[[363,5]]},"388":{"position":[[110,6],[160,5],[242,5],[283,5]]},"407":{"position":[[94,6]]},"411":{"position":[[49,5]]},"435":{"position":[[127,5]]},"465":{"position":[[2735,6],[3529,5]]},"617":{"position":[[115,6]]},"624":{"position":[[118,6],[347,6]]}}}],["share",{"_index":1656,"t":{"313":{"position":[[29,5]]}}}],["shell",{"_index":2151,"t":{"486":{"position":[[454,6],[546,6]]}}}],["shift",{"_index":1188,"t":{"153":{"position":[[334,7]]},"159":{"position":[[1881,7],[2031,7]]},"351":{"position":[[1084,5]]},"407":{"position":[[774,7]]},"481":{"position":[[540,8]]}}}],["shit",{"_index":3199,"t":{"1374":{"position":[[166,5]]}}}],["shore",{"_index":344,"t":{"45":{"position":[[1709,6],[1796,5],[1893,5],[2083,5],[2104,5]]},"284":{"position":[[811,6]]},"294":{"position":[[16,5],[146,5]]},"296":{"position":[[246,5],[433,5],[536,5],[707,5]]},"516":{"position":[[1341,5]]},"1250":{"position":[[396,5],[724,5]]},"1255":{"position":[[703,5]]}}}],["short",{"_index":2163,"t":{"488":{"position":[[1118,5]]},"502":{"position":[[210,5]]},"1358":{"position":[[391,5]]},"1374":{"position":[[618,5]]}}}],["show",{"_index":155,"t":{"19":{"position":[[4,4],[191,4],[235,4],[303,4],[465,4],[792,4]]},"47":{"position":[[566,4]]},"58":{"position":[[91,4]]},"70":{"position":[[1022,5]]},"227":{"position":[[1930,6]]},"465":{"position":[[4005,5]]},"486":{"position":[[124,4],[334,4],[463,4],[512,4],[603,4],[731,5],[748,4]]},"488":{"position":[[1688,4]]},"490":{"position":[[99,4]]},"492":{"position":[[11,4],[68,4],[118,4],[165,4],[185,4]]},"494":{"position":[[0,4],[83,4],[159,4],[221,4],[1062,4]]},"496":{"position":[[0,4],[27,4],[83,4],[332,4]]},"610":{"position":[[795,4]]},"832":{"position":[[8,7]]},"856":{"position":[[53,4]]},"882":{"position":[[1344,5]]},"951":{"position":[[788,4]]},"1199":{"position":[[966,4]]},"1210":{"position":[[476,7]]},"1255":{"position":[[16,4],[136,4],[763,4],[1002,4],[1126,4],[1387,4],[1715,4],[1754,4],[1776,4],[1810,4],[1859,4],[1931,4],[1979,4],[2348,4]]},"1269":{"position":[[282,7]]},"1378":{"position":[[107,4]]}}}],["shown",{"_index":159,"t":{"19":{"position":[[59,5]]},"47":{"position":[[2653,5]]},"89":{"position":[[268,5],[352,5]]},"107":{"position":[[915,5],[983,5]]},"178":{"position":[[279,5]]},"321":{"position":[[284,6]]},"554":{"position":[[20,5]]},"1255":{"position":[[1918,5]]}}}],["side",{"_index":1840,"t":{"400":{"position":[[428,4]]},"465":{"position":[[153,5]]},"894":{"position":[[1164,6]]},"1336":{"position":[[127,4]]}}}],["sign",{"_index":631,"t":{"87":{"position":[[649,4],[796,5]]}}}],["signifi",{"_index":2262,"t":{"610":{"position":[[1041,9]]},"951":{"position":[[1034,9]]}}}],["signific",{"_index":609,"t":{"87":{"position":[[57,11],[189,11],[859,12],[933,11]]},"415":{"position":[[457,11]]}}}],["significantli",{"_index":1783,"t":{"373":{"position":[[522,14]]},"390":{"position":[[1298,14]]},"392":{"position":[[2791,14]]}}}],["silenc",{"_index":3162,"t":{"1366":{"position":[[886,9]]}}}],["silent",{"_index":3160,"t":{"1366":{"position":[[858,9]]}}}],["sim",{"_index":740,"t":{"99":{"position":[[290,3]]},"107":{"position":[[827,3]]},"117":{"position":[[32,3]]},"125":{"position":[[290,3]]},"131":{"position":[[1022,3]]},"141":{"position":[[32,3]]},"260":{"position":[[13,3]]}}}],["sim1",{"_index":674,"t":{"91":{"position":[[548,4]]},"149":{"position":[[96,4]]},"161":{"position":[[21,4]]},"260":{"position":[[229,4]]},"449":{"position":[[21,4]]}}}],["sim1:col1",{"_index":1965,"t":{"457":{"position":[[40,9],[124,9],[159,9]]},"461":{"position":[[372,9]]},"1250":{"position":[[2055,9]]}}}],["sim1:gas_prod",{"_index":2414,"t":{"1018":{"position":[[6,13]]},"1033":{"position":[[19,13]]}}}],["sim1:gas_sal",{"_index":2416,"t":{"1033":{"position":[[35,14]]}}}],["sim1;discharge_pressur",{"_index":1613,"t":{"270":{"position":[[162,23]]}}}],["sim1;gas_inj",{"_index":1420,"t":{"210":{"position":[[521,12]]},"239":{"position":[[240,12]]},"276":{"position":[[386,12],[530,12]]},"958":{"position":[[386,12],[530,12]]}}}],["sim1;gas_lift",{"_index":1619,"t":{"276":{"position":[[318,13]]},"612":{"position":[[318,13]]},"958":{"position":[[318,13]]},"1117":{"position":[[153,13]]}}}],["sim1;gas_prod",{"_index":1227,"t":{"157":{"position":[[373,13]]},"159":{"position":[[2359,13]]},"161":{"position":[[1235,13],[1883,13]]},"270":{"position":[[88,13]]},"276":{"position":[[300,13]]},"325":{"position":[[124,13]]},"612":{"position":[[300,13]]},"717":{"position":[[398,13],[532,13]]},"958":{"position":[[300,13]]},"1117":{"position":[[135,13]]}}}],["sim1;gas_prod_b",{"_index":2431,"t":{"1050":{"position":[[315,17],[428,15]]}}}],["sim1;gas_sal",{"_index":1472,"t":{"210":{"position":[[1769,14]]},"276":{"position":[[365,14],[484,14],[507,14]]},"830":{"position":[[136,14]]},"958":{"position":[[365,14],[484,14],[507,14]]}}}],["sim1;gor",{"_index":1670,"t":{"325":{"position":[[172,8]]}}}],["sim1;inj_pressur",{"_index":1620,"t":{"276":{"position":[[455,17],[599,17]]},"958":{"position":[[455,17],[599,17]]}}}],["sim1;oil",{"_index":1540,"t":{"236":{"position":[[522,9],[585,9],[642,9],[708,9]]}}}],["sim1;oil_prod",{"_index":1226,"t":{"157":{"position":[[355,13]]},"161":{"position":[[1217,13]]},"262":{"position":[[176,13]]},"830":{"position":[[92,13]]}}}],["sim1;oil_prod:pla",{"_index":2232,"t":{"554":{"position":[[199,17]]}}}],["sim1;powerloss",{"_index":2385,"t":{"974":{"position":[[39,14]]}}}],["sim1;regular",{"_index":2429,"t":{"1048":{"position":[[12,15]]}}}],["sim1;suction_pressur",{"_index":1473,"t":{"210":{"position":[[1833,21]]},"270":{"position":[[120,21]]}}}],["sim1;temp",{"_index":1672,"t":{"325":{"position":[[217,9]]}}}],["sim1;water_inj",{"_index":1242,"t":{"159":{"position":[[1526,14]]},"161":{"position":[[1541,14]]},"309":{"position":[[83,14]]},"317":{"position":[[168,14]]},"958":{"position":[[806,14]]},"1025":{"position":[[168,14]]},"1117":{"position":[[57,14]]}}}],["sim1;water_prod",{"_index":2375,"t":{"958":{"position":[[846,15],[896,16]]}}}],["sim1;water_prod:field_a",{"_index":1599,"t":{"260":{"position":[[177,23]]}}}],["sim2",{"_index":1546,"t":{"239":{"position":[[184,6]]},"260":{"position":[[238,4]]},"449":{"position":[[85,4]]}}}],["sim2:gas_prod_a",{"_index":2432,"t":{"1050":{"position":[[408,15]]}}}],["sim2:oil_prod",{"_index":1604,"t":{"262":{"position":[[202,13]]},"830":{"position":[[118,13]]}}}],["sim2;gas_inj",{"_index":1548,"t":{"239":{"position":[[257,12]]}}}],["sim2;gas_prod_a",{"_index":2430,"t":{"1050":{"position":[[276,17]]}}}],["sim2;gas_sal",{"_index":1605,"t":{"262":{"position":[[220,14]]}}}],["sim2;water_prod",{"_index":2377,"t":{"958":{"position":[[875,16],[917,16]]}}}],["sim2;water_prod:field_b",{"_index":1600,"t":{"260":{"position":[[205,23]]}}}],["sim8;gas_prod",{"_index":2227,"t":{"546":{"position":[[265,13]]}}}],["sim8;water_inj",{"_index":2410,"t":{"1002":{"position":[[329,14]]}}}],["sim:gas_prod",{"_index":1055,"t":{"131":{"position":[[1133,12]]}}}],["sim:oil_prod",{"_index":1054,"t":{"131":{"position":[[1092,12]]}}}],["sim;col1",{"_index":1968,"t":{"461":{"position":[[74,8]]}}}],["sim;col2",{"_index":1970,"t":{"461":{"position":[[101,8]]}}}],["sim;flag",{"_index":1542,"t":{"236":{"position":[[759,9],[812,9]]}}}],["sim;ga",{"_index":1537,"t":{"236":{"position":[[359,7],[393,7],[420,7],[444,7],[476,7],[510,7],[573,7],[630,7],[696,7],[747,7],[800,7]]}}}],["sim;gas_inj",{"_index":1048,"t":{"131":{"position":[[744,11]]},"139":{"position":[[503,11]]},"141":{"position":[[1132,11]]}}}],["sim;gas_lift",{"_index":835,"t":{"107":{"position":[[576,13]]},"117":{"position":[[2182,13]]},"131":{"position":[[760,12]]},"139":{"position":[[519,13]]},"141":{"position":[[1148,12]]}}}],["sim;gas_prod",{"_index":827,"t":{"107":{"position":[[368,12],[426,12],[511,12]]},"115":{"position":[[4208,13],[4271,12]]},"117":{"position":[[1974,12],[2032,12],[2117,12]]},"131":{"position":[[368,12],[692,12]]},"139":{"position":[[3176,13]]},"141":{"position":[[756,12],[1080,12]]},"241":{"position":[[340,12],[359,12]]}}}],["sim;gas_sal",{"_index":2335,"t":{"828":{"position":[[27,13]]}}}],["sim;gas_sales:field_a",{"_index":2337,"t":{"832":{"position":[[138,21]]}}}],["sim;gas_sales:field_b",{"_index":2339,"t":{"832":{"position":[[346,24]]}}}],["sim;oil_prod",{"_index":826,"t":{"107":{"position":[[351,12]]},"117":{"position":[[1957,12]]},"131":{"position":[[351,12]]},"141":{"position":[[739,12]]},"260":{"position":[[0,12]]},"262":{"position":[[101,12]]},"520":{"position":[[110,12]]},"828":{"position":[[10,12]]}}}],["sim;oil_prod:field_a",{"_index":2336,"t":{"832":{"position":[[113,20]]}}}],["sim;oil_prod:field_b",{"_index":2338,"t":{"832":{"position":[[321,20]]}}}],["sim;p1",{"_index":1558,"t":{"241":{"position":[[394,6],[418,6]]}}}],["sim;p2",{"_index":1559,"t":{"241":{"position":[[407,6]]}}}],["sim;water_inj",{"_index":831,"t":{"107":{"position":[[468,13]]},"115":{"position":[[1661,14]]},"117":{"position":[[2074,13]]},"131":{"position":[[487,13]]},"141":{"position":[[875,13]]}}}],["sim;water_prod",{"_index":837,"t":{"107":{"position":[[629,14]]},"115":{"position":[[1761,14]]},"117":{"position":[[2235,14]]},"131":{"position":[[505,14],[524,14],[543,15],[571,15],[602,15],[631,15],[818,14],[904,14]]},"139":{"position":[[1031,15],[1143,14]]},"141":{"position":[[893,14],[912,14],[931,15],[959,15],[990,15],[1019,15],[1206,14],[1292,14]]}}}],["similar",{"_index":532,"t":{"60":{"position":[[768,8]]},"95":{"position":[[21,7]]},"707":{"position":[[971,7]]},"1054":{"position":[[967,7]]},"1134":{"position":[[233,7]]},"1297":{"position":[[198,7]]},"1332":{"position":[[348,7],[552,8]]}}}],["similarli",{"_index":1882,"t":{"411":{"position":[[243,10]]}}}],["simpl",{"_index":124,"t":{"13":{"position":[[75,6]]},"25":{"position":[[144,6]]},"31":{"position":[[250,6]]},"37":{"position":[[74,6]]},"47":{"position":[[417,6],[2516,6]]},"93":{"position":[[29,6]]},"95":{"position":[[32,6]]},"170":{"position":[[958,6]]},"253":{"position":[[201,6]]},"488":{"position":[[998,6],[1171,6]]},"554":{"position":[[2,6]]},"1269":{"position":[[198,6],[225,6]]},"1289":{"position":[[323,6]]},"1350":{"position":[[26,6]]},"1366":{"position":[[597,6]]},"1368":{"position":[[429,6]]}}}],["simple_compressor",{"_index":2378,"t":{"966":{"position":[[16,17]]}}}],["simpler",{"_index":845,"t":{"107":{"position":[[1057,7]]},"500":{"position":[[63,7]]}}}],["simpli",{"_index":556,"t":{"70":{"position":[[461,6]]},"407":{"position":[[1550,6]]},"423":{"position":[[245,6]]},"481":{"position":[[575,6]]},"516":{"position":[[859,6]]}}}],["simplifi",{"_index":466,"t":{"47":{"position":[[2434,8]]},"105":{"position":[[246,10]]},"115":{"position":[[400,10]]},"272":{"position":[[190,10]]},"335":{"position":[[1613,10]]},"355":{"position":[[295,10]]},"369":{"position":[[183,10]]},"371":{"position":[[4,10]]},"465":{"position":[[3460,10]]},"468":{"position":[[30,10]]},"475":{"position":[[25,8],[759,8]]},"1223":{"position":[[1305,8]]},"1250":{"position":[[1828,10]]},"1269":{"position":[[257,10]]},"1281":{"position":[[108,10]]}}}],["simplified_compressor_model",{"_index":1804,"t":{"380":{"position":[[728,27]]},"382":{"position":[[347,27],[962,27]]}}}],["simplified_compressor_model_with_turbin",{"_index":1806,"t":{"382":{"position":[[873,40]]}}}],["simplified_compressor_train_model",{"_index":815,"t":{"105":{"position":[[1108,33]]},"115":{"position":[[1157,33],[1226,33]]},"117":{"position":[[1517,33],[2908,33],[2977,33]]},"153":{"position":[[1518,33]]},"159":{"position":[[2319,33]]},"161":{"position":[[802,33],[1843,33]]},"384":{"position":[[641,33]]},"386":{"position":[[202,33]]},"439":{"position":[[111,33]]}}}],["simplified_compressor_train_model_with_turbin",{"_index":1948,"t":{"439":{"position":[[16,46]]}}}],["simplified_variable_speed_compressor_train",{"_index":816,"t":{"105":{"position":[[1148,42]]},"117":{"position":[[1557,42]]},"153":{"position":[[593,42],[1558,42]]},"161":{"position":[[842,42]]},"333":{"position":[[78,42]]},"357":{"position":[[61,42]]},"373":{"position":[[35,42]]},"375":{"position":[[145,42]]},"377":{"position":[[720,42]]},"380":{"position":[[762,42]]},"382":{"position":[[381,42]]},"384":{"position":[[681,42]]},"386":{"position":[[242,42]]},"927":{"position":[[78,42]]},"966":{"position":[[40,42]]},"1150":{"position":[[163,42]]}}}],["simul",{"_index":1530,"t":{"234":{"position":[[483,10]]},"236":{"position":[[13,10]]},"345":{"position":[[812,10]]},"400":{"position":[[1198,11]]},"441":{"position":[[222,10],[388,10],[885,10]]},"475":{"position":[[142,10]]},"1037":{"position":[[1190,11]]},"1109":{"position":[[136,10],[302,10],[799,10]]}}}],["singl",{"_index":167,"t":{"19":{"position":[[210,6]]},"101":{"position":[[252,6]]},"111":{"position":[[874,6]]},"115":{"position":[[2746,6],[2956,6]]},"117":{"position":[[3975,6]]},"127":{"position":[[310,6]]},"155":{"position":[[38,6]]},"159":{"position":[[699,6]]},"176":{"position":[[422,6]]},"187":{"position":[[18,6]]},"189":{"position":[[222,6],[359,6],[906,6]]},"191":{"position":[[20,6]]},"193":{"position":[[174,6],[432,6]]},"266":{"position":[[133,6]]},"305":{"position":[[15,6]]},"327":{"position":[[223,6]]},"335":{"position":[[19,6],[446,6],[515,6],[1070,6]]},"337":{"position":[[142,6]]},"339":{"position":[[4,6],[37,6]]},"343":{"position":[[317,6],[396,6]]},"359":{"position":[[320,6],[362,6]]},"369":{"position":[[109,6]]},"388":{"position":[[4,6],[65,6],[123,6],[576,6],[727,6],[781,6]]},"398":{"position":[[1208,6]]},"402":{"position":[[205,6]]},"407":{"position":[[198,7]]},"409":{"position":[[365,6]]},"413":{"position":[[632,6],[944,6]]},"465":{"position":[[3577,6],[3834,6]]},"500":{"position":[[797,6]]},"508":{"position":[[537,7]]},"516":{"position":[[1194,6]]},"580":{"position":[[807,6]]},"615":{"position":[[22,6],[84,6]]},"757":{"position":[[2,6]]},"823":{"position":[[181,6]]},"858":{"position":[[49,6]]},"874":{"position":[[218,6]]},"896":{"position":[[209,6]]},"907":{"position":[[147,6]]},"917":{"position":[[54,6]]},"1043":{"position":[[33,6]]},"1185":{"position":[[611,6],[834,6]]},"1212":{"position":[[490,6]]},"1219":{"position":[[277,6]]},"1250":{"position":[[1153,6]]},"1257":{"position":[[123,6]]},"1260":{"position":[[261,6]]},"1265":{"position":[[44,6],[391,6]]},"1274":{"position":[[309,6]]},"1336":{"position":[[86,6]]}}}],["single_spe",{"_index":384,"t":{"45":{"position":[[2966,12]]},"341":{"position":[[82,12]]},"343":{"position":[[92,12]]},"617":{"position":[[82,12],[409,12]]},"619":{"position":[[92,12]]}}}],["single_speed_compressor",{"_index":2323,"t":{"787":{"position":[[109,23]]}}}],["single_speed_compressor_chart",{"_index":381,"t":{"45":{"position":[[2901,29]]}}}],["single_speed_compressor_train",{"_index":1677,"t":{"333":{"position":[[48,29]]},"390":{"position":[[35,29]]},"409":{"position":[[635,32]]},"787":{"position":[[139,29]]},"919":{"position":[[35,29]]},"927":{"position":[[48,29]]},"1150":{"position":[[101,29]]}}}],["single_speed_pump",{"_index":2450,"t":{"1163":{"position":[[25,17]]}}}],["single_speed_pump_chart",{"_index":373,"t":{"45":{"position":[[2605,23]]}}}],["singular",{"_index":1871,"t":{"407":{"position":[[739,8]]}}}],["site",{"_index":3018,"t":{"1330":{"position":[[5,4]]},"1336":{"position":[[58,4],[192,4],[298,4]]}}}],["situat",{"_index":1866,"t":{"407":{"position":[[568,9]]},"411":{"position":[[5,9]]},"1206":{"position":[[595,10]]},"1257":{"position":[[255,9]]}}}],["six",{"_index":1312,"t":{"168":{"position":[[75,3]]}}}],["skeleton",{"_index":1174,"t":{"147":{"position":[[144,8]]},"172":{"position":[[28,8]]}}}],["skew",{"_index":1768,"t":{"359":{"position":[[1406,4]]}}}],["skip",{"_index":1650,"t":{"296":{"position":[[582,4]]},"1269":{"position":[[6,4],[51,4]]}}}],["slightli",{"_index":2313,"t":{"753":{"position":[[236,8]]}}}],["slot",{"_index":2990,"t":{"1274":{"position":[[367,5]]}}}],["sm3",{"_index":1037,"t":{"129":{"position":[[178,3]]},"764":{"position":[[35,3]]},"823":{"position":[[78,4]]}}}],["sm3/d",{"_index":932,"t":{"119":{"position":[[419,7]]},"143":{"position":[[800,6],[807,6],[826,6],[833,5]]},"164":{"position":[[31,7]]},"210":{"position":[[807,8]]},"470":{"position":[[70,11]]}}}],["sm3/day",{"_index":851,"t":{"109":{"position":[[261,7]]},"121":{"position":[[1382,8],[1430,7]]},"133":{"position":[[261,7]]},"139":{"position":[[370,9],[1214,8],[2080,8],[2231,8],[2263,7]]},"182":{"position":[[61,9]]},"184":{"position":[[40,7]]},"208":{"position":[[61,7]]},"210":{"position":[[536,9],[1786,9]]},"212":{"position":[[834,9]]},"218":{"position":[[29,7],[86,7]]},"296":{"position":[[78,9]]},"311":{"position":[[28,7]]},"319":{"position":[[28,7]]},"327":{"position":[[408,10]]},"373":{"position":[[426,9]]},"390":{"position":[[1202,9]]},"392":{"position":[[2695,9]]},"473":{"position":[[35,8]]},"542":{"position":[[202,10]]},"546":{"position":[[281,9]]},"825":{"position":[[25,9],[71,9],[104,9]]},"939":{"position":[[116,9]]},"941":{"position":[[60,9]]},"1113":{"position":[[37,9]]},"1115":{"position":[[107,10]]}}}],["sm3/day],[mw",{"_index":1077,"t":{"143":{"position":[[34,15],[646,15]]}}}],["sm3/day],[sm3/day",{"_index":1094,"t":{"143":{"position":[[289,20]]}}}],["sm3/hr",{"_index":1748,"t":{"351":{"position":[[1409,7]]}}}],["small",{"_index":1943,"t":{"429":{"position":[[828,5]]},"508":{"position":[[419,5]]},"1346":{"position":[[646,6]]},"1360":{"position":[[66,5]]}}}],["smaller",{"_index":632,"t":{"87":{"position":[[662,7]]},"189":{"position":[[691,7]]},"345":{"position":[[942,8]]},"475":{"position":[[364,7],[699,7]]},"1291":{"position":[[17,7]]},"1301":{"position":[[17,7]]},"1307":{"position":[[17,7]]},"1352":{"position":[[92,7]]},"1360":{"position":[[91,8]]},"1366":{"position":[[199,7]]}}}],["snake_cas",{"_index":2626,"t":{"1206":{"position":[[876,10]]}}}],["snapshot",{"_index":2813,"t":{"1223":{"position":[[1435,9]]},"1242":{"position":[[1343,9]]},"1392":{"position":[[158,8],[313,8]]}}}],["snok/instal",{"_index":2529,"t":{"1199":{"position":[[574,12]]}}}],["soav",{"_index":1916,"t":{"415":{"position":[[783,6],[983,6]]}}}],["softwar",{"_index":11,"t":{"4":{"position":[[12,8]]}}}],["sole",{"_index":1608,"t":{"264":{"position":[[637,6]]},"359":{"position":[[1431,6]]}}}],["solut",{"_index":1644,"t":{"294":{"position":[[186,8]]},"299":{"position":[[138,8]]},"409":{"position":[[329,8]]},"413":{"position":[[277,10],[569,8]]},"479":{"position":[[219,10]]},"1272":{"position":[[632,8]]}}}],["solv",{"_index":1687,"t":{"335":{"position":[[1859,6]]},"351":{"position":[[856,7],[1121,5]]},"359":{"position":[[804,6]]},"400":{"position":[[465,6]]},"1326":{"position":[[597,6]]},"1374":{"position":[[538,8]]},"1397":{"position":[[642,5]]}}}],["some_facility_input",{"_index":2197,"t":{"512":{"position":[[108,19]]},"576":{"position":[[88,19]]},"762":{"position":[[84,19]]}}}],["some_yaml_file.yaml",{"_index":2343,"t":{"856":{"position":[[9,21]]}}}],["somebodi",{"_index":496,"t":{"54":{"position":[[1491,8]]}}}],["somedirectemitt",{"_index":2267,"t":{"634":{"position":[[24,17]]}}}],["somedirectory/foo/bar",{"_index":184,"t":{"19":{"position":[[637,23]]}}}],["someelectricalconsum",{"_index":2233,"t":{"568":{"position":[[19,22]]}}}],["somelocation/myfield.yaml",{"_index":164,"t":{"19":{"position":[[105,26]]}}}],["somelocation/myfield.yml",{"_index":181,"t":{"19":{"position":[[563,25],[661,25],[766,25],[848,25]]}}}],["someotherdirectemitt",{"_index":2268,"t":{"634":{"position":[[141,22]]}}}],["someotherelectricalconsum",{"_index":2234,"t":{"568":{"position":[[117,27]]}}}],["someotherfuelconsum",{"_index":2328,"t":{"807":{"position":[[224,21]]}}}],["someth",{"_index":2425,"t":{"1041":{"position":[[554,9]]},"1250":{"position":[[2323,9]]},"1374":{"position":[[585,9]]}}}],["somewher",{"_index":209,"t":{"23":{"position":[[133,10]]}}}],["soon",{"_index":145,"t":{"15":{"position":[[372,4]]},"1360":{"position":[[159,5]]}}}],["sort",{"_index":1634,"t":{"284":{"position":[[232,4]]},"819":{"position":[[80,4]]}}}],["sourc",{"_index":70,"t":{"4":{"position":[[880,7]]},"47":{"position":[[2317,6]]},"139":{"position":[[1768,7]]},"227":{"position":[[667,8]]},"251":{"position":[[301,6]]},"260":{"position":[[272,7]]},"441":{"position":[[282,7],[655,7]]},"447":{"position":[[19,6],[79,7]]},"504":{"position":[[433,7]]},"737":{"position":[[192,6]]},"866":{"position":[[43,6]]},"882":{"position":[[35,6],[701,6]]},"970":{"position":[[267,6]]},"1050":{"position":[[130,8]]},"1109":{"position":[[196,7],[569,7]]},"1229":{"position":[[298,6]]},"1370":{"position":[[246,6]]},"1399":{"position":[[907,7]]}}}],["space",{"_index":399,"t":{"45":{"position":[[3482,5]]},"225":{"position":[[217,6]]},"321":{"position":[[173,5]]},"1187":{"position":[[190,6]]},"1219":{"position":[[651,6]]},"1374":{"position":[[698,6]]}}}],["span",{"_index":1475,"t":{"212":{"position":[[130,4]]},"335":{"position":[[784,4]]}}}],["spars",{"_index":3154,"t":{"1366":{"position":[[692,6]]}}}],["special",{"_index":2975,"t":{"1267":{"position":[[615,7]]},"1338":{"position":[[20,7]]},"1344":{"position":[[1190,7]]},"1366":{"position":[[741,7],[762,7]]}}}],["specif",{"_index":362,"t":{"45":{"position":[[2346,14],[4803,13]]},"97":{"position":[[162,14]]},"168":{"position":[[871,8]]},"227":{"position":[[1682,14],[1743,14]]},"247":{"position":[[244,13]]},"255":{"position":[[78,14],[143,14],[190,13],[254,13],[312,13],[381,13],[518,14],[583,14],[630,13],[694,13],[752,13],[821,13]]},"284":{"position":[[435,13]]},"373":{"position":[[180,14]]},"465":{"position":[[231,13]]},"479":{"position":[[287,8]]},"488":{"position":[[937,8],[1109,8]]},"805":{"position":[[113,14]]},"1255":{"position":[[943,8],[1145,8]]},"1332":{"position":[[680,8]]}}}],["specifi",{"_index":182,"t":{"19":{"position":[[589,7],[687,7]]},"23":{"position":[[47,9]]},"45":{"position":[[2269,7],[2510,8]]},"47":{"position":[[186,9],[627,7],[806,9],[874,7],[963,10]]},"87":{"position":[[915,7]]},"101":{"position":[[3,7]]},"105":{"position":[[127,8]]},"107":{"position":[[38,7],[257,7]]},"109":{"position":[[192,8],[334,9],[386,9]]},"115":{"position":[[4301,10]]},"127":{"position":[[3,7]]},"131":{"position":[[38,7],[257,7],[1192,7]]},"133":{"position":[[192,8],[298,9],[350,9]]},"139":{"position":[[2376,9],[2476,10],[2901,10],[3280,9],[3334,10]]},"151":{"position":[[38,9],[170,9]]},"153":{"position":[[495,10],[738,10]]},"157":{"position":[[136,10]]},"159":{"position":[[326,9],[2157,9],[2464,9]]},"168":{"position":[[623,9],[846,9]]},"170":{"position":[[188,9],[379,9]]},"178":{"position":[[31,10],[349,9]]},"206":{"position":[[71,9]]},"212":{"position":[[283,9]]},"216":{"position":[[350,7]]},"225":{"position":[[111,9]]},"227":{"position":[[2178,10],[2240,10]]},"239":{"position":[[151,9]]},"243":{"position":[[93,9],[188,9],[424,9],[508,7]]},"266":{"position":[[19,9],[347,9],[394,9]]},"272":{"position":[[26,9],[411,10]]},"282":{"position":[[341,7]]},"284":{"position":[[258,9],[478,10],[557,10]]},"296":{"position":[[99,7],[286,9]]},"301":{"position":[[0,7],[235,9]]},"335":{"position":[[937,9],[1190,9],[1542,9],[2296,9],[2437,9]]},"337":{"position":[[225,9]]},"359":{"position":[[521,9]]},"371":{"position":[[565,10]]},"377":{"position":[[60,7]]},"392":{"position":[[386,10]]},"398":{"position":[[192,10],[469,9]]},"400":{"position":[[40,9],[109,9],[241,9],[1514,9]]},"423":{"position":[[19,9],[190,10]]},"429":{"position":[[124,9]]},"441":{"position":[[670,9],[909,9]]},"443":{"position":[[121,8]]},"465":{"position":[[267,9],[755,9]]},"470":{"position":[[2906,9]]},"475":{"position":[[1345,9]]},"479":{"position":[[433,10]]},"486":{"position":[[444,9],[536,9]]},"488":{"position":[[117,10],[354,10]]},"494":{"position":[[314,9],[817,10]]},"496":{"position":[[147,10],[308,9]]},"516":{"position":[[32,7]]},"550":{"position":[[59,9],[429,10]]},"580":{"position":[[119,7],[220,9]]},"584":{"position":[[0,10]]},"610":{"position":[[10,9],[982,9]]},"615":{"position":[[72,7],[330,9]]},"622":{"position":[[74,7],[398,9]]},"646":{"position":[[232,9]]},"664":{"position":[[17,9]]},"691":{"position":[[65,9]]},"699":{"position":[[18,9],[337,9]]},"707":{"position":[[178,7],[908,7],[1004,10]]},"715":{"position":[[23,9]]},"747":{"position":[[113,9],[304,9]]},"768":{"position":[[0,9]]},"799":{"position":[[23,9],[118,9],[354,9],[438,7]]},"819":{"position":[[106,9]]},"849":{"position":[[23,9]]},"866":{"position":[[100,10]]},"882":{"position":[[522,9]]},"886":{"position":[[29,9],[102,9]]},"894":{"position":[[28,9],[243,10],[1020,9]]},"907":{"position":[[40,9],[96,9]]},"923":{"position":[[16,9],[176,9]]},"939":{"position":[[169,9],[405,9],[565,7],[656,9],[822,7],[903,7],[1049,7]]},"941":{"position":[[40,10]]},"943":{"position":[[40,10]]},"945":{"position":[[40,10],[294,7]]},"947":{"position":[[40,10],[306,7]]},"949":{"position":[[120,10]]},"951":{"position":[[10,9],[975,9]]},"1021":{"position":[[40,10],[263,10],[533,10]]},"1037":{"position":[[1269,10]]},"1039":{"position":[[123,9],[221,10]]},"1043":{"position":[[18,9]]},"1054":{"position":[[255,7],[661,10],[1082,10]]},"1066":{"position":[[266,9]]},"1082":{"position":[[307,10]]},"1109":{"position":[[584,9],[823,9]]},"1120":{"position":[[41,9],[97,9]]},"1127":{"position":[[33,9],[89,9]]},"1134":{"position":[[62,10],[218,9]]},"1155":{"position":[[31,9],[107,10],[141,9]]},"1169":{"position":[[231,9]]},"1221":{"position":[[171,7]]},"1250":{"position":[[1944,9]]},"1255":{"position":[[931,7],[1460,9],[1532,10]]},"1267":{"position":[[455,9]]},"1272":{"position":[[811,10],[1541,7]]},"1274":{"position":[[887,9],[961,9]]},"1289":{"position":[[92,9]]},"1318":{"position":[[291,7]]}}}],["specifications/data",{"_index":1790,"t":{"377":{"position":[[629,19]]}}}],["speed",{"_index":745,"t":{"101":{"position":[[259,5]]},"119":{"position":[[45,5],[527,5]]},"127":{"position":[[317,5]]},"151":{"position":[[227,6]]},"159":{"position":[[507,5]]},"187":{"position":[[25,5],[44,6]]},"189":{"position":[[210,5],[229,5],[366,5],[433,5],[452,6],[603,6],[835,5],[913,5],[1084,5]]},"191":{"position":[[27,5]]},"193":{"position":[[91,6],[141,5],[181,5],[232,5],[334,6],[354,5],[439,5],[464,5]]},"198":{"position":[[29,5],[71,6]]},"200":{"position":[[15,5]]},"272":{"position":[[210,5],[249,5]]},"278":{"position":[[72,5]]},"280":{"position":[[209,5]]},"335":{"position":[[26,5],[44,6],[1077,5],[1284,5],[1428,5],[1633,5],[1909,5],[2045,5]]},"337":{"position":[[149,5],[181,5]]},"339":{"position":[[11,5],[69,6]]},"341":{"position":[[302,6],[316,5]]},"343":{"position":[[169,6],[324,5],[403,5]]},"345":{"position":[[13,5],[96,7],[150,5],[190,5],[288,5],[675,5],[738,5]]},"347":{"position":[[305,6],[319,5],[534,6],[548,5]]},"349":{"position":[[174,6],[291,6],[431,6],[629,5],[711,5]]},"355":{"position":[[315,5]]},"365":{"position":[[15,5],[327,6],[399,5],[523,5],[733,5],[774,5]]},"369":{"position":[[116,5],[154,5],[203,5],[241,5]]},"371":{"position":[[24,5],[392,6]]},"380":{"position":[[174,6],[291,6]]},"384":{"position":[[272,6],[389,6]]},"388":{"position":[[11,5],[72,5],[130,5],[226,6],[248,5],[289,5],[583,5],[734,5],[788,5]]},"392":{"position":[[57,6],[142,5],[173,5],[327,5],[429,5],[829,5],[858,6],[931,7],[943,5],[991,5],[1014,5],[1142,5]]},"398":{"position":[[1356,5]]},"400":{"position":[[520,5],[597,5],[735,5],[831,5],[917,5],[954,5],[1071,5],[1414,5]]},"402":{"position":[[212,5],[231,5],[495,5]]},"407":{"position":[[64,5],[206,5],[414,5]]},"409":{"position":[[629,5],[843,6],[1088,5],[1182,5],[1280,5]]},"411":{"position":[[36,5],[480,5],[853,5]]},"413":{"position":[[951,5]]},"465":{"position":[[2697,5],[2814,6],[2914,6],[3072,5],[3141,5],[3420,5],[3480,5],[3590,6],[3841,5],[4242,5]]},"470":{"position":[[1681,5],[1969,5]]},"500":{"position":[[804,5]]},"508":{"position":[[545,6],[561,5]]},"516":{"position":[[1201,5],[1223,5]]},"588":{"position":[[61,5],[451,6],[531,5],[599,5],[640,5],[782,5],[839,5]]},"602":{"position":[[73,5],[271,5],[312,5],[454,5],[511,5]]},"615":{"position":[[29,5],[91,5],[367,6]]},"617":{"position":[[108,6],[122,5]]},"619":{"position":[[118,6]]},"622":{"position":[[31,5],[95,5],[296,6],[435,6],[493,6]]},"624":{"position":[[111,6],[125,5],[340,6],[354,5]]},"626":{"position":[[123,6],[240,6]]},"646":{"position":[[293,5]]},"660":{"position":[[174,6]]},"843":{"position":[[174,6]]},"847":{"position":[[76,5]]},"894":{"position":[[1218,5]]},"917":{"position":[[61,5]]},"1169":{"position":[[292,5]]},"1185":{"position":[[98,5]]},"1212":{"position":[[497,5],[597,5]]},"1219":{"position":[[284,5]]},"1250":{"position":[[1160,5],[1179,5],[1580,5],[1643,5]]},"1257":{"position":[[143,5]]},"1260":{"position":[[24,5],[268,5]]},"1265":{"position":[[64,5],[139,5],[398,5]]},"1267":{"position":[[60,5]]},"1272":{"position":[[666,5],[734,5]]},"1274":{"position":[[273,5],[316,5],[1245,5]]},"1305":{"position":[[189,5]]},"1320":{"position":[[259,5]]},"1324":{"position":[[99,5],[315,5]]},"1326":{"position":[[250,5],[342,5],[422,6],[585,6],[715,6]]}}}],["speed,rate,head,effici",{"_index":1109,"t":{"143":{"position":[[489,26]]}}}],["speed/minimum",{"_index":1379,"t":{"189":{"position":[[938,13]]}}}],["spell",{"_index":2663,"t":{"1210":{"position":[[548,8]]}}}],["spelling/dash",{"_index":2206,"t":{"516":{"position":[[420,13]]}}}],["spin",{"_index":2031,"t":{"470":{"position":[[430,8]]}}}],["split",{"_index":603,"t":{"81":{"position":[[142,5]]},"159":{"position":[[972,5],[1138,5]]},"313":{"position":[[116,5]]},"400":{"position":[[276,5]]},"717":{"position":[[218,5]]},"894":{"position":[[1075,5]]},"1257":{"position":[[668,9]]},"1315":{"position":[[142,5]]},"1366":{"position":[[164,5]]}}}],["splitting/halv",{"_index":1760,"t":{"359":{"position":[[124,17]]}}}],["spread",{"_index":1742,"t":{"351":{"position":[[641,6],[722,7]]},"359":{"position":[[763,6]]}}}],["sqrt{p_{1",{"_index":1554,"t":{"241":{"position":[[178,11]]}}}],["src=\"path/image.jpg",{"_index":3101,"t":{"1344":{"position":[[1012,20]]}}}],["srk",{"_index":788,"t":{"105":{"position":[[818,3]]},"117":{"position":[[1229,3]]},"380":{"position":[[522,3]]},"382":{"position":[[318,3]]},"384":{"position":[[615,3]]},"386":{"position":[[176,3]]},"415":{"position":[[779,3],[947,3],[979,3]]},"421":{"position":[[126,3],[299,3]]},"427":{"position":[[106,3]]},"787":{"position":[[80,3]]}}}],["stack",{"_index":188,"t":{"19":{"position":[[797,5]]}}}],["stage",{"_index":652,"t":{"89":{"position":[[1193,5],[1258,5]]},"105":{"position":[[1235,7]]},"117":{"position":[[1644,7]]},"153":{"position":[[775,7],[966,5]]},"212":{"position":[[271,7]]},"266":{"position":[[494,6],[571,6]]},"335":{"position":[[563,6],[925,7],[1254,6],[1606,6],[1819,6],[1875,5],[2216,6],[2318,7],[2426,5]]},"357":{"position":[[181,7]]},"365":{"position":[[599,7],[712,6]]},"367":{"position":[[153,7],[216,6],[288,6]]},"371":{"position":[[102,5],[190,6],[634,6],[695,6]]},"375":{"position":[[20,6],[43,5],[246,7],[309,6],[381,6],[489,6],[562,6],[643,5]]},"377":{"position":[[30,6],[99,6],[351,6],[883,6],[958,7],[1062,7]]},"380":{"position":[[850,7]]},"382":{"position":[[468,7]]},"384":{"position":[[765,7]]},"388":{"position":[[692,5]]},"390":{"position":[[396,7],[459,6],[531,6],[648,5],[719,6],[792,6],[909,5],[953,5]]},"392":{"position":[[1585,7],[1648,6],[1720,6],[1830,6],[1920,5],[2060,6],[2133,6],[2243,6],[2333,5],[2446,5]]},"396":{"position":[[195,5],[236,5],[652,7],[715,6],[975,5],[1121,6],[1546,5],[1746,6],[1998,5]]},"398":{"position":[[203,6],[231,6],[272,6],[416,6],[488,6],[509,6],[645,6],[652,6],[824,6],[997,6],[1166,5]]},"400":{"position":[[77,6],[133,6],[1708,5],[1773,5]]},"404":{"position":[[275,7],[605,5],[673,5]]},"409":{"position":[[242,6],[296,5],[372,5]]},"413":{"position":[[158,6],[199,6],[476,5],[639,5],[2037,5],[2264,5],[2340,6],[2376,5],[2407,5],[2508,5],[2582,5],[2772,5]]},"465":{"position":[[3286,7],[3370,5]]},"586":{"position":[[17,6]]},"588":{"position":[[578,6]]},"591":{"position":[[156,7],[219,6],[291,6]]},"593":{"position":[[118,7]]},"596":{"position":[[424,7],[487,6],[912,5]]},"598":{"position":[[280,7],[712,5],[780,5]]},"600":{"position":[[17,6]]},"602":{"position":[[250,6]]},"604":{"position":[[156,7],[219,6],[291,6]]},"606":{"position":[[118,7]]},"648":{"position":[[113,7]]},"650":{"position":[[106,7]]},"874":{"position":[[136,6]]},"876":{"position":[[51,7],[114,6]]},"878":{"position":[[55,7]]},"894":{"position":[[52,6],[375,7],[438,6],[657,6]]},"919":{"position":[[224,7],[287,6]]},"1062":{"position":[[36,5]]},"1064":{"position":[[75,7],[138,6],[210,6]]},"1066":{"position":[[0,6],[28,6],[69,6],[213,6],[285,6],[306,6],[442,6],[449,6],[621,6],[794,6]]},"1068":{"position":[[103,7],[166,6],[426,5],[572,6],[997,5]]},"1070":{"position":[[107,7],[437,5],[505,5]]},"1072":{"position":[[17,6]]},"1074":{"position":[[136,6],[176,5]]},"1076":{"position":[[102,7],[165,6],[386,6]]},"1078":{"position":[[106,7]]},"1171":{"position":[[113,7]]},"1173":{"position":[[106,7]]},"1199":{"position":[[130,5],[1377,5]]},"1206":{"position":[[652,5]]},"1210":{"position":[[27,5]]},"1219":{"position":[[330,6]]},"1272":{"position":[[824,5],[1052,6],[1080,7],[1143,6]]},"1274":{"position":[[69,5]]},"1320":{"position":[[356,5]]},"1392":{"position":[[267,6]]}}}],["stand",{"_index":1679,"t":{"335":{"position":[[63,5]]}}}],["standalon",{"_index":1776,"t":{"371":{"position":[[295,10]]}}}],["standard",{"_index":1479,"t":{"212":{"position":[[804,8]]},"351":{"position":[[1555,8]]},"373":{"position":[[412,8]]},"390":{"position":[[1188,8]]},"392":{"position":[[2681,8]]},"488":{"position":[[918,8],[1090,8]]},"907":{"position":[[230,8]]},"1210":{"position":[[342,8]]},"1238":{"position":[[185,8]]},"1311":{"position":[[101,8],[155,8]]},"1340":{"position":[[16,8]]},"1342":{"position":[[27,8]]},"1399":{"position":[[1234,8]]}}}],["standard_conditions_dens",{"_index":2749,"t":{"1219":{"position":[[1019,27]]}}}],["start",{"_index":108,"t":{"8":{"position":[[269,7]]},"25":{"position":[[363,7]]},"37":{"position":[[233,7]]},"178":{"position":[[248,8]]},"227":{"position":[[2545,5]]},"407":{"position":[[842,6]]},"429":{"position":[[758,5]]},"504":{"position":[[352,5],[368,5]]},"664":{"position":[[353,8]]},"707":{"position":[[952,5]]},"830":{"position":[[31,6],[60,5]]},"1052":{"position":[[0,5]]},"1054":{"position":[[11,5],[417,6],[560,5],[1159,6]]},"1056":{"position":[[0,6]]},"1058":{"position":[[117,6]]},"1267":{"position":[[240,6],[820,7]]},"1344":{"position":[[315,5],[336,5]]},"1346":{"position":[[292,5]]},"1348":{"position":[[39,7]]},"1370":{"position":[[382,8]]}}}],["state",{"_index":1186,"t":{"153":{"position":[[158,5]]},"398":{"position":[[98,5]]},"415":{"position":[[607,5],[718,5]]},"465":{"position":[[427,5],[580,5]]},"1082":{"position":[[213,5]]},"1242":{"position":[[248,6]]}}}],["statement",{"_index":612,"t":{"87":{"position":[[100,9]]},"1344":{"position":[[522,9],[569,9],[581,9],[593,9]]}}}],["static",{"_index":126,"t":{"13":{"position":[[123,10]]},"465":{"position":[[222,8]]},"1336":{"position":[[51,6]]}}}],["statu",{"_index":3216,"t":{"1388":{"position":[[79,6]]}}}],["status",{"_index":3014,"t":{"1324":{"position":[[51,8]]}}}],["stay",{"_index":2301,"t":{"717":{"position":[[105,5]]},"1054":{"position":[[1230,4]]}}}],["steam",{"_index":521,"t":{"60":{"position":[[32,5],[191,5],[366,5],[473,5],[528,5],[644,5],[744,5]]},"516":{"position":[[1667,5],[1758,5],[1814,5]]},"1297":{"position":[[141,5]]}}}],["steamgen",{"_index":529,"t":{"60":{"position":[[625,8]]}}}],["steamturbinegeneratorconsumpt",{"_index":3005,"t":{"1299":{"position":[[135,32]]}}}],["step",{"_index":296,"t":{"43":{"position":[[141,4],[149,4]]},"52":{"position":[[143,4],[151,4]]},"58":{"position":[[68,6]]},"260":{"position":[[310,6]]},"315":{"position":[[422,5]]},"400":{"position":[[1357,6],[1572,5]]},"413":{"position":[[2084,4]]},"468":{"position":[[250,5]]},"488":{"position":[[383,5]]},"494":{"position":[[846,5]]},"737":{"position":[[238,4],[283,4]]},"866":{"position":[[23,5]]},"882":{"position":[[683,5],[842,6],[890,4],[975,5],[1098,4],[1179,5],[1322,6]]},"1054":{"position":[[687,4]]},"1219":{"position":[[931,5]]},"1250":{"position":[[1285,5]]},"1267":{"position":[[176,4]]},"1269":{"position":[[71,5],[106,5]]},"1350":{"position":[[33,6]]}}}],["still",{"_index":1318,"t":{"168":{"position":[[1062,5]]},"193":{"position":[[311,5]]},"315":{"position":[[406,5]]},"409":{"position":[[854,5]]},"475":{"position":[[1225,5]]},"847":{"position":[[612,5]]},"1255":{"position":[[2358,5]]},"1269":{"position":[[122,5]]},"1388":{"position":[[46,5]]}}}],["stonewal",{"_index":1825,"t":{"392":{"position":[[1004,9],[1160,9]]}}}],["stop",{"_index":2282,"t":{"707":{"position":[[29,4],[859,5]]},"1267":{"position":[[117,5]]}}}],["storag",{"_index":406,"t":{"45":{"position":[[3770,8],[4184,7],[4249,7]]},"516":{"position":[[1586,7]]},"1281":{"position":[[254,7]]}}}],["store",{"_index":437,"t":{"47":{"position":[[1101,5]]},"486":{"position":[[295,5]]},"516":{"position":[[1647,7]]},"1252":{"position":[[174,6]]},"1255":{"position":[[871,5]]},"1376":{"position":[[43,5],[218,6]]}}}],["stp",{"_index":2162,"t":{"488":{"position":[[1063,3],[1139,5],[1188,3]]},"1221":{"position":[[273,3],[487,3]]},"1303":{"position":[[0,3],[73,3],[376,3]]}}}],["strategi",{"_index":1658,"t":{"313":{"position":[[164,11]]}}}],["stream",{"_index":541,"t":{"68":{"position":[[192,7]]},"278":{"position":[[115,7]]},"280":{"position":[[252,7],[316,6],[344,6],[378,6],[713,7]]},"282":{"position":[[383,6]]},"335":{"position":[[2088,7],[2178,7],[2396,6]]},"365":{"position":[[817,7]]},"369":{"position":[[284,7]]},"392":{"position":[[1271,6]]},"394":{"position":[[125,7]]},"396":{"position":[[170,7],[218,6],[264,8],[285,7],[357,6],[465,6],[579,6],[643,8],[798,7],[817,6],[829,8],[866,8],[1204,7],[1236,6],[1248,7],[1280,7],[1311,6],[1323,7],[1359,7]]},"398":{"position":[[0,7],[43,7],[140,6],[552,6],[680,6],[740,6],[764,6],[801,6],[946,6],[1048,7]]},"400":{"position":[[1659,7],[1749,6],[1805,7],[1872,7],[1904,6]]},"404":{"position":[[102,8],[339,7],[475,7]]},"465":{"position":[[2872,6],[2895,6],[4051,7],[4142,6],[4285,7]]},"516":{"position":[[827,6]]},"536":{"position":[[111,8]]},"580":{"position":[[63,6],[579,6],[828,6],[1030,6]]},"588":{"position":[[683,7]]},"596":{"position":[[103,8],[129,6],[237,6],[351,6],[415,8],[570,7],[602,6],[614,7],[646,7],[677,6],[689,7],[725,7]]},"598":{"position":[[107,8],[344,7],[582,7]]},"602":{"position":[[355,7]]},"646":{"position":[[336,7]]},"894":{"position":[[521,7],[540,6],[552,8],[589,8],[1261,7]]},"917":{"position":[[588,6]]},"1029":{"position":[[33,6]]},"1037":{"position":[[167,6],[233,6],[420,6],[458,6],[908,6],[1214,6]]},"1039":{"position":[[71,6],[343,6],[526,6],[544,6],[575,6],[600,6],[623,6]]},"1041":{"position":[[123,6],[348,6],[377,6]]},"1050":{"position":[[30,6],[95,6],[299,6]]},"1060":{"position":[[17,7]]},"1066":{"position":[[349,6],[477,6],[537,6],[561,6],[598,6],[743,6],[845,7]]},"1068":{"position":[[249,7],[268,6],[280,8],[317,8],[655,7],[687,6],[699,7],[731,7],[762,6],[774,7],[810,7]]},"1070":{"position":[[171,7],[307,7]]},"1072":{"position":[[24,7],[77,7]]},"1074":{"position":[[206,8]]},"1076":{"position":[[248,7],[267,6],[279,8],[316,8],[469,7],[501,6],[513,7],[545,7],[576,6],[588,7],[624,7]]},"1078":{"position":[[170,7]]},"1080":{"position":[[17,7]]},"1082":{"position":[[115,7],[158,7],[255,6]]},"1084":{"position":[[98,8],[124,6],[232,6],[346,6]]},"1086":{"position":[[102,8]]},"1169":{"position":[[335,7]]},"1185":{"position":[[141,7]]},"1193":{"position":[[44,6],[105,7],[167,7]]},"1195":{"position":[[119,7]]},"1199":{"position":[[1397,7]]},"1201":{"position":[[19,7],[69,6],[474,6]]},"1206":{"position":[[672,7]]},"1210":{"position":[[288,7],[385,7]]},"1219":{"position":[[202,7]]},"1223":{"position":[[360,7]]},"1227":{"position":[[19,6]]},"1272":{"position":[[907,6],[991,7],[1226,7],[1258,6],[1270,7],[1302,7],[1333,6],[1345,7],[1381,7]]},"1274":{"position":[[32,7]]},"1311":{"position":[[29,7]]},"1318":{"position":[[355,6]]},"1320":{"position":[[296,7]]},"1324":{"position":[[383,7]]}}}],["stream/calendar",{"_index":2423,"t":{"1039":{"position":[[493,15]]}}}],["stream_day",{"_index":2242,"t":{"580":{"position":[[337,11],[409,10],[840,11]]},"582":{"position":[[107,11]]},"584":{"position":[[149,10],[215,10],[354,10]]},"1039":{"position":[[203,10],[268,10]]}}}],["streamcondit",{"_index":2582,"t":{"1201":{"position":[[455,15]]}}}],["strict",{"_index":1498,"t":{"225":{"position":[[63,6]]}}}],["strike",{"_index":3083,"t":{"1344":{"position":[[416,6]]}}}],["string",{"_index":2449,"t":{"1142":{"position":[[21,7],[41,8]]},"1223":{"position":[[695,7]]},"1272":{"position":[[951,6]]},"1374":{"position":[[723,7]]}}}],["strive",{"_index":3137,"t":{"1364":{"position":[[107,6]]},"1366":{"position":[[58,6]]}}}],["stroke:blu",{"_index":711,"t":{"95":{"position":[[877,12],[899,12],[921,12],[943,12],[965,12]]},"121":{"position":[[530,12],[551,12],[572,12],[593,12]]},"145":{"position":[[349,12],[370,12],[391,12],[412,12],[433,12]]}}}],["stroke:r",{"_index":709,"t":{"95":{"position":[[836,11],[856,11]]},"121":{"position":[[510,11]]},"145":{"position":[[329,11]]}}}],["strong>text/[opt",{"_index":3176,"t":{"1368":{"position":[[101,15]]}}}],["typer",{"_index":2807,"t":{"1223":{"position":[[1285,5]]}}}],["typic",{"_index":1187,"t":{"153":{"position":[[310,9]]},"227":{"position":[[823,10]]},"249":{"position":[[171,9]]},"351":{"position":[[594,9]]},"407":{"position":[[16,9]]},"415":{"position":[[185,7]]},"465":{"position":[[1091,9]]},"475":{"position":[[228,9]]},"477":{"position":[[182,9]]},"691":{"position":[[182,9]]},"823":{"position":[[283,9]]},"882":{"position":[[362,9]]},"1041":{"position":[[476,9]]},"1403":{"position":[[98,9]]}}}],["typing
  • list",{"_index":3095,"t":{"1344":{"position":[[757,12],[887,12]]}}}],["ultra_dri",{"_index":1926,"t":{"417":{"position":[[64,9]]},"421":{"position":[[255,9]]}}}],["ultra_rich",{"_index":1933,"t":{"417":{"position":[[150,10]]}}}],["unabl",{"_index":1233,"t":{"159":{"position":[[865,6]]}}}],["unbias",{"_index":1383,"t":{"189":{"position":[[1130,9]]},"847":{"position":[[122,9]]}}}],["under",{"_index":677,"t":{"93":{"position":[[128,5]]},"101":{"position":[[330,5]]},"105":{"position":[[70,5]]},"109":{"position":[[344,5]]},"127":{"position":[[444,5]]},"133":{"position":[[308,5]]},"159":{"position":[[151,5],[336,5]]},"178":{"position":[[292,5]]},"210":{"position":[[331,5],[593,6],[643,5],[1574,5]]},"214":{"position":[[40,5]]},"227":{"position":[[2116,5],[2429,5]]},"249":{"position":[[458,5]]},"264":{"position":[[282,5],[310,5],[497,5]]},"266":{"position":[[29,5]]},"272":{"position":[[36,5],[153,5]]},"284":{"position":[[152,5]]},"296":{"position":[[124,5],[296,5]]},"301":{"position":[[67,5],[245,5]]},"388":{"position":[[869,5]]},"392":{"position":[[1416,5]]},"396":{"position":[[21,5]]},"409":{"position":[[341,5]]},"413":{"position":[[227,5]]},"441":{"position":[[788,5]]},"445":{"position":[[10,5]]},"615":{"position":[[283,5]]},"622":{"position":[[350,5]]},"653":{"position":[[183,5],[287,5],[457,5]]},"819":{"position":[[0,5]]},"835":{"position":[[175,5],[267,5],[443,5]]},"894":{"position":[[118,5]]},"907":{"position":[[50,5]]},"1074":{"position":[[126,5]]},"1109":{"position":[[702,5]]},"1120":{"position":[[51,5]]},"1127":{"position":[[43,5]]},"1134":{"position":[[86,5]]},"1257":{"position":[[971,5]]},"1403":{"position":[[297,5]]}}}],["underscor",{"_index":397,"t":{"45":{"position":[[3451,10],[3587,10]]}}}],["understand",{"_index":595,"t":{"79":{"position":[[403,10]]},"107":{"position":[[155,10]]},"127":{"position":[[505,10]]},"131":{"position":[[155,10]]},"1054":{"position":[[1057,14]]}}}],["understood",{"_index":484,"t":{"54":{"position":[[673,10]]}}}],["undocu",{"_index":2883,"t":{"1240":{"position":[[18,12]]}}}],["unicod",{"_index":258,"t":{"31":{"position":[[209,9]]}}}],["unifi",{"_index":1745,"t":{"351":{"position":[[1170,7],[1251,7]]},"359":{"position":[[441,7]]}}}],["uniform",{"_index":3135,"t":{"1364":{"position":[[47,7]]}}}],["union",{"_index":548,"t":{"70":{"position":[[69,5]]},"488":{"position":[[402,5]]},"494":{"position":[[865,5]]}}}],["uniqu",{"_index":297,"t":{"45":{"position":[[28,6],[411,7],[447,6]]},"413":{"position":[[562,6]]},"1195":{"position":[[57,6]]},"1223":{"position":[[794,6],[822,6]]},"1287":{"position":[[28,6]]}}}],["unisim",{"_index":1706,"t":{"345":{"position":[[916,6]]}}}],["unit",{"_index":50,"t":{"4":{"position":[[533,5]]},"45":{"position":[[67,5],[2135,5],[2228,6],[2282,5],[2480,6],[2682,6],[2828,6],[2979,6],[3136,6]]},"101":{"position":[[578,6]]},"105":{"position":[[474,6],[638,6]]},"117":{"position":[[284,6],[885,6],[1049,6]]},"127":{"position":[[934,6]]},"141":{"position":[[464,6]]},"151":{"position":[[552,6]]},"153":{"position":[[1482,6]]},"161":{"position":[[218,6],[766,6]]},"184":{"position":[[7,4]]},"191":{"position":[[122,5]]},"195":{"position":[[102,6],[121,5],[189,5],[262,4]]},"198":{"position":[[137,5]]},"200":{"position":[[43,5]]},"202":{"position":[[104,6],[123,5],[191,5],[264,4]]},"204":{"position":[[115,6],[276,6],[456,6]]},"208":{"position":[[7,4]]},"218":{"position":[[9,5]]},"227":{"position":[[1587,6]]},"249":{"position":[[220,5],[272,5]]},"264":{"position":[[490,6]]},"311":{"position":[[17,5]]},"319":{"position":[[17,5]]},"341":{"position":[[95,6],[114,5],[182,5],[261,5]]},"343":{"position":[[105,6]]},"347":{"position":[[97,6],[116,5],[184,5],[263,5]]},"349":{"position":[[109,6]]},"351":{"position":[[1374,5],[1421,5],[1668,6]]},"353":{"position":[[253,6],[272,5],[340,5],[419,5]]},"355":{"position":[[182,6]]},"361":{"position":[[181,6],[223,5]]},"363":{"position":[[134,6]]},"380":{"position":[[109,6]]},"382":{"position":[[182,6]]},"384":{"position":[[207,6]]},"398":{"position":[[1407,4]]},"429":{"position":[[591,5],[940,5]]},"445":{"position":[[275,6]]},"468":{"position":[[112,4]]},"576":{"position":[[49,7]]},"580":{"position":[[1024,5]]},"584":{"position":[[449,4]]},"602":{"position":[[25,4]]},"653":{"position":[[225,5]]},"656":{"position":[[99,6]]},"658":{"position":[[102,6],[142,4]]},"660":{"position":[[109,6]]},"757":{"position":[[20,4]]},"823":{"position":[[340,5]]},"835":{"position":[[217,5]]},"838":{"position":[[51,6],[81,5]]},"840":{"position":[[47,6],[77,5]]},"843":{"position":[[109,6]]},"851":{"position":[[46,6]]},"985":{"position":[[92,4]]},"1014":{"position":[[126,5]]},"1016":{"position":[[81,6]]},"1018":{"position":[[69,6]]},"1021":{"position":[[349,4]]},"1041":{"position":[[436,4],[498,5]]},"1090":{"position":[[224,4]]},"1155":{"position":[[0,5]]},"1158":{"position":[[47,6],[66,5],[134,5],[207,4]]},"1160":{"position":[[51,6],[70,5],[138,5],[217,5]]},"1163":{"position":[[77,6]]},"1165":{"position":[[109,6]]},"1185":{"position":[[248,6],[326,4]]},"1238":{"position":[[59,5]]},"1257":{"position":[[908,5]]},"1272":{"position":[[388,5]]},"1277":{"position":[[0,5]]},"1281":{"position":[[134,5]]},"1287":{"position":[[67,5]]},"1358":{"position":[[297,4]]},"1403":{"position":[[147,5],[199,5]]}}}],["unix",{"_index":192,"t":{"21":{"position":[[25,4]]}}}],["unless",{"_index":3161,"t":{"1366":{"position":[[868,6],[1070,6]]},"1372":{"position":[[57,6]]}}}],["unnecessari",{"_index":2665,"t":{"1210":{"position":[[594,11]]},"1221":{"position":[[116,11]]}}}],["unord",{"_index":3093,"t":{"1344":{"position":[[707,11]]}}}],["unrealist",{"_index":1744,"t":{"351":{"position":[[826,11]]},"359":{"position":[[1167,11],[1449,11],[1547,11]]},"479":{"position":[[207,11]]}}}],["unrecogn",{"_index":253,"t":{"31":{"position":[[170,12]]}}}],["unrel",{"_index":3131,"t":{"1360":{"position":[[184,9]]}}}],["until",{"_index":1820,"t":{"392":{"position":[[191,5],[747,5]]},"465":{"position":[[2317,5],[2950,5]]},"917":{"position":[[455,5]]}}}],["unus",{"_index":2877,"t":{"1238":{"position":[[216,6]]},"1366":{"position":[[248,6]]}}}],["unwant",{"_index":1759,"t":{"359":{"position":[[101,8]]}}}],["up",{"_index":73,"t":{"4":{"position":[[921,2]]},"37":{"position":[[249,2]]},"45":{"position":[[99,2],[2443,2]]},"168":{"position":[[108,2],[735,2]]},"189":{"position":[[496,2],[761,2]]},"212":{"position":[[28,2],[1405,2],[1579,2]]},"227":{"position":[[586,2]]},"251":{"position":[[25,3],[118,2]]},"327":{"position":[[285,2]]},"337":{"position":[[36,2],[109,2]]},"359":{"position":[[249,2],[544,2]]},"365":{"position":[[705,2]]},"475":{"position":[[635,2]]},"483":{"position":[[72,2]]},"488":{"position":[[551,2]]},"494":{"position":[[1014,2]]},"588":{"position":[[571,2]]},"602":{"position":[[243,2]]},"610":{"position":[[749,3]]},"699":{"position":[[116,2]]},"715":{"position":[[112,2]]},"830":{"position":[[66,3]]},"951":{"position":[[742,3]]},"1287":{"position":[[99,2]]},"1332":{"position":[[375,2]]},"1360":{"position":[[240,2]]},"1372":{"position":[[186,2]]}}}],["upcom",{"_index":141,"t":{"15":{"position":[[341,8]]},"17":{"position":[[94,8]]},"35":{"position":[[72,8]]},"1197":{"position":[[80,8]]}}}],["updat",{"_index":672,"t":{"91":{"position":[[511,7]]},"717":{"position":[[18,6]]},"1195":{"position":[[190,6]]},"1197":{"position":[[59,6]]},"1199":{"position":[[1004,6],[1041,6],[1078,6],[1114,6],[1180,6],[1284,7]]},"1208":{"position":[[361,6],[397,6]]},"1210":{"position":[[728,6],[760,6]]},"1221":{"position":[[226,6],[293,6],[328,6],[389,6],[450,6]]},"1223":{"position":[[1357,6],[1428,6]]},"1229":{"position":[[195,6],[349,6]]},"1240":{"position":[[51,6]]},"1242":{"position":[[1190,6],[1241,6],[1284,6],[1331,6]]},"1245":{"position":[[49,6]]},"1311":{"position":[[131,8]]},"1326":{"position":[[365,7]]},"1384":{"position":[[19,6]]},"1386":{"position":[[19,6]]}}}],["upgrad",{"_index":2558,"t":{"1199":{"position":[[1234,7]]},"1291":{"position":[[25,7]]},"1301":{"position":[[25,7]]},"1307":{"position":[[25,7]]}}}],["upload",{"_index":2965,"t":{"1265":{"position":[[303,9],[458,9]]}}}],["upon",{"_index":1877,"t":{"409":{"position":[[470,4]]}}}],["upper",{"_index":392,"t":{"45":{"position":[[3413,5],[3546,5]]},"345":{"position":[[134,5],[272,5]]},"516":{"position":[[401,5]]}}}],["uppercas",{"_index":308,"t":{"45":{"position":[[329,9],[5013,9]]},"931":{"position":[[55,9]]},"1287":{"position":[[329,9]]}}}],["upstream",{"_index":1843,"t":{"400":{"position":[[1268,8]]},"407":{"position":[[441,8],[1040,8],[1799,8]]},"409":{"position":[[11,8]]},"411":{"position":[[554,8]]},"892":{"position":[[173,8]]},"894":{"position":[[960,8]]},"917":{"position":[[544,8]]},"1169":{"position":[[186,8]]},"1384":{"position":[[109,8]]},"1397":{"position":[[810,8]]},"1399":{"position":[[281,8],[305,8],[898,8],[989,8]]}}}],["upstream/downstream",{"_index":1767,"t":{"359":{"position":[[1307,19]]}}}],["upstream/main",{"_index":3229,"t":{"1399":{"position":[[1009,13]]}}}],["upstream_chok",{"_index":1757,"t":{"357":{"position":[[148,14]]},"390":{"position":[[181,15]]},"392":{"position":[[2884,15]]},"402":{"position":[[53,14]]},"411":{"position":[[726,15]]},"648":{"position":[[203,14]]},"650":{"position":[[174,14]]},"894":{"position":[[816,14],[903,14]]},"977":{"position":[[193,14]]},"979":{"position":[[139,15]]},"1171":{"position":[[201,14]]},"1173":{"position":[[174,14]]},"1260":{"position":[[300,14]]}}}],["upstream_pressure_control",{"_index":1832,"t":{"396":{"position":[[1591,26]]},"404":{"position":[[545,26]]},"596":{"position":[[957,26]]},"598":{"position":[[652,26]]},"650":{"position":[[147,26]]},"894":{"position":[[169,25],[769,26]]},"1068":{"position":[[1042,26]]},"1070":{"position":[[377,26]]},"1167":{"position":[[47,25]]},"1171":{"position":[[154,26]]},"1173":{"position":[[147,26]]}}}],["upstream_pressure_control/downstream_pressure_control",{"_index":1842,"t":{"400":{"position":[[1131,55]]}}}],["upward",{"_index":1665,"t":{"315":{"position":[[712,7]]}}}],["url",{"_index":2487,"t":{"1195":{"position":[[282,4]]},"1245":{"position":[[70,3]]}}}],["us",{"_index":61,"t":{"4":{"position":[[703,5],[907,4]]},"6":{"position":[[3,5]]},"8":{"position":[[3,3]]},"10":{"position":[[69,5]]},"15":{"position":[[139,3],[167,3],[330,3]]},"17":{"position":[[36,3],[173,3]]},"19":{"position":[[0,3]]},"31":{"position":[[6,4]]},"33":{"position":[[153,5],[341,5]]},"35":{"position":[[42,3],[116,3]]},"37":{"position":[[196,5],[382,3]]},"45":{"position":[[210,4],[234,3],[271,3],[1692,5],[1820,4],[2307,5],[3621,4],[3645,3],[3799,4],[3999,4],[4058,4],[4217,4],[4276,4],[4433,4],[4490,4],[4670,4],[4743,4],[4851,4],[4955,3],[5178,3]]},"47":{"position":[[143,3],[308,4],[509,3],[751,3],[2109,5],[2180,3],[2604,4],[2715,3]]},"54":{"position":[[1013,4],[1440,4]]},"56":{"position":[[117,3]]},"60":{"position":[[811,5]]},"68":{"position":[[113,6]]},"70":{"position":[[1220,3]]},"91":{"position":[[30,3]]},"95":{"position":[[75,3]]},"101":{"position":[[51,5],[82,4]]},"103":{"position":[[80,4]]},"107":{"position":[[831,5],[885,3]]},"109":{"position":[[442,4],[516,4]]},"115":{"position":[[2862,4],[3255,3],[3344,5],[3762,3],[3851,5]]},"127":{"position":[[51,5],[82,4],[349,4]]},"131":{"position":[[1026,5],[1076,3]]},"139":{"position":[[727,4],[794,4],[2749,3],[2838,5],[3212,4],[3546,4],[3613,4]]},"141":{"position":[[1875,4],[1942,4],[2801,4],[2868,4]]},"153":{"position":[[199,3],[453,5],[549,4],[585,5],[645,4],[712,5]]},"155":{"position":[[31,4]]},"157":{"position":[[155,4]]},"159":{"position":[[27,4],[664,5],[717,4],[838,5],[946,4],[1065,4],[1293,5],[1796,5],[1821,3]]},"168":{"position":[[467,3],[611,4]]},"170":{"position":[[225,4],[460,5],[592,4],[991,5],[1076,4]]},"174":{"position":[[35,5]]},"178":{"position":[[359,5]]},"189":{"position":[[1368,4]]},"193":{"position":[[154,4],[422,5]]},"206":{"position":[[81,5]]},"212":{"position":[[848,3]]},"216":{"position":[[156,4]]},"225":{"position":[[193,3]]},"227":{"position":[[382,4],[513,4],[1083,4],[1157,4],[1234,4],[1293,4],[1407,4],[1441,4],[2519,5],[2625,4],[2702,4]]},"243":{"position":[[151,4],[363,4],[372,3]]},"247":{"position":[[118,4],[196,3]]},"249":{"position":[[608,3]]},"251":{"position":[[91,5]]},"253":{"position":[[653,5]]},"260":{"position":[[158,5]]},"262":{"position":[[13,4]]},"272":{"position":[[115,5]]},"284":{"position":[[396,4]]},"296":{"position":[[227,3],[545,4]]},"301":{"position":[[186,3]]},"329":{"position":[[249,4]]},"335":{"position":[[1373,4],[1922,4],[1968,5]]},"337":{"position":[[24,4]]},"339":{"position":[[76,5]]},"345":{"position":[[104,5],[721,5],[832,4]]},"351":{"position":[[29,4],[71,4]]},"359":{"position":[[20,5],[354,5],[658,4]]},"365":{"position":[[174,4],[570,4]]},"373":{"position":[[477,3]]},"377":{"position":[[426,3],[945,4]]},"390":{"position":[[332,3],[1253,3]]},"392":{"position":[[610,3],[648,3],[2746,3]]},"398":{"position":[[118,4],[627,4],[1265,4]]},"400":{"position":[[1553,4]]},"402":{"position":[[167,5]]},"407":{"position":[[315,5],[546,4]]},"413":{"position":[[1170,5]]},"415":{"position":[[739,5],[838,4]]},"429":{"position":[[185,5]]},"443":{"position":[[139,4]]},"459":{"position":[[17,4],[81,4]]},"461":{"position":[[0,5],[286,5]]},"463":{"position":[[67,4]]},"465":{"position":[[559,5],[2645,3],[2797,5],[2827,4],[3043,3],[3440,3],[3786,5],[3814,3],[4192,3]]},"468":{"position":[[167,3]]},"470":{"position":[[2182,5],[3331,5],[3554,6]]},"473":{"position":[[116,4]]},"477":{"position":[[98,5],[248,5],[518,5],[606,4],[737,3],[799,3]]},"481":{"position":[[442,6],[585,5]]},"500":{"position":[[657,4]]},"502":{"position":[[25,5]]},"504":{"position":[[199,4]]},"508":{"position":[[408,4]]},"516":{"position":[[24,4],[1025,5]]},"524":{"position":[[116,4],[149,5],[173,3]]},"532":{"position":[[76,4]]},"540":{"position":[[0,4]]},"550":{"position":[[103,5],[296,3]]},"572":{"position":[[28,4]]},"580":{"position":[[976,4]]},"588":{"position":[[464,4]]},"610":{"position":[[1088,3]]},"615":{"position":[[5,5],[247,5],[277,5],[321,5]]},"622":{"position":[[5,5],[252,5],[344,5],[389,5]]},"638":{"position":[[0,4],[100,5]]},"646":{"position":[[16,4],[105,4]]},"653":{"position":[[32,4],[157,4]]},"675":{"position":[[0,4],[62,5]]},"691":{"position":[[50,3]]},"699":{"position":[[104,4]]},"715":{"position":[[100,4]]},"721":{"position":[[87,4]]},"729":{"position":[[37,5]]},"747":{"position":[[150,4],[385,5]]},"749":{"position":[[35,5]]},"753":{"position":[[26,4],[78,4],[300,5]]},"757":{"position":[[72,4]]},"776":{"position":[[0,4]]},"791":{"position":[[51,4],[134,4]]},"799":{"position":[[81,4],[293,4],[302,3]]},"803":{"position":[[198,4]]},"811":{"position":[[0,4]]},"835":{"position":[[26,4],[149,4]]},"854":{"position":[[8,3],[80,4]]},"856":{"position":[[43,3]]},"858":{"position":[[16,4]]},"860":{"position":[[16,4]]},"862":{"position":[[16,4]]},"874":{"position":[[18,4]]},"882":{"position":[[255,5]]},"892":{"position":[[119,4]]},"894":{"position":[[78,4]]},"900":{"position":[[0,4]]},"917":{"position":[[692,5]]},"923":{"position":[[53,4],[267,3]]},"939":{"position":[[0,4],[218,5],[557,4],[814,4],[895,4],[1024,4]]},"941":{"position":[[89,3]]},"943":{"position":[[99,5],[168,3]]},"945":{"position":[[91,3],[183,3]]},"947":{"position":[[93,3],[189,3]]},"949":{"position":[[171,5],[230,3],[379,3]]},"951":{"position":[[1081,3]]},"985":{"position":[[73,4]]},"992":{"position":[[10,3]]},"996":{"position":[[0,4]]},"1006":{"position":[[116,3]]},"1014":{"position":[[12,4],[30,4],[88,5],[108,4]]},"1021":{"position":[[99,5],[176,3]]},"1029":{"position":[[0,4],[136,5]]},"1037":{"position":[[1146,5],[1256,4],[1356,4]]},"1039":{"position":[[437,3]]},"1041":{"position":[[337,5],[372,4]]},"1050":{"position":[[89,3]]},"1054":{"position":[[197,5]]},"1062":{"position":[[16,4]]},"1066":{"position":[[424,4]]},"1074":{"position":[[121,4],[160,4]]},"1082":{"position":[[233,4]]},"1090":{"position":[[0,4],[98,5],[156,5],[183,4]]},"1105":{"position":[[10,3]]},"1113":{"position":[[0,4]]},"1134":{"position":[[5,5]]},"1142":{"position":[[117,5]]},"1169":{"position":[[16,4],[105,4]]},"1177":{"position":[[16,4],[54,4],[92,3],[203,5]]},"1185":{"position":[[696,3],[893,5]]},"1189":{"position":[[232,5]]},"1195":{"position":[[252,3]]},"1199":{"position":[[1145,3]]},"1201":{"position":[[542,3]]},"1206":{"position":[[1011,3]]},"1212":{"position":[[899,3],[943,3],[994,3]]},"1223":{"position":[[1050,5],[1331,3]]},"1225":{"position":[[251,4],[407,3]]},"1234":{"position":[[109,3]]},"1250":{"position":[[2071,3],[2337,5],[2374,3]]},"1252":{"position":[[186,5]]},"1255":{"position":[[1050,4],[1094,3],[1889,5],[2102,3]]},"1257":{"position":[[44,4],[386,3],[411,3],[469,4],[781,5]]},"1269":{"position":[[221,3]]},"1274":{"position":[[547,5],[637,3],[1198,5],[1311,5]]},"1281":{"position":[[343,4]]},"1287":{"position":[[210,4],[234,3],[271,3]]},"1289":{"position":[[49,3],[214,4]]},"1303":{"position":[[58,3],[255,5]]},"1305":{"position":[[124,5]]},"1326":{"position":[[429,5]]},"1330":{"position":[[71,5]]},"1332":{"position":[[123,5],[416,3],[503,3],[720,4]]},"1334":{"position":[[34,3]]},"1336":{"position":[[271,4],[409,3]]},"1338":{"position":[[49,5],[115,5],[160,5]]},"1340":{"position":[[11,4]]},"1344":{"position":[[14,3],[1214,5]]},"1358":{"position":[[126,3],[181,3]]},"1364":{"position":[[3,3]]},"1366":{"position":[[101,3],[260,3]]},"1368":{"position":[[734,4]]},"1370":{"position":[[280,3]]},"1374":{"position":[[35,4],[220,4],[305,3]]},"1380":{"position":[[155,3]]},"1386":{"position":[[176,5]]},"1394":{"position":[[50,3]]},"1397":{"position":[[442,5]]},"1399":{"position":[[725,5],[1243,3]]}}}],["usabl",{"_index":3000,"t":{"1279":{"position":[[89,10]]}}}],["usag",{"_index":680,"t":{"95":{"position":[[103,5]]},"105":{"position":[[43,5]]},"139":{"position":[[301,5]]},"187":{"position":[[261,5]]},"189":{"position":[[7,5],[92,6]]},"193":{"position":[[380,5]]},"212":{"position":[[257,5],[438,6],[505,5],[627,5],[781,5],[795,5],[974,6]]},"216":{"position":[[414,5]]},"227":{"position":[[541,5]]},"247":{"position":[[720,5]]},"253":{"position":[[792,5]]},"266":{"position":[[371,5]]},"278":{"position":[[12,5]]},"282":{"position":[[18,5],[56,5],[205,5],[417,5]]},"294":{"position":[[111,6]]},"296":{"position":[[51,6]]},"321":{"position":[[269,5]]},"335":{"position":[[911,5]]},"359":{"position":[[75,5]]},"388":{"position":[[492,5]]},"400":{"position":[[181,5]]},"411":{"position":[[396,5]]},"415":{"position":[[24,5]]},"429":{"position":[[286,5],[884,5]]},"435":{"position":[[236,6]]},"465":{"position":[[2766,5]]},"486":{"position":[[156,6]]},"488":{"position":[[34,6],[1453,6]]},"490":{"position":[[48,6]]},"492":{"position":[[53,6]]},"494":{"position":[[68,6],[485,5]]},"496":{"position":[[68,6]]},"508":{"position":[[86,5],[151,6],[270,5],[497,5]]},"524":{"position":[[76,5]]},"550":{"position":[[11,5]]},"566":{"position":[[84,5]]},"568":{"position":[[91,5],[193,5],[295,5]]},"580":{"position":[[248,5]]},"687":{"position":[[0,5]]},"695":{"position":[[64,5]]},"715":{"position":[[11,5],[66,5],[226,6],[252,5],[391,5],[678,5],[712,5]]},"721":{"position":[[103,5],[187,5],[216,5]]},"723":{"position":[[34,5]]},"749":{"position":[[464,6]]},"776":{"position":[[54,5]]},"799":{"position":[[496,6]]},"805":{"position":[[88,5]]},"807":{"position":[[106,5],[194,5],[313,5]]},"811":{"position":[[28,5]]},"819":{"position":[[403,6]]},"900":{"position":[[28,5]]},"935":{"position":[[0,5],[43,5]]},"949":{"position":[[26,5],[263,5]]},"996":{"position":[[55,5]]},"1037":{"position":[[34,5]]},"1039":{"position":[[39,5],[103,5]]},"1109":{"position":[[887,6]]},"1185":{"position":[[476,5]]},"1199":{"position":[[343,5]]},"1223":{"position":[[342,5]]},"1242":{"position":[[975,5]]},"1250":{"position":[[57,5],[849,5]]},"1257":{"position":[[887,5]]},"1272":{"position":[[93,5]]},"1274":{"position":[[1338,5]]},"1403":{"position":[[439,6]]}}}],["usage/emiss",{"_index":2210,"t":{"516":{"position":[[1079,15]]}}}],["used,th",{"_index":2240,"t":{"580":{"position":[[182,8]]}}}],["user",{"_index":105,"t":{"8":{"position":[[176,4]]},"15":{"position":[[69,5]]},"47":{"position":[[1386,4],[2629,6],[2697,4]]},"56":{"position":[[217,5],[339,4]]},"58":{"position":[[257,5]]},"68":{"position":[[229,5]]},"79":{"position":[[394,5],[510,4]]},"87":{"position":[[907,4]]},"89":{"position":[[109,4]]},"227":{"position":[[40,4]]},"234":{"position":[[446,5]]},"253":{"position":[[180,4]]},"260":{"position":[[56,4]]},"321":{"position":[[50,4],[127,4]]},"371":{"position":[[424,4]]},"388":{"position":[[768,4]]},"392":{"position":[[305,4]]},"429":{"position":[[776,4]]},"479":{"position":[[143,4]]},"1037":{"position":[[1331,4]]},"1199":{"position":[[1321,4]]},"1255":{"position":[[422,5]]},"1272":{"position":[[1531,4]]}}}],["user.email",{"_index":3208,"t":{"1378":{"position":[[60,10]]}}}],["user.nam",{"_index":3207,"t":{"1378":{"position":[[20,9]]}}}],["usual",{"_index":1336,"t":{"176":{"position":[[200,7]]},"664":{"position":[[249,7]]}}}],["utf",{"_index":256,"t":{"31":{"position":[[202,4]]},"33":{"position":[[206,4],[225,3]]}}}],["util",{"_index":2886,"t":{"1242":{"position":[[22,5]]}}}],["utilis",{"_index":1177,"t":{"151":{"position":[[386,9]]},"153":{"position":[[288,9]]},"159":{"position":[[191,7]]},"264":{"position":[[38,7]]},"359":{"position":[[1504,8]]},"479":{"position":[[780,8]]},"721":{"position":[[148,9]]},"892":{"position":[[25,8]]},"1021":{"position":[[520,8]]},"1072":{"position":[[101,8]]},"1074":{"position":[[25,8]]},"1082":{"position":[[25,8]]}}}],["v1",{"_index":2869,"t":{"1236":{"position":[[24,2]]}}}],["v2",{"_index":2465,"t":{"1193":{"position":[[27,2],[76,2]]},"1195":{"position":[[80,2]]},"1199":{"position":[[1128,2]]},"1201":{"position":[[152,2],[428,2]]},"1204":{"position":[[163,2],[232,2]]},"1206":{"position":[[11,2],[68,2],[267,2],[421,2],[510,2],[557,2],[803,2],[987,2],[1082,2]]},"1212":{"position":[[714,2],[839,2],[886,2]]},"1225":{"position":[[16,2]]},"1232":{"position":[[53,2]]},"1236":{"position":[[30,2]]},"1242":{"position":[[58,2],[536,2]]},"1252":{"position":[[80,2]]}}}],["v3",{"_index":2938,"t":{"1252":{"position":[[23,2]]}}}],["v5.3.1",{"_index":662,"t":{"91":{"position":[[275,6]]}}}],["v7",{"_index":290,"t":{"43":{"position":[[76,2]]}}}],["v7.1",{"_index":2213,"t":{"516":{"position":[[1282,4],[1325,4],[1407,4],[1500,4]]}}}],["v7.2",{"_index":2212,"t":{"516":{"position":[[1183,5]]},"856":{"position":[[129,5]]}}}],["v7.4.1",{"_index":2994,"t":{"1274":{"position":[[1011,6]]}}}],["v7.4.2",{"_index":2996,"t":{"1274":{"position":[[1161,6],[1280,6]]}}}],["v7.4.3",{"_index":2998,"t":{"1274":{"position":[[1465,7]]}}}],["v8",{"_index":291,"t":{"43":{"position":[[82,3]]},"47":{"position":[[606,2]]},"52":{"position":[[76,2]]},"1279":{"position":[[7,2]]}}}],["v8.0",{"_index":2214,"t":{"516":{"position":[[1581,4],[1662,4]]},"1291":{"position":[[38,5]]}}}],["v8.1",{"_index":470,"t":{"52":{"position":[[82,5]]},"443":{"position":[[151,4]]},"516":{"position":[[1780,4]]},"880":{"position":[[40,5]]},"1291":{"position":[[7,4]]},"1301":{"position":[[38,5]]}}}],["v8.2",{"_index":2215,"t":{"516":{"position":[[1838,4],[1901,4]]},"1301":{"position":[[7,4]]},"1307":{"position":[[38,5]]}}}],["v8.3",{"_index":2644,"t":{"1208":{"position":[[382,4]]},"1307":{"position":[[7,4]]}}}],["v8.4",{"_index":2495,"t":{"1197":{"position":[[97,4]]},"1208":{"position":[[145,4]]}}}],["v_\\mathrm{1}^n",{"_index":1982,"t":{"465":{"position":[[1176,14]]}}}],["v_\\mathrm{2}^np1​v1n​=p2​v2n",{"_index":1984,"t":{"465":{"position":[[1206,30]]}}}],["valid",{"_index":325,"t":{"45":{"position":[[961,6],[1042,5],[5113,5]]},"54":{"position":[[403,5]]},"87":{"position":[[113,5]]},"89":{"position":[[65,8],[85,8],[159,6],[312,6],[575,8],[1116,8],[1229,8]]},"115":{"position":[[888,5]]},"470":{"position":[[2241,20],[3208,10]]},"479":{"position":[[36,5],[90,6],[230,8]]},"516":{"position":[[238,5]]},"610":{"position":[[204,5],[443,6]]},"707":{"position":[[769,5]]},"737":{"position":[[13,5]]},"882":{"position":[[13,5],[727,5]]},"951":{"position":[[197,5],[436,6]]},"1054":{"position":[[734,5]]},"1195":{"position":[[203,10]]},"1201":{"position":[[227,8],[292,8]]},"1210":{"position":[[173,10]]},"1219":{"position":[[36,10],[798,5],[829,10],[901,5],[917,8]]},"1223":{"position":[[462,10]]},"1242":{"position":[[235,5]]},"1265":{"position":[[256,5]]},"1267":{"position":[[395,8],[488,10]]},"1269":{"position":[[11,10],[60,10],[138,10]]},"1272":{"position":[[1646,9]]},"1274":{"position":[[233,5],[577,5]]}}}],["valu",{"_index":216,"t":{"25":{"position":[[99,6]]},"29":{"position":[[73,6]]},"47":{"position":[[2019,7]]},"107":{"position":[[80,6],[344,6],[419,6],[461,6],[504,6],[553,6],[622,6],[686,6],[710,6],[761,6],[786,6]]},"115":{"position":[[3297,5],[3804,5]]},"117":{"position":[[1950,6],[2025,6],[2067,6],[2110,6],[2159,6],[2228,6],[2292,6],[2316,6],[2367,6],[2392,6]]},"131":{"position":[[80,6],[344,6],[480,6],[685,6],[737,6],[811,6],[897,6],[956,6],[981,6],[1247,7]]},"139":{"position":[[2791,5]]},"141":{"position":[[732,6],[868,6],[1073,6],[1125,6],[1199,6],[1285,6],[1344,6],[1369,6]]},"153":{"position":[[511,5],[569,5]]},"155":{"position":[[61,5],[141,5]]},"157":{"position":[[202,6]]},"159":{"position":[[1984,6]]},"189":{"position":[[1065,6],[1175,6]]},"193":{"position":[[109,6]]},"206":{"position":[[383,6]]},"230":{"position":[[149,6]]},"239":{"position":[[233,6]]},"241":{"position":[[333,6]]},"247":{"position":[[316,5]]},"253":{"position":[[663,6]]},"341":{"position":[[368,6],[428,6],[500,6]]},"347":{"position":[[371,6],[431,6],[503,6],[600,6],[660,6],[732,6]]},"359":{"position":[[1192,6]]},"365":{"position":[[450,6]]},"367":{"position":[[366,5]]},"392":{"position":[[1845,5],[2258,5]]},"396":{"position":[[900,5],[1402,5],[1854,5]]},"398":{"position":[[1183,6],[1215,5]]},"429":{"position":[[27,6],[106,5],[200,6],[241,6],[701,6],[839,7],[856,6],[922,5]]},"431":{"position":[[84,5],[131,6],[194,7]]},"445":{"position":[[434,6]]},"455":{"position":[[28,6],[117,6]]},"457":{"position":[[33,6],[117,6],[152,6]]},"461":{"position":[[67,6],[94,6],[365,6],[411,6]]},"465":{"position":[[2211,6]]},"470":{"position":[[2871,6]]},"479":{"position":[[424,5],[767,5]]},"488":{"position":[[568,6],[1052,8],[1225,8]]},"494":{"position":[[1031,6]]},"510":{"position":[[28,7],[52,7]]},"574":{"position":[[10,7]]},"591":{"position":[[369,5]]},"596":{"position":[[768,5]]},"604":{"position":[[369,5]]},"610":{"position":[[873,6]]},"617":{"position":[[174,6],[234,6],[306,6]]},"624":{"position":[[177,6],[237,6],[309,6],[406,6],[466,6],[538,6]]},"653":{"position":[[265,6],[346,6],[424,7]]},"656":{"position":[[179,7]]},"737":{"position":[[264,5]]},"757":{"position":[[9,5]]},"759":{"position":[[8,7]]},"778":{"position":[[30,5]]},"835":{"position":[[251,6],[326,6],[410,7]]},"847":{"position":[[58,6],[167,6],[403,6],[429,6],[485,6],[571,6]]},"854":{"position":[[88,5],[104,5],[127,5]]},"860":{"position":[[49,5],[65,5]]},"862":{"position":[[43,5],[59,5]]},"874":{"position":[[225,6]]},"882":{"position":[[1048,7],[1250,7]]},"896":{"position":[[139,5],[216,5]]},"907":{"position":[[154,5]]},"909":{"position":[[88,5]]},"917":{"position":[[248,6],[525,5]]},"951":{"position":[[866,6]]},"964":{"position":[[79,6]]},"985":{"position":[[51,5]]},"1006":{"position":[[191,5]]},"1068":{"position":[[351,5],[853,5]]},"1090":{"position":[[112,5],[289,6]]},"1120":{"position":[[182,7]]},"1122":{"position":[[94,7]]},"1127":{"position":[[185,7]]},"1129":{"position":[[82,6]]},"1136":{"position":[[84,5],[131,6],[194,7]]},"1242":{"position":[[170,6]]},"1250":{"position":[[2048,6]]},"1265":{"position":[[262,5]]},"1374":{"position":[[366,7]]}}}],["value/express",{"_index":2354,"t":{"896":{"position":[[428,17]]},"1092":{"position":[[36,17]]}}}],["valueerror",{"_index":2362,"t":{"917":{"position":[[257,10]]}}}],["valv",{"_index":1372,"t":{"189":{"position":[[558,7]]},"212":{"position":[[1471,6]]},"351":{"position":[[525,6]]},"392":{"position":[[670,5],[1366,5]]},"411":{"position":[[548,5]]},"413":{"position":[[1191,6]]},"465":{"position":[[3803,7]]}}}],["valve)/recircul",{"_index":1491,"t":{"212":{"position":[[1450,20]]}}}],["var.base_production_load_mw",{"_index":857,"t":{"115":{"position":[[297,28]]},"117":{"position":[[2726,28]]}}}],["var.flare_a_fuel_rate_sm3_day",{"_index":898,"t":{"115":{"position":[[3484,30]]},"117":{"position":[[4269,30]]}}}],["var.flare_b_fuel_rate_sm3_day",{"_index":899,"t":{"115":{"position":[[3991,30]]},"117":{"position":[[4705,30]]}}}],["var.flare_fuel_rate_sm3_day",{"_index":1074,"t":{"139":{"position":[[2985,28]]},"141":{"position":[[2571,28]]}}}],["var.gas_export_condit",{"_index":902,"t":{"115":{"position":[[4437,25]]},"117":{"position":[[4861,25]]}}}],["var.gas_export_rate_sm3_per_day",{"_index":871,"t":{"115":{"position":[[1279,32],[4469,32]]},"117":{"position":[[3030,32],[4893,32]]},"139":{"position":[[3487,32]]},"141":{"position":[[2742,32]]}}}],["var.gas_injection_rate_sm3_per_day",{"_index":1060,"t":{"139":{"position":[[665,35]]},"141":{"position":[[1813,35]]}}}],["var.gas_ratea",{"_index":1973,"t":{"461":{"position":[[248,14]]}}}],["var.gas_rateb",{"_index":1974,"t":{"461":{"position":[[267,14]]}}}],["var.hydrocarbon_export_sm3_per_day",{"_index":852,"t":{"109":{"position":[[298,35],[631,35],[789,35]]},"111":{"position":[[415,35]]},"113":{"position":[[351,35]]},"117":{"position":[[2452,35],[4333,35]]},"133":{"position":[[429,35]]},"141":{"position":[[1429,35]]}}}],["var.produced_water_reinjection_condit",{"_index":1061,"t":{"139":{"position":[[1392,41]]},"141":{"position":[[2077,41]]}}}],["var.produced_water_reinjection_total_system_rate_m3_per_day",{"_index":1062,"t":{"139":{"position":[[1467,60]]},"141":{"position":[[2152,60]]}}}],["var.salt_water_inject",{"_index":1976,"t":{"461":{"position":[[418,25]]},"1250":{"position":[[2110,25],[2187,26]]}}}],["var.salt_water_injection_rate_m3_per_day",{"_index":1057,"t":{"131":{"position":[[1281,41]]},"141":{"position":[[2441,41]]}}}],["var.sea_water_injection_rate_m3_per_day",{"_index":1073,"t":{"139":{"position":[[2636,40]]}}}],["var.variable_name1",{"_index":2309,"t":{"733":{"position":[[185,19]]}}}],["var.variable_name2",{"_index":2310,"t":{"733":{"position":[[209,19]]}}}],["var.water_injection_condit",{"_index":888,"t":{"115":{"position":[[2314,30],[3027,30]]},"117":{"position":[[3535,30],[4046,30]]}}}],["var.water_injection_r",{"_index":887,"t":{"115":{"position":[[2277,25]]},"117":{"position":[[3498,25]]}}}],["vari",{"_index":719,"t":{"95":{"position":[[1229,7]]},"107":{"position":[[957,7]]},"253":{"position":[[63,4]]},"262":{"position":[[134,6]]},"388":{"position":[[265,7],[303,5]]},"411":{"position":[[66,6]]},"441":{"position":[[844,7]]},"516":{"position":[[590,4]]},"795":{"position":[[40,7]]},"815":{"position":[[91,7]]},"949":{"position":[[452,4]]},"985":{"position":[[244,7]]},"992":{"position":[[46,7]]},"1006":{"position":[[197,4]]},"1090":{"position":[[233,4]]},"1105":{"position":[[46,7]]},"1109":{"position":[[758,7]]}}}],["variabl",{"_index":718,"t":{"95":{"position":[[1113,8],[1311,8],[1431,8],[1626,8],[1814,8],[1898,8],[2072,8]]},"97":{"position":[[192,9],[204,9],[384,10]]},"99":{"position":[[14,10],[164,9]]},"107":{"position":[[46,10],[200,8],[279,10],[301,10],[965,9]]},"109":{"position":[[289,8],[350,9]]},"115":{"position":[[463,8],[1515,8],[1628,8],[1704,9],[3354,8],[3861,8],[4056,8],[4168,8]]},"117":{"position":[[1907,10]]},"121":{"position":[[741,8],[896,8],[1014,8],[1207,8],[1481,8]]},"123":{"position":[[162,9],[174,9],[354,10]]},"125":{"position":[[14,10],[164,9]]},"131":{"position":[[46,10],[200,8],[279,10],[301,10],[1323,8]]},"133":{"position":[[289,8],[314,9]]},"139":{"position":[[460,8],[867,8],[982,8],[1075,9],[2393,8],[2600,10],[2848,8],[3029,8],[3136,8]]},"141":{"position":[[689,10],[2405,10]]},"145":{"position":[[581,8],[733,8],[880,8]]},"149":{"position":[[14,10]]},"151":{"position":[[218,8]]},"159":{"position":[[498,8]]},"168":{"position":[[187,10],[649,9],[668,9],[1089,10]]},"170":{"position":[[839,8],[908,9]]},"187":{"position":[[35,8]]},"189":{"position":[[201,8],[443,8]]},"193":{"position":[[455,8]]},"198":{"position":[[20,8]]},"206":{"position":[[426,9],[453,8]]},"208":{"position":[[105,8],[186,9]]},"210":{"position":[[485,10],[624,8],[649,9],[1733,10]]},"212":{"position":[[1170,10]]},"227":{"position":[[743,10],[1396,10],[1425,9]]},"230":{"position":[[122,10]]},"234":{"position":[[4,9],[53,8],[466,9],[624,9],[694,9]]},"239":{"position":[[191,10]]},"241":{"position":[[316,10]]},"251":{"position":[[46,9],[171,9],[365,9]]},"260":{"position":[[87,10]]},"272":{"position":[[201,8],[240,8]]},"278":{"position":[[63,8]]},"280":{"position":[[200,8]]},"321":{"position":[[81,10],[164,8]]},"323":{"position":[[152,10],[180,9],[227,9]]},"325":{"position":[[88,10]]},"327":{"position":[[165,10]]},"335":{"position":[[35,8],[1419,8],[1624,8],[2036,8]]},"337":{"position":[[172,8]]},"345":{"position":[[4,8],[666,8],[729,8]]},"349":{"position":[[620,8],[702,8]]},"355":{"position":[[306,8]]},"365":{"position":[[6,8],[724,8],[765,8]]},"369":{"position":[[145,8],[194,8],[232,8]]},"371":{"position":[[15,8]]},"392":{"position":[[318,8],[420,8]]},"398":{"position":[[1347,8]]},"441":{"position":[[137,10],[162,11],[335,10],[819,9]]},"447":{"position":[[106,9]]},"449":{"position":[[183,8]]},"451":{"position":[[9,9]]},"453":{"position":[[0,9]]},"455":{"position":[[0,10],[11,9],[64,10],[75,9]]},"457":{"position":[[0,10],[72,10]]},"459":{"position":[[0,9],[108,10]]},"461":{"position":[[6,9],[45,10],[292,9],[322,9],[332,10]]},"465":{"position":[[3063,8],[3471,8],[4233,8]]},"508":{"position":[[552,8]]},"516":{"position":[[1214,8]]},"588":{"position":[[52,8],[590,8],[631,8],[773,8],[830,8]]},"602":{"position":[[64,8],[262,8],[303,8],[445,8],[502,8]]},"622":{"position":[[22,8],[86,8]]},"646":{"position":[[284,8]]},"653":{"position":[[377,10]]},"713":{"position":[[311,9]]},"717":{"position":[[362,10],[496,10]]},"727":{"position":[[0,9],[61,9]]},"733":{"position":[[154,8]]},"823":{"position":[[200,8],[272,10]]},"835":{"position":[[357,10]]},"894":{"position":[[1209,8]]},"1109":{"position":[[51,10],[76,11],[249,10],[733,9]]},"1169":{"position":[[283,8]]},"1175":{"position":[[0,9]]},"1177":{"position":[[31,9],[118,9],[209,9]]},"1185":{"position":[[89,8]]},"1212":{"position":[[588,8]]},"1238":{"position":[[254,9]]},"1250":{"position":[[1170,8],[1571,8],[1634,8],[1927,9],[2015,10],[2080,8],[2225,9]]},"1257":{"position":[[134,8]]},"1265":{"position":[[55,8],[130,8]]},"1267":{"position":[[51,8],[502,8],[536,8]]},"1274":{"position":[[1236,8]]},"1320":{"position":[[250,8]]},"1324":{"position":[[90,8],[306,8]]},"1326":{"position":[[333,8]]},"1364":{"position":[[197,8]]}}}],["variable + + + + +Search the documentation + + + + +
    +

    Search the documentation

    + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000..45e1b4f152 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://equinor.github.io/ecalc/docs/tagsweekly0.5https://equinor.github.io/ecalc/docs/tags/e-calcweekly0.5https://equinor.github.io/ecalc/docs/tags/releaseweekly0.5https://equinor.github.io/ecalc/searchweekly0.5https://equinor.github.io/ecalc/versionsweekly0.5https://equinor.github.io/ecalc/docs/about/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/faqweekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/library/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/yaml/weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v7_to_v8weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8_to_v81weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-1_to_v8-2weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-2_to_v8-3weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-3_to_v8-4weekly0.5https://equinor.github.io/ecalc/docs/about/miscellaneous/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/advancedweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/drogonweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/simpleweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/generator_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_chartsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/tabularweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/file_format_and_syntax/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressionsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/fuel_typesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressorweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_systemweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressuresweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/direct_consumersweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressuresweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/fluid_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/turbine_modelingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/time_seriesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/variablesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/compressor_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/pump_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/workflow/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/workflow/generic_workflowweekly0.5https://equinor.github.io/ecalc/docs/about/references/weekly0.5https://equinor.github.io/ecalc/docs/about/references/api/weekly0.5https://equinor.github.io/ecalc/docs/about/references/cli_referenceweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/weekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ADJUSTMENTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CATEGORYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONDITIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONDITIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSTANTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSUMERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONTROL_MARGINweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNITweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CROSSOVERweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CURVEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CURVESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DIRECT_EMITTERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DISCHARGE_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EFFICIENCYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ELECTRICITY2FUELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSION_NAMEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSION_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMITTER_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENDweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENERGYFUNCTIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EXPRESSIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EXTRAPOLATIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FACILITY_INPUTSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FACTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FILEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FLUID_DENSITYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FLUID_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUEL_TYPESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELCONSUMERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELRATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/GENERATORSETSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HCEXPORTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HEADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HEAD_MARGINweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/includeweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INLET_TEMPERATUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INSTALLATIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INTERPOLATION_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/LOADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/MODELSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/NAMEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/POWERLOSSFACTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/PRICEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/PUMPSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/QUOTAweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATE_FRACTIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATE_PER_STREAMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/REGULARITYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STAGESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STARTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STREAMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STREAMSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/SUCTION_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TAXweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TIME_SERIESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_LOADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/UNITSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/VARIABLESweekly0.5https://equinor.github.io/ecalc/docs/category/documentationweekly0.5https://equinor.github.io/ecalc/docs/category/guidesweekly0.5https://equinor.github.io/ecalc/docs/changelog/weekly0.5https://equinor.github.io/ecalc/docs/changelog/latestweekly0.5https://equinor.github.io/ecalc/docs/changelog/separatorweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-0-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-1-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-2-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-3-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-4-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-5-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-6-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.0-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.1-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.2-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.3-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.4-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.5-releaseweekly0.5https://equinor.github.io/ecalc/docs/contribute/documentation-guide/documentationweekly0.5https://equinor.github.io/ecalc/docs/contribute/documentation-guide/markdownweekly0.5https://equinor.github.io/ecalc/docs/contribute/get-startedweekly0.5https://equinor.github.io/ecalc/docs/contribute/guides/conventional-commitsweekly0.5https://equinor.github.io/ecalc/docs/contribute/guides/gitweekly0.5https://equinor.github.io/ecalc/weekly0.5 \ No newline at end of file diff --git a/versions/index.html b/versions/index.html new file mode 100644 index 0000000000..5b305ef11f --- /dev/null +++ b/versions/index.html @@ -0,0 +1,16 @@ + + + + + +Versions | eCalc™ Docs + + + + +
    +

    eCalc documentation versions

    Current version (Stable)

    Here you can find the documentation for current released version.

    NextDocumentationRelease Notes
    + + + + \ No newline at end of file
  • yt|;v>+BVefT1O_slmt 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�-q?%ckZO8uMasO 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 literal 0 HcmV?d00001 diff --git a/assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png b/assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png new file mode 100644 index 0000000000000000000000000000000000000000..25dbfc51024d0cc8896201680eb4d3fe345e655e GIT binary patch literal 59154 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 Ybd`DA$CodSqCShf+zHv_gZgg&2e{-c7XSbN literal 0 HcmV?d00001 diff --git a/assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG b/assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG new file mode 100644 index 0000000000000000000000000000000000000000..efd6e51377eca031930cc6fd5a54007f71914d7f GIT binary patch literal 12910 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 literal 0 HcmV?d00001 diff --git a/assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG b/assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..302a6588ea0110e02cd6875449793c60a10872ab GIT binary patch literal 14284 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 iPYGCJA?fDs+5Zm>nHLYJNs5dB0000AL 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